ETH Price: $3,921.84 (+6.87%)

Contract

0xBa0E4c1d5Ff5b3c805E7b1C57AceB10de7B208Ad
 

Overview

ETH Balance

0.02122645 ETH

Eth Value

$83.25 (@ $3,921.84/ETH)

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Approve207525192024-09-15 0:46:2388 days ago1726361183IN
0xBa0E4c1d...de7B208Ad
0 ETH0.000082691.75144085
Approve202293742024-07-03 23:49:35161 days ago1720050575IN
0xBa0E4c1d...de7B208Ad
0 ETH0.000191314.05190153
Approve197695462024-04-30 17:13:59225 days ago1714497239IN
0xBa0E4c1d...de7B208Ad
0 ETH0.0006102712.92495023
Approve197007702024-04-21 2:21:35235 days ago1713666095IN
0xBa0E4c1d...de7B208Ad
0 ETH0.000375818
Approve196806842024-04-18 6:54:11237 days ago1713423251IN
0xBa0E4c1d...de7B208Ad
0 ETH0.0007352115.55114444
Approve196806652024-04-18 6:50:23237 days ago1713423023IN
0xBa0E4c1d...de7B208Ad
0 ETH0.0005730312.12083504
Approve184892712023-11-03 4:51:47405 days ago1698987107IN
0xBa0E4c1d...de7B208Ad
0 ETH0.0002980810.8883033
Approve184892692023-11-03 4:51:23405 days ago1698987083IN
0xBa0E4c1d...de7B208Ad
0 ETH0.0005259111.12405851
Approve184481942023-10-28 10:46:47410 days ago1698490007IN
0xBa0E4c1d...de7B208Ad
0 ETH0.0005084310.75440599
Approve183830842023-10-19 8:06:35419 days ago1697702795IN
0xBa0E4c1d...de7B208Ad
0 ETH0.0004882210.32685491
Approve177108592023-07-17 5:19:47514 days ago1689571187IN
0xBa0E4c1d...de7B208Ad
0 ETH0.0003727514.91441588
Approve173493332023-05-27 8:54:11564 days ago1685177651IN
0xBa0E4c1d...de7B208Ad
0 ETH0.0011123623.55867131
Approve173098622023-05-21 19:39:35570 days ago1684697975IN
0xBa0E4c1d...de7B208Ad
0 ETH0.0018792839.96349465
Approve172593132023-05-14 16:35:23577 days ago1684082123IN
0xBa0E4c1d...de7B208Ad
0 ETH0.0015311461.41020956
Approve172155882023-05-08 11:50:23583 days ago1683546623IN
0xBa0E4c1d...de7B208Ad
0 ETH0.0039075483.22243063
Approve171657792023-05-01 11:48:11590 days ago1682941691IN
0xBa0E4c1d...de7B208Ad
0 ETH0.0023915550.85705621
Approve171393462023-04-27 18:38:23594 days ago1682620703IN
0xBa0E4c1d...de7B208Ad
0 ETH0.0008181732.73597275
Approve171303752023-04-26 12:23:35595 days ago1682511815IN
0xBa0E4c1d...de7B208Ad
0 ETH0.0018086438.30492563
Approve171065232023-04-23 4:04:59599 days ago1682222699IN
0xBa0E4c1d...de7B208Ad
0 ETH0.0017323436.8859208
Approve171029752023-04-22 16:08:35599 days ago1682179715IN
0xBa0E4c1d...de7B208Ad
0 ETH0.002779558.79199823
Approve170977272023-04-21 22:30:11600 days ago1682116211IN
0xBa0E4c1d...de7B208Ad
0 ETH0.0014818131.55154878
Approve170942492023-04-21 10:42:59600 days ago1682073779IN
0xBa0E4c1d...de7B208Ad
0 ETH0.0016383634.88489277
Approve170938382023-04-21 9:19:47600 days ago1682068787IN
0xBa0E4c1d...de7B208Ad
0 ETH0.0018271838.9150933
Approve170921662023-04-21 3:41:11601 days ago1682048471IN
0xBa0E4c1d...de7B208Ad
0 ETH0.002117445.10775615
Approve170916242023-04-21 1:51:11601 days ago1682041871IN
0xBa0E4c1d...de7B208Ad
0 ETH0.0020775444
View all transactions

Latest 2 internal transactions

Advanced mode:
Parent Transaction Hash Block From To
170878992023-04-20 13:07:11601 days ago1681996031
0xBa0E4c1d...de7B208Ad
0.35510691 ETH
170878992023-04-20 13:07:11601 days ago1681996031
0xBa0E4c1d...de7B208Ad
0.35510691 ETH
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
StonedPepe

Compiler Version
v0.8.16+commit.07a7930e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT
pragma solidity =0.8.16;
pragma experimental ABIEncoderV2;

/*
https://t.me/stonedpepeETH

https://twitter.com/StonedpepeETH

https://medium.com/@stonedpepeerc

https://pepe420.space/
*/


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

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

abstract contract Ownable is Context {
    address private _owner;


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

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

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

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

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

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

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

interface IERC20 {

    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);

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

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

interface IERC20Metadata is IERC20 {

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


contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;
    mapping(address => mapping(address => uint256)) private _allowances;

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    function name() public view virtual override returns (string memory) {
        return _name;
    }

    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

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

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

    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }

    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
        unchecked {
            _approve(sender, _msgSender(), currentAllowance - amount);
        }

        return true;
    }

    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(_msgSender(), spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(sender, recipient, amount);

        uint256 senderBalance = _balances[sender];
        require(senderBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[sender] = senderBalance - amount;
        }
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _beforeTokenTransfer(address(0), account, amount);

        _totalSupply += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);

        _afterTokenTransfer(address(0), account, amount);
    }

    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}

    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

