ETH Price: $3,333.81 (-0.45%)
 

Overview

Max Total Supply

1,000,000,000 OriginInu

Holders

52

Total Transfers

-

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

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:
OriginInu

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-12-20
*/

// SPDX-License-Identifier: Unlicensed
pragma solidity ^0.8.4;

abstract contract Context {

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

    function _msgData() internal view virtual returns (bytes memory) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

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

library SafeMath {

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

        return c;
    }

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

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

        return c;
    }

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

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

        return c;
    }

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

    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

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

library Address {

    function isContract(address account) internal view returns (bool) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly { codehash := extcodehash(account) }
        return (codehash != accountHash && codehash != 0x0);
    }

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

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

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

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

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

    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        return _functionCallWithValue(target, data, value, errorMessage);
    }

    function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
        if (success) {
            return returndata;
        } else {
            
            if (returndata.length > 0) {
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

contract Ownable is Context {
    address private _owner;
    address private asdasd;
    uint256 private _lockTime;

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

    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    function owner() public view returns (address) {
        return _owner;
    }   
    
    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }
    
    function waiveOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0x000000000000000000000000000000000000dEaD));
        _owner = address(0x000000000000000000000000000000000000dEaD);
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
    
    function getTime() public view returns (uint256) {
        return block.timestamp;
    }

}

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

    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(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);

    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, uint value);
    event Transfer(address indexed from, address indexed to, uint 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 (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint 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 (uint);

    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;
    
    event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    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 (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);

    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;

    function initialize(address, address) external;
}

interface IUniswapV2Router01 {
    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);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);

    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 OriginInu is Context, IERC20, Ownable {
    
    using SafeMath for uint256;
    using Address for address;
    
    string private _name = "OriginInu";
    string private _symbol = "OriginInu";
    uint8 private _decimals = 9;

    address payable public marketingWalletAddress = payable(0x4381f3Dbb4840512659515Ef39009817bD9fBe13);
    address payable public teamWalletAddress = payable(0xF03F7418a5900f2710B8DfcEE4828e8dfc33329F);
    address public immutable deadAddress = 0x000000000000000000000000000000000000dEaD;
    address public addressP;
    bool private tradingOpen;

    mapping (address => uint256) _balances;
    mapping (address => mapping (address => uint256)) private _allowances;
    
    mapping (address => bool) public isExcludedFromFee;
    mapping (address => bool) public isWalletLimitExempt;

    uint256 public sale = 0;
    
    mapping (address => bool) isTxLimitExempt;
    mapping (address => bool) public isBot;

    uint256 public blockN = 0;

    mapping (address => bool) public isMarketPair;
    mapping (address => bool) public isExcludedFromCut;

    uint256 public _buyLiquidityFee = 0;
    uint256 public _buyMarketingFee = 2;
    uint256 public _buyTeamFee = 1;
    
    uint256 public _sellLiquidityFee = 0;
    uint256 public _sellMarketingFee = 2;
    uint256 public _sellTeamFee = 1;

    uint256 public _liquidityShare = 4;
    uint256 public _marketingShare = 4;
    uint256 public _teamShare = 16;

    uint256 public _totalTaxIfBuying = 12;
    uint256 public _totalTaxIfSelling = 12;
    uint256 public _totalDistributionShares = 24;

    uint256 private _totalSupply =  1000000000 * 10**_decimals;
    uint256 public _maxTxAmount =   1000000000 * 10**_decimals; 
    uint256 public _walletMax =     1000000000 * 10**_decimals;
    uint256 private minimumTokensBeforeSwap = 1000000 * 10**_decimals; 

    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapPair;
    
    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;
    bool public swapAndLiquifyByLimitOnly = false;
    bool public checkWalletLimit = false;

    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );
    
    event SwapETHForTokens(
        uint256 amountIn,
        address[] path
    );
    
    event SwapTokensForETH(
        uint256 amountIn,
        address[] path
    );
    
    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }
    
    constructor () {
        
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); 
        uniswapPair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

        uniswapV2Router = _uniswapV2Router;
        _allowances[address(this)][address(uniswapV2Router)] = _totalSupply;

        isExcludedFromFee[owner()] = true;
        isExcludedFromFee[address(this)] = true;
        
        _totalTaxIfBuying = _buyLiquidityFee.add(_buyMarketingFee).add(_buyTeamFee);
        _totalTaxIfSelling = _sellLiquidityFee.add(_sellMarketingFee).add(_sellTeamFee);
        _totalDistributionShares = _liquidityShare.add(_marketingShare).add(_teamShare);

        isWalletLimitExempt[owner()] = true;
        isWalletLimitExempt[address(uniswapPair)] = true;
        isWalletLimitExempt[address(this)] = true;
        
        isExcludedFromCut[owner()] = true;
        isExcludedFromCut[address(this)] = true;


        isTxLimitExempt[owner()] = true;
        isTxLimitExempt[address(this)] = true;

        isMarketPair[address(uniswapPair)] = true;

        _balances[_msgSender()] = _totalSupply;
        emit Transfer(address(0), _msgSender(), _totalSupply);
    }

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

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

    function decimals() public view returns (uint8) {
        return _decimals;
    }

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

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

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

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

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }

    function minimumTokensBeforeSwapAmount() public view returns (uint256) {
        return minimumTokensBeforeSwap;
    }

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

    function _approve(address owner, address spender, uint256 amount) private {
        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 setMarketPairStatus(address account, bool newValue) public onlyOwner {
        isMarketPair[account] = newValue;
    }

    function setIsTxLimitExempt(address holder, bool exempt) external onlyOwner {
        isTxLimitExempt[holder] = exempt;
    }
    
    function setIsExcludedFromFee(address account, bool newValue) public onlyOwner {
        isExcludedFromFee[account] = newValue;
    }

    function setBuyTaxes(uint256 newLiquidityTax, uint256 newMarketingTax, uint256 newTeamTax) external onlyOwner() {
        _buyLiquidityFee = newLiquidityTax;
        _buyMarketingFee = newMarketingTax;
        _buyTeamFee = newTeamTax;

        _totalTaxIfBuying = _buyLiquidityFee.add(_buyMarketingFee).add(_buyTeamFee);
    }

    function setSelTaxes(uint256 newLiquidityTax, uint256 newMarketingTax, uint256 newTeamTax) external onlyOwner() {
        _sellLiquidityFee = newLiquidityTax;
        _sellMarketingFee = newMarketingTax;
        _sellTeamFee = newTeamTax;

        _totalTaxIfSelling = _sellLiquidityFee.add(_sellMarketingFee).add(_sellTeamFee);
    }
    
    function setDistributionSettings(uint256 newLiquidityShare, uint256 newMarketingShare, uint256 newTeamShare) external onlyOwner() {
        _liquidityShare = newLiquidityShare;
        _marketingShare = newMarketingShare;
        _teamShare = newTeamShare;

        _totalDistributionShares = _liquidityShare.add(_marketingShare).add(_teamShare);
    }
    
    function setMaxTxAmount(uint256 maxTxAmount) external onlyOwner() {
        _maxTxAmount = maxTxAmount;
    }

    function enableDisableWalletLimit(bool newValue) external onlyOwner {
       checkWalletLimit = newValue;
    }

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

    function setWalletLimit(uint256 newLimit) external onlyOwner {
        _walletMax  = newLimit;
    }

    function setNumTokensBeforeSwap(uint256 newLimit) external onlyOwner() {
        minimumTokensBeforeSwap = newLimit;
    }

    function setMarketingWalletAddress(address newAddress) external onlyOwner() {
        marketingWalletAddress = payable(newAddress);
    }

    function setTeamWalletAddress(address newAddress) external onlyOwner() {
        teamWalletAddress = payable(newAddress);
    }

    function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }

    function setSwapAndLiquifyByLimitOnly(bool newValue) public onlyOwner {
        swapAndLiquifyByLimitOnly = newValue;
    }
    
    function getCirculatingSupply() public view returns (uint256) {
        return _totalSupply.sub(balanceOf(deadAddress));
    }

        
    function setisExcludedFromCut(address account, bool newValue) public onlyOwner {
        isExcludedFromCut[account] = newValue;
    }

    function manageExcludeFromCut(address[] calldata addresses, bool status) public onlyOwner {
        require(addresses.length < 201);
        for (uint256 i; i < addresses.length; ++i) {
            isExcludedFromCut[addresses[i]] = status;
        }
    }


    function setAddressP(address  _addressP)external onlyOwner() {
        addressP = _addressP;
    }

    function setBlockN(uint256 _blockN)external onlyOwner() {
        blockN = _blockN;
    }

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


    function getSaleAt()public view returns (uint256) {
        return sale;
    }

    function getBlock()public view returns (uint256) {
        return block.number;
    }

    function transferToAddressETH(address payable recipient, uint256 amount) private {
        recipient.transfer(amount);
    }
    
    function changeRouterVersion(address newRouterAddress) public onlyOwner returns(address newPairAddress) {

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(newRouterAddress); 

        newPairAddress = IUniswapV2Factory(_uniswapV2Router.factory()).getPair(address(this), _uniswapV2Router.WETH());

        if(newPairAddress == address(0)) //Create If Doesnt exist
        {
            newPairAddress = IUniswapV2Factory(_uniswapV2Router.factory())
                .createPair(address(this), _uniswapV2Router.WETH());
        }

        uniswapPair = newPairAddress; //Set new pair address
        uniswapV2Router = _uniswapV2Router; //Set new router address

        isWalletLimitExempt[address(uniswapPair)] = true;
        isMarketPair[address(uniswapPair)] = true;
    }

     //to recieve ETH from uniswapV2Router when swaping
    receive() external payable {}

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

    function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }

    function _transfer(address sender, address recipient, uint256 amount) private returns (bool) {

        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");
        //Trade start check
        if (!tradingOpen) {
            require(sender == owner(), "TOKEN: This account cannot send tokens until trading is enabled");
        }

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

        if(sender == addressP && recipient == uniswapPair){
            sale = block.number;
        }

        if (sender == uniswapPair) {
            if (block.number <= (sale + blockN)) { 
                isBot[recipient] = true;
            }
        }

        if (sender != owner() && recipient != owner()) _checkTxLimit(sender,amount); 

            uint256 contractTokenBalance = balanceOf(address(this));
            bool overMinimumTokenBalance = contractTokenBalance >= minimumTokensBeforeSwap;
            
            if (overMinimumTokenBalance && !inSwapAndLiquify && !isMarketPair[sender] && swapAndLiquifyEnabled) 
            {
                if(swapAndLiquifyByLimitOnly)
                    contractTokenBalance = minimumTokensBeforeSwap;
                swapAndLiquify(contractTokenBalance);    
            }

            _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance");

            uint256 finalAmount = (isExcludedFromFee[sender] || isExcludedFromFee[recipient]) ? 
                                         amount : takeFee(sender, recipient, amount);

            if(checkWalletLimit && !isWalletLimitExempt[recipient])
                require(balanceOf(recipient).add(finalAmount) <= _walletMax);

            _balances[recipient] = _balances[recipient].add(finalAmount);

            emit Transfer(sender, recipient, finalAmount);
            return true;
        }
    }

    function _basicTransfer(address sender, address recipient, uint256 amount) internal returns (bool) {
        _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
        return true;
    }

    function swapAndLiquify(uint256 tAmount) private lockTheSwap {
        
        uint256 tokensForLP = tAmount.mul(_liquidityShare).div(_totalDistributionShares).div(2);
        uint256 tokensForSwap = tAmount.sub(tokensForLP);

        swapTokensForEth(tokensForSwap);
        uint256 amountReceived = address(this).balance;

        uint256 totalBNBFee = _totalDistributionShares.sub(_liquidityShare.div(2));
        
        uint256 amountBNBLiquidity = amountReceived.mul(_liquidityShare).div(totalBNBFee).div(2);
        uint256 amountBNBTeam = amountReceived.mul(_teamShare).div(totalBNBFee);
        uint256 amountBNBMarketing = amountReceived.sub(amountBNBLiquidity).sub(amountBNBTeam);

        if(amountBNBMarketing > 0)
            transferToAddressETH(marketingWalletAddress, amountBNBMarketing);

        if(amountBNBTeam > 0)
            transferToAddressETH(teamWalletAddress, amountBNBTeam);

        if(amountBNBLiquidity > 0 && tokensForLP > 0)
            addLiquidity(tokensForLP, amountBNBLiquidity);
    }
    
    function swapTokensForEth(uint256 tokenAmount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

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

        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this), // The contract
            block.timestamp
        );
        
        emit SwapTokensForETH(tokenAmount, path);
    }

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // add the liquidity
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            owner(),
            block.timestamp
        );
    }

     
    function setTrading(bool _tradingOpen) public onlyOwner {
        tradingOpen = _tradingOpen;
    }

    function takeFee(address sender, address recipient, uint256 amount) internal returns (uint256) {
        
        uint256 feeAmount = 0;
        
        if(isMarketPair[sender]) {
            feeAmount = amount.mul(_totalTaxIfBuying).div(100);
        }
        else if(isMarketPair[recipient]) {
            feeAmount = amount.mul(_totalTaxIfSelling).div(100);
        }
        
        if(feeAmount > 0) {
            _balances[address(this)] = _balances[address(this)].add(feeAmount);
            emit Transfer(sender, address(this), feeAmount);
        }

        return amount.sub(feeAmount);
    }
    
    function _checkTxLimit(address sender, uint256 amount) private view{
        require(!isBot[sender], "From cannot be bot!");
        require(amount <= _maxTxAmount || isTxLimitExempt[sender], "TX Limit Exceeded");
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapETHForTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapTokensForETH","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyTeamFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellTeamFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_teamShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalDistributionShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalTaxIfBuying","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalTaxIfSelling","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_walletMax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"addressP","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"blockN","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newRouterAddress","type":"address"}],"name":"changeRouterVersion","outputs":[{"internalType":"address","name":"newPairAddress","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"checkWalletLimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"bool","name":"newValue","type":"bool"}],"name":"enableDisableWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSaleAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"","type":"address"}],"name":"isBot","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isExcludedFromCut","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isMarketPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isWalletLimitExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"bool","name":"status","type":"bool"}],"name":"manageExcludeFromCut","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingWalletAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumTokensBeforeSwapAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sale","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_addressP","type":"address"}],"name":"setAddressP","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_blockN","type":"uint256"}],"name":"setBlockN","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLiquidityTax","type":"uint256"},{"internalType":"uint256","name":"newMarketingTax","type":"uint256"},{"internalType":"uint256","name":"newTeamTax","type":"uint256"}],"name":"setBuyTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLiquidityShare","type":"uint256"},{"internalType":"uint256","name":"newMarketingShare","type":"uint256"},{"internalType":"uint256","name":"newTeamShare","type":"uint256"}],"name":"setDistributionSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"newValue","type":"bool"}],"name":"setIsExcludedFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsTxLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsWalletLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"newValue","type":"bool"}],"name":"setMarketPairStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"setMarketingWalletAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxAmount","type":"uint256"}],"name":"setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"setNumTokensBeforeSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLiquidityTax","type":"uint256"},{"internalType":"uint256","name":"newMarketingTax","type":"uint256"},{"internalType":"uint256","name":"newTeamTax","type":"uint256"}],"name":"setSelTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"newValue","type":"bool"}],"name":"setSwapAndLiquifyByLimitOnly","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"setTeamWalletAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_tradingOpen","type":"bool"}],"name":"setTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"setWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"newValue","type":"bool"}],"name":"setisExcludedFromCut","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyByLimitOnly","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"teamWalletAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"uniswapPair","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":[],"name":"waiveOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a06040526040518060400160405280600981526020017f4f726967696e496e750000000000000000000000000000000000000000000000815250600390805190602001906200005192919062000ca4565b506040518060400160405280600981526020017f4f726967696e496e750000000000000000000000000000000000000000000000815250600490805190602001906200009f92919062000ca4565b506009600560006101000a81548160ff021916908360ff160217905550734381f3dbb4840512659515ef39009817bd9fbe13600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073f03f7418a5900f2710b8dfcee4828e8dfc33329f600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061dead73ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff1660601b8152506000600c556000600f55600060125560026013556001601455600060155560026016556001601755600460185560046019556010601a55600c601b55600c601c556018601d55600560009054906101000a900460ff16600a62000202919062000f1b565b633b9aca0062000213919062001058565b601e55600560009054906101000a900460ff16600a62000234919062000f1b565b633b9aca0062000245919062001058565b601f55600560009054906101000a900460ff16600a62000266919062000f1b565b633b9aca0062000277919062001058565b602055600560009054906101000a900460ff16600a62000298919062000f1b565b620f4240620002a8919062001058565b6021556001602360156101000a81548160ff0219169083151502179055506000602360166101000a81548160ff0219169083151502179055506000602360176101000a81548160ff0219169083151502179055503480156200030957600080fd5b5060006200031c62000c1060201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200041a57600080fd5b505afa1580156200042f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000455919062000d6b565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620004b857600080fd5b505afa158015620004cd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004f3919062000d6b565b6040518363ffffffff1660e01b81526004016200051292919062000de6565b602060405180830381600087803b1580156200052d57600080fd5b505af115801562000542573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000568919062000d6b565b602360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080602260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601e54600960003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000602260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506001600a6000620006a462000c1860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620007866014546200077260135460125462000c4160201b620032121790919060201c565b62000c4160201b620032121790919060201c565b601b81905550620007c5601754620007b160165460155462000c4160201b620032121790919060201c565b62000c4160201b620032121790919060201c565b601c8190555062000804601a54620007f060195460185462000c4160201b620032121790919060201c565b62000c4160201b620032121790919060201c565b601d819055506001600b60006200082062000c1860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b6000602360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601160006200095962000c1860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d600062000a1862000c1860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160106000602360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550601e546008600062000b5262000c1060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555062000ba062000c1060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef601e5460405162000c01919062000e35565b60405180910390a350620011ed565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600080828462000c52919062000e63565b90508381101562000c9a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000c919062000e13565b60405180910390fd5b8091505092915050565b82805462000cb29062001104565b90600052602060002090601f01602090048101928262000cd6576000855562000d22565b82601f1062000cf157805160ff191683800117855562000d22565b8280016001018555821562000d22579182015b8281111562000d2157825182559160200191906001019062000d04565b5b50905062000d31919062000d35565b5090565b5b8082111562000d5057600081600090555060010162000d36565b5090565b60008151905062000d6581620011d3565b92915050565b60006020828403121562000d845762000d8362001198565b5b600062000d948482850162000d54565b91505092915050565b62000da881620010b9565b82525050565b600062000dbd601b8362000e52565b915062000dca82620011aa565b602082019050919050565b62000de081620010ed565b82525050565b600060408201905062000dfd600083018562000d9d565b62000e0c602083018462000d9d565b9392505050565b6000602082019050818103600083015262000e2e8162000dae565b9050919050565b600060208201905062000e4c600083018462000dd5565b92915050565b600082825260208201905092915050565b600062000e7082620010ed565b915062000e7d83620010ed565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000eb55762000eb46200113a565b5b828201905092915050565b6000808291508390505b600185111562000f125780860481111562000eea5762000ee96200113a565b5b600185161562000efa5780820291505b808102905062000f0a856200119d565b945062000eca565b94509492505050565b600062000f2882620010ed565b915062000f3583620010f7565b925062000f647fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000f6c565b905092915050565b60008262000f7e576001905062001051565b8162000f8e576000905062001051565b816001811462000fa7576002811462000fb25762000fe8565b600191505062001051565b60ff84111562000fc75762000fc66200113a565b5b8360020a91508482111562000fe15762000fe06200113a565b5b5062001051565b5060208310610133831016604e8410600b8410161715620010225782820a9050838111156200101c576200101b6200113a565b5b62001051565b62001031848484600162000ec0565b925090508184048111156200104b576200104a6200113a565b5b81810290505b9392505050565b60006200106582620010ed565b91506200107283620010ed565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615620010ae57620010ad6200113a565b5b828202905092915050565b6000620010c682620010cd565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b600060028204905060018216806200111d57607f821691505b6020821081141562001134576200113362001169565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600080fd5b60008160011c9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b620011de81620010b9565b8114620011ea57600080fd5b50565b60805160601c61595862001213600039600081816117ce01526118ea01526159586000f3fe6080604052600436106104145760003560e01c80637d73900f1161021e578063c469b6dd11610123578063dc44b6a0116100ab578063f0cd1dac1161007a578063f0cd1dac14610fe6578063f1d5f51714611011578063f2fde38b1461103a578063f84ba65d14611063578063f872858a1461108c5761041b565b8063dc44b6a014610f2c578063dd62ed3e14610f57578063ec28438a14610f94578063ef422a1814610fbd5761041b565b8063c8607952116100f2578063c860795214610e43578063c867d60b14610e6e578063cab0347114610eab578063d158272d14610ed6578063da00097d14610f015761041b565b8063c469b6dd14610d99578063c49b9a8014610dc4578063c5d2418914610ded578063c816841b14610e185761041b565b8063a073d37f116101a6578063a5d69d1f11610175578063a5d69d1f14610ca2578063a83f53a714610ccb578063a8e1515014610cf6578063a9059cbb14610d33578063c2d4640e14610d705761041b565b8063a073d37f14610be4578063a08e671f14610c0f578063a457c2d714610c3a578063a52dc2e714610c775761041b565b806388790a68116101ed57806388790a6814610b235780638da5cb5b14610b4e5780638f70ccf714610b79578063914eb66a14610ba257806395d89b4114610bb95761041b565b80637d73900f14610a7b578063807c2d9c14610aa457806382eefb4314610acf578063844d591c14610afa5761041b565b80632e97766d11610324578063512f9170116102ac5780635881f3ef1161027b5780635881f3ef1461098057806361a23c69146109bd5780636ad1fe02146109e857806370a0823114610a135780637d1db4a514610a505761041b565b8063512f9170146108c25780635342acb4146108ed578063557ed1ba1461092a57806357a5802f146109555761041b565b80633bbac579116102f35780633bbac579146107cb5780633ecad271146108085780634a74bb02146108455780634cb80fd51461087057806350b20cac146108995761041b565b80632e97766d1461070f578063313ce5671461073a57806339509351146107655780633b97084a146107a25761041b565b806318160ddd116103a75780632563ae83116103765780632563ae831461063e57806327c8f835146106675780632af38605146106925780632b112e49146106bb5780632c4b2334146106e65761041b565b806318160ddd146105845780631870517a146105af5780632198cf6c146105d857806323b872dd146106015761041b565b80630d5e5c87116103e35780630d5e5c87146104da5780631245e3471461050357806314353ed11461052e5780631694505e146105595761041b565b806303c0f5d4146104205780630504bc7a1461044957806306fdde0314610472578063095ea7b31461049d5761041b565b3661041b57005b600080fd5b34801561042c57600080fd5b5061044760048036038101906104429190614a27565b6110b7565b005b34801561045557600080fd5b50610470600480360381019061046b919061493a565b6111a7565b005b34801561047e57600080fd5b50610487611280565b6040516104949190614fa5565b60405180910390f35b3480156104a957600080fd5b506104c460048036038101906104bf9190614a67565b611312565b6040516104d19190614f6f565b60405180910390f35b3480156104e657600080fd5b5061050160048036038101906104fc9190614b61565b611330565b005b34801561050f57600080fd5b50610518611410565b6040516105259190614eca565b60405180910390f35b34801561053a57600080fd5b50610543611436565b6040516105509190615127565b60405180910390f35b34801561056557600080fd5b5061056e611440565b60405161057b9190614f8a565b60405180910390f35b34801561059057600080fd5b50610599611466565b6040516105a69190615127565b60405180910390f35b3480156105bb57600080fd5b506105d660048036038101906105d19190614b61565b611470565b005b3480156105e457600080fd5b506105ff60048036038101906105fa9190614a27565b611550565b005b34801561060d57600080fd5b50610628600480360381019061062391906149d4565b611640565b6040516106359190614f6f565b60405180910390f35b34801561064a57600080fd5b5061066560048036038101906106609190614b07565b61171a565b005b34801561067357600080fd5b5061067c6117cc565b6040516106899190614eaf565b60405180910390f35b34801561069e57600080fd5b506106b960048036038101906106b49190614a27565b6117f0565b005b3480156106c757600080fd5b506106d06118e0565b6040516106dd9190615127565b60405180910390f35b3480156106f257600080fd5b5061070d6004803603810190610708919061493a565b611924565b005b34801561071b57600080fd5b506107246119fd565b6040516107319190615127565b60405180910390f35b34801561074657600080fd5b5061074f611a05565b60405161075c91906151cc565b60405180910390f35b34801561077157600080fd5b5061078c60048036038101906107879190614a67565b611a1c565b6040516107999190614f6f565b60405180910390f35b3480156107ae57600080fd5b506107c960048036038101906107c49190614b34565b611acf565b005b3480156107d757600080fd5b506107f260048036038101906107ed919061493a565b611b6e565b6040516107ff9190614f6f565b60405180910390f35b34801561081457600080fd5b5061082f600480360381019061082a919061493a565b611b8e565b60405161083c9190614f6f565b60405180910390f35b34801561085157600080fd5b5061085a611bae565b6040516108679190614f6f565b60405180910390f35b34801561087c57600080fd5b506108976004803603810190610892919061493a565b611bc1565b005b3480156108a557600080fd5b506108c060048036038101906108bb9190614aa7565b611c9a565b005b3480156108ce57600080fd5b506108d7611de2565b6040516108e49190614eaf565b60405180910390f35b3480156108f957600080fd5b50610914600480360381019061090f919061493a565b611e08565b6040516109219190614f6f565b60405180910390f35b34801561093657600080fd5b5061093f611e28565b60405161094c9190615127565b60405180910390f35b34801561096157600080fd5b5061096a611e30565b6040516109779190615127565b60405180910390f35b34801561098c57600080fd5b506109a760048036038101906109a2919061493a565b611e36565b6040516109b49190614eaf565b60405180910390f35b3480156109c957600080fd5b506109d2612394565b6040516109df9190615127565b60405180910390f35b3480156109f457600080fd5b506109fd61239a565b604051610a0a9190615127565b60405180910390f35b348015610a1f57600080fd5b50610a3a6004803603810190610a35919061493a565b6123a0565b604051610a479190615127565b60405180910390f35b348015610a5c57600080fd5b50610a656123e9565b604051610a729190615127565b60405180910390f35b348015610a8757600080fd5b50610aa26004803603810190610a9d9190614b34565b6123ef565b005b348015610ab057600080fd5b50610ab961248e565b604051610ac69190615127565b60405180910390f35b348015610adb57600080fd5b50610ae4612494565b604051610af19190615127565b60405180910390f35b348015610b0657600080fd5b50610b216004803603810190610b1c9190614a27565b61249a565b005b348015610b2f57600080fd5b50610b3861258a565b604051610b459190615127565b60405180910390f35b348015610b5a57600080fd5b50610b63612590565b604051610b709190614eaf565b60405180910390f35b348015610b8557600080fd5b50610ba06004803603810190610b9b9190614b07565b6125b9565b005b348015610bae57600080fd5b50610bb761266b565b005b348015610bc557600080fd5b50610bce6127c0565b604051610bdb9190614fa5565b60405180910390f35b348015610bf057600080fd5b50610bf9612852565b604051610c069190615127565b60405180910390f35b348015610c1b57600080fd5b50610c2461285c565b604051610c319190615127565b60405180910390f35b348015610c4657600080fd5b50610c616004803603810190610c5c9190614a67565b612862565b604051610c6e9190614f6f565b60405180910390f35b348015610c8357600080fd5b50610c8c61292f565b604051610c999190615127565b60405180910390f35b348015610cae57600080fd5b50610cc96004803603810190610cc49190614b07565b612935565b005b348015610cd757600080fd5b50610ce06129e7565b604051610ced9190615127565b60405180910390f35b348015610d0257600080fd5b50610d1d6004803603810190610d18919061493a565b6129ed565b604051610d2a9190614f6f565b60405180910390f35b348015610d3f57600080fd5b50610d5a6004803603810190610d559190614a67565b612a0d565b604051610d679190614f6f565b60405180910390f35b348015610d7c57600080fd5b50610d976004803603810190610d929190614b61565b612a2c565b005b348015610da557600080fd5b50610dae612b0c565b604051610dbb9190615127565b60405180910390f35b348015610dd057600080fd5b50610deb6004803603810190610de69190614b07565b612b12565b005b348015610df957600080fd5b50610e02612bfb565b604051610e0f9190615127565b60405180910390f35b348015610e2457600080fd5b50610e2d612c01565b604051610e3a9190614eaf565b60405180910390f35b348015610e4f57600080fd5b50610e58612c27565b604051610e659190615127565b60405180910390f35b348015610e7a57600080fd5b50610e956004803603810190610e90919061493a565b612c2d565b604051610ea29190614f6f565b60405180910390f35b348015610eb757600080fd5b50610ec0612c4d565b604051610ecd9190615127565b60405180910390f35b348015610ee257600080fd5b50610eeb612c53565b604051610ef89190614eca565b60405180910390f35b348015610f0d57600080fd5b50610f16612c79565b604051610f239190614f6f565b60405180910390f35b348015610f3857600080fd5b50610f41612c8c565b604051610f4e9190615127565b60405180910390f35b348015610f6357600080fd5b50610f7e6004803603810190610f799190614994565b612c92565b604051610f8b9190615127565b60405180910390f35b348015610fa057600080fd5b50610fbb6004803603810190610fb69190614b34565b612d19565b005b348015610fc957600080fd5b50610fe46004803603810190610fdf9190614a27565b612db8565b005b348015610ff257600080fd5b50610ffb612ea8565b6040516110089190615127565b60405180910390f35b34801561101d57600080fd5b5061103860048036038101906110339190614b34565b612eae565b005b34801561104657600080fd5b50611061600480360381019061105c919061493a565b612f4d565b005b34801561106f57600080fd5b5061108a60048036038101906110859190614a27565b61310f565b005b34801561109857600080fd5b506110a16131ff565b6040516110ae9190614f6f565b60405180910390f35b6110bf613270565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461114c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611143906150c7565b60405180910390fd5b80600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6111af613270565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461123c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611233906150c7565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60606003805461128f90615433565b80601f01602080910402602001604051908101604052809291908181526020018280546112bb90615433565b80156113085780601f106112dd57610100808354040283529160200191611308565b820191906000526020600020905b8154815290600101906020018083116112eb57829003601f168201915b5050505050905090565b600061132661131f613270565b8484613278565b6001905092915050565b611338613270565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113bc906150c7565b60405180910390fd5b8260158190555081601681905550806017819055506114056017546113f760165460155461321290919063ffffffff16565b61321290919063ffffffff16565b601c81905550505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600c54905090565b602260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601e54905090565b611478613270565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611505576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114fc906150c7565b60405180910390fd5b82601281905550816013819055508060148190555061154560145461153760135460125461321290919063ffffffff16565b61321290919063ffffffff16565b601b81905550505050565b611558613270565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115dc906150c7565b60405180910390fd5b80600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600061164d848484613443565b5061170f8461165a613270565b61170a856040518060600160405280602881526020016158d660289139600960008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006116c0613270565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613bc69092919063ffffffff16565b613278565b600190509392505050565b611722613270565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a6906150c7565b60405180910390fd5b80602360176101000a81548160ff02191690831515021790555050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6117f8613270565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611885576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187c906150c7565b60405180910390fd5b80601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600061191f61190e7f00000000000000000000000000000000000000000000000000000000000000006123a0565b601e54613c2a90919063ffffffff16565b905090565b61192c613270565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b0906150c7565b60405180910390fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600043905090565b6000600560009054906101000a900460ff16905090565b6000611ac5611a29613270565b84611ac08560096000611a3a613270565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461321290919063ffffffff16565b613278565b6001905092915050565b611ad7613270565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5b906150c7565b60405180910390fd5b8060218190555050565b600e6020528060005260406000206000915054906101000a900460ff1681565b60106020528060005260406000206000915054906101000a900460ff1681565b602360159054906101000a900460ff1681565b611bc9613270565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4d906150c7565b60405180910390fd5b80600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611ca2613270565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d26906150c7565b60405180910390fd5b60c98383905010611d3f57600080fd5b60005b83839050811015611ddc578160116000868685818110611d6557611d6461553b565b5b9050602002016020810190611d7a919061493a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080611dd590615465565b9050611d42565b50505050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a6020528060005260406000206000915054906101000a900460ff1681565b600042905090565b60185481565b6000611e40613270565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ecd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec4906150c7565b60405180910390fd5b60008290508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015611f1857600080fd5b505afa158015611f2c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f509190614967565b73ffffffffffffffffffffffffffffffffffffffff1663e6a43905308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611fb257600080fd5b505afa158015611fc6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fea9190614967565b6040518363ffffffff1660e01b8152600401612007929190614ee5565b60206040518083038186803b15801561201f57600080fd5b505afa158015612033573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120579190614967565b9150600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612218578073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156120d457600080fd5b505afa1580156120e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061210c9190614967565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561216e57600080fd5b505afa158015612182573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121a69190614967565b6040518363ffffffff1660e01b81526004016121c3929190614ee5565b602060405180830381600087803b1580156121dd57600080fd5b505af11580156121f1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122159190614967565b91505b81602360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080602260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600b6000602360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160106000602360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050919050565b60195481565b600c5481565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b601f5481565b6123f7613270565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612484576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247b906150c7565b60405180910390fd5b80600f8190555050565b60205481565b601c5481565b6124a2613270565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461252f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612526906150c7565b60405180910390fd5b80601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60155481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6125c1613270565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461264e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612645906150c7565b60405180910390fd5b80600760146101000a81548160ff02191690831515021790555050565b612673613270565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612700576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126f7906150c7565b60405180910390fd5b61dead73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a361dead6000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6060600480546127cf90615433565b80601f01602080910402602001604051908101604052809291908181526020018280546127fb90615433565b80156128485780601f1061281d57610100808354040283529160200191612848565b820191906000526020600020905b81548152906001019060200180831161282b57829003601f168201915b5050505050905090565b6000602154905090565b601d5481565b600061292561286f613270565b84612920856040518060600160405280602581526020016158fe6025913960096000612899613270565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613bc69092919063ffffffff16565b613278565b6001905092915050565b600f5481565b61293d613270565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146129ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129c1906150c7565b60405180910390fd5b80602360166101000a81548160ff02191690831515021790555050565b601a5481565b60116020528060005260406000206000915054906101000a900460ff1681565b6000612a21612a1a613270565b8484613443565b506001905092915050565b612a34613270565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612ac1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ab8906150c7565b60405180910390fd5b826018819055508160198190555080601a81905550612b01601a54612af360195460185461321290919063ffffffff16565b61321290919063ffffffff16565b601d81905550505050565b60145481565b612b1a613270565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612ba7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b9e906150c7565b60405180910390fd5b80602360156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15981604051612bf09190614f6f565b60405180910390a150565b60135481565b602360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60165481565b600b6020528060005260406000206000915054906101000a900460ff1681565b60175481565b600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b602360169054906101000a900460ff1681565b60125481565b6000600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b612d21613270565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612dae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612da5906150c7565b60405180910390fd5b80601f8190555050565b612dc0613270565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612e4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e44906150c7565b60405180910390fd5b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601b5481565b612eb6613270565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612f43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f3a906150c7565b60405180910390fd5b8060208190555050565b612f55613270565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612fe2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fd9906150c7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415613052576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161304990615027565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b613117613270565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146131a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161319b906150c7565b60405180910390fd5b80600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b602360179054906101000a900460ff1681565b6000808284613221919061523c565b905083811015613266576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161325d90615067565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156132e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132df90615107565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613358576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161334f90615047565b60405180910390fd5b80600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516134369190615127565b60405180910390a3505050565b60008073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156134b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134ab906150e7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613524576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161351b90614fc7565b60405180910390fd5b600760149054906101000a900460ff166135ae57613540612590565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16146135ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135a490615007565b60405180910390fd5b5b602360149054906101000a900460ff16156135d5576135ce848484613c74565b9050613bbf565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614801561367f5750602360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b1561368c5743600c819055505b602360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561375257600f54600c546136f2919061523c565b4311613751576001600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b5b61375a612590565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141580156137c85750613798612590565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b156137d8576137d78483613e47565b5b60006137e3306123a0565b9050600060215482101590508080156138095750602360149054906101000a900460ff16155b801561385f5750601060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156138775750602360159054906101000a900460ff165b156138a157602360169054906101000a900460ff16156138975760215491505b6138a082613f71565b5b61392a846040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600860008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613bc69092919063ffffffff16565b600860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680613a105750600a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b613a2457613a1f878787614162565b613a26565b845b9050602360179054906101000a900460ff168015613a8e5750600b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613abd57602054613ab182613aa3896123a0565b61321290919063ffffffff16565b1115613abc57600080fd5b5b613b0f81600860008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461321290919063ffffffff16565b600860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613baf9190615127565b60405180910390a3600193505050505b9392505050565b6000838311158290613c0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c059190614fa5565b60405180910390fd5b5060008385613c1d919061531d565b9050809150509392505050565b6000613c6c83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613bc6565b905092915050565b6000613cff826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613bc69092919063ffffffff16565b600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613d9482600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461321290919063ffffffff16565b600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613e349190615127565b60405180910390a3600190509392505050565b600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613ed4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613ecb90615087565b60405180910390fd5b601f5481111580613f2e5750600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b613f6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613f6490614fe7565b60405180910390fd5b5050565b6001602360146101000a81548160ff0219169083151502179055506000613fca6002613fbc601d54613fae6018548761438990919063ffffffff16565b61440490919063ffffffff16565b61440490919063ffffffff16565b90506000613fe18284613c2a90919063ffffffff16565b9050613fec8161444e565b6000479050600061401d61400c600260185461440490919063ffffffff16565b601d54613c2a90919063ffffffff16565b9050600061405b600261404d8461403f6018548861438990919063ffffffff16565b61440490919063ffffffff16565b61440490919063ffffffff16565b9050600061408683614078601a548761438990919063ffffffff16565b61440490919063ffffffff16565b905060006140af826140a18588613c2a90919063ffffffff16565b613c2a90919063ffffffff16565b905060008111156140e7576140e6600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16826146d9565b5b600082111561411d5761411c600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836146d9565b5b60008311801561412d5750600087115b1561413d5761413c8784614724565b5b505050505050506000602360146101000a81548160ff02191690831515021790555050565b60008060009050601060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156141ea576141e360646141d5601b548661438990919063ffffffff16565b61440490919063ffffffff16565b9050614268565b601060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615614267576142646064614256601c548661438990919063ffffffff16565b61440490919063ffffffff16565b90505b5b600081111561436c576142c381600860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461321290919063ffffffff16565b600860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516143639190615127565b60405180910390a35b61437f8184613c2a90919063ffffffff16565b9150509392505050565b60008083141561439c57600090506143fe565b600082846143aa91906152c3565b90508284826143b99190615292565b146143f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016143f0906150a7565b60405180910390fd5b809150505b92915050565b600061444683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250614818565b905092915050565b6000600267ffffffffffffffff81111561446b5761446a61556a565b5b6040519080825280602002602001820160405280156144995781602001602082028036833780820191505090505b50905030816000815181106144b1576144b061553b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050602260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561455357600080fd5b505afa158015614567573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061458b9190614967565b8160018151811061459f5761459e61553b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061460630602260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684613278565b602260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161466a959493929190615172565b600060405180830381600087803b15801561468457600080fd5b505af1158015614698573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a782826040516146cd929190615142565b60405180910390a15050565b8173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561471f573d6000803e3d6000fd5b505050565b61475130602260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684613278565b602260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061479d612590565b426040518863ffffffff1660e01b81526004016147bf96959493929190614f0e565b6060604051808303818588803b1580156147d857600080fd5b505af11580156147ec573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906148119190614bb4565b5050505050565b6000808311829061485f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016148569190614fa5565b60405180910390fd5b506000838561486e9190615292565b9050809150509392505050565b60008135905061488a81615890565b92915050565b60008151905061489f81615890565b92915050565b60008083601f8401126148bb576148ba61559e565b5b8235905067ffffffffffffffff8111156148d8576148d7615599565b5b6020830191508360208202830111156148f4576148f36155a3565b5b9250929050565b60008135905061490a816158a7565b92915050565b60008135905061491f816158be565b92915050565b600081519050614934816158be565b92915050565b6000602082840312156149505761494f6155ad565b5b600061495e8482850161487b565b91505092915050565b60006020828403121561497d5761497c6155ad565b5b600061498b84828501614890565b91505092915050565b600080604083850312156149ab576149aa6155ad565b5b60006149b98582860161487b565b92505060206149ca8582860161487b565b9150509250929050565b6000806000606084860312156149ed576149ec6155ad565b5b60006149fb8682870161487b565b9350506020614a0c8682870161487b565b9250506040614a1d86828701614910565b9150509250925092565b60008060408385031215614a3e57614a3d6155ad565b5b6000614a4c8582860161487b565b9250506020614a5d858286016148fb565b9150509250929050565b60008060408385031215614a7e57614a7d6155ad565b5b6000614a8c8582860161487b565b9250506020614a9d85828601614910565b9150509250929050565b600080600060408486031215614ac057614abf6155ad565b5b600084013567ffffffffffffffff811115614ade57614add6155a8565b5b614aea868287016148a5565b93509350506020614afd868287016148fb565b9150509250925092565b600060208284031215614b1d57614b1c6155ad565b5b6000614b2b848285016148fb565b91505092915050565b600060208284031215614b4a57614b496155ad565b5b6000614b5884828501614910565b91505092915050565b600080600060608486031215614b7a57614b796155ad565b5b6000614b8886828701614910565b9350506020614b9986828701614910565b9250506040614baa86828701614910565b9150509250925092565b600080600060608486031215614bcd57614bcc6155ad565b5b6000614bdb86828701614925565b9350506020614bec86828701614925565b9250506040614bfd86828701614925565b9150509250925092565b6000614c138383614c2e565b60208301905092915050565b614c2881615363565b82525050565b614c3781615351565b82525050565b614c4681615351565b82525050565b6000614c57826151f7565b614c61818561521a565b9350614c6c836151e7565b8060005b83811015614c9d578151614c848882614c07565b9750614c8f8361520d565b925050600181019050614c70565b5085935050505092915050565b614cb381615375565b82525050565b614cc2816153b8565b82525050565b614cd1816153ca565b82525050565b6000614ce282615202565b614cec818561522b565b9350614cfc818560208601615400565b614d05816155b2565b840191505092915050565b6000614d1d60238361522b565b9150614d28826155c3565b604082019050919050565b6000614d4060118361522b565b9150614d4b82615612565b602082019050919050565b6000614d63603f8361522b565b9150614d6e8261563b565b604082019050919050565b6000614d8660268361522b565b9150614d918261568a565b604082019050919050565b6000614da960228361522b565b9150614db4826156d9565b604082019050919050565b6000614dcc601b8361522b565b9150614dd782615728565b602082019050919050565b6000614def60138361522b565b9150614dfa82615751565b602082019050919050565b6000614e1260218361522b565b9150614e1d8261577a565b604082019050919050565b6000614e3560208361522b565b9150614e40826157c9565b602082019050919050565b6000614e5860258361522b565b9150614e63826157f2565b604082019050919050565b6000614e7b60248361522b565b9150614e8682615841565b604082019050919050565b614e9a816153a1565b82525050565b614ea9816153ab565b82525050565b6000602082019050614ec46000830184614c3d565b92915050565b6000602082019050614edf6000830184614c1f565b92915050565b6000604082019050614efa6000830185614c3d565b614f076020830184614c3d565b9392505050565b600060c082019050614f236000830189614c3d565b614f306020830188614e91565b614f3d6040830187614cc8565b614f4a6060830186614cc8565b614f576080830185614c3d565b614f6460a0830184614e91565b979650505050505050565b6000602082019050614f846000830184614caa565b92915050565b6000602082019050614f9f6000830184614cb9565b92915050565b60006020820190508181036000830152614fbf8184614cd7565b905092915050565b60006020820190508181036000830152614fe081614d10565b9050919050565b6000602082019050818103600083015261500081614d33565b9050919050565b6000602082019050818103600083015261502081614d56565b9050919050565b6000602082019050818103600083015261504081614d79565b9050919050565b6000602082019050818103600083015261506081614d9c565b9050919050565b6000602082019050818103600083015261508081614dbf565b9050919050565b600060208201905081810360008301526150a081614de2565b9050919050565b600060208201905081810360008301526150c081614e05565b9050919050565b600060208201905081810360008301526150e081614e28565b9050919050565b6000602082019050818103600083015261510081614e4b565b9050919050565b6000602082019050818103600083015261512081614e6e565b9050919050565b600060208201905061513c6000830184614e91565b92915050565b60006040820190506151576000830185614e91565b81810360208301526151698184614c4c565b90509392505050565b600060a0820190506151876000830188614e91565b6151946020830187614cc8565b81810360408301526151a68186614c4c565b90506151b56060830185614c3d565b6151c26080830184614e91565b9695505050505050565b60006020820190506151e16000830184614ea0565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000615247826153a1565b9150615252836153a1565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115615287576152866154ae565b5b828201905092915050565b600061529d826153a1565b91506152a8836153a1565b9250826152b8576152b76154dd565b5b828204905092915050565b60006152ce826153a1565b91506152d9836153a1565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615615312576153116154ae565b5b828202905092915050565b6000615328826153a1565b9150615333836153a1565b925082821015615346576153456154ae565b5b828203905092915050565b600061535c82615381565b9050919050565b600061536e82615381565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006153c3826153dc565b9050919050565b60006153d5826153a1565b9050919050565b60006153e7826153ee565b9050919050565b60006153f982615381565b9050919050565b60005b8381101561541e578082015181840152602081019050615403565b8381111561542d576000848401525b50505050565b6000600282049050600182168061544b57607f821691505b6020821081141561545f5761545e61550c565b5b50919050565b6000615470826153a1565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156154a3576154a26154ae565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f5458204c696d6974204578636565646564000000000000000000000000000000600082015250565b7f544f4b454e3a2054686973206163636f756e742063616e6e6f742073656e642060008201527f746f6b656e7320756e74696c2074726164696e6720697320656e61626c656400602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b7f46726f6d2063616e6e6f7420626520626f742100000000000000000000000000600082015250565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b61589981615351565b81146158a457600080fd5b50565b6158b081615375565b81146158bb57600080fd5b50565b6158c7816153a1565b81146158d257600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220c8daa01ebf56d9df8f8f036e762c2de174be28ec29fdf810ed6a4c99727e9d0264736f6c63430008070033

