ETH Price: $2,698.52 (-2.42%)

Token

Santa Claus Inu (SANTA)
 

Overview

Max Total Supply

1,000,000,000 SANTA

Holders

57

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
14,999,999.04 SANTA

Value
$0.00
0x11e52cd424d2ab5e461989a91fb4dc1dd1398639
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:
SantaClausInu

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

/**Smile! Santa's coming to town.
 *
*/

// 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 _previousOwner;

    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(0));
        _owner = address(0);
    }

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

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

    address payable private taxWallet1 = payable(0x7Cba6762d1c4AB917F5f0926EDeF4F544C953645);
    address payable private taxWallet2 = payable(0xd9520fe2AE66159fd2C849CBCeF13387F5206164);
    address public immutable deadAddress = 0x000000000000000000000000000000000000dEaD;
    
    mapping (address => uint256) _balances;
    mapping (address => mapping (address => uint256)) private _allowances;
    
    mapping (address => bool) public checkExcludedFromFees;
    mapping (address => bool) public checkWalletLimitExcept;
    mapping (address => bool) public checkTxLimitExcept;
    mapping (address => bool) public checkMarketPair;

    uint256 public _buyLiquidityFees = 0;
    uint256 public _buyMarketingFees = 3;
    uint256 public _buyDevelopmentFees = 1;
    uint256 public _sellLiquidityFees = 0;
    uint256 public _sellMarketingFees = 3;
    uint256 public _sellDevelopmentFees = 1;

    uint256 public _liquidityShares = 0;
    uint256 public _marketingShares = 6;
    uint256 public _developmentShares = 2;

    uint256 public _totalTaxIfBuying = 4;
    uint256 public _totalTaxIfSelling = 4;
    uint256 public _totalDistributionShares = 8;

    uint256 private _totalSupply = 1000 * 10**6 * 10**9;
    uint256 public _maxTxAmount = 20 * 10**6 * 10**9;
    uint256 public _walletMax = 30 * 10**6 * 10**9;
    uint256 private minimumTokensBeforeSwap = 10 * 10**9; 

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

    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;

        checkExcludedFromFees[owner()] = true;
        checkExcludedFromFees[address(this)] = true;
        
        _totalTaxIfBuying = _buyLiquidityFees.add(_buyMarketingFees).add(_buyDevelopmentFees);
        _totalTaxIfSelling = _sellLiquidityFees.add(_sellMarketingFees).add(_sellDevelopmentFees);
        _totalDistributionShares = _liquidityShares.add(_marketingShares).add(_developmentShares);

        checkWalletLimitExcept[owner()] = true;
        checkWalletLimitExcept[address(uniswapPair)] = true;
        checkWalletLimitExcept[address(this)] = true;
        
        checkTxLimitExcept[owner()] = true;
        checkTxLimitExcept[address(this)] = true;

        checkMarketPair[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 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 addMarketPair(address account) public onlyOwner {
        checkMarketPair[account] = true;
    }

    function setcheckTxLimitExcept(address holder, bool exempt) external onlyOwner {
        checkTxLimitExcept[holder] = exempt;
    }
    
    function setcheckExcludedFromFees(address account, bool newValue) public onlyOwner {
        checkExcludedFromFees[account] = newValue;
    }

    function setBuyFee(uint256 newLiquidityTax, uint256 newMarketingTax, uint256 newDevelopmentTax) external onlyOwner() {
        _buyLiquidityFees = newLiquidityTax;
        _buyMarketingFees = newMarketingTax;
        _buyDevelopmentFees = newDevelopmentTax;

        _totalTaxIfBuying = _buyLiquidityFees.add(_buyMarketingFees).add(_buyDevelopmentFees);
    }

    function setSellFee(uint256 newLiquidityTax, uint256 newMarketingTax, uint256 newDevelopmentTax) external onlyOwner() {
        _sellLiquidityFees = newLiquidityTax;
        _sellMarketingFees = newMarketingTax;
        _sellDevelopmentFees = newDevelopmentTax;

        _totalTaxIfSelling = _sellLiquidityFees.add(_sellMarketingFees).add(_sellDevelopmentFees);
    }
    
    function setDistributionSettings(uint256 newLiquidityShare, uint256 newMarketingShare, uint256 newDevelopmentShare) external onlyOwner() {
        _liquidityShares = newLiquidityShare;
        _marketingShares = newMarketingShare;
        _developmentShares = newDevelopmentShare;

        _totalDistributionShares = _liquidityShares.add(_marketingShares).add(_developmentShares);
    }
    
    function adjustMaxTxAmount(uint256 maxTxAmount) external onlyOwner() {
        require(maxTxAmount <= (10000 * 10**6 * 10**9), "Max wallet should be less or euqal to 4% totalSupply");
        _maxTxAmount = maxTxAmount;
    }

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

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

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

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

    function settaxWallet1(address newAddress) external onlyOwner() {
        taxWallet1 = payable(newAddress);
    }

    function settaxWallet2(address newAddress) external onlyOwner() {
        taxWallet2 = 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 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

        checkWalletLimitExcept[address(uniswapPair)] = true;
        checkMarketPair[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");

        if(inSwapAndLiquify)
        { 
            return _basicTransfer(sender, recipient, amount); 
        }
        else
        {
            if(!checkTxLimitExcept[sender] && !checkTxLimitExcept[recipient]) {
                require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");
            }            

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

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

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

            if(checkWalletLimit && !checkWalletLimitExcept[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(_liquidityShares).div(_totalDistributionShares).div(2);
        uint256 tokensForSwap = tAmount.sub(tokensForLP);

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

        uint256 totalETHFee = _totalDistributionShares.sub(_liquidityShares.div(2));
        
        uint256 amountETHLiquidity = amountReceived.mul(_liquidityShares).div(totalETHFee).div(2);
        uint256 amountETHDevelopment = amountReceived.mul(_developmentShares).div(totalETHFee);
        uint256 amountETHMarketing = amountReceived.sub(amountETHLiquidity).sub(amountETHDevelopment);

        if(amountETHMarketing > 0)
            transferToAddressETH(taxWallet1, amountETHMarketing);

        if(amountETHDevelopment > 0)
            transferToAddressETH(taxWallet2, amountETHDevelopment);

        if(amountETHLiquidity > 0 && tokensForLP > 0)
            addLiquidity(tokensForLP, amountETHLiquidity);
    }
    
    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 takeFee(address sender, address recipient, uint256 amount) internal returns (uint256) {
        
        uint256 feeAmount = 0;
        
        if(checkMarketPair[sender]) {
            feeAmount = amount.mul(_totalTaxIfBuying).div(100);
        }
        else if(checkMarketPair[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);
    }
    
}

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":"_buyDevelopmentFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyLiquidityFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyMarketingFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_developmentShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingShares","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":"_sellDevelopmentFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellLiquidityFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellMarketingFees","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":[{"internalType":"address","name":"account","type":"address"}],"name":"addMarketPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxAmount","type":"uint256"}],"name":"adjustMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newRouterAddress","type":"address"}],"name":"changeRouterVersion","outputs":[{"internalType":"address","name":"newPairAddress","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"checkExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"checkMarketPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"checkTxLimitExcept","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"checkWalletLimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"checkWalletLimitExcept","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":"getCirculatingSupply","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":[],"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":[{"internalType":"uint256","name":"newLiquidityTax","type":"uint256"},{"internalType":"uint256","name":"newMarketingTax","type":"uint256"},{"internalType":"uint256","name":"newDevelopmentTax","type":"uint256"}],"name":"setBuyFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLiquidityShare","type":"uint256"},{"internalType":"uint256","name":"newMarketingShare","type":"uint256"},{"internalType":"uint256","name":"newDevelopmentShare","type":"uint256"}],"name":"setDistributionSettings","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":"newDevelopmentTax","type":"uint256"}],"name":"setSellFee","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":"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":"setcheckExcludedFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setcheckTxLimitExcept","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setcheckWalletLimitExcept","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"settaxWallet1","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"settaxWallet2","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":"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"}]

