ETH Price: $3,402.04 (+2.02%)

Token

A Perfect Harmony (ENIGMA)
 

Overview

Max Total Supply

999,777,999,777,999 ENIGMA

Holders

30

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
king69midas.eth
Balance
15,708,724,716,184.875868813283016019 ENIGMA

Value
$0.00
0x653325afdb00dd741fee25a694467eba17e8e93d
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:
Masterpiece

Compiler Version
v0.8.20+commit.a1b79de6

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-07-23
*/

pragma solidity ^0.8.6;

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

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


interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `to`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address to, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `from` to `to` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the symbol of the token.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns (uint8);
}

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

    mapping(address => mapping(address => uint256)) private _allowances;

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * The default value of {decimals} is 18. To select a different value for
     * {decimals} you should overload it.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    /**
     * @dev Returns the name of the token.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5.05` (`505 / 10 ** 2`).
     *
     * Tokens usually opt for a value of 18, imitating the relationship between
     * Ether and Wei. This is the value {ERC20} uses, unless this function is
     * overridden;
     *
     * NOTE: This information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * {IERC20-balanceOf} and {IERC20-transfer}.
     */
    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

    /**
     * @dev See {IERC20-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address to, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _transfer(owner, to, amount);
        return true;
    }

    /**
     * @dev See {IERC20-allowance}.
     */
    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }

    /**
     * @dev See {IERC20-approve}.
     *
     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on
     * `transferFrom`. This is semantically equivalent to an infinite approval.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, amount);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * NOTE: Does not update the allowance if the current allowance
     * is the maximum `uint256`.
     *
     * Requirements:
     *
     * - `from` and `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     * - the caller must have allowance for ``from``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) public virtual override returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, amount);
        _transfer(from, to, amount);
        return true;
    }

    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, _allowances[owner][spender] + addedValue);
        return true;
    }

    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        address owner = _msgSender();
        uint256 currentAllowance = _allowances[owner][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(owner, spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    /**
     * @dev Moves `amount` of tokens from `sender` to `recipient`.
     *
     * This internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     */
    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(from, to, amount);

        uint256 fromBalance = _balances[from];
        require(fromBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[from] = fromBalance - amount;
        }
        _balances[to] += amount;

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, amount);
    }

    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

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

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

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

    /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

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

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
        }
        _totalSupply -= amount;

        emit Transfer(account, address(0), amount);

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

    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
     *
     * This internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

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

    /**
     * @dev Spend `amount` form the allowance of `owner` toward `spender`.
     *
     * Does not update the allowance amount in case of infinite allowance.
     * Revert if not enough allowance is available.
     *
     * Might emit an {Approval} event.
     */
    function _spendAllowance(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            require(currentAllowance >= amount, "ERC20: insufficient allowance");
            unchecked {
                _approve(owner, spender, currentAllowance - amount);
            }
        }
    }

    /**
     * @dev Hook that is called before any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * will be transferred to `to`.
     * - when `from` is zero, `amount` tokens will be minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}

    /**
     * @dev Hook that is called after any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * has been transferred to `to`.
     * - when `from` is zero, `amount` tokens have been minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens have been burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

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

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

     /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }

    function geUnlockTime() public view returns (uint256) {
        return _lockTime;
    }
}

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

    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);

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

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

    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}

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

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);

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

    function initialize(address, address) external;
}

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

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

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

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

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


contract Masterpiece is ERC20, Ownable {
   
    mapping(address => bool) public dexRouters;
    mapping(address => bool) public automatedMarketMakerPairs;

    IUniswapV2Router02 public defaultDexRouter;

    address public defaultPair;
    address public tresuaryWallet;
    address public constant weth = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2;
    address public constant f9 = 0x38A94e92A19E970c144DEd0B2DD47278CA11CC1F;
    address public constant eruta = 0x409B46013C78C63cf376f17466aeF87895617451;
    address public constant dead = 0x000000000000000000000000000000000000dEaD;



    bool private isSwappingFees;


    uint256 private _startSupply = 999_777_999_777_999 * (10**18);
    uint256 private swapTokensAtAmount = 100_000 * (10**18);
    uint8  private constant _decimals = 18;

    // fees (from a total of 10000)
    uint256 public buyFeesCollected = 0;
    uint256 public buyFee = 100;
    uint256 public buyTotalFees = buyFee;

    uint256 public sellFeesCollected = 0;
    uint256 public sellFee = 100;
    uint256 public sellTotalFees = sellFee;


    uint256 public buyBackAndFeesStartTime;




    event UpdateDefaultDexRouter(address indexed newAddress, address indexed oldAddress);
    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
    event LogbuyBackERUTA(uint256 amount);
    event LogbuyBackF9(uint256 amount);
    


    constructor(
        address _routerAddress,
        uint256 _buyBackAndFeesStartTime
    ) ERC20("A Perfect Harmony", "ENIGMA") {
        IUniswapV2Router02 _dexRouter = IUniswapV2Router02(_routerAddress);

        buyBackAndFeesStartTime = _buyBackAndFeesStartTime;
        

        defaultDexRouter = _dexRouter;
        dexRouters[_routerAddress] = true;
        defaultPair = IUniswapV2Factory(_dexRouter.factory()).createPair(address(this), _dexRouter.WETH());
        
        _setAutomatedMarketMakerPair(defaultPair, true);
        //_mint is an internal function in ERC20.sol that is only called here, and CANNOT be called ever again
        _mint(owner(), _startSupply);
    }


    receive() external payable {}

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

    function setBuyBackAndFeesStartTime(uint256 _buyBackAndFeesStartTime) external onlyOwner {
        buyBackAndFeesStartTime = _buyBackAndFeesStartTime;
    }

    function addNewRouter(address _router, bool makeDefault) external onlyOwner {
        dexRouters[_router] = true;

        if (makeDefault) {
            emit UpdateDefaultDexRouter(_router, address(defaultDexRouter));
            defaultDexRouter = IUniswapV2Router02(_router);
            defaultPair = IUniswapV2Factory(defaultDexRouter.factory()).createPair(address(this), defaultDexRouter.WETH());
            _setAutomatedMarketMakerPair(defaultPair, true);
        }
    }

    function setAutomatedMarketMakerPair(address pair, bool value) external onlyOwner {
        require(
            value || pair != defaultPair,
            "The default pair cannot be removed from automatedMarketMakerPairs"
        );
        _setAutomatedMarketMakerPair(pair, value);
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        require(
            automatedMarketMakerPairs[pair] != value,
            "Automated market maker pair is already set to that value"
        );

        automatedMarketMakerPairs[pair] = value;
        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function updateSwapTokensAtAmount(uint256 _swapTokensAtAmount) external onlyOwner {
        require(_swapTokensAtAmount > 0, "Amount should be higher then 0");
        swapTokensAtAmount = _swapTokensAtAmount;
    }

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

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

        uint256 senderBalance = balanceOf(from);
        require(senderBalance >= amount, "ERC20: transfer amount exceeds balance");

        // take fee
        amount = collectFees(from, to, amount);

        // swap fees before transfer has happened and after dividend balances are done
        swapFeesIfAmountIsReached(from, to);

        super._transfer(from, to, amount);
    }

    function collectFees(
        address from,
        address to,
        uint256 amount
    ) private returns (uint256) {
        if (!isSwappingFees && block.timestamp >= buyBackAndFeesStartTime && from != dead &&
            to != dead) {
            uint256 fees;
            if (automatedMarketMakerPairs[from]) {
                fees = (amount * buyTotalFees) / 10000;
                buyFeesCollected += fees;
            } else if (automatedMarketMakerPairs[to]) {
                fees = (amount * sellTotalFees) / 10000;
                sellFeesCollected += fees;
            }

            amount = amount - fees;
            super._transfer(from, address(this), fees);
        }
        return amount;
    }

    function swapFeesIfAmountIsReached(address from, address to) private {
        uint256 contractTokenBalance = balanceOf(address(this));
        
        if (
            contractTokenBalance >= swapTokensAtAmount &&
            !isSwappingFees &&
            !automatedMarketMakerPairs[from] && // do not swap fees on buys
            from != dead &&
            to != dead
        ) {
            isSwappingFees = true;

            buyFeesCollected = (contractTokenBalance / (buyFeesCollected + sellFeesCollected)) * buyFeesCollected;
            sellFeesCollected = contractTokenBalance - buyFeesCollected;

            uint256 f9Tokens = (buyFeesCollected * buyFee) / buyTotalFees;
            if (f9Tokens > 0) buyBackF9(f9Tokens);
            

            uint256 erutaTokens = (sellFeesCollected * sellFee) / sellTotalFees;
            if (erutaTokens > 0) buyBackERUTA(erutaTokens);
          

            buyFeesCollected = 0;
            sellFeesCollected = 0;

            isSwappingFees = false;
        }
    }

    function burn(uint256 amount) public virtual {
        _burn(_msgSender(), amount);
    }


    function buyBackF9(uint256 amount) private{
        _approve(address(this), address(defaultDexRouter), amount);
        swapTokensForTokens(f9, amount);
        emit LogbuyBackF9(amount);
    }

    function buyBackERUTA(uint256 amount) private{
        _approve(address(this), address(defaultDexRouter), amount);
        swapTokensForTokens(eruta, amount);
        emit LogbuyBackERUTA(amount);
    }

    function swapTokensForTokens(address _token, uint256 amount) private {
        address[] memory path = new address[](3);
        path[0] = address(this);
        path[1] = weth;
        path[2] = _token;

        // make the swap
        defaultDexRouter.swapExactTokensForTokensSupportingFeeOnTransferTokens(
            amount,
            0, // accept any amount of Tokens
            path,
            dead,
            block.timestamp 
        );
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_routerAddress","type":"address"},{"internalType":"uint256","name":"_buyBackAndFeesStartTime","type":"uint256"}],"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":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"LogbuyBackERUTA","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"LogbuyBackF9","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateDefaultDexRouter","type":"event"},{"inputs":[{"internalType":"address","name":"_router","type":"address"},{"internalType":"bool","name":"makeDefault","type":"bool"}],"name":"addNewRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyBackAndFeesStartTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyFeesCollected","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dead","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","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":"defaultDexRouter","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"defaultPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"dexRouters","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"eruta","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"f9","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"geUnlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellFeesCollected","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buyBackAndFeesStartTime","type":"uint256"}],"name":"setBuyBackAndFeesStartTime","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":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"tresuaryWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_swapTokensAtAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"weth","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526d314af8f245fdef2cbdee19dc0000600d5569152d02c7e14af6800000600e555f600f5560646010556010546011555f60125560646013556013546014553480156200004e575f80fd5b50604051620043db380380620043db8339818101604052810190620000749190620007c7565b6040518060400160405280601181526020017f412050657266656374204861726d6f6e790000000000000000000000000000008152506040518060400160405280600681526020017f454e49474d4100000000000000000000000000000000000000000000000000008152508160039081620000f1919062000a67565b50806004908162000103919062000a67565b5050505f620001176200045160201b60201c565b90508060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3505f8290508160158190555080600a5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160085f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200029e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620002c4919062000b4b565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200032a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000350919062000b4b565b6040518363ffffffff1660e01b81526004016200036f92919062000b8c565b6020604051808303815f875af11580156200038c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620003b2919062000b4b565b600b5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000425600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200045860201b60201c565b62000448620004396200058860201b60201c565b600d54620005b060201b60201c565b50505062000d5c565b5f33905090565b80151560095f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16151503620004ea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004e19062000c3b565b60405180910390fd5b8060095f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000621576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006189062000ca9565b60405180910390fd5b620006345f83836200072060201b60201c565b8060025f82825462000647919062000cf6565b92505081905550805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546200069b919062000cf6565b925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000701919062000d41565b60405180910390a36200071c5f83836200072560201b60201c565b5050565b505050565b505050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f62000759826200072e565b9050919050565b6200076b816200074d565b811462000776575f80fd5b50565b5f81519050620007898162000760565b92915050565b5f819050919050565b620007a3816200078f565b8114620007ae575f80fd5b50565b5f81519050620007c18162000798565b92915050565b5f8060408385031215620007e057620007df6200072a565b5b5f620007ef8582860162000779565b92505060206200080285828601620007b1565b9150509250929050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806200088857607f821691505b6020821081036200089e576200089d62000843565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302620009027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620008c5565b6200090e8683620008c5565b95508019841693508086168417925050509392505050565b5f819050919050565b5f6200094f6200094962000943846200078f565b62000926565b6200078f565b9050919050565b5f819050919050565b6200096a836200092f565b62000982620009798262000956565b848454620008d1565b825550505050565b5f90565b620009986200098a565b620009a58184846200095f565b505050565b5b81811015620009cc57620009c05f826200098e565b600181019050620009ab565b5050565b601f82111562000a1b57620009e581620008a4565b620009f084620008b6565b8101602085101562000a00578190505b62000a1862000a0f85620008b6565b830182620009aa565b50505b505050565b5f82821c905092915050565b5f62000a3d5f198460080262000a20565b1980831691505092915050565b5f62000a57838362000a2c565b9150826002028217905092915050565b62000a72826200080c565b67ffffffffffffffff81111562000a8e5762000a8d62000816565b5b62000a9a825462000870565b62000aa7828285620009d0565b5f60209050601f83116001811462000add575f841562000ac8578287015190505b62000ad4858262000a4a565b86555062000b43565b601f19841662000aed86620008a4565b5f5b8281101562000b165784890151825560018201915060208501945060208101905062000aef565b8683101562000b36578489015162000b32601f89168262000a2c565b8355505b6001600288020188555050505b505050505050565b5f6020828403121562000b635762000b626200072a565b5b5f62000b728482850162000779565b91505092915050565b62000b86816200074d565b82525050565b5f60408201905062000ba15f83018562000b7b565b62000bb0602083018462000b7b565b9392505050565b5f82825260208201905092915050565b7f4175746f6d61746564206d61726b6574206d616b6572207061697220697320615f8201527f6c72656164792073657420746f20746861742076616c75650000000000000000602082015250565b5f62000c2360388362000bb7565b915062000c308262000bc7565b604082019050919050565b5f6020820190508181035f83015262000c548162000c15565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f62000c91601f8362000bb7565b915062000c9e8262000c5b565b602082019050919050565b5f6020820190508181035f83015262000cc28162000c83565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f62000d02826200078f565b915062000d0f836200078f565b925082820190508082111562000d2a5762000d2962000cc9565b5b92915050565b62000d3b816200078f565b82525050565b5f60208201905062000d565f83018462000d30565b92915050565b6136718062000d6a5f395ff3fe608060405260043610610212575f3560e01c806395d89b4111610117578063c3a5dbb91161009f578063d85ba0631161006e578063d85ba063146107a5578063dd62ed3e146107cf578063e70255931461080b578063f2fde38b14610835578063f68d5d981461085d57610219565b8063c3a5dbb9146106ff578063d257b34f14610729578063d32a8f6714610751578063d578192c1461077b57610219565b8063a457c2d7116100e6578063a457c2d7146105e5578063a9059cbb14610621578063b62496f51461065d578063b6c5232414610699578063c1c356c5146106c357610219565b806395d89b4114610541578063999777aa1461056b5780639a7a23d614610595578063a32cb4c6146105bd57610219565b80633fc8cef31161019a57806370a082311161016957806370a0823114610473578063715018a6146104af578063865c98e5146104c55780638a6de7a2146104ed5780638da5cb5b1461051757610219565b80633fc8cef3146103cd57806342966c68146103f7578063470624021461041f5780636a486a8e1461044957610219565b806323b872dd116101e157806323b872dd146102d75780632b14ca5614610313578063313ce5671461033d57806336cf7c8714610367578063395093511461039157610219565b806306fdde031461021d578063095ea7b31461024757806318160ddd146102835780632260d4de146102ad57610219565b3661021957005b5f80fd5b348015610228575f80fd5b50610231610887565b60405161023e91906127c7565b60405180910390f35b348015610252575f80fd5b5061026d60048036038101906102689190612878565b610917565b60405161027a91906128d0565b60405180910390f35b34801561028e575f80fd5b50610297610939565b6040516102a491906128f8565b60405180910390f35b3480156102b8575f80fd5b506102c1610942565b6040516102ce91906128f8565b60405180910390f35b3480156102e2575f80fd5b506102fd60048036038101906102f89190612911565b610948565b60405161030a91906128d0565b60405180910390f35b34801561031e575f80fd5b50610327610976565b60405161033491906128f8565b60405180910390f35b348015610348575f80fd5b5061035161097c565b60405161035e919061297c565b60405180910390f35b348015610372575f80fd5b5061037b610984565b60405161038891906129a4565b60405180910390f35b34801561039c575f80fd5b506103b760048036038101906103b29190612878565b61098a565b6040516103c491906128d0565b60405180910390f35b3480156103d8575f80fd5b506103e1610a2f565b6040516103ee91906129a4565b60405180910390f35b348015610402575f80fd5b5061041d600480360381019061041891906129bd565b610a47565b005b34801561042a575f80fd5b50610433610a5b565b60405161044091906128f8565b60405180910390f35b348015610454575f80fd5b5061045d610a61565b60405161046a91906128f8565b60405180910390f35b34801561047e575f80fd5b50610499600480360381019061049491906129e8565b610a67565b6040516104a691906128f8565b60405180910390f35b3480156104ba575f80fd5b506104c3610aac565b005b3480156104d0575f80fd5b506104eb60048036038101906104e691906129bd565b610bff565b005b3480156104f8575f80fd5b50610501610c9f565b60405161050e91906129a4565b60405180910390f35b348015610522575f80fd5b5061052b610cb7565b60405161053891906129a4565b60405180910390f35b34801561054c575f80fd5b50610555610cdf565b60405161056291906127c7565b60405180910390f35b348015610576575f80fd5b5061057f610d6f565b60405161058c91906128f8565b60405180910390f35b3480156105a0575f80fd5b506105bb60048036038101906105b69190612a3d565b610d75565b005b3480156105c8575f80fd5b506105e360048036038101906105de9190612a3d565b610eb1565b005b3480156105f0575f80fd5b5061060b60048036038101906106069190612878565b611262565b60405161061891906128d0565b60405180910390f35b34801561062c575f80fd5b5061064760048036038101906106429190612878565b611346565b60405161065491906128d0565b60405180910390f35b348015610668575f80fd5b50610683600480360381019061067e91906129e8565b611368565b60405161069091906128d0565b60405180910390f35b3480156106a4575f80fd5b506106ad611385565b6040516106ba91906128f8565b60405180910390f35b3480156106ce575f80fd5b506106e960048036038101906106e491906129e8565b61138e565b6040516106f691906128d0565b60405180910390f35b34801561070a575f80fd5b506107136113ab565b60405161072091906128f8565b60405180910390f35b348015610734575f80fd5b5061074f600480360381019061074a91906129bd565b6113b1565b005b34801561075c575f80fd5b50610765611493565b60405161077291906129a4565b60405180910390f35b348015610786575f80fd5b5061078f6114b8565b60405161079c9190612ad6565b60405180910390f35b3480156107b0575f80fd5b506107b96114dd565b6040516107c691906128f8565b60405180910390f35b3480156107da575f80fd5b506107f560048036038101906107f09190612aef565b6114e3565b60405161080291906128f8565b60405180910390f35b348015610816575f80fd5b5061081f611565565b60405161082c91906129a4565b60405180910390f35b348015610840575f80fd5b5061085b600480360381019061085691906129e8565b61157d565b005b348015610868575f80fd5b5061087161173f565b60405161087e91906129a4565b60405180910390f35b60606003805461089690612b5a565b80601f01602080910402602001604051908101604052809291908181526020018280546108c290612b5a565b801561090d5780601f106108e45761010080835404028352916020019161090d565b820191905f5260205f20905b8154815290600101906020018083116108f057829003601f168201915b5050505050905090565b5f80610921611764565b905061092e81858561176b565b600191505092915050565b5f600254905090565b60155481565b5f80610952611764565b905061095f85828561192e565b61096a8585856119b9565b60019150509392505050565b60135481565b5f6012905090565b61dead81565b5f80610994611764565b9050610a2481858560015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054610a1f9190612bb7565b61176b565b600191505092915050565b73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281565b610a58610a52611764565b82611b24565b50565b60105481565b60145481565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610ab4611764565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3990612c34565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35f60055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b610c07611764565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8c90612c34565b60405180910390fd5b8060158190555050565b73409b46013c78c63cf376f17466aef8789561745181565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610cee90612b5a565b80601f0160208091040260200160405190810160405280929190818152602001828054610d1a90612b5a565b8015610d655780601f10610d3c57610100808354040283529160200191610d65565b820191905f5260205f20905b815481529060010190602001808311610d4857829003601f168201915b5050505050905090565b60125481565b610d7d611764565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0290612c34565b60405180910390fd5b8080610e645750600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b610ea3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9a90612ce8565b60405180910390fd5b610ead8282611cf0565b5050565b610eb9611764565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3e90612c34565b60405180910390fd5b600160085f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550801561125e57600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f56729c2d3b35702079226f38e0417b72386db8f924b488588b56135138cf179f60405160405180910390a381600a5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110c7573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110eb9190612d1a565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611171573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111959190612d1a565b6040518363ffffffff1660e01b81526004016111b2929190612d45565b6020604051808303815f875af11580156111ce573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111f29190612d1a565b600b5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061125d600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001611cf0565b5b5050565b5f8061126c611764565b90505f60015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508381101561132d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132490612ddc565b60405180910390fd5b61133a828686840361176b565b60019250505092915050565b5f80611350611764565b905061135d8185856119b9565b600191505092915050565b6009602052805f5260405f205f915054906101000a900460ff1681565b5f600754905090565b6008602052805f5260405f205f915054906101000a900460ff1681565b600f5481565b6113b9611764565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611447576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143e90612c34565b60405180910390fd5b5f8111611489576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148090612e44565b60405180910390fd5b80600e8190555050565b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60115481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b7338a94e92a19e970c144ded0b2dd47278ca11cc1f81565b611585611764565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611613576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160a90612c34565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611681576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167890612ed2565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a38060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036117d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d090612f60565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611847576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183e90612fee565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161192191906128f8565b60405180910390a3505050565b5f61193984846114e3565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146119b357818110156119a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199c90613056565b60405180910390fd5b6119b2848484840361176b565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611a27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1e906130e4565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611a95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8c90613172565b60405180910390fd5b5f8103611aac57611aa783835f611e1d565b611b1f565b5f611ab684610a67565b905081811015611afb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af290613200565b60405180910390fd5b611b06848484612092565b9150611b128484612260565b611b1d848484611e1d565b505b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611b92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b899061328e565b60405180910390fd5b611b9d825f83612448565b5f805f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015611c20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c179061331c565b60405180910390fd5b8181035f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508160025f828254611c74919061333a565b925050819055505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611cd891906128f8565b60405180910390a3611ceb835f8461244d565b505050565b80151560095f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16151503611d7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d76906133dd565b60405180910390fd5b8060095f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611e8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e82906130e4565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611ef9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef090613172565b60405180910390fd5b611f04838383612448565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015611f87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7e90613200565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546120159190612bb7565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161207991906128f8565b60405180910390a361208c84848461244d565b50505050565b5f600c60149054906101000a900460ff161580156120b257506015544210155b80156120ec575061dead73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b8015612126575061dead73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b15612256575f60095f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156121b5576127106011548461218c91906133fb565b6121969190613469565b905080600f5f8282546121a99190612bb7565b9250508190555061223b565b60095f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161561223a576127106014548461221591906133fb565b61221f9190613469565b90508060125f8282546122329190612bb7565b925050819055505b5b8083612247919061333a565b9250612254853083611e1d565b505b8190509392505050565b5f61226a30610a67565b9050600e54811015801561228b5750600c60149054906101000a900460ff16155b80156122de575060095f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612318575061dead73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b8015612352575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612443576001600c60146101000a81548160ff021916908315150217905550600f54601254600f546123859190612bb7565b826123909190613469565b61239a91906133fb565b600f81905550600f54816123ae919061333a565b6012819055505f601154601054600f546123c891906133fb565b6123d29190613469565b90505f8111156123e6576123e581612452565b5b5f6014546013546012546123fa91906133fb565b6124049190613469565b90505f81111561241857612417816124d6565b5b5f600f819055505f6012819055505f600c60146101000a81548160ff02191690831515021790555050505b505050565b505050565b505050565b61247e30600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff168361176b565b61249c7338a94e92a19e970c144ded0b2dd47278ca11cc1f8261255a565b7fc3ddb12c774f220f97d47850b8bff33f8adab8e52d7d3e25bca29dc667e4fe4e816040516124cb91906128f8565b60405180910390a150565b61250230600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff168361176b565b61252073409b46013c78c63cf376f17466aef878956174518261255a565b7fbaa311baf25511ff2bb472ee38a92731d47afba9610a1d5bd29d689280e991d88160405161254f91906128f8565b60405180910390a150565b5f600367ffffffffffffffff81111561257657612575613499565b5b6040519080825280602002602001820160405280156125a45781602001602082028036833780820191505090505b50905030815f815181106125bb576125ba6134c6565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc28160018151811061261e5761261d6134c6565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050828160028151811061266d5761266c6134c6565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c11d795835f8461dead426040518663ffffffff1660e01b815260040161270b9594939291906135e3565b5f604051808303815f87803b158015612722575f80fd5b505af1158015612734573d5f803e3d5ffd5b50505050505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015612774578082015181840152602081019050612759565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6127998261273d565b6127a38185612747565b93506127b3818560208601612757565b6127bc8161277f565b840191505092915050565b5f6020820190508181035f8301526127df818461278f565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612814826127eb565b9050919050565b6128248161280a565b811461282e575f80fd5b50565b5f8135905061283f8161281b565b92915050565b5f819050919050565b61285781612845565b8114612861575f80fd5b50565b5f813590506128728161284e565b92915050565b5f806040838503121561288e5761288d6127e7565b5b5f61289b85828601612831565b92505060206128ac85828601612864565b9150509250929050565b5f8115159050919050565b6128ca816128b6565b82525050565b5f6020820190506128e35f8301846128c1565b92915050565b6128f281612845565b82525050565b5f60208201905061290b5f8301846128e9565b92915050565b5f805f60608486031215612928576129276127e7565b5b5f61293586828701612831565b935050602061294686828701612831565b925050604061295786828701612864565b9150509250925092565b5f60ff82169050919050565b61297681612961565b82525050565b5f60208201905061298f5f83018461296d565b92915050565b61299e8161280a565b82525050565b5f6020820190506129b75f830184612995565b92915050565b5f602082840312156129d2576129d16127e7565b5b5f6129df84828501612864565b91505092915050565b5f602082840312156129fd576129fc6127e7565b5b5f612a0a84828501612831565b91505092915050565b612a1c816128b6565b8114612a26575f80fd5b50565b5f81359050612a3781612a13565b92915050565b5f8060408385031215612a5357612a526127e7565b5b5f612a6085828601612831565b9250506020612a7185828601612a29565b9150509250929050565b5f819050919050565b5f612a9e612a99612a94846127eb565b612a7b565b6127eb565b9050919050565b5f612aaf82612a84565b9050919050565b5f612ac082612aa5565b9050919050565b612ad081612ab6565b82525050565b5f602082019050612ae95f830184612ac7565b92915050565b5f8060408385031215612b0557612b046127e7565b5b5f612b1285828601612831565b9250506020612b2385828601612831565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680612b7157607f821691505b602082108103612b8457612b83612b2d565b5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f612bc182612845565b9150612bcc83612845565b9250828201905080821115612be457612be3612b8a565b5b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f612c1e602083612747565b9150612c2982612bea565b602082019050919050565b5f6020820190508181035f830152612c4b81612c12565b9050919050565b7f5468652064656661756c7420706169722063616e6e6f742062652072656d6f765f8201527f65642066726f6d206175746f6d617465644d61726b65744d616b65725061697260208201527f7300000000000000000000000000000000000000000000000000000000000000604082015250565b5f612cd2604183612747565b9150612cdd82612c52565b606082019050919050565b5f6020820190508181035f830152612cff81612cc6565b9050919050565b5f81519050612d148161281b565b92915050565b5f60208284031215612d2f57612d2e6127e7565b5b5f612d3c84828501612d06565b91505092915050565b5f604082019050612d585f830185612995565b612d656020830184612995565b9392505050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f612dc6602583612747565b9150612dd182612d6c565b604082019050919050565b5f6020820190508181035f830152612df381612dba565b9050919050565b7f416d6f756e742073686f756c6420626520686967686572207468656e203000005f82015250565b5f612e2e601e83612747565b9150612e3982612dfa565b602082019050919050565b5f6020820190508181035f830152612e5b81612e22565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f612ebc602683612747565b9150612ec782612e62565b604082019050919050565b5f6020820190508181035f830152612ee981612eb0565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f612f4a602483612747565b9150612f5582612ef0565b604082019050919050565b5f6020820190508181035f830152612f7781612f3e565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f612fd8602283612747565b9150612fe382612f7e565b604082019050919050565b5f6020820190508181035f83015261300581612fcc565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000005f82015250565b5f613040601d83612747565b915061304b8261300c565b602082019050919050565b5f6020820190508181035f83015261306d81613034565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f6130ce602583612747565b91506130d982613074565b604082019050919050565b5f6020820190508181035f8301526130fb816130c2565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f61315c602383612747565b915061316782613102565b604082019050919050565b5f6020820190508181035f83015261318981613150565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f6131ea602683612747565b91506131f582613190565b604082019050919050565b5f6020820190508181035f830152613217816131de565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f206164647265735f8201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b5f613278602183612747565b91506132838261321e565b604082019050919050565b5f6020820190508181035f8301526132a58161326c565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e5f8201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b5f613306602283612747565b9150613311826132ac565b604082019050919050565b5f6020820190508181035f830152613333816132fa565b9050919050565b5f61334482612845565b915061334f83612845565b925082820390508181111561336757613366612b8a565b5b92915050565b7f4175746f6d61746564206d61726b6574206d616b6572207061697220697320615f8201527f6c72656164792073657420746f20746861742076616c75650000000000000000602082015250565b5f6133c7603883612747565b91506133d28261336d565b604082019050919050565b5f6020820190508181035f8301526133f4816133bb565b9050919050565b5f61340582612845565b915061341083612845565b925082820261341e81612845565b9150828204841483151761343557613434612b8a565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61347382612845565b915061347e83612845565b92508261348e5761348d61343c565b5b828204905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f819050919050565b5f61351661351161350c846134f3565b612a7b565b612845565b9050919050565b613526816134fc565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61355e8161280a565b82525050565b5f61356f8383613555565b60208301905092915050565b5f602082019050919050565b5f6135918261352c565b61359b8185613536565b93506135a683613546565b805f5b838110156135d65781516135bd8882613564565b97506135c88361357b565b9250506001810190506135a9565b5085935050505092915050565b5f60a0820190506135f65f8301886128e9565b613603602083018761351d565b81810360408301526136158186613587565b90506136246060830185612995565b61363160808301846128e9565b969550505050505056fea264697066735822122032ced78521ee6eacf5c8883eaafda0bbcf7e2f7392c475dd022ddb19b3b842ec64736f6c634300081400330000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d0000000000000000000000000000000000000000000000000000000064c6dd60

Deployed Bytecode

0x608060405260043610610212575f3560e01c806395d89b4111610117578063c3a5dbb91161009f578063d85ba0631161006e578063d85ba063146107a5578063dd62ed3e146107cf578063e70255931461080b578063f2fde38b14610835578063f68d5d981461085d57610219565b8063c3a5dbb9146106ff578063d257b34f14610729578063d32a8f6714610751578063d578192c1461077b57610219565b8063a457c2d7116100e6578063a457c2d7146105e5578063a9059cbb14610621578063b62496f51461065d578063b6c5232414610699578063c1c356c5146106c357610219565b806395d89b4114610541578063999777aa1461056b5780639a7a23d614610595578063a32cb4c6146105bd57610219565b80633fc8cef31161019a57806370a082311161016957806370a0823114610473578063715018a6146104af578063865c98e5146104c55780638a6de7a2146104ed5780638da5cb5b1461051757610219565b80633fc8cef3146103cd57806342966c68146103f7578063470624021461041f5780636a486a8e1461044957610219565b806323b872dd116101e157806323b872dd146102d75780632b14ca5614610313578063313ce5671461033d57806336cf7c8714610367578063395093511461039157610219565b806306fdde031461021d578063095ea7b31461024757806318160ddd146102835780632260d4de146102ad57610219565b3661021957005b5f80fd5b348015610228575f80fd5b50610231610887565b60405161023e91906127c7565b60405180910390f35b348015610252575f80fd5b5061026d60048036038101906102689190612878565b610917565b60405161027a91906128d0565b60405180910390f35b34801561028e575f80fd5b50610297610939565b6040516102a491906128f8565b60405180910390f35b3480156102b8575f80fd5b506102c1610942565b6040516102ce91906128f8565b60405180910390f35b3480156102e2575f80fd5b506102fd60048036038101906102f89190612911565b610948565b60405161030a91906128d0565b60405180910390f35b34801561031e575f80fd5b50610327610976565b60405161033491906128f8565b60405180910390f35b348015610348575f80fd5b5061035161097c565b60405161035e919061297c565b60405180910390f35b348015610372575f80fd5b5061037b610984565b60405161038891906129a4565b60405180910390f35b34801561039c575f80fd5b506103b760048036038101906103b29190612878565b61098a565b6040516103c491906128d0565b60405180910390f35b3480156103d8575f80fd5b506103e1610a2f565b6040516103ee91906129a4565b60405180910390f35b348015610402575f80fd5b5061041d600480360381019061041891906129bd565b610a47565b005b34801561042a575f80fd5b50610433610a5b565b60405161044091906128f8565b60405180910390f35b348015610454575f80fd5b5061045d610a61565b60405161046a91906128f8565b60405180910390f35b34801561047e575f80fd5b50610499600480360381019061049491906129e8565b610a67565b6040516104a691906128f8565b60405180910390f35b3480156104ba575f80fd5b506104c3610aac565b005b3480156104d0575f80fd5b506104eb60048036038101906104e691906129bd565b610bff565b005b3480156104f8575f80fd5b50610501610c9f565b60405161050e91906129a4565b60405180910390f35b348015610522575f80fd5b5061052b610cb7565b60405161053891906129a4565b60405180910390f35b34801561054c575f80fd5b50610555610cdf565b60405161056291906127c7565b60405180910390f35b348015610576575f80fd5b5061057f610d6f565b60405161058c91906128f8565b60405180910390f35b3480156105a0575f80fd5b506105bb60048036038101906105b69190612a3d565b610d75565b005b3480156105c8575f80fd5b506105e360048036038101906105de9190612a3d565b610eb1565b005b3480156105f0575f80fd5b5061060b60048036038101906106069190612878565b611262565b60405161061891906128d0565b60405180910390f35b34801561062c575f80fd5b5061064760048036038101906106429190612878565b611346565b60405161065491906128d0565b60405180910390f35b348015610668575f80fd5b50610683600480360381019061067e91906129e8565b611368565b60405161069091906128d0565b60405180910390f35b3480156106a4575f80fd5b506106ad611385565b6040516106ba91906128f8565b60405180910390f35b3480156106ce575f80fd5b506106e960048036038101906106e491906129e8565b61138e565b6040516106f691906128d0565b60405180910390f35b34801561070a575f80fd5b506107136113ab565b60405161072091906128f8565b60405180910390f35b348015610734575f80fd5b5061074f600480360381019061074a91906129bd565b6113b1565b005b34801561075c575f80fd5b50610765611493565b60405161077291906129a4565b60405180910390f35b348015610786575f80fd5b5061078f6114b8565b60405161079c9190612ad6565b60405180910390f35b3480156107b0575f80fd5b506107b96114dd565b6040516107c691906128f8565b60405180910390f35b3480156107da575f80fd5b506107f560048036038101906107f09190612aef565b6114e3565b60405161080291906128f8565b60405180910390f35b348015610816575f80fd5b5061081f611565565b60405161082c91906129a4565b60405180910390f35b348015610840575f80fd5b5061085b600480360381019061085691906129e8565b61157d565b005b348015610868575f80fd5b5061087161173f565b60405161087e91906129a4565b60405180910390f35b60606003805461089690612b5a565b80601f01602080910402602001604051908101604052809291908181526020018280546108c290612b5a565b801561090d5780601f106108e45761010080835404028352916020019161090d565b820191905f5260205f20905b8154815290600101906020018083116108f057829003601f168201915b5050505050905090565b5f80610921611764565b905061092e81858561176b565b600191505092915050565b5f600254905090565b60155481565b5f80610952611764565b905061095f85828561192e565b61096a8585856119b9565b60019150509392505050565b60135481565b5f6012905090565b61dead81565b5f80610994611764565b9050610a2481858560015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054610a1f9190612bb7565b61176b565b600191505092915050565b73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281565b610a58610a52611764565b82611b24565b50565b60105481565b60145481565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610ab4611764565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3990612c34565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35f60055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b610c07611764565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8c90612c34565b60405180910390fd5b8060158190555050565b73409b46013c78c63cf376f17466aef8789561745181565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610cee90612b5a565b80601f0160208091040260200160405190810160405280929190818152602001828054610d1a90612b5a565b8015610d655780601f10610d3c57610100808354040283529160200191610d65565b820191905f5260205f20905b815481529060010190602001808311610d4857829003601f168201915b5050505050905090565b60125481565b610d7d611764565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0290612c34565b60405180910390fd5b8080610e645750600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b610ea3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9a90612ce8565b60405180910390fd5b610ead8282611cf0565b5050565b610eb9611764565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3e90612c34565b60405180910390fd5b600160085f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550801561125e57600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f56729c2d3b35702079226f38e0417b72386db8f924b488588b56135138cf179f60405160405180910390a381600a5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110c7573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110eb9190612d1a565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611171573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111959190612d1a565b6040518363ffffffff1660e01b81526004016111b2929190612d45565b6020604051808303815f875af11580156111ce573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111f29190612d1a565b600b5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061125d600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001611cf0565b5b5050565b5f8061126c611764565b90505f60015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508381101561132d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132490612ddc565b60405180910390fd5b61133a828686840361176b565b60019250505092915050565b5f80611350611764565b905061135d8185856119b9565b600191505092915050565b6009602052805f5260405f205f915054906101000a900460ff1681565b5f600754905090565b6008602052805f5260405f205f915054906101000a900460ff1681565b600f5481565b6113b9611764565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611447576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143e90612c34565b60405180910390fd5b5f8111611489576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148090612e44565b60405180910390fd5b80600e8190555050565b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60115481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b7338a94e92a19e970c144ded0b2dd47278ca11cc1f81565b611585611764565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611613576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160a90612c34565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611681576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167890612ed2565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a38060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036117d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d090612f60565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611847576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183e90612fee565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161192191906128f8565b60405180910390a3505050565b5f61193984846114e3565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146119b357818110156119a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199c90613056565b60405180910390fd5b6119b2848484840361176b565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611a27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1e906130e4565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611a95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8c90613172565b60405180910390fd5b5f8103611aac57611aa783835f611e1d565b611b1f565b5f611ab684610a67565b905081811015611afb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af290613200565b60405180910390fd5b611b06848484612092565b9150611b128484612260565b611b1d848484611e1d565b505b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611b92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b899061328e565b60405180910390fd5b611b9d825f83612448565b5f805f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015611c20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c179061331c565b60405180910390fd5b8181035f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508160025f828254611c74919061333a565b925050819055505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611cd891906128f8565b60405180910390a3611ceb835f8461244d565b505050565b80151560095f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16151503611d7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d76906133dd565b60405180910390fd5b8060095f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611e8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e82906130e4565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611ef9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef090613172565b60405180910390fd5b611f04838383612448565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015611f87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7e90613200565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546120159190612bb7565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161207991906128f8565b60405180910390a361208c84848461244d565b50505050565b5f600c60149054906101000a900460ff161580156120b257506015544210155b80156120ec575061dead73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b8015612126575061dead73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b15612256575f60095f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156121b5576127106011548461218c91906133fb565b6121969190613469565b905080600f5f8282546121a99190612bb7565b9250508190555061223b565b60095f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161561223a576127106014548461221591906133fb565b61221f9190613469565b90508060125f8282546122329190612bb7565b925050819055505b5b8083612247919061333a565b9250612254853083611e1d565b505b8190509392505050565b5f61226a30610a67565b9050600e54811015801561228b5750600c60149054906101000a900460ff16155b80156122de575060095f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612318575061dead73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b8015612352575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612443576001600c60146101000a81548160ff021916908315150217905550600f54601254600f546123859190612bb7565b826123909190613469565b61239a91906133fb565b600f81905550600f54816123ae919061333a565b6012819055505f601154601054600f546123c891906133fb565b6123d29190613469565b90505f8111156123e6576123e581612452565b5b5f6014546013546012546123fa91906133fb565b6124049190613469565b90505f81111561241857612417816124d6565b5b5f600f819055505f6012819055505f600c60146101000a81548160ff02191690831515021790555050505b505050565b505050565b505050565b61247e30600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff168361176b565b61249c7338a94e92a19e970c144ded0b2dd47278ca11cc1f8261255a565b7fc3ddb12c774f220f97d47850b8bff33f8adab8e52d7d3e25bca29dc667e4fe4e816040516124cb91906128f8565b60405180910390a150565b61250230600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff168361176b565b61252073409b46013c78c63cf376f17466aef878956174518261255a565b7fbaa311baf25511ff2bb472ee38a92731d47afba9610a1d5bd29d689280e991d88160405161254f91906128f8565b60405180910390a150565b5f600367ffffffffffffffff81111561257657612575613499565b5b6040519080825280602002602001820160405280156125a45781602001602082028036833780820191505090505b50905030815f815181106125bb576125ba6134c6565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc28160018151811061261e5761261d6134c6565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050828160028151811061266d5761266c6134c6565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c11d795835f8461dead426040518663ffffffff1660e01b815260040161270b9594939291906135e3565b5f604051808303815f87803b158015612722575f80fd5b505af1158015612734573d5f803e3d5ffd5b50505050505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015612774578082015181840152602081019050612759565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6127998261273d565b6127a38185612747565b93506127b3818560208601612757565b6127bc8161277f565b840191505092915050565b5f6020820190508181035f8301526127df818461278f565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612814826127eb565b9050919050565b6128248161280a565b811461282e575f80fd5b50565b5f8135905061283f8161281b565b92915050565b5f819050919050565b61285781612845565b8114612861575f80fd5b50565b5f813590506128728161284e565b92915050565b5f806040838503121561288e5761288d6127e7565b5b5f61289b85828601612831565b92505060206128ac85828601612864565b9150509250929050565b5f8115159050919050565b6128ca816128b6565b82525050565b5f6020820190506128e35f8301846128c1565b92915050565b6128f281612845565b82525050565b5f60208201905061290b5f8301846128e9565b92915050565b5f805f60608486031215612928576129276127e7565b5b5f61293586828701612831565b935050602061294686828701612831565b925050604061295786828701612864565b9150509250925092565b5f60ff82169050919050565b61297681612961565b82525050565b5f60208201905061298f5f83018461296d565b92915050565b61299e8161280a565b82525050565b5f6020820190506129b75f830184612995565b92915050565b5f602082840312156129d2576129d16127e7565b5b5f6129df84828501612864565b91505092915050565b5f602082840312156129fd576129fc6127e7565b5b5f612a0a84828501612831565b91505092915050565b612a1c816128b6565b8114612a26575f80fd5b50565b5f81359050612a3781612a13565b92915050565b5f8060408385031215612a5357612a526127e7565b5b5f612a6085828601612831565b9250506020612a7185828601612a29565b9150509250929050565b5f819050919050565b5f612a9e612a99612a94846127eb565b612a7b565b6127eb565b9050919050565b5f612aaf82612a84565b9050919050565b5f612ac082612aa5565b9050919050565b612ad081612ab6565b82525050565b5f602082019050612ae95f830184612ac7565b92915050565b5f8060408385031215612b0557612b046127e7565b5b5f612b1285828601612831565b9250506020612b2385828601612831565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680612b7157607f821691505b602082108103612b8457612b83612b2d565b5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f612bc182612845565b9150612bcc83612845565b9250828201905080821115612be457612be3612b8a565b5b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f612c1e602083612747565b9150612c2982612bea565b602082019050919050565b5f6020820190508181035f830152612c4b81612c12565b9050919050565b7f5468652064656661756c7420706169722063616e6e6f742062652072656d6f765f8201527f65642066726f6d206175746f6d617465644d61726b65744d616b65725061697260208201527f7300000000000000000000000000000000000000000000000000000000000000604082015250565b5f612cd2604183612747565b9150612cdd82612c52565b606082019050919050565b5f6020820190508181035f830152612cff81612cc6565b9050919050565b5f81519050612d148161281b565b92915050565b5f60208284031215612d2f57612d2e6127e7565b5b5f612d3c84828501612d06565b91505092915050565b5f604082019050612d585f830185612995565b612d656020830184612995565b9392505050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f612dc6602583612747565b9150612dd182612d6c565b604082019050919050565b5f6020820190508181035f830152612df381612dba565b9050919050565b7f416d6f756e742073686f756c6420626520686967686572207468656e203000005f82015250565b5f612e2e601e83612747565b9150612e3982612dfa565b602082019050919050565b5f6020820190508181035f830152612e5b81612e22565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f612ebc602683612747565b9150612ec782612e62565b604082019050919050565b5f6020820190508181035f830152612ee981612eb0565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f612f4a602483612747565b9150612f5582612ef0565b604082019050919050565b5f6020820190508181035f830152612f7781612f3e565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f612fd8602283612747565b9150612fe382612f7e565b604082019050919050565b5f6020820190508181035f83015261300581612fcc565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000005f82015250565b5f613040601d83612747565b915061304b8261300c565b602082019050919050565b5f6020820190508181035f83015261306d81613034565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f6130ce602583612747565b91506130d982613074565b604082019050919050565b5f6020820190508181035f8301526130fb816130c2565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f61315c602383612747565b915061316782613102565b604082019050919050565b5f6020820190508181035f83015261318981613150565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f6131ea602683612747565b91506131f582613190565b604082019050919050565b5f6020820190508181035f830152613217816131de565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f206164647265735f8201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b5f613278602183612747565b91506132838261321e565b604082019050919050565b5f6020820190508181035f8301526132a58161326c565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e5f8201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b5f613306602283612747565b9150613311826132ac565b604082019050919050565b5f6020820190508181035f830152613333816132fa565b9050919050565b5f61334482612845565b915061334f83612845565b925082820390508181111561336757613366612b8a565b5b92915050565b7f4175746f6d61746564206d61726b6574206d616b6572207061697220697320615f8201527f6c72656164792073657420746f20746861742076616c75650000000000000000602082015250565b5f6133c7603883612747565b91506133d28261336d565b604082019050919050565b5f6020820190508181035f8301526133f4816133bb565b9050919050565b5f61340582612845565b915061341083612845565b925082820261341e81612845565b9150828204841483151761343557613434612b8a565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61347382612845565b915061347e83612845565b92508261348e5761348d61343c565b5b828204905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f819050919050565b5f61351661351161350c846134f3565b612a7b565b612845565b9050919050565b613526816134fc565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61355e8161280a565b82525050565b5f61356f8383613555565b60208301905092915050565b5f602082019050919050565b5f6135918261352c565b61359b8185613536565b93506135a683613546565b805f5b838110156135d65781516135bd8882613564565b97506135c88361357b565b9250506001810190506135a9565b5085935050505092915050565b5f60a0820190506135f65f8301886128e9565b613603602083018761351d565b81810360408301526136158186613587565b90506136246060830185612995565b61363160808301846128e9565b969550505050505056fea264697066735822122032ced78521ee6eacf5c8883eaafda0bbcf7e2f7392c475dd022ddb19b3b842ec64736f6c63430008140033

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

0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d0000000000000000000000000000000000000000000000000000000064c6dd60

-----Decoded View---------------
Arg [0] : _routerAddress (address): 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
Arg [1] : _buyBackAndFeesStartTime (uint256): 1690754400

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d
Arg [1] : 0000000000000000000000000000000000000000000000000000000064c6dd60


Deployed Bytecode Sourcemap

24736:7406:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4121:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6472:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5241:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25847:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7253:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25763:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26919:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25261:73;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7957:240;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25022:73;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31148:91;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25641:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25798:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5412:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16120:148;;;;;;;;;;;;;:::i;:::-;;27019:158;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25180:74;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15477:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4340:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25720:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27681:296;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27185:488;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8700:438;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5745:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24836:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16675:89;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24787:42;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25599:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28338:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24953:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24902:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25675:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6001:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25102:71;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16423:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24986:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4121:100;4175:13;4208:5;4201:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4121:100;:::o;6472:201::-;6555:4;6572:13;6588:12;:10;:12::i;:::-;6572:28;;6611:32;6620:5;6627:7;6636:6;6611:8;:32::i;:::-;6661:4;6654:11;;;6472:201;;;;:::o;5241:108::-;5302:7;5329:12;;5322:19;;5241:108;:::o;25847:38::-;;;;:::o;7253:295::-;7384:4;7401:15;7419:12;:10;:12::i;:::-;7401:30;;7442:38;7458:4;7464:7;7473:6;7442:15;:38::i;:::-;7491:27;7501:4;7507:2;7511:6;7491:9;:27::i;:::-;7536:4;7529:11;;;7253:295;;;;;:::o;25763:28::-;;;;:::o;26919:92::-;26969:5;25551:2;26987:16;;26919:92;:::o;25261:73::-;25292:42;25261:73;:::o;7957:240::-;8045:4;8062:13;8078:12;:10;:12::i;:::-;8062:28;;8101:66;8110:5;8117:7;8156:10;8126:11;:18;8138:5;8126:18;;;;;;;;;;;;;;;:27;8145:7;8126:27;;;;;;;;;;;;;;;;:40;;;;:::i;:::-;8101:8;:66::i;:::-;8185:4;8178:11;;;7957:240;;;;:::o;25022:73::-;25053:42;25022:73;:::o;31148:91::-;31204:27;31210:12;:10;:12::i;:::-;31224:6;31204:5;:27::i;:::-;31148:91;:::o;25641:27::-;;;;:::o;25798:38::-;;;;:::o;5412:127::-;5486:7;5513:9;:18;5523:7;5513:18;;;;;;;;;;;;;;;;5506:25;;5412:127;;;:::o;16120:148::-;15699:12;:10;:12::i;:::-;15689:22;;:6;;;;;;;;;;;:22;;;15681:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;16227:1:::1;16190:40;;16211:6;;;;;;;;;;;16190:40;;;;;;;;;;;;16258:1;16241:6;;:19;;;;;;;;;;;;;;;;;;16120:148::o:0;27019:158::-;15699:12;:10;:12::i;:::-;15689:22;;:6;;;;;;;;;;;:22;;;15681:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27145:24:::1;27119:23;:50;;;;27019:158:::0;:::o;25180:74::-;25212:42;25180:74;:::o;15477:79::-;15515:7;15542:6;;;;;;;;;;;15535:13;;15477:79;:::o;4340:104::-;4396:13;4429:7;4422:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4340:104;:::o;25720:36::-;;;;:::o;27681:296::-;15699:12;:10;:12::i;:::-;15689:22;;:6;;;;;;;;;;;:22;;;15681:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27796:5:::1;:28;;;;27813:11;;;;;;;;;;;27805:19;;:4;:19;;;;27796:28;27774:143;;;;;;;;;;;;:::i;:::-;;;;;;;;;27928:41;27957:4;27963:5;27928:28;:41::i;:::-;27681:296:::0;;:::o;27185:488::-;15699:12;:10;:12::i;:::-;15689:22;;:6;;;;;;;;;;;:22;;;15681:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27294:4:::1;27272:10;:19;27283:7;27272:19;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;27315:11;27311:355;;;27388:16;;;;;;;;;;;27348:58;;27371:7;27348:58;;;;;;;;;;;;27459:7;27421:16;;:46;;;;;;;;;;;;;;;;;;27514:16;;;;;;;;;;;:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27496:56;;;27561:4;27568:16;;;;;;;;;;;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27496:96;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27482:11;;:110;;;;;;;;;;;;;;;;;;27607:47;27636:11;;;;;;;;;;;27649:4;27607:28;:47::i;:::-;27311:355;27185:488:::0;;:::o;8700:438::-;8793:4;8810:13;8826:12;:10;:12::i;:::-;8810:28;;8849:24;8876:11;:18;8888:5;8876:18;;;;;;;;;;;;;;;:27;8895:7;8876:27;;;;;;;;;;;;;;;;8849:54;;8942:15;8922:16;:35;;8914:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;9035:60;9044:5;9051:7;9079:15;9060:16;:34;9035:8;:60::i;:::-;9126:4;9119:11;;;;8700:438;;;;:::o;5745:193::-;5824:4;5841:13;5857:12;:10;:12::i;:::-;5841:28;;5880;5890:5;5897:2;5901:6;5880:9;:28::i;:::-;5926:4;5919:11;;;5745:193;;;;:::o;24836:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;16675:89::-;16720:7;16747:9;;16740:16;;16675:89;:::o;24787:42::-;;;;;;;;;;;;;;;;;;;;;;:::o;25599:35::-;;;;:::o;28338:218::-;15699:12;:10;:12::i;:::-;15689:22;;:6;;;;;;;;;;;:22;;;15681:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;28461:1:::1;28439:19;:23;28431:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;28529:19;28508:18;:40;;;;28338:218:::0;:::o;24953:26::-;;;;;;;;;;;;;:::o;24902:42::-;;;;;;;;;;;;;:::o;25675:36::-;;;;:::o;6001:151::-;6090:7;6117:11;:18;6129:5;6117:18;;;;;;;;;;;;;;;:27;6136:7;6117:27;;;;;;;;;;;;;;;;6110:34;;6001:151;;;;:::o;25102:71::-;25131:42;25102:71;:::o;16423:244::-;15699:12;:10;:12::i;:::-;15689:22;;:6;;;;;;;;;;;:22;;;15681:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;16532:1:::1;16512:22;;:8;:22;;::::0;16504:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;16622:8;16593:38;;16614:6;;;;;;;;;;;16593:38;;;;;;;;;;;;16651:8;16642:6;;:17;;;;;;;;;;;;;;;;;;16423:244:::0;:::o;24986:29::-;;;;;;;;;;;;;:::o;60:98::-;113:7;140:10;133:17;;60:98;:::o;12336:380::-;12489:1;12472:19;;:5;:19;;;12464:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;12570:1;12551:21;;:7;:21;;;12543:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;12654:6;12624:11;:18;12636:5;12624:18;;;;;;;;;;;;;;;:27;12643:7;12624:27;;;;;;;;;;;;;;;:36;;;;12692:7;12676:32;;12685:5;12676:32;;;12701:6;12676:32;;;;;;:::i;:::-;;;;;;;;12336:380;;;:::o;13003:453::-;13138:24;13165:25;13175:5;13182:7;13165:9;:25::i;:::-;13138:52;;13225:17;13205:16;:37;13201:248;;13287:6;13267:16;:26;;13259:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;13371:51;13380:5;13387:7;13415:6;13396:16;:25;13371:8;:51::i;:::-;13201:248;13127:329;13003:453;;;:::o;28564:771::-;28712:1;28696:18;;:4;:18;;;28688:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28789:1;28775:16;;:2;:16;;;28767:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;28858:1;28848:6;:11;28844:93;;28876:28;28892:4;28898:2;28902:1;28876:15;:28::i;:::-;28919:7;;28844:93;28949:21;28973:15;28983:4;28973:9;:15::i;:::-;28949:39;;29024:6;29007:13;:23;;28999:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;29116:29;29128:4;29134:2;29138:6;29116:11;:29::i;:::-;29107:38;;29246:35;29272:4;29278:2;29246:25;:35::i;:::-;29294:33;29310:4;29316:2;29320:6;29294:15;:33::i;:::-;28677:658;28564:771;;;;:::o;11307:591::-;11410:1;11391:21;;:7;:21;;;11383:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;11463:49;11484:7;11501:1;11505:6;11463:20;:49::i;:::-;11525:22;11550:9;:18;11560:7;11550:18;;;;;;;;;;;;;;;;11525:43;;11605:6;11587:14;:24;;11579:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;11724:6;11707:14;:23;11686:9;:18;11696:7;11686:18;;;;;;;;;;;;;;;:44;;;;11768:6;11752:12;;:22;;;;;;;:::i;:::-;;;;;;;;11818:1;11792:37;;11801:7;11792:37;;;11822:6;11792:37;;;;;;:::i;:::-;;;;;;;;11842:48;11862:7;11879:1;11883:6;11842:19;:48::i;:::-;11372:526;11307:591;;:::o;27985:345::-;28125:5;28090:40;;:25;:31;28116:4;28090:31;;;;;;;;;;;;;;;;;;;;;;;;;:40;;;28068:146;;;;;;;;;;;;:::i;:::-;;;;;;;;;28261:5;28227:25;:31;28253:4;28227:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;28316:5;28282:40;;28310:4;28282:40;;;;;;;;;;;;27985:345;;:::o;9617:671::-;9764:1;9748:18;;:4;:18;;;9740:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;9841:1;9827:16;;:2;:16;;;9819:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;9896:38;9917:4;9923:2;9927:6;9896:20;:38::i;:::-;9947:19;9969:9;:15;9979:4;9969:15;;;;;;;;;;;;;;;;9947:37;;10018:6;10003:11;:21;;9995:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;10135:6;10121:11;:20;10103:9;:15;10113:4;10103:15;;;;;;;;;;;;;;;:38;;;;10180:6;10163:9;:13;10173:2;10163:13;;;;;;;;;;;;;;;;:23;;;;;;;:::i;:::-;;;;;;;;10219:2;10204:26;;10213:4;10204:26;;;10223:6;10204:26;;;;;;:::i;:::-;;;;;;;;10243:37;10263:4;10269:2;10273:6;10243:19;:37::i;:::-;9729:559;9617:671;;;:::o;29343:736::-;29457:7;29482:14;;;;;;;;;;;29481:15;:61;;;;;29519:23;;29500:15;:42;;29481:61;:77;;;;;25292:42;29546:12;;:4;:12;;;;29481:77;:104;;;;;25292:42;29575:10;;:2;:10;;;;29481:104;29477:571;;;29602:12;29633:25;:31;29659:4;29633:31;;;;;;;;;;;;;;;;;;;;;;;;;29629:312;;;29718:5;29702:12;;29693:6;:21;;;;:::i;:::-;29692:31;;;;:::i;:::-;29685:38;;29762:4;29742:16;;:24;;;;;;;:::i;:::-;;;;;;;;29629:312;;;29792:25;:29;29818:2;29792:29;;;;;;;;;;;;;;;;;;;;;;;;;29788:153;;;29876:5;29859:13;;29850:6;:22;;;;:::i;:::-;29849:32;;;;:::i;:::-;29842:39;;29921:4;29900:17;;:25;;;;;;;:::i;:::-;;;;;;;;29788:153;29629:312;29975:4;29966:6;:13;;;;:::i;:::-;29957:22;;29994:42;30010:4;30024;30031;29994:15;:42::i;:::-;29587:461;29477:571;30065:6;30058:13;;29343:736;;;;;:::o;30087:1053::-;30167:28;30198:24;30216:4;30198:9;:24::i;:::-;30167:55;;30285:18;;30261:20;:42;;:74;;;;;30321:14;;;;;;;;;;;30320:15;30261:74;:123;;;;;30353:25;:31;30379:4;30353:31;;;;;;;;;;;;;;;;;;;;;;;;;30352:32;30261:123;:180;;;;;25292:42;30429:12;;:4;:12;;;;30261:180;:207;;;;;25292:42;30458:10;;:2;:10;;;;30261:207;30243:890;;;30512:4;30495:14;;:21;;;;;;;;;;;;;;;;;;30618:16;;30596:17;;30577:16;;:36;;;;:::i;:::-;30553:20;:61;;;;:::i;:::-;30552:82;;;;:::i;:::-;30533:16;:101;;;;30692:16;;30669:20;:39;;;;:::i;:::-;30649:17;:59;;;;30725:16;30774:12;;30764:6;;30745:16;;:25;;;;:::i;:::-;30744:42;;;;:::i;:::-;30725:61;;30816:1;30805:8;:12;30801:37;;;30819:19;30829:8;30819:9;:19::i;:::-;30801:37;30869:19;30923:13;;30912:7;;30892:17;;:27;;;;:::i;:::-;30891:45;;;;:::i;:::-;30869:67;;30969:1;30955:11;:15;30951:46;;;30972:25;30985:11;30972:12;:25::i;:::-;30951:46;31045:1;31026:16;:20;;;;31081:1;31061:17;:21;;;;31116:5;31099:14;;:22;;;;;;;;;;;;;;;;;;30480:653;;30243:890;30156:984;30087:1053;;:::o;14056:125::-;;;;:::o;14785:124::-;;;;:::o;31249:197::-;31302:58;31319:4;31334:16;;;;;;;;;;;31353:6;31302:8;:58::i;:::-;31371:31;25131:42;31395:6;31371:19;:31::i;:::-;31418:20;31431:6;31418:20;;;;;;:::i;:::-;;;;;;;;31249:197;:::o;31454:206::-;31510:58;31527:4;31542:16;;;;;;;;;;;31561:6;31510:8;:58::i;:::-;31579:34;25212:42;31606:6;31579:19;:34::i;:::-;31629:23;31645:6;31629:23;;;;;;:::i;:::-;;;;;;;;31454:206;:::o;31668:471::-;31748:21;31786:1;31772:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31748:40;;31817:4;31799;31804:1;31799:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;25053:42;31833:4;31838:1;31833:7;;;;;;;;:::i;:::-;;;;;;;:14;;;;;;;;;;;31868:6;31858:4;31863:1;31858:7;;;;;;;;:::i;:::-;;;;;;;:16;;;;;;;;;;;31913;;;;;;;;;;;:70;;;31998:6;32019:1;32066:4;25292:42;32104:15;31913:218;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31737:402;31668:471;;:::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:118::-;3533:24;3551:5;3533:24;:::i;:::-;3528:3;3521:37;3446:118;;:::o;3570:222::-;3663:4;3701:2;3690:9;3686:18;3678:26;;3714:71;3782:1;3771:9;3767:17;3758:6;3714:71;:::i;:::-;3570:222;;;;:::o;3798:619::-;3875:6;3883;3891;3940:2;3928:9;3919:7;3915:23;3911:32;3908:119;;;3946:79;;:::i;:::-;3908:119;4066:1;4091:53;4136:7;4127:6;4116:9;4112:22;4091:53;:::i;:::-;4081:63;;4037:117;4193:2;4219:53;4264:7;4255:6;4244:9;4240:22;4219:53;:::i;:::-;4209:63;;4164:118;4321:2;4347:53;4392:7;4383:6;4372:9;4368:22;4347:53;:::i;:::-;4337:63;;4292:118;3798:619;;;;;:::o;4423:86::-;4458:7;4498:4;4491:5;4487:16;4476:27;;4423:86;;;:::o;4515:112::-;4598:22;4614:5;4598:22;:::i;:::-;4593:3;4586:35;4515:112;;:::o;4633:214::-;4722:4;4760:2;4749:9;4745:18;4737:26;;4773:67;4837:1;4826:9;4822:17;4813:6;4773:67;:::i;:::-;4633:214;;;;:::o;4853:118::-;4940:24;4958:5;4940:24;:::i;:::-;4935:3;4928:37;4853:118;;:::o;4977:222::-;5070:4;5108:2;5097:9;5093:18;5085:26;;5121:71;5189:1;5178:9;5174:17;5165:6;5121:71;:::i;:::-;4977:222;;;;:::o;5205:329::-;5264:6;5313:2;5301:9;5292:7;5288:23;5284:32;5281:119;;;5319:79;;:::i;:::-;5281:119;5439:1;5464:53;5509:7;5500:6;5489:9;5485:22;5464:53;:::i;:::-;5454:63;;5410:117;5205:329;;;;:::o;5540:::-;5599:6;5648:2;5636:9;5627:7;5623:23;5619:32;5616:119;;;5654:79;;:::i;:::-;5616:119;5774:1;5799:53;5844:7;5835:6;5824:9;5820:22;5799:53;:::i;:::-;5789:63;;5745:117;5540:329;;;;:::o;5875:116::-;5945:21;5960:5;5945:21;:::i;:::-;5938:5;5935:32;5925:60;;5981:1;5978;5971:12;5925:60;5875:116;:::o;5997:133::-;6040:5;6078:6;6065:20;6056:29;;6094:30;6118:5;6094:30;:::i;:::-;5997:133;;;;:::o;6136:468::-;6201:6;6209;6258:2;6246:9;6237:7;6233:23;6229:32;6226:119;;;6264:79;;:::i;:::-;6226:119;6384:1;6409:53;6454:7;6445:6;6434:9;6430:22;6409:53;:::i;:::-;6399:63;;6355:117;6511:2;6537:50;6579:7;6570:6;6559:9;6555:22;6537:50;:::i;:::-;6527:60;;6482:115;6136:468;;;;;:::o;6610:60::-;6638:3;6659:5;6652:12;;6610:60;;;:::o;6676:142::-;6726:9;6759:53;6777:34;6786:24;6804:5;6786:24;:::i;:::-;6777:34;:::i;:::-;6759:53;:::i;:::-;6746:66;;6676:142;;;:::o;6824:126::-;6874:9;6907:37;6938:5;6907:37;:::i;:::-;6894:50;;6824:126;;;:::o;6956:153::-;7033:9;7066:37;7097:5;7066:37;:::i;:::-;7053:50;;6956:153;;;:::o;7115:185::-;7229:64;7287:5;7229:64;:::i;:::-;7224:3;7217:77;7115:185;;:::o;7306:276::-;7426:4;7464:2;7453:9;7449:18;7441:26;;7477:98;7572:1;7561:9;7557:17;7548:6;7477:98;:::i;:::-;7306:276;;;;:::o;7588:474::-;7656:6;7664;7713:2;7701:9;7692:7;7688:23;7684:32;7681:119;;;7719:79;;:::i;:::-;7681:119;7839:1;7864:53;7909:7;7900:6;7889:9;7885:22;7864:53;:::i;:::-;7854:63;;7810:117;7966:2;7992:53;8037:7;8028:6;8017:9;8013:22;7992:53;:::i;:::-;7982:63;;7937:118;7588:474;;;;;:::o;8068:180::-;8116:77;8113:1;8106:88;8213:4;8210:1;8203:15;8237:4;8234:1;8227:15;8254:320;8298:6;8335:1;8329:4;8325:12;8315:22;;8382:1;8376:4;8372:12;8403:18;8393:81;;8459:4;8451:6;8447:17;8437:27;;8393:81;8521:2;8513:6;8510:14;8490:18;8487:38;8484:84;;8540:18;;:::i;:::-;8484:84;8305:269;8254:320;;;:::o;8580:180::-;8628:77;8625:1;8618:88;8725:4;8722:1;8715:15;8749:4;8746:1;8739:15;8766:191;8806:3;8825:20;8843:1;8825:20;:::i;:::-;8820:25;;8859:20;8877:1;8859:20;:::i;:::-;8854:25;;8902:1;8899;8895:9;8888:16;;8923:3;8920:1;8917:10;8914:36;;;8930:18;;:::i;:::-;8914:36;8766:191;;;;:::o;8963:182::-;9103:34;9099:1;9091:6;9087:14;9080:58;8963:182;:::o;9151:366::-;9293:3;9314:67;9378:2;9373:3;9314:67;:::i;:::-;9307:74;;9390:93;9479:3;9390:93;:::i;:::-;9508:2;9503:3;9499:12;9492:19;;9151:366;;;:::o;9523:419::-;9689:4;9727:2;9716:9;9712:18;9704:26;;9776:9;9770:4;9766:20;9762:1;9751:9;9747:17;9740:47;9804:131;9930:4;9804:131;:::i;:::-;9796:139;;9523:419;;;:::o;9948:289::-;10088:34;10084:1;10076:6;10072:14;10065:58;10157:34;10152:2;10144:6;10140:15;10133:59;10226:3;10221:2;10213:6;10209:15;10202:28;9948:289;:::o;10243:366::-;10385:3;10406:67;10470:2;10465:3;10406:67;:::i;:::-;10399:74;;10482:93;10571:3;10482:93;:::i;:::-;10600:2;10595:3;10591:12;10584:19;;10243:366;;;:::o;10615:419::-;10781:4;10819:2;10808:9;10804:18;10796:26;;10868:9;10862:4;10858:20;10854:1;10843:9;10839:17;10832:47;10896:131;11022:4;10896:131;:::i;:::-;10888:139;;10615:419;;;:::o;11040:143::-;11097:5;11128:6;11122:13;11113:22;;11144:33;11171:5;11144:33;:::i;:::-;11040:143;;;;:::o;11189:351::-;11259:6;11308:2;11296:9;11287:7;11283:23;11279:32;11276:119;;;11314:79;;:::i;:::-;11276:119;11434:1;11459:64;11515:7;11506:6;11495:9;11491:22;11459:64;:::i;:::-;11449:74;;11405:128;11189:351;;;;:::o;11546:332::-;11667:4;11705:2;11694:9;11690:18;11682:26;;11718:71;11786:1;11775:9;11771:17;11762:6;11718:71;:::i;:::-;11799:72;11867:2;11856:9;11852:18;11843:6;11799:72;:::i;:::-;11546:332;;;;;:::o;11884:224::-;12024:34;12020:1;12012:6;12008:14;12001:58;12093:7;12088:2;12080:6;12076:15;12069:32;11884:224;:::o;12114:366::-;12256:3;12277:67;12341:2;12336:3;12277:67;:::i;:::-;12270:74;;12353:93;12442:3;12353:93;:::i;:::-;12471:2;12466:3;12462:12;12455:19;;12114:366;;;:::o;12486:419::-;12652:4;12690:2;12679:9;12675:18;12667:26;;12739:9;12733:4;12729:20;12725:1;12714:9;12710:17;12703:47;12767:131;12893:4;12767:131;:::i;:::-;12759:139;;12486:419;;;:::o;12911:180::-;13051:32;13047:1;13039:6;13035:14;13028:56;12911:180;:::o;13097:366::-;13239:3;13260:67;13324:2;13319:3;13260:67;:::i;:::-;13253:74;;13336:93;13425:3;13336:93;:::i;:::-;13454:2;13449:3;13445:12;13438:19;;13097:366;;;:::o;13469:419::-;13635:4;13673:2;13662:9;13658:18;13650:26;;13722:9;13716:4;13712:20;13708:1;13697:9;13693:17;13686:47;13750:131;13876:4;13750:131;:::i;:::-;13742:139;;13469:419;;;:::o;13894:225::-;14034:34;14030:1;14022:6;14018:14;14011:58;14103:8;14098:2;14090:6;14086:15;14079:33;13894:225;:::o;14125:366::-;14267:3;14288:67;14352:2;14347:3;14288:67;:::i;:::-;14281:74;;14364:93;14453:3;14364:93;:::i;:::-;14482:2;14477:3;14473:12;14466:19;;14125:366;;;:::o;14497:419::-;14663:4;14701:2;14690:9;14686:18;14678:26;;14750:9;14744:4;14740:20;14736:1;14725:9;14721:17;14714:47;14778:131;14904:4;14778:131;:::i;:::-;14770:139;;14497:419;;;:::o;14922:223::-;15062:34;15058:1;15050:6;15046:14;15039:58;15131:6;15126:2;15118:6;15114:15;15107:31;14922:223;:::o;15151:366::-;15293:3;15314:67;15378:2;15373:3;15314:67;:::i;:::-;15307:74;;15390:93;15479:3;15390:93;:::i;:::-;15508:2;15503:3;15499:12;15492:19;;15151:366;;;:::o;15523:419::-;15689:4;15727:2;15716:9;15712:18;15704:26;;15776:9;15770:4;15766:20;15762:1;15751:9;15747:17;15740:47;15804:131;15930:4;15804:131;:::i;:::-;15796:139;;15523:419;;;:::o;15948:221::-;16088:34;16084:1;16076:6;16072:14;16065:58;16157:4;16152:2;16144:6;16140:15;16133:29;15948:221;:::o;16175:366::-;16317:3;16338:67;16402:2;16397:3;16338:67;:::i;:::-;16331:74;;16414:93;16503:3;16414:93;:::i;:::-;16532:2;16527:3;16523:12;16516:19;;16175:366;;;:::o;16547:419::-;16713:4;16751:2;16740:9;16736:18;16728:26;;16800:9;16794:4;16790:20;16786:1;16775:9;16771:17;16764:47;16828:131;16954:4;16828:131;:::i;:::-;16820:139;;16547:419;;;:::o;16972:179::-;17112:31;17108:1;17100:6;17096:14;17089:55;16972:179;:::o;17157:366::-;17299:3;17320:67;17384:2;17379:3;17320:67;:::i;:::-;17313:74;;17396:93;17485:3;17396:93;:::i;:::-;17514:2;17509:3;17505:12;17498:19;;17157:366;;;:::o;17529:419::-;17695:4;17733:2;17722:9;17718:18;17710:26;;17782:9;17776:4;17772:20;17768:1;17757:9;17753:17;17746:47;17810:131;17936:4;17810:131;:::i;:::-;17802:139;;17529:419;;;:::o;17954:224::-;18094:34;18090:1;18082:6;18078:14;18071:58;18163:7;18158:2;18150:6;18146:15;18139:32;17954:224;:::o;18184:366::-;18326:3;18347:67;18411:2;18406:3;18347:67;:::i;:::-;18340:74;;18423:93;18512:3;18423:93;:::i;:::-;18541:2;18536:3;18532:12;18525:19;;18184:366;;;:::o;18556:419::-;18722:4;18760:2;18749:9;18745:18;18737:26;;18809:9;18803:4;18799:20;18795:1;18784:9;18780:17;18773:47;18837:131;18963:4;18837:131;:::i;:::-;18829:139;;18556:419;;;:::o;18981:222::-;19121:34;19117:1;19109:6;19105:14;19098:58;19190:5;19185:2;19177:6;19173:15;19166:30;18981:222;:::o;19209:366::-;19351:3;19372:67;19436:2;19431:3;19372:67;:::i;:::-;19365:74;;19448:93;19537:3;19448:93;:::i;:::-;19566:2;19561:3;19557:12;19550:19;;19209:366;;;:::o;19581:419::-;19747:4;19785:2;19774:9;19770:18;19762:26;;19834:9;19828:4;19824:20;19820:1;19809:9;19805:17;19798:47;19862:131;19988:4;19862:131;:::i;:::-;19854:139;;19581:419;;;:::o;20006:225::-;20146:34;20142:1;20134:6;20130:14;20123:58;20215:8;20210:2;20202:6;20198:15;20191:33;20006:225;:::o;20237:366::-;20379:3;20400:67;20464:2;20459:3;20400:67;:::i;:::-;20393:74;;20476:93;20565:3;20476:93;:::i;:::-;20594:2;20589:3;20585:12;20578:19;;20237:366;;;:::o;20609:419::-;20775:4;20813:2;20802:9;20798:18;20790:26;;20862:9;20856:4;20852:20;20848:1;20837:9;20833:17;20826:47;20890:131;21016:4;20890:131;:::i;:::-;20882:139;;20609:419;;;:::o;21034:220::-;21174:34;21170:1;21162:6;21158:14;21151:58;21243:3;21238:2;21230:6;21226:15;21219:28;21034:220;:::o;21260:366::-;21402:3;21423:67;21487:2;21482:3;21423:67;:::i;:::-;21416:74;;21499:93;21588:3;21499:93;:::i;:::-;21617:2;21612:3;21608:12;21601:19;;21260:366;;;:::o;21632:419::-;21798:4;21836:2;21825:9;21821:18;21813:26;;21885:9;21879:4;21875:20;21871:1;21860:9;21856:17;21849:47;21913:131;22039:4;21913:131;:::i;:::-;21905:139;;21632:419;;;:::o;22057:221::-;22197:34;22193:1;22185:6;22181:14;22174:58;22266:4;22261:2;22253:6;22249:15;22242:29;22057:221;:::o;22284:366::-;22426:3;22447:67;22511:2;22506:3;22447:67;:::i;:::-;22440:74;;22523:93;22612:3;22523:93;:::i;:::-;22641:2;22636:3;22632:12;22625:19;;22284:366;;;:::o;22656:419::-;22822:4;22860:2;22849:9;22845:18;22837:26;;22909:9;22903:4;22899:20;22895:1;22884:9;22880:17;22873:47;22937:131;23063:4;22937:131;:::i;:::-;22929:139;;22656:419;;;:::o;23081:194::-;23121:4;23141:20;23159:1;23141:20;:::i;:::-;23136:25;;23175:20;23193:1;23175:20;:::i;:::-;23170:25;;23219:1;23216;23212:9;23204:17;;23243:1;23237:4;23234:11;23231:37;;;23248:18;;:::i;:::-;23231:37;23081:194;;;;:::o;23281:243::-;23421:34;23417:1;23409:6;23405:14;23398:58;23490:26;23485:2;23477:6;23473:15;23466:51;23281:243;:::o;23530:366::-;23672:3;23693:67;23757:2;23752:3;23693:67;:::i;:::-;23686:74;;23769:93;23858:3;23769:93;:::i;:::-;23887:2;23882:3;23878:12;23871:19;;23530:366;;;:::o;23902:419::-;24068:4;24106:2;24095:9;24091:18;24083:26;;24155:9;24149:4;24145:20;24141:1;24130:9;24126:17;24119:47;24183:131;24309:4;24183:131;:::i;:::-;24175:139;;23902:419;;;:::o;24327:410::-;24367:7;24390:20;24408:1;24390:20;:::i;:::-;24385:25;;24424:20;24442:1;24424:20;:::i;:::-;24419:25;;24479:1;24476;24472:9;24501:30;24519:11;24501:30;:::i;:::-;24490:41;;24680:1;24671:7;24667:15;24664:1;24661:22;24641:1;24634:9;24614:83;24591:139;;24710:18;;:::i;:::-;24591:139;24375:362;24327:410;;;;:::o;24743:180::-;24791:77;24788:1;24781:88;24888:4;24885:1;24878:15;24912:4;24909:1;24902:15;24929:185;24969:1;24986:20;25004:1;24986:20;:::i;:::-;24981:25;;25020:20;25038:1;25020:20;:::i;:::-;25015:25;;25059:1;25049:35;;25064:18;;:::i;:::-;25049:35;25106:1;25103;25099:9;25094:14;;24929:185;;;;:::o;25120:180::-;25168:77;25165:1;25158:88;25265:4;25262:1;25255:15;25289:4;25286:1;25279:15;25306:180;25354:77;25351:1;25344:88;25451:4;25448:1;25441:15;25475:4;25472:1;25465:15;25492:85;25537:7;25566:5;25555:16;;25492:85;;;:::o;25583:158::-;25641:9;25674:61;25692:42;25701:32;25727:5;25701:32;:::i;:::-;25692:42;:::i;:::-;25674:61;:::i;:::-;25661:74;;25583:158;;;:::o;25747:147::-;25842:45;25881:5;25842:45;:::i;:::-;25837:3;25830:58;25747:147;;:::o;25900:114::-;25967:6;26001:5;25995:12;25985:22;;25900:114;;;:::o;26020:184::-;26119:11;26153:6;26148:3;26141:19;26193:4;26188:3;26184:14;26169:29;;26020:184;;;;:::o;26210:132::-;26277:4;26300:3;26292:11;;26330:4;26325:3;26321:14;26313:22;;26210:132;;;:::o;26348:108::-;26425:24;26443:5;26425:24;:::i;:::-;26420:3;26413:37;26348:108;;:::o;26462:179::-;26531:10;26552:46;26594:3;26586:6;26552:46;:::i;:::-;26630:4;26625:3;26621:14;26607:28;;26462:179;;;;:::o;26647:113::-;26717:4;26749;26744:3;26740:14;26732:22;;26647:113;;;:::o;26796:732::-;26915:3;26944:54;26992:5;26944:54;:::i;:::-;27014:86;27093:6;27088:3;27014:86;:::i;:::-;27007:93;;27124:56;27174:5;27124:56;:::i;:::-;27203:7;27234:1;27219:284;27244:6;27241:1;27238:13;27219:284;;;27320:6;27314:13;27347:63;27406:3;27391:13;27347:63;:::i;:::-;27340:70;;27433:60;27486:6;27433:60;:::i;:::-;27423:70;;27279:224;27266:1;27263;27259:9;27254:14;;27219:284;;;27223:14;27519:3;27512:10;;26920:608;;;26796:732;;;;:::o;27534:831::-;27797:4;27835:3;27824:9;27820:19;27812:27;;27849:71;27917:1;27906:9;27902:17;27893:6;27849:71;:::i;:::-;27930:80;28006:2;27995:9;27991:18;27982:6;27930:80;:::i;:::-;28057:9;28051:4;28047:20;28042:2;28031:9;28027:18;28020:48;28085:108;28188:4;28179:6;28085:108;:::i;:::-;28077:116;;28203:72;28271:2;28260:9;28256:18;28247:6;28203:72;:::i;:::-;28285:73;28353:3;28342:9;28338:19;28329:6;28285:73;:::i;:::-;27534:831;;;;;;;;:::o

Swarm Source

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