library SafeMath {

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

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

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

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

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

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

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

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

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

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

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

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

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

interface IUniswapV2Factory {
    event PairCreated(
        address indexed token0,
        address indexed token1,
        address pair,
        uint256
    );

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

    function getPair(address tokenA, address tokenB)
        external
        view
        returns (address pair);

    function allPairs(uint256) external view returns (address pair);

    function allPairsLength() external view returns (uint256);

    function createPair(address tokenA, address tokenB)
        external
        returns (address pair);

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

interface IUniswapV2Pair {
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
    event Transfer(address indexed from, address indexed to, uint256 value);

    function name() external pure returns (string memory);

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

    function decimals() external pure returns (uint8);

    function totalSupply() external view returns (uint256);

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

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

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

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

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

    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function PERMIT_TYPEHASH() external pure returns (bytes32);

    function nonces(address owner) external view returns (uint256);

    function permit(
        address owner,
        address spender,
        uint256 value,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external;

    event Mint(address indexed sender, uint256 amount0, uint256 amount1);

    event Swap(
        address indexed sender,
        uint256 amount0In,
        uint256 amount1In,
        uint256 amount0Out,
        uint256 amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

    function factory() external view returns (address);

    function token0() external view returns (address);

    function token1() external view returns (address);

    function getReserves()
        external
        view
        returns (
            uint112 reserve0,
            uint112 reserve1,
            uint32 blockTimestampLast
        );

    function price0CumulativeLast() external view returns (uint256);

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

    function mint(address to) external returns (uint256 liquidity);

    function swap(
        uint256 amount0Out,
        uint256 amount1Out,
        address to,
        bytes calldata data
    ) external;

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

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

    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint256 amountADesired,
        uint256 amountBDesired,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    )
        external
        returns (
            uint256 amountA,
            uint256 amountB,
            uint256 liquidity
        );

    function addLiquidityETH(
        address token,
        uint256 amountTokenDesired,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    )
        external
        payable
        returns (
            uint256 amountToken,
            uint256 amountETH,
            uint256 liquidity
        );

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

    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable;

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

contract StonedPepe is ERC20, Ownable {
    using SafeMath for uint256;

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
    address public constant deadAddress = address(0xdead);

    bool private swapping;

    address public marketingWallet;

    uint256 public maxTransactionAmount;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;

    bool public tradingActive = true;
    bool public swapEnabled = true;

    uint256 public buyTotalFees;
    uint256 private buyMarketingFee;
    uint256 private buyLiquidityFee;

    uint256 public sellTotalFees;
    uint256 private sellMarketingFee;
    uint256 private sellLiquidityFee;

    uint256 private tokensForMarketing;
    uint256 private tokensForLiquidity;
    uint256 private previousFee;

    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) private _isExcludedMaxTransactionAmount;
    mapping(address => bool) private automatedMarketMakerPairs;
    mapping(address => bool) public bots;
    mapping (address => uint256) public _buyMap;
    event UpdateUniswapV2Router(
        address indexed newAddress,
        address indexed oldAddress
    );

    event ExcludeFromFees(address indexed account, bool isExcluded);

    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);

    event marketingWalletUpdated(
        address indexed newWallet,
        address indexed oldWallet
    );

    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );

    constructor() ERC20("Stoned Pepe", "PEPE420") {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);

        excludeFromMaxTransaction(address(_uniswapV2Router), true);
        uniswapV2Router = _uniswapV2Router;

        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());
        excludeFromMaxTransaction(address(uniswapV2Pair), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);

        uint256 _buyMarketingFee = 20;
        uint256 _buyLiquidityFee = 0;

        uint256 _sellMarketingFee = 20;
        uint256 _sellLiquidityFee = 0;

        uint256 totalSupply = 420000000 * 1e18;

        maxTransactionAmount = 2520000 * 1e18;
        maxWallet = 2520000 * 1e18;
        swapTokensAtAmount = (totalSupply * 1) / 1000;

        buyMarketingFee = _buyMarketingFee;
        buyLiquidityFee = _buyLiquidityFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee;

        sellMarketingFee = _sellMarketingFee;
        sellLiquidityFee = _sellLiquidityFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee;
        previousFee = sellTotalFees;

        marketingWallet = address(0x359AAEBC8B2A1EC56307d9A08f45C1ee77cB2303);

        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);

        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);

        _mint(msg.sender, totalSupply);
    }

    receive() external payable {}

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

    function updateMaxWalletAndTxnAmount(uint256 newTxnNum, uint256 newMaxWalletNum) external onlyOwner {
        require(
            newTxnNum >= ((totalSupply() * 1000) / 1000) / 1e18,
            "Cannot set maxTxn lower than 100%"
        );
        require(
            newMaxWalletNum >= ((totalSupply() * 1000) / 1000) / 1e18,
            "Cannot set maxWallet lower than 100%"
        );
        maxWallet = newMaxWalletNum * (10**18);
        maxTransactionAmount = newTxnNum * (10**18);
    }

    function blockBots(address[] memory bots_) public onlyOwner {
        for (uint256 i = 0; i < bots_.length; i++) {
            bots[bots_[i]] = true;
        }
    }

    function unblockBot(address notbot) public onlyOwner {
        bots[notbot] = false;
    }

    function excludeFromMaxTransaction(address updAds, bool isEx)
        public
        onlyOwner
    {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }

    function updateBuyFees(
        uint256 _marketingFee,
        uint256 _liquidityFee
    ) external onlyOwner {
        buyMarketingFee = _marketingFee;
        buyLiquidityFee = _liquidityFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee;
        require(buyTotalFees <= 1, "Must keep fees at 3% or less");
    }

    function updateSellFees(
        uint256 _marketingFee,
        uint256 _liquidityFee
    ) external onlyOwner {
        sellMarketingFee = _marketingFee;
        sellLiquidityFee = _liquidityFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee;
        previousFee = sellTotalFees;
        require(sellTotalFees <= 1, "Must keep fees at 3% or less");
    }

    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }

    function setAutomatedMarketMakerPair(address pair, bool value)
        public
        onlyOwner
    {
        require(
            pair != uniswapV2Pair,
            "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 isExcludedFromFees(address account) public view returns (bool) {
        return _isExcludedFromFees[account];
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        if (amount == 0) {
            super._transfer(from, to, 0);
            return;
        }

                if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !swapping
            ) {
                if (!tradingActive) {
                    require(
                        _isExcludedFromFees[from] || _isExcludedFromFees[to],
                        "Trading is not active."
                    );
                }
                
                require(!bots[from] && !bots[to], "Your account is blacklisted!");

                //buy
                if (
                    automatedMarketMakerPairs[from] &&
                    !_isExcludedMaxTransactionAmount[to]
                ) {
                    require(
                        amount <= maxTransactionAmount,
                        "Buy transfer amount exceeds the maxTransactionAmount."
                    );
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max wallet exceeded"
                    );
                }
                //sell
                else if (
                    automatedMarketMakerPairs[to] &&
                    !_isExcludedMaxTransactionAmount[from]
                ) {
                    require(amount <= maxTransactionAmount, "Sell transfer amount exceeds the maxTransactionAmount.");
                } 
                
                else if (!_isExcludedMaxTransactionAmount[to]) {
                    require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
                }
            }

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

        if (
            canSwap &&
            swapEnabled &&
            !swapping &&
            !automatedMarketMakerPairs[from] &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]
        ) {
            swapping = true;

            swapBack();

            swapping = false;
        }

        bool takeFee = !swapping;

        if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }

        uint256 fees = 0;

        if (takeFee) {
            // on sell
            if (automatedMarketMakerPairs[to] && sellTotalFees > 0) {
                fees = amount.mul(sellTotalFees).div(100);
                tokensForLiquidity += (fees * sellLiquidityFee) / sellTotalFees;
                tokensForMarketing += (fees * sellMarketingFee) / sellTotalFees;
            }
            // on buy
            else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = amount.mul(buyTotalFees).div(100);
                tokensForLiquidity += (fees * buyLiquidityFee) / buyTotalFees;
                tokensForMarketing += (fees * buyMarketingFee) / buyTotalFees;
            }

            if (fees > 0) {
                super._transfer(from, address(this), fees);
            }

            amount -= fees;
        }

        super._transfer(from, to, amount);
        sellTotalFees = previousFee;

    }

    function swapTokensForEth(uint256 tokenAmount) private {

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

        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {

        _approve(address(this), address(uniswapV2Router), tokenAmount);

        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0,
            0,
            deadAddress,
            block.timestamp
        );
    }

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity +
            tokensForMarketing;
        bool success;

        if (contractBalance == 0 || totalTokensToSwap == 0) {
            return;
        }

        if (contractBalance > swapTokensAtAmount * 20) {
            contractBalance = swapTokensAtAmount * 20;
        }

        uint256 liquidityTokens = (contractBalance * tokensForLiquidity) /
            totalTokensToSwap /
            2;
        uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens);

        uint256 initialETHBalance = address(this).balance;

        swapTokensForEth(amountToSwapForETH);

        uint256 ethBalance = address(this).balance.sub(initialETHBalance);

        uint256 ethForMarketing = ethBalance.mul(tokensForMarketing).div(
            totalTokensToSwap
        );

        uint256 ethForLiquidity = ethBalance - ethForMarketing;

        tokensForLiquidity = 0;
        tokensForMarketing = 0;

        if (liquidityTokens > 0 && ethForLiquidity > 0) {
            addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(
                amountToSwapForETH,
                ethForLiquidity,
                tokensForLiquidity
            );
        }

        (success, ) = address(marketingWallet).call{value: address(this).balance}("");
    }
}

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":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","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"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"marketingWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_buyMap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","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":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"bots_","type":"address[]"}],"name":"blockBots","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"bots","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"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":[{"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":"address","name":"notbot","type":"address"}],"name":"unblockBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newTxnNum","type":"uint256"},{"internalType":"uint256","name":"newMaxWalletNum","type":"uint256"}],"name":"updateMaxWalletAndTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526001600a60006101000a81548160ff0219169083151502179055506001600a60016101000a81548160ff0219169083151502179055503480156200004757600080fd5b506040518060400160405280600b81526020017f53746f6e656420506570650000000000000000000000000000000000000000008152506040518060400160405280600781526020017f50455045343230000000000000000000000000000000000000000000000000008152508160039081620000c5919062000c98565b508060049081620000d7919062000c98565b505050620000fa620000ee620004df60201b60201c565b620004e760201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d905062000126816001620005ad60201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001a6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001cc919062000de9565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000234573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200025a919062000de9565b6040518363ffffffff1660e01b81526004016200027992919062000e2c565b6020604051808303816000875af115801562000299573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002bf919062000de9565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200030760a0516001620005ad60201b60201c565b6200031c60a05160016200069760201b60201c565b600060149050600080601490506000806b015b6a759f4835dc2400000090506a0215a1794693c7770000006007819055506a0215a1794693c7770000006009819055506103e860018262000371919062000e88565b6200037d919062000f18565b60088190555084600c8190555083600d81905550600d54600c54620003a3919062000f50565b600b8190555082600f8190555081601081905550601054600f54620003c9919062000f50565b600e81905550600e5460138190555073359aaebc8b2a1ec56307d9a08f45c1ee77cb2303600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200044f620004416200073860201b60201c565b60016200076260201b60201c565b620004623060016200076260201b60201c565b6200047761dead60016200076260201b60201c565b620004996200048b6200073860201b60201c565b6001620005ad60201b60201c565b620004ac306001620005ad60201b60201c565b620004c161dead6001620005ad60201b60201c565b620004d333826200089c60201b60201c565b505050505050620010e8565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620005bd620004df60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620005e36200073860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200063c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006339062000fec565b60405180910390fd5b80601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b62000772620004df60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620007986200073860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620007f1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007e89062000fec565b60405180910390fd5b80601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516200089091906200102b565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036200090e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009059062001098565b60405180910390fd5b620009226000838362000a1460201b60201c565b806002600082825462000936919062000f50565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546200098d919062000f50565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620009f49190620010cb565b60405180910390a362000a106000838362000a1960201b60201c565b5050565b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000aa057607f821691505b60208210810362000ab65762000ab562000a58565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000b207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000ae1565b62000b2c868362000ae1565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000b7962000b7362000b6d8462000b44565b62000b4e565b62000b44565b9050919050565b6000819050919050565b62000b958362000b58565b62000bad62000ba48262000b80565b84845462000aee565b825550505050565b600090565b62000bc462000bb5565b62000bd181848462000b8a565b505050565b5b8181101562000bf95762000bed60008262000bba565b60018101905062000bd7565b5050565b601f82111562000c485762000c128162000abc565b62000c1d8462000ad1565b8101602085101562000c2d578190505b62000c4562000c3c8562000ad1565b83018262000bd6565b50505b505050565b600082821c905092915050565b600062000c6d6000198460080262000c4d565b1980831691505092915050565b600062000c88838362000c5a565b9150826002028217905092915050565b62000ca38262000a1e565b67ffffffffffffffff81111562000cbf5762000cbe62000a29565b5b62000ccb825462000a87565b62000cd882828562000bfd565b600060209050601f83116001811462000d10576000841562000cfb578287015190505b62000d07858262000c7a565b86555062000d77565b601f19841662000d208662000abc565b60005b8281101562000d4a5784890151825560018201915060208501945060208101905062000d23565b8683101562000d6a578489015162000d66601f89168262000c5a565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000db18262000d84565b9050919050565b62000dc38162000da4565b811462000dcf57600080fd5b50565b60008151905062000de38162000db8565b92915050565b60006020828403121562000e025762000e0162000d7f565b5b600062000e128482850162000dd2565b91505092915050565b62000e268162000da4565b82525050565b600060408201905062000e43600083018562000e1b565b62000e52602083018462000e1b565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000e958262000b44565b915062000ea28362000b44565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000ede5762000edd62000e59565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000f258262000b44565b915062000f328362000b44565b92508262000f455762000f4462000ee9565b5b828204905092915050565b600062000f5d8262000b44565b915062000f6a8362000b44565b925082820190508082111562000f855762000f8462000e59565b5b92915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000fd460208362000f8b565b915062000fe18262000f9c565b602082019050919050565b60006020820190508181036000830152620010078162000fc5565b9050919050565b60008115159050919050565b62001025816200100e565b82525050565b60006020820190506200104260008301846200101a565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062001080601f8362000f8b565b91506200108d8262001048565b602082019050919050565b60006020820190508181036000830152620010b38162001071565b9050919050565b620010c58162000b44565b82525050565b6000602082019050620010e26000830184620010ba565b92915050565b60805160a0516144be6200113860003960008181610d710152611534015260008181610b9001528181612db301528181612e9401528181612ebb01528181612f570152612f7e01526144be6000f3fe60806040526004361061021d5760003560e01c80637571336a11610123578063a9059cbb116100ab578063d85ba0631161006f578063d85ba063146107f3578063dd62ed3e1461081e578063e2f456051461085b578063f2fde38b14610886578063f8b45b05146108af57610224565b8063a9059cbb146106fa578063bbc0c74214610737578063bfd7928414610762578063c02466681461079f578063c8c8ebe4146107c857610224565b80638da5cb5b116100f25780638da5cb5b1461061557806395d89b4114610640578063961883991461066b5780639a7a23d614610694578063a457c2d7146106bd57610224565b80637571336a1461056d57806375f0a874146105965780637f2feddc146105c15780638a8c523c146105fe57610224565b806339509351116101a65780636a486a8e116101755780636a486a8e1461049a5780636b999053146104c55780636ddd1713146104ee57806370a0823114610519578063715018a61461055657610224565b806339509351146103cc57806349bd5a5e146104095780634fbee1931461043457806366ca9b831461047157610224565b80631694505e116101ed5780631694505e146102e357806318160ddd1461030e57806323b872dd1461033957806327c8f83514610376578063313ce567146103a157610224565b8062b8cf2a1461022957806302dbd8f81461025257806306fdde031461027b578063095ea7b3146102a657610224565b3661022457005b600080fd5b34801561023557600080fd5b50610250600480360381019061024b91906131f8565b6108da565b005b34801561025e57600080fd5b5061027960048036038101906102749190613277565b6109eb565b005b34801561028757600080fd5b50610290610ade565b60405161029d9190613336565b60405180910390f35b3480156102b257600080fd5b506102cd60048036038101906102c89190613358565b610b70565b6040516102da91906133b3565b60405180910390f35b3480156102ef57600080fd5b506102f8610b8e565b604051610305919061342d565b60405180910390f35b34801561031a57600080fd5b50610323610bb2565b6040516103309190613457565b60405180910390f35b34801561034557600080fd5b50610360600480360381019061035b9190613472565b610bbc565b60405161036d91906133b3565b60405180910390f35b34801561038257600080fd5b5061038b610cb4565b60405161039891906134d4565b60405180910390f35b3480156103ad57600080fd5b506103b6610cba565b6040516103c3919061350b565b60405180910390f35b3480156103d857600080fd5b506103f360048036038101906103ee9190613358565b610cc3565b60405161040091906133b3565b60405180910390f35b34801561041557600080fd5b5061041e610d6f565b60405161042b91906134d4565b60405180910390f35b34801561044057600080fd5b5061045b60048036038101906104569190613526565b610d93565b60405161046891906133b3565b60405180910390f35b34801561047d57600080fd5b5061049860048036038101906104939190613277565b610de9565b005b3480156104a657600080fd5b506104af610ed3565b6040516104bc9190613457565b60405180910390f35b3480156104d157600080fd5b506104ec60048036038101906104e79190613526565b610ed9565b005b3480156104fa57600080fd5b50610503610fb0565b60405161051091906133b3565b60405180910390f35b34801561052557600080fd5b50610540600480360381019061053b9190613526565b610fc3565b60405161054d9190613457565b60405180910390f35b34801561056257600080fd5b5061056b61100b565b005b34801561057957600080fd5b50610594600480360381019061058f919061357f565b611093565b005b3480156105a257600080fd5b506105ab61116a565b6040516105b891906134d4565b60405180910390f35b3480156105cd57600080fd5b506105e860048036038101906105e39190613526565b611190565b6040516105f59190613457565b60405180910390f35b34801561060a57600080fd5b506106136111a8565b005b34801561062157600080fd5b5061062a61125c565b60405161063791906134d4565b60405180910390f35b34801561064c57600080fd5b50610655611286565b6040516106629190613336565b60405180910390f35b34801561067757600080fd5b50610692600480360381019061068d9190613277565b611318565b005b3480156106a057600080fd5b506106bb60048036038101906106b6919061357f565b6114b6565b005b3480156106c957600080fd5b506106e460048036038101906106df9190613358565b6115ce565b6040516106f191906133b3565b60405180910390f35b34801561070657600080fd5b50610721600480360381019061071c9190613358565b6116b9565b60405161072e91906133b3565b60405180910390f35b34801561074357600080fd5b5061074c6116d7565b60405161075991906133b3565b60405180910390f35b34801561076e57600080fd5b5061078960048036038101906107849190613526565b6116ea565b60405161079691906133b3565b60405180910390f35b3480156107ab57600080fd5b506107c660048036038101906107c1919061357f565b61170a565b005b3480156107d457600080fd5b506107dd61182f565b6040516107ea9190613457565b60405180910390f35b3480156107ff57600080fd5b50610808611835565b6040516108159190613457565b60405180910390f35b34801561082a57600080fd5b50610845600480360381019061084091906135bf565b61183b565b6040516108529190613457565b60405180910390f35b34801561086757600080fd5b506108706118c2565b60405161087d9190613457565b60405180910390f35b34801561089257600080fd5b506108ad60048036038101906108a89190613526565b6118c8565b005b3480156108bb57600080fd5b506108c46119bf565b6040516108d19190613457565b60405180910390f35b6108e26119c5565b73ffffffffffffffffffffffffffffffffffffffff1661090061125c565b73ffffffffffffffffffffffffffffffffffffffff1614610956576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094d9061364b565b60405180910390fd5b60005b81518110156109e75760016017600084848151811061097b5761097a61366b565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806109df906136c9565b915050610959565b5050565b6109f36119c5565b73ffffffffffffffffffffffffffffffffffffffff16610a1161125c565b73ffffffffffffffffffffffffffffffffffffffff1614610a67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5e9061364b565b60405180910390fd5b81600f8190555080601081905550601054600f54610a859190613711565b600e81905550600e546013819055506001600e541115610ada576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ad190613791565b60405180910390fd5b5050565b606060038054610aed906137e0565b80601f0160208091040260200160405190810160405280929190818152602001828054610b19906137e0565b8015610b665780601f10610b3b57610100808354040283529160200191610b66565b820191906000526020600020905b815481529060010190602001808311610b4957829003601f168201915b5050505050905090565b6000610b84610b7d6119c5565b84846119cd565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b6000610bc9848484611b96565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610c146119c5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610c94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8b90613883565b60405180910390fd5b610ca885610ca06119c5565b8584036119cd565b60019150509392505050565b61dead81565b60006012905090565b6000610d65610cd06119c5565b848460016000610cde6119c5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610d609190613711565b6119cd565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610df16119c5565b73ffffffffffffffffffffffffffffffffffffffff16610e0f61125c565b73ffffffffffffffffffffffffffffffffffffffff1614610e65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5c9061364b565b60405180910390fd5b81600c8190555080600d81905550600d54600c54610e839190613711565b600b819055506001600b541115610ecf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec690613791565b60405180910390fd5b5050565b600e5481565b610ee16119c5565b73ffffffffffffffffffffffffffffffffffffffff16610eff61125c565b73ffffffffffffffffffffffffffffffffffffffff1614610f55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4c9061364b565b60405180910390fd5b6000601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600a60019054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6110136119c5565b73ffffffffffffffffffffffffffffffffffffffff1661103161125c565b73ffffffffffffffffffffffffffffffffffffffff1614611087576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107e9061364b565b60405180910390fd5b61109160006126d5565b565b61109b6119c5565b73ffffffffffffffffffffffffffffffffffffffff166110b961125c565b73ffffffffffffffffffffffffffffffffffffffff161461110f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111069061364b565b60405180910390fd5b80601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60186020528060005260406000206000915090505481565b6111b06119c5565b73ffffffffffffffffffffffffffffffffffffffff166111ce61125c565b73ffffffffffffffffffffffffffffffffffffffff1614611224576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121b9061364b565b60405180910390fd5b6001600a60006101000a81548160ff0219169083151502179055506001600a60016101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054611295906137e0565b80601f01602080910402602001604051908101604052809291908181526020018280546112c1906137e0565b801561130e5780601f106112e35761010080835404028352916020019161130e565b820191906000526020600020905b8154815290600101906020018083116112f157829003601f168201915b5050505050905090565b6113206119c5565b73ffffffffffffffffffffffffffffffffffffffff1661133e61125c565b73ffffffffffffffffffffffffffffffffffffffff1614611394576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138b9061364b565b60405180910390fd5b670de0b6b3a76400006103e8806113a9610bb2565b6113b391906138a3565b6113bd919061392c565b6113c7919061392c565b821015611409576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611400906139cf565b60405180910390fd5b670de0b6b3a76400006103e88061141e610bb2565b61142891906138a3565b611432919061392c565b61143c919061392c565b81101561147e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147590613a61565b60405180910390fd5b670de0b6b3a76400008161149291906138a3565b600981905550670de0b6b3a7640000826114ac91906138a3565b6007819055505050565b6114be6119c5565b73ffffffffffffffffffffffffffffffffffffffff166114dc61125c565b73ffffffffffffffffffffffffffffffffffffffff1614611532576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115299061364b565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036115c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b790613af3565b60405180910390fd5b6115ca828261279b565b5050565b600080600160006115dd6119c5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508281101561169a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169190613b85565b60405180910390fd5b6116ae6116a56119c5565b858584036119cd565b600191505092915050565b60006116cd6116c66119c5565b8484611b96565b6001905092915050565b600a60009054906101000a900460ff1681565b60176020528060005260406000206000915054906101000a900460ff1681565b6117126119c5565b73ffffffffffffffffffffffffffffffffffffffff1661173061125c565b73ffffffffffffffffffffffffffffffffffffffff1614611786576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177d9061364b565b60405180910390fd5b80601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161182391906133b3565b60405180910390a25050565b60075481565b600b5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60085481565b6118d06119c5565b73ffffffffffffffffffffffffffffffffffffffff166118ee61125c565b73ffffffffffffffffffffffffffffffffffffffff1614611944576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193b9061364b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036119b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119aa90613c17565b60405180910390fd5b6119bc816126d5565b50565b60095481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611a3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3390613ca9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611aab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa290613d3b565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611b899190613457565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611c05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bfc90613dcd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611c74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6b90613e5f565b60405180910390fd5b60008103611c8d57611c888383600061283c565b6126d0565b611c9561125c565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611d035750611cd361125c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611d3c5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611d76575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611d8f5750600560149054906101000a900460ff16155b1561225557600a60009054906101000a900460ff16611e8957601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611e495750601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b611e88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7f90613ecb565b60405180910390fd5b5b601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611f2d5750601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b611f6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6390613f37565b60405180910390fd5b601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561200f5750601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156120b657600754811115612059576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205090613fc9565b60405180910390fd5b60095461206583610fc3565b826120709190613711565b11156120b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a890614035565b60405180910390fd5b612254565b601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156121595750601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156121a8576007548111156121a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219a906140c7565b60405180910390fd5b612253565b601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166122525760095461220583610fc3565b826122109190613711565b1115612251576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224890614035565b60405180910390fd5b5b5b5b5b600061226030610fc3565b9050600060085482101590508080156122855750600a60019054906101000a900460ff165b801561229e5750600560149054906101000a900460ff16155b80156122f45750601660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561234a5750601460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156123a05750601460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156123e4576001600560146101000a81548160ff0219169083151502179055506123c8612abb565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061249a5750601460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156124a457600090505b600081156126b757601660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561250757506000600e54115b156125a1576125346064612526600e5488612cc890919063ffffffff16565b612cde90919063ffffffff16565b9050600e546010548261254791906138a3565b612551919061392c565b601260008282546125629190613711565b92505081905550600e54600f548261257a91906138a3565b612584919061392c565b601160008282546125959190613711565b92505081905550612693565b601660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156125fc57506000600b54115b1561269257612629606461261b600b5488612cc890919063ffffffff16565b612cde90919063ffffffff16565b9050600b54600d548261263c91906138a3565b612646919061392c565b601260008282546126579190613711565b92505081905550600b54600c548261266f91906138a3565b612679919061392c565b6011600082825461268a9190613711565b925050819055505b5b60008111156126a8576126a787308361283c565b5b80856126b491906140e7565b94505b6126c287878761283c565b601354600e81905550505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036128ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128a290613dcd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361291a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161291190613e5f565b60405180910390fd5b612925838383612cf4565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156129ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129a29061418d565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612a3e9190613711565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612aa29190613457565b60405180910390a3612ab5848484612cf9565b50505050565b6000612ac630610fc3565b90506000601154601254612ada9190613711565b9050600080831480612aec5750600082145b15612af957505050612cc6565b6014600854612b0891906138a3565b831115612b21576014600854612b1e91906138a3565b92505b600060028360125486612b3491906138a3565b612b3e919061392c565b612b48919061392c565b90506000612b5f8286612cfe90919063ffffffff16565b90506000479050612b6f82612d14565b6000612b848247612cfe90919063ffffffff16565b90506000612baf87612ba160115485612cc890919063ffffffff16565b612cde90919063ffffffff16565b905060008183612bbf91906140e7565b905060006012819055506000601181905550600086118015612be15750600081115b15612c2e57612bf08682612f51565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618582601254604051612c25939291906141ad565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051612c7490614215565b60006040518083038185875af1925050503d8060008114612cb1576040519150601f19603f3d011682016040523d82523d6000602084013e612cb6565b606091505b5050809750505050505050505050505b565b60008183612cd691906138a3565b905092915050565b60008183612cec919061392c565b905092915050565b505050565b505050565b60008183612d0c91906140e7565b905092915050565b6000600267ffffffffffffffff811115612d3157612d30613057565b5b604051908082528060200260200182016040528015612d5f5781602001602082028036833780820191505090505b5090503081600081518110612d7757612d7661366b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612e1c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e40919061423f565b81600181518110612e5457612e5361366b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612eb9307f0000000000000000000000000000000000000000000000000000000000000000846119cd565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612f1b959493929190614365565b600060405180830381600087803b158015612f3557600080fd5b505af1158015612f49573d6000803e3d6000fd5b505050505050565b612f7c307f0000000000000000000000000000000000000000000000000000000000000000846119cd565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b8152600401612fe3969594939291906143bf565b60606040518083038185885af1158015613001573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906130269190614435565b5050505050565b6000604051905090565b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61308f82613046565b810181811067ffffffffffffffff821117156130ae576130ad613057565b5b80604052505050565b60006130c161302d565b90506130cd8282613086565b919050565b600067ffffffffffffffff8211156130ed576130ec613057565b5b602082029050602081019050919050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061312e82613103565b9050919050565b61313e81613123565b811461314957600080fd5b50565b60008135905061315b81613135565b92915050565b600061317461316f846130d2565b6130b7565b90508083825260208201905060208402830185811115613197576131966130fe565b5b835b818110156131c057806131ac888261314c565b845260208401935050602081019050613199565b5050509392505050565b600082601f8301126131df576131de613041565b5b81356131ef848260208601613161565b91505092915050565b60006020828403121561320e5761320d613037565b5b600082013567ffffffffffffffff81111561322c5761322b61303c565b5b613238848285016131ca565b91505092915050565b6000819050919050565b61325481613241565b811461325f57600080fd5b50565b6000813590506132718161324b565b92915050565b6000806040838503121561328e5761328d613037565b5b600061329c85828601613262565b92505060206132ad85828601613262565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b838110156132f15780820151818401526020810190506132d6565b60008484015250505050565b6000613308826132b7565b61331281856132c2565b93506133228185602086016132d3565b61332b81613046565b840191505092915050565b6000602082019050818103600083015261335081846132fd565b905092915050565b6000806040838503121561336f5761336e613037565b5b600061337d8582860161314c565b925050602061338e85828601613262565b9150509250929050565b60008115159050919050565b6133ad81613398565b82525050565b60006020820190506133c860008301846133a4565b92915050565b6000819050919050565b60006133f36133ee6133e984613103565b6133ce565b613103565b9050919050565b6000613405826133d8565b9050919050565b6000613417826133fa565b9050919050565b6134278161340c565b82525050565b6000602082019050613442600083018461341e565b92915050565b61345181613241565b82525050565b600060208201905061346c6000830184613448565b92915050565b60008060006060848603121561348b5761348a613037565b5b60006134998682870161314c565b93505060206134aa8682870161314c565b92505060406134bb86828701613262565b9150509250925092565b6134ce81613123565b82525050565b60006020820190506134e960008301846134c5565b92915050565b600060ff82169050919050565b613505816134ef565b82525050565b600060208201905061352060008301846134fc565b92915050565b60006020828403121561353c5761353b613037565b5b600061354a8482850161314c565b91505092915050565b61355c81613398565b811461356757600080fd5b50565b60008135905061357981613553565b92915050565b6000806040838503121561359657613595613037565b5b60006135a48582860161314c565b92505060206135b58582860161356a565b9150509250929050565b600080604083850312156135d6576135d5613037565b5b60006135e48582860161314c565b92505060206135f58582860161314c565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006136356020836132c2565b9150613640826135ff565b602082019050919050565b6000602082019050818103600083015261366481613628565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006136d482613241565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036137065761370561369a565b5b600182019050919050565b600061371c82613241565b915061372783613241565b925082820190508082111561373f5761373e61369a565b5b92915050565b7f4d757374206b6565702066656573206174203325206f72206c65737300000000600082015250565b600061377b601c836132c2565b915061378682613745565b602082019050919050565b600060208201905081810360008301526137aa8161376e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806137f857607f821691505b60208210810361380b5761380a6137b1565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b600061386d6028836132c2565b915061387882613811565b604082019050919050565b6000602082019050818103600083015261389c81613860565b9050919050565b60006138ae82613241565b91506138b983613241565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156138f2576138f161369a565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061393782613241565b915061394283613241565b925082613952576139516138fd565b5b828204905092915050565b7f43616e6e6f7420736574206d617854786e206c6f776572207468616e2031303060008201527f2500000000000000000000000000000000000000000000000000000000000000602082015250565b60006139b96021836132c2565b91506139c48261395d565b604082019050919050565b600060208201905081810360008301526139e8816139ac565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f3130302500000000000000000000000000000000000000000000000000000000602082015250565b6000613a4b6024836132c2565b9150613a56826139ef565b604082019050919050565b60006020820190508181036000830152613a7a81613a3e565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000613add6039836132c2565b9150613ae882613a81565b604082019050919050565b60006020820190508181036000830152613b0c81613ad0565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000613b6f6025836132c2565b9150613b7a82613b13565b604082019050919050565b60006020820190508181036000830152613b9e81613b62565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613c016026836132c2565b9150613c0c82613ba5565b604082019050919050565b60006020820190508181036000830152613c3081613bf4565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613c936024836132c2565b9150613c9e82613c37565b604082019050919050565b60006020820190508181036000830152613cc281613c86565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613d256022836132c2565b9150613d3082613cc9565b604082019050919050565b60006020820190508181036000830152613d5481613d18565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613db76025836132c2565b9150613dc282613d5b565b604082019050919050565b60006020820190508181036000830152613de681613daa565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613e496023836132c2565b9150613e5482613ded565b604082019050919050565b60006020820190508181036000830152613e7881613e3c565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000613eb56016836132c2565b9150613ec082613e7f565b602082019050919050565b60006020820190508181036000830152613ee481613ea8565b9050919050565b7f596f7572206163636f756e7420697320626c61636b6c69737465642100000000600082015250565b6000613f21601c836132c2565b9150613f2c82613eeb565b602082019050919050565b60006020820190508181036000830152613f5081613f14565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000613fb36035836132c2565b9150613fbe82613f57565b604082019050919050565b60006020820190508181036000830152613fe281613fa6565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b600061401f6013836132c2565b915061402a82613fe9565b602082019050919050565b6000602082019050818103600083015261404e81614012565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b60006140b16036836132c2565b91506140bc82614055565b604082019050919050565b600060208201905081810360008301526140e0816140a4565b9050919050565b60006140f282613241565b91506140fd83613241565b92508282039050818111156141155761411461369a565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006141776026836132c2565b91506141828261411b565b604082019050919050565b600060208201905081810360008301526141a68161416a565b9050919050565b60006060820190506141c26000830186613448565b6141cf6020830185613448565b6141dc6040830184613448565b949350505050565b600081905092915050565b50565b60006141ff6000836141e4565b915061420a826141ef565b600082019050919050565b6000614220826141f2565b9150819050919050565b60008151905061423981613135565b92915050565b60006020828403121561425557614254613037565b5b60006142638482850161422a565b91505092915050565b6000819050919050565b600061429161428c6142878461426c565b6133ce565b613241565b9050919050565b6142a181614276565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6142dc81613123565b82525050565b60006142ee83836142d3565b60208301905092915050565b6000602082019050919050565b6000614312826142a7565b61431c81856142b2565b9350614327836142c3565b8060005b8381101561435857815161433f88826142e2565b975061434a836142fa565b92505060018101905061432b565b5085935050505092915050565b600060a08201905061437a6000830188613448565b6143876020830187614298565b81810360408301526143998186614307565b90506143a860608301856134c5565b6143b56080830184613448565b9695505050505050565b600060c0820190506143d460008301896134c5565b6143e16020830188613448565b6143ee6040830187614298565b6143fb6060830186614298565b61440860808301856134c5565b61441560a0830184613448565b979650505050505050565b60008151905061442f8161324b565b92915050565b60008060006060848603121561444e5761444d613037565b5b600061445c86828701614420565b935050602061446d86828701614420565b925050604061447e86828701614420565b915050925092509256fea2646970667358221220e232429f0f59f3036004d5fa66feb193799a50a1a44b1eea5b7a7e5a7c2d261264736f6c63430008100033

