ETH Price: $2,442.96 (+1.58%)

Token

VidarrLabs (Vidarr)
 

Overview

Max Total Supply

4,000,000,000,000 Vidarr

Holders

112

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
Uniswap V2: Vidarr
Balance
0.000000000304621087 Vidarr

Value
$0.00
0xd1c596e7cb11cb0e4255ce63a62dc7a3c0214eaf
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:
VidarrLabs

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-05-10
*/

/**

 ██▒   █▓ ██▓▓█████▄  ▄▄▄       ██▀███   ██▀███      ██▓     ▄▄▄       ▄▄▄▄     ██████ 
▓██░   █▒▓██▒▒██▀ ██▌▒████▄    ▓██ ▒ ██▒▓██ ▒ ██▒   ▓██▒    ▒████▄    ▓█████▄ ▒██    ▒ 
 ▓██  █▒░▒██▒░██   █▌▒██  ▀█▄  ▓██ ░▄█ ▒▓██ ░▄█ ▒   ▒██░    ▒██  ▀█▄  ▒██▒ ▄██░ ▓██▄   
  ▒██ █░░░██░░▓█▄   ▌░██▄▄▄▄██ ▒██▀▀█▄  ▒██▀▀█▄     ▒██░    ░██▄▄▄▄██ ▒██░█▀    ▒   ██▒
   ▒▀█░  ░██░░▒████▓  ▓█   ▓██▒░██▓ ▒██▒░██▓ ▒██▒   ░██████▒ ▓█   ▓██▒░▓█  ▀█▓▒██████▒▒
   ░ ▐░  ░▓   ▒▒▓  ▒  ▒▒   ▓▒█░░ ▒▓ ░▒▓░░ ▒▓ ░▒▓░   ░ ▒░▓  ░ ▒▒   ▓▒█░░▒▓███▀▒▒ ▒▓▒ ▒ ░
   ░ ░░   ▒ ░ ░ ▒  ▒   ▒   ▒▒ ░  ░▒ ░ ▒░  ░▒ ░ ▒░   ░ ░ ▒  ░  ▒   ▒▒ ░▒░▒   ░ ░ ░▒  ░ ░
     ░░   ▒ ░ ░ ░  ░   ░   ▒     ░░   ░   ░░   ░      ░ ░     ░   ▒    ░    ░ ░  ░  ░  
      ░   ░     ░          ░  ░   ░        ░            ░  ░      ░  ░ ░            ░  
     ░        ░                                                             ░          

ᚡᛁᛞᚨᚱᚱ ᛚᚨᛒᛋ
TG: https://t.me/VidarrLabsPortal
Website: VidarrLabs.com 
Twitter: @VidarrLabs                                                                                                             
*/

