ETH Price: $2,526.43 (+0.15%)

Token

Porn Scape Token (PST)
 

Overview

Max Total Supply

1,000,000,000,000 PST

Holders

35

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0.000001192578125001 PST

Value
$0.00
0xef533d691da619CbD17dD5Fe392aFE93FFB1723B
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:
PornScapeToken

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

/*
Porn Scape Token (PST)

Website: https://pornscape.io/
Telegram: https://t.me/pornscapecommunity
Twitter: https://twitter.com/pornscapetoken
*/

pragma solidity ^0.8.18;

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

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

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

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

    function allPairsLength() external view returns (uint256);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

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

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

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

    function decimals() external pure returns (uint8);

    function totalSupply() external view returns (uint256);

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

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

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

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

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

    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function PERMIT_TYPEHASH() external pure returns (bytes32);

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

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

    function factory() external view returns (address);

    function token0() external view returns (address);

    function token1() external view returns (address);

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

    function price0CumulativeLast() external view returns (uint256);

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

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

    function burn(address to)
        external
        returns (uint256 amount0, uint256 amount1);

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

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

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

    function WETH() external pure returns (address);

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

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

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

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

    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountA, uint256 amountB);

    function removeLiquidityETHWithPermit(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountToken, uint256 amountETH);

    function swapExactTokensForTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapTokensForExactTokens(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapExactETHForTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

    function swapTokensForExactETH(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapExactTokensForETH(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapETHForExactTokens(
        uint256 amountOut,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

    function quote(
        uint256 amountA,
        uint256 reserveA,
        uint256 reserveB
    ) external pure returns (uint256 amountB);

    function getAmountOut(
        uint256 amountIn,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountOut);

    function getAmountIn(
        uint256 amountOut,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountIn);

    function getAmountsOut(uint256 amountIn, address[] calldata path)
        external
        view
        returns (uint256[] memory amounts);

    function getAmountsIn(uint256 amountOut, address[] calldata path)
        external
        view
        returns (uint256[] memory amounts);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountETH);

    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountETH);

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

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

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

library Address {
    function isContract(address account) internal view returns (bool) {
     
        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }

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

        (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");
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

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

   
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

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

    
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

  
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


abstract contract Ownable is Context {
    address private _owner;

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

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

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

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

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

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

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


interface IERC20 {
   
    function totalSupply() external view returns (uint256);

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

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

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

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

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

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

contract PornScapeToken is Context, IERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;

    
    event SetLiquidityFee(uint256 amount);
    event SetdevelopmentFee(uint256 amount);
    event UpdatedRouter(address router);
 

    string private _name = "Porn Scape Token";
    string private _symbol = "PST";
    uint8 private _decimals = 18;
    uint256 private _totalSupply = 1000000000000 * 10**_decimals;

    address payable private developmentAddress = payable(0x830D4620425dE9e1c6b82bd279C6E4a81045821E);
    address private uniswapAddress = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;

    mapping(address => uint256) private _balances;
    mapping(address => mapping(address => uint256)) private _allowances;
    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) private _isExcludedFromMaxBalance;
    mapping (address => bool) public unAuthlisted;

    uint256 private _totalFeesToContract;
    uint256 private _liquidityFee;
    uint256 private _developmentFee;
    uint256 private _maxBalance;

    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapV2Pair;

    uint256 private _liquifyThreshhold;
    bool inSwapAndLiquify;

    modifier lockTheSwap() {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }

    constructor() {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
            uniswapAddress
        );
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

        uniswapV2Router = _uniswapV2Router;

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

        _isExcludedFromMaxBalance[owner()] = true;
        _isExcludedFromMaxBalance[address(this)] = true;
        _isExcludedFromMaxBalance[uniswapV2Pair] = true;

        _liquidityFee = 5;
        _developmentFee = 5;
        _totalFeesToContract = _liquidityFee.add(_developmentFee);

        _liquifyThreshhold = _totalSupply / 100 * 1;
        _maxBalance = _totalSupply / 1000 * 25;

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

    receive() external payable {}

    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 transfer(address recipient, uint256 amount)
        public
        override
        returns (bool)
    {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

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

    function approve(address spender, uint256 amount)
        public
        override
        returns (bool)
    {
        _approve(_msgSender(), spender, 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 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 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 setdevelopmentAddress(address payable newdevelopmentAddress)
        external
        onlyOwner
    {
        developmentAddress = newdevelopmentAddress;
    }

    function setLiquidityFeePercent(uint256 newLiquidityFee)
        external
        onlyOwner
    {
        require(!inSwapAndLiquify, "inSwapAndLiquify");
        _liquidityFee = newLiquidityFee;
     
        _totalFeesToContract = _liquidityFee.add(_developmentFee);
        emit SetLiquidityFee(_liquidityFee);
    }

    function setdevelopmentFeePercent(uint256 newdevelopmentFee)
        external
        onlyOwner
    {
        require(!inSwapAndLiquify, "inSwapAndLiquify");
        _developmentFee = newdevelopmentFee;
     
        _totalFeesToContract = _liquidityFee.add(_developmentFee);
        emit SetdevelopmentFee(_developmentFee);
    }

    function setLiquifyThreshhold(uint256 newLiquifyThreshhold)
        external
        onlyOwner
    {
        _liquifyThreshhold = newLiquifyThreshhold;
    }

    function setMaxBalance(uint256 newMaxBalance) external onlyOwner {
        require(newMaxBalance >= _totalSupply.mul(1).div(1000));
        _maxBalance = newMaxBalance;
    }

    function isExcludedFromFees(address account) public view returns (bool) {
        return _isExcludedFromFees[account];
    }

    function excludeFromFees(address account) public onlyOwner {
        _isExcludedFromFees[account] = true;
    }

    function includeInFees(address account) public onlyOwner {
        _isExcludedFromFees[account] = false;
    }

    function isExcludedFromMaxBalance(address account)
        public
        view
        returns (bool)
    {
        return _isExcludedFromMaxBalance[account];
    }

    function excludeFromMaxBalance(address account) public onlyOwner {
        _isExcludedFromMaxBalance[account] = true;
    }

    function includeInMaxBalance(address account) public onlyOwner {
        _isExcludedFromMaxBalance[account] = false;
    }

 
    function liquidityFee() public view returns (uint256) {
        return _liquidityFee;
    }

    function developmentFee() public view returns (uint256) {
        return _developmentFee;
    }

    function liquifyThreshhold() public view returns (uint256) {
        return _liquifyThreshhold;
    }

    function maxBalance() public view returns (uint256) {
        return _maxBalance;
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");

        require(!unAuthlisted[from] && !unAuthlisted[to], 'Address is blacklisted');

        if (
            from != owner() &&
            to != owner() &&
            !_isExcludedFromMaxBalance[to]
        ) {
            require(
                balanceOf(to).add(amount) <= _maxBalance,
                "Max wallet amount reached."
            );
        }

        if (
            to == uniswapV2Pair &&
            !inSwapAndLiquify && 
            balanceOf(address(this)) >= _liquifyThreshhold &&
            _totalFeesToContract > 0 &&
            from != owner() &&
            to != owner()
        ) {
            collectFees();
        }

        if (
            !(_isExcludedFromFees[from] || _isExcludedFromFees[to]) &&
            _totalFeesToContract > 0
        ) {
            uint256 feesToContract = amount.mul(_totalFeesToContract).div(100);
            amount = amount.sub(feesToContract);
            transferToken(from, address(this), feesToContract);
      
        }

        transferToken(from, to, amount);
    }

    function collectFees() private lockTheSwap {
        uint256 liquidityTokensToSell = balanceOf(address(this))
            .mul(_liquidityFee)
            .div(_totalFeesToContract);
        uint256 developmentTokensToSell = balanceOf(address(this))
            .mul(_developmentFee)
            .div(_totalFeesToContract);

        swapAndLiquify(liquidityTokensToSell);

        swapAndSendToFee(developmentTokensToSell);
    }

    function swapAndLiquify(uint256 tokens) private {
        uint256 half = tokens.div(2);
        uint256 otherHalf = tokens.sub(half);

        uint256 initialBalance = address(this).balance;

        swapTokensForEth(half);

        uint256 newBalance = address(this).balance.sub(initialBalance);

        addLiquidity(otherHalf, newBalance);
    }

    function swapAndSendToFee(uint256 tokens) private {

        uint256 initialBalance = address(this).balance;
        swapTokensForEth(tokens);
         uint256 newBalance = address(this).balance.sub(initialBalance);
         developmentAddress.transfer(newBalance); 

    }

    function swapTokensForEth(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

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

        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        _approve(address(this), address(uniswapV2Router), tokenAmount);

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

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

        _balances[sender] = _balances[sender].sub(
            amount,
            "ERC20: transfer amount exceeds balance"
        );
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
    }

    function unAuthAddress(address _address, bool _value) public onlyOwner{
        unAuthlisted[_address] = _value;
    }

   function transferToOwner(uint256 amount) external onlyOwner {

       address master = owner();
        if (amount == 0) {
            amount = address(this).balance;
        }
        payable(master).transfer(amount);
    }
    
    function withdrawToken( uint256 _tPercent) external onlyOwner {
        IERC20 tokenContract = IERC20(address(this));
        uint256 balance=balanceOf(address(this))*_tPercent/100;
        tokenContract.transfer(msg.sender, balance);
    }


    function changeRouterVersion(address _router)
        external
        onlyOwner
        returns (address _pair)
    {
        require(_router != address(0), "_router address cannot be 0");
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(_router);

        _pair = IUniswapV2Factory(_uniswapV2Router.factory()).getPair(
            address(this),
            _uniswapV2Router.WETH()
        );
        if (_pair == address(0)) {
            _pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(
                address(this),
                _uniswapV2Router.WETH()
            );
        }
        uniswapV2Pair = _pair;

        uniswapV2Router = _uniswapV2Router;
        emit UpdatedRouter(_router);
    }


}

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":"amount","type":"uint256"}],"name":"SetLiquidityFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"SetdevelopmentFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"router","type":"address"}],"name":"UpdatedRouter","type":"event"},{"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":"_router","type":"address"}],"name":"changeRouterVersion","outputs":[{"internalType":"address","name":"_pair","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"developmentFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromMaxBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInMaxBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromMaxBalance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquifyThreshhold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLiquidityFee","type":"uint256"}],"name":"setLiquidityFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLiquifyThreshhold","type":"uint256"}],"name":"setLiquifyThreshhold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMaxBalance","type":"uint256"}],"name":"setMaxBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"newdevelopmentAddress","type":"address"}],"name":"setdevelopmentAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newdevelopmentFee","type":"uint256"}],"name":"setdevelopmentFeePercent","outputs":[],"stateMutability":"nonpayable","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":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferToOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_value","type":"bool"}],"name":"unAuthAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"unAuthlisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tPercent","type":"uint256"}],"name":"withdrawToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526040518060400160405280601081526020017f506f726e20536361706520546f6b656e00000000000000000000000000000000815250600190816200004a919062000a99565b506040518060400160405280600381526020017f50535400000000000000000000000000000000000000000000000000000000008152506002908162000091919062000a99565b506012600360006101000a81548160ff021916908360ff160217905550600360009054906101000a900460ff16600a620000cc919062000d10565b64e8d4a51000620000de919062000d61565b60045573830d4620425de9e1c6b82bd279c6e4a81045821e600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550737a250d5630b4cf539739df2c5dacb4c659f2488d600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503480156200019857600080fd5b50620001b9620001ad6200071260201b60201c565b6200071a60201b60201c565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200022c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000252919062000e16565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002ba573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002e0919062000e16565b6040518363ffffffff1660e01b8152600401620002ff92919062000e59565b6020604051808303816000875af11580156200031f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000345919062000e16565b601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160096000620003dc620007de60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600960003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600a60006200049b620007de60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600a6000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506005600d819055506005600e81905550620005ec600e54600d546200080760201b62001f861790919060201c565b600c819055506001606460045462000605919062000eb5565b62000611919062000d61565b60128190555060196103e86004546200062b919062000eb5565b62000637919062000d61565b600f8190555060045460076000620006546200071260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550620006a26200071260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60045460405162000703919062000efe565b60405180910390a35062000f56565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000818362000817919062000f1b565b905092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620008a157607f821691505b602082108103620008b757620008b662000859565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620009217fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620008e2565b6200092d8683620008e2565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b60006200097a620009746200096e8462000945565b6200094f565b62000945565b9050919050565b6000819050919050565b620009968362000959565b620009ae620009a58262000981565b848454620008ef565b825550505050565b600090565b620009c5620009b6565b620009d28184846200098b565b505050565b5b81811015620009fa57620009ee600082620009bb565b600181019050620009d8565b5050565b601f82111562000a495762000a1381620008bd565b62000a1e84620008d2565b8101602085101562000a2e578190505b62000a4662000a3d85620008d2565b830182620009d7565b50505b505050565b600082821c905092915050565b600062000a6e6000198460080262000a4e565b1980831691505092915050565b600062000a89838362000a5b565b9150826002028217905092915050565b62000aa4826200081f565b67ffffffffffffffff81111562000ac05762000abf6200082a565b5b62000acc825462000888565b62000ad9828285620009fe565b600060209050601f83116001811462000b11576000841562000afc578287015190505b62000b08858262000a7b565b86555062000b78565b601f19841662000b2186620008bd565b60005b8281101562000b4b5784890151825560018201915060208501945060208101905062000b24565b8683101562000b6b578489015162000b67601f89168262000a5b565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111562000c0e5780860481111562000be65762000be562000b80565b5b600185161562000bf65780820291505b808102905062000c068562000baf565b945062000bc6565b94509492505050565b60008262000c29576001905062000cfc565b8162000c39576000905062000cfc565b816001811462000c52576002811462000c5d5762000c93565b600191505062000cfc565b60ff84111562000c725762000c7162000b80565b5b8360020a91508482111562000c8c5762000c8b62000b80565b5b5062000cfc565b5060208310610133831016604e8410600b841016171562000ccd5782820a90508381111562000cc75762000cc662000b80565b5b62000cfc565b62000cdc848484600162000bbc565b9250905081840481111562000cf65762000cf562000b80565b5b81810290505b9392505050565b600060ff82169050919050565b600062000d1d8262000945565b915062000d2a8362000d03565b925062000d597fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000c17565b905092915050565b600062000d6e8262000945565b915062000d7b8362000945565b925082820262000d8b8162000945565b9150828204841483151762000da55762000da462000b80565b5b5092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000dde8262000db1565b9050919050565b62000df08162000dd1565b811462000dfc57600080fd5b50565b60008151905062000e108162000de5565b92915050565b60006020828403121562000e2f5762000e2e62000dac565b5b600062000e3f8482850162000dff565b91505092915050565b62000e538162000dd1565b82525050565b600060408201905062000e70600083018562000e48565b62000e7f602083018462000e48565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000ec28262000945565b915062000ecf8362000945565b92508262000ee25762000ee162000e86565b5b828204905092915050565b62000ef88162000945565b82525050565b600060208201905062000f15600083018462000eed565b92915050565b600062000f288262000945565b915062000f358362000945565b925082820190508082111562000f505762000f4f62000b80565b5b92915050565b613f308062000f666000396000f3fe6080604052600436106102135760003560e01c806367243ea81161011857806398118cb4116100a0578063a9059cbb1161006f578063a9059cbb146107ce578063d61fe6cd1461080b578063dd62ed3e14610834578063e57f14e114610871578063f2fde38b1461089a5761021a565b806398118cb4146107125780639d51d9b71461073d578063a457c2d714610766578063a5f3d003146107a35761021a565b806387c1ed12116100e757806387c1ed121461062d5780638da5cb5b146106565780638ee88c53146106815780638f125afe146106aa57806395d89b41146106e75761021a565b806367243ea81461058557806370a08231146105ae578063715018a6146105eb57806373ad468a146106025761021a565b8063313ce5671161019b57806350baa6221161016a57806350baa622146104a25780635881f3ef146104cb5780635e8bc4bc146105085780635eb10c941461053357806362b9668b1461055c5761021a565b8063313ce567146103d257806339509351146103fd57806349bd5a5e1461043a5780634fbee193146104655761021a565b806318160ddd116101e257806318160ddd146102db578063181cec1c1461030657806323b872dd146103435780632b151cfe146103805780632b9a9ca3146103a95761021a565b806306fdde031461021f578063095ea7b31461024a5780631694505e1461028757806316a2f82a146102b25761021a565b3661021a57005b600080fd5b34801561022b57600080fd5b506102346108c3565b604051610241919061301c565b60405180910390f35b34801561025657600080fd5b50610271600480360381019061026c91906130d7565b610955565b60405161027e9190613132565b60405180910390f35b34801561029357600080fd5b5061029c610973565b6040516102a991906131ac565b60405180910390f35b3480156102be57600080fd5b506102d960048036038101906102d491906131c7565b610999565b005b3480156102e757600080fd5b506102f0610a70565b6040516102fd9190613203565b60405180910390f35b34801561031257600080fd5b5061032d600480360381019061032891906131c7565b610a7a565b60405161033a9190613132565b60405180910390f35b34801561034f57600080fd5b5061036a6004803603810190610365919061321e565b610ad0565b6040516103779190613132565b60405180910390f35b34801561038c57600080fd5b506103a760048036038101906103a291906131c7565b610ba9565b005b3480156103b557600080fd5b506103d060048036038101906103cb9190613271565b610c80565b005b3480156103de57600080fd5b506103e7610d06565b6040516103f491906132ba565b60405180910390f35b34801561040957600080fd5b50610424600480360381019061041f91906130d7565b610d1d565b6040516104319190613132565b60405180910390f35b34801561044657600080fd5b5061044f610dd0565b60405161045c91906132e4565b60405180910390f35b34801561047157600080fd5b5061048c600480360381019061048791906131c7565b610df6565b6040516104999190613132565b60405180910390f35b3480156104ae57600080fd5b506104c960048036038101906104c49190613271565b610e4c565b005b3480156104d757600080fd5b506104f260048036038101906104ed91906131c7565b610f75565b6040516104ff91906132e4565b60405180910390f35b34801561051457600080fd5b5061051d611411565b60405161052a9190613203565b60405180910390f35b34801561053f57600080fd5b5061055a600480360381019061055591906131c7565b61141b565b005b34801561056857600080fd5b50610583600480360381019061057e919061332b565b6114f2565b005b34801561059157600080fd5b506105ac60048036038101906105a791906133a9565b6115c9565b005b3480156105ba57600080fd5b506105d560048036038101906105d091906131c7565b611689565b6040516105e29190613203565b60405180910390f35b3480156105f757600080fd5b506106006116d2565b005b34801561060e57600080fd5b5061061761175a565b6040516106249190613203565b60405180910390f35b34801561063957600080fd5b50610654600480360381019061064f9190613271565b611764565b005b34801561066257600080fd5b5061066b611843565b60405161067891906132e4565b60405180910390f35b34801561068d57600080fd5b506106a860048036038101906106a39190613271565b61186c565b005b3480156106b657600080fd5b506106d160048036038101906106cc91906131c7565b611998565b6040516106de9190613132565b60405180910390f35b3480156106f357600080fd5b506106fc6119b8565b604051610709919061301c565b60405180910390f35b34801561071e57600080fd5b50610727611a4a565b6040516107349190613203565b60405180910390f35b34801561074957600080fd5b50610764600480360381019061075f9190613271565b611a54565b005b34801561077257600080fd5b5061078d600480360381019061078891906130d7565b611b10565b60405161079a9190613132565b60405180910390f35b3480156107af57600080fd5b506107b8611bdd565b6040516107c59190613203565b60405180910390f35b3480156107da57600080fd5b506107f560048036038101906107f091906130d7565b611be7565b6040516108029190613132565b60405180910390f35b34801561081757600080fd5b50610832600480360381019061082d9190613271565b611c05565b005b34801561084057600080fd5b5061085b600480360381019061085691906133d6565b611d31565b6040516108689190613203565b60405180910390f35b34801561087d57600080fd5b50610898600480360381019061089391906131c7565b611db8565b005b3480156108a657600080fd5b506108c160048036038101906108bc91906131c7565b611e8f565b005b6060600180546108d290613445565b80601f01602080910402602001604051908101604052809291908181526020018280546108fe90613445565b801561094b5780601f106109205761010080835404028352916020019161094b565b820191906000526020600020905b81548152906001019060200180831161092e57829003601f168201915b5050505050905090565b6000610969610962611f9c565b8484611fa4565b6001905092915050565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6109a1611f9c565b73ffffffffffffffffffffffffffffffffffffffff166109bf611843565b73ffffffffffffffffffffffffffffffffffffffff1614610a15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a0c906134c2565b60405180910390fd5b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600454905090565b6000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000610add84848461216d565b610b9e84610ae9611f9c565b610b9985604051806060016040528060288152602001613eae60289139600860008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610b4f611f9c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546126cf9092919063ffffffff16565b611fa4565b600190509392505050565b610bb1611f9c565b73ffffffffffffffffffffffffffffffffffffffff16610bcf611843565b73ffffffffffffffffffffffffffffffffffffffff1614610c25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1c906134c2565b60405180910390fd5b6001600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b610c88611f9c565b73ffffffffffffffffffffffffffffffffffffffff16610ca6611843565b73ffffffffffffffffffffffffffffffffffffffff1614610cfc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf3906134c2565b60405180910390fd5b8060128190555050565b6000600360009054906101000a900460ff16905090565b6000610dc6610d2a611f9c565b84610dc18560086000610d3b611f9c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611f8690919063ffffffff16565b611fa4565b6001905092915050565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610e54611f9c565b73ffffffffffffffffffffffffffffffffffffffff16610e72611843565b73ffffffffffffffffffffffffffffffffffffffff1614610ec8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ebf906134c2565b60405180910390fd5b60003090506000606483610edb30611689565b610ee59190613511565b610eef9190613582565b90508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401610f2c9291906135b3565b6020604051808303816000875af1158015610f4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f6f91906135f1565b50505050565b6000610f7f611f9c565b73ffffffffffffffffffffffffffffffffffffffff16610f9d611843565b73ffffffffffffffffffffffffffffffffffffffff1614610ff3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fea906134c2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611062576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110599061366a565b60405180910390fd5b60008290508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110d6919061369f565b73ffffffffffffffffffffffffffffffffffffffff1663e6a43905308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561113d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611161919061369f565b6040518363ffffffff1660e01b815260040161117e9291906136cc565b602060405180830381865afa15801561119b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111bf919061369f565b9150600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611352578073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611240573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611264919061369f565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112ef919061369f565b6040518363ffffffff1660e01b815260040161130c9291906136cc565b6020604051808303816000875af115801561132b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061134f919061369f565b91505b81601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f66fc0187dfabf79860e1b18e6c175c92baf9ed88c8a01d0bfdb97d1f0450f7f78360405161140391906132e4565b60405180910390a150919050565b6000601254905090565b611423611f9c565b73ffffffffffffffffffffffffffffffffffffffff16611441611843565b73ffffffffffffffffffffffffffffffffffffffff1614611497576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148e906134c2565b60405180910390fd5b6000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6114fa611f9c565b73ffffffffffffffffffffffffffffffffffffffff16611518611843565b73ffffffffffffffffffffffffffffffffffffffff161461156e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611565906134c2565b60405180910390fd5b80600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6115d1611f9c565b73ffffffffffffffffffffffffffffffffffffffff166115ef611843565b73ffffffffffffffffffffffffffffffffffffffff1614611645576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163c906134c2565b60405180910390fd5b80600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6116da611f9c565b73ffffffffffffffffffffffffffffffffffffffff166116f8611843565b73ffffffffffffffffffffffffffffffffffffffff161461174e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611745906134c2565b60405180910390fd5b6117586000612724565b565b6000600f54905090565b61176c611f9c565b73ffffffffffffffffffffffffffffffffffffffff1661178a611843565b73ffffffffffffffffffffffffffffffffffffffff16146117e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d7906134c2565b60405180910390fd5b60006117ea611843565b9050600082036117f8574791505b8073ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f1935050505015801561183e573d6000803e3d6000fd5b505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611874611f9c565b73ffffffffffffffffffffffffffffffffffffffff16611892611843565b73ffffffffffffffffffffffffffffffffffffffff16146118e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118df906134c2565b60405180910390fd5b601360009054906101000a900460ff1615611938576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192f90613741565b60405180910390fd5b80600d81905550611956600e54600d54611f8690919063ffffffff16565b600c819055507f9715f273db467af4f604be854ced5f63c93d0132583300aef64376e17685b52d600d5460405161198d9190613203565b60405180910390a150565b600b6020528060005260406000206000915054906101000a900460ff1681565b6060600280546119c790613445565b80601f01602080910402602001604051908101604052809291908181526020018280546119f390613445565b8015611a405780601f10611a1557610100808354040283529160200191611a40565b820191906000526020600020905b815481529060010190602001808311611a2357829003601f168201915b5050505050905090565b6000600d54905090565b611a5c611f9c565b73ffffffffffffffffffffffffffffffffffffffff16611a7a611843565b73ffffffffffffffffffffffffffffffffffffffff1614611ad0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac7906134c2565b60405180910390fd5b611afa6103e8611aec60016004546127e890919063ffffffff16565b6127fe90919063ffffffff16565b811015611b0657600080fd5b80600f8190555050565b6000611bd3611b1d611f9c565b84611bce85604051806060016040528060258152602001613ed66025913960086000611b47611f9c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546126cf9092919063ffffffff16565b611fa4565b6001905092915050565b6000600e54905090565b6000611bfb611bf4611f9c565b848461216d565b6001905092915050565b611c0d611f9c565b73ffffffffffffffffffffffffffffffffffffffff16611c2b611843565b73ffffffffffffffffffffffffffffffffffffffff1614611c81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c78906134c2565b60405180910390fd5b601360009054906101000a900460ff1615611cd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc890613741565b60405180910390fd5b80600e81905550611cef600e54600d54611f8690919063ffffffff16565b600c819055507f6d030382888c55f422b4bb146e631d79aff717db07fc118294db1b1719c31da6600e54604051611d269190613203565b60405180910390a150565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611dc0611f9c565b73ffffffffffffffffffffffffffffffffffffffff16611dde611843565b73ffffffffffffffffffffffffffffffffffffffff1614611e34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2b906134c2565b60405180910390fd5b6001600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b611e97611f9c565b73ffffffffffffffffffffffffffffffffffffffff16611eb5611843565b73ffffffffffffffffffffffffffffffffffffffff1614611f0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f02906134c2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611f7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f71906137d3565b60405180910390fd5b611f8381612724565b50565b60008183611f9491906137f3565b905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612013576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200a90613899565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612082576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120799061392b565b60405180910390fd5b80600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516121609190613203565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036121dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121d3906139bd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361224b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224290613a4f565b60405180910390fd5b6000811161228e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228590613ae1565b60405180910390fd5b600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156123325750600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612371576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236890613b4d565b60405180910390fd5b612379611843565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156123e757506123b7611843565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561243d5750600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156124a257600f546124608261245285611689565b611f8690919063ffffffff16565b11156124a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161249890613bb9565b60405180910390fd5b5b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614801561250c5750601360009054906101000a900460ff16155b8015612522575060125461251f30611689565b10155b801561253057506000600c54115b801561256f575061253f611843565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156125ae575061257e611843565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156125bc576125bb612814565b5b600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061265d5750600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15801561266c57506000600c54115b156126bf57600061269b606461268d600c54856127e890919063ffffffff16565b6127fe90919063ffffffff16565b90506126b081836128ca90919063ffffffff16565b91506126bd8430836128e0565b505b6126ca8383836128e0565b505050565b6000838311158290612717576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161270e919061301c565b60405180910390fd5b5082840390509392505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081836127f69190613511565b905092915050565b6000818361280c9190613582565b905092915050565b6001601360006101000a81548160ff0219169083151502179055506000612862600c54612854600d5461284630611689565b6127e890919063ffffffff16565b6127fe90919063ffffffff16565b90506000612897600c54612889600e5461287b30611689565b6127e890919063ffffffff16565b6127fe90919063ffffffff16565b90506128a282612b6c565b6128ab81612bd1565b50506000601360006101000a81548160ff021916908315150217905550565b600081836128d89190613bd9565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361294f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612946906139bd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036129be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129b590613a4f565b60405180910390fd5b612a2a81604051806060016040528060268152602001613e8860269139600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546126cf9092919063ffffffff16565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612abf81600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611f8690919063ffffffff16565b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612b5f9190613203565b60405180910390a3505050565b6000612b826002836127fe90919063ffffffff16565b90506000612b9982846128ca90919063ffffffff16565b90506000479050612ba983612c64565b6000612bbe82476128ca90919063ffffffff16565b9050612bca8382612ea7565b5050505050565b6000479050612bdf82612c64565b6000612bf482476128ca90919063ffffffff16565b9050600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015612c5e573d6000803e3d6000fd5b50505050565b6000600267ffffffffffffffff811115612c8157612c80613c0d565b5b604051908082528060200260200182016040528015612caf5781602001602082028036833780820191505090505b5090503081600081518110612cc757612cc6613c3c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d6e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d92919061369f565b81600181518110612da657612da5613c3c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612e0d30601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611fa4565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612e71959493929190613d64565b600060405180830381600087803b158015612e8b57600080fd5b505af1158015612e9f573d6000803e3d6000fd5b505050505050565b612ed430601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611fa4565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080612f20611843565b426040518863ffffffff1660e01b8152600401612f4296959493929190613dbe565b60606040518083038185885af1158015612f60573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612f859190613e34565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612fc6578082015181840152602081019050612fab565b60008484015250505050565b6000601f19601f8301169050919050565b6000612fee82612f8c565b612ff88185612f97565b9350613008818560208601612fa8565b61301181612fd2565b840191505092915050565b600060208201905081810360008301526130368184612fe3565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061306e82613043565b9050919050565b61307e81613063565b811461308957600080fd5b50565b60008135905061309b81613075565b92915050565b6000819050919050565b6130b4816130a1565b81146130bf57600080fd5b50565b6000813590506130d1816130ab565b92915050565b600080604083850312156130ee576130ed61303e565b5b60006130fc8582860161308c565b925050602061310d858286016130c2565b9150509250929050565b60008115159050919050565b61312c81613117565b82525050565b60006020820190506131476000830184613123565b92915050565b6000819050919050565b600061317261316d61316884613043565b61314d565b613043565b9050919050565b600061318482613157565b9050919050565b600061319682613179565b9050919050565b6131a68161318b565b82525050565b60006020820190506131c1600083018461319d565b92915050565b6000602082840312156131dd576131dc61303e565b5b60006131eb8482850161308c565b91505092915050565b6131fd816130a1565b82525050565b600060208201905061321860008301846131f4565b92915050565b6000806000606084860312156132375761323661303e565b5b60006132458682870161308c565b93505060206132568682870161308c565b9250506040613267868287016130c2565b9150509250925092565b6000602082840312156132875761328661303e565b5b6000613295848285016130c2565b91505092915050565b600060ff82169050919050565b6132b48161329e565b82525050565b60006020820190506132cf60008301846132ab565b92915050565b6132de81613063565b82525050565b60006020820190506132f960008301846132d5565b92915050565b61330881613117565b811461331357600080fd5b50565b600081359050613325816132ff565b92915050565b600080604083850312156133425761334161303e565b5b60006133508582860161308c565b925050602061336185828601613316565b9150509250929050565b600061337682613043565b9050919050565b6133868161336b565b811461339157600080fd5b50565b6000813590506133a38161337d565b92915050565b6000602082840312156133bf576133be61303e565b5b60006133cd84828501613394565b91505092915050565b600080604083850312156133ed576133ec61303e565b5b60006133fb8582860161308c565b925050602061340c8582860161308c565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061345d57607f821691505b6020821081036134705761346f613416565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006134ac602083612f97565b91506134b782613476565b602082019050919050565b600060208201905081810360008301526134db8161349f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061351c826130a1565b9150613527836130a1565b9250828202613535816130a1565b9150828204841483151761354c5761354b6134e2565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061358d826130a1565b9150613598836130a1565b9250826135a8576135a7613553565b5b828204905092915050565b60006040820190506135c860008301856132d5565b6135d560208301846131f4565b9392505050565b6000815190506135eb816132ff565b92915050565b6000602082840312156136075761360661303e565b5b6000613615848285016135dc565b91505092915050565b7f5f726f7574657220616464726573732063616e6e6f7420626520300000000000600082015250565b6000613654601b83612f97565b915061365f8261361e565b602082019050919050565b6000602082019050818103600083015261368381613647565b9050919050565b60008151905061369981613075565b92915050565b6000602082840312156136b5576136b461303e565b5b60006136c38482850161368a565b91505092915050565b60006040820190506136e160008301856132d5565b6136ee60208301846132d5565b9392505050565b7f696e53776170416e644c69717569667900000000000000000000000000000000600082015250565b600061372b601083612f97565b9150613736826136f5565b602082019050919050565b6000602082019050818103600083015261375a8161371e565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006137bd602683612f97565b91506137c882613761565b604082019050919050565b600060208201905081810360008301526137ec816137b0565b9050919050565b60006137fe826130a1565b9150613809836130a1565b9250828201905080821115613821576138206134e2565b5b92915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613883602483612f97565b915061388e82613827565b604082019050919050565b600060208201905081810360008301526138b281613876565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613915602283612f97565b9150613920826138b9565b604082019050919050565b6000602082019050818103600083015261394481613908565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006139a7602583612f97565b91506139b28261394b565b604082019050919050565b600060208201905081810360008301526139d68161399a565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613a39602383612f97565b9150613a44826139dd565b604082019050919050565b60006020820190508181036000830152613a6881613a2c565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b6000613acb602983612f97565b9150613ad682613a6f565b604082019050919050565b60006020820190508181036000830152613afa81613abe565b9050919050565b7f4164647265737320697320626c61636b6c697374656400000000000000000000600082015250565b6000613b37601683612f97565b9150613b4282613b01565b602082019050919050565b60006020820190508181036000830152613b6681613b2a565b9050919050565b7f4d61782077616c6c657420616d6f756e7420726561636865642e000000000000600082015250565b6000613ba3601a83612f97565b9150613bae82613b6d565b602082019050919050565b60006020820190508181036000830152613bd281613b96565b9050919050565b6000613be4826130a1565b9150613bef836130a1565b9250828203905081811115613c0757613c066134e2565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b6000613c90613c8b613c8684613c6b565b61314d565b6130a1565b9050919050565b613ca081613c75565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613cdb81613063565b82525050565b6000613ced8383613cd2565b60208301905092915050565b6000602082019050919050565b6000613d1182613ca6565b613d1b8185613cb1565b9350613d2683613cc2565b8060005b83811015613d57578151613d3e8882613ce1565b9750613d4983613cf9565b925050600181019050613d2a565b5085935050505092915050565b600060a082019050613d7960008301886131f4565b613d866020830187613c97565b8181036040830152613d988186613d06565b9050613da760608301856132d5565b613db460808301846131f4565b9695505050505050565b600060c082019050613dd360008301896132d5565b613de060208301886131f4565b613ded6040830187613c97565b613dfa6060830186613c97565b613e0760808301856132d5565b613e1460a08301846131f4565b979650505050505050565b600081519050613e2e816130ab565b92915050565b600080600060608486031215613e4d57613e4c61303e565b5b6000613e5b86828701613e1f565b9350506020613e6c86828701613e1f565b9250506040613e7d86828701613e1f565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122028fed77c55d0ebffa153ffa5d1df3b887edcf5fb0058ad77459c7e34dd3abe3464736f6c63430008120033

