ETH Price: $3,347.88 (-0.95%)

Contract

0x4F2595C35e8fb48B4a748a3B87F8C60C0c941DD5
 

Overview

ETH Balance

0.006 ETH

Eth Value

$20.09 (@ $3,347.88/ETH)

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Buy Token214988002024-12-28 5:13:4726 mins ago1735362827IN
0x4F2595C3...C0c941DD5
0.0001 ETH0.000258063.64242709
Buy Token214985062024-12-28 4:14:471 hr ago1735359287IN
0x4F2595C3...C0c941DD5
0.03 ETH0.000607994.08708839
Buy Token214982302024-12-28 3:19:232 hrs ago1735355963IN
0x4F2595C3...C0c941DD5
0.0001 ETH0.000235383.32240767
Buy Token214937242024-12-27 12:14:1117 hrs ago1735301651IN
0x4F2595C3...C0c941DD5
0.0151 ETH0.000492617.23783055
Buy Token214936822024-12-27 12:05:4717 hrs ago1735301147IN
0x4F2595C3...C0c941DD5
0.003 ETH0.000469426.62461146
Buy Token214935442024-12-27 11:38:1118 hrs ago1735299491IN
0x4F2595C3...C0c941DD5
0.0001 ETH0.000465816.57472754
Buy Token214930062024-12-27 9:49:5919 hrs ago1735292999IN
0x4F2595C3...C0c941DD5
0 ETH0.000598336.08326822
Buy Token214912662024-12-27 3:59:1125 hrs ago1735271951IN
0x4F2595C3...C0c941DD5
0.015 ETH0.000283353.99872917
Buy Token214909972024-12-27 3:04:5926 hrs ago1735268699IN
0x4F2595C3...C0c941DD5
0.0001 ETH0.000427556.03470586
Buy Token214903332024-12-27 0:51:2328 hrs ago1735260683IN
0x4F2595C3...C0c941DD5
0.0001 ETH0.00034744.90340954
Buy Token214902742024-12-27 0:39:3529 hrs ago1735259975IN
0x4F2595C3...C0c941DD5
0.003 ETH0.000352574.00829001
Buy Token214882982024-12-26 18:01:3535 hrs ago1735236095IN
0x4F2595C3...C0c941DD5
0.003 ETH0.000836399.50873099
Buy Token214880222024-12-26 17:06:1136 hrs ago1735232771IN
0x4F2595C3...C0c941DD5
0.0001 ETH0.000789311.14061972
Buy Token214863972024-12-26 11:39:4742 hrs ago1735213187IN
0x4F2595C3...C0c941DD5
0.0001 ETH0.000496727.01098104
Buy Token214861922024-12-26 10:58:3542 hrs ago1735210715IN
0x4F2595C3...C0c941DD5
0.0033 ETH0.000887215.96361545
Buy Token214851872024-12-26 7:36:4746 hrs ago1735198607IN
0x4F2595C3...C0c941DD5
0.0045 ETH0.00045216.38022883
Buy Token214845962024-12-26 5:37:232 days ago1735191443IN
0x4F2595C3...C0c941DD5
0.025 ETH0.000640054.30229491
Buy Token214842802024-12-26 4:33:592 days ago1735187639IN
0x4F2595C3...C0c941DD5
0 ETH0.00101415.75364899
Buy Token214840312024-12-26 3:43:472 days ago1735184627IN
0x4F2595C3...C0c941DD5
0.04 ETH0.000745125.00895196
Buy Token214833042024-12-26 1:17:112 days ago1735175831IN
0x4F2595C3...C0c941DD5
0.0026 ETH0.000667044.48373644
Buy Token214829072024-12-25 23:56:352 days ago1735170995IN
0x4F2595C3...C0c941DD5
0.0001 ETH0.000321494.53771278
Buy Token214822962024-12-25 21:53:472 days ago1735163627IN
0x4F2595C3...C0c941DD5
0.0001 ETH0.000268463.78919057
Buy Token214816472024-12-25 19:42:472 days ago1735155767IN
0x4F2595C3...C0c941DD5
0.02 ETH0.000550266.25658152
Buy Token214796932024-12-25 13:09:352 days ago1735132175IN
0x4F2595C3...C0c941DD5
0.025 ETH0.000767395.15822408
Buy Token214796352024-12-25 12:57:472 days ago1735131467IN
0x4F2595C3...C0c941DD5
0.03 ETH0.000435864.95583823
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block
From
To
214988002024-12-28 5:13:4726 mins ago1735362827
0x4F2595C3...C0c941DD5
0.0001 ETH
214985062024-12-28 4:14:471 hr ago1735359287
0x4F2595C3...C0c941DD5
0.03 ETH
214982302024-12-28 3:19:232 hrs ago1735355963
0x4F2595C3...C0c941DD5
0.0001 ETH
214937242024-12-27 12:14:1117 hrs ago1735301651
0x4F2595C3...C0c941DD5
0.0151 ETH
214936822024-12-27 12:05:4717 hrs ago1735301147
0x4F2595C3...C0c941DD5
0.003 ETH
214935442024-12-27 11:38:1118 hrs ago1735299491
0x4F2595C3...C0c941DD5
0.0001 ETH
214912662024-12-27 3:59:1125 hrs ago1735271951
0x4F2595C3...C0c941DD5
0.015 ETH
214909972024-12-27 3:04:5926 hrs ago1735268699
0x4F2595C3...C0c941DD5
0.0001 ETH
214903332024-12-27 0:51:2328 hrs ago1735260683
0x4F2595C3...C0c941DD5
0.0001 ETH
214902742024-12-27 0:39:3529 hrs ago1735259975
0x4F2595C3...C0c941DD5
0.003 ETH
214882982024-12-26 18:01:3535 hrs ago1735236095
0x4F2595C3...C0c941DD5
0.003 ETH
214880222024-12-26 17:06:1136 hrs ago1735232771
0x4F2595C3...C0c941DD5
0.0001 ETH
214863972024-12-26 11:39:4742 hrs ago1735213187
0x4F2595C3...C0c941DD5
0.0001 ETH
214861922024-12-26 10:58:3542 hrs ago1735210715
0x4F2595C3...C0c941DD5
0.0033 ETH
214851872024-12-26 7:36:4746 hrs ago1735198607
0x4F2595C3...C0c941DD5
0.0045 ETH
214845962024-12-26 5:37:232 days ago1735191443
0x4F2595C3...C0c941DD5
0.025 ETH
214840312024-12-26 3:43:472 days ago1735184627
0x4F2595C3...C0c941DD5
0.04 ETH
214833042024-12-26 1:17:112 days ago1735175831
0x4F2595C3...C0c941DD5
0.0026 ETH
214829072024-12-25 23:56:352 days ago1735170995
0x4F2595C3...C0c941DD5
0.0001 ETH
214822962024-12-25 21:53:472 days ago1735163627
0x4F2595C3...C0c941DD5
0.0001 ETH
214816472024-12-25 19:42:472 days ago1735155767
0x4F2595C3...C0c941DD5
0.02 ETH
214796932024-12-25 13:09:352 days ago1735132175
0x4F2595C3...C0c941DD5
0.025 ETH
214796352024-12-25 12:57:472 days ago1735131467
0x4F2595C3...C0c941DD5
0.03 ETH
214790462024-12-25 10:59:232 days ago1735124363
0x4F2595C3...C0c941DD5
0.0001 ETH
214776922024-12-25 6:27:112 days ago1735108031
0x4F2595C3...C0c941DD5
0.0001 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Presale

Compiler Version
v0.8.0+commit.c7dfd78e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

/**
 *Submitted for verification at BscScan.com on 2023-11-16
 */

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

