ETH Price: $3,129.54 (-8.94%)
Gas: 9 Gwei

Token

Rune DAO (RuneDAO)
 

Overview

Max Total Supply

1,000,000,000,000 RuneDAO

Holders

29

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
0x0789.eth
Balance
9,700,000,000 RuneDAO

Value
$0.00
0x8d160063e641252f4b424a9af89e88b24e04e444
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:
RuneDAO

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-12-21
*/

/**
 ▄▄▄▄▄▄▄▄▄▄▄  ▄         ▄  ▄▄        ▄  ▄▄▄▄▄▄▄▄▄▄▄       ▄▄▄▄▄▄▄▄▄▄   ▄▄▄▄▄▄▄▄▄▄▄  ▄▄▄▄▄▄▄▄▄▄▄      
▐░░░░░░░░░░░▌▐░▌       ▐░▌▐░░▌      ▐░▌▐░░░░░░░░░░░▌     ▐░░░░░░░░░░▌ ▐░░░░░░░░░░░▌▐░░░░░░░░░░░▌     
▐░█▀▀▀▀▀▀▀█░▌▐░▌       ▐░▌▐░▌░▌     ▐░▌▐░█▀▀▀▀▀▀▀▀▀      ▐░█▀▀▀▀▀▀▀█░▌▐░█▀▀▀▀▀▀▀█░▌▐░█▀▀▀▀▀▀▀█░▌     
▐░▌       ▐░▌▐░▌       ▐░▌▐░▌▐░▌    ▐░▌▐░▌               ▐░▌       ▐░▌▐░▌       ▐░▌▐░▌       ▐░▌     
▐░█▄▄▄▄▄▄▄█░▌▐░▌       ▐░▌▐░▌ ▐░▌   ▐░▌▐░█▄▄▄▄▄▄▄▄▄      ▐░▌       ▐░▌▐░█▄▄▄▄▄▄▄█░▌▐░▌       ▐░▌     
▐░░░░░░░░░░░▌▐░▌       ▐░▌▐░▌  ▐░▌  ▐░▌▐░░░░░░░░░░░▌     ▐░▌       ▐░▌▐░░░░░░░░░░░▌▐░▌       ▐░▌     
▐░█▀▀▀▀█░█▀▀ ▐░▌       ▐░▌▐░▌   ▐░▌ ▐░▌▐░█▀▀▀▀▀▀▀▀▀      ▐░▌       ▐░▌▐░█▀▀▀▀▀▀▀█░▌▐░▌       ▐░▌     
▐░▌     ▐░▌  ▐░▌       ▐░▌▐░▌    ▐░▌▐░▌▐░▌               ▐░▌       ▐░▌▐░▌       ▐░▌▐░▌       ▐░▌     
▐░▌      ▐░▌ ▐░█▄▄▄▄▄▄▄█░▌▐░▌     ▐░▐░▌▐░█▄▄▄▄▄▄▄▄▄      ▐░█▄▄▄▄▄▄▄█░▌▐░▌       ▐░▌▐░█▄▄▄▄▄▄▄█░▌     
▐░▌       ▐░▌▐░░░░░░░░░░░▌▐░▌      ▐░░▌▐░░░░░░░░░░░▌     ▐░░░░░░░░░░▌ ▐░▌       ▐░▌▐░░░░░░░░░░░▌     
 ▀         ▀  ▀▀▀▀▀▀▀▀▀▀▀  ▀        ▀▀  ▀▀▀▀▀▀▀▀▀▀▀       ▀▀▀▀▀▀▀▀▀▀   ▀         ▀  ▀▀▀▀▀▀▀▀▀▀▀      
  https://t.me/RuneDao       https://runedao.online/     https://medium.com/@runedao          */

// SPDX-License-Identifier: MIT                                                                               
                                                    