Deployed Bytecode

0x6080604052600436106102135760003560e01c806367243ea81161011857806398118cb4116100a0578063a9059cbb1161006f578063a9059cbb146107ce578063d61fe6cd1461080b578063dd62ed3e14610834578063e57f14e114610871578063f2fde38b1461089a5761021a565b806398118cb4146107125780639d51d9b71461073d578063a457c2d714610766578063a5f3d003146107a35761021a565b806387c1ed12116100e757806387c1ed121461062d5780638da5cb5b146106565780638ee88c53146106815780638f125afe146106aa57806395d89b41146106e75761021a565b806367243ea81461058557806370a08231146105ae578063715018a6146105eb57806373ad468a146106025761021a565b8063313ce5671161019b57806350baa6221161016a57806350baa622146104a25780635881f3ef146104cb5780635e8bc4bc146105085780635eb10c941461053357806362b9668b1461055c5761021a565b8063313ce567146103d257806339509351146103fd57806349bd5a5e1461043a5780634fbee193146104655761021a565b806318160ddd116101e257806318160ddd146102db578063181cec1c1461030657806323b872dd146103435780632b151cfe146103805780632b9a9ca3146103a95761021a565b806306fdde031461021f578063095ea7b31461024a5780631694505e1461028757806316a2f82a146102b25761021a565b3661021a57005b600080fd5b34801561022b57600080fd5b506102346108c3565b604051610241919061301c565b60405180910390f35b34801561025657600080fd5b50610271600480360381019061026c91906130d7565b610955565b60405161027e9190613132565b60405180910390f35b34801561029357600080fd5b5061029c610973565b6040516102a991906131ac565b60405180910390f35b3480156102be57600080fd5b506102d960048036038101906102d491906131c7565b610999565b005b3480156102e757600080fd5b506102f0610a70565b6040516102fd9190613203565b60405180910390f35b34801561031257600080fd5b5061032d600480360381019061032891906131c7565b610a7a565b60405161033a9190613132565b60405180910390f35b34801561034f57600080fd5b5061036a6004803603810190610365919061321e565b610ad0565b6040516103779190613132565b60405180910390f35b34801561038c57600080fd5b506103a760048036038101906103a291906131c7565b610ba9565b005b3480156103b557600080fd5b506103d060048036038101906103cb9190613271565b610c80565b005b3480156103de57600080fd5b506103e7610d06565b6040516103f491906132ba565b60405180910390f35b34801561040957600080fd5b50610424600480360381019061041f91906130d7565b610d1d565b6040516104319190613132565b60405180910390f35b34801561044657600080fd5b5061044f610dd0565b60405161045c91906132e4565b60405180910390f35b34801561047157600080fd5b5061048c600480360381019061048791906131c7565b610df6565b6040516104999190613132565b60405180910390f35b3480156104ae57600080fd5b506104c960048036038101906104c49190613271565b610e4c565b005b3480156104d757600080fd5b506104f260048036038101906104ed91906131c7565b610f75565b6040516104ff91906132e4565b60405180910390f35b34801561051457600080fd5b5061051d611411565b60405161052a9190613203565b60405180910390f35b34801561053f57600080fd5b5061055a600480360381019061055591906131c7565b61141b565b005b34801561056857600080fd5b50610583600480360381019061057e919061332b565b6114f2565b005b34801561059157600080fd5b506105ac60048036038101906105a791906133a9565b6115c9565b005b3480156105ba57600080fd5b506105d560048036038101906105d091906131c7565b611689565b6040516105e29190613203565b60405180910390f35b3480156105f757600080fd5b506106006116d2565b005b34801561060e57600080fd5b5061061761175a565b6040516106249190613203565b60405180910390f35b34801561063957600080fd5b50610654600480360381019061064f9190613271565b611764565b005b34801561066257600080fd5b5061066b611843565b60405161067891906132e4565b60405180910390f35b34801561068d57600080fd5b506106a860048036038101906106a39190613271565b61186c565b005b3480156106b657600080fd5b506106d160048036038101906106cc91906131c7565b611998565b6040516106de9190613132565b60405180910390f35b3480156106f357600080fd5b506106fc6119b8565b604051610709919061301c565b60405180910390f35b34801561071e57600080fd5b50610727611a4a565b6040516107349190613203565b60405180910390f35b34801561074957600080fd5b50610764600480360381019061075f9190613271565b611a54565b005b34801561077257600080fd5b5061078d600480360381019061078891906130d7565b611b10565b60405161079a9190613132565b60405180910390f35b3480156107af57600080fd5b506107b8611bdd565b6040516107c59190613203565b60405180910390f35b3480156107da57600080fd5b506107f560048036038101906107f091906130d7565b611be7565b6040516108029190613132565b60405180910390f35b34801561081757600080fd5b50610832600480360381019061082d9190613271565b611c05565b005b34801561084057600080fd5b5061085b600480360381019061085691906133d6565b611d31565b6040516108689190613203565b60405180910390f35b34801561087d57600080fd5b50610898600480360381019061089391906131c7565b611db8565b005b3480156108a657600080fd5b506108c160048036038101906108bc91906131c7565b611e8f565b005b6060600180546108d290613445565b80601f01602080910402602001604051908101604052809291908181526020018280546108fe90613445565b801561094b5780601f106109205761010080835404028352916020019161094b565b820191906000526020600020905b81548152906001019060200180831161092e57829003601f168201915b5050505050905090565b6000610969610962611f9c565b8484611fa4565b6001905092915050565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6109a1611f9c565b73ffffffffffffffffffffffffffffffffffffffff166109bf611843565b73ffffffffffffffffffffffffffffffffffffffff1614610a15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a0c906134c2565b60405180910390fd5b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600454905090565b6000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000610add84848461216d565b610b9e84610ae9611f9c565b610b9985604051806060016040528060288152602001613eae60289139600860008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610b4f611f9c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546126cf9092919063ffffffff16565b611fa4565b600190509392505050565b610bb1611f9c565b73ffffffffffffffffffffffffffffffffffffffff16610bcf611843565b73ffffffffffffffffffffffffffffffffffffffff1614610c25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1c906134c2565b60405180910390fd5b6001600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b610c88611f9c565b73ffffffffffffffffffffffffffffffffffffffff16610ca6611843565b73ffffffffffffffffffffffffffffffffffffffff1614610cfc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf3906134c2565b60405180910390fd5b8060128190555050565b6000600360009054906101000a900460ff16905090565b6000610dc6610d2a611f9c565b84610dc18560086000610d3b611f9c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611f8690919063ffffffff16565b611fa4565b6001905092915050565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610e54611f9c565b73ffffffffffffffffffffffffffffffffffffffff16610e72611843565b73ffffffffffffffffffffffffffffffffffffffff1614610ec8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ebf906134c2565b60405180910390fd5b60003090506000606483610edb30611689565b610ee59190613511565b610eef9190613582565b90508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401610f2c9291906135b3565b6020604051808303816000875af1158015610f4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f6f91906135f1565b50505050565b6000610f7f611f9c565b73ffffffffffffffffffffffffffffffffffffffff16610f9d611843565b73ffffffffffffffffffffffffffffffffffffffff1614610ff3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fea906134c2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611062576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110599061366a565b60405180910390fd5b60008290508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110d6919061369f565b73ffffffffffffffffffffffffffffffffffffffff1663e6a43905308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561113d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611161919061369f565b6040518363ffffffff1660e01b815260040161117e9291906136cc565b602060405180830381865afa15801561119b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111bf919061369f565b9150600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611352578073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611240573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611264919061369f565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112ef919061369f565b6040518363ffffffff1660e01b815260040161130c9291906136cc565b6020604051808303816000875af115801561132b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061134f919061369f565b91505b81601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f66fc0187dfabf79860e1b18e6c175c92baf9ed88c8a01d0bfdb97d1f0450f7f78360405161140391906132e4565b60405180910390a150919050565b6000601254905090565b611423611f9c565b73ffffffffffffffffffffffffffffffffffffffff16611441611843565b73ffffffffffffffffffffffffffffffffffffffff1614611497576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148e906134c2565b60405180910390fd5b6000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6114fa611f9c565b73ffffffffffffffffffffffffffffffffffffffff16611518611843565b73ffffffffffffffffffffffffffffffffffffffff161461156e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611565906134c2565b60405180910390fd5b80600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6115d1611f9c565b73ffffffffffffffffffffffffffffffffffffffff166115ef611843565b73ffffffffffffffffffffffffffffffffffffffff1614611645576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163c906134c2565b60405180910390fd5b80600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6116da611f9c565b73ffffffffffffffffffffffffffffffffffffffff166116f8611843565b73ffffffffffffffffffffffffffffffffffffffff161461174e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611745906134c2565b60405180910390fd5b6117586000612724565b565b6000600f54905090565b61176c611f9c565b73ffffffffffffffffffffffffffffffffffffffff1661178a611843565b73ffffffffffffffffffffffffffffffffffffffff16146117e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d7906134c2565b60405180910390fd5b60006117ea611843565b9050600082036117f8574791505b8073ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f1935050505015801561183e573d6000803e3d6000fd5b505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611874611f9c565b73ffffffffffffffffffffffffffffffffffffffff16611892611843565b73ffffffffffffffffffffffffffffffffffffffff16146118e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118df906134c2565b60405180910390fd5b601360009054906101000a900460ff1615611938576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192f90613741565b60405180910390fd5b80600d81905550611956600e54600d54611f8690919063ffffffff16565b600c819055507f9715f273db467af4f604be854ced5f63c93d0132583300aef64376e17685b52d600d5460405161198d9190613203565b60405180910390a150565b600b6020528060005260406000206000915054906101000a900460ff1681565b6060600280546119c790613445565b80601f01602080910402602001604051908101604052809291908181526020018280546119f390613445565b8015611a405780601f10611a1557610100808354040283529160200191611a40565b820191906000526020600020905b815481529060010190602001808311611a2357829003601f168201915b5050505050905090565b6000600d54905090565b611a5c611f9c565b73ffffffffffffffffffffffffffffffffffffffff16611a7a611843565b73ffffffffffffffffffffffffffffffffffffffff1614611ad0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac7906134c2565b60405180910390fd5b611afa6103e8611aec60016004546127e890919063ffffffff16565b6127fe90919063ffffffff16565b811015611b0657600080fd5b80600f8190555050565b6000611bd3611b1d611f9c565b84611bce85604051806060016040528060258152602001613ed66025913960086000611b47611f9c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546126cf9092919063ffffffff16565b611fa4565b6001905092915050565b6000600e54905090565b6000611bfb611bf4611f9c565b848461216d565b6001905092915050565b611c0d611f9c565b73ffffffffffffffffffffffffffffffffffffffff16611c2b611843565b73ffffffffffffffffffffffffffffffffffffffff1614611c81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c78906134c2565b60405180910390fd5b601360009054906101000a900460ff1615611cd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc890613741565b60405180910390fd5b80600e81905550611cef600e54600d54611f8690919063ffffffff16565b600c819055507f6d030382888c55f422b4bb146e631d79aff717db07fc118294db1b1719c31da6600e54604051611d269190613203565b60405180910390a150565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611dc0611f9c565b73ffffffffffffffffffffffffffffffffffffffff16611dde611843565b73ffffffffffffffffffffffffffffffffffffffff1614611e34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2b906134c2565b60405180910390fd5b6001600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b611e97611f9c565b73ffffffffffffffffffffffffffffffffffffffff16611eb5611843565b73ffffffffffffffffffffffffffffffffffffffff1614611f0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f02906134c2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611f7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f71906137d3565b60405180910390fd5b611f8381612724565b50565b60008183611f9491906137f3565b905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612013576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200a90613899565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612082576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120799061392b565b60405180910390fd5b80600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516121609190613203565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036121dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121d3906139bd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361224b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224290613a4f565b60405180910390fd5b6000811161228e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228590613ae1565b60405180910390fd5b600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156123325750600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612371576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236890613b4d565b60405180910390fd5b612379611843565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156123e757506123b7611843565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561243d5750600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156124a257600f546124608261245285611689565b611f8690919063ffffffff16565b11156124a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161249890613bb9565b60405180910390fd5b5b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614801561250c5750601360009054906101000a900460ff16155b8015612522575060125461251f30611689565b10155b801561253057506000600c54115b801561256f575061253f611843565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156125ae575061257e611843565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156125bc576125bb612814565b5b600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061265d5750600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15801561266c57506000600c54115b156126bf57600061269b606461268d600c54856127e890919063ffffffff16565b6127fe90919063ffffffff16565b90506126b081836128ca90919063ffffffff16565b91506126bd8430836128e0565b505b6126ca8383836128e0565b505050565b6000838311158290612717576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161270e919061301c565b60405180910390fd5b5082840390509392505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081836127f69190613511565b905092915050565b6000818361280c9190613582565b905092915050565b6001601360006101000a81548160ff0219169083151502179055506000612862600c54612854600d5461284630611689565b6127e890919063ffffffff16565b6127fe90919063ffffffff16565b90506000612897600c54612889600e5461287b30611689565b6127e890919063ffffffff16565b6127fe90919063ffffffff16565b90506128a282612b6c565b6128ab81612bd1565b50506000601360006101000a81548160ff021916908315150217905550565b600081836128d89190613bd9565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361294f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612946906139bd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036129be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129b590613a4f565b60405180910390fd5b612a2a81604051806060016040528060268152602001613e8860269139600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546126cf9092919063ffffffff16565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612abf81600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611f8690919063ffffffff16565b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612b5f9190613203565b60405180910390a3505050565b6000612b826002836127fe90919063ffffffff16565b90506000612b9982846128ca90919063ffffffff16565b90506000479050612ba983612c64565b6000612bbe82476128ca90919063ffffffff16565b9050612bca8382612ea7565b5050505050565b6000479050612bdf82612c64565b6000612bf482476128ca90919063ffffffff16565b9050600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015612c5e573d6000803e3d6000fd5b50505050565b6000600267ffffffffffffffff811115612c8157612c80613c0d565b5b604051908082528060200260200182016040528015612caf5781602001602082028036833780820191505090505b5090503081600081518110612cc757612cc6613c3c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d6e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d92919061369f565b81600181518110612da657612da5613c3c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612e0d30601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611fa4565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612e71959493929190613d64565b600060405180830381600087803b158015612e8b57600080fd5b505af1158015612e9f573d6000803e3d6000fd5b505050505050565b612ed430601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611fa4565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080612f20611843565b426040518863ffffffff1660e01b8152600401612f4296959493929190613dbe565b60606040518083038185885af1158015612f60573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612f859190613e34565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612fc6578082015181840152602081019050612fab565b60008484015250505050565b6000601f19601f8301169050919050565b6000612fee82612f8c565b612ff88185612f97565b9350613008818560208601612fa8565b61301181612fd2565b840191505092915050565b600060208201905081810360008301526130368184612fe3565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061306e82613043565b9050919050565b61307e81613063565b811461308957600080fd5b50565b60008135905061309b81613075565b92915050565b6000819050919050565b6130b4816130a1565b81146130bf57600080fd5b50565b6000813590506130d1816130ab565b92915050565b600080604083850312156130ee576130ed61303e565b5b60006130fc8582860161308c565b925050602061310d858286016130c2565b9150509250929050565b60008115159050919050565b61312c81613117565b82525050565b60006020820190506131476000830184613123565b92915050565b6000819050919050565b600061317261316d61316884613043565b61314d565b613043565b9050919050565b600061318482613157565b9050919050565b600061319682613179565b9050919050565b6131a68161318b565b82525050565b60006020820190506131c1600083018461319d565b92915050565b6000602082840312156131dd576131dc61303e565b5b60006131eb8482850161308c565b91505092915050565b6131fd816130a1565b82525050565b600060208201905061321860008301846131f4565b92915050565b6000806000606084860312156132375761323661303e565b5b60006132458682870161308c565b93505060206132568682870161308c565b9250506040613267868287016130c2565b9150509250925092565b6000602082840312156132875761328661303e565b5b6000613295848285016130c2565b91505092915050565b600060ff82169050919050565b6132b48161329e565b82525050565b60006020820190506132cf60008301846132ab565b92915050565b6132de81613063565b82525050565b60006020820190506132f960008301846132d5565b92915050565b61330881613117565b811461331357600080fd5b50565b600081359050613325816132ff565b92915050565b600080604083850312156133425761334161303e565b5b60006133508582860161308c565b925050602061336185828601613316565b9150509250929050565b600061337682613043565b9050919050565b6133868161336b565b811461339157600080fd5b50565b6000813590506133a38161337d565b92915050565b6000602082840312156133bf576133be61303e565b5b60006133cd84828501613394565b91505092915050565b600080604083850312156133ed576133ec61303e565b5b60006133fb8582860161308c565b925050602061340c8582860161308c565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061345d57607f821691505b6020821081036134705761346f613416565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006134ac602083612f97565b91506134b782613476565b602082019050919050565b600060208201905081810360008301526134db8161349f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061351c826130a1565b9150613527836130a1565b9250828202613535816130a1565b9150828204841483151761354c5761354b6134e2565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061358d826130a1565b9150613598836130a1565b9250826135a8576135a7613553565b5b828204905092915050565b60006040820190506135c860008301856132d5565b6135d560208301846131f4565b9392505050565b6000815190506135eb816132ff565b92915050565b6000602082840312156136075761360661303e565b5b6000613615848285016135dc565b91505092915050565b7f5f726f7574657220616464726573732063616e6e6f7420626520300000000000600082015250565b6000613654601b83612f97565b915061365f8261361e565b602082019050919050565b6000602082019050818103600083015261368381613647565b9050919050565b60008151905061369981613075565b92915050565b6000602082840312156136b5576136b461303e565b5b60006136c38482850161368a565b91505092915050565b60006040820190506136e160008301856132d5565b6136ee60208301846132d5565b9392505050565b7f696e53776170416e644c69717569667900000000000000000000000000000000600082015250565b600061372b601083612f97565b9150613736826136f5565b602082019050919050565b6000602082019050818103600083015261375a8161371e565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006137bd602683612f97565b91506137c882613761565b604082019050919050565b600060208201905081810360008301526137ec816137b0565b9050919050565b60006137fe826130a1565b9150613809836130a1565b9250828201905080821115613821576138206134e2565b5b92915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613883602483612f97565b915061388e82613827565b604082019050919050565b600060208201905081810360008301526138b281613876565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613915602283612f97565b9150613920826138b9565b604082019050919050565b6000602082019050818103600083015261394481613908565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006139a7602583612f97565b91506139b28261394b565b604082019050919050565b600060208201905081810360008301526139d68161399a565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613a39602383612f97565b9150613a44826139dd565b604082019050919050565b60006020820190508181036000830152613a6881613a2c565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b6000613acb602983612f97565b9150613ad682613a6f565b604082019050919050565b60006020820190508181036000830152613afa81613abe565b9050919050565b7f4164647265737320697320626c61636b6c697374656400000000000000000000600082015250565b6000613b37601683612f97565b9150613b4282613b01565b602082019050919050565b60006020820190508181036000830152613b6681613b2a565b9050919050565b7f4d61782077616c6c657420616d6f756e7420726561636865642e000000000000600082015250565b6000613ba3601a83612f97565b9150613bae82613b6d565b602082019050919050565b60006020820190508181036000830152613bd281613b96565b9050919050565b6000613be4826130a1565b9150613bef836130a1565b9250828203905081811115613c0757613c066134e2565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b6000613c90613c8b613c8684613c6b565b61314d565b6130a1565b9050919050565b613ca081613c75565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613cdb81613063565b82525050565b6000613ced8383613cd2565b60208301905092915050565b6000602082019050919050565b6000613d1182613ca6565b613d1b8185613cb1565b9350613d2683613cc2565b8060005b83811015613d57578151613d3e8882613ce1565b9750613d4983613cf9565b925050600181019050613d2a565b5085935050505092915050565b600060a082019050613d7960008301886131f4565b613d866020830187613c97565b8181036040830152613d988186613d06565b9050613da760608301856132d5565b613db460808301846131f4565b9695505050505050565b600060c082019050613dd360008301896132d5565b613de060208301886131f4565b613ded6040830187613c97565b613dfa6060830186613c97565b613e0760808301856132d5565b613e1460a08301846131f4565b979650505050505050565b600081519050613e2e816130ab565b92915050565b600080600060608486031215613e4d57613e4c61303e565b5b6000613e5b86828701613e1f565b9350506020613e6c86828701613e1f565b9250506040613e7d86828701613e1f565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122028fed77c55d0ebffa153ffa5d1df3b887edcf5fb0058ad77459c7e34dd3abe3464736f6c63430008120033