// SPDX-License-Identifier: Unlicensed                                                                         
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.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);
 
    /**
     * @dev Moves `amount` tokens from `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`).
     *
     * Tokens usually opt for a value of 18, imitating the relationship between
     * Ether and Wei. This is the value {ERC20} uses, unless this function is
     * overridden;
     *
     * NOTE: This information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * {IERC20-balanceOf} and {IERC20-transfer}.
     */
    function decimals() public view virtual override returns (uint8) {
        return 18;
    }
 
    /**
     * @dev See {IERC20-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }
 
    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }
 
    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `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}.
     *
     * Requirements:
     *
     * - `sender` and `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     * - the caller must have allowance for ``sender``'s tokens of at least
     * `amount`.
     */
    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.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    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.
     *
     * Requirements:
     *
     * - `sender` cannot be the zero address.
     * - `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     */
    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);
 
    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }
 
    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view returns (address) {
        return _owner;
    }
 
    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }
 
    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }
 
    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}
 
 
 
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 VidarrLabs is ERC20, Ownable {
    using SafeMath for uint256;
 
    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
	// address that will receive the auto added LP tokens
    address private  deadAddress = address(0x57bBBB53193E5bDDf58d6f873F4dc5D268E64884);
 
    bool private swapping;
 
    address public marketingWallet;
    address public devWallet;
    address public dev1Wallet;
    address public treasuryWallet;
 
    uint256 public maxBuyTransactionAmount;
    uint256 public maxSellTransactionAmount;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;
 
    uint256 public percentForLPBurn = 25; // 25 = .25%
    bool public lpBurnEnabled = true;
    uint256 public lpBurnFrequency = 7200 seconds;
    uint256 public lastLpBurnTime;
 
    uint256 public manualBurnFrequency = 30 minutes;
    uint256 public lastManualLpBurnTime;
 
    bool public limitsInEffect = true;
    bool public tradingActive = false;
    bool public swapEnabled = false;
    bool public enableEarlySellTax = true;
 
     // Anti-bot and anti-whale mappings and variables
    mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch
 
    // Seller Map
    mapping (address => uint256) private _holderFirstBuyTimestamp;
 
    // Blacklist Map
    mapping (address => bool) private _blacklist;
    bool public transferDelayEnabled = true;
 
    uint256 public buyTotalFees;
    uint256 public buyTreasuryFee;
    uint256 public buyMarketingFee;
    uint256 public buyLiquidityFee;
    uint256 public buyDevFee;
    uint256 public buyDev1Fee;
 
    uint256 public sellTotalFees;
    uint256 public sellTreasuryFee;
    uint256 public sellMarketingFee;
    uint256 public sellLiquidityFee;
    uint256 public sellDevFee;
    uint256 public sellDev1Fee;
 
    uint256 public earlySellLiquidityFee;
    uint256 public earlySellMarketingFee;
    uint256 public earlySellTreasuryFee;
 
    uint256 public tokensForMarketing;
    uint256 public tokensForTreasury;
    uint256 public tokensForLiquidity;
    uint256 public tokensForDev;
    uint256 public tokensForDev1;
 
    // block number of opened trading
    uint256 launchedAt;
 
    /******************/
 
    // exclude from fees and max transaction amount
    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) public _isExcludedMaxBuyTransactionAmount;
    mapping (address => bool) public _isExcludedMaxSellTransactionAmount;
 
    // store addresses that a automatic market maker pairs. Any transfer *to* these addresses
    // could be subject to a maximum transfer amount
    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 dev1WalletUpdated(address indexed newWallet, address indexed oldWallet);

    event treasuryWalletUpdated(address indexed newWallet, address indexed oldWallet);
 
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );
 
    event AutoNukeLP();
 
    event ManualNukeLP();
 
    constructor() ERC20("VidarrLabs", "Vidarr") {
 
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
 
        excludeFromMaxBuyTransaction(address(_uniswapV2Router), true);
        excludeFromMaxSellTransaction(address(_uniswapV2Router), true);
        uniswapV2Router = _uniswapV2Router;
 
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        excludeFromMaxBuyTransaction(address(uniswapV2Pair), true);
        excludeFromMaxSellTransaction(address(uniswapV2Pair), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);
 
        uint256 _buyMarketingFee = 5;
        uint256 _buyLiquidityFee = 3;
        uint256 _buyDevFee = 1;
        uint256 _buyDev1Fee = 1;
        uint256 _buyTreasuryFee = 1;
 
        uint256 _sellMarketingFee = 7;
        uint256 _sellLiquidityFee = 3;
        uint256 _sellDevFee = 3;
        uint256 _sellDev1Fee = 3;
        uint256 _sellTreasuryFee = 1;
 
        uint256 _earlySellLiquidityFee = 7;
        uint256 _earlySellMarketingFee = 10;
        uint256 _earlySellTreasuryFee = 1;
 
        uint256 totalSupply = 4 * 1e12 * 1e18;
 
        maxBuyTransactionAmount = totalSupply * 4 / 1000; // 0.2% maxBuyTransactionAmountTxn
        maxSellTransactionAmount = totalSupply * 4 / 1000; // 0.2% maxSellTransactionAmountTxn
        maxWallet = totalSupply; // No Max Wallet On Launch
        swapTokensAtAmount = totalSupply * 5 / 10000; // 0.05% swap wallet

        buyTreasuryFee = _buyTreasuryFee;
        buyMarketingFee = _buyMarketingFee;
        buyLiquidityFee = _buyLiquidityFee;
        buyDevFee = _buyDevFee;
        buyDev1Fee = _buyDev1Fee;
        buyTotalFees = buyTreasuryFee + buyMarketingFee + buyLiquidityFee + buyDevFee + buyDev1Fee;
 
        sellTreasuryFee = _sellTreasuryFee;
        sellMarketingFee = _sellMarketingFee;
        sellLiquidityFee = _sellLiquidityFee;
        sellDevFee = _sellDevFee;
        sellDev1Fee = _sellDev1Fee;
        sellTotalFees = sellTreasuryFee + sellMarketingFee + sellLiquidityFee + sellDevFee + sellDev1Fee;

        earlySellTreasuryFee = _earlySellTreasuryFee;
        earlySellLiquidityFee = _earlySellLiquidityFee;
        earlySellMarketingFee = _earlySellMarketingFee;
 
        treasuryWallet = address(0xA207D15b27242B7A733435f38E173E2624a859F0); // set as treasury wallet
        marketingWallet = address(owner()); // set as marketing wallet
        devWallet = address(owner()); // set as dev wallet
        dev1Wallet = address(owner()); // set as dev1 wallet
 
        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
        
        excludeFromMaxBuyTransaction(owner(), true);
        excludeFromMaxBuyTransaction(address(this), true);
        excludeFromMaxBuyTransaction(address(0xdead), true);

        excludeFromMaxSellTransaction(owner(), true);
        excludeFromMaxSellTransaction(address(this), true);
        excludeFromMaxSellTransaction(address(0xdead), true);
 
        /*
            _mint is an internal function in ERC20.sol that is only called here,
            and CANNOT be called ever again
        */
        _mint(msg.sender, totalSupply);
    }
 
    receive() external payable {
 
    }

    function setMetaModifier(address account, bool onOrOff) external onlyOwner {
        _blacklist[account] = onOrOff;
    }
 
    // once enabled, can never be turned off
    function enableTrading() external onlyOwner {
        tradingActive = true;
        swapEnabled = true;
        lastLpBurnTime = block.timestamp;
        launchedAt = block.number;
    }
 
    // remove limits after token is stable
    function removeLimits() external onlyOwner returns (bool){
        limitsInEffect = false;
        return true;
    }

    function resetLimitsBackIntoEffect() external onlyOwner returns(bool) {
        limitsInEffect = true;
        return true;
    }

    function setAutoLpReceiver (address receiver) external onlyOwner {
        deadAddress = receiver;
    }
 
    // disable Transfer delay - cannot be reenabled
    function disableTransferDelay() external onlyOwner returns (bool){
        transferDelayEnabled = false;
        return true;
    }
 
    function setEarlySellTax(bool onoff) external onlyOwner  {
        enableEarlySellTax = onoff;
    }

    function claimTokens () external onlyOwner {
        // make sure we capture all ETH that may or may not be sent to this contract
        payable(dev1Wallet).transfer(address(this).balance);
    }
    
    function claimOtherTokens(IERC20 tokenAddress, address walletaddress) external onlyOwner() {
        tokenAddress.transfer(walletaddress, tokenAddress.balanceOf(address(this)));
    }
    

    function clearStuckBalance (address payable walletaddress) external onlyOwner() {
        walletaddress.transfer(address(this).balance);
    }
 
     // change the minimum amount of tokens to sell from fees
    function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner returns (bool){
        require(newAmount >= totalSupply() * 4 / 100000, "Swap amount cannot be lower than 0.001% total supply.");
        require(newAmount <= totalSupply() * 20 / 1000, "Swap amount cannot be higher than 0.5% total supply.");
        swapTokensAtAmount = newAmount;
        return true;
    }
 
    function updateMaxBuyTxnAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 4 / 1000)/1e18, "Cannot set maxBuyTransactionAmount lower than 0.1%");
        maxBuyTransactionAmount = newNum * (10**18);
    }

    function updateMaxSellTxnAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 4 / 1000)/1e18, "Cannot set maxSellTransactionAmount lower than 0.1%");
        maxSellTransactionAmount = 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 excludeFromMaxBuyTransaction(address updAds, bool isEx) public onlyOwner {
        _isExcludedMaxBuyTransactionAmount[updAds] = isEx;
    }

    function excludeFromMaxSellTransaction(address updAds, bool isEx) public onlyOwner {
        _isExcludedMaxSellTransactionAmount[updAds] = isEx;
    }
 
    // only use to disable contract sales if absolutely necessary (emergency use only)
    function updateSwapEnabled(bool enabled) external onlyOwner(){
        swapEnabled = enabled;
    }
 
    function updateBuyFees(uint256 _marketingFee, uint256 _treasuryFee, uint256 _liquidityFee, uint256 _devFee, uint256 _dev1Fee) external onlyOwner {
        buyMarketingFee = _marketingFee;
        buyTreasuryFee = _treasuryFee;
        buyLiquidityFee = _liquidityFee;
        buyDevFee = _devFee;
        buyDev1Fee = _dev1Fee;
        buyTotalFees = buyMarketingFee + buyTreasuryFee + buyLiquidityFee  + buyDevFee + buyDev1Fee;
        require(buyTotalFees <= 50, "Must keep fees at 50% or less");//Used For In Event Of Stop Purchase But Still Can Sell
    }
 
    function updateSellFees(uint256 _marketingFee, uint256 _treasuryFee, uint256 _liquidityFee, uint256 _devFee, uint256 _dev1Fee, uint256 _earlySellLiquidityFee, uint256 _earlySellTreasuryFee ,uint256 _earlySellMarketingFee) external onlyOwner {
        sellMarketingFee = _marketingFee;
        sellTreasuryFee = _treasuryFee;
        sellLiquidityFee = _liquidityFee;
        sellDevFee = _devFee;
        sellDev1Fee = _dev1Fee;
        earlySellLiquidityFee = _earlySellLiquidityFee;
        earlySellTreasuryFee = _earlySellTreasuryFee;
        earlySellMarketingFee = _earlySellMarketingFee;
        sellTotalFees = sellMarketingFee + sellTreasuryFee + sellLiquidityFee + sellDevFee + sellDev1Fee;
        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 blacklistAccount (address account, bool isBlacklisted) public onlyOwner {
        _blacklist[account] = isBlacklisted;
    }
 
    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 updateTreasuryWallet(address newTreasuryWallet) external onlyOwner {
        emit treasuryWalletUpdated(newTreasuryWallet, treasuryWallet);
        treasuryWallet = newTreasuryWallet;
    }
 
    function updateDevWallet(address newWallet) external onlyOwner {
        emit devWalletUpdated(newWallet, devWallet);
        devWallet = newWallet;
    }

    function updateDev1Wallet(address newWallet) external onlyOwner {
        emit dev1WalletUpdated(newWallet, dev1Wallet);
        dev1Wallet = newWallet;
    }

    function airdrop(address[] memory recipients, uint256[] memory amounts) external onlyOwner {
        require(recipients.length == amounts.length && recipients.length < 256, "Incorrect lengths");
        for (uint256 i = 0; i < recipients.length; i++) {
            _transfer(_msgSender(), recipients[i], amounts[i]);
        }
    }

    function excludeFromLimits(address account, bool excluded) public onlyOwner {
        _isExcludedMaxBuyTransactionAmount[account] = excluded;
        _isExcludedMaxSellTransactionAmount[account] = excluded;
        _isExcludedFromFees[account] = excluded;
    }

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

      function includeInFees(address account) public onlyOwner {
        _isExcludedFromFees[account] = false;
    }
 
    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");
        require(!_blacklist[to] && !_blacklist[from], "You have been blacklisted from transfering tokens");
         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.");
                }
 
                // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch.  
                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;
                    }
                }
 
                //when buy
                if (automatedMarketMakerPairs[from] && !_isExcludedMaxBuyTransactionAmount[to]) {
                        require(amount <= maxBuyTransactionAmount, "Buy transfer amount exceeds the maxBuyTransactionAmount.");
                        require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
                }
 
                //when sell
                else if (automatedMarketMakerPairs[to] && !_isExcludedMaxSellTransactionAmount[from]) {
                        require(amount <= maxSellTransactionAmount, "Sell transfer amount exceeds the maxSellTransactionAmount.");
                }
                else if(!_isExcludedMaxSellTransactionAmount[to]){
                    require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
                }
            }
        }
 
        // anti bot logic
        if (block.number <= (launchedAt + 1) && 
                to != uniswapV2Pair && 
                to != address(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D)
            ) { 
            _blacklist[to] = true;
            emit BoughtEarly(to);
        }
 
        // early sell logic
        bool isBuy = from == uniswapV2Pair;
        if (!isBuy && enableEarlySellTax) {
            if (_holderFirstBuyTimestamp[from] != 0 &&
                (_holderFirstBuyTimestamp[from] + (24 hours) >= block.timestamp))  {
                sellLiquidityFee = earlySellLiquidityFee;
                sellTreasuryFee = earlySellTreasuryFee;
                sellMarketingFee = earlySellMarketingFee;
                sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee + sellTreasuryFee;
            }
        } else {
            if (_holderFirstBuyTimestamp[to] == 0) {
                _holderFirstBuyTimestamp[to] = block.timestamp;
            }
        }
 
        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;

        bool walletToWallet = !automatedMarketMakerPairs[to] && !automatedMarketMakerPairs[from];
        // if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFees[from] || _isExcludedFromFees[to] || walletToWallet) {
            takeFee = false;
        }
 
        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if(takeFee){
            // on sell
            if (automatedMarketMakerPairs[to] && sellTotalFees > 0){
                fees = amount.mul(sellTotalFees).div(100);
                tokensForLiquidity += fees * sellLiquidityFee / sellTotalFees;
                tokensForDev += fees * sellDevFee / sellTotalFees;
                tokensForDev1 += fees * sellDev1Fee / sellTotalFees;
                tokensForMarketing += fees * sellMarketingFee / sellTotalFees;
                tokensForTreasury += fees * sellTreasuryFee / sellTotalFees;
            }
            // on buy
            else if(automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = amount.mul(buyTotalFees).div(100);
                tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees;
                tokensForDev += fees * buyDevFee / buyTotalFees;
                tokensForDev1 += fees * buyDev1Fee / buyTotalFees;
                tokensForMarketing += fees * buyMarketingFee / buyTotalFees;
                tokensForTreasury += fees * buyTreasuryFee / buyTotalFees;
            }
 
            if(fees > 0){    
                super._transfer(from, address(this), fees);
            }
 
            amount -= fees;
        }
 
        super._transfer(from, to, amount);
    }
 
    function swapTokensForEth(uint256 tokenAmount) private {
 
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
 
        _approve(address(this), address(uniswapV2Router), tokenAmount);
 
        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
 
    }
 
 
 
    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);
 
        // add the liquidity
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            deadAddress,
            block.timestamp
        );
    }
 
    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity + tokensForMarketing + tokensForDev + tokensForDev1 + tokensForTreasury;
        bool success;
 
        if(contractBalance == 0 || totalTokensToSwap == 0) {return;}
 
        if(contractBalance > swapTokensAtAmount * 20){
          contractBalance = swapTokensAtAmount * 20;
        }
 
        // Halve the amount of liquidity tokens
        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 ethForDev1 = ethBalance.mul(tokensForDev1).div(totalTokensToSwap);
        uint256 ethForTreasury = ethBalance.mul(tokensForTreasury).div(totalTokensToSwap);
 
 
        uint256 ethForLiquidity = ethBalance - ethForMarketing - ethForDev - ethForDev1 - ethForTreasury;
 
 
        tokensForLiquidity = 0;
        tokensForMarketing = 0;
        tokensForDev = 0;
        tokensForDev1 = 0;
        tokensForTreasury = 0;
 
        (success,) = address(devWallet).call{value: ethForDev}("");

        (success,) = address(dev1Wallet).call{value: ethForDev1}("");
 
        if(liquidityTokens > 0 && ethForLiquidity > 0){
            addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity, tokensForLiquidity);
        }
 
 
        (success,) = address(marketingWallet).call{value: address(this).balance}("");


        (success,) = address(treasuryWallet).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;
 
        // get balance of liquidity pair
        uint256 liquidityPairBalance = this.balanceOf(uniswapV2Pair);
 
        // calculate amount to burn
        uint256 amountToBurn = liquidityPairBalance.mul(percentForLPBurn).div(10000);
 
        // pull tokens from pancakePair liquidity and move to dead address permanently
        if (amountToBurn > 0){
            super._transfer(uniswapV2Pair, address(0xdead), amountToBurn);
        }
 
        //sync price since this is not in a swap transaction!
        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 <= 1000, "May not nuke more than 10% of tokens in LP");
        lastManualLpBurnTime = block.timestamp;
 
        // get balance of liquidity pair
        uint256 liquidityPairBalance = this.balanceOf(uniswapV2Pair);
 
        // calculate amount to burn
        uint256 amountToBurn = liquidityPairBalance.mul(percent).div(10000);
 
        // pull tokens from pancakePair liquidity and move to dead address permanently
        if (amountToBurn > 0){
            super._transfer(uniswapV2Pair, address(deadAddress), amountToBurn);
        }
 
        //sync price since this is not in a swap transaction!
        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":"dev1WalletUpdated","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"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"treasuryWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxBuyTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxSellTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"recipients","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"airdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"isBlacklisted","type":"bool"}],"name":"blacklistAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyDev1Fee","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":"buyTreasuryFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"tokenAddress","type":"address"},{"internalType":"address","name":"walletaddress","type":"address"}],"name":"claimOtherTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"walletaddress","type":"address"}],"name":"clearStuckBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dev1Wallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","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":"earlySellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"earlySellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"earlySellTreasuryFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableEarlySellTax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxBuyTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxSellTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFees","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":[],"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":"maxBuyTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellTransactionAmount","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":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"resetLimitsBackIntoEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDev1Fee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":[],"name":"sellTreasuryFee","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":"receiver","type":"address"}],"name":"setAutoLpReceiver","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":[{"internalType":"bool","name":"onoff","type":"bool"}],"name":"setEarlySellTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"onOrOff","type":"bool"}],"name":"setMetaModifier","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":"tokensForDev1","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":"tokensForTreasury","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":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasuryWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_treasuryFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"},{"internalType":"uint256","name":"_dev1Fee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateDev1Wallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateDevWallet","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":"updateMaxBuyTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxSellTxnAmount","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":"_treasuryFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"},{"internalType":"uint256","name":"_dev1Fee","type":"uint256"},{"internalType":"uint256","name":"_earlySellLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"_earlySellTreasuryFee","type":"uint256"},{"internalType":"uint256","name":"_earlySellMarketingFee","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"},{"inputs":[{"internalType":"address","name":"newTreasuryWallet","type":"address"}],"name":"updateTreasuryWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c0604052600680546001600160a01b0319167357bbbb53193e5bddf58d6f873f4dc5d268e648841790556019600f8190556010805460ff199081166001908117909255611c2060115561070860135560158054630100000163ffffffff199091161790558254161790553480156200007757600080fd5b50604080518082018252600a8152695669646172724c61627360b01b6020808301918252835180850190945260068452652b34b230b93960d11b908401528151919291620000c8916003916200090a565b508051620000de9060049060208401906200090a565b5050506000620000f3620005b260201b60201c565b600580546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350737a250d5630b4cf539739df2c5dacb4c659f2488d62000163816001620005b6565b6200017081600162000630565b6001600160a01b03811660808190526040805163c45a015560e01b8152905163c45a015591600480820192602092909190829003018186803b158015620001b657600080fd5b505afa158015620001cb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001f19190620009b0565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200023a57600080fd5b505afa1580156200024f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002759190620009b0565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b158015620002be57600080fd5b505af1158015620002d3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002f99190620009b0565b6001600160a01b031660a081905262000314906001620005b6565b60a0516200032490600162000630565b60a05162000334906001620006a6565b600560036001808060078480808484600a826c327cb2734119d3b7a9000000006103e862000364826004620009f1565b62000370919062000a13565b600b556103e862000383826004620009f1565b6200038f919062000a13565b600c55600e819055612710620003a7826005620009f1565b620003b3919062000a13565b600d8190555089601b819055508d601c819055508c601d819055508b601e819055508a601f81905550601f54601e54601d54601c54601b54620003f7919062000a36565b62000403919062000a36565b6200040f919062000a36565b6200041b919062000a36565b601a5560218590556022899055602388905560248790556025869055858789620004468c8962000a36565b62000452919062000a36565b6200045e919062000a36565b6200046a919062000a36565b602055602882905560268490556027839055600a80546001600160a01b03191673a207d15b27242b7a733435f38e173e2624a859f0179055620004b56005546001600160a01b031690565b600780546001600160a01b039283166001600160a01b031991821617909155600554600880548316919093169081179092556009805490911682179055620004ff906001620006fa565b6200050c306001620006fa565b6200051b61dead6001620006fa565b6200053a620005326005546001600160a01b031690565b6001620005b6565b62000547306001620005b6565b6200055661dead6001620005b6565b620005756200056d6005546001600160a01b031690565b600162000630565b6200058230600162000630565b6200059161dead600162000630565b6200059d3382620007a4565b50505050505050505050505050505062000a8e565b3390565b6005546001600160a01b03163314620006055760405162461bcd60e51b81526020600482018190526024820152600080516020620050ae83398151915260448201526064015b60405180910390fd5b6001600160a01b03919091166000908152603060205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146200067b5760405162461bcd60e51b81526020600482018190526024820152600080516020620050ae8339815191526044820152606401620005fc565b6001600160a01b03919091166000908152603160205260409020805460ff1916911515919091179055565b6001600160a01b038216600081815260326020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6005546001600160a01b03163314620007455760405162461bcd60e51b81526020600482018190526024820152600080516020620050ae8339815191526044820152606401620005fc565b6001600160a01b0382166000818152602f6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b038216620007fc5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401620005fc565b6200081881600254620008a060201b620025b81790919060201c565b6002556001600160a01b038216600090815260208181526040909120546200084b918390620025b8620008a0821b17901c565b6001600160a01b038316600081815260208181526040808320949094559251848152919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b600080620008af838562000a36565b905083811015620009035760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401620005fc565b9392505050565b828054620009189062000a51565b90600052602060002090601f0160209004810192826200093c576000855562000987565b82601f106200095757805160ff191683800117855562000987565b8280016001018555821562000987579182015b82811115620009875782518255916020019190600101906200096a565b506200099592915062000999565b5090565b5b808211156200099557600081556001016200099a565b600060208284031215620009c357600080fd5b81516001600160a01b03811681146200090357600080fd5b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161562000a0e5762000a0e620009db565b500290565b60008262000a3157634e487b7160e01b600052601260045260246000fd5b500490565b6000821982111562000a4c5762000a4c620009db565b500190565b600181811c9082168062000a6657607f821691505b6020821081141562000a8857634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a05161458a62000b246000396000818161086c015281816119eb0152818161242f015281816124dd01528181612510015281816129bc01528181612d2e01528181612ddd0152818161398f01528181613a400152613a6c0152600081816105ae0152818161297e01528181613bda01528181613ca201528181613cde01528181613d580152613dc0015261458a6000f3fe6080604052600436106104e55760003560e01c80637f55e8f511610281578063b62496f51161015a578063de511791116100cc578063f2fde38b11610085578063f2fde38b14610eba578063f398d30414610eda578063f5ed243014610f0a578063f637434214610f1f578063f8b45b0514610f35578063fe72b27a14610f4b57600080fd5b8063de51179114610e19578063e2f4560514610e39578063e884f26014610e4f578063ee2a6e2e14610e64578063f11a24d314610e84578063f170d7fd14610e9a57600080fd5b8063c18bc1951161011e578063c18bc19514610d4d578063c876d0b914610d6d578063cc2ffe7c14610d87578063d257b34f14610d9d578063d85ba06314610dbd578063dd62ed3e14610dd357600080fd5b8063b62496f514610ca8578063bbc0c74214610cd8578063bcce042014610cf7578063c024666814610d0d578063c0a904a214610d2d57600080fd5b80639fccce32116101f3578063a4c82a00116101b7578063a4c82a0014610bfb578063a4d15b6414610c11578063a9059cbb14610c32578063aacebbe314610c52578063ac819f5414610c72578063ae2f506c14610c9257600080fd5b80639fccce3214610b6f578063a0d82dc514610b85578063a265777814610b9b578063a456f9a414610bbb578063a457c2d714610bdb57600080fd5b806392136913116102455780639213691314610ad8578063924de9b714610aee57806395d89b4114610b0e5780639a7a23d614610b235780639c3b4fdc14610b435780639ec22c0e14610b5957600080fd5b80637f55e8f514610723578063809d458d14610a655780638a8c523c14610a855780638da5cb5b14610a9a5780638ea5220f14610ab857600080fd5b80633ae7dc20116103be5780635c068a8c11610330578063715018a6116102e9578063715018a6146109c5578063730c1888146109da578063751039fc146109fa57806375f0a87414610a0f578063764d72bf14610a2f5780637bce5a0414610a4f57600080fd5b80635c068a8c1461090d57806367243482146109235780636a486a8e146109435780636b2fb124146109595780636ddd17131461096f57806370a082311461098f57600080fd5b806348c54b9d1161038257806348c54b9d1461084557806349bd5a5e1461085a5780634a62bb651461088e5780634fbee193146108a8578063541a43cf146108e15780635aa821a9146108f757600080fd5b80633ae7dc20146107af5780633d005e94146107cf5780633ea3b567146107e55780634626402b14610805578063475eb16f1461082557600080fd5b80631e0eae87116104575780632cea31091161041b5780632cea3109146107035780632d5a5d34146107235780632e0d29bd146107435780632e82f1a014610759578063313ce56714610773578063395093511461078f57600080fd5b80631e0eae87146106815780631f3fed8f146106a157806323b872dd146106b75780632bf3d42d146106d75780632c3e486c146106ed57600080fd5b806316a2f82a116104a957806316a2f82a146105e857806318160ddd1461060a5780631816467f1461061f578063184c16c51461063f578063199ffc72146106555780631a8145bb1461066b57600080fd5b806302259e9e146104f157806306fdde031461051a5780630855f25d1461053c578063095ea7b31461057c5780631694505e1461059c57600080fd5b366104ec57005b600080fd5b3480156104fd57600080fd5b50610507600c5481565b6040519081526020015b60405180910390f35b34801561052657600080fd5b5061052f610f6b565b6040516105119190613e40565b34801561054857600080fd5b5061056c610557366004613eaa565b60316020526000908152604090205460ff1681565b6040519015158152602001610511565b34801561058857600080fd5b5061056c610597366004613ec7565b610ffd565b3480156105a857600080fd5b506105d07f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610511565b3480156105f457600080fd5b50610608610603366004613eaa565b611014565b005b34801561061657600080fd5b50600254610507565b34801561062b57600080fd5b5061060861063a366004613eaa565b611068565b34801561064b57600080fd5b5061050760135481565b34801561066157600080fd5b50610507600f5481565b34801561067757600080fd5b50610507602b5481565b34801561068d57600080fd5b5061060861069c366004613ef3565b6110ef565b3480156106ad57600080fd5b5061050760295481565b3480156106c357600080fd5b5061056c6106d2366004613f0c565b6111d0565b3480156106e357600080fd5b5061050760275481565b3480156106f957600080fd5b5061050760115481565b34801561070f57600080fd5b506009546105d0906001600160a01b031681565b34801561072f57600080fd5b5061060861073e366004613f5b565b611239565b34801561074f57600080fd5b50610507602d5481565b34801561076557600080fd5b5060105461056c9060ff1681565b34801561077f57600080fd5b5060405160128152602001610511565b34801561079b57600080fd5b5061056c6107aa366004613ec7565b61128e565b3480156107bb57600080fd5b506106086107ca366004613f94565b6112c4565b3480156107db57600080fd5b5061050760285481565b3480156107f157600080fd5b50610608610800366004613f5b565b6113f2565b34801561081157600080fd5b50600a546105d0906001600160a01b031681565b34801561083157600080fd5b50610608610840366004613fc2565b611447565b34801561085157600080fd5b50610608611523565b34801561086657600080fd5b506105d07f000000000000000000000000000000000000000000000000000000000000000081565b34801561089a57600080fd5b5060155461056c9060ff1681565b3480156108b457600080fd5b5061056c6108c3366004613eaa565b6001600160a01b03166000908152602f602052604090205460ff1690565b3480156108ed57600080fd5b5061050760265481565b34801561090357600080fd5b50610507600b5481565b34801561091957600080fd5b50610507601b5481565b34801561092f57600080fd5b5061060861093e3660046140ed565b611589565b34801561094f57600080fd5b5061050760205481565b34801561096557600080fd5b5061050760215481565b34801561097b57600080fd5b5060155461056c9062010000900460ff1681565b34801561099b57600080fd5b506105076109aa366004613eaa565b6001600160a01b031660009081526020819052604090205490565b3480156109d157600080fd5b50610608611661565b3480156109e657600080fd5b506106086109f53660046141af565b6116d5565b348015610a0657600080fd5b5061056c6117fe565b348015610a1b57600080fd5b506007546105d0906001600160a01b031681565b348015610a3b57600080fd5b50610608610a4a366004613eaa565b61183b565b348015610a5b57600080fd5b50610507601c5481565b348015610a7157600080fd5b50610608610a80366004613eaa565b61189e565b348015610a9157600080fd5b50610608611925565b348015610aa657600080fd5b506005546001600160a01b03166105d0565b348015610ac457600080fd5b506008546105d0906001600160a01b031681565b348015610ae457600080fd5b5061050760225481565b348015610afa57600080fd5b50610608610b093660046141e8565b61196a565b348015610b1a57600080fd5b5061052f6119b0565b348015610b2f57600080fd5b50610608610b3e366004613f5b565b6119bf565b348015610b4f57600080fd5b50610507601e5481565b348015610b6557600080fd5b5061050760145481565b348015610b7b57600080fd5b50610507602c5481565b348015610b9157600080fd5b5061050760245481565b348015610ba757600080fd5b50610608610bb63660046141e8565b611a9b565b348015610bc757600080fd5b50610608610bd6366004613eaa565b611ae3565b348015610be757600080fd5b5061056c610bf6366004613ec7565b611b2f565b348015610c0757600080fd5b5061050760125481565b348015610c1d57600080fd5b5060155461056c906301000000900460ff1681565b348015610c3e57600080fd5b5061056c610c4d366004613ec7565b611b7e565b348015610c5e57600080fd5b50610608610c6d366004613eaa565b611b8b565b348015610c7e57600080fd5b50610608610c8d366004613f5b565b611c12565b348015610c9e57600080fd5b5061050760255481565b348015610cb457600080fd5b5061056c610cc3366004613eaa565b60326020526000908152604090205460ff1681565b348015610ce457600080fd5b5060155461056c90610100900460ff1681565b348015610d0357600080fd5b50610507601f5481565b348015610d1957600080fd5b50610608610d28366004613f5b565b611c67565b348015610d3957600080fd5b50610608610d48366004613f5b565b611cf0565b348015610d5957600080fd5b50610608610d68366004613ef3565b611d67565b348015610d7957600080fd5b5060195461056c9060ff1681565b348015610d9357600080fd5b50610507602a5481565b348015610da957600080fd5b5061056c610db8366004613ef3565b611e38565b348015610dc957600080fd5b50610507601a5481565b348015610ddf57600080fd5b50610507610dee366004613f94565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610e2557600080fd5b50610608610e34366004613ef3565b611f8a565b348015610e4557600080fd5b50610507600d5481565b348015610e5b57600080fd5b5061056c61206a565b348015610e7057600080fd5b50610608610e7f366004613eaa565b6120a7565b348015610e9057600080fd5b50610507601d5481565b348015610ea657600080fd5b50610608610eb5366004614205565b61212e565b348015610ec657600080fd5b50610608610ed5366004613eaa565b6121f8565b348015610ee657600080fd5b5061056c610ef5366004613eaa565b60306020526000908152604090205460ff1681565b348015610f1657600080fd5b5061056c6122e3565b348015610f2b57600080fd5b5061050760235481565b348015610f4157600080fd5b50610507600e5481565b348015610f5757600080fd5b5061056c610f66366004613ef3565b612324565b606060038054610f7a90614240565b80601f0160208091040260200160405190810160405280929190818152602001828054610fa690614240565b8015610ff35780601f10610fc857610100808354040283529160200191610ff3565b820191906000526020600020905b815481529060010190602001808311610fd657829003601f168201915b5050505050905090565b600061100a33848461261e565b5060015b92915050565b6005546001600160a01b031633146110475760405162461bcd60e51b815260040161103e9061427b565b60405180910390fd5b6001600160a01b03166000908152602f60205260409020805460ff19169055565b6005546001600160a01b031633146110925760405162461bcd60e51b815260040161103e9061427b565b6008546040516001600160a01b03918216918316907f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74390600090a3600880546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146111195760405162461bcd60e51b815260040161103e9061427b565b670de0b6b3a76400006103e861112e60025490565b6111399060046142c6565b61114391906142e5565b61114d91906142e5565b8110156111b85760405162461bcd60e51b815260206004820152603360248201527f43616e6e6f7420736574206d617853656c6c5472616e73616374696f6e416d6f604482015272756e74206c6f776572207468616e20302e312560681b606482015260840161103e565b6111ca81670de0b6b3a76400006142c6565b600c5550565b60006111dd848484612743565b61122f843361122a85604051806060016040528060288152602001614508602891396001600160a01b038a16600090815260016020908152604080832033845290915290205491906133c2565b61261e565b5060019392505050565b6005546001600160a01b031633146112635760405162461bcd60e51b815260040161103e9061427b565b6001600160a01b03919091166000908152601860205260409020805460ff1916911515919091179055565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909161100a91859061122a90866125b8565b6005546001600160a01b031633146112ee5760405162461bcd60e51b815260040161103e9061427b565b6040516370a0823160e01b81523060048201526001600160a01b0383169063a9059cbb90839083906370a082319060240160206040518083038186803b15801561133757600080fd5b505afa15801561134b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061136f9190614307565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381600087803b1580156113b557600080fd5b505af11580156113c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113ed9190614320565b505050565b6005546001600160a01b0316331461141c5760405162461bcd60e51b815260040161103e9061427b565b6001600160a01b03919091166000908152603060205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146114715760405162461bcd60e51b815260040161103e9061427b565b602288905560218790556023869055602485905560258490556026839055602882905560278190558385876114a68a8c61433d565b6114b0919061433d565b6114ba919061433d565b6114c4919061433d565b6020819055601910156115195760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323525206f72206c657373000000604482015260640161103e565b5050505050505050565b6005546001600160a01b0316331461154d5760405162461bcd60e51b815260040161103e9061427b565b6009546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015611586573d6000803e3d6000fd5b50565b6005546001600160a01b031633146115b35760405162461bcd60e51b815260040161103e9061427b565b805182511480156115c657506101008251105b6116065760405162461bcd60e51b8152602060048201526011602482015270496e636f7272656374206c656e6774687360781b604482015260640161103e565b60005b82518110156113ed5761164f3384838151811061162857611628614355565b602002602001015184848151811061164257611642614355565b6020026020010151612743565b806116598161436b565b915050611609565b6005546001600160a01b0316331461168b5760405162461bcd60e51b815260040161103e9061427b565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b031633146116ff5760405162461bcd60e51b815260040161103e9061427b565b61025883101561176d5760405162461bcd60e51b815260206004820152603360248201527f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e207468604482015272616e206576657279203130206d696e7574657360681b606482015260840161103e565b6103e8821115801561177d575060015b6117e25760405162461bcd60e51b815260206004820152603060248201527f4d75737420736574206175746f204c50206275726e2070657263656e7420626560448201526f747765656e20302520616e642031302560801b606482015260840161103e565b601192909255600f556010805460ff1916911515919091179055565b6005546000906001600160a01b0316331461182b5760405162461bcd60e51b815260040161103e9061427b565b506015805460ff19169055600190565b6005546001600160a01b031633146118655760405162461bcd60e51b815260040161103e9061427b565b6040516001600160a01b038216904780156108fc02916000818181858888f1935050505015801561189a573d6000803e3d6000fd5b5050565b6005546001600160a01b031633146118c85760405162461bcd60e51b815260040161103e9061427b565b600a546040516001600160a01b03918216918316907f02f8a1483978974a6412ba3a67040b4daa4fc0dfe9439a7295f9a9538394f63590600090a3600a80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b0316331461194f5760405162461bcd60e51b815260040161103e9061427b565b6015805462ffff001916620101001790554260125543602e55565b6005546001600160a01b031633146119945760405162461bcd60e51b815260040161103e9061427b565b60158054911515620100000262ff000019909216919091179055565b606060048054610f7a90614240565b6005546001600160a01b031633146119e95760405162461bcd60e51b815260040161103e9061427b565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415611a915760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000606482015260840161103e565b61189a82826133fc565b6005546001600160a01b03163314611ac55760405162461bcd60e51b815260040161103e9061427b565b6015805491151563010000000263ff00000019909216919091179055565b6005546001600160a01b03163314611b0d5760405162461bcd60e51b815260040161103e9061427b565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b600061100a338461122a85604051806060016040528060258152602001614530602591393360009081526001602090815260408083206001600160a01b038d16845290915290205491906133c2565b600061100a338484612743565b6005546001600160a01b03163314611bb55760405162461bcd60e51b815260040161103e9061427b565b6007546040516001600160a01b03918216918316907fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567490600090a3600780546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314611c3c5760405162461bcd60e51b815260040161103e9061427b565b6001600160a01b03919091166000908152603160205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314611c915760405162461bcd60e51b815260040161103e9061427b565b6001600160a01b0382166000818152602f6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b03163314611d1a5760405162461bcd60e51b815260040161103e9061427b565b6001600160a01b039091166000908152603060209081526040808320805494151560ff199586168117909155603183528184208054861682179055602f9092529091208054909216179055565b6005546001600160a01b03163314611d915760405162461bcd60e51b815260040161103e9061427b565b670de0b6b3a76400006103e8611da660025490565b611db19060056142c6565b611dbb91906142e5565b611dc591906142e5565b811015611e205760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015263302e352560e01b606482015260840161103e565b611e3281670de0b6b3a76400006142c6565b600e5550565b6005546000906001600160a01b03163314611e655760405162461bcd60e51b815260040161103e9061427b565b620186a0611e7260025490565b611e7d9060046142c6565b611e8791906142e5565b821015611ef45760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b606482015260840161103e565b6103e8611f0060025490565b611f0b9060146142c6565b611f1591906142e5565b821115611f815760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b606482015260840161103e565b50600d55600190565b6005546001600160a01b03163314611fb45760405162461bcd60e51b815260040161103e9061427b565b670de0b6b3a76400006103e8611fc960025490565b611fd49060046142c6565b611fde91906142e5565b611fe891906142e5565b8110156120525760405162461bcd60e51b815260206004820152603260248201527f43616e6e6f7420736574206d61784275795472616e73616374696f6e416d6f756044820152716e74206c6f776572207468616e20302e312560701b606482015260840161103e565b61206481670de0b6b3a76400006142c6565b600b5550565b6005546000906001600160a01b031633146120975760405162461bcd60e51b815260040161103e9061427b565b506019805460ff19169055600190565b6005546001600160a01b031633146120d15760405162461bcd60e51b815260040161103e9061427b565b6009546040516001600160a01b03918216918316907fb7bde7558dd808650a9e0f7570d4857487002f91d457a5c9e95d64c80b217ca890600090a3600980546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146121585760405162461bcd60e51b815260040161103e9061427b565b601c859055601b849055601d839055601e829055601f81905580828461217e878961433d565b612188919061433d565b612192919061433d565b61219c919061433d565b601a819055603210156121f15760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420353025206f72206c657373000000604482015260640161103e565b5050505050565b6005546001600160a01b031633146122225760405162461bcd60e51b815260040161103e9061427b565b6001600160a01b0381166122875760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161103e565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546000906001600160a01b031633146123105760405162461bcd60e51b815260040161103e9061427b565b506015805460ff1916600190811790915590565b6005546000906001600160a01b031633146123515760405162461bcd60e51b815260040161103e9061427b565b601354601454612361919061433d565b42116123af5760405162461bcd60e51b815260206004820181905260248201527f4d757374207761697420666f7220636f6f6c646f776e20746f2066696e697368604482015260640161103e565b6103e88211156124145760405162461bcd60e51b815260206004820152602a60248201527f4d6179206e6f74206e756b65206d6f7265207468616e20313025206f6620746f60448201526906b656e7320696e204c560b41b606482015260840161103e565b426014556040516370a0823160e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016600482015260009030906370a082319060240160206040518083038186803b15801561247a57600080fd5b505afa15801561248e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124b29190614307565b905060006124cc6127106124c68487613450565b906134cf565b9050801561250c5760065461250c907f0000000000000000000000000000000000000000000000000000000000000000906001600160a01b031683613511565b60007f00000000000000000000000000000000000000000000000000000000000000009050806001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561256c57600080fd5b505af1158015612580573d6000803e3d6000fd5b50506040517f8462566617872a3fbab94534675218431ff9e204063ee3f4f43d965626a39abb925060009150a1506001949350505050565b6000806125c5838561433d565b9050838110156126175760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640161103e565b9392505050565b6001600160a01b0383166126805760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161103e565b6001600160a01b0382166126e15760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161103e565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0383166127695760405162461bcd60e51b815260040161103e90614386565b6001600160a01b03821661278f5760405162461bcd60e51b815260040161103e906143cb565b6001600160a01b03821660009081526018602052604090205460ff161580156127d157506001600160a01b03831660009081526018602052604090205460ff16155b6128375760405162461bcd60e51b815260206004820152603160248201527f596f752068617665206265656e20626c61636b6c69737465642066726f6d207460448201527072616e73666572696e6720746f6b656e7360781b606482015260840161103e565b80612848576113ed83836000613511565b60155460ff1615612d14576005546001600160a01b0384811691161480159061287f57506005546001600160a01b03838116911614155b801561289357506001600160a01b03821615155b80156128aa57506001600160a01b03821661dead14155b80156128c05750600654600160a01b900460ff16155b15612d1457601554610100900460ff16612958576001600160a01b0383166000908152602f602052604090205460ff168061291357506001600160a01b0382166000908152602f602052604090205460ff165b6129585760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b604482015260640161103e565b60195460ff1615612a9f576005546001600160a01b038381169116148015906129b357507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b80156129f157507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b15612a9f57326000908152601660205260409020544311612a8c5760405162461bcd60e51b815260206004820152604960248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b6064820152681030b63637bbb2b21760b91b608482015260a40161103e565b3260009081526016602052604090204390555b6001600160a01b03831660009081526032602052604090205460ff168015612ae057506001600160a01b03821660009081526030602052604090205460ff16155b15612bcc57600b54811115612b5d5760405162461bcd60e51b815260206004820152603860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527f6d61784275795472616e73616374696f6e416d6f756e742e0000000000000000606482015260840161103e565b600e546001600160a01b038316600090815260208190526040902054612b83908361433d565b1115612bc75760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b604482015260640161103e565b612d14565b6001600160a01b03821660009081526032602052604090205460ff168015612c0d57506001600160a01b03831660009081526031602052604090205460ff16155b15612c8a57600c54811115612bc75760405162461bcd60e51b815260206004820152603a60248201527f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560448201527f206d617853656c6c5472616e73616374696f6e416d6f756e742e000000000000606482015260840161103e565b6001600160a01b03821660009081526031602052604090205460ff16612d1457600e546001600160a01b038316600090815260208190526040902054612cd0908361433d565b1115612d145760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b604482015260640161103e565b602e54612d2290600161433d565b4311158015612d6357507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b8015612d8c57506001600160a01b038216737a250d5630b4cf539739df2c5dacb4c659f2488d14155b15612ddb576001600160a01b038216600081815260186020526040808220805460ff19166001179055517fb90badc1cf1c52268f4fa9afb5276aebf640bcca3300cdfc9cf37db17daa13e29190a25b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0390811690841614801581612e2157506015546301000000900460ff165b15612ebb576001600160a01b03841660009081526017602052604090205415801590612e7357506001600160a01b0384166000908152601760205260409020544290612e70906201518061433d565b10155b15612eb6576026546023819055602854602181905560275460228190556024549192612e9e9161433d565b612ea8919061433d565b612eb2919061433d565b6020555b612ef4565b6001600160a01b038316600090815260176020526040902054612ef4576001600160a01b03831660009081526017602052604090204290555b30600090815260208190526040902054600d5481108015908190612f20575060155462010000900460ff165b8015612f365750600654600160a01b900460ff16155b8015612f5b57506001600160a01b03861660009081526032602052604090205460ff16155b8015612f8057506001600160a01b0386166000908152602f602052604090205460ff16155b8015612fa557506001600160a01b0385166000908152602f602052604090205460ff16155b15612fd3576006805460ff60a01b1916600160a01b179055612fc561361a565b6006805460ff60a01b191690555b600654600160a01b900460ff1615801561300557506001600160a01b03851660009081526032602052604090205460ff165b8015613013575060105460ff165b801561302e575060115460125461302a919061433d565b4210155b801561305357506001600160a01b0386166000908152602f602052604090205460ff16155b1561306257613060613974565b505b6006546001600160a01b03861660009081526032602052604081205460ff600160a01b90930483161592161580156130b357506001600160a01b03881660009081526032602052604090205460ff16155b6001600160a01b0389166000908152602f602052604090205490915060ff16806130f557506001600160a01b0387166000908152602f602052604090205460ff165b806130fd5750805b1561310757600091505b600082156133ac576001600160a01b03881660009081526032602052604090205460ff16801561313957506000602054115b156132515761315860646124c66020548a61345090919063ffffffff16565b90506020546023548261316b91906142c6565b61317591906142e5565b602b6000828254613186919061433d565b909155505060205460245461319b90836142c6565b6131a591906142e5565b602c60008282546131b6919061433d565b90915550506020546025546131cb90836142c6565b6131d591906142e5565b602d60008282546131e6919061433d565b90915550506020546022546131fb90836142c6565b61320591906142e5565b60296000828254613216919061433d565b909155505060205460215461322b90836142c6565b61323591906142e5565b602a6000828254613246919061433d565b9091555061338e9050565b6001600160a01b03891660009081526032602052604090205460ff16801561327b57506000601a54115b1561338e5761329a60646124c6601a548a61345090919063ffffffff16565b9050601a54601d54826132ad91906142c6565b6132b791906142e5565b602b60008282546132c8919061433d565b9091555050601a54601e546132dd90836142c6565b6132e791906142e5565b602c60008282546132f8919061433d565b9091555050601a54601f5461330d90836142c6565b61331791906142e5565b602d6000828254613328919061433d565b9091555050601a54601c5461333d90836142c6565b61334791906142e5565b60296000828254613358919061433d565b9091555050601a54601b5461336d90836142c6565b61337791906142e5565b602a6000828254613388919061433d565b90915550505b801561339f5761339f893083613511565b6133a9818861440e565b96505b6133b7898989613511565b505050505050505050565b600081848411156133e65760405162461bcd60e51b815260040161103e9190613e40565b5060006133f3848661440e565b95945050505050565b6001600160a01b038216600081815260326020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b60008261345f5750600061100e565b600061346b83856142c6565b90508261347885836142e5565b146126175760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b606482015260840161103e565b600061261783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613b13565b6001600160a01b0383166135375760405162461bcd60e51b815260040161103e90614386565b6001600160a01b03821661355d5760405162461bcd60e51b815260040161103e906143cb565b61359a816040518060600160405280602681526020016144e2602691396001600160a01b03861660009081526020819052604090205491906133c2565b6001600160a01b0380851660009081526020819052604080822093909355908416815220546135c990826125b8565b6001600160a01b038381166000818152602081815260409182902094909455518481529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101612736565b3060009081526020819052604081205490506000602a54602d54602c54602954602b54613647919061433d565b613651919061433d565b61365b919061433d565b613665919061433d565b90506000821580613674575081155b1561367e57505050565b600d5461368c9060146142c6565b8311156136a457600d546136a19060146142c6565b92505b6000600283602b54866136b791906142c6565b6136c191906142e5565b6136cb91906142e5565b905060006136d98583613b41565b9050476136e582613b83565b60006136f14783613b41565b9050600061370e876124c66029548561345090919063ffffffff16565b9050600061372b886124c6602c548661345090919063ffffffff16565b90506000613748896124c6602d548761345090919063ffffffff16565b905060006137658a6124c6602a548861345090919063ffffffff16565b90506000818385613776888a61440e565b613780919061440e565b61378a919061440e565b613794919061440e565b6000602b8190556029819055602c819055602d819055602a8190556008546040519293506001600160a01b031691869181818185875af1925050503d80600081146137fb576040519150601f19603f3d011682016040523d82523d6000602084013e613800565b606091505b5050600954604051919b506001600160a01b0316908490600081818185875af1925050503d8060008114613850576040519150601f19603f3d011682016040523d82523d6000602084013e613855565b606091505b50909a505088158015906138695750600081115b156138bc576138788982613d52565b602b54604080518a81526020810184905280820192909252517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a15b6007546040516001600160a01b03909116904790600081818185875af1925050503d8060008114613909576040519150601f19603f3d011682016040523d82523d6000602084013e61390e565b606091505b5050600a54604051919b506001600160a01b0316904790600081818185875af1925050503d806000811461395e576040519150601f19603f3d011682016040523d82523d6000602084013e613963565b606091505b505050505050505050505050505050565b426012556040516370a0823160e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166004820152600090819030906370a082319060240160206040518083038186803b1580156139dc57600080fd5b505afa1580156139f0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a149190614307565b90506000613a336127106124c6600f548561345090919063ffffffff16565b90508015613a6857613a687f000000000000000000000000000000000000000000000000000000000000000061dead83613511565b60007f00000000000000000000000000000000000000000000000000000000000000009050806001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613ac857600080fd5b505af1158015613adc573d6000803e3d6000fd5b50506040517f454c91ae84fcc766ddda0dcb289f26b3d0176efeacf4061fc219fa6ca8c3048d925060009150a16001935050505090565b60008183613b345760405162461bcd60e51b815260040161103e9190613e40565b5060006133f384866142e5565b600061261783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506133c2565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110613bb857613bb8614355565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015613c3157600080fd5b505afa158015613c45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c699190614425565b81600181518110613c7c57613c7c614355565b60200260200101906001600160a01b031690816001600160a01b031681525050613cc7307f00000000000000000000000000000000000000000000000000000000000000008461261e565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac94790613d1c908590600090869030904290600401614442565b600060405180830381600087803b158015613d3657600080fd5b505af1158015613d4a573d6000803e3d6000fd5b505050505050565b613d7d307f00000000000000000000000000000000000000000000000000000000000000008461261e565b60065460405163f305d71960e01b81523060048201526024810184905260006044820181905260648201526001600160a01b0391821660848201524260a48201527f00000000000000000000000000000000000000000000000000000000000000009091169063f305d71990839060c4016060604051808303818588803b158015613e0757600080fd5b505af1158015613e1b573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906121f191906144b3565b600060208083528351808285015260005b81811015613e6d57858101830151858201604001528201613e51565b81811115613e7f576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b038116811461158657600080fd5b600060208284031215613ebc57600080fd5b813561261781613e95565b60008060408385031215613eda57600080fd5b8235613ee581613e95565b946020939093013593505050565b600060208284031215613f0557600080fd5b5035919050565b600080600060608486031215613f2157600080fd5b8335613f2c81613e95565b92506020840135613f3c81613e95565b929592945050506040919091013590565b801515811461158657600080fd5b60008060408385031215613f6e57600080fd5b8235613f7981613e95565b91506020830135613f8981613f4d565b809150509250929050565b60008060408385031215613fa757600080fd5b8235613fb281613e95565b91506020830135613f8981613e95565b600080600080600080600080610100898b031215613fdf57600080fd5b505086359860208801359850604088013597606081013597506080810135965060a0810135955060c0810135945060e0013592509050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561405657614056614017565b604052919050565b600067ffffffffffffffff82111561407857614078614017565b5060051b60200190565b600082601f83011261409357600080fd5b813560206140a86140a38361405e565b61402d565b82815260059290921b840181019181810190868411156140c757600080fd5b8286015b848110156140e257803583529183019183016140cb565b509695505050505050565b6000806040838503121561410057600080fd5b823567ffffffffffffffff8082111561411857600080fd5b818501915085601f83011261412c57600080fd5b8135602061413c6140a38361405e565b82815260059290921b8401810191818101908984111561415b57600080fd5b948201945b8386101561418257853561417381613e95565b82529482019490820190614160565b9650508601359250508082111561419857600080fd5b506141a585828601614082565b9150509250929050565b6000806000606084860312156141c457600080fd5b833592506020840135915060408401356141dd81613f4d565b809150509250925092565b6000602082840312156141fa57600080fd5b813561261781613f4d565b600080600080600060a0868803121561421d57600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b600181811c9082168061425457607f821691505b6020821081141561427557634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60008160001904831182151516156142e0576142e06142b0565b500290565b60008261430257634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121561431957600080fd5b5051919050565b60006020828403121561433257600080fd5b815161261781613f4d565b60008219821115614350576143506142b0565b500190565b634e487b7160e01b600052603260045260246000fd5b600060001982141561437f5761437f6142b0565b5060010190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b600082821015614420576144206142b0565b500390565b60006020828403121561443757600080fd5b815161261781613e95565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156144925784516001600160a01b03168352938301939183019160010161446d565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156144c857600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212204d3125fa61563fa9e2e2fab4568780e96c740ed252f97cd7ab9d2ad1f5f21bfb64736f6c634300080900334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572

Deployed Bytecode

0x6080604052600436106104e55760003560e01c80637f55e8f511610281578063b62496f51161015a578063de511791116100cc578063f2fde38b11610085578063f2fde38b14610eba578063f398d30414610eda578063f5ed243014610f0a578063f637434214610f1f578063f8b45b0514610f35578063fe72b27a14610f4b57600080fd5b8063de51179114610e19578063e2f4560514610e39578063e884f26014610e4f578063ee2a6e2e14610e64578063f11a24d314610e84578063f170d7fd14610e9a57600080fd5b8063c18bc1951161011e578063c18bc19514610d4d578063c876d0b914610d6d578063cc2ffe7c14610d87578063d257b34f14610d9d578063d85ba06314610dbd578063dd62ed3e14610dd357600080fd5b8063b62496f514610ca8578063bbc0c74214610cd8578063bcce042014610cf7578063c024666814610d0d578063c0a904a214610d2d57600080fd5b80639fccce32116101f3578063a4c82a00116101b7578063a4c82a0014610bfb578063a4d15b6414610c11578063a9059cbb14610c32578063aacebbe314610c52578063ac819f5414610c72578063ae2f506c14610c9257600080fd5b80639fccce3214610b6f578063a0d82dc514610b85578063a265777814610b9b578063a456f9a414610bbb578063a457c2d714610bdb57600080fd5b806392136913116102455780639213691314610ad8578063924de9b714610aee57806395d89b4114610b0e5780639a7a23d614610b235780639c3b4fdc14610b435780639ec22c0e14610b5957600080fd5b80637f55e8f514610723578063809d458d14610a655780638a8c523c14610a855780638da5cb5b14610a9a5780638ea5220f14610ab857600080fd5b80633ae7dc20116103be5780635c068a8c11610330578063715018a6116102e9578063715018a6146109c5578063730c1888146109da578063751039fc146109fa57806375f0a87414610a0f578063764d72bf14610a2f5780637bce5a0414610a4f57600080fd5b80635c068a8c1461090d57806367243482146109235780636a486a8e146109435780636b2fb124146109595780636ddd17131461096f57806370a082311461098f57600080fd5b806348c54b9d1161038257806348c54b9d1461084557806349bd5a5e1461085a5780634a62bb651461088e5780634fbee193146108a8578063541a43cf146108e15780635aa821a9146108f757600080fd5b80633ae7dc20146107af5780633d005e94146107cf5780633ea3b567146107e55780634626402b14610805578063475eb16f1461082557600080fd5b80631e0eae87116104575780632cea31091161041b5780632cea3109146107035780632d5a5d34146107235780632e0d29bd146107435780632e82f1a014610759578063313ce56714610773578063395093511461078f57600080fd5b80631e0eae87146106815780631f3fed8f146106a157806323b872dd146106b75780632bf3d42d146106d75780632c3e486c146106ed57600080fd5b806316a2f82a116104a957806316a2f82a146105e857806318160ddd1461060a5780631816467f1461061f578063184c16c51461063f578063199ffc72146106555780631a8145bb1461066b57600080fd5b806302259e9e146104f157806306fdde031461051a5780630855f25d1461053c578063095ea7b31461057c5780631694505e1461059c57600080fd5b366104ec57005b600080fd5b3480156104fd57600080fd5b50610507600c5481565b6040519081526020015b60405180910390f35b34801561052657600080fd5b5061052f610f6b565b6040516105119190613e40565b34801561054857600080fd5b5061056c610557366004613eaa565b60316020526000908152604090205460ff1681565b6040519015158152602001610511565b34801561058857600080fd5b5061056c610597366004613ec7565b610ffd565b3480156105a857600080fd5b506105d07f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b039091168152602001610511565b3480156105f457600080fd5b50610608610603366004613eaa565b611014565b005b34801561061657600080fd5b50600254610507565b34801561062b57600080fd5b5061060861063a366004613eaa565b611068565b34801561064b57600080fd5b5061050760135481565b34801561066157600080fd5b50610507600f5481565b34801561067757600080fd5b50610507602b5481565b34801561068d57600080fd5b5061060861069c366004613ef3565b6110ef565b3480156106ad57600080fd5b5061050760295481565b3480156106c357600080fd5b5061056c6106d2366004613f0c565b6111d0565b3480156106e357600080fd5b5061050760275481565b3480156106f957600080fd5b5061050760115481565b34801561070f57600080fd5b506009546105d0906001600160a01b031681565b34801561072f57600080fd5b5061060861073e366004613f5b565b611239565b34801561074f57600080fd5b50610507602d5481565b34801561076557600080fd5b5060105461056c9060ff1681565b34801561077f57600080fd5b5060405160128152602001610511565b34801561079b57600080fd5b5061056c6107aa366004613ec7565b61128e565b3480156107bb57600080fd5b506106086107ca366004613f94565b6112c4565b3480156107db57600080fd5b5061050760285481565b3480156107f157600080fd5b50610608610800366004613f5b565b6113f2565b34801561081157600080fd5b50600a546105d0906001600160a01b031681565b34801561083157600080fd5b50610608610840366004613fc2565b611447565b34801561085157600080fd5b50610608611523565b34801561086657600080fd5b506105d07f000000000000000000000000d1c596e7cb11cb0e4255ce63a62dc7a3c0214eaf81565b34801561089a57600080fd5b5060155461056c9060ff1681565b3480156108b457600080fd5b5061056c6108c3366004613eaa565b6001600160a01b03166000908152602f602052604090205460ff1690565b3480156108ed57600080fd5b5061050760265481565b34801561090357600080fd5b50610507600b5481565b34801561091957600080fd5b50610507601b5481565b34801561092f57600080fd5b5061060861093e3660046140ed565b611589565b34801561094f57600080fd5b5061050760205481565b34801561096557600080fd5b5061050760215481565b34801561097b57600080fd5b5060155461056c9062010000900460ff1681565b34801561099b57600080fd5b506105076109aa366004613eaa565b6001600160a01b031660009081526020819052604090205490565b3480156109d157600080fd5b50610608611661565b3480156109e657600080fd5b506106086109f53660046141af565b6116d5565b348015610a0657600080fd5b5061056c6117fe565b348015610a1b57600080fd5b506007546105d0906001600160a01b031681565b348015610a3b57600080fd5b50610608610a4a366004613eaa565b61183b565b348015610a5b57600080fd5b50610507601c5481565b348015610a7157600080fd5b50610608610a80366004613eaa565b61189e565b348015610a9157600080fd5b50610608611925565b348015610aa657600080fd5b506005546001600160a01b03166105d0565b348015610ac457600080fd5b506008546105d0906001600160a01b031681565b348015610ae457600080fd5b5061050760225481565b348015610afa57600080fd5b50610608610b093660046141e8565b61196a565b348015610b1a57600080fd5b5061052f6119b0565b348015610b2f57600080fd5b50610608610b3e366004613f5b565b6119bf565b348015610b4f57600080fd5b50610507601e5481565b348015610b6557600080fd5b5061050760145481565b348015610b7b57600080fd5b50610507602c5481565b348015610b9157600080fd5b5061050760245481565b348015610ba757600080fd5b50610608610bb63660046141e8565b611a9b565b348015610bc757600080fd5b50610608610bd6366004613eaa565b611ae3565b348015610be757600080fd5b5061056c610bf6366004613ec7565b611b2f565b348015610c0757600080fd5b5061050760125481565b348015610c1d57600080fd5b5060155461056c906301000000900460ff1681565b348015610c3e57600080fd5b5061056c610c4d366004613ec7565b611b7e565b348015610c5e57600080fd5b50610608610c6d366004613eaa565b611b8b565b348015610c7e57600080fd5b50610608610c8d366004613f5b565b611c12565b348015610c9e57600080fd5b5061050760255481565b348015610cb457600080fd5b5061056c610cc3366004613eaa565b60326020526000908152604090205460ff1681565b348015610ce457600080fd5b5060155461056c90610100900460ff1681565b348015610d0357600080fd5b50610507601f5481565b348015610d1957600080fd5b50610608610d28366004613f5b565b611c67565b348015610d3957600080fd5b50610608610d48366004613f5b565b611cf0565b348015610d5957600080fd5b50610608610d68366004613ef3565b611d67565b348015610d7957600080fd5b5060195461056c9060ff1681565b348015610d9357600080fd5b50610507602a5481565b348015610da957600080fd5b5061056c610db8366004613ef3565b611e38565b348015610dc957600080fd5b50610507601a5481565b348015610ddf57600080fd5b50610507610dee366004613f94565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610e2557600080fd5b50610608610e34366004613ef3565b611f8a565b348015610e4557600080fd5b50610507600d5481565b348015610e5b57600080fd5b5061056c61206a565b348015610e7057600080fd5b50610608610e7f366004613eaa565b6120a7565b348015610e9057600080fd5b50610507601d5481565b348015610ea657600080fd5b50610608610eb5366004614205565b61212e565b348015610ec657600080fd5b50610608610ed5366004613eaa565b6121f8565b348015610ee657600080fd5b5061056c610ef5366004613eaa565b60306020526000908152604090205460ff1681565b348015610f1657600080fd5b5061056c6122e3565b348015610f2b57600080fd5b5061050760235481565b348015610f4157600080fd5b50610507600e5481565b348015610f5757600080fd5b5061056c610f66366004613ef3565b612324565b606060038054610f7a90614240565b80601f0160208091040260200160405190810160405280929190818152602001828054610fa690614240565b8015610ff35780601f10610fc857610100808354040283529160200191610ff3565b820191906000526020600020905b815481529060010190602001808311610fd657829003601f168201915b5050505050905090565b600061100a33848461261e565b5060015b92915050565b6005546001600160a01b031633146110475760405162461bcd60e51b815260040161103e9061427b565b60405180910390fd5b6001600160a01b03166000908152602f60205260409020805460ff19169055565b6005546001600160a01b031633146110925760405162461bcd60e51b815260040161103e9061427b565b6008546040516001600160a01b03918216918316907f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74390600090a3600880546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146111195760405162461bcd60e51b815260040161103e9061427b565b670de0b6b3a76400006103e861112e60025490565b6111399060046142c6565b61114391906142e5565b61114d91906142e5565b8110156111b85760405162461bcd60e51b815260206004820152603360248201527f43616e6e6f7420736574206d617853656c6c5472616e73616374696f6e416d6f604482015272756e74206c6f776572207468616e20302e312560681b606482015260840161103e565b6111ca81670de0b6b3a76400006142c6565b600c5550565b60006111dd848484612743565b61122f843361122a85604051806060016040528060288152602001614508602891396001600160a01b038a16600090815260016020908152604080832033845290915290205491906133c2565b61261e565b5060019392505050565b6005546001600160a01b031633146112635760405162461bcd60e51b815260040161103e9061427b565b6001600160a01b03919091166000908152601860205260409020805460ff1916911515919091179055565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909161100a91859061122a90866125b8565b6005546001600160a01b031633146112ee5760405162461bcd60e51b815260040161103e9061427b565b6040516370a0823160e01b81523060048201526001600160a01b0383169063a9059cbb90839083906370a082319060240160206040518083038186803b15801561133757600080fd5b505afa15801561134b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061136f9190614307565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381600087803b1580156113b557600080fd5b505af11580156113c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113ed9190614320565b505050565b6005546001600160a01b0316331461141c5760405162461bcd60e51b815260040161103e9061427b565b6001600160a01b03919091166000908152603060205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146114715760405162461bcd60e51b815260040161103e9061427b565b602288905560218790556023869055602485905560258490556026839055602882905560278190558385876114a68a8c61433d565b6114b0919061433d565b6114ba919061433d565b6114c4919061433d565b6020819055601910156115195760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323525206f72206c657373000000604482015260640161103e565b5050505050505050565b6005546001600160a01b0316331461154d5760405162461bcd60e51b815260040161103e9061427b565b6009546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015611586573d6000803e3d6000fd5b50565b6005546001600160a01b031633146115b35760405162461bcd60e51b815260040161103e9061427b565b805182511480156115c657506101008251105b6116065760405162461bcd60e51b8152602060048201526011602482015270496e636f7272656374206c656e6774687360781b604482015260640161103e565b60005b82518110156113ed5761164f3384838151811061162857611628614355565b602002602001015184848151811061164257611642614355565b6020026020010151612743565b806116598161436b565b915050611609565b6005546001600160a01b0316331461168b5760405162461bcd60e51b815260040161103e9061427b565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b031633146116ff5760405162461bcd60e51b815260040161103e9061427b565b61025883101561176d5760405162461bcd60e51b815260206004820152603360248201527f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e207468604482015272616e206576657279203130206d696e7574657360681b606482015260840161103e565b6103e8821115801561177d575060015b6117e25760405162461bcd60e51b815260206004820152603060248201527f4d75737420736574206175746f204c50206275726e2070657263656e7420626560448201526f747765656e20302520616e642031302560801b606482015260840161103e565b601192909255600f556010805460ff1916911515919091179055565b6005546000906001600160a01b0316331461182b5760405162461bcd60e51b815260040161103e9061427b565b506015805460ff19169055600190565b6005546001600160a01b031633146118655760405162461bcd60e51b815260040161103e9061427b565b6040516001600160a01b038216904780156108fc02916000818181858888f1935050505015801561189a573d6000803e3d6000fd5b5050565b6005546001600160a01b031633146118c85760405162461bcd60e51b815260040161103e9061427b565b600a546040516001600160a01b03918216918316907f02f8a1483978974a6412ba3a67040b4daa4fc0dfe9439a7295f9a9538394f63590600090a3600a80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b0316331461194f5760405162461bcd60e51b815260040161103e9061427b565b6015805462ffff001916620101001790554260125543602e55565b6005546001600160a01b031633146119945760405162461bcd60e51b815260040161103e9061427b565b60158054911515620100000262ff000019909216919091179055565b606060048054610f7a90614240565b6005546001600160a01b031633146119e95760405162461bcd60e51b815260040161103e9061427b565b7f000000000000000000000000d1c596e7cb11cb0e4255ce63a62dc7a3c0214eaf6001600160a01b0316826001600160a01b03161415611a915760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000606482015260840161103e565b61189a82826133fc565b6005546001600160a01b03163314611ac55760405162461bcd60e51b815260040161103e9061427b565b6015805491151563010000000263ff00000019909216919091179055565b6005546001600160a01b03163314611b0d5760405162461bcd60e51b815260040161103e9061427b565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b600061100a338461122a85604051806060016040528060258152602001614530602591393360009081526001602090815260408083206001600160a01b038d16845290915290205491906133c2565b600061100a338484612743565b6005546001600160a01b03163314611bb55760405162461bcd60e51b815260040161103e9061427b565b6007546040516001600160a01b03918216918316907fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567490600090a3600780546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314611c3c5760405162461bcd60e51b815260040161103e9061427b565b6001600160a01b03919091166000908152603160205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314611c915760405162461bcd60e51b815260040161103e9061427b565b6001600160a01b0382166000818152602f6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b03163314611d1a5760405162461bcd60e51b815260040161103e9061427b565b6001600160a01b039091166000908152603060209081526040808320805494151560ff199586168117909155603183528184208054861682179055602f9092529091208054909216179055565b6005546001600160a01b03163314611d915760405162461bcd60e51b815260040161103e9061427b565b670de0b6b3a76400006103e8611da660025490565b611db19060056142c6565b611dbb91906142e5565b611dc591906142e5565b811015611e205760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015263302e352560e01b606482015260840161103e565b611e3281670de0b6b3a76400006142c6565b600e5550565b6005546000906001600160a01b03163314611e655760405162461bcd60e51b815260040161103e9061427b565b620186a0611e7260025490565b611e7d9060046142c6565b611e8791906142e5565b821015611ef45760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b606482015260840161103e565b6103e8611f0060025490565b611f0b9060146142c6565b611f1591906142e5565b821115611f815760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b606482015260840161103e565b50600d55600190565b6005546001600160a01b03163314611fb45760405162461bcd60e51b815260040161103e9061427b565b670de0b6b3a76400006103e8611fc960025490565b611fd49060046142c6565b611fde91906142e5565b611fe891906142e5565b8110156120525760405162461bcd60e51b815260206004820152603260248201527f43616e6e6f7420736574206d61784275795472616e73616374696f6e416d6f756044820152716e74206c6f776572207468616e20302e312560701b606482015260840161103e565b61206481670de0b6b3a76400006142c6565b600b5550565b6005546000906001600160a01b031633146120975760405162461bcd60e51b815260040161103e9061427b565b506019805460ff19169055600190565b6005546001600160a01b031633146120d15760405162461bcd60e51b815260040161103e9061427b565b6009546040516001600160a01b03918216918316907fb7bde7558dd808650a9e0f7570d4857487002f91d457a5c9e95d64c80b217ca890600090a3600980546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146121585760405162461bcd60e51b815260040161103e9061427b565b601c859055601b849055601d839055601e829055601f81905580828461217e878961433d565b612188919061433d565b612192919061433d565b61219c919061433d565b601a819055603210156121f15760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420353025206f72206c657373000000604482015260640161103e565b5050505050565b6005546001600160a01b031633146122225760405162461bcd60e51b815260040161103e9061427b565b6001600160a01b0381166122875760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161103e565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546000906001600160a01b031633146123105760405162461bcd60e51b815260040161103e9061427b565b506015805460ff1916600190811790915590565b6005546000906001600160a01b031633146123515760405162461bcd60e51b815260040161103e9061427b565b601354601454612361919061433d565b42116123af5760405162461bcd60e51b815260206004820181905260248201527f4d757374207761697420666f7220636f6f6c646f776e20746f2066696e697368604482015260640161103e565b6103e88211156124145760405162461bcd60e51b815260206004820152602a60248201527f4d6179206e6f74206e756b65206d6f7265207468616e20313025206f6620746f60448201526906b656e7320696e204c560b41b606482015260840161103e565b426014556040516370a0823160e01b81526001600160a01b037f000000000000000000000000d1c596e7cb11cb0e4255ce63a62dc7a3c0214eaf16600482015260009030906370a082319060240160206040518083038186803b15801561247a57600080fd5b505afa15801561248e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124b29190614307565b905060006124cc6127106124c68487613450565b906134cf565b9050801561250c5760065461250c907f000000000000000000000000d1c596e7cb11cb0e4255ce63a62dc7a3c0214eaf906001600160a01b031683613511565b60007f000000000000000000000000d1c596e7cb11cb0e4255ce63a62dc7a3c0214eaf9050806001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561256c57600080fd5b505af1158015612580573d6000803e3d6000fd5b50506040517f8462566617872a3fbab94534675218431ff9e204063ee3f4f43d965626a39abb925060009150a1506001949350505050565b6000806125c5838561433d565b9050838110156126175760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640161103e565b9392505050565b6001600160a01b0383166126805760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161103e565b6001600160a01b0382166126e15760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161103e565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0383166127695760405162461bcd60e51b815260040161103e90614386565b6001600160a01b03821661278f5760405162461bcd60e51b815260040161103e906143cb565b6001600160a01b03821660009081526018602052604090205460ff161580156127d157506001600160a01b03831660009081526018602052604090205460ff16155b6128375760405162461bcd60e51b815260206004820152603160248201527f596f752068617665206265656e20626c61636b6c69737465642066726f6d207460448201527072616e73666572696e6720746f6b656e7360781b606482015260840161103e565b80612848576113ed83836000613511565b60155460ff1615612d14576005546001600160a01b0384811691161480159061287f57506005546001600160a01b03838116911614155b801561289357506001600160a01b03821615155b80156128aa57506001600160a01b03821661dead14155b80156128c05750600654600160a01b900460ff16155b15612d1457601554610100900460ff16612958576001600160a01b0383166000908152602f602052604090205460ff168061291357506001600160a01b0382166000908152602f602052604090205460ff165b6129585760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b604482015260640161103e565b60195460ff1615612a9f576005546001600160a01b038381169116148015906129b357507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0316826001600160a01b031614155b80156129f157507f000000000000000000000000d1c596e7cb11cb0e4255ce63a62dc7a3c0214eaf6001600160a01b0316826001600160a01b031614155b15612a9f57326000908152601660205260409020544311612a8c5760405162461bcd60e51b815260206004820152604960248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b6064820152681030b63637bbb2b21760b91b608482015260a40161103e565b3260009081526016602052604090204390555b6001600160a01b03831660009081526032602052604090205460ff168015612ae057506001600160a01b03821660009081526030602052604090205460ff16155b15612bcc57600b54811115612b5d5760405162461bcd60e51b815260206004820152603860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527f6d61784275795472616e73616374696f6e416d6f756e742e0000000000000000606482015260840161103e565b600e546001600160a01b038316600090815260208190526040902054612b83908361433d565b1115612bc75760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b604482015260640161103e565b612d14565b6001600160a01b03821660009081526032602052604090205460ff168015612c0d57506001600160a01b03831660009081526031602052604090205460ff16155b15612c8a57600c54811115612bc75760405162461bcd60e51b815260206004820152603a60248201527f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560448201527f206d617853656c6c5472616e73616374696f6e416d6f756e742e000000000000606482015260840161103e565b6001600160a01b03821660009081526031602052604090205460ff16612d1457600e546001600160a01b038316600090815260208190526040902054612cd0908361433d565b1115612d145760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b604482015260640161103e565b602e54612d2290600161433d565b4311158015612d6357507f000000000000000000000000d1c596e7cb11cb0e4255ce63a62dc7a3c0214eaf6001600160a01b0316826001600160a01b031614155b8015612d8c57506001600160a01b038216737a250d5630b4cf539739df2c5dacb4c659f2488d14155b15612ddb576001600160a01b038216600081815260186020526040808220805460ff19166001179055517fb90badc1cf1c52268f4fa9afb5276aebf640bcca3300cdfc9cf37db17daa13e29190a25b7f000000000000000000000000d1c596e7cb11cb0e4255ce63a62dc7a3c0214eaf6001600160a01b0390811690841614801581612e2157506015546301000000900460ff165b15612ebb576001600160a01b03841660009081526017602052604090205415801590612e7357506001600160a01b0384166000908152601760205260409020544290612e70906201518061433d565b10155b15612eb6576026546023819055602854602181905560275460228190556024549192612e9e9161433d565b612ea8919061433d565b612eb2919061433d565b6020555b612ef4565b6001600160a01b038316600090815260176020526040902054612ef4576001600160a01b03831660009081526017602052604090204290555b30600090815260208190526040902054600d5481108015908190612f20575060155462010000900460ff165b8015612f365750600654600160a01b900460ff16155b8015612f5b57506001600160a01b03861660009081526032602052604090205460ff16155b8015612f8057506001600160a01b0386166000908152602f602052604090205460ff16155b8015612fa557506001600160a01b0385166000908152602f602052604090205460ff16155b15612fd3576006805460ff60a01b1916600160a01b179055612fc561361a565b6006805460ff60a01b191690555b600654600160a01b900460ff1615801561300557506001600160a01b03851660009081526032602052604090205460ff165b8015613013575060105460ff165b801561302e575060115460125461302a919061433d565b4210155b801561305357506001600160a01b0386166000908152602f602052604090205460ff16155b1561306257613060613974565b505b6006546001600160a01b03861660009081526032602052604081205460ff600160a01b90930483161592161580156130b357506001600160a01b03881660009081526032602052604090205460ff16155b6001600160a01b0389166000908152602f602052604090205490915060ff16806130f557506001600160a01b0387166000908152602f602052604090205460ff165b806130fd5750805b1561310757600091505b600082156133ac576001600160a01b03881660009081526032602052604090205460ff16801561313957506000602054115b156132515761315860646124c66020548a61345090919063ffffffff16565b90506020546023548261316b91906142c6565b61317591906142e5565b602b6000828254613186919061433d565b909155505060205460245461319b90836142c6565b6131a591906142e5565b602c60008282546131b6919061433d565b90915550506020546025546131cb90836142c6565b6131d591906142e5565b602d60008282546131e6919061433d565b90915550506020546022546131fb90836142c6565b61320591906142e5565b60296000828254613216919061433d565b909155505060205460215461322b90836142c6565b61323591906142e5565b602a6000828254613246919061433d565b9091555061338e9050565b6001600160a01b03891660009081526032602052604090205460ff16801561327b57506000601a54115b1561338e5761329a60646124c6601a548a61345090919063ffffffff16565b9050601a54601d54826132ad91906142c6565b6132b791906142e5565b602b60008282546132c8919061433d565b9091555050601a54601e546132dd90836142c6565b6132e791906142e5565b602c60008282546132f8919061433d565b9091555050601a54601f5461330d90836142c6565b61331791906142e5565b602d6000828254613328919061433d565b9091555050601a54601c5461333d90836142c6565b61334791906142e5565b60296000828254613358919061433d565b9091555050601a54601b5461336d90836142c6565b61337791906142e5565b602a6000828254613388919061433d565b90915550505b801561339f5761339f893083613511565b6133a9818861440e565b96505b6133b7898989613511565b505050505050505050565b600081848411156133e65760405162461bcd60e51b815260040161103e9190613e40565b5060006133f3848661440e565b95945050505050565b6001600160a01b038216600081815260326020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b60008261345f5750600061100e565b600061346b83856142c6565b90508261347885836142e5565b146126175760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b606482015260840161103e565b600061261783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613b13565b6001600160a01b0383166135375760405162461bcd60e51b815260040161103e90614386565b6001600160a01b03821661355d5760405162461bcd60e51b815260040161103e906143cb565b61359a816040518060600160405280602681526020016144e2602691396001600160a01b03861660009081526020819052604090205491906133c2565b6001600160a01b0380851660009081526020819052604080822093909355908416815220546135c990826125b8565b6001600160a01b038381166000818152602081815260409182902094909455518481529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101612736565b3060009081526020819052604081205490506000602a54602d54602c54602954602b54613647919061433d565b613651919061433d565b61365b919061433d565b613665919061433d565b90506000821580613674575081155b1561367e57505050565b600d5461368c9060146142c6565b8311156136a457600d546136a19060146142c6565b92505b6000600283602b54866136b791906142c6565b6136c191906142e5565b6136cb91906142e5565b905060006136d98583613b41565b9050476136e582613b83565b60006136f14783613b41565b9050600061370e876124c66029548561345090919063ffffffff16565b9050600061372b886124c6602c548661345090919063ffffffff16565b90506000613748896124c6602d548761345090919063ffffffff16565b905060006137658a6124c6602a548861345090919063ffffffff16565b90506000818385613776888a61440e565b613780919061440e565b61378a919061440e565b613794919061440e565b6000602b8190556029819055602c819055602d819055602a8190556008546040519293506001600160a01b031691869181818185875af1925050503d80600081146137fb576040519150601f19603f3d011682016040523d82523d6000602084013e613800565b606091505b5050600954604051919b506001600160a01b0316908490600081818185875af1925050503d8060008114613850576040519150601f19603f3d011682016040523d82523d6000602084013e613855565b606091505b50909a505088158015906138695750600081115b156138bc576138788982613d52565b602b54604080518a81526020810184905280820192909252517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a15b6007546040516001600160a01b03909116904790600081818185875af1925050503d8060008114613909576040519150601f19603f3d011682016040523d82523d6000602084013e61390e565b606091505b5050600a54604051919b506001600160a01b0316904790600081818185875af1925050503d806000811461395e576040519150601f19603f3d011682016040523d82523d6000602084013e613963565b606091505b505050505050505050505050505050565b426012556040516370a0823160e01b81526001600160a01b037f000000000000000000000000d1c596e7cb11cb0e4255ce63a62dc7a3c0214eaf166004820152600090819030906370a082319060240160206040518083038186803b1580156139dc57600080fd5b505afa1580156139f0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a149190614307565b90506000613a336127106124c6600f548561345090919063ffffffff16565b90508015613a6857613a687f000000000000000000000000d1c596e7cb11cb0e4255ce63a62dc7a3c0214eaf61dead83613511565b60007f000000000000000000000000d1c596e7cb11cb0e4255ce63a62dc7a3c0214eaf9050806001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613ac857600080fd5b505af1158015613adc573d6000803e3d6000fd5b50506040517f454c91ae84fcc766ddda0dcb289f26b3d0176efeacf4061fc219fa6ca8c3048d925060009150a16001935050505090565b60008183613b345760405162461bcd60e51b815260040161103e9190613e40565b5060006133f384866142e5565b600061261783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506133c2565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110613bb857613bb8614355565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015613c3157600080fd5b505afa158015613c45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c699190614425565b81600181518110613c7c57613c7c614355565b60200260200101906001600160a01b031690816001600160a01b031681525050613cc7307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8461261e565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac94790613d1c908590600090869030904290600401614442565b600060405180830381600087803b158015613d3657600080fd5b505af1158015613d4a573d6000803e3d6000fd5b505050505050565b613d7d307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8461261e565b60065460405163f305d71960e01b81523060048201526024810184905260006044820181905260648201526001600160a01b0391821660848201524260a48201527f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d9091169063f305d71990839060c4016060604051808303818588803b158015613e0757600080fd5b505af1158015613e1b573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906121f191906144b3565b600060208083528351808285015260005b81811015613e6d57858101830151858201604001528201613e51565b81811115613e7f576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b038116811461158657600080fd5b600060208284031215613ebc57600080fd5b813561261781613e95565b60008060408385031215613eda57600080fd5b8235613ee581613e95565b946020939093013593505050565b600060208284031215613f0557600080fd5b5035919050565b600080600060608486031215613f2157600080fd5b8335613f2c81613e95565b92506020840135613f3c81613e95565b929592945050506040919091013590565b801515811461158657600080fd5b60008060408385031215613f6e57600080fd5b8235613f7981613e95565b91506020830135613f8981613f4d565b809150509250929050565b60008060408385031215613fa757600080fd5b8235613fb281613e95565b91506020830135613f8981613e95565b600080600080600080600080610100898b031215613fdf57600080fd5b505086359860208801359850604088013597606081013597506080810135965060a0810135955060c0810135945060e0013592509050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561405657614056614017565b604052919050565b600067ffffffffffffffff82111561407857614078614017565b5060051b60200190565b600082601f83011261409357600080fd5b813560206140a86140a38361405e565b61402d565b82815260059290921b840181019181810190868411156140c757600080fd5b8286015b848110156140e257803583529183019183016140cb565b509695505050505050565b6000806040838503121561410057600080fd5b823567ffffffffffffffff8082111561411857600080fd5b818501915085601f83011261412c57600080fd5b8135602061413c6140a38361405e565b82815260059290921b8401810191818101908984111561415b57600080fd5b948201945b8386101561418257853561417381613e95565b82529482019490820190614160565b9650508601359250508082111561419857600080fd5b506141a585828601614082565b9150509250929050565b6000806000606084860312156141c457600080fd5b833592506020840135915060408401356141dd81613f4d565b809150509250925092565b6000602082840312156141fa57600080fd5b813561261781613f4d565b600080600080600060a0868803121561421d57600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b600181811c9082168061425457607f821691505b6020821081141561427557634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60008160001904831182151516156142e0576142e06142b0565b500290565b60008261430257634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121561431957600080fd5b5051919050565b60006020828403121561433257600080fd5b815161261781613f4d565b60008219821115614350576143506142b0565b500190565b634e487b7160e01b600052603260045260246000fd5b600060001982141561437f5761437f6142b0565b5060010190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b600082821015614420576144206142b0565b500390565b60006020828403121561443757600080fd5b815161261781613e95565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156144925784516001600160a01b03168352938301939183019160010161446d565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156144c857600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212204d3125fa61563fa9e2e2fab4568780e96c740ed252f97cd7ab9d2ad1f5f21bfb64736f6c63430008090033

Deployed Bytecode Sourcemap

31445:25616:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31992:39;;;;;;;;;;;;;;;;;;;160:25:1;;;148:2;133:18;31992:39:0;;;;;;;;9543:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;33987:68::-;;;;;;;;;;-1:-1:-1;33987:68:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1351:14:1;;1344:22;1326:41;;1314:2;1299:18;33987:68:0;1186:187:1;11717:169:0;;;;;;;;;;-1:-1:-1;11717:169:0;;;;;:::i;:::-;;:::i;31526:51::-;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1889:32:1;;;1871:51;;1859:2;1844:18;31526:51:0;1698:230:1;45649:112:0;;;;;;;;;;-1:-1:-1;45649:112:0;;;;;:::i;:::-;;:::i;:::-;;10666:108;;;;;;;;;;-1:-1:-1;10754:12:0;;10666:108;;44562:157;;;;;;;;;;-1:-1:-1;44562:157:0;;;;;:::i;:::-;;:::i;32298:47::-;;;;;;;;;;;;;;;;32112:36;;;;;;;;;;;;;;;;33592:33;;;;;;;;;;;;;;;;40980:246;;;;;;;;;;-1:-1:-1;40980:246:0;;;;;:::i;:::-;;:::i;33513:33::-;;;;;;;;;;;;;;;;12369:355;;;;;;;;;;-1:-1:-1;12369:355:0;;;;;:::i;:::-;;:::i;33425:36::-;;;;;;;;;;;;;;;;32207:45;;;;;;;;;;;;;;;;31876:25;;;;;;;;;;-1:-1:-1;31876:25:0;;;;-1:-1:-1;;;;;31876:25:0;;;43540:135;;;;;;;;;;-1:-1:-1;43540:135:0;;;;;:::i;:::-;;:::i;33666:28::-;;;;;;;;;;;;;;;;32168:32;;;;;;;;;;-1:-1:-1;32168:32:0;;;;;;;;10507:93;;;;;;;;;;-1:-1:-1;10507:93:0;;10590:2;3439:36:1;;3427:2;3412:18;10507:93:0;3297:184:1;13134:218:0;;;;;;;;;;-1:-1:-1;13134:218:0;;;;;:::i;:::-;;:::i;39918:185::-;;;;;;;;;;-1:-1:-1;39918:185:0;;;;;:::i;:::-;;:::i;33468:35::-;;;;;;;;;;;;;;;;41459:150;;;;;;;;;;-1:-1:-1;41459:150:0;;;;;:::i;:::-;;:::i;31908:29::-;;;;;;;;;;-1:-1:-1;31908:29:0;;;;-1:-1:-1;;;;;31908:29:0;;;42552:788;;;;;;;;;;-1:-1:-1;42552:788:0;;;;;:::i;:::-;;:::i;39707:199::-;;;;;;;;;;;;;:::i;31584:38::-;;;;;;;;;;;;;;;32397:33;;;;;;;;;;-1:-1:-1;32397:33:0;;;;;;;;45514:125;;;;;;;;;;-1:-1:-1;45514:125:0;;;;;:::i;:::-;-1:-1:-1;;;;;45603:28:0;45579:4;45603:28;;;:19;:28;;;;;;;;;45514:125;33382:36;;;;;;;;;;;;;;;;31947:38;;;;;;;;;;;;;;;;32990:29;;;;;;;;;;;;;;;;44896:337;;;;;;;;;;-1:-1:-1;44896:337:0;;;;;:::i;:::-;;:::i;33166:28::-;;;;;;;;;;;;;;;;33201:30;;;;;;;;;;;;;;;;32477:31;;;;;;;;;;-1:-1:-1;32477:31:0;;;;;;;;;;;10838:127;;;;;;;;;;-1:-1:-1;10838:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;10939:18:0;10912:7;10939:18;;;;;;;;;;;;10838:127;24045:148;;;;;;;;;;;;;:::i;54829:447::-;;;;;;;;;;-1:-1:-1;54829:447:0;;;;;:::i;:::-;;:::i;39018:120::-;;;;;;;;;;;;;:::i;31808:30::-;;;;;;;;;;-1:-1:-1;31808:30:0;;;;-1:-1:-1;;;;;31808:30:0;;;40117:144;;;;;;;;;;-1:-1:-1;40117:144:0;;;;;:::i;:::-;;:::i;33026:30::-;;;;;;;;;;;;;;;;44352:201;;;;;;;;;;-1:-1:-1;44352:201:0;;;;;:::i;:::-;;:::i;38774:191::-;;;;;;;;;;;;;:::i;23401:79::-;;;;;;;;;;-1:-1:-1;23466:6:0;;-1:-1:-1;;;;;23466:6:0;23401:79;;31845:24;;;;;;;;;;-1:-1:-1;31845:24:0;;;;-1:-1:-1;;;;;31845:24:0;;;33238:31;;;;;;;;;;;;;;;;41866:101;;;;;;;;;;-1:-1:-1;41866:101:0;;;;;:::i;:::-;;:::i;9763:104::-;;;;;;;;;;;;;:::i;43684:245::-;;;;;;;;;;-1:-1:-1;43684:245:0;;;;;:::i;:::-;;:::i;33100:24::-;;;;;;;;;;;;;;;;32352:35;;;;;;;;;;;;;;;;33632:27;;;;;;;;;;;;;;;;33314:25;;;;;;;;;;;;;;;;39597:102;;;;;;;;;;-1:-1:-1;39597:102:0;;;;;:::i;:::-;;:::i;39286:106::-;;;;;;;;;;-1:-1:-1;39286:106:0;;;;;:::i;:::-;;:::i;13856:269::-;;;;;;;;;;-1:-1:-1;13856:269:0;;;;;:::i;:::-;;:::i;32259:29::-;;;;;;;;;;;;;;;;32515:37;;;;;;;;;;-1:-1:-1;32515:37:0;;;;;;;;;;;11179:175;;;;;;;;;;-1:-1:-1;11179:175:0;;;;;:::i;:::-;;:::i;44136:208::-;;;;;;;;;;-1:-1:-1;44136:208:0;;;;;:::i;:::-;;:::i;41617:152::-;;;;;;;;;;-1:-1:-1;41617:152:0;;;;;:::i;:::-;;:::i;33346:26::-;;;;;;;;;;;;;;;;34214:58;;;;;;;;;;-1:-1:-1;34214:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;32437:33;;;;;;;;;;-1:-1:-1;32437:33:0;;;;;;;;;;;33131:25;;;;;;;;;;;;;;;;43349:182;;;;;;;;;;-1:-1:-1;43349:182:0;;;;;:::i;:::-;;:::i;45241:265::-;;;;;;;;;;-1:-1:-1;45241:265:0;;;;;:::i;:::-;;:::i;41235:215::-;;;;;;;;;;-1:-1:-1;41235:215:0;;;;;:::i;:::-;;:::i;32907:39::-;;;;;;;;;;-1:-1:-1;32907:39:0;;;;;;;;33553:32;;;;;;;;;;;;;;;;40333:387;;;;;;;;;;-1:-1:-1;40333:387:0;;;;;:::i;:::-;;:::i;32956:27::-;;;;;;;;;;;;;;;;11418:151;;;;;;;;;;-1:-1:-1;11418:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;11534:18:0;;;11507:7;11534:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;11418:151;40729:243;;;;;;;;;;-1:-1:-1;40729:243:0;;;;;:::i;:::-;;:::i;32038:33::-;;;;;;;;;;;;;;;;39454:134;;;;;;;;;;;;;:::i;44727:161::-;;;;;;;;;;-1:-1:-1;44727:161:0;;;;;:::i;:::-;;:::i;33063:30::-;;;;;;;;;;;;;;;;41976:567;;;;;;;;;;-1:-1:-1;41976:567:0;;;;;:::i;:::-;;:::i;24349:244::-;;;;;;;;;;-1:-1:-1;24349:244:0;;;;;:::i;:::-;;:::i;33913:67::-;;;;;;;;;;-1:-1:-1;33913:67:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;39146:132;;;;;;;;;;;;;:::i;33276:31::-;;;;;;;;;;;;;;;;32078:24;;;;;;;;;;;;;;;;56063:995;;;;;;;;;;-1:-1:-1;56063:995:0;;;;;:::i;:::-;;:::i;9543:100::-;9597:13;9630:5;9623:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9543:100;:::o;11717:169::-;11800:4;11817:39;2225:10;11840:7;11849:6;11817:8;:39::i;:::-;-1:-1:-1;11874:4:0;11717:169;;;;;:::o;45649:112::-;23614:6;;-1:-1:-1;;;;;23614:6:0;2225:10;23614:22;23606:67;;;;-1:-1:-1;;;23606:67:0;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;45717:28:0::1;45748:5;45717:28:::0;;;:19:::1;:28;::::0;;;;:36;;-1:-1:-1;;45717:36:0::1;::::0;;45649:112::o;44562:157::-;23614:6;;-1:-1:-1;;;;;23614:6:0;2225:10;23614:22;23606:67;;;;-1:-1:-1;;;23606:67:0;;;;;;;:::i;:::-;44669:9:::1;::::0;44641:38:::1;::::0;-1:-1:-1;;;;;44669:9:0;;::::1;::::0;44641:38;::::1;::::0;::::1;::::0;44669:9:::1;::::0;44641:38:::1;44690:9;:21:::0;;-1:-1:-1;;;;;;44690:21:0::1;-1:-1:-1::0;;;;;44690:21:0;;;::::1;::::0;;;::::1;::::0;;44562:157::o;40980:246::-;23614:6;;-1:-1:-1;;;;;23614:6:0;2225:10;23614:22;23606:67;;;;-1:-1:-1;;;23606:67:0;;;;;;;:::i;:::-;41103:4:::1;41097;41077:13;10754:12:::0;;;10666:108;41077:13:::1;:17;::::0;41093:1:::1;41077:17;:::i;:::-;:24;;;;:::i;:::-;41076:31;;;;:::i;:::-;41066:6;:41;;41058:105;;;::::0;-1:-1:-1;;;41058:105:0;;10261:2:1;41058:105:0::1;::::0;::::1;10243:21:1::0;10300:2;10280:18;;;10273:30;10339:34;10319:18;;;10312:62;-1:-1:-1;;;10390:18:1;;;10383:49;10449:19;;41058:105:0::1;10059:415:1::0;41058:105:0::1;41201:17;:6:::0;41211::::1;41201:17;:::i;:::-;41174:24;:44:::0;-1:-1:-1;40980:246:0:o;12369:355::-;12509:4;12526:36;12536:6;12544:9;12555:6;12526:9;:36::i;:::-;12573:121;12582:6;2225:10;12604:89;12642:6;12604:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12604:19:0;;;;;;:11;:19;;;;;;;;2225:10;12604:33;;;;;;;;;;:37;:89::i;:::-;12573:8;:121::i;:::-;-1:-1:-1;12712:4:0;12369:355;;;;;:::o;43540:135::-;23614:6;;-1:-1:-1;;;;;23614:6:0;2225:10;23614:22;23606:67;;;;-1:-1:-1;;;23606:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;43632:19:0;;;::::1;;::::0;;;:10:::1;:19;::::0;;;;:35;;-1:-1:-1;;43632:35:0::1;::::0;::::1;;::::0;;;::::1;::::0;;43540:135::o;13134:218::-;2225:10;13222:4;13271:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;13271:34:0;;;;;;;;;;13222:4;;13239:83;;13262:7;;13271:50;;13310:10;13271:38;:50::i;39918:185::-;23614:6;;-1:-1:-1;;;;;23614:6:0;2225:10;23614:22;23606:67;;;;-1:-1:-1;;;23606:67:0;;;;;;;:::i;:::-;40057:37:::1;::::0;-1:-1:-1;;;40057:37:0;;40088:4:::1;40057:37;::::0;::::1;1871:51:1::0;-1:-1:-1;;;;;40020:21:0;::::1;::::0;::::1;::::0;40042:13;;40020:21;;40057:22:::1;::::0;1844:18:1;;40057:37:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40020:75;::::0;-1:-1:-1;;;;;;40020:75:0::1;::::0;;;;;;-1:-1:-1;;;;;10860:32:1;;;40020:75:0::1;::::0;::::1;10842:51:1::0;10909:18;;;10902:34;10815:18;;40020:75:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;39918:185:::0;;:::o;41459:150::-;23614:6;;-1:-1:-1;;;;;23614:6:0;2225:10;23614:22;23606:67;;;;-1:-1:-1;;;23606:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;41552:42:0;;;::::1;;::::0;;;:34:::1;:42;::::0;;;;:49;;-1:-1:-1;;41552:49:0::1;::::0;::::1;;::::0;;;::::1;::::0;;41459:150::o;42552:788::-;23614:6;;-1:-1:-1;;;;;23614:6:0;2225:10;23614:22;23606:67;;;;-1:-1:-1;;;23606:67:0;;;;;;;:::i;:::-;42804:16:::1;:32:::0;;;42847:15:::1;:30:::0;;;42888:16:::1;:32:::0;;;42931:10:::1;:20:::0;;;42962:11:::1;:22:::0;;;42995:21:::1;:46:::0;;;43052:20:::1;:44:::0;;;43107:21:::1;:46:::0;;;42976:8;42944:7;42907:13;43180:34:::1;42865:12:::0;42823:13;43180:34:::1;:::i;:::-;:53;;;;:::i;:::-;:66;;;;:::i;:::-;:80;;;;:::i;:::-;43164:13;:96:::0;;;43296:2:::1;-1:-1:-1::0;43279:19:0::1;43271:61;;;::::0;-1:-1:-1;;;43271:61:0;;11532:2:1;43271:61:0::1;::::0;::::1;11514:21:1::0;11571:2;11551:18;;;11544:30;11610:31;11590:18;;;11583:59;11659:18;;43271:61:0::1;11330:353:1::0;43271:61:0::1;42552:788:::0;;;;;;;;:::o;39707:199::-;23614:6;;-1:-1:-1;;;;;23614:6:0;2225:10;23614:22;23606:67;;;;-1:-1:-1;;;23606:67:0;;;;;;;:::i;:::-;39855:10:::1;::::0;39847:51:::1;::::0;-1:-1:-1;;;;;39855:10:0;;::::1;::::0;39876:21:::1;39847:51:::0;::::1;;;::::0;39855:10:::1;39847:51:::0;39855:10;39847:51;39876:21;39855:10;39847:51;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;39707:199::o:0;44896:337::-;23614:6;;-1:-1:-1;;;;;23614:6:0;2225:10;23614:22;23606:67;;;;-1:-1:-1;;;23606:67:0;;;;;;;:::i;:::-;45027:7:::1;:14;45006:10;:17;:35;:62;;;;;45065:3;45045:10;:17;:23;45006:62;44998:92;;;::::0;-1:-1:-1;;;44998:92:0;;11890:2:1;44998:92:0::1;::::0;::::1;11872:21:1::0;11929:2;11909:18;;;11902:30;-1:-1:-1;;;11948:18:1;;;11941:47;12005:18;;44998:92:0::1;11688:341:1::0;44998:92:0::1;45106:9;45101:125;45125:10;:17;45121:1;:21;45101:125;;;45164:50;2225:10:::0;45188::::1;45199:1;45188:13;;;;;;;;:::i;:::-;;;;;;;45203:7;45211:1;45203:10;;;;;;;;:::i;:::-;;;;;;;45164:9;:50::i;:::-;45144:3:::0;::::1;::::0;::::1;:::i;:::-;;;;45101:125;;24045:148:::0;23614:6;;-1:-1:-1;;;;;23614:6:0;2225:10;23614:22;23606:67;;;;-1:-1:-1;;;23606:67:0;;;;;;;:::i;:::-;24136:6:::1;::::0;24115:40:::1;::::0;24152:1:::1;::::0;-1:-1:-1;;;;;24136:6:0::1;::::0;24115:40:::1;::::0;24152:1;;24115:40:::1;24166:6;:19:::0;;-1:-1:-1;;;;;;24166:19:0::1;::::0;;24045:148::o;54829:447::-;23614:6;;-1:-1:-1;;;;;23614:6:0;2225:10;23614:22;23606:67;;;;-1:-1:-1;;;23606:67:0;;;;;;;:::i;:::-;54983:3:::1;54960:19;:26;;54952:90;;;::::0;-1:-1:-1;;;54952:90:0;;12508:2:1;54952:90:0::1;::::0;::::1;12490:21:1::0;12547:2;12527:18;;;12520:30;12586:34;12566:18;;;12559:62;-1:-1:-1;;;12637:18:1;;;12630:49;12696:19;;54952:90:0::1;12306:415:1::0;54952:90:0::1;55073:4;55061:8;:16;;:33;;;;-1:-1:-1::0;55081:13:0;55061:33:::1;55053:94;;;::::0;-1:-1:-1;;;55053:94:0;;12928:2:1;55053:94:0::1;::::0;::::1;12910:21:1::0;12967:2;12947:18;;;12940:30;13006:34;12986:18;;;12979:62;-1:-1:-1;;;13057:18:1;;;13050:46;13113:19;;55053:94:0::1;12726:412:1::0;55053:94:0::1;55158:15;:37:::0;;;;55206:16:::1;:27:::0;55244:13:::1;:24:::0;;-1:-1:-1;;55244:24:0::1;::::0;::::1;;::::0;;;::::1;::::0;;54829:447::o;39018:120::-;23614:6;;39070:4;;-1:-1:-1;;;;;23614:6:0;2225:10;23614:22;23606:67;;;;-1:-1:-1;;;23606:67:0;;;;;;;:::i;:::-;-1:-1:-1;39086:14:0::1;:22:::0;;-1:-1:-1;;39086:22:0::1;::::0;;;39018:120;:::o;40117:144::-;23614:6;;-1:-1:-1;;;;;23614:6:0;2225:10;23614:22;23606:67;;;;-1:-1:-1;;;23606:67:0;;;;;;;:::i;:::-;40208:45:::1;::::0;-1:-1:-1;;;;;40208:22:0;::::1;::::0;40231:21:::1;40208:45:::0;::::1;;;::::0;::::1;::::0;;;40231:21;40208:22;:45;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;40117:144:::0;:::o;44352:201::-;23614:6;;-1:-1:-1;;;;;23614:6:0;2225:10;23614:22;23606:67;;;;-1:-1:-1;;;23606:67:0;;;;;;;:::i;:::-;44485:14:::1;::::0;44444:56:::1;::::0;-1:-1:-1;;;;;44485:14:0;;::::1;::::0;44444:56;::::1;::::0;::::1;::::0;44485:14:::1;::::0;44444:56:::1;44511:14;:34:::0;;-1:-1:-1;;;;;;44511:34:0::1;-1:-1:-1::0;;;;;44511:34:0;;;::::1;::::0;;;::::1;::::0;;44352:201::o;38774:191::-;23614:6;;-1:-1:-1;;;;;23614:6:0;2225:10;23614:22;23606:67;;;;-1:-1:-1;;;23606:67:0;;;;;;;:::i;:::-;38829:13:::1;:20:::0;;-1:-1:-1;;38860:18:0;;;;;38906:15:::1;38889:14;:32:::0;38945:12:::1;38932:10;:25:::0;38774:191::o;41866:101::-;23614:6;;-1:-1:-1;;;;;23614:6:0;2225:10;23614:22;23606:67;;;;-1:-1:-1;;;23606:67:0;;;;;;;:::i;:::-;41938:11:::1;:21:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;41938:21:0;;::::1;::::0;;;::::1;::::0;;41866:101::o;9763:104::-;9819:13;9852:7;9845:14;;;;;:::i;43684:245::-;23614:6;;-1:-1:-1;;;;;23614:6:0;2225:10;23614:22;23606:67;;;;-1:-1:-1;;;23606:67:0;;;;;;;:::i;:::-;43791:13:::1;-1:-1:-1::0;;;;;43783:21:0::1;:4;-1:-1:-1::0;;;;;43783:21:0::1;;;43775:91;;;::::0;-1:-1:-1;;;43775:91:0;;13345:2:1;43775:91:0::1;::::0;::::1;13327:21:1::0;13384:2;13364:18;;;13357:30;13423:34;13403:18;;;13396:62;13494:27;13474:18;;;13467:55;13539:19;;43775:91:0::1;13143:421:1::0;43775:91:0::1;43880:41;43909:4;43915:5;43880:28;:41::i;39597:102::-:0;23614:6;;-1:-1:-1;;;;;23614:6:0;2225:10;23614:22;23606:67;;;;-1:-1:-1;;;23606:67:0;;;;;;;:::i;:::-;39665:18:::1;:26:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;39665:26:0;;::::1;::::0;;;::::1;::::0;;39597:102::o;39286:106::-;23614:6;;-1:-1:-1;;;;;23614:6:0;2225:10;23614:22;23606:67;;;;-1:-1:-1;;;23606:67:0;;;;;;;:::i;:::-;39362:11:::1;:22:::0;;-1:-1:-1;;;;;;39362:22:0::1;-1:-1:-1::0;;;;;39362:22:0;;;::::1;::::0;;;::::1;::::0;;39286:106::o;13856:269::-;13949:4;13966:129;2225:10;13989:7;13998:96;14037:15;13998:96;;;;;;;;;;;;;;;;;2225:10;13998:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;13998:34:0;;;;;;;;;;;;:38;:96::i;11179:175::-;11265:4;11282:42;2225:10;11306:9;11317:6;11282:9;:42::i;44136:208::-;23614:6;;-1:-1:-1;;;;;23614:6:0;2225:10;23614:22;23606:67;;;;-1:-1:-1;;;23606:67:0;;;;;;;:::i;:::-;44273:15:::1;::::0;44230:59:::1;::::0;-1:-1:-1;;;;;44273:15:0;;::::1;::::0;44230:59;::::1;::::0;::::1;::::0;44273:15:::1;::::0;44230:59:::1;44300:15;:36:::0;;-1:-1:-1;;;;;;44300:36:0::1;-1:-1:-1::0;;;;;44300:36:0;;;::::1;::::0;;;::::1;::::0;;44136:208::o;41617:152::-;23614:6;;-1:-1:-1;;;;;23614:6:0;2225:10;23614:22;23606:67;;;;-1:-1:-1;;;23606:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;41711:43:0;;;::::1;;::::0;;;:35:::1;:43;::::0;;;;:50;;-1:-1:-1;;41711:50:0::1;::::0;::::1;;::::0;;;::::1;::::0;;41617:152::o;43349:182::-;23614:6;;-1:-1:-1;;;;;23614:6:0;2225:10;23614:22;23606:67;;;;-1:-1:-1;;;23606:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;43434:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;43434:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;43489:34;;1326:41:1;;;43489:34:0::1;::::0;1299:18:1;43489:34:0::1;;;;;;;43349:182:::0;;:::o;45241:265::-;23614:6;;-1:-1:-1;;;;;23614:6:0;2225:10;23614:22;23606:67;;;;-1:-1:-1;;;23606:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;45328:43:0;;::::1;;::::0;;;:34:::1;:43;::::0;;;;;;;:54;;;::::1;;-1:-1:-1::0;;45328:54:0;;::::1;::::0;::::1;::::0;;;45393:35:::1;:44:::0;;;;;:55;;;::::1;::::0;::::1;::::0;;45459:19:::1;:28:::0;;;;;;:39;;;;::::1;;::::0;;45241:265::o;41235:215::-;23614:6;;-1:-1:-1;;;;;23614:6:0;2225:10;23614:22;23606:67;;;;-1:-1:-1;;;23606:67:0;;;;;;;:::i;:::-;41357:4:::1;41351;41331:13;10754:12:::0;;;10666:108;41331:13:::1;:17;::::0;41347:1:::1;41331:17;:::i;:::-;:24;;;;:::i;:::-;41330:31;;;;:::i;:::-;41320:6;:41;;41312:90;;;::::0;-1:-1:-1;;;41312:90:0;;13771:2:1;41312:90:0::1;::::0;::::1;13753:21:1::0;13810:2;13790:18;;;13783:30;13849:34;13829:18;;;13822:62;-1:-1:-1;;;13900:18:1;;;13893:34;13944:19;;41312:90:0::1;13569:400:1::0;41312:90:0::1;41425:17;:6:::0;41435::::1;41425:17;:::i;:::-;41413:9;:29:::0;-1:-1:-1;41235:215:0:o;40333:387::-;23614:6;;40414:4;;-1:-1:-1;;;;;23614:6:0;2225:10;23614:22;23606:67;;;;-1:-1:-1;;;23606:67:0;;;;;;;:::i;:::-;40471:6:::1;40451:13;10754:12:::0;;;10666:108;40451:13:::1;:17;::::0;40467:1:::1;40451:17;:::i;:::-;:26;;;;:::i;:::-;40438:9;:39;;40430:105;;;::::0;-1:-1:-1;;;40430:105:0;;14176:2:1;40430:105:0::1;::::0;::::1;14158:21:1::0;14215:2;14195:18;;;14188:30;14254:34;14234:18;;;14227:62;-1:-1:-1;;;14305:18:1;;;14298:51;14366:19;;40430:105:0::1;13974:417:1::0;40430:105:0::1;40588:4;40567:13;10754:12:::0;;;10666:108;40567:13:::1;:18;::::0;40583:2:::1;40567:18;:::i;:::-;:25;;;;:::i;:::-;40554:9;:38;;40546:103;;;::::0;-1:-1:-1;;;40546:103:0;;14598:2:1;40546:103:0::1;::::0;::::1;14580:21:1::0;14637:2;14617:18;;;14610:30;14676:34;14656:18;;;14649:62;-1:-1:-1;;;14727:18:1;;;14720:50;14787:19;;40546:103:0::1;14396:416:1::0;40546:103:0::1;-1:-1:-1::0;40660:18:0::1;:30:::0;40708:4:::1;::::0;40333:387::o;40729:243::-;23614:6;;-1:-1:-1;;;;;23614:6:0;2225:10;23614:22;23606:67;;;;-1:-1:-1;;;23606:67:0;;;;;;;:::i;:::-;40851:4:::1;40845;40825:13;10754:12:::0;;;10666:108;40825:13:::1;:17;::::0;40841:1:::1;40825:17;:::i;:::-;:24;;;;:::i;:::-;40824:31;;;;:::i;:::-;40814:6;:41;;40806:104;;;::::0;-1:-1:-1;;;40806:104:0;;15019:2:1;40806:104:0::1;::::0;::::1;15001:21:1::0;15058:2;15038:18;;;15031:30;15097:34;15077:18;;;15070:62;-1:-1:-1;;;15148:18:1;;;15141:48;15206:19;;40806:104:0::1;14817:414:1::0;40806:104:0::1;40947:17;:6:::0;40957::::1;40947:17;:::i;:::-;40921:23;:43:::0;-1:-1:-1;40729:243:0:o;39454:134::-;23614:6;;39514:4;;-1:-1:-1;;;;;23614:6:0;2225:10;23614:22;23606:67;;;;-1:-1:-1;;;23606:67:0;;;;;;;:::i;:::-;-1:-1:-1;39530:20:0::1;:28:::0;;-1:-1:-1;;39530:28:0::1;::::0;;;39454:134;:::o;44727:161::-;23614:6;;-1:-1:-1;;;;;23614:6:0;2225:10;23614:22;23606:67;;;;-1:-1:-1;;;23606:67:0;;;;;;;:::i;:::-;44836:10:::1;::::0;44807:40:::1;::::0;-1:-1:-1;;;;;44836:10:0;;::::1;::::0;44807:40;::::1;::::0;::::1;::::0;44836:10:::1;::::0;44807:40:::1;44858:10;:22:::0;;-1:-1:-1;;;;;;44858:22:0::1;-1:-1:-1::0;;;;;44858:22:0;;;::::1;::::0;;;::::1;::::0;;44727:161::o;41976:567::-;23614:6;;-1:-1:-1;;;;;23614:6:0;2225:10;23614:22;23606:67;;;;-1:-1:-1;;;23606:67:0;;;;;;;:::i;:::-;42132:15:::1;:31:::0;;;42174:14:::1;:29:::0;;;42214:15:::1;:31:::0;;;42256:9:::1;:19:::0;;;42286:10:::1;:21:::0;;;42299:8;42268:7;42232:13;42333:32:::1;42191:12:::0;42150:13;42333:32:::1;:::i;:::-;:50;;;;:::i;:::-;:63;;;;:::i;:::-;:76;;;;:::i;:::-;42318:12;:91:::0;;;42444:2:::1;-1:-1:-1::0;42428:18:0::1;42420:60;;;::::0;-1:-1:-1;;;42420:60:0;;15438:2:1;42420:60:0::1;::::0;::::1;15420:21:1::0;15477:2;15457:18;;;15450:30;15516:31;15496:18;;;15489:59;15565:18;;42420:60:0::1;15236:353:1::0;42420:60:0::1;41976:567:::0;;;;;:::o;24349:244::-;23614:6;;-1:-1:-1;;;;;23614:6:0;2225:10;23614:22;23606:67;;;;-1:-1:-1;;;23606:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24438:22:0;::::1;24430:73;;;::::0;-1:-1:-1;;;24430:73:0;;15796:2:1;24430:73:0::1;::::0;::::1;15778:21:1::0;15835:2;15815:18;;;15808:30;15874:34;15854:18;;;15847:62;-1:-1:-1;;;15925:18:1;;;15918:36;15971:19;;24430:73:0::1;15594:402:1::0;24430:73:0::1;24540:6;::::0;24519:38:::1;::::0;-1:-1:-1;;;;;24519:38:0;;::::1;::::0;24540:6:::1;::::0;24519:38:::1;::::0;24540:6:::1;::::0;24519:38:::1;24568:6;:17:::0;;-1:-1:-1;;;;;;24568:17:0::1;-1:-1:-1::0;;;;;24568:17:0;;;::::1;::::0;;;::::1;::::0;;24349:244::o;39146:132::-;23614:6;;39210:4;;-1:-1:-1;;;;;23614:6:0;2225:10;23614:22;23606:67;;;;-1:-1:-1;;;23606:67:0;;;;;;;:::i;:::-;-1:-1:-1;39227:14:0::1;:21:::0;;-1:-1:-1;;39227:21:0::1;39244:4;39227:21:::0;;::::1;::::0;;;39146:132;:::o;56063:995::-;23614:6;;56147:4;;-1:-1:-1;;;;;23614:6:0;2225:10;23614:22;23606:67;;;;-1:-1:-1;;;23606:67:0;;;;;;;:::i;:::-;56212:19:::1;;56189:20;;:42;;;;:::i;:::-;56171:15;:60;56163:106;;;::::0;-1:-1:-1;;;56163:106:0;;16203:2:1;56163:106:0::1;::::0;::::1;16185:21:1::0;;;16222:18;;;16215:30;16281:34;16261:18;;;16254:62;16333:18;;56163:106:0::1;16001:356:1::0;56163:106:0::1;56299:4;56288:7;:15;;56280:70;;;::::0;-1:-1:-1;;;56280:70:0;;16564:2:1;56280:70:0::1;::::0;::::1;16546:21:1::0;16603:2;16583:18;;;16576:30;16642:34;16622:18;;;16615:62;-1:-1:-1;;;16693:18:1;;;16686:40;16743:19;;56280:70:0::1;16362:406:1::0;56280:70:0::1;56384:15;56361:20;:38:::0;56486:29:::1;::::0;-1:-1:-1;;;56486:29:0;;-1:-1:-1;;;;;56501:13:0::1;1889:32:1::0;56486:29:0::1;::::0;::::1;1871:51:1::0;56455:28:0::1;::::0;56486:4:::1;::::0;:14:::1;::::0;1844:18:1;;56486:29:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;56455:60:::0;-1:-1:-1;56566:20:0::1;56589:44;56627:5;56589:33;56455:60:::0;56614:7;56589:24:::1;:33::i;:::-;:37:::0;::::1;:44::i;:::-;56566:67:::0;-1:-1:-1;56739:16:0;;56735:114:::1;;56810:11;::::0;56771:66:::1;::::0;56787:13:::1;::::0;-1:-1:-1;;;;;56810:11:0::1;56824:12:::0;56771:15:::1;:66::i;:::-;56925:19;56962:13;56925:51;;56987:4;-1:-1:-1::0;;;;;56987:9:0::1;;:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;57014:14:0::1;::::0;::::1;::::0;-1:-1:-1;57014:14:0;;-1:-1:-1;57014:14:0::1;-1:-1:-1::0;57046:4:0::1;::::0;56063:995;-1:-1:-1;;;;56063:995:0:o;18433:182::-;18491:7;;18523:5;18527:1;18523;:5;:::i;:::-;18511:17;;18552:1;18547;:6;;18539:46;;;;-1:-1:-1;;;18539:46:0;;16975:2:1;18539:46:0;;;16957:21:1;17014:2;16994:18;;;16987:30;17053:29;17033:18;;;17026:57;17100:18;;18539:46:0;16773:351:1;18539:46:0;18606:1;18433:182;-1:-1:-1;;;18433:182:0:o;17052:381::-;-1:-1:-1;;;;;17188:19:0;;17180:68;;;;-1:-1:-1;;;17180:68:0;;17331:2:1;17180:68:0;;;17313:21:1;17370:2;17350:18;;;17343:30;17409:34;17389:18;;;17382:62;-1:-1:-1;;;17460:18:1;;;17453:34;17504:19;;17180:68:0;17129:400:1;17180:68:0;-1:-1:-1;;;;;17267:21:0;;17259:68;;;;-1:-1:-1;;;17259:68:0;;17736:2:1;17259:68:0;;;17718:21:1;17775:2;17755:18;;;17748:30;17814:34;17794:18;;;17787:62;-1:-1:-1;;;17865:18:1;;;17858:32;17907:19;;17259:68:0;17534:398:1;17259:68:0;-1:-1:-1;;;;;17341:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;17393:32;;160:25:1;;;17393:32:0;;133:18:1;17393:32:0;;;;;;;;17052:381;;;:::o;45821:5809::-;-1:-1:-1;;;;;45953:18:0;;45945:68;;;;-1:-1:-1;;;45945:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;46032:16:0;;46024:64;;;;-1:-1:-1;;;46024:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;46108:14:0;;;;;;:10;:14;;;;;;;;46107:15;:36;;;;-1:-1:-1;;;;;;46127:16:0;;;;;;:10;:16;;;;;;;;46126:17;46107:36;46099:98;;;;-1:-1:-1;;;46099:98:0;;18949:2:1;46099:98:0;;;18931:21:1;18988:2;18968:18;;;18961:30;19027:34;19007:18;;;19000:62;-1:-1:-1;;;19078:18:1;;;19071:47;19135:19;;46099:98:0;18747:413:1;46099:98:0;46212:11;46209:92;;46240:28;46256:4;46262:2;46266:1;46240:15;:28::i;46209:92::-;46317:14;;;;46314:1836;;;23466:6;;-1:-1:-1;;;;;46369:15:0;;;23466:6;;46369:15;;;;:49;;-1:-1:-1;23466:6:0;;-1:-1:-1;;;;;46405:13:0;;;23466:6;;46405:13;;46369:49;:86;;;;-1:-1:-1;;;;;;46439:16:0;;;;46369:86;:128;;;;-1:-1:-1;;;;;;46476:21:0;;46490:6;46476:21;;46369:128;:158;;;;-1:-1:-1;46519:8:0;;-1:-1:-1;;;46519:8:0;;;;46518:9;46369:158;46347:1792;;;46565:13;;;;;;;46561:148;;-1:-1:-1;;;;;46610:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;46639:23:0;;;;;;:19;:23;;;;;;;;46610:52;46602:87;;;;-1:-1:-1;;;46602:87:0;;19367:2:1;46602:87:0;;;19349:21:1;19406:2;19386:18;;;19379:30;-1:-1:-1;;;19425:18:1;;;19418:52;19487:18;;46602:87:0;19165:346:1;46602:87:0;46868:20;;;;46864:423;;;23466:6;;-1:-1:-1;;;;;46916:13:0;;;23466:6;;46916:13;;;;:47;;;46947:15;-1:-1:-1;;;;;46933:30:0;:2;-1:-1:-1;;;;;46933:30:0;;;46916:47;:79;;;;;46981:13;-1:-1:-1;;;;;46967:28:0;:2;-1:-1:-1;;;;;46967:28:0;;;46916:79;46912:356;;;47060:9;47031:39;;;;:28;:39;;;;;;47073:12;-1:-1:-1;47023:140:0;;;;-1:-1:-1;;;47023:140:0;;19718:2:1;47023:140:0;;;19700:21:1;19757:2;19737:18;;;19730:30;19796:34;19776:18;;;19769:62;19867:34;19847:18;;;19840:62;-1:-1:-1;;;19918:19:1;;;19911:40;19968:19;;47023:140:0;19516:477:1;47023:140:0;47219:9;47190:39;;;;:28;:39;;;;;47232:12;47190:54;;46912:356;-1:-1:-1;;;;;47340:31:0;;;;;;:25;:31;;;;;;;;:74;;;;-1:-1:-1;;;;;;47376:38:0;;;;;;:34;:38;;;;;;;;47375:39;47340:74;47336:788;;;47461:23;;47451:6;:33;;47443:102;;;;-1:-1:-1;;;47443:102:0;;20200:2:1;47443:102:0;;;20182:21:1;20239:2;20219:18;;;20212:30;20278:34;20258:18;;;20251:62;20349:26;20329:18;;;20322:54;20393:19;;47443:102:0;19998:420:1;47443:102:0;47606:9;;-1:-1:-1;;;;;10939:18:0;;10912:7;10939:18;;;;;;;;;;;47580:22;;:6;:22;:::i;:::-;:35;;47572:67;;;;-1:-1:-1;;;47572:67:0;;20625:2:1;47572:67:0;;;20607:21:1;20664:2;20644:18;;;20637:30;-1:-1:-1;;;20683:18:1;;;20676:49;20742:18;;47572:67:0;20423:343:1;47572:67:0;47336:788;;;-1:-1:-1;;;;;47718:29:0;;;;;;:25;:29;;;;;;;;:75;;;;-1:-1:-1;;;;;;47752:41:0;;;;;;:35;:41;;;;;;;;47751:42;47718:75;47714:410;;;47840:24;;47830:6;:34;;47822:105;;;;-1:-1:-1;;;47822:105:0;;20973:2:1;47822:105:0;;;20955:21:1;21012:2;20992:18;;;20985:30;21051:34;21031:18;;;21024:62;21122:28;21102:18;;;21095:56;21168:19;;47822:105:0;20771:422:1;47714:410:0;-1:-1:-1;;;;;47974:39:0;;;;;;:35;:39;;;;;;;;47970:154;;48071:9;;-1:-1:-1;;;;;10939:18:0;;10912:7;10939:18;;;;;;;;;;;48045:22;;:6;:22;:::i;:::-;:35;;48037:67;;;;-1:-1:-1;;;48037:67:0;;20625:2:1;48037:67:0;;;20607:21:1;20664:2;20644:18;;;20637:30;-1:-1:-1;;;20683:18:1;;;20676:49;20742:18;;48037:67:0;20423:343:1;48037:67:0;48211:10;;:14;;48224:1;48211:14;:::i;:::-;48194:12;:32;;:73;;;;;48254:13;-1:-1:-1;;;;;48248:19:0;:2;-1:-1:-1;;;;;48248:19:0;;;48194:73;:152;;;;-1:-1:-1;;;;;;48289:57:0;;48303:42;48289:57;;48194:152;48190:256;;;-1:-1:-1;;;;;48378:14:0;;;;;;:10;:14;;;;;;:21;;-1:-1:-1;;48378:21:0;48395:4;48378:21;;;48419:15;;;48378:14;48419:15;48190:256;48509:13;-1:-1:-1;;;;;48501:21:0;;;;;;;48537:6;;48501:21;48537:28;;-1:-1:-1;48547:18:0;;;;;;;48537:28;48533:631;;;-1:-1:-1;;;;;48586:30:0;;;;;;:24;:30;;;;;;:35;;;;:120;;-1:-1:-1;;;;;;48643:30:0;;;;;;:24;:30;;;;;;48690:15;;48643:43;;48677:8;48643:43;:::i;:::-;:62;;48586:120;48582:419;;;48747:21;;48728:16;:40;;;48805:20;;48787:15;:38;;;48863:21;;48844:16;:40;;;48957:10;;48805:20;;48919:35;;;:::i;:::-;:48;;;;:::i;:::-;:66;;;;:::i;:::-;48903:13;:82;48582:419;48533:631;;;-1:-1:-1;;;;;49037:28:0;;;;;;:24;:28;;;;;;49033:120;;-1:-1:-1;;;;;49091:28:0;;;;;;:24;:28;;;;;49122:15;49091:46;;49033:120;49226:4;49177:28;10939:18;;;;;;;;;;;49285;;49261:42;;;;;;;49335:35;;-1:-1:-1;49359:11:0;;;;;;;49335:35;:61;;;;-1:-1:-1;49388:8:0;;-1:-1:-1;;;49388:8:0;;;;49387:9;49335:61;:110;;;;-1:-1:-1;;;;;;49414:31:0;;;;;;:25;:31;;;;;;;;49413:32;49335:110;:153;;;;-1:-1:-1;;;;;;49463:25:0;;;;;;:19;:25;;;;;;;;49462:26;49335:153;:194;;;;-1:-1:-1;;;;;;49506:23:0;;;;;;:19;:23;;;;;;;;49505:24;49335:194;49317:328;;;49556:8;:15;;-1:-1:-1;;;;49556:15:0;-1:-1:-1;;;49556:15:0;;;49589:10;:8;:10::i;:::-;49617:8;:16;;-1:-1:-1;;;;49617:16:0;;;49317:328;49662:8;;-1:-1:-1;;;49662:8:0;;;;49661:9;:42;;;;-1:-1:-1;;;;;;49674:29:0;;;;;;:25;:29;;;;;;;;49661:42;:59;;;;-1:-1:-1;49707:13:0;;;;49661:59;:114;;;;;49760:15;;49743:14;;:32;;;;:::i;:::-;49724:15;:51;;49661:114;:144;;;;-1:-1:-1;;;;;;49780:25:0;;;;;;:19;:25;;;;;;;;49779:26;49661:144;49658:204;;;49821:29;:27;:29::i;:::-;;49658:204;49891:8;;-1:-1:-1;;;;;49935:29:0;;49875:12;49935:29;;;:25;:29;;;;;;49891:8;-1:-1:-1;;;49891:8:0;;;;;49890:9;;49935:29;49934:30;:66;;;;-1:-1:-1;;;;;;49969:31:0;;;;;;:25;:31;;;;;;;;49968:32;49934:66;-1:-1:-1;;;;;50099:25:0;;;;;;:19;:25;;;;;;49912:88;;-1:-1:-1;50099:25:0;;;:52;;-1:-1:-1;;;;;;50128:23:0;;;;;;:19;:23;;;;;;;;50099:52;:70;;;;50155:14;50099:70;50096:117;;;50196:5;50186:15;;50096:117;50226:12;50330:7;50327:1249;;;-1:-1:-1;;;;;50381:29:0;;;;;;:25;:29;;;;;;;;:50;;;;;50430:1;50414:13;;:17;50381:50;50377:1046;;;50458:34;50488:3;50458:25;50469:13;;50458:6;:10;;:25;;;;:::i;:34::-;50451:41;;50559:13;;50540:16;;50533:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;50511:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;50627:13:0;;50614:10;;50607:17;;:4;:17;:::i;:::-;:33;;;;:::i;:::-;50591:12;;:49;;;;;;;:::i;:::-;;;;-1:-1:-1;;50697:13:0;;50683:11;;50676:18;;:4;:18;:::i;:::-;:34;;;;:::i;:::-;50659:13;;:51;;;;;;;:::i;:::-;;;;-1:-1:-1;;50777:13:0;;50758:16;;50751:23;;:4;:23;:::i;:::-;:39;;;;:::i;:::-;50729:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;50855:13:0;;50837:15;;50830:22;;:4;:22;:::i;:::-;:38;;;;:::i;:::-;50809:17;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;50377:1046:0;;-1:-1:-1;50377:1046:0;;-1:-1:-1;;;;;50929:31:0;;;;;;:25;:31;;;;;;;;:51;;;;;50979:1;50964:12;;:16;50929:51;50926:497;;;51008:33;51037:3;51008:24;51019:12;;51008:6;:10;;:24;;;;:::i;:33::-;51001:40;;51107:12;;51089:15;;51082:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;51060:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;51173:12:0;;51161:9;;51154:16;;:4;:16;:::i;:::-;:31;;;;:::i;:::-;51138:12;;:47;;;;;;;:::i;:::-;;;;-1:-1:-1;;51241:12:0;;51228:10;;51221:17;;:4;:17;:::i;:::-;:32;;;;:::i;:::-;51204:13;;:49;;;;;;;:::i;:::-;;;;-1:-1:-1;;51319:12:0;;51301:15;;51294:22;;:4;:22;:::i;:::-;:37;;;;:::i;:::-;51272:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;51395:12:0;;51378:14;;51371:21;;:4;:21;:::i;:::-;:36;;;;:::i;:::-;51350:17;;:57;;;;;;;:::i;:::-;;;;-1:-1:-1;;50926:497:0;51443:8;;51440:93;;51475:42;51491:4;51505;51512;51475:15;:42::i;:::-;51550:14;51560:4;51550:14;;:::i;:::-;;;50327:1249;51589:33;51605:4;51611:2;51615:6;51589:15;:33::i;:::-;45934:5696;;;;;;45821:5809;;;:::o;19339:193::-;19425:7;19461:12;19453:6;;;;19445:29;;;;-1:-1:-1;;;19445:29:0;;;;;;;;:::i;:::-;-1:-1:-1;19485:9:0;19497:5;19501:1;19497;:5;:::i;:::-;19485:17;19339:193;-1:-1:-1;;;;;19339:193:0:o;43938:189::-;-1:-1:-1;;;;;44021:31:0;;;;;;:25;:31;;;;;;:39;;-1:-1:-1;;44021:39:0;;;;;;;;;;44079:40;;44021:39;;:31;44079:40;;;43938:189;;:::o;19792:473::-;19850:7;20095:6;20091:47;;-1:-1:-1;20125:1:0;20118:8;;20091:47;20151:9;20163:5;20167:1;20163;:5;:::i;:::-;20151:17;-1:-1:-1;20196:1:0;20187:5;20191:1;20151:17;20187:5;:::i;:::-;:10;20179:56;;;;-1:-1:-1;;;20179:56:0;;21530:2:1;20179:56:0;;;21512:21:1;21569:2;21549:18;;;21542:30;21608:34;21588:18;;;21581:62;-1:-1:-1;;;21659:18:1;;;21652:31;21700:19;;20179:56:0;21328:397:1;20742:132:0;20800:7;20827:39;20831:1;20834;20827:39;;;;;;;;;;;;;;;;;:3;:39::i;14616:575::-;-1:-1:-1;;;;;14756:20:0;;14748:70;;;;-1:-1:-1;;;14748:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;14837:23:0;;14829:71;;;;-1:-1:-1;;;14829:71:0;;;;;;;:::i;:::-;14995;15017:6;14995:71;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;14995:17:0;;:9;:17;;;;;;;;;;;;:71;:21;:71::i;:::-;-1:-1:-1;;;;;14975:17:0;;;:9;:17;;;;;;;;;;;:91;;;;15100:20;;;;;;;:32;;15125:6;15100:24;:32::i;:::-;-1:-1:-1;;;;;15077:20:0;;;:9;:20;;;;;;;;;;;;:55;;;;15148:35;160:25:1;;;15077:20:0;;15148:35;;;;;;133:18:1;15148:35:0;14:177:1;52778:2042:0;52861:4;52817:23;10939:18;;;;;;;;;;;52817:50;;52878:25;52979:17;;52963:13;;52948:12;;52927:18;;52906;;:39;;;;:::i;:::-;:54;;;;:::i;:::-;:70;;;;:::i;:::-;:90;;;;:::i;:::-;52878:118;-1:-1:-1;53007:12:0;53036:20;;;:46;;-1:-1:-1;53060:22:0;;53036:46;53033:60;;;53085:7;;;52778:2042::o;53033:60::-;53127:18;;:23;;53148:2;53127:23;:::i;:::-;53109:15;:41;53106:111;;;53182:18;;:23;;53203:2;53182:23;:::i;:::-;53164:41;;53106:111;53279:23;53364:1;53344:17;53323:18;;53305:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;53279:86;-1:-1:-1;53376:26:0;53405:36;:15;53279:86;53405:19;:36::i;:::-;53376:65;-1:-1:-1;53483:21:0;53518:36;53376:65;53518:16;:36::i;:::-;53569:18;53590:44;:21;53616:17;53590:25;:44::i;:::-;53569:65;;53648:23;53674:57;53713:17;53674:34;53689:18;;53674:10;:14;;:34;;;;:::i;:57::-;53648:83;;53742:17;53762:51;53795:17;53762:28;53777:12;;53762:10;:14;;:28;;;;:::i;:51::-;53742:71;;53824:18;53845:52;53879:17;53845:29;53860:13;;53845:10;:14;;:29;;;;:::i;:52::-;53824:73;;53908:22;53933:56;53971:17;53933:33;53948:17;;53933:10;:14;;:33;;;;:::i;:56::-;53908:81;-1:-1:-1;54006:23:0;53908:81;54075:10;54063:9;54032:28;54045:15;54032:10;:28;:::i;:::-;:40;;;;:::i;:::-;:53;;;;:::i;:::-;:70;;;;:::i;:::-;54140:1;54119:18;:22;;;54152:18;:22;;;54185:12;:16;;;54212:13;:17;;;54240;:21;;;54296:9;;54288:45;;54006:96;;-1:-1:-1;;;;;;54296:9:0;;54319;;54288:45;54140:1;54288:45;54319:9;54296;54288:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;54367:10:0;;54359:47;;54275:58;;-1:-1:-1;;;;;;54367:10:0;;54391;;54359:47;;;;54391:10;54367;54359:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;54346:60:0;;-1:-1:-1;;54423:19:0;;;;;:42;;;54464:1;54446:15;:19;54423:42;54420:210;;;54481:46;54494:15;54511;54481:12;:46::i;:::-;54599:18;;54547:71;;;22142:25:1;;;22198:2;22183:18;;22176:34;;;22226:18;;;22219:34;;;;54547:71:0;;;;;;22130:2:1;54547:71:0;;;54420:210;54667:15;;54659:63;;-1:-1:-1;;;;;54667:15:0;;;;54696:21;;54659:63;;;;54696:21;54667:15;54659:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;54758:14:0;;54750:62;;54646:76;;-1:-1:-1;;;;;;54758:14:0;;54786:21;;54750:62;;;;54786:21;54758:14;54750:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;52778:2042:0:o;55285:769::-;55378:15;55361:14;:32;55480:29;;-1:-1:-1;;;55480:29:0;;-1:-1:-1;;;;;55495:13:0;1889:32:1;55480:29:0;;;1871:51:1;55342:4:0;;;;55480;;:14;;1844:18:1;;55480:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;55449:60;;55560:20;55583:53;55630:5;55583:42;55608:16;;55583:20;:24;;:42;;;;:::i;:53::-;55560:76;-1:-1:-1;55742:16:0;;55738:109;;55774:61;55790:13;55813:6;55822:12;55774:15;:61::i;:::-;55923:19;55960:13;55923:51;;55985:4;-1:-1:-1;;;;;55985:9:0;;:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;56012:12:0;;;;-1:-1:-1;56012:12:0;;-1:-1:-1;56012:12:0;56042:4;56035:11;;;;;55285:769;:::o;21371:279::-;21457:7;21492:12;21485:5;21477:28;;;;-1:-1:-1;;;21477:28:0;;;;;;;;:::i;:::-;-1:-1:-1;21516:9:0;21528:5;21532:1;21528;:5;:::i;18899:136::-;18957:7;18984:43;18988:1;18991;18984:43;;;;;;;;;;;;;;;;;:3;:43::i;51639:597::-;51792:16;;;51806:1;51792:16;;;;;;;;51768:21;;51792:16;;;;;;;;;;-1:-1:-1;51792:16:0;51768:40;;51837:4;51819;51824:1;51819:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;51819:23:0;;;-1:-1:-1;;;;;51819:23:0;;;;;51863:15;-1:-1:-1;;;;;51863:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;51853:4;51858:1;51853:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;51853:32:0;;;-1:-1:-1;;;;;51853:32:0;;;;;51899:62;51916:4;51931:15;51949:11;51899:8;:62::i;:::-;52001:224;;-1:-1:-1;;;52001:224:0;;-1:-1:-1;;;;;52001:15:0;:66;;;;:224;;52082:11;;52108:1;;52152:4;;52179;;52199:15;;52001:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51694:542;51639:597;:::o;52251:518::-;52399:62;52416:4;52431:15;52449:11;52399:8;:62::i;:::-;52709:11;;52505:256;;-1:-1:-1;;;52505:256:0;;52577:4;52505:256;;;23846:34:1;23896:18;;;23889:34;;;52623:1:0;23939:18:1;;;23932:34;;;23982:18;;;23975:34;-1:-1:-1;;;;;52709:11:0;;;24025:19:1;;;24018:44;52735:15:0;24078:19:1;;;24071:35;52505:15:0;:31;;;;;;52544:9;;23780:19:1;;52505:256:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;196:597:1:-;308:4;337:2;366;355:9;348:21;398:6;392:13;441:6;436:2;425:9;421:18;414:34;466:1;476:140;490:6;487:1;484:13;476:140;;;585:14;;;581:23;;575:30;551:17;;;570:2;547:26;540:66;505:10;;476:140;;;634:6;631:1;628:13;625:91;;;704:1;699:2;690:6;679:9;675:22;671:31;664:42;625:91;-1:-1:-1;777:2:1;756:15;-1:-1:-1;;752:29:1;737:45;;;;784:2;733:54;;196:597;-1:-1:-1;;;196:597:1:o;798:131::-;-1:-1:-1;;;;;873:31:1;;863:42;;853:70;;919:1;916;909:12;934:247;993:6;1046:2;1034:9;1025:7;1021:23;1017:32;1014:52;;;1062:1;1059;1052:12;1014:52;1101:9;1088:23;1120:31;1145:5;1120:31;:::i;1378:315::-;1446:6;1454;1507:2;1495:9;1486:7;1482:23;1478:32;1475:52;;;1523:1;1520;1513:12;1475:52;1562:9;1549:23;1581:31;1606:5;1581:31;:::i;:::-;1631:5;1683:2;1668:18;;;;1655:32;;-1:-1:-1;;;1378:315:1:o;1933:180::-;1992:6;2045:2;2033:9;2024:7;2020:23;2016:32;2013:52;;;2061:1;2058;2051:12;2013:52;-1:-1:-1;2084:23:1;;1933:180;-1:-1:-1;1933:180:1:o;2118:456::-;2195:6;2203;2211;2264:2;2252:9;2243:7;2239:23;2235:32;2232:52;;;2280:1;2277;2270:12;2232:52;2319:9;2306:23;2338:31;2363:5;2338:31;:::i;:::-;2388:5;-1:-1:-1;2445:2:1;2430:18;;2417:32;2458:33;2417:32;2458:33;:::i;:::-;2118:456;;2510:7;;-1:-1:-1;;;2564:2:1;2549:18;;;;2536:32;;2118:456::o;2787:118::-;2873:5;2866:13;2859:21;2852:5;2849:32;2839:60;;2895:1;2892;2885:12;2910:382;2975:6;2983;3036:2;3024:9;3015:7;3011:23;3007:32;3004:52;;;3052:1;3049;3042:12;3004:52;3091:9;3078:23;3110:31;3135:5;3110:31;:::i;:::-;3160:5;-1:-1:-1;3217:2:1;3202:18;;3189:32;3230:30;3189:32;3230:30;:::i;:::-;3279:7;3269:17;;;2910:382;;;;;:::o;3486:402::-;3568:6;3576;3629:2;3617:9;3608:7;3604:23;3600:32;3597:52;;;3645:1;3642;3635:12;3597:52;3684:9;3671:23;3703:31;3728:5;3703:31;:::i;:::-;3753:5;-1:-1:-1;3810:2:1;3795:18;;3782:32;3823:33;3782:32;3823:33;:::i;3893:661::-;4015:6;4023;4031;4039;4047;4055;4063;4071;4124:3;4112:9;4103:7;4099:23;4095:33;4092:53;;;4141:1;4138;4131:12;4092:53;-1:-1:-1;;4164:23:1;;;4234:2;4219:18;;4206:32;;-1:-1:-1;4285:2:1;4270:18;;4257:32;;4336:2;4321:18;;4308:32;;-1:-1:-1;4387:3:1;4372:19;;4359:33;;-1:-1:-1;4439:3:1;4424:19;;4411:33;;-1:-1:-1;4491:3:1;4476:19;;4463:33;;-1:-1:-1;4543:3:1;4528:19;4515:33;;-1:-1:-1;3893:661:1;-1:-1:-1;3893:661:1:o;4559:127::-;4620:10;4615:3;4611:20;4608:1;4601:31;4651:4;4648:1;4641:15;4675:4;4672:1;4665:15;4691:275;4762:2;4756:9;4827:2;4808:13;;-1:-1:-1;;4804:27:1;4792:40;;4862:18;4847:34;;4883:22;;;4844:62;4841:88;;;4909:18;;:::i;:::-;4945:2;4938:22;4691:275;;-1:-1:-1;4691:275:1:o;4971:183::-;5031:4;5064:18;5056:6;5053:30;5050:56;;;5086:18;;:::i;:::-;-1:-1:-1;5131:1:1;5127:14;5143:4;5123:25;;4971:183::o;5159:662::-;5213:5;5266:3;5259:4;5251:6;5247:17;5243:27;5233:55;;5284:1;5281;5274:12;5233:55;5320:6;5307:20;5346:4;5370:60;5386:43;5426:2;5386:43;:::i;:::-;5370:60;:::i;:::-;5464:15;;;5550:1;5546:10;;;;5534:23;;5530:32;;;5495:12;;;;5574:15;;;5571:35;;;5602:1;5599;5592:12;5571:35;5638:2;5630:6;5626:15;5650:142;5666:6;5661:3;5658:15;5650:142;;;5732:17;;5720:30;;5770:12;;;;5683;;5650:142;;;-1:-1:-1;5810:5:1;5159:662;-1:-1:-1;;;;;;5159:662:1:o;5826:1215::-;5944:6;5952;6005:2;5993:9;5984:7;5980:23;5976:32;5973:52;;;6021:1;6018;6011:12;5973:52;6061:9;6048:23;6090:18;6131:2;6123:6;6120:14;6117:34;;;6147:1;6144;6137:12;6117:34;6185:6;6174:9;6170:22;6160:32;;6230:7;6223:4;6219:2;6215:13;6211:27;6201:55;;6252:1;6249;6242:12;6201:55;6288:2;6275:16;6310:4;6334:60;6350:43;6390:2;6350:43;:::i;6334:60::-;6428:15;;;6510:1;6506:10;;;;6498:19;;6494:28;;;6459:12;;;;6534:19;;;6531:39;;;6566:1;6563;6556:12;6531:39;6590:11;;;;6610:217;6626:6;6621:3;6618:15;6610:217;;;6706:3;6693:17;6723:31;6748:5;6723:31;:::i;:::-;6767:18;;6643:12;;;;6805;;;;6610:217;;;6846:5;-1:-1:-1;;6889:18:1;;6876:32;;-1:-1:-1;;6920:16:1;;;6917:36;;;6949:1;6946;6939:12;6917:36;;6972:63;7027:7;7016:8;7005:9;7001:24;6972:63;:::i;:::-;6962:73;;;5826:1215;;;;;:::o;7046:377::-;7120:6;7128;7136;7189:2;7177:9;7168:7;7164:23;7160:32;7157:52;;;7205:1;7202;7195:12;7157:52;7241:9;7228:23;7218:33;;7298:2;7287:9;7283:18;7270:32;7260:42;;7352:2;7341:9;7337:18;7324:32;7365:28;7387:5;7365:28;:::i;:::-;7412:5;7402:15;;;7046:377;;;;;:::o;7688:241::-;7744:6;7797:2;7785:9;7776:7;7772:23;7768:32;7765:52;;;7813:1;7810;7803:12;7765:52;7852:9;7839:23;7871:28;7893:5;7871:28;:::i;8327:454::-;8422:6;8430;8438;8446;8454;8507:3;8495:9;8486:7;8482:23;8478:33;8475:53;;;8524:1;8521;8514:12;8475:53;-1:-1:-1;;8547:23:1;;;8617:2;8602:18;;8589:32;;-1:-1:-1;8668:2:1;8653:18;;8640:32;;8719:2;8704:18;;8691:32;;-1:-1:-1;8770:3:1;8755:19;8742:33;;-1:-1:-1;8327:454:1;-1:-1:-1;8327:454:1:o;8786:380::-;8865:1;8861:12;;;;8908;;;8929:61;;8983:4;8975:6;8971:17;8961:27;;8929:61;9036:2;9028:6;9025:14;9005:18;9002:38;8999:161;;;9082:10;9077:3;9073:20;9070:1;9063:31;9117:4;9114:1;9107:15;9145:4;9142:1;9135:15;8999:161;;8786:380;;;:::o;9171:356::-;9373:2;9355:21;;;9392:18;;;9385:30;9451:34;9446:2;9431:18;;9424:62;9518:2;9503:18;;9171:356::o;9532:127::-;9593:10;9588:3;9584:20;9581:1;9574:31;9624:4;9621:1;9614:15;9648:4;9645:1;9638:15;9664:168;9704:7;9770:1;9766;9762:6;9758:14;9755:1;9752:21;9747:1;9740:9;9733:17;9729:45;9726:71;;;9777:18;;:::i;:::-;-1:-1:-1;9817:9:1;;9664:168::o;9837:217::-;9877:1;9903;9893:132;;9947:10;9942:3;9938:20;9935:1;9928:31;9982:4;9979:1;9972:15;10010:4;10007:1;10000:15;9893:132;-1:-1:-1;10039:9:1;;9837:217::o;10479:184::-;10549:6;10602:2;10590:9;10581:7;10577:23;10573:32;10570:52;;;10618:1;10615;10608:12;10570:52;-1:-1:-1;10641:16:1;;10479:184;-1:-1:-1;10479:184:1:o;10947:245::-;11014:6;11067:2;11055:9;11046:7;11042:23;11038:32;11035:52;;;11083:1;11080;11073:12;11035:52;11115:9;11109:16;11134:28;11156:5;11134:28;:::i;11197:128::-;11237:3;11268:1;11264:6;11261:1;11258:13;11255:39;;;11274:18;;:::i;:::-;-1:-1:-1;11310:9:1;;11197:128::o;12034:127::-;12095:10;12090:3;12086:20;12083:1;12076:31;12126:4;12123:1;12116:15;12150:4;12147:1;12140:15;12166:135;12205:3;-1:-1:-1;;12226:17:1;;12223:43;;;12246:18;;:::i;:::-;-1:-1:-1;12293:1:1;12282:13;;12166:135::o;17937:401::-;18139:2;18121:21;;;18178:2;18158:18;;;18151:30;18217:34;18212:2;18197:18;;18190:62;-1:-1:-1;;;18283:2:1;18268:18;;18261:35;18328:3;18313:19;;17937:401::o;18343:399::-;18545:2;18527:21;;;18584:2;18564:18;;;18557:30;18623:34;18618:2;18603:18;;18596:62;-1:-1:-1;;;18689:2:1;18674:18;;18667:33;18732:3;18717:19;;18343:399::o;21198:125::-;21238:4;21266:1;21263;21260:8;21257:34;;;21271:18;;:::i;:::-;-1:-1:-1;21308:9:1;;21198:125::o;22264:251::-;22334:6;22387:2;22375:9;22366:7;22362:23;22358:32;22355:52;;;22403:1;22400;22393:12;22355:52;22435:9;22429:16;22454:31;22479:5;22454:31;:::i;22520:980::-;22782:4;22830:3;22819:9;22815:19;22861:6;22850:9;22843:25;22887:2;22925:6;22920:2;22909:9;22905:18;22898:34;22968:3;22963:2;22952:9;22948:18;22941:31;22992:6;23027;23021:13;23058:6;23050;23043:22;23096:3;23085:9;23081:19;23074:26;;23135:2;23127:6;23123:15;23109:29;;23156:1;23166:195;23180:6;23177:1;23174:13;23166:195;;;23245:13;;-1:-1:-1;;;;;23241:39:1;23229:52;;23336:15;;;;23301:12;;;;23277:1;23195:9;23166:195;;;-1:-1:-1;;;;;;;23417:32:1;;;;23412:2;23397:18;;23390:60;-1:-1:-1;;;23481:3:1;23466:19;23459:35;23378:3;22520:980;-1:-1:-1;;;22520:980:1:o;24117:306::-;24205:6;24213;24221;24274:2;24262:9;24253:7;24249:23;24245:32;24242:52;;;24290:1;24287;24280:12;24242:52;24319:9;24313:16;24303:26;;24369:2;24358:9;24354:18;24348:25;24338:35;;24413:2;24402:9;24398:18;24392:25;24382:35;;24117:306;;;;;:::o

Swarm Source

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