60a06040526040518060400160405280600f81526020017f53616e746120436c61757320496e750000000000000000000000000000000000815250600290805190602001906200005192919062000b3f565b506040518060400160405280600581526020017f53414e5441000000000000000000000000000000000000000000000000000000815250600390805190602001906200009f92919062000b3f565b506009600460006101000a81548160ff021916908360ff160217905550737cba6762d1c4ab917f5f0926edef4f544c953645600460016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073d9520fe2ae66159fd2c849cbcef13387f5206164600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061dead73ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff1660601b8152506000600c556003600d556001600e556000600f5560036010556001601155600060125560066013556002601455600460155560046016556008601755670de0b6b3a764000060185566470de4df820000601955666a94d74f430000601a556402540be400601b556001601d60156101000a81548160ff0219169083151502179055506000601d60166101000a81548160ff0219169083151502179055506001601d60176101000a81548160ff0219169083151502179055503480156200026357600080fd5b5060006200027662000aab60201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200037457600080fd5b505afa15801562000389573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003af919062000c06565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200041257600080fd5b505afa15801562000427573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200044d919062000c06565b6040518363ffffffff1660e01b81526004016200046c92919062000c7b565b602060405180830381600087803b1580156200048757600080fd5b505af11580156200049c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004c2919062000c06565b601d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601854600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600160086000620005fe62000ab360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620006e0600e54620006cc600d54600c5462000adc60201b620028d11790919060201c565b62000adc60201b620028d11790919060201c565b6015819055506200071f6011546200070b601054600f5462000adc60201b620028d11790919060201c565b62000adc60201b620028d11790919060201c565b6016819055506200075e6014546200074a60135460125462000adc60201b620028d11790919060201c565b62000adc60201b620028d11790919060201c565b6017819055506001600960006200077a62000ab360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160096000601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600960003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600a6000620008b362000ab360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b6000601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060185460066000620009ed62000aab60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555062000a3b62000aab60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60185460405162000a9c919062000cca565b60405180910390a35062000e6a565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600080828462000aed919062000cf8565b90508381101562000b35576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000b2c9062000ca8565b60405180910390fd5b8091505092915050565b82805462000b4d9062000d93565b90600052602060002090601f01602090048101928262000b71576000855562000bbd565b82601f1062000b8c57805160ff191683800117855562000bbd565b8280016001018555821562000bbd579182015b8281111562000bbc57825182559160200191906001019062000b9f565b5b50905062000bcc919062000bd0565b5090565b5b8082111562000beb57600081600090555060010162000bd1565b5090565b60008151905062000c008162000e50565b92915050565b60006020828403121562000c1957600080fd5b600062000c298482850162000bef565b91505092915050565b62000c3d8162000d55565b82525050565b600062000c52601b8362000ce7565b915062000c5f8262000e27565b602082019050919050565b62000c758162000d89565b82525050565b600060408201905062000c92600083018562000c32565b62000ca1602083018462000c32565b9392505050565b6000602082019050818103600083015262000cc38162000c43565b9050919050565b600060208201905062000ce1600083018462000c6a565b92915050565b600082825260208201905092915050565b600062000d058262000d89565b915062000d128362000d89565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000d4a5762000d4962000dc9565b5b828201905092915050565b600062000d628262000d69565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000600282049050600182168062000dac57607f821691505b6020821081141562000dc35762000dc262000df8565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b62000e5b8162000d55565b811462000e6757600080fd5b50565b60805160601c614b8f62000e906000396000818161124801526112740152614b8f6000f3fe6080604052600436106103545760003560e01c806370a08231116101c6578063bbaa7d44116100f7578063dd62ed3e11610095578063f1d5f5171161006f578063f1d5f51714610c87578063f2fde38b14610cb0578063f872858a14610cd9578063fabf706314610d045761035b565b8063dd62ed3e14610bf6578063e207a92b14610c33578063f0cd1dac14610c5c5761035b565b8063c78a789b116100d1578063c78a789b14610b38578063c816841b14610b75578063d76e26a314610ba0578063da00097d14610bcb5761035b565b8063bbaa7d4414610abd578063c2d4640e14610ae6578063c49b9a8014610b0f5761035b565b806395d89b4111610164578063a457c2d71161013e578063a457c2d7146109ef578063a5d69d1f14610a2c578063a9059cbb14610a55578063b6c3af3414610a925761035b565b806395d89b411461096e5780639e3fa32314610999578063a08e671f146109c45761035b565b806382eefb43116101a057806382eefb43146108d85780638da5cb5b146109035780638f03aad51461092e578063914eb66a146109575761035b565b806370a08231146108455780637d1db4a514610882578063807c2d9c146108ad5761035b565b80632f0a5fd4116102a0578063565cec381161023e578063646d470011610218578063646d47001461079b578063661b6e36146107c6578063667b511c146107f1578063705f9d741461081a5761035b565b8063565cec381461070a57806357e6adcb146107355780635881f3ef1461075e5761035b565b80633b97084a1161027a5780633b97084a1461063c5780634a74bb0214610665578063526012e81461069057806355324fa9146106cd5761035b565b80632f0a5fd4146105a9578063313ce567146105d457806339509351146105ff5761035b565b806323b872dd1161030d57806327c8f835116102e757806327c8f835146104ff5780632b112e491461052a5780632cdae5cb146105555780632df671091461057e5761035b565b806323b872dd1461047057806325519cf2146104ad5780632563ae83146104d65761035b565b806306fdde0314610360578063095ea7b31461038b5780630fe1203c146103c85780631694505e146103f157806318160ddd1461041c5780631d865c30146104475761035b565b3661035b57005b600080fd5b34801561036c57600080fd5b50610375610d41565b60405161038291906142e3565b60405180910390f35b34801561039757600080fd5b506103b260048036038101906103ad9190613e66565b610dd3565b6040516103bf91906142ad565b60405180910390f35b3480156103d457600080fd5b506103ef60048036038101906103ea9190613d4d565b610df1565b005b3480156103fd57600080fd5b50610406610eca565b60405161041391906142c8565b60405180910390f35b34801561042857600080fd5b50610431610ef0565b60405161043e9190614445565b60405180910390f35b34801561045357600080fd5b5061046e60048036038101906104699190613ef4565b610efa565b005b34801561047c57600080fd5b5061049760048036038101906104929190613ddb565b610fda565b6040516104a491906142ad565b60405180910390f35b3480156104b957600080fd5b506104d460048036038101906104cf9190613ef4565b6110b4565b005b3480156104e257600080fd5b506104fd60048036038101906104f89190613ea2565b611194565b005b34801561050b57600080fd5b50610514611246565b6040516105219190614208565b60405180910390f35b34801561053657600080fd5b5061053f61126a565b60405161054c9190614445565b60405180910390f35b34801561056157600080fd5b5061057c60048036038101906105779190613e2a565b6112ae565b005b34801561058a57600080fd5b5061059361139e565b6040516105a09190614445565b60405180910390f35b3480156105b557600080fd5b506105be6113a4565b6040516105cb9190614445565b60405180910390f35b3480156105e057600080fd5b506105e96113aa565b6040516105f691906144ea565b60405180910390f35b34801561060b57600080fd5b5061062660048036038101906106219190613e66565b6113c1565b60405161063391906142ad565b60405180910390f35b34801561064857600080fd5b50610663600480360381019061065e9190613ecb565b611474565b005b34801561067157600080fd5b5061067a611513565b60405161068791906142ad565b60405180910390f35b34801561069c57600080fd5b506106b760048036038101906106b29190613d4d565b611526565b6040516106c491906142ad565b60405180910390f35b3480156106d957600080fd5b506106f460048036038101906106ef9190613d4d565b611546565b60405161070191906142ad565b60405180910390f35b34801561071657600080fd5b5061071f611566565b60405161072c9190614445565b60405180910390f35b34801561074157600080fd5b5061075c60048036038101906107579190613e2a565b61156c565b005b34801561076a57600080fd5b5061078560048036038101906107809190613d4d565b61165c565b6040516107929190614208565b60405180910390f35b3480156107a757600080fd5b506107b0611bba565b6040516107bd9190614445565b60405180910390f35b3480156107d257600080fd5b506107db611bc0565b6040516107e89190614445565b60405180910390f35b3480156107fd57600080fd5b5061081860048036038101906108139190613e2a565b611bc6565b005b34801561082657600080fd5b5061082f611cb6565b60405161083c9190614445565b60405180910390f35b34801561085157600080fd5b5061086c60048036038101906108679190613d4d565b611cbc565b6040516108799190614445565b60405180910390f35b34801561088e57600080fd5b50610897611d05565b6040516108a49190614445565b60405180910390f35b3480156108b957600080fd5b506108c2611d0b565b6040516108cf9190614445565b60405180910390f35b3480156108e457600080fd5b506108ed611d11565b6040516108fa9190614445565b60405180910390f35b34801561090f57600080fd5b50610918611d17565b6040516109259190614208565b60405180910390f35b34801561093a57600080fd5b5061095560048036038101906109509190613ecb565b611d40565b005b34801561096357600080fd5b5061096c611e2a565b005b34801561097a57600080fd5b50610983611f7d565b60405161099091906142e3565b60405180910390f35b3480156109a557600080fd5b506109ae61200f565b6040516109bb9190614445565b60405180910390f35b3480156109d057600080fd5b506109d9612015565b6040516109e69190614445565b60405180910390f35b3480156109fb57600080fd5b50610a166004803603810190610a119190613e66565b61201b565b604051610a2391906142ad565b60405180910390f35b348015610a3857600080fd5b50610a536004803603810190610a4e9190613ea2565b6120e8565b005b348015610a6157600080fd5b50610a7c6004803603810190610a779190613e66565b61219a565b604051610a8991906142ad565b60405180910390f35b348015610a9e57600080fd5b50610aa76121b9565b604051610ab49190614445565b60405180910390f35b348015610ac957600080fd5b50610ae46004803603810190610adf9190613d4d565b6121bf565b005b348015610af257600080fd5b50610b0d6004803603810190610b089190613ef4565b612298565b005b348015610b1b57600080fd5b50610b366004803603810190610b319190613ea2565b612378565b005b348015610b4457600080fd5b50610b5f6004803603810190610b5a9190613d4d565b612461565b604051610b6c91906142ad565b60405180910390f35b348015610b8157600080fd5b50610b8a612481565b604051610b979190614208565b60405180910390f35b348015610bac57600080fd5b50610bb56124a7565b604051610bc29190614445565b60405180910390f35b348015610bd757600080fd5b50610be06124ad565b604051610bed91906142ad565b60405180910390f35b348015610c0257600080fd5b50610c1d6004803603810190610c189190613d9f565b6124c0565b604051610c2a9190614445565b60405180910390f35b348015610c3f57600080fd5b50610c5a6004803603810190610c559190613d4d565b612547565b005b348015610c6857600080fd5b50610c71612637565b604051610c7e9190614445565b60405180910390f35b348015610c9357600080fd5b50610cae6004803603810190610ca99190613ecb565b61263d565b005b348015610cbc57600080fd5b50610cd76004803603810190610cd29190613d4d565b6126dc565b005b348015610ce557600080fd5b50610cee61289e565b604051610cfb91906142ad565b60405180910390f35b348015610d1057600080fd5b50610d2b6004803603810190610d269190613d4d565b6128b1565b604051610d3891906142ad565b60405180910390f35b606060028054610d509061472d565b80601f0160208091040260200160405190810160405280929190818152602001828054610d7c9061472d565b8015610dc95780601f10610d9e57610100808354040283529160200191610dc9565b820191906000526020600020905b815481529060010190602001808311610dac57829003601f168201915b5050505050905090565b6000610de7610de061292f565b8484612937565b6001905092915050565b610df961292f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7d906143e5565b60405180910390fd5b80600460016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601854905090565b610f0261292f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f86906143e5565b60405180910390fd5b82600f819055508160108190555080601181905550610fcf601154610fc1601054600f546128d190919063ffffffff16565b6128d190919063ffffffff16565b601681905550505050565b6000610fe7848484612b02565b506110a984610ff461292f565b6110a485604051806060016040528060288152602001614b0d60289139600760008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061105a61292f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130e79092919063ffffffff16565b612937565b600190509392505050565b6110bc61292f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611149576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611140906143e5565b60405180910390fd5b82600c8190555081600d8190555080600e81905550611189600e5461117b600d54600c546128d190919063ffffffff16565b6128d190919063ffffffff16565b601581905550505050565b61119c61292f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611229576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611220906143e5565b60405180910390fd5b80601d60176101000a81548160ff02191690831515021790555050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60006112a96112987f0000000000000000000000000000000000000000000000000000000000000000611cbc565b60185461314b90919063ffffffff16565b905090565b6112b661292f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611343576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133a906143e5565b60405180910390fd5b80600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600d5481565b600f5481565b6000600460009054906101000a900460ff16905090565b600061146a6113ce61292f565b8461146585600760006113df61292f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128d190919063ffffffff16565b612937565b6001905092915050565b61147c61292f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611509576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611500906143e5565b60405180910390fd5b80601b8190555050565b601d60159054906101000a900460ff1681565b60096020528060005260406000206000915054906101000a900460ff1681565b600b6020528060005260406000206000915054906101000a900460ff1681565b60135481565b61157461292f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611601576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f8906143e5565b60405180910390fd5b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600061166661292f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ea906143e5565b60405180910390fd5b60008290508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561173e57600080fd5b505afa158015611752573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117769190613d76565b73ffffffffffffffffffffffffffffffffffffffff1663e6a43905308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156117d857600080fd5b505afa1580156117ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118109190613d76565b6040518363ffffffff1660e01b815260040161182d929190614223565b60206040518083038186803b15801561184557600080fd5b505afa158015611859573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061187d9190613d76565b9150600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a3e578073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156118fa57600080fd5b505afa15801561190e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119329190613d76565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561199457600080fd5b505afa1580156119a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119cc9190613d76565b6040518363ffffffff1660e01b81526004016119e9929190614223565b602060405180830381600087803b158015611a0357600080fd5b505af1158015611a17573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a3b9190613d76565b91505b81601d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160096000601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b6000601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050919050565b60115481565b60105481565b611bce61292f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c52906143e5565b60405180910390fd5b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600e5481565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60195481565b601a5481565b60165481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611d4861292f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611dd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dcc906143e5565b60405180910390fd5b678ac7230489e80000811115611e20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1790614325565b60405180910390fd5b8060198190555050565b611e3261292f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ebf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb6906143e5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b606060038054611f8c9061472d565b80601f0160208091040260200160405190810160405280929190818152602001828054611fb89061472d565b80156120055780601f10611fda57610100808354040283529160200191612005565b820191906000526020600020905b815481529060010190602001808311611fe857829003601f168201915b5050505050905090565b60125481565b60175481565b60006120de61202861292f565b846120d985604051806060016040528060258152602001614b35602591396007600061205261292f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130e79092919063ffffffff16565b612937565b6001905092915050565b6120f061292f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461217d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612174906143e5565b60405180910390fd5b80601d60166101000a81548160ff02191690831515021790555050565b60006121ae6121a761292f565b8484612b02565b506001905092915050565b600c5481565b6121c761292f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612254576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224b906143e5565b60405180910390fd5b80600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6122a061292f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461232d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612324906143e5565b60405180910390fd5b82601281905550816013819055508060148190555061236d60145461235f6013546012546128d190919063ffffffff16565b6128d190919063ffffffff16565b601781905550505050565b61238061292f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461240d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612404906143e5565b60405180910390fd5b80601d60156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1598160405161245691906142ad565b60405180910390a150565b600a6020528060005260406000206000915054906101000a900460ff1681565b601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60145481565b601d60169054906101000a900460ff1681565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61254f61292f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146125dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125d3906143e5565b60405180910390fd5b6001600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60155481565b61264561292f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146126d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126c9906143e5565b60405180910390fd5b80601a8190555050565b6126e461292f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612771576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612768906143e5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156127e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127d890614345565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601d60179054906101000a900460ff1681565b60086020528060005260406000206000915054906101000a900460ff1681565b60008082846128e0919061455a565b905083811015612925576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161291c90614385565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156129a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161299e90614425565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612a17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a0e90614365565b60405180910390fd5b80600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612af59190614445565b60405180910390a3505050565b60008073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612b73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b6a90614405565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612be3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bda90614305565b60405180910390fd5b601d60149054906101000a900460ff1615612c0a57612c03848484613195565b90506130e0565b600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612cae5750600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612cf957601954821115612cf8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cef906143a5565b60405180910390fd5b5b6000612d0430611cbc565b90506000601b548210159050808015612d2a5750601d60149054906101000a900460ff16155b8015612d805750600b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612d985750601d60159054906101000a900460ff165b15612dc257601d60169054906101000a900460ff1615612db857601b5491505b612dc182613368565b5b612e4b846040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600660008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130e79092919063ffffffff16565b600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612f315750600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612f4557612f40878787613559565b612f47565b845b9050601d60179054906101000a900460ff168015612faf5750600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612fde57601a54612fd282612fc489611cbc565b6128d190919063ffffffff16565b1115612fdd57600080fd5b5b61303081600660008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128d190919063ffffffff16565b600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516130d09190614445565b60405180910390a3600193505050505b9392505050565b600083831115829061312f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161312691906142e3565b60405180910390fd5b506000838561313e919061463b565b9050809150509392505050565b600061318d83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506130e7565b905092915050565b6000613220826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130e79092919063ffffffff16565b600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506132b582600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128d190919063ffffffff16565b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516133559190614445565b60405180910390a3600190509392505050565b6001601d60146101000a81548160ff02191690831515021790555060006133c160026133b36017546133a56012548761378090919063ffffffff16565b6137fb90919063ffffffff16565b6137fb90919063ffffffff16565b905060006133d8828461314b90919063ffffffff16565b90506133e381613845565b6000479050600061341461340360026012546137fb90919063ffffffff16565b60175461314b90919063ffffffff16565b905060006134526002613444846134366012548861378090919063ffffffff16565b6137fb90919063ffffffff16565b6137fb90919063ffffffff16565b9050600061347d8361346f6014548761378090919063ffffffff16565b6137fb90919063ffffffff16565b905060006134a682613498858861314b90919063ffffffff16565b61314b90919063ffffffff16565b905060008111156134de576134dd600460019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682613b42565b5b600082111561351457613513600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683613b42565b5b6000831180156135245750600087115b15613534576135338784613b8d565b5b505050505050506000601d60146101000a81548160ff02191690831515021790555050565b60008060009050600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156135e1576135da60646135cc6015548661378090919063ffffffff16565b6137fb90919063ffffffff16565b905061365f565b600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561365e5761365b606461364d6016548661378090919063ffffffff16565b6137fb90919063ffffffff16565b90505b5b6000811115613763576136ba81600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128d190919063ffffffff16565b600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161375a9190614445565b60405180910390a35b613776818461314b90919063ffffffff16565b9150509392505050565b60008083141561379357600090506137f5565b600082846137a191906145e1565b90508284826137b091906145b0565b146137f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137e7906143c5565b60405180910390fd5b809150505b92915050565b600061383d83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613c81565b905092915050565b6000600267ffffffffffffffff811115613888577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156138b65781602001602082028036833780820191505090505b50905030816000815181106138f4577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561399657600080fd5b505afa1580156139aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139ce9190613d76565b81600181518110613a08577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613a6f30601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612937565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613ad3959493929190614490565b600060405180830381600087803b158015613aed57600080fd5b505af1158015613b01573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a78282604051613b36929190614460565b60405180910390a15050565b8173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015613b88573d6000803e3d6000fd5b505050565b613bba30601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612937565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080613c06611d17565b426040518863ffffffff1660e01b8152600401613c289695949392919061424c565b6060604051808303818588803b158015613c4157600080fd5b505af1158015613c55573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613c7a9190613f43565b5050505050565b60008083118290613cc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613cbf91906142e3565b60405180910390fd5b5060008385613cd791906145b0565b9050809150509392505050565b600081359050613cf381614ac7565b92915050565b600081519050613d0881614ac7565b92915050565b600081359050613d1d81614ade565b92915050565b600081359050613d3281614af5565b92915050565b600081519050613d4781614af5565b92915050565b600060208284031215613d5f57600080fd5b6000613d6d84828501613ce4565b91505092915050565b600060208284031215613d8857600080fd5b6000613d9684828501613cf9565b91505092915050565b60008060408385031215613db257600080fd5b6000613dc085828601613ce4565b9250506020613dd185828601613ce4565b9150509250929050565b600080600060608486031215613df057600080fd5b6000613dfe86828701613ce4565b9350506020613e0f86828701613ce4565b9250506040613e2086828701613d23565b9150509250925092565b60008060408385031215613e3d57600080fd5b6000613e4b85828601613ce4565b9250506020613e5c85828601613d0e565b9150509250929050565b60008060408385031215613e7957600080fd5b6000613e8785828601613ce4565b9250506020613e9885828601613d23565b9150509250929050565b600060208284031215613eb457600080fd5b6000613ec284828501613d0e565b91505092915050565b600060208284031215613edd57600080fd5b6000613eeb84828501613d23565b91505092915050565b600080600060608486031215613f0957600080fd5b6000613f1786828701613d23565b9350506020613f2886828701613d23565b9250506040613f3986828701613d23565b9150509250925092565b600080600060608486031215613f5857600080fd5b6000613f6686828701613d38565b9350506020613f7786828701613d38565b9250506040613f8886828701613d38565b9150509250925092565b6000613f9e8383613faa565b60208301905092915050565b613fb38161466f565b82525050565b613fc28161466f565b82525050565b6000613fd382614515565b613fdd8185614538565b9350613fe883614505565b8060005b838110156140195781516140008882613f92565b975061400b8361452b565b925050600181019050613fec565b5085935050505092915050565b61402f81614681565b82525050565b61403e816146c4565b82525050565b61404d816146e8565b82525050565b600061405e82614520565b6140688185614549565b93506140788185602086016146fa565b614081816147ec565b840191505092915050565b6000614099602383614549565b91506140a4826147fd565b604082019050919050565b60006140bc603483614549565b91506140c78261484c565b604082019050919050565b60006140df602683614549565b91506140ea8261489b565b604082019050919050565b6000614102602283614549565b915061410d826148ea565b604082019050919050565b6000614125601b83614549565b915061413082614939565b602082019050919050565b6000614148602883614549565b915061415382614962565b604082019050919050565b600061416b602183614549565b9150614176826149b1565b604082019050919050565b600061418e602083614549565b915061419982614a00565b602082019050919050565b60006141b1602583614549565b91506141bc82614a29565b604082019050919050565b60006141d4602483614549565b91506141df82614a78565b604082019050919050565b6141f3816146ad565b82525050565b614202816146b7565b82525050565b600060208201905061421d6000830184613fb9565b92915050565b60006040820190506142386000830185613fb9565b6142456020830184613fb9565b9392505050565b600060c0820190506142616000830189613fb9565b61426e60208301886141ea565b61427b6040830187614044565b6142886060830186614044565b6142956080830185613fb9565b6142a260a08301846141ea565b979650505050505050565b60006020820190506142c26000830184614026565b92915050565b60006020820190506142dd6000830184614035565b92915050565b600060208201905081810360008301526142fd8184614053565b905092915050565b6000602082019050818103600083015261431e8161408c565b9050919050565b6000602082019050818103600083015261433e816140af565b9050919050565b6000602082019050818103600083015261435e816140d2565b9050919050565b6000602082019050818103600083015261437e816140f5565b9050919050565b6000602082019050818103600083015261439e81614118565b9050919050565b600060208201905081810360008301526143be8161413b565b9050919050565b600060208201905081810360008301526143de8161415e565b9050919050565b600060208201905081810360008301526143fe81614181565b9050919050565b6000602082019050818103600083015261441e816141a4565b9050919050565b6000602082019050818103600083015261443e816141c7565b9050919050565b600060208201905061445a60008301846141ea565b92915050565b600060408201905061447560008301856141ea565b81810360208301526144878184613fc8565b90509392505050565b600060a0820190506144a560008301886141ea565b6144b26020830187614044565b81810360408301526144c48186613fc8565b90506144d36060830185613fb9565b6144e060808301846141ea565b9695505050505050565b60006020820190506144ff60008301846141f9565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000614565826146ad565b9150614570836146ad565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156145a5576145a461475f565b5b828201905092915050565b60006145bb826146ad565b91506145c6836146ad565b9250826145d6576145d561478e565b5b828204905092915050565b60006145ec826146ad565b91506145f7836146ad565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156146305761462f61475f565b5b828202905092915050565b6000614646826146ad565b9150614651836146ad565b9250828210156146645761466361475f565b5b828203905092915050565b600061467a8261468d565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006146cf826146d6565b9050919050565b60006146e18261468d565b9050919050565b60006146f3826146ad565b9050919050565b60005b838110156147185780820151818401526020810190506146fd565b83811115614727576000848401525b50505050565b6000600282049050600182168061474557607f821691505b60208210811415614759576147586147bd565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f4d61782077616c6c65742073686f756c64206265206c657373206f722065757160008201527f616c20746f20342520746f74616c537570706c79000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b614ad08161466f565b8114614adb57600080fd5b50565b614ae781614681565b8114614af257600080fd5b50565b614afe816146ad565b8114614b0957600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220c669f03550818f50c2f357ff22c4db47b280737c698f75be42da4719f5e6e40764736f6c63430008040033