library SafeMath {
    function tryAdd(
        uint256 a,
        uint256 b
    ) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    function trySub(
        uint256 a,
        uint256 b
    ) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    function tryMul(
        uint256 a,
        uint256 b
    ) internal pure returns (bool, uint256) {
        unchecked {
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    function tryDiv(
        uint256 a,
        uint256 b
    ) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    function tryMod(
        uint256 a,
        uint256 b
    ) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

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

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

    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

pragma solidity ^0.8.0;

interface IERC20 {
    function totalSupply() external view returns (uint256);

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

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

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

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

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

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

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

pragma solidity ^0.8.0;

abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

pragma solidity ^0.8.0;

abstract contract Ownable is Context {
    address private _owner;

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

    constructor() {
        _transferOwnership(_msgSender());
    }

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

    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(
            newOwner != address(0),
            "Ownable: new owner is the zero address"
        );
        _transferOwnership(newOwner);
    }

    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

pragma solidity ^0.8.0;

contract OwnerWithdrawable is Ownable {
    using SafeMath for uint256;
    using SafeERC20 for IERC20;

    receive() external payable {}

    fallback() external payable {}

    function withdraw(address token, uint256 amt) public onlyOwner {
        IERC20(token).safeTransfer(msg.sender, amt);
    }

    function withdrawAll(address token) public onlyOwner {
        uint256 amt = IERC20(token).balanceOf(address(this));
        withdraw(token, amt);
    }

    function withdrawCurrency(uint256 amt) public onlyOwner {
        payable(msg.sender).transfer(amt);
    }

    // function deposit(address token, uint256 amt) public onlyOwner {
    //     uint256 allowance = IERC20(token).allowance(msg.sender, address(this));
    //     require(allowance >= amt, "Check the token allowance");
    //     IERC20(token).transferFrom(owner(), address(this), amt);
    // }
}

pragma solidity ^0.8.0;

library Address {
    function isContract(address account) internal view returns (bool) {
        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }

    function sendValue(address payable recipient, uint256 amount) internal {
        require(
            address(this).balance >= amount,
            "Address: insufficient balance"
        );

        (bool success, ) = recipient.call{value: amount}("");
        require(
            success,
            "Address: unable to send value, recipient may have reverted"
        );
    }

    function functionCall(
        address target,
        bytes memory data
    ) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }

    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return
            functionCallWithValue(
                target,
                data,
                value,
                "Address: low-level call with value failed"
            );
    }

    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(
            address(this).balance >= value,
            "Address: insufficient balance for call"
        );
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{value: value}(
            data
        );
        return verifyCallResult(success, returndata, errorMessage);
    }

    function functionStaticCall(
        address target,
        bytes memory data
    ) internal view returns (bytes memory) {
        return
            functionStaticCall(
                target,
                data,
                "Address: low-level static call failed"
            );
    }

    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    function functionDelegateCall(
        address target,
        bytes memory data
    ) internal returns (bytes memory) {
        return
            functionDelegateCall(
                target,
                data,
                "Address: low-level delegate call failed"
            );
    }

    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            if (returndata.length > 0) {
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

pragma solidity ^0.8.0;

library SafeERC20 {
    using Address for address;

    function safeTransfer(IERC20 token, address to, uint256 value) internal {
        _callOptionalReturn(
            token,
            abi.encodeWithSelector(token.transfer.selector, to, value)
        );
    }

    function safeTransferFrom(
        IERC20 token,
        address from,
        address to,
        uint256 value
    ) internal {
        _callOptionalReturn(
            token,
            abi.encodeWithSelector(token.transferFrom.selector, from, to, value)
        );
    }

    function safeApprove(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        require(
            (value == 0) || (token.allowance(address(this), spender) == 0),
            "SafeERC20: approve from non-zero to non-zero allowance"
        );
        _callOptionalReturn(
            token,
            abi.encodeWithSelector(token.approve.selector, spender, value)
        );
    }

    function safeIncreaseAllowance(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        uint256 newAllowance = token.allowance(address(this), spender) + value;
        _callOptionalReturn(
            token,
            abi.encodeWithSelector(
                token.approve.selector,
                spender,
                newAllowance
            )
        );
    }

    function safeDecreaseAllowance(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        unchecked {
            uint256 oldAllowance = token.allowance(address(this), spender);
            require(
                oldAllowance >= value,
                "SafeERC20: decreased allowance below zero"
            );
            uint256 newAllowance = oldAllowance - value;
            _callOptionalReturn(
                token,
                abi.encodeWithSelector(
                    token.approve.selector,
                    spender,
                    newAllowance
                )
            );
        }
    }

    function _callOptionalReturn(IERC20 token, bytes memory data) private {
        bytes memory returndata = address(token).functionCall(
            data,
            "SafeERC20: low-level call failed"
        );
        if (returndata.length > 0) {
            require(
                abi.decode(returndata, (bool)),
                "SafeERC20: ERC20 operation did not succeed"
            );
        }
    }
}

pragma solidity ^0.8.0;

interface IERC20Metadata is IERC20 {
    function name() external view returns (string memory);

    function symbol() external view returns (string memory);

    function decimals() external view returns (uint8);
}

pragma solidity ^0.8.0;

contract Presale is OwnerWithdrawable {
    using SafeMath for uint256;
    using SafeERC20 for IERC20;
    using SafeERC20 for IERC20Metadata;

    uint256 public rate;

    uint public saleTokenDec;

    uint256 public totalTokensforSale;

    mapping(address => bool) public payableTokens;

    mapping(address => uint256) public tokenPrices;

    bool public saleStatus;

    address[] public buyers;

    mapping(address => BuyerDetails) public buyersDetails;

    uint256 public totalBuyers;
    uint256 public totalTokensSold;

    uint public bonusPercent = 10; // = 0.01% in bps;

    struct BuyerDetails {
        uint amount;
        bool exists;
        uint rewards;
        uint lastVestTime;
    }

    struct BuyerAmount {
        uint amount;
        address buyer;
        uint rewards;
    }

    constructor() {
        saleStatus = false;
    }

    modifier saleEnabled() {
        require(saleStatus == true, "Presale: is not enabled");
        _;
    }

    modifier saleStoped() {
        require(saleStatus == false, "Presale: is not stopped");
        _;
    }

    function setSaleToken(
        uint256 _decimals,
        uint256 _totalTokensforSale,
        uint256 _rate,
        bool _saleStatus
    ) external onlyOwner {
        require(_rate != 0);
        rate = _rate;
        saleStatus = _saleStatus;
        saleTokenDec = _decimals;
        totalTokensforSale = _totalTokensforSale;
    }

    function setBonusPercent(uint _bonusPercent) external onlyOwner {
        bonusPercent = _bonusPercent;
    }

    function stopSale() external onlyOwner saleEnabled {
        saleStatus = false;
    }

    function resumeSale() external onlyOwner saleStoped {
        saleStatus = true;
    }

    function addPayableTokens(
        address[] memory _tokens,
        uint256[] memory _prices
    ) external onlyOwner {
        require(
            _tokens.length == _prices.length,
            "Presale: tokens & prices arrays length mismatch"
        );

        for (uint256 i = 0; i < _tokens.length; i++) {
            require(_prices[i] != 0);
            payableTokens[_tokens[i]] = true;
            tokenPrices[_tokens[i]] = _prices[i];
        }
    }

    function payableTokenStatus(
        address _token,
        bool _status
    ) external onlyOwner {
        require(payableTokens[_token] != _status);

        payableTokens[_token] = _status;
    }

    function updateTokenRate(
        address[] memory _tokens,
        uint256[] memory _prices,
        uint256 _rate
    ) external onlyOwner {
        require(
            _tokens.length == _prices.length,
            "Presale: tokens & prices arrays length mismatch"
        );

        if (_rate != 0) {
            rate = _rate;
        }

        for (uint256 i = 0; i < _tokens.length; i += 1) {
            require(payableTokens[_tokens[i]] == true);
            require(_prices[i] != 0);
            tokenPrices[_tokens[i]] = _prices[i];
        }
    }

    function getTokenAmount(
        address token,
        uint256 amount
    ) public view returns (uint256) {
        uint256 amtOut;
        if (token != address(0)) {
            require(payableTokens[token] == true, "Presale: Token not allowed");
            uint256 price = tokenPrices[token];
            amtOut = amount.mul(10 ** saleTokenDec).div(price);
        } else {
            amtOut = amount.mul(10 ** saleTokenDec).div(rate);
        }
        return amtOut;
    }

    function transferETH() private {
        payable(owner()).transfer(msg.value);
    }

    function transferToken(address _token, uint256 _amount) private {
        IERC20(_token).safeTransferFrom(msg.sender, owner(), _amount);
    }

    function calculateReward(
        uint _amount,
        uint _lastVestTime
    ) public view returns (uint256) {
        uint256 daysPassed = block.timestamp.sub(_lastVestTime).div(1 days);

        return _amount.mul(bonusPercent).mul(daysPassed).div(10000);
    }

    function buyToken(
        address _token,
        uint256 _amount
    ) external payable saleEnabled {
        uint256 saleTokenAmt = getTokenAmount(
            _token,
            _token != address(0) ? _amount : msg.value
        );

        require(saleTokenAmt != 0, "Presale: Amount is 0");
        require(
            (totalTokensSold + saleTokenAmt) < totalTokensforSale,
            "Presale: Not enough tokens to be sale"
        );

        if (_token != address(0)) {
            transferToken(_token, _amount);
        } else {
            transferETH();
        }

        totalTokensSold += saleTokenAmt;

        if (!buyersDetails[msg.sender].exists) {
            buyers.push(msg.sender);
            buyersDetails[msg.sender].exists = true;
            totalBuyers += 1;
        }

        if (buyersDetails[msg.sender].amount > 0) {
            buyersDetails[msg.sender].rewards += calculateReward(
                buyersDetails[msg.sender].amount,
                buyersDetails[msg.sender].lastVestTime
            );
        }

        buyersDetails[msg.sender].amount += saleTokenAmt;
        buyersDetails[msg.sender].lastVestTime = block.timestamp;
    }

    function addOldBuyers(
        address[] memory _buyers,
        uint256[] memory _amounts
    ) external onlyOwner {
        require(
            _buyers.length == _amounts.length,
            "Presale: buyers & amounts arrays length mismatch"
        );

        for (uint256 i = 0; i < _buyers.length; i += 1) {
            if (!buyersDetails[_buyers[i]].exists) {
                buyers.push(_buyers[i]);
                buyersDetails[_buyers[i]].exists = true;
                buyersDetails[_buyers[i]].amount += _amounts[i];
                buyersDetails[_buyers[i]].lastVestTime = block.timestamp;
                totalBuyers += 1;
            }
        }
    }

    function buyersAmountList(
        uint _from,
        uint _to
    ) external view returns (BuyerAmount[] memory) {
        require(_from < _to, "Presale: _from should be less than _to");

        uint to = _to > totalBuyers ? totalBuyers : _to;
        uint from = _from > totalBuyers ? totalBuyers : _from;

        BuyerAmount[] memory buyersAmt = new BuyerAmount[](to - from);

        for (uint i = from; i < to; i += 1) {
            buyersAmt[i].amount = buyersDetails[buyers[i]].amount;
            buyersAmt[i].rewards =
                buyersDetails[buyers[i]].rewards +
                calculateReward(
                    buyersDetails[buyers[i]].amount,
                    buyersDetails[buyers[i]].lastVestTime
                );
            buyersAmt[i].buyer = buyers[i];
        }

        return buyersAmt;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[{"internalType":"address[]","name":"_buyers","type":"address[]"},{"internalType":"uint256[]","name":"_amounts","type":"uint256[]"}],"name":"addOldBuyers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_tokens","type":"address[]"},{"internalType":"uint256[]","name":"_prices","type":"uint256[]"}],"name":"addPayableTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"bonusPercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"buyToken","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"buyers","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_from","type":"uint256"},{"internalType":"uint256","name":"_to","type":"uint256"}],"name":"buyersAmountList","outputs":[{"components":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"buyer","type":"address"},{"internalType":"uint256","name":"rewards","type":"uint256"}],"internalType":"struct Presale.BuyerAmount[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"buyersDetails","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bool","name":"exists","type":"bool"},{"internalType":"uint256","name":"rewards","type":"uint256"},{"internalType":"uint256","name":"lastVestTime","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint256","name":"_lastVestTime","type":"uint256"}],"name":"calculateReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"getTokenAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"bool","name":"_status","type":"bool"}],"name":"payableTokenStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"payableTokens","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"resumeSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"saleStatus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"saleTokenDec","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_bonusPercent","type":"uint256"}],"name":"setBonusPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_decimals","type":"uint256"},{"internalType":"uint256","name":"_totalTokensforSale","type":"uint256"},{"internalType":"uint256","name":"_rate","type":"uint256"},{"internalType":"bool","name":"_saleStatus","type":"bool"}],"name":"setSaleToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stopSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"tokenPrices","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalBuyers","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalTokensSold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalTokensforSale","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":"address[]","name":"_tokens","type":"address[]"},{"internalType":"uint256[]","name":"_prices","type":"uint256[]"},{"internalType":"uint256","name":"_rate","type":"uint256"}],"name":"updateTokenRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amt","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"withdrawAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amt","type":"uint256"}],"name":"withdrawCurrency","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052600a600b553480156200001657600080fd5b50620000376200002b6200005860201b60201c565b6200006060201b60201c565b6000600660006101000a81548160ff02191690831515021790555062000124565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b613d1880620001346000396000f3fe6080604052600436106101c65760003560e01c80636bcedf9c116100f7578063c76a0f1111610095578063f3fef3a311610064578063f3fef3a314610613578063f4739ee31461063c578063f9020e331461067c578063fa09e630146106a7576101cd565b8063c76a0f1114610559578063e36b0b3714610596578063f2aa8218146105ad578063f2fde38b146105ea576101cd565b8063807ea425116100d1578063807ea425146104af5780638da5cb5b146104d8578063ace1741c14610503578063becf3add1461052e576101cd565b80636bcedf9c14610430578063715018a61461045b57806380655eef14610472576101cd565b80633abd013611610164578063578897951161013e578063578897951461039757806362bd689c146103c057806363b20117146103e957806368f8fc1014610414576101cd565b80633abd01361461031a5780633c00a36c146103455780635413c1c81461036e576101cd565b806329d429a8116101a057806329d429a8146102865780632c4e722e146102af5780633115329e146102da57806333e364cb14610303576101cd565b8063115ece4c146101cf57806313ed08461461020c578063204120bc14610249576101cd565b366101cd57005b005b3480156101db57600080fd5b506101f660048036038101906101f19190612ccb565b6106d0565b6040516102039190613754565b60405180910390f35b34801561021857600080fd5b50610233600480360381019061022e9190612e6d565b61085b565b6040516102409190613754565b60405180910390f35b34801561025557600080fd5b50610270600480360381019061026b9190612c66565b6108cc565b60405161027d9190613754565b60405180910390f35b34801561029257600080fd5b506102ad60048036038101906102a89190612c8f565b6108e4565b005b3480156102bb57600080fd5b506102c4610a18565b6040516102d19190613754565b60405180910390f35b3480156102e657600080fd5b5061030160048036038101906102fc9190612d73565b610a1e565b005b34801561030f57600080fd5b50610318610cc3565b005b34801561032657600080fd5b5061032f610db2565b60405161033c9190613754565b60405180910390f35b34801561035157600080fd5b5061036c60048036038101906103679190612e1b565b610db8565b005b34801561037a57600080fd5b5061039560048036038101906103909190612d07565b610e7e565b005b3480156103a357600080fd5b506103be60048036038101906103b99190612d07565b61110c565b005b3480156103cc57600080fd5b506103e760048036038101906103e29190612e1b565b61153e565b005b3480156103f557600080fd5b506103fe6115c4565b60405161040b9190613754565b60405180910390f35b61042e60048036038101906104299190612ccb565b6115ca565b005b34801561043c57600080fd5b50610445611a68565b6040516104529190613754565b60405180910390f35b34801561046757600080fd5b50610470611a6e565b005b34801561047e57600080fd5b5061049960048036038101906104949190612c66565b611af6565b6040516104a69190613577565b60405180910390f35b3480156104bb57600080fd5b506104d660048036038101906104d19190612ea9565b611b16565b005b3480156104e457600080fd5b506104ed611bd5565b6040516104fa91906134da565b60405180910390f35b34801561050f57600080fd5b50610518611bfe565b6040516105259190613754565b60405180910390f35b34801561053a57600080fd5b50610543611c04565b6040516105509190613754565b60405180910390f35b34801561056557600080fd5b50610580600480360381019061057b9190612e6d565b611c0a565b60405161058d9190613555565b60405180910390f35b3480156105a257600080fd5b506105ab612150565b005b3480156105b957600080fd5b506105d460048036038101906105cf9190612e1b565b61223f565b6040516105e191906134da565b60405180910390f35b3480156105f657600080fd5b50610611600480360381019061060c9190612c66565b61227e565b005b34801561061f57600080fd5b5061063a60048036038101906106359190612ccb565b612376565b005b34801561064857600080fd5b50610663600480360381019061065e9190612c66565b612421565b604051610673949392919061376f565b60405180910390f35b34801561068857600080fd5b5061069161245e565b60405161069e9190613577565b60405180910390f35b3480156106b357600080fd5b506106ce60048036038101906106c99190612c66565b612471565b005b600080600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16146108195760011515600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151461079a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610791906135d4565b60405180910390fd5b6000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905061081181610803600254600a6107f49190613982565b8761258890919063ffffffff16565b61259e90919063ffffffff16565b915050610851565b61084e600154610840600254600a6108319190613982565b8661258890919063ffffffff16565b61259e90919063ffffffff16565b90505b8091505092915050565b6000806108866201518061087885426125b490919063ffffffff16565b61259e90919063ffffffff16565b90506108c36127106108b5836108a7600b548961258890919063ffffffff16565b61258890919063ffffffff16565b61259e90919063ffffffff16565b91505092915050565b60056020528060005260406000206000915090505481565b6108ec6125ca565b73ffffffffffffffffffffffffffffffffffffffff1661090a611bd5565b73ffffffffffffffffffffffffffffffffffffffff1614610960576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610957906136d4565b60405180910390fd5b801515600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514156109bd57600080fd5b80600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60015481565b610a266125ca565b73ffffffffffffffffffffffffffffffffffffffff16610a44611bd5565b73ffffffffffffffffffffffffffffffffffffffff1614610a9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a91906136d4565b60405180910390fd5b8151835114610ade576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ad590613674565b60405180910390fd5b60008114610aee57806001819055505b60005b8351811015610cbd576001151560046000868481518110610b3b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514610b9757600080fd5b6000838281518110610bd2577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101511415610be557600080fd5b828181518110610c1e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015160056000868481518110610c63577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600181610cb691906138a8565b9050610af1565b50505050565b610ccb6125ca565b73ffffffffffffffffffffffffffffffffffffffff16610ce9611bd5565b73ffffffffffffffffffffffffffffffffffffffff1614610d3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d36906136d4565b60405180910390fd5b60001515600660009054906101000a900460ff16151514610d95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8c90613614565b60405180910390fd5b6001600660006101000a81548160ff021916908315150217905550565b60095481565b610dc06125ca565b73ffffffffffffffffffffffffffffffffffffffff16610dde611bd5565b73ffffffffffffffffffffffffffffffffffffffff1614610e34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2b906136d4565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610e7a573d6000803e3d6000fd5b5050565b610e866125ca565b73ffffffffffffffffffffffffffffffffffffffff16610ea4611bd5565b73ffffffffffffffffffffffffffffffffffffffff1614610efa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef1906136d4565b60405180910390fd5b8051825114610f3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3590613674565b60405180910390fd5b60005b8251811015611107576000828281518110610f85577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101511415610f9857600080fd5b600160046000858481518110610fd7577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550818181518110611069577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151600560008584815181106110ae577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080806110ff90613ba9565b915050610f41565b505050565b6111146125ca565b73ffffffffffffffffffffffffffffffffffffffff16611132611bd5565b73ffffffffffffffffffffffffffffffffffffffff1614611188576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117f906136d4565b60405180910390fd5b80518251146111cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c390613654565b60405180910390fd5b60005b82518110156115395760086000848381518110611215577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160009054906101000a900460ff166115255760078382815181106112a7577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101519080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060016008600085848151811061134e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160006101000a81548160ff0219169083151502179055508181815181106113e3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015160086000858481518110611428577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600082825461147c91906138a8565b9250508190555042600860008584815181106114c1577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206003018190555060016009600082825461151d91906138a8565b925050819055505b60018161153291906138a8565b90506111cf565b505050565b6115466125ca565b73ffffffffffffffffffffffffffffffffffffffff16611564611bd5565b73ffffffffffffffffffffffffffffffffffffffff16146115ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b1906136d4565b60405180910390fd5b80600b8190555050565b600a5481565b60011515600660009054906101000a900460ff16151514611620576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161790613714565b60405180910390fd5b600061166883600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614156116615734611663565b835b6106d0565b905060008114156116ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a590613694565b60405180910390fd5b60035481600a546116bf91906138a8565b106116ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f6906136b4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146117425761173d83836125d2565b61174b565b61174a61260a565b5b80600a600082825461175d91906138a8565b92505081905550600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160009054906101000a900460ff16611891576007339080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160006101000a81548160ff02191690831515021790555060016009600082825461188991906138a8565b925050819055505b6000600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015411156119c35761196a600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206003015461085b565b600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160008282546119bb91906138a8565b925050819055505b80600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000016000828254611a1591906138a8565b9250508190555042600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030181905550505050565b60035481565b611a766125ca565b73ffffffffffffffffffffffffffffffffffffffff16611a94611bd5565b73ffffffffffffffffffffffffffffffffffffffff1614611aea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ae1906136d4565b60405180910390fd5b611af4600061265a565b565b60046020528060005260406000206000915054906101000a900460ff1681565b611b1e6125ca565b73ffffffffffffffffffffffffffffffffffffffff16611b3c611bd5565b73ffffffffffffffffffffffffffffffffffffffff1614611b92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b89906136d4565b60405180910390fd5b6000821415611ba057600080fd5b8160018190555080600660006101000a81548160ff021916908315150217905550836002819055508260038190555050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60025481565b600b5481565b6060818310611c4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c45906135f4565b60405180910390fd5b60006009548311611c5f5782611c63565b6009545b905060006009548511611c765784611c7a565b6009545b905060008183611c8a9190613afa565b67ffffffffffffffff811115611cc9577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015611d0257816020015b611cef612a9a565b815260200190600190039081611ce75790505b50905060008290505b83811015612143576008600060078381548110611d51577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154828281518110611df3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101516000018181525050611f596008600060078481548110611e44577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001546008600060078581548110611eeb577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206003015461085b565b6008600060078481548110611f97577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206002015461200a91906138a8565b828281518110612043577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015160400181815250506007818154811061208d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168282815181106120f1577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101516020019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060018161213c91906138a8565b9050611d0b565b5080935050505092915050565b6121586125ca565b73ffffffffffffffffffffffffffffffffffffffff16612176611bd5565b73ffffffffffffffffffffffffffffffffffffffff16146121cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121c3906136d4565b60405180910390fd5b60011515600660009054906101000a900460ff16151514612222576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221990613714565b60405180910390fd5b6000600660006101000a81548160ff021916908315150217905550565b6007818154811061224f57600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6122866125ca565b73ffffffffffffffffffffffffffffffffffffffff166122a4611bd5565b73ffffffffffffffffffffffffffffffffffffffff16146122fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122f1906136d4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561236a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612361906135b4565b60405180910390fd5b6123738161265a565b50565b61237e6125ca565b73ffffffffffffffffffffffffffffffffffffffff1661239c611bd5565b73ffffffffffffffffffffffffffffffffffffffff16146123f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123e9906136d4565b60405180910390fd5b61241d33828473ffffffffffffffffffffffffffffffffffffffff1661271e9092919063ffffffff16565b5050565b60086020528060005260406000206000915090508060000154908060010160009054906101000a900460ff16908060020154908060030154905084565b600660009054906101000a900460ff1681565b6124796125ca565b73ffffffffffffffffffffffffffffffffffffffff16612497611bd5565b73ffffffffffffffffffffffffffffffffffffffff16146124ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124e4906136d4565b60405180910390fd5b60008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161252891906134da565b60206040518083038186803b15801561254057600080fd5b505afa158015612554573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125789190612e44565b90506125848282612376565b5050565b600081836125969190613aa0565b905092915050565b600081836125ac91906138fe565b905092915050565b600081836125c29190613afa565b905092915050565b600033905090565b612606336125de611bd5565b838573ffffffffffffffffffffffffffffffffffffffff166127a4909392919063ffffffff16565b5050565b612612611bd5565b73ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f19350505050158015612657573d6000803e3d6000fd5b50565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61279f8363a9059cbb60e01b848460405160240161273d92919061352c565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061282d565b505050565b612827846323b872dd60e01b8585856040516024016127c5939291906134f5565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061282d565b50505050565b600061288f826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166128f49092919063ffffffff16565b90506000815111156128ef57808060200190518101906128af9190612df2565b6128ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128e590613734565b60405180910390fd5b5b505050565b6060612903848460008561290c565b90509392505050565b606082471015612951576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161294890613634565b60405180910390fd5b61295a85612a20565b612999576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612990906136f4565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516129c291906134c3565b60006040518083038185875af1925050503d80600081146129ff576040519150601f19603f3d011682016040523d82523d6000602084013e612a04565b606091505b5091509150612a14828286612a33565b92505050949350505050565b600080823b905060008111915050919050565b60608315612a4357829050612a93565b600083511115612a565782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a8a9190613592565b60405180910390fd5b9392505050565b604051806060016040528060008152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600081525090565b6000612ae4612adf846137e5565b6137b4565b90508083825260208201905082856020860282011115612b0357600080fd5b60005b85811015612b335781612b198882612ba9565b845260208401935060208301925050600181019050612b06565b5050509392505050565b6000612b50612b4b84613811565b6137b4565b90508083825260208201905082856020860282011115612b6f57600080fd5b60005b85811015612b9f5781612b858882612c3c565b845260208401935060208301925050600181019050612b72565b5050509392505050565b600081359050612bb881613c9d565b92915050565b600082601f830112612bcf57600080fd5b8135612bdf848260208601612ad1565b91505092915050565b600082601f830112612bf957600080fd5b8135612c09848260208601612b3d565b91505092915050565b600081359050612c2181613cb4565b92915050565b600081519050612c3681613cb4565b92915050565b600081359050612c4b81613ccb565b92915050565b600081519050612c6081613ccb565b92915050565b600060208284031215612c7857600080fd5b6000612c8684828501612ba9565b91505092915050565b60008060408385031215612ca257600080fd5b6000612cb085828601612ba9565b9250506020612cc185828601612c12565b9150509250929050565b60008060408385031215612cde57600080fd5b6000612cec85828601612ba9565b9250506020612cfd85828601612c3c565b9150509250929050565b60008060408385031215612d1a57600080fd5b600083013567ffffffffffffffff811115612d3457600080fd5b612d4085828601612bbe565b925050602083013567ffffffffffffffff811115612d5d57600080fd5b612d6985828601612be8565b9150509250929050565b600080600060608486031215612d8857600080fd5b600084013567ffffffffffffffff811115612da257600080fd5b612dae86828701612bbe565b935050602084013567ffffffffffffffff811115612dcb57600080fd5b612dd786828701612be8565b9250506040612de886828701612c3c565b9150509250925092565b600060208284031215612e0457600080fd5b6000612e1284828501612c27565b91505092915050565b600060208284031215612e2d57600080fd5b6000612e3b84828501612c3c565b91505092915050565b600060208284031215612e5657600080fd5b6000612e6484828501612c51565b91505092915050565b60008060408385031215612e8057600080fd5b6000612e8e85828601612c3c565b9250506020612e9f85828601612c3c565b9150509250929050565b60008060008060808587031215612ebf57600080fd5b6000612ecd87828801612c3c565b9450506020612ede87828801612c3c565b9350506040612eef87828801612c3c565b9250506060612f0087828801612c12565b91505092959194509250565b6000612f188383613463565b60608301905092915050565b612f2d81613b2e565b82525050565b612f3c81613b2e565b82525050565b6000612f4d8261384d565b612f57818561387b565b9350612f628361383d565b8060005b83811015612f93578151612f7a8882612f0c565b9750612f858361386e565b925050600181019050612f66565b5085935050505092915050565b612fa981613b40565b82525050565b6000612fba82613858565b612fc4818561388c565b9350612fd4818560208601613b76565b80840191505092915050565b6000612feb82613863565b612ff58185613897565b9350613005818560208601613b76565b61300e81613c7f565b840191505092915050565b6000613026602683613897565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061308c601a83613897565b91507f50726573616c653a20546f6b656e206e6f7420616c6c6f7765640000000000006000830152602082019050919050565b60006130cc602683613897565b91507f50726573616c653a205f66726f6d2073686f756c64206265206c65737320746860008301527f616e205f746f00000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613132601783613897565b91507f50726573616c653a206973206e6f742073746f707065640000000000000000006000830152602082019050919050565b6000613172602683613897565b91507f416464726573733a20696e73756666696369656e742062616c616e636520666f60008301527f722063616c6c00000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006131d8603083613897565b91507f50726573616c653a20627579657273202620616d6f756e74732061727261797360008301527f206c656e677468206d69736d61746368000000000000000000000000000000006020830152604082019050919050565b600061323e602f83613897565b91507f50726573616c653a20746f6b656e73202620707269636573206172726179732060008301527f6c656e677468206d69736d6174636800000000000000000000000000000000006020830152604082019050919050565b60006132a4601483613897565b91507f50726573616c653a20416d6f756e7420697320300000000000000000000000006000830152602082019050919050565b60006132e4602583613897565b91507f50726573616c653a204e6f7420656e6f75676820746f6b656e7320746f20626560008301527f2073616c650000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061334a602083613897565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b600061338a601d83613897565b91507f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006000830152602082019050919050565b60006133ca601783613897565b91507f50726573616c653a206973206e6f7420656e61626c65640000000000000000006000830152602082019050919050565b600061340a602a83613897565b91507f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008301527f6f742073756363656564000000000000000000000000000000000000000000006020830152604082019050919050565b60608201600082015161347960008501826134a5565b50602082015161348c6020850182612f24565b50604082015161349f60408501826134a5565b50505050565b6134ae81613b6c565b82525050565b6134bd81613b6c565b82525050565b60006134cf8284612faf565b915081905092915050565b60006020820190506134ef6000830184612f33565b92915050565b600060608201905061350a6000830186612f33565b6135176020830185612f33565b61352460408301846134b4565b949350505050565b60006040820190506135416000830185612f33565b61354e60208301846134b4565b9392505050565b6000602082019050818103600083015261356f8184612f42565b905092915050565b600060208201905061358c6000830184612fa0565b92915050565b600060208201905081810360008301526135ac8184612fe0565b905092915050565b600060208201905081810360008301526135cd81613019565b9050919050565b600060208201905081810360008301526135ed8161307f565b9050919050565b6000602082019050818103600083015261360d816130bf565b9050919050565b6000602082019050818103600083015261362d81613125565b9050919050565b6000602082019050818103600083015261364d81613165565b9050919050565b6000602082019050818103600083015261366d816131cb565b9050919050565b6000602082019050818103600083015261368d81613231565b9050919050565b600060208201905081810360008301526136ad81613297565b9050919050565b600060208201905081810360008301526136cd816132d7565b9050919050565b600060208201905081810360008301526136ed8161333d565b9050919050565b6000602082019050818103600083015261370d8161337d565b9050919050565b6000602082019050818103600083015261372d816133bd565b9050919050565b6000602082019050818103600083015261374d816133fd565b9050919050565b600060208201905061376960008301846134b4565b92915050565b600060808201905061378460008301876134b4565b6137916020830186612fa0565b61379e60408301856134b4565b6137ab60608301846134b4565b95945050505050565b6000604051905081810181811067ffffffffffffffff821117156137db576137da613c50565b5b8060405250919050565b600067ffffffffffffffff821115613800576137ff613c50565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561382c5761382b613c50565b5b602082029050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b60006138b382613b6c565b91506138be83613b6c565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156138f3576138f2613bf2565b5b828201905092915050565b600061390982613b6c565b915061391483613b6c565b92508261392457613923613c21565b5b828204905092915050565b6000808291508390505b60018511156139795780860481111561395557613954613bf2565b5b60018516156139645780820291505b808102905061397285613c90565b9450613939565b94509492505050565b600061398d82613b6c565b915061399883613b6c565b92506139c57fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846139cd565b905092915050565b6000826139dd5760019050613a99565b816139eb5760009050613a99565b8160018114613a015760028114613a0b57613a3a565b6001915050613a99565b60ff841115613a1d57613a1c613bf2565b5b8360020a915084821115613a3457613a33613bf2565b5b50613a99565b5060208310610133831016604e8410600b8410161715613a6f5782820a905083811115613a6a57613a69613bf2565b5b613a99565b613a7c848484600161392f565b92509050818404811115613a9357613a92613bf2565b5b81810290505b9392505050565b6000613aab82613b6c565b9150613ab683613b6c565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613aef57613aee613bf2565b5b828202905092915050565b6000613b0582613b6c565b9150613b1083613b6c565b925082821015613b2357613b22613bf2565b5b828203905092915050565b6000613b3982613b4c565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60005b83811015613b94578082015181840152602081019050613b79565b83811115613ba3576000848401525b50505050565b6000613bb482613b6c565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613be757613be6613bf2565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b60008160011c9050919050565b613ca681613b2e565b8114613cb157600080fd5b50565b613cbd81613b40565b8114613cc857600080fd5b50565b613cd481613b6c565b8114613cdf57600080fd5b5056fea264697066735822122062098af6134485d1b82d6082e0b9bfd9164036ba592ee8a0b933122bbe3db7a164736f6c63430008000033

