ETH Price: $3,516.42 (+4.83%)
Gas: 7.72 Gwei

Contract

0xA9a9c6DA6B90DA04969125c5187B2126DC336736
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Approve178905252023-08-11 8:42:47497 days ago1691743367IN
0xA9a9c6DA...6DC336736
0 ETH0.0008134117.37700556
Transfer178698142023-08-08 11:09:35500 days ago1691492975IN
0xA9a9c6DA...6DC336736
0 ETH0.0017950921.79066542
Update Max Walle...178697972023-08-08 11:06:11500 days ago1691492771IN
0xA9a9c6DA...6DC336736
0 ETH0.0007370922.90310428
Update Max Txn A...178697952023-08-08 11:05:47500 days ago1691492747IN
0xA9a9c6DA...6DC336736
0 ETH0.0007461523.19994379
Change Fees178697802023-08-08 11:02:47500 days ago1691492567IN
0xA9a9c6DA...6DC336736
0 ETH0.0012876422.77035037
Set Swap Back Se...178697782023-08-08 11:02:23500 days ago1691492543IN
0xA9a9c6DA...6DC336736
0 ETH0.0007012522.07573849
Set Limits Enabl...178697722023-08-08 11:01:11500 days ago1691492471IN
0xA9a9c6DA...6DC336736
0 ETH0.0006242623.74906734
Set Limits Enabl...178697692023-08-08 11:00:35500 days ago1691492435IN
0xA9a9c6DA...6DC336736
0 ETH0.0006234723.71904876
Update Max Walle...178697582023-08-08 10:58:23500 days ago1691492303IN
0xA9a9c6DA...6DC336736
0 ETH0.0007078622.0360846
Update Max Txn A...178697572023-08-08 10:58:11500 days ago1691492291IN
0xA9a9c6DA...6DC336736
0 ETH0.0007516723.41517817
Setis Limit Exem...178697492023-08-08 10:56:35500 days ago1691492195IN
0xA9a9c6DA...6DC336736
0 ETH0.0005497420.39024883
Approve Max178697482023-08-08 10:56:23500 days ago1691492183IN
0xA9a9c6DA...6DC336736
0 ETH0.0009717120.88053507
Approve178697342023-08-08 10:53:35500 days ago1691492015IN
0xA9a9c6DA...6DC336736
0 ETH0.0010701522.87331807
Change Fees178697332023-08-08 10:53:23500 days ago1691492003IN
0xA9a9c6DA...6DC336736
0 ETH0.0008014323.13824289
Clear Stuck Bala...178697102023-08-08 10:48:47500 days ago1691491727IN
0xA9a9c6DA...6DC336736
0 ETH0.0004278317.87865059
Change Fees178696722023-08-08 10:41:11500 days ago1691491271IN
0xA9a9c6DA...6DC336736
0 ETH0.000941116.64229665
Change Fees178696132023-08-08 10:29:23500 days ago1691490563IN
0xA9a9c6DA...6DC336736
0 ETH0.0005551316.02735205
Change Fees178696092023-08-08 10:28:35500 days ago1691490515IN
0xA9a9c6DA...6DC336736
0 ETH0.0006335916.06117963
Approve178695892023-08-08 10:24:35500 days ago1691490275IN
0xA9a9c6DA...6DC336736
0 ETH0.0007985917.06903805
Approve178695832023-08-08 10:23:23500 days ago1691490203IN
0xA9a9c6DA...6DC336736
0 ETH0.0013190828
Approve178695832023-08-08 10:23:23500 days ago1691490203IN
0xA9a9c6DA...6DC336736
0 ETH0.0013190828
Approve178695832023-08-08 10:23:23500 days ago1691490203IN
0xA9a9c6DA...6DC336736
0 ETH0.0013190828
Approve178695832023-08-08 10:23:23500 days ago1691490203IN
0xA9a9c6DA...6DC336736
0 ETH0.0013190828
Approve178695832023-08-08 10:23:23500 days ago1691490203IN
0xA9a9c6DA...6DC336736
0 ETH0.0013190828
Approve178695822023-08-08 10:23:11500 days ago1691490191IN
0xA9a9c6DA...6DC336736
0 ETH0.000942620.00857737
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block
From
To
178698142023-08-08 11:09:35500 days ago1691492975
0xA9a9c6DA...6DC336736
0.70086334 ETH
178698142023-08-08 11:09:35500 days ago1691492975
0xA9a9c6DA...6DC336736
0.70086334 ETH
178696842023-08-08 10:43:35500 days ago1691491415
0xA9a9c6DA...6DC336736
0.01385708 ETH
178696842023-08-08 10:43:35500 days ago1691491415
0xA9a9c6DA...6DC336736
0.01385708 ETH
178696842023-08-08 10:43:35500 days ago1691491415
0xA9a9c6DA...6DC336736
0.01404981 ETH
178696842023-08-08 10:43:35500 days ago1691491415
0xA9a9c6DA...6DC336736
0.01404981 ETH
178696842023-08-08 10:43:35500 days ago1691491415
0xA9a9c6DA...6DC336736
0.01424659 ETH
178696842023-08-08 10:43:35500 days ago1691491415
0xA9a9c6DA...6DC336736
0.01424659 ETH
178696842023-08-08 10:43:35500 days ago1691491415
0xA9a9c6DA...6DC336736
0.01444754 ETH
178696842023-08-08 10:43:35500 days ago1691491415
0xA9a9c6DA...6DC336736
0.01444754 ETH
178696842023-08-08 10:43:35500 days ago1691491415
0xA9a9c6DA...6DC336736
0.01465277 ETH
178696842023-08-08 10:43:35500 days ago1691491415
0xA9a9c6DA...6DC336736
0.01465277 ETH
178696842023-08-08 10:43:35500 days ago1691491415
0xA9a9c6DA...6DC336736
0.01486241 ETH
178696842023-08-08 10:43:35500 days ago1691491415
0xA9a9c6DA...6DC336736
0.01486241 ETH
178696842023-08-08 10:43:35500 days ago1691491415
0xA9a9c6DA...6DC336736
0.01507658 ETH
178696842023-08-08 10:43:35500 days ago1691491415
0xA9a9c6DA...6DC336736
0.01507658 ETH
178696842023-08-08 10:43:35500 days ago1691491415
0xA9a9c6DA...6DC336736
0.01529541 ETH
178696842023-08-08 10:43:35500 days ago1691491415
0xA9a9c6DA...6DC336736
0.01529541 ETH
178696842023-08-08 10:43:35500 days ago1691491415
0xA9a9c6DA...6DC336736
0.01551905 ETH
178696842023-08-08 10:43:35500 days ago1691491415
0xA9a9c6DA...6DC336736
0.01551905 ETH
178696802023-08-08 10:42:47500 days ago1691491367
0xA9a9c6DA...6DC336736
0.01574764 ETH
178696802023-08-08 10:42:47500 days ago1691491367
0xA9a9c6DA...6DC336736
0.01574764 ETH
178696802023-08-08 10:42:47500 days ago1691491367
0xA9a9c6DA...6DC336736
0.01598131 ETH
178696802023-08-08 10:42:47500 days ago1691491367
0xA9a9c6DA...6DC336736
0.01598131 ETH
178696802023-08-08 10:42:47500 days ago1691491367
0xA9a9c6DA...6DC336736
0.01622022 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
POTATO

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-08-08
*/

// https://t.me/POTATOENTRY

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

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

// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)

pragma solidity ^0.8.0;

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

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

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

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

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

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

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

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

// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);

    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `to`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address to, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `from` to `to` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) external returns (bool);
}

pragma solidity ^0.8.19;

interface IUniswapV2Router02 {
    function factory() external pure returns (address);

    function WETH() external pure returns (address);

    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;
}

interface IUniswapV2Factory {
    function createPair(address tokenA, address tokenB) external returns (address UNISWAP_V2_PAIR);
}