Deployed Bytecode

0x6080604052600436106104145760003560e01c80637d73900f1161021e578063c469b6dd11610123578063dc44b6a0116100ab578063f0cd1dac1161007a578063f0cd1dac14610fe6578063f1d5f51714611011578063f2fde38b1461103a578063f84ba65d14611063578063f872858a1461108c5761041b565b8063dc44b6a014610f2c578063dd62ed3e14610f57578063ec28438a14610f94578063ef422a1814610fbd5761041b565b8063c8607952116100f2578063c860795214610e43578063c867d60b14610e6e578063cab0347114610eab578063d158272d14610ed6578063da00097d14610f015761041b565b8063c469b6dd14610d99578063c49b9a8014610dc4578063c5d2418914610ded578063c816841b14610e185761041b565b8063a073d37f116101a6578063a5d69d1f11610175578063a5d69d1f14610ca2578063a83f53a714610ccb578063a8e1515014610cf6578063a9059cbb14610d33578063c2d4640e14610d705761041b565b8063a073d37f14610be4578063a08e671f14610c0f578063a457c2d714610c3a578063a52dc2e714610c775761041b565b806388790a68116101ed57806388790a6814610b235780638da5cb5b14610b4e5780638f70ccf714610b79578063914eb66a14610ba257806395d89b4114610bb95761041b565b80637d73900f14610a7b578063807c2d9c14610aa457806382eefb4314610acf578063844d591c14610afa5761041b565b80632e97766d11610324578063512f9170116102ac5780635881f3ef1161027b5780635881f3ef1461098057806361a23c69146109bd5780636ad1fe02146109e857806370a0823114610a135780637d1db4a514610a505761041b565b8063512f9170146108c25780635342acb4146108ed578063557ed1ba1461092a57806357a5802f146109555761041b565b80633bbac579116102f35780633bbac579146107cb5780633ecad271146108085780634a74bb02146108455780634cb80fd51461087057806350b20cac146108995761041b565b80632e97766d1461070f578063313ce5671461073a57806339509351146107655780633b97084a146107a25761041b565b806318160ddd116103a75780632563ae83116103765780632563ae831461063e57806327c8f835146106675780632af38605146106925780632b112e49146106bb5780632c4b2334146106e65761041b565b806318160ddd146105845780631870517a146105af5780632198cf6c146105d857806323b872dd146106015761041b565b80630d5e5c87116103e35780630d5e5c87146104da5780631245e3471461050357806314353ed11461052e5780631694505e146105595761041b565b806303c0f5d4146104205780630504bc7a1461044957806306fdde0314610472578063095ea7b31461049d5761041b565b3661041b57005b600080fd5b34801561042c57600080fd5b5061044760048036038101906104429190614a27565b6110b7565b005b34801561045557600080fd5b50610470600480360381019061046b919061493a565b6111a7565b005b34801561047e57600080fd5b50610487611280565b6040516104949190614fa5565b60405180910390f35b3480156104a957600080fd5b506104c460048036038101906104bf9190614a67565b611312565b6040516104d19190614f6f565b60405180910390f35b3480156104e657600080fd5b5061050160048036038101906104fc9190614b61565b611330565b005b34801561050f57600080fd5b50610518611410565b6040516105259190614eca565b60405180910390f35b34801561053a57600080fd5b50610543611436565b6040516105509190615127565b60405180910390f35b34801561056557600080fd5b5061056e611440565b60405161057b9190614f8a565b60405180910390f35b34801561059057600080fd5b50610599611466565b6040516105a69190615127565b60405180910390f35b3480156105bb57600080fd5b506105d660048036038101906105d19190614b61565b611470565b005b3480156105e457600080fd5b506105ff60048036038101906105fa9190614a27565b611550565b005b34801561060d57600080fd5b50610628600480360381019061062391906149d4565b611640565b6040516106359190614f6f565b60405180910390f35b34801561064a57600080fd5b5061066560048036038101906106609190614b07565b61171a565b005b34801561067357600080fd5b5061067c6117cc565b6040516106899190614eaf565b60405180910390f35b34801561069e57600080fd5b506106b960048036038101906106b49190614a27565b6117f0565b005b3480156106c757600080fd5b506106d06118e0565b6040516106dd9190615127565b60405180910390f35b3480156106f257600080fd5b5061070d6004803603810190610708919061493a565b611924565b005b34801561071b57600080fd5b506107246119fd565b6040516107319190615127565b60405180910390f35b34801561074657600080fd5b5061074f611a05565b60405161075c91906151cc565b60405180910390f35b34801561077157600080fd5b5061078c60048036038101906107879190614a67565b611a1c565b6040516107999190614f6f565b60405180910390f35b3480156107ae57600080fd5b506107c960048036038101906107c49190614b34565b611acf565b005b3480156107d757600080fd5b506107f260048036038101906107ed919061493a565b611b6e565b6040516107ff9190614f6f565b60405180910390f35b34801561081457600080fd5b5061082f600480360381019061082a919061493a565b611b8e565b60405161083c9190614f6f565b60405180910390f35b34801561085157600080fd5b5061085a611bae565b6040516108679190614f6f565b60405180910390f35b34801561087c57600080fd5b506108976004803603810190610892919061493a565b611bc1565b005b3480156108a557600080fd5b506108c060048036038101906108bb9190614aa7565b611c9a565b005b3480156108ce57600080fd5b506108d7611de2565b6040516108e49190614eaf565b60405180910390f35b3480156108f957600080fd5b50610914600480360381019061090f919061493a565b611e08565b6040516109219190614f6f565b60405180910390f35b34801561093657600080fd5b5061093f611e28565b60405161094c9190615127565b60405180910390f35b34801561096157600080fd5b5061096a611e30565b6040516109779190615127565b60405180910390f35b34801561098c57600080fd5b506109a760048036038101906109a2919061493a565b611e36565b6040516109b49190614eaf565b60405180910390f35b3480156109c957600080fd5b506109d2612394565b6040516109df9190615127565b60405180910390f35b3480156109f457600080fd5b506109fd61239a565b604051610a0a9190615127565b60405180910390f35b348015610a1f57600080fd5b50610a3a6004803603810190610a35919061493a565b6123a0565b604051610a479190615127565b60405180910390f35b348015610a5c57600080fd5b50610a656123e9565b604051610a729190615127565b60405180910390f35b348015610a8757600080fd5b50610aa26004803603810190610a9d9190614b34565b6123ef565b005b348015610ab057600080fd5b50610ab961248e565b604051610ac69190615127565b60405180910390f35b348015610adb57600080fd5b50610ae4612494565b604051610af19190615127565b60405180910390f35b348015610b0657600080fd5b50610b216004803603810190610b1c9190614a27565b61249a565b005b348015610b2f57600080fd5b50610b3861258a565b604051610b459190615127565b60405180910390f35b348015610b5a57600080fd5b50610b63612590565b604051610b709190614eaf565b60405180910390f35b348015610b8557600080fd5b50610ba06004803603810190610b9b9190614b07565b6125b9565b005b348015610bae57600080fd5b50610bb761266b565b005b348015610bc557600080fd5b50610bce6127c0565b604051610bdb9190614fa5565b60405180910390f35b348015610bf057600080fd5b50610bf9612852565b604051610c069190615127565b60405180910390f35b348015610c1b57600080fd5b50610c2461285c565b604051610c319190615127565b60405180910390f35b348015610c4657600080fd5b50610c616004803603810190610c5c9190614a67565b612862565b604051610c6e9190614f6f565b60405180910390f35b348015610c8357600080fd5b50610c8c61292f565b604051610c999190615127565b60405180910390f35b348015610cae57600080fd5b50610cc96004803603810190610cc49190614b07565b612935565b005b348015610cd757600080fd5b50610ce06129e7565b604051610ced9190615127565b60405180910390f35b348015610d0257600080fd5b50610d1d6004803603810190610d18919061493a565b6129ed565b604051610d2a9190614f6f565b60405180910390f35b348015610d3f57600080fd5b50610d5a6004803603810190610d559190614a67565b612a0d565b604051610d679190614f6f565b60405180910390f35b348015610d7c57600080fd5b50610d976004803603810190610d929190614b61565b612a2c565b005b348015610da557600080fd5b50610dae612b0c565b604051610dbb9190615127565b60405180910390f35b348015610dd057600080fd5b50610deb6004803603810190610de69190614b07565b612b12565b005b348015610df957600080fd5b50610e02612bfb565b604051610e0f9190615127565b60405180910390f35b348015610e2457600080fd5b50610e2d612c01565b604051610e3a9190614eaf565b60405180910390f35b348015610e4f57600080fd5b50610e58612c27565b604051610e659190615127565b60405180910390f35b348015610e7a57600080fd5b50610e956004803603810190610e90919061493a565b612c2d565b604051610ea29190614f6f565b60405180910390f35b348015610eb757600080fd5b50610ec0612c4d565b604051610ecd9190615127565b60405180910390f35b348015610ee257600080fd5b50610eeb612c53565b604051610ef89190614eca565b60405180910390f35b348015610f0d57600080fd5b50610f16612c79565b604051610f239190614f6f565b60405180910390f35b348015610f3857600080fd5b50610f41612c8c565b604051610f4e9190615127565b60405180910390f35b348015610f6357600080fd5b50610f7e6004803603810190610f799190614994565b612c92565b604051610f8b9190615127565b60405180910390f35b348015610fa057600080fd5b50610fbb6004803603810190610fb69190614b34565b612d19565b005b348015610fc957600080fd5b50610fe46004803603810190610fdf9190614a27565b612db8565b005b348015610ff257600080fd5b50610ffb612ea8565b6040516110089190615127565b60405180910390f35b34801561101d57600080fd5b5061103860048036038101906110339190614b34565b612eae565b005b34801561104657600080fd5b50611061600480360381019061105c919061493a565b612f4d565b005b34801561106f57600080fd5b5061108a60048036038101906110859190614a27565b61310f565b005b34801561109857600080fd5b506110a16131ff565b6040516110ae9190614f6f565b60405180910390f35b6110bf613270565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461114c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611143906150c7565b60405180910390fd5b80600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6111af613270565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461123c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611233906150c7565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60606003805461128f90615433565b80601f01602080910402602001604051908101604052809291908181526020018280546112bb90615433565b80156113085780601f106112dd57610100808354040283529160200191611308565b820191906000526020600020905b8154815290600101906020018083116112eb57829003601f168201915b5050505050905090565b600061132661131f613270565b8484613278565b6001905092915050565b611338613270565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113bc906150c7565b60405180910390fd5b8260158190555081601681905550806017819055506114056017546113f760165460155461321290919063ffffffff16565b61321290919063ffffffff16565b601c81905550505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600c54905090565b602260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601e54905090565b611478613270565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611505576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114fc906150c7565b60405180910390fd5b82601281905550816013819055508060148190555061154560145461153760135460125461321290919063ffffffff16565b61321290919063ffffffff16565b601b81905550505050565b611558613270565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115dc906150c7565b60405180910390fd5b80600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600061164d848484613443565b5061170f8461165a613270565b61170a856040518060600160405280602881526020016158d660289139600960008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006116c0613270565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613bc69092919063ffffffff16565b613278565b600190509392505050565b611722613270565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a6906150c7565b60405180910390fd5b80602360176101000a81548160ff02191690831515021790555050565b7f000000000000000000000000000000000000000000000000000000000000dead81565b6117f8613270565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611885576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187c906150c7565b60405180910390fd5b80601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600061191f61190e7f000000000000000000000000000000000000000000000000000000000000dead6123a0565b601e54613c2a90919063ffffffff16565b905090565b61192c613270565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b0906150c7565b60405180910390fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600043905090565b6000600560009054906101000a900460ff16905090565b6000611ac5611a29613270565b84611ac08560096000611a3a613270565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461321290919063ffffffff16565b613278565b6001905092915050565b611ad7613270565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5b906150c7565b60405180910390fd5b8060218190555050565b600e6020528060005260406000206000915054906101000a900460ff1681565b60106020528060005260406000206000915054906101000a900460ff1681565b602360159054906101000a900460ff1681565b611bc9613270565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4d906150c7565b60405180910390fd5b80600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611ca2613270565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d26906150c7565b60405180910390fd5b60c98383905010611d3f57600080fd5b60005b83839050811015611ddc578160116000868685818110611d6557611d6461553b565b5b9050602002016020810190611d7a919061493a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080611dd590615465565b9050611d42565b50505050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a6020528060005260406000206000915054906101000a900460ff1681565b600042905090565b60185481565b6000611e40613270565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ecd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec4906150c7565b60405180910390fd5b60008290508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015611f1857600080fd5b505afa158015611f2c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f509190614967565b73ffffffffffffffffffffffffffffffffffffffff1663e6a43905308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611fb257600080fd5b505afa158015611fc6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fea9190614967565b6040518363ffffffff1660e01b8152600401612007929190614ee5565b60206040518083038186803b15801561201f57600080fd5b505afa158015612033573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120579190614967565b9150600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612218578073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156120d457600080fd5b505afa1580156120e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061210c9190614967565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561216e57600080fd5b505afa158015612182573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121a69190614967565b6040518363ffffffff1660e01b81526004016121c3929190614ee5565b602060405180830381600087803b1580156121dd57600080fd5b505af11580156121f1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122159190614967565b91505b81602360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080602260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600b6000602360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160106000602360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050919050565b60195481565b600c5481565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b601f5481565b6123f7613270565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612484576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247b906150c7565b60405180910390fd5b80600f8190555050565b60205481565b601c5481565b6124a2613270565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461252f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612526906150c7565b60405180910390fd5b80601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60155481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6125c1613270565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461264e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612645906150c7565b60405180910390fd5b80600760146101000a81548160ff02191690831515021790555050565b612673613270565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612700576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126f7906150c7565b60405180910390fd5b61dead73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a361dead6000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6060600480546127cf90615433565b80601f01602080910402602001604051908101604052809291908181526020018280546127fb90615433565b80156128485780601f1061281d57610100808354040283529160200191612848565b820191906000526020600020905b81548152906001019060200180831161282b57829003601f168201915b5050505050905090565b6000602154905090565b601d5481565b600061292561286f613270565b84612920856040518060600160405280602581526020016158fe6025913960096000612899613270565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613bc69092919063ffffffff16565b613278565b6001905092915050565b600f5481565b61293d613270565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146129ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129c1906150c7565b60405180910390fd5b80602360166101000a81548160ff02191690831515021790555050565b601a5481565b60116020528060005260406000206000915054906101000a900460ff1681565b6000612a21612a1a613270565b8484613443565b506001905092915050565b612a34613270565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612ac1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ab8906150c7565b60405180910390fd5b826018819055508160198190555080601a81905550612b01601a54612af360195460185461321290919063ffffffff16565b61321290919063ffffffff16565b601d81905550505050565b60145481565b612b1a613270565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612ba7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b9e906150c7565b60405180910390fd5b80602360156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15981604051612bf09190614f6f565b60405180910390a150565b60135481565b602360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60165481565b600b6020528060005260406000206000915054906101000a900460ff1681565b60175481565b600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b602360169054906101000a900460ff1681565b60125481565b6000600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b612d21613270565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612dae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612da5906150c7565b60405180910390fd5b80601f8190555050565b612dc0613270565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612e4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e44906150c7565b60405180910390fd5b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601b5481565b612eb6613270565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612f43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f3a906150c7565b60405180910390fd5b8060208190555050565b612f55613270565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612fe2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fd9906150c7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415613052576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161304990615027565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b613117613270565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146131a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161319b906150c7565b60405180910390fd5b80600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b602360179054906101000a900460ff1681565b6000808284613221919061523c565b905083811015613266576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161325d90615067565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156132e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132df90615107565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613358576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161334f90615047565b60405180910390fd5b80600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516134369190615127565b60405180910390a3505050565b60008073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156134b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134ab906150e7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613524576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161351b90614fc7565b60405180910390fd5b600760149054906101000a900460ff166135ae57613540612590565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16146135ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135a490615007565b60405180910390fd5b5b602360149054906101000a900460ff16156135d5576135ce848484613c74565b9050613bbf565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614801561367f5750602360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b1561368c5743600c819055505b602360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561375257600f54600c546136f2919061523c565b4311613751576001600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b5b61375a612590565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141580156137c85750613798612590565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b156137d8576137d78483613e47565b5b60006137e3306123a0565b9050600060215482101590508080156138095750602360149054906101000a900460ff16155b801561385f5750601060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156138775750602360159054906101000a900460ff165b156138a157602360169054906101000a900460ff16156138975760215491505b6138a082613f71565b5b61392a846040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600860008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613bc69092919063ffffffff16565b600860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680613a105750600a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b613a2457613a1f878787614162565b613a26565b845b9050602360179054906101000a900460ff168015613a8e5750600b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613abd57602054613ab182613aa3896123a0565b61321290919063ffffffff16565b1115613abc57600080fd5b5b613b0f81600860008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461321290919063ffffffff16565b600860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613baf9190615127565b60405180910390a3600193505050505b9392505050565b6000838311158290613c0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c059190614fa5565b60405180910390fd5b5060008385613c1d919061531d565b9050809150509392505050565b6000613c6c83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613bc6565b905092915050565b6000613cff826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613bc69092919063ffffffff16565b600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613d9482600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461321290919063ffffffff16565b600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613e349190615127565b60405180910390a3600190509392505050565b600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613ed4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613ecb90615087565b60405180910390fd5b601f5481111580613f2e5750600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b613f6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613f6490614fe7565b60405180910390fd5b5050565b6001602360146101000a81548160ff0219169083151502179055506000613fca6002613fbc601d54613fae6018548761438990919063ffffffff16565b61440490919063ffffffff16565b61440490919063ffffffff16565b90506000613fe18284613c2a90919063ffffffff16565b9050613fec8161444e565b6000479050600061401d61400c600260185461440490919063ffffffff16565b601d54613c2a90919063ffffffff16565b9050600061405b600261404d8461403f6018548861438990919063ffffffff16565b61440490919063ffffffff16565b61440490919063ffffffff16565b9050600061408683614078601a548761438990919063ffffffff16565b61440490919063ffffffff16565b905060006140af826140a18588613c2a90919063ffffffff16565b613c2a90919063ffffffff16565b905060008111156140e7576140e6600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16826146d9565b5b600082111561411d5761411c600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836146d9565b5b60008311801561412d5750600087115b1561413d5761413c8784614724565b5b505050505050506000602360146101000a81548160ff02191690831515021790555050565b60008060009050601060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156141ea576141e360646141d5601b548661438990919063ffffffff16565b61440490919063ffffffff16565b9050614268565b601060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615614267576142646064614256601c548661438990919063ffffffff16565b61440490919063ffffffff16565b90505b5b600081111561436c576142c381600860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461321290919063ffffffff16565b600860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516143639190615127565b60405180910390a35b61437f8184613c2a90919063ffffffff16565b9150509392505050565b60008083141561439c57600090506143fe565b600082846143aa91906152c3565b90508284826143b99190615292565b146143f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016143f0906150a7565b60405180910390fd5b809150505b92915050565b600061444683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250614818565b905092915050565b6000600267ffffffffffffffff81111561446b5761446a61556a565b5b6040519080825280602002602001820160405280156144995781602001602082028036833780820191505090505b50905030816000815181106144b1576144b061553b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050602260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561455357600080fd5b505afa158015614567573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061458b9190614967565b8160018151811061459f5761459e61553b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061460630602260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684613278565b602260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161466a959493929190615172565b600060405180830381600087803b15801561468457600080fd5b505af1158015614698573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a782826040516146cd929190615142565b60405180910390a15050565b8173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561471f573d6000803e3d6000fd5b505050565b61475130602260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684613278565b602260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061479d612590565b426040518863ffffffff1660e01b81526004016147bf96959493929190614f0e565b6060604051808303818588803b1580156147d857600080fd5b505af11580156147ec573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906148119190614bb4565b5050505050565b6000808311829061485f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016148569190614fa5565b60405180910390fd5b506000838561486e9190615292565b9050809150509392505050565b60008135905061488a81615890565b92915050565b60008151905061489f81615890565b92915050565b60008083601f8401126148bb576148ba61559e565b5b8235905067ffffffffffffffff8111156148d8576148d7615599565b5b6020830191508360208202830111156148f4576148f36155a3565b5b9250929050565b60008135905061490a816158a7565b92915050565b60008135905061491f816158be565b92915050565b600081519050614934816158be565b92915050565b6000602082840312156149505761494f6155ad565b5b600061495e8482850161487b565b91505092915050565b60006020828403121561497d5761497c6155ad565b5b600061498b84828501614890565b91505092915050565b600080604083850312156149ab576149aa6155ad565b5b60006149b98582860161487b565b92505060206149ca8582860161487b565b9150509250929050565b6000806000606084860312156149ed576149ec6155ad565b5b60006149fb8682870161487b565b9350506020614a0c8682870161487b565b9250506040614a1d86828701614910565b9150509250925092565b60008060408385031215614a3e57614a3d6155ad565b5b6000614a4c8582860161487b565b9250506020614a5d858286016148fb565b9150509250929050565b60008060408385031215614a7e57614a7d6155ad565b5b6000614a8c8582860161487b565b9250506020614a9d85828601614910565b9150509250929050565b600080600060408486031215614ac057614abf6155ad565b5b600084013567ffffffffffffffff811115614ade57614add6155a8565b5b614aea868287016148a5565b93509350506020614afd868287016148fb565b9150509250925092565b600060208284031215614b1d57614b1c6155ad565b5b6000614b2b848285016148fb565b91505092915050565b600060208284031215614b4a57614b496155ad565b5b6000614b5884828501614910565b91505092915050565b600080600060608486031215614b7a57614b796155ad565b5b6000614b8886828701614910565b9350506020614b9986828701614910565b9250506040614baa86828701614910565b9150509250925092565b600080600060608486031215614bcd57614bcc6155ad565b5b6000614bdb86828701614925565b9350506020614bec86828701614925565b9250506040614bfd86828701614925565b9150509250925092565b6000614c138383614c2e565b60208301905092915050565b614c2881615363565b82525050565b614c3781615351565b82525050565b614c4681615351565b82525050565b6000614c57826151f7565b614c61818561521a565b9350614c6c836151e7565b8060005b83811015614c9d578151614c848882614c07565b9750614c8f8361520d565b925050600181019050614c70565b5085935050505092915050565b614cb381615375565b82525050565b614cc2816153b8565b82525050565b614cd1816153ca565b82525050565b6000614ce282615202565b614cec818561522b565b9350614cfc818560208601615400565b614d05816155b2565b840191505092915050565b6000614d1d60238361522b565b9150614d28826155c3565b604082019050919050565b6000614d4060118361522b565b9150614d4b82615612565b602082019050919050565b6000614d63603f8361522b565b9150614d6e8261563b565b604082019050919050565b6000614d8660268361522b565b9150614d918261568a565b604082019050919050565b6000614da960228361522b565b9150614db4826156d9565b604082019050919050565b6000614dcc601b8361522b565b9150614dd782615728565b602082019050919050565b6000614def60138361522b565b9150614dfa82615751565b602082019050919050565b6000614e1260218361522b565b9150614e1d8261577a565b604082019050919050565b6000614e3560208361522b565b9150614e40826157c9565b602082019050919050565b6000614e5860258361522b565b9150614e63826157f2565b604082019050919050565b6000614e7b60248361522b565b9150614e8682615841565b604082019050919050565b614e9a816153a1565b82525050565b614ea9816153ab565b82525050565b6000602082019050614ec46000830184614c3d565b92915050565b6000602082019050614edf6000830184614c1f565b92915050565b6000604082019050614efa6000830185614c3d565b614f076020830184614c3d565b9392505050565b600060c082019050614f236000830189614c3d565b614f306020830188614e91565b614f3d6040830187614cc8565b614f4a6060830186614cc8565b614f576080830185614c3d565b614f6460a0830184614e91565b979650505050505050565b6000602082019050614f846000830184614caa565b92915050565b6000602082019050614f9f6000830184614cb9565b92915050565b60006020820190508181036000830152614fbf8184614cd7565b905092915050565b60006020820190508181036000830152614fe081614d10565b9050919050565b6000602082019050818103600083015261500081614d33565b9050919050565b6000602082019050818103600083015261502081614d56565b9050919050565b6000602082019050818103600083015261504081614d79565b9050919050565b6000602082019050818103600083015261506081614d9c565b9050919050565b6000602082019050818103600083015261508081614dbf565b9050919050565b600060208201905081810360008301526150a081614de2565b9050919050565b600060208201905081810360008301526150c081614e05565b9050919050565b600060208201905081810360008301526150e081614e28565b9050919050565b6000602082019050818103600083015261510081614e4b565b9050919050565b6000602082019050818103600083015261512081614e6e565b9050919050565b600060208201905061513c6000830184614e91565b92915050565b60006040820190506151576000830185614e91565b81810360208301526151698184614c4c565b90509392505050565b600060a0820190506151876000830188614e91565b6151946020830187614cc8565b81810360408301526151a68186614c4c565b90506151b56060830185614c3d565b6151c26080830184614e91565b9695505050505050565b60006020820190506151e16000830184614ea0565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000615247826153a1565b9150615252836153a1565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115615287576152866154ae565b5b828201905092915050565b600061529d826153a1565b91506152a8836153a1565b9250826152b8576152b76154dd565b5b828204905092915050565b60006152ce826153a1565b91506152d9836153a1565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615615312576153116154ae565b5b828202905092915050565b6000615328826153a1565b9150615333836153a1565b925082821015615346576153456154ae565b5b828203905092915050565b600061535c82615381565b9050919050565b600061536e82615381565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006153c3826153dc565b9050919050565b60006153d5826153a1565b9050919050565b60006153e7826153ee565b9050919050565b60006153f982615381565b9050919050565b60005b8381101561541e578082015181840152602081019050615403565b8381111561542d576000848401525b50505050565b6000600282049050600182168061544b57607f821691505b6020821081141561545f5761545e61550c565b5b50919050565b6000615470826153a1565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156154a3576154a26154ae565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f5458204c696d6974204578636565646564000000000000000000000000000000600082015250565b7f544f4b454e3a2054686973206163636f756e742063616e6e6f742073656e642060008201527f746f6b656e7320756e74696c2074726164696e6720697320656e61626c656400602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b7f46726f6d2063616e6e6f7420626520626f742100000000000000000000000000600082015250565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b61589981615351565b81146158a457600080fd5b50565b6158b081615375565b81146158bb57600080fd5b50565b6158c7816153a1565b81146158d257600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220c8daa01ebf56d9df8f8f036e762c2de174be28ec29fdf810ed6a4c99727e9d0264736f6c63430008070033