Deployed Bytecode

0x6080604052600436106103545760003560e01c806370a08231116101c6578063bbaa7d44116100f7578063dd62ed3e11610095578063f1d5f5171161006f578063f1d5f51714610c87578063f2fde38b14610cb0578063f872858a14610cd9578063fabf706314610d045761035b565b8063dd62ed3e14610bf6578063e207a92b14610c33578063f0cd1dac14610c5c5761035b565b8063c78a789b116100d1578063c78a789b14610b38578063c816841b14610b75578063d76e26a314610ba0578063da00097d14610bcb5761035b565b8063bbaa7d4414610abd578063c2d4640e14610ae6578063c49b9a8014610b0f5761035b565b806395d89b4111610164578063a457c2d71161013e578063a457c2d7146109ef578063a5d69d1f14610a2c578063a9059cbb14610a55578063b6c3af3414610a925761035b565b806395d89b411461096e5780639e3fa32314610999578063a08e671f146109c45761035b565b806382eefb43116101a057806382eefb43146108d85780638da5cb5b146109035780638f03aad51461092e578063914eb66a146109575761035b565b806370a08231146108455780637d1db4a514610882578063807c2d9c146108ad5761035b565b80632f0a5fd4116102a0578063565cec381161023e578063646d470011610218578063646d47001461079b578063661b6e36146107c6578063667b511c146107f1578063705f9d741461081a5761035b565b8063565cec381461070a57806357e6adcb146107355780635881f3ef1461075e5761035b565b80633b97084a1161027a5780633b97084a1461063c5780634a74bb0214610665578063526012e81461069057806355324fa9146106cd5761035b565b80632f0a5fd4146105a9578063313ce567146105d457806339509351146105ff5761035b565b806323b872dd1161030d57806327c8f835116102e757806327c8f835146104ff5780632b112e491461052a5780632cdae5cb146105555780632df671091461057e5761035b565b806323b872dd1461047057806325519cf2146104ad5780632563ae83146104d65761035b565b806306fdde0314610360578063095ea7b31461038b5780630fe1203c146103c85780631694505e146103f157806318160ddd1461041c5780631d865c30146104475761035b565b3661035b57005b600080fd5b34801561036c57600080fd5b50610375610d41565b60405161038291906142e3565b60405180910390f35b34801561039757600080fd5b506103b260048036038101906103ad9190613e66565b610dd3565b6040516103bf91906142ad565b60405180910390f35b3480156103d457600080fd5b506103ef60048036038101906103ea9190613d4d565b610df1565b005b3480156103fd57600080fd5b50610406610eca565b60405161041391906142c8565b60405180910390f35b34801561042857600080fd5b50610431610ef0565b60405161043e9190614445565b60405180910390f35b34801561045357600080fd5b5061046e60048036038101906104699190613ef4565b610efa565b005b34801561047c57600080fd5b5061049760048036038101906104929190613ddb565b610fda565b6040516104a491906142ad565b60405180910390f35b3480156104b957600080fd5b506104d460048036038101906104cf9190613ef4565b6110b4565b005b3480156104e257600080fd5b506104fd60048036038101906104f89190613ea2565b611194565b005b34801561050b57600080fd5b50610514611246565b6040516105219190614208565b60405180910390f35b34801561053657600080fd5b5061053f61126a565b60405161054c9190614445565b60405180910390f35b34801561056157600080fd5b5061057c60048036038101906105779190613e2a565b6112ae565b005b34801561058a57600080fd5b5061059361139e565b6040516105a09190614445565b60405180910390f35b3480156105b557600080fd5b506105be6113a4565b6040516105cb9190614445565b60405180910390f35b3480156105e057600080fd5b506105e96113aa565b6040516105f691906144ea565b60405180910390f35b34801561060b57600080fd5b5061062660048036038101906106219190613e66565b6113c1565b60405161063391906142ad565b60405180910390f35b34801561064857600080fd5b50610663600480360381019061065e9190613ecb565b611474565b005b34801561067157600080fd5b5061067a611513565b60405161068791906142ad565b60405180910390f35b34801561069c57600080fd5b506106b760048036038101906106b29190613d4d565b611526565b6040516106c491906142ad565b60405180910390f35b3480156106d957600080fd5b506106f460048036038101906106ef9190613d4d565b611546565b60405161070191906142ad565b60405180910390f35b34801561071657600080fd5b5061071f611566565b60405161072c9190614445565b60405180910390f35b34801561074157600080fd5b5061075c60048036038101906107579190613e2a565b61156c565b005b34801561076a57600080fd5b5061078560048036038101906107809190613d4d565b61165c565b6040516107929190614208565b60405180910390f35b3480156107a757600080fd5b506107b0611bba565b6040516107bd9190614445565b60405180910390f35b3480156107d257600080fd5b506107db611bc0565b6040516107e89190614445565b60405180910390f35b3480156107fd57600080fd5b5061081860048036038101906108139190613e2a565b611bc6565b005b34801561082657600080fd5b5061082f611cb6565b60405161083c9190614445565b60405180910390f35b34801561085157600080fd5b5061086c60048036038101906108679190613d4d565b611cbc565b6040516108799190614445565b60405180910390f35b34801561088e57600080fd5b50610897611d05565b6040516108a49190614445565b60405180910390f35b3480156108b957600080fd5b506108c2611d0b565b6040516108cf9190614445565b60405180910390f35b3480156108e457600080fd5b506108ed611d11565b6040516108fa9190614445565b60405180910390f35b34801561090f57600080fd5b50610918611d17565b6040516109259190614208565b60405180910390f35b34801561093a57600080fd5b5061095560048036038101906109509190613ecb565b611d40565b005b34801561096357600080fd5b5061096c611e2a565b005b34801561097a57600080fd5b50610983611f7d565b60405161099091906142e3565b60405180910390f35b3480156109a557600080fd5b506109ae61200f565b6040516109bb9190614445565b60405180910390f35b3480156109d057600080fd5b506109d9612015565b6040516109e69190614445565b60405180910390f35b3480156109fb57600080fd5b50610a166004803603810190610a119190613e66565b61201b565b604051610a2391906142ad565b60405180910390f35b348015610a3857600080fd5b50610a536004803603810190610a4e9190613ea2565b6120e8565b005b348015610a6157600080fd5b50610a7c6004803603810190610a779190613e66565b61219a565b604051610a8991906142ad565b60405180910390f35b348015610a9e57600080fd5b50610aa76121b9565b604051610ab49190614445565b60405180910390f35b348015610ac957600080fd5b50610ae46004803603810190610adf9190613d4d565b6121bf565b005b348015610af257600080fd5b50610b0d6004803603810190610b089190613ef4565b612298565b005b348015610b1b57600080fd5b50610b366004803603810190610b319190613ea2565b612378565b005b348015610b4457600080fd5b50610b5f6004803603810190610b5a9190613d4d565b612461565b604051610b6c91906142ad565b60405180910390f35b348015610b8157600080fd5b50610b8a612481565b604051610b979190614208565b60405180910390f35b348015610bac57600080fd5b50610bb56124a7565b604051610bc29190614445565b60405180910390f35b348015610bd757600080fd5b50610be06124ad565b604051610bed91906142ad565b60405180910390f35b348015610c0257600080fd5b50610c1d6004803603810190610c189190613d9f565b6124c0565b604051610c2a9190614445565b60405180910390f35b348015610c3f57600080fd5b50610c5a6004803603810190610c559190613d4d565b612547565b005b348015610c6857600080fd5b50610c71612637565b604051610c7e9190614445565b60405180910390f35b348015610c9357600080fd5b50610cae6004803603810190610ca99190613ecb565b61263d565b005b348015610cbc57600080fd5b50610cd76004803603810190610cd29190613d4d565b6126dc565b005b348015610ce557600080fd5b50610cee61289e565b604051610cfb91906142ad565b60405180910390f35b348015610d1057600080fd5b50610d2b6004803603810190610d269190613d4d565b6128b1565b604051610d3891906142ad565b60405180910390f35b606060028054610d509061472d565b80601f0160208091040260200160405190810160405280929190818152602001828054610d7c9061472d565b8015610dc95780601f10610d9e57610100808354040283529160200191610dc9565b820191906000526020600020905b815481529060010190602001808311610dac57829003601f168201915b5050505050905090565b6000610de7610de061292f565b8484612937565b6001905092915050565b610df961292f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7d906143e5565b60405180910390fd5b80600460016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601854905090565b610f0261292f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f86906143e5565b60405180910390fd5b82600f819055508160108190555080601181905550610fcf601154610fc1601054600f546128d190919063ffffffff16565b6128d190919063ffffffff16565b601681905550505050565b6000610fe7848484612b02565b506110a984610ff461292f565b6110a485604051806060016040528060288152602001614b0d60289139600760008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061105a61292f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130e79092919063ffffffff16565b612937565b600190509392505050565b6110bc61292f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611149576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611140906143e5565b60405180910390fd5b82600c8190555081600d8190555080600e81905550611189600e5461117b600d54600c546128d190919063ffffffff16565b6128d190919063ffffffff16565b601581905550505050565b61119c61292f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611229576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611220906143e5565b60405180910390fd5b80601d60176101000a81548160ff02191690831515021790555050565b7f000000000000000000000000000000000000000000000000000000000000dead81565b60006112a96112987f000000000000000000000000000000000000000000000000000000000000dead611cbc565b60185461314b90919063ffffffff16565b905090565b6112b661292f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611343576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133a906143e5565b60405180910390fd5b80600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600d5481565b600f5481565b6000600460009054906101000a900460ff16905090565b600061146a6113ce61292f565b8461146585600760006113df61292f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128d190919063ffffffff16565b612937565b6001905092915050565b61147c61292f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611509576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611500906143e5565b60405180910390fd5b80601b8190555050565b601d60159054906101000a900460ff1681565b60096020528060005260406000206000915054906101000a900460ff1681565b600b6020528060005260406000206000915054906101000a900460ff1681565b60135481565b61157461292f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611601576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f8906143e5565b60405180910390fd5b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600061166661292f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ea906143e5565b60405180910390fd5b60008290508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561173e57600080fd5b505afa158015611752573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117769190613d76565b73ffffffffffffffffffffffffffffffffffffffff1663e6a43905308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156117d857600080fd5b505afa1580156117ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118109190613d76565b6040518363ffffffff1660e01b815260040161182d929190614223565b60206040518083038186803b15801561184557600080fd5b505afa158015611859573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061187d9190613d76565b9150600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a3e578073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156118fa57600080fd5b505afa15801561190e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119329190613d76565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561199457600080fd5b505afa1580156119a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119cc9190613d76565b6040518363ffffffff1660e01b81526004016119e9929190614223565b602060405180830381600087803b158015611a0357600080fd5b505af1158015611a17573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a3b9190613d76565b91505b81601d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160096000601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b6000601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050919050565b60115481565b60105481565b611bce61292f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c52906143e5565b60405180910390fd5b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600e5481565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60195481565b601a5481565b60165481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611d4861292f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611dd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dcc906143e5565b60405180910390fd5b678ac7230489e80000811115611e20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1790614325565b60405180910390fd5b8060198190555050565b611e3261292f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ebf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb6906143e5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b606060038054611f8c9061472d565b80601f0160208091040260200160405190810160405280929190818152602001828054611fb89061472d565b80156120055780601f10611fda57610100808354040283529160200191612005565b820191906000526020600020905b815481529060010190602001808311611fe857829003601f168201915b5050505050905090565b60125481565b60175481565b60006120de61202861292f565b846120d985604051806060016040528060258152602001614b35602591396007600061205261292f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130e79092919063ffffffff16565b612937565b6001905092915050565b6120f061292f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461217d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612174906143e5565b60405180910390fd5b80601d60166101000a81548160ff02191690831515021790555050565b60006121ae6121a761292f565b8484612b02565b506001905092915050565b600c5481565b6121c761292f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612254576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224b906143e5565b60405180910390fd5b80600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6122a061292f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461232d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612324906143e5565b60405180910390fd5b82601281905550816013819055508060148190555061236d60145461235f6013546012546128d190919063ffffffff16565b6128d190919063ffffffff16565b601781905550505050565b61238061292f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461240d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612404906143e5565b60405180910390fd5b80601d60156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1598160405161245691906142ad565b60405180910390a150565b600a6020528060005260406000206000915054906101000a900460ff1681565b601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60145481565b601d60169054906101000a900460ff1681565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61254f61292f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146125dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125d3906143e5565b60405180910390fd5b6001600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60155481565b61264561292f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146126d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126c9906143e5565b60405180910390fd5b80601a8190555050565b6126e461292f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612771576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612768906143e5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156127e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127d890614345565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601d60179054906101000a900460ff1681565b60086020528060005260406000206000915054906101000a900460ff1681565b60008082846128e0919061455a565b905083811015612925576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161291c90614385565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156129a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161299e90614425565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612a17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a0e90614365565b60405180910390fd5b80600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612af59190614445565b60405180910390a3505050565b60008073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612b73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b6a90614405565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612be3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bda90614305565b60405180910390fd5b601d60149054906101000a900460ff1615612c0a57612c03848484613195565b90506130e0565b600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612cae5750600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612cf957601954821115612cf8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cef906143a5565b60405180910390fd5b5b6000612d0430611cbc565b90506000601b548210159050808015612d2a5750601d60149054906101000a900460ff16155b8015612d805750600b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612d985750601d60159054906101000a900460ff165b15612dc257601d60169054906101000a900460ff1615612db857601b5491505b612dc182613368565b5b612e4b846040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600660008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130e79092919063ffffffff16565b600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612f315750600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612f4557612f40878787613559565b612f47565b845b9050601d60179054906101000a900460ff168015612faf5750600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612fde57601a54612fd282612fc489611cbc565b6128d190919063ffffffff16565b1115612fdd57600080fd5b5b61303081600660008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128d190919063ffffffff16565b600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516130d09190614445565b60405180910390a3600193505050505b9392505050565b600083831115829061312f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161312691906142e3565b60405180910390fd5b506000838561313e919061463b565b9050809150509392505050565b600061318d83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506130e7565b905092915050565b6000613220826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130e79092919063ffffffff16565b600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506132b582600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128d190919063ffffffff16565b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516133559190614445565b60405180910390a3600190509392505050565b6001601d60146101000a81548160ff02191690831515021790555060006133c160026133b36017546133a56012548761378090919063ffffffff16565b6137fb90919063ffffffff16565b6137fb90919063ffffffff16565b905060006133d8828461314b90919063ffffffff16565b90506133e381613845565b6000479050600061341461340360026012546137fb90919063ffffffff16565b60175461314b90919063ffffffff16565b905060006134526002613444846134366012548861378090919063ffffffff16565b6137fb90919063ffffffff16565b6137fb90919063ffffffff16565b9050600061347d8361346f6014548761378090919063ffffffff16565b6137fb90919063ffffffff16565b905060006134a682613498858861314b90919063ffffffff16565b61314b90919063ffffffff16565b905060008111156134de576134dd600460019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682613b42565b5b600082111561351457613513600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683613b42565b5b6000831180156135245750600087115b15613534576135338784613b8d565b5b505050505050506000601d60146101000a81548160ff02191690831515021790555050565b60008060009050600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156135e1576135da60646135cc6015548661378090919063ffffffff16565b6137fb90919063ffffffff16565b905061365f565b600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561365e5761365b606461364d6016548661378090919063ffffffff16565b6137fb90919063ffffffff16565b90505b5b6000811115613763576136ba81600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128d190919063ffffffff16565b600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161375a9190614445565b60405180910390a35b613776818461314b90919063ffffffff16565b9150509392505050565b60008083141561379357600090506137f5565b600082846137a191906145e1565b90508284826137b091906145b0565b146137f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137e7906143c5565b60405180910390fd5b809150505b92915050565b600061383d83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613c81565b905092915050565b6000600267ffffffffffffffff811115613888577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156138b65781602001602082028036833780820191505090505b50905030816000815181106138f4577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561399657600080fd5b505afa1580156139aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139ce9190613d76565b81600181518110613a08577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613a6f30601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612937565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613ad3959493929190614490565b600060405180830381600087803b158015613aed57600080fd5b505af1158015613b01573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a78282604051613b36929190614460565b60405180910390a15050565b8173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015613b88573d6000803e3d6000fd5b505050565b613bba30601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612937565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080613c06611d17565b426040518863ffffffff1660e01b8152600401613c289695949392919061424c565b6060604051808303818588803b158015613c4157600080fd5b505af1158015613c55573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613c7a9190613f43565b5050505050565b60008083118290613cc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613cbf91906142e3565b60405180910390fd5b5060008385613cd791906145b0565b9050809150509392505050565b600081359050613cf381614ac7565b92915050565b600081519050613d0881614ac7565b92915050565b600081359050613d1d81614ade565b92915050565b600081359050613d3281614af5565b92915050565b600081519050613d4781614af5565b92915050565b600060208284031215613d5f57600080fd5b6000613d6d84828501613ce4565b91505092915050565b600060208284031215613d8857600080fd5b6000613d9684828501613cf9565b91505092915050565b60008060408385031215613db257600080fd5b6000613dc085828601613ce4565b9250506020613dd185828601613ce4565b9150509250929050565b600080600060608486031215613df057600080fd5b6000613dfe86828701613ce4565b9350506020613e0f86828701613ce4565b9250506040613e2086828701613d23565b9150509250925092565b60008060408385031215613e3d57600080fd5b6000613e4b85828601613ce4565b9250506020613e5c85828601613d0e565b9150509250929050565b60008060408385031215613e7957600080fd5b6000613e8785828601613ce4565b9250506020613e9885828601613d23565b9150509250929050565b600060208284031215613eb457600080fd5b6000613ec284828501613d0e565b91505092915050565b600060208284031215613edd57600080fd5b6000613eeb84828501613d23565b91505092915050565b600080600060608486031215613f0957600080fd5b6000613f1786828701613d23565b9350506020613f2886828701613d23565b9250506040613f3986828701613d23565b9150509250925092565b600080600060608486031215613f5857600080fd5b6000613f6686828701613d38565b9350506020613f7786828701613d38565b9250506040613f8886828701613d38565b9150509250925092565b6000613f9e8383613faa565b60208301905092915050565b613fb38161466f565b82525050565b613fc28161466f565b82525050565b6000613fd382614515565b613fdd8185614538565b9350613fe883614505565b8060005b838110156140195781516140008882613f92565b975061400b8361452b565b925050600181019050613fec565b5085935050505092915050565b61402f81614681565b82525050565b61403e816146c4565b82525050565b61404d816146e8565b82525050565b600061405e82614520565b6140688185614549565b93506140788185602086016146fa565b614081816147ec565b840191505092915050565b6000614099602383614549565b91506140a4826147fd565b604082019050919050565b60006140bc603483614549565b91506140c78261484c565b604082019050919050565b60006140df602683614549565b91506140ea8261489b565b604082019050919050565b6000614102602283614549565b915061410d826148ea565b604082019050919050565b6000614125601b83614549565b915061413082614939565b602082019050919050565b6000614148602883614549565b915061415382614962565b604082019050919050565b600061416b602183614549565b9150614176826149b1565b604082019050919050565b600061418e602083614549565b915061419982614a00565b602082019050919050565b60006141b1602583614549565b91506141bc82614a29565b604082019050919050565b60006141d4602483614549565b91506141df82614a78565b604082019050919050565b6141f3816146ad565b82525050565b614202816146b7565b82525050565b600060208201905061421d6000830184613fb9565b92915050565b60006040820190506142386000830185613fb9565b6142456020830184613fb9565b9392505050565b600060c0820190506142616000830189613fb9565b61426e60208301886141ea565b61427b6040830187614044565b6142886060830186614044565b6142956080830185613fb9565b6142a260a08301846141ea565b979650505050505050565b60006020820190506142c26000830184614026565b92915050565b60006020820190506142dd6000830184614035565b92915050565b600060208201905081810360008301526142fd8184614053565b905092915050565b6000602082019050818103600083015261431e8161408c565b9050919050565b6000602082019050818103600083015261433e816140af565b9050919050565b6000602082019050818103600083015261435e816140d2565b9050919050565b6000602082019050818103600083015261437e816140f5565b9050919050565b6000602082019050818103600083015261439e81614118565b9050919050565b600060208201905081810360008301526143be8161413b565b9050919050565b600060208201905081810360008301526143de8161415e565b9050919050565b600060208201905081810360008301526143fe81614181565b9050919050565b6000602082019050818103600083015261441e816141a4565b9050919050565b6000602082019050818103600083015261443e816141c7565b9050919050565b600060208201905061445a60008301846141ea565b92915050565b600060408201905061447560008301856141ea565b81810360208301526144878184613fc8565b90509392505050565b600060a0820190506144a560008301886141ea565b6144b26020830187614044565b81810360408301526144c48186613fc8565b90506144d36060830185613fb9565b6144e060808301846141ea565b9695505050505050565b60006020820190506144ff60008301846141f9565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000614565826146ad565b9150614570836146ad565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156145a5576145a461475f565b5b828201905092915050565b60006145bb826146ad565b91506145c6836146ad565b9250826145d6576145d561478e565b5b828204905092915050565b60006145ec826146ad565b91506145f7836146ad565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156146305761462f61475f565b5b828202905092915050565b6000614646826146ad565b9150614651836146ad565b9250828210156146645761466361475f565b5b828203905092915050565b600061467a8261468d565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006146cf826146d6565b9050919050565b60006146e18261468d565b9050919050565b60006146f3826146ad565b9050919050565b60005b838110156147185780820151818401526020810190506146fd565b83811115614727576000848401525b50505050565b6000600282049050600182168061474557607f821691505b60208210811415614759576147586147bd565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f4d61782077616c6c65742073686f756c64206265206c657373206f722065757160008201527f616c20746f20342520746f74616c537570706c79000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b614ad08161466f565b8114614adb57600080fd5b50565b614ae781614681565b8114614af257600080fd5b50565b614afe816146ad565b8114614b0957600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220c669f03550818f50c2f357ff22c4db47b280737c698f75be42da4719f5e6e40764736f6c63430008040033