contract POTATO is IERC20, Ownable {

    event Reflect(uint256 amountReflected, uint256 newTotalProportion);
    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);

    address constant DEAD = 0x000000000000000000000000000000000000dEaD;
    address constant ZERO = 0x0000000000000000000000000000000000000000;

    uint256 constant MAX_FEE = 10;

    IUniswapV2Router02 public constant UNISWAP_V2_ROUTER =
        IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
    address public immutable UNISWAP_V2_PAIR;
    mapping(address => bool) public automatedMarketMakerPairs;

    struct Fee {
        uint8 reflection;
        uint8 marketing;
        uint8 lp;
        uint8 buyback;
        uint8 burn;
        uint128 total;
    }

    string _name = "POTATO";
    string _symbol = unicode"土豆";

    uint256 _totalSupply = 88_008_800_696 ether;
    uint256 public _maxTxAmount = _totalSupply * 10 / 1000;
    uint256 public _maxWalletAmount = _totalSupply * 10 / 1000;

    /* rOwned = ratio of tokens owned relative to circulating supply (NOT total supply, since circulating <= total) */
    mapping(address => uint256) public _rOwned;
    uint256 public _totalProportion = _totalSupply;

    mapping(address => mapping(address => uint256)) _allowances;

    bool public tradingActive = false;
    bool public transferDelayEnabled = false;
    bool public limitsEnabled = true;
    mapping(address => bool) isFeeExempt;
    mapping(address => bool) isLimitExempt;

    Fee public buyFee = Fee({reflection: 0, marketing: 20, lp: 0, buyback: 0, burn: 0, total: 20});
    Fee public sellFee = Fee({reflection: 0, marketing: 25, lp: 0, buyback: 0, burn: 0, total: 25});

    address private marketingFeeReceiver;
    address private lpFeeReceiver;
    address private buybackFeeReceiver;

    bool public claimingFees = false;
    uint256 public swapThreshold = (_totalSupply * 3) / 1000;
    bool inSwap;
    mapping(address => bool) public blacklists;
    mapping(address => uint256) private _holderLastTransferTimestamp;

    modifier swapping() {
        inSwap = true;
        _;
        inSwap = false;
    }

    constructor() {
        // create uniswap pair
        address _uniswapPair =
            IUniswapV2Factory(UNISWAP_V2_ROUTER.factory()).createPair(address(this), UNISWAP_V2_ROUTER.WETH());
        UNISWAP_V2_PAIR = _uniswapPair;
        _setAutomatedMarketMakerPair(address(_uniswapPair), true);

        _allowances[address(this)][address(UNISWAP_V2_ROUTER)] = type(uint256).max;
        _allowances[address(this)][owner()] = type(uint256).max;

        isLimitExempt[address(this)] = true;
        isLimitExempt[DEAD] = true;
        isLimitExempt[owner()] = true;
        isLimitExempt[UNISWAP_V2_PAIR] = true;
        
        isFeeExempt[address(this)] = true;
        isFeeExempt[DEAD] = true;
        isFeeExempt[owner()] = true;

        marketingFeeReceiver = 0xD1071e0497a55957bb6B739B884FC7685061959B;
        lpFeeReceiver = 0xD1071e0497a55957bb6B739B884FC7685061959B;
        buybackFeeReceiver = 0xD1071e0497a55957bb6B739B884FC7685061959B;

        _rOwned[tx.origin] = _totalSupply;
        emit Transfer(address(0), tx.origin, _totalSupply);
    }

    receive() external payable {}

    function approve(address spender, uint256 amount) public override returns (bool) {
        _allowances[msg.sender][spender] = amount;
        emit Approval(msg.sender, spender, amount);
        return true;
    }

    function approveMax(address spender) external returns (bool) {
        return approve(spender, type(uint256).max);
    }

    function transfer(address recipient, uint256 amount) external override returns (bool) {
        return _transferFrom(msg.sender, recipient, amount);
    }

    function transferFrom(address sender, address recipient, uint256 amount) external override returns (bool) {
        if (_allowances[sender][msg.sender] != type(uint256).max) {
            require(_allowances[sender][msg.sender] >= amount, "ERC20: insufficient allowance");
            _allowances[sender][msg.sender] = _allowances[sender][msg.sender] - amount;
        }

        return _transferFrom(sender, recipient, amount);
    }

    function totalSupply() external view override returns (uint256) {
        return _totalSupply;
    }

    function decimals() external pure returns (uint8) {
        return 18;
    }

    function name() external view returns (string memory) {
        return _name;
    }

    function symbol() external view returns (string memory) {
        return _symbol;
    }

    function balanceOf(address account) public view override returns (uint256) {
        return tokenFromReflection(_rOwned[account]);
    }

    function allowance(address holder, address spender) external view override returns (uint256) {
        return _allowances[holder][spender];
    }

    function tokensToProportion(uint256 tokens) public view returns (uint256) {
        return tokens * _totalProportion / _totalSupply;
    }

    function tokenFromReflection(uint256 proportion) public view returns (uint256) {
        return proportion * _totalSupply / _totalProportion;
    }

    function getCirculatingSupply() public view returns (uint256) {
        return _totalSupply - balanceOf(DEAD) - balanceOf(ZERO);
    }

    function enableTrading() external onlyOwner {
        tradingActive = true;
        claimingFees = true;
    }

    function setAutomatedMarketMakerPair(address pair, bool value)
        public
        onlyOwner
    {
        require(
            pair != UNISWAP_V2_PAIR,
            "The pair cannot be removed from automatedMarketMakerPairs"
        );

        _setAutomatedMarketMakerPair(pair, value);
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function updateMaxTxnAmount(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((_totalSupply * 2) / 1000) / 1e18,
            "Cannot set maxTransactionAmount lower than 0.2%"
        );
        _maxTxAmount = newNum * (10**18);
    }

    function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((_totalSupply * 2) / 1000) / 1e18,
            "Cannot set maxWallet lower than 0.2%"
        );
        _maxWalletAmount = newNum * (10**18);
    }

    function clearStuckBalance() external onlyOwner {
        (bool success,) = payable(msg.sender).call{value: address(this).balance}("");
        require(success);
    }

    function clearStuckToken() external onlyOwner {
        _transferFrom(address(this), msg.sender, balanceOf(address(this)));
    }

    function setSwapBackSettings(bool _enabled, uint256 _amount) external onlyOwner {
        claimingFees = _enabled;
        swapThreshold = _amount;
    }

    function changeFees(
        uint8 reflectionFeeBuy,
        uint8 marketingFeeBuy,
        uint8 lpFeeBuy,
        uint8 buybackFeeBuy,
        uint8 burnFeeBuy,
        uint8 reflectionFeeSell,
        uint8 marketingFeeSell,
        uint8 lpFeeSell,
        uint8 buybackFeeSell,
        uint8 burnFeeSell
    ) external onlyOwner {
        uint128 __totalBuyFee = reflectionFeeBuy + marketingFeeBuy + lpFeeBuy + buybackFeeBuy + burnFeeBuy;
        uint128 __totalSellFee = reflectionFeeSell + marketingFeeSell + lpFeeSell + buybackFeeSell + burnFeeSell;

        buyFee = Fee({
            reflection: reflectionFeeBuy,
            marketing: marketingFeeBuy,
            lp: lpFeeBuy,
            buyback: buybackFeeBuy,
            burn: burnFeeBuy,
            total: __totalBuyFee
        });

        sellFee = Fee({
            reflection: reflectionFeeSell,
            marketing: marketingFeeSell,
            lp: lpFeeSell,
            buyback: buybackFeeSell,
            burn: burnFeeSell,
            total: __totalSellFee
        });
    }

    function setIsFeeExempt(address holder, bool exempt) external onlyOwner {
        isFeeExempt[holder] = exempt;
    }

    function setisLimitExempt(address holder, bool exempt) external onlyOwner {
        isLimitExempt[holder] = exempt;
    }

    function setFeeReceivers(address m_, address lp_, address b_) external onlyOwner {
        marketingFeeReceiver = m_;
        lpFeeReceiver = lp_;
        buybackFeeReceiver = b_;
    }

    function setLimitsEnabled(bool e_) external onlyOwner {
        limitsEnabled = e_;
    }

    // Set Transfer delay
    function disableTransferDelay(bool e_) external onlyOwner returns (bool) {
        transferDelayEnabled = e_;
        return true;
    }

    function blacklist(address _address, bool _isBlacklisting) external onlyOwner {
        blacklists[_address] = _isBlacklisting;
    }

    function _transferFrom(address sender, address recipient, uint256 amount) internal returns (bool) {
        require(!blacklists[recipient] && !blacklists[sender], "Blacklisted");

        if (inSwap) {
            return _basicTransfer(sender, recipient, amount);
        }

        if (limitsEnabled) {
            if (!tradingActive) 
            {
                require(
                    isFeeExempt[sender] || isFeeExempt[recipient],
                    "Trading is not active."
                );
            }

            //when buy
            if (automatedMarketMakerPairs[sender] && !isLimitExempt[recipient]) 
            {
                require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");
                require(amount + balanceOf(recipient) <= _maxWalletAmount, "Max wallet exceeded");
            }
            //when sell
            else if (automatedMarketMakerPairs[recipient] && !isLimitExempt[sender])
            {
                require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");
            }
            else if (!isLimitExempt[recipient]) 
            {
                require(amount + balanceOf(recipient) <= _maxWalletAmount, "Max wallet exceeded");
            }
            
            // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch.
            if (transferDelayEnabled) {
                if (
                    recipient != owner() &&
                    recipient != address(UNISWAP_V2_ROUTER) &&
                    recipient != UNISWAP_V2_PAIR
                ) {
                    require(
                        _holderLastTransferTimestamp[tx.origin] + 1 <
                            block.number,
                        "_transfer:: Transfer Delay enabled.  Only one purchase per two blocks allowed."
                    );
                    _holderLastTransferTimestamp[tx.origin] = block.number;
                }
            }
        }

        if (_shouldSwapBack()) {
            _swapBack();
        }

        uint256 proportionAmount = tokensToProportion(amount);
        require(_rOwned[sender] >= proportionAmount, "Insufficient Balance");
        _rOwned[sender] = _rOwned[sender] - proportionAmount;

        uint256 proportionReceived = _shouldTakeFee(sender, recipient)
            ? _takeFeeInProportions(sender == UNISWAP_V2_PAIR ? true : false, sender, proportionAmount)
            : proportionAmount;
        _rOwned[recipient] = _rOwned[recipient] + proportionReceived;

        emit Transfer(sender, recipient, tokenFromReflection(proportionReceived));
        return true;
    }

    function _basicTransfer(address sender, address recipient, uint256 amount) internal returns (bool) {
        uint256 proportionAmount = tokensToProportion(amount);
        require(_rOwned[sender] >= proportionAmount, "Insufficient Balance");
        _rOwned[sender] = _rOwned[sender] - proportionAmount;
        _rOwned[recipient] = _rOwned[recipient] + proportionAmount;
        emit Transfer(sender, recipient, amount);
        return true;
    }

    function _takeFeeInProportions(bool buying, address sender, uint256 proportionAmount) internal returns (uint256) {
        Fee memory __buyFee = buyFee;
        Fee memory __sellFee = sellFee;

        uint256 proportionFeeAmount =
            buying == true ? proportionAmount * __buyFee.total / 100 : proportionAmount * __sellFee.total / 100;

        // reflect
        uint256 proportionReflected = buying == true
            ? proportionFeeAmount * __buyFee.reflection / __buyFee.total
            : proportionFeeAmount * __sellFee.reflection / __sellFee.total;

        _totalProportion = _totalProportion - proportionReflected;

        // take fees
        uint256 _proportionToContract = proportionFeeAmount - proportionReflected;
        if (_proportionToContract > 0) {
            _rOwned[address(this)] = _rOwned[address(this)] + _proportionToContract;

            emit Transfer(sender, address(this), tokenFromReflection(_proportionToContract));
        }
        emit Reflect(proportionReflected, _totalProportion);
        return proportionAmount - proportionFeeAmount;
    }

    function _shouldSwapBack() internal view returns (bool) {
        return msg.sender != UNISWAP_V2_PAIR && !inSwap && claimingFees && balanceOf(address(this)) >= swapThreshold;
    }

    function _swapBack() internal swapping {
        Fee memory __sellFee = sellFee;

        uint256 __swapThreshold = swapThreshold;
        uint256 amountToBurn = __swapThreshold * __sellFee.burn / __sellFee.total;
        uint256 amountToSwap = __swapThreshold - amountToBurn;
        approve(address(UNISWAP_V2_ROUTER), amountToSwap);

        if(amountToBurn > 0)
        {
            // burn
            _transferFrom(address(this), DEAD, amountToBurn);
        }

        // swap
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = UNISWAP_V2_ROUTER.WETH();

        UNISWAP_V2_ROUTER.swapExactTokensForETHSupportingFeeOnTransferTokens(
            amountToSwap, 0, path, address(this), block.timestamp
        );

        uint256 amountETH = address(this).balance;

        uint256 totalSwapFee = __sellFee.total - __sellFee.reflection - __sellFee.burn;
        uint256 amountETHMarketing = amountETH * __sellFee.marketing / totalSwapFee;
        uint256 amountETHLP = amountETH * __sellFee.lp / totalSwapFee;
        uint256 amountETHBuyback = amountETH * __sellFee.buyback / totalSwapFee;

        // send
        (bool tmpSuccess,) = payable(lpFeeReceiver).call{value: amountETHLP}("");
        (tmpSuccess,) = payable(buybackFeeReceiver).call{value: amountETHBuyback}("");
        (tmpSuccess,) = address(marketingFeeReceiver).call{value: address(this).balance}("");
    }

    function _shouldTakeFee(address sender, address recipient) internal view returns (bool) {
        return !isFeeExempt[sender] && !isFeeExempt[recipient];
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountReflected","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newTotalProportion","type":"uint256"}],"name":"Reflect","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"UNISWAP_V2_PAIR","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"UNISWAP_V2_ROUTER","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_rOwned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalProportion","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"approveMax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_isBlacklisting","type":"bool"}],"name":"blacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"blacklists","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyFee","outputs":[{"internalType":"uint8","name":"reflection","type":"uint8"},{"internalType":"uint8","name":"marketing","type":"uint8"},{"internalType":"uint8","name":"lp","type":"uint8"},{"internalType":"uint8","name":"buyback","type":"uint8"},{"internalType":"uint8","name":"burn","type":"uint8"},{"internalType":"uint128","name":"total","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"reflectionFeeBuy","type":"uint8"},{"internalType":"uint8","name":"marketingFeeBuy","type":"uint8"},{"internalType":"uint8","name":"lpFeeBuy","type":"uint8"},{"internalType":"uint8","name":"buybackFeeBuy","type":"uint8"},{"internalType":"uint8","name":"burnFeeBuy","type":"uint8"},{"internalType":"uint8","name":"reflectionFeeSell","type":"uint8"},{"internalType":"uint8","name":"marketingFeeSell","type":"uint8"},{"internalType":"uint8","name":"lpFeeSell","type":"uint8"},{"internalType":"uint8","name":"buybackFeeSell","type":"uint8"},{"internalType":"uint8","name":"burnFeeSell","type":"uint8"}],"name":"changeFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimingFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"clearStuckBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"clearStuckToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bool","name":"e_","type":"bool"}],"name":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellFee","outputs":[{"internalType":"uint8","name":"reflection","type":"uint8"},{"internalType":"uint8","name":"marketing","type":"uint8"},{"internalType":"uint8","name":"lp","type":"uint8"},{"internalType":"uint8","name":"buyback","type":"uint8"},{"internalType":"uint8","name":"burn","type":"uint8"},{"internalType":"uint128","name":"total","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"m_","type":"address"},{"internalType":"address","name":"lp_","type":"address"},{"internalType":"address","name":"b_","type":"address"}],"name":"setFeeReceivers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsFeeExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"e_","type":"bool"}],"name":"setLimitsEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setSwapBackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setisLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"proportion","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"tokensToProportion","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a06040526040518060400160405280600681526020017f504f5441544f0000000000000000000000000000000000000000000000000000815250600290816200004a919062000fb3565b506040518060400160405280600681526020017fe59c9fe8b18600000000000000000000000000000000000000000000000000008152506003908162000091919062000fb3565b506c011c5f2c759f523f2393e000006004556103e8600a600454620000b79190620010c9565b620000c3919062001143565b6005556103e8600a600454620000da9190620010c9565b620000e6919062001143565b6006556004546008556000600a60006101000a81548160ff0219169083151502179055506000600a60016101000a81548160ff0219169083151502179055506001600a60026101000a81548160ff0219169083151502179055506040518060c00160405280600060ff168152602001601460ff168152602001600060ff168152602001600060ff168152602001600060ff16815260200160146fffffffffffffffffffffffffffffffff16815250600d60008201518160000160006101000a81548160ff021916908360ff16021790555060208201518160000160016101000a81548160ff021916908360ff16021790555060408201518160000160026101000a81548160ff021916908360ff16021790555060608201518160000160036101000a81548160ff021916908360ff16021790555060808201518160000160046101000a81548160ff021916908360ff16021790555060a08201518160000160056101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555050506040518060c00160405280600060ff168152602001601960ff168152602001600060ff168152602001600060ff168152602001600060ff16815260200160196fffffffffffffffffffffffffffffffff16815250600e60008201518160000160006101000a81548160ff021916908360ff16021790555060208201518160000160016101000a81548160ff021916908360ff16021790555060408201518160000160026101000a81548160ff021916908360ff16021790555060608201518160000160036101000a81548160ff021916908360ff16021790555060808201518160000160046101000a81548160ff021916908360ff16021790555060a08201518160000160056101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555050506000601160146101000a81548160ff0219169083151502179055506103e86003600454620003e79190620010c9565b620003f3919062001143565b6012553480156200040357600080fd5b50620004246200041862000ba360201b60201c565b62000bab60201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000486573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004ac9190620011e5565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000528573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200054e9190620011e5565b6040518363ffffffff1660e01b81526004016200056d92919062001228565b6020604051808303816000875af11580156200058d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620005b39190620011e5565b90508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1681525050620005fc81600162000c6f60201b60201c565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600960003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600960003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006200072362000d1060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506001600c60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c60006200082962000d1060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c600060805173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b60006200099c62000d1060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555073d1071e0497a55957bb6b739b884fc7685061959b600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073d1071e0497a55957bb6b739b884fc7685061959b601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073d1071e0497a55957bb6b739b884fc7685061959b601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600454600760003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60045460405162000b94919062001266565b60405180910390a35062001283565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000dbb57607f821691505b60208210810362000dd15762000dd062000d73565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000e3b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000dfc565b62000e47868362000dfc565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000e9462000e8e62000e888462000e5f565b62000e69565b62000e5f565b9050919050565b6000819050919050565b62000eb08362000e73565b62000ec862000ebf8262000e9b565b84845462000e09565b825550505050565b600090565b62000edf62000ed0565b62000eec81848462000ea5565b505050565b5b8181101562000f145762000f0860008262000ed5565b60018101905062000ef2565b5050565b601f82111562000f635762000f2d8162000dd7565b62000f388462000dec565b8101602085101562000f48578190505b62000f6062000f578562000dec565b83018262000ef1565b50505b505050565b600082821c905092915050565b600062000f886000198460080262000f68565b1980831691505092915050565b600062000fa3838362000f75565b9150826002028217905092915050565b62000fbe8262000d39565b67ffffffffffffffff81111562000fda5762000fd962000d44565b5b62000fe6825462000da2565b62000ff382828562000f18565b600060209050601f8311600181146200102b576000841562001016578287015190505b62001022858262000f95565b86555062001092565b601f1984166200103b8662000dd7565b60005b8281101562001065578489015182556001820191506020850194506020810190506200103e565b8683101562001085578489015162001081601f89168262000f75565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620010d68262000e5f565b9150620010e38362000e5f565b9250828202620010f38162000e5f565b915082820484148315176200110d576200110c6200109a565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000620011508262000e5f565b91506200115d8362000e5f565b92508262001170576200116f62001114565b5b828204905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620011ad8262001180565b9050919050565b620011bf81620011a0565b8114620011cb57600080fd5b50565b600081519050620011df81620011b4565b92915050565b600060208284031215620011fe57620011fd6200117b565b5b60006200120e84828501620011ce565b91505092915050565b6200122281620011a0565b82525050565b60006040820190506200123f600083018562001217565b6200124e602083018462001217565b9392505050565b620012608162000e5f565b82525050565b60006020820190506200127d600083018462001255565b92915050565b608051614602620012bb600039600081816114c001528181611b89015281816121c80152818161243e015261293a01526146026000f3fe6080604052600436106102765760003560e01c8063658d4b7f1161014f578063b0f7ec38116100c1578063d7c010321161007a578063d7c0103214610993578063d85a2828146109bc578063dd62ed3e146109d3578063df20fd4914610a10578063f2fde38b14610a39578063f40acc3d14610a625761027d565b8063b0f7ec3814610883578063b62496f5146108ae578063bbc0c742146108eb578063c18bc19514610916578063c38a31de1461093f578063c876d0b9146109685761027d565b80638a8c523c116101135780638a8c523c146107855780638da5cb5b1461079c57806395d89b41146107c75780639a7a23d6146107f2578063a82ed9ec1461081b578063a9059cbb146108465761027d565b8063658d4b7f146106b25780636c0a24eb146106db57806370a0823114610706578063715018a6146107435780637d1db4a51461075a5761027d565b80632b14ca56116101e8578063364333f4116101ac578063364333f41461059f578063404e5129146105b657806341aea9de146105df57806345ce5365146106085780634706240214610645578063571ac8b0146106755761027d565b80632b14ca561461049f5780632d838119146104cf578063313ce5671461050c57806334b86560146105375780633582ad23146105745761027d565b8063178002871161023a578063178002871461038f57806318160ddd146103ba578063203e727e146103e557806323b872dd1461040e57806324c390231461044b5780632b112e49146104745761027d565b80630445b6671461028257806306fdde03146102ad578063095ea7b3146102d85780630cfc15f91461031557806316c02129146103525761027d565b3661027d57005b600080fd5b34801561028e57600080fd5b50610297610a8d565b6040516102a491906134e1565b60405180910390f35b3480156102b957600080fd5b506102c2610a93565b6040516102cf919061358c565b60405180910390f35b3480156102e457600080fd5b506102ff60048036038101906102fa919061363d565b610b25565b60405161030c9190613698565b60405180910390f35b34801561032157600080fd5b5061033c600480360381019061033791906136b3565b610c17565b60405161034991906134e1565b60405180910390f35b34801561035e57600080fd5b50610379600480360381019061037491906136b3565b610c2f565b6040516103869190613698565b60405180910390f35b34801561039b57600080fd5b506103a4610c4f565b6040516103b191906134e1565b60405180910390f35b3480156103c657600080fd5b506103cf610c55565b6040516103dc91906134e1565b60405180910390f35b3480156103f157600080fd5b5061040c600480360381019061040791906136e0565b610c5f565b005b34801561041a57600080fd5b506104356004803603810190610430919061370d565b610cf5565b6040516104429190613698565b60405180910390f35b34801561045757600080fd5b50610472600480360381019061046d919061378c565b610f76565b005b34801561048057600080fd5b50610489610fd9565b60405161049691906134e1565b60405180910390f35b3480156104ab57600080fd5b506104b461100c565b6040516104c696959493929190613813565b60405180910390f35b3480156104db57600080fd5b506104f660048036038101906104f191906136e0565b611093565b60405161050391906134e1565b60405180910390f35b34801561051857600080fd5b506105216110b7565b60405161052e9190613874565b60405180910390f35b34801561054357600080fd5b5061055e6004803603810190610559919061388f565b6110c0565b60405161056b9190613698565b60405180910390f35b34801561058057600080fd5b506105896110ed565b6040516105969190613698565b60405180910390f35b3480156105ab57600080fd5b506105b4611100565b005b3480156105c257600080fd5b506105dd60048036038101906105d8919061378c565b611181565b005b3480156105eb57600080fd5b506106066004803603810190610601919061388f565b6111e4565b005b34801561061457600080fd5b5061062f600480360381019061062a91906136e0565b611209565b60405161063c91906134e1565b60405180910390f35b34801561065157600080fd5b5061065a61122d565b60405161066c96959493929190613813565b60405180910390f35b34801561068157600080fd5b5061069c600480360381019061069791906136b3565b6112b4565b6040516106a99190613698565b60405180910390f35b3480156106be57600080fd5b506106d960048036038101906106d4919061378c565b6112e7565b005b3480156106e757600080fd5b506106f061134a565b6040516106fd91906134e1565b60405180910390f35b34801561071257600080fd5b5061072d600480360381019061072891906136b3565b611350565b60405161073a91906134e1565b60405180910390f35b34801561074f57600080fd5b506107586113a1565b005b34801561076657600080fd5b5061076f6113b5565b60405161077c91906134e1565b60405180910390f35b34801561079157600080fd5b5061079a6113bb565b005b3480156107a857600080fd5b506107b16113fb565b6040516107be91906138cb565b60405180910390f35b3480156107d357600080fd5b506107dc611424565b6040516107e9919061358c565b60405180910390f35b3480156107fe57600080fd5b506108196004803603810190610814919061378c565b6114b6565b005b34801561082757600080fd5b5061083061155a565b60405161083d9190613945565b60405180910390f35b34801561085257600080fd5b5061086d6004803603810190610868919061363d565b611572565b60405161087a9190613698565b60405180910390f35b34801561088f57600080fd5b50610898611587565b6040516108a59190613698565b60405180910390f35b3480156108ba57600080fd5b506108d560048036038101906108d091906136b3565b61159a565b6040516108e29190613698565b60405180910390f35b3480156108f757600080fd5b506109006115ba565b60405161090d9190613698565b60405180910390f35b34801561092257600080fd5b5061093d600480360381019061093891906136e0565b6115cd565b005b34801561094b57600080fd5b506109666004803603810190610961919061398c565b611663565b005b34801561097457600080fd5b5061097d61194f565b60405161098a9190613698565b60405180910390f35b34801561099f57600080fd5b506109ba60048036038101906109b59190613a6b565b611962565b005b3480156109c857600080fd5b506109d1611a32565b005b3480156109df57600080fd5b506109fa60048036038101906109f59190613abe565b611a50565b604051610a0791906134e1565b60405180910390f35b348015610a1c57600080fd5b50610a376004803603810190610a329190613afe565b611ad7565b005b348015610a4557600080fd5b50610a606004803603810190610a5b91906136b3565b611b04565b005b348015610a6e57600080fd5b50610a77611b87565b604051610a8491906138cb565b60405180910390f35b60125481565b606060028054610aa290613b6d565b80601f0160208091040260200160405190810160405280929190818152602001828054610ace90613b6d565b8015610b1b5780601f10610af057610100808354040283529160200191610b1b565b820191906000526020600020905b815481529060010190602001808311610afe57829003601f168201915b5050505050905090565b600081600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610c0591906134e1565b60405180910390a36001905092915050565b60076020528060005260406000206000915090505481565b60146020528060005260406000206000915054906101000a900460ff1681565b60085481565b6000600454905090565b610c67611bab565b670de0b6b3a76400006103e86002600454610c829190613bcd565b610c8c9190613c3e565b610c969190613c3e565b811015610cd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ccf90613ce1565b60405180910390fd5b670de0b6b3a764000081610cec9190613bcd565b60058190555050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610f625781600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015610e59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5090613d4d565b60405180910390fd5b81600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610ee19190613d6d565b600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b610f6d848484611c29565b90509392505050565b610f7e611bab565b80600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000610fe56000611350565b610ff061dead611350565b600454610ffd9190613d6d565b6110079190613d6d565b905090565b600e8060000160009054906101000a900460ff16908060000160019054906101000a900460ff16908060000160029054906101000a900460ff16908060000160039054906101000a900460ff16908060000160049054906101000a900460ff16908060000160059054906101000a90046fffffffffffffffffffffffffffffffff16905086565b6000600854600454836110a69190613bcd565b6110b09190613c3e565b9050919050565b60006012905090565b60006110ca611bab565b81600a60016101000a81548160ff02191690831515021790555060019050919050565b600a60029054906101000a900460ff1681565b611108611bab565b60003373ffffffffffffffffffffffffffffffffffffffff164760405161112e90613dd2565b60006040518083038185875af1925050503d806000811461116b576040519150601f19603f3d011682016040523d82523d6000602084013e611170565b606091505b505090508061117e57600080fd5b50565b611189611bab565b80601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6111ec611bab565b80600a60026101000a81548160ff02191690831515021790555050565b60006004546008548361121c9190613bcd565b6112269190613c3e565b9050919050565b600d8060000160009054906101000a900460ff16908060000160019054906101000a900460ff16908060000160029054906101000a900460ff16908060000160039054906101000a900460ff16908060000160049054906101000a900460ff16908060000160059054906101000a90046fffffffffffffffffffffffffffffffff16905086565b60006112e0827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610b25565b9050919050565b6112ef611bab565b80600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60065481565b600061139a600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611093565b9050919050565b6113a9611bab565b6113b360006125ac565b565b60055481565b6113c3611bab565b6001600a60006101000a81548160ff0219169083151502179055506001601160146101000a81548160ff021916908315150217905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606003805461143390613b6d565b80601f016020809104026020016040519081016040528092919081815260200182805461145f90613b6d565b80156114ac5780601f10611481576101008083540402835291602001916114ac565b820191906000526020600020905b81548152906001019060200180831161148f57829003601f168201915b5050505050905090565b6114be611bab565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361154c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154390613e59565b60405180910390fd5b6115568282612670565b5050565b737a250d5630b4cf539739df2c5dacb4c659f2488d81565b600061157f338484611c29565b905092915050565b601160149054906101000a900460ff1681565b60016020528060005260406000206000915054906101000a900460ff1681565b600a60009054906101000a900460ff1681565b6115d5611bab565b670de0b6b3a76400006103e860026004546115f09190613bcd565b6115fa9190613c3e565b6116049190613c3e565b811015611646576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163d90613eeb565b60405180910390fd5b670de0b6b3a76400008161165a9190613bcd565b60068190555050565b61166b611bab565b600086888a8c8e61167c9190613f0b565b6116869190613f0b565b6116909190613f0b565b61169a9190613f0b565b60ff1690506000828486888a6116b09190613f0b565b6116ba9190613f0b565b6116c49190613f0b565b6116ce9190613f0b565b60ff1690506040518060c001604052808d60ff1681526020018c60ff1681526020018b60ff1681526020018a60ff1681526020018960ff168152602001836fffffffffffffffffffffffffffffffff16815250600d60008201518160000160006101000a81548160ff021916908360ff16021790555060208201518160000160016101000a81548160ff021916908360ff16021790555060408201518160000160026101000a81548160ff021916908360ff16021790555060608201518160000160036101000a81548160ff021916908360ff16021790555060808201518160000160046101000a81548160ff021916908360ff16021790555060a08201518160000160056101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055509050506040518060c001604052808860ff1681526020018760ff1681526020018660ff1681526020018560ff1681526020018460ff168152602001826fffffffffffffffffffffffffffffffff16815250600e60008201518160000160006101000a81548160ff021916908360ff16021790555060208201518160000160016101000a81548160ff021916908360ff16021790555060408201518160000160026101000a81548160ff021916908360ff16021790555060608201518160000160036101000a81548160ff021916908360ff16021790555060808201518160000160046101000a81548160ff021916908360ff16021790555060a08201518160000160056101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550905050505050505050505050505050565b600a60019054906101000a900460ff1681565b61196a611bab565b82600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b611a3a611bab565b611a4d3033611a4830611350565b611c29565b50565b6000600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611adf611bab565b81601160146101000a81548160ff021916908315150217905550806012819055505050565b611b0c611bab565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611b7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7290613fb2565b60405180910390fd5b611b84816125ac565b50565b7f000000000000000000000000000000000000000000000000000000000000000081565b611bb3612711565b73ffffffffffffffffffffffffffffffffffffffff16611bd16113fb565b73ffffffffffffffffffffffffffffffffffffffff1614611c27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1e9061401e565b60405180910390fd5b565b6000601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611ccf5750601460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b611d0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d059061408a565b60405180910390fd5b601360009054906101000a900460ff1615611d3557611d2e848484612719565b90506125a5565b600a60029054906101000a900460ff16156122f057600a60009054906101000a900460ff16611e3f57600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611dff5750600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b611e3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e35906140f6565b60405180910390fd5b5b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015611ee25750600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611f8957600554821115611f2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2390614188565b60405180910390fd5b600654611f3884611350565b83611f4391906141a8565b1115611f84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7b90614228565b60405180910390fd5b612127565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561202c5750600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561207b57600554821115612076576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206d90614188565b60405180910390fd5b612126565b600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612125576006546120d884611350565b836120e391906141a8565b1115612124576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161211b90614228565b60405180910390fd5b5b5b5b600a60019054906101000a900460ff16156122ef576121446113fb565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156121bf5750737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b801561221757507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b156122ee57436001601560003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461226991906141a8565b106122a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122a0906142e0565b60405180910390fd5b43601560003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b5b6122f8612936565b15612306576123056129d4565b5b600061231183611209565b905080600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015612395576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238c9061434c565b60405180910390fd5b80600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546123e09190613d6d565b600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600061242f8686612fd3565b61243957816124a1565b6124a07f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614612496576000612499565b60015b8784613081565b5b905080600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546124ee91906141a8565b600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef61258984611093565b60405161259691906134e1565b60405180910390a36001925050505b9392505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600033905090565b60008061272583611209565b905080600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410156127a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127a09061434c565b60405180910390fd5b80600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127f49190613d6d565b600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461288291906141a8565b600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161292291906134e1565b60405180910390a360019150509392505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141580156129a15750601360009054906101000a900460ff16155b80156129b95750601160149054906101000a900460ff165b80156129cf57506012546129cc30611350565b10155b905090565b6001601360006101000a81548160ff0219169083151502179055506000600e6040518060c00160405290816000820160009054906101000a900460ff1660ff1660ff1681526020016000820160019054906101000a900460ff1660ff1660ff1681526020016000820160029054906101000a900460ff1660ff1660ff1681526020016000820160039054906101000a900460ff1660ff1660ff1681526020016000820160049054906101000a900460ff1660ff1660ff1681526020016000820160059054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff168152505090506000601254905060008260a001516fffffffffffffffffffffffffffffffff16836080015160ff1683612b0e9190613bcd565b612b189190613c3e565b905060008183612b289190613d6d565b9050612b48737a250d5630b4cf539739df2c5dacb4c659f2488d82610b25565b506000821115612b6157612b5f3061dead84611c29565b505b6000600267ffffffffffffffff811115612b7e57612b7d61436c565b5b604051908082528060200260200182016040528015612bac5781602001602082028036833780820191505090505b5090503081600081518110612bc457612bc361439b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c8191906143df565b81600181518110612c9557612c9461439b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612d25959493929190614505565b600060405180830381600087803b158015612d3f57600080fd5b505af1158015612d53573d6000803e3d6000fd5b5050505060004790506000866080015160ff16876000015160ff168860a00151612d7d919061455f565b612d87919061455f565b6fffffffffffffffffffffffffffffffff169050600081886020015160ff1684612db19190613bcd565b612dbb9190613c3e565b9050600082896040015160ff1685612dd39190613bcd565b612ddd9190613c3e565b90506000838a6060015160ff1686612df59190613bcd565b612dff9190613c3e565b90506000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1683604051612e4990613dd2565b60006040518083038185875af1925050503d8060008114612e86576040519150601f19603f3d011682016040523d82523d6000602084013e612e8b565b606091505b50509050601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051612ed590613dd2565b60006040518083038185875af1925050503d8060008114612f12576040519150601f19603f3d011682016040523d82523d6000602084013e612f17565b606091505b505080915050600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051612f6390613dd2565b60006040518083038185875af1925050503d8060008114612fa0576040519150601f19603f3d011682016040523d82523d6000602084013e612fa5565b606091505b50508091505050505050505050505050506000601360006101000a81548160ff021916908315150217905550565b6000600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156130795750600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b905092915050565b600080600d6040518060c00160405290816000820160009054906101000a900460ff1660ff1660ff1681526020016000820160019054906101000a900460ff1660ff1660ff1681526020016000820160029054906101000a900460ff1660ff1660ff1681526020016000820160039054906101000a900460ff1660ff1660ff1681526020016000820160049054906101000a900460ff1660ff1660ff1681526020016000820160059054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff168152505090506000600e6040518060c00160405290816000820160009054906101000a900460ff1660ff1660ff1681526020016000820160019054906101000a900460ff1660ff1660ff1681526020016000820160029054906101000a900460ff1660ff1660ff1681526020016000820160039054906101000a900460ff1660ff1660ff1681526020016000820160049054906101000a900460ff1660ff1660ff1681526020016000820160059054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff168152505090506000600115158715151461329b5760648260a001516fffffffffffffffffffffffffffffffff168661328c9190613bcd565b6132969190613c3e565b6132ca565b60648360a001516fffffffffffffffffffffffffffffffff16866132bf9190613bcd565b6132c99190613c3e565b5b905060006001151588151514613313578260a001516fffffffffffffffffffffffffffffffff16836000015160ff16836133049190613bcd565b61330e9190613c3e565b613348565b8360a001516fffffffffffffffffffffffffffffffff16846000015160ff168361333d9190613bcd565b6133479190613c3e565b5b9050806008546133589190613d6d565b6008819055506000818361336c9190613d6d565b905060008111156134735780600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133c291906141a8565b600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef61345d84611093565b60405161346a91906134e1565b60405180910390a35b7fc3b3cc73ac1faef58c428c22be6cb344acfd92a699c8cd758c753af27071b5ac826008546040516134a69291906145a3565b60405180910390a182876134ba9190613d6d565b955050505050509392505050565b6000819050919050565b6134db816134c8565b82525050565b60006020820190506134f660008301846134d2565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561353657808201518184015260208101905061351b565b60008484015250505050565b6000601f19601f8301169050919050565b600061355e826134fc565b6135688185613507565b9350613578818560208601613518565b61358181613542565b840191505092915050565b600060208201905081810360008301526135a68184613553565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006135de826135b3565b9050919050565b6135ee816135d3565b81146135f957600080fd5b50565b60008135905061360b816135e5565b92915050565b61361a816134c8565b811461362557600080fd5b50565b60008135905061363781613611565b92915050565b60008060408385031215613654576136536135ae565b5b6000613662858286016135fc565b925050602061367385828601613628565b9150509250929050565b60008115159050919050565b6136928161367d565b82525050565b60006020820190506136ad6000830184613689565b92915050565b6000602082840312156136c9576136c86135ae565b5b60006136d7848285016135fc565b91505092915050565b6000602082840312156136f6576136f56135ae565b5b600061370484828501613628565b91505092915050565b600080600060608486031215613726576137256135ae565b5b6000613734868287016135fc565b9350506020613745868287016135fc565b925050604061375686828701613628565b9150509250925092565b6137698161367d565b811461377457600080fd5b50565b60008135905061378681613760565b92915050565b600080604083850312156137a3576137a26135ae565b5b60006137b1858286016135fc565b92505060206137c285828601613777565b9150509250929050565b600060ff82169050919050565b6137e2816137cc565b82525050565b60006fffffffffffffffffffffffffffffffff82169050919050565b61380d816137e8565b82525050565b600060c08201905061382860008301896137d9565b61383560208301886137d9565b61384260408301876137d9565b61384f60608301866137d9565b61385c60808301856137d9565b61386960a0830184613804565b979650505050505050565b600060208201905061388960008301846137d9565b92915050565b6000602082840312156138a5576138a46135ae565b5b60006138b384828501613777565b91505092915050565b6138c5816135d3565b82525050565b60006020820190506138e060008301846138bc565b92915050565b6000819050919050565b600061390b613906613901846135b3565b6138e6565b6135b3565b9050919050565b600061391d826138f0565b9050919050565b600061392f82613912565b9050919050565b61393f81613924565b82525050565b600060208201905061395a6000830184613936565b92915050565b613969816137cc565b811461397457600080fd5b50565b60008135905061398681613960565b92915050565b6000806000806000806000806000806101408b8d0312156139b0576139af6135ae565b5b60006139be8d828e01613977565b9a505060206139cf8d828e01613977565b99505060406139e08d828e01613977565b98505060606139f18d828e01613977565b9750506080613a028d828e01613977565b96505060a0613a138d828e01613977565b95505060c0613a248d828e01613977565b94505060e0613a358d828e01613977565b935050610100613a478d828e01613977565b925050610120613a598d828e01613977565b9150509295989b9194979a5092959850565b600080600060608486031215613a8457613a836135ae565b5b6000613a92868287016135fc565b9350506020613aa3868287016135fc565b9250506040613ab4868287016135fc565b9150509250925092565b60008060408385031215613ad557613ad46135ae565b5b6000613ae3858286016135fc565b9250506020613af4858286016135fc565b9150509250929050565b60008060408385031215613b1557613b146135ae565b5b6000613b2385828601613777565b9250506020613b3485828601613628565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613b8557607f821691505b602082108103613b9857613b97613b3e565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613bd8826134c8565b9150613be3836134c8565b9250828202613bf1816134c8565b91508282048414831517613c0857613c07613b9e565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613c49826134c8565b9150613c54836134c8565b925082613c6457613c63613c0f565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e32250000000000000000000000000000000000602082015250565b6000613ccb602f83613507565b9150613cd682613c6f565b604082019050919050565b60006020820190508181036000830152613cfa81613cbe565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000613d37601d83613507565b9150613d4282613d01565b602082019050919050565b60006020820190508181036000830152613d6681613d2a565b9050919050565b6000613d78826134c8565b9150613d83836134c8565b9250828203905081811115613d9b57613d9a613b9e565b5b92915050565b600081905092915050565b50565b6000613dbc600083613da1565b9150613dc782613dac565b600082019050919050565b6000613ddd82613daf565b9150819050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000613e43603983613507565b9150613e4e82613de7565b604082019050919050565b60006020820190508181036000830152613e7281613e36565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e322500000000000000000000000000000000000000000000000000000000602082015250565b6000613ed5602483613507565b9150613ee082613e79565b604082019050919050565b60006020820190508181036000830152613f0481613ec8565b9050919050565b6000613f16826137cc565b9150613f21836137cc565b9250828201905060ff811115613f3a57613f39613b9e565b5b92915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613f9c602683613507565b9150613fa782613f40565b604082019050919050565b60006020820190508181036000830152613fcb81613f8f565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614008602083613507565b915061401382613fd2565b602082019050919050565b6000602082019050818103600083015261403781613ffb565b9050919050565b7f426c61636b6c6973746564000000000000000000000000000000000000000000600082015250565b6000614074600b83613507565b915061407f8261403e565b602082019050919050565b600060208201905081810360008301526140a381614067565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b60006140e0601683613507565b91506140eb826140aa565b602082019050919050565b6000602082019050818103600083015261410f816140d3565b9050919050565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b6000614172602883613507565b915061417d82614116565b604082019050919050565b600060208201905081810360008301526141a181614165565b9050919050565b60006141b3826134c8565b91506141be836134c8565b92508282019050808211156141d6576141d5613b9e565b5b92915050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000614212601383613507565b915061421d826141dc565b602082019050919050565b6000602082019050818103600083015261424181614205565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e65207075726368617365207065722074776f206260208201527f6c6f636b7320616c6c6f7765642e000000000000000000000000000000000000604082015250565b60006142ca604e83613507565b91506142d582614248565b606082019050919050565b600060208201905081810360008301526142f9816142bd565b9050919050565b7f496e73756666696369656e742042616c616e6365000000000000000000000000600082015250565b6000614336601483613507565b915061434182614300565b602082019050919050565b6000602082019050818103600083015261436581614329565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506143d9816135e5565b92915050565b6000602082840312156143f5576143f46135ae565b5b6000614403848285016143ca565b91505092915050565b6000819050919050565b600061443161442c6144278461440c565b6138e6565b6134c8565b9050919050565b61444181614416565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61447c816135d3565b82525050565b600061448e8383614473565b60208301905092915050565b6000602082019050919050565b60006144b282614447565b6144bc8185614452565b93506144c783614463565b8060005b838110156144f85781516144df8882614482565b97506144ea8361449a565b9250506001810190506144cb565b5085935050505092915050565b600060a08201905061451a60008301886134d2565b6145276020830187614438565b818103604083015261453981866144a7565b905061454860608301856138bc565b61455560808301846134d2565b9695505050505050565b600061456a826137e8565b9150614575836137e8565b925082820390506fffffffffffffffffffffffffffffffff81111561459d5761459c613b9e565b5b92915050565b60006040820190506145b860008301856134d2565b6145c560208301846134d2565b939250505056fea2646970667358221220039243ce51b326b3c21372a06fc4aec0250fef2ea183de57b22f9e986511b6b564736f6c63430008130033