Deployed Bytecode

0x60806040526004361061021d5760003560e01c80637571336a11610123578063a9059cbb116100ab578063d85ba0631161006f578063d85ba063146107f3578063dd62ed3e1461081e578063e2f456051461085b578063f2fde38b14610886578063f8b45b05146108af57610224565b8063a9059cbb146106fa578063bbc0c74214610737578063bfd7928414610762578063c02466681461079f578063c8c8ebe4146107c857610224565b80638da5cb5b116100f25780638da5cb5b1461061557806395d89b4114610640578063961883991461066b5780639a7a23d614610694578063a457c2d7146106bd57610224565b80637571336a1461056d57806375f0a874146105965780637f2feddc146105c15780638a8c523c146105fe57610224565b806339509351116101a65780636a486a8e116101755780636a486a8e1461049a5780636b999053146104c55780636ddd1713146104ee57806370a0823114610519578063715018a61461055657610224565b806339509351146103cc57806349bd5a5e146104095780634fbee1931461043457806366ca9b831461047157610224565b80631694505e116101ed5780631694505e146102e357806318160ddd1461030e57806323b872dd1461033957806327c8f83514610376578063313ce567146103a157610224565b8062b8cf2a1461022957806302dbd8f81461025257806306fdde031461027b578063095ea7b3146102a657610224565b3661022457005b600080fd5b34801561023557600080fd5b50610250600480360381019061024b91906131f8565b6108da565b005b34801561025e57600080fd5b5061027960048036038101906102749190613277565b6109eb565b005b34801561028757600080fd5b50610290610ade565b60405161029d9190613336565b60405180910390f35b3480156102b257600080fd5b506102cd60048036038101906102c89190613358565b610b70565b6040516102da91906133b3565b60405180910390f35b3480156102ef57600080fd5b506102f8610b8e565b604051610305919061342d565b60405180910390f35b34801561031a57600080fd5b50610323610bb2565b6040516103309190613457565b60405180910390f35b34801561034557600080fd5b50610360600480360381019061035b9190613472565b610bbc565b60405161036d91906133b3565b60405180910390f35b34801561038257600080fd5b5061038b610cb4565b60405161039891906134d4565b60405180910390f35b3480156103ad57600080fd5b506103b6610cba565b6040516103c3919061350b565b60405180910390f35b3480156103d857600080fd5b506103f360048036038101906103ee9190613358565b610cc3565b60405161040091906133b3565b60405180910390f35b34801561041557600080fd5b5061041e610d6f565b60405161042b91906134d4565b60405180910390f35b34801561044057600080fd5b5061045b60048036038101906104569190613526565b610d93565b60405161046891906133b3565b60405180910390f35b34801561047d57600080fd5b5061049860048036038101906104939190613277565b610de9565b005b3480156104a657600080fd5b506104af610ed3565b6040516104bc9190613457565b60405180910390f35b3480156104d157600080fd5b506104ec60048036038101906104e79190613526565b610ed9565b005b3480156104fa57600080fd5b50610503610fb0565b60405161051091906133b3565b60405180910390f35b34801561052557600080fd5b50610540600480360381019061053b9190613526565b610fc3565b60405161054d9190613457565b60405180910390f35b34801561056257600080fd5b5061056b61100b565b005b34801561057957600080fd5b50610594600480360381019061058f919061357f565b611093565b005b3480156105a257600080fd5b506105ab61116a565b6040516105b891906134d4565b60405180910390f35b3480156105cd57600080fd5b506105e860048036038101906105e39190613526565b611190565b6040516105f59190613457565b60405180910390f35b34801561060a57600080fd5b506106136111a8565b005b34801561062157600080fd5b5061062a61125c565b60405161063791906134d4565b60405180910390f35b34801561064c57600080fd5b50610655611286565b6040516106629190613336565b60405180910390f35b34801561067757600080fd5b50610692600480360381019061068d9190613277565b611318565b005b3480156106a057600080fd5b506106bb60048036038101906106b6919061357f565b6114b6565b005b3480156106c957600080fd5b506106e460048036038101906106df9190613358565b6115ce565b6040516106f191906133b3565b60405180910390f35b34801561070657600080fd5b50610721600480360381019061071c9190613358565b6116b9565b60405161072e91906133b3565b60405180910390f35b34801561074357600080fd5b5061074c6116d7565b60405161075991906133b3565b60405180910390f35b34801561076e57600080fd5b5061078960048036038101906107849190613526565b6116ea565b60405161079691906133b3565b60405180910390f35b3480156107ab57600080fd5b506107c660048036038101906107c1919061357f565b61170a565b005b3480156107d457600080fd5b506107dd61182f565b6040516107ea9190613457565b60405180910390f35b3480156107ff57600080fd5b50610808611835565b6040516108159190613457565b60405180910390f35b34801561082a57600080fd5b50610845600480360381019061084091906135bf565b61183b565b6040516108529190613457565b60405180910390f35b34801561086757600080fd5b506108706118c2565b60405161087d9190613457565b60405180910390f35b34801561089257600080fd5b506108ad60048036038101906108a89190613526565b6118c8565b005b3480156108bb57600080fd5b506108c46119bf565b6040516108d19190613457565b60405180910390f35b6108e26119c5565b73ffffffffffffffffffffffffffffffffffffffff1661090061125c565b73ffffffffffffffffffffffffffffffffffffffff1614610956576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094d9061364b565b60405180910390fd5b60005b81518110156109e75760016017600084848151811061097b5761097a61366b565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806109df906136c9565b915050610959565b5050565b6109f36119c5565b73ffffffffffffffffffffffffffffffffffffffff16610a1161125c565b73ffffffffffffffffffffffffffffffffffffffff1614610a67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5e9061364b565b60405180910390fd5b81600f8190555080601081905550601054600f54610a859190613711565b600e81905550600e546013819055506001600e541115610ada576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ad190613791565b60405180910390fd5b5050565b606060038054610aed906137e0565b80601f0160208091040260200160405190810160405280929190818152602001828054610b19906137e0565b8015610b665780601f10610b3b57610100808354040283529160200191610b66565b820191906000526020600020905b815481529060010190602001808311610b4957829003601f168201915b5050505050905090565b6000610b84610b7d6119c5565b84846119cd565b6001905092915050565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b6000610bc9848484611b96565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610c146119c5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610c94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8b90613883565b60405180910390fd5b610ca885610ca06119c5565b8584036119cd565b60019150509392505050565b61dead81565b60006012905090565b6000610d65610cd06119c5565b848460016000610cde6119c5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610d609190613711565b6119cd565b6001905092915050565b7f000000000000000000000000a3c93326eee643a6a2b22e903420aba71a3dad3181565b6000601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610df16119c5565b73ffffffffffffffffffffffffffffffffffffffff16610e0f61125c565b73ffffffffffffffffffffffffffffffffffffffff1614610e65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5c9061364b565b60405180910390fd5b81600c8190555080600d81905550600d54600c54610e839190613711565b600b819055506001600b541115610ecf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec690613791565b60405180910390fd5b5050565b600e5481565b610ee16119c5565b73ffffffffffffffffffffffffffffffffffffffff16610eff61125c565b73ffffffffffffffffffffffffffffffffffffffff1614610f55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4c9061364b565b60405180910390fd5b6000601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600a60019054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6110136119c5565b73ffffffffffffffffffffffffffffffffffffffff1661103161125c565b73ffffffffffffffffffffffffffffffffffffffff1614611087576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107e9061364b565b60405180910390fd5b61109160006126d5565b565b61109b6119c5565b73ffffffffffffffffffffffffffffffffffffffff166110b961125c565b73ffffffffffffffffffffffffffffffffffffffff161461110f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111069061364b565b60405180910390fd5b80601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60186020528060005260406000206000915090505481565b6111b06119c5565b73ffffffffffffffffffffffffffffffffffffffff166111ce61125c565b73ffffffffffffffffffffffffffffffffffffffff1614611224576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121b9061364b565b60405180910390fd5b6001600a60006101000a81548160ff0219169083151502179055506001600a60016101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054611295906137e0565b80601f01602080910402602001604051908101604052809291908181526020018280546112c1906137e0565b801561130e5780601f106112e35761010080835404028352916020019161130e565b820191906000526020600020905b8154815290600101906020018083116112f157829003601f168201915b5050505050905090565b6113206119c5565b73ffffffffffffffffffffffffffffffffffffffff1661133e61125c565b73ffffffffffffffffffffffffffffffffffffffff1614611394576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138b9061364b565b60405180910390fd5b670de0b6b3a76400006103e8806113a9610bb2565b6113b391906138a3565b6113bd919061392c565b6113c7919061392c565b821015611409576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611400906139cf565b60405180910390fd5b670de0b6b3a76400006103e88061141e610bb2565b61142891906138a3565b611432919061392c565b61143c919061392c565b81101561147e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147590613a61565b60405180910390fd5b670de0b6b3a76400008161149291906138a3565b600981905550670de0b6b3a7640000826114ac91906138a3565b6007819055505050565b6114be6119c5565b73ffffffffffffffffffffffffffffffffffffffff166114dc61125c565b73ffffffffffffffffffffffffffffffffffffffff1614611532576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115299061364b565b60405180910390fd5b7f000000000000000000000000a3c93326eee643a6a2b22e903420aba71a3dad3173ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036115c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b790613af3565b60405180910390fd5b6115ca828261279b565b5050565b600080600160006115dd6119c5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508281101561169a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169190613b85565b60405180910390fd5b6116ae6116a56119c5565b858584036119cd565b600191505092915050565b60006116cd6116c66119c5565b8484611b96565b6001905092915050565b600a60009054906101000a900460ff1681565b60176020528060005260406000206000915054906101000a900460ff1681565b6117126119c5565b73ffffffffffffffffffffffffffffffffffffffff1661173061125c565b73ffffffffffffffffffffffffffffffffffffffff1614611786576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177d9061364b565b60405180910390fd5b80601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161182391906133b3565b60405180910390a25050565b60075481565b600b5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60085481565b6118d06119c5565b73ffffffffffffffffffffffffffffffffffffffff166118ee61125c565b73ffffffffffffffffffffffffffffffffffffffff1614611944576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193b9061364b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036119b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119aa90613c17565b60405180910390fd5b6119bc816126d5565b50565b60095481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611a3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3390613ca9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611aab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa290613d3b565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611b899190613457565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611c05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bfc90613dcd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611c74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6b90613e5f565b60405180910390fd5b60008103611c8d57611c888383600061283c565b6126d0565b611c9561125c565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611d035750611cd361125c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611d3c5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611d76575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611d8f5750600560149054906101000a900460ff16155b1561225557600a60009054906101000a900460ff16611e8957601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611e495750601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b611e88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7f90613ecb565b60405180910390fd5b5b601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611f2d5750601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b611f6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6390613f37565b60405180910390fd5b601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561200f5750601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156120b657600754811115612059576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205090613fc9565b60405180910390fd5b60095461206583610fc3565b826120709190613711565b11156120b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a890614035565b60405180910390fd5b612254565b601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156121595750601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156121a8576007548111156121a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219a906140c7565b60405180910390fd5b612253565b601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166122525760095461220583610fc3565b826122109190613711565b1115612251576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224890614035565b60405180910390fd5b5b5b5b5b600061226030610fc3565b9050600060085482101590508080156122855750600a60019054906101000a900460ff165b801561229e5750600560149054906101000a900460ff16155b80156122f45750601660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561234a5750601460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156123a05750601460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156123e4576001600560146101000a81548160ff0219169083151502179055506123c8612abb565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061249a5750601460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156124a457600090505b600081156126b757601660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561250757506000600e54115b156125a1576125346064612526600e5488612cc890919063ffffffff16565b612cde90919063ffffffff16565b9050600e546010548261254791906138a3565b612551919061392c565b601260008282546125629190613711565b92505081905550600e54600f548261257a91906138a3565b612584919061392c565b601160008282546125959190613711565b92505081905550612693565b601660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156125fc57506000600b54115b1561269257612629606461261b600b5488612cc890919063ffffffff16565b612cde90919063ffffffff16565b9050600b54600d548261263c91906138a3565b612646919061392c565b601260008282546126579190613711565b92505081905550600b54600c548261266f91906138a3565b612679919061392c565b6011600082825461268a9190613711565b925050819055505b5b60008111156126a8576126a787308361283c565b5b80856126b491906140e7565b94505b6126c287878761283c565b601354600e81905550505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036128ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128a290613dcd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361291a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161291190613e5f565b60405180910390fd5b612925838383612cf4565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156129ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129a29061418d565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612a3e9190613711565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612aa29190613457565b60405180910390a3612ab5848484612cf9565b50505050565b6000612ac630610fc3565b90506000601154601254612ada9190613711565b9050600080831480612aec5750600082145b15612af957505050612cc6565b6014600854612b0891906138a3565b831115612b21576014600854612b1e91906138a3565b92505b600060028360125486612b3491906138a3565b612b3e919061392c565b612b48919061392c565b90506000612b5f8286612cfe90919063ffffffff16565b90506000479050612b6f82612d14565b6000612b848247612cfe90919063ffffffff16565b90506000612baf87612ba160115485612cc890919063ffffffff16565b612cde90919063ffffffff16565b905060008183612bbf91906140e7565b905060006012819055506000601181905550600086118015612be15750600081115b15612c2e57612bf08682612f51565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618582601254604051612c25939291906141ad565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051612c7490614215565b60006040518083038185875af1925050503d8060008114612cb1576040519150601f19603f3d011682016040523d82523d6000602084013e612cb6565b606091505b5050809750505050505050505050505b565b60008183612cd691906138a3565b905092915050565b60008183612cec919061392c565b905092915050565b505050565b505050565b60008183612d0c91906140e7565b905092915050565b6000600267ffffffffffffffff811115612d3157612d30613057565b5b604051908082528060200260200182016040528015612d5f5781602001602082028036833780820191505090505b5090503081600081518110612d7757612d7661366b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612e1c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e40919061423f565b81600181518110612e5457612e5361366b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612eb9307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846119cd565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612f1b959493929190614365565b600060405180830381600087803b158015612f3557600080fd5b505af1158015612f49573d6000803e3d6000fd5b505050505050565b612f7c307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846119cd565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b8152600401612fe3969594939291906143bf565b60606040518083038185885af1158015613001573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906130269190614435565b5050505050565b6000604051905090565b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61308f82613046565b810181811067ffffffffffffffff821117156130ae576130ad613057565b5b80604052505050565b60006130c161302d565b90506130cd8282613086565b919050565b600067ffffffffffffffff8211156130ed576130ec613057565b5b602082029050602081019050919050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061312e82613103565b9050919050565b61313e81613123565b811461314957600080fd5b50565b60008135905061315b81613135565b92915050565b600061317461316f846130d2565b6130b7565b90508083825260208201905060208402830185811115613197576131966130fe565b5b835b818110156131c057806131ac888261314c565b845260208401935050602081019050613199565b5050509392505050565b600082601f8301126131df576131de613041565b5b81356131ef848260208601613161565b91505092915050565b60006020828403121561320e5761320d613037565b5b600082013567ffffffffffffffff81111561322c5761322b61303c565b5b613238848285016131ca565b91505092915050565b6000819050919050565b61325481613241565b811461325f57600080fd5b50565b6000813590506132718161324b565b92915050565b6000806040838503121561328e5761328d613037565b5b600061329c85828601613262565b92505060206132ad85828601613262565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b838110156132f15780820151818401526020810190506132d6565b60008484015250505050565b6000613308826132b7565b61331281856132c2565b93506133228185602086016132d3565b61332b81613046565b840191505092915050565b6000602082019050818103600083015261335081846132fd565b905092915050565b6000806040838503121561336f5761336e613037565b5b600061337d8582860161314c565b925050602061338e85828601613262565b9150509250929050565b60008115159050919050565b6133ad81613398565b82525050565b60006020820190506133c860008301846133a4565b92915050565b6000819050919050565b60006133f36133ee6133e984613103565b6133ce565b613103565b9050919050565b6000613405826133d8565b9050919050565b6000613417826133fa565b9050919050565b6134278161340c565b82525050565b6000602082019050613442600083018461341e565b92915050565b61345181613241565b82525050565b600060208201905061346c6000830184613448565b92915050565b60008060006060848603121561348b5761348a613037565b5b60006134998682870161314c565b93505060206134aa8682870161314c565b92505060406134bb86828701613262565b9150509250925092565b6134ce81613123565b82525050565b60006020820190506134e960008301846134c5565b92915050565b600060ff82169050919050565b613505816134ef565b82525050565b600060208201905061352060008301846134fc565b92915050565b60006020828403121561353c5761353b613037565b5b600061354a8482850161314c565b91505092915050565b61355c81613398565b811461356757600080fd5b50565b60008135905061357981613553565b92915050565b6000806040838503121561359657613595613037565b5b60006135a48582860161314c565b92505060206135b58582860161356a565b9150509250929050565b600080604083850312156135d6576135d5613037565b5b60006135e48582860161314c565b92505060206135f58582860161314c565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006136356020836132c2565b9150613640826135ff565b602082019050919050565b6000602082019050818103600083015261366481613628565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006136d482613241565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036137065761370561369a565b5b600182019050919050565b600061371c82613241565b915061372783613241565b925082820190508082111561373f5761373e61369a565b5b92915050565b7f4d757374206b6565702066656573206174203325206f72206c65737300000000600082015250565b600061377b601c836132c2565b915061378682613745565b602082019050919050565b600060208201905081810360008301526137aa8161376e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806137f857607f821691505b60208210810361380b5761380a6137b1565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b600061386d6028836132c2565b915061387882613811565b604082019050919050565b6000602082019050818103600083015261389c81613860565b9050919050565b60006138ae82613241565b91506138b983613241565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156138f2576138f161369a565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061393782613241565b915061394283613241565b925082613952576139516138fd565b5b828204905092915050565b7f43616e6e6f7420736574206d617854786e206c6f776572207468616e2031303060008201527f2500000000000000000000000000000000000000000000000000000000000000602082015250565b60006139b96021836132c2565b91506139c48261395d565b604082019050919050565b600060208201905081810360008301526139e8816139ac565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f3130302500000000000000000000000000000000000000000000000000000000602082015250565b6000613a4b6024836132c2565b9150613a56826139ef565b604082019050919050565b60006020820190508181036000830152613a7a81613a3e565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000613add6039836132c2565b9150613ae882613a81565b604082019050919050565b60006020820190508181036000830152613b0c81613ad0565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000613b6f6025836132c2565b9150613b7a82613b13565b604082019050919050565b60006020820190508181036000830152613b9e81613b62565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613c016026836132c2565b9150613c0c82613ba5565b604082019050919050565b60006020820190508181036000830152613c3081613bf4565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613c936024836132c2565b9150613c9e82613c37565b604082019050919050565b60006020820190508181036000830152613cc281613c86565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613d256022836132c2565b9150613d3082613cc9565b604082019050919050565b60006020820190508181036000830152613d5481613d18565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613db76025836132c2565b9150613dc282613d5b565b604082019050919050565b60006020820190508181036000830152613de681613daa565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613e496023836132c2565b9150613e5482613ded565b604082019050919050565b60006020820190508181036000830152613e7881613e3c565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000613eb56016836132c2565b9150613ec082613e7f565b602082019050919050565b60006020820190508181036000830152613ee481613ea8565b9050919050565b7f596f7572206163636f756e7420697320626c61636b6c69737465642100000000600082015250565b6000613f21601c836132c2565b9150613f2c82613eeb565b602082019050919050565b60006020820190508181036000830152613f5081613f14565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000613fb36035836132c2565b9150613fbe82613f57565b604082019050919050565b60006020820190508181036000830152613fe281613fa6565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b600061401f6013836132c2565b915061402a82613fe9565b602082019050919050565b6000602082019050818103600083015261404e81614012565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b60006140b16036836132c2565b91506140bc82614055565b604082019050919050565b600060208201905081810360008301526140e0816140a4565b9050919050565b60006140f282613241565b91506140fd83613241565b92508282039050818111156141155761411461369a565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006141776026836132c2565b91506141828261411b565b604082019050919050565b600060208201905081810360008301526141a68161416a565b9050919050565b60006060820190506141c26000830186613448565b6141cf6020830185613448565b6141dc6040830184613448565b949350505050565b600081905092915050565b50565b60006141ff6000836141e4565b915061420a826141ef565b600082019050919050565b6000614220826141f2565b9150819050919050565b60008151905061423981613135565b92915050565b60006020828403121561425557614254613037565b5b60006142638482850161422a565b91505092915050565b6000819050919050565b600061429161428c6142878461426c565b6133ce565b613241565b9050919050565b6142a181614276565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6142dc81613123565b82525050565b60006142ee83836142d3565b60208301905092915050565b6000602082019050919050565b6000614312826142a7565b61431c81856142b2565b9350614327836142c3565b8060005b8381101561435857815161433f88826142e2565b975061434a836142fa565b92505060018101905061432b565b5085935050505092915050565b600060a08201905061437a6000830188613448565b6143876020830187614298565b81810360408301526143998186614307565b90506143a860608301856134c5565b6143b56080830184613448565b9695505050505050565b600060c0820190506143d460008301896134c5565b6143e16020830188613448565b6143ee6040830187614298565b6143fb6060830186614298565b61440860808301856134c5565b61441560a0830184613448565b979650505050505050565b60008151905061442f8161324b565b92915050565b60008060006060848603121561444e5761444d613037565b5b600061445c86828701614420565b935050602061446d86828701614420565b925050604061447e86828701614420565b915050925092509256fea2646970667358221220e232429f0f59f3036004d5fa66feb193799a50a1a44b1eea5b7a7e5a7c2d261264736f6c63430008100033