Deployed Bytecode

0x6080604052600436106101c65760003560e01c80636bcedf9c116100f7578063c76a0f1111610095578063f3fef3a311610064578063f3fef3a314610613578063f4739ee31461063c578063f9020e331461067c578063fa09e630146106a7576101cd565b8063c76a0f1114610559578063e36b0b3714610596578063f2aa8218146105ad578063f2fde38b146105ea576101cd565b8063807ea425116100d1578063807ea425146104af5780638da5cb5b146104d8578063ace1741c14610503578063becf3add1461052e576101cd565b80636bcedf9c14610430578063715018a61461045b57806380655eef14610472576101cd565b80633abd013611610164578063578897951161013e578063578897951461039757806362bd689c146103c057806363b20117146103e957806368f8fc1014610414576101cd565b80633abd01361461031a5780633c00a36c146103455780635413c1c81461036e576101cd565b806329d429a8116101a057806329d429a8146102865780632c4e722e146102af5780633115329e146102da57806333e364cb14610303576101cd565b8063115ece4c146101cf57806313ed08461461020c578063204120bc14610249576101cd565b366101cd57005b005b3480156101db57600080fd5b506101f660048036038101906101f19190612ccb565b6106d0565b6040516102039190613754565b60405180910390f35b34801561021857600080fd5b50610233600480360381019061022e9190612e6d565b61085b565b6040516102409190613754565b60405180910390f35b34801561025557600080fd5b50610270600480360381019061026b9190612c66565b6108cc565b60405161027d9190613754565b60405180910390f35b34801561029257600080fd5b506102ad60048036038101906102a89190612c8f565b6108e4565b005b3480156102bb57600080fd5b506102c4610a18565b6040516102d19190613754565b60405180910390f35b3480156102e657600080fd5b5061030160048036038101906102fc9190612d73565b610a1e565b005b34801561030f57600080fd5b50610318610cc3565b005b34801561032657600080fd5b5061032f610db2565b60405161033c9190613754565b60405180910390f35b34801561035157600080fd5b5061036c60048036038101906103679190612e1b565b610db8565b005b34801561037a57600080fd5b5061039560048036038101906103909190612d07565b610e7e565b005b3480156103a357600080fd5b506103be60048036038101906103b99190612d07565b61110c565b005b3480156103cc57600080fd5b506103e760048036038101906103e29190612e1b565b61153e565b005b3480156103f557600080fd5b506103fe6115c4565b60405161040b9190613754565b60405180910390f35b61042e60048036038101906104299190612ccb565b6115ca565b005b34801561043c57600080fd5b50610445611a68565b6040516104529190613754565b60405180910390f35b34801561046757600080fd5b50610470611a6e565b005b34801561047e57600080fd5b5061049960048036038101906104949190612c66565b611af6565b6040516104a69190613577565b60405180910390f35b3480156104bb57600080fd5b506104d660048036038101906104d19190612ea9565b611b16565b005b3480156104e457600080fd5b506104ed611bd5565b6040516104fa91906134da565b60405180910390f35b34801561050f57600080fd5b50610518611bfe565b6040516105259190613754565b60405180910390f35b34801561053a57600080fd5b50610543611c04565b6040516105509190613754565b60405180910390f35b34801561056557600080fd5b50610580600480360381019061057b9190612e6d565b611c0a565b60405161058d9190613555565b60405180910390f35b3480156105a257600080fd5b506105ab612150565b005b3480156105b957600080fd5b506105d460048036038101906105cf9190612e1b565b61223f565b6040516105e191906134da565b60405180910390f35b3480156105f657600080fd5b50610611600480360381019061060c9190612c66565b61227e565b005b34801561061f57600080fd5b5061063a60048036038101906106359190612ccb565b612376565b005b34801561064857600080fd5b50610663600480360381019061065e9190612c66565b612421565b604051610673949392919061376f565b60405180910390f35b34801561068857600080fd5b5061069161245e565b60405161069e9190613577565b60405180910390f35b3480156106b357600080fd5b506106ce60048036038101906106c99190612c66565b612471565b005b600080600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16146108195760011515600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151461079a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610791906135d4565b60405180910390fd5b6000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905061081181610803600254600a6107f49190613982565b8761258890919063ffffffff16565b61259e90919063ffffffff16565b915050610851565b61084e600154610840600254600a6108319190613982565b8661258890919063ffffffff16565b61259e90919063ffffffff16565b90505b8091505092915050565b6000806108866201518061087885426125b490919063ffffffff16565b61259e90919063ffffffff16565b90506108c36127106108b5836108a7600b548961258890919063ffffffff16565b61258890919063ffffffff16565b61259e90919063ffffffff16565b91505092915050565b60056020528060005260406000206000915090505481565b6108ec6125ca565b73ffffffffffffffffffffffffffffffffffffffff1661090a611bd5565b73ffffffffffffffffffffffffffffffffffffffff1614610960576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610957906136d4565b60405180910390fd5b801515600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514156109bd57600080fd5b80600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60015481565b610a266125ca565b73ffffffffffffffffffffffffffffffffffffffff16610a44611bd5565b73ffffffffffffffffffffffffffffffffffffffff1614610a9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a91906136d4565b60405180910390fd5b8151835114610ade576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ad590613674565b60405180910390fd5b60008114610aee57806001819055505b60005b8351811015610cbd576001151560046000868481518110610b3b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514610b9757600080fd5b6000838281518110610bd2577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101511415610be557600080fd5b828181518110610c1e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015160056000868481518110610c63577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600181610cb691906138a8565b9050610af1565b50505050565b610ccb6125ca565b73ffffffffffffffffffffffffffffffffffffffff16610ce9611bd5565b73ffffffffffffffffffffffffffffffffffffffff1614610d3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d36906136d4565b60405180910390fd5b60001515600660009054906101000a900460ff16151514610d95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8c90613614565b60405180910390fd5b6001600660006101000a81548160ff021916908315150217905550565b60095481565b610dc06125ca565b73ffffffffffffffffffffffffffffffffffffffff16610dde611bd5565b73ffffffffffffffffffffffffffffffffffffffff1614610e34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2b906136d4565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610e7a573d6000803e3d6000fd5b5050565b610e866125ca565b73ffffffffffffffffffffffffffffffffffffffff16610ea4611bd5565b73ffffffffffffffffffffffffffffffffffffffff1614610efa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef1906136d4565b60405180910390fd5b8051825114610f3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3590613674565b60405180910390fd5b60005b8251811015611107576000828281518110610f85577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101511415610f9857600080fd5b600160046000858481518110610fd7577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550818181518110611069577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151600560008584815181106110ae577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080806110ff90613ba9565b915050610f41565b505050565b6111146125ca565b73ffffffffffffffffffffffffffffffffffffffff16611132611bd5565b73ffffffffffffffffffffffffffffffffffffffff1614611188576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117f906136d4565b60405180910390fd5b80518251146111cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c390613654565b60405180910390fd5b60005b82518110156115395760086000848381518110611215577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160009054906101000a900460ff166115255760078382815181106112a7577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101519080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060016008600085848151811061134e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160006101000a81548160ff0219169083151502179055508181815181106113e3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015160086000858481518110611428577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600082825461147c91906138a8565b9250508190555042600860008584815181106114c1577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206003018190555060016009600082825461151d91906138a8565b925050819055505b60018161153291906138a8565b90506111cf565b505050565b6115466125ca565b73ffffffffffffffffffffffffffffffffffffffff16611564611bd5565b73ffffffffffffffffffffffffffffffffffffffff16146115ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b1906136d4565b60405180910390fd5b80600b8190555050565b600a5481565b60011515600660009054906101000a900460ff16151514611620576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161790613714565b60405180910390fd5b600061166883600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614156116615734611663565b835b6106d0565b905060008114156116ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a590613694565b60405180910390fd5b60035481600a546116bf91906138a8565b106116ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f6906136b4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146117425761173d83836125d2565b61174b565b61174a61260a565b5b80600a600082825461175d91906138a8565b92505081905550600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160009054906101000a900460ff16611891576007339080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160006101000a81548160ff02191690831515021790555060016009600082825461188991906138a8565b925050819055505b6000600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015411156119c35761196a600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206003015461085b565b600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160008282546119bb91906138a8565b925050819055505b80600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000016000828254611a1591906138a8565b9250508190555042600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030181905550505050565b60035481565b611a766125ca565b73ffffffffffffffffffffffffffffffffffffffff16611a94611bd5565b73ffffffffffffffffffffffffffffffffffffffff1614611aea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ae1906136d4565b60405180910390fd5b611af4600061265a565b565b60046020528060005260406000206000915054906101000a900460ff1681565b611b1e6125ca565b73ffffffffffffffffffffffffffffffffffffffff16611b3c611bd5565b73ffffffffffffffffffffffffffffffffffffffff1614611b92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b89906136d4565b60405180910390fd5b6000821415611ba057600080fd5b8160018190555080600660006101000a81548160ff021916908315150217905550836002819055508260038190555050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60025481565b600b5481565b6060818310611c4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c45906135f4565b60405180910390fd5b60006009548311611c5f5782611c63565b6009545b905060006009548511611c765784611c7a565b6009545b905060008183611c8a9190613afa565b67ffffffffffffffff811115611cc9577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015611d0257816020015b611cef612a9a565b815260200190600190039081611ce75790505b50905060008290505b83811015612143576008600060078381548110611d51577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154828281518110611df3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101516000018181525050611f596008600060078481548110611e44577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001546008600060078581548110611eeb577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206003015461085b565b6008600060078481548110611f97577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206002015461200a91906138a8565b828281518110612043577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015160400181815250506007818154811061208d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168282815181106120f1577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101516020019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060018161213c91906138a8565b9050611d0b565b5080935050505092915050565b6121586125ca565b73ffffffffffffffffffffffffffffffffffffffff16612176611bd5565b73ffffffffffffffffffffffffffffffffffffffff16146121cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121c3906136d4565b60405180910390fd5b60011515600660009054906101000a900460ff16151514612222576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221990613714565b60405180910390fd5b6000600660006101000a81548160ff021916908315150217905550565b6007818154811061224f57600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6122866125ca565b73ffffffffffffffffffffffffffffffffffffffff166122a4611bd5565b73ffffffffffffffffffffffffffffffffffffffff16146122fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122f1906136d4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561236a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612361906135b4565b60405180910390fd5b6123738161265a565b50565b61237e6125ca565b73ffffffffffffffffffffffffffffffffffffffff1661239c611bd5565b73ffffffffffffffffffffffffffffffffffffffff16146123f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123e9906136d4565b60405180910390fd5b61241d33828473ffffffffffffffffffffffffffffffffffffffff1661271e9092919063ffffffff16565b5050565b60086020528060005260406000206000915090508060000154908060010160009054906101000a900460ff16908060020154908060030154905084565b600660009054906101000a900460ff1681565b6124796125ca565b73ffffffffffffffffffffffffffffffffffffffff16612497611bd5565b73ffffffffffffffffffffffffffffffffffffffff16146124ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124e4906136d4565b60405180910390fd5b60008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161252891906134da565b60206040518083038186803b15801561254057600080fd5b505afa158015612554573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125789190612e44565b90506125848282612376565b5050565b600081836125969190613aa0565b905092915050565b600081836125ac91906138fe565b905092915050565b600081836125c29190613afa565b905092915050565b600033905090565b612606336125de611bd5565b838573ffffffffffffffffffffffffffffffffffffffff166127a4909392919063ffffffff16565b5050565b612612611bd5565b73ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f19350505050158015612657573d6000803e3d6000fd5b50565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61279f8363a9059cbb60e01b848460405160240161273d92919061352c565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061282d565b505050565b612827846323b872dd60e01b8585856040516024016127c5939291906134f5565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061282d565b50505050565b600061288f826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166128f49092919063ffffffff16565b90506000815111156128ef57808060200190518101906128af9190612df2565b6128ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128e590613734565b60405180910390fd5b5b505050565b6060612903848460008561290c565b90509392505050565b606082471015612951576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161294890613634565b60405180910390fd5b61295a85612a20565b612999576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612990906136f4565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516129c291906134c3565b60006040518083038185875af1925050503d80600081146129ff576040519150601f19603f3d011682016040523d82523d6000602084013e612a04565b606091505b5091509150612a14828286612a33565b92505050949350505050565b600080823b905060008111915050919050565b60608315612a4357829050612a93565b600083511115612a565782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a8a9190613592565b60405180910390fd5b9392505050565b604051806060016040528060008152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600081525090565b6000612ae4612adf846137e5565b6137b4565b90508083825260208201905082856020860282011115612b0357600080fd5b60005b85811015612b335781612b198882612ba9565b845260208401935060208301925050600181019050612b06565b5050509392505050565b6000612b50612b4b84613811565b6137b4565b90508083825260208201905082856020860282011115612b6f57600080fd5b60005b85811015612b9f5781612b858882612c3c565b845260208401935060208301925050600181019050612b72565b5050509392505050565b600081359050612bb881613c9d565b92915050565b600082601f830112612bcf57600080fd5b8135612bdf848260208601612ad1565b91505092915050565b600082601f830112612bf957600080fd5b8135612c09848260208601612b3d565b91505092915050565b600081359050612c2181613cb4565b92915050565b600081519050612c3681613cb4565b92915050565b600081359050612c4b81613ccb565b92915050565b600081519050612c6081613ccb565b92915050565b600060208284031215612c7857600080fd5b6000612c8684828501612ba9565b91505092915050565b60008060408385031215612ca257600080fd5b6000612cb085828601612ba9565b9250506020612cc185828601612c12565b9150509250929050565b60008060408385031215612cde57600080fd5b6000612cec85828601612ba9565b9250506020612cfd85828601612c3c565b9150509250929050565b60008060408385031215612d1a57600080fd5b600083013567ffffffffffffffff811115612d3457600080fd5b612d4085828601612bbe565b925050602083013567ffffffffffffffff811115612d5d57600080fd5b612d6985828601612be8565b9150509250929050565b600080600060608486031215612d8857600080fd5b600084013567ffffffffffffffff811115612da257600080fd5b612dae86828701612bbe565b935050602084013567ffffffffffffffff811115612dcb57600080fd5b612dd786828701612be8565b9250506040612de886828701612c3c565b9150509250925092565b600060208284031215612e0457600080fd5b6000612e1284828501612c27565b91505092915050565b600060208284031215612e2d57600080fd5b6000612e3b84828501612c3c565b91505092915050565b600060208284031215612e5657600080fd5b6000612e6484828501612c51565b91505092915050565b60008060408385031215612e8057600080fd5b6000612e8e85828601612c3c565b9250506020612e9f85828601612c3c565b9150509250929050565b60008060008060808587031215612ebf57600080fd5b6000612ecd87828801612c3c565b9450506020612ede87828801612c3c565b9350506040612eef87828801612c3c565b9250506060612f0087828801612c12565b91505092959194509250565b6000612f188383613463565b60608301905092915050565b612f2d81613b2e565b82525050565b612f3c81613b2e565b82525050565b6000612f4d8261384d565b612f57818561387b565b9350612f628361383d565b8060005b83811015612f93578151612f7a8882612f0c565b9750612f858361386e565b925050600181019050612f66565b5085935050505092915050565b612fa981613b40565b82525050565b6000612fba82613858565b612fc4818561388c565b9350612fd4818560208601613b76565b80840191505092915050565b6000612feb82613863565b612ff58185613897565b9350613005818560208601613b76565b61300e81613c7f565b840191505092915050565b6000613026602683613897565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061308c601a83613897565b91507f50726573616c653a20546f6b656e206e6f7420616c6c6f7765640000000000006000830152602082019050919050565b60006130cc602683613897565b91507f50726573616c653a205f66726f6d2073686f756c64206265206c65737320746860008301527f616e205f746f00000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613132601783613897565b91507f50726573616c653a206973206e6f742073746f707065640000000000000000006000830152602082019050919050565b6000613172602683613897565b91507f416464726573733a20696e73756666696369656e742062616c616e636520666f60008301527f722063616c6c00000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006131d8603083613897565b91507f50726573616c653a20627579657273202620616d6f756e74732061727261797360008301527f206c656e677468206d69736d61746368000000000000000000000000000000006020830152604082019050919050565b600061323e602f83613897565b91507f50726573616c653a20746f6b656e73202620707269636573206172726179732060008301527f6c656e677468206d69736d6174636800000000000000000000000000000000006020830152604082019050919050565b60006132a4601483613897565b91507f50726573616c653a20416d6f756e7420697320300000000000000000000000006000830152602082019050919050565b60006132e4602583613897565b91507f50726573616c653a204e6f7420656e6f75676820746f6b656e7320746f20626560008301527f2073616c650000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061334a602083613897565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b600061338a601d83613897565b91507f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006000830152602082019050919050565b60006133ca601783613897565b91507f50726573616c653a206973206e6f7420656e61626c65640000000000000000006000830152602082019050919050565b600061340a602a83613897565b91507f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008301527f6f742073756363656564000000000000000000000000000000000000000000006020830152604082019050919050565b60608201600082015161347960008501826134a5565b50602082015161348c6020850182612f24565b50604082015161349f60408501826134a5565b50505050565b6134ae81613b6c565b82525050565b6134bd81613b6c565b82525050565b60006134cf8284612faf565b915081905092915050565b60006020820190506134ef6000830184612f33565b92915050565b600060608201905061350a6000830186612f33565b6135176020830185612f33565b61352460408301846134b4565b949350505050565b60006040820190506135416000830185612f33565b61354e60208301846134b4565b9392505050565b6000602082019050818103600083015261356f8184612f42565b905092915050565b600060208201905061358c6000830184612fa0565b92915050565b600060208201905081810360008301526135ac8184612fe0565b905092915050565b600060208201905081810360008301526135cd81613019565b9050919050565b600060208201905081810360008301526135ed8161307f565b9050919050565b6000602082019050818103600083015261360d816130bf565b9050919050565b6000602082019050818103600083015261362d81613125565b9050919050565b6000602082019050818103600083015261364d81613165565b9050919050565b6000602082019050818103600083015261366d816131cb565b9050919050565b6000602082019050818103600083015261368d81613231565b9050919050565b600060208201905081810360008301526136ad81613297565b9050919050565b600060208201905081810360008301526136cd816132d7565b9050919050565b600060208201905081810360008301526136ed8161333d565b9050919050565b6000602082019050818103600083015261370d8161337d565b9050919050565b6000602082019050818103600083015261372d816133bd565b9050919050565b6000602082019050818103600083015261374d816133fd565b9050919050565b600060208201905061376960008301846134b4565b92915050565b600060808201905061378460008301876134b4565b6137916020830186612fa0565b61379e60408301856134b4565b6137ab60608301846134b4565b95945050505050565b6000604051905081810181811067ffffffffffffffff821117156137db576137da613c50565b5b8060405250919050565b600067ffffffffffffffff821115613800576137ff613c50565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561382c5761382b613c50565b5b602082029050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b60006138b382613b6c565b91506138be83613b6c565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156138f3576138f2613bf2565b5b828201905092915050565b600061390982613b6c565b915061391483613b6c565b92508261392457613923613c21565b5b828204905092915050565b6000808291508390505b60018511156139795780860481111561395557613954613bf2565b5b60018516156139645780820291505b808102905061397285613c90565b9450613939565b94509492505050565b600061398d82613b6c565b915061399883613b6c565b92506139c57fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846139cd565b905092915050565b6000826139dd5760019050613a99565b816139eb5760009050613a99565b8160018114613a015760028114613a0b57613a3a565b6001915050613a99565b60ff841115613a1d57613a1c613bf2565b5b8360020a915084821115613a3457613a33613bf2565b5b50613a99565b5060208310610133831016604e8410600b8410161715613a6f5782820a905083811115613a6a57613a69613bf2565b5b613a99565b613a7c848484600161392f565b92509050818404811115613a9357613a92613bf2565b5b81810290505b9392505050565b6000613aab82613b6c565b9150613ab683613b6c565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613aef57613aee613bf2565b5b828202905092915050565b6000613b0582613b6c565b9150613b1083613b6c565b925082821015613b2357613b22613bf2565b5b828203905092915050565b6000613b3982613b4c565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60005b83811015613b94578082015181840152602081019050613b79565b83811115613ba3576000848401525b50505050565b6000613bb482613b6c565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613be757613be6613bf2565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b60008160011c9050919050565b613ca681613b2e565b8114613cb157600080fd5b50565b613cbd81613b40565b8114613cc857600080fd5b50565b613cd481613b6c565b8114613cdf57600080fd5b5056fea264697066735822122062098af6134485d1b82d6082e0b9bfd9164036ba592ee8a0b933122bbe3db7a164736f6c63430008000033