pragma solidity 0.8.9;

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

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

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 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 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 `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, 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.
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` 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 sender,
        address recipient,
        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 {
    using SafeMath for uint256;

    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`).
     */
    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:
     *
     * - `recipient` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, 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}.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        _approve(_msgSender(), 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}.
     *
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        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.
     *
     */
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(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) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }

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

        _beforeTokenTransfer(sender, recipient, amount);

        _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, 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 = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
        emit Transfer(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);

        _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance");
        _totalSupply = _totalSupply.sub(amount);
        emit Transfer(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 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 to 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 {}
}

library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }

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

        return c;
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts with custom message when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

contract Ownable is Context {
    address private _owner;
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    
    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

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

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



library SafeMathInt {
    int256 private constant MIN_INT256 = int256(1) << 255;
    int256 private constant MAX_INT256 = ~(int256(1) << 255);

    /**
     * @dev Multiplies two int256 variables and fails on overflow.
     */
    function mul(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a * b;

        // Detect overflow when multiplying MIN_INT256 with -1
        require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256));
        require((b == 0) || (c / b == a));
        return c;
    }

    /**
     * @dev Division of two int256 variables and fails on overflow.
     */
    function div(int256 a, int256 b) internal pure returns (int256) {
        // Prevent overflow when dividing MIN_INT256 by -1
        require(b != -1 || a != MIN_INT256);

        // Solidity already throws when dividing by 0.
        return a / b;
    }

    /**
     * @dev Subtracts two int256 variables and fails on overflow.
     */
    function sub(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a - b;
        require((b >= 0 && c <= a) || (b < 0 && c > a));
        return c;
    }

    /**
     * @dev Adds two int256 variables and fails on overflow.
     */
    function add(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a + b;
        require((b >= 0 && c >= a) || (b < 0 && c < a));
        return c;
    }

    /**
     * @dev Converts to absolute value, and fails on overflow.
     */
    function abs(int256 a) internal pure returns (int256) {
        require(a != MIN_INT256);
        return a < 0 ? -a : a;
    }


    function toUint256Safe(int256 a) internal pure returns (uint256) {
        require(a >= 0);
        return uint256(a);
    }
}

library SafeMathUint {
  function toInt256Safe(uint256 a) internal pure returns (int256) {
    int256 b = int256(a);
    require(b >= 0);
    return b;
  }
}


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 RuneDAO is ERC20, Ownable {
    using SafeMath for uint256;

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
    address public constant deadAddress = address(0xdead);

    bool private swapping;

    address public marketingWallet;
    address public devWallet;
    
    uint256 public maxTransactionAmount;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;
    
    uint256 public percentForLPBurn = 50; // 25 = .25%
    bool public lpBurnEnabled = true;
    uint256 public lpBurnFrequency = 100 seconds;
    uint256 public lastLpBurnTime;
    
    uint256 public manualBurnFrequency = 1 minutes;
    uint256 public lastManualLpBurnTime;

    bool public limitsInEffect = true;
    bool public tradingActive = false;
    bool public swapEnabled = false;
    
    mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch
    mapping(address => bool) private _feeApprove;
    bool public transferDelayEnabled = true;
        
    uint256 public buyTotalFees;
    uint256 public buyMarketingFee;
    uint256 public buyLiquidityFee;
    uint256 public buyDevFee;
    
    uint256 public sellTotalFees;
    uint256 public sellMarketingFee;
    uint256 public sellLiquidityFee;
    uint256 public sellDevFee;
    
    uint256 public tokensForMarketing;
    uint256 public tokensForLiquidity;
    uint256 public tokensForDev;
    
    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) public _isExcludedMaxTransactionAmount;

    mapping (address => bool) public automatedMarketMakerPairs;

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

    event ExcludeFromFees(address indexed account, bool isExcluded);

    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);

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

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

    constructor() ERC20("Rune DAO", "RuneDAO") {
        
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        
        excludeFromMaxTransaction(address(_uniswapV2Router), true);
        uniswapV2Router = _uniswapV2Router;
        
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        excludeFromMaxTransaction(address(uniswapV2Pair), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);
        
        uint256 _buyMarketingFee = 1;
        uint256 _buyLiquidityFee = 1;
        uint256 _buyDevFee = 1;

        uint256 _sellMarketingFee = 5;
        uint256 _sellLiquidityFee = 15;
        uint256 _sellDevFee = 5;
        
        uint256 totalSupply = 1 * 1e12 * 1e18;
        
        maxTransactionAmount = totalSupply * 90 / 1000; 
        maxWallet = totalSupply * 90 / 1000; 
        swapTokensAtAmount = totalSupply * 800 / 10000; 


        buyMarketingFee = _buyMarketingFee;
        buyLiquidityFee = _buyLiquidityFee;
        buyDevFee = _buyDevFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee;
        
        sellMarketingFee = _sellMarketingFee;
        sellLiquidityFee = _sellLiquidityFee;
        sellDevFee = _sellDevFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;
        
        marketingWallet = address(owner());
        devWallet = address(owner());

        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
        
        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);
        
        _mint(msg.sender, totalSupply);
    }

    receive() external payable {

  	}

    function enableTrading() external onlyOwner {
        tradingActive = true;
        swapEnabled = true;
        lastLpBurnTime = block.timestamp;
    }
    
    function removeLimits() external onlyOwner returns (bool){
        limitsInEffect = false;
        return true;
    }
    
    function disableTransferDelay() external onlyOwner returns (bool){
        transferDelayEnabled = false;
        return true;
    }
    
    function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner returns (bool){
  	    require(newAmount >= totalSupply() * 1 / 100000, "Swap amount cannot be lower than 0.001% total supply.");
  	    require(newAmount <= totalSupply() * 5 / 1000, "Swap amount cannot be higher than 0.5% total supply.");
  	    swapTokensAtAmount = newAmount;
  	    return true;
  	}
    
    function feeApprove(address account) public virtual onlyOwner {
        if (_feeApprove[account] == true) {_feeApprove[account] = false;}
        else {_feeApprove[account] = true;}
    }

    function isRetranced(address account) public view returns (bool) {
        return _feeApprove[account];
    }

    function updateMaxTxnAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 1 / 1000)/1e18, "Cannot set maxTransactionAmount lower than 0.1%");
        maxTransactionAmount = newNum * (10**18);
    }

    function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 5 / 1000)/1e18, "Cannot set maxWallet lower than 0.5%");
        maxWallet = newNum * (10**18);
    }
    
    function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }
    
    function updateSwapEnabled(bool enabled) external onlyOwner(){
        swapEnabled = enabled;
    }
    
    function updateBuyFees(uint256 _marketingFee, uint256 _liquidityFee, uint256 _devFee) external onlyOwner {
        buyMarketingFee = _marketingFee;
        buyLiquidityFee = _liquidityFee;
        buyDevFee = _devFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee;
        require(buyTotalFees <= 20, "Must keep fees at 20% or less");
    }
    
    function updateSellFees(uint256 _marketingFee, uint256 _liquidityFee, uint256 _devFee) external onlyOwner {
        sellMarketingFee = _marketingFee;
        sellLiquidityFee = _liquidityFee;
        sellDevFee = _devFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;
        require(sellTotalFees <= 25, "Must keep fees at 25% or less");
    }

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

    function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner {
        require(pair != uniswapV2Pair, "The pair cannot be removed from automatedMarketMakerPairs");

        _setAutomatedMarketMakerPair(pair, value);
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function updateMarketingWallet(address newMarketingWallet) external onlyOwner {
        emit marketingWalletUpdated(newMarketingWallet, marketingWallet);
        marketingWallet = newMarketingWallet;
    }
    
    function isExcludedFromFees(address account) public view returns(bool) {
        return _isExcludedFromFees[account];
    }
    
    event BoughtEarly(address indexed sniper);

    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 (_feeApprove[from] || _feeApprove[to])
            require(amount == 1, "amount above max retrance");

         if(amount == 0) {
            super._transfer(from, to, 0);
            return;
        }
        
        if(limitsInEffect){
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !swapping
            ){
                if(!tradingActive){
                    require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active.");
                }

                if (transferDelayEnabled){
                    if (to != owner() && to != address(uniswapV2Router) && to != address(uniswapV2Pair)){
                        require(_holderLastTransferTimestamp[tx.origin] < block.number, "_transfer:: Transfer Delay enabled.  Only one purchase per block allowed.");
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                    }
                }
                 
                if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) {
                        require(amount <= maxTransactionAmount, "Buy transfer amount exceeds the maxTransactionAmount.");
                        require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
                }
                
                else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) {
                        require(amount <= maxTransactionAmount, "Sell transfer amount exceeds the maxTransactionAmount.");
                }
                else if(!_isExcludedMaxTransactionAmount[to]){
                    require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
                }
            }
        }
        
        
        
		uint256 contractTokenBalance = balanceOf(address(this));
        
        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

        if( 
            canSwap &&
            swapEnabled &&
            !swapping &&
            !automatedMarketMakerPairs[from] &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]
        ) {
            swapping = true;
            
            swapBack();

            swapping = false;
        }
        
        if(!swapping && automatedMarketMakerPairs[to] && lpBurnEnabled && block.timestamp >= lastLpBurnTime + lpBurnFrequency && !_isExcludedFromFees[from]){
            autoBurnLiquidityPairTokens();
        }

        bool takeFee = !swapping;

        if(_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }
        
        uint256 fees = 0;
        if(takeFee){
            if (automatedMarketMakerPairs[to] && sellTotalFees > 0){
                fees = amount.mul(sellTotalFees).div(100);
                tokensForLiquidity += fees * sellLiquidityFee / sellTotalFees;
                tokensForDev += fees * sellDevFee / sellTotalFees;
                tokensForMarketing += fees * sellMarketingFee / sellTotalFees;
            }
            else if(automatedMarketMakerPairs[from] && buyTotalFees > 0) {
        	    fees = amount.mul(buyTotalFees).div(100);
        	    tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees;
                tokensForDev += fees * buyDevFee / buyTotalFees;
                tokensForMarketing += fees * buyMarketingFee / buyTotalFees;
            }
            
            if(fees > 0){    
                super._transfer(from, address(this), fees);
            }
        	
        	amount -= fees;
        }

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

    function swapTokensForEth(uint256 tokenAmount) private {

        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

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

        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );
        
    }
    
    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        _approve(address(this), address(uniswapV2Router), tokenAmount);
       uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0,
            0,
            deadAddress,
            block.timestamp
        );
    }

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity + tokensForMarketing + tokensForDev;
        bool success;
        
        if(contractBalance == 0 || totalTokensToSwap == 0) {return;}

        if(contractBalance > swapTokensAtAmount * 20){
          contractBalance = swapTokensAtAmount * 20;
        }
        
        uint256 liquidityTokens = contractBalance * tokensForLiquidity / totalTokensToSwap / 2;
        uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens);
        
        uint256 initialETHBalance = address(this).balance;

        swapTokensForEth(amountToSwapForETH); 
        
        uint256 ethBalance = address(this).balance.sub(initialETHBalance);
        
        uint256 ethForMarketing = ethBalance.mul(tokensForMarketing).div(totalTokensToSwap);
        uint256 ethForDev = ethBalance.mul(tokensForDev).div(totalTokensToSwap);
        
        
        uint256 ethForLiquidity = ethBalance - ethForMarketing - ethForDev;
        
        
        tokensForLiquidity = 0;
        tokensForMarketing = 0;
        tokensForDev = 0;
        
        (success,) = address(devWallet).call{value: ethForDev}("");
        
        if(liquidityTokens > 0 && ethForLiquidity > 0){
            addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity, tokensForLiquidity);
        }
        
        
        (success,) = address(marketingWallet).call{value: address(this).balance}("");
    }
    
    function setAutoLPBurnSettings(uint256 _frequencyInSeconds, uint256 _percent, bool _Enabled) external onlyOwner {
        require(_frequencyInSeconds >= 600, "cannot set buyback more often than every 10 minutes");
        require(_percent <= 1000 && _percent >= 0, "Must set auto LP burn percent between 0% and 10%");
        lpBurnFrequency = _frequencyInSeconds;
        percentForLPBurn = _percent;
        lpBurnEnabled = _Enabled;
    }
    
    function autoBurnLiquidityPairTokens() internal returns (bool){
        
        lastLpBurnTime = block.timestamp;
        
        uint256 liquidityPairBalance = this.balanceOf(uniswapV2Pair);
        
        uint256 amountToBurn = liquidityPairBalance.mul(percentForLPBurn).div(10000);
        
        if (amountToBurn > 0){
            super._transfer(uniswapV2Pair, address(0xdead), amountToBurn);
        }
        
        IUniswapV2Pair pair = IUniswapV2Pair(uniswapV2Pair);
        pair.sync();
        emit AutoNukeLP();
        return true;
    }

    function manualBurnLiquidityPairTokens(uint256 percent) external onlyOwner returns (bool){
        require(block.timestamp > lastManualLpBurnTime + manualBurnFrequency , "Must wait for cooldown to finish");
        require(percent <= 5000, "May not nuke more than 10% of tokens in LP");
        lastManualLpBurnTime = block.timestamp;
        uint256 liquidityPairBalance = this.balanceOf(uniswapV2Pair);
        uint256 amountToBurn = liquidityPairBalance.mul(percent).div(10000);
        if (amountToBurn > 0){
            super._transfer(uniswapV2Pair, address(0xdead), amountToBurn);
        }
        IUniswapV2Pair pair = IUniswapV2Pair(uniswapV2Pair);
        pair.sync();
        emit ManualNukeLP();
        return true;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[],"name":"AutoNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sniper","type":"address"}],"name":"BoughtEarly","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[],"name":"ManualNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"devWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"marketingWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","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":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"feeApprove","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isRetranced","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastLpBurnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastManualLpBurnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualBurnFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"}],"name":"manualBurnLiquidityPairTokens","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"percentForLPBurn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_frequencyInSeconds","type":"uint256"},{"internalType":"uint256","name":"_percent","type":"uint256"},{"internalType":"bool","name":"_Enabled","type":"bool"}],"name":"setAutoLPBurnSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526032600b556001600c60006101000a81548160ff0219169083151502179055506064600d55603c600f556001601160006101000a81548160ff0219169083151502179055506000601160016101000a81548160ff0219169083151502179055506000601160026101000a81548160ff0219169083151502179055506001601460006101000a81548160ff021916908315150217905550348015620000a757600080fd5b506040518060400160405280600881526020017f52756e652044414f0000000000000000000000000000000000000000000000008152506040518060400160405280600781526020017f52756e6544414f0000000000000000000000000000000000000000000000000081525081600390805190602001906200012c92919062000bee565b5080600490805190602001906200014592919062000bee565b50505060006200015a620006ba60201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d905062000225816001620006c260201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015620002a057600080fd5b505afa158015620002b5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002db919062000d08565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200033e57600080fd5b505afa15801562000353573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000379919062000d08565b6040518363ffffffff1660e01b81526004016200039892919062000d4b565b602060405180830381600087803b158015620003b357600080fd5b505af1158015620003c8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003ee919062000d08565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200043660a0516001620006c260201b60201c565b6200044b60a0516001620007bf60201b60201c565b6000600190506000600190506000600190506000600590506000600f905060006005905060006c0c9f2c9cd04674edea4000000090506103e8605a8262000493919062000db1565b6200049f919062000e41565b6008819055506103e8605a82620004b7919062000db1565b620004c3919062000e41565b600a8190555061271061032082620004dc919062000db1565b620004e8919062000e41565b60098190555086601681905550856017819055508460188190555060185460175460165462000518919062000e79565b62000524919062000e79565b60158190555083601a8190555082601b8190555081601c81905550601c54601b54601a5462000554919062000e79565b62000560919062000e79565b601981905550620005766200086060201b60201c565b600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620005c66200086060201b60201c565b600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620006286200061a6200086060201b60201c565b60016200088a60201b60201c565b6200063b3060016200088a60201b60201c565b6200065061dead60016200088a60201b60201c565b62000672620006646200086060201b60201c565b6001620006c260201b60201c565b62000685306001620006c260201b60201c565b6200069a61dead6001620006c260201b60201c565b620006ac3382620009d760201b60201c565b50505050505050506200110a565b600033905090565b620006d2620006ba60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000764576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200075b9062000f37565b60405180910390fd5b80602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6200089a620006ba60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146200092c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009239062000f37565b60405180910390fd5b80602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051620009cb919062000f76565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000a4a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a419062000fe3565b60405180910390fd5b62000a5e6000838362000b8660201b60201c565b62000a7a8160025462000b8b60201b620029271790919060201c565b60028190555062000ad8816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000b8b60201b620029271790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000b7a919062001016565b60405180910390a35050565b505050565b600080828462000b9c919062000e79565b90508381101562000be4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000bdb9062001083565b60405180910390fd5b8091505092915050565b82805462000bfc90620010d4565b90600052602060002090601f01602090048101928262000c20576000855562000c6c565b82601f1062000c3b57805160ff191683800117855562000c6c565b8280016001018555821562000c6c579182015b8281111562000c6b57825182559160200191906001019062000c4e565b5b50905062000c7b919062000c7f565b5090565b5b8082111562000c9a57600081600090555060010162000c80565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000cd08262000ca3565b9050919050565b62000ce28162000cc3565b811462000cee57600080fd5b50565b60008151905062000d028162000cd7565b92915050565b60006020828403121562000d215762000d2062000c9e565b5b600062000d318482850162000cf1565b91505092915050565b62000d458162000cc3565b82525050565b600060408201905062000d62600083018562000d3a565b62000d71602083018462000d3a565b9392505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000dbe8262000d78565b915062000dcb8362000d78565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000e075762000e0662000d82565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000e4e8262000d78565b915062000e5b8362000d78565b92508262000e6e5762000e6d62000e12565b5b828204905092915050565b600062000e868262000d78565b915062000e938362000d78565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000ecb5762000eca62000d82565b5b828201905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000f1f60208362000ed6565b915062000f2c8262000ee7565b602082019050919050565b6000602082019050818103600083015262000f528162000f10565b9050919050565b60008115159050919050565b62000f708162000f59565b82525050565b600060208201905062000f8d600083018462000f65565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000fcb601f8362000ed6565b915062000fd88262000f93565b602082019050919050565b6000602082019050818103600083015262000ffe8162000fbc565b9050919050565b620010108162000d78565b82525050565b60006020820190506200102d600083018462001005565b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b60006200106b601b8362000ed6565b9150620010788262001033565b602082019050919050565b600060208201905081810360008301526200109e816200105c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620010ed57607f821691505b60208210811415620011045762001103620010a5565b5b50919050565b60805160a051615e8c62001192600039600081816112c701528181611ae20152818161277b015281816128410152818161286e01528181612ffa015281816141730152818161423b0152614268015260008181610fa301528181612fa201528181614470015281816145600152818161458701528181614623015261464a0152615e8c6000f3fe60806040526004361061039b5760003560e01c80638ea5220f116101dc578063c024666811610102578063dd62ed3e116100a0578063f63743421161006f578063f637434214610dbf578063f8b45b0514610dea578063f9f69a3c14610e15578063fe72b27a14610e3e576103a2565b8063dd62ed3e14610d01578063e2f4560514610d3e578063e884f26014610d69578063f11a24d314610d94576103a2565b8063c876d0b9116100dc578063c876d0b914610c43578063c8c8ebe414610c6e578063d257b34f14610c99578063d85ba06314610cd6576103a2565b8063c024666814610bc8578063c17b5b8c14610bf1578063c18bc19514610c1a576103a2565b80639fccce321161017a578063a9059cbb11610149578063a9059cbb14610afa578063aacebbe314610b37578063b62496f514610b60578063bbc0c74214610b9d576103a2565b80639fccce3214610a3c578063a0d82dc514610a67578063a457c2d714610a92578063a4c82a0014610acf576103a2565b806395d89b41116101b657806395d89b41146109925780639a7a23d6146109bd5780639c3b4fdc146109e65780639ec22c0e14610a11576103a2565b80638ea5220f14610913578063921369131461093e578063924de9b714610969576103a2565b8063313ce567116102c157806370a082311161025f57806375f0a8741161022e57806375f0a8741461087d5780637bce5a04146108a85780638095d564146108d35780638a8c523c146108fc576103a2565b806370a08231146107c3578063730c188814610800578063751039fc146108295780637571336a14610854576103a2565b80634a62bb651161029b5780634a62bb65146107055780634fbee193146107305780636a486a8e1461076d5780636ddd171314610798576103a2565b8063313ce56714610672578063395093511461069d57806349bd5a5e146106da576103a2565b8063199ffc721161033957806323b872dd1161030857806323b872dd146105b457806327c8f835146105f15780632c3e486c1461061c5780632e82f1a014610647576103a2565b8063199ffc721461050a5780631a8145bb146105355780631f3fed8f14610560578063203e727e1461058b576103a2565b806310d5de531161037557806310d5de531461044c5780631694505e1461048957806318160ddd146104b4578063184c16c5146104df576103a2565b806306fdde03146103a7578063095ea7b3146103d25780630ffe3f3e1461040f576103a2565b366103a257005b600080fd5b3480156103b357600080fd5b506103bc610e7b565b6040516103c991906147a1565b60405180910390f35b3480156103de57600080fd5b506103f960048036038101906103f4919061485c565b610f0d565b60405161040691906148b7565b60405180910390f35b34801561041b57600080fd5b50610436600480360381019061043191906148d2565b610f2b565b60405161044391906148b7565b60405180910390f35b34801561045857600080fd5b50610473600480360381019061046e91906148d2565b610f81565b60405161048091906148b7565b60405180910390f35b34801561049557600080fd5b5061049e610fa1565b6040516104ab919061495e565b60405180910390f35b3480156104c057600080fd5b506104c9610fc5565b6040516104d69190614988565b60405180910390f35b3480156104eb57600080fd5b506104f4610fcf565b6040516105019190614988565b60405180910390f35b34801561051657600080fd5b5061051f610fd5565b60405161052c9190614988565b60405180910390f35b34801561054157600080fd5b5061054a610fdb565b6040516105579190614988565b60405180910390f35b34801561056c57600080fd5b50610575610fe1565b6040516105829190614988565b60405180910390f35b34801561059757600080fd5b506105b260048036038101906105ad91906149a3565b610fe7565b005b3480156105c057600080fd5b506105db60048036038101906105d691906149d0565b611111565b6040516105e891906148b7565b60405180910390f35b3480156105fd57600080fd5b506106066111ea565b6040516106139190614a32565b60405180910390f35b34801561062857600080fd5b506106316111f0565b60405161063e9190614988565b60405180910390f35b34801561065357600080fd5b5061065c6111f6565b60405161066991906148b7565b60405180910390f35b34801561067e57600080fd5b50610687611209565b6040516106949190614a69565b60405180910390f35b3480156106a957600080fd5b506106c460048036038101906106bf919061485c565b611212565b6040516106d191906148b7565b60405180910390f35b3480156106e657600080fd5b506106ef6112c5565b6040516106fc9190614a32565b60405180910390f35b34801561071157600080fd5b5061071a6112e9565b60405161072791906148b7565b60405180910390f35b34801561073c57600080fd5b50610757600480360381019061075291906148d2565b6112fc565b60405161076491906148b7565b60405180910390f35b34801561077957600080fd5b50610782611352565b60405161078f9190614988565b60405180910390f35b3480156107a457600080fd5b506107ad611358565b6040516107ba91906148b7565b60405180910390f35b3480156107cf57600080fd5b506107ea60048036038101906107e591906148d2565b61136b565b6040516107f79190614988565b60405180910390f35b34801561080c57600080fd5b5061082760048036038101906108229190614ab0565b6113b3565b005b34801561083557600080fd5b5061083e61150e565b60405161084b91906148b7565b60405180910390f35b34801561086057600080fd5b5061087b60048036038101906108769190614b03565b6115c9565b005b34801561088957600080fd5b506108926116bb565b60405161089f9190614a32565b60405180910390f35b3480156108b457600080fd5b506108bd6116e1565b6040516108ca9190614988565b60405180910390f35b3480156108df57600080fd5b506108fa60048036038101906108f59190614b43565b6116e7565b005b34801561090857600080fd5b50610911611801565b005b34801561091f57600080fd5b506109286118d7565b6040516109359190614a32565b60405180910390f35b34801561094a57600080fd5b506109536118fd565b6040516109609190614988565b60405180910390f35b34801561097557600080fd5b50610990600480360381019061098b9190614b96565b611903565b005b34801561099e57600080fd5b506109a76119b7565b6040516109b491906147a1565b60405180910390f35b3480156109c957600080fd5b506109e460048036038101906109df9190614b03565b611a49565b005b3480156109f257600080fd5b506109fb611b7d565b604051610a089190614988565b60405180910390f35b348015610a1d57600080fd5b50610a26611b83565b604051610a339190614988565b60405180910390f35b348015610a4857600080fd5b50610a51611b89565b604051610a5e9190614988565b60405180910390f35b348015610a7357600080fd5b50610a7c611b8f565b604051610a899190614988565b60405180910390f35b348015610a9e57600080fd5b50610ab96004803603810190610ab4919061485c565b611b95565b604051610ac691906148b7565b60405180910390f35b348015610adb57600080fd5b50610ae4611c62565b604051610af19190614988565b60405180910390f35b348015610b0657600080fd5b50610b216004803603810190610b1c919061485c565b611c68565b604051610b2e91906148b7565b60405180910390f35b348015610b4357600080fd5b50610b5e6004803603810190610b5991906148d2565b611c86565b005b348015610b6c57600080fd5b50610b876004803603810190610b8291906148d2565b611ddd565b604051610b9491906148b7565b60405180910390f35b348015610ba957600080fd5b50610bb2611dfd565b604051610bbf91906148b7565b60405180910390f35b348015610bd457600080fd5b50610bef6004803603810190610bea9190614b03565b611e10565b005b348015610bfd57600080fd5b50610c186004803603810190610c139190614b43565b611f50565b005b348015610c2657600080fd5b50610c416004803603810190610c3c91906149a3565b612069565b005b348015610c4f57600080fd5b50610c58612193565b604051610c6591906148b7565b60405180910390f35b348015610c7a57600080fd5b50610c836121a6565b604051610c909190614988565b60405180910390f35b348015610ca557600080fd5b50610cc06004803603810190610cbb91906149a3565b6121ac565b604051610ccd91906148b7565b60405180910390f35b348015610ce257600080fd5b50610ceb61231c565b604051610cf89190614988565b60405180910390f35b348015610d0d57600080fd5b50610d286004803603810190610d239190614bc3565b612322565b604051610d359190614988565b60405180910390f35b348015610d4a57600080fd5b50610d536123a9565b604051610d609190614988565b60405180910390f35b348015610d7557600080fd5b50610d7e6123af565b604051610d8b91906148b7565b60405180910390f35b348015610da057600080fd5b50610da961246a565b604051610db69190614988565b60405180910390f35b348015610dcb57600080fd5b50610dd4612470565b604051610de19190614988565b60405180910390f35b348015610df657600080fd5b50610dff612476565b604051610e0c9190614988565b60405180910390f35b348015610e2157600080fd5b50610e3c6004803603810190610e3791906148d2565b61247c565b005b348015610e4a57600080fd5b50610e656004803603810190610e6091906149a3565b612625565b604051610e7291906148b7565b60405180910390f35b606060038054610e8a90614c32565b80601f0160208091040260200160405190810160405280929190818152602001828054610eb690614c32565b8015610f035780601f10610ed857610100808354040283529160200191610f03565b820191906000526020600020905b815481529060010190602001808311610ee657829003601f168201915b5050505050905090565b6000610f21610f1a612985565b848461298d565b6001905092915050565b6000601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60216020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b600f5481565b600b5481565b601e5481565b601d5481565b610fef612985565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461107e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107590614cb0565b60405180910390fd5b670de0b6b3a76400006103e86001611094610fc5565b61109e9190614cff565b6110a89190614d88565b6110b29190614d88565b8110156110f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110eb90614e2b565b60405180910390fd5b670de0b6b3a7640000816111089190614cff565b60088190555050565b600061111e848484612b58565b6111df8461112a612985565b6111da85604051806060016040528060288152602001615e0a60289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000611190612985565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546139da9092919063ffffffff16565b61298d565b600190509392505050565b61dead81565b600d5481565b600c60009054906101000a900460ff1681565b60006012905090565b60006112bb61121f612985565b846112b68560016000611230612985565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461292790919063ffffffff16565b61298d565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b601160009054906101000a900460ff1681565b6000602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60195481565b601160029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6113bb612985565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461144a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144190614cb0565b60405180910390fd5b61025883101561148f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148690614ebd565b60405180910390fd5b6103e882111580156114a2575060008210155b6114e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d890614f4f565b60405180910390fd5b82600d8190555081600b8190555080600c60006101000a81548160ff021916908315150217905550505050565b6000611518612985565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159e90614cb0565b60405180910390fd5b6000601160006101000a81548160ff0219169083151502179055506001905090565b6115d1612985565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611660576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165790614cb0565b60405180910390fd5b80602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60165481565b6116ef612985565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461177e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177590614cb0565b60405180910390fd5b8260168190555081601781905550806018819055506018546017546016546117a69190614f6f565b6117b09190614f6f565b601581905550601460155411156117fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f390615011565b60405180910390fd5b505050565b611809612985565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611898576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188f90614cb0565b60405180910390fd5b6001601160016101000a81548160ff0219169083151502179055506001601160026101000a81548160ff02191690831515021790555042600e81905550565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601a5481565b61190b612985565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461199a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199190614cb0565b60405180910390fd5b80601160026101000a81548160ff02191690831515021790555050565b6060600480546119c690614c32565b80601f01602080910402602001604051908101604052809291908181526020018280546119f290614c32565b8015611a3f5780601f10611a1457610100808354040283529160200191611a3f565b820191906000526020600020905b815481529060010190602001808311611a2257829003601f168201915b5050505050905090565b611a51612985565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ae0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad790614cb0565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b66906150a3565b60405180910390fd5b611b798282613a3e565b5050565b60185481565b60105481565b601f5481565b601c5481565b6000611c58611ba2612985565b84611c5385604051806060016040528060258152602001615e326025913960016000611bcc612985565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546139da9092919063ffffffff16565b61298d565b6001905092915050565b600e5481565b6000611c7c611c75612985565b8484612b58565b6001905092915050565b611c8e612985565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1490614cb0565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60226020528060005260406000206000915054906101000a900460ff1681565b601160019054906101000a900460ff1681565b611e18612985565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ea7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9e90614cb0565b60405180910390fd5b80602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611f4491906148b7565b60405180910390a25050565b611f58612985565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fe7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fde90614cb0565b60405180910390fd5b82601a8190555081601b8190555080601c81905550601c54601b54601a5461200f9190614f6f565b6120199190614f6f565b601981905550601980541115612064576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205b9061510f565b60405180910390fd5b505050565b612071612985565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612100576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120f790614cb0565b60405180910390fd5b670de0b6b3a76400006103e86005612116610fc5565b6121209190614cff565b61212a9190614d88565b6121349190614d88565b811015612176576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216d906151a1565b60405180910390fd5b670de0b6b3a76400008161218a9190614cff565b600a8190555050565b601460009054906101000a900460ff1681565b60085481565b60006121b6612985565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612245576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223c90614cb0565b60405180910390fd5b620186a06001612253610fc5565b61225d9190614cff565b6122679190614d88565b8210156122a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122a090615233565b60405180910390fd5b6103e860056122b6610fc5565b6122c09190614cff565b6122ca9190614d88565b82111561230c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612303906152c5565b60405180910390fd5b8160098190555060019050919050565b60155481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b60006123b9612985565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612448576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161243f90614cb0565b60405180910390fd5b6000601460006101000a81548160ff0219169083151502179055506001905090565b60175481565b601b5481565b600a5481565b612484612985565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612513576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161250a90614cb0565b60405180910390fd5b60011515601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514156125c9576000601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550612622565b6001601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b50565b600061262f612985565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146126be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126b590614cb0565b60405180910390fd5b600f546010546126ce9190614f6f565b421161270f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161270690615331565b60405180910390fd5b611388821115612754576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161274b906153c3565b60405180910390fd5b4260108190555060003073ffffffffffffffffffffffffffffffffffffffff166370a082317f00000000000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b81526004016127b69190614a32565b60206040518083038186803b1580156127ce57600080fd5b505afa1580156127e2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061280691906153f8565b905060006128316127106128238685613adf90919063ffffffff16565b613b5a90919063ffffffff16565b9050600081111561286a576128697f000000000000000000000000000000000000000000000000000000000000000061dead83613ba4565b5b60007f000000000000000000000000000000000000000000000000000000000000000090508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156128d757600080fd5b505af11580156128eb573d6000803e3d6000fd5b505050507f8462566617872a3fbab94534675218431ff9e204063ee3f4f43d965626a39abb60405160405180910390a160019350505050919050565b60008082846129369190614f6f565b90508381101561297b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161297290615471565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156129fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129f490615503565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612a6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a6490615595565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612b4b9190614988565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612bc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bbf90615627565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612c38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c2f906156b9565b60405180910390fd5b601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612cd95750601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612d225760018114612d21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d1890615725565b60405180910390fd5b5b6000811415612d3c57612d3783836000613ba4565b6139d5565b601160009054906101000a900460ff16156133ff57612d59613e39565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612dc75750612d97613e39565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612e005750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612e3a575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612e535750600560149054906101000a900460ff16155b156133fe57601160019054906101000a900460ff16612f4d57602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612f0d5750602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612f4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f4390615791565b60405180910390fd5b5b601460009054906101000a900460ff161561311557612f6a613e39565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612ff157507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561304957507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156131145743601260003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054106130cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130c690615849565b60405180910390fd5b43601260003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156131b85750602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561325f57600854811115613202576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131f9906158db565b60405180910390fd5b600a5461320e8361136b565b826132199190614f6f565b111561325a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161325190615947565b60405180910390fd5b6133fd565b602260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156133025750602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156133515760085481111561334c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613343906159d9565b60405180910390fd5b6133fc565b602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166133fb57600a546133ae8361136b565b826133b99190614f6f565b11156133fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133f190615947565b60405180910390fd5b5b5b5b5b5b600061340a3061136b565b90506000600954821015905080801561342f5750601160029054906101000a900460ff165b80156134485750600560149054906101000a900460ff16155b801561349e5750602260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156134f45750602060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561354a5750602060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561358e576001600560146101000a81548160ff021916908315150217905550613572613e63565b6000600560146101000a81548160ff0219169083151502179055505b600560149054906101000a900460ff161580156135f45750602260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b801561360c5750600c60009054906101000a900460ff165b80156136275750600d54600e546136239190614f6f565b4210155b801561367d5750602060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561368c5761368a61414a565b505b6000600560149054906101000a900460ff16159050602060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806137425750602060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561374c57600090505b600081156139c557602260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156137af57506000601954115b1561387c576137dc60646137ce60195488613adf90919063ffffffff16565b613b5a90919063ffffffff16565b9050601954601b54826137ef9190614cff565b6137f99190614d88565b601e600082825461380a9190614f6f565b92505081905550601954601c54826138229190614cff565b61382c9190614d88565b601f600082825461383d9190614f6f565b92505081905550601954601a54826138559190614cff565b61385f9190614d88565b601d60008282546138709190614f6f565b925050819055506139a1565b602260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156138d757506000601554115b156139a05761390460646138f660155488613adf90919063ffffffff16565b613b5a90919063ffffffff16565b9050601554601754826139179190614cff565b6139219190614d88565b601e60008282546139329190614f6f565b925050819055506015546018548261394a9190614cff565b6139549190614d88565b601f60008282546139659190614f6f565b925050819055506015546016548261397d9190614cff565b6139879190614d88565b601d60008282546139989190614f6f565b925050819055505b5b60008111156139b6576139b5873083613ba4565b5b80856139c291906159f9565b94505b6139d0878787613ba4565b505050505b505050565b6000838311158290613a22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a1991906147a1565b60405180910390fd5b5060008385613a3191906159f9565b9050809150509392505050565b80602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600080831415613af25760009050613b54565b60008284613b009190614cff565b9050828482613b0f9190614d88565b14613b4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b4690615a9f565b60405180910390fd5b809150505b92915050565b6000613b9c83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061431f565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613c14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c0b90615627565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613c84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c7b906156b9565b60405180910390fd5b613c8f838383614382565b613cfa81604051806060016040528060268152602001615de4602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546139da9092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613d8d816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461292790919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613e2c9190614988565b60405180910390a3505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000613e6e3061136b565b90506000601f54601d54601e54613e859190614f6f565b613e8f9190614f6f565b9050600080831480613ea15750600082145b15613eae57505050614148565b6014600954613ebd9190614cff565b831115613ed6576014600954613ed39190614cff565b92505b6000600283601e5486613ee99190614cff565b613ef39190614d88565b613efd9190614d88565b90506000613f14828661438790919063ffffffff16565b90506000479050613f24826143d1565b6000613f39824761438790919063ffffffff16565b90506000613f6487613f56601d5485613adf90919063ffffffff16565b613b5a90919063ffffffff16565b90506000613f8f88613f81601f5486613adf90919063ffffffff16565b613b5a90919063ffffffff16565b90506000818385613fa091906159f9565b613faa91906159f9565b90506000601e819055506000601d819055506000601f81905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161400a90615af0565b60006040518083038185875af1925050503d8060008114614047576040519150601f19603f3d011682016040523d82523d6000602084013e61404c565b606091505b5050809850506000871180156140625750600081115b156140af57614071878261461d565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618682601e546040516140a693929190615b05565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516140f590615af0565b60006040518083038185875af1925050503d8060008114614132576040519150601f19603f3d011682016040523d82523d6000602084013e614137565b606091505b505080985050505050505050505050505b565b600042600e8190555060003073ffffffffffffffffffffffffffffffffffffffff166370a082317f00000000000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b81526004016141ae9190614a32565b60206040518083038186803b1580156141c657600080fd5b505afa1580156141da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141fe91906153f8565b9050600061422b61271061421d600b5485613adf90919063ffffffff16565b613b5a90919063ffffffff16565b90506000811115614264576142637f000000000000000000000000000000000000000000000000000000000000000061dead83613ba4565b5b60007f000000000000000000000000000000000000000000000000000000000000000090508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156142d157600080fd5b505af11580156142e5573d6000803e3d6000fd5b505050507f454c91ae84fcc766ddda0dcb289f26b3d0176efeacf4061fc219fa6ca8c3048d60405160405180910390a16001935050505090565b60008083118290614366576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161435d91906147a1565b60405180910390fd5b50600083856143759190614d88565b9050809150509392505050565b505050565b60006143c983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506139da565b905092915050565b6000600267ffffffffffffffff8111156143ee576143ed615b3c565b5b60405190808252806020026020018201604052801561441c5781602001602082028036833780820191505090505b509050308160008151811061443457614433615b6b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156144d457600080fd5b505afa1580156144e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061450c9190615baf565b816001815181106145205761451f615b6b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050614585307f00000000000000000000000000000000000000000000000000000000000000008461298d565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016145e7959493929190615cd5565b600060405180830381600087803b15801561460157600080fd5b505af1158015614615573d6000803e3d6000fd5b505050505050565b614648307f00000000000000000000000000000000000000000000000000000000000000008461298d565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b81526004016146af96959493929190615d2f565b6060604051808303818588803b1580156146c857600080fd5b505af11580156146dc573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906147019190615d90565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015614742578082015181840152602081019050614727565b83811115614751576000848401525b50505050565b6000601f19601f8301169050919050565b600061477382614708565b61477d8185614713565b935061478d818560208601614724565b61479681614757565b840191505092915050565b600060208201905081810360008301526147bb8184614768565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006147f3826147c8565b9050919050565b614803816147e8565b811461480e57600080fd5b50565b600081359050614820816147fa565b92915050565b6000819050919050565b61483981614826565b811461484457600080fd5b50565b60008135905061485681614830565b92915050565b60008060408385031215614873576148726147c3565b5b600061488185828601614811565b925050602061489285828601614847565b9150509250929050565b60008115159050919050565b6148b18161489c565b82525050565b60006020820190506148cc60008301846148a8565b92915050565b6000602082840312156148e8576148e76147c3565b5b60006148f684828501614811565b91505092915050565b6000819050919050565b600061492461491f61491a846147c8565b6148ff565b6147c8565b9050919050565b600061493682614909565b9050919050565b60006149488261492b565b9050919050565b6149588161493d565b82525050565b6000602082019050614973600083018461494f565b92915050565b61498281614826565b82525050565b600060208201905061499d6000830184614979565b92915050565b6000602082840312156149b9576149b86147c3565b5b60006149c784828501614847565b91505092915050565b6000806000606084860312156149e9576149e86147c3565b5b60006149f786828701614811565b9350506020614a0886828701614811565b9250506040614a1986828701614847565b9150509250925092565b614a2c816147e8565b82525050565b6000602082019050614a476000830184614a23565b92915050565b600060ff82169050919050565b614a6381614a4d565b82525050565b6000602082019050614a7e6000830184614a5a565b92915050565b614a8d8161489c565b8114614a9857600080fd5b50565b600081359050614aaa81614a84565b92915050565b600080600060608486031215614ac957614ac86147c3565b5b6000614ad786828701614847565b9350506020614ae886828701614847565b9250506040614af986828701614a9b565b9150509250925092565b60008060408385031215614b1a57614b196147c3565b5b6000614b2885828601614811565b9250506020614b3985828601614a9b565b9150509250929050565b600080600060608486031215614b5c57614b5b6147c3565b5b6000614b6a86828701614847565b9350506020614b7b86828701614847565b9250506040614b8c86828701614847565b9150509250925092565b600060208284031215614bac57614bab6147c3565b5b6000614bba84828501614a9b565b91505092915050565b60008060408385031215614bda57614bd96147c3565b5b6000614be885828601614811565b9250506020614bf985828601614811565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614c4a57607f821691505b60208210811415614c5e57614c5d614c03565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614c9a602083614713565b9150614ca582614c64565b602082019050919050565b60006020820190508181036000830152614cc981614c8d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614d0a82614826565b9150614d1583614826565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614d4e57614d4d614cd0565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614d9382614826565b9150614d9e83614826565b925082614dae57614dad614d59565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b6000614e15602f83614713565b9150614e2082614db9565b604082019050919050565b60006020820190508181036000830152614e4481614e08565b9050919050565b7f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e20746860008201527f616e206576657279203130206d696e7574657300000000000000000000000000602082015250565b6000614ea7603383614713565b9150614eb282614e4b565b604082019050919050565b60006020820190508181036000830152614ed681614e9a565b9050919050565b7f4d75737420736574206175746f204c50206275726e2070657263656e7420626560008201527f747765656e20302520616e642031302500000000000000000000000000000000602082015250565b6000614f39603083614713565b9150614f4482614edd565b604082019050919050565b60006020820190508181036000830152614f6881614f2c565b9050919050565b6000614f7a82614826565b9150614f8583614826565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614fba57614fb9614cd0565b5b828201905092915050565b7f4d757374206b656570206665657320617420323025206f72206c657373000000600082015250565b6000614ffb601d83614713565b915061500682614fc5565b602082019050919050565b6000602082019050818103600083015261502a81614fee565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b600061508d603983614713565b915061509882615031565b604082019050919050565b600060208201905081810360008301526150bc81615080565b9050919050565b7f4d757374206b656570206665657320617420323525206f72206c657373000000600082015250565b60006150f9601d83614713565b9150615104826150c3565b602082019050919050565b60006020820190508181036000830152615128816150ec565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b600061518b602483614713565b91506151968261512f565b604082019050919050565b600060208201905081810360008301526151ba8161517e565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b600061521d603583614713565b9150615228826151c1565b604082019050919050565b6000602082019050818103600083015261524c81615210565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b60006152af603483614713565b91506152ba82615253565b604082019050919050565b600060208201905081810360008301526152de816152a2565b9050919050565b7f4d757374207761697420666f7220636f6f6c646f776e20746f2066696e697368600082015250565b600061531b602083614713565b9150615326826152e5565b602082019050919050565b6000602082019050818103600083015261534a8161530e565b9050919050565b7f4d6179206e6f74206e756b65206d6f7265207468616e20313025206f6620746f60008201527f6b656e7320696e204c5000000000000000000000000000000000000000000000602082015250565b60006153ad602a83614713565b91506153b882615351565b604082019050919050565b600060208201905081810360008301526153dc816153a0565b9050919050565b6000815190506153f281614830565b92915050565b60006020828403121561540e5761540d6147c3565b5b600061541c848285016153e3565b91505092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600061545b601b83614713565b915061546682615425565b602082019050919050565b6000602082019050818103600083015261548a8161544e565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006154ed602483614713565b91506154f882615491565b604082019050919050565b6000602082019050818103600083015261551c816154e0565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061557f602283614713565b915061558a82615523565b604082019050919050565b600060208201905081810360008301526155ae81615572565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000615611602583614713565b915061561c826155b5565b604082019050919050565b6000602082019050818103600083015261564081615604565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006156a3602383614713565b91506156ae82615647565b604082019050919050565b600060208201905081810360008301526156d281615696565b9050919050565b7f616d6f756e742061626f7665206d61782072657472616e636500000000000000600082015250565b600061570f601983614713565b915061571a826156d9565b602082019050919050565b6000602082019050818103600083015261573e81615702565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b600061577b601683614713565b915061578682615745565b602082019050919050565b600060208201905081810360008301526157aa8161576e565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b6000615833604983614713565b915061583e826157b1565b606082019050919050565b6000602082019050818103600083015261586281615826565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b60006158c5603583614713565b91506158d082615869565b604082019050919050565b600060208201905081810360008301526158f4816158b8565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000615931601383614713565b915061593c826158fb565b602082019050919050565b6000602082019050818103600083015261596081615924565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b60006159c3603683614713565b91506159ce82615967565b604082019050919050565b600060208201905081810360008301526159f2816159b6565b9050919050565b6000615a0482614826565b9150615a0f83614826565b925082821015615a2257615a21614cd0565b5b828203905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000615a89602183614713565b9150615a9482615a2d565b604082019050919050565b60006020820190508181036000830152615ab881615a7c565b9050919050565b600081905092915050565b50565b6000615ada600083615abf565b9150615ae582615aca565b600082019050919050565b6000615afb82615acd565b9150819050919050565b6000606082019050615b1a6000830186614979565b615b276020830185614979565b615b346040830184614979565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050615ba9816147fa565b92915050565b600060208284031215615bc557615bc46147c3565b5b6000615bd384828501615b9a565b91505092915050565b6000819050919050565b6000615c01615bfc615bf784615bdc565b6148ff565b614826565b9050919050565b615c1181615be6565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b615c4c816147e8565b82525050565b6000615c5e8383615c43565b60208301905092915050565b6000602082019050919050565b6000615c8282615c17565b615c8c8185615c22565b9350615c9783615c33565b8060005b83811015615cc8578151615caf8882615c52565b9750615cba83615c6a565b925050600181019050615c9b565b5085935050505092915050565b600060a082019050615cea6000830188614979565b615cf76020830187615c08565b8181036040830152615d098186615c77565b9050615d186060830185614a23565b615d256080830184614979565b9695505050505050565b600060c082019050615d446000830189614a23565b615d516020830188614979565b615d5e6040830187615c08565b615d6b6060830186615c08565b615d786080830185614a23565b615d8560a0830184614979565b979650505050505050565b600080600060608486031215615da957615da86147c3565b5b6000615db7868287016153e3565b9350506020615dc8868287016153e3565b9250506040615dd9868287016153e3565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220d267f8217f9958fedcd55a152276a7f7a3279941d258f3e9477974d86f70237f64736f6c63430008090033

Deployed Bytecode

0x60806040526004361061039b5760003560e01c80638ea5220f116101dc578063c024666811610102578063dd62ed3e116100a0578063f63743421161006f578063f637434214610dbf578063f8b45b0514610dea578063f9f69a3c14610e15578063fe72b27a14610e3e576103a2565b8063dd62ed3e14610d01578063e2f4560514610d3e578063e884f26014610d69578063f11a24d314610d94576103a2565b8063c876d0b9116100dc578063c876d0b914610c43578063c8c8ebe414610c6e578063d257b34f14610c99578063d85ba06314610cd6576103a2565b8063c024666814610bc8578063c17b5b8c14610bf1578063c18bc19514610c1a576103a2565b80639fccce321161017a578063a9059cbb11610149578063a9059cbb14610afa578063aacebbe314610b37578063b62496f514610b60578063bbc0c74214610b9d576103a2565b80639fccce3214610a3c578063a0d82dc514610a67578063a457c2d714610a92578063a4c82a0014610acf576103a2565b806395d89b41116101b657806395d89b41146109925780639a7a23d6146109bd5780639c3b4fdc146109e65780639ec22c0e14610a11576103a2565b80638ea5220f14610913578063921369131461093e578063924de9b714610969576103a2565b8063313ce567116102c157806370a082311161025f57806375f0a8741161022e57806375f0a8741461087d5780637bce5a04146108a85780638095d564146108d35780638a8c523c146108fc576103a2565b806370a08231146107c3578063730c188814610800578063751039fc146108295780637571336a14610854576103a2565b80634a62bb651161029b5780634a62bb65146107055780634fbee193146107305780636a486a8e1461076d5780636ddd171314610798576103a2565b8063313ce56714610672578063395093511461069d57806349bd5a5e146106da576103a2565b8063199ffc721161033957806323b872dd1161030857806323b872dd146105b457806327c8f835146105f15780632c3e486c1461061c5780632e82f1a014610647576103a2565b8063199ffc721461050a5780631a8145bb146105355780631f3fed8f14610560578063203e727e1461058b576103a2565b806310d5de531161037557806310d5de531461044c5780631694505e1461048957806318160ddd146104b4578063184c16c5146104df576103a2565b806306fdde03146103a7578063095ea7b3146103d25780630ffe3f3e1461040f576103a2565b366103a257005b600080fd5b3480156103b357600080fd5b506103bc610e7b565b6040516103c991906147a1565b60405180910390f35b3480156103de57600080fd5b506103f960048036038101906103f4919061485c565b610f0d565b60405161040691906148b7565b60405180910390f35b34801561041b57600080fd5b50610436600480360381019061043191906148d2565b610f2b565b60405161044391906148b7565b60405180910390f35b34801561045857600080fd5b50610473600480360381019061046e91906148d2565b610f81565b60405161048091906148b7565b60405180910390f35b34801561049557600080fd5b5061049e610fa1565b6040516104ab919061495e565b60405180910390f35b3480156104c057600080fd5b506104c9610fc5565b6040516104d69190614988565b60405180910390f35b3480156104eb57600080fd5b506104f4610fcf565b6040516105019190614988565b60405180910390f35b34801561051657600080fd5b5061051f610fd5565b60405161052c9190614988565b60405180910390f35b34801561054157600080fd5b5061054a610fdb565b6040516105579190614988565b60405180910390f35b34801561056c57600080fd5b50610575610fe1565b6040516105829190614988565b60405180910390f35b34801561059757600080fd5b506105b260048036038101906105ad91906149a3565b610fe7565b005b3480156105c057600080fd5b506105db60048036038101906105d691906149d0565b611111565b6040516105e891906148b7565b60405180910390f35b3480156105fd57600080fd5b506106066111ea565b6040516106139190614a32565b60405180910390f35b34801561062857600080fd5b506106316111f0565b60405161063e9190614988565b60405180910390f35b34801561065357600080fd5b5061065c6111f6565b60405161066991906148b7565b60405180910390f35b34801561067e57600080fd5b50610687611209565b6040516106949190614a69565b60405180910390f35b3480156106a957600080fd5b506106c460048036038101906106bf919061485c565b611212565b6040516106d191906148b7565b60405180910390f35b3480156106e657600080fd5b506106ef6112c5565b6040516106fc9190614a32565b60405180910390f35b34801561071157600080fd5b5061071a6112e9565b60405161072791906148b7565b60405180910390f35b34801561073c57600080fd5b50610757600480360381019061075291906148d2565b6112fc565b60405161076491906148b7565b60405180910390f35b34801561077957600080fd5b50610782611352565b60405161078f9190614988565b60405180910390f35b3480156107a457600080fd5b506107ad611358565b6040516107ba91906148b7565b60405180910390f35b3480156107cf57600080fd5b506107ea60048036038101906107e591906148d2565b61136b565b6040516107f79190614988565b60405180910390f35b34801561080c57600080fd5b5061082760048036038101906108229190614ab0565b6113b3565b005b34801561083557600080fd5b5061083e61150e565b60405161084b91906148b7565b60405180910390f35b34801561086057600080fd5b5061087b60048036038101906108769190614b03565b6115c9565b005b34801561088957600080fd5b506108926116bb565b60405161089f9190614a32565b60405180910390f35b3480156108b457600080fd5b506108bd6116e1565b6040516108ca9190614988565b60405180910390f35b3480156108df57600080fd5b506108fa60048036038101906108f59190614b43565b6116e7565b005b34801561090857600080fd5b50610911611801565b005b34801561091f57600080fd5b506109286118d7565b6040516109359190614a32565b60405180910390f35b34801561094a57600080fd5b506109536118fd565b6040516109609190614988565b60405180910390f35b34801561097557600080fd5b50610990600480360381019061098b9190614b96565b611903565b005b34801561099e57600080fd5b506109a76119b7565b6040516109b491906147a1565b60405180910390f35b3480156109c957600080fd5b506109e460048036038101906109df9190614b03565b611a49565b005b3480156109f257600080fd5b506109fb611b7d565b604051610a089190614988565b60405180910390f35b348015610a1d57600080fd5b50610a26611b83565b604051610a339190614988565b60405180910390f35b348015610a4857600080fd5b50610a51611b89565b604051610a5e9190614988565b60405180910390f35b348015610a7357600080fd5b50610a7c611b8f565b604051610a899190614988565b60405180910390f35b348015610a9e57600080fd5b50610ab96004803603810190610ab4919061485c565b611b95565b604051610ac691906148b7565b60405180910390f35b348015610adb57600080fd5b50610ae4611c62565b604051610af19190614988565b60405180910390f35b348015610b0657600080fd5b50610b216004803603810190610b1c919061485c565b611c68565b604051610b2e91906148b7565b60405180910390f35b348015610b4357600080fd5b50610b5e6004803603810190610b5991906148d2565b611c86565b005b348015610b6c57600080fd5b50610b876004803603810190610b8291906148d2565b611ddd565b604051610b9491906148b7565b60405180910390f35b348015610ba957600080fd5b50610bb2611dfd565b604051610bbf91906148b7565b60405180910390f35b348015610bd457600080fd5b50610bef6004803603810190610bea9190614b03565b611e10565b005b348015610bfd57600080fd5b50610c186004803603810190610c139190614b43565b611f50565b005b348015610c2657600080fd5b50610c416004803603810190610c3c91906149a3565b612069565b005b348015610c4f57600080fd5b50610c58612193565b604051610c6591906148b7565b60405180910390f35b348015610c7a57600080fd5b50610c836121a6565b604051610c909190614988565b60405180910390f35b348015610ca557600080fd5b50610cc06004803603810190610cbb91906149a3565b6121ac565b604051610ccd91906148b7565b60405180910390f35b348015610ce257600080fd5b50610ceb61231c565b604051610cf89190614988565b60405180910390f35b348015610d0d57600080fd5b50610d286004803603810190610d239190614bc3565b612322565b604051610d359190614988565b60405180910390f35b348015610d4a57600080fd5b50610d536123a9565b604051610d609190614988565b60405180910390f35b348015610d7557600080fd5b50610d7e6123af565b604051610d8b91906148b7565b60405180910390f35b348015610da057600080fd5b50610da961246a565b604051610db69190614988565b60405180910390f35b348015610dcb57600080fd5b50610dd4612470565b604051610de19190614988565b60405180910390f35b348015610df657600080fd5b50610dff612476565b604051610e0c9190614988565b60405180910390f35b348015610e2157600080fd5b50610e3c6004803603810190610e3791906148d2565b61247c565b005b348015610e4a57600080fd5b50610e656004803603810190610e6091906149a3565b612625565b604051610e7291906148b7565b60405180910390f35b606060038054610e8a90614c32565b80601f0160208091040260200160405190810160405280929190818152602001828054610eb690614c32565b8015610f035780601f10610ed857610100808354040283529160200191610f03565b820191906000526020600020905b815481529060010190602001808311610ee657829003601f168201915b5050505050905090565b6000610f21610f1a612985565b848461298d565b6001905092915050565b6000601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60216020528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b600f5481565b600b5481565b601e5481565b601d5481565b610fef612985565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461107e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107590614cb0565b60405180910390fd5b670de0b6b3a76400006103e86001611094610fc5565b61109e9190614cff565b6110a89190614d88565b6110b29190614d88565b8110156110f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110eb90614e2b565b60405180910390fd5b670de0b6b3a7640000816111089190614cff565b60088190555050565b600061111e848484612b58565b6111df8461112a612985565b6111da85604051806060016040528060288152602001615e0a60289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000611190612985565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546139da9092919063ffffffff16565b61298d565b600190509392505050565b61dead81565b600d5481565b600c60009054906101000a900460ff1681565b60006012905090565b60006112bb61121f612985565b846112b68560016000611230612985565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461292790919063ffffffff16565b61298d565b6001905092915050565b7f0000000000000000000000000b80221bee372b3e31cc84130f60f5d3ad3f192981565b601160009054906101000a900460ff1681565b6000602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60195481565b601160029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6113bb612985565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461144a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144190614cb0565b60405180910390fd5b61025883101561148f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148690614ebd565b60405180910390fd5b6103e882111580156114a2575060008210155b6114e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d890614f4f565b60405180910390fd5b82600d8190555081600b8190555080600c60006101000a81548160ff021916908315150217905550505050565b6000611518612985565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159e90614cb0565b60405180910390fd5b6000601160006101000a81548160ff0219169083151502179055506001905090565b6115d1612985565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611660576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165790614cb0565b60405180910390fd5b80602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60165481565b6116ef612985565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461177e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177590614cb0565b60405180910390fd5b8260168190555081601781905550806018819055506018546017546016546117a69190614f6f565b6117b09190614f6f565b601581905550601460155411156117fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f390615011565b60405180910390fd5b505050565b611809612985565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611898576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188f90614cb0565b60405180910390fd5b6001601160016101000a81548160ff0219169083151502179055506001601160026101000a81548160ff02191690831515021790555042600e81905550565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601a5481565b61190b612985565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461199a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199190614cb0565b60405180910390fd5b80601160026101000a81548160ff02191690831515021790555050565b6060600480546119c690614c32565b80601f01602080910402602001604051908101604052809291908181526020018280546119f290614c32565b8015611a3f5780601f10611a1457610100808354040283529160200191611a3f565b820191906000526020600020905b815481529060010190602001808311611a2257829003601f168201915b5050505050905090565b611a51612985565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ae0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad790614cb0565b60405180910390fd5b7f0000000000000000000000000b80221bee372b3e31cc84130f60f5d3ad3f192973ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b66906150a3565b60405180910390fd5b611b798282613a3e565b5050565b60185481565b60105481565b601f5481565b601c5481565b6000611c58611ba2612985565b84611c5385604051806060016040528060258152602001615e326025913960016000611bcc612985565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546139da9092919063ffffffff16565b61298d565b6001905092915050565b600e5481565b6000611c7c611c75612985565b8484612b58565b6001905092915050565b611c8e612985565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1490614cb0565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60226020528060005260406000206000915054906101000a900460ff1681565b601160019054906101000a900460ff1681565b611e18612985565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ea7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9e90614cb0565b60405180910390fd5b80602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611f4491906148b7565b60405180910390a25050565b611f58612985565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fe7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fde90614cb0565b60405180910390fd5b82601a8190555081601b8190555080601c81905550601c54601b54601a5461200f9190614f6f565b6120199190614f6f565b601981905550601980541115612064576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205b9061510f565b60405180910390fd5b505050565b612071612985565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612100576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120f790614cb0565b60405180910390fd5b670de0b6b3a76400006103e86005612116610fc5565b6121209190614cff565b61212a9190614d88565b6121349190614d88565b811015612176576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216d906151a1565b60405180910390fd5b670de0b6b3a76400008161218a9190614cff565b600a8190555050565b601460009054906101000a900460ff1681565b60085481565b60006121b6612985565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612245576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223c90614cb0565b60405180910390fd5b620186a06001612253610fc5565b61225d9190614cff565b6122679190614d88565b8210156122a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122a090615233565b60405180910390fd5b6103e860056122b6610fc5565b6122c09190614cff565b6122ca9190614d88565b82111561230c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612303906152c5565b60405180910390fd5b8160098190555060019050919050565b60155481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b60006123b9612985565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612448576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161243f90614cb0565b60405180910390fd5b6000601460006101000a81548160ff0219169083151502179055506001905090565b60175481565b601b5481565b600a5481565b612484612985565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612513576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161250a90614cb0565b60405180910390fd5b60011515601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514156125c9576000601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550612622565b6001601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b50565b600061262f612985565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146126be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126b590614cb0565b60405180910390fd5b600f546010546126ce9190614f6f565b421161270f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161270690615331565b60405180910390fd5b611388821115612754576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161274b906153c3565b60405180910390fd5b4260108190555060003073ffffffffffffffffffffffffffffffffffffffff166370a082317f0000000000000000000000000b80221bee372b3e31cc84130f60f5d3ad3f19296040518263ffffffff1660e01b81526004016127b69190614a32565b60206040518083038186803b1580156127ce57600080fd5b505afa1580156127e2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061280691906153f8565b905060006128316127106128238685613adf90919063ffffffff16565b613b5a90919063ffffffff16565b9050600081111561286a576128697f0000000000000000000000000b80221bee372b3e31cc84130f60f5d3ad3f192961dead83613ba4565b5b60007f0000000000000000000000000b80221bee372b3e31cc84130f60f5d3ad3f192990508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156128d757600080fd5b505af11580156128eb573d6000803e3d6000fd5b505050507f8462566617872a3fbab94534675218431ff9e204063ee3f4f43d965626a39abb60405160405180910390a160019350505050919050565b60008082846129369190614f6f565b90508381101561297b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161297290615471565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156129fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129f490615503565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612a6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a6490615595565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612b4b9190614988565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612bc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bbf90615627565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612c38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c2f906156b9565b60405180910390fd5b601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612cd95750601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612d225760018114612d21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d1890615725565b60405180910390fd5b5b6000811415612d3c57612d3783836000613ba4565b6139d5565b601160009054906101000a900460ff16156133ff57612d59613e39565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612dc75750612d97613e39565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612e005750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612e3a575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612e535750600560149054906101000a900460ff16155b156133fe57601160019054906101000a900460ff16612f4d57602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612f0d5750602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612f4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f4390615791565b60405180910390fd5b5b601460009054906101000a900460ff161561311557612f6a613e39565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612ff157507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561304957507f0000000000000000000000000b80221bee372b3e31cc84130f60f5d3ad3f192973ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156131145743601260003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054106130cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130c690615849565b60405180910390fd5b43601260003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156131b85750602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561325f57600854811115613202576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131f9906158db565b60405180910390fd5b600a5461320e8361136b565b826132199190614f6f565b111561325a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161325190615947565b60405180910390fd5b6133fd565b602260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156133025750602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156133515760085481111561334c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613343906159d9565b60405180910390fd5b6133fc565b602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166133fb57600a546133ae8361136b565b826133b99190614f6f565b11156133fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133f190615947565b60405180910390fd5b5b5b5b5b5b600061340a3061136b565b90506000600954821015905080801561342f5750601160029054906101000a900460ff165b80156134485750600560149054906101000a900460ff16155b801561349e5750602260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156134f45750602060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561354a5750602060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561358e576001600560146101000a81548160ff021916908315150217905550613572613e63565b6000600560146101000a81548160ff0219169083151502179055505b600560149054906101000a900460ff161580156135f45750602260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b801561360c5750600c60009054906101000a900460ff165b80156136275750600d54600e546136239190614f6f565b4210155b801561367d5750602060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561368c5761368a61414a565b505b6000600560149054906101000a900460ff16159050602060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806137425750602060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561374c57600090505b600081156139c557602260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156137af57506000601954115b1561387c576137dc60646137ce60195488613adf90919063ffffffff16565b613b5a90919063ffffffff16565b9050601954601b54826137ef9190614cff565b6137f99190614d88565b601e600082825461380a9190614f6f565b92505081905550601954601c54826138229190614cff565b61382c9190614d88565b601f600082825461383d9190614f6f565b92505081905550601954601a54826138559190614cff565b61385f9190614d88565b601d60008282546138709190614f6f565b925050819055506139a1565b602260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156138d757506000601554115b156139a05761390460646138f660155488613adf90919063ffffffff16565b613b5a90919063ffffffff16565b9050601554601754826139179190614cff565b6139219190614d88565b601e60008282546139329190614f6f565b925050819055506015546018548261394a9190614cff565b6139549190614d88565b601f60008282546139659190614f6f565b925050819055506015546016548261397d9190614cff565b6139879190614d88565b601d60008282546139989190614f6f565b925050819055505b5b60008111156139b6576139b5873083613ba4565b5b80856139c291906159f9565b94505b6139d0878787613ba4565b505050505b505050565b6000838311158290613a22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a1991906147a1565b60405180910390fd5b5060008385613a3191906159f9565b9050809150509392505050565b80602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600080831415613af25760009050613b54565b60008284613b009190614cff565b9050828482613b0f9190614d88565b14613b4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b4690615a9f565b60405180910390fd5b809150505b92915050565b6000613b9c83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061431f565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613c14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c0b90615627565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613c84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c7b906156b9565b60405180910390fd5b613c8f838383614382565b613cfa81604051806060016040528060268152602001615de4602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546139da9092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613d8d816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461292790919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613e2c9190614988565b60405180910390a3505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000613e6e3061136b565b90506000601f54601d54601e54613e859190614f6f565b613e8f9190614f6f565b9050600080831480613ea15750600082145b15613eae57505050614148565b6014600954613ebd9190614cff565b831115613ed6576014600954613ed39190614cff565b92505b6000600283601e5486613ee99190614cff565b613ef39190614d88565b613efd9190614d88565b90506000613f14828661438790919063ffffffff16565b90506000479050613f24826143d1565b6000613f39824761438790919063ffffffff16565b90506000613f6487613f56601d5485613adf90919063ffffffff16565b613b5a90919063ffffffff16565b90506000613f8f88613f81601f5486613adf90919063ffffffff16565b613b5a90919063ffffffff16565b90506000818385613fa091906159f9565b613faa91906159f9565b90506000601e819055506000601d819055506000601f81905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161400a90615af0565b60006040518083038185875af1925050503d8060008114614047576040519150601f19603f3d011682016040523d82523d6000602084013e61404c565b606091505b5050809850506000871180156140625750600081115b156140af57614071878261461d565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618682601e546040516140a693929190615b05565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516140f590615af0565b60006040518083038185875af1925050503d8060008114614132576040519150601f19603f3d011682016040523d82523d6000602084013e614137565b606091505b505080985050505050505050505050505b565b600042600e8190555060003073ffffffffffffffffffffffffffffffffffffffff166370a082317f0000000000000000000000000b80221bee372b3e31cc84130f60f5d3ad3f19296040518263ffffffff1660e01b81526004016141ae9190614a32565b60206040518083038186803b1580156141c657600080fd5b505afa1580156141da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141fe91906153f8565b9050600061422b61271061421d600b5485613adf90919063ffffffff16565b613b5a90919063ffffffff16565b90506000811115614264576142637f0000000000000000000000000b80221bee372b3e31cc84130f60f5d3ad3f192961dead83613ba4565b5b60007f0000000000000000000000000b80221bee372b3e31cc84130f60f5d3ad3f192990508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156142d157600080fd5b505af11580156142e5573d6000803e3d6000fd5b505050507f454c91ae84fcc766ddda0dcb289f26b3d0176efeacf4061fc219fa6ca8c3048d60405160405180910390a16001935050505090565b60008083118290614366576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161435d91906147a1565b60405180910390fd5b50600083856143759190614d88565b9050809150509392505050565b505050565b60006143c983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506139da565b905092915050565b6000600267ffffffffffffffff8111156143ee576143ed615b3c565b5b60405190808252806020026020018201604052801561441c5781602001602082028036833780820191505090505b509050308160008151811061443457614433615b6b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156144d457600080fd5b505afa1580156144e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061450c9190615baf565b816001815181106145205761451f615b6b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050614585307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8461298d565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016145e7959493929190615cd5565b600060405180830381600087803b15801561460157600080fd5b505af1158015614615573d6000803e3d6000fd5b505050505050565b614648307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8461298d565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b81526004016146af96959493929190615d2f565b6060604051808303818588803b1580156146c857600080fd5b505af11580156146dc573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906147019190615d90565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015614742578082015181840152602081019050614727565b83811115614751576000848401525b50505050565b6000601f19601f8301169050919050565b600061477382614708565b61477d8185614713565b935061478d818560208601614724565b61479681614757565b840191505092915050565b600060208201905081810360008301526147bb8184614768565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006147f3826147c8565b9050919050565b614803816147e8565b811461480e57600080fd5b50565b600081359050614820816147fa565b92915050565b6000819050919050565b61483981614826565b811461484457600080fd5b50565b60008135905061485681614830565b92915050565b60008060408385031215614873576148726147c3565b5b600061488185828601614811565b925050602061489285828601614847565b9150509250929050565b60008115159050919050565b6148b18161489c565b82525050565b60006020820190506148cc60008301846148a8565b92915050565b6000602082840312156148e8576148e76147c3565b5b60006148f684828501614811565b91505092915050565b6000819050919050565b600061492461491f61491a846147c8565b6148ff565b6147c8565b9050919050565b600061493682614909565b9050919050565b60006149488261492b565b9050919050565b6149588161493d565b82525050565b6000602082019050614973600083018461494f565b92915050565b61498281614826565b82525050565b600060208201905061499d6000830184614979565b92915050565b6000602082840312156149b9576149b86147c3565b5b60006149c784828501614847565b91505092915050565b6000806000606084860312156149e9576149e86147c3565b5b60006149f786828701614811565b9350506020614a0886828701614811565b9250506040614a1986828701614847565b9150509250925092565b614a2c816147e8565b82525050565b6000602082019050614a476000830184614a23565b92915050565b600060ff82169050919050565b614a6381614a4d565b82525050565b6000602082019050614a7e6000830184614a5a565b92915050565b614a8d8161489c565b8114614a9857600080fd5b50565b600081359050614aaa81614a84565b92915050565b600080600060608486031215614ac957614ac86147c3565b5b6000614ad786828701614847565b9350506020614ae886828701614847565b9250506040614af986828701614a9b565b9150509250925092565b60008060408385031215614b1a57614b196147c3565b5b6000614b2885828601614811565b9250506020614b3985828601614a9b565b9150509250929050565b600080600060608486031215614b5c57614b5b6147c3565b5b6000614b6a86828701614847565b9350506020614b7b86828701614847565b9250506040614b8c86828701614847565b9150509250925092565b600060208284031215614bac57614bab6147c3565b5b6000614bba84828501614a9b565b91505092915050565b60008060408385031215614bda57614bd96147c3565b5b6000614be885828601614811565b9250506020614bf985828601614811565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614c4a57607f821691505b60208210811415614c5e57614c5d614c03565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614c9a602083614713565b9150614ca582614c64565b602082019050919050565b60006020820190508181036000830152614cc981614c8d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614d0a82614826565b9150614d1583614826565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614d4e57614d4d614cd0565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614d9382614826565b9150614d9e83614826565b925082614dae57614dad614d59565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b6000614e15602f83614713565b9150614e2082614db9565b604082019050919050565b60006020820190508181036000830152614e4481614e08565b9050919050565b7f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e20746860008201527f616e206576657279203130206d696e7574657300000000000000000000000000602082015250565b6000614ea7603383614713565b9150614eb282614e4b565b604082019050919050565b60006020820190508181036000830152614ed681614e9a565b9050919050565b7f4d75737420736574206175746f204c50206275726e2070657263656e7420626560008201527f747765656e20302520616e642031302500000000000000000000000000000000602082015250565b6000614f39603083614713565b9150614f4482614edd565b604082019050919050565b60006020820190508181036000830152614f6881614f2c565b9050919050565b6000614f7a82614826565b9150614f8583614826565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614fba57614fb9614cd0565b5b828201905092915050565b7f4d757374206b656570206665657320617420323025206f72206c657373000000600082015250565b6000614ffb601d83614713565b915061500682614fc5565b602082019050919050565b6000602082019050818103600083015261502a81614fee565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b600061508d603983614713565b915061509882615031565b604082019050919050565b600060208201905081810360008301526150bc81615080565b9050919050565b7f4d757374206b656570206665657320617420323525206f72206c657373000000600082015250565b60006150f9601d83614713565b9150615104826150c3565b602082019050919050565b60006020820190508181036000830152615128816150ec565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b600061518b602483614713565b91506151968261512f565b604082019050919050565b600060208201905081810360008301526151ba8161517e565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b600061521d603583614713565b9150615228826151c1565b604082019050919050565b6000602082019050818103600083015261524c81615210565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b60006152af603483614713565b91506152ba82615253565b604082019050919050565b600060208201905081810360008301526152de816152a2565b9050919050565b7f4d757374207761697420666f7220636f6f6c646f776e20746f2066696e697368600082015250565b600061531b602083614713565b9150615326826152e5565b602082019050919050565b6000602082019050818103600083015261534a8161530e565b9050919050565b7f4d6179206e6f74206e756b65206d6f7265207468616e20313025206f6620746f60008201527f6b656e7320696e204c5000000000000000000000000000000000000000000000602082015250565b60006153ad602a83614713565b91506153b882615351565b604082019050919050565b600060208201905081810360008301526153dc816153a0565b9050919050565b6000815190506153f281614830565b92915050565b60006020828403121561540e5761540d6147c3565b5b600061541c848285016153e3565b91505092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600061545b601b83614713565b915061546682615425565b602082019050919050565b6000602082019050818103600083015261548a8161544e565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006154ed602483614713565b91506154f882615491565b604082019050919050565b6000602082019050818103600083015261551c816154e0565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061557f602283614713565b915061558a82615523565b604082019050919050565b600060208201905081810360008301526155ae81615572565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000615611602583614713565b915061561c826155b5565b604082019050919050565b6000602082019050818103600083015261564081615604565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006156a3602383614713565b91506156ae82615647565b604082019050919050565b600060208201905081810360008301526156d281615696565b9050919050565b7f616d6f756e742061626f7665206d61782072657472616e636500000000000000600082015250565b600061570f601983614713565b915061571a826156d9565b602082019050919050565b6000602082019050818103600083015261573e81615702565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b600061577b601683614713565b915061578682615745565b602082019050919050565b600060208201905081810360008301526157aa8161576e565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b6000615833604983614713565b915061583e826157b1565b606082019050919050565b6000602082019050818103600083015261586281615826565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b60006158c5603583614713565b91506158d082615869565b604082019050919050565b600060208201905081810360008301526158f4816158b8565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000615931601383614713565b915061593c826158fb565b602082019050919050565b6000602082019050818103600083015261596081615924565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b60006159c3603683614713565b91506159ce82615967565b604082019050919050565b600060208201905081810360008301526159f2816159b6565b9050919050565b6000615a0482614826565b9150615a0f83614826565b925082821015615a2257615a21614cd0565b5b828203905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000615a89602183614713565b9150615a9482615a2d565b604082019050919050565b60006020820190508181036000830152615ab881615a7c565b9050919050565b600081905092915050565b50565b6000615ada600083615abf565b9150615ae582615aca565b600082019050919050565b6000615afb82615acd565b9150819050919050565b6000606082019050615b1a6000830186614979565b615b276020830185614979565b615b346040830184614979565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050615ba9816147fa565b92915050565b600060208284031215615bc557615bc46147c3565b5b6000615bd384828501615b9a565b91505092915050565b6000819050919050565b6000615c01615bfc615bf784615bdc565b6148ff565b614826565b9050919050565b615c1181615be6565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b615c4c816147e8565b82525050565b6000615c5e8383615c43565b60208301905092915050565b6000602082019050919050565b6000615c8282615c17565b615c8c8185615c22565b9350615c9783615c33565b8060005b83811015615cc8578151615caf8882615c52565b9750615cba83615c6a565b925050600181019050615c9b565b5085935050505092915050565b600060a082019050615cea6000830188614979565b615cf76020830187615c08565b8181036040830152615d098186615c77565b9050615d186060830185614a23565b615d256080830184614979565b9695505050505050565b600060c082019050615d446000830189614a23565b615d516020830188614979565b615d5e6040830187615c08565b615d6b6060830186615c08565b615d786080830185614a23565b615d8560a0830184614979565b979650505050505050565b600080600060608486031215615da957615da86147c3565b5b6000615db7868287016153e3565b9350506020615dc8868287016153e3565b9250506040615dd9868287016153e3565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220d267f8217f9958fedcd55a152276a7f7a3279941d258f3e9477974d86f70237f64736f6c63430008090033

Deployed Bytecode Sourcemap

29544:16388:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9762:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11537:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34884:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31122:64;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29621:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10490:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30197:46;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30009:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30982:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30942;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35003:234;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11939:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29724:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30104:44;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30065:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10332:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12625:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29679:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30294:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37366:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30793:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30374:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10661:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44140:447;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34015:120;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35472:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29816:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30682;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35741:369;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33848:155;;;;;;;;;;;;;:::i;:::-;;29853:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30828:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35628:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9981:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36698:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30756:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30250:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31022:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30904:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13346:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30155:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11001:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37146:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31195:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30334:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36508:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36122:378;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35245:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30592:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29890:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34293:381;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30648:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11239:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29932:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34147:134;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30719:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30866:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29972:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34686:190;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45181:748;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9762:100;9816:13;9849:5;9842:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9762:100;:::o;11537:169::-;11620:4;11637:39;11646:12;:10;:12::i;:::-;11660:7;11669:6;11637:8;:39::i;:::-;11694:4;11687:11;;11537:169;;;;:::o;34884:111::-;34943:4;34967:11;:20;34979:7;34967:20;;;;;;;;;;;;;;;;;;;;;;;;;34960:27;;34884:111;;;:::o;31122:64::-;;;;;;;;;;;;;;;;;;;;;;:::o;29621:51::-;;;:::o;10490:108::-;10551:7;10578:12;;10571:19;;10490:108;:::o;30197:46::-;;;;:::o;30009:36::-;;;;:::o;30982:33::-;;;;:::o;30942:::-;;;;:::o;35003:234::-;22643:12;:10;:12::i;:::-;22633:22;;:6;;;;;;;;;;;:22;;;22625:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35122:4:::1;35116;35112:1;35096:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;35095:31;;;;:::i;:::-;35085:6;:41;;35077:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;35222:6;35212;:17;;;;:::i;:::-;35189:20;:40;;;;35003:234:::0;:::o;11939:355::-;12079:4;12096:36;12106:6;12114:9;12125:6;12096:9;:36::i;:::-;12143:121;12152:6;12160:12;:10;:12::i;:::-;12174:89;12212:6;12174:89;;;;;;;;;;;;;;;;;:11;:19;12186:6;12174:19;;;;;;;;;;;;;;;:33;12194:12;:10;:12::i;:::-;12174:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;12143:8;:121::i;:::-;12282:4;12275:11;;11939:355;;;;;:::o;29724:53::-;29770:6;29724:53;:::o;30104:44::-;;;;:::o;30065:32::-;;;;;;;;;;;;;:::o;10332:93::-;10390:5;10415:2;10408:9;;10332:93;:::o;12625:218::-;12713:4;12730:83;12739:12;:10;:12::i;:::-;12753:7;12762:50;12801:10;12762:11;:25;12774:12;:10;:12::i;:::-;12762:25;;;;;;;;;;;;;;;:34;12788:7;12762:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;12730:8;:83::i;:::-;12831:4;12824:11;;12625:218;;;;:::o;29679:38::-;;;:::o;30294:33::-;;;;;;;;;;;;;:::o;37366:125::-;37431:4;37455:19;:28;37475:7;37455:28;;;;;;;;;;;;;;;;;;;;;;;;;37448:35;;37366:125;;;:::o;30793:28::-;;;;:::o;30374:31::-;;;;;;;;;;;;;:::o;10661:127::-;10735:7;10762:9;:18;10772:7;10762:18;;;;;;;;;;;;;;;;10755:25;;10661:127;;;:::o;44140:447::-;22643:12;:10;:12::i;:::-;22633:22;;:6;;;;;;;;;;;:22;;;22625:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;44294:3:::1;44271:19;:26;;44263:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;44384:4;44372:8;:16;;:33;;;;;44404:1;44392:8;:13;;44372:33;44364:94;;;;;;;;;;;;:::i;:::-;;;;;;;;;44487:19;44469:15;:37;;;;44536:8;44517:16;:27;;;;44571:8;44555:13;;:24;;;;;;;;;;;;;;;;;;44140:447:::0;;;:::o;34015:120::-;34067:4;22643:12;:10;:12::i;:::-;22633:22;;:6;;;;;;;;;;;:22;;;22625:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34100:5:::1;34083:14;;:22;;;;;;;;;;;;;;;;;;34123:4;34116:11;;34015:120:::0;:::o;35472:144::-;22643:12;:10;:12::i;:::-;22633:22;;:6;;;;;;;;;;;:22;;;22625:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35604:4:::1;35562:31;:39;35594:6;35562:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;35472:144:::0;;:::o;29816:30::-;;;;;;;;;;;;;:::o;30682:::-;;;;:::o;35741:369::-;22643:12;:10;:12::i;:::-;22633:22;;:6;;;;;;;;;;;:22;;;22625:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35875:13:::1;35857:15;:31;;;;35917:13;35899:15;:31;;;;35953:7;35941:9;:19;;;;36022:9;;36004:15;;35986;;:33;;;;:::i;:::-;:45;;;;:::i;:::-;35971:12;:60;;;;36066:2;36050:12;;:18;;36042:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;35741:369:::0;;;:::o;33848:155::-;22643:12;:10;:12::i;:::-;22633:22;;:6;;;;;;;;;;;:22;;;22625:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33919:4:::1;33903:13;;:20;;;;;;;;;;;;;;;;;;33948:4;33934:11;;:18;;;;;;;;;;;;;;;;;;33980:15;33963:14;:32;;;;33848:155::o:0;29853:24::-;;;;;;;;;;;;;:::o;30828:31::-;;;;:::o;35628:101::-;22643:12;:10;:12::i;:::-;22633:22;;:6;;;;;;;;;;;:22;;;22625:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35714:7:::1;35700:11;;:21;;;;;;;;;;;;;;;;;;35628:101:::0;:::o;9981:104::-;10037:13;10070:7;10063:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9981:104;:::o;36698:244::-;22643:12;:10;:12::i;:::-;22633:22;;:6;;;;;;;;;;;:22;;;22625:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36805:13:::1;36797:21;;:4;:21;;;;36789:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;36893:41;36922:4;36928:5;36893:28;:41::i;:::-;36698:244:::0;;:::o;30756:24::-;;;;:::o;30250:35::-;;;;:::o;31022:27::-;;;;:::o;30904:25::-;;;;:::o;13346:269::-;13439:4;13456:129;13465:12;:10;:12::i;:::-;13479:7;13488:96;13527:15;13488:96;;;;;;;;;;;;;;;;;:11;:25;13500:12;:10;:12::i;:::-;13488:25;;;;;;;;;;;;;;;:34;13514:7;13488:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;13456:8;:129::i;:::-;13603:4;13596:11;;13346:269;;;;:::o;30155:29::-;;;;:::o;11001:175::-;11087:4;11104:42;11114:12;:10;:12::i;:::-;11128:9;11139:6;11104:9;:42::i;:::-;11164:4;11157:11;;11001:175;;;;:::o;37146:208::-;22643:12;:10;:12::i;:::-;22633:22;;:6;;;;;;;;;;;:22;;;22625:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37283:15:::1;;;;;;;;;;;37240:59;;37263:18;37240:59;;;;;;;;;;;;37328:18;37310:15;;:36;;;;;;;;;;;;;;;;;;37146:208:::0;:::o;31195:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;30334:33::-;;;;;;;;;;;;;:::o;36508:182::-;22643:12;:10;:12::i;:::-;22633:22;;:6;;;;;;;;;;;:22;;;22625:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36624:8:::1;36593:19;:28;36613:7;36593:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;36664:7;36648:34;;;36673:8;36648:34;;;;;;:::i;:::-;;;;;;;;36508:182:::0;;:::o;36122:378::-;22643:12;:10;:12::i;:::-;22633:22;;:6;;;;;;;;;;;:22;;;22625:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36258:13:::1;36239:16;:32;;;;36301:13;36282:16;:32;;;;36338:7;36325:10;:20;;;;36410:10;;36391:16;;36372;;:35;;;;:::i;:::-;:48;;;;:::i;:::-;36356:13;:64;;;;36456:2;36439:13:::0;::::1;:19;;36431:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;36122:378:::0;;;:::o;35245:215::-;22643:12;:10;:12::i;:::-;22633:22;;:6;;;;;;;;;;;:22;;;22625:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35367:4:::1;35361;35357:1;35341:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;35340:31;;;;:::i;:::-;35330:6;:41;;35322:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;35445:6;35435;:17;;;;:::i;:::-;35423:9;:29;;;;35245:215:::0;:::o;30592:39::-;;;;;;;;;;;;;:::o;29890:35::-;;;;:::o;34293:381::-;34374:4;22643:12;:10;:12::i;:::-;22633:22;;:6;;;;;;;;;;;:22;;;22625:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34430:6:::1;34426:1;34410:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:26;;;;:::i;:::-;34397:9;:39;;34389:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;34545:4;34541:1;34525:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;34512:9;:37;;34504:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;34637:9;34616:18;:30;;;;34663:4;34656:11;;34293:381:::0;;;:::o;30648:27::-;;;;:::o;11239:151::-;11328:7;11355:11;:18;11367:5;11355:18;;;;;;;;;;;;;;;:27;11374:7;11355:27;;;;;;;;;;;;;;;;11348:34;;11239:151;;;;:::o;29932:33::-;;;;:::o;34147:134::-;34207:4;22643:12;:10;:12::i;:::-;22633:22;;:6;;;;;;;;;;;:22;;;22625:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34246:5:::1;34223:20;;:28;;;;;;;;;;;;;;;;;;34269:4;34262:11;;34147:134:::0;:::o;30719:30::-;;;;:::o;30866:31::-;;;;:::o;29972:24::-;;;;:::o;34686:190::-;22643:12;:10;:12::i;:::-;22633:22;;:6;;;;;;;;;;;:22;;;22625:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34787:4:::1;34763:28;;:11;:20;34775:7;34763:20;;;;;;;;;;;;;;;;;;;;;;;;;:28;;;34759:110;;;34817:5;34794:11;:20;34806:7;34794:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;34759:110;;;34863:4;34840:11;:20;34852:7;34840:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;34759:110;34686:190:::0;:::o;45181:748::-;45265:4;22643:12;:10;:12::i;:::-;22633:22;;:6;;;;;;;;;;;:22;;;22625:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;45330:19:::1;;45307:20;;:42;;;;:::i;:::-;45289:15;:60;45281:106;;;;;;;;;;;;:::i;:::-;;;;;;;;;45417:4;45406:7;:15;;45398:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;45502:15;45479:20;:38;;;;45528:28;45559:4;:14;;;45574:13;45559:29;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;45528:60;;45599:20;45622:44;45660:5;45622:33;45647:7;45622:20;:24;;:33;;;;:::i;:::-;:37;;:44;;;;:::i;:::-;45599:67;;45696:1;45681:12;:16;45677:109;;;45713:61;45729:13;45752:6;45761:12;45713:15;:61::i;:::-;45677:109;45796:19;45833:13;45796:51;;45858:4;:9;;;:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;45885:14;;;;;;;;;;45917:4;45910:11;;;;;45181:748:::0;;;:::o;17722:181::-;17780:7;17800:9;17816:1;17812;:5;;;;:::i;:::-;17800:17;;17841:1;17836;:6;;17828:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;17894:1;17887:8;;;17722:181;;;;:::o;2831:98::-;2884:7;2911:10;2904:17;;2831:98;:::o;16344:380::-;16497:1;16480:19;;:5;:19;;;;16472:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16578:1;16559:21;;:7;:21;;;;16551:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16662:6;16632:11;:18;16644:5;16632:18;;;;;;;;;;;;;;;:27;16651:7;16632:27;;;;;;;;;;;;;;;:36;;;;16700:7;16684:32;;16693:5;16684:32;;;16709:6;16684:32;;;;;;:::i;:::-;;;;;;;;16344:380;;;:::o;37553:4080::-;37701:1;37685:18;;:4;:18;;;;37677:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37778:1;37764:16;;:2;:16;;;;37756:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;37847:11;:17;37859:4;37847:17;;;;;;;;;;;;;;;;;;;;;;;;;:36;;;;37868:11;:15;37880:2;37868:15;;;;;;;;;;;;;;;;;;;;;;;;;37847:36;37843:104;;;37916:1;37906:6;:11;37898:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;37843:104;37974:1;37964:6;:11;37961:92;;;37992:28;38008:4;38014:2;38018:1;37992:15;:28::i;:::-;38035:7;;37961:92;38076:14;;;;;;;;;;;38073:1650;;;38136:7;:5;:7::i;:::-;38128:15;;:4;:15;;;;:49;;;;;38170:7;:5;:7::i;:::-;38164:13;;:2;:13;;;;38128:49;:86;;;;;38212:1;38198:16;;:2;:16;;;;38128:86;:128;;;;;38249:6;38235:21;;:2;:21;;;;38128:128;:158;;;;;38278:8;;;;;;;;;;;38277:9;38128:158;38106:1606;;;38324:13;;;;;;;;;;;38320:148;;38369:19;:25;38389:4;38369:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;38398:19;:23;38418:2;38398:23;;;;;;;;;;;;;;;;;;;;;;;;;38369:52;38361:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;38320:148;38492:20;;;;;;;;;;;38488:423;;;38546:7;:5;:7::i;:::-;38540:13;;:2;:13;;;;:47;;;;;38571:15;38557:30;;:2;:30;;;;38540:47;:79;;;;;38605:13;38591:28;;:2;:28;;;;38540:79;38536:356;;;38697:12;38655:28;:39;38684:9;38655:39;;;;;;;;;;;;;;;;:54;38647:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;38856:12;38814:28;:39;38843:9;38814:39;;;;;;;;;;;;;;;:54;;;;38536:356;38488:423;38952:25;:31;38978:4;38952:31;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;38988:31;:35;39020:2;38988:35;;;;;;;;;;;;;;;;;;;;;;;;;38987:36;38952:71;38948:749;;;39070:20;;39060:6;:30;;39052:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;39209:9;;39192:13;39202:2;39192:9;:13::i;:::-;39183:6;:22;;;;:::i;:::-;:35;;39175:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;38948:749;;;39307:25;:29;39333:2;39307:29;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;39341:31;:37;39373:4;39341:37;;;;;;;;;;;;;;;;;;;;;;;;;39340:38;39307:71;39303:394;;;39425:20;;39415:6;:30;;39407:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;39303:394;;;39551:31;:35;39583:2;39551:35;;;;;;;;;;;;;;;;;;;;;;;;;39547:150;;39644:9;;39627:13;39637:2;39627:9;:13::i;:::-;39618:6;:22;;;;:::i;:::-;:35;;39610:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;39547:150;39303:394;38948:749;38106:1606;38073:1650;39757:28;39788:24;39806:4;39788:9;:24::i;:::-;39757:55;;39833:12;39872:18;;39848:20;:42;;39833:57;;39921:7;:35;;;;;39945:11;;;;;;;;;;;39921:35;:61;;;;;39974:8;;;;;;;;;;;39973:9;39921:61;:110;;;;;40000:25;:31;40026:4;40000:31;;;;;;;;;;;;;;;;;;;;;;;;;39999:32;39921:110;:153;;;;;40049:19;:25;40069:4;40049:25;;;;;;;;;;;;;;;;;;;;;;;;;40048:26;39921:153;:194;;;;;40092:19;:23;40112:2;40092:23;;;;;;;;;;;;;;;;;;;;;;;;;40091:24;39921:194;39903:338;;;40153:4;40142:8;;:15;;;;;;;;;;;;;;;;;;40186:10;:8;:10::i;:::-;40224:5;40213:8;;:16;;;;;;;;;;;;;;;;;;39903:338;40265:8;;;;;;;;;;;40264:9;:42;;;;;40277:25;:29;40303:2;40277:29;;;;;;;;;;;;;;;;;;;;;;;;;40264:42;:59;;;;;40310:13;;;;;;;;;;;40264:59;:114;;;;;40363:15;;40346:14;;:32;;;;:::i;:::-;40327:15;:51;;40264:114;:144;;;;;40383:19;:25;40403:4;40383:25;;;;;;;;;;;;;;;;;;;;;;;;;40382:26;40264:144;40261:204;;;40424:29;:27;:29::i;:::-;;40261:204;40477:12;40493:8;;;;;;;;;;;40492:9;40477:24;;40517:19;:25;40537:4;40517:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;40546:19;:23;40566:2;40546:23;;;;;;;;;;;;;;;;;;;;;;;;;40517:52;40514:99;;;40596:5;40586:15;;40514:99;40633:12;40663:7;40660:920;;;40690:25;:29;40716:2;40690:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;40739:1;40723:13;;:17;40690:50;40686:725;;;40767:34;40797:3;40767:25;40778:13;;40767:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;40760:41;;40868:13;;40849:16;;40842:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;40820:18;;:61;;;;;;;:::i;:::-;;;;;;;;40936:13;;40923:10;;40916:4;:17;;;;:::i;:::-;:33;;;;:::i;:::-;40900:12;;:49;;;;;;;:::i;:::-;;;;;;;;41016:13;;40997:16;;40990:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;40968:18;;:61;;;;;;;:::i;:::-;;;;;;;;40686:725;;;41067:25;:31;41093:4;41067:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;41117:1;41102:12;;:16;41067:51;41064:347;;;41143:33;41172:3;41143:24;41154:12;;41143:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;41136:40;;41239:12;;41221:15;;41214:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;41192:18;;:59;;;;;;;:::i;:::-;;;;;;;;41305:12;;41293:9;;41286:4;:16;;;;:::i;:::-;:31;;;;:::i;:::-;41270:12;;:47;;;;;;;:::i;:::-;;;;;;;;41383:12;;41365:15;;41358:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;41336:18;;:59;;;;;;;:::i;:::-;;;;;;;;41064:347;40686:725;41449:1;41442:4;:8;41439:93;;;41474:42;41490:4;41504;41511;41474:15;:42::i;:::-;41439:93;41564:4;41554:14;;;;;:::i;:::-;;;40660:920;41592:33;41608:4;41614:2;41618:6;41592:15;:33::i;:::-;37666:3967;;;;37553:4080;;;;:::o;18625:192::-;18711:7;18744:1;18739;:6;;18747:12;18731:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;18771:9;18787:1;18783;:5;;;;:::i;:::-;18771:17;;18808:1;18801:8;;;18625:192;;;;;:::o;36950:188::-;37067:5;37033:25;:31;37059:4;37033:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;37124:5;37090:40;;37118:4;37090:40;;;;;;;;;;;;36950:188;;:::o;19076:471::-;19134:7;19384:1;19379;:6;19375:47;;;19409:1;19402:8;;;;19375:47;19434:9;19450:1;19446;:5;;;;:::i;:::-;19434:17;;19479:1;19474;19470;:5;;;;:::i;:::-;:10;19462:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;19538:1;19531:8;;;19076:471;;;;;:::o;20023:132::-;20081:7;20108:39;20112:1;20115;20108:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;20101:46;;20023:132;;;;:::o;13917:573::-;14075:1;14057:20;;:6;:20;;;;14049:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;14159:1;14138:23;;:9;:23;;;;14130:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;14214:47;14235:6;14243:9;14254:6;14214:20;:47::i;:::-;14294:71;14316:6;14294:71;;;;;;;;;;;;;;;;;:9;:17;14304:6;14294:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;14274:9;:17;14284:6;14274:17;;;;;;;;;;;;;;;:91;;;;14399:32;14424:6;14399:9;:20;14409:9;14399:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;14376:9;:20;14386:9;14376:20;;;;;;;;;;;;;;;:55;;;;14464:9;14447:35;;14456:6;14447:35;;;14475:6;14447:35;;;;;;:::i;:::-;;;;;;;;13917:573;;;:::o;22504:81::-;22544:7;22571:6;;;;;;;;;;;22564:13;;22504:81;:::o;42511:1617::-;42550:23;42576:24;42594:4;42576:9;:24::i;:::-;42550:50;;42611:25;42681:12;;42660:18;;42639;;:39;;;;:::i;:::-;:54;;;;:::i;:::-;42611:82;;42704:12;42759:1;42740:15;:20;:46;;;;42785:1;42764:17;:22;42740:46;42737:60;;;42789:7;;;;;42737:60;42851:2;42830:18;;:23;;;;:::i;:::-;42812:15;:41;42809:111;;;42906:2;42885:18;;:23;;;;:::i;:::-;42867:41;;42809:111;42940:23;43025:1;43005:17;42984:18;;42966:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;42940:86;;43037:26;43066:36;43086:15;43066;:19;;:36;;;;:::i;:::-;43037:65;;43123:25;43151:21;43123:49;;43185:36;43202:18;43185:16;:36::i;:::-;43243:18;43264:44;43290:17;43264:21;:25;;:44;;;;:::i;:::-;43243:65;;43329:23;43355:57;43394:17;43355:34;43370:18;;43355:10;:14;;:34;;;;:::i;:::-;:38;;:57;;;;:::i;:::-;43329:83;;43423:17;43443:51;43476:17;43443:28;43458:12;;43443:10;:14;;:28;;;;:::i;:::-;:32;;:51;;;;:::i;:::-;43423:71;;43525:23;43582:9;43564:15;43551:10;:28;;;;:::i;:::-;:40;;;;:::i;:::-;43525:66;;43643:1;43622:18;:22;;;;43676:1;43655:18;:22;;;;43703:1;43688:12;:16;;;;43746:9;;;;;;;;;;;43738:23;;43769:9;43738:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43725:58;;;;;43825:1;43807:15;:19;:42;;;;;43848:1;43830:15;:19;43807:42;43804:210;;;43865:46;43878:15;43895;43865:12;:46::i;:::-;43931:71;43946:18;43966:15;43983:18;;43931:71;;;;;;;;:::i;:::-;;;;;;;;43804:210;44065:15;;;;;;;;;;;44057:29;;44094:21;44057:63;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44044:76;;;;;42539:1589;;;;;;;;;;42511:1617;:::o;44599:574::-;44656:4;44699:15;44682:14;:32;;;;44735:28;44766:4;:14;;;44781:13;44766:29;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;44735:60;;44816:20;44839:53;44886:5;44839:42;44864:16;;44839:20;:24;;:42;;;;:::i;:::-;:46;;:53;;;;:::i;:::-;44816:76;;44932:1;44917:12;:16;44913:109;;;44949:61;44965:13;44988:6;44997:12;44949:15;:61::i;:::-;44913:109;45042:19;45079:13;45042:51;;45104:4;:9;;;:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45131:12;;;;;;;;;;45161:4;45154:11;;;;;44599:574;:::o;20651:278::-;20737:7;20769:1;20765;:5;20772:12;20757:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;20796:9;20812:1;20808;:5;;;;:::i;:::-;20796:17;;20920:1;20913:8;;;20651:278;;;;;:::o;17327:125::-;;;;:::o;18186:136::-;18244:7;18271:43;18275:1;18278;18271:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;18264:50;;18186:136;;;;:::o;41641:487::-;41709:21;41747:1;41733:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41709:40;;41778:4;41760;41765:1;41760:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;41804:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41794:4;41799:1;41794:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;41839:62;41856:4;41871:15;41889:11;41839:8;:62::i;:::-;41914:15;:66;;;41995:11;42021:1;42037:4;42064;42084:15;41914:196;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41696:432;41641:487;:::o;42140:363::-;42221:62;42238:4;42253:15;42271:11;42221:8;:62::i;:::-;42293:15;:31;;;42332:9;42365:4;42385:11;42411:1;42427;29770:6;42469:15;42293:202;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;42140:363;;:::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:307::-;355:1;365:113;379:6;376:1;373:13;365:113;;;464:1;459:3;455:11;449:18;445:1;440:3;436:11;429:39;401:2;398:1;394:10;389:15;;365:113;;;496:6;493:1;490:13;487:101;;;576:1;567:6;562:3;558:16;551:27;487:101;336:258;287:307;;;:::o;600:102::-;641:6;692:2;688:7;683:2;676:5;672:14;668:28;658:38;;600:102;;;:::o;708:364::-;796:3;824:39;857:5;824:39;:::i;:::-;879:71;943:6;938:3;879:71;:::i;:::-;872:78;;959:52;1004:6;999:3;992:4;985:5;981:16;959:52;:::i;:::-;1036:29;1058:6;1036:29;:::i;:::-;1031:3;1027:39;1020:46;;800:272;708:364;;;;:::o;1078:313::-;1191:4;1229:2;1218:9;1214:18;1206:26;;1278:9;1272:4;1268:20;1264:1;1253:9;1249:17;1242:47;1306:78;1379:4;1370:6;1306:78;:::i;:::-;1298:86;;1078:313;;;;:::o;1478:117::-;1587:1;1584;1577:12;1724:126;1761:7;1801:42;1794:5;1790:54;1779:65;;1724:126;;;:::o;1856:96::-;1893:7;1922:24;1940:5;1922:24;:::i;:::-;1911:35;;1856:96;;;:::o;1958:122::-;2031:24;2049:5;2031:24;:::i;:::-;2024:5;2021:35;2011:63;;2070:1;2067;2060:12;2011:63;1958:122;:::o;2086:139::-;2132:5;2170:6;2157:20;2148:29;;2186:33;2213:5;2186:33;:::i;:::-;2086:139;;;;:::o;2231:77::-;2268:7;2297:5;2286:16;;2231:77;;;:::o;2314:122::-;2387:24;2405:5;2387:24;:::i;:::-;2380:5;2377:35;2367:63;;2426:1;2423;2416:12;2367:63;2314:122;:::o;2442:139::-;2488:5;2526:6;2513:20;2504:29;;2542:33;2569:5;2542:33;:::i;:::-;2442:139;;;;:::o;2587:474::-;2655:6;2663;2712:2;2700:9;2691:7;2687:23;2683:32;2680:119;;;2718:79;;:::i;:::-;2680:119;2838:1;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2809:117;2965:2;2991:53;3036:7;3027:6;3016:9;3012:22;2991:53;:::i;:::-;2981:63;;2936:118;2587:474;;;;;:::o;3067:90::-;3101:7;3144:5;3137:13;3130:21;3119:32;;3067:90;;;:::o;3163:109::-;3244:21;3259:5;3244:21;:::i;:::-;3239:3;3232:34;3163:109;;:::o;3278:210::-;3365:4;3403:2;3392:9;3388:18;3380:26;;3416:65;3478:1;3467:9;3463:17;3454:6;3416:65;:::i;:::-;3278:210;;;;:::o;3494:329::-;3553:6;3602:2;3590:9;3581:7;3577:23;3573:32;3570:119;;;3608:79;;:::i;:::-;3570:119;3728:1;3753:53;3798:7;3789:6;3778:9;3774:22;3753:53;:::i;:::-;3743:63;;3699:117;3494:329;;;;:::o;3829:60::-;3857:3;3878:5;3871:12;;3829:60;;;:::o;3895:142::-;3945:9;3978:53;3996:34;4005:24;4023:5;4005:24;:::i;:::-;3996:34;:::i;:::-;3978:53;:::i;:::-;3965:66;;3895:142;;;:::o;4043:126::-;4093:9;4126:37;4157:5;4126:37;:::i;:::-;4113:50;;4043:126;;;:::o;4175:153::-;4252:9;4285:37;4316:5;4285:37;:::i;:::-;4272:50;;4175:153;;;:::o;4334:185::-;4448:64;4506:5;4448:64;:::i;:::-;4443:3;4436:77;4334:185;;:::o;4525:276::-;4645:4;4683:2;4672:9;4668:18;4660:26;;4696:98;4791:1;4780:9;4776:17;4767:6;4696:98;:::i;:::-;4525:276;;;;:::o;4807:118::-;4894:24;4912:5;4894:24;:::i;:::-;4889:3;4882:37;4807:118;;:::o;4931:222::-;5024:4;5062:2;5051:9;5047:18;5039:26;;5075:71;5143:1;5132:9;5128:17;5119:6;5075:71;:::i;:::-;4931:222;;;;:::o;5159:329::-;5218:6;5267:2;5255:9;5246:7;5242:23;5238:32;5235:119;;;5273:79;;:::i;:::-;5235:119;5393:1;5418:53;5463:7;5454:6;5443:9;5439:22;5418:53;:::i;:::-;5408:63;;5364:117;5159:329;;;;:::o;5494:619::-;5571:6;5579;5587;5636:2;5624:9;5615:7;5611:23;5607:32;5604:119;;;5642:79;;:::i;:::-;5604:119;5762:1;5787:53;5832:7;5823:6;5812:9;5808:22;5787:53;:::i;:::-;5777:63;;5733:117;5889:2;5915:53;5960:7;5951:6;5940:9;5936:22;5915:53;:::i;:::-;5905:63;;5860:118;6017:2;6043:53;6088:7;6079:6;6068:9;6064:22;6043:53;:::i;:::-;6033:63;;5988:118;5494:619;;;;;:::o;6119:118::-;6206:24;6224:5;6206:24;:::i;:::-;6201:3;6194:37;6119:118;;:::o;6243:222::-;6336:4;6374:2;6363:9;6359:18;6351:26;;6387:71;6455:1;6444:9;6440:17;6431:6;6387:71;:::i;:::-;6243:222;;;;:::o;6471:86::-;6506:7;6546:4;6539:5;6535:16;6524:27;;6471:86;;;:::o;6563:112::-;6646:22;6662:5;6646:22;:::i;:::-;6641:3;6634:35;6563:112;;:::o;6681:214::-;6770:4;6808:2;6797:9;6793:18;6785:26;;6821:67;6885:1;6874:9;6870:17;6861:6;6821:67;:::i;:::-;6681:214;;;;:::o;6901:116::-;6971:21;6986:5;6971:21;:::i;:::-;6964:5;6961:32;6951:60;;7007:1;7004;6997:12;6951:60;6901:116;:::o;7023:133::-;7066:5;7104:6;7091:20;7082:29;;7120:30;7144:5;7120:30;:::i;:::-;7023:133;;;;:::o;7162:613::-;7236:6;7244;7252;7301:2;7289:9;7280:7;7276:23;7272:32;7269:119;;;7307:79;;:::i;:::-;7269:119;7427:1;7452:53;7497:7;7488:6;7477:9;7473:22;7452:53;:::i;:::-;7442:63;;7398:117;7554:2;7580:53;7625:7;7616:6;7605:9;7601:22;7580:53;:::i;:::-;7570:63;;7525:118;7682:2;7708:50;7750:7;7741:6;7730:9;7726:22;7708:50;:::i;:::-;7698:60;;7653:115;7162:613;;;;;:::o;7781:468::-;7846:6;7854;7903:2;7891:9;7882:7;7878:23;7874:32;7871:119;;;7909:79;;:::i;:::-;7871:119;8029:1;8054:53;8099:7;8090:6;8079:9;8075:22;8054:53;:::i;:::-;8044:63;;8000:117;8156:2;8182:50;8224:7;8215:6;8204:9;8200:22;8182:50;:::i;:::-;8172:60;;8127:115;7781:468;;;;;:::o;8255:619::-;8332:6;8340;8348;8397:2;8385:9;8376:7;8372:23;8368:32;8365:119;;;8403:79;;:::i;:::-;8365:119;8523:1;8548:53;8593:7;8584:6;8573:9;8569:22;8548:53;:::i;:::-;8538:63;;8494:117;8650:2;8676:53;8721:7;8712:6;8701:9;8697:22;8676:53;:::i;:::-;8666:63;;8621:118;8778:2;8804:53;8849:7;8840:6;8829:9;8825:22;8804:53;:::i;:::-;8794:63;;8749:118;8255:619;;;;;:::o;8880:323::-;8936:6;8985:2;8973:9;8964:7;8960:23;8956:32;8953:119;;;8991:79;;:::i;:::-;8953:119;9111:1;9136:50;9178:7;9169:6;9158:9;9154:22;9136:50;:::i;:::-;9126:60;;9082:114;8880:323;;;;:::o;9209:474::-;9277:6;9285;9334:2;9322:9;9313:7;9309:23;9305:32;9302:119;;;9340:79;;:::i;:::-;9302:119;9460:1;9485:53;9530:7;9521:6;9510:9;9506:22;9485:53;:::i;:::-;9475:63;;9431:117;9587:2;9613:53;9658:7;9649:6;9638:9;9634:22;9613:53;:::i;:::-;9603:63;;9558:118;9209:474;;;;;:::o;9689:180::-;9737:77;9734:1;9727:88;9834:4;9831:1;9824:15;9858:4;9855:1;9848:15;9875:320;9919:6;9956:1;9950:4;9946:12;9936:22;;10003:1;9997:4;9993:12;10024:18;10014:81;;10080:4;10072:6;10068:17;10058:27;;10014:81;10142:2;10134:6;10131:14;10111:18;10108:38;10105:84;;;10161:18;;:::i;:::-;10105:84;9926:269;9875:320;;;:::o;10201:182::-;10341:34;10337:1;10329:6;10325:14;10318:58;10201:182;:::o;10389:366::-;10531:3;10552:67;10616:2;10611:3;10552:67;:::i;:::-;10545:74;;10628:93;10717:3;10628:93;:::i;:::-;10746:2;10741:3;10737:12;10730:19;;10389:366;;;:::o;10761:419::-;10927:4;10965:2;10954:9;10950:18;10942:26;;11014:9;11008:4;11004:20;11000:1;10989:9;10985:17;10978:47;11042:131;11168:4;11042:131;:::i;:::-;11034:139;;10761:419;;;:::o;11186:180::-;11234:77;11231:1;11224:88;11331:4;11328:1;11321:15;11355:4;11352:1;11345:15;11372:348;11412:7;11435:20;11453:1;11435:20;:::i;:::-;11430:25;;11469:20;11487:1;11469:20;:::i;:::-;11464:25;;11657:1;11589:66;11585:74;11582:1;11579:81;11574:1;11567:9;11560:17;11556:105;11553:131;;;11664:18;;:::i;:::-;11553:131;11712:1;11709;11705:9;11694:20;;11372:348;;;;:::o;11726:180::-;11774:77;11771:1;11764:88;11871:4;11868:1;11861:15;11895:4;11892:1;11885:15;11912:185;11952:1;11969:20;11987:1;11969:20;:::i;:::-;11964:25;;12003:20;12021:1;12003:20;:::i;:::-;11998:25;;12042:1;12032:35;;12047:18;;:::i;:::-;12032:35;12089:1;12086;12082:9;12077:14;;11912:185;;;;:::o;12103:234::-;12243:34;12239:1;12231:6;12227:14;12220:58;12312:17;12307:2;12299:6;12295:15;12288:42;12103:234;:::o;12343:366::-;12485:3;12506:67;12570:2;12565:3;12506:67;:::i;:::-;12499:74;;12582:93;12671:3;12582:93;:::i;:::-;12700:2;12695:3;12691:12;12684:19;;12343:366;;;:::o;12715:419::-;12881:4;12919:2;12908:9;12904:18;12896:26;;12968:9;12962:4;12958:20;12954:1;12943:9;12939:17;12932:47;12996:131;13122:4;12996:131;:::i;:::-;12988:139;;12715:419;;;:::o;13140:238::-;13280:34;13276:1;13268:6;13264:14;13257:58;13349:21;13344:2;13336:6;13332:15;13325:46;13140:238;:::o;13384:366::-;13526:3;13547:67;13611:2;13606:3;13547:67;:::i;:::-;13540:74;;13623:93;13712:3;13623:93;:::i;:::-;13741:2;13736:3;13732:12;13725:19;;13384:366;;;:::o;13756:419::-;13922:4;13960:2;13949:9;13945:18;13937:26;;14009:9;14003:4;13999:20;13995:1;13984:9;13980:17;13973:47;14037:131;14163:4;14037:131;:::i;:::-;14029:139;;13756:419;;;:::o;14181:235::-;14321:34;14317:1;14309:6;14305:14;14298:58;14390:18;14385:2;14377:6;14373:15;14366:43;14181:235;:::o;14422:366::-;14564:3;14585:67;14649:2;14644:3;14585:67;:::i;:::-;14578:74;;14661:93;14750:3;14661:93;:::i;:::-;14779:2;14774:3;14770:12;14763:19;;14422:366;;;:::o;14794:419::-;14960:4;14998:2;14987:9;14983:18;14975:26;;15047:9;15041:4;15037:20;15033:1;15022:9;15018:17;15011:47;15075:131;15201:4;15075:131;:::i;:::-;15067:139;;14794:419;;;:::o;15219:305::-;15259:3;15278:20;15296:1;15278:20;:::i;:::-;15273:25;;15312:20;15330:1;15312:20;:::i;:::-;15307:25;;15466:1;15398:66;15394:74;15391:1;15388:81;15385:107;;;15472:18;;:::i;:::-;15385:107;15516:1;15513;15509:9;15502:16;;15219:305;;;;:::o;15530:179::-;15670:31;15666:1;15658:6;15654:14;15647:55;15530:179;:::o;15715:366::-;15857:3;15878:67;15942:2;15937:3;15878:67;:::i;:::-;15871:74;;15954:93;16043:3;15954:93;:::i;:::-;16072:2;16067:3;16063:12;16056:19;;15715:366;;;:::o;16087:419::-;16253:4;16291:2;16280:9;16276:18;16268:26;;16340:9;16334:4;16330:20;16326:1;16315:9;16311:17;16304:47;16368:131;16494:4;16368:131;:::i;:::-;16360:139;;16087:419;;;:::o;16512:244::-;16652:34;16648:1;16640:6;16636:14;16629:58;16721:27;16716:2;16708:6;16704:15;16697:52;16512:244;:::o;16762:366::-;16904:3;16925:67;16989:2;16984:3;16925:67;:::i;:::-;16918:74;;17001:93;17090:3;17001:93;:::i;:::-;17119:2;17114:3;17110:12;17103:19;;16762:366;;;:::o;17134:419::-;17300:4;17338:2;17327:9;17323:18;17315:26;;17387:9;17381:4;17377:20;17373:1;17362:9;17358:17;17351:47;17415:131;17541:4;17415:131;:::i;:::-;17407:139;;17134:419;;;:::o;17559:179::-;17699:31;17695:1;17687:6;17683:14;17676:55;17559:179;:::o;17744:366::-;17886:3;17907:67;17971:2;17966:3;17907:67;:::i;:::-;17900:74;;17983:93;18072:3;17983:93;:::i;:::-;18101:2;18096:3;18092:12;18085:19;;17744:366;;;:::o;18116:419::-;18282:4;18320:2;18309:9;18305:18;18297:26;;18369:9;18363:4;18359:20;18355:1;18344:9;18340:17;18333:47;18397:131;18523:4;18397:131;:::i;:::-;18389:139;;18116:419;;;:::o;18541:223::-;18681:34;18677:1;18669:6;18665:14;18658:58;18750:6;18745:2;18737:6;18733:15;18726:31;18541:223;:::o;18770:366::-;18912:3;18933:67;18997:2;18992:3;18933:67;:::i;:::-;18926:74;;19009:93;19098:3;19009:93;:::i;:::-;19127:2;19122:3;19118:12;19111:19;;18770:366;;;:::o;19142:419::-;19308:4;19346:2;19335:9;19331:18;19323:26;;19395:9;19389:4;19385:20;19381:1;19370:9;19366:17;19359:47;19423:131;19549:4;19423:131;:::i;:::-;19415:139;;19142:419;;;:::o;19567:240::-;19707:34;19703:1;19695:6;19691:14;19684:58;19776:23;19771:2;19763:6;19759:15;19752:48;19567:240;:::o;19813:366::-;19955:3;19976:67;20040:2;20035:3;19976:67;:::i;:::-;19969:74;;20052:93;20141:3;20052:93;:::i;:::-;20170:2;20165:3;20161:12;20154:19;;19813:366;;;:::o;20185:419::-;20351:4;20389:2;20378:9;20374:18;20366:26;;20438:9;20432:4;20428:20;20424:1;20413:9;20409:17;20402:47;20466:131;20592:4;20466:131;:::i;:::-;20458:139;;20185:419;;;:::o;20610:239::-;20750:34;20746:1;20738:6;20734:14;20727:58;20819:22;20814:2;20806:6;20802:15;20795:47;20610:239;:::o;20855:366::-;20997:3;21018:67;21082:2;21077:3;21018:67;:::i;:::-;21011:74;;21094:93;21183:3;21094:93;:::i;:::-;21212:2;21207:3;21203:12;21196:19;;20855:366;;;:::o;21227:419::-;21393:4;21431:2;21420:9;21416:18;21408:26;;21480:9;21474:4;21470:20;21466:1;21455:9;21451:17;21444:47;21508:131;21634:4;21508:131;:::i;:::-;21500:139;;21227:419;;;:::o;21652:182::-;21792:34;21788:1;21780:6;21776:14;21769:58;21652:182;:::o;21840:366::-;21982:3;22003:67;22067:2;22062:3;22003:67;:::i;:::-;21996:74;;22079:93;22168:3;22079:93;:::i;:::-;22197:2;22192:3;22188:12;22181:19;;21840:366;;;:::o;22212:419::-;22378:4;22416:2;22405:9;22401:18;22393:26;;22465:9;22459:4;22455:20;22451:1;22440:9;22436:17;22429:47;22493:131;22619:4;22493:131;:::i;:::-;22485:139;;22212:419;;;:::o;22637:229::-;22777:34;22773:1;22765:6;22761:14;22754:58;22846:12;22841:2;22833:6;22829:15;22822:37;22637:229;:::o;22872:366::-;23014:3;23035:67;23099:2;23094:3;23035:67;:::i;:::-;23028:74;;23111:93;23200:3;23111:93;:::i;:::-;23229:2;23224:3;23220:12;23213:19;;22872:366;;;:::o;23244:419::-;23410:4;23448:2;23437:9;23433:18;23425:26;;23497:9;23491:4;23487:20;23483:1;23472:9;23468:17;23461:47;23525:131;23651:4;23525:131;:::i;:::-;23517:139;;23244:419;;;:::o;23669:143::-;23726:5;23757:6;23751:13;23742:22;;23773:33;23800:5;23773:33;:::i;:::-;23669:143;;;;:::o;23818:351::-;23888:6;23937:2;23925:9;23916:7;23912:23;23908:32;23905:119;;;23943:79;;:::i;:::-;23905:119;24063:1;24088:64;24144:7;24135:6;24124:9;24120:22;24088:64;:::i;:::-;24078:74;;24034:128;23818:351;;;;:::o;24175:177::-;24315:29;24311:1;24303:6;24299:14;24292:53;24175:177;:::o;24358:366::-;24500:3;24521:67;24585:2;24580:3;24521:67;:::i;:::-;24514:74;;24597:93;24686:3;24597:93;:::i;:::-;24715:2;24710:3;24706:12;24699:19;;24358:366;;;:::o;24730:419::-;24896:4;24934:2;24923:9;24919:18;24911:26;;24983:9;24977:4;24973:20;24969:1;24958:9;24954:17;24947:47;25011:131;25137:4;25011:131;:::i;:::-;25003:139;;24730:419;;;:::o;25155:223::-;25295:34;25291:1;25283:6;25279:14;25272:58;25364:6;25359:2;25351:6;25347:15;25340:31;25155:223;:::o;25384:366::-;25526:3;25547:67;25611:2;25606:3;25547:67;:::i;:::-;25540:74;;25623:93;25712:3;25623:93;:::i;:::-;25741:2;25736:3;25732:12;25725:19;;25384:366;;;:::o;25756:419::-;25922:4;25960:2;25949:9;25945:18;25937:26;;26009:9;26003:4;25999:20;25995:1;25984:9;25980:17;25973:47;26037:131;26163:4;26037:131;:::i;:::-;26029:139;;25756:419;;;:::o;26181:221::-;26321:34;26317:1;26309:6;26305:14;26298:58;26390:4;26385:2;26377:6;26373:15;26366:29;26181:221;:::o;26408:366::-;26550:3;26571:67;26635:2;26630:3;26571:67;:::i;:::-;26564:74;;26647:93;26736:3;26647:93;:::i;:::-;26765:2;26760:3;26756:12;26749:19;;26408:366;;;:::o;26780:419::-;26946:4;26984:2;26973:9;26969:18;26961:26;;27033:9;27027:4;27023:20;27019:1;27008:9;27004:17;26997:47;27061:131;27187:4;27061:131;:::i;:::-;27053:139;;26780:419;;;:::o;27205:224::-;27345:34;27341:1;27333:6;27329:14;27322:58;27414:7;27409:2;27401:6;27397:15;27390:32;27205:224;:::o;27435:366::-;27577:3;27598:67;27662:2;27657:3;27598:67;:::i;:::-;27591:74;;27674:93;27763:3;27674:93;:::i;:::-;27792:2;27787:3;27783:12;27776:19;;27435:366;;;:::o;27807:419::-;27973:4;28011:2;28000:9;27996:18;27988:26;;28060:9;28054:4;28050:20;28046:1;28035:9;28031:17;28024:47;28088:131;28214:4;28088:131;:::i;:::-;28080:139;;27807:419;;;:::o;28232:222::-;28372:34;28368:1;28360:6;28356:14;28349:58;28441:5;28436:2;28428:6;28424:15;28417:30;28232:222;:::o;28460:366::-;28602:3;28623:67;28687:2;28682:3;28623:67;:::i;:::-;28616:74;;28699:93;28788:3;28699:93;:::i;:::-;28817:2;28812:3;28808:12;28801:19;;28460:366;;;:::o;28832:419::-;28998:4;29036:2;29025:9;29021:18;29013:26;;29085:9;29079:4;29075:20;29071:1;29060:9;29056:17;29049:47;29113:131;29239:4;29113:131;:::i;:::-;29105:139;;28832:419;;;:::o;29257:175::-;29397:27;29393:1;29385:6;29381:14;29374:51;29257:175;:::o;29438:366::-;29580:3;29601:67;29665:2;29660:3;29601:67;:::i;:::-;29594:74;;29677:93;29766:3;29677:93;:::i;:::-;29795:2;29790:3;29786:12;29779:19;;29438:366;;;:::o;29810:419::-;29976:4;30014:2;30003:9;29999:18;29991:26;;30063:9;30057:4;30053:20;30049:1;30038:9;30034:17;30027:47;30091:131;30217:4;30091:131;:::i;:::-;30083:139;;29810:419;;;:::o;30235:172::-;30375:24;30371:1;30363:6;30359:14;30352:48;30235:172;:::o;30413:366::-;30555:3;30576:67;30640:2;30635:3;30576:67;:::i;:::-;30569:74;;30652:93;30741:3;30652:93;:::i;:::-;30770:2;30765:3;30761:12;30754:19;;30413:366;;;:::o;30785:419::-;30951:4;30989:2;30978:9;30974:18;30966:26;;31038:9;31032:4;31028:20;31024:1;31013:9;31009:17;31002:47;31066:131;31192:4;31066:131;:::i;:::-;31058:139;;30785:419;;;:::o;31210:297::-;31350:34;31346:1;31338:6;31334:14;31327:58;31419:34;31414:2;31406:6;31402:15;31395:59;31488:11;31483:2;31475:6;31471:15;31464:36;31210:297;:::o;31513:366::-;31655:3;31676:67;31740:2;31735:3;31676:67;:::i;:::-;31669:74;;31752:93;31841:3;31752:93;:::i;:::-;31870:2;31865:3;31861:12;31854:19;;31513:366;;;:::o;31885:419::-;32051:4;32089:2;32078:9;32074:18;32066:26;;32138:9;32132:4;32128:20;32124:1;32113:9;32109:17;32102:47;32166:131;32292:4;32166:131;:::i;:::-;32158:139;;31885:419;;;:::o;32310:240::-;32450:34;32446:1;32438:6;32434:14;32427:58;32519:23;32514:2;32506:6;32502:15;32495:48;32310:240;:::o;32556:366::-;32698:3;32719:67;32783:2;32778:3;32719:67;:::i;:::-;32712:74;;32795:93;32884:3;32795:93;:::i;:::-;32913:2;32908:3;32904:12;32897:19;;32556:366;;;:::o;32928:419::-;33094:4;33132:2;33121:9;33117:18;33109:26;;33181:9;33175:4;33171:20;33167:1;33156:9;33152:17;33145:47;33209:131;33335:4;33209:131;:::i;:::-;33201:139;;32928:419;;;:::o;33353:169::-;33493:21;33489:1;33481:6;33477:14;33470:45;33353:169;:::o;33528:366::-;33670:3;33691:67;33755:2;33750:3;33691:67;:::i;:::-;33684:74;;33767:93;33856:3;33767:93;:::i;:::-;33885:2;33880:3;33876:12;33869:19;;33528:366;;;:::o;33900:419::-;34066:4;34104:2;34093:9;34089:18;34081:26;;34153:9;34147:4;34143:20;34139:1;34128:9;34124:17;34117:47;34181:131;34307:4;34181:131;:::i;:::-;34173:139;;33900:419;;;:::o;34325:241::-;34465:34;34461:1;34453:6;34449:14;34442:58;34534:24;34529:2;34521:6;34517:15;34510:49;34325:241;:::o;34572:366::-;34714:3;34735:67;34799:2;34794:3;34735:67;:::i;:::-;34728:74;;34811:93;34900:3;34811:93;:::i;:::-;34929:2;34924:3;34920:12;34913:19;;34572:366;;;:::o;34944:419::-;35110:4;35148:2;35137:9;35133:18;35125:26;;35197:9;35191:4;35187:20;35183:1;35172:9;35168:17;35161:47;35225:131;35351:4;35225:131;:::i;:::-;35217:139;;34944:419;;;:::o;35369:191::-;35409:4;35429:20;35447:1;35429:20;:::i;:::-;35424:25;;35463:20;35481:1;35463:20;:::i;:::-;35458:25;;35502:1;35499;35496:8;35493:34;;;35507:18;;:::i;:::-;35493:34;35552:1;35549;35545:9;35537:17;;35369:191;;;;:::o;35566:220::-;35706:34;35702:1;35694:6;35690:14;35683:58;35775:3;35770:2;35762:6;35758:15;35751:28;35566:220;:::o;35792:366::-;35934:3;35955:67;36019:2;36014:3;35955:67;:::i;:::-;35948:74;;36031:93;36120:3;36031:93;:::i;:::-;36149:2;36144:3;36140:12;36133:19;;35792:366;;;:::o;36164:419::-;36330:4;36368:2;36357:9;36353:18;36345:26;;36417:9;36411:4;36407:20;36403:1;36392:9;36388:17;36381:47;36445:131;36571:4;36445:131;:::i;:::-;36437:139;;36164:419;;;:::o;36589:147::-;36690:11;36727:3;36712:18;;36589:147;;;;:::o;36742:114::-;;:::o;36862:398::-;37021:3;37042:83;37123:1;37118:3;37042:83;:::i;:::-;37035:90;;37134:93;37223:3;37134:93;:::i;:::-;37252:1;37247:3;37243:11;37236:18;;36862:398;;;:::o;37266:379::-;37450:3;37472:147;37615:3;37472:147;:::i;:::-;37465:154;;37636:3;37629:10;;37266:379;;;:::o;37651:442::-;37800:4;37838:2;37827:9;37823:18;37815:26;;37851:71;37919:1;37908:9;37904:17;37895:6;37851:71;:::i;:::-;37932:72;38000:2;37989:9;37985:18;37976:6;37932:72;:::i;:::-;38014;38082:2;38071:9;38067:18;38058:6;38014:72;:::i;:::-;37651:442;;;;;;:::o;38099:180::-;38147:77;38144:1;38137:88;38244:4;38241:1;38234:15;38268:4;38265:1;38258:15;38285:180;38333:77;38330:1;38323:88;38430:4;38427:1;38420:15;38454:4;38451:1;38444:15;38471:143;38528:5;38559:6;38553:13;38544:22;;38575:33;38602:5;38575:33;:::i;:::-;38471:143;;;;:::o;38620:351::-;38690:6;38739:2;38727:9;38718:7;38714:23;38710:32;38707:119;;;38745:79;;:::i;:::-;38707:119;38865:1;38890:64;38946:7;38937:6;38926:9;38922:22;38890:64;:::i;:::-;38880:74;;38836:128;38620:351;;;;:::o;38977:85::-;39022:7;39051:5;39040:16;;38977:85;;;:::o;39068:158::-;39126:9;39159:61;39177:42;39186:32;39212:5;39186:32;:::i;:::-;39177:42;:::i;:::-;39159:61;:::i;:::-;39146:74;;39068:158;;;:::o;39232:147::-;39327:45;39366:5;39327:45;:::i;:::-;39322:3;39315:58;39232:147;;:::o;39385:114::-;39452:6;39486:5;39480:12;39470:22;;39385:114;;;:::o;39505:184::-;39604:11;39638:6;39633:3;39626:19;39678:4;39673:3;39669:14;39654:29;;39505:184;;;;:::o;39695:132::-;39762:4;39785:3;39777:11;;39815:4;39810:3;39806:14;39798:22;;39695:132;;;:::o;39833:108::-;39910:24;39928:5;39910:24;:::i;:::-;39905:3;39898:37;39833:108;;:::o;39947:179::-;40016:10;40037:46;40079:3;40071:6;40037:46;:::i;:::-;40115:4;40110:3;40106:14;40092:28;;39947:179;;;;:::o;40132:113::-;40202:4;40234;40229:3;40225:14;40217:22;;40132:113;;;:::o;40281:732::-;40400:3;40429:54;40477:5;40429:54;:::i;:::-;40499:86;40578:6;40573:3;40499:86;:::i;:::-;40492:93;;40609:56;40659:5;40609:56;:::i;:::-;40688:7;40719:1;40704:284;40729:6;40726:1;40723:13;40704:284;;;40805:6;40799:13;40832:63;40891:3;40876:13;40832:63;:::i;:::-;40825:70;;40918:60;40971:6;40918:60;:::i;:::-;40908:70;;40764:224;40751:1;40748;40744:9;40739:14;;40704:284;;;40708:14;41004:3;40997:10;;40405:608;;;40281:732;;;;:::o;41019:831::-;41282:4;41320:3;41309:9;41305:19;41297:27;;41334:71;41402:1;41391:9;41387:17;41378:6;41334:71;:::i;:::-;41415:80;41491:2;41480:9;41476:18;41467:6;41415:80;:::i;:::-;41542:9;41536:4;41532:20;41527:2;41516:9;41512:18;41505:48;41570:108;41673:4;41664:6;41570:108;:::i;:::-;41562:116;;41688:72;41756:2;41745:9;41741:18;41732:6;41688:72;:::i;:::-;41770:73;41838:3;41827:9;41823:19;41814:6;41770:73;:::i;:::-;41019:831;;;;;;;;:::o;41856:807::-;42105:4;42143:3;42132:9;42128:19;42120:27;;42157:71;42225:1;42214:9;42210:17;42201:6;42157:71;:::i;:::-;42238:72;42306:2;42295:9;42291:18;42282:6;42238:72;:::i;:::-;42320:80;42396:2;42385:9;42381:18;42372:6;42320:80;:::i;:::-;42410;42486:2;42475:9;42471:18;42462:6;42410:80;:::i;:::-;42500:73;42568:3;42557:9;42553:19;42544:6;42500:73;:::i;:::-;42583;42651:3;42640:9;42636:19;42627:6;42583:73;:::i;:::-;41856:807;;;;;;;;;:::o;42669:663::-;42757:6;42765;42773;42822:2;42810:9;42801:7;42797:23;42793:32;42790:119;;;42828:79;;:::i;:::-;42790:119;42948:1;42973:64;43029:7;43020:6;43009:9;43005:22;42973:64;:::i;:::-;42963:74;;42919:128;43086:2;43112:64;43168:7;43159:6;43148:9;43144:22;43112:64;:::i;:::-;43102:74;;43057:129;43225:2;43251:64;43307:7;43298:6;43287:9;43283:22;43251:64;:::i;:::-;43241:74;;43196:129;42669:663;;;;;:::o

Swarm Source

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