Deployed Bytecode Sourcemap

14276:14935:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17978:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19144:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21979:115;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15945:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18255:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20442:373;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23905:313;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20069:365;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21467:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14722:81;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22541:128;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19918:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15224:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15312:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18164:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18641:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21847:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16060:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15004:55;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15124:48;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15490:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21588:141;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22815:813;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15400:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15356:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19773:133;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15267:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18363:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15775:48;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15830:46;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15621:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5815:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21231:228;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6040:145;;;;;;;;;;;;;:::i;:::-;;18069:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15448:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15665:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18867:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22404:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23730:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15181:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22102:115;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20827:392;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22225:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15066:51;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15993:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15532:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16107:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18490:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19658:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15578:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21737:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6193:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16159:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14943:54;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17978:83;18015:13;18048:5;18041:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17978:83;:::o;19144:161::-;19219:4;19236:39;19245:12;:10;:12::i;:::-;19259:7;19268:6;19236:8;:39::i;:::-;19293:4;19286:11;;19144:161;;;;:::o;21979:115::-;5959:12;:10;:12::i;:::-;5949:22;;:6;;;;;;;;;;:22;;;5941:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22075:10:::1;22054;;:32;;;;;;;;;;;;;;;;;;21979:115:::0;:::o;15945:41::-;;;;;;;;;;;;;:::o;18255:100::-;18308:7;18335:12;;18328:19;;18255:100;:::o;20442:373::-;5959:12;:10;:12::i;:::-;5949:22;;:6;;;;;;;;;;:22;;;5941:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20592:15:::1;20571:18;:36;;;;20639:15;20618:18;:36;;;;20688:17;20665:20;:40;;;;20739:68;20786:20;;20739:42;20762:18;;20739;;:22;;:42;;;;:::i;:::-;:46;;:68;;;;:::i;:::-;20718:18;:89;;;;20442:373:::0;;;:::o;23905:313::-;24003:4;24020:36;24030:6;24038:9;24049:6;24020:9;:36::i;:::-;;24067:121;24076:6;24084:12;:10;:12::i;:::-;24098:89;24136:6;24098:89;;;;;;;;;;;;;;;;;:11;:19;24110:6;24098:19;;;;;;;;;;;;;;;:33;24118:12;:10;:12::i;:::-;24098:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;24067:8;:121::i;:::-;24206:4;24199:11;;23905:313;;;;;:::o;20069:365::-;5959:12;:10;:12::i;:::-;5949:22;;:6;;;;;;;;;;:22;;;5941:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20217:15:::1;20197:17;:35;;;;20263:15;20243:17;:35;;;;20311:17;20289:19;:39;;;;20361:65;20406:19;;20361:40;20383:17;;20361;;:21;;:40;;;;:::i;:::-;:44;;:65;;;;:::i;:::-;20341:17;:85;;;;20069:365:::0;;;:::o;21467:113::-;5959:12;:10;:12::i;:::-;5949:22;;:6;;;;;;;;;;:22;;;5941:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21564:8:::1;21545:16;;:27;;;;;;;;;;;;;;;;;;21467:113:::0;:::o;14722:81::-;;;:::o;22541:128::-;22594:7;22621:40;22638:22;22648:11;22638:9;:22::i;:::-;22621:12;;:16;;:40;;;;:::i;:::-;22614:47;;22541:128;:::o;19918:143::-;5959:12;:10;:12::i;:::-;5949:22;;:6;;;;;;;;;;:22;;;5941:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20045:8:::1;20012:21;:30;20034:7;20012:30;;;;;;;;;;;;;;;;:41;;;;;;;;;;;;;;;;;;19918:143:::0;;:::o;15224:36::-;;;;:::o;15312:37::-;;;;:::o;18164:83::-;18205:5;18230:9;;;;;;;;;;;18223:16;;18164:83;:::o;18641:218::-;18729:4;18746:83;18755:12;:10;:12::i;:::-;18769:7;18778:50;18817:10;18778:11;:25;18790:12;:10;:12::i;:::-;18778:25;;;;;;;;;;;;;;;:34;18804:7;18778:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;18746:8;:83::i;:::-;18847:4;18840:11;;18641:218;;;;:::o;21847:124::-;5959:12;:10;:12::i;:::-;5949:22;;:6;;;;;;;;;;:22;;;5941:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21955:8:::1;21929:23;:34;;;;21847:124:::0;:::o;16060:40::-;;;;;;;;;;;;;:::o;15004:55::-;;;;;;;;;;;;;;;;;;;;;;:::o;15124:48::-;;;;;;;;;;;;;;;;;;;;;;:::o;15490:35::-;;;;:::o;21588:141::-;5959:12;:10;:12::i;:::-;5949:22;;:6;;;;;;;;;;:22;;;5941:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21715:6:::1;21682:22;:30;21705:6;21682:30;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;21588:141:::0;;:::o;22815:813::-;22895:22;5959:12;:10;:12::i;:::-;5949:22;;:6;;;;;;;;;;:22;;;5941:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22932:35:::1;22989:16;22932:74;;23055:16;:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23037:53;;;23099:4;23106:16;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23037:93;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23020:110;;23172:1;23146:28;;:14;:28;;;23143:225;;;23260:16;:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23242:74;;;23325:4;23332:16;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23242:114;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23225:131;;23143:225;23394:14;23380:11;;:28;;;;;;;;;;;;;;;;;;23460:16;23442:15;;:34;;;;;;;;;;;;;;;;;;23561:4;23514:22;:44;23545:11;;;;;;;;;;;23514:44;;;;;;;;;;;;;;;;:51;;;;;;;;;;;;;;;;;;23616:4;23576:15;:37;23600:11;;;;;;;;;;;23576:37;;;;;;;;;;;;;;;;:44;;;;;;;;;;;;;;;;;;6019:1;22815:813:::0;;;:::o;15400:39::-;;;;:::o;15356:37::-;;;;:::o;19773:133::-;5959:12;:10;:12::i;:::-;5949:22;;:6;;;;;;;;;;:22;;;5941:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19892:6:::1;19863:18;:26;19882:6;19863:26;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;19773:133:::0;;:::o;15267:38::-;;;;:::o;18363:119::-;18429:7;18456:9;:18;18466:7;18456:18;;;;;;;;;;;;;;;;18449:25;;18363:119;;;:::o;15775:48::-;;;;:::o;15830:46::-;;;;:::o;15621:37::-;;;;:::o;5815:79::-;5853:7;5880:6;;;;;;;;;;;5873:13;;5815:79;:::o;21231:228::-;5959:12;:10;:12::i;:::-;5949:22;;:6;;;;;;;;;;:22;;;5941:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21335:21:::1;21319:11;:38;;21311:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;21440:11;21425:12;:26;;;;21231:228:::0;:::o;6040:145::-;5959:12;:10;:12::i;:::-;5949:22;;:6;;;;;;;;;;:22;;;5941:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;6144:1:::1;6107:40;;6128:6;::::0;::::1;;;;;;;;6107:40;;;;;;;;;;;;6175:1;6158:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;6040:145::o:0;18069:87::-;18108:13;18141:7;18134:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18069:87;:::o;15448:35::-;;;;:::o;15665:43::-;;;;:::o;18867:269::-;18960:4;18977:129;18986:12;:10;:12::i;:::-;19000:7;19009:96;19048:15;19009:96;;;;;;;;;;;;;;;;;:11;:25;19021:12;:10;:12::i;:::-;19009:25;;;;;;;;;;;;;;;:34;19035:7;19009:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;18977:8;:129::i;:::-;19124:4;19117:11;;18867:269;;;;:::o;22404:125::-;5959:12;:10;:12::i;:::-;5949:22;;:6;;;;;;;;;;:22;;;5941:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22513:8:::1;22485:25;;:36;;;;;;;;;;;;;;;;;;22404:125:::0;:::o;23730:167::-;23808:4;23825:42;23835:12;:10;:12::i;:::-;23849:9;23860:6;23825:9;:42::i;:::-;;23885:4;23878:11;;23730:167;;;;:::o;15181:36::-;;;;:::o;22102:115::-;5959:12;:10;:12::i;:::-;5949:22;;:6;;;;;;;;;;:22;;;5941:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22198:10:::1;22177;;:32;;;;;;;;;;;;;;;;;;22102:115:::0;:::o;20827:392::-;5959:12;:10;:12::i;:::-;5949:22;;:6;;;;;;;;;;:22;;;5941:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20994:17:::1;20975:16;:36;;;;21041:17;21022:16;:36;;;;21090:19;21069:18;:40;;;;21149:62;21192:18;;21149:38;21170:16;;21149;;:20;;:38;;;;:::i;:::-;:42;;:62;;;;:::i;:::-;21122:24;:89;;;;20827:392:::0;;;:::o;22225:171::-;5959:12;:10;:12::i;:::-;5949:22;;:6;;;;;;;;;;:22;;;5941:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22326:8:::1;22302:21;;:32;;;;;;;;;;;;;;;;;;22350:38;22379:8;22350:38;;;;;;:::i;:::-;;;;;;;;22225:171:::0;:::o;15066:51::-;;;;;;;;;;;;;;;;;;;;;;:::o;15993:26::-;;;;;;;;;;;;;:::o;15532:37::-;;;;:::o;16107:45::-;;;;;;;;;;;;;:::o;18490:143::-;18571:7;18598:11;:18;18610:5;18598:18;;;;;;;;;;;;;;;:27;18617:7;18598:27;;;;;;;;;;;;;;;;18591:34;;18490:143;;;;:::o;19658:107::-;5959:12;:10;:12::i;:::-;5949:22;;:6;;;;;;;;;;:22;;;5941:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19753:4:::1;19726:15;:24;19742:7;19726:24;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;19658:107:::0;:::o;15578:36::-;;;;:::o;21737:102::-;5959:12;:10;:12::i;:::-;5949:22;;:6;;;;;;;;;;:22;;;5941:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21823:8:::1;21809:10;:22;;;;21737:102:::0;:::o;6193:244::-;5959:12;:10;:12::i;:::-;5949:22;;:6;;;;;;;;;;:22;;;5941:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;6302:1:::1;6282:22;;:8;:22;;;;6274:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;6392:8;6363:38;;6384:6;::::0;::::1;;;;;;;;6363:38;;;;;;;;;;;;6421:8;6412:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;6193:244:::0;:::o;16159:35::-;;;;;;;;;;;;;:::o;14943:54::-;;;;;;;;;;;;;;;;;;;;;;:::o;1217:181::-;1275:7;1295:9;1311:1;1307;:5;;;;:::i;:::-;1295:17;;1336:1;1331;:6;;1323:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;1389:1;1382:8;;;1217:181;;;;:::o;149:115::-;202:15;245:10;230:26;;149:115;:::o;19313:337::-;19423:1;19406:19;;:5;:19;;;;19398:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19504:1;19485:21;;:7;:21;;;;19477:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19588:6;19558:11;:18;19570:5;19558:18;;;;;;;;;;;;;;;:27;19577:7;19558:27;;;;;;;;;;;;;;;:36;;;;19626:7;19610:32;;19619:5;19610:32;;;19635:6;19610:32;;;;;;:::i;:::-;;;;;;;;19313:337;;;:::o;24226:1727::-;24313:4;24358:1;24340:20;;:6;:20;;;;24332:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;24442:1;24421:23;;:9;:23;;;;24413:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;24500:16;;;;;;;;;;;24497:1449;;;24550:41;24565:6;24573:9;24584:6;24550:14;:41::i;:::-;24543:48;;;;24497:1449;24647:18;:26;24666:6;24647:26;;;;;;;;;;;;;;;;;;;;;;;;;24646:27;:61;;;;;24678:18;:29;24697:9;24678:29;;;;;;;;;;;;;;;;;;;;;;;;;24677:30;24646:61;24643:176;;;24746:12;;24736:6;:22;;24728:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;24643:176;24847:28;24878:24;24896:4;24878:9;:24::i;:::-;24847:55;;24917:28;24972:23;;24948:20;:47;;24917:78;;25028:23;:44;;;;;25056:16;;;;;;;;;;;25055:17;25028:44;:72;;;;;25077:15;:23;25093:6;25077:23;;;;;;;;;;;;;;;;;;;;;;;;;25076:24;25028:72;:97;;;;;25104:21;;;;;;;;;;;25028:97;25024:308;;;25163:25;;;;;;;;;;;25160:97;;;25234:23;;25211:46;;25160:97;25276:36;25291:20;25276:14;:36::i;:::-;25024:308;25368:53;25390:6;25368:53;;;;;;;;;;;;;;;;;:9;:17;25378:6;25368:17;;;;;;;;;;;;;;;;:21;;:53;;;;;:::i;:::-;25348:9;:17;25358:6;25348:17;;;;;;;;;;;;;;;:73;;;;25438:19;25461:21;:29;25483:6;25461:29;;;;;;;;;;;;;;;;;;;;;;;;;:65;;;;25494:21;:32;25516:9;25494:32;;;;;;;;;;;;;;;;;;;;;;;;;25461:65;25460:156;;25582:34;25590:6;25598:9;25609:6;25582:7;:34::i;:::-;25460:156;;;25573:6;25460:156;25438:178;;25636:16;;;;;;;;;;;:54;;;;;25657:22;:33;25680:9;25657:33;;;;;;;;;;;;;;;;;;;;;;;;;25656:34;25636:54;25633:136;;;25758:10;;25717:37;25742:11;25717:20;25727:9;25717;:20::i;:::-;:24;;:37;;;;:::i;:::-;:51;;25709:60;;;;;;25633:136;25809:37;25834:11;25809:9;:20;25819:9;25809:20;;;;;;;;;;;;;;;;:24;;:37;;;;:::i;:::-;25786:9;:20;25796:9;25786:20;;;;;;;;;;;;;;;:60;;;;25885:9;25868:40;;25877:6;25868:40;;;25896:11;25868:40;;;;;;:::i;:::-;;;;;;;;25930:4;25923:11;;;;;24226:1727;;;;;;:::o;1550:192::-;1636:7;1669:1;1664;:6;;1672:12;1656:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;1696:9;1712:1;1708;:5;;;;:::i;:::-;1696:17;;1733:1;1726:8;;;1550:192;;;;;:::o;1406:136::-;1464:7;1491:43;1495:1;1498;1491:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;1484:50;;1406:136;;;;:::o;25961:330::-;26054:4;26091:53;26113:6;26091:53;;;;;;;;;;;;;;;;;:9;:17;26101:6;26091:17;;;;;;;;;;;;;;;;:21;;:53;;;;;:::i;:::-;26071:9;:17;26081:6;26071:17;;;;;;;;;;;;;;;:73;;;;26178:32;26203:6;26178:9;:20;26188:9;26178:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;26155:9;:20;26165:9;26155:20;;;;;;;;;;;;;;;:55;;;;26243:9;26226:35;;26235:6;26226:35;;;26254:6;26226:35;;;;;;:::i;:::-;;;;;;;;26279:4;26272:11;;25961:330;;;;;:::o;26299:1068::-;16636:4;16617:16;;:23;;;;;;;;;;;;;;;;;;26381:19:::1;26403:66;26467:1;26403:59;26437:24;;26403:29;26415:16;;26403:7;:11;;:29;;;;:::i;:::-;:33;;:59;;;;:::i;:::-;:63;;:66;;;;:::i;:::-;26381:88;;26480:21;26504:24;26516:11;26504:7;:11;;:24;;;;:::i;:::-;26480:48;;26541:31;26558:13;26541:16;:31::i;:::-;26583:22;26608:21;26583:46;;26642:19;26664:53;26693:23;26714:1;26693:16;;:20;;:23;;;;:::i;:::-;26664:24;;:28;;:53;;;;:::i;:::-;26642:75;;26738:26;26767:60;26825:1;26767:53;26808:11;26767:36;26786:16;;26767:14;:18;;:36;;;;:::i;:::-;:40;;:53;;;;:::i;:::-;:57;;:60;;;;:::i;:::-;26738:89;;26838:28;26869:55;26912:11;26869:38;26888:18;;26869:14;:18;;:38;;;;:::i;:::-;:42;;:55;;;;:::i;:::-;26838:86;;26935:26;26964:64;27007:20;26964:38;26983:18;26964:14;:18;;:38;;;;:::i;:::-;:42;;:64;;;;:::i;:::-;26935:93;;27065:1;27044:18;:22;27041:92;;;27081:52;27102:10;;;;;;;;;;;27114:18;27081:20;:52::i;:::-;27041:92;27172:1;27149:20;:24;27146:96;;;27188:54;27209:10;;;;;;;;;;;27221:20;27188;:54::i;:::-;27146:96;27279:1;27258:18;:22;:41;;;;;27298:1;27284:11;:15;27258:41;27255:104;;;27314:45;27327:11;27340:18;27314:12;:45::i;:::-;27255:104;16651:1;;;;;;;16682:5:::0;16663:16;;:24;;;;;;;;;;;;;;;;;;26299:1068;:::o;28574:628::-;28660:7;28690:17;28710:1;28690:21;;28735:15;:23;28751:6;28735:23;;;;;;;;;;;;;;;;;;;;;;;;;28732:229;;;28787:38;28821:3;28787:29;28798:17;;28787:6;:10;;:29;;;;:::i;:::-;:33;;:38;;;;:::i;:::-;28775:50;;28732:229;;;28855:15;:26;28871:9;28855:26;;;;;;;;;;;;;;;;;;;;;;;;;28852:109;;;28910:39;28945:3;28910:30;28921:18;;28910:6;:10;;:30;;;;:::i;:::-;:34;;:39;;;;:::i;:::-;28898:51;;28852:109;28732:229;28996:1;28984:9;:13;28981:173;;;29041:39;29070:9;29041;:24;29059:4;29041:24;;;;;;;;;;;;;;;;:28;;:39;;;;:::i;:::-;29014:9;:24;29032:4;29014:24;;;;;;;;;;;;;;;:66;;;;29125:4;29100:42;;29109:6;29100:42;;;29132:9;29100:42;;;;;;:::i;:::-;;;;;;;;28981:173;29173:21;29184:9;29173:6;:10;;:21;;;;:::i;:::-;29166:28;;;28574:628;;;;;:::o;1750:250::-;1808:7;1837:1;1832;:6;1828:47;;;1862:1;1855:8;;;;1828:47;1887:9;1903:1;1899;:5;;;;:::i;:::-;1887:17;;1932:1;1927;1923;:5;;;;:::i;:::-;:10;1915:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;1991:1;1984:8;;;1750:250;;;;;:::o;2008:132::-;2066:7;2093:39;2097:1;2100;2093:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;2086:46;;2008:132;;;;:::o;27379:666::-;27505:21;27543:1;27529:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27505:40;;27574:4;27556;27561:1;27556:7;;;;;;;;;;;;;;;;;;;;;:23;;;;;;;;;;;27600:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27590:4;27595:1;27590:7;;;;;;;;;;;;;;;;;;;;;:32;;;;;;;;;;;27635:62;27652:4;27667:15;;;;;;;;;;;27685:11;27635:8;:62::i;:::-;27736:15;;;;;;;;;;;:66;;;27817:11;27843:1;27887:4;27914;27950:15;27736:240;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28002:35;28019:11;28032:4;28002:35;;;;;;;:::i;:::-;;;;;;;;27379:666;;:::o;22677:126::-;22769:9;:18;;:26;22788:6;22769:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22677:126;;:::o;28053:513::-;28201:62;28218:4;28233:15;;;;;;;;;;;28251:11;28201:8;:62::i;:::-;28306:15;;;;;;;;;;;:31;;;28345:9;28378:4;28398:11;28424:1;28467;28510:7;:5;:7::i;:::-;28532:15;28306:252;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;28053:513;;:::o;2148:278::-;2234:7;2266:1;2262;:5;2269:12;2254:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;2293:9;2309:1;2305;:5;;;;:::i;:::-;2293:17;;2417:1;2410:8;;;2148:278;;;;;:::o;7:139:1:-;53:5;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:143::-;209:5;240:6;234:13;225:22;;256:33;283:5;256:33;:::i;:::-;215:80;;;;:::o;301:133::-;344:5;382:6;369:20;360:29;;398:30;422:5;398:30;:::i;:::-;350:84;;;;:::o;440:139::-;486:5;524:6;511:20;502:29;;540:33;567:5;540:33;:::i;:::-;492:87;;;;:::o;585:143::-;642:5;673:6;667:13;658:22;;689:33;716:5;689:33;:::i;:::-;648:80;;;;:::o;734:262::-;793:6;842:2;830:9;821:7;817:23;813:32;810:2;;;858:1;855;848:12;810:2;901:1;926:53;971:7;962:6;951:9;947:22;926:53;:::i;:::-;916:63;;872:117;800:196;;;;:::o;1002:284::-;1072:6;1121:2;1109:9;1100:7;1096:23;1092:32;1089:2;;;1137:1;1134;1127:12;1089:2;1180:1;1205:64;1261:7;1252:6;1241:9;1237:22;1205:64;:::i;:::-;1195:74;;1151:128;1079:207;;;;:::o;1292:407::-;1360:6;1368;1417:2;1405:9;1396:7;1392:23;1388:32;1385:2;;;1433:1;1430;1423:12;1385:2;1476:1;1501:53;1546:7;1537:6;1526:9;1522:22;1501:53;:::i;:::-;1491:63;;1447:117;1603:2;1629:53;1674:7;1665:6;1654:9;1650:22;1629:53;:::i;:::-;1619:63;;1574:118;1375:324;;;;;:::o;1705:552::-;1782:6;1790;1798;1847:2;1835:9;1826:7;1822:23;1818:32;1815:2;;;1863:1;1860;1853:12;1815:2;1906:1;1931:53;1976:7;1967:6;1956:9;1952:22;1931:53;:::i;:::-;1921:63;;1877:117;2033:2;2059:53;2104:7;2095:6;2084:9;2080:22;2059:53;:::i;:::-;2049:63;;2004:118;2161:2;2187:53;2232:7;2223:6;2212:9;2208:22;2187:53;:::i;:::-;2177:63;;2132:118;1805:452;;;;;:::o;2263:401::-;2328:6;2336;2385:2;2373:9;2364:7;2360:23;2356:32;2353:2;;;2401:1;2398;2391:12;2353:2;2444:1;2469:53;2514:7;2505:6;2494:9;2490:22;2469:53;:::i;:::-;2459:63;;2415:117;2571:2;2597:50;2639:7;2630:6;2619:9;2615:22;2597:50;:::i;:::-;2587:60;;2542:115;2343:321;;;;;:::o;2670:407::-;2738:6;2746;2795:2;2783:9;2774:7;2770:23;2766:32;2763:2;;;2811:1;2808;2801:12;2763:2;2854:1;2879:53;2924:7;2915:6;2904:9;2900:22;2879:53;:::i;:::-;2869:63;;2825:117;2981:2;3007:53;3052:7;3043:6;3032:9;3028:22;3007:53;:::i;:::-;2997:63;;2952:118;2753:324;;;;;:::o;3083:256::-;3139:6;3188:2;3176:9;3167:7;3163:23;3159:32;3156:2;;;3204:1;3201;3194:12;3156:2;3247:1;3272:50;3314:7;3305:6;3294:9;3290:22;3272:50;:::i;:::-;3262:60;;3218:114;3146:193;;;;:::o;3345:262::-;3404:6;3453:2;3441:9;3432:7;3428:23;3424:32;3421:2;;;3469:1;3466;3459:12;3421:2;3512:1;3537:53;3582:7;3573:6;3562:9;3558:22;3537:53;:::i;:::-;3527:63;;3483:117;3411:196;;;;:::o;3613:552::-;3690:6;3698;3706;3755:2;3743:9;3734:7;3730:23;3726:32;3723:2;;;3771:1;3768;3761:12;3723:2;3814:1;3839:53;3884:7;3875:6;3864:9;3860:22;3839:53;:::i;:::-;3829:63;;3785:117;3941:2;3967:53;4012:7;4003:6;3992:9;3988:22;3967:53;:::i;:::-;3957:63;;3912:118;4069:2;4095:53;4140:7;4131:6;4120:9;4116:22;4095:53;:::i;:::-;4085:63;;4040:118;3713:452;;;;;:::o;4171:596::-;4259:6;4267;4275;4324:2;4312:9;4303:7;4299:23;4295:32;4292:2;;;4340:1;4337;4330:12;4292:2;4383:1;4408:64;4464:7;4455:6;4444:9;4440:22;4408:64;:::i;:::-;4398:74;;4354:128;4521:2;4547:64;4603:7;4594:6;4583:9;4579:22;4547:64;:::i;:::-;4537:74;;4492:129;4660:2;4686:64;4742:7;4733:6;4722:9;4718:22;4686:64;:::i;:::-;4676:74;;4631:129;4282:485;;;;;:::o;4773:179::-;4842:10;4863:46;4905:3;4897:6;4863:46;:::i;:::-;4941:4;4936:3;4932:14;4918:28;;4853:99;;;;:::o;4958:108::-;5035:24;5053:5;5035:24;:::i;:::-;5030:3;5023:37;5013:53;;:::o;5072:118::-;5159:24;5177:5;5159:24;:::i;:::-;5154:3;5147:37;5137:53;;:::o;5226:732::-;5345:3;5374:54;5422:5;5374:54;:::i;:::-;5444:86;5523:6;5518:3;5444:86;:::i;:::-;5437:93;;5554:56;5604:5;5554:56;:::i;:::-;5633:7;5664:1;5649:284;5674:6;5671:1;5668:13;5649:284;;;5750:6;5744:13;5777:63;5836:3;5821:13;5777:63;:::i;:::-;5770:70;;5863:60;5916:6;5863:60;:::i;:::-;5853:70;;5709:224;5696:1;5693;5689:9;5684:14;;5649:284;;;5653:14;5949:3;5942:10;;5350:608;;;;;;;:::o;5964:109::-;6045:21;6060:5;6045:21;:::i;:::-;6040:3;6033:34;6023:50;;:::o;6079:185::-;6193:64;6251:5;6193:64;:::i;:::-;6188:3;6181:77;6171:93;;:::o;6270:147::-;6365:45;6404:5;6365:45;:::i;:::-;6360:3;6353:58;6343:74;;:::o;6423:364::-;6511:3;6539:39;6572:5;6539:39;:::i;:::-;6594:71;6658:6;6653:3;6594:71;:::i;:::-;6587:78;;6674:52;6719:6;6714:3;6707:4;6700:5;6696:16;6674:52;:::i;:::-;6751:29;6773:6;6751:29;:::i;:::-;6746:3;6742:39;6735:46;;6515:272;;;;;:::o;6793:366::-;6935:3;6956:67;7020:2;7015:3;6956:67;:::i;:::-;6949:74;;7032:93;7121:3;7032:93;:::i;:::-;7150:2;7145:3;7141:12;7134:19;;6939:220;;;:::o;7165:366::-;7307:3;7328:67;7392:2;7387:3;7328:67;:::i;:::-;7321:74;;7404:93;7493:3;7404:93;:::i;:::-;7522:2;7517:3;7513:12;7506:19;;7311:220;;;:::o;7537:366::-;7679:3;7700:67;7764:2;7759:3;7700:67;:::i;:::-;7693:74;;7776:93;7865:3;7776:93;:::i;:::-;7894:2;7889:3;7885:12;7878:19;;7683:220;;;:::o;7909:366::-;8051:3;8072:67;8136:2;8131:3;8072:67;:::i;:::-;8065:74;;8148:93;8237:3;8148:93;:::i;:::-;8266:2;8261:3;8257:12;8250:19;;8055:220;;;:::o;8281:366::-;8423:3;8444:67;8508:2;8503:3;8444:67;:::i;:::-;8437:74;;8520:93;8609:3;8520:93;:::i;:::-;8638:2;8633:3;8629:12;8622:19;;8427:220;;;:::o;8653:366::-;8795:3;8816:67;8880:2;8875:3;8816:67;:::i;:::-;8809:74;;8892:93;8981:3;8892:93;:::i;:::-;9010:2;9005:3;9001:12;8994:19;;8799:220;;;:::o;9025:366::-;9167:3;9188:67;9252:2;9247:3;9188:67;:::i;:::-;9181:74;;9264:93;9353:3;9264:93;:::i;:::-;9382:2;9377:3;9373:12;9366:19;;9171:220;;;:::o;9397:366::-;9539:3;9560:67;9624:2;9619:3;9560:67;:::i;:::-;9553:74;;9636:93;9725:3;9636:93;:::i;:::-;9754:2;9749:3;9745:12;9738:19;;9543:220;;;:::o;9769:366::-;9911:3;9932:67;9996:2;9991:3;9932:67;:::i;:::-;9925:74;;10008:93;10097:3;10008:93;:::i;:::-;10126:2;10121:3;10117:12;10110:19;;9915:220;;;:::o;10141:366::-;10283:3;10304:67;10368:2;10363:3;10304:67;:::i;:::-;10297:74;;10380:93;10469:3;10380:93;:::i;:::-;10498:2;10493:3;10489:12;10482:19;;10287:220;;;:::o;10513:118::-;10600:24;10618:5;10600:24;:::i;:::-;10595:3;10588:37;10578:53;;:::o;10637:112::-;10720:22;10736:5;10720:22;:::i;:::-;10715:3;10708:35;10698:51;;:::o;10755:222::-;10848:4;10886:2;10875:9;10871:18;10863:26;;10899:71;10967:1;10956:9;10952:17;10943:6;10899:71;:::i;:::-;10853:124;;;;:::o;10983:332::-;11104:4;11142:2;11131:9;11127:18;11119:26;;11155:71;11223:1;11212:9;11208:17;11199:6;11155:71;:::i;:::-;11236:72;11304:2;11293:9;11289:18;11280:6;11236:72;:::i;:::-;11109:206;;;;;:::o;11321:807::-;11570:4;11608:3;11597:9;11593:19;11585:27;;11622:71;11690:1;11679:9;11675:17;11666:6;11622:71;:::i;:::-;11703:72;11771:2;11760:9;11756:18;11747:6;11703:72;:::i;:::-;11785:80;11861:2;11850:9;11846:18;11837:6;11785:80;:::i;:::-;11875;11951:2;11940:9;11936:18;11927:6;11875:80;:::i;:::-;11965:73;12033:3;12022:9;12018:19;12009:6;11965:73;:::i;:::-;12048;12116:3;12105:9;12101:19;12092:6;12048:73;:::i;:::-;11575:553;;;;;;;;;:::o;12134:210::-;12221:4;12259:2;12248:9;12244:18;12236:26;;12272:65;12334:1;12323:9;12319:17;12310:6;12272:65;:::i;:::-;12226:118;;;;:::o;12350:276::-;12470:4;12508:2;12497:9;12493:18;12485:26;;12521:98;12616:1;12605:9;12601:17;12592:6;12521:98;:::i;:::-;12475:151;;;;:::o;12632:313::-;12745:4;12783:2;12772:9;12768:18;12760:26;;12832:9;12826:4;12822:20;12818:1;12807:9;12803:17;12796:47;12860:78;12933:4;12924:6;12860:78;:::i;:::-;12852:86;;12750:195;;;;:::o;12951:419::-;13117:4;13155:2;13144:9;13140:18;13132:26;;13204:9;13198:4;13194:20;13190:1;13179:9;13175:17;13168:47;13232:131;13358:4;13232:131;:::i;:::-;13224:139;;13122:248;;;:::o;13376:419::-;13542:4;13580:2;13569:9;13565:18;13557:26;;13629:9;13623:4;13619:20;13615:1;13604:9;13600:17;13593:47;13657:131;13783:4;13657:131;:::i;:::-;13649:139;;13547:248;;;:::o;13801:419::-;13967:4;14005:2;13994:9;13990:18;13982:26;;14054:9;14048:4;14044:20;14040:1;14029:9;14025:17;14018:47;14082:131;14208:4;14082:131;:::i;:::-;14074:139;;13972:248;;;:::o;14226:419::-;14392:4;14430:2;14419:9;14415:18;14407:26;;14479:9;14473:4;14469:20;14465:1;14454:9;14450:17;14443:47;14507:131;14633:4;14507:131;:::i;:::-;14499:139;;14397:248;;;:::o;14651:419::-;14817:4;14855:2;14844:9;14840:18;14832:26;;14904:9;14898:4;14894:20;14890:1;14879:9;14875:17;14868:47;14932:131;15058:4;14932:131;:::i;:::-;14924:139;;14822:248;;;:::o;15076:419::-;15242:4;15280:2;15269:9;15265:18;15257:26;;15329:9;15323:4;15319:20;15315:1;15304:9;15300:17;15293:47;15357:131;15483:4;15357:131;:::i;:::-;15349:139;;15247:248;;;:::o;15501:419::-;15667:4;15705:2;15694:9;15690:18;15682:26;;15754:9;15748:4;15744:20;15740:1;15729:9;15725:17;15718:47;15782:131;15908:4;15782:131;:::i;:::-;15774:139;;15672:248;;;:::o;15926:419::-;16092:4;16130:2;16119:9;16115:18;16107:26;;16179:9;16173:4;16169:20;16165:1;16154:9;16150:17;16143:47;16207:131;16333:4;16207:131;:::i;:::-;16199:139;;16097:248;;;:::o;16351:419::-;16517:4;16555:2;16544:9;16540:18;16532:26;;16604:9;16598:4;16594:20;16590:1;16579:9;16575:17;16568:47;16632:131;16758:4;16632:131;:::i;:::-;16624:139;;16522:248;;;:::o;16776:419::-;16942:4;16980:2;16969:9;16965:18;16957:26;;17029:9;17023:4;17019:20;17015:1;17004:9;17000:17;16993:47;17057:131;17183:4;17057:131;:::i;:::-;17049:139;;16947:248;;;:::o;17201:222::-;17294:4;17332:2;17321:9;17317:18;17309:26;;17345:71;17413:1;17402:9;17398:17;17389:6;17345:71;:::i;:::-;17299:124;;;;:::o;17429:483::-;17600:4;17638:2;17627:9;17623:18;17615:26;;17651:71;17719:1;17708:9;17704:17;17695:6;17651:71;:::i;:::-;17769:9;17763:4;17759:20;17754:2;17743:9;17739:18;17732:48;17797:108;17900:4;17891:6;17797:108;:::i;:::-;17789:116;;17605:307;;;;;:::o;17918:831::-;18181:4;18219:3;18208:9;18204:19;18196:27;;18233:71;18301:1;18290:9;18286:17;18277:6;18233:71;:::i;:::-;18314:80;18390:2;18379:9;18375:18;18366:6;18314:80;:::i;:::-;18441:9;18435:4;18431:20;18426:2;18415:9;18411:18;18404:48;18469:108;18572:4;18563:6;18469:108;:::i;:::-;18461:116;;18587:72;18655:2;18644:9;18640:18;18631:6;18587:72;:::i;:::-;18669:73;18737:3;18726:9;18722:19;18713:6;18669:73;:::i;:::-;18186:563;;;;;;;;:::o;18755:214::-;18844:4;18882:2;18871:9;18867:18;18859:26;;18895:67;18959:1;18948:9;18944:17;18935:6;18895:67;:::i;:::-;18849:120;;;;:::o;18975:132::-;19042:4;19065:3;19057:11;;19095:4;19090:3;19086:14;19078:22;;19047:60;;;:::o;19113:114::-;19180:6;19214:5;19208:12;19198:22;;19187:40;;;:::o;19233:99::-;19285:6;19319:5;19313:12;19303:22;;19292:40;;;:::o;19338:113::-;19408:4;19440;19435:3;19431:14;19423:22;;19413:38;;;:::o;19457:184::-;19556:11;19590:6;19585:3;19578:19;19630:4;19625:3;19621:14;19606:29;;19568:73;;;;:::o;19647:169::-;19731:11;19765:6;19760:3;19753:19;19805:4;19800:3;19796:14;19781:29;;19743:73;;;;:::o;19822:305::-;19862:3;19881:20;19899:1;19881:20;:::i;:::-;19876:25;;19915:20;19933:1;19915:20;:::i;:::-;19910:25;;20069:1;20001:66;19997:74;19994:1;19991:81;19988:2;;;20075:18;;:::i;:::-;19988:2;20119:1;20116;20112:9;20105:16;;19866:261;;;;:::o;20133:185::-;20173:1;20190:20;20208:1;20190:20;:::i;:::-;20185:25;;20224:20;20242:1;20224:20;:::i;:::-;20219:25;;20263:1;20253:2;;20268:18;;:::i;:::-;20253:2;20310:1;20307;20303:9;20298:14;;20175:143;;;;:::o;20324:348::-;20364:7;20387:20;20405:1;20387:20;:::i;:::-;20382:25;;20421:20;20439:1;20421:20;:::i;:::-;20416:25;;20609:1;20541:66;20537:74;20534:1;20531:81;20526:1;20519:9;20512:17;20508:105;20505:2;;;20616:18;;:::i;:::-;20505:2;20664:1;20661;20657:9;20646:20;;20372:300;;;;:::o;20678:191::-;20718:4;20738:20;20756:1;20738:20;:::i;:::-;20733:25;;20772:20;20790:1;20772:20;:::i;:::-;20767:25;;20811:1;20808;20805:8;20802:2;;;20816:18;;:::i;:::-;20802:2;20861:1;20858;20854:9;20846:17;;20723:146;;;;:::o;20875:96::-;20912:7;20941:24;20959:5;20941:24;:::i;:::-;20930:35;;20920:51;;;:::o;20977:90::-;21011:7;21054:5;21047:13;21040:21;21029:32;;21019:48;;;:::o;21073:126::-;21110:7;21150:42;21143:5;21139:54;21128:65;;21118:81;;;:::o;21205:77::-;21242:7;21271:5;21260:16;;21250:32;;;:::o;21288:86::-;21323:7;21363:4;21356:5;21352:16;21341:27;;21331:43;;;:::o;21380:180::-;21457:9;21490:64;21548:5;21490:64;:::i;:::-;21477:77;;21467:93;;;:::o;21566:140::-;21643:9;21676:24;21694:5;21676:24;:::i;:::-;21663:37;;21653:53;;;:::o;21712:121::-;21770:9;21803:24;21821:5;21803:24;:::i;:::-;21790:37;;21780:53;;;:::o;21839:307::-;21907:1;21917:113;21931:6;21928:1;21925:13;21917:113;;;22016:1;22011:3;22007:11;22001:18;21997:1;21992:3;21988:11;21981:39;21953:2;21950:1;21946:10;21941:15;;21917:113;;;22048:6;22045:1;22042:13;22039:2;;;22128:1;22119:6;22114:3;22110:16;22103:27;22039:2;21888:258;;;;:::o;22152:320::-;22196:6;22233:1;22227:4;22223:12;22213:22;;22280:1;22274:4;22270:12;22301:18;22291:2;;22357:4;22349:6;22345:17;22335:27;;22291:2;22419;22411:6;22408:14;22388:18;22385:38;22382:2;;;22438:18;;:::i;:::-;22382:2;22203:269;;;;:::o;22478:180::-;22526:77;22523:1;22516:88;22623:4;22620:1;22613:15;22647:4;22644:1;22637:15;22664:180;22712:77;22709:1;22702:88;22809:4;22806:1;22799:15;22833:4;22830:1;22823:15;22850:180;22898:77;22895:1;22888:88;22995:4;22992:1;22985:15;23019:4;23016:1;23009:15;23036:102;23077:6;23128:2;23124:7;23119:2;23112:5;23108:14;23104:28;23094:38;;23084:54;;;:::o;23144:222::-;23284:34;23280:1;23272:6;23268:14;23261:58;23353:5;23348:2;23340:6;23336:15;23329:30;23250:116;:::o;23372:239::-;23512:34;23508:1;23500:6;23496:14;23489:58;23581:22;23576:2;23568:6;23564:15;23557:47;23478:133;:::o;23617:225::-;23757:34;23753:1;23745:6;23741:14;23734:58;23826:8;23821:2;23813:6;23809:15;23802:33;23723:119;:::o;23848:221::-;23988:34;23984:1;23976:6;23972:14;23965:58;24057:4;24052:2;24044:6;24040:15;24033:29;23954:115;:::o;24075:177::-;24215:29;24211:1;24203:6;24199:14;24192:53;24181:71;:::o;24258:227::-;24398:34;24394:1;24386:6;24382:14;24375:58;24467:10;24462:2;24454:6;24450:15;24443:35;24364:121;:::o;24491:220::-;24631:34;24627:1;24619:6;24615:14;24608:58;24700:3;24695:2;24687:6;24683:15;24676:28;24597:114;:::o;24717:182::-;24857:34;24853:1;24845:6;24841:14;24834:58;24823:76;:::o;24905:224::-;25045:34;25041:1;25033:6;25029:14;25022:58;25114:7;25109:2;25101:6;25097:15;25090:32;25011:118;:::o;25135:223::-;25275:34;25271:1;25263:6;25259:14;25252:58;25344:6;25339:2;25331:6;25327:15;25320:31;25241:117;:::o;25364:122::-;25437:24;25455:5;25437:24;:::i;:::-;25430:5;25427:35;25417:2;;25476:1;25473;25466:12;25417:2;25407:79;:::o;25492:116::-;25562:21;25577:5;25562:21;:::i;:::-;25555:5;25552:32;25542:2;;25598:1;25595;25588:12;25542:2;25532:76;:::o;25614:122::-;25687:24;25705:5;25687:24;:::i;:::-;25680:5;25677:35;25667:2;;25726:1;25723;25716:12;25667:2;25657:79;:::o

Swarm Source

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