Deployed Bytecode Sourcemap

12668:6901:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15765:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16511:272;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12979:46;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14964:206;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12822:19;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15178:579;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14384:88;;;;;;;;;;;;;:::i;:::-;;13159:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5360:108;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14480:476;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18018:686;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14169:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13192:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16791:1219;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12883:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4294:103;;;;;;;;;;;;;:::i;:::-;;12925:45;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13814:347;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4071:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12850:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13231:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18712:854;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14288:88;;;;;;;;;;;;;:::i;:::-;;13065:23;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4405:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5064:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13097:53;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;13034:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5197:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15765:492;15866:7;15886:14;15932:1;15915:19;;:5;:19;;;15911:315;;15983:4;15959:28;;:13;:20;15973:5;15959:20;;;;;;;;;;;;;;;;;;;;;;;;;:28;;;15951:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;16033:13;16049:11;:18;16061:5;16049:18;;;;;;;;;;;;;;;;16033:34;;16091:41;16126:5;16091:30;16108:12;;16102:2;:18;;;;:::i;:::-;16091:6;:10;;:30;;;;:::i;:::-;:34;;:41;;;;:::i;:::-;16082:50;;15911:315;;;;16174:40;16209:4;;16174:30;16191:12;;16185:2;:18;;;;:::i;:::-;16174:6;:10;;:30;;;;:::i;:::-;:34;;:40;;;;:::i;:::-;16165:49;;15911:315;16243:6;16236:13;;;15765:492;;;;:::o;16511:272::-;16616:7;16636:18;16657:46;16696:6;16657:34;16677:13;16657:15;:19;;:34;;;;:::i;:::-;:38;;:46;;;;:::i;:::-;16636:67;;16723:52;16769:5;16723:41;16753:10;16723:25;16735:12;;16723:7;:11;;:25;;;;:::i;:::-;:29;;:41;;;;:::i;:::-;:45;;:52;;;;:::i;:::-;16716:59;;;16511:272;;;;:::o;12979:46::-;;;;;;;;;;;;;;;;;:::o;14964:206::-;4217:12;:10;:12::i;:::-;4206:23;;:7;:5;:7::i;:::-;:23;;;4198:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15110:7:::1;15085:32;;:13;:21;15099:6;15085:21;;;;;;;;;;;;;;;;;;;;;;;;;:32;;;;15077:41;;;::::0;::::1;;15155:7;15131:13;:21;15145:6;15131:21;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;14964:206:::0;;:::o;12822:19::-;;;;:::o;15178:579::-;4217:12;:10;:12::i;:::-;4206:23;;:7;:5;:7::i;:::-;:23;;;4198:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15374:7:::1;:14;15356:7;:14;:32;15334:129;;;;;;;;;;;;:::i;:::-;;;;;;;;;15489:1;15480:5;:10;15476:55;;15514:5;15507:4;:12;;;;15476:55;15548:9;15543:207;15567:7;:14;15563:1;:18;15543:207;;;15643:4;15614:33;;:13;:25;15628:7;15636:1;15628:10;;;;;;;;;;;;;;;;;;;;;;15614:25;;;;;;;;;;;;;;;;;;;;;;;;;:33;;;15606:42;;;::::0;::::1;;15685:1;15671:7;15679:1;15671:10;;;;;;;;;;;;;;;;;;;;;;:15;;15663:24;;;::::0;::::1;;15728:7;15736:1;15728:10;;;;;;;;;;;;;;;;;;;;;;15702:11;:23;15714:7;15722:1;15714:10;;;;;;;;;;;;;;;;;;;;;;15702:23;;;;;;;;;;;;;;;:36;;;;15588:1;15583:6;;;;;:::i;:::-;;;15543:207;;;;15178:579:::0;;;:::o;14384:88::-;4217:12;:10;:12::i;:::-;4206:23;;:7;:5;:7::i;:::-;:23;;;4198:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;13753:5:::1;13739:19;;:10;;;;;;;;;;;:19;;;13731:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;14460:4:::2;14447:10;;:17;;;;;;;;;;;;;;;;;;14384:88::o:0;13159:26::-;;;;:::o;5360:108::-;4217:12;:10;:12::i;:::-;4206:23;;:7;:5;:7::i;:::-;:23;;;4198:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5435:10:::1;5427:28;;:33;5456:3;5427:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;5360:108:::0;:::o;14480:476::-;4217:12;:10;:12::i;:::-;4206:23;;:7;:5;:7::i;:::-;:23;;;4198:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14653:7:::1;:14;14635:7;:14;:32;14613:129;;;;;;;;;;;;:::i;:::-;;;;;;;;;14760:9;14755:194;14779:7;:14;14775:1;:18;14755:194;;;14837:1;14823:7;14831:1;14823:10;;;;;;;;;;;;;;;;;;;;;;:15;;14815:24;;;::::0;::::1;;14882:4;14854:13;:25;14868:7;14876:1;14868:10;;;;;;;;;;;;;;;;;;;;;;14854:25;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;14927:7;14935:1;14927:10;;;;;;;;;;;;;;;;;;;;;;14901:11;:23;14913:7;14921:1;14913:10;;;;;;;;;;;;;;;;;;;;;;14901:23;;;;;;;;;;;;;;;:36;;;;14795:3;;;;;:::i;:::-;;;;14755:194;;;;14480:476:::0;;:::o;18018:686::-;4217:12;:10;:12::i;:::-;4206:23;;:7;:5;:7::i;:::-;:23;;;4198:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18188:8:::1;:15;18170:7;:14;:33;18148:131;;;;;;;;;;;;:::i;:::-;;;;;;;;;18297:9;18292:405;18316:7;:14;18312:1;:18;18292:405;;;18360:13;:25;18374:7;18382:1;18374:10;;;;;;;;;;;;;;;;;;;;;;18360:25;;;;;;;;;;;;;;;:32;;;;;;;;;;;;18355:331;;18413:6;18425:7;18433:1;18425:10;;;;;;;;;;;;;;;;;;;;;;18413:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18490:4;18455:13;:25;18469:7;18477:1;18469:10;;;;;;;;;;;;;;;;;;;;;;18455:25;;;;;;;;;;;;;;;:32;;;:39;;;;;;;;;;;;;;;;;;18549:8;18558:1;18549:11;;;;;;;;;;;;;;;;;;;;;;18513:13;:25;18527:7;18535:1;18527:10;;;;;;;;;;;;;;;;;;;;;;18513:25;;;;;;;;;;;;;;;:32;;;:47;;;;;;;:::i;:::-;;;;;;;;18620:15;18579:13;:25;18593:7;18601:1;18593:10;;;;;;;;;;;;;;;;;;;;;;18579:25;;;;;;;;;;;;;;;:38;;:56;;;;18669:1;18654:11;;:16;;;;;;;:::i;:::-;;;;;;;;18355:331;18337:1;18332:6;;;;;:::i;:::-;;;18292:405;;;;18018:686:::0;;:::o;14169:111::-;4217:12;:10;:12::i;:::-;4206:23;;:7;:5;:7::i;:::-;:23;;;4198:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14259:13:::1;14244:12;:28;;;;14169:111:::0;:::o;13192:30::-;;;;:::o;16791:1219::-;13638:4;13624:18;;:10;;;;;;;;;;;:18;;;13616:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;16907:20:::1;16930:103;16959:6;16998:1;16980:20;;:6;:20;;;;:42;;17013:9;16980:42;;;17003:7;16980:42;16930:14;:103::i;:::-;16907:126;;17070:1;17054:12;:17;;17046:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;17164:18;;17148:12;17130:15;;:30;;;;:::i;:::-;17129:53;17107:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;17282:1;17264:20;;:6;:20;;;17260:129;;17301:30;17315:6;17323:7;17301:13;:30::i;:::-;17260:129;;;17364:13;:11;:13::i;:::-;17260:129;17420:12;17401:15;;:31;;;;;;;:::i;:::-;;;;;;;;17450:13;:25;17464:10;17450:25;;;;;;;;;;;;;;;:32;;;;;;;;;;;;17445:174;;17499:6;17511:10;17499:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17572:4;17537:13;:25;17551:10;17537:25;;;;;;;;;;;;;;;:32;;;:39;;;;;;;;;;;;;;;;;;17606:1;17591:11;;:16;;;;;;;:::i;:::-;;;;;;;;17445:174;17670:1;17635:13;:25;17649:10;17635:25;;;;;;;;;;;;;;;:32;;;:36;17631:244;;;17725:138;17759:13;:25;17773:10;17759:25;;;;;;;;;;;;;;;:32;;;17810:13;:25;17824:10;17810:25;;;;;;;;;;;;;;;:38;;;17725:15;:138::i;:::-;17688:13;:25;17702:10;17688:25;;;;;;;;;;;;;;;:33;;;:175;;;;;;;:::i;:::-;;;;;;;;17631:244;17923:12;17887:13;:25;17901:10;17887:25;;;;;;;;;;;;;;;:32;;;:48;;;;;;;:::i;:::-;;;;;;;;17987:15;17946:13;:25;17960:10;17946:25;;;;;;;;;;;;;;;:38;;:56;;;;13681:1;16791:1219:::0;;:::o;12883:33::-;;;;:::o;4294:103::-;4217:12;:10;:12::i;:::-;4206:23;;:7;:5;:7::i;:::-;:23;;;4198:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4359:30:::1;4386:1;4359:18;:30::i;:::-;4294:103::o:0;12925:45::-;;;;;;;;;;;;;;;;;;;;;;:::o;13814:347::-;4217:12;:10;:12::i;:::-;4206:23;;:7;:5;:7::i;:::-;:23;;;4198:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14007:1:::1;13998:5;:10;;13990:19;;;::::0;::::1;;14027:5;14020:4;:12;;;;14056:11;14043:10;;:24;;;;;;;;;;;;;;;;;;14093:9;14078:12;:24;;;;14134:19;14113:18;:40;;;;13814:347:::0;;;;:::o;4071:87::-;4117:7;4144:6;;;;;;;;;;;4137:13;;4071:87;:::o;12850:24::-;;;;:::o;13231:29::-;;;;:::o;18712:854::-;18808:20;18857:3;18849:5;:11;18841:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;18916:7;18932:11;;18926:3;:17;:37;;18960:3;18926:37;;;18946:11;;18926:37;18916:47;;18974:9;18994:11;;18986:5;:19;:41;;19022:5;18986:41;;;19008:11;;18986:41;18974:53;;19040:30;19096:4;19091:2;:9;;;;:::i;:::-;19073:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;19040:61;;19119:6;19128:4;19119:13;;19114:416;19138:2;19134:1;:6;19114:416;;;19187:13;:24;19201:6;19208:1;19201:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19187:24;;;;;;;;;;;;;;;:31;;;19165:9;19175:1;19165:12;;;;;;;;;;;;;;;;;;;;;;:19;;:53;;;;;19325:148;19363:13;:24;19377:6;19384:1;19377:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19363:24;;;;;;;;;;;;;;;:31;;;19417:13;:24;19431:6;19438:1;19431:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19417:24;;;;;;;;;;;;;;;:37;;;19325:15;:148::i;:::-;19273:13;:24;19287:6;19294:1;19287:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19273:24;;;;;;;;;;;;;;;:32;;;:200;;;;:::i;:::-;19233:9;19243:1;19233:12;;;;;;;;;;;;;;;;;;;;;;:20;;:240;;;;;19509:6;19516:1;19509:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19488;19498:1;19488:12;;;;;;;;;;;;;;;;;;;;;;:18;;:30;;;;;;;;;;;19147:1;19142:6;;;;;:::i;:::-;;;19114:416;;;;19549:9;19542:16;;;;;18712:854;;;;:::o;14288:88::-;4217:12;:10;:12::i;:::-;4206:23;;:7;:5;:7::i;:::-;:23;;;4198:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;13638:4:::1;13624:18;;:10;;;;;;;;;;;:18;;;13616:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;14363:5:::2;14350:10;;:18;;;;;;;;;;;;;;;;;;14288:88::o:0;13065:23::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;4405:238::-;4217:12;:10;:12::i;:::-;4206:23;;:7;:5;:7::i;:::-;:23;;;4198:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4528:1:::1;4508:22;;:8;:22;;;;4486:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;4607:28;4626:8;4607:18;:28::i;:::-;4405:238:::0;:::o;5064:125::-;4217:12;:10;:12::i;:::-;4206:23;;:7;:5;:7::i;:::-;:23;;;4198:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5138:43:::1;5165:10;5177:3;5145:5;5138:26;;;;:43;;;;;:::i;:::-;5064:125:::0;;:::o;13097:53::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;13034:22::-;;;;;;;;;;;;;:::o;5197:155::-;4217:12;:10;:12::i;:::-;4206:23;;:7;:5;:7::i;:::-;:23;;;4198:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5261:11:::1;5282:5;5275:23;;;5307:4;5275:38;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5261:52;;5324:20;5333:5;5340:3;5324:8;:20::i;:::-;4277:1;5197:155:::0;:::o;1610:98::-;1668:7;1699:1;1695;:5;;;;:::i;:::-;1688:12;;1610:98;;;;:::o;1716:::-;1774:7;1805:1;1801;:5;;;;:::i;:::-;1794:12;;1716:98;;;;:::o;1504:::-;1562:7;1593:1;1589;:5;;;;:::i;:::-;1582:12;;1504:98;;;;:::o;3565:::-;3618:7;3645:10;3638:17;;3565:98;:::o;16359:144::-;16434:61;16466:10;16478:7;:5;:7::i;:::-;16487;16441:6;16434:31;;;;:61;;;;;;:::i;:::-;16359:144;;:::o;16265:86::-;16315:7;:5;:7::i;:::-;16307:25;;:36;16333:9;16307:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16265:86::o;4651:191::-;4725:16;4744:6;;;;;;;;;;;4725:25;;4770:8;4761:6;;:17;;;;;;;;;;;;;;;;;;4825:8;4794:40;;4815:8;4794:40;;;;;;;;;;;;4651:191;;:::o;9894:214::-;9977:123;10011:5;10054:23;;;10079:2;10083:5;10031:58;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9977:19;:123::i;:::-;9894:214;;;:::o;10116:285::-;10260:133;10294:5;10337:27;;;10366:4;10372:2;10376:5;10314:68;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10260:19;:133::i;:::-;10116:285;;;;:::o;11963:419::-;12044:23;12070:106;12112:4;12070:106;;;;;;;;;;;;;;;;;12078:5;12070:27;;;;:106;;;;;:::i;:::-;12044:132;;12211:1;12191:10;:17;:21;12187:188;;;12266:10;12255:30;;;;;;;;;;;;:::i;:::-;12229:134;;;;;;;;;;;;:::i;:::-;;;;;;;;;12187:188;11963:419;;;:::o;6641:229::-;6778:12;6810:52;6832:6;6840:4;6846:1;6849:12;6810:21;:52::i;:::-;6803:59;;6641:229;;;;;:::o;7242:571::-;7412:12;7484:5;7459:21;:30;;7437:118;;;;;;;;;;;;:::i;:::-;;;;;;;;;7574:18;7585:6;7574:10;:18::i;:::-;7566:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;7640:12;7654:23;7681:6;:11;;7700:5;7721:4;7681:55;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7639:97;;;;7754:51;7771:7;7780:10;7792:12;7754:16;:51::i;:::-;7747:58;;;;7242:571;;;;;;:::o;5830:196::-;5890:4;5907:12;5974:7;5962:20;5954:28;;6017:1;6010:4;:8;6003:15;;;5830:196;;;:::o;9251:550::-;9401:12;9430:7;9426:368;;;9461:10;9454:17;;;;9426:368;9528:1;9508:10;:17;:21;9504:279;;;9611:10;9605:17;9672:15;9659:10;9655:2;9651:19;9644:44;9559:148;9754:12;9747:20;;;;;;;;;;;:::i;:::-;;;;;;;;9251:550;;;;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;24:622:1:-;;145:80;160:64;217:6;160:64;:::i;:::-;145:80;:::i;:::-;136:89;;245:5;273:6;266:5;259:21;299:4;292:5;288:16;281:23;;324:6;374:3;366:4;358:6;354:17;349:3;345:27;342:36;339:2;;;391:1;388;381:12;339:2;419:1;404:236;429:6;426:1;423:13;404:236;;;496:3;524:37;557:3;545:10;524:37;:::i;:::-;519:3;512:50;591:4;586:3;582:14;575:21;;625:4;620:3;616:14;609:21;;464:176;451:1;448;444:9;439:14;;404:236;;;408:14;126:520;;;;;;;:::o;669:622::-;;790:80;805:64;862:6;805:64;:::i;:::-;790:80;:::i;:::-;781:89;;890:5;918:6;911:5;904:21;944:4;937:5;933:16;926:23;;969:6;1019:3;1011:4;1003:6;999:17;994:3;990:27;987:36;984:2;;;1036:1;1033;1026:12;984:2;1064:1;1049:236;1074:6;1071:1;1068:13;1049:236;;;1141:3;1169:37;1202:3;1190:10;1169:37;:::i;:::-;1164:3;1157:50;1236:4;1231:3;1227:14;1220:21;;1270:4;1265:3;1261:14;1254:21;;1109:176;1096:1;1093;1089:9;1084:14;;1049:236;;;1053:14;771:520;;;;;;;:::o;1297:139::-;;1381:6;1368:20;1359:29;;1397:33;1424:5;1397:33;:::i;:::-;1349:87;;;;:::o;1459:303::-;;1579:3;1572:4;1564:6;1560:17;1556:27;1546:2;;1597:1;1594;1587:12;1546:2;1637:6;1624:20;1662:94;1752:3;1744:6;1737:4;1729:6;1725:17;1662:94;:::i;:::-;1653:103;;1536:226;;;;;:::o;1785:303::-;;1905:3;1898:4;1890:6;1886:17;1882:27;1872:2;;1923:1;1920;1913:12;1872:2;1963:6;1950:20;1988:94;2078:3;2070:6;2063:4;2055:6;2051:17;1988:94;:::i;:::-;1979:103;;1862:226;;;;;:::o;2094:133::-;;2175:6;2162:20;2153:29;;2191:30;2215:5;2191:30;:::i;:::-;2143:84;;;;:::o;2233:137::-;;2318:6;2312:13;2303:22;;2334:30;2358:5;2334:30;:::i;:::-;2293:77;;;;:::o;2376:139::-;;2460:6;2447:20;2438:29;;2476:33;2503:5;2476:33;:::i;:::-;2428:87;;;;:::o;2521:143::-;;2609:6;2603:13;2594:22;;2625:33;2652:5;2625:33;:::i;:::-;2584:80;;;;:::o;2670:262::-;;2778:2;2766:9;2757:7;2753:23;2749:32;2746:2;;;2794:1;2791;2784:12;2746:2;2837:1;2862:53;2907:7;2898:6;2887:9;2883:22;2862:53;:::i;:::-;2852:63;;2808:117;2736:196;;;;:::o;2938:401::-;;;3060:2;3048:9;3039:7;3035:23;3031:32;3028:2;;;3076:1;3073;3066:12;3028:2;3119:1;3144:53;3189:7;3180:6;3169:9;3165:22;3144:53;:::i;:::-;3134:63;;3090:117;3246:2;3272:50;3314:7;3305:6;3294:9;3290:22;3272:50;:::i;:::-;3262:60;;3217:115;3018:321;;;;;:::o;3345:407::-;;;3470:2;3458:9;3449:7;3445:23;3441:32;3438:2;;;3486:1;3483;3476:12;3438:2;3529:1;3554:53;3599:7;3590:6;3579:9;3575:22;3554:53;:::i;:::-;3544:63;;3500:117;3656:2;3682:53;3727:7;3718:6;3707:9;3703:22;3682:53;:::i;:::-;3672:63;;3627:118;3428:324;;;;;:::o;3758:693::-;;;3933:2;3921:9;3912:7;3908:23;3904:32;3901:2;;;3949:1;3946;3939:12;3901:2;4020:1;4009:9;4005:17;3992:31;4050:18;4042:6;4039:30;4036:2;;;4082:1;4079;4072:12;4036:2;4110:78;4180:7;4171:6;4160:9;4156:22;4110:78;:::i;:::-;4100:88;;3963:235;4265:2;4254:9;4250:18;4237:32;4296:18;4288:6;4285:30;4282:2;;;4328:1;4325;4318:12;4282:2;4356:78;4426:7;4417:6;4406:9;4402:22;4356:78;:::i;:::-;4346:88;;4208:236;3891:560;;;;;:::o;4457:838::-;;;;4649:2;4637:9;4628:7;4624:23;4620:32;4617:2;;;4665:1;4662;4655:12;4617:2;4736:1;4725:9;4721:17;4708:31;4766:18;4758:6;4755:30;4752:2;;;4798:1;4795;4788:12;4752:2;4826:78;4896:7;4887:6;4876:9;4872:22;4826:78;:::i;:::-;4816:88;;4679:235;4981:2;4970:9;4966:18;4953:32;5012:18;5004:6;5001:30;4998:2;;;5044:1;5041;5034:12;4998:2;5072:78;5142:7;5133:6;5122:9;5118:22;5072:78;:::i;:::-;5062:88;;4924:236;5199:2;5225:53;5270:7;5261:6;5250:9;5246:22;5225:53;:::i;:::-;5215:63;;5170:118;4607:688;;;;;:::o;5301:278::-;;5417:2;5405:9;5396:7;5392:23;5388:32;5385:2;;;5433:1;5430;5423:12;5385:2;5476:1;5501:61;5554:7;5545:6;5534:9;5530:22;5501:61;:::i;:::-;5491:71;;5447:125;5375:204;;;;:::o;5585:262::-;;5693:2;5681:9;5672:7;5668:23;5664:32;5661:2;;;5709:1;5706;5699:12;5661:2;5752:1;5777:53;5822:7;5813:6;5802:9;5798:22;5777:53;:::i;:::-;5767:63;;5723:117;5651:196;;;;:::o;5853:284::-;;5972:2;5960:9;5951:7;5947:23;5943:32;5940:2;;;5988:1;5985;5978:12;5940:2;6031:1;6056:64;6112:7;6103:6;6092:9;6088:22;6056:64;:::i;:::-;6046:74;;6002:128;5930:207;;;;:::o;6143:407::-;;;6268:2;6256:9;6247:7;6243:23;6239:32;6236:2;;;6284:1;6281;6274:12;6236:2;6327:1;6352:53;6397:7;6388:6;6377:9;6373:22;6352:53;:::i;:::-;6342:63;;6298:117;6454:2;6480:53;6525:7;6516:6;6505:9;6501:22;6480:53;:::i;:::-;6470:63;;6425:118;6226:324;;;;;:::o;6556:692::-;;;;;6712:3;6700:9;6691:7;6687:23;6683:33;6680:2;;;6729:1;6726;6719:12;6680:2;6772:1;6797:53;6842:7;6833:6;6822:9;6818:22;6797:53;:::i;:::-;6787:63;;6743:117;6899:2;6925:53;6970:7;6961:6;6950:9;6946:22;6925:53;:::i;:::-;6915:63;;6870:118;7027:2;7053:53;7098:7;7089:6;7078:9;7074:22;7053:53;:::i;:::-;7043:63;;6998:118;7155:2;7181:50;7223:7;7214:6;7203:9;7199:22;7181:50;:::i;:::-;7171:60;;7126:115;6670:578;;;;;;;:::o;7254:295::-;;7402:104;7502:3;7494:6;7402:104;:::i;:::-;7538:4;7533:3;7529:14;7515:28;;7392:157;;;;:::o;7555:108::-;7632:24;7650:5;7632:24;:::i;:::-;7627:3;7620:37;7610:53;;:::o;7669:118::-;7756:24;7774:5;7756:24;:::i;:::-;7751:3;7744:37;7734:53;;:::o;7861:964::-;;8067:83;8144:5;8067:83;:::i;:::-;8166:115;8274:6;8269:3;8166:115;:::i;:::-;8159:122;;8305:85;8384:5;8305:85;:::i;:::-;8413:7;8444:1;8429:371;8454:6;8451:1;8448:13;8429:371;;;8530:6;8524:13;8557:121;8674:3;8659:13;8557:121;:::i;:::-;8550:128;;8701:89;8783:6;8701:89;:::i;:::-;8691:99;;8489:311;8476:1;8473;8469:9;8464:14;;8429:371;;;8433:14;8816:3;8809:10;;8043:782;;;;;;;:::o;8831:109::-;8912:21;8927:5;8912:21;:::i;:::-;8907:3;8900:34;8890:50;;:::o;8946:373::-;;9078:38;9110:5;9078:38;:::i;:::-;9132:88;9213:6;9208:3;9132:88;:::i;:::-;9125:95;;9229:52;9274:6;9269:3;9262:4;9255:5;9251:16;9229:52;:::i;:::-;9306:6;9301:3;9297:16;9290:23;;9054:265;;;;;:::o;9325:364::-;;9441:39;9474:5;9441:39;:::i;:::-;9496:71;9560:6;9555:3;9496:71;:::i;:::-;9489:78;;9576:52;9621:6;9616:3;9609:4;9602:5;9598:16;9576:52;:::i;:::-;9653:29;9675:6;9653:29;:::i;:::-;9648:3;9644:39;9637:46;;9417:272;;;;;:::o;9695:370::-;;9858:67;9922:2;9917:3;9858:67;:::i;:::-;9851:74;;9955:34;9951:1;9946:3;9942:11;9935:55;10021:8;10016:2;10011:3;10007:12;10000:30;10056:2;10051:3;10047:12;10040:19;;9841:224;;;:::o;10071:324::-;;10234:67;10298:2;10293:3;10234:67;:::i;:::-;10227:74;;10331:28;10327:1;10322:3;10318:11;10311:49;10386:2;10381:3;10377:12;10370:19;;10217:178;;;:::o;10401:370::-;;10564:67;10628:2;10623:3;10564:67;:::i;:::-;10557:74;;10661:34;10657:1;10652:3;10648:11;10641:55;10727:8;10722:2;10717:3;10713:12;10706:30;10762:2;10757:3;10753:12;10746:19;;10547:224;;;:::o;10777:321::-;;10940:67;11004:2;10999:3;10940:67;:::i;:::-;10933:74;;11037:25;11033:1;11028:3;11024:11;11017:46;11089:2;11084:3;11080:12;11073:19;;10923:175;;;:::o;11104:370::-;;11267:67;11331:2;11326:3;11267:67;:::i;:::-;11260:74;;11364:34;11360:1;11355:3;11351:11;11344:55;11430:8;11425:2;11420:3;11416:12;11409:30;11465:2;11460:3;11456:12;11449:19;;11250:224;;;:::o;11480:380::-;;11643:67;11707:2;11702:3;11643:67;:::i;:::-;11636:74;;11740:34;11736:1;11731:3;11727:11;11720:55;11806:18;11801:2;11796:3;11792:12;11785:40;11851:2;11846:3;11842:12;11835:19;;11626:234;;;:::o;11866:379::-;;12029:67;12093:2;12088:3;12029:67;:::i;:::-;12022:74;;12126:34;12122:1;12117:3;12113:11;12106:55;12192:17;12187:2;12182:3;12178:12;12171:39;12236:2;12231:3;12227:12;12220:19;;12012:233;;;:::o;12251:318::-;;12414:67;12478:2;12473:3;12414:67;:::i;:::-;12407:74;;12511:22;12507:1;12502:3;12498:11;12491:43;12560:2;12555:3;12551:12;12544:19;;12397:172;;;:::o;12575:369::-;;12738:67;12802:2;12797:3;12738:67;:::i;:::-;12731:74;;12835:34;12831:1;12826:3;12822:11;12815:55;12901:7;12896:2;12891:3;12887:12;12880:29;12935:2;12930:3;12926:12;12919:19;;12721:223;;;:::o;12950:330::-;;13113:67;13177:2;13172:3;13113:67;:::i;:::-;13106:74;;13210:34;13206:1;13201:3;13197:11;13190:55;13271:2;13266:3;13262:12;13255:19;;13096:184;;;:::o;13286:327::-;;13449:67;13513:2;13508:3;13449:67;:::i;:::-;13442:74;;13546:31;13542:1;13537:3;13533:11;13526:52;13604:2;13599:3;13595:12;13588:19;;13432:181;;;:::o;13619:321::-;;13782:67;13846:2;13841:3;13782:67;:::i;:::-;13775:74;;13879:25;13875:1;13870:3;13866:11;13859:46;13931:2;13926:3;13922:12;13915:19;;13765:175;;;:::o;13946:374::-;;14109:67;14173:2;14168:3;14109:67;:::i;:::-;14102:74;;14206:34;14202:1;14197:3;14193:11;14186:55;14272:12;14267:2;14262:3;14258:12;14251:34;14311:2;14306:3;14302:12;14295:19;;14092:228;;;:::o;14390:685::-;14535:4;14530:3;14526:14;14624:4;14617:5;14613:16;14607:23;14643:63;14700:4;14695:3;14691:14;14677:12;14643:63;:::i;:::-;14550:166;14799:4;14792:5;14788:16;14782:23;14818:63;14875:4;14870:3;14866:14;14852:12;14818:63;:::i;:::-;14726:165;14976:4;14969:5;14965:16;14959:23;14995:63;15052:4;15047:3;15043:14;15029:12;14995:63;:::i;:::-;14901:167;14504:571;;;:::o;15081:108::-;15158:24;15176:5;15158:24;:::i;:::-;15153:3;15146:37;15136:53;;:::o;15195:118::-;15282:24;15300:5;15282:24;:::i;:::-;15277:3;15270:37;15260:53;;:::o;15319:271::-;;15471:93;15560:3;15551:6;15471:93;:::i;:::-;15464:100;;15581:3;15574:10;;15453:137;;;;:::o;15596:222::-;;15727:2;15716:9;15712:18;15704:26;;15740:71;15808:1;15797:9;15793:17;15784:6;15740:71;:::i;:::-;15694:124;;;;:::o;15824:442::-;;16011:2;16000:9;15996:18;15988:26;;16024:71;16092:1;16081:9;16077:17;16068:6;16024:71;:::i;:::-;16105:72;16173:2;16162:9;16158:18;16149:6;16105:72;:::i;:::-;16187;16255:2;16244:9;16240:18;16231:6;16187:72;:::i;:::-;15978:288;;;;;;:::o;16272:332::-;;16431:2;16420:9;16416:18;16408:26;;16444:71;16512:1;16501:9;16497:17;16488:6;16444:71;:::i;:::-;16525:72;16593:2;16582:9;16578:18;16569:6;16525:72;:::i;:::-;16398:206;;;;;:::o;16610:489::-;;16849:2;16838:9;16834:18;16826:26;;16898:9;16892:4;16888:20;16884:1;16873:9;16869:17;16862:47;16926:166;17087:4;17078:6;16926:166;:::i;:::-;16918:174;;16816:283;;;;:::o;17105:210::-;;17230:2;17219:9;17215:18;17207:26;;17243:65;17305:1;17294:9;17290:17;17281:6;17243:65;:::i;:::-;17197:118;;;;:::o;17321:313::-;;17472:2;17461:9;17457:18;17449:26;;17521:9;17515:4;17511:20;17507:1;17496:9;17492:17;17485:47;17549:78;17622:4;17613:6;17549:78;:::i;:::-;17541:86;;17439:195;;;;:::o;17640:419::-;;17844:2;17833:9;17829:18;17821:26;;17893:9;17887:4;17883:20;17879:1;17868:9;17864:17;17857:47;17921:131;18047:4;17921:131;:::i;:::-;17913:139;;17811:248;;;:::o;18065:419::-;;18269:2;18258:9;18254:18;18246:26;;18318:9;18312:4;18308:20;18304:1;18293:9;18289:17;18282:47;18346:131;18472:4;18346:131;:::i;:::-;18338:139;;18236:248;;;:::o;18490:419::-;;18694:2;18683:9;18679:18;18671:26;;18743:9;18737:4;18733:20;18729:1;18718:9;18714:17;18707:47;18771:131;18897:4;18771:131;:::i;:::-;18763:139;;18661:248;;;:::o;18915:419::-;;19119:2;19108:9;19104:18;19096:26;;19168:9;19162:4;19158:20;19154:1;19143:9;19139:17;19132:47;19196:131;19322:4;19196:131;:::i;:::-;19188:139;;19086:248;;;:::o;19340:419::-;;19544:2;19533:9;19529:18;19521:26;;19593:9;19587:4;19583:20;19579:1;19568:9;19564:17;19557:47;19621:131;19747:4;19621:131;:::i;:::-;19613:139;;19511:248;;;:::o;19765:419::-;;19969:2;19958:9;19954:18;19946:26;;20018:9;20012:4;20008:20;20004:1;19993:9;19989:17;19982:47;20046:131;20172:4;20046:131;:::i;:::-;20038:139;;19936:248;;;:::o;20190:419::-;;20394:2;20383:9;20379:18;20371:26;;20443:9;20437:4;20433:20;20429:1;20418:9;20414:17;20407:47;20471:131;20597:4;20471:131;:::i;:::-;20463:139;;20361:248;;;:::o;20615:419::-;;20819:2;20808:9;20804:18;20796:26;;20868:9;20862:4;20858:20;20854:1;20843:9;20839:17;20832:47;20896:131;21022:4;20896:131;:::i;:::-;20888:139;;20786:248;;;:::o;21040:419::-;;21244:2;21233:9;21229:18;21221:26;;21293:9;21287:4;21283:20;21279:1;21268:9;21264:17;21257:47;21321:131;21447:4;21321:131;:::i;:::-;21313:139;;21211:248;;;:::o;21465:419::-;;21669:2;21658:9;21654:18;21646:26;;21718:9;21712:4;21708:20;21704:1;21693:9;21689:17;21682:47;21746:131;21872:4;21746:131;:::i;:::-;21738:139;;21636:248;;;:::o;21890:419::-;;22094:2;22083:9;22079:18;22071:26;;22143:9;22137:4;22133:20;22129:1;22118:9;22114:17;22107:47;22171:131;22297:4;22171:131;:::i;:::-;22163:139;;22061:248;;;:::o;22315:419::-;;22519:2;22508:9;22504:18;22496:26;;22568:9;22562:4;22558:20;22554:1;22543:9;22539:17;22532:47;22596:131;22722:4;22596:131;:::i;:::-;22588:139;;22486:248;;;:::o;22740:419::-;;22944:2;22933:9;22929:18;22921:26;;22993:9;22987:4;22983:20;22979:1;22968:9;22964:17;22957:47;23021:131;23147:4;23021:131;:::i;:::-;23013:139;;22911:248;;;:::o;23165:222::-;;23296:2;23285:9;23281:18;23273:26;;23309:71;23377:1;23366:9;23362:17;23353:6;23309:71;:::i;:::-;23263:124;;;;:::o;23393:541::-;;23602:3;23591:9;23587:19;23579:27;;23616:71;23684:1;23673:9;23669:17;23660:6;23616:71;:::i;:::-;23697:66;23759:2;23748:9;23744:18;23735:6;23697:66;:::i;:::-;23773:72;23841:2;23830:9;23826:18;23817:6;23773:72;:::i;:::-;23855;23923:2;23912:9;23908:18;23899:6;23855:72;:::i;:::-;23569:365;;;;;;;:::o;23940:283::-;;24006:2;24000:9;23990:19;;24048:4;24040:6;24036:17;24155:6;24143:10;24140:22;24119:18;24107:10;24104:34;24101:62;24098:2;;;24166:18;;:::i;:::-;24098:2;24206:10;24202:2;24195:22;23980:243;;;;:::o;24229:311::-;;24396:18;24388:6;24385:30;24382:2;;;24418:18;;:::i;:::-;24382:2;24468:4;24460:6;24456:17;24448:25;;24528:4;24522;24518:15;24510:23;;24311:229;;;:::o;24546:311::-;;24713:18;24705:6;24702:30;24699:2;;;24735:18;;:::i;:::-;24699:2;24785:4;24777:6;24773:17;24765:25;;24845:4;24839;24835:15;24827:23;;24628:229;;;:::o;24863:161::-;;24982:3;24974:11;;25012:4;25007:3;25003:14;24995:22;;24964:60;;;:::o;25030:143::-;;25160:5;25154:12;25144:22;;25133:40;;;:::o;25179:98::-;;25264:5;25258:12;25248:22;;25237:40;;;:::o;25283:99::-;;25369:5;25363:12;25353:22;;25342:40;;;:::o;25388:142::-;;25519:4;25514:3;25510:14;25502:22;;25492:38;;;:::o;25536:213::-;;25698:6;25693:3;25686:19;25738:4;25733:3;25729:14;25714:29;;25676:73;;;;:::o;25755:147::-;;25893:3;25878:18;;25868:34;;;;:::o;25908:169::-;;26026:6;26021:3;26014:19;26066:4;26061:3;26057:14;26042:29;;26004:73;;;;:::o;26083:305::-;;26142:20;26160:1;26142:20;:::i;:::-;26137:25;;26176:20;26194:1;26176:20;:::i;:::-;26171:25;;26330:1;26262:66;26258:74;26255:1;26252:81;26249:2;;;26336:18;;:::i;:::-;26249:2;26380:1;26377;26373:9;26366:16;;26127:261;;;;:::o;26394:185::-;;26451:20;26469:1;26451:20;:::i;:::-;26446:25;;26485:20;26503:1;26485:20;:::i;:::-;26480:25;;26524:1;26514:2;;26529:18;;:::i;:::-;26514:2;26571:1;26568;26564:9;26559:14;;26436:143;;;;:::o;26585:848::-;;;26677:6;26668:15;;26701:5;26692:14;;26715:712;26736:1;26726:8;26723:15;26715:712;;;26831:4;26826:3;26822:14;26816:4;26813:24;26810:2;;;26840:18;;:::i;:::-;26810:2;26890:1;26880:8;26876:16;26873:2;;;27305:4;27298:5;27294:16;27285:25;;26873:2;27355:4;27349;27345:15;27337:23;;27385:32;27408:8;27385:32;:::i;:::-;27373:44;;26715:712;;;26658:775;;;;;;;:::o;27439:285::-;;27523:23;27541:4;27523:23;:::i;:::-;27515:31;;27567:27;27585:8;27567:27;:::i;:::-;27555:39;;27613:104;27650:66;27640:8;27634:4;27613:104;:::i;:::-;27604:113;;27505:219;;;;:::o;27730:1073::-;;27975:8;27965:2;;27996:1;27987:10;;27998:5;;27965:2;28024:4;28014:2;;28041:1;28032:10;;28043:5;;28014:2;28110:4;28158:1;28153:27;;;;28194:1;28189:191;;;;28103:277;;28153:27;28171:1;28162:10;;28173:5;;;28189:191;28234:3;28224:8;28221:17;28218:2;;;28241:18;;:::i;:::-;28218:2;28290:8;28287:1;28283:16;28274:25;;28325:3;28318:5;28315:14;28312:2;;;28332:18;;:::i;:::-;28312:2;28365:5;;;28103:277;;28489:2;28479:8;28476:16;28470:3;28464:4;28461:13;28457:36;28439:2;28429:8;28426:16;28421:2;28415:4;28412:12;28408:35;28392:111;28389:2;;;28545:8;28539:4;28535:19;28526:28;;28580:3;28573:5;28570:14;28567:2;;;28587:18;;:::i;:::-;28567:2;28620:5;;28389:2;28660:42;28698:3;28688:8;28682:4;28679:1;28660:42;:::i;:::-;28645:57;;;;28734:4;28729:3;28725:14;28718:5;28715:25;28712:2;;;28743:18;;:::i;:::-;28712:2;28792:4;28785:5;28781:16;28772:25;;27790:1013;;;;;;:::o;28809:348::-;;28872:20;28890:1;28872:20;:::i;:::-;28867:25;;28906:20;28924:1;28906:20;:::i;:::-;28901:25;;29094:1;29026:66;29022:74;29019:1;29016:81;29011:1;29004:9;28997:17;28993:105;28990:2;;;29101:18;;:::i;:::-;28990:2;29149:1;29146;29142:9;29131:20;;28857:300;;;;:::o;29163:191::-;;29223:20;29241:1;29223:20;:::i;:::-;29218:25;;29257:20;29275:1;29257:20;:::i;:::-;29252:25;;29296:1;29293;29290:8;29287:2;;;29301:18;;:::i;:::-;29287:2;29346:1;29343;29339:9;29331:17;;29208:146;;;;:::o;29360:96::-;;29426:24;29444:5;29426:24;:::i;:::-;29415:35;;29405:51;;;:::o;29462:90::-;;29539:5;29532:13;29525:21;29514:32;;29504:48;;;:::o;29558:126::-;;29635:42;29628:5;29624:54;29613:65;;29603:81;;;:::o;29690:77::-;;29756:5;29745:16;;29735:32;;;:::o;29773:307::-;29841:1;29851:113;29865:6;29862:1;29859:13;29851:113;;;29950:1;29945:3;29941:11;29935:18;29931:1;29926:3;29922:11;29915:39;29887:2;29884:1;29880:10;29875:15;;29851:113;;;29982:6;29979:1;29976:13;29973:2;;;30062:1;30053:6;30048:3;30044:16;30037:27;29973:2;29822:258;;;;:::o;30086:233::-;;30148:24;30166:5;30148:24;:::i;:::-;30139:33;;30194:66;30187:5;30184:77;30181:2;;;30264:18;;:::i;:::-;30181:2;30311:1;30304:5;30300:13;30293:20;;30129:190;;;:::o;30325:180::-;30373:77;30370:1;30363:88;30470:4;30467:1;30460:15;30494:4;30491:1;30484:15;30511:180;30559:77;30556:1;30549:88;30656:4;30653:1;30646:15;30680:4;30677:1;30670:15;30697:180;30745:77;30742:1;30735:88;30842:4;30839:1;30832:15;30866:4;30863:1;30856:15;30883:102;;30975:2;30971:7;30966:2;30959:5;30955:14;30951:28;30941:38;;30931:54;;;:::o;30991:102::-;;31080:5;31077:1;31073:13;31052:34;;31042:51;;;:::o;31099:122::-;31172:24;31190:5;31172:24;:::i;:::-;31165:5;31162:35;31152:2;;31211:1;31208;31201:12;31152:2;31142:79;:::o;31227:116::-;31297:21;31312:5;31297:21;:::i;:::-;31290:5;31287:32;31277:2;;31333:1;31330;31323:12;31277:2;31267:76;:::o;31349:122::-;31422:24;31440:5;31422:24;:::i;:::-;31415:5;31412:35;31402:2;;31461:1;31458;31451:12;31402:2;31392:79;:::o

Swarm Source

ipfs://62098af6134485d1b82d6082e0b9bfd9164036ba592ee8a0b933122bbe3db7a1

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  ]
[ 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.