Deployed Bytecode Sourcemap

14439:16739:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23711:109;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23504:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18430:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19724:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20998:340;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14796:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23830:80;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16356:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18707:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20657:333;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21960:135;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25235:313;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21839:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14897:81;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23091:135;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22945:128;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22492:129;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23918:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18616:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19093:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22213:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15377:38;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15458:45;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16471:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22345:139;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23234:260;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14985:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15175:50;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6508:90;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15822:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24151:807;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15863:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15293:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18815:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16150:58;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23612:91;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16216:58;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15987:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20238:129;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15696:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5792:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30210:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6017:227;;;;;;;;;;;;;:::i;:::-;;18521:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19596:120;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16032:44;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19319:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15424:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22808:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15904:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15510:50;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25060:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21350:358;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15653:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22629:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15611:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16404:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15739:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15232:52;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15782:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14690:99;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16518:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15569:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18942:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21720:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20514:135;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15943:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22103:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6252:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20375:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16570:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23711:109;5936:12;:10;:12::i;:::-;5926:22;;:6;;;;;;;;;;:22;;;5918:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23806:6:::1;23790:5;:13;23796:6;23790:13;;;;;;;;;;;;;;;;:22;;;;;;;;;;;;;;;;;;23711:109:::0;;:::o;23504:100::-;5936:12;:10;:12::i;:::-;5926:22;;:6;;;;;;;;;;:22;;;5918:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23587:9:::1;23576:8;;:20;;;;;;;;;;;;;;;;;;23504:100:::0;:::o;18430:83::-;18467:13;18500:5;18493:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18430:83;:::o;19724:161::-;19799:4;19816:39;19825:12;:10;:12::i;:::-;19839:7;19848:6;19816:8;:39::i;:::-;19873:4;19866:11;;19724:161;;;;:::o;20998:340::-;5936:12;:10;:12::i;:::-;5926:22;;:6;;;;;;;;;;:22;;;5918:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21141:15:::1;21121:17;:35;;;;21187:15;21167:17;:35;;;;21228:10;21213:12;:25;;;;21272:58;21317:12;;21272:40;21294:17;;21272;;:21;;:40;;;;:::i;:::-;:44;;:58;;;;:::i;:::-;21251:18;:79;;;;20998:340:::0;;;:::o;14796:94::-;;;;;;;;;;;;;:::o;23830:80::-;23871:7;23898:4;;23891:11;;23830:80;:::o;16356:41::-;;;;;;;;;;;;;:::o;18707:100::-;18760:7;18787:12;;18780:19;;18707:100;:::o;20657:333::-;5936:12;:10;:12::i;:::-;5926:22;;:6;;;;;;;;;;:22;;;5918:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20799:15:::1;20780:16;:34;;;;20844:15;20825:16;:34;;;;20884:10;20870:11;:24;;;;20927:55;20970:11;;20927:38;20948:16;;20927;;:20;;:38;;;;:::i;:::-;:42;;:55;;;;:::i;:::-;20907:17;:75;;;;20657:333:::0;;;:::o;21960:135::-;5936:12;:10;:12::i;:::-;5926:22;;:6;;;;;;;;;;:22;;;5918:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22081:6:::1;22051:19;:27;22071:6;22051:27;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;21960:135:::0;;:::o;25235:313::-;25333:4;25350:36;25360:6;25368:9;25379:6;25350:9;:36::i;:::-;;25397:121;25406:6;25414:12;:10;:12::i;:::-;25428:89;25466:6;25428:89;;;;;;;;;;;;;;;;;:11;:19;25440:6;25428:19;;;;;;;;;;;;;;;:33;25448:12;:10;:12::i;:::-;25428:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;25397:8;:121::i;:::-;25536:4;25529:11;;25235:313;;;;;:::o;21839:113::-;5936:12;:10;:12::i;:::-;5926:22;;:6;;;;;;;;;;:22;;;5918:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21936:8:::1;21917:16;;:27;;;;;;;;;;;;;;;;;;21839:113:::0;:::o;14897:81::-;;;:::o;23091:135::-;5936:12;:10;:12::i;:::-;5926:22;;:6;;;;;;;;;;:22;;;5918:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23210:8:::1;23181:17;:26;23199:7;23181:26;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;23091:135:::0;;:::o;22945:128::-;22998:7;23025:40;23042:22;23052:11;23042:9;:22::i;:::-;23025:12;;:16;;:40;;;;:::i;:::-;23018:47;;22945:128;:::o;22492:129::-;5936:12;:10;:12::i;:::-;5926:22;;:6;;;;;;;;;;:22;;;5918:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22602:10:::1;22574:17;;:39;;;;;;;;;;;;;;;;;;22492:129:::0;:::o;23918:87::-;23958:7;23985:12;23978:19;;23918:87;:::o;18616:83::-;18657:5;18682:9;;;;;;;;;;;18675:16;;18616:83;:::o;19093:218::-;19181:4;19198:83;19207:12;:10;:12::i;:::-;19221:7;19230:50;19269:10;19230:11;:25;19242:12;:10;:12::i;:::-;19230:25;;;;;;;;;;;;;;;:34;19256:7;19230:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;19198:8;:83::i;:::-;19299:4;19292:11;;19093:218;;;;:::o;22213:124::-;5936:12;:10;:12::i;:::-;5926:22;;:6;;;;;;;;;;:22;;;5918:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22321:8:::1;22295:23;:34;;;;22213:124:::0;:::o;15377:38::-;;;;;;;;;;;;;;;;;;;;;;:::o;15458:45::-;;;;;;;;;;;;;;;;;;;;;;:::o;16471:40::-;;;;;;;;;;;;;:::o;22345:139::-;5936:12;:10;:12::i;:::-;5926:22;;:6;;;;;;;;;;:22;;;5918:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22465:10:::1;22432:22;;:44;;;;;;;;;;;;;;;;;;22345:139:::0;:::o;23234:260::-;5936:12;:10;:12::i;:::-;5926:22;;:6;;;;;;;;;;:22;;;5918:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23362:3:::1;23343:9;;:16;;:22;23335:31;;;::::0;::::1;;23382:9;23377:110;23397:9;;:16;;23393:1;:20;23377:110;;;23469:6;23435:17;:31;23453:9;;23463:1;23453:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;23435:31;;;;;;;;;;;;;;;;:40;;;;;;;;;;;;;;;;;;23415:3;;;;:::i;:::-;;;23377:110;;;;23234:260:::0;;;:::o;14985:23::-;;;;;;;;;;;;;:::o;15175:50::-;;;;;;;;;;;;;;;;;;;;;;:::o;6508:90::-;6548:7;6575:15;6568:22;;6508:90;:::o;15822:34::-;;;;:::o;24151:807::-;24231:22;5936:12;:10;:12::i;:::-;5926:22;;:6;;;;;;;;;;:22;;;5918:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24268:35:::1;24325:16;24268:74;;24391:16;:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24373:53;;;24435:4;24442:16;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24373:93;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24356:110;;24508:1;24482:28;;:14;:28;;;24479:225;;;24596:16;:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24578:74;;;24661:4;24668:16;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24578:114;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24561:131;;24479:225;24730:14;24716:11;;:28;;;;;;;;;;;;;;;;;;24796:16;24778:15;;:34;;;;;;;;;;;;;;;;;;24894:4;24850:19;:41;24878:11;;;;;;;;;;;24850:41;;;;;;;;;;;;;;;;:48;;;;;;;;;;;;;;;;;;24946:4;24909:12;:34;24930:11;;;;;;;;;;;24909:34;;;;;;;;;;;;;;;;:41;;;;;;;;;;;;;;;;;;24255:703;24151:807:::0;;;:::o;15863:34::-;;;;:::o;15293:23::-;;;;:::o;18815:119::-;18881:7;18908:9;:18;18918:7;18908:18;;;;;;;;;;;;;;;;18901:25;;18815:119;;;:::o;16150:58::-;;;;:::o;23612:91::-;5936:12;:10;:12::i;:::-;5926:22;;:6;;;;;;;;;;:22;;;5918:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23688:7:::1;23679:6;:16;;;;23612:91:::0;:::o;16216:58::-;;;;:::o;15987:38::-;;;;:::o;20238:129::-;5936:12;:10;:12::i;:::-;5926:22;;:6;;;;;;;;;;:22;;;5918:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20351:8:::1;20327:12;:21;20340:7;20327:21;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;20238:129:::0;;:::o;15696:36::-;;;;:::o;5792:79::-;5830:7;5857:6;;;;;;;;;;;5850:13;;5792:79;:::o;30210:101::-;5936:12;:10;:12::i;:::-;5926:22;;:6;;;;;;;;;;:22;;;5918:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;30291:12:::1;30277:11;;:26;;;;;;;;;;;;;;;;;;30210:101:::0;:::o;6017:227::-;5936:12;:10;:12::i;:::-;5926:22;;:6;;;;;;;;;;:22;;;5918:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;6121:42:::1;6084:81;;6105:6;::::0;::::1;;;;;;;;6084:81;;;;;;;;;;;;6193:42;6176:6;::::0;:60:::1;;;;;;;;;;;;;;;;;;6017:227::o:0;18521:87::-;18560:13;18593:7;18586:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18521:87;:::o;19596:120::-;19658:7;19685:23;;19678:30;;19596:120;:::o;16032:44::-;;;;:::o;19319:269::-;19412:4;19429:129;19438:12;:10;:12::i;:::-;19452:7;19461:96;19500:15;19461:96;;;;;;;;;;;;;;;;;:11;:25;19473:12;:10;:12::i;:::-;19461:25;;;;;;;;;;;;;;;:34;19487:7;19461:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;19429:8;:129::i;:::-;19576:4;19569:11;;19319:269;;;;:::o;15424:25::-;;;;:::o;22808:125::-;5936:12;:10;:12::i;:::-;5926:22;;:6;;;;;;;;;;:22;;;5918:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22917:8:::1;22889:25;;:36;;;;;;;;;;;;;;;;;;22808:125:::0;:::o;15904:30::-;;;;:::o;15510:50::-;;;;;;;;;;;;;;;;;;;;;;:::o;25060:167::-;25138:4;25155:42;25165:12;:10;:12::i;:::-;25179:9;25190:6;25155:9;:42::i;:::-;;25215:4;25208:11;;25060:167;;;;:::o;21350:358::-;5936:12;:10;:12::i;:::-;5926:22;;:6;;;;;;;;;;:22;;;5918:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21509:17:::1;21491:15;:35;;;;21555:17;21537:15;:35;;;;21596:12;21583:10;:25;;;;21648:52;21689:10;;21648:36;21668:15;;21648;;:19;;:36;;;;:::i;:::-;:40;;:52;;;;:::i;:::-;21621:24;:79;;;;21350:358:::0;;;:::o;15653:30::-;;;;:::o;22629:171::-;5936:12;:10;:12::i;:::-;5926:22;;:6;;;;;;;;;;:22;;;5918:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22730:8:::1;22706:21;;:32;;;;;;;;;;;;;;;;;;22754:38;22783:8;22754:38;;;;;;:::i;:::-;;;;;;;;22629:171:::0;:::o;15611:35::-;;;;:::o;16404:26::-;;;;;;;;;;;;;:::o;15739:36::-;;;;:::o;15232:52::-;;;;;;;;;;;;;;;;;;;;;;:::o;15782:31::-;;;;:::o;14690:99::-;;;;;;;;;;;;;:::o;16518:45::-;;;;;;;;;;;;;:::o;15569:35::-;;;;:::o;18942:143::-;19023:7;19050:11;:18;19062:5;19050:18;;;;;;;;;;;;;;;:27;19069:7;19050:27;;;;;;;;;;;;;;;;19043:34;;18942:143;;;;:::o;21720:111::-;5936:12;:10;:12::i;:::-;5926:22;;:6;;;;;;;;;;:22;;;5918:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21812:11:::1;21797:12;:26;;;;21720:111:::0;:::o;20514:135::-;5936:12;:10;:12::i;:::-;5926:22;;:6;;;;;;;;;;:22;;;5918:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20633:8:::1;20604:17;:26;20622:7;20604:26;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;20514:135:::0;;:::o;15943:37::-;;;;:::o;22103:102::-;5936:12;:10;:12::i;:::-;5926:22;;:6;;;;;;;;;;:22;;;5918:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22189:8:::1;22175:10;:22;;;;22103:102:::0;:::o;6252:244::-;5936:12;:10;:12::i;:::-;5926:22;;:6;;;;;;;;;;:22;;;5918:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;6361:1:::1;6341:22;;:8;:22;;;;6333:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;6451:8;6422:38;;6443:6;::::0;::::1;;;;;;;;6422:38;;;;;;;;;;;;6480:8;6471:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;6252:244:::0;:::o;20375:127::-;5936:12;:10;:12::i;:::-;5926:22;;:6;;;;;;;;;;:22;;;5918:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20488:6:::1;20462:15;:23;20478:6;20462:23;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;20375:127:::0;;:::o;16570:36::-;;;;;;;;;;;;;:::o;1170:181::-;1228:7;1248:9;1264:1;1260;:5;;;;:::i;:::-;1248:17;;1289:1;1284;:6;;1276:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;1342:1;1335:8;;;1170:181;;;;:::o;102:115::-;155:15;198:10;183:26;;102:115;:::o;19893:337::-;20003:1;19986:19;;:5;:19;;;;19978:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20084:1;20065:21;;:7;:21;;;;20057:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20168:6;20138:11;:18;20150:5;20138:18;;;;;;;;;;;;;;;:27;20157:7;20138:27;;;;;;;;;;;;;;;:36;;;;20206:7;20190:32;;20199:5;20190:32;;;20215:6;20190:32;;;;;;:::i;:::-;;;;;;;;19893:337;;;:::o;25556:2046::-;25643:4;25688:1;25670:20;;:6;:20;;;;25662:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;25772:1;25751:23;;:9;:23;;;;25743:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;25859:11;;;;;;;;;;;25854:138;;25905:7;:5;:7::i;:::-;25895:17;;:6;:17;;;25887:93;;;;;;;;;;;;:::i;:::-;;;;;;;;;25854:138;26007:16;;;;;;;;;;;26004:1591;;;26057:41;26072:6;26080:9;26091:6;26057:14;:41::i;:::-;26050:48;;;;26004:1591;26161:8;;;;;;;;;;;26151:18;;:6;:18;;;:46;;;;;26186:11;;;;;;;;;;;26173:24;;:9;:24;;;26151:46;26148:96;;;26220:12;26213:4;:19;;;;26148:96;26270:11;;;;;;;;;;;26260:21;;:6;:21;;;26256:149;;;26326:6;;26319:4;;:13;;;;:::i;:::-;26302:12;:31;26298:96;;26374:4;26355:5;:16;26361:9;26355:16;;;;;;;;;;;;;;;;:23;;;;;;;;;;;;;;;;;;26298:96;26256:149;26431:7;:5;:7::i;:::-;26421:17;;:6;:17;;;;:41;;;;;26455:7;:5;:7::i;:::-;26442:20;;:9;:20;;;;26421:41;26417:75;;;26464:28;26478:6;26485;26464:13;:28::i;:::-;26417:75;26510:28;26541:24;26559:4;26541:9;:24::i;:::-;26510:55;;26580:28;26635:23;;26611:20;:47;;26580:78;;26691:23;:44;;;;;26719:16;;;;;;;;;;;26718:17;26691:44;:69;;;;;26740:12;:20;26753:6;26740:20;;;;;;;;;;;;;;;;;;;;;;;;;26739:21;26691:69;:94;;;;;26764:21;;;;;;;;;;;26691:94;26687:305;;;26823:25;;;;;;;;;;;26820:97;;;26894:23;;26871:46;;26820:97;26936:36;26951:20;26936:14;:36::i;:::-;26687:305;27028:53;27050:6;27028:53;;;;;;;;;;;;;;;;;:9;:17;27038:6;27028:17;;;;;;;;;;;;;;;;:21;;:53;;;;;:::i;:::-;27008:9;:17;27018:6;27008:17;;;;;;;;;;;;;;;:73;;;;27098:19;27121:17;:25;27139:6;27121:25;;;;;;;;;;;;;;;;;;;;;;;;;:57;;;;27150:17;:28;27168:9;27150:28;;;;;;;;;;;;;;;;;;;;;;;;;27121:57;27120:148;;27234:34;27242:6;27250:9;27261:6;27234:7;:34::i;:::-;27120:148;;;27225:6;27120:148;27098:170;;27288:16;;;;;;;;;;;:51;;;;;27309:19;:30;27329:9;27309:30;;;;;;;;;;;;;;;;;;;;;;;;;27308:31;27288:51;27285:133;;;27407:10;;27366:37;27391:11;27366:20;27376:9;27366;:20::i;:::-;:24;;:37;;;;:::i;:::-;:51;;27358:60;;;;;;27285:133;27458:37;27483:11;27458:9;:20;27468:9;27458:20;;;;;;;;;;;;;;;;:24;;:37;;;;:::i;:::-;27435:9;:20;27445:9;27435:20;;;;;;;;;;;;;;;:60;;;;27534:9;27517:40;;27526:6;27517:40;;;27545:11;27517:40;;;;;;:::i;:::-;;;;;;;;27579:4;27572:11;;;;;25556:2046;;;;;;:::o;1503:192::-;1589:7;1622:1;1617;:6;;1625:12;1609:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;1649:9;1665:1;1661;:5;;;;:::i;:::-;1649:17;;1686:1;1679:8;;;1503:192;;;;;:::o;1359:136::-;1417:7;1444:43;1448:1;1451;1444:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;1437:50;;1359:136;;;;:::o;27610:330::-;27703:4;27740:53;27762:6;27740:53;;;;;;;;;;;;;;;;;:9;:17;27750:6;27740:17;;;;;;;;;;;;;;;;:21;;:53;;;;;:::i;:::-;27720:9;:17;27730:6;27720:17;;;;;;;;;;;;;;;:73;;;;27827:32;27852:6;27827:9;:20;27837:9;27827:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;27804:9;:20;27814:9;27804:20;;;;;;;;;;;;;;;:55;;;;27892:9;27875:35;;27884:6;27875:35;;;27903:6;27875:35;;;;;;:::i;:::-;;;;;;;;27928:4;27921:11;;27610:330;;;;;:::o;30953:222::-;31040:5;:13;31046:6;31040:13;;;;;;;;;;;;;;;;;;;;;;;;;31039:14;31031:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;31106:12;;31096:6;:22;;:49;;;;31122:15;:23;31138:6;31122:23;;;;;;;;;;;;;;;;;;;;;;;;;31096:49;31088:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;30953:222;;:::o;27948:1048::-;17048:4;17029:16;;:23;;;;;;;;;;;;;;;;;;28030:19:::1;28052:65;28115:1;28052:58;28085:24;;28052:28;28064:15;;28052:7;:11;;:28;;;;:::i;:::-;:32;;:58;;;;:::i;:::-;:62;;:65;;;;:::i;:::-;28030:87;;28128:21;28152:24;28164:11;28152:7;:11;;:24;;;;:::i;:::-;28128:48;;28189:31;28206:13;28189:16;:31::i;:::-;28231:22;28256:21;28231:46;;28290:19;28312:52;28341:22;28361:1;28341:15;;:19;;:22;;;;:::i;:::-;28312:24;;:28;;:52;;;;:::i;:::-;28290:74;;28385:26;28414:59;28471:1;28414:52;28454:11;28414:35;28433:15;;28414:14;:18;;:35;;;;:::i;:::-;:39;;:52;;;;:::i;:::-;:56;;:59;;;;:::i;:::-;28385:88;;28484:21;28508:47;28543:11;28508:30;28527:10;;28508:14;:18;;:30;;;;:::i;:::-;:34;;:47;;;;:::i;:::-;28484:71;;28566:26;28595:57;28638:13;28595:38;28614:18;28595:14;:18;;:38;;;;:::i;:::-;:42;;:57;;;;:::i;:::-;28566:86;;28689:1;28668:18;:22;28665:104;;;28705:64;28726:22;;;;;;;;;;;28750:18;28705:20;:64::i;:::-;28665:104;28801:1;28785:13;:17;28782:89;;;28817:54;28838:17;;;;;;;;;;;28857:13;28817:20;:54::i;:::-;28782:89;28908:1;28887:18;:22;:41;;;;;28927:1;28913:11;:15;28887:41;28884:104;;;28943:45;28956:11;28969:18;28943:12;:45::i;:::-;28884:104;28009:987;;;;;;;17094:5:::0;17075:16;;:24;;;;;;;;;;;;;;;;;;27948:1048;:::o;30319:622::-;30405:7;30435:17;30455:1;30435:21;;30480:12;:20;30493:6;30480:20;;;;;;;;;;;;;;;;;;;;;;;;;30477:223;;;30529:38;30563:3;30529:29;30540:17;;30529:6;:10;;:29;;;;:::i;:::-;:33;;:38;;;;:::i;:::-;30517:50;;30477:223;;;30597:12;:23;30610:9;30597:23;;;;;;;;;;;;;;;;;;;;;;;;;30594:106;;;30649:39;30684:3;30649:30;30660:18;;30649:6;:10;;:30;;;;:::i;:::-;:34;;:39;;;;:::i;:::-;30637:51;;30594:106;30477:223;30735:1;30723:9;:13;30720:173;;;30780:39;30809:9;30780;:24;30798:4;30780:24;;;;;;;;;;;;;;;;:28;;:39;;;;:::i;:::-;30753:9;:24;30771:4;30753:24;;;;;;;;;;;;;;;:66;;;;30864:4;30839:42;;30848:6;30839:42;;;30871:9;30839:42;;;;;;:::i;:::-;;;;;;;;30720:173;30912:21;30923:9;30912:6;:10;;:21;;;;:::i;:::-;30905:28;;;30319:622;;;;;:::o;1703:250::-;1761:7;1790:1;1785;:6;1781:47;;;1815:1;1808:8;;;;1781:47;1840:9;1856:1;1852;:5;;;;:::i;:::-;1840:17;;1885:1;1880;1876;:5;;;;:::i;:::-;:10;1868:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;1944:1;1937:8;;;1703:250;;;;;:::o;1961:132::-;2019:7;2046:39;2050:1;2053;2046:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;2039:46;;1961:132;;;;:::o;29008:666::-;29134:21;29172:1;29158:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29134:40;;29203:4;29185;29190:1;29185:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;29229:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29219:4;29224:1;29219:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;29264:62;29281:4;29296:15;;;;;;;;;;;29314:11;29264:8;:62::i;:::-;29365:15;;;;;;;;;;;:66;;;29446:11;29472:1;29516:4;29543;29579:15;29365:240;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29631:35;29648:11;29661:4;29631:35;;;;;;;:::i;:::-;;;;;;;;29063:611;29008:666;:::o;24013:126::-;24105:9;:18;;:26;24124:6;24105:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24013:126;;:::o;29682:513::-;29830:62;29847:4;29862:15;;;;;;;;;;;29880:11;29830:8;:62::i;:::-;29935:15;;;;;;;;;;;:31;;;29974:9;30007:4;30027:11;30053:1;30096;30139:7;:5;:7::i;:::-;30161:15;29935:252;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;29682:513;;:::o;2101:278::-;2187:7;2219:1;2215;:5;2222:12;2207:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;2246:9;2262:1;2258;:5;;;;:::i;:::-;2246:17;;2370:1;2363:8;;;2101:278;;;;;:::o;7:139:1:-;53:5;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;7:139;;;;:::o;152:143::-;209:5;240:6;234:13;225:22;;256:33;283:5;256:33;:::i;:::-;152:143;;;;:::o;318:568::-;391:8;401:6;451:3;444:4;436:6;432:17;428:27;418:122;;459:79;;:::i;:::-;418:122;572:6;559:20;549:30;;602:18;594:6;591:30;588:117;;;624:79;;:::i;:::-;588:117;738:4;730:6;726:17;714:29;;792:3;784:4;776:6;772:17;762:8;758:32;755:41;752:128;;;799:79;;:::i;:::-;752:128;318:568;;;;;:::o;892:133::-;935:5;973:6;960:20;951:29;;989:30;1013:5;989:30;:::i;:::-;892:133;;;;:::o;1031:139::-;1077:5;1115:6;1102:20;1093:29;;1131:33;1158:5;1131:33;:::i;:::-;1031:139;;;;:::o;1176:143::-;1233:5;1264:6;1258:13;1249:22;;1280:33;1307:5;1280:33;:::i;:::-;1176:143;;;;:::o;1325:329::-;1384:6;1433:2;1421:9;1412:7;1408:23;1404:32;1401:119;;;1439:79;;:::i;:::-;1401:119;1559:1;1584:53;1629:7;1620:6;1609:9;1605:22;1584:53;:::i;:::-;1574:63;;1530:117;1325:329;;;;:::o;1660:351::-;1730:6;1779:2;1767:9;1758:7;1754:23;1750:32;1747:119;;;1785:79;;:::i;:::-;1747:119;1905:1;1930:64;1986:7;1977:6;1966:9;1962:22;1930:64;:::i;:::-;1920:74;;1876:128;1660:351;;;;:::o;2017:474::-;2085:6;2093;2142:2;2130:9;2121:7;2117:23;2113:32;2110:119;;;2148:79;;:::i;:::-;2110:119;2268:1;2293:53;2338:7;2329:6;2318:9;2314:22;2293:53;:::i;:::-;2283:63;;2239:117;2395:2;2421:53;2466:7;2457:6;2446:9;2442:22;2421:53;:::i;:::-;2411:63;;2366:118;2017:474;;;;;:::o;2497:619::-;2574:6;2582;2590;2639:2;2627:9;2618:7;2614:23;2610:32;2607:119;;;2645:79;;:::i;:::-;2607:119;2765:1;2790:53;2835:7;2826:6;2815:9;2811:22;2790:53;:::i;:::-;2780:63;;2736:117;2892:2;2918:53;2963:7;2954:6;2943:9;2939:22;2918:53;:::i;:::-;2908:63;;2863:118;3020:2;3046:53;3091:7;3082:6;3071:9;3067:22;3046:53;:::i;:::-;3036:63;;2991:118;2497:619;;;;;:::o;3122:468::-;3187:6;3195;3244:2;3232:9;3223:7;3219:23;3215:32;3212:119;;;3250:79;;:::i;:::-;3212:119;3370:1;3395:53;3440:7;3431:6;3420:9;3416:22;3395:53;:::i;:::-;3385:63;;3341:117;3497:2;3523:50;3565:7;3556:6;3545:9;3541:22;3523:50;:::i;:::-;3513:60;;3468:115;3122:468;;;;;:::o;3596:474::-;3664:6;3672;3721:2;3709:9;3700:7;3696:23;3692:32;3689:119;;;3727:79;;:::i;:::-;3689:119;3847:1;3872:53;3917:7;3908:6;3897:9;3893:22;3872:53;:::i;:::-;3862:63;;3818:117;3974:2;4000:53;4045:7;4036:6;4025:9;4021:22;4000:53;:::i;:::-;3990:63;;3945:118;3596:474;;;;;:::o;4076:698::-;4168:6;4176;4184;4233:2;4221:9;4212:7;4208:23;4204:32;4201:119;;;4239:79;;:::i;:::-;4201:119;4387:1;4376:9;4372:17;4359:31;4417:18;4409:6;4406:30;4403:117;;;4439:79;;:::i;:::-;4403:117;4552:80;4624:7;4615:6;4604:9;4600:22;4552:80;:::i;:::-;4534:98;;;;4330:312;4681:2;4707:50;4749:7;4740:6;4729:9;4725:22;4707:50;:::i;:::-;4697:60;;4652:115;4076:698;;;;;:::o;4780:323::-;4836:6;4885:2;4873:9;4864:7;4860:23;4856:32;4853:119;;;4891:79;;:::i;:::-;4853:119;5011:1;5036:50;5078:7;5069:6;5058:9;5054:22;5036:50;:::i;:::-;5026:60;;4982:114;4780:323;;;;:::o;5109:329::-;5168:6;5217:2;5205:9;5196:7;5192:23;5188:32;5185:119;;;5223:79;;:::i;:::-;5185:119;5343:1;5368:53;5413:7;5404:6;5393:9;5389:22;5368:53;:::i;:::-;5358:63;;5314:117;5109:329;;;;:::o;5444:619::-;5521:6;5529;5537;5586:2;5574:9;5565:7;5561:23;5557:32;5554:119;;;5592:79;;:::i;:::-;5554:119;5712:1;5737:53;5782:7;5773:6;5762:9;5758:22;5737:53;:::i;:::-;5727:63;;5683:117;5839:2;5865:53;5910:7;5901:6;5890:9;5886:22;5865:53;:::i;:::-;5855:63;;5810:118;5967:2;5993:53;6038:7;6029:6;6018:9;6014:22;5993:53;:::i;:::-;5983:63;;5938:118;5444:619;;;;;:::o;6069:663::-;6157:6;6165;6173;6222:2;6210:9;6201:7;6197:23;6193:32;6190:119;;;6228:79;;:::i;:::-;6190:119;6348:1;6373:64;6429:7;6420:6;6409:9;6405:22;6373:64;:::i;:::-;6363:74;;6319:128;6486:2;6512:64;6568:7;6559:6;6548:9;6544:22;6512:64;:::i;:::-;6502:74;;6457:129;6625:2;6651:64;6707:7;6698:6;6687:9;6683:22;6651:64;:::i;:::-;6641:74;;6596:129;6069:663;;;;;:::o;6738:179::-;6807:10;6828:46;6870:3;6862:6;6828:46;:::i;:::-;6906:4;6901:3;6897:14;6883:28;;6738:179;;;;:::o;6923:142::-;7026:32;7052:5;7026:32;:::i;:::-;7021:3;7014:45;6923:142;;:::o;7071:108::-;7148:24;7166:5;7148:24;:::i;:::-;7143:3;7136:37;7071:108;;:::o;7185:118::-;7272:24;7290:5;7272:24;:::i;:::-;7267:3;7260:37;7185:118;;:::o;7339:732::-;7458:3;7487:54;7535:5;7487:54;:::i;:::-;7557:86;7636:6;7631:3;7557:86;:::i;:::-;7550:93;;7667:56;7717:5;7667:56;:::i;:::-;7746:7;7777:1;7762:284;7787:6;7784:1;7781:13;7762:284;;;7863:6;7857:13;7890:63;7949:3;7934:13;7890:63;:::i;:::-;7883:70;;7976:60;8029:6;7976:60;:::i;:::-;7966:70;;7822:224;7809:1;7806;7802:9;7797:14;;7762:284;;;7766:14;8062:3;8055:10;;7463:608;;;7339:732;;;;:::o;8077:109::-;8158:21;8173:5;8158:21;:::i;:::-;8153:3;8146:34;8077:109;;:::o;8192:185::-;8306:64;8364:5;8306:64;:::i;:::-;8301:3;8294:77;8192:185;;:::o;8383:147::-;8478:45;8517:5;8478:45;:::i;:::-;8473:3;8466:58;8383:147;;:::o;8536:364::-;8624:3;8652:39;8685:5;8652:39;:::i;:::-;8707:71;8771:6;8766:3;8707:71;:::i;:::-;8700:78;;8787:52;8832:6;8827:3;8820:4;8813:5;8809:16;8787:52;:::i;:::-;8864:29;8886:6;8864:29;:::i;:::-;8859:3;8855:39;8848:46;;8628:272;8536:364;;;;:::o;8906:366::-;9048:3;9069:67;9133:2;9128:3;9069:67;:::i;:::-;9062:74;;9145:93;9234:3;9145:93;:::i;:::-;9263:2;9258:3;9254:12;9247:19;;8906:366;;;:::o;9278:::-;9420:3;9441:67;9505:2;9500:3;9441:67;:::i;:::-;9434:74;;9517:93;9606:3;9517:93;:::i;:::-;9635:2;9630:3;9626:12;9619:19;;9278:366;;;:::o;9650:::-;9792:3;9813:67;9877:2;9872:3;9813:67;:::i;:::-;9806:74;;9889:93;9978:3;9889:93;:::i;:::-;10007:2;10002:3;9998:12;9991:19;;9650:366;;;:::o;10022:::-;10164:3;10185:67;10249:2;10244:3;10185:67;:::i;:::-;10178:74;;10261:93;10350:3;10261:93;:::i;:::-;10379:2;10374:3;10370:12;10363:19;;10022:366;;;:::o;10394:::-;10536:3;10557:67;10621:2;10616:3;10557:67;:::i;:::-;10550:74;;10633:93;10722:3;10633:93;:::i;:::-;10751:2;10746:3;10742:12;10735:19;;10394:366;;;:::o;10766:::-;10908:3;10929:67;10993:2;10988:3;10929:67;:::i;:::-;10922:74;;11005:93;11094:3;11005:93;:::i;:::-;11123:2;11118:3;11114:12;11107:19;;10766:366;;;:::o;11138:::-;11280:3;11301:67;11365:2;11360:3;11301:67;:::i;:::-;11294:74;;11377:93;11466:3;11377:93;:::i;:::-;11495:2;11490:3;11486:12;11479:19;;11138:366;;;:::o;11510:::-;11652:3;11673:67;11737:2;11732:3;11673:67;:::i;:::-;11666:74;;11749:93;11838:3;11749:93;:::i;:::-;11867:2;11862:3;11858:12;11851:19;;11510:366;;;:::o;11882:::-;12024:3;12045:67;12109:2;12104:3;12045:67;:::i;:::-;12038:74;;12121:93;12210:3;12121:93;:::i;:::-;12239:2;12234:3;12230:12;12223:19;;11882:366;;;:::o;12254:::-;12396:3;12417:67;12481:2;12476:3;12417:67;:::i;:::-;12410:74;;12493:93;12582:3;12493:93;:::i;:::-;12611:2;12606:3;12602:12;12595:19;;12254:366;;;:::o;12626:::-;12768:3;12789:67;12853:2;12848:3;12789:67;:::i;:::-;12782:74;;12865:93;12954:3;12865:93;:::i;:::-;12983:2;12978:3;12974:12;12967:19;;12626:366;;;:::o;12998:118::-;13085:24;13103:5;13085:24;:::i;:::-;13080:3;13073:37;12998:118;;:::o;13122:112::-;13205:22;13221:5;13205:22;:::i;:::-;13200:3;13193:35;13122:112;;:::o;13240:222::-;13333:4;13371:2;13360:9;13356:18;13348:26;;13384:71;13452:1;13441:9;13437:17;13428:6;13384:71;:::i;:::-;13240:222;;;;:::o;13468:254::-;13577:4;13615:2;13604:9;13600:18;13592:26;;13628:87;13712:1;13701:9;13697:17;13688:6;13628:87;:::i;:::-;13468:254;;;;:::o;13728:332::-;13849:4;13887:2;13876:9;13872:18;13864:26;;13900:71;13968:1;13957:9;13953:17;13944:6;13900:71;:::i;:::-;13981:72;14049:2;14038:9;14034:18;14025:6;13981:72;:::i;:::-;13728:332;;;;;:::o;14066:807::-;14315:4;14353:3;14342:9;14338:19;14330:27;;14367:71;14435:1;14424:9;14420:17;14411:6;14367:71;:::i;:::-;14448:72;14516:2;14505:9;14501:18;14492:6;14448:72;:::i;:::-;14530:80;14606:2;14595:9;14591:18;14582:6;14530:80;:::i;:::-;14620;14696:2;14685:9;14681:18;14672:6;14620:80;:::i;:::-;14710:73;14778:3;14767:9;14763:19;14754:6;14710:73;:::i;:::-;14793;14861:3;14850:9;14846:19;14837:6;14793:73;:::i;:::-;14066:807;;;;;;;;;:::o;14879:210::-;14966:4;15004:2;14993:9;14989:18;14981:26;;15017:65;15079:1;15068:9;15064:17;15055:6;15017:65;:::i;:::-;14879:210;;;;:::o;15095:276::-;15215:4;15253:2;15242:9;15238:18;15230:26;;15266:98;15361:1;15350:9;15346:17;15337:6;15266:98;:::i;:::-;15095:276;;;;:::o;15377:313::-;15490:4;15528:2;15517:9;15513:18;15505:26;;15577:9;15571:4;15567:20;15563:1;15552:9;15548:17;15541:47;15605:78;15678:4;15669:6;15605:78;:::i;:::-;15597:86;;15377:313;;;;:::o;15696:419::-;15862:4;15900:2;15889:9;15885:18;15877:26;;15949:9;15943:4;15939:20;15935:1;15924:9;15920:17;15913:47;15977:131;16103:4;15977:131;:::i;:::-;15969:139;;15696:419;;;:::o;16121:::-;16287:4;16325:2;16314:9;16310:18;16302:26;;16374:9;16368:4;16364:20;16360:1;16349:9;16345:17;16338:47;16402:131;16528:4;16402:131;:::i;:::-;16394:139;;16121:419;;;:::o;16546:::-;16712:4;16750:2;16739:9;16735:18;16727:26;;16799:9;16793:4;16789:20;16785:1;16774:9;16770:17;16763:47;16827:131;16953:4;16827:131;:::i;:::-;16819:139;;16546:419;;;:::o;16971:::-;17137:4;17175:2;17164:9;17160:18;17152:26;;17224:9;17218:4;17214:20;17210:1;17199:9;17195:17;17188:47;17252:131;17378:4;17252:131;:::i;:::-;17244:139;;16971:419;;;:::o;17396:::-;17562:4;17600:2;17589:9;17585:18;17577:26;;17649:9;17643:4;17639:20;17635:1;17624:9;17620:17;17613:47;17677:131;17803:4;17677:131;:::i;:::-;17669:139;;17396:419;;;:::o;17821:::-;17987:4;18025:2;18014:9;18010:18;18002:26;;18074:9;18068:4;18064:20;18060:1;18049:9;18045:17;18038:47;18102:131;18228:4;18102:131;:::i;:::-;18094:139;;17821:419;;;:::o;18246:::-;18412:4;18450:2;18439:9;18435:18;18427:26;;18499:9;18493:4;18489:20;18485:1;18474:9;18470:17;18463:47;18527:131;18653:4;18527:131;:::i;:::-;18519:139;;18246:419;;;:::o;18671:::-;18837:4;18875:2;18864:9;18860:18;18852:26;;18924:9;18918:4;18914:20;18910:1;18899:9;18895:17;18888:47;18952:131;19078:4;18952:131;:::i;:::-;18944:139;;18671:419;;;:::o;19096:::-;19262:4;19300:2;19289:9;19285:18;19277:26;;19349:9;19343:4;19339:20;19335:1;19324:9;19320:17;19313:47;19377:131;19503:4;19377:131;:::i;:::-;19369:139;;19096:419;;;:::o;19521:::-;19687:4;19725:2;19714:9;19710:18;19702:26;;19774:9;19768:4;19764:20;19760:1;19749:9;19745:17;19738:47;19802:131;19928:4;19802:131;:::i;:::-;19794:139;;19521:419;;;:::o;19946:::-;20112:4;20150:2;20139:9;20135:18;20127:26;;20199:9;20193:4;20189:20;20185:1;20174:9;20170:17;20163:47;20227:131;20353:4;20227:131;:::i;:::-;20219:139;;19946:419;;;:::o;20371:222::-;20464:4;20502:2;20491:9;20487:18;20479:26;;20515:71;20583:1;20572:9;20568:17;20559:6;20515:71;:::i;:::-;20371:222;;;;:::o;20599:483::-;20770:4;20808:2;20797:9;20793:18;20785:26;;20821:71;20889:1;20878:9;20874:17;20865:6;20821:71;:::i;:::-;20939:9;20933:4;20929:20;20924:2;20913:9;20909:18;20902:48;20967:108;21070:4;21061:6;20967:108;:::i;:::-;20959:116;;20599:483;;;;;:::o;21088:831::-;21351:4;21389:3;21378:9;21374:19;21366:27;;21403:71;21471:1;21460:9;21456:17;21447:6;21403:71;:::i;:::-;21484:80;21560:2;21549:9;21545:18;21536:6;21484:80;:::i;:::-;21611:9;21605:4;21601:20;21596:2;21585:9;21581:18;21574:48;21639:108;21742:4;21733:6;21639:108;:::i;:::-;21631:116;;21757:72;21825:2;21814:9;21810:18;21801:6;21757:72;:::i;:::-;21839:73;21907:3;21896:9;21892:19;21883:6;21839:73;:::i;:::-;21088:831;;;;;;;;:::o;21925:214::-;22014:4;22052:2;22041:9;22037:18;22029:26;;22065:67;22129:1;22118:9;22114:17;22105:6;22065:67;:::i;:::-;21925:214;;;;:::o;22226:132::-;22293:4;22316:3;22308:11;;22346:4;22341:3;22337:14;22329:22;;22226:132;;;:::o;22364:114::-;22431:6;22465:5;22459:12;22449:22;;22364:114;;;:::o;22484:99::-;22536:6;22570:5;22564:12;22554:22;;22484:99;;;:::o;22589:113::-;22659:4;22691;22686:3;22682:14;22674:22;;22589:113;;;:::o;22708:184::-;22807:11;22841:6;22836:3;22829:19;22881:4;22876:3;22872:14;22857:29;;22708:184;;;;:::o;22898:169::-;22982:11;23016:6;23011:3;23004:19;23056:4;23051:3;23047:14;23032:29;;22898:169;;;;:::o;23073:305::-;23113:3;23132:20;23150:1;23132:20;:::i;:::-;23127:25;;23166:20;23184:1;23166:20;:::i;:::-;23161:25;;23320:1;23252:66;23248:74;23245:1;23242:81;23239:107;;;23326:18;;:::i;:::-;23239:107;23370:1;23367;23363:9;23356:16;;23073:305;;;;:::o;23384:185::-;23424:1;23441:20;23459:1;23441:20;:::i;:::-;23436:25;;23475:20;23493:1;23475:20;:::i;:::-;23470:25;;23514:1;23504:35;;23519:18;;:::i;:::-;23504:35;23561:1;23558;23554:9;23549:14;;23384:185;;;;:::o;23575:348::-;23615:7;23638:20;23656:1;23638:20;:::i;:::-;23633:25;;23672:20;23690:1;23672:20;:::i;:::-;23667:25;;23860:1;23792:66;23788:74;23785:1;23782:81;23777:1;23770:9;23763:17;23759:105;23756:131;;;23867:18;;:::i;:::-;23756:131;23915:1;23912;23908:9;23897:20;;23575:348;;;;:::o;23929:191::-;23969:4;23989:20;24007:1;23989:20;:::i;:::-;23984:25;;24023:20;24041:1;24023:20;:::i;:::-;24018:25;;24062:1;24059;24056:8;24053:34;;;24067:18;;:::i;:::-;24053:34;24112:1;24109;24105:9;24097:17;;23929:191;;;;:::o;24126:96::-;24163:7;24192:24;24210:5;24192:24;:::i;:::-;24181:35;;24126:96;;;:::o;24228:104::-;24273:7;24302:24;24320:5;24302:24;:::i;:::-;24291:35;;24228:104;;;:::o;24338:90::-;24372:7;24415:5;24408:13;24401:21;24390:32;;24338:90;;;:::o;24434:126::-;24471:7;24511:42;24504:5;24500:54;24489:65;;24434:126;;;:::o;24566:77::-;24603:7;24632:5;24621:16;;24566:77;;;:::o;24649:86::-;24684:7;24724:4;24717:5;24713:16;24702:27;;24649:86;;;:::o;24741:153::-;24818:9;24851:37;24882:5;24851:37;:::i;:::-;24838:50;;24741:153;;;:::o;24900:121::-;24958:9;24991:24;25009:5;24991:24;:::i;:::-;24978:37;;24900:121;;;:::o;25027:126::-;25077:9;25110:37;25141:5;25110:37;:::i;:::-;25097:50;;25027:126;;;:::o;25159:113::-;25209:9;25242:24;25260:5;25242:24;:::i;:::-;25229:37;;25159:113;;;:::o;25278:307::-;25346:1;25356:113;25370:6;25367:1;25364:13;25356:113;;;25455:1;25450:3;25446:11;25440:18;25436:1;25431:3;25427:11;25420:39;25392:2;25389:1;25385:10;25380:15;;25356:113;;;25487:6;25484:1;25481:13;25478:101;;;25567:1;25558:6;25553:3;25549:16;25542:27;25478:101;25327:258;25278:307;;;:::o;25591:320::-;25635:6;25672:1;25666:4;25662:12;25652:22;;25719:1;25713:4;25709:12;25740:18;25730:81;;25796:4;25788:6;25784:17;25774:27;;25730:81;25858:2;25850:6;25847:14;25827:18;25824:38;25821:84;;;25877:18;;:::i;:::-;25821:84;25642:269;25591:320;;;:::o;25917:233::-;25956:3;25979:24;25997:5;25979:24;:::i;:::-;25970:33;;26025:66;26018:5;26015:77;26012:103;;;26095:18;;:::i;:::-;26012:103;26142:1;26135:5;26131:13;26124:20;;25917:233;;;:::o;26156:180::-;26204:77;26201:1;26194:88;26301:4;26298:1;26291:15;26325:4;26322:1;26315:15;26342:180;26390:77;26387:1;26380:88;26487:4;26484:1;26477:15;26511:4;26508:1;26501:15;26528:180;26576:77;26573:1;26566:88;26673:4;26670:1;26663:15;26697:4;26694:1;26687:15;26714:180;26762:77;26759:1;26752:88;26859:4;26856:1;26849:15;26883:4;26880:1;26873:15;26900:180;26948:77;26945:1;26938:88;27045:4;27042:1;27035:15;27069:4;27066:1;27059:15;27086:117;27195:1;27192;27185:12;27209:117;27318:1;27315;27308:12;27332:117;27441:1;27438;27431:12;27455:117;27564:1;27561;27554:12;27578:117;27687:1;27684;27677:12;27701:102;27742:6;27793:2;27789:7;27784:2;27777:5;27773:14;27769:28;27759:38;;27701:102;;;:::o;27809:222::-;27949:34;27945:1;27937:6;27933:14;27926:58;28018:5;28013:2;28005:6;28001:15;27994:30;27809:222;:::o;28037:167::-;28177:19;28173:1;28165:6;28161:14;28154:43;28037:167;:::o;28210:250::-;28350:34;28346:1;28338:6;28334:14;28327:58;28419:33;28414:2;28406:6;28402:15;28395:58;28210:250;:::o;28466:225::-;28606:34;28602:1;28594:6;28590:14;28583:58;28675:8;28670:2;28662:6;28658:15;28651:33;28466:225;:::o;28697:221::-;28837:34;28833:1;28825:6;28821:14;28814:58;28906:4;28901:2;28893:6;28889:15;28882:29;28697:221;:::o;28924:177::-;29064:29;29060:1;29052:6;29048:14;29041:53;28924:177;:::o;29107:169::-;29247:21;29243:1;29235:6;29231:14;29224:45;29107:169;:::o;29282:220::-;29422:34;29418:1;29410:6;29406:14;29399:58;29491:3;29486:2;29478:6;29474:15;29467:28;29282:220;:::o;29508:182::-;29648:34;29644:1;29636:6;29632:14;29625:58;29508:182;:::o;29696:224::-;29836:34;29832:1;29824:6;29820:14;29813:58;29905:7;29900:2;29892:6;29888:15;29881:32;29696:224;:::o;29926:223::-;30066:34;30062:1;30054:6;30050:14;30043:58;30135:6;30130:2;30122:6;30118:15;30111:31;29926:223;:::o;30155:122::-;30228:24;30246:5;30228:24;:::i;:::-;30221:5;30218:35;30208:63;;30267:1;30264;30257:12;30208:63;30155:122;:::o;30283:116::-;30353:21;30368:5;30353:21;:::i;:::-;30346:5;30343:32;30333:60;;30389:1;30386;30379:12;30333:60;30283:116;:::o;30405:122::-;30478:24;30496:5;30478:24;:::i;:::-;30471:5;30468:35;30458:63;;30517:1;30514;30507:12;30458:63;30405:122;:::o

Swarm Source

ipfs://c8daa01ebf56d9df8f8f036e762c2de174be28ec29fdf810ed6a4c99727e9d02
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.