Deployed Bytecode

0x6080604052600436106102765760003560e01c8063658d4b7f1161014f578063b0f7ec38116100c1578063d7c010321161007a578063d7c0103214610993578063d85a2828146109bc578063dd62ed3e146109d3578063df20fd4914610a10578063f2fde38b14610a39578063f40acc3d14610a625761027d565b8063b0f7ec3814610883578063b62496f5146108ae578063bbc0c742146108eb578063c18bc19514610916578063c38a31de1461093f578063c876d0b9146109685761027d565b80638a8c523c116101135780638a8c523c146107855780638da5cb5b1461079c57806395d89b41146107c75780639a7a23d6146107f2578063a82ed9ec1461081b578063a9059cbb146108465761027d565b8063658d4b7f146106b25780636c0a24eb146106db57806370a0823114610706578063715018a6146107435780637d1db4a51461075a5761027d565b80632b14ca56116101e8578063364333f4116101ac578063364333f41461059f578063404e5129146105b657806341aea9de146105df57806345ce5365146106085780634706240214610645578063571ac8b0146106755761027d565b80632b14ca561461049f5780632d838119146104cf578063313ce5671461050c57806334b86560146105375780633582ad23146105745761027d565b8063178002871161023a578063178002871461038f57806318160ddd146103ba578063203e727e146103e557806323b872dd1461040e57806324c390231461044b5780632b112e49146104745761027d565b80630445b6671461028257806306fdde03146102ad578063095ea7b3146102d85780630cfc15f91461031557806316c02129146103525761027d565b3661027d57005b600080fd5b34801561028e57600080fd5b50610297610a8d565b6040516102a491906134e1565b60405180910390f35b3480156102b957600080fd5b506102c2610a93565b6040516102cf919061358c565b60405180910390f35b3480156102e457600080fd5b506102ff60048036038101906102fa919061363d565b610b25565b60405161030c9190613698565b60405180910390f35b34801561032157600080fd5b5061033c600480360381019061033791906136b3565b610c17565b60405161034991906134e1565b60405180910390f35b34801561035e57600080fd5b50610379600480360381019061037491906136b3565b610c2f565b6040516103869190613698565b60405180910390f35b34801561039b57600080fd5b506103a4610c4f565b6040516103b191906134e1565b60405180910390f35b3480156103c657600080fd5b506103cf610c55565b6040516103dc91906134e1565b60405180910390f35b3480156103f157600080fd5b5061040c600480360381019061040791906136e0565b610c5f565b005b34801561041a57600080fd5b506104356004803603810190610430919061370d565b610cf5565b6040516104429190613698565b60405180910390f35b34801561045757600080fd5b50610472600480360381019061046d919061378c565b610f76565b005b34801561048057600080fd5b50610489610fd9565b60405161049691906134e1565b60405180910390f35b3480156104ab57600080fd5b506104b461100c565b6040516104c696959493929190613813565b60405180910390f35b3480156104db57600080fd5b506104f660048036038101906104f191906136e0565b611093565b60405161050391906134e1565b60405180910390f35b34801561051857600080fd5b506105216110b7565b60405161052e9190613874565b60405180910390f35b34801561054357600080fd5b5061055e6004803603810190610559919061388f565b6110c0565b60405161056b9190613698565b60405180910390f35b34801561058057600080fd5b506105896110ed565b6040516105969190613698565b60405180910390f35b3480156105ab57600080fd5b506105b4611100565b005b3480156105c257600080fd5b506105dd60048036038101906105d8919061378c565b611181565b005b3480156105eb57600080fd5b506106066004803603810190610601919061388f565b6111e4565b005b34801561061457600080fd5b5061062f600480360381019061062a91906136e0565b611209565b60405161063c91906134e1565b60405180910390f35b34801561065157600080fd5b5061065a61122d565b60405161066c96959493929190613813565b60405180910390f35b34801561068157600080fd5b5061069c600480360381019061069791906136b3565b6112b4565b6040516106a99190613698565b60405180910390f35b3480156106be57600080fd5b506106d960048036038101906106d4919061378c565b6112e7565b005b3480156106e757600080fd5b506106f061134a565b6040516106fd91906134e1565b60405180910390f35b34801561071257600080fd5b5061072d600480360381019061072891906136b3565b611350565b60405161073a91906134e1565b60405180910390f35b34801561074f57600080fd5b506107586113a1565b005b34801561076657600080fd5b5061076f6113b5565b60405161077c91906134e1565b60405180910390f35b34801561079157600080fd5b5061079a6113bb565b005b3480156107a857600080fd5b506107b16113fb565b6040516107be91906138cb565b60405180910390f35b3480156107d357600080fd5b506107dc611424565b6040516107e9919061358c565b60405180910390f35b3480156107fe57600080fd5b506108196004803603810190610814919061378c565b6114b6565b005b34801561082757600080fd5b5061083061155a565b60405161083d9190613945565b60405180910390f35b34801561085257600080fd5b5061086d6004803603810190610868919061363d565b611572565b60405161087a9190613698565b60405180910390f35b34801561088f57600080fd5b50610898611587565b6040516108a59190613698565b60405180910390f35b3480156108ba57600080fd5b506108d560048036038101906108d091906136b3565b61159a565b6040516108e29190613698565b60405180910390f35b3480156108f757600080fd5b506109006115ba565b60405161090d9190613698565b60405180910390f35b34801561092257600080fd5b5061093d600480360381019061093891906136e0565b6115cd565b005b34801561094b57600080fd5b506109666004803603810190610961919061398c565b611663565b005b34801561097457600080fd5b5061097d61194f565b60405161098a9190613698565b60405180910390f35b34801561099f57600080fd5b506109ba60048036038101906109b59190613a6b565b611962565b005b3480156109c857600080fd5b506109d1611a32565b005b3480156109df57600080fd5b506109fa60048036038101906109f59190613abe565b611a50565b604051610a0791906134e1565b60405180910390f35b348015610a1c57600080fd5b50610a376004803603810190610a329190613afe565b611ad7565b005b348015610a4557600080fd5b50610a606004803603810190610a5b91906136b3565b611b04565b005b348015610a6e57600080fd5b50610a77611b87565b604051610a8491906138cb565b60405180910390f35b60125481565b606060028054610aa290613b6d565b80601f0160208091040260200160405190810160405280929190818152602001828054610ace90613b6d565b8015610b1b5780601f10610af057610100808354040283529160200191610b1b565b820191906000526020600020905b815481529060010190602001808311610afe57829003601f168201915b5050505050905090565b600081600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610c0591906134e1565b60405180910390a36001905092915050565b60076020528060005260406000206000915090505481565b60146020528060005260406000206000915054906101000a900460ff1681565b60085481565b6000600454905090565b610c67611bab565b670de0b6b3a76400006103e86002600454610c829190613bcd565b610c8c9190613c3e565b610c969190613c3e565b811015610cd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ccf90613ce1565b60405180910390fd5b670de0b6b3a764000081610cec9190613bcd565b60058190555050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610f625781600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015610e59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5090613d4d565b60405180910390fd5b81600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610ee19190613d6d565b600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b610f6d848484611c29565b90509392505050565b610f7e611bab565b80600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000610fe56000611350565b610ff061dead611350565b600454610ffd9190613d6d565b6110079190613d6d565b905090565b600e8060000160009054906101000a900460ff16908060000160019054906101000a900460ff16908060000160029054906101000a900460ff16908060000160039054906101000a900460ff16908060000160049054906101000a900460ff16908060000160059054906101000a90046fffffffffffffffffffffffffffffffff16905086565b6000600854600454836110a69190613bcd565b6110b09190613c3e565b9050919050565b60006012905090565b60006110ca611bab565b81600a60016101000a81548160ff02191690831515021790555060019050919050565b600a60029054906101000a900460ff1681565b611108611bab565b60003373ffffffffffffffffffffffffffffffffffffffff164760405161112e90613dd2565b60006040518083038185875af1925050503d806000811461116b576040519150601f19603f3d011682016040523d82523d6000602084013e611170565b606091505b505090508061117e57600080fd5b50565b611189611bab565b80601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6111ec611bab565b80600a60026101000a81548160ff02191690831515021790555050565b60006004546008548361121c9190613bcd565b6112269190613c3e565b9050919050565b600d8060000160009054906101000a900460ff16908060000160019054906101000a900460ff16908060000160029054906101000a900460ff16908060000160039054906101000a900460ff16908060000160049054906101000a900460ff16908060000160059054906101000a90046fffffffffffffffffffffffffffffffff16905086565b60006112e0827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610b25565b9050919050565b6112ef611bab565b80600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60065481565b600061139a600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611093565b9050919050565b6113a9611bab565b6113b360006125ac565b565b60055481565b6113c3611bab565b6001600a60006101000a81548160ff0219169083151502179055506001601160146101000a81548160ff021916908315150217905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606003805461143390613b6d565b80601f016020809104026020016040519081016040528092919081815260200182805461145f90613b6d565b80156114ac5780601f10611481576101008083540402835291602001916114ac565b820191906000526020600020905b81548152906001019060200180831161148f57829003601f168201915b5050505050905090565b6114be611bab565b7f0000000000000000000000000972598c5296b634f9a4601385cb9a023461530273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361154c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154390613e59565b60405180910390fd5b6115568282612670565b5050565b737a250d5630b4cf539739df2c5dacb4c659f2488d81565b600061157f338484611c29565b905092915050565b601160149054906101000a900460ff1681565b60016020528060005260406000206000915054906101000a900460ff1681565b600a60009054906101000a900460ff1681565b6115d5611bab565b670de0b6b3a76400006103e860026004546115f09190613bcd565b6115fa9190613c3e565b6116049190613c3e565b811015611646576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163d90613eeb565b60405180910390fd5b670de0b6b3a76400008161165a9190613bcd565b60068190555050565b61166b611bab565b600086888a8c8e61167c9190613f0b565b6116869190613f0b565b6116909190613f0b565b61169a9190613f0b565b60ff1690506000828486888a6116b09190613f0b565b6116ba9190613f0b565b6116c49190613f0b565b6116ce9190613f0b565b60ff1690506040518060c001604052808d60ff1681526020018c60ff1681526020018b60ff1681526020018a60ff1681526020018960ff168152602001836fffffffffffffffffffffffffffffffff16815250600d60008201518160000160006101000a81548160ff021916908360ff16021790555060208201518160000160016101000a81548160ff021916908360ff16021790555060408201518160000160026101000a81548160ff021916908360ff16021790555060608201518160000160036101000a81548160ff021916908360ff16021790555060808201518160000160046101000a81548160ff021916908360ff16021790555060a08201518160000160056101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055509050506040518060c001604052808860ff1681526020018760ff1681526020018660ff1681526020018560ff1681526020018460ff168152602001826fffffffffffffffffffffffffffffffff16815250600e60008201518160000160006101000a81548160ff021916908360ff16021790555060208201518160000160016101000a81548160ff021916908360ff16021790555060408201518160000160026101000a81548160ff021916908360ff16021790555060608201518160000160036101000a81548160ff021916908360ff16021790555060808201518160000160046101000a81548160ff021916908360ff16021790555060a08201518160000160056101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550905050505050505050505050505050565b600a60019054906101000a900460ff1681565b61196a611bab565b82600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b611a3a611bab565b611a4d3033611a4830611350565b611c29565b50565b6000600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611adf611bab565b81601160146101000a81548160ff021916908315150217905550806012819055505050565b611b0c611bab565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611b7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7290613fb2565b60405180910390fd5b611b84816125ac565b50565b7f0000000000000000000000000972598c5296b634f9a4601385cb9a023461530281565b611bb3612711565b73ffffffffffffffffffffffffffffffffffffffff16611bd16113fb565b73ffffffffffffffffffffffffffffffffffffffff1614611c27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1e9061401e565b60405180910390fd5b565b6000601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611ccf5750601460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b611d0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d059061408a565b60405180910390fd5b601360009054906101000a900460ff1615611d3557611d2e848484612719565b90506125a5565b600a60029054906101000a900460ff16156122f057600a60009054906101000a900460ff16611e3f57600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611dff5750600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b611e3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e35906140f6565b60405180910390fd5b5b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015611ee25750600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611f8957600554821115611f2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2390614188565b60405180910390fd5b600654611f3884611350565b83611f4391906141a8565b1115611f84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7b90614228565b60405180910390fd5b612127565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561202c5750600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561207b57600554821115612076576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206d90614188565b60405180910390fd5b612126565b600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612125576006546120d884611350565b836120e391906141a8565b1115612124576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161211b90614228565b60405180910390fd5b5b5b5b600a60019054906101000a900460ff16156122ef576121446113fb565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156121bf5750737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b801561221757507f0000000000000000000000000972598c5296b634f9a4601385cb9a023461530273ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b156122ee57436001601560003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461226991906141a8565b106122a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122a0906142e0565b60405180910390fd5b43601560003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b5b6122f8612936565b15612306576123056129d4565b5b600061231183611209565b905080600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015612395576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238c9061434c565b60405180910390fd5b80600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546123e09190613d6d565b600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600061242f8686612fd3565b61243957816124a1565b6124a07f0000000000000000000000000972598c5296b634f9a4601385cb9a023461530273ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614612496576000612499565b60015b8784613081565b5b905080600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546124ee91906141a8565b600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef61258984611093565b60405161259691906134e1565b60405180910390a36001925050505b9392505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600033905090565b60008061272583611209565b905080600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410156127a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127a09061434c565b60405180910390fd5b80600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127f49190613d6d565b600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461288291906141a8565b600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161292291906134e1565b60405180910390a360019150509392505050565b60007f0000000000000000000000000972598c5296b634f9a4601385cb9a023461530273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141580156129a15750601360009054906101000a900460ff16155b80156129b95750601160149054906101000a900460ff165b80156129cf57506012546129cc30611350565b10155b905090565b6001601360006101000a81548160ff0219169083151502179055506000600e6040518060c00160405290816000820160009054906101000a900460ff1660ff1660ff1681526020016000820160019054906101000a900460ff1660ff1660ff1681526020016000820160029054906101000a900460ff1660ff1660ff1681526020016000820160039054906101000a900460ff1660ff1660ff1681526020016000820160049054906101000a900460ff1660ff1660ff1681526020016000820160059054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff168152505090506000601254905060008260a001516fffffffffffffffffffffffffffffffff16836080015160ff1683612b0e9190613bcd565b612b189190613c3e565b905060008183612b289190613d6d565b9050612b48737a250d5630b4cf539739df2c5dacb4c659f2488d82610b25565b506000821115612b6157612b5f3061dead84611c29565b505b6000600267ffffffffffffffff811115612b7e57612b7d61436c565b5b604051908082528060200260200182016040528015612bac5781602001602082028036833780820191505090505b5090503081600081518110612bc457612bc361439b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c8191906143df565b81600181518110612c9557612c9461439b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612d25959493929190614505565b600060405180830381600087803b158015612d3f57600080fd5b505af1158015612d53573d6000803e3d6000fd5b5050505060004790506000866080015160ff16876000015160ff168860a00151612d7d919061455f565b612d87919061455f565b6fffffffffffffffffffffffffffffffff169050600081886020015160ff1684612db19190613bcd565b612dbb9190613c3e565b9050600082896040015160ff1685612dd39190613bcd565b612ddd9190613c3e565b90506000838a6060015160ff1686612df59190613bcd565b612dff9190613c3e565b90506000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1683604051612e4990613dd2565b60006040518083038185875af1925050503d8060008114612e86576040519150601f19603f3d011682016040523d82523d6000602084013e612e8b565b606091505b50509050601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051612ed590613dd2565b60006040518083038185875af1925050503d8060008114612f12576040519150601f19603f3d011682016040523d82523d6000602084013e612f17565b606091505b505080915050600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051612f6390613dd2565b60006040518083038185875af1925050503d8060008114612fa0576040519150601f19603f3d011682016040523d82523d6000602084013e612fa5565b606091505b50508091505050505050505050505050506000601360006101000a81548160ff021916908315150217905550565b6000600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156130795750600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b905092915050565b600080600d6040518060c00160405290816000820160009054906101000a900460ff1660ff1660ff1681526020016000820160019054906101000a900460ff1660ff1660ff1681526020016000820160029054906101000a900460ff1660ff1660ff1681526020016000820160039054906101000a900460ff1660ff1660ff1681526020016000820160049054906101000a900460ff1660ff1660ff1681526020016000820160059054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff168152505090506000600e6040518060c00160405290816000820160009054906101000a900460ff1660ff1660ff1681526020016000820160019054906101000a900460ff1660ff1660ff1681526020016000820160029054906101000a900460ff1660ff1660ff1681526020016000820160039054906101000a900460ff1660ff1660ff1681526020016000820160049054906101000a900460ff1660ff1660ff1681526020016000820160059054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff168152505090506000600115158715151461329b5760648260a001516fffffffffffffffffffffffffffffffff168661328c9190613bcd565b6132969190613c3e565b6132ca565b60648360a001516fffffffffffffffffffffffffffffffff16866132bf9190613bcd565b6132c99190613c3e565b5b905060006001151588151514613313578260a001516fffffffffffffffffffffffffffffffff16836000015160ff16836133049190613bcd565b61330e9190613c3e565b613348565b8360a001516fffffffffffffffffffffffffffffffff16846000015160ff168361333d9190613bcd565b6133479190613c3e565b5b9050806008546133589190613d6d565b6008819055506000818361336c9190613d6d565b905060008111156134735780600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133c291906141a8565b600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef61345d84611093565b60405161346a91906134e1565b60405180910390a35b7fc3b3cc73ac1faef58c428c22be6cb344acfd92a699c8cd758c753af27071b5ac826008546040516134a69291906145a3565b60405180910390a182876134ba9190613d6d565b955050505050509392505050565b6000819050919050565b6134db816134c8565b82525050565b60006020820190506134f660008301846134d2565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561353657808201518184015260208101905061351b565b60008484015250505050565b6000601f19601f8301169050919050565b600061355e826134fc565b6135688185613507565b9350613578818560208601613518565b61358181613542565b840191505092915050565b600060208201905081810360008301526135a68184613553565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006135de826135b3565b9050919050565b6135ee816135d3565b81146135f957600080fd5b50565b60008135905061360b816135e5565b92915050565b61361a816134c8565b811461362557600080fd5b50565b60008135905061363781613611565b92915050565b60008060408385031215613654576136536135ae565b5b6000613662858286016135fc565b925050602061367385828601613628565b9150509250929050565b60008115159050919050565b6136928161367d565b82525050565b60006020820190506136ad6000830184613689565b92915050565b6000602082840312156136c9576136c86135ae565b5b60006136d7848285016135fc565b91505092915050565b6000602082840312156136f6576136f56135ae565b5b600061370484828501613628565b91505092915050565b600080600060608486031215613726576137256135ae565b5b6000613734868287016135fc565b9350506020613745868287016135fc565b925050604061375686828701613628565b9150509250925092565b6137698161367d565b811461377457600080fd5b50565b60008135905061378681613760565b92915050565b600080604083850312156137a3576137a26135ae565b5b60006137b1858286016135fc565b92505060206137c285828601613777565b9150509250929050565b600060ff82169050919050565b6137e2816137cc565b82525050565b60006fffffffffffffffffffffffffffffffff82169050919050565b61380d816137e8565b82525050565b600060c08201905061382860008301896137d9565b61383560208301886137d9565b61384260408301876137d9565b61384f60608301866137d9565b61385c60808301856137d9565b61386960a0830184613804565b979650505050505050565b600060208201905061388960008301846137d9565b92915050565b6000602082840312156138a5576138a46135ae565b5b60006138b384828501613777565b91505092915050565b6138c5816135d3565b82525050565b60006020820190506138e060008301846138bc565b92915050565b6000819050919050565b600061390b613906613901846135b3565b6138e6565b6135b3565b9050919050565b600061391d826138f0565b9050919050565b600061392f82613912565b9050919050565b61393f81613924565b82525050565b600060208201905061395a6000830184613936565b92915050565b613969816137cc565b811461397457600080fd5b50565b60008135905061398681613960565b92915050565b6000806000806000806000806000806101408b8d0312156139b0576139af6135ae565b5b60006139be8d828e01613977565b9a505060206139cf8d828e01613977565b99505060406139e08d828e01613977565b98505060606139f18d828e01613977565b9750506080613a028d828e01613977565b96505060a0613a138d828e01613977565b95505060c0613a248d828e01613977565b94505060e0613a358d828e01613977565b935050610100613a478d828e01613977565b925050610120613a598d828e01613977565b9150509295989b9194979a5092959850565b600080600060608486031215613a8457613a836135ae565b5b6000613a92868287016135fc565b9350506020613aa3868287016135fc565b9250506040613ab4868287016135fc565b9150509250925092565b60008060408385031215613ad557613ad46135ae565b5b6000613ae3858286016135fc565b9250506020613af4858286016135fc565b9150509250929050565b60008060408385031215613b1557613b146135ae565b5b6000613b2385828601613777565b9250506020613b3485828601613628565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613b8557607f821691505b602082108103613b9857613b97613b3e565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613bd8826134c8565b9150613be3836134c8565b9250828202613bf1816134c8565b91508282048414831517613c0857613c07613b9e565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613c49826134c8565b9150613c54836134c8565b925082613c6457613c63613c0f565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e32250000000000000000000000000000000000602082015250565b6000613ccb602f83613507565b9150613cd682613c6f565b604082019050919050565b60006020820190508181036000830152613cfa81613cbe565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000613d37601d83613507565b9150613d4282613d01565b602082019050919050565b60006020820190508181036000830152613d6681613d2a565b9050919050565b6000613d78826134c8565b9150613d83836134c8565b9250828203905081811115613d9b57613d9a613b9e565b5b92915050565b600081905092915050565b50565b6000613dbc600083613da1565b9150613dc782613dac565b600082019050919050565b6000613ddd82613daf565b9150819050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000613e43603983613507565b9150613e4e82613de7565b604082019050919050565b60006020820190508181036000830152613e7281613e36565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e322500000000000000000000000000000000000000000000000000000000602082015250565b6000613ed5602483613507565b9150613ee082613e79565b604082019050919050565b60006020820190508181036000830152613f0481613ec8565b9050919050565b6000613f16826137cc565b9150613f21836137cc565b9250828201905060ff811115613f3a57613f39613b9e565b5b92915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613f9c602683613507565b9150613fa782613f40565b604082019050919050565b60006020820190508181036000830152613fcb81613f8f565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614008602083613507565b915061401382613fd2565b602082019050919050565b6000602082019050818103600083015261403781613ffb565b9050919050565b7f426c61636b6c6973746564000000000000000000000000000000000000000000600082015250565b6000614074600b83613507565b915061407f8261403e565b602082019050919050565b600060208201905081810360008301526140a381614067565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b60006140e0601683613507565b91506140eb826140aa565b602082019050919050565b6000602082019050818103600083015261410f816140d3565b9050919050565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b6000614172602883613507565b915061417d82614116565b604082019050919050565b600060208201905081810360008301526141a181614165565b9050919050565b60006141b3826134c8565b91506141be836134c8565b92508282019050808211156141d6576141d5613b9e565b5b92915050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000614212601383613507565b915061421d826141dc565b602082019050919050565b6000602082019050818103600083015261424181614205565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e65207075726368617365207065722074776f206260208201527f6c6f636b7320616c6c6f7765642e000000000000000000000000000000000000604082015250565b60006142ca604e83613507565b91506142d582614248565b606082019050919050565b600060208201905081810360008301526142f9816142bd565b9050919050565b7f496e73756666696369656e742042616c616e6365000000000000000000000000600082015250565b6000614336601483613507565b915061434182614300565b602082019050919050565b6000602082019050818103600083015261436581614329565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506143d9816135e5565b92915050565b6000602082840312156143f5576143f46135ae565b5b6000614403848285016143ca565b91505092915050565b6000819050919050565b600061443161442c6144278461440c565b6138e6565b6134c8565b9050919050565b61444181614416565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61447c816135d3565b82525050565b600061448e8383614473565b60208301905092915050565b6000602082019050919050565b60006144b282614447565b6144bc8185614452565b93506144c783614463565b8060005b838110156144f85781516144df8882614482565b97506144ea8361449a565b9250506001810190506144cb565b5085935050505092915050565b600060a08201905061451a60008301886134d2565b6145276020830187614438565b818103604083015261453981866144a7565b905061454860608301856138bc565b61455560808301846134d2565b9695505050505050565b600061456a826137e8565b9150614575836137e8565b925082820390506fffffffffffffffffffffffffffffffff81111561459d5761459c613b9e565b5b92915050565b60006040820190506145b860008301856134d2565b6145c560208301846134d2565b939250505056fea2646970667358221220039243ce51b326b3c21372a06fc4aec0250fef2ea183de57b22f9e986511b6b564736f6c63430008130033