Deployed Bytecode Sourcemap

17671:12801:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20034:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20945:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18773:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24168:112;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20311:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24288:170;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21146:446;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24466:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23558:162;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20220:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21600:300;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18821:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23913:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29451:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29705:760;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24940:103;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24599:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29081:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22695:173;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20419:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16413:103;;;;;;;;;;;;;:::i;:::-;;25051:89;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29208:231;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16190:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22876:327;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18566:45;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20125:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24734:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23728:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21908:400;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24835:97;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20546:199;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23211:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20753:184;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24047:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16524:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20034:83;20071:13;20104:5;20097:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20034:83;:::o;20945:193::-;21047:4;21069:39;21078:12;:10;:12::i;:::-;21092:7;21101:6;21069:8;:39::i;:::-;21126:4;21119:11;;20945:193;;;;:::o;18773:41::-;;;;;;;;;;;;;:::o;24168:112::-;16336:12;:10;:12::i;:::-;16325:23;;:7;:5;:7::i;:::-;:23;;;16317:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24267:5:::1;24236:19;:28;24256:7;24236:28;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;24168:112:::0;:::o;20311:100::-;20364:7;20391:12;;20384:19;;20311:100;:::o;24288:170::-;24387:4;24416:25;:34;24442:7;24416:34;;;;;;;;;;;;;;;;;;;;;;;;;24409:41;;24288:170;;;:::o;21146:446::-;21278:4;21295:36;21305:6;21313:9;21324:6;21295:9;:36::i;:::-;21342:220;21365:6;21386:12;:10;:12::i;:::-;21413:138;21469:6;21413:138;;;;;;;;;;;;;;;;;:11;:19;21425:6;21413:19;;;;;;;;;;;;;;;:33;21433:12;:10;:12::i;:::-;21413:33;;;;;;;;;;;;;;;;:37;;:138;;;;;:::i;:::-;21342:8;:220::i;:::-;21580:4;21573:11;;21146:446;;;;;:::o;24466:125::-;16336:12;:10;:12::i;:::-;16325:23;;:7;:5;:7::i;:::-;:23;;;16317:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24579:4:::1;24542:25;:34;24568:7;24542:34;;;;;;;;;;;;;;;;:41;;;;;;;;;;;;;;;;;;24466:125:::0;:::o;23558:162::-;16336:12;:10;:12::i;:::-;16325:23;;:7;:5;:7::i;:::-;:23;;;16317:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23692:20:::1;23671:18;:41;;;;23558:162:::0;:::o;20220:83::-;20261:5;20286:9;;;;;;;;;;;20279:16;;20220:83;:::o;21600:300::-;21715:4;21737:133;21760:12;:10;:12::i;:::-;21787:7;21809:50;21848:10;21809:11;:25;21821:12;:10;:12::i;:::-;21809:25;;;;;;;;;;;;;;;:34;21835:7;21809:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;21737:8;:133::i;:::-;21888:4;21881:11;;21600:300;;;;:::o;18821:28::-;;;;;;;;;;;;;:::o;23913:126::-;23979:4;24003:19;:28;24023:7;24003:28;;;;;;;;;;;;;;;;;;;;;;;;;23996:35;;23913:126;;;:::o;29451:244::-;16336:12;:10;:12::i;:::-;16325:23;;:7;:5;:7::i;:::-;:23;;;16317:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29524:20:::1;29562:4;29524:44;;29579:15;29630:3;29620:9;29595:24;29613:4;29595:9;:24::i;:::-;:34;;;;:::i;:::-;:38;;;;:::i;:::-;29579:54;;29644:13;:22;;;29667:10;29679:7;29644:43;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;29513:182;;29451:244:::0;:::o;29705:760::-;29806:13;16336:12;:10;:12::i;:::-;16325:23;;:7;:5;:7::i;:::-;:23;;;16317:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29864:1:::1;29845:21;;:7;:21;;::::0;29837:61:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;29909:35;29966:7;29909:65;;30013:16;:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29995:53;;;30071:4;30091:16;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29995:130;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29987:138;;30157:1;30140:19;;:5;:19;;::::0;30136:205:::1;;30202:16;:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30184:56;;;30267:4;30291:16;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30184:145;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30176:153;;30136:205;30367:5;30351:13;;:21;;;;;;;;;;;;;;;;;;30403:16;30385:15;;:34;;;;;;;;;;;;;;;;;;30435:22;30449:7;30435:22;;;;;;:::i;:::-;;;;;;;;29826:639;29705:760:::0;;;:::o;24940:103::-;24990:7;25017:18;;25010:25;;24940:103;:::o;24599:124::-;16336:12;:10;:12::i;:::-;16325:23;;:7;:5;:7::i;:::-;:23;;;16317:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24710:5:::1;24673:25;:34;24699:7;24673:34;;;;;;;;;;;;;;;;:42;;;;;;;;;;;;;;;;;;24599:124:::0;:::o;29081:120::-;16336:12;:10;:12::i;:::-;16325:23;;:7;:5;:7::i;:::-;:23;;;16317:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29187:6:::1;29162:12;:22;29175:8;29162:22;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;29081:120:::0;;:::o;22695:173::-;16336:12;:10;:12::i;:::-;16325:23;;:7;:5;:7::i;:::-;:23;;;16317:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22839:21:::1;22818:18;;:42;;;;;;;;;;;;;;;;;;22695:173:::0;:::o;20419:119::-;20485:7;20512:9;:18;20522:7;20512:18;;;;;;;;;;;;;;;;20505:25;;20419:119;;;:::o;16413:103::-;16336:12;:10;:12::i;:::-;16325:23;;:7;:5;:7::i;:::-;:23;;;16317:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16478:30:::1;16505:1;16478:18;:30::i;:::-;16413:103::o:0;25051:89::-;25094:7;25121:11;;25114:18;;25051:89;:::o;29208:231::-;16336:12;:10;:12::i;:::-;16325:23;;:7;:5;:7::i;:::-;:23;;;16317:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29280:14:::1;29297:7;:5;:7::i;:::-;29280:24;;29329:1;29319:6;:11:::0;29315:74:::1;;29356:21;29347:30;;29315:74;29407:6;29399:24;;:32;29424:6;29399:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;29268:171;29208:231:::0;:::o;16190:87::-;16236:7;16263:6;;;;;;;;;;;16256:13;;16190:87;:::o;22876:327::-;16336:12;:10;:12::i;:::-;16325:23;;:7;:5;:7::i;:::-;:23;;;16317:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22995:16:::1;;;;;;;;;;;22994:17;22986:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;23059:15;23043:13;:31;;;;23115:34;23133:15;;23115:13;;:17;;:34;;;;:::i;:::-;23092:20;:57;;;;23165:30;23181:13;;23165:30;;;;;;:::i;:::-;;;;;;;;22876:327:::0;:::o;18566:45::-;;;;;;;;;;;;;;;;;;;;;;:::o;20125:87::-;20164:13;20197:7;20190:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20125:87;:::o;24734:93::-;24779:7;24806:13;;24799:20;;24734:93;:::o;23728:177::-;16336:12;:10;:12::i;:::-;16325:23;;:7;:5;:7::i;:::-;:23;;;16317:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23829:29:::1;23853:4;23829:19;23846:1;23829:12;;:16;;:19;;;;:::i;:::-;:23;;:29;;;;:::i;:::-;23812:13;:46;;23804:55;;;::::0;::::1;;23884:13;23870:11;:27;;;;23728:177:::0;:::o;21908:400::-;22028:4;22050:228;22073:12;:10;:12::i;:::-;22100:7;22122:145;22179:15;22122:145;;;;;;;;;;;;;;;;;:11;:25;22134:12;:10;:12::i;:::-;22122:25;;;;;;;;;;;;;;;:34;22148:7;22122:34;;;;;;;;;;;;;;;;:38;;:145;;;;;:::i;:::-;22050:8;:228::i;:::-;22296:4;22289:11;;21908:400;;;;:::o;24835:97::-;24882:7;24909:15;;24902:22;;24835:97;:::o;20546:199::-;20651:4;20673:42;20683:12;:10;:12::i;:::-;20697:9;20708:6;20673:9;:42::i;:::-;20733:4;20726:11;;20546:199;;;;:::o;23211:339::-;16336:12;:10;:12::i;:::-;16325:23;;:7;:5;:7::i;:::-;:23;;;16317:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23334:16:::1;;;;;;;;;;;23333:17;23325:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;23400:17;23382:15;:35;;;;23458:34;23476:15;;23458:13;;:17;;:34;;;;:::i;:::-;23435:20;:57;;;;23508:34;23526:15;;23508:34;;;;;;:::i;:::-;;;;;;;;23211:339:::0;:::o;20753:184::-;20870:7;20902:11;:18;20914:5;20902:18;;;;;;;;;;;;;;;:27;20921:7;20902:27;;;;;;;;;;;;;;;;20895:34;;20753:184;;;;:::o;24047:113::-;16336:12;:10;:12::i;:::-;16325:23;;:7;:5;:7::i;:::-;:23;;;16317:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24148:4:::1;24117:19;:28;24137:7;24117:28;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;24047:113:::0;:::o;16524:201::-;16336:12;:10;:12::i;:::-;16325:23;;:7;:5;:7::i;:::-;:23;;;16317:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16633:1:::1;16613:22;;:8;:22;;::::0;16605:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;16689:28;16708:8;16689:18;:28::i;:::-;16524:201:::0;:::o;14419:98::-;14477:7;14508:1;14504;:5;;;;:::i;:::-;14497:12;;14419:98;;;;:::o;15731:::-;15784:7;15811:10;15804:17;;15731:98;:::o;22316:371::-;22460:1;22443:19;;:5;:19;;;22435:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22541:1;22522:21;;:7;:21;;;22514:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22625:6;22595:11;:18;22607:5;22595:18;;;;;;;;;;;;;;;:27;22614:7;22595:27;;;;;;;;;;;;;;;:36;;;;22663:7;22647:32;;22656:5;22647:32;;;22672:6;22647:32;;;;;;:::i;:::-;;;;;;;;22316:371;;;:::o;25148:1417::-;25286:1;25270:18;;:4;:18;;;25262:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25363:1;25349:16;;:2;:16;;;25341:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;25433:1;25424:6;:10;25416:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;25502:12;:18;25515:4;25502:18;;;;;;;;;;;;;;;;;;;;;;;;;25501:19;:40;;;;;25525:12;:16;25538:2;25525:16;;;;;;;;;;;;;;;;;;;;;;;;;25524:17;25501:40;25493:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;25607:7;:5;:7::i;:::-;25599:15;;:4;:15;;;;:45;;;;;25637:7;:5;:7::i;:::-;25631:13;;:2;:13;;;;25599:45;:92;;;;;25662:25;:29;25688:2;25662:29;;;;;;;;;;;;;;;;;;;;;;;;;25661:30;25599:92;25581:277;;;25773:11;;25744:25;25762:6;25744:13;25754:2;25744:9;:13::i;:::-;:17;;:25;;;;:::i;:::-;:40;;25718:128;;;;;;;;;;;;:::i;:::-;;;;;;;;;25581:277;25894:13;;;;;;;;;;;25888:19;;:2;:19;;;:53;;;;;25925:16;;;;;;;;;;;25924:17;25888:53;:117;;;;;25987:18;;25959:24;25977:4;25959:9;:24::i;:::-;:46;;25888:117;:158;;;;;26045:1;26022:20;;:24;25888:158;:190;;;;;26071:7;:5;:7::i;:::-;26063:15;;:4;:15;;;;25888:190;:220;;;;;26101:7;:5;:7::i;:::-;26095:13;;:2;:13;;;;25888:220;25870:290;;;26135:13;:11;:13::i;:::-;25870:290;26192:19;:25;26212:4;26192:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;26221:19;:23;26241:2;26221:23;;;;;;;;;;;;;;;;;;;;;;;;;26192:52;26190:55;:96;;;;;26285:1;26262:20;;:24;26190:96;26172:342;;;26313:22;26338:41;26375:3;26338:32;26349:20;;26338:6;:10;;:32;;;;:::i;:::-;:36;;:41;;;;:::i;:::-;26313:66;;26403:26;26414:14;26403:6;:10;;:26;;;;:::i;:::-;26394:35;;26444:50;26458:4;26472;26479:14;26444:13;:50::i;:::-;26298:216;26172:342;26526:31;26540:4;26546:2;26550:6;26526:13;:31::i;:::-;25148:1417;;;:::o;14957:240::-;15077:7;15135:1;15130;:6;;15138:12;15122:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;15177:1;15173;:5;15166:12;;14957:240;;;;;:::o;16733:191::-;16807:16;16826:6;;;;;;;;;;;16807:25;;16852:8;16843:6;;:17;;;;;;;;;;;;;;;;;;16907:8;16876:40;;16897:8;16876:40;;;;;;;;;;;;16796:128;16733:191;:::o;14631:98::-;14689:7;14720:1;14716;:5;;;;:::i;:::-;14709:12;;14631:98;;;;:::o;14740:::-;14798:7;14829:1;14825;:5;;;;:::i;:::-;14818:12;;14740:98;;;;:::o;26573:439::-;18982:4;18963:16;;:23;;;;;;;;;;;;;;;;;;26627:29:::1;26659:97;26735:20;;26659:57;26702:13;;26659:24;26677:4;26659:9;:24::i;:::-;:42;;:57;;;;:::i;:::-;:75;;:97;;;;:::i;:::-;26627:129;;26767:31;26801:99;26879:20;;26801:59;26844:15;;26801:24;26819:4;26801:9;:24::i;:::-;:42;;:59;;;;:::i;:::-;:77;;:99;;;;:::i;:::-;26767:133;;26913:37;26928:21;26913:14;:37::i;:::-;26963:41;26980:23;26963:16;:41::i;:::-;26616:396;;19028:5:::0;19009:16;;:24;;;;;;;;;;;;;;;;;;26573:439::o;14525:98::-;14583:7;14614:1;14610;:5;;;;:::i;:::-;14603:12;;14525:98;;;;:::o;28528:545::-;28681:1;28663:20;;:6;:20;;;28655:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;28765:1;28744:23;;:9;:23;;;28736:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;28840:108;28876:6;28840:108;;;;;;;;;;;;;;;;;:9;:17;28850:6;28840:17;;;;;;;;;;;;;;;;:21;;:108;;;;;:::i;:::-;28820:9;:17;28830:6;28820:17;;;;;;;;;;;;;;;:128;;;;28982:32;29007:6;28982:9;:20;28992:9;28982:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;28959:9;:20;28969:9;28959:20;;;;;;;;;;;;;;;:55;;;;29047:9;29030:35;;29039:6;29030:35;;;29058:6;29030:35;;;;;;:::i;:::-;;;;;;;;28528:545;;;:::o;27020:359::-;27079:12;27094:13;27105:1;27094:6;:10;;:13;;;;:::i;:::-;27079:28;;27118:17;27138:16;27149:4;27138:6;:10;;:16;;;;:::i;:::-;27118:36;;27167:22;27192:21;27167:46;;27226:22;27243:4;27226:16;:22::i;:::-;27261:18;27282:41;27308:14;27282:21;:25;;:41;;;;:::i;:::-;27261:62;;27336:35;27349:9;27360:10;27336:12;:35::i;:::-;27068:311;;;;27020:359;:::o;27387:280::-;27450:22;27475:21;27450:46;;27507:24;27524:6;27507:16;:24::i;:::-;27543:18;27564:41;27590:14;27564:21;:25;;:41;;;;:::i;:::-;27543:62;;27617:18;;;;;;;;;;;:27;;:39;27645:10;27617:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27437:230;;27387:280;:::o;27675:475::-;27741:21;27779:1;27765:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27741:40;;27810:4;27792;27797:1;27792:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;27836:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27826:4;27831:1;27826:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;27871:62;27888:4;27903:15;;;;;;;;;;;27921:11;27871:8;:62::i;:::-;27946:15;;;;;;;;;;;:66;;;28027:11;28053:1;28069:4;28096;28116:15;27946:196;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27730:420;27675:475;:::o;28158:362::-;28239:62;28256:4;28271:15;;;;;;;;;;;28289:11;28239:8;:62::i;:::-;28314:15;;;;;;;;;;;:31;;;28353:9;28386:4;28406:11;28432:1;28448;28464:7;:5;:7::i;:::-;28486:15;28314:198;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;28158:362;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:60::-;3474:3;3495:5;3488:12;;3446:60;;;:::o;3512:142::-;3562:9;3595:53;3613:34;3622:24;3640:5;3622:24;:::i;:::-;3613:34;:::i;:::-;3595:53;:::i;:::-;3582:66;;3512:142;;;:::o;3660:126::-;3710:9;3743:37;3774:5;3743:37;:::i;:::-;3730:50;;3660:126;;;:::o;3792:152::-;3868:9;3901:37;3932:5;3901:37;:::i;:::-;3888:50;;3792:152;;;:::o;3950:183::-;4063:63;4120:5;4063:63;:::i;:::-;4058:3;4051:76;3950:183;;:::o;4139:274::-;4258:4;4296:2;4285:9;4281:18;4273:26;;4309:97;4403:1;4392:9;4388:17;4379:6;4309:97;:::i;:::-;4139:274;;;;:::o;4419:329::-;4478:6;4527:2;4515:9;4506:7;4502:23;4498:32;4495:119;;;4533:79;;:::i;:::-;4495:119;4653:1;4678:53;4723:7;4714:6;4703:9;4699:22;4678:53;:::i;:::-;4668:63;;4624:117;4419:329;;;;:::o;4754:118::-;4841:24;4859:5;4841:24;:::i;:::-;4836:3;4829:37;4754:118;;:::o;4878:222::-;4971:4;5009:2;4998:9;4994:18;4986:26;;5022:71;5090:1;5079:9;5075:17;5066:6;5022:71;:::i;:::-;4878:222;;;;:::o;5106:619::-;5183:6;5191;5199;5248:2;5236:9;5227:7;5223:23;5219:32;5216:119;;;5254:79;;:::i;:::-;5216:119;5374:1;5399:53;5444:7;5435:6;5424:9;5420:22;5399:53;:::i;:::-;5389:63;;5345:117;5501:2;5527:53;5572:7;5563:6;5552:9;5548:22;5527:53;:::i;:::-;5517:63;;5472:118;5629:2;5655:53;5700:7;5691:6;5680:9;5676:22;5655:53;:::i;:::-;5645:63;;5600:118;5106:619;;;;;:::o;5731:329::-;5790:6;5839:2;5827:9;5818:7;5814:23;5810:32;5807:119;;;5845:79;;:::i;:::-;5807:119;5965:1;5990:53;6035:7;6026:6;6015:9;6011:22;5990:53;:::i;:::-;5980:63;;5936:117;5731:329;;;;:::o;6066:86::-;6101:7;6141:4;6134:5;6130:16;6119:27;;6066:86;;;:::o;6158:112::-;6241:22;6257:5;6241:22;:::i;:::-;6236:3;6229:35;6158:112;;:::o;6276:214::-;6365:4;6403:2;6392:9;6388:18;6380:26;;6416:67;6480:1;6469:9;6465:17;6456:6;6416:67;:::i;:::-;6276:214;;;;:::o;6496:118::-;6583:24;6601:5;6583:24;:::i;:::-;6578:3;6571:37;6496:118;;:::o;6620:222::-;6713:4;6751:2;6740:9;6736:18;6728:26;;6764:71;6832:1;6821:9;6817:17;6808:6;6764:71;:::i;:::-;6620:222;;;;:::o;6848:116::-;6918:21;6933:5;6918:21;:::i;:::-;6911:5;6908:32;6898:60;;6954:1;6951;6944:12;6898:60;6848:116;:::o;6970:133::-;7013:5;7051:6;7038:20;7029:29;;7067:30;7091:5;7067:30;:::i;:::-;6970:133;;;;:::o;7109:468::-;7174:6;7182;7231:2;7219:9;7210:7;7206:23;7202:32;7199:119;;;7237:79;;:::i;:::-;7199:119;7357:1;7382:53;7427:7;7418:6;7407:9;7403:22;7382:53;:::i;:::-;7372:63;;7328:117;7484:2;7510:50;7552:7;7543:6;7532:9;7528:22;7510:50;:::i;:::-;7500:60;;7455:115;7109:468;;;;;:::o;7583:104::-;7628:7;7657:24;7675:5;7657:24;:::i;:::-;7646:35;;7583:104;;;:::o;7693:138::-;7774:32;7800:5;7774:32;:::i;:::-;7767:5;7764:43;7754:71;;7821:1;7818;7811:12;7754:71;7693:138;:::o;7837:155::-;7891:5;7929:6;7916:20;7907:29;;7945:41;7980:5;7945:41;:::i;:::-;7837:155;;;;:::o;7998:345::-;8065:6;8114:2;8102:9;8093:7;8089:23;8085:32;8082:119;;;8120:79;;:::i;:::-;8082:119;8240:1;8265:61;8318:7;8309:6;8298:9;8294:22;8265:61;:::i;:::-;8255:71;;8211:125;7998:345;;;;:::o;8349:474::-;8417:6;8425;8474:2;8462:9;8453:7;8449:23;8445:32;8442:119;;;8480:79;;:::i;:::-;8442:119;8600:1;8625:53;8670:7;8661:6;8650:9;8646:22;8625:53;:::i;:::-;8615:63;;8571:117;8727:2;8753:53;8798:7;8789:6;8778:9;8774:22;8753:53;:::i;:::-;8743:63;;8698:118;8349:474;;;;;:::o;8829:180::-;8877:77;8874:1;8867:88;8974:4;8971:1;8964:15;8998:4;8995:1;8988:15;9015:320;9059:6;9096:1;9090:4;9086:12;9076:22;;9143:1;9137:4;9133:12;9164:18;9154:81;;9220:4;9212:6;9208:17;9198:27;;9154:81;9282:2;9274:6;9271:14;9251:18;9248:38;9245:84;;9301:18;;:::i;:::-;9245:84;9066:269;9015:320;;;:::o;9341:182::-;9481:34;9477:1;9469:6;9465:14;9458:58;9341:182;:::o;9529:366::-;9671:3;9692:67;9756:2;9751:3;9692:67;:::i;:::-;9685:74;;9768:93;9857:3;9768:93;:::i;:::-;9886:2;9881:3;9877:12;9870:19;;9529:366;;;:::o;9901:419::-;10067:4;10105:2;10094:9;10090:18;10082:26;;10154:9;10148:4;10144:20;10140:1;10129:9;10125:17;10118:47;10182:131;10308:4;10182:131;:::i;:::-;10174:139;;9901:419;;;:::o;10326:180::-;10374:77;10371:1;10364:88;10471:4;10468:1;10461:15;10495:4;10492:1;10485:15;10512:410;10552:7;10575:20;10593:1;10575:20;:::i;:::-;10570:25;;10609:20;10627:1;10609:20;:::i;:::-;10604:25;;10664:1;10661;10657:9;10686:30;10704:11;10686:30;:::i;:::-;10675:41;;10865:1;10856:7;10852:15;10849:1;10846:22;10826:1;10819:9;10799:83;10776:139;;10895:18;;:::i;:::-;10776:139;10560:362;10512:410;;;;:::o;10928:180::-;10976:77;10973:1;10966:88;11073:4;11070:1;11063:15;11097:4;11094:1;11087:15;11114:185;11154:1;11171:20;11189:1;11171:20;:::i;:::-;11166:25;;11205:20;11223:1;11205:20;:::i;:::-;11200:25;;11244:1;11234:35;;11249:18;;:::i;:::-;11234:35;11291:1;11288;11284:9;11279:14;;11114:185;;;;:::o;11305:332::-;11426:4;11464:2;11453:9;11449:18;11441:26;;11477:71;11545:1;11534:9;11530:17;11521:6;11477:71;:::i;:::-;11558:72;11626:2;11615:9;11611:18;11602:6;11558:72;:::i;:::-;11305:332;;;;;:::o;11643:137::-;11697:5;11728:6;11722:13;11713:22;;11744:30;11768:5;11744:30;:::i;:::-;11643:137;;;;:::o;11786:345::-;11853:6;11902:2;11890:9;11881:7;11877:23;11873:32;11870:119;;;11908:79;;:::i;:::-;11870:119;12028:1;12053:61;12106:7;12097:6;12086:9;12082:22;12053:61;:::i;:::-;12043:71;;11999:125;11786:345;;;;:::o;12137:177::-;12277:29;12273:1;12265:6;12261:14;12254:53;12137:177;:::o;12320:366::-;12462:3;12483:67;12547:2;12542:3;12483:67;:::i;:::-;12476:74;;12559:93;12648:3;12559:93;:::i;:::-;12677:2;12672:3;12668:12;12661:19;;12320:366;;;:::o;12692:419::-;12858:4;12896:2;12885:9;12881:18;12873:26;;12945:9;12939:4;12935:20;12931:1;12920:9;12916:17;12909:47;12973:131;13099:4;12973:131;:::i;:::-;12965:139;;12692:419;;;:::o;13117:143::-;13174:5;13205:6;13199:13;13190:22;;13221:33;13248:5;13221:33;:::i;:::-;13117:143;;;;:::o;13266:351::-;13336:6;13385:2;13373:9;13364:7;13360:23;13356:32;13353:119;;;13391:79;;:::i;:::-;13353:119;13511:1;13536:64;13592:7;13583:6;13572:9;13568:22;13536:64;:::i;:::-;13526:74;;13482:128;13266:351;;;;:::o;13623:332::-;13744:4;13782:2;13771:9;13767:18;13759:26;;13795:71;13863:1;13852:9;13848:17;13839:6;13795:71;:::i;:::-;13876:72;13944:2;13933:9;13929:18;13920:6;13876:72;:::i;:::-;13623:332;;;;;:::o;13961:166::-;14101:18;14097:1;14089:6;14085:14;14078:42;13961:166;:::o;14133:366::-;14275:3;14296:67;14360:2;14355:3;14296:67;:::i;:::-;14289:74;;14372:93;14461:3;14372:93;:::i;:::-;14490:2;14485:3;14481:12;14474:19;;14133:366;;;:::o;14505:419::-;14671:4;14709:2;14698:9;14694:18;14686:26;;14758:9;14752:4;14748:20;14744:1;14733:9;14729:17;14722:47;14786:131;14912:4;14786:131;:::i;:::-;14778:139;;14505:419;;;:::o;14930:225::-;15070:34;15066:1;15058:6;15054:14;15047:58;15139:8;15134:2;15126:6;15122:15;15115:33;14930:225;:::o;15161:366::-;15303:3;15324:67;15388:2;15383:3;15324:67;:::i;:::-;15317:74;;15400:93;15489:3;15400:93;:::i;:::-;15518:2;15513:3;15509:12;15502:19;;15161:366;;;:::o;15533:419::-;15699:4;15737:2;15726:9;15722:18;15714:26;;15786:9;15780:4;15776:20;15772:1;15761:9;15757:17;15750:47;15814:131;15940:4;15814:131;:::i;:::-;15806:139;;15533:419;;;:::o;15958:191::-;15998:3;16017:20;16035:1;16017:20;:::i;:::-;16012:25;;16051:20;16069:1;16051:20;:::i;:::-;16046:25;;16094:1;16091;16087:9;16080:16;;16115:3;16112:1;16109:10;16106:36;;;16122:18;;:::i;:::-;16106:36;15958:191;;;;:::o;16155:223::-;16295:34;16291:1;16283:6;16279:14;16272:58;16364:6;16359:2;16351:6;16347:15;16340:31;16155:223;:::o;16384:366::-;16526:3;16547:67;16611:2;16606:3;16547:67;:::i;:::-;16540:74;;16623:93;16712:3;16623:93;:::i;:::-;16741:2;16736:3;16732:12;16725:19;;16384:366;;;:::o;16756:419::-;16922:4;16960:2;16949:9;16945:18;16937:26;;17009:9;17003:4;16999:20;16995:1;16984:9;16980:17;16973:47;17037:131;17163:4;17037:131;:::i;:::-;17029:139;;16756:419;;;:::o;17181:221::-;17321:34;17317:1;17309:6;17305:14;17298:58;17390:4;17385:2;17377:6;17373:15;17366:29;17181:221;:::o;17408:366::-;17550:3;17571:67;17635:2;17630:3;17571:67;:::i;:::-;17564:74;;17647:93;17736:3;17647:93;:::i;:::-;17765:2;17760:3;17756:12;17749:19;;17408:366;;;:::o;17780:419::-;17946:4;17984:2;17973:9;17969:18;17961:26;;18033:9;18027:4;18023:20;18019:1;18008:9;18004:17;17997:47;18061:131;18187:4;18061:131;:::i;:::-;18053:139;;17780:419;;;:::o;18205:224::-;18345:34;18341:1;18333:6;18329:14;18322:58;18414:7;18409:2;18401:6;18397:15;18390:32;18205:224;:::o;18435:366::-;18577:3;18598:67;18662:2;18657:3;18598:67;:::i;:::-;18591:74;;18674:93;18763:3;18674:93;:::i;:::-;18792:2;18787:3;18783:12;18776:19;;18435:366;;;:::o;18807:419::-;18973:4;19011:2;19000:9;18996:18;18988:26;;19060:9;19054:4;19050:20;19046:1;19035:9;19031:17;19024:47;19088:131;19214:4;19088:131;:::i;:::-;19080:139;;18807:419;;;:::o;19232:222::-;19372:34;19368:1;19360:6;19356:14;19349:58;19441:5;19436:2;19428:6;19424:15;19417:30;19232:222;:::o;19460:366::-;19602:3;19623:67;19687:2;19682:3;19623:67;:::i;:::-;19616:74;;19699:93;19788:3;19699:93;:::i;:::-;19817:2;19812:3;19808:12;19801:19;;19460:366;;;:::o;19832:419::-;19998:4;20036:2;20025:9;20021:18;20013:26;;20085:9;20079:4;20075:20;20071:1;20060:9;20056:17;20049:47;20113:131;20239:4;20113:131;:::i;:::-;20105:139;;19832:419;;;:::o;20257:228::-;20397:34;20393:1;20385:6;20381:14;20374:58;20466:11;20461:2;20453:6;20449:15;20442:36;20257:228;:::o;20491:366::-;20633:3;20654:67;20718:2;20713:3;20654:67;:::i;:::-;20647:74;;20730:93;20819:3;20730:93;:::i;:::-;20848:2;20843:3;20839:12;20832:19;;20491:366;;;:::o;20863:419::-;21029:4;21067:2;21056:9;21052:18;21044:26;;21116:9;21110:4;21106:20;21102:1;21091:9;21087:17;21080:47;21144:131;21270:4;21144:131;:::i;:::-;21136:139;;20863:419;;;:::o;21288:172::-;21428:24;21424:1;21416:6;21412:14;21405:48;21288:172;:::o;21466:366::-;21608:3;21629:67;21693:2;21688:3;21629:67;:::i;:::-;21622:74;;21705:93;21794:3;21705:93;:::i;:::-;21823:2;21818:3;21814:12;21807:19;;21466:366;;;:::o;21838:419::-;22004:4;22042:2;22031:9;22027:18;22019:26;;22091:9;22085:4;22081:20;22077:1;22066:9;22062:17;22055:47;22119:131;22245:4;22119:131;:::i;:::-;22111:139;;21838:419;;;:::o;22263:176::-;22403:28;22399:1;22391:6;22387:14;22380:52;22263:176;:::o;22445:366::-;22587:3;22608:67;22672:2;22667:3;22608:67;:::i;:::-;22601:74;;22684:93;22773:3;22684:93;:::i;:::-;22802:2;22797:3;22793:12;22786:19;;22445:366;;;:::o;22817:419::-;22983:4;23021:2;23010:9;23006:18;22998:26;;23070:9;23064:4;23060:20;23056:1;23045:9;23041:17;23034:47;23098:131;23224:4;23098:131;:::i;:::-;23090:139;;22817:419;;;:::o;23242:194::-;23282:4;23302:20;23320:1;23302:20;:::i;:::-;23297:25;;23336:20;23354:1;23336:20;:::i;:::-;23331:25;;23380:1;23377;23373:9;23365:17;;23404:1;23398:4;23395:11;23392:37;;;23409:18;;:::i;:::-;23392:37;23242:194;;;;:::o;23442:180::-;23490:77;23487:1;23480:88;23587:4;23584:1;23577:15;23611:4;23608:1;23601:15;23628:180;23676:77;23673:1;23666:88;23773:4;23770:1;23763:15;23797:4;23794:1;23787:15;23814:85;23859:7;23888:5;23877:16;;23814:85;;;:::o;23905:158::-;23963:9;23996:61;24014:42;24023:32;24049:5;24023:32;:::i;:::-;24014:42;:::i;:::-;23996:61;:::i;:::-;23983:74;;23905:158;;;:::o;24069:147::-;24164:45;24203:5;24164:45;:::i;:::-;24159:3;24152:58;24069:147;;:::o;24222:114::-;24289:6;24323:5;24317:12;24307:22;;24222:114;;;:::o;24342:184::-;24441:11;24475:6;24470:3;24463:19;24515:4;24510:3;24506:14;24491:29;;24342:184;;;;:::o;24532:132::-;24599:4;24622:3;24614:11;;24652:4;24647:3;24643:14;24635:22;;24532:132;;;:::o;24670:108::-;24747:24;24765:5;24747:24;:::i;:::-;24742:3;24735:37;24670:108;;:::o;24784:179::-;24853:10;24874:46;24916:3;24908:6;24874:46;:::i;:::-;24952:4;24947:3;24943:14;24929:28;;24784:179;;;;:::o;24969:113::-;25039:4;25071;25066:3;25062:14;25054:22;;24969:113;;;:::o;25118:732::-;25237:3;25266:54;25314:5;25266:54;:::i;:::-;25336:86;25415:6;25410:3;25336:86;:::i;:::-;25329:93;;25446:56;25496:5;25446:56;:::i;:::-;25525:7;25556:1;25541:284;25566:6;25563:1;25560:13;25541:284;;;25642:6;25636:13;25669:63;25728:3;25713:13;25669:63;:::i;:::-;25662:70;;25755:60;25808:6;25755:60;:::i;:::-;25745:70;;25601:224;25588:1;25585;25581:9;25576:14;;25541:284;;;25545:14;25841:3;25834:10;;25242:608;;;25118:732;;;;:::o;25856:831::-;26119:4;26157:3;26146:9;26142:19;26134:27;;26171:71;26239:1;26228:9;26224:17;26215:6;26171:71;:::i;:::-;26252:80;26328:2;26317:9;26313:18;26304:6;26252:80;:::i;:::-;26379:9;26373:4;26369:20;26364:2;26353:9;26349:18;26342:48;26407:108;26510:4;26501:6;26407:108;:::i;:::-;26399:116;;26525:72;26593:2;26582:9;26578:18;26569:6;26525:72;:::i;:::-;26607:73;26675:3;26664:9;26660:19;26651:6;26607:73;:::i;:::-;25856:831;;;;;;;;:::o;26693:807::-;26942:4;26980:3;26969:9;26965:19;26957:27;;26994:71;27062:1;27051:9;27047:17;27038:6;26994:71;:::i;:::-;27075:72;27143:2;27132:9;27128:18;27119:6;27075:72;:::i;:::-;27157:80;27233:2;27222:9;27218:18;27209:6;27157:80;:::i;:::-;27247;27323:2;27312:9;27308:18;27299:6;27247:80;:::i;:::-;27337:73;27405:3;27394:9;27390:19;27381:6;27337:73;:::i;:::-;27420;27488:3;27477:9;27473:19;27464:6;27420:73;:::i;:::-;26693:807;;;;;;;;;:::o;27506:143::-;27563:5;27594:6;27588:13;27579:22;;27610:33;27637:5;27610:33;:::i;:::-;27506:143;;;;:::o;27655:663::-;27743:6;27751;27759;27808:2;27796:9;27787:7;27783:23;27779:32;27776:119;;;27814:79;;:::i;:::-;27776:119;27934:1;27959:64;28015:7;28006:6;27995:9;27991:22;27959:64;:::i;:::-;27949:74;;27905:128;28072:2;28098:64;28154:7;28145:6;28134:9;28130:22;28098:64;:::i;:::-;28088:74;;28043:129;28211:2;28237:64;28293:7;28284:6;28273:9;28269:22;28237:64;:::i;:::-;28227:74;;28182:129;27655:663;;;;;:::o

Swarm Source

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