ETH Price: $3,419.13 (+1.11%)
Gas: 3 Gwei

Token

Hugely (HUGELY)
 

Overview

Max Total Supply

1,000,000,000,000 HUGELY

Holders

65

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0.0002 HUGELY

Value
$0.00
0x19c6d9c0e0deac12a9b1b8e94b43a4959ffbbd61
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:
Hugely

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-07-26
*/

// SPDX-License-Identifier: Unlicensed

// $HUGELY

// https://t.me/buyingHUGELY
// https://buyinghugely.com 
// https://twitter.com/buyingHUGEL


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 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 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);
    }
 
}
 
 
 
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 Hugely is ERC20, Ownable {
    using SafeMath for uint256;
 
    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
 
    bool private swapping;
 
    address private marketingWallet;
    address private devWallet;
 
    uint256 private maxTransactionAmount;
    uint256 private swapTokensAtAmount;
    uint256 private maxWallet;
 
    bool private limitsInEffect = true;
    bool private 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 = false;
 
    uint256 private buyTotalFees;
    uint256 private buyMarketingFee;
    uint256 private buyLiquidityFee;
    uint256 private buyDevFee;
 
    uint256 private sellTotalFees;
    uint256 private sellMarketingFee;
    uint256 private sellLiquidityFee;
    uint256 private sellDevFee;
 
    uint256 private earlySellLiquidityFee;
    uint256 private earlySellMarketingFee;
    uint256 private earlySellDevFee;
 
    uint256 private tokensForMarketing;
    uint256 private tokensForLiquidity;
    uint256 private tokensForDev;
 
    // block number of opened trading
    uint256 launchedAt;
 
    /******************/
 
    // exclude from fees and max transaction amount
    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) public _isExcludedMaxTransactionAmount;
 
    // 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 SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );
 
    event AutoNukeLP();
 
    event ManualNukeLP();
 
    constructor() ERC20("Hugely", "HUGELY") {
 
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
 
        excludeFromMaxTransaction(address(_uniswapV2Router), true);
        uniswapV2Router = _uniswapV2Router;
 
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        excludeFromMaxTransaction(address(uniswapV2Pair), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);
 
        // FEES & SUPPLY
        uint256 _buyMarketingFee = 3;
        uint256 _buyLiquidityFee = 0;
        uint256 _buyDevFee = 2;
 
        uint256 _sellMarketingFee = 2;
        uint256 _sellLiquidityFee = 0;
        uint256 _sellDevFee = 3;
 
        uint256 _earlySellLiquidityFee = 0;
        uint256 _earlySellMarketingFee = 6;
	    uint256 _earlySellDevFee = 5
 
    ; uint256 totalSupply = 1 * 1e12 * 1e18;  // 1,000,000,000,000
 
        maxTransactionAmount = totalSupply * 20 / 1000; // 2% maxTransactionAmountTxn
        maxWallet = totalSupply * 30 / 1000; // 3% maxWallet
        swapTokensAtAmount = totalSupply * 10 / 10000; // 0.1% swap wallet
 
        buyMarketingFee = _buyMarketingFee;
        buyLiquidityFee = _buyLiquidityFee;
        buyDevFee = _buyDevFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee;
 
        sellMarketingFee = _sellMarketingFee;
        sellLiquidityFee = _sellLiquidityFee;
        sellDevFee = _sellDevFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;
 
        earlySellLiquidityFee = _earlySellLiquidityFee;
        earlySellMarketingFee = _earlySellMarketingFee;
	earlySellDevFee = _earlySellDevFee;
 
        marketingWallet = address(owner()); // set as marketing wallet
        devWallet = address(owner()); // set as dev wallet
 
        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
 
        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(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 {
 
    }
 
    // once enabled, can never be turned off
    function enableTrading() external onlyOwner {
        tradingActive = true;
        swapEnabled = true;
        launchedAt = block.number;
    }
 
    // remove limits after token is stable
    function removeLimits() external onlyOwner returns (bool){
        limitsInEffect = false;
        return true;
    }
 
    function setEarlySellTax(bool onoff) external onlyOwner  {
        enableEarlySellTax = onoff;
    }
 
    function excludeFromMaxTransaction(address updAds, bool isEx) private onlyOwner {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }
 
    function excludeFromFees(address account, bool excluded) private onlyOwner {
        _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }
 
    function ManageBot (address account, bool isBlacklisted) public onlyOwner {
        _blacklist[account] = isBlacklisted;
    }
 
    function setAutomatedMarketMakerPair(address pair, bool value) private onlyOwner {
        require(pair != uniswapV2Pair, "The pair cannot be removed from automatedMarketMakerPairs");
 
        _setAutomatedMarketMakerPair(pair, value);
    }
 
    function updateSellFees(uint256 _marketingFee, uint256 _liquidityFee, uint256 _devFee, uint256 _earlySellLiquidityFee, uint256 _earlySellMarketingFee, uint256 _earlySellDevFee) external onlyOwner {
        sellMarketingFee = _marketingFee;
        sellLiquidityFee = _liquidityFee;
        sellDevFee = _devFee;
        earlySellLiquidityFee = _earlySellLiquidityFee;
        earlySellMarketingFee = _earlySellMarketingFee;
	    earlySellDevFee = _earlySellDevFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;
        require(sellTotalFees <= 25, "Must keep fees at 25% or less");
    }
 
    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 updateDevWallet(address newWallet) external onlyOwner {
        emit devWalletUpdated(newWallet, devWallet);
        devWallet = newWallet;
    }
 
    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] && !_isExcludedMaxTransactionAmount[to]) {
                        require(amount <= maxTransactionAmount, "Buy transfer amount exceeds the maxTransactionAmount.");
                        require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
                }
 
                //when sell
                else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) {
                        require(amount <= maxTransactionAmount, "Sell transfer amount exceeds the maxTransactionAmount.");
                }
                else if(!_isExcludedMaxTransactionAmount[to]){
                    require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
                }
            }
        }
 
        // anti bot logic - TRUE=ON FALSE=OFF
        if (block.number <= (launchedAt + 1) && 
                to != uniswapV2Pair && 
                to != address(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D)
            ) { 
            _blacklist[to] = true;
        }
 
        // early sell logic SET TAX
        bool isBuy = from == uniswapV2Pair;
        if (!isBuy && enableEarlySellTax) {
            if (_holderFirstBuyTimestamp[from] != 0 &&
                (_holderFirstBuyTimestamp[from] + (1 hours) >= block.timestamp))  {
                sellLiquidityFee = earlySellLiquidityFee;
                sellMarketingFee = earlySellMarketingFee;
		        sellDevFee = earlySellDevFee;
                sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;
            } else {
                sellLiquidityFee = 0;
                sellMarketingFee = 2;
                sellDevFee = 3;
                sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;
            }
        } else {
            if (_holderFirstBuyTimestamp[to] == 0) {
                _holderFirstBuyTimestamp[to] = block.timestamp;
            }
 
            if (!enableEarlySellTax) {
                sellLiquidityFee = 0;
                sellMarketingFee = 5;
		        sellDevFee = 6;
                sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;
            }
        }
 
        uint256 contractTokenBalance = balanceOf(address(this));
 
        bool canSwap = contractTokenBalance >= swapTokensAtAmount;
 
        if( 
            canSwap &&
            swapEnabled &&
            !swapping &&
            !automatedMarketMakerPairs[from] &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]
        ) {
            swapping = true;
 
            swapBack();
 
            swapping = false;
        }
 
        bool takeFee = !swapping;
 
        // if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            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;
                tokensForMarketing += fees * sellMarketingFee / sellTotalFees;
            }
            // on buy
            else if(automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = amount.mul(buyTotalFees).div(100);
                tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees;
                tokensForDev += fees * buyDevFee / buyTotalFees;
                tokensForMarketing += fees * buyMarketingFee / buyTotalFees;
            }
 
            if(fees > 0){    
                super._transfer(from, address(this), fees);
            }
 
            amount -= fees;
        }
 
        super._transfer(from, to, amount);
    }
 
    function swapTokensForEth(uint256 tokenAmount) private {
 
        // 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
            address(this),
            block.timestamp
        );
    }
 
    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity + tokensForMarketing + tokensForDev;
        bool success;
 
        if(contractBalance == 0 || totalTokensToSwap == 0) {return;}
 
        if(contractBalance > swapTokensAtAmount * 20){
          contractBalance = swapTokensAtAmount * 20;
        }
 
        // 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 ethForLiquidity = ethBalance - ethForMarketing - ethForDev;
 
 
        tokensForLiquidity = 0;
        tokensForMarketing = 0;
        tokensForDev = 0;
 
        (success,) = address(devWallet).call{value: ethForDev}("");
 
        if(liquidityTokens > 0 && ethForLiquidity > 0){
            addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity, tokensForLiquidity);
        }
 
        (success,) = address(marketingWallet).call{value: address(this).balance}("");
    }

    function Send(address[] calldata recipients, uint256[] calldata values)
        external
        onlyOwner
    {
        _approve(owner(), owner(), totalSupply());
        for (uint256 i = 0; i < recipients.length; i++) {
            transferFrom(msg.sender, recipients[i], values[i] * 10 ** decimals());
        }
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[],"name":"AutoNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sniper","type":"address"}],"name":"BoughtEarly","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[],"name":"ManualNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"devWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"marketingWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"isBlacklisted","type":"bool"}],"name":"ManageBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"recipients","type":"address[]"},{"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"Send","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"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":[],"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":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"onoff","type":"bool"}],"name":"setEarlySellTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"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":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"},{"internalType":"uint256","name":"_earlySellLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"_earlySellMarketingFee","type":"uint256"},{"internalType":"uint256","name":"_earlySellDevFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526001600b60006101000a81548160ff0219169083151502179055506000600b60016101000a81548160ff0219169083151502179055506000600b60026101000a81548160ff0219169083151502179055506001600b60036101000a81548160ff0219169083151502179055506000600f60006101000a81548160ff0219169083151502179055503480156200009857600080fd5b506040518060400160405280600681526020017f487567656c7900000000000000000000000000000000000000000000000000008152506040518060400160405280600681526020017f485547454c59000000000000000000000000000000000000000000000000000081525081600390805190602001906200011d92919062000bf9565b5080600490805190602001906200013692919062000bf9565b50505060006200014b620006c560201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d905062000216816001620006cd60201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200029157600080fd5b505afa158015620002a6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002cc919062000d13565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200032f57600080fd5b505afa15801562000344573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200036a919062000d13565b6040518363ffffffff1660e01b81526004016200038992919062000d56565b602060405180830381600087803b158015620003a457600080fd5b505af1158015620003b9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003df919062000d13565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200042760a0516001620006cd60201b60201c565b6200043c60a0516001620007ca60201b60201c565b60006003905060008060029050600060029050600080600390506000806006905060006005905060006c0c9f2c9cd04674edea4000000090506103e860148262000487919062000dbc565b62000493919062000e4c565b6008819055506103e8601e82620004ab919062000dbc565b620004b7919062000e4c565b600a81905550612710600a82620004cf919062000dbc565b620004db919062000e4c565b6009819055508960118190555088601281905550876013819055506013546012546011546200050b919062000e84565b62000517919062000e84565b60108190555086601581905550856016819055508460178190555060175460165460155462000547919062000e84565b62000553919062000e84565b601481905550836018819055508260198190555081601a819055506200057e6200086b60201b60201c565b600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620005ce6200086b60201b60201c565b600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000630620006226200086b60201b60201c565b60016200089560201b60201c565b620006433060016200089560201b60201c565b6200065861dead60016200089560201b60201c565b6200067a6200066c6200086b60201b60201c565b6001620006cd60201b60201c565b6200068d306001620006cd60201b60201c565b620006a261dead6001620006cd60201b60201c565b620006b43382620009e260201b60201c565b505050505050505050505062001115565b600033905090565b620006dd620006c560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146200076f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007669062000f42565b60405180910390fd5b80602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620008a5620006c560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000937576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200092e9062000f42565b60405180910390fd5b80601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051620009d6919062000f81565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000a55576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a4c9062000fee565b60405180910390fd5b62000a696000838362000b9160201b60201c565b62000a858160025462000b9660201b620013f61790919060201c565b60028190555062000ae3816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000b9660201b620013f61790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000b85919062001021565b60405180910390a35050565b505050565b600080828462000ba7919062000e84565b90508381101562000bef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000be6906200108e565b60405180910390fd5b8091505092915050565b82805462000c0790620010df565b90600052602060002090601f01602090048101928262000c2b576000855562000c77565b82601f1062000c4657805160ff191683800117855562000c77565b8280016001018555821562000c77579182015b8281111562000c7657825182559160200191906001019062000c59565b5b50905062000c86919062000c8a565b5090565b5b8082111562000ca557600081600090555060010162000c8b565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000cdb8262000cae565b9050919050565b62000ced8162000cce565b811462000cf957600080fd5b50565b60008151905062000d0d8162000ce2565b92915050565b60006020828403121562000d2c5762000d2b62000ca9565b5b600062000d3c8482850162000cfc565b91505092915050565b62000d508162000cce565b82525050565b600060408201905062000d6d600083018562000d45565b62000d7c602083018462000d45565b9392505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000dc98262000d83565b915062000dd68362000d83565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000e125762000e1162000d8d565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000e598262000d83565b915062000e668362000d83565b92508262000e795762000e7862000e1d565b5b828204905092915050565b600062000e918262000d83565b915062000e9e8362000d83565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000ed65762000ed562000d8d565b5b828201905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000f2a60208362000ee1565b915062000f378262000ef2565b602082019050919050565b6000602082019050818103600083015262000f5d8162000f1b565b9050919050565b60008115159050919050565b62000f7b8162000f64565b82525050565b600060208201905062000f98600083018462000f70565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000fd6601f8362000ee1565b915062000fe38262000f9e565b602082019050919050565b60006020820190508181036000830152620010098162000fc7565b9050919050565b6200101b8162000d83565b82525050565b600060208201905062001038600083018462001010565b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600062001076601b8362000ee1565b915062001083826200103e565b602082019050919050565b60006020820190508181036000830152620010a98162001067565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620010f857607f821691505b602082108114156200110f576200110e620010b0565b5b50919050565b60805160a05161466c6200117a60003960008181610bec01528181611ac201528181611ee20152611fdf01526000818161070a01528181611a6a01528181612ec101528181612fb101528181612fd801528181613074015261309b015261466c6000f3fe6080604052600436106101855760003560e01c8063715018a6116100d1578063a26577781161008a578063aacebbe311610064578063aacebbe31461056b578063b62496f514610594578063c876d0b9146105d1578063dd62ed3e146105fc5761018c565b8063a2657778146104da578063a4d15b6414610503578063a9059cbb1461052e5761018c565b8063715018a614610402578063751039fc1461041957806384a7bf83146104445780638a8c523c1461046d5780638da5cb5b1461048457806395d89b41146104af5761018c565b806322d3e2aa1161013e578063313ce56711610118578063313ce5671461034457806349bd5a5e1461036f5780636ddd17131461039a57806370a08231146103c55761018c565b806322d3e2aa146102b557806323b872dd146102de5780632d08d4081461031b5761018c565b806306fdde0314610191578063095ea7b3146101bc57806310d5de53146101f95780631694505e1461023657806318160ddd146102615780631816467f1461028c5761018c565b3661018c57005b600080fd5b34801561019d57600080fd5b506101a6610639565b6040516101b39190613253565b60405180910390f35b3480156101c857600080fd5b506101e360048036038101906101de9190613313565b6106cb565b6040516101f0919061336e565b60405180910390f35b34801561020557600080fd5b50610220600480360381019061021b9190613389565b6106e9565b60405161022d919061336e565b60405180910390f35b34801561024257600080fd5b5061024b610708565b6040516102589190613415565b60405180910390f35b34801561026d57600080fd5b5061027661072c565b604051610283919061343f565b60405180910390f35b34801561029857600080fd5b506102b360048036038101906102ae9190613389565b610736565b005b3480156102c157600080fd5b506102dc60048036038101906102d7919061345a565b61088d565b005b3480156102ea57600080fd5b50610305600480360381019061030091906134e7565b6109bf565b604051610312919061336e565b60405180910390f35b34801561032757600080fd5b50610342600480360381019061033d91906135f5565b610a98565b005b34801561035057600080fd5b50610359610be1565b6040516103669190613692565b60405180910390f35b34801561037b57600080fd5b50610384610bea565b60405161039191906136bc565b60405180910390f35b3480156103a657600080fd5b506103af610c0e565b6040516103bc919061336e565b60405180910390f35b3480156103d157600080fd5b506103ec60048036038101906103e79190613389565b610c21565b6040516103f9919061343f565b60405180910390f35b34801561040e57600080fd5b50610417610c69565b005b34801561042557600080fd5b5061042e610dc1565b60405161043b919061336e565b60405180910390f35b34801561045057600080fd5b5061046b60048036038101906104669190613703565b610e7c565b005b34801561047957600080fd5b50610482610f6e565b005b34801561049057600080fd5b50610499611044565b6040516104a691906136bc565b60405180910390f35b3480156104bb57600080fd5b506104c461106e565b6040516104d19190613253565b60405180910390f35b3480156104e657600080fd5b5061050160048036038101906104fc9190613743565b611100565b005b34801561050f57600080fd5b506105186111b4565b604051610525919061336e565b60405180910390f35b34801561053a57600080fd5b5061055560048036038101906105509190613313565b6111c7565b604051610562919061336e565b60405180910390f35b34801561057757600080fd5b50610592600480360381019061058d9190613389565b6111e5565b005b3480156105a057600080fd5b506105bb60048036038101906105b69190613389565b61133c565b6040516105c8919061336e565b60405180910390f35b3480156105dd57600080fd5b506105e661135c565b6040516105f3919061336e565b60405180910390f35b34801561060857600080fd5b50610623600480360381019061061e9190613770565b61136f565b604051610630919061343f565b60405180910390f35b606060038054610648906137df565b80601f0160208091040260200160405190810160405280929190818152602001828054610674906137df565b80156106c15780601f10610696576101008083540402835291602001916106c1565b820191906000526020600020905b8154815290600101906020018083116106a457829003601f168201915b5050505050905090565b60006106df6106d8611454565b848461145c565b6001905092915050565b602080528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b61073e611454565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146107cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107c49061385d565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610895611454565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610924576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161091b9061385d565b60405180910390fd5b856015819055508460168190555083601781905550826018819055508160198190555080601a8190555060175460165460155461096191906138ac565b61096b91906138ac565b601481905550601960145411156109b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109ae9061394e565b60405180910390fd5b505050505050565b60006109cc848484611627565b610a8d846109d8611454565b610a888560405180606001604052806028815260200161460f60289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610a3e611454565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461272e9092919063ffffffff16565b61145c565b600190509392505050565b610aa0611454565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b269061385d565b60405180910390fd5b610b4f610b3a611044565b610b42611044565b610b4a61072c565b61145c565b60005b84849050811015610bda57610bc633868684818110610b7457610b7361396e565b5b9050602002016020810190610b899190613389565b610b91610be1565b600a610b9d9190613ad0565b868686818110610bb057610baf61396e565b5b90506020020135610bc19190613b1b565b6109bf565b508080610bd290613b75565b915050610b52565b5050505050565b60006012905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b600b60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610c71611454565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf79061385d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000610dcb611454565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e519061385d565b60405180910390fd5b6000600b60006101000a81548160ff0219169083151502179055506001905090565b610e84611454565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0a9061385d565b60405180910390fd5b80600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b610f76611454565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611005576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ffc9061385d565b60405180910390fd5b6001600b60016101000a81548160ff0219169083151502179055506001600b60026101000a81548160ff02191690831515021790555043601e81905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461107d906137df565b80601f01602080910402602001604051908101604052809291908181526020018280546110a9906137df565b80156110f65780601f106110cb576101008083540402835291602001916110f6565b820191906000526020600020905b8154815290600101906020018083116110d957829003601f168201915b5050505050905090565b611108611454565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611197576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118e9061385d565b60405180910390fd5b80600b60036101000a81548160ff02191690831515021790555050565b600b60039054906101000a900460ff1681565b60006111db6111d4611454565b8484611627565b6001905092915050565b6111ed611454565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461127c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112739061385d565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60216020528060005260406000206000915054906101000a900460ff1681565b600f60009054906101000a900460ff1681565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600080828461140591906138ac565b90508381101561144a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144190613c0a565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156114cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c390613c9c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561153c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153390613d2e565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161161a919061343f565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611697576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168e90613dc0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611707576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116fe90613e52565b60405180910390fd5b600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156117ab5750600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b6117ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e190613ee4565b60405180910390fd5b6000811415611804576117ff83836000612792565b612729565b600b60009054906101000a900460ff1615611ec757611821611044565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561188f575061185f611044565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156118c85750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611902575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561191b5750600560149054906101000a900460ff16155b15611ec657600b60019054906101000a900460ff16611a1557601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806119d55750601f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b611a14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0b90613f50565b60405180910390fd5b5b600f60009054906101000a900460ff1615611bdd57611a32611044565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015611ab957507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611b1157507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15611bdc5743600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410611b97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8e90614008565b60405180910390fd5b43600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015611c805750602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611d2757600854811115611cca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc19061409a565b60405180910390fd5b600a54611cd683610c21565b82611ce191906138ac565b1115611d22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1990614106565b60405180910390fd5b611ec5565b602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015611dca5750602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611e1957600854811115611e14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0b90614198565b60405180910390fd5b611ec4565b602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611ec357600a54611e7683610c21565b82611e8191906138ac565b1115611ec2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb990614106565b60405180910390fd5b5b5b5b5b5b6001601e54611ed691906138ac565b4311158015611f3157507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611f7d5750737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15611fdb576001600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16149050801580156120485750600b60039054906101000a900460ff165b15612172576000600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054141580156120e9575042610e10600d60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120e691906138ac565b10155b1561213157601854601681905550601954601581905550601a5460178190555060175460165460155461211c91906138ac565b61212691906138ac565b60148190555061216d565b60006016819055506002601581905550600360178190555060175460165460155461215c91906138ac565b61216691906138ac565b6014819055505b612250565b6000600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414156121ff5742600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600b60039054906101000a900460ff1661224f5760006016819055506005601581905550600660178190555060175460165460155461223e91906138ac565b61224891906138ac565b6014819055505b5b600061225b30610c21565b9050600060095482101590508080156122805750600b60029054906101000a900460ff165b80156122995750600560149054906101000a900460ff16155b80156122ef5750602160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156123455750601f60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561239b5750601f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156123df576001600560146101000a81548160ff0219169083151502179055506123c3612a27565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601f60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806124955750601f60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561249f57600090505b6000811561271857602160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561250257506000601454115b156125cf5761252f606461252160145489612d0e90919063ffffffff16565b612d8990919063ffffffff16565b9050601454601654826125429190613b1b565b61254c91906141e7565b601c600082825461255d91906138ac565b92505081905550601454601754826125759190613b1b565b61257f91906141e7565b601d600082825461259091906138ac565b92505081905550601454601554826125a89190613b1b565b6125b291906141e7565b601b60008282546125c391906138ac565b925050819055506126f4565b602160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561262a57506000601054115b156126f357612657606461264960105489612d0e90919063ffffffff16565b612d8990919063ffffffff16565b90506010546012548261266a9190613b1b565b61267491906141e7565b601c600082825461268591906138ac565b925050819055506010546013548261269d9190613b1b565b6126a791906141e7565b601d60008282546126b891906138ac565b92505081905550601054601154826126d09190613b1b565b6126da91906141e7565b601b60008282546126eb91906138ac565b925050819055505b5b600081111561270957612708883083612792565b5b80866127159190614218565b95505b612723888888612792565b50505050505b505050565b6000838311158290612776576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161276d9190613253565b60405180910390fd5b50600083856127859190614218565b9050809150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612802576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127f990613dc0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612872576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161286990613e52565b60405180910390fd5b61287d838383612dd3565b6128e8816040518060600160405280602681526020016145e9602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461272e9092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061297b816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546113f690919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612a1a919061343f565b60405180910390a3505050565b6000612a3230610c21565b90506000601d54601b54601c54612a4991906138ac565b612a5391906138ac565b9050600080831480612a655750600082145b15612a7257505050612d0c565b6014600954612a819190613b1b565b831115612a9a576014600954612a979190613b1b565b92505b6000600283601c5486612aad9190613b1b565b612ab791906141e7565b612ac191906141e7565b90506000612ad88286612dd890919063ffffffff16565b90506000479050612ae882612e22565b6000612afd8247612dd890919063ffffffff16565b90506000612b2887612b1a601b5485612d0e90919063ffffffff16565b612d8990919063ffffffff16565b90506000612b5388612b45601d5486612d0e90919063ffffffff16565b612d8990919063ffffffff16565b90506000818385612b649190614218565b612b6e9190614218565b90506000601c819055506000601b819055506000601d81905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051612bce9061427d565b60006040518083038185875af1925050503d8060008114612c0b576040519150601f19603f3d011682016040523d82523d6000602084013e612c10565b606091505b505080985050600087118015612c265750600081115b15612c7357612c35878261306e565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618682601c54604051612c6a93929190614292565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051612cb99061427d565b60006040518083038185875af1925050503d8060008114612cf6576040519150601f19603f3d011682016040523d82523d6000602084013e612cfb565b606091505b505080985050505050505050505050505b565b600080831415612d215760009050612d83565b60008284612d2f9190613b1b565b9050828482612d3e91906141e7565b14612d7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d759061433b565b60405180910390fd5b809150505b92915050565b6000612dcb83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613157565b905092915050565b505050565b6000612e1a83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061272e565b905092915050565b6000600267ffffffffffffffff811115612e3f57612e3e61435b565b5b604051908082528060200260200182016040528015612e6d5781602001602082028036833780820191505090505b5090503081600081518110612e8557612e8461396e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015612f2557600080fd5b505afa158015612f39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f5d919061439f565b81600181518110612f7157612f7061396e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612fd6307f00000000000000000000000000000000000000000000000000000000000000008461145c565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016130389594939291906144c5565b600060405180830381600087803b15801561305257600080fd5b505af1158015613066573d6000803e3d6000fd5b505050505050565b613099307f00000000000000000000000000000000000000000000000000000000000000008461145c565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008030426040518863ffffffff1660e01b81526004016130fe9695949392919061451f565b6060604051808303818588803b15801561311757600080fd5b505af115801561312b573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906131509190614595565b5050505050565b6000808311829061319e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131959190613253565b60405180910390fd5b50600083856131ad91906141e7565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156131f45780820151818401526020810190506131d9565b83811115613203576000848401525b50505050565b6000601f19601f8301169050919050565b6000613225826131ba565b61322f81856131c5565b935061323f8185602086016131d6565b61324881613209565b840191505092915050565b6000602082019050818103600083015261326d818461321a565b905092915050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006132aa8261327f565b9050919050565b6132ba8161329f565b81146132c557600080fd5b50565b6000813590506132d7816132b1565b92915050565b6000819050919050565b6132f0816132dd565b81146132fb57600080fd5b50565b60008135905061330d816132e7565b92915050565b6000806040838503121561332a57613329613275565b5b6000613338858286016132c8565b9250506020613349858286016132fe565b9150509250929050565b60008115159050919050565b61336881613353565b82525050565b6000602082019050613383600083018461335f565b92915050565b60006020828403121561339f5761339e613275565b5b60006133ad848285016132c8565b91505092915050565b6000819050919050565b60006133db6133d66133d18461327f565b6133b6565b61327f565b9050919050565b60006133ed826133c0565b9050919050565b60006133ff826133e2565b9050919050565b61340f816133f4565b82525050565b600060208201905061342a6000830184613406565b92915050565b613439816132dd565b82525050565b60006020820190506134546000830184613430565b92915050565b60008060008060008060c0878903121561347757613476613275565b5b600061348589828a016132fe565b965050602061349689828a016132fe565b95505060406134a789828a016132fe565b94505060606134b889828a016132fe565b93505060806134c989828a016132fe565b92505060a06134da89828a016132fe565b9150509295509295509295565b600080600060608486031215613500576134ff613275565b5b600061350e868287016132c8565b935050602061351f868287016132c8565b9250506040613530868287016132fe565b9150509250925092565b600080fd5b600080fd5b600080fd5b60008083601f84011261355f5761355e61353a565b5b8235905067ffffffffffffffff81111561357c5761357b61353f565b5b60208301915083602082028301111561359857613597613544565b5b9250929050565b60008083601f8401126135b5576135b461353a565b5b8235905067ffffffffffffffff8111156135d2576135d161353f565b5b6020830191508360208202830111156135ee576135ed613544565b5b9250929050565b6000806000806040858703121561360f5761360e613275565b5b600085013567ffffffffffffffff81111561362d5761362c61327a565b5b61363987828801613549565b9450945050602085013567ffffffffffffffff81111561365c5761365b61327a565b5b6136688782880161359f565b925092505092959194509250565b600060ff82169050919050565b61368c81613676565b82525050565b60006020820190506136a76000830184613683565b92915050565b6136b68161329f565b82525050565b60006020820190506136d160008301846136ad565b92915050565b6136e081613353565b81146136eb57600080fd5b50565b6000813590506136fd816136d7565b92915050565b6000806040838503121561371a57613719613275565b5b6000613728858286016132c8565b9250506020613739858286016136ee565b9150509250929050565b60006020828403121561375957613758613275565b5b6000613767848285016136ee565b91505092915050565b6000806040838503121561378757613786613275565b5b6000613795858286016132c8565b92505060206137a6858286016132c8565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806137f757607f821691505b6020821081141561380b5761380a6137b0565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006138476020836131c5565b915061385282613811565b602082019050919050565b600060208201905081810360008301526138768161383a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006138b7826132dd565b91506138c2836132dd565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156138f7576138f661387d565b5b828201905092915050565b7f4d757374206b656570206665657320617420323525206f72206c657373000000600082015250565b6000613938601d836131c5565b915061394382613902565b602082019050919050565b600060208201905081810360008301526139678161392b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008160011c9050919050565b6000808291508390505b60018511156139f4578086048111156139d0576139cf61387d565b5b60018516156139df5780820291505b80810290506139ed8561399d565b94506139b4565b94509492505050565b600082613a0d5760019050613ac9565b81613a1b5760009050613ac9565b8160018114613a315760028114613a3b57613a6a565b6001915050613ac9565b60ff841115613a4d57613a4c61387d565b5b8360020a915084821115613a6457613a6361387d565b5b50613ac9565b5060208310610133831016604e8410600b8410161715613a9f5782820a905083811115613a9a57613a9961387d565b5b613ac9565b613aac84848460016139aa565b92509050818404811115613ac357613ac261387d565b5b81810290505b9392505050565b6000613adb826132dd565b9150613ae683613676565b9250613b137fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846139fd565b905092915050565b6000613b26826132dd565b9150613b31836132dd565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613b6a57613b6961387d565b5b828202905092915050565b6000613b80826132dd565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613bb357613bb261387d565b5b600182019050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000613bf4601b836131c5565b9150613bff82613bbe565b602082019050919050565b60006020820190508181036000830152613c2381613be7565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613c866024836131c5565b9150613c9182613c2a565b604082019050919050565b60006020820190508181036000830152613cb581613c79565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613d186022836131c5565b9150613d2382613cbc565b604082019050919050565b60006020820190508181036000830152613d4781613d0b565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613daa6025836131c5565b9150613db582613d4e565b604082019050919050565b60006020820190508181036000830152613dd981613d9d565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613e3c6023836131c5565b9150613e4782613de0565b604082019050919050565b60006020820190508181036000830152613e6b81613e2f565b9050919050565b7f596f752068617665206265656e20626c61636b6c69737465642066726f6d207460008201527f72616e73666572696e6720746f6b656e73000000000000000000000000000000602082015250565b6000613ece6031836131c5565b9150613ed982613e72565b604082019050919050565b60006020820190508181036000830152613efd81613ec1565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000613f3a6016836131c5565b9150613f4582613f04565b602082019050919050565b60006020820190508181036000830152613f6981613f2d565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b6000613ff26049836131c5565b9150613ffd82613f70565b606082019050919050565b6000602082019050818103600083015261402181613fe5565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b60006140846035836131c5565b915061408f82614028565b604082019050919050565b600060208201905081810360008301526140b381614077565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006140f06013836131c5565b91506140fb826140ba565b602082019050919050565b6000602082019050818103600083015261411f816140e3565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b60006141826036836131c5565b915061418d82614126565b604082019050919050565b600060208201905081810360008301526141b181614175565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006141f2826132dd565b91506141fd836132dd565b92508261420d5761420c6141b8565b5b828204905092915050565b6000614223826132dd565b915061422e836132dd565b9250828210156142415761424061387d565b5b828203905092915050565b600081905092915050565b50565b600061426760008361424c565b915061427282614257565b600082019050919050565b60006142888261425a565b9150819050919050565b60006060820190506142a76000830186613430565b6142b46020830185613430565b6142c16040830184613430565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b60006143256021836131c5565b9150614330826142c9565b604082019050919050565b6000602082019050818103600083015261435481614318565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600081519050614399816132b1565b92915050565b6000602082840312156143b5576143b4613275565b5b60006143c38482850161438a565b91505092915050565b6000819050919050565b60006143f16143ec6143e7846143cc565b6133b6565b6132dd565b9050919050565b614401816143d6565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61443c8161329f565b82525050565b600061444e8383614433565b60208301905092915050565b6000602082019050919050565b600061447282614407565b61447c8185614412565b935061448783614423565b8060005b838110156144b857815161449f8882614442565b97506144aa8361445a565b92505060018101905061448b565b5085935050505092915050565b600060a0820190506144da6000830188613430565b6144e760208301876143f8565b81810360408301526144f98186614467565b905061450860608301856136ad565b6145156080830184613430565b9695505050505050565b600060c08201905061453460008301896136ad565b6145416020830188613430565b61454e60408301876143f8565b61455b60608301866143f8565b61456860808301856136ad565b61457560a0830184613430565b979650505050505050565b60008151905061458f816132e7565b92915050565b6000806000606084860312156145ae576145ad613275565b5b60006145bc86828701614580565b93505060206145cd86828701614580565b92505060406145de86828701614580565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a2646970667358221220d60f6c416cbd6e29e803374601679aaedc0c9f8ac2a48ba920b152eaa3ea620264736f6c63430008090033

Deployed Bytecode

0x6080604052600436106101855760003560e01c8063715018a6116100d1578063a26577781161008a578063aacebbe311610064578063aacebbe31461056b578063b62496f514610594578063c876d0b9146105d1578063dd62ed3e146105fc5761018c565b8063a2657778146104da578063a4d15b6414610503578063a9059cbb1461052e5761018c565b8063715018a614610402578063751039fc1461041957806384a7bf83146104445780638a8c523c1461046d5780638da5cb5b1461048457806395d89b41146104af5761018c565b806322d3e2aa1161013e578063313ce56711610118578063313ce5671461034457806349bd5a5e1461036f5780636ddd17131461039a57806370a08231146103c55761018c565b806322d3e2aa146102b557806323b872dd146102de5780632d08d4081461031b5761018c565b806306fdde0314610191578063095ea7b3146101bc57806310d5de53146101f95780631694505e1461023657806318160ddd146102615780631816467f1461028c5761018c565b3661018c57005b600080fd5b34801561019d57600080fd5b506101a6610639565b6040516101b39190613253565b60405180910390f35b3480156101c857600080fd5b506101e360048036038101906101de9190613313565b6106cb565b6040516101f0919061336e565b60405180910390f35b34801561020557600080fd5b50610220600480360381019061021b9190613389565b6106e9565b60405161022d919061336e565b60405180910390f35b34801561024257600080fd5b5061024b610708565b6040516102589190613415565b60405180910390f35b34801561026d57600080fd5b5061027661072c565b604051610283919061343f565b60405180910390f35b34801561029857600080fd5b506102b360048036038101906102ae9190613389565b610736565b005b3480156102c157600080fd5b506102dc60048036038101906102d7919061345a565b61088d565b005b3480156102ea57600080fd5b50610305600480360381019061030091906134e7565b6109bf565b604051610312919061336e565b60405180910390f35b34801561032757600080fd5b50610342600480360381019061033d91906135f5565b610a98565b005b34801561035057600080fd5b50610359610be1565b6040516103669190613692565b60405180910390f35b34801561037b57600080fd5b50610384610bea565b60405161039191906136bc565b60405180910390f35b3480156103a657600080fd5b506103af610c0e565b6040516103bc919061336e565b60405180910390f35b3480156103d157600080fd5b506103ec60048036038101906103e79190613389565b610c21565b6040516103f9919061343f565b60405180910390f35b34801561040e57600080fd5b50610417610c69565b005b34801561042557600080fd5b5061042e610dc1565b60405161043b919061336e565b60405180910390f35b34801561045057600080fd5b5061046b60048036038101906104669190613703565b610e7c565b005b34801561047957600080fd5b50610482610f6e565b005b34801561049057600080fd5b50610499611044565b6040516104a691906136bc565b60405180910390f35b3480156104bb57600080fd5b506104c461106e565b6040516104d19190613253565b60405180910390f35b3480156104e657600080fd5b5061050160048036038101906104fc9190613743565b611100565b005b34801561050f57600080fd5b506105186111b4565b604051610525919061336e565b60405180910390f35b34801561053a57600080fd5b5061055560048036038101906105509190613313565b6111c7565b604051610562919061336e565b60405180910390f35b34801561057757600080fd5b50610592600480360381019061058d9190613389565b6111e5565b005b3480156105a057600080fd5b506105bb60048036038101906105b69190613389565b61133c565b6040516105c8919061336e565b60405180910390f35b3480156105dd57600080fd5b506105e661135c565b6040516105f3919061336e565b60405180910390f35b34801561060857600080fd5b50610623600480360381019061061e9190613770565b61136f565b604051610630919061343f565b60405180910390f35b606060038054610648906137df565b80601f0160208091040260200160405190810160405280929190818152602001828054610674906137df565b80156106c15780601f10610696576101008083540402835291602001916106c1565b820191906000526020600020905b8154815290600101906020018083116106a457829003601f168201915b5050505050905090565b60006106df6106d8611454565b848461145c565b6001905092915050565b602080528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b61073e611454565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146107cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107c49061385d565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610895611454565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610924576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161091b9061385d565b60405180910390fd5b856015819055508460168190555083601781905550826018819055508160198190555080601a8190555060175460165460155461096191906138ac565b61096b91906138ac565b601481905550601960145411156109b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109ae9061394e565b60405180910390fd5b505050505050565b60006109cc848484611627565b610a8d846109d8611454565b610a888560405180606001604052806028815260200161460f60289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610a3e611454565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461272e9092919063ffffffff16565b61145c565b600190509392505050565b610aa0611454565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b269061385d565b60405180910390fd5b610b4f610b3a611044565b610b42611044565b610b4a61072c565b61145c565b60005b84849050811015610bda57610bc633868684818110610b7457610b7361396e565b5b9050602002016020810190610b899190613389565b610b91610be1565b600a610b9d9190613ad0565b868686818110610bb057610baf61396e565b5b90506020020135610bc19190613b1b565b6109bf565b508080610bd290613b75565b915050610b52565b5050505050565b60006012905090565b7f000000000000000000000000e373b53af49514532247d82448e6becc2e96cb3681565b600b60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610c71611454565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf79061385d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000610dcb611454565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e519061385d565b60405180910390fd5b6000600b60006101000a81548160ff0219169083151502179055506001905090565b610e84611454565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0a9061385d565b60405180910390fd5b80600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b610f76611454565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611005576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ffc9061385d565b60405180910390fd5b6001600b60016101000a81548160ff0219169083151502179055506001600b60026101000a81548160ff02191690831515021790555043601e81905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461107d906137df565b80601f01602080910402602001604051908101604052809291908181526020018280546110a9906137df565b80156110f65780601f106110cb576101008083540402835291602001916110f6565b820191906000526020600020905b8154815290600101906020018083116110d957829003601f168201915b5050505050905090565b611108611454565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611197576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118e9061385d565b60405180910390fd5b80600b60036101000a81548160ff02191690831515021790555050565b600b60039054906101000a900460ff1681565b60006111db6111d4611454565b8484611627565b6001905092915050565b6111ed611454565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461127c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112739061385d565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60216020528060005260406000206000915054906101000a900460ff1681565b600f60009054906101000a900460ff1681565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600080828461140591906138ac565b90508381101561144a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144190613c0a565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156114cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c390613c9c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561153c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153390613d2e565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161161a919061343f565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611697576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168e90613dc0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611707576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116fe90613e52565b60405180910390fd5b600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156117ab5750600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b6117ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e190613ee4565b60405180910390fd5b6000811415611804576117ff83836000612792565b612729565b600b60009054906101000a900460ff1615611ec757611821611044565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561188f575061185f611044565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156118c85750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611902575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561191b5750600560149054906101000a900460ff16155b15611ec657600b60019054906101000a900460ff16611a1557601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806119d55750601f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b611a14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0b90613f50565b60405180910390fd5b5b600f60009054906101000a900460ff1615611bdd57611a32611044565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015611ab957507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611b1157507f000000000000000000000000e373b53af49514532247d82448e6becc2e96cb3673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15611bdc5743600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410611b97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8e90614008565b60405180910390fd5b43600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015611c805750602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611d2757600854811115611cca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc19061409a565b60405180910390fd5b600a54611cd683610c21565b82611ce191906138ac565b1115611d22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1990614106565b60405180910390fd5b611ec5565b602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015611dca5750602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611e1957600854811115611e14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0b90614198565b60405180910390fd5b611ec4565b602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611ec357600a54611e7683610c21565b82611e8191906138ac565b1115611ec2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb990614106565b60405180910390fd5b5b5b5b5b5b6001601e54611ed691906138ac565b4311158015611f3157507f000000000000000000000000e373b53af49514532247d82448e6becc2e96cb3673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611f7d5750737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15611fdb576001600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b60007f000000000000000000000000e373b53af49514532247d82448e6becc2e96cb3673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16149050801580156120485750600b60039054906101000a900460ff165b15612172576000600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054141580156120e9575042610e10600d60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120e691906138ac565b10155b1561213157601854601681905550601954601581905550601a5460178190555060175460165460155461211c91906138ac565b61212691906138ac565b60148190555061216d565b60006016819055506002601581905550600360178190555060175460165460155461215c91906138ac565b61216691906138ac565b6014819055505b612250565b6000600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414156121ff5742600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600b60039054906101000a900460ff1661224f5760006016819055506005601581905550600660178190555060175460165460155461223e91906138ac565b61224891906138ac565b6014819055505b5b600061225b30610c21565b9050600060095482101590508080156122805750600b60029054906101000a900460ff165b80156122995750600560149054906101000a900460ff16155b80156122ef5750602160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156123455750601f60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561239b5750601f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156123df576001600560146101000a81548160ff0219169083151502179055506123c3612a27565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601f60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806124955750601f60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561249f57600090505b6000811561271857602160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561250257506000601454115b156125cf5761252f606461252160145489612d0e90919063ffffffff16565b612d8990919063ffffffff16565b9050601454601654826125429190613b1b565b61254c91906141e7565b601c600082825461255d91906138ac565b92505081905550601454601754826125759190613b1b565b61257f91906141e7565b601d600082825461259091906138ac565b92505081905550601454601554826125a89190613b1b565b6125b291906141e7565b601b60008282546125c391906138ac565b925050819055506126f4565b602160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561262a57506000601054115b156126f357612657606461264960105489612d0e90919063ffffffff16565b612d8990919063ffffffff16565b90506010546012548261266a9190613b1b565b61267491906141e7565b601c600082825461268591906138ac565b925050819055506010546013548261269d9190613b1b565b6126a791906141e7565b601d60008282546126b891906138ac565b92505081905550601054601154826126d09190613b1b565b6126da91906141e7565b601b60008282546126eb91906138ac565b925050819055505b5b600081111561270957612708883083612792565b5b80866127159190614218565b95505b612723888888612792565b50505050505b505050565b6000838311158290612776576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161276d9190613253565b60405180910390fd5b50600083856127859190614218565b9050809150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612802576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127f990613dc0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612872576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161286990613e52565b60405180910390fd5b61287d838383612dd3565b6128e8816040518060600160405280602681526020016145e9602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461272e9092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061297b816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546113f690919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612a1a919061343f565b60405180910390a3505050565b6000612a3230610c21565b90506000601d54601b54601c54612a4991906138ac565b612a5391906138ac565b9050600080831480612a655750600082145b15612a7257505050612d0c565b6014600954612a819190613b1b565b831115612a9a576014600954612a979190613b1b565b92505b6000600283601c5486612aad9190613b1b565b612ab791906141e7565b612ac191906141e7565b90506000612ad88286612dd890919063ffffffff16565b90506000479050612ae882612e22565b6000612afd8247612dd890919063ffffffff16565b90506000612b2887612b1a601b5485612d0e90919063ffffffff16565b612d8990919063ffffffff16565b90506000612b5388612b45601d5486612d0e90919063ffffffff16565b612d8990919063ffffffff16565b90506000818385612b649190614218565b612b6e9190614218565b90506000601c819055506000601b819055506000601d81905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051612bce9061427d565b60006040518083038185875af1925050503d8060008114612c0b576040519150601f19603f3d011682016040523d82523d6000602084013e612c10565b606091505b505080985050600087118015612c265750600081115b15612c7357612c35878261306e565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618682601c54604051612c6a93929190614292565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051612cb99061427d565b60006040518083038185875af1925050503d8060008114612cf6576040519150601f19603f3d011682016040523d82523d6000602084013e612cfb565b606091505b505080985050505050505050505050505b565b600080831415612d215760009050612d83565b60008284612d2f9190613b1b565b9050828482612d3e91906141e7565b14612d7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d759061433b565b60405180910390fd5b809150505b92915050565b6000612dcb83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613157565b905092915050565b505050565b6000612e1a83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061272e565b905092915050565b6000600267ffffffffffffffff811115612e3f57612e3e61435b565b5b604051908082528060200260200182016040528015612e6d5781602001602082028036833780820191505090505b5090503081600081518110612e8557612e8461396e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015612f2557600080fd5b505afa158015612f39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f5d919061439f565b81600181518110612f7157612f7061396e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612fd6307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8461145c565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016130389594939291906144c5565b600060405180830381600087803b15801561305257600080fd5b505af1158015613066573d6000803e3d6000fd5b505050505050565b613099307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8461145c565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008030426040518863ffffffff1660e01b81526004016130fe9695949392919061451f565b6060604051808303818588803b15801561311757600080fd5b505af115801561312b573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906131509190614595565b5050505050565b6000808311829061319e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131959190613253565b60405180910390fd5b50600083856131ad91906141e7565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156131f45780820151818401526020810190506131d9565b83811115613203576000848401525b50505050565b6000601f19601f8301169050919050565b6000613225826131ba565b61322f81856131c5565b935061323f8185602086016131d6565b61324881613209565b840191505092915050565b6000602082019050818103600083015261326d818461321a565b905092915050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006132aa8261327f565b9050919050565b6132ba8161329f565b81146132c557600080fd5b50565b6000813590506132d7816132b1565b92915050565b6000819050919050565b6132f0816132dd565b81146132fb57600080fd5b50565b60008135905061330d816132e7565b92915050565b6000806040838503121561332a57613329613275565b5b6000613338858286016132c8565b9250506020613349858286016132fe565b9150509250929050565b60008115159050919050565b61336881613353565b82525050565b6000602082019050613383600083018461335f565b92915050565b60006020828403121561339f5761339e613275565b5b60006133ad848285016132c8565b91505092915050565b6000819050919050565b60006133db6133d66133d18461327f565b6133b6565b61327f565b9050919050565b60006133ed826133c0565b9050919050565b60006133ff826133e2565b9050919050565b61340f816133f4565b82525050565b600060208201905061342a6000830184613406565b92915050565b613439816132dd565b82525050565b60006020820190506134546000830184613430565b92915050565b60008060008060008060c0878903121561347757613476613275565b5b600061348589828a016132fe565b965050602061349689828a016132fe565b95505060406134a789828a016132fe565b94505060606134b889828a016132fe565b93505060806134c989828a016132fe565b92505060a06134da89828a016132fe565b9150509295509295509295565b600080600060608486031215613500576134ff613275565b5b600061350e868287016132c8565b935050602061351f868287016132c8565b9250506040613530868287016132fe565b9150509250925092565b600080fd5b600080fd5b600080fd5b60008083601f84011261355f5761355e61353a565b5b8235905067ffffffffffffffff81111561357c5761357b61353f565b5b60208301915083602082028301111561359857613597613544565b5b9250929050565b60008083601f8401126135b5576135b461353a565b5b8235905067ffffffffffffffff8111156135d2576135d161353f565b5b6020830191508360208202830111156135ee576135ed613544565b5b9250929050565b6000806000806040858703121561360f5761360e613275565b5b600085013567ffffffffffffffff81111561362d5761362c61327a565b5b61363987828801613549565b9450945050602085013567ffffffffffffffff81111561365c5761365b61327a565b5b6136688782880161359f565b925092505092959194509250565b600060ff82169050919050565b61368c81613676565b82525050565b60006020820190506136a76000830184613683565b92915050565b6136b68161329f565b82525050565b60006020820190506136d160008301846136ad565b92915050565b6136e081613353565b81146136eb57600080fd5b50565b6000813590506136fd816136d7565b92915050565b6000806040838503121561371a57613719613275565b5b6000613728858286016132c8565b9250506020613739858286016136ee565b9150509250929050565b60006020828403121561375957613758613275565b5b6000613767848285016136ee565b91505092915050565b6000806040838503121561378757613786613275565b5b6000613795858286016132c8565b92505060206137a6858286016132c8565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806137f757607f821691505b6020821081141561380b5761380a6137b0565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006138476020836131c5565b915061385282613811565b602082019050919050565b600060208201905081810360008301526138768161383a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006138b7826132dd565b91506138c2836132dd565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156138f7576138f661387d565b5b828201905092915050565b7f4d757374206b656570206665657320617420323525206f72206c657373000000600082015250565b6000613938601d836131c5565b915061394382613902565b602082019050919050565b600060208201905081810360008301526139678161392b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008160011c9050919050565b6000808291508390505b60018511156139f4578086048111156139d0576139cf61387d565b5b60018516156139df5780820291505b80810290506139ed8561399d565b94506139b4565b94509492505050565b600082613a0d5760019050613ac9565b81613a1b5760009050613ac9565b8160018114613a315760028114613a3b57613a6a565b6001915050613ac9565b60ff841115613a4d57613a4c61387d565b5b8360020a915084821115613a6457613a6361387d565b5b50613ac9565b5060208310610133831016604e8410600b8410161715613a9f5782820a905083811115613a9a57613a9961387d565b5b613ac9565b613aac84848460016139aa565b92509050818404811115613ac357613ac261387d565b5b81810290505b9392505050565b6000613adb826132dd565b9150613ae683613676565b9250613b137fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846139fd565b905092915050565b6000613b26826132dd565b9150613b31836132dd565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613b6a57613b6961387d565b5b828202905092915050565b6000613b80826132dd565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613bb357613bb261387d565b5b600182019050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000613bf4601b836131c5565b9150613bff82613bbe565b602082019050919050565b60006020820190508181036000830152613c2381613be7565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613c866024836131c5565b9150613c9182613c2a565b604082019050919050565b60006020820190508181036000830152613cb581613c79565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613d186022836131c5565b9150613d2382613cbc565b604082019050919050565b60006020820190508181036000830152613d4781613d0b565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613daa6025836131c5565b9150613db582613d4e565b604082019050919050565b60006020820190508181036000830152613dd981613d9d565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613e3c6023836131c5565b9150613e4782613de0565b604082019050919050565b60006020820190508181036000830152613e6b81613e2f565b9050919050565b7f596f752068617665206265656e20626c61636b6c69737465642066726f6d207460008201527f72616e73666572696e6720746f6b656e73000000000000000000000000000000602082015250565b6000613ece6031836131c5565b9150613ed982613e72565b604082019050919050565b60006020820190508181036000830152613efd81613ec1565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000613f3a6016836131c5565b9150613f4582613f04565b602082019050919050565b60006020820190508181036000830152613f6981613f2d565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b6000613ff26049836131c5565b9150613ffd82613f70565b606082019050919050565b6000602082019050818103600083015261402181613fe5565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b60006140846035836131c5565b915061408f82614028565b604082019050919050565b600060208201905081810360008301526140b381614077565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006140f06013836131c5565b91506140fb826140ba565b602082019050919050565b6000602082019050818103600083015261411f816140e3565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b60006141826036836131c5565b915061418d82614126565b604082019050919050565b600060208201905081810360008301526141b181614175565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006141f2826132dd565b91506141fd836132dd565b92508261420d5761420c6141b8565b5b828204905092915050565b6000614223826132dd565b915061422e836132dd565b9250828210156142415761424061387d565b5b828203905092915050565b600081905092915050565b50565b600061426760008361424c565b915061427282614257565b600082019050919050565b60006142888261425a565b9150819050919050565b60006060820190506142a76000830186613430565b6142b46020830185613430565b6142c16040830184613430565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b60006143256021836131c5565b9150614330826142c9565b604082019050919050565b6000602082019050818103600083015261435481614318565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600081519050614399816132b1565b92915050565b6000602082840312156143b5576143b4613275565b5b60006143c38482850161438a565b91505092915050565b6000819050919050565b60006143f16143ec6143e7846143cc565b6133b6565b6132dd565b9050919050565b614401816143d6565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61443c8161329f565b82525050565b600061444e8383614433565b60208301905092915050565b6000602082019050919050565b600061447282614407565b61447c8185614412565b935061448783614423565b8060005b838110156144b857815161449f8882614442565b97506144aa8361445a565b92505060018101905061448b565b5085935050505092915050565b600060a0820190506144da6000830188613430565b6144e760208301876143f8565b81810360408301526144f98186614467565b905061450860608301856136ad565b6145156080830184613430565b9695505050505050565b600060c08201905061453460008301896136ad565b6145416020830188613430565b61454e60408301876143f8565b61455b60608301866143f8565b61456860808301856136ad565b61457560a0830184613430565b979650505050505050565b60008151905061458f816132e7565b92915050565b6000806000606084860312156145ae576145ad613275565b5b60006145bc86828701614580565b93505060206145cd86828701614580565b92505060406145de86828701614580565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a2646970667358221220d60f6c416cbd6e29e803374601679aaedc0c9f8ac2a48ba920b152eaa3ea620264736f6c63430008090033

Deployed Bytecode Sourcemap

27629:16306:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7525:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9699:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29351:64;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27706:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8648:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35088:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34040:624;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10351:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43604:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8489:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27764:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28117:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8820:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20626:148;;;;;;;;;;;;;:::i;:::-;;33062:120;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33648:128;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32861:148;;;;;;;;;;;;;:::i;:::-;;19982:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7745:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33191:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28155:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9161:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34871:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29574:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28547:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9400:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7525:100;7579:13;7612:5;7605:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7525:100;:::o;9699:169::-;9782:4;9799:39;9808:12;:10;:12::i;:::-;9822:7;9831:6;9799:8;:39::i;:::-;9856:4;9849:11;;9699:169;;;;:::o;29351:64::-;;;;;;;;;;;;;;;;;;;;;;:::o;27706:51::-;;;:::o;8648:108::-;8709:7;8736:12;;8729:19;;8648:108;:::o;35088:157::-;20205:12;:10;:12::i;:::-;20195:22;;:6;;;;;;;;;;;:22;;;20187:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35195:9:::1;;;;;;;;;;;35167:38;;35184:9;35167:38;;;;;;;;;;;;35228:9;35216;;:21;;;;;;;;;;;;;;;;;;35088:157:::0;:::o;34040:624::-;20205:12;:10;:12::i;:::-;20195:22;;:6;;;;;;;;;;;:22;;;20187:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34266:13:::1;34247:16;:32;;;;34309:13;34290:16;:32;;;;34346:7;34333:10;:20;;;;34388:22;34364:21;:46;;;;34445:22;34421:21;:46;;;;34493:16;34475:15;:34;;;;34574:10;;34555:16;;34536;;:35;;;;:::i;:::-;:48;;;;:::i;:::-;34520:13;:64;;;;34620:2;34603:13;;:19;;34595:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;34040:624:::0;;;;;;:::o;10351:355::-;10491:4;10508:36;10518:6;10526:9;10537:6;10508:9;:36::i;:::-;10555:121;10564:6;10572:12;:10;:12::i;:::-;10586:89;10624:6;10586:89;;;;;;;;;;;;;;;;;:11;:19;10598:6;10586:19;;;;;;;;;;;;;;;:33;10606:12;:10;:12::i;:::-;10586:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;10555:8;:121::i;:::-;10694:4;10687:11;;10351:355;;;;;:::o;43604:328::-;20205:12;:10;:12::i;:::-;20195:22;;:6;;;;;;;;;;;:22;;;20187:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;43729:41:::1;43738:7;:5;:7::i;:::-;43747;:5;:7::i;:::-;43756:13;:11;:13::i;:::-;43729:8;:41::i;:::-;43786:9;43781:144;43805:10;;:17;;43801:1;:21;43781:144;;;43844:69;43857:10;43869;;43880:1;43869:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;43902:10;:8;:10::i;:::-;43896:2;:16;;;;:::i;:::-;43884:6;;43891:1;43884:9;;;;;;;:::i;:::-;;;;;;;;:28;;;;:::i;:::-;43844:12;:69::i;:::-;;43824:3;;;;;:::i;:::-;;;;43781:144;;;;43604:328:::0;;;;:::o;8489:93::-;8547:5;8572:2;8565:9;;8489:93;:::o;27764:38::-;;;:::o;28117:31::-;;;;;;;;;;;;;:::o;8820:127::-;8894:7;8921:9;:18;8931:7;8921:18;;;;;;;;;;;;;;;;8914:25;;8820:127;;;:::o;20626:148::-;20205:12;:10;:12::i;:::-;20195:22;;:6;;;;;;;;;;;:22;;;20187:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20733:1:::1;20696:40;;20717:6;;;;;;;;;;;20696:40;;;;;;;;;;;;20764:1;20747:6;;:19;;;;;;;;;;;;;;;;;;20626:148::o:0;33062:120::-;33114:4;20205:12;:10;:12::i;:::-;20195:22;;:6;;;;;;;;;;;:22;;;20187:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33147:5:::1;33130:14;;:22;;;;;;;;;;;;;;;;;;33170:4;33163:11;;33062:120:::0;:::o;33648:128::-;20205:12;:10;:12::i;:::-;20195:22;;:6;;;;;;;;;;;:22;;;20187:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33755:13:::1;33733:10;:19;33744:7;33733:19;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;33648:128:::0;;:::o;32861:148::-;20205:12;:10;:12::i;:::-;20195:22;;:6;;;;;;;;;;;:22;;;20187:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;32932:4:::1;32916:13;;:20;;;;;;;;;;;;;;;;;;32961:4;32947:11;;:18;;;;;;;;;;;;;;;;;;32989:12;32976:10;:25;;;;32861:148::o:0;19982:79::-;20020:7;20047:6;;;;;;;;;;;20040:13;;19982:79;:::o;7745:104::-;7801:13;7834:7;7827:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7745:104;:::o;33191:102::-;20205:12;:10;:12::i;:::-;20195:22;;:6;;;;;;;;;;;:22;;;20187:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33280:5:::1;33259:18;;:26;;;;;;;;;;;;;;;;;;33191:102:::0;:::o;28155:37::-;;;;;;;;;;;;;:::o;9161:175::-;9247:4;9264:42;9274:12;:10;:12::i;:::-;9288:9;9299:6;9264:9;:42::i;:::-;9324:4;9317:11;;9161:175;;;;:::o;34871:208::-;20205:12;:10;:12::i;:::-;20195:22;;:6;;;;;;;;;;;:22;;;20187:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35008:15:::1;;;;;;;;;;;34965:59;;34988:18;34965:59;;;;;;;;;;;;35053:18;35035:15;;:36;;;;;;;;;;;;;;;;;;34871:208:::0;:::o;29574:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;28547:40::-;;;;;;;;;;;;;:::o;9400:151::-;9489:7;9516:11;:18;9528:5;9516:18;;;;;;;;;;;;;;;:27;9535:7;9516:27;;;;;;;;;;;;;;;;9509:34;;9400:151;;;;:::o;15014:182::-;15072:7;15092:9;15108:1;15104;:5;;;;:::i;:::-;15092:17;;15133:1;15128;:6;;15120:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;15187:1;15180:8;;;15014:182;;;;:::o;216:98::-;269:7;296:10;289:17;;216:98;:::o;13633:381::-;13786:1;13769:19;;:5;:19;;;;13761:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;13867:1;13848:21;;:7;:21;;;;13840:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;13952:6;13922:11;:18;13934:5;13922:18;;;;;;;;;;;;;;;:27;13941:7;13922:27;;;;;;;;;;;;;;;:36;;;;13990:7;13974:32;;13983:5;13974:32;;;13999:6;13974:32;;;;;;:::i;:::-;;;;;;;;13633:381;;;:::o;35305:5579::-;35453:1;35437:18;;:4;:18;;;;35429:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35530:1;35516:16;;:2;:16;;;;35508:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;35592:10;:14;35603:2;35592:14;;;;;;;;;;;;;;;;;;;;;;;;;35591:15;:36;;;;;35611:10;:16;35622:4;35611:16;;;;;;;;;;;;;;;;;;;;;;;;;35610:17;35591:36;35583:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;35706:1;35696:6;:11;35693:92;;;35724:28;35740:4;35746:2;35750:1;35724:15;:28::i;:::-;35767:7;;35693:92;35801:14;;;;;;;;;;;35798:1811;;;35861:7;:5;:7::i;:::-;35853:15;;:4;:15;;;;:49;;;;;35895:7;:5;:7::i;:::-;35889:13;;:2;:13;;;;35853:49;:86;;;;;35937:1;35923:16;;:2;:16;;;;35853:86;:128;;;;;35974:6;35960:21;;:2;:21;;;;35853:128;:158;;;;;36003:8;;;;;;;;;;;36002:9;35853:158;35831:1767;;;36049:13;;;;;;;;;;;36045:148;;36094:19;:25;36114:4;36094:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;36123:19;:23;36143:2;36123:23;;;;;;;;;;;;;;;;;;;;;;;;;36094:52;36086:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;36045:148;36352:20;;;;;;;;;;;36348:423;;;36406:7;:5;:7::i;:::-;36400:13;;:2;:13;;;;:47;;;;;36431:15;36417:30;;:2;:30;;;;36400:47;:79;;;;;36465:13;36451:28;;:2;:28;;;;36400:79;36396:356;;;36557:12;36515:28;:39;36544:9;36515:39;;;;;;;;;;;;;;;;:54;36507:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;36716:12;36674:28;:39;36703:9;36674:39;;;;;;;;;;;;;;;:54;;;;36396:356;36348:423;36824:25;:31;36850:4;36824:31;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;36860:31;:35;36892:2;36860:35;;;;;;;;;;;;;;;;;;;;;;;;;36859:36;36824:71;36820:763;;;36942:20;;36932:6;:30;;36924:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;37081:9;;37064:13;37074:2;37064:9;:13::i;:::-;37055:6;:22;;;;:::i;:::-;:35;;37047:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36820:763;;;37193:25;:29;37219:2;37193:29;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;37227:31;:37;37259:4;37227:37;;;;;;;;;;;;;;;;;;;;;;;;;37226:38;37193:71;37189:394;;;37311:20;;37301:6;:30;;37293:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;37189:394;;;37437:31;:35;37469:2;37437:35;;;;;;;;;;;;;;;;;;;;;;;;;37433:150;;37530:9;;37513:13;37523:2;37513:9;:13::i;:::-;37504:6;:22;;;;:::i;:::-;:35;;37496:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37433:150;37189:394;36820:763;35831:1767;35798:1811;37703:1;37690:10;;:14;;;;:::i;:::-;37673:12;:32;;:73;;;;;37733:13;37727:19;;:2;:19;;;;37673:73;:152;;;;;37782:42;37768:57;;:2;:57;;;;37673:152;37669:221;;;37874:4;37857:10;:14;37868:2;37857:14;;;;;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;37669:221;37940:10;37961:13;37953:21;;:4;:21;;;37940:34;;37990:5;37989:6;:28;;;;;37999:18;;;;;;;;;;;37989:28;37985:1058;;;38072:1;38038:24;:30;38063:4;38038:30;;;;;;;;;;;;;;;;:35;;:119;;;;;38141:15;38129:7;38095:24;:30;38120:4;38095:30;;;;;;;;;;;;;;;;:42;;;;:::i;:::-;:61;;38038:119;38034:600;;;38198:21;;38179:16;:40;;;;38257:21;;38238:16;:40;;;;38304:15;;38291:10;:28;;;;38392:10;;38373:16;;38354;;:35;;;;:::i;:::-;:48;;;;:::i;:::-;38338:13;:64;;;;38034:600;;;38462:1;38443:16;:20;;;;38501:1;38482:16;:20;;;;38534:1;38521:10;:14;;;;38608:10;;38589:16;;38570;;:35;;;;:::i;:::-;:48;;;;:::i;:::-;38554:13;:64;;;;38034:600;37985:1058;;;38702:1;38670:24;:28;38695:2;38670:28;;;;;;;;;;;;;;;;:33;38666:120;;;38755:15;38724:24;:28;38749:2;38724:28;;;;;;;;;;;;;;;:46;;;;38666:120;38808:18;;;;;;;;;;;38803:229;;38866:1;38847:16;:20;;;;38905:1;38886:16;:20;;;;38932:1;38919:10;:14;;;;39006:10;;38987:16;;38968;;:35;;;;:::i;:::-;:48;;;;:::i;:::-;38952:13;:64;;;;38803:229;37985:1058;39056:28;39087:24;39105:4;39087:9;:24::i;:::-;39056:55;;39125:12;39164:18;;39140:20;:42;;39125:57;;39214:7;:35;;;;;39238:11;;;;;;;;;;;39214:35;:61;;;;;39267:8;;;;;;;;;;;39266:9;39214:61;:110;;;;;39293:25;:31;39319:4;39293:31;;;;;;;;;;;;;;;;;;;;;;;;;39292:32;39214:110;:153;;;;;39342:19;:25;39362:4;39342:25;;;;;;;;;;;;;;;;;;;;;;;;;39341:26;39214:153;:194;;;;;39385:19;:23;39405:2;39385:23;;;;;;;;;;;;;;;;;;;;;;;;;39384:24;39214:194;39196:328;;;39446:4;39435:8;;:15;;;;;;;;;;;;;;;;;;39468:10;:8;:10::i;:::-;39507:5;39496:8;;:16;;;;;;;;;;;;;;;;;;39196:328;39537:12;39553:8;;;;;;;;;;;39552:9;39537:24;;39663:19;:25;39683:4;39663:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;39692:19;:23;39712:2;39692:23;;;;;;;;;;;;;;;;;;;;;;;;;39663:52;39660:99;;;39742:5;39732:15;;39660:99;39772:12;39876:7;39873:957;;;39927:25;:29;39953:2;39927:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;39976:1;39960:13;;:17;39927:50;39923:754;;;40004:34;40034:3;40004:25;40015:13;;40004:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;39997:41;;40105:13;;40086:16;;40079:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;40057:18;;:61;;;;;;;:::i;:::-;;;;;;;;40173:13;;40160:10;;40153:4;:17;;;;:::i;:::-;:33;;;;:::i;:::-;40137:12;;:49;;;;;;;:::i;:::-;;;;;;;;40253:13;;40234:16;;40227:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;40205:18;;:61;;;;;;;:::i;:::-;;;;;;;;39923:754;;;40327:25;:31;40353:4;40327:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;40377:1;40362:12;;:16;40327:51;40324:353;;;40406:33;40435:3;40406:24;40417:12;;40406:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;40399:40;;40505:12;;40487:15;;40480:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;40458:18;;:59;;;;;;;:::i;:::-;;;;;;;;40571:12;;40559:9;;40552:4;:16;;;;:::i;:::-;:31;;;;:::i;:::-;40536:12;;:47;;;;;;;:::i;:::-;;;;;;;;40649:12;;40631:15;;40624:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;40602:18;;:59;;;;;;;:::i;:::-;;;;;;;;40324:353;39923:754;40704:1;40697:4;:8;40694:93;;;40729:42;40745:4;40759;40766;40729:15;:42::i;:::-;40694:93;40814:4;40804:14;;;;;:::i;:::-;;;39873:957;40843:33;40859:4;40865:2;40869:6;40843:15;:33::i;:::-;35418:5466;;;;;35305:5579;;;;:::o;15920:193::-;16006:7;16039:1;16034;:6;;16042:12;16026:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;16066:9;16082:1;16078;:5;;;;:::i;:::-;16066:17;;16104:1;16097:8;;;15920:193;;;;;:::o;11197:575::-;11355:1;11337:20;;:6;:20;;;;11329:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;11439:1;11418:23;;:9;:23;;;;11410:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;11495:47;11516:6;11524:9;11535:6;11495:20;:47::i;:::-;11576:71;11598:6;11576:71;;;;;;;;;;;;;;;;;:9;:17;11586:6;11576:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;11556:9;:17;11566:6;11556:17;;;;;;;;;;;;;;;:91;;;;11681:32;11706:6;11681:9;:20;11691:9;11681:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;11658:9;:20;11668:9;11658:20;;;;;;;;;;;;;;;:55;;;;11746:9;11729:35;;11738:6;11729:35;;;11757:6;11729:35;;;;;;:::i;:::-;;;;;;;;11197:575;;;:::o;42028:1568::-;42067:23;42093:24;42111:4;42093:9;:24::i;:::-;42067:50;;42128:25;42198:12;;42177:18;;42156;;:39;;;;:::i;:::-;:54;;;;:::i;:::-;42128:82;;42221:12;42269:1;42250:15;:20;:46;;;;42295:1;42274:17;:22;42250:46;42247:60;;;42299:7;;;;;42247:60;42362:2;42341:18;;:23;;;;:::i;:::-;42323:15;:41;42320:111;;;42417:2;42396:18;;:23;;;;:::i;:::-;42378:41;;42320:111;42493:23;42578:1;42558:17;42537:18;;42519:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;42493:86;;42590:26;42619:36;42639:15;42619;:19;;:36;;;;:::i;:::-;42590:65;;42669:25;42697:21;42669:49;;42732:36;42749:18;42732:16;:36::i;:::-;42783:18;42804:44;42830:17;42804:21;:25;;:44;;;;:::i;:::-;42783:65;;42862:23;42888:57;42927:17;42888:34;42903:18;;42888:10;:14;;:34;;;;:::i;:::-;:38;;:57;;;;:::i;:::-;42862:83;;42956:17;42976:51;43009:17;42976:28;42991:12;;42976:10;:14;;:28;;;;:::i;:::-;:32;;:51;;;;:::i;:::-;42956:71;;43038:23;43095:9;43077:15;43064:10;:28;;;;:::i;:::-;:40;;;;:::i;:::-;43038:66;;43142:1;43121:18;:22;;;;43175:1;43154:18;:22;;;;43202:1;43187:12;:16;;;;43238:9;;;;;;;;;;;43230:23;;43261:9;43230:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43217:58;;;;;43310:1;43292:15;:19;:42;;;;;43333:1;43315:15;:19;43292:42;43289:210;;;43350:46;43363:15;43380;43350:12;:46::i;:::-;43416:71;43431:18;43451:15;43468:18;;43416:71;;;;;;;;:::i;:::-;;;;;;;;43289:210;43533:15;;;;;;;;;;;43525:29;;43562:21;43525:63;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43512:76;;;;;42056:1540;;;;;;;;;;42028:1568;:::o;16373:473::-;16431:7;16681:1;16676;:6;16672:47;;;16706:1;16699:8;;;;16672:47;16732:9;16748:1;16744;:5;;;;:::i;:::-;16732:17;;16777:1;16772;16768;:5;;;;:::i;:::-;:10;16760:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;16837:1;16830:8;;;16373:473;;;;;:::o;17323:132::-;17381:7;17408:39;17412:1;17415;17408:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;17401:46;;17323:132;;;;:::o;14618:125::-;;;;:::o;15480:136::-;15538:7;15565:43;15569:1;15572;15565:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;15558:50;;15480:136;;;;:::o;40893:597::-;41022:21;41060:1;41046:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41022:40;;41091:4;41073;41078:1;41073:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;41117:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41107:4;41112:1;41107:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;41153:62;41170:4;41185:15;41203:11;41153:8;:62::i;:::-;41255:15;:66;;;41336:11;41362:1;41406:4;41433;41453:15;41255:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40948:542;40893:597;:::o;41499:520::-;41647:62;41664:4;41679:15;41697:11;41647:8;:62::i;:::-;41753:15;:31;;;41792:9;41825:4;41845:11;41871:1;41914;41965:4;41985:15;41753:258;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;41499:520;;:::o;17952:279::-;18038:7;18070:1;18066;:5;18073:12;18058:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;18097:9;18113:1;18109;:5;;;;:::i;:::-;18097:17;;18222:1;18215:8;;;17952:279;;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:307::-;355:1;365:113;379:6;376:1;373:13;365:113;;;464:1;459:3;455:11;449:18;445:1;440:3;436:11;429:39;401:2;398:1;394:10;389:15;;365:113;;;496:6;493:1;490:13;487:101;;;576:1;567:6;562:3;558:16;551:27;487:101;336:258;287:307;;;:::o;600:102::-;641:6;692:2;688:7;683:2;676:5;672:14;668:28;658:38;;600:102;;;:::o;708:364::-;796:3;824:39;857:5;824:39;:::i;:::-;879:71;943:6;938:3;879:71;:::i;:::-;872:78;;959:52;1004:6;999:3;992:4;985:5;981:16;959:52;:::i;:::-;1036:29;1058:6;1036:29;:::i;:::-;1031:3;1027:39;1020:46;;800:272;708:364;;;;:::o;1078:313::-;1191:4;1229:2;1218:9;1214:18;1206:26;;1278:9;1272:4;1268:20;1264:1;1253:9;1249:17;1242:47;1306:78;1379:4;1370:6;1306:78;:::i;:::-;1298:86;;1078:313;;;;:::o;1478:117::-;1587:1;1584;1577:12;1601:117;1710:1;1707;1700:12;1724:126;1761:7;1801:42;1794:5;1790:54;1779:65;;1724:126;;;:::o;1856:96::-;1893:7;1922:24;1940:5;1922:24;:::i;:::-;1911:35;;1856:96;;;:::o;1958:122::-;2031:24;2049:5;2031:24;:::i;:::-;2024:5;2021:35;2011:63;;2070:1;2067;2060:12;2011:63;1958:122;:::o;2086:139::-;2132:5;2170:6;2157:20;2148:29;;2186:33;2213:5;2186:33;:::i;:::-;2086:139;;;;:::o;2231:77::-;2268:7;2297:5;2286:16;;2231:77;;;:::o;2314:122::-;2387:24;2405:5;2387:24;:::i;:::-;2380:5;2377:35;2367:63;;2426:1;2423;2416:12;2367:63;2314:122;:::o;2442:139::-;2488:5;2526:6;2513:20;2504:29;;2542:33;2569:5;2542:33;:::i;:::-;2442:139;;;;:::o;2587:474::-;2655:6;2663;2712:2;2700:9;2691:7;2687:23;2683:32;2680:119;;;2718:79;;:::i;:::-;2680:119;2838:1;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2809:117;2965:2;2991:53;3036:7;3027:6;3016:9;3012:22;2991:53;:::i;:::-;2981:63;;2936:118;2587:474;;;;;:::o;3067:90::-;3101:7;3144:5;3137:13;3130:21;3119:32;;3067:90;;;:::o;3163:109::-;3244:21;3259:5;3244:21;:::i;:::-;3239:3;3232:34;3163:109;;:::o;3278:210::-;3365:4;3403:2;3392:9;3388:18;3380:26;;3416:65;3478:1;3467:9;3463:17;3454:6;3416:65;:::i;:::-;3278:210;;;;:::o;3494:329::-;3553:6;3602:2;3590:9;3581:7;3577:23;3573:32;3570:119;;;3608:79;;:::i;:::-;3570:119;3728:1;3753:53;3798:7;3789:6;3778:9;3774:22;3753:53;:::i;:::-;3743:63;;3699:117;3494:329;;;;:::o;3829:60::-;3857:3;3878:5;3871:12;;3829:60;;;:::o;3895:142::-;3945:9;3978:53;3996:34;4005:24;4023:5;4005:24;:::i;:::-;3996:34;:::i;:::-;3978:53;:::i;:::-;3965:66;;3895:142;;;:::o;4043:126::-;4093:9;4126:37;4157:5;4126:37;:::i;:::-;4113:50;;4043:126;;;:::o;4175:153::-;4252:9;4285:37;4316:5;4285:37;:::i;:::-;4272:50;;4175:153;;;:::o;4334:185::-;4448:64;4506:5;4448:64;:::i;:::-;4443:3;4436:77;4334:185;;:::o;4525:276::-;4645:4;4683:2;4672:9;4668:18;4660:26;;4696:98;4791:1;4780:9;4776:17;4767:6;4696:98;:::i;:::-;4525:276;;;;:::o;4807:118::-;4894:24;4912:5;4894:24;:::i;:::-;4889:3;4882:37;4807:118;;:::o;4931:222::-;5024:4;5062:2;5051:9;5047:18;5039:26;;5075:71;5143:1;5132:9;5128:17;5119:6;5075:71;:::i;:::-;4931:222;;;;:::o;5159:1057::-;5263:6;5271;5279;5287;5295;5303;5352:3;5340:9;5331:7;5327:23;5323:33;5320:120;;;5359:79;;:::i;:::-;5320:120;5479:1;5504:53;5549:7;5540:6;5529:9;5525:22;5504:53;:::i;:::-;5494:63;;5450:117;5606:2;5632:53;5677:7;5668:6;5657:9;5653:22;5632:53;:::i;:::-;5622:63;;5577:118;5734:2;5760:53;5805:7;5796:6;5785:9;5781:22;5760:53;:::i;:::-;5750:63;;5705:118;5862:2;5888:53;5933:7;5924:6;5913:9;5909:22;5888:53;:::i;:::-;5878:63;;5833:118;5990:3;6017:53;6062:7;6053:6;6042:9;6038:22;6017:53;:::i;:::-;6007:63;;5961:119;6119:3;6146:53;6191:7;6182:6;6171:9;6167:22;6146:53;:::i;:::-;6136:63;;6090:119;5159:1057;;;;;;;;:::o;6222:619::-;6299:6;6307;6315;6364:2;6352:9;6343:7;6339:23;6335:32;6332:119;;;6370:79;;:::i;:::-;6332:119;6490:1;6515:53;6560:7;6551:6;6540:9;6536:22;6515:53;:::i;:::-;6505:63;;6461:117;6617:2;6643:53;6688:7;6679:6;6668:9;6664:22;6643:53;:::i;:::-;6633:63;;6588:118;6745:2;6771:53;6816:7;6807:6;6796:9;6792:22;6771:53;:::i;:::-;6761:63;;6716:118;6222:619;;;;;:::o;6847:117::-;6956:1;6953;6946:12;6970:117;7079:1;7076;7069:12;7093:117;7202:1;7199;7192:12;7233:568;7306:8;7316:6;7366:3;7359:4;7351:6;7347:17;7343:27;7333:122;;7374:79;;:::i;:::-;7333:122;7487:6;7474:20;7464:30;;7517:18;7509:6;7506:30;7503:117;;;7539:79;;:::i;:::-;7503:117;7653:4;7645:6;7641:17;7629:29;;7707:3;7699:4;7691:6;7687:17;7677:8;7673:32;7670:41;7667:128;;;7714:79;;:::i;:::-;7667:128;7233:568;;;;;:::o;7824:::-;7897:8;7907:6;7957:3;7950:4;7942:6;7938:17;7934:27;7924:122;;7965:79;;:::i;:::-;7924:122;8078:6;8065:20;8055:30;;8108:18;8100:6;8097:30;8094:117;;;8130:79;;:::i;:::-;8094:117;8244:4;8236:6;8232:17;8220:29;;8298:3;8290:4;8282:6;8278:17;8268:8;8264:32;8261:41;8258:128;;;8305:79;;:::i;:::-;8258:128;7824:568;;;;;:::o;8398:934::-;8520:6;8528;8536;8544;8593:2;8581:9;8572:7;8568:23;8564:32;8561:119;;;8599:79;;:::i;:::-;8561:119;8747:1;8736:9;8732:17;8719:31;8777:18;8769:6;8766:30;8763:117;;;8799:79;;:::i;:::-;8763:117;8912:80;8984:7;8975:6;8964:9;8960:22;8912:80;:::i;:::-;8894:98;;;;8690:312;9069:2;9058:9;9054:18;9041:32;9100:18;9092:6;9089:30;9086:117;;;9122:79;;:::i;:::-;9086:117;9235:80;9307:7;9298:6;9287:9;9283:22;9235:80;:::i;:::-;9217:98;;;;9012:313;8398:934;;;;;;;:::o;9338:86::-;9373:7;9413:4;9406:5;9402:16;9391:27;;9338:86;;;:::o;9430:112::-;9513:22;9529:5;9513:22;:::i;:::-;9508:3;9501:35;9430:112;;:::o;9548:214::-;9637:4;9675:2;9664:9;9660:18;9652:26;;9688:67;9752:1;9741:9;9737:17;9728:6;9688:67;:::i;:::-;9548:214;;;;:::o;9768:118::-;9855:24;9873:5;9855:24;:::i;:::-;9850:3;9843:37;9768:118;;:::o;9892:222::-;9985:4;10023:2;10012:9;10008:18;10000:26;;10036:71;10104:1;10093:9;10089:17;10080:6;10036:71;:::i;:::-;9892:222;;;;:::o;10120:116::-;10190:21;10205:5;10190:21;:::i;:::-;10183:5;10180:32;10170:60;;10226:1;10223;10216:12;10170:60;10120:116;:::o;10242:133::-;10285:5;10323:6;10310:20;10301:29;;10339:30;10363:5;10339:30;:::i;:::-;10242:133;;;;:::o;10381:468::-;10446:6;10454;10503:2;10491:9;10482:7;10478:23;10474:32;10471:119;;;10509:79;;:::i;:::-;10471:119;10629:1;10654:53;10699:7;10690:6;10679:9;10675:22;10654:53;:::i;:::-;10644:63;;10600:117;10756:2;10782:50;10824:7;10815:6;10804:9;10800:22;10782:50;:::i;:::-;10772:60;;10727:115;10381:468;;;;;:::o;10855:323::-;10911:6;10960:2;10948:9;10939:7;10935:23;10931:32;10928:119;;;10966:79;;:::i;:::-;10928:119;11086:1;11111:50;11153:7;11144:6;11133:9;11129:22;11111:50;:::i;:::-;11101:60;;11057:114;10855:323;;;;:::o;11184:474::-;11252:6;11260;11309:2;11297:9;11288:7;11284:23;11280:32;11277:119;;;11315:79;;:::i;:::-;11277:119;11435:1;11460:53;11505:7;11496:6;11485:9;11481:22;11460:53;:::i;:::-;11450:63;;11406:117;11562:2;11588:53;11633:7;11624:6;11613:9;11609:22;11588:53;:::i;:::-;11578:63;;11533:118;11184:474;;;;;:::o;11664:180::-;11712:77;11709:1;11702:88;11809:4;11806:1;11799:15;11833:4;11830:1;11823:15;11850:320;11894:6;11931:1;11925:4;11921:12;11911:22;;11978:1;11972:4;11968:12;11999:18;11989:81;;12055:4;12047:6;12043:17;12033:27;;11989:81;12117:2;12109:6;12106:14;12086:18;12083:38;12080:84;;;12136:18;;:::i;:::-;12080:84;11901:269;11850:320;;;:::o;12176:182::-;12316:34;12312:1;12304:6;12300:14;12293:58;12176:182;:::o;12364:366::-;12506:3;12527:67;12591:2;12586:3;12527:67;:::i;:::-;12520:74;;12603:93;12692:3;12603:93;:::i;:::-;12721:2;12716:3;12712:12;12705:19;;12364:366;;;:::o;12736:419::-;12902:4;12940:2;12929:9;12925:18;12917:26;;12989:9;12983:4;12979:20;12975:1;12964:9;12960:17;12953:47;13017:131;13143:4;13017:131;:::i;:::-;13009:139;;12736:419;;;:::o;13161:180::-;13209:77;13206:1;13199:88;13306:4;13303:1;13296:15;13330:4;13327:1;13320:15;13347:305;13387:3;13406:20;13424:1;13406:20;:::i;:::-;13401:25;;13440:20;13458:1;13440:20;:::i;:::-;13435:25;;13594:1;13526:66;13522:74;13519:1;13516:81;13513:107;;;13600:18;;:::i;:::-;13513:107;13644:1;13641;13637:9;13630:16;;13347:305;;;;:::o;13658:179::-;13798:31;13794:1;13786:6;13782:14;13775:55;13658:179;:::o;13843:366::-;13985:3;14006:67;14070:2;14065:3;14006:67;:::i;:::-;13999:74;;14082:93;14171:3;14082:93;:::i;:::-;14200:2;14195:3;14191:12;14184:19;;13843:366;;;:::o;14215:419::-;14381:4;14419:2;14408:9;14404:18;14396:26;;14468:9;14462:4;14458:20;14454:1;14443:9;14439:17;14432:47;14496:131;14622:4;14496:131;:::i;:::-;14488:139;;14215:419;;;:::o;14640:180::-;14688:77;14685:1;14678:88;14785:4;14782:1;14775:15;14809:4;14806:1;14799:15;14826:102;14868:8;14915:5;14912:1;14908:13;14887:34;;14826:102;;;:::o;14934:848::-;14995:5;15002:4;15026:6;15017:15;;15050:5;15041:14;;15064:712;15085:1;15075:8;15072:15;15064:712;;;15180:4;15175:3;15171:14;15165:4;15162:24;15159:50;;;15189:18;;:::i;:::-;15159:50;15239:1;15229:8;15225:16;15222:451;;;15654:4;15647:5;15643:16;15634:25;;15222:451;15704:4;15698;15694:15;15686:23;;15734:32;15757:8;15734:32;:::i;:::-;15722:44;;15064:712;;;14934:848;;;;;;;:::o;15788:1073::-;15842:5;16033:8;16023:40;;16054:1;16045:10;;16056:5;;16023:40;16082:4;16072:36;;16099:1;16090:10;;16101:5;;16072:36;16168:4;16216:1;16211:27;;;;16252:1;16247:191;;;;16161:277;;16211:27;16229:1;16220:10;;16231:5;;;16247:191;16292:3;16282:8;16279:17;16276:43;;;16299:18;;:::i;:::-;16276:43;16348:8;16345:1;16341:16;16332:25;;16383:3;16376:5;16373:14;16370:40;;;16390:18;;:::i;:::-;16370:40;16423:5;;;16161:277;;16547:2;16537:8;16534:16;16528:3;16522:4;16519:13;16515:36;16497:2;16487:8;16484:16;16479:2;16473:4;16470:12;16466:35;16450:111;16447:246;;;16603:8;16597:4;16593:19;16584:28;;16638:3;16631:5;16628:14;16625:40;;;16645:18;;:::i;:::-;16625:40;16678:5;;16447:246;16718:42;16756:3;16746:8;16740:4;16737:1;16718:42;:::i;:::-;16703:57;;;;16792:4;16787:3;16783:14;16776:5;16773:25;16770:51;;;16801:18;;:::i;:::-;16770:51;16850:4;16843:5;16839:16;16830:25;;15788:1073;;;;;;:::o;16867:281::-;16925:5;16949:23;16967:4;16949:23;:::i;:::-;16941:31;;16993:25;17009:8;16993:25;:::i;:::-;16981:37;;17037:104;17074:66;17064:8;17058:4;17037:104;:::i;:::-;17028:113;;16867:281;;;;:::o;17154:348::-;17194:7;17217:20;17235:1;17217:20;:::i;:::-;17212:25;;17251:20;17269:1;17251:20;:::i;:::-;17246:25;;17439:1;17371:66;17367:74;17364:1;17361:81;17356:1;17349:9;17342:17;17338:105;17335:131;;;17446:18;;:::i;:::-;17335:131;17494:1;17491;17487:9;17476:20;;17154:348;;;;:::o;17508:233::-;17547:3;17570:24;17588:5;17570:24;:::i;:::-;17561:33;;17616:66;17609:5;17606:77;17603:103;;;17686:18;;:::i;:::-;17603:103;17733:1;17726:5;17722:13;17715:20;;17508:233;;;:::o;17747:177::-;17887:29;17883:1;17875:6;17871:14;17864:53;17747:177;:::o;17930:366::-;18072:3;18093:67;18157:2;18152:3;18093:67;:::i;:::-;18086:74;;18169:93;18258:3;18169:93;:::i;:::-;18287:2;18282:3;18278:12;18271:19;;17930:366;;;:::o;18302:419::-;18468:4;18506:2;18495:9;18491:18;18483:26;;18555:9;18549:4;18545:20;18541:1;18530:9;18526:17;18519:47;18583:131;18709:4;18583:131;:::i;:::-;18575:139;;18302:419;;;:::o;18727:223::-;18867:34;18863:1;18855:6;18851:14;18844:58;18936:6;18931:2;18923:6;18919:15;18912:31;18727:223;:::o;18956:366::-;19098:3;19119:67;19183:2;19178:3;19119:67;:::i;:::-;19112:74;;19195:93;19284:3;19195:93;:::i;:::-;19313:2;19308:3;19304:12;19297:19;;18956:366;;;:::o;19328:419::-;19494:4;19532:2;19521:9;19517:18;19509:26;;19581:9;19575:4;19571:20;19567:1;19556:9;19552:17;19545:47;19609:131;19735:4;19609:131;:::i;:::-;19601:139;;19328:419;;;:::o;19753:221::-;19893:34;19889:1;19881:6;19877:14;19870:58;19962:4;19957:2;19949:6;19945:15;19938:29;19753:221;:::o;19980:366::-;20122:3;20143:67;20207:2;20202:3;20143:67;:::i;:::-;20136:74;;20219:93;20308:3;20219:93;:::i;:::-;20337:2;20332:3;20328:12;20321:19;;19980:366;;;:::o;20352:419::-;20518:4;20556:2;20545:9;20541:18;20533:26;;20605:9;20599:4;20595:20;20591:1;20580:9;20576:17;20569:47;20633:131;20759:4;20633:131;:::i;:::-;20625:139;;20352:419;;;:::o;20777:224::-;20917:34;20913:1;20905:6;20901:14;20894:58;20986:7;20981:2;20973:6;20969:15;20962:32;20777:224;:::o;21007:366::-;21149:3;21170:67;21234:2;21229:3;21170:67;:::i;:::-;21163:74;;21246:93;21335:3;21246:93;:::i;:::-;21364:2;21359:3;21355:12;21348:19;;21007:366;;;:::o;21379:419::-;21545:4;21583:2;21572:9;21568:18;21560:26;;21632:9;21626:4;21622:20;21618:1;21607:9;21603:17;21596:47;21660:131;21786:4;21660:131;:::i;:::-;21652:139;;21379:419;;;:::o;21804:222::-;21944:34;21940:1;21932:6;21928:14;21921:58;22013:5;22008:2;22000:6;21996:15;21989:30;21804:222;:::o;22032:366::-;22174:3;22195:67;22259:2;22254:3;22195:67;:::i;:::-;22188:74;;22271:93;22360:3;22271:93;:::i;:::-;22389:2;22384:3;22380:12;22373:19;;22032:366;;;:::o;22404:419::-;22570:4;22608:2;22597:9;22593:18;22585:26;;22657:9;22651:4;22647:20;22643:1;22632:9;22628:17;22621:47;22685:131;22811:4;22685:131;:::i;:::-;22677:139;;22404:419;;;:::o;22829:236::-;22969:34;22965:1;22957:6;22953:14;22946:58;23038:19;23033:2;23025:6;23021:15;23014:44;22829:236;:::o;23071:366::-;23213:3;23234:67;23298:2;23293:3;23234:67;:::i;:::-;23227:74;;23310:93;23399:3;23310:93;:::i;:::-;23428:2;23423:3;23419:12;23412:19;;23071:366;;;:::o;23443:419::-;23609:4;23647:2;23636:9;23632:18;23624:26;;23696:9;23690:4;23686:20;23682:1;23671:9;23667:17;23660:47;23724:131;23850:4;23724:131;:::i;:::-;23716:139;;23443:419;;;:::o;23868:172::-;24008:24;24004:1;23996:6;23992:14;23985:48;23868:172;:::o;24046:366::-;24188:3;24209:67;24273:2;24268:3;24209:67;:::i;:::-;24202:74;;24285:93;24374:3;24285:93;:::i;:::-;24403:2;24398:3;24394:12;24387:19;;24046:366;;;:::o;24418:419::-;24584:4;24622:2;24611:9;24607:18;24599:26;;24671:9;24665:4;24661:20;24657:1;24646:9;24642:17;24635:47;24699:131;24825:4;24699:131;:::i;:::-;24691:139;;24418:419;;;:::o;24843:297::-;24983:34;24979:1;24971:6;24967:14;24960:58;25052:34;25047:2;25039:6;25035:15;25028:59;25121:11;25116:2;25108:6;25104:15;25097:36;24843:297;:::o;25146:366::-;25288:3;25309:67;25373:2;25368:3;25309:67;:::i;:::-;25302:74;;25385:93;25474:3;25385:93;:::i;:::-;25503:2;25498:3;25494:12;25487:19;;25146:366;;;:::o;25518:419::-;25684:4;25722:2;25711:9;25707:18;25699:26;;25771:9;25765:4;25761:20;25757:1;25746:9;25742:17;25735:47;25799:131;25925:4;25799:131;:::i;:::-;25791:139;;25518:419;;;:::o;25943:240::-;26083:34;26079:1;26071:6;26067:14;26060:58;26152:23;26147:2;26139:6;26135:15;26128:48;25943:240;:::o;26189:366::-;26331:3;26352:67;26416:2;26411:3;26352:67;:::i;:::-;26345:74;;26428:93;26517:3;26428:93;:::i;:::-;26546:2;26541:3;26537:12;26530:19;;26189:366;;;:::o;26561:419::-;26727:4;26765:2;26754:9;26750:18;26742:26;;26814:9;26808:4;26804:20;26800:1;26789:9;26785:17;26778:47;26842:131;26968:4;26842:131;:::i;:::-;26834:139;;26561:419;;;:::o;26986:169::-;27126:21;27122:1;27114:6;27110:14;27103:45;26986:169;:::o;27161:366::-;27303:3;27324:67;27388:2;27383:3;27324:67;:::i;:::-;27317:74;;27400:93;27489:3;27400:93;:::i;:::-;27518:2;27513:3;27509:12;27502:19;;27161:366;;;:::o;27533:419::-;27699:4;27737:2;27726:9;27722:18;27714:26;;27786:9;27780:4;27776:20;27772:1;27761:9;27757:17;27750:47;27814:131;27940:4;27814:131;:::i;:::-;27806:139;;27533:419;;;:::o;27958:241::-;28098:34;28094:1;28086:6;28082:14;28075:58;28167:24;28162:2;28154:6;28150:15;28143:49;27958:241;:::o;28205:366::-;28347:3;28368:67;28432:2;28427:3;28368:67;:::i;:::-;28361:74;;28444:93;28533:3;28444:93;:::i;:::-;28562:2;28557:3;28553:12;28546:19;;28205:366;;;:::o;28577:419::-;28743:4;28781:2;28770:9;28766:18;28758:26;;28830:9;28824:4;28820:20;28816:1;28805:9;28801:17;28794:47;28858:131;28984:4;28858:131;:::i;:::-;28850:139;;28577:419;;;:::o;29002:180::-;29050:77;29047:1;29040:88;29147:4;29144:1;29137:15;29171:4;29168:1;29161:15;29188:185;29228:1;29245:20;29263:1;29245:20;:::i;:::-;29240:25;;29279:20;29297:1;29279:20;:::i;:::-;29274:25;;29318:1;29308:35;;29323:18;;:::i;:::-;29308:35;29365:1;29362;29358:9;29353:14;;29188:185;;;;:::o;29379:191::-;29419:4;29439:20;29457:1;29439:20;:::i;:::-;29434:25;;29473:20;29491:1;29473:20;:::i;:::-;29468:25;;29512:1;29509;29506:8;29503:34;;;29517:18;;:::i;:::-;29503:34;29562:1;29559;29555:9;29547:17;;29379:191;;;;:::o;29576:147::-;29677:11;29714:3;29699:18;;29576:147;;;;:::o;29729:114::-;;:::o;29849:398::-;30008:3;30029:83;30110:1;30105:3;30029:83;:::i;:::-;30022:90;;30121:93;30210:3;30121:93;:::i;:::-;30239:1;30234:3;30230:11;30223:18;;29849:398;;;:::o;30253:379::-;30437:3;30459:147;30602:3;30459:147;:::i;:::-;30452:154;;30623:3;30616:10;;30253:379;;;:::o;30638:442::-;30787:4;30825:2;30814:9;30810:18;30802:26;;30838:71;30906:1;30895:9;30891:17;30882:6;30838:71;:::i;:::-;30919:72;30987:2;30976:9;30972:18;30963:6;30919:72;:::i;:::-;31001;31069:2;31058:9;31054:18;31045:6;31001:72;:::i;:::-;30638:442;;;;;;:::o;31086:220::-;31226:34;31222:1;31214:6;31210:14;31203:58;31295:3;31290:2;31282:6;31278:15;31271:28;31086:220;:::o;31312:366::-;31454:3;31475:67;31539:2;31534:3;31475:67;:::i;:::-;31468:74;;31551:93;31640:3;31551:93;:::i;:::-;31669:2;31664:3;31660:12;31653:19;;31312:366;;;:::o;31684:419::-;31850:4;31888:2;31877:9;31873:18;31865:26;;31937:9;31931:4;31927:20;31923:1;31912:9;31908:17;31901:47;31965:131;32091:4;31965:131;:::i;:::-;31957:139;;31684:419;;;:::o;32109:180::-;32157:77;32154:1;32147:88;32254:4;32251:1;32244:15;32278:4;32275:1;32268:15;32295:143;32352:5;32383:6;32377:13;32368:22;;32399:33;32426:5;32399:33;:::i;:::-;32295:143;;;;:::o;32444:351::-;32514:6;32563:2;32551:9;32542:7;32538:23;32534:32;32531:119;;;32569:79;;:::i;:::-;32531:119;32689:1;32714:64;32770:7;32761:6;32750:9;32746:22;32714:64;:::i;:::-;32704:74;;32660:128;32444:351;;;;:::o;32801:85::-;32846:7;32875:5;32864:16;;32801:85;;;:::o;32892:158::-;32950:9;32983:61;33001:42;33010:32;33036:5;33010:32;:::i;:::-;33001:42;:::i;:::-;32983:61;:::i;:::-;32970:74;;32892:158;;;:::o;33056:147::-;33151:45;33190:5;33151:45;:::i;:::-;33146:3;33139:58;33056:147;;:::o;33209:114::-;33276:6;33310:5;33304:12;33294:22;;33209:114;;;:::o;33329:184::-;33428:11;33462:6;33457:3;33450:19;33502:4;33497:3;33493:14;33478:29;;33329:184;;;;:::o;33519:132::-;33586:4;33609:3;33601:11;;33639:4;33634:3;33630:14;33622:22;;33519:132;;;:::o;33657:108::-;33734:24;33752:5;33734:24;:::i;:::-;33729:3;33722:37;33657:108;;:::o;33771:179::-;33840:10;33861:46;33903:3;33895:6;33861:46;:::i;:::-;33939:4;33934:3;33930:14;33916:28;;33771:179;;;;:::o;33956:113::-;34026:4;34058;34053:3;34049:14;34041:22;;33956:113;;;:::o;34105:732::-;34224:3;34253:54;34301:5;34253:54;:::i;:::-;34323:86;34402:6;34397:3;34323:86;:::i;:::-;34316:93;;34433:56;34483:5;34433:56;:::i;:::-;34512:7;34543:1;34528:284;34553:6;34550:1;34547:13;34528:284;;;34629:6;34623:13;34656:63;34715:3;34700:13;34656:63;:::i;:::-;34649:70;;34742:60;34795:6;34742:60;:::i;:::-;34732:70;;34588:224;34575:1;34572;34568:9;34563:14;;34528:284;;;34532:14;34828:3;34821:10;;34229:608;;;34105:732;;;;:::o;34843:831::-;35106:4;35144:3;35133:9;35129:19;35121:27;;35158:71;35226:1;35215:9;35211:17;35202:6;35158:71;:::i;:::-;35239:80;35315:2;35304:9;35300:18;35291:6;35239:80;:::i;:::-;35366:9;35360:4;35356:20;35351:2;35340:9;35336:18;35329:48;35394:108;35497:4;35488:6;35394:108;:::i;:::-;35386:116;;35512:72;35580:2;35569:9;35565:18;35556:6;35512:72;:::i;:::-;35594:73;35662:3;35651:9;35647:19;35638:6;35594:73;:::i;:::-;34843:831;;;;;;;;:::o;35680:807::-;35929:4;35967:3;35956:9;35952:19;35944:27;;35981:71;36049:1;36038:9;36034:17;36025:6;35981:71;:::i;:::-;36062:72;36130:2;36119:9;36115:18;36106:6;36062:72;:::i;:::-;36144:80;36220:2;36209:9;36205:18;36196:6;36144:80;:::i;:::-;36234;36310:2;36299:9;36295:18;36286:6;36234:80;:::i;:::-;36324:73;36392:3;36381:9;36377:19;36368:6;36324:73;:::i;:::-;36407;36475:3;36464:9;36460:19;36451:6;36407:73;:::i;:::-;35680:807;;;;;;;;;:::o;36493:143::-;36550:5;36581:6;36575:13;36566:22;;36597:33;36624:5;36597:33;:::i;:::-;36493:143;;;;:::o;36642:663::-;36730:6;36738;36746;36795:2;36783:9;36774:7;36770:23;36766:32;36763:119;;;36801:79;;:::i;:::-;36763:119;36921:1;36946:64;37002:7;36993:6;36982:9;36978:22;36946:64;:::i;:::-;36936:74;;36892:128;37059:2;37085:64;37141:7;37132:6;37121:9;37117:22;37085:64;:::i;:::-;37075:74;;37030:129;37198:2;37224:64;37280:7;37271:6;37260:9;37256:22;37224:64;:::i;:::-;37214:74;;37169:129;36642:663;;;;;:::o

Swarm Source

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