Deployed Bytecode Sourcemap

6899:15247:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8823:56;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11420:85;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10257:216;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8069:42;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8904;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8118:46;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11224:102;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12991:266;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10775:441;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15239:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12216:136;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8558:95;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;12059:149;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11334:78;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15693:139;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8328:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13535:170;;;;;;;;;;;;;:::i;:::-;;15840:135;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15567:91;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11911:140;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8457:94;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;10481:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15112:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7882:58;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11610:138;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2725:103;;;;;;;;;;;;;:::i;:::-;;7821:54;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12360:113;;;;;;;;;;;;;:::i;:::-;;2077:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11513:89;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12481:306;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7286:126;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10611:156;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8784:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7466:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8241:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13265:262;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14016:1088;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8281:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15370:189;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13713:131;;;;;;;;;;;;;:::i;:::-;;11756:147;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13852:156;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2983:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7419:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8823:56;;;;:::o;11420:85::-;11459:13;11492:5;11485:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11420:85;:::o;10257:216::-;10332:4;10384:6;10349:11;:23;10361:10;10349:23;;;;;;;;;;;;;;;:32;10373:7;10349:32;;;;;;;;;;;;;;;:41;;;;10427:7;10406:37;;10415:10;10406:37;;;10436:6;10406:37;;;;;;:::i;:::-;;;;;;;;10461:4;10454:11;;10257:216;;;;:::o;8069:42::-;;;;;;;;;;;;;;;;;:::o;8904:::-;;;;;;;;;;;;;;;;;;;;;;:::o;8118:46::-;;;;:::o;11224:102::-;11279:7;11306:12;;11299:19;;11224:102;:::o;12991:266::-;1963:13;:11;:13::i;:::-;13127:4:::1;13119;13114:1;13099:12;;:16;;;;:::i;:::-;13098:25;;;;:::i;:::-;13097:34;;;;:::i;:::-;13087:6;:44;;13065:141;;;;;;;;;;;;:::i;:::-;;;;;;;;;13242:6;13232;:17;;;;:::i;:::-;13217:12;:32;;;;12991:266:::0;:::o;10775:441::-;10875:4;10931:17;10896:11;:19;10908:6;10896:19;;;;;;;;;;;;;;;:31;10916:10;10896:31;;;;;;;;;;;;;;;;:52;10892:257;;11008:6;10973:11;:19;10985:6;10973:19;;;;;;;;;;;;;;;:31;10993:10;10973:31;;;;;;;;;;;;;;;;:41;;10965:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;11131:6;11097:11;:19;11109:6;11097:19;;;;;;;;;;;;;;;:31;11117:10;11097:31;;;;;;;;;;;;;;;;:40;;;;:::i;:::-;11063:11;:19;11075:6;11063:19;;;;;;;;;;;;;;;:31;11083:10;11063:31;;;;;;;;;;;;;;;:74;;;;10892:257;11168:40;11182:6;11190:9;11201:6;11168:13;:40::i;:::-;11161:47;;10775:441;;;;;:::o;15239:123::-;1963:13;:11;:13::i;:::-;15348:6:::1;15324:13;:21;15338:6;15324:21;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;15239:123:::0;;:::o;12216:136::-;12269:7;12329:15;7197:42;12329:9;:15::i;:::-;12311;7124:42;12311:9;:15::i;:::-;12296:12;;:30;;;;:::i;:::-;:48;;;;:::i;:::-;12289:55;;12216:136;:::o;8558:95::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;12059:149::-;12129:7;12184:16;;12169:12;;12156:10;:25;;;;:::i;:::-;:44;;;;:::i;:::-;12149:51;;12059:149;;;:::o;11334:78::-;11377:5;11402:2;11395:9;;11334:78;:::o;15693:139::-;15760:4;1963:13;:11;:13::i;:::-;15800:2:::1;15777:20;;:25;;;;;;;;;;;;;;;;;;15820:4;15813:11;;15693:139:::0;;;:::o;8328:32::-;;;;;;;;;;;;;:::o;13535:170::-;1963:13;:11;:13::i;:::-;13595:12:::1;13620:10;13612:24;;13644:21;13612:58;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13594:76;;;13689:7;13681:16;;;::::0;::::1;;13583:122;13535:170::o:0;15840:135::-;1963:13;:11;:13::i;:::-;15952:15:::1;15929:10;:20;15940:8;15929:20;;;;;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;15840:135:::0;;:::o;15567:91::-;1963:13;:11;:13::i;:::-;15648:2:::1;15632:13;;:18;;;;;;;;;;;;;;;;;;15567:91:::0;:::o;11911:140::-;11976:7;12031:12;;12012:16;;12003:6;:25;;;;:::i;:::-;:40;;;;:::i;:::-;11996:47;;11911:140;;;:::o;8457:94::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;10481:122::-;10536:4;10560:35;10568:7;10577:17;10560:7;:35::i;:::-;10553:42;;10481:122;;;:::o;15112:119::-;1963:13;:11;:13::i;:::-;15217:6:::1;15195:11;:19;15207:6;15195:19;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;15112:119:::0;;:::o;7882:58::-;;;;:::o;11610:138::-;11676:7;11703:37;11723:7;:16;11731:7;11723:16;;;;;;;;;;;;;;;;11703:19;:37::i;:::-;11696:44;;11610:138;;;:::o;2725:103::-;1963:13;:11;:13::i;:::-;2790:30:::1;2817:1;2790:18;:30::i;:::-;2725:103::o:0;7821:54::-;;;;:::o;12360:113::-;1963:13;:11;:13::i;:::-;12431:4:::1;12415:13;;:20;;;;;;;;;;;;;;;;;;12461:4;12446:12;;:19;;;;;;;;;;;;;;;;;;12360:113::o:0;2077:87::-;2123:7;2150:6;;;;;;;;;;;2143:13;;2077:87;:::o;11513:89::-;11554:13;11587:7;11580:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11513:89;:::o;12481:306::-;1963:13;:11;:13::i;:::-;12625:15:::1;12617:23;;:4;:23;;::::0;12595:130:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;12738:41;12767:4;12773:5;12738:28;:41::i;:::-;12481:306:::0;;:::o;7286:126::-;7369:42;7286:126;:::o;10611:156::-;10691:4;10715:44;10729:10;10741:9;10752:6;10715:13;:44::i;:::-;10708:51;;10611:156;;;;:::o;8784:32::-;;;;;;;;;;;;;:::o;7466:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;8241:33::-;;;;;;;;;;;;;:::o;13265:262::-;1963:13;:11;:13::i;:::-;13404:4:::1;13396;13391:1;13376:12;;:16;;;;:::i;:::-;13375:25;;;;:::i;:::-;13374:34;;;;:::i;:::-;13364:6;:44;;13342:130;;;;;;;;;;;;:::i;:::-;;;;;;;;;13512:6;13502;:17;;;;:::i;:::-;13483:16;:36;;;;13265:262:::0;:::o;14016:1088::-;1963:13;:11;:13::i;:::-;14372:21:::1;14460:10;14444:13;14433:8;14415:15;14396:16;:34;;;;:::i;:::-;:45;;;;:::i;:::-;:61;;;;:::i;:::-;:74;;;;:::i;:::-;14372:98;;;;14481:22;14574:11;14557:14;14545:9;14526:16;14506:17;:36;;;;:::i;:::-;:48;;;;:::i;:::-;:65;;;;:::i;:::-;:79;;;;:::i;:::-;14481:104;;;;14607:230;;;;;;;;14638:16;14607:230;;;;;;14680:15;14607:230;;;;;;14714:8;14607:230;;;;;;14746:13;14607:230;;;;;;14780:10;14607:230;;;;;;14812:13;14607:230;;;;::::0;14598:6:::1;:239;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14860:236;;;;;;;;14891:17;14860:236;;;;;;14934:16;14860:236;;;;;;14969:9;14860:236;;;;;;15002:14;14860:236;;;;;;15037:11;14860:236;;;;;;15070:14;14860:236;;;;::::0;14850:7:::1;:246;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14361:743;;14016:1088:::0;;;;;;;;;;:::o;8281:40::-;;;;;;;;;;;;;:::o;15370:189::-;1963:13;:11;:13::i;:::-;15485:2:::1;15462:20;;:25;;;;;;;;;;;;;;;;;;15514:3;15498:13;;:19;;;;;;;;;;;;;;;;;;15549:2;15528:18;;:23;;;;;;;;;;;;;;;;;;15370:189:::0;;;:::o;13713:131::-;1963:13;:11;:13::i;:::-;13770:66:::1;13792:4;13799:10;13811:24;13829:4;13811:9;:24::i;:::-;13770:13;:66::i;:::-;;13713:131::o:0;11756:147::-;11840:7;11867:11;:19;11879:6;11867:19;;;;;;;;;;;;;;;:28;11887:7;11867:28;;;;;;;;;;;;;;;;11860:35;;11756:147;;;;:::o;13852:156::-;1963:13;:11;:13::i;:::-;13958:8:::1;13943:12;;:23;;;;;;;;;;;;;;;;;;13993:7;13977:13;:23;;;;13852:156:::0;;:::o;2983:201::-;1963:13;:11;:13::i;:::-;3092:1:::1;3072:22;;:8;:22;;::::0;3064:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;3148:28;3167:8;3148:18;:28::i;:::-;2983:201:::0;:::o;7419:40::-;;;:::o;2242:132::-;2317:12;:10;:12::i;:::-;2306:23;;:7;:5;:7::i;:::-;:23;;;2298:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2242:132::o;15983:2741::-;16075:4;16101:10;:21;16112:9;16101:21;;;;;;;;;;;;;;;;;;;;;;;;;16100:22;:45;;;;;16127:10;:18;16138:6;16127:18;;;;;;;;;;;;;;;;;;;;;;;;;16126:19;16100:45;16092:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;16178:6;;;;;;;;;;;16174:87;;;16208:41;16223:6;16231:9;16242:6;16208:14;:41::i;:::-;16201:48;;;;16174:87;16277:13;;;;;;;;;;;16273:1772;;;16312:13;;;;;;;;;;;16307:210;;16390:11;:19;16402:6;16390:19;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;;16413:11;:22;16425:9;16413:22;;;;;;;;;;;;;;;;;;;;;;;;;16390:45;16360:141;;;;;;;;;;;;:::i;:::-;;;;;;;;;16307:210;16561:25;:33;16587:6;16561:33;;;;;;;;;;;;;;;;;;;;;;;;;:62;;;;;16599:13;:24;16613:9;16599:24;;;;;;;;;;;;;;;;;;;;;;;;;16598:25;16561:62;16557:707;;;16676:12;;16666:6;:22;;16658:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;16793:16;;16769:20;16779:9;16769;:20::i;:::-;16760:6;:29;;;;:::i;:::-;:49;;16752:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;16557:707;;;16897:25;:36;16923:9;16897:36;;;;;;;;;;;;;;;;;;;;;;;;;:62;;;;;16938:13;:21;16952:6;16938:21;;;;;;;;;;;;;;;;;;;;;;;;;16937:22;16897:62;16893:371;;;17011:12;;17001:6;:22;;16993:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;16893:371;;;17108:13;:24;17122:9;17108:24;;;;;;;;;;;;;;;;;;;;;;;;;17103:161;;17208:16;;17184:20;17194:9;17184;:20::i;:::-;17175:6;:29;;;;:::i;:::-;:49;;17167:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;17103:161;16893:371;16557:707;17424:20;;;;;;;;;;;17420:614;;;17504:7;:5;:7::i;:::-;17491:20;;:9;:20;;;;:84;;;;;7369:42;17536:39;;:9;:39;;;;17491:84;:137;;;;;17613:15;17600:28;;:9;:28;;;;17491:137;17465:554;;;17780:12;17747:1;17705:28;:39;17734:9;17705:39;;;;;;;;;;;;;;;;:43;;;;:::i;:::-;:87;17671:251;;;;;;;;;;;;:::i;:::-;;;;;;;;;17987:12;17945:28;:39;17974:9;17945:39;;;;;;;;;;;;;;;:54;;;;17465:554;17420:614;16273:1772;18061:17;:15;:17::i;:::-;18057:61;;;18095:11;:9;:11::i;:::-;18057:61;18130:24;18157:26;18176:6;18157:18;:26::i;:::-;18130:53;;18221:16;18202:7;:15;18210:6;18202:15;;;;;;;;;;;;;;;;:35;;18194:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18309:16;18291:7;:15;18299:6;18291:15;;;;;;;;;;;;;;;;:34;;;;:::i;:::-;18273:7;:15;18281:6;18273:15;;;;;;;;;;;;;;;:52;;;;18338:26;18367:33;18382:6;18390:9;18367:14;:33::i;:::-;:170;;18521:16;18367:170;;;18416:89;18448:15;18438:25;;:6;:25;;;:40;;18473:5;18438:40;;;18466:4;18438:40;18480:6;18488:16;18416:21;:89::i;:::-;18367:170;18338:199;;18590:18;18569:7;:18;18577:9;18569:18;;;;;;;;;;;;;;;;:39;;;;:::i;:::-;18548:7;:18;18556:9;18548:18;;;;;;;;;;;;;;;:60;;;;18643:9;18626:68;;18635:6;18626:68;;;18654:39;18674:18;18654:19;:39::i;:::-;18626:68;;;;;;:::i;:::-;;;;;;;;18712:4;18705:11;;;;15983:2741;;;;;;:::o;3344:191::-;3418:16;3437:6;;;;;;;;;;;3418:25;;3463:8;3454:6;;:17;;;;;;;;;;;;;;;;;;3518:8;3487:40;;3508:8;3487:40;;;;;;;;;;;;3407:128;3344:191;:::o;12795:188::-;12912:5;12878:25;:31;12904:4;12878:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;12969:5;12935:40;;12963:4;12935:40;;;;;;;;;;;;12795:188;;:::o;687:98::-;740:7;767:10;760:17;;687:98;:::o;18732:455::-;18825:4;18842:24;18869:26;18888:6;18869:18;:26::i;:::-;18842:53;;18933:16;18914:7;:15;18922:6;18914:15;;;;;;;;;;;;;;;;:35;;18906:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19021:16;19003:7;:15;19011:6;19003:15;;;;;;;;;;;;;;;;:34;;;;:::i;:::-;18985:7;:15;18993:6;18985:15;;;;;;;;;;;;;;;:52;;;;19090:16;19069:7;:18;19077:9;19069:18;;;;;;;;;;;;;;;;:37;;;;:::i;:::-;19048:7;:18;19056:9;19048:18;;;;;;;;;;;;;;;:58;;;;19139:9;19122:35;;19131:6;19122:35;;;19150:6;19122:35;;;;;;:::i;:::-;;;;;;;;19175:4;19168:11;;;18732:455;;;;;:::o;20318:183::-;20368:4;20406:15;20392:29;;:10;:29;;;;:40;;;;;20426:6;;;;;;;;;;;20425:7;20392:40;:56;;;;;20436:12;;;;;;;;;;;20392:56;:101;;;;;20480:13;;20452:24;20470:4;20452:9;:24::i;:::-;:41;;20392:101;20385:108;;20318:183;:::o;20509:1465::-;9066:4;9057:6;;:13;;;;;;;;;;;;;;;;;;20559:20:::1;20582:7;20559:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;20602:23;20628:13;;20602:39;;20652:20;20710:9;:15;;;20675:50;;20693:9;:14;;;20675:32;;:15;:32;;;;:::i;:::-;:50;;;;:::i;:::-;20652:73;;20736:20;20777:12;20759:15;:30;;;;:::i;:::-;20736:53;;20800:49;7369:42;20836:12;20800:7;:49::i;:::-;;20880:1;20865:12;:16;20862:126;;;20928:48;20950:4;7124:42;20963:12;20928:13;:48::i;:::-;;20862:126;21017:21;21055:1;21041:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21017:40;;21086:4;21068;21073:1;21068:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;7369:42;21112:22;;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21102:4;21107:1;21102:7;;;;;;;;:::i;:::-;;;;;;;:34;;;;;;;;;::::0;::::1;7369:42;21149:68;;;21232:12;21246:1;21249:4;21263;21270:15;21149:147;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;21309:17;21329:21;21309:41;;21363:20;21427:9;:14;;;21386:55;;21404:9;:20;;;21386:38;;:9;:15;;;:38;;;;:::i;:::-;:55;;;;:::i;:::-;21363:78;;;;21452:26;21515:12;21493:9;:19;;;21481:31;;:9;:31;;;;:::i;:::-;:46;;;;:::i;:::-;21452:75;;21538:19;21587:12;21572:9;:12;;;21560:24;;:9;:24;;;;:::i;:::-;:39;;;;:::i;:::-;21538:61;;21610:24;21669:12;21649:9;:17;;;21637:29;;:9;:29;;;;:::i;:::-;:44;;;;:::i;:::-;21610:71;;21712:15;21740:13;;;;;;;;;;;21732:27;;21767:11;21732:51;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21711:72;;;21818:18;;;;;;;;;;;21810:32;;21850:16;21810:61;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21794:77;;;;;21906:20;;;;;;;;;;;21898:34;;21940:21;21898:68;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21882:84;;;;;20548:1426;;;;;;;;;;;9102:5:::0;9093:6;;:14;;;;;;;;;;;;;;;;;;20509:1465::o;21982:161::-;22064:4;22089:11;:19;22101:6;22089:19;;;;;;;;;;;;;;;;;;;;;;;;;22088:20;:47;;;;;22113:11;:22;22125:9;22113:22;;;;;;;;;;;;;;;;;;;;;;;;;22112:23;22088:47;22081:54;;21982:161;;;;:::o;19195:1115::-;19299:7;19319:19;19341:6;19319:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19358:20;19381:7;19358:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19401:27;19454:4;19444:14;;:6;:14;;;:99;;19540:3;19522:9;:15;;;19503:34;;:16;:34;;;;:::i;:::-;:40;;;;:::i;:::-;19444:99;;;19497:3;19480:8;:14;;;19461:33;;:16;:33;;;;:::i;:::-;:39;;;;:::i;:::-;19444:99;19401:142;;19576:27;19616:4;19606:14;;:6;:14;;;:164;;19755:9;:15;;;19710:60;;19732:9;:20;;;19710:42;;:19;:42;;;;:::i;:::-;:60;;;;:::i;:::-;19606:164;;;19680:8;:14;;;19636:58;;19658:8;:19;;;19636:41;;:19;:41;;;;:::i;:::-;:58;;;;:::i;:::-;19606:164;19576:194;;19821:19;19802:16;;:38;;;;:::i;:::-;19783:16;:57;;;;19875:29;19929:19;19907;:41;;;;:::i;:::-;19875:73;;19987:1;19963:21;:25;19959:226;;;20055:21;20030:7;:22;20046:4;20030:22;;;;;;;;;;;;;;;;:46;;;;:::i;:::-;20005:7;:22;20021:4;20005:22;;;;;;;;;;;;;;;:71;;;;20123:4;20098:75;;20107:6;20098:75;;;20130:42;20150:21;20130:19;:42::i;:::-;20098:75;;;;;;:::i;:::-;;;;;;;;19959:226;20200:46;20208:19;20229:16;;20200:46;;;;;;;:::i;:::-;;;;;;;;20283:19;20264:16;:38;;;;:::i;:::-;20257:45;;;;;;;19195:1115;;;;;:::o;7:77:1:-;44:7;73:5;62:16;;7:77;;;:::o;90:118::-;177:24;195:5;177:24;:::i;:::-;172:3;165:37;90:118;;:::o;214:222::-;307:4;345:2;334:9;330:18;322:26;;358:71;426:1;415:9;411:17;402:6;358:71;:::i;:::-;214:222;;;;:::o;442:99::-;494:6;528:5;522:12;512:22;;442:99;;;:::o;547:169::-;631:11;665:6;660:3;653:19;705:4;700:3;696:14;681:29;;547:169;;;;:::o;722:246::-;803:1;813:113;827:6;824:1;821:13;813:113;;;912:1;907:3;903:11;897:18;893:1;888:3;884:11;877:39;849:2;846:1;842:10;837:15;;813:113;;;960:1;951:6;946:3;942:16;935:27;784:184;722:246;;;:::o;974:102::-;1015:6;1066:2;1062:7;1057:2;1050:5;1046:14;1042:28;1032:38;;974:102;;;:::o;1082:377::-;1170:3;1198:39;1231:5;1198:39;:::i;:::-;1253:71;1317:6;1312:3;1253:71;:::i;:::-;1246:78;;1333:65;1391:6;1386:3;1379:4;1372:5;1368:16;1333:65;:::i;:::-;1423:29;1445:6;1423:29;:::i;:::-;1418:3;1414:39;1407:46;;1174:285;1082:377;;;;:::o;1465:313::-;1578:4;1616:2;1605:9;1601:18;1593:26;;1665:9;1659:4;1655:20;1651:1;1640:9;1636:17;1629:47;1693:78;1766:4;1757:6;1693:78;:::i;:::-;1685:86;;1465:313;;;;:::o;1865:117::-;1974:1;1971;1964:12;2111:126;2148:7;2188:42;2181:5;2177:54;2166:65;;2111:126;;;:::o;2243:96::-;2280:7;2309:24;2327:5;2309:24;:::i;:::-;2298:35;;2243:96;;;:::o;2345:122::-;2418:24;2436:5;2418:24;:::i;:::-;2411:5;2408:35;2398:63;;2457:1;2454;2447:12;2398:63;2345:122;:::o;2473:139::-;2519:5;2557:6;2544:20;2535:29;;2573:33;2600:5;2573:33;:::i;:::-;2473:139;;;;:::o;2618:122::-;2691:24;2709:5;2691:24;:::i;:::-;2684:5;2681:35;2671:63;;2730:1;2727;2720:12;2671:63;2618:122;:::o;2746:139::-;2792:5;2830:6;2817:20;2808:29;;2846:33;2873:5;2846:33;:::i;:::-;2746:139;;;;:::o;2891:474::-;2959:6;2967;3016:2;3004:9;2995:7;2991:23;2987:32;2984:119;;;3022:79;;:::i;:::-;2984:119;3142:1;3167:53;3212:7;3203:6;3192:9;3188:22;3167:53;:::i;:::-;3157:63;;3113:117;3269:2;3295:53;3340:7;3331:6;3320:9;3316:22;3295:53;:::i;:::-;3285:63;;3240:118;2891:474;;;;;:::o;3371:90::-;3405:7;3448:5;3441:13;3434:21;3423:32;;3371:90;;;:::o;3467:109::-;3548:21;3563:5;3548:21;:::i;:::-;3543:3;3536:34;3467:109;;:::o;3582:210::-;3669:4;3707:2;3696:9;3692:18;3684:26;;3720:65;3782:1;3771:9;3767:17;3758:6;3720:65;:::i;:::-;3582:210;;;;:::o;3798:329::-;3857:6;3906:2;3894:9;3885:7;3881:23;3877:32;3874:119;;;3912:79;;:::i;:::-;3874:119;4032:1;4057:53;4102:7;4093:6;4082:9;4078:22;4057:53;:::i;:::-;4047:63;;4003:117;3798:329;;;;:::o;4133:::-;4192:6;4241:2;4229:9;4220:7;4216:23;4212:32;4209:119;;;4247:79;;:::i;:::-;4209:119;4367:1;4392:53;4437:7;4428:6;4417:9;4413:22;4392:53;:::i;:::-;4382:63;;4338:117;4133:329;;;;:::o;4468:619::-;4545:6;4553;4561;4610:2;4598:9;4589:7;4585:23;4581:32;4578:119;;;4616:79;;:::i;:::-;4578:119;4736:1;4761:53;4806:7;4797:6;4786:9;4782:22;4761:53;:::i;:::-;4751:63;;4707:117;4863:2;4889:53;4934:7;4925:6;4914:9;4910:22;4889:53;:::i;:::-;4879:63;;4834:118;4991:2;5017:53;5062:7;5053:6;5042:9;5038:22;5017:53;:::i;:::-;5007:63;;4962:118;4468:619;;;;;:::o;5093:116::-;5163:21;5178:5;5163:21;:::i;:::-;5156:5;5153:32;5143:60;;5199:1;5196;5189:12;5143:60;5093:116;:::o;5215:133::-;5258:5;5296:6;5283:20;5274:29;;5312:30;5336:5;5312:30;:::i;:::-;5215:133;;;;:::o;5354:468::-;5419:6;5427;5476:2;5464:9;5455:7;5451:23;5447:32;5444:119;;;5482:79;;:::i;:::-;5444:119;5602:1;5627:53;5672:7;5663:6;5652:9;5648:22;5627:53;:::i;:::-;5617:63;;5573:117;5729:2;5755:50;5797:7;5788:6;5777:9;5773:22;5755:50;:::i;:::-;5745:60;;5700:115;5354:468;;;;;:::o;5828:86::-;5863:7;5903:4;5896:5;5892:16;5881:27;;5828:86;;;:::o;5920:112::-;6003:22;6019:5;6003:22;:::i;:::-;5998:3;5991:35;5920:112;;:::o;6038:118::-;6075:7;6115:34;6108:5;6104:46;6093:57;;6038:118;;;:::o;6162:::-;6249:24;6267:5;6249:24;:::i;:::-;6244:3;6237:37;6162:118;;:::o;6286:735::-;6499:4;6537:3;6526:9;6522:19;6514:27;;6551:67;6615:1;6604:9;6600:17;6591:6;6551:67;:::i;:::-;6628:68;6692:2;6681:9;6677:18;6668:6;6628:68;:::i;:::-;6706;6770:2;6759:9;6755:18;6746:6;6706:68;:::i;:::-;6784;6848:2;6837:9;6833:18;6824:6;6784:68;:::i;:::-;6862:69;6926:3;6915:9;6911:19;6902:6;6862:69;:::i;:::-;6941:73;7009:3;6998:9;6994:19;6985:6;6941:73;:::i;:::-;6286:735;;;;;;;;;:::o;7027:214::-;7116:4;7154:2;7143:9;7139:18;7131:26;;7167:67;7231:1;7220:9;7216:17;7207:6;7167:67;:::i;:::-;7027:214;;;;:::o;7247:323::-;7303:6;7352:2;7340:9;7331:7;7327:23;7323:32;7320:119;;;7358:79;;:::i;:::-;7320:119;7478:1;7503:50;7545:7;7536:6;7525:9;7521:22;7503:50;:::i;:::-;7493:60;;7449:114;7247:323;;;;:::o;7576:118::-;7663:24;7681:5;7663:24;:::i;:::-;7658:3;7651:37;7576:118;;:::o;7700:222::-;7793:4;7831:2;7820:9;7816:18;7808:26;;7844:71;7912:1;7901:9;7897:17;7888:6;7844:71;:::i;:::-;7700:222;;;;:::o;7928:60::-;7956:3;7977:5;7970:12;;7928:60;;;:::o;7994:142::-;8044:9;8077:53;8095:34;8104:24;8122:5;8104:24;:::i;:::-;8095:34;:::i;:::-;8077:53;:::i;:::-;8064:66;;7994:142;;;:::o;8142:126::-;8192:9;8225:37;8256:5;8225:37;:::i;:::-;8212:50;;8142:126;;;:::o;8274:152::-;8350:9;8383:37;8414:5;8383:37;:::i;:::-;8370:50;;8274:152;;;:::o;8432:183::-;8545:63;8602:5;8545:63;:::i;:::-;8540:3;8533:76;8432:183;;:::o;8621:274::-;8740:4;8778:2;8767:9;8763:18;8755:26;;8791:97;8885:1;8874:9;8870:17;8861:6;8791:97;:::i;:::-;8621:274;;;;:::o;8901:118::-;8972:22;8988:5;8972:22;:::i;:::-;8965:5;8962:33;8952:61;;9009:1;9006;8999:12;8952:61;8901:118;:::o;9025:135::-;9069:5;9107:6;9094:20;9085:29;;9123:31;9148:5;9123:31;:::i;:::-;9025:135;;;;:::o;9166:1601::-;9286:6;9294;9302;9310;9318;9326;9334;9342;9350;9358;9407:3;9395:9;9386:7;9382:23;9378:33;9375:120;;;9414:79;;:::i;:::-;9375:120;9534:1;9559:51;9602:7;9593:6;9582:9;9578:22;9559:51;:::i;:::-;9549:61;;9505:115;9659:2;9685:51;9728:7;9719:6;9708:9;9704:22;9685:51;:::i;:::-;9675:61;;9630:116;9785:2;9811:51;9854:7;9845:6;9834:9;9830:22;9811:51;:::i;:::-;9801:61;;9756:116;9911:2;9937:51;9980:7;9971:6;9960:9;9956:22;9937:51;:::i;:::-;9927:61;;9882:116;10037:3;10064:51;10107:7;10098:6;10087:9;10083:22;10064:51;:::i;:::-;10054:61;;10008:117;10164:3;10191:51;10234:7;10225:6;10214:9;10210:22;10191:51;:::i;:::-;10181:61;;10135:117;10291:3;10318:51;10361:7;10352:6;10341:9;10337:22;10318:51;:::i;:::-;10308:61;;10262:117;10418:3;10445:51;10488:7;10479:6;10468:9;10464:22;10445:51;:::i;:::-;10435:61;;10389:117;10545:3;10572:51;10615:7;10606:6;10595:9;10591:22;10572:51;:::i;:::-;10562:61;;10516:117;10672:3;10699:51;10742:7;10733:6;10722:9;10718:22;10699:51;:::i;:::-;10689:61;;10643:117;9166:1601;;;;;;;;;;;;;:::o;10773:619::-;10850:6;10858;10866;10915:2;10903:9;10894:7;10890:23;10886:32;10883:119;;;10921:79;;:::i;:::-;10883:119;11041:1;11066:53;11111:7;11102:6;11091:9;11087:22;11066:53;:::i;:::-;11056:63;;11012:117;11168:2;11194:53;11239:7;11230:6;11219:9;11215:22;11194:53;:::i;:::-;11184:63;;11139:118;11296:2;11322:53;11367:7;11358:6;11347:9;11343:22;11322:53;:::i;:::-;11312:63;;11267:118;10773:619;;;;;:::o;11398:474::-;11466:6;11474;11523:2;11511:9;11502:7;11498:23;11494:32;11491:119;;;11529:79;;:::i;:::-;11491:119;11649:1;11674:53;11719:7;11710:6;11699:9;11695:22;11674:53;:::i;:::-;11664:63;;11620:117;11776:2;11802:53;11847:7;11838:6;11827:9;11823:22;11802:53;:::i;:::-;11792:63;;11747:118;11398:474;;;;;:::o;11878:468::-;11943:6;11951;12000:2;11988:9;11979:7;11975:23;11971:32;11968:119;;;12006:79;;:::i;:::-;11968:119;12126:1;12151:50;12193:7;12184:6;12173:9;12169:22;12151:50;:::i;:::-;12141:60;;12097:114;12250:2;12276:53;12321:7;12312:6;12301:9;12297:22;12276:53;:::i;:::-;12266:63;;12221:118;11878:468;;;;;:::o;12352:180::-;12400:77;12397:1;12390:88;12497:4;12494:1;12487:15;12521:4;12518:1;12511:15;12538:320;12582:6;12619:1;12613:4;12609:12;12599:22;;12666:1;12660:4;12656:12;12687:18;12677:81;;12743:4;12735:6;12731:17;12721:27;;12677:81;12805:2;12797:6;12794:14;12774:18;12771:38;12768:84;;12824:18;;:::i;:::-;12768:84;12589:269;12538:320;;;:::o;12864:180::-;12912:77;12909:1;12902:88;13009:4;13006:1;12999:15;13033:4;13030:1;13023:15;13050:410;13090:7;13113:20;13131:1;13113:20;:::i;:::-;13108:25;;13147:20;13165:1;13147:20;:::i;:::-;13142:25;;13202:1;13199;13195:9;13224:30;13242:11;13224:30;:::i;:::-;13213:41;;13403:1;13394:7;13390:15;13387:1;13384:22;13364:1;13357:9;13337:83;13314:139;;13433:18;;:::i;:::-;13314:139;13098:362;13050:410;;;;:::o;13466:180::-;13514:77;13511:1;13504:88;13611:4;13608:1;13601:15;13635:4;13632:1;13625:15;13652:185;13692:1;13709:20;13727:1;13709:20;:::i;:::-;13704:25;;13743:20;13761:1;13743:20;:::i;:::-;13738:25;;13782:1;13772:35;;13787:18;;:::i;:::-;13772:35;13829:1;13826;13822:9;13817:14;;13652:185;;;;:::o;13843:234::-;13983:34;13979:1;13971:6;13967:14;13960:58;14052:17;14047:2;14039:6;14035:15;14028:42;13843:234;:::o;14083:366::-;14225:3;14246:67;14310:2;14305:3;14246:67;:::i;:::-;14239:74;;14322:93;14411:3;14322:93;:::i;:::-;14440:2;14435:3;14431:12;14424:19;;14083:366;;;:::o;14455:419::-;14621:4;14659:2;14648:9;14644:18;14636:26;;14708:9;14702:4;14698:20;14694:1;14683:9;14679:17;14672:47;14736:131;14862:4;14736:131;:::i;:::-;14728:139;;14455:419;;;:::o;14880:179::-;15020:31;15016:1;15008:6;15004:14;14997:55;14880:179;:::o;15065:366::-;15207:3;15228:67;15292:2;15287:3;15228:67;:::i;:::-;15221:74;;15304:93;15393:3;15304:93;:::i;:::-;15422:2;15417:3;15413:12;15406:19;;15065:366;;;:::o;15437:419::-;15603:4;15641:2;15630:9;15626:18;15618:26;;15690:9;15684:4;15680:20;15676:1;15665:9;15661:17;15654:47;15718:131;15844:4;15718:131;:::i;:::-;15710:139;;15437:419;;;:::o;15862:194::-;15902:4;15922:20;15940:1;15922:20;:::i;:::-;15917:25;;15956:20;15974:1;15956:20;:::i;:::-;15951:25;;16000:1;15997;15993:9;15985:17;;16024:1;16018:4;16015:11;16012:37;;;16029:18;;:::i;:::-;16012:37;15862:194;;;;:::o;16062:147::-;16163:11;16200:3;16185:18;;16062:147;;;;:::o;16215:114::-;;:::o;16335:398::-;16494:3;16515:83;16596:1;16591:3;16515:83;:::i;:::-;16508:90;;16607:93;16696:3;16607:93;:::i;:::-;16725:1;16720:3;16716:11;16709:18;;16335:398;;;:::o;16739:379::-;16923:3;16945:147;17088:3;16945:147;:::i;:::-;16938:154;;17109:3;17102:10;;16739:379;;;:::o;17124:244::-;17264:34;17260:1;17252:6;17248:14;17241:58;17333:27;17328:2;17320:6;17316:15;17309:52;17124:244;:::o;17374:366::-;17516:3;17537:67;17601:2;17596:3;17537:67;:::i;:::-;17530:74;;17613:93;17702:3;17613:93;:::i;:::-;17731:2;17726:3;17722:12;17715:19;;17374:366;;;:::o;17746:419::-;17912:4;17950:2;17939:9;17935:18;17927:26;;17999:9;17993:4;17989:20;17985:1;17974:9;17970:17;17963:47;18027:131;18153:4;18027:131;:::i;:::-;18019:139;;17746:419;;;:::o;18171:223::-;18311:34;18307:1;18299:6;18295:14;18288:58;18380:6;18375:2;18367:6;18363:15;18356:31;18171:223;:::o;18400:366::-;18542:3;18563:67;18627:2;18622:3;18563:67;:::i;:::-;18556:74;;18639:93;18728:3;18639:93;:::i;:::-;18757:2;18752:3;18748:12;18741:19;;18400:366;;;:::o;18772:419::-;18938:4;18976:2;18965:9;18961:18;18953:26;;19025:9;19019:4;19015:20;19011:1;19000:9;18996:17;18989:47;19053:131;19179:4;19053:131;:::i;:::-;19045:139;;18772:419;;;:::o;19197:188::-;19235:3;19254:18;19270:1;19254:18;:::i;:::-;19249:23;;19286:18;19302:1;19286:18;:::i;:::-;19281:23;;19327:1;19324;19320:9;19313:16;;19350:4;19345:3;19342:13;19339:39;;;19358:18;;:::i;:::-;19339:39;19197:188;;;;:::o;19391:225::-;19531:34;19527:1;19519:6;19515:14;19508:58;19600:8;19595:2;19587:6;19583:15;19576:33;19391:225;:::o;19622:366::-;19764:3;19785:67;19849:2;19844:3;19785:67;:::i;:::-;19778:74;;19861:93;19950:3;19861:93;:::i;:::-;19979:2;19974:3;19970:12;19963:19;;19622:366;;;:::o;19994:419::-;20160:4;20198:2;20187:9;20183:18;20175:26;;20247:9;20241:4;20237:20;20233:1;20222:9;20218:17;20211:47;20275:131;20401:4;20275:131;:::i;:::-;20267:139;;19994:419;;;:::o;20419:182::-;20559:34;20555:1;20547:6;20543:14;20536:58;20419:182;:::o;20607:366::-;20749:3;20770:67;20834:2;20829:3;20770:67;:::i;:::-;20763:74;;20846:93;20935:3;20846:93;:::i;:::-;20964:2;20959:3;20955:12;20948:19;;20607:366;;;:::o;20979:419::-;21145:4;21183:2;21172:9;21168:18;21160:26;;21232:9;21226:4;21222:20;21218:1;21207:9;21203:17;21196:47;21260:131;21386:4;21260:131;:::i;:::-;21252:139;;20979:419;;;:::o;21404:161::-;21544:13;21540:1;21532:6;21528:14;21521:37;21404:161;:::o;21571:366::-;21713:3;21734:67;21798:2;21793:3;21734:67;:::i;:::-;21727:74;;21810:93;21899:3;21810:93;:::i;:::-;21928:2;21923:3;21919:12;21912:19;;21571:366;;;:::o;21943:419::-;22109:4;22147:2;22136:9;22132:18;22124:26;;22196:9;22190:4;22186:20;22182:1;22171:9;22167:17;22160:47;22224:131;22350:4;22224:131;:::i;:::-;22216:139;;21943:419;;;:::o;22368:172::-;22508:24;22504:1;22496:6;22492:14;22485:48;22368:172;:::o;22546:366::-;22688:3;22709:67;22773:2;22768:3;22709:67;:::i;:::-;22702:74;;22785:93;22874:3;22785:93;:::i;:::-;22903:2;22898:3;22894:12;22887:19;;22546:366;;;:::o;22918:419::-;23084:4;23122:2;23111:9;23107:18;23099:26;;23171:9;23165:4;23161:20;23157:1;23146:9;23142:17;23135:47;23199:131;23325:4;23199:131;:::i;:::-;23191:139;;22918:419;;;:::o;23343:227::-;23483:34;23479:1;23471:6;23467:14;23460:58;23552:10;23547:2;23539:6;23535:15;23528:35;23343:227;:::o;23576:366::-;23718:3;23739:67;23803:2;23798:3;23739:67;:::i;:::-;23732:74;;23815:93;23904:3;23815:93;:::i;:::-;23933:2;23928:3;23924:12;23917:19;;23576:366;;;:::o;23948:419::-;24114:4;24152:2;24141:9;24137:18;24129:26;;24201:9;24195:4;24191:20;24187:1;24176:9;24172:17;24165:47;24229:131;24355:4;24229:131;:::i;:::-;24221:139;;23948:419;;;:::o;24373:191::-;24413:3;24432:20;24450:1;24432:20;:::i;:::-;24427:25;;24466:20;24484:1;24466:20;:::i;:::-;24461:25;;24509:1;24506;24502:9;24495:16;;24530:3;24527:1;24524:10;24521:36;;;24537:18;;:::i;:::-;24521:36;24373:191;;;;:::o;24570:169::-;24710:21;24706:1;24698:6;24694:14;24687:45;24570:169;:::o;24745:366::-;24887:3;24908:67;24972:2;24967:3;24908:67;:::i;:::-;24901:74;;24984:93;25073:3;24984:93;:::i;:::-;25102:2;25097:3;25093:12;25086:19;;24745:366;;;:::o;25117:419::-;25283:4;25321:2;25310:9;25306:18;25298:26;;25370:9;25364:4;25360:20;25356:1;25345:9;25341:17;25334:47;25398:131;25524:4;25398:131;:::i;:::-;25390:139;;25117:419;;;:::o;25542:302::-;25682:34;25678:1;25670:6;25666:14;25659:58;25751:34;25746:2;25738:6;25734:15;25727:59;25820:16;25815:2;25807:6;25803:15;25796:41;25542:302;:::o;25850:366::-;25992:3;26013:67;26077:2;26072:3;26013:67;:::i;:::-;26006:74;;26089:93;26178:3;26089:93;:::i;:::-;26207:2;26202:3;26198:12;26191:19;;25850:366;;;:::o;26222:419::-;26388:4;26426:2;26415:9;26411:18;26403:26;;26475:9;26469:4;26465:20;26461:1;26450:9;26446:17;26439:47;26503:131;26629:4;26503:131;:::i;:::-;26495:139;;26222:419;;;:::o;26647:170::-;26787:22;26783:1;26775:6;26771:14;26764:46;26647:170;:::o;26823:366::-;26965:3;26986:67;27050:2;27045:3;26986:67;:::i;:::-;26979:74;;27062:93;27151:3;27062:93;:::i;:::-;27180:2;27175:3;27171:12;27164:19;;26823:366;;;:::o;27195:419::-;27361:4;27399:2;27388:9;27384:18;27376:26;;27448:9;27442:4;27438:20;27434:1;27423:9;27419:17;27412:47;27476:131;27602:4;27476:131;:::i;:::-;27468:139;;27195:419;;;:::o;27620:180::-;27668:77;27665:1;27658:88;27765:4;27762:1;27755:15;27789:4;27786:1;27779:15;27806:180;27854:77;27851:1;27844:88;27951:4;27948:1;27941:15;27975:4;27972:1;27965:15;27992:143;28049:5;28080:6;28074:13;28065:22;;28096:33;28123:5;28096:33;:::i;:::-;27992:143;;;;:::o;28141:351::-;28211:6;28260:2;28248:9;28239:7;28235:23;28231:32;28228:119;;;28266:79;;:::i;:::-;28228:119;28386:1;28411:64;28467:7;28458:6;28447:9;28443:22;28411:64;:::i;:::-;28401:74;;28357:128;28141:351;;;;:::o;28498:85::-;28543:7;28572:5;28561:16;;28498:85;;;:::o;28589:158::-;28647:9;28680:61;28698:42;28707:32;28733:5;28707:32;:::i;:::-;28698:42;:::i;:::-;28680:61;:::i;:::-;28667:74;;28589:158;;;:::o;28753:147::-;28848:45;28887:5;28848:45;:::i;:::-;28843:3;28836:58;28753:147;;:::o;28906:114::-;28973:6;29007:5;29001:12;28991:22;;28906:114;;;:::o;29026:184::-;29125:11;29159:6;29154:3;29147:19;29199:4;29194:3;29190:14;29175:29;;29026:184;;;;:::o;29216:132::-;29283:4;29306:3;29298:11;;29336:4;29331:3;29327:14;29319:22;;29216:132;;;:::o;29354:108::-;29431:24;29449:5;29431:24;:::i;:::-;29426:3;29419:37;29354:108;;:::o;29468:179::-;29537:10;29558:46;29600:3;29592:6;29558:46;:::i;:::-;29636:4;29631:3;29627:14;29613:28;;29468:179;;;;:::o;29653:113::-;29723:4;29755;29750:3;29746:14;29738:22;;29653:113;;;:::o;29802:732::-;29921:3;29950:54;29998:5;29950:54;:::i;:::-;30020:86;30099:6;30094:3;30020:86;:::i;:::-;30013:93;;30130:56;30180:5;30130:56;:::i;:::-;30209:7;30240:1;30225:284;30250:6;30247:1;30244:13;30225:284;;;30326:6;30320:13;30353:63;30412:3;30397:13;30353:63;:::i;:::-;30346:70;;30439:60;30492:6;30439:60;:::i;:::-;30429:70;;30285:224;30272:1;30269;30265:9;30260:14;;30225:284;;;30229:14;30525:3;30518:10;;29926:608;;;29802:732;;;;:::o;30540:831::-;30803:4;30841:3;30830:9;30826:19;30818:27;;30855:71;30923:1;30912:9;30908:17;30899:6;30855:71;:::i;:::-;30936:80;31012:2;31001:9;30997:18;30988:6;30936:80;:::i;:::-;31063:9;31057:4;31053:20;31048:2;31037:9;31033:18;31026:48;31091:108;31194:4;31185:6;31091:108;:::i;:::-;31083:116;;31209:72;31277:2;31266:9;31262:18;31253:6;31209:72;:::i;:::-;31291:73;31359:3;31348:9;31344:19;31335:6;31291:73;:::i;:::-;30540:831;;;;;;;;:::o;31377:227::-;31417:4;31437:20;31455:1;31437:20;:::i;:::-;31432:25;;31471:20;31489:1;31471:20;:::i;:::-;31466:25;;31515:1;31512;31508:9;31500:17;;31539:34;31533:4;31530:44;31527:70;;;31577:18;;:::i;:::-;31527:70;31377:227;;;;:::o;31610:332::-;31731:4;31769:2;31758:9;31754:18;31746:26;;31782:71;31850:1;31839:9;31835:17;31826:6;31782:71;:::i;:::-;31863:72;31931:2;31920:9;31916:18;31907:6;31863:72;:::i;:::-;31610:332;;;;;:::o

Swarm Source

ipfs://039243ce51b326b3c21372a06fc4aec0250fef2ea183de57b22f9e986511b6b5

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.