Deployed Bytecode Sourcemap

14285:12025:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18326:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19119:378;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2821:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3735:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14365:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3142:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3912:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14468:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3041:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4412:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14423:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20203:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18778:333;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14904:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18503:92;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14753:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3258:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;948:112;;;;;;;;;;;;;:::i;:::-;;18603:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14560:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15375:43;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17688:112;;;;;;;;;;;;;:::i;:::-;;725:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2929:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17808:510;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19695:304;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4635:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3393:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14714:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15332:36;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19505:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14599:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14792:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3576:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14641:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1068:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14681:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18326:169;871:12;:10;:12::i;:::-;860:23;;:7;:5;:7::i;:::-;:23;;;852:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18402:9:::1;18397:91;18421:5;:12;18417:1;:16;18397:91;;;18472:4;18455;:14;18460:5;18466:1;18460:8;;;;;;;;:::i;:::-;;;;;;;;18455:14;;;;;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;18435:3;;;;;:::i;:::-;;;;18397:91;;;;18326:169:::0;:::o;19119:378::-;871:12;:10;:12::i;:::-;860:23;;:7;:5;:7::i;:::-;:23;;;852:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19263:13:::1;19244:16;:32;;;;19306:13;19287:16;:32;;;;19365:16;;19346;;:35;;;;:::i;:::-;19330:13;:51;;;;19406:13;;19392:11;:27;;;;19455:1;19438:13;;:18;;19430:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;19119:378:::0;;:::o;2821:100::-;2875:13;2908:5;2901:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2821:100;:::o;3735:169::-;3818:4;3835:39;3844:12;:10;:12::i;:::-;3858:7;3867:6;3835:8;:39::i;:::-;3892:4;3885:11;;3735:169;;;;:::o;14365:51::-;;;:::o;3142:108::-;3203:7;3230:12;;3223:19;;3142:108;:::o;3912:492::-;4052:4;4069:36;4079:6;4087:9;4098:6;4069:9;:36::i;:::-;4118:24;4145:11;:19;4157:6;4145:19;;;;;;;;;;;;;;;:33;4165:12;:10;:12::i;:::-;4145:33;;;;;;;;;;;;;;;;4118:60;;4217:6;4197:16;:26;;4189:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;4304:57;4313:6;4321:12;:10;:12::i;:::-;4354:6;4335:16;:25;4304:8;:57::i;:::-;4392:4;4385:11;;;3912:492;;;;;:::o;14468:53::-;14514:6;14468:53;:::o;3041:93::-;3099:5;3124:2;3117:9;;3041:93;:::o;4412:215::-;4500:4;4517:80;4526:12;:10;:12::i;:::-;4540:7;4586:10;4549:11;:25;4561:12;:10;:12::i;:::-;4549:25;;;;;;;;;;;;;;;:34;4575:7;4549:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;4517:8;:80::i;:::-;4615:4;4608:11;;4412:215;;;;:::o;14423:38::-;;;:::o;20203:126::-;20269:4;20293:19;:28;20313:7;20293:28;;;;;;;;;;;;;;;;;;;;;;;;;20286:35;;20203:126;;;:::o;18778:333::-;871:12;:10;:12::i;:::-;860:23;;:7;:5;:7::i;:::-;:23;;;852:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18920:13:::1;18902:15;:31;;;;18962:13;18944:15;:31;;;;19019:15;;19001;;:33;;;;:::i;:::-;18986:12;:48;;;;19069:1;19053:12;;:17;;19045:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;18778:333:::0;;:::o;14904:28::-;;;;:::o;18503:92::-;871:12;:10;:12::i;:::-;860:23;;:7;:5;:7::i;:::-;:23;;;852:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18582:5:::1;18567:4;:12;18572:6;18567:12;;;;;;;;;;;;;;;;:20;;;;;;;;;;;;;;;;;;18503:92:::0;:::o;14753:30::-;;;;;;;;;;;;;:::o;3258:127::-;3332:7;3359:9;:18;3369:7;3359:18;;;;;;;;;;;;;;;;3352:25;;3258:127;;;:::o;948:112::-;871:12;:10;:12::i;:::-;860:23;;:7;:5;:7::i;:::-;:23;;;852:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1022:30:::1;1049:1;1022:18;:30::i;:::-;948:112::o:0;18603:167::-;871:12;:10;:12::i;:::-;860:23;;:7;:5;:7::i;:::-;:23;;;852:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18758:4:::1;18716:31;:39;18748:6;18716:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;18603:167:::0;;:::o;14560:30::-;;;;;;;;;;;;;:::o;15375:43::-;;;;;;;;;;;;;;;;;:::o;17688:112::-;871:12;:10;:12::i;:::-;860:23;;:7;:5;:7::i;:::-;:23;;;852:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17759:4:::1;17743:13;;:20;;;;;;;;;;;;;;;;;;17788:4;17774:11;;:18;;;;;;;;;;;;;;;;;;17688:112::o:0;725:87::-;771:7;798:6;;;;;;;;;;;791:13;;725:87;:::o;2929:104::-;2985:13;3018:7;3011:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2929:104;:::o;17808:510::-;871:12;:10;:12::i;:::-;860:23;;:7;:5;:7::i;:::-;:23;;;852:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17988:4:::1;17980;17972::::0;17956:13:::1;:11;:13::i;:::-;:20;;;;:::i;:::-;17955:29;;;;:::i;:::-;17954:38;;;;:::i;:::-;17941:9;:51;;17919:134;;;;;;;;;;;;:::i;:::-;;;;;;;;;18139:4;18131;18123::::0;18107:13:::1;:11;:13::i;:::-;:20;;;;:::i;:::-;18106:29;;;;:::i;:::-;18105:38;;;;:::i;:::-;18086:15;:57;;18064:143;;;;;;;;;;;;:::i;:::-;;;;;;;;;18249:6;18230:15;:26;;;;:::i;:::-;18218:9;:38;;;;18303:6;18290:9;:20;;;;:::i;:::-;18267;:43;;;;17808:510:::0;;:::o;19695:304::-;871:12;:10;:12::i;:::-;860:23;;:7;:5;:7::i;:::-;:23;;;852:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19839:13:::1;19831:21;;:4;:21;;::::0;19809:128:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;19950:41;19979:4;19985:5;19950:28;:41::i;:::-;19695:304:::0;;:::o;4635:413::-;4728:4;4745:24;4772:11;:25;4784:12;:10;:12::i;:::-;4772:25;;;;;;;;;;;;;;;:34;4798:7;4772:34;;;;;;;;;;;;;;;;4745:61;;4845:15;4825:16;:35;;4817:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;4938:67;4947:12;:10;:12::i;:::-;4961:7;4989:15;4970:16;:34;4938:8;:67::i;:::-;5036:4;5029:11;;;4635:413;;;;:::o;3393:175::-;3479:4;3496:42;3506:12;:10;:12::i;:::-;3520:9;3531:6;3496:9;:42::i;:::-;3556:4;3549:11;;3393:175;;;;:::o;14714:32::-;;;;;;;;;;;;;:::o;15332:36::-;;;;;;;;;;;;;;;;;;;;;;:::o;19505:182::-;871:12;:10;:12::i;:::-;860:23;;:7;:5;:7::i;:::-;:23;;;852:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19621:8:::1;19590:19;:28;19610:7;19590:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;19661:7;19645:34;;;19670:8;19645:34;;;;;;:::i;:::-;;;;;;;;19505:182:::0;;:::o;14599:35::-;;;;:::o;14792:27::-;;;;:::o;3576:151::-;3665:7;3692:11;:18;3704:5;3692:18;;;;;;;;;;;;;;;:27;3711:7;3692:27;;;;;;;;;;;;;;;;3685:34;;3576:151;;;;:::o;14641:33::-;;;;:::o;1068:201::-;871:12;:10;:12::i;:::-;860:23;;:7;:5;:7::i;:::-;:23;;;852:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1177:1:::1;1157:22;;:8;:22;;::::0;1149:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;1233:28;1252:8;1233:18;:28::i;:::-;1068:201:::0;:::o;14681:24::-;;;;:::o;269:98::-;322:7;349:10;342:17;;269:98;:::o;6204:380::-;6357:1;6340:19;;:5;:19;;;6332:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6438:1;6419:21;;:7;:21;;;6411:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6522:6;6492:11;:18;6504:5;6492:18;;;;;;;;;;;;;;;:27;6511:7;6492:27;;;;;;;;;;;;;;;:36;;;;6560:7;6544:32;;6553:5;6544:32;;;6569:6;6544:32;;;;;;:::i;:::-;;;;;;;;6204:380;;;:::o;20337:3613::-;20485:1;20469:18;;:4;:18;;;20461:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20562:1;20548:16;;:2;:16;;;20540:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;20631:1;20621:6;:11;20617:93;;20649:28;20665:4;20671:2;20675:1;20649:15;:28::i;:::-;20692:7;;20617:93;20760:7;:5;:7::i;:::-;20752:15;;:4;:15;;;;:49;;;;;20794:7;:5;:7::i;:::-;20788:13;;:2;:13;;;;20752:49;:86;;;;;20836:1;20822:16;;:2;:16;;;;20752:86;:128;;;;;20873:6;20859:21;;:2;:21;;;;20752:128;:158;;;;;20902:8;;;;;;;;;;;20901:9;20752:158;20730:1630;;;20950:13;;;;;;;;;;;20945:223;;21022:19;:25;21042:4;21022:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;21051:19;:23;21071:2;21051:23;;;;;;;;;;;;;;;;;;;;;;;;;21022:52;20988:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;20945:223;21213:4;:10;21218:4;21213:10;;;;;;;;;;;;;;;;;;;;;;;;;21212:11;:24;;;;;21228:4;:8;21233:2;21228:8;;;;;;;;;;;;;;;;;;;;;;;;;21227:9;21212:24;21204:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;21339:25;:31;21365:4;21339:31;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;21396:31;:35;21428:2;21396:35;;;;;;;;;;;;;;;;;;;;;;;;;21395:36;21339:92;21313:1032;;;21518:20;;21508:6;:30;;21474:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;21726:9;;21709:13;21719:2;21709:9;:13::i;:::-;21700:6;:22;;;;:::i;:::-;:35;;21666:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;21313:1032;;;21899:25;:29;21925:2;21899:29;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;21954:31;:37;21986:4;21954:37;;;;;;;;;;;;;;;;;;;;;;;;;21953:38;21899:92;21873:472;;;22052:20;;22042:6;:30;;22034:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;21873:472;;;22198:31;:35;22230:2;22198:35;;;;;;;;;;;;;;;;;;;;;;;;;22193:152;;22292:9;;22275:13;22285:2;22275:9;:13::i;:::-;22266:6;:22;;;;:::i;:::-;:35;;22258:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22193:152;21873:472;21313:1032;20730:1630;22372:28;22403:24;22421:4;22403:9;:24::i;:::-;22372:55;;22440:12;22479:18;;22455:20;:42;;22440:57;;22528:7;:35;;;;;22552:11;;;;;;;;;;;22528:35;:61;;;;;22581:8;;;;;;;;;;;22580:9;22528:61;:110;;;;;22607:25;:31;22633:4;22607:31;;;;;;;;;;;;;;;;;;;;;;;;;22606:32;22528:110;:153;;;;;22656:19;:25;22676:4;22656:25;;;;;;;;;;;;;;;;;;;;;;;;;22655:26;22528:153;:194;;;;;22699:19;:23;22719:2;22699:23;;;;;;;;;;;;;;;;;;;;;;;;;22698:24;22528:194;22510:326;;;22760:4;22749:8;;:15;;;;;;;;;;;;;;;;;;22781:10;:8;:10::i;:::-;22819:5;22808:8;;:16;;;;;;;;;;;;;;;;;;22510:326;22848:12;22864:8;;;;;;;;;;;22863:9;22848:24;;22889:19;:25;22909:4;22889:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;22918:19;:23;22938:2;22918:23;;;;;;;;;;;;;;;;;;;;;;;;;22889:52;22885:100;;;22968:5;22958:15;;22885:100;22997:12;23030:7;23026:831;;;23082:25;:29;23108:2;23082:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;23131:1;23115:13;;:17;23082:50;23078:630;;;23160:34;23190:3;23160:25;23171:13;;23160:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;23153:41;;23263:13;;23243:16;;23236:4;:23;;;;:::i;:::-;23235:41;;;;:::i;:::-;23213:18;;:63;;;;;;;:::i;:::-;;;;;;;;23345:13;;23325:16;;23318:4;:23;;;;:::i;:::-;23317:41;;;;:::i;:::-;23295:18;;:63;;;;;;;:::i;:::-;;;;;;;;23078:630;;;23420:25;:31;23446:4;23420:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;23470:1;23455:12;;:16;23420:51;23416:292;;;23499:33;23528:3;23499:24;23510:12;;23499:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;23492:40;;23600:12;;23581:15;;23574:4;:22;;;;:::i;:::-;23573:39;;;;:::i;:::-;23551:18;;:61;;;;;;;:::i;:::-;;;;;;;;23680:12;;23661:15;;23654:4;:22;;;;:::i;:::-;23653:39;;;;:::i;:::-;23631:18;;:61;;;;;;;:::i;:::-;;;;;;;;23416:292;23078:630;23735:1;23728:4;:8;23724:91;;;23757:42;23773:4;23787;23794;23757:15;:42::i;:::-;23724:91;23841:4;23831:14;;;;;:::i;:::-;;;23026:831;23869:33;23885:4;23891:2;23895:6;23869:15;:33::i;:::-;23929:11;;23913:13;:27;;;;20450:3500;;;;20337:3613;;;;:::o;1277:191::-;1351:16;1370:6;;;;;;;;;;;1351:25;;1396:8;1387:6;;:17;;;;;;;;;;;;;;;;;;1451:8;1420:40;;1441:8;1420:40;;;;;;;;;;;;1340:128;1277:191;:::o;20007:188::-;20124:5;20090:25;:31;20116:4;20090:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;20181:5;20147:40;;20175:4;20147:40;;;;;;;;;;;;20007:188;;:::o;5056:733::-;5214:1;5196:20;;:6;:20;;;5188:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;5298:1;5277:23;;:9;:23;;;5269:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;5353:47;5374:6;5382:9;5393:6;5353:20;:47::i;:::-;5413:21;5437:9;:17;5447:6;5437:17;;;;;;;;;;;;;;;;5413:41;;5490:6;5473:13;:23;;5465:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;5611:6;5595:13;:22;5575:9;:17;5585:6;5575:17;;;;;;;;;;;;;;;:42;;;;5663:6;5639:9;:20;5649:9;5639:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;5704:9;5687:35;;5696:6;5687:35;;;5715:6;5687:35;;;;;;:::i;:::-;;;;;;;;5735:46;5755:6;5763:9;5774:6;5735:19;:46::i;:::-;5177:612;5056:733;;;:::o;24845:1462::-;24884:23;24910:24;24928:4;24910:9;:24::i;:::-;24884:50;;24945:25;25007:18;;24973;;:52;;;;:::i;:::-;24945:80;;25036:12;25084:1;25065:15;:20;:46;;;;25110:1;25089:17;:22;25065:46;25061:85;;;25128:7;;;;;25061:85;25201:2;25180:18;;:23;;;;:::i;:::-;25162:15;:41;25158:115;;;25259:2;25238:18;;:23;;;;:::i;:::-;25220:41;;25158:115;25285:23;25398:1;25365:17;25330:18;;25312:15;:36;;;;:::i;:::-;25311:71;;;;:::i;:::-;:88;;;;:::i;:::-;25285:114;;25410:26;25439:36;25459:15;25439;:19;;:36;;;;:::i;:::-;25410:65;;25488:25;25516:21;25488:49;;25550:36;25567:18;25550:16;:36::i;:::-;25599:18;25620:44;25646:17;25620:21;:25;;:44;;;;:::i;:::-;25599:65;;25677:23;25703:81;25756:17;25703:34;25718:18;;25703:10;:14;;:34;;;;:::i;:::-;:38;;:81;;;;:::i;:::-;25677:107;;25797:23;25836:15;25823:10;:28;;;;:::i;:::-;25797:54;;25885:1;25864:18;:22;;;;25918:1;25897:18;:22;;;;25954:1;25936:15;:19;:42;;;;;25977:1;25959:15;:19;25936:42;25932:278;;;25995:46;26008:15;26025;25995:12;:46::i;:::-;26061:137;26094:18;26131:15;26165:18;;26061:137;;;;;;;;:::i;:::-;;;;;;;;25932:278;26244:15;;;;;;;;;;;26236:29;;26273:21;26236:63;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26222:77;;;;;24873:1434;;;;;;;;;24845:1462;:::o;8210:98::-;8268:7;8299:1;8295;:5;;;;:::i;:::-;8288:12;;8210:98;;;;:::o;8316:::-;8374:7;8405:1;8401;:5;;;;:::i;:::-;8394:12;;8316:98;;;;:::o;6592:125::-;;;;:::o;6725:124::-;;;;:::o;8104:98::-;8162:7;8193:1;8189;:5;;;;:::i;:::-;8182:12;;8104:98;;;;:::o;23958:503::-;24026:21;24064:1;24050:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24026:40;;24095:4;24077;24082:1;24077:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;24121:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24111:4;24116:1;24111:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;24156:62;24173:4;24188:15;24206:11;24156:8;:62::i;:::-;24257:15;:66;;;24338:11;24364:1;24380:4;24407;24427:15;24257:196;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24013:448;23958:503;:::o;24469:368::-;24552:62;24569:4;24584:15;24602:11;24552:8;:62::i;:::-;24627:15;:31;;;24666:9;24699:4;24719:11;24745:1;24761;14514:6;24803:15;24627:202;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;24469:368;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:117;443:1;440;433:12;457:102;498:6;549:2;545:7;540:2;533:5;529:14;525:28;515:38;;457:102;;;:::o;565:180::-;613:77;610:1;603:88;710:4;707:1;700:15;734:4;731:1;724:15;751:281;834:27;856:4;834:27;:::i;:::-;826:6;822:40;964:6;952:10;949:22;928:18;916:10;913:34;910:62;907:88;;;975:18;;:::i;:::-;907:88;1015:10;1011:2;1004:22;794:238;751:281;;:::o;1038:129::-;1072:6;1099:20;;:::i;:::-;1089:30;;1128:33;1156:4;1148:6;1128:33;:::i;:::-;1038:129;;;:::o;1173:311::-;1250:4;1340:18;1332:6;1329:30;1326:56;;;1362:18;;:::i;:::-;1326:56;1412:4;1404:6;1400:17;1392:25;;1472:4;1466;1462:15;1454:23;;1173:311;;;:::o;1490:117::-;1599:1;1596;1589:12;1613:126;1650:7;1690:42;1683:5;1679:54;1668:65;;1613:126;;;:::o;1745:96::-;1782:7;1811:24;1829:5;1811:24;:::i;:::-;1800:35;;1745:96;;;:::o;1847:122::-;1920:24;1938:5;1920:24;:::i;:::-;1913:5;1910:35;1900:63;;1959:1;1956;1949:12;1900:63;1847:122;:::o;1975:139::-;2021:5;2059:6;2046:20;2037:29;;2075:33;2102:5;2075:33;:::i;:::-;1975:139;;;;:::o;2137:710::-;2233:5;2258:81;2274:64;2331:6;2274:64;:::i;:::-;2258:81;:::i;:::-;2249:90;;2359:5;2388:6;2381:5;2374:21;2422:4;2415:5;2411:16;2404:23;;2475:4;2467:6;2463:17;2455:6;2451:30;2504:3;2496:6;2493:15;2490:122;;;2523:79;;:::i;:::-;2490:122;2638:6;2621:220;2655:6;2650:3;2647:15;2621:220;;;2730:3;2759:37;2792:3;2780:10;2759:37;:::i;:::-;2754:3;2747:50;2826:4;2821:3;2817:14;2810:21;;2697:144;2681:4;2676:3;2672:14;2665:21;;2621:220;;;2625:21;2239:608;;2137:710;;;;;:::o;2870:370::-;2941:5;2990:3;2983:4;2975:6;2971:17;2967:27;2957:122;;2998:79;;:::i;:::-;2957:122;3115:6;3102:20;3140:94;3230:3;3222:6;3215:4;3207:6;3203:17;3140:94;:::i;:::-;3131:103;;2947:293;2870:370;;;;:::o;3246:539::-;3330:6;3379:2;3367:9;3358:7;3354:23;3350:32;3347:119;;;3385:79;;:::i;:::-;3347:119;3533:1;3522:9;3518:17;3505:31;3563:18;3555:6;3552:30;3549:117;;;3585:79;;:::i;:::-;3549:117;3690:78;3760:7;3751:6;3740:9;3736:22;3690:78;:::i;:::-;3680:88;;3476:302;3246:539;;;;:::o;3791:77::-;3828:7;3857:5;3846:16;;3791:77;;;:::o;3874:122::-;3947:24;3965:5;3947:24;:::i;:::-;3940:5;3937:35;3927:63;;3986:1;3983;3976:12;3927:63;3874:122;:::o;4002:139::-;4048:5;4086:6;4073:20;4064:29;;4102:33;4129:5;4102:33;:::i;:::-;4002:139;;;;:::o;4147:474::-;4215:6;4223;4272:2;4260:9;4251:7;4247:23;4243:32;4240:119;;;4278:79;;:::i;:::-;4240:119;4398:1;4423:53;4468:7;4459:6;4448:9;4444:22;4423:53;:::i;:::-;4413:63;;4369:117;4525:2;4551:53;4596:7;4587:6;4576:9;4572:22;4551:53;:::i;:::-;4541:63;;4496:118;4147:474;;;;;:::o;4627:99::-;4679:6;4713:5;4707:12;4697:22;;4627:99;;;:::o;4732:169::-;4816:11;4850:6;4845:3;4838:19;4890:4;4885:3;4881:14;4866:29;;4732:169;;;;:::o;4907:246::-;4988:1;4998:113;5012:6;5009:1;5006:13;4998:113;;;5097:1;5092:3;5088:11;5082:18;5078:1;5073:3;5069:11;5062:39;5034:2;5031:1;5027:10;5022:15;;4998:113;;;5145:1;5136:6;5131:3;5127:16;5120:27;4969:184;4907:246;;;:::o;5159:377::-;5247:3;5275:39;5308:5;5275:39;:::i;:::-;5330:71;5394:6;5389:3;5330:71;:::i;:::-;5323:78;;5410:65;5468:6;5463:3;5456:4;5449:5;5445:16;5410:65;:::i;:::-;5500:29;5522:6;5500:29;:::i;:::-;5495:3;5491:39;5484:46;;5251:285;5159:377;;;;:::o;5542:313::-;5655:4;5693:2;5682:9;5678:18;5670:26;;5742:9;5736:4;5732:20;5728:1;5717:9;5713:17;5706:47;5770:78;5843:4;5834:6;5770:78;:::i;:::-;5762:86;;5542:313;;;;:::o;5861:474::-;5929:6;5937;5986:2;5974:9;5965:7;5961:23;5957:32;5954:119;;;5992:79;;:::i;:::-;5954:119;6112:1;6137:53;6182:7;6173:6;6162:9;6158:22;6137:53;:::i;:::-;6127:63;;6083:117;6239:2;6265:53;6310:7;6301:6;6290:9;6286:22;6265:53;:::i;:::-;6255:63;;6210:118;5861:474;;;;;:::o;6341:90::-;6375:7;6418:5;6411:13;6404:21;6393:32;;6341:90;;;:::o;6437:109::-;6518:21;6533:5;6518:21;:::i;:::-;6513:3;6506:34;6437:109;;:::o;6552:210::-;6639:4;6677:2;6666:9;6662:18;6654:26;;6690:65;6752:1;6741:9;6737:17;6728:6;6690:65;:::i;:::-;6552:210;;;;:::o;6768:60::-;6796:3;6817:5;6810:12;;6768:60;;;:::o;6834:142::-;6884:9;6917:53;6935:34;6944:24;6962:5;6944:24;:::i;:::-;6935:34;:::i;:::-;6917:53;:::i;:::-;6904:66;;6834:142;;;:::o;6982:126::-;7032:9;7065:37;7096:5;7065:37;:::i;:::-;7052:50;;6982:126;;;:::o;7114:153::-;7191:9;7224:37;7255:5;7224:37;:::i;:::-;7211:50;;7114:153;;;:::o;7273:185::-;7387:64;7445:5;7387:64;:::i;:::-;7382:3;7375:77;7273:185;;:::o;7464:276::-;7584:4;7622:2;7611:9;7607:18;7599:26;;7635:98;7730:1;7719:9;7715:17;7706:6;7635:98;:::i;:::-;7464:276;;;;:::o;7746:118::-;7833:24;7851:5;7833:24;:::i;:::-;7828:3;7821:37;7746:118;;:::o;7870:222::-;7963:4;8001:2;7990:9;7986:18;7978:26;;8014:71;8082:1;8071:9;8067:17;8058:6;8014:71;:::i;:::-;7870:222;;;;:::o;8098:619::-;8175:6;8183;8191;8240:2;8228:9;8219:7;8215:23;8211:32;8208:119;;;8246:79;;:::i;:::-;8208:119;8366:1;8391:53;8436:7;8427:6;8416:9;8412:22;8391:53;:::i;:::-;8381:63;;8337:117;8493:2;8519:53;8564:7;8555:6;8544:9;8540:22;8519:53;:::i;:::-;8509:63;;8464:118;8621:2;8647:53;8692:7;8683:6;8672:9;8668:22;8647:53;:::i;:::-;8637:63;;8592:118;8098:619;;;;;:::o;8723:118::-;8810:24;8828:5;8810:24;:::i;:::-;8805:3;8798:37;8723:118;;:::o;8847:222::-;8940:4;8978:2;8967:9;8963:18;8955:26;;8991:71;9059:1;9048:9;9044:17;9035:6;8991:71;:::i;:::-;8847:222;;;;:::o;9075:86::-;9110:7;9150:4;9143:5;9139:16;9128:27;;9075:86;;;:::o;9167:112::-;9250:22;9266:5;9250:22;:::i;:::-;9245:3;9238:35;9167:112;;:::o;9285:214::-;9374:4;9412:2;9401:9;9397:18;9389:26;;9425:67;9489:1;9478:9;9474:17;9465:6;9425:67;:::i;:::-;9285:214;;;;:::o;9505:329::-;9564:6;9613:2;9601:9;9592:7;9588:23;9584:32;9581:119;;;9619:79;;:::i;:::-;9581:119;9739:1;9764:53;9809:7;9800:6;9789:9;9785:22;9764:53;:::i;:::-;9754:63;;9710:117;9505:329;;;;:::o;9840:116::-;9910:21;9925:5;9910:21;:::i;:::-;9903:5;9900:32;9890:60;;9946:1;9943;9936:12;9890:60;9840:116;:::o;9962:133::-;10005:5;10043:6;10030:20;10021:29;;10059:30;10083:5;10059:30;:::i;:::-;9962:133;;;;:::o;10101:468::-;10166:6;10174;10223:2;10211:9;10202:7;10198:23;10194:32;10191:119;;;10229:79;;:::i;:::-;10191:119;10349:1;10374:53;10419:7;10410:6;10399:9;10395:22;10374:53;:::i;:::-;10364:63;;10320:117;10476:2;10502:50;10544:7;10535:6;10524:9;10520:22;10502:50;:::i;:::-;10492:60;;10447:115;10101:468;;;;;:::o;10575:474::-;10643:6;10651;10700:2;10688:9;10679:7;10675:23;10671:32;10668:119;;;10706:79;;:::i;:::-;10668:119;10826:1;10851:53;10896:7;10887:6;10876:9;10872:22;10851:53;:::i;:::-;10841:63;;10797:117;10953:2;10979:53;11024:7;11015:6;11004:9;11000:22;10979:53;:::i;:::-;10969:63;;10924:118;10575:474;;;;;:::o;11055:182::-;11195:34;11191:1;11183:6;11179:14;11172:58;11055:182;:::o;11243:366::-;11385:3;11406:67;11470:2;11465:3;11406:67;:::i;:::-;11399:74;;11482:93;11571:3;11482:93;:::i;:::-;11600:2;11595:3;11591:12;11584:19;;11243:366;;;:::o;11615:419::-;11781:4;11819:2;11808:9;11804:18;11796:26;;11868:9;11862:4;11858:20;11854:1;11843:9;11839:17;11832:47;11896:131;12022:4;11896:131;:::i;:::-;11888:139;;11615:419;;;:::o;12040:180::-;12088:77;12085:1;12078:88;12185:4;12182:1;12175:15;12209:4;12206:1;12199:15;12226:180;12274:77;12271:1;12264:88;12371:4;12368:1;12361:15;12395:4;12392:1;12385:15;12412:233;12451:3;12474:24;12492:5;12474:24;:::i;:::-;12465:33;;12520:66;12513:5;12510:77;12507:103;;12590:18;;:::i;:::-;12507:103;12637:1;12630:5;12626:13;12619:20;;12412:233;;;:::o;12651:191::-;12691:3;12710:20;12728:1;12710:20;:::i;:::-;12705:25;;12744:20;12762:1;12744:20;:::i;:::-;12739:25;;12787:1;12784;12780:9;12773:16;;12808:3;12805:1;12802:10;12799:36;;;12815:18;;:::i;:::-;12799:36;12651:191;;;;:::o;12848:178::-;12988:30;12984:1;12976:6;12972:14;12965:54;12848:178;:::o;13032:366::-;13174:3;13195:67;13259:2;13254:3;13195:67;:::i;:::-;13188:74;;13271:93;13360:3;13271:93;:::i;:::-;13389:2;13384:3;13380:12;13373:19;;13032:366;;;:::o;13404:419::-;13570:4;13608:2;13597:9;13593:18;13585:26;;13657:9;13651:4;13647:20;13643:1;13632:9;13628:17;13621:47;13685:131;13811:4;13685:131;:::i;:::-;13677:139;;13404:419;;;:::o;13829:180::-;13877:77;13874:1;13867:88;13974:4;13971:1;13964:15;13998:4;13995:1;13988:15;14015:320;14059:6;14096:1;14090:4;14086:12;14076:22;;14143:1;14137:4;14133:12;14164:18;14154:81;;14220:4;14212:6;14208:17;14198:27;;14154:81;14282:2;14274:6;14271:14;14251:18;14248:38;14245:84;;14301:18;;:::i;:::-;14245:84;14066:269;14015:320;;;:::o;14341:227::-;14481:34;14477:1;14469:6;14465:14;14458:58;14550:10;14545:2;14537:6;14533:15;14526:35;14341:227;:::o;14574:366::-;14716:3;14737:67;14801:2;14796:3;14737:67;:::i;:::-;14730:74;;14813:93;14902:3;14813:93;:::i;:::-;14931:2;14926:3;14922:12;14915:19;;14574:366;;;:::o;14946:419::-;15112:4;15150:2;15139:9;15135:18;15127:26;;15199:9;15193:4;15189:20;15185:1;15174:9;15170:17;15163:47;15227:131;15353:4;15227:131;:::i;:::-;15219:139;;14946:419;;;:::o;15371:348::-;15411:7;15434:20;15452:1;15434:20;:::i;:::-;15429:25;;15468:20;15486:1;15468:20;:::i;:::-;15463:25;;15656:1;15588:66;15584:74;15581:1;15578:81;15573:1;15566:9;15559:17;15555:105;15552:131;;;15663:18;;:::i;:::-;15552:131;15711:1;15708;15704:9;15693:20;;15371:348;;;;:::o;15725:180::-;15773:77;15770:1;15763:88;15870:4;15867:1;15860:15;15894:4;15891:1;15884:15;15911:185;15951:1;15968:20;15986:1;15968:20;:::i;:::-;15963:25;;16002:20;16020:1;16002:20;:::i;:::-;15997:25;;16041:1;16031:35;;16046:18;;:::i;:::-;16031:35;16088:1;16085;16081:9;16076:14;;15911:185;;;;:::o;16102:220::-;16242:34;16238:1;16230:6;16226:14;16219:58;16311:3;16306:2;16298:6;16294:15;16287:28;16102:220;:::o;16328:366::-;16470:3;16491:67;16555:2;16550:3;16491:67;:::i;:::-;16484:74;;16567:93;16656:3;16567:93;:::i;:::-;16685:2;16680:3;16676:12;16669:19;;16328:366;;;:::o;16700:419::-;16866:4;16904:2;16893:9;16889:18;16881:26;;16953:9;16947:4;16943:20;16939:1;16928:9;16924:17;16917:47;16981:131;17107:4;16981:131;:::i;:::-;16973:139;;16700:419;;;:::o;17125:223::-;17265:34;17261:1;17253:6;17249:14;17242:58;17334:6;17329:2;17321:6;17317:15;17310:31;17125:223;:::o;17354:366::-;17496:3;17517:67;17581:2;17576:3;17517:67;:::i;:::-;17510:74;;17593:93;17682:3;17593:93;:::i;:::-;17711:2;17706:3;17702:12;17695:19;;17354:366;;;:::o;17726:419::-;17892:4;17930:2;17919:9;17915:18;17907:26;;17979:9;17973:4;17969:20;17965:1;17954:9;17950:17;17943:47;18007:131;18133:4;18007:131;:::i;:::-;17999:139;;17726:419;;;:::o;18151:244::-;18291:34;18287:1;18279:6;18275:14;18268:58;18360:27;18355:2;18347:6;18343:15;18336:52;18151:244;:::o;18401:366::-;18543:3;18564:67;18628:2;18623:3;18564:67;:::i;:::-;18557:74;;18640:93;18729:3;18640:93;:::i;:::-;18758:2;18753:3;18749:12;18742:19;;18401:366;;;:::o;18773:419::-;18939:4;18977:2;18966:9;18962:18;18954:26;;19026:9;19020:4;19016:20;19012:1;19001:9;18997:17;18990:47;19054:131;19180:4;19054:131;:::i;:::-;19046:139;;18773:419;;;:::o;19198:224::-;19338:34;19334:1;19326:6;19322:14;19315:58;19407:7;19402:2;19394:6;19390:15;19383:32;19198:224;:::o;19428:366::-;19570:3;19591:67;19655:2;19650:3;19591:67;:::i;:::-;19584:74;;19667:93;19756:3;19667:93;:::i;:::-;19785:2;19780:3;19776:12;19769:19;;19428:366;;;:::o;19800:419::-;19966:4;20004:2;19993:9;19989:18;19981:26;;20053:9;20047:4;20043:20;20039:1;20028:9;20024:17;20017:47;20081:131;20207:4;20081:131;:::i;:::-;20073:139;;19800:419;;;:::o;20225:225::-;20365:34;20361:1;20353:6;20349:14;20342:58;20434:8;20429:2;20421:6;20417:15;20410:33;20225:225;:::o;20456:366::-;20598:3;20619:67;20683:2;20678:3;20619:67;:::i;:::-;20612:74;;20695:93;20784:3;20695:93;:::i;:::-;20813:2;20808:3;20804:12;20797:19;;20456:366;;;:::o;20828:419::-;20994:4;21032:2;21021:9;21017:18;21009:26;;21081:9;21075:4;21071:20;21067:1;21056:9;21052:17;21045:47;21109:131;21235:4;21109:131;:::i;:::-;21101:139;;20828:419;;;:::o;21253:223::-;21393:34;21389:1;21381:6;21377:14;21370:58;21462:6;21457:2;21449:6;21445:15;21438:31;21253:223;:::o;21482:366::-;21624:3;21645:67;21709:2;21704:3;21645:67;:::i;:::-;21638:74;;21721:93;21810:3;21721:93;:::i;:::-;21839:2;21834:3;21830:12;21823:19;;21482:366;;;:::o;21854:419::-;22020:4;22058:2;22047:9;22043:18;22035:26;;22107:9;22101:4;22097:20;22093:1;22082:9;22078:17;22071:47;22135:131;22261:4;22135:131;:::i;:::-;22127:139;;21854:419;;;:::o;22279:221::-;22419:34;22415:1;22407:6;22403:14;22396:58;22488:4;22483:2;22475:6;22471:15;22464:29;22279:221;:::o;22506:366::-;22648:3;22669:67;22733:2;22728:3;22669:67;:::i;:::-;22662:74;;22745:93;22834:3;22745:93;:::i;:::-;22863:2;22858:3;22854:12;22847:19;;22506:366;;;:::o;22878:419::-;23044:4;23082:2;23071:9;23067:18;23059:26;;23131:9;23125:4;23121:20;23117:1;23106:9;23102:17;23095:47;23159:131;23285:4;23159:131;:::i;:::-;23151:139;;22878:419;;;:::o;23303:224::-;23443:34;23439:1;23431:6;23427:14;23420:58;23512:7;23507:2;23499:6;23495:15;23488:32;23303:224;:::o;23533:366::-;23675:3;23696:67;23760:2;23755:3;23696:67;:::i;:::-;23689:74;;23772:93;23861:3;23772:93;:::i;:::-;23890:2;23885:3;23881:12;23874:19;;23533:366;;;:::o;23905:419::-;24071:4;24109:2;24098:9;24094:18;24086:26;;24158:9;24152:4;24148:20;24144:1;24133:9;24129:17;24122:47;24186:131;24312:4;24186:131;:::i;:::-;24178:139;;23905:419;;;:::o;24330:222::-;24470:34;24466:1;24458:6;24454:14;24447:58;24539:5;24534:2;24526:6;24522:15;24515:30;24330:222;:::o;24558:366::-;24700:3;24721:67;24785:2;24780:3;24721:67;:::i;:::-;24714:74;;24797:93;24886:3;24797:93;:::i;:::-;24915:2;24910:3;24906:12;24899:19;;24558:366;;;:::o;24930:419::-;25096:4;25134:2;25123:9;25119:18;25111:26;;25183:9;25177:4;25173:20;25169:1;25158:9;25154:17;25147:47;25211:131;25337:4;25211:131;:::i;:::-;25203:139;;24930:419;;;:::o;25355:172::-;25495:24;25491:1;25483:6;25479:14;25472:48;25355:172;:::o;25533:366::-;25675:3;25696:67;25760:2;25755:3;25696:67;:::i;:::-;25689:74;;25772:93;25861:3;25772:93;:::i;:::-;25890:2;25885:3;25881:12;25874:19;;25533:366;;;:::o;25905:419::-;26071:4;26109:2;26098:9;26094:18;26086:26;;26158:9;26152:4;26148:20;26144:1;26133:9;26129:17;26122:47;26186:131;26312:4;26186:131;:::i;:::-;26178:139;;25905:419;;;:::o;26330:178::-;26470:30;26466:1;26458:6;26454:14;26447:54;26330:178;:::o;26514:366::-;26656:3;26677:67;26741:2;26736:3;26677:67;:::i;:::-;26670:74;;26753:93;26842:3;26753:93;:::i;:::-;26871:2;26866:3;26862:12;26855:19;;26514:366;;;:::o;26886:419::-;27052:4;27090:2;27079:9;27075:18;27067:26;;27139:9;27133:4;27129:20;27125:1;27114:9;27110:17;27103:47;27167:131;27293:4;27167:131;:::i;:::-;27159:139;;26886:419;;;:::o;27311:240::-;27451:34;27447:1;27439:6;27435:14;27428:58;27520:23;27515:2;27507:6;27503:15;27496:48;27311:240;:::o;27557:366::-;27699:3;27720:67;27784:2;27779:3;27720:67;:::i;:::-;27713:74;;27796:93;27885:3;27796:93;:::i;:::-;27914:2;27909:3;27905:12;27898:19;;27557:366;;;:::o;27929:419::-;28095:4;28133:2;28122:9;28118:18;28110:26;;28182:9;28176:4;28172:20;28168:1;28157:9;28153:17;28146:47;28210:131;28336:4;28210:131;:::i;:::-;28202:139;;27929:419;;;:::o;28354:169::-;28494:21;28490:1;28482:6;28478:14;28471:45;28354:169;:::o;28529:366::-;28671:3;28692:67;28756:2;28751:3;28692:67;:::i;:::-;28685:74;;28768:93;28857:3;28768:93;:::i;:::-;28886:2;28881:3;28877:12;28870:19;;28529:366;;;:::o;28901:419::-;29067:4;29105:2;29094:9;29090:18;29082:26;;29154:9;29148:4;29144:20;29140:1;29129:9;29125:17;29118:47;29182:131;29308:4;29182:131;:::i;:::-;29174:139;;28901:419;;;:::o;29326:241::-;29466:34;29462:1;29454:6;29450:14;29443:58;29535:24;29530:2;29522:6;29518:15;29511:49;29326:241;:::o;29573:366::-;29715:3;29736:67;29800:2;29795:3;29736:67;:::i;:::-;29729:74;;29812:93;29901:3;29812:93;:::i;:::-;29930:2;29925:3;29921:12;29914:19;;29573:366;;;:::o;29945:419::-;30111:4;30149:2;30138:9;30134:18;30126:26;;30198:9;30192:4;30188:20;30184:1;30173:9;30169:17;30162:47;30226:131;30352:4;30226:131;:::i;:::-;30218:139;;29945:419;;;:::o;30370:194::-;30410:4;30430:20;30448:1;30430:20;:::i;:::-;30425:25;;30464:20;30482:1;30464:20;:::i;:::-;30459:25;;30508:1;30505;30501:9;30493:17;;30532:1;30526:4;30523:11;30520:37;;;30537:18;;:::i;:::-;30520:37;30370:194;;;;:::o;30570:225::-;30710:34;30706:1;30698:6;30694:14;30687:58;30779:8;30774:2;30766:6;30762:15;30755:33;30570:225;:::o;30801:366::-;30943:3;30964:67;31028:2;31023:3;30964:67;:::i;:::-;30957:74;;31040:93;31129:3;31040:93;:::i;:::-;31158:2;31153:3;31149:12;31142:19;;30801:366;;;:::o;31173:419::-;31339:4;31377:2;31366:9;31362:18;31354:26;;31426:9;31420:4;31416:20;31412:1;31401:9;31397:17;31390:47;31454:131;31580:4;31454:131;:::i;:::-;31446:139;;31173:419;;;:::o;31598:442::-;31747:4;31785:2;31774:9;31770:18;31762:26;;31798:71;31866:1;31855:9;31851:17;31842:6;31798:71;:::i;:::-;31879:72;31947:2;31936:9;31932:18;31923:6;31879:72;:::i;:::-;31961;32029:2;32018:9;32014:18;32005:6;31961:72;:::i;:::-;31598:442;;;;;;:::o;32046:147::-;32147:11;32184:3;32169:18;;32046:147;;;;:::o;32199:114::-;;:::o;32319:398::-;32478:3;32499:83;32580:1;32575:3;32499:83;:::i;:::-;32492:90;;32591:93;32680:3;32591:93;:::i;:::-;32709:1;32704:3;32700:11;32693:18;;32319:398;;;:::o;32723:379::-;32907:3;32929:147;33072:3;32929:147;:::i;:::-;32922:154;;33093:3;33086:10;;32723:379;;;:::o;33108:143::-;33165:5;33196:6;33190:13;33181:22;;33212:33;33239:5;33212:33;:::i;:::-;33108:143;;;;:::o;33257:351::-;33327:6;33376:2;33364:9;33355:7;33351:23;33347:32;33344:119;;;33382:79;;:::i;:::-;33344:119;33502:1;33527:64;33583:7;33574:6;33563:9;33559:22;33527:64;:::i;:::-;33517:74;;33473:128;33257:351;;;;:::o;33614:85::-;33659:7;33688:5;33677:16;;33614:85;;;:::o;33705:158::-;33763:9;33796:61;33814:42;33823:32;33849:5;33823:32;:::i;:::-;33814:42;:::i;:::-;33796:61;:::i;:::-;33783:74;;33705:158;;;:::o;33869:147::-;33964:45;34003:5;33964:45;:::i;:::-;33959:3;33952:58;33869:147;;:::o;34022:114::-;34089:6;34123:5;34117:12;34107:22;;34022:114;;;:::o;34142:184::-;34241:11;34275:6;34270:3;34263:19;34315:4;34310:3;34306:14;34291:29;;34142:184;;;;:::o;34332:132::-;34399:4;34422:3;34414:11;;34452:4;34447:3;34443:14;34435:22;;34332:132;;;:::o;34470:108::-;34547:24;34565:5;34547:24;:::i;:::-;34542:3;34535:37;34470:108;;:::o;34584:179::-;34653:10;34674:46;34716:3;34708:6;34674:46;:::i;:::-;34752:4;34747:3;34743:14;34729:28;;34584:179;;;;:::o;34769:113::-;34839:4;34871;34866:3;34862:14;34854:22;;34769:113;;;:::o;34918:732::-;35037:3;35066:54;35114:5;35066:54;:::i;:::-;35136:86;35215:6;35210:3;35136:86;:::i;:::-;35129:93;;35246:56;35296:5;35246:56;:::i;:::-;35325:7;35356:1;35341:284;35366:6;35363:1;35360:13;35341:284;;;35442:6;35436:13;35469:63;35528:3;35513:13;35469:63;:::i;:::-;35462:70;;35555:60;35608:6;35555:60;:::i;:::-;35545:70;;35401:224;35388:1;35385;35381:9;35376:14;;35341:284;;;35345:14;35641:3;35634:10;;35042:608;;;34918:732;;;;:::o;35656:831::-;35919:4;35957:3;35946:9;35942:19;35934:27;;35971:71;36039:1;36028:9;36024:17;36015:6;35971:71;:::i;:::-;36052:80;36128:2;36117:9;36113:18;36104:6;36052:80;:::i;:::-;36179:9;36173:4;36169:20;36164:2;36153:9;36149:18;36142:48;36207:108;36310:4;36301:6;36207:108;:::i;:::-;36199:116;;36325:72;36393:2;36382:9;36378:18;36369:6;36325:72;:::i;:::-;36407:73;36475:3;36464:9;36460:19;36451:6;36407:73;:::i;:::-;35656:831;;;;;;;;:::o;36493:807::-;36742:4;36780:3;36769:9;36765:19;36757:27;;36794:71;36862:1;36851:9;36847:17;36838:6;36794:71;:::i;:::-;36875:72;36943:2;36932:9;36928:18;36919:6;36875:72;:::i;:::-;36957:80;37033:2;37022:9;37018:18;37009:6;36957:80;:::i;:::-;37047;37123:2;37112:9;37108:18;37099:6;37047:80;:::i;:::-;37137:73;37205:3;37194:9;37190:19;37181:6;37137:73;:::i;:::-;37220;37288:3;37277:9;37273:19;37264:6;37220:73;:::i;:::-;36493:807;;;;;;;;;:::o;37306:143::-;37363:5;37394:6;37388:13;37379:22;;37410:33;37437:5;37410:33;:::i;:::-;37306:143;;;;:::o;37455:663::-;37543:6;37551;37559;37608:2;37596:9;37587:7;37583:23;37579:32;37576:119;;;37614:79;;:::i;:::-;37576:119;37734:1;37759:64;37815:7;37806:6;37795:9;37791:22;37759:64;:::i;:::-;37749:74;;37705:128;37872:2;37898:64;37954:7;37945:6;37934:9;37930:22;37898:64;:::i;:::-;37888:74;;37843:129;38011:2;38037:64;38093:7;38084:6;38073:9;38069:22;38037:64;:::i;:::-;38027:74;;37982:129;37455:663;;;;;:::o

Swarm Source

ipfs://e232429f0f59f3036004d5fa66feb193799a50a1a44b1eea5b7a7e5a7c2d2612

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.