ETH Price: $2,605.27 (+0.50%)

Token

CHAD (CHAD)
 

Overview

Max Total Supply

1,000,000,000 CHAD

Holders

105

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
919,191.870106082 CHAD

Value
$0.00
0x0f9951c1ab2eea96353ea63df28569ea7e9ddf54
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:
CHAD

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-08-15
*/

// SPDX-License-Identifier: MIT

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

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

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

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

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

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

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


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

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

function initialize(address, address) external;
}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns(uint8);
}
 
 
contract ERC20 is Context, IERC20, IERC20Metadata {
    using SafeMath for uint256;

        mapping(address => uint256) private _balances;

    mapping(address => mapping(address => uint256)) private _allowances;
 
    uint256 private _totalSupply;
 
    string private _name;
    string private _symbol;

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

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

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

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

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

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

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

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

    /**
     * @dev See {IERC20-approve}.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns(bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * Requirements:
     *
     * - `sender` and `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     * - the caller must have allowance for ``sender``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns(bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }

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

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

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

        _beforeTokenTransfer(sender, recipient, amount);

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

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

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

        _totalSupply = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
        emit Transfer(address(0), account, amount);
    }

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

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

        _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance");
        _totalSupply = _totalSupply.sub(amount);
        emit Transfer(account, address(0), amount);
    }

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

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

    /**
     * @dev Hook that is called before any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * will be to transferred to `to`.
     * - when `from` is zero, `amount` tokens will be minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual { }
}
 
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns(uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

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

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

        return c;
    }

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

        return c;
    }

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

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

        return c;
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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


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

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

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

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

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}
 
contract CHAD is ERC20, Ownable {
    using SafeMath for uint256;

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;


    // addresses
    address private marketingWallet;

    // limits 
    uint256 private maxTransactionBuyAmount;
    uint256 private maxTransactionSellAmount;   
    uint256 private maxWallet;
 
    uint256 private swapTokensAtAmount;

    // status flags
    bool private tradingActive = false;
    bool public swapEnabled = false;
    bool public swapping;


    // Blacklist Map
    mapping(address => bool) private _blacklist;


    struct Fees {
        uint256 buyTotalFees;
        uint256 buyMarketingFee;
        uint256 buyLiquidityFee;

        uint256 sellTotalFees;
        uint256 sellMarketingFee;
        uint256 sellLiquidityFee;
    }  

    Fees public _fees = Fees({
        buyTotalFees: 0,
        buyMarketingFee: 0,
        buyLiquidityFee: 0,

        sellTotalFees: 0,
        sellMarketingFee: 0,
        sellLiquidityFee: 0
    });
    
    

    uint256 public tokensForMarketing;
    uint256 public tokensForLiquidity;


    // exclude from fees and max transaction amount
    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) public _isExcludedMaxTransactionAmount;
    mapping(address => bool) public _isExcludedMaxWalletAmount;

    // 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 SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );


    constructor() ERC20("CHAD", "CHAD") {
 
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);

        excludeFromMaxTransaction(address(_uniswapV2Router), true);
        uniswapV2Router = _uniswapV2Router;

        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        excludeFromMaxTransaction(address(uniswapV2Pair), true);
        automatedMarketMakerPairs[address(uniswapV2Pair)] = true;

        approve(address(_uniswapV2Router), type(uint256).max);
        uint256 totalSupply = 1000000000* 1e18;

        maxTransactionBuyAmount = totalSupply / 100; // 1% maxTransactionAmountTxn
        maxTransactionSellAmount = totalSupply / 100; // 1% maxTransactionAmountTxn
        maxWallet = totalSupply * 3 / 100; // 3% maxWallet
        swapTokensAtAmount = totalSupply * 1 / 10000; // 0.01% swap wallet

        _fees.buyMarketingFee = 4;
        _fees.buyLiquidityFee = 1;
        _fees.buyTotalFees = _fees.buyMarketingFee + _fees.buyLiquidityFee;

        _fees.sellMarketingFee = 4;
        _fees.sellLiquidityFee = 1;
        _fees.sellTotalFees = _fees.sellMarketingFee + _fees.sellLiquidityFee;


        marketingWallet = address(0x82C9E4E8DC4a8fAd35319350C83ed116E8cF93Ee); // set as marketing wallet

        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);

        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);

        excludeFromWalletLimit(owner(), true);
        excludeFromWalletLimit(address(this), true);
        excludeFromWalletLimit(address(uniswapV2Pair), 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;
    }



    // change the minimum amount of tokens to sell from fees
    function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner returns(bool){
        swapTokensAtAmount = newAmount;
        return true;
    }


    function updateMaxTxnAmount(uint256 newMaxBuyAmount, uint256 newMaxSellAmount) external onlyOwner {
        require(((totalSupply() * newMaxBuyAmount) / 1000) >= (totalSupply() / 5000), "Cannot set maxTransactionAmounts lower than 0.5%");
        require(((totalSupply() * newMaxSellAmount) / 1000) >= (totalSupply() / 5000), "Cannot set maxTransactionAmounts lower than 0.5%");
        maxTransactionBuyAmount = (totalSupply() * newMaxBuyAmount) / 1000;
        maxTransactionSellAmount = (totalSupply() * newMaxSellAmount) / 1000;
    }


    function updateMaxWalletAmount(uint256 newPercentage) external onlyOwner {
        require(((totalSupply() * newPercentage) / 1000) >= (totalSupply() / 5000), "Cannot set maxWallet lower than 0.5%");
        maxWallet = (totalSupply() * newPercentage) / 1000;
    }

    // only use to disable contract sales if absolutely necessary (emergency use only)
    function updateSwapEnabled(bool enabled) external onlyOwner(){
        swapEnabled = enabled;
    }

    function updateBuyFees(uint256 _marketingFee, uint256 _liquidityFee) external onlyOwner {
        _fees.buyMarketingFee = _marketingFee;
        _fees.buyLiquidityFee = _liquidityFee;
        _fees.buyTotalFees = _fees.buyMarketingFee + _fees.buyLiquidityFee;
        require(_fees.buyTotalFees <= 9, "Must keep fees at 9% or less");
    }

    function updateSellFees(uint256 _marketingFee, uint256 _liquidityFee) external onlyOwner {
        _fees.sellMarketingFee = _marketingFee;
        _fees.sellLiquidityFee = _liquidityFee;
        _fees.sellTotalFees = _fees.sellMarketingFee + _fees.sellLiquidityFee;
        require(_fees.sellTotalFees <= 9, "Must keep fees at 9% or less");
    }

    
    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
    }
    function excludeFromWalletLimit(address account, bool excluded) public onlyOwner {
        _isExcludedMaxWalletAmount[account] = excluded;
    }
    function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }


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


    function updateWallets(address newMarketingWallet) external onlyOwner{
        marketingWallet = newMarketingWallet;
    }

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

    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(from != address(0xdEaD), "ERC20: transfer from the dEaD address");
        require(to != address(0xdEaD), "ERC20: transfer to the dEaD address");
        require(!_blacklist[to] && !_blacklist[from], "You have been blacklisted from transfering tokens");
        
        if (amount == 0) {
            super._transfer(from, to, 0);
            return;
        }

        if (
            from != owner() &&
            to != owner() &&
            !swapping
        ) {
            if (!tradingActive) {
                require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active.");
            }

            //when buy
            if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) {
                require(amount <= maxTransactionBuyAmount, "Buy transfer amount exceeds the maxTransactionAmount.");
            }

            //when sell
            else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) {
                require(amount <= maxTransactionSellAmount, "Sell transfer amount exceeds the maxTransactionAmount.");
            }
            if (!_isExcludedMaxWalletAmount[to]) {
                require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
            }
        }
 
        
 
        uint256 contractTokenBalance = balanceOf(address(this));
 
        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

        if (
            canSwap &&
            swapEnabled &&
            !swapping &&
            automatedMarketMakerPairs[to] &&
            !_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] && _fees.sellTotalFees > 0) {
                fees = amount.mul(_fees.sellTotalFees).div(100);
                tokensForLiquidity += fees * _fees.sellLiquidityFee / _fees.sellTotalFees;
                tokensForMarketing += fees * _fees.sellMarketingFee / _fees.sellTotalFees;
            }
            // on buy
            else if (automatedMarketMakerPairs[from] && _fees.buyTotalFees > 0) {
                fees = amount.mul(_fees.buyTotalFees).div(100);
                tokensForLiquidity += fees * _fees.buyLiquidityFee / _fees.buyTotalFees;
                tokensForMarketing += fees * _fees.buyMarketingFee / _fees.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 ;
        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 ethForLiquidity = ethBalance - ethForMarketing;


        tokensForLiquidity = 0;
        tokensForMarketing = 0;


        if (liquidityTokens > 0 && ethForLiquidity > 0) {
            addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity, tokensForLiquidity);
        }

        (success,) = address(marketingWallet).call{ value: address(this).balance } ("");
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"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"},{"inputs":[],"name":"_fees","outputs":[{"internalType":"uint256","name":"buyTotalFees","type":"uint256"},{"internalType":"uint256","name":"buyMarketingFee","type":"uint256"},{"internalType":"uint256","name":"buyLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"sellTotalFees","type":"uint256"},{"internalType":"uint256","name":"sellMarketingFee","type":"uint256"},{"internalType":"uint256","name":"sellLiquidityFee","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxWalletAmount","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":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapping","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":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMaxBuyAmount","type":"uint256"},{"internalType":"uint256","name":"newMaxSellAmount","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPercentage","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"updateWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526000600b60006101000a81548160ff0219169083151502179055506000600b60016101000a81548160ff0219169083151502179055506040518060c0016040528060008152602001600081526020016000815260200160008152602001600081526020016000815250600d600082015181600001556020820151816001015560408201518160020155606082015181600301556080820151816004015560a082015181600501555050348015620000ba57600080fd5b506040518060400160405280600481526020017f43484144000000000000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f434841440000000000000000000000000000000000000000000000000000000081525081600390805190602001906200013f92919062000e2a565b5080600490805190602001906200015892919062000e2a565b50505060006200016d620006e960201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d905062000238816001620006f160201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015620002b357600080fd5b505afa158015620002c8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002ee919062000f44565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200035157600080fd5b505afa15801562000366573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200038c919062000f44565b6040518363ffffffff1660e01b8152600401620003ab92919062000f87565b602060405180830381600087803b158015620003c657600080fd5b505af1158015620003db573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000401919062000f44565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200044960a0516001620006f160201b60201c565b60016018600060a05173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620004d5817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff620007ee60201b60201c565b5060006b033b2e3c9fd0803ce80000009050606481620004f691906200101c565b6007819055506064816200050b91906200101c565b600881905550606460038262000522919062001054565b6200052e91906200101c565b60098190555061271060018262000546919062001054565b6200055291906200101c565b600a819055506004600d600101819055506001600d60020181905550600d60020154600d60010154620005869190620010b5565b600d600001819055506004600d600401819055506001600d60050181905550600d60050154600d60040154620005bd9190620010b5565b600d600301819055507382c9e4e8dc4a8fad35319350c83ed116e8cf93ee600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200063d6200062f6200081c60201b60201c565b60016200084660201b60201c565b620006503060016200084660201b60201c565b62000672620006646200081c60201b60201c565b6001620006f160201b60201c565b62000685306001620006f160201b60201c565b620006a7620006996200081c60201b60201c565b60016200094360201b60201c565b620006ba3060016200094360201b60201c565b620006cf60a05160016200094360201b60201c565b620006e1338262000a4060201b60201c565b50506200143c565b600033905090565b62000701620006e960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000793576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200078a9062001173565b60405180910390fd5b80601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60006200081262000804620006e960201b60201c565b848462000bef60201b60201c565b6001905092915050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b62000856620006e960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614620008e8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008df9062001173565b60405180910390fd5b80601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b62000953620006e960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614620009e5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009dc9062001173565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000ab3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000aaa90620011e5565b60405180910390fd5b62000ac76000838362000dc260201b60201c565b62000ae38160025462000dc760201b62001ed31790919060201c565b60028190555062000b41816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000dc760201b62001ed31790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000be3919062001218565b60405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141562000c62576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000c5990620012ab565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000cd5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000ccc9062001343565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405162000db5919062001218565b60405180910390a3505050565b505050565b600080828462000dd89190620010b5565b90508381101562000e20576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000e1790620013b5565b60405180910390fd5b8091505092915050565b82805462000e389062001406565b90600052602060002090601f01602090048101928262000e5c576000855562000ea8565b82601f1062000e7757805160ff191683800117855562000ea8565b8280016001018555821562000ea8579182015b8281111562000ea757825182559160200191906001019062000e8a565b5b50905062000eb7919062000ebb565b5090565b5b8082111562000ed657600081600090555060010162000ebc565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000f0c8262000edf565b9050919050565b62000f1e8162000eff565b811462000f2a57600080fd5b50565b60008151905062000f3e8162000f13565b92915050565b60006020828403121562000f5d5762000f5c62000eda565b5b600062000f6d8482850162000f2d565b91505092915050565b62000f818162000eff565b82525050565b600060408201905062000f9e600083018562000f76565b62000fad602083018462000f76565b9392505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620010298262000fb4565b9150620010368362000fb4565b92508262001049576200104862000fbe565b5b828204905092915050565b6000620010618262000fb4565b91506200106e8362000fb4565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615620010aa57620010a962000fed565b5b828202905092915050565b6000620010c28262000fb4565b9150620010cf8362000fb4565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562001107576200110662000fed565b5b828201905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006200115b60208362001112565b9150620011688262001123565b602082019050919050565b600060208201905081810360008301526200118e816200114c565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000620011cd601f8362001112565b9150620011da8262001195565b602082019050919050565b600060208201905081810360008301526200120081620011be565b9050919050565b620012128162000fb4565b82525050565b60006020820190506200122f600083018462001207565b92915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006200129360248362001112565b9150620012a08262001235565b604082019050919050565b60006020820190508181036000830152620012c68162001284565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006200132b60228362001112565b91506200133882620012cd565b604082019050919050565b600060208201905081810360008301526200135e816200131c565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b60006200139d601b8362001112565b9150620013aa8262001365565b602082019050919050565b60006020820190508181036000830152620013d0816200138e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200141f57607f821691505b60208210811415620014365762001435620013d7565b5b50919050565b60805160a051614ae86200148c60003960008181610f7901526116a5015260008181610cbc0152818161332b0152818161341b01528181613442015281816134de01526135050152614ae86000f3fe60806040526004361061021e5760003560e01c806370a0823111610123578063a457c2d7116100ab578063d212a69a1161006f578063d212a69a14610804578063d257b34f14610834578063dd62ed3e14610871578063e16830a8146108ae578063f2fde38b146108d757610225565b8063a457c2d7146106fb578063a9059cbb14610738578063b62496f514610775578063c0246668146107b2578063c18bc195146107db57610225565b80638da5cb5b116100f25780638da5cb5b14610616578063924de9b71461064157806395d89b411461066a57806396880b17146106955780639a7a23d6146106d257610225565b806370a0823114610582578063715018a6146105bf5780637571336a146105d65780638a8c523c146105ff57610225565b80631f3fed8f116101a65780633950935111610175578063395093511461048957806349bd5a5e146104c65780634fbee193146104f157806366ca9b831461052e5780636ddd17131461055757610225565b80631f3fed8f146103cd57806323b872dd146103f85780632851a5cf14610435578063313ce5671461045e57610225565b806311a582c3116101ed57806311a582c3146102f85780631694505e146103215780631732cded1461034c57806318160ddd146103775780631a8145bb146103a257610225565b806302dbd8f81461022a57806306fdde0314610253578063095ea7b31461027e57806310d5de53146102bb57610225565b3661022557005b600080fd5b34801561023657600080fd5b50610251600480360381019061024c919061365f565b610900565b005b34801561025f57600080fd5b50610268610a17565b6040516102759190613738565b60405180910390f35b34801561028a57600080fd5b506102a560048036038101906102a091906137b8565b610aa9565b6040516102b29190613813565b60405180910390f35b3480156102c757600080fd5b506102e260048036038101906102dd919061382e565b610ac7565b6040516102ef9190613813565b60405180910390f35b34801561030457600080fd5b5061031f600480360381019061031a919061365f565b610ae7565b005b34801561032d57600080fd5b50610336610cba565b60405161034391906138ba565b60405180910390f35b34801561035857600080fd5b50610361610cde565b60405161036e9190613813565b60405180910390f35b34801561038357600080fd5b5061038c610cf1565b60405161039991906138e4565b60405180910390f35b3480156103ae57600080fd5b506103b7610cfb565b6040516103c491906138e4565b60405180910390f35b3480156103d957600080fd5b506103e2610d01565b6040516103ef91906138e4565b60405180910390f35b34801561040457600080fd5b5061041f600480360381019061041a91906138ff565b610d07565b60405161042c9190613813565b60405180910390f35b34801561044157600080fd5b5061045c6004803603810190610457919061382e565b610de0565b005b34801561046a57600080fd5b50610473610ebb565b604051610480919061396e565b60405180910390f35b34801561049557600080fd5b506104b060048036038101906104ab91906137b8565b610ec4565b6040516104bd9190613813565b60405180910390f35b3480156104d257600080fd5b506104db610f77565b6040516104e89190613998565b60405180910390f35b3480156104fd57600080fd5b506105186004803603810190610513919061382e565b610f9b565b6040516105259190613813565b60405180910390f35b34801561053a57600080fd5b506105556004803603810190610550919061365f565b610ff1565b005b34801561056357600080fd5b5061056c611108565b6040516105799190613813565b60405180910390f35b34801561058e57600080fd5b506105a960048036038101906105a4919061382e565b61111b565b6040516105b691906138e4565b60405180910390f35b3480156105cb57600080fd5b506105d4611163565b005b3480156105e257600080fd5b506105fd60048036038101906105f891906139df565b6112bb565b005b34801561060b57600080fd5b506106146113ad565b005b34801561062257600080fd5b5061062b61147c565b6040516106389190613998565b60405180910390f35b34801561064d57600080fd5b5061066860048036038101906106639190613a1f565b6114a6565b005b34801561067657600080fd5b5061067f61155a565b60405161068c9190613738565b60405180910390f35b3480156106a157600080fd5b506106bc60048036038101906106b7919061382e565b6115ec565b6040516106c99190613813565b60405180910390f35b3480156106de57600080fd5b506106f960048036038101906106f491906139df565b61160c565b005b34801561070757600080fd5b50610722600480360381019061071d91906137b8565b61178d565b60405161072f9190613813565b60405180910390f35b34801561074457600080fd5b5061075f600480360381019061075a91906137b8565b61185a565b60405161076c9190613813565b60405180910390f35b34801561078157600080fd5b5061079c6004803603810190610797919061382e565b611878565b6040516107a99190613813565b60405180910390f35b3480156107be57600080fd5b506107d960048036038101906107d491906139df565b611898565b005b3480156107e757600080fd5b5061080260048036038101906107fd9190613a4c565b61198a565b005b34801561081057600080fd5b50610819611ac0565b60405161082b96959493929190613a79565b60405180910390f35b34801561084057600080fd5b5061085b60048036038101906108569190613a4c565b611aea565b6040516108689190613813565b60405180910390f35b34801561087d57600080fd5b5061089860048036038101906108939190613ada565b611b93565b6040516108a591906138e4565b60405180910390f35b3480156108ba57600080fd5b506108d560048036038101906108d091906139df565b611c1a565b005b3480156108e357600080fd5b506108fe60048036038101906108f9919061382e565b611d0c565b005b610908611f31565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610997576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098e90613b66565b60405180910390fd5b81600d6004018190555080600d60050181905550600d60050154600d600401546109c19190613bb5565b600d600301819055506009600d600301541115610a13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a0a90613c57565b60405180910390fd5b5050565b606060038054610a2690613ca6565b80601f0160208091040260200160405190810160405280929190818152602001828054610a5290613ca6565b8015610a9f5780601f10610a7457610100808354040283529160200191610a9f565b820191906000526020600020905b815481529060010190602001808311610a8257829003601f168201915b5050505050905090565b6000610abd610ab6611f31565b8484611f39565b6001905092915050565b60166020528060005260406000206000915054906101000a900460ff1681565b610aef611f31565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7590613b66565b60405180910390fd5b611388610b89610cf1565b610b939190613d07565b6103e883610b9f610cf1565b610ba99190613d38565b610bb39190613d07565b1015610bf4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610beb90613e04565b60405180910390fd5b611388610bff610cf1565b610c099190613d07565b6103e882610c15610cf1565b610c1f9190613d38565b610c299190613d07565b1015610c6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6190613e04565b60405180910390fd5b6103e882610c76610cf1565b610c809190613d38565b610c8a9190613d07565b6007819055506103e881610c9c610cf1565b610ca69190613d38565b610cb09190613d07565b6008819055505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600b60029054906101000a900460ff1681565b6000600254905090565b60145481565b60135481565b6000610d14848484612104565b610dd584610d20611f31565b610dd085604051806060016040528060288152602001614a6660289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610d86611f31565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c729092919063ffffffff16565b611f39565b600190509392505050565b610de8611f31565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6e90613b66565b60405180910390fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60006012905090565b6000610f6d610ed1611f31565b84610f688560016000610ee2611f31565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ed390919063ffffffff16565b611f39565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610ff9611f31565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611088576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107f90613b66565b60405180910390fd5b81600d6001018190555080600d60020181905550600d60020154600d600101546110b29190613bb5565b600d600001819055506009600d600001541115611104576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110fb90613c57565b60405180910390fd5b5050565b600b60019054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61116b611f31565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f190613b66565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6112c3611f31565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611352576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134990613b66565b60405180910390fd5b80601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6113b5611f31565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611444576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143b90613b66565b60405180910390fd5b6001600b60006101000a81548160ff0219169083151502179055506001600b60016101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6114ae611f31565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461153d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153490613b66565b60405180910390fd5b80600b60016101000a81548160ff02191690831515021790555050565b60606004805461156990613ca6565b80601f016020809104026020016040519081016040528092919081815260200182805461159590613ca6565b80156115e25780601f106115b7576101008083540402835291602001916115e2565b820191906000526020600020905b8154815290600101906020018083116115c557829003601f168201915b5050505050905090565b60176020528060005260406000206000915054906101000a900460ff1681565b611614611f31565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169a90613b66565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611732576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172990613e96565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600061185061179a611f31565b8461184b85604051806060016040528060258152602001614a8e60259139600160006117c4611f31565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c729092919063ffffffff16565b611f39565b6001905092915050565b600061186e611867611f31565b8484612104565b6001905092915050565b60186020528060005260406000206000915054906101000a900460ff1681565b6118a0611f31565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461192f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192690613b66565b60405180910390fd5b80601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611992611f31565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1890613b66565b60405180910390fd5b611388611a2c610cf1565b611a369190613d07565b6103e882611a42610cf1565b611a4c9190613d38565b611a569190613d07565b1015611a97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8e90613f28565b60405180910390fd5b6103e881611aa3610cf1565b611aad9190613d38565b611ab79190613d07565b60098190555050565b600d8060000154908060010154908060020154908060030154908060040154908060050154905086565b6000611af4611f31565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7a90613b66565b60405180910390fd5b81600a8190555060019050919050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611c22611f31565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611cb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ca890613b66565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611d14611f31565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611da3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9a90613b66565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611e13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0a90613fba565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000808284611ee29190613bb5565b905083811015611f27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1e90614026565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611fa9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa0906140b8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612019576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120109061414a565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516120f791906138e4565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612174576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216b906141dc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156121e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121db9061426e565b60405180910390fd5b61dead73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612255576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224c90614300565b60405180910390fd5b61dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156122c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122bd90614392565b60405180910390fd5b600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561236a5750600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b6123a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123a090614424565b60405180910390fd5b60008114156123c3576123be83836000612cd6565b612c6d565b6123cb61147c565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612439575061240961147c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156124525750600b60029054906101000a900460ff16155b156127d857600b60009054906101000a900460ff1661254c57601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061250c5750601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61254b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254290614490565b60405180910390fd5b5b601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156125ef5750601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561263e57600754811115612639576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161263090614522565b60405180910390fd5b61272d565b601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156126e15750601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561272c5760085481111561272b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612722906145b4565b60405180910390fd5b5b5b601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166127d75760095461278a8361111b565b826127959190613bb5565b11156127d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127cd90614620565b60405180910390fd5b5b5b60006127e33061111b565b90506000600a5482101590508080156128085750600b60019054906101000a900460ff165b80156128215750600b60029054906101000a900460ff16155b80156128765750601860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80156128cc5750601560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156129225750601560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612966576001600b60026101000a81548160ff02191690831515021790555061294a612f6b565b6000600b60026101000a81548160ff0219169083151502179055505b6000600b60029054906101000a900460ff16159050601560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612a1c5750601560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612a2657600090505b60008115612c5d57601860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612a8c57506000600d60030154115b15612b3557612abc6064612aae600d600301548861317890919063ffffffff16565b6131f390919063ffffffff16565b9050600d60030154600d6005015482612ad59190613d38565b612adf9190613d07565b60146000828254612af09190613bb5565b92505081905550600d60030154600d6004015482612b0e9190613d38565b612b189190613d07565b60136000828254612b299190613bb5565b92505081905550612c39565b601860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612b9357506000600d60000154115b15612c3857612bc36064612bb5600d600001548861317890919063ffffffff16565b6131f390919063ffffffff16565b9050600d60000154600d6002015482612bdc9190613d38565b612be69190613d07565b60146000828254612bf79190613bb5565b92505081905550600d60000154600d6001015482612c159190613d38565b612c1f9190613d07565b60136000828254612c309190613bb5565b925050819055505b5b6000811115612c4e57612c4d873083612cd6565b5b8085612c5a9190614640565b94505b612c68878787612cd6565b505050505b505050565b6000838311158290612cba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cb19190613738565b60405180910390fd5b5060008385612cc99190614640565b9050809150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612d46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d3d906141dc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612db6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dad9061426e565b60405180910390fd5b612dc183838361323d565b612e2c81604051806060016040528060268152602001614a40602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c729092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612ebf816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ed390919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612f5e91906138e4565b60405180910390a3505050565b6000612f763061111b565b90506000601354601454612f8a9190613bb5565b9050600080831480612f9c5750600082145b15612fa957505050613176565b6014600a54612fb89190613d38565b831115612fd1576014600a54612fce9190613d38565b92505b600060028360145486612fe49190613d38565b612fee9190613d07565b612ff89190613d07565b9050600061300f828661324290919063ffffffff16565b9050600047905061301f8261328c565b6000613034824761324290919063ffffffff16565b9050600061305f876130516013548561317890919063ffffffff16565b6131f390919063ffffffff16565b90506000818361306f9190614640565b9050600060148190555060006013819055506000861180156130915750600081115b156130de576130a086826134d8565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56185826014546040516130d593929190614674565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613124906146dc565b60006040518083038185875af1925050503d8060008114613161576040519150601f19603f3d011682016040523d82523d6000602084013e613166565b606091505b5050809750505050505050505050505b565b60008083141561318b57600090506131ed565b600082846131999190613d38565b90508284826131a89190613d07565b146131e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131df90614763565b60405180910390fd5b809150505b92915050565b600061323583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506135c1565b905092915050565b505050565b600061328483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612c72565b905092915050565b6000600267ffffffffffffffff8111156132a9576132a8614783565b5b6040519080825280602002602001820160405280156132d75781602001602082028036833780820191505090505b50905030816000815181106132ef576132ee6147b2565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561338f57600080fd5b505afa1580156133a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133c791906147f6565b816001815181106133db576133da6147b2565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613440307f000000000000000000000000000000000000000000000000000000000000000084611f39565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016134a295949392919061491c565b600060405180830381600087803b1580156134bc57600080fd5b505af11580156134d0573d6000803e3d6000fd5b505050505050565b613503307f000000000000000000000000000000000000000000000000000000000000000084611f39565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008030426040518863ffffffff1660e01b815260040161356896959493929190614976565b6060604051808303818588803b15801561358157600080fd5b505af1158015613595573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906135ba91906149ec565b5050505050565b60008083118290613608576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135ff9190613738565b60405180910390fd5b50600083856136179190613d07565b9050809150509392505050565b600080fd5b6000819050919050565b61363c81613629565b811461364757600080fd5b50565b60008135905061365981613633565b92915050565b6000806040838503121561367657613675613624565b5b60006136848582860161364a565b92505060206136958582860161364a565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b838110156136d95780820151818401526020810190506136be565b838111156136e8576000848401525b50505050565b6000601f19601f8301169050919050565b600061370a8261369f565b61371481856136aa565b93506137248185602086016136bb565b61372d816136ee565b840191505092915050565b6000602082019050818103600083015261375281846136ff565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006137858261375a565b9050919050565b6137958161377a565b81146137a057600080fd5b50565b6000813590506137b28161378c565b92915050565b600080604083850312156137cf576137ce613624565b5b60006137dd858286016137a3565b92505060206137ee8582860161364a565b9150509250929050565b60008115159050919050565b61380d816137f8565b82525050565b60006020820190506138286000830184613804565b92915050565b60006020828403121561384457613843613624565b5b6000613852848285016137a3565b91505092915050565b6000819050919050565b600061388061387b6138768461375a565b61385b565b61375a565b9050919050565b600061389282613865565b9050919050565b60006138a482613887565b9050919050565b6138b481613899565b82525050565b60006020820190506138cf60008301846138ab565b92915050565b6138de81613629565b82525050565b60006020820190506138f960008301846138d5565b92915050565b60008060006060848603121561391857613917613624565b5b6000613926868287016137a3565b9350506020613937868287016137a3565b92505060406139488682870161364a565b9150509250925092565b600060ff82169050919050565b61396881613952565b82525050565b6000602082019050613983600083018461395f565b92915050565b6139928161377a565b82525050565b60006020820190506139ad6000830184613989565b92915050565b6139bc816137f8565b81146139c757600080fd5b50565b6000813590506139d9816139b3565b92915050565b600080604083850312156139f6576139f5613624565b5b6000613a04858286016137a3565b9250506020613a15858286016139ca565b9150509250929050565b600060208284031215613a3557613a34613624565b5b6000613a43848285016139ca565b91505092915050565b600060208284031215613a6257613a61613624565b5b6000613a708482850161364a565b91505092915050565b600060c082019050613a8e60008301896138d5565b613a9b60208301886138d5565b613aa860408301876138d5565b613ab560608301866138d5565b613ac260808301856138d5565b613acf60a08301846138d5565b979650505050505050565b60008060408385031215613af157613af0613624565b5b6000613aff858286016137a3565b9250506020613b10858286016137a3565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613b506020836136aa565b9150613b5b82613b1a565b602082019050919050565b60006020820190508181036000830152613b7f81613b43565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613bc082613629565b9150613bcb83613629565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613c0057613bff613b86565b5b828201905092915050565b7f4d757374206b6565702066656573206174203925206f72206c65737300000000600082015250565b6000613c41601c836136aa565b9150613c4c82613c0b565b602082019050919050565b60006020820190508181036000830152613c7081613c34565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613cbe57607f821691505b60208210811415613cd257613cd1613c77565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613d1282613629565b9150613d1d83613629565b925082613d2d57613d2c613cd8565b5b828204905092915050565b6000613d4382613629565b9150613d4e83613629565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613d8757613d86613b86565b5b828202905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e747360008201527f206c6f776572207468616e20302e352500000000000000000000000000000000602082015250565b6000613dee6030836136aa565b9150613df982613d92565b604082019050919050565b60006020820190508181036000830152613e1d81613de1565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000613e806039836136aa565b9150613e8b82613e24565b604082019050919050565b60006020820190508181036000830152613eaf81613e73565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000613f126024836136aa565b9150613f1d82613eb6565b604082019050919050565b60006020820190508181036000830152613f4181613f05565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613fa46026836136aa565b9150613faf82613f48565b604082019050919050565b60006020820190508181036000830152613fd381613f97565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614010601b836136aa565b915061401b82613fda565b602082019050919050565b6000602082019050818103600083015261403f81614003565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006140a26024836136aa565b91506140ad82614046565b604082019050919050565b600060208201905081810360008301526140d181614095565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006141346022836136aa565b915061413f826140d8565b604082019050919050565b6000602082019050818103600083015261416381614127565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006141c66025836136aa565b91506141d18261416a565b604082019050919050565b600060208201905081810360008301526141f5816141b9565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006142586023836136aa565b9150614263826141fc565b604082019050919050565b600060208201905081810360008301526142878161424b565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865206445614420616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006142ea6025836136aa565b91506142f58261428e565b604082019050919050565b60006020820190508181036000830152614319816142dd565b9050919050565b7f45524332303a207472616e7366657220746f207468652064456144206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061437c6023836136aa565b915061438782614320565b604082019050919050565b600060208201905081810360008301526143ab8161436f565b9050919050565b7f596f752068617665206265656e20626c61636b6c69737465642066726f6d207460008201527f72616e73666572696e6720746f6b656e73000000000000000000000000000000602082015250565b600061440e6031836136aa565b9150614419826143b2565b604082019050919050565b6000602082019050818103600083015261443d81614401565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b600061447a6016836136aa565b915061448582614444565b602082019050919050565b600060208201905081810360008301526144a98161446d565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b600061450c6035836136aa565b9150614517826144b0565b604082019050919050565b6000602082019050818103600083015261453b816144ff565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b600061459e6036836136aa565b91506145a982614542565b604082019050919050565b600060208201905081810360008301526145cd81614591565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b600061460a6013836136aa565b9150614615826145d4565b602082019050919050565b60006020820190508181036000830152614639816145fd565b9050919050565b600061464b82613629565b915061465683613629565b92508282101561466957614668613b86565b5b828203905092915050565b600060608201905061468960008301866138d5565b61469660208301856138d5565b6146a360408301846138d5565b949350505050565b600081905092915050565b50565b60006146c66000836146ab565b91506146d1826146b6565b600082019050919050565b60006146e7826146b9565b9150819050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b600061474d6021836136aa565b9150614758826146f1565b604082019050919050565b6000602082019050818103600083015261477c81614740565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506147f08161378c565b92915050565b60006020828403121561480c5761480b613624565b5b600061481a848285016147e1565b91505092915050565b6000819050919050565b600061484861484361483e84614823565b61385b565b613629565b9050919050565b6148588161482d565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6148938161377a565b82525050565b60006148a5838361488a565b60208301905092915050565b6000602082019050919050565b60006148c98261485e565b6148d38185614869565b93506148de8361487a565b8060005b8381101561490f5781516148f68882614899565b9750614901836148b1565b9250506001810190506148e2565b5085935050505092915050565b600060a08201905061493160008301886138d5565b61493e602083018761484f565b818103604083015261495081866148be565b905061495f6060830185613989565b61496c60808301846138d5565b9695505050505050565b600060c08201905061498b6000830189613989565b61499860208301886138d5565b6149a5604083018761484f565b6149b2606083018661484f565b6149bf6080830185613989565b6149cc60a08301846138d5565b979650505050505050565b6000815190506149e681613633565b92915050565b600080600060608486031215614a0557614a04613624565b5b6000614a13868287016149d7565b9350506020614a24868287016149d7565b9250506040614a35868287016149d7565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212204bfa42cf345825df90d387c163ecaef281118e01fb5381572784f0c935fe94f564736f6c63430008090033

Deployed Bytecode

0x60806040526004361061021e5760003560e01c806370a0823111610123578063a457c2d7116100ab578063d212a69a1161006f578063d212a69a14610804578063d257b34f14610834578063dd62ed3e14610871578063e16830a8146108ae578063f2fde38b146108d757610225565b8063a457c2d7146106fb578063a9059cbb14610738578063b62496f514610775578063c0246668146107b2578063c18bc195146107db57610225565b80638da5cb5b116100f25780638da5cb5b14610616578063924de9b71461064157806395d89b411461066a57806396880b17146106955780639a7a23d6146106d257610225565b806370a0823114610582578063715018a6146105bf5780637571336a146105d65780638a8c523c146105ff57610225565b80631f3fed8f116101a65780633950935111610175578063395093511461048957806349bd5a5e146104c65780634fbee193146104f157806366ca9b831461052e5780636ddd17131461055757610225565b80631f3fed8f146103cd57806323b872dd146103f85780632851a5cf14610435578063313ce5671461045e57610225565b806311a582c3116101ed57806311a582c3146102f85780631694505e146103215780631732cded1461034c57806318160ddd146103775780631a8145bb146103a257610225565b806302dbd8f81461022a57806306fdde0314610253578063095ea7b31461027e57806310d5de53146102bb57610225565b3661022557005b600080fd5b34801561023657600080fd5b50610251600480360381019061024c919061365f565b610900565b005b34801561025f57600080fd5b50610268610a17565b6040516102759190613738565b60405180910390f35b34801561028a57600080fd5b506102a560048036038101906102a091906137b8565b610aa9565b6040516102b29190613813565b60405180910390f35b3480156102c757600080fd5b506102e260048036038101906102dd919061382e565b610ac7565b6040516102ef9190613813565b60405180910390f35b34801561030457600080fd5b5061031f600480360381019061031a919061365f565b610ae7565b005b34801561032d57600080fd5b50610336610cba565b60405161034391906138ba565b60405180910390f35b34801561035857600080fd5b50610361610cde565b60405161036e9190613813565b60405180910390f35b34801561038357600080fd5b5061038c610cf1565b60405161039991906138e4565b60405180910390f35b3480156103ae57600080fd5b506103b7610cfb565b6040516103c491906138e4565b60405180910390f35b3480156103d957600080fd5b506103e2610d01565b6040516103ef91906138e4565b60405180910390f35b34801561040457600080fd5b5061041f600480360381019061041a91906138ff565b610d07565b60405161042c9190613813565b60405180910390f35b34801561044157600080fd5b5061045c6004803603810190610457919061382e565b610de0565b005b34801561046a57600080fd5b50610473610ebb565b604051610480919061396e565b60405180910390f35b34801561049557600080fd5b506104b060048036038101906104ab91906137b8565b610ec4565b6040516104bd9190613813565b60405180910390f35b3480156104d257600080fd5b506104db610f77565b6040516104e89190613998565b60405180910390f35b3480156104fd57600080fd5b506105186004803603810190610513919061382e565b610f9b565b6040516105259190613813565b60405180910390f35b34801561053a57600080fd5b506105556004803603810190610550919061365f565b610ff1565b005b34801561056357600080fd5b5061056c611108565b6040516105799190613813565b60405180910390f35b34801561058e57600080fd5b506105a960048036038101906105a4919061382e565b61111b565b6040516105b691906138e4565b60405180910390f35b3480156105cb57600080fd5b506105d4611163565b005b3480156105e257600080fd5b506105fd60048036038101906105f891906139df565b6112bb565b005b34801561060b57600080fd5b506106146113ad565b005b34801561062257600080fd5b5061062b61147c565b6040516106389190613998565b60405180910390f35b34801561064d57600080fd5b5061066860048036038101906106639190613a1f565b6114a6565b005b34801561067657600080fd5b5061067f61155a565b60405161068c9190613738565b60405180910390f35b3480156106a157600080fd5b506106bc60048036038101906106b7919061382e565b6115ec565b6040516106c99190613813565b60405180910390f35b3480156106de57600080fd5b506106f960048036038101906106f491906139df565b61160c565b005b34801561070757600080fd5b50610722600480360381019061071d91906137b8565b61178d565b60405161072f9190613813565b60405180910390f35b34801561074457600080fd5b5061075f600480360381019061075a91906137b8565b61185a565b60405161076c9190613813565b60405180910390f35b34801561078157600080fd5b5061079c6004803603810190610797919061382e565b611878565b6040516107a99190613813565b60405180910390f35b3480156107be57600080fd5b506107d960048036038101906107d491906139df565b611898565b005b3480156107e757600080fd5b5061080260048036038101906107fd9190613a4c565b61198a565b005b34801561081057600080fd5b50610819611ac0565b60405161082b96959493929190613a79565b60405180910390f35b34801561084057600080fd5b5061085b60048036038101906108569190613a4c565b611aea565b6040516108689190613813565b60405180910390f35b34801561087d57600080fd5b5061089860048036038101906108939190613ada565b611b93565b6040516108a591906138e4565b60405180910390f35b3480156108ba57600080fd5b506108d560048036038101906108d091906139df565b611c1a565b005b3480156108e357600080fd5b506108fe60048036038101906108f9919061382e565b611d0c565b005b610908611f31565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610997576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098e90613b66565b60405180910390fd5b81600d6004018190555080600d60050181905550600d60050154600d600401546109c19190613bb5565b600d600301819055506009600d600301541115610a13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a0a90613c57565b60405180910390fd5b5050565b606060038054610a2690613ca6565b80601f0160208091040260200160405190810160405280929190818152602001828054610a5290613ca6565b8015610a9f5780601f10610a7457610100808354040283529160200191610a9f565b820191906000526020600020905b815481529060010190602001808311610a8257829003601f168201915b5050505050905090565b6000610abd610ab6611f31565b8484611f39565b6001905092915050565b60166020528060005260406000206000915054906101000a900460ff1681565b610aef611f31565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7590613b66565b60405180910390fd5b611388610b89610cf1565b610b939190613d07565b6103e883610b9f610cf1565b610ba99190613d38565b610bb39190613d07565b1015610bf4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610beb90613e04565b60405180910390fd5b611388610bff610cf1565b610c099190613d07565b6103e882610c15610cf1565b610c1f9190613d38565b610c299190613d07565b1015610c6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6190613e04565b60405180910390fd5b6103e882610c76610cf1565b610c809190613d38565b610c8a9190613d07565b6007819055506103e881610c9c610cf1565b610ca69190613d38565b610cb09190613d07565b6008819055505050565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b600b60029054906101000a900460ff1681565b6000600254905090565b60145481565b60135481565b6000610d14848484612104565b610dd584610d20611f31565b610dd085604051806060016040528060288152602001614a6660289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610d86611f31565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c729092919063ffffffff16565b611f39565b600190509392505050565b610de8611f31565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6e90613b66565b60405180910390fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60006012905090565b6000610f6d610ed1611f31565b84610f688560016000610ee2611f31565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ed390919063ffffffff16565b611f39565b6001905092915050565b7f000000000000000000000000533c53df6a498f1a5a37000ad04e51df9819f6a081565b6000601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610ff9611f31565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611088576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107f90613b66565b60405180910390fd5b81600d6001018190555080600d60020181905550600d60020154600d600101546110b29190613bb5565b600d600001819055506009600d600001541115611104576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110fb90613c57565b60405180910390fd5b5050565b600b60019054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61116b611f31565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f190613b66565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6112c3611f31565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611352576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134990613b66565b60405180910390fd5b80601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6113b5611f31565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611444576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143b90613b66565b60405180910390fd5b6001600b60006101000a81548160ff0219169083151502179055506001600b60016101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6114ae611f31565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461153d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153490613b66565b60405180910390fd5b80600b60016101000a81548160ff02191690831515021790555050565b60606004805461156990613ca6565b80601f016020809104026020016040519081016040528092919081815260200182805461159590613ca6565b80156115e25780601f106115b7576101008083540402835291602001916115e2565b820191906000526020600020905b8154815290600101906020018083116115c557829003601f168201915b5050505050905090565b60176020528060005260406000206000915054906101000a900460ff1681565b611614611f31565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169a90613b66565b60405180910390fd5b7f000000000000000000000000533c53df6a498f1a5a37000ad04e51df9819f6a073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611732576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172990613e96565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600061185061179a611f31565b8461184b85604051806060016040528060258152602001614a8e60259139600160006117c4611f31565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c729092919063ffffffff16565b611f39565b6001905092915050565b600061186e611867611f31565b8484612104565b6001905092915050565b60186020528060005260406000206000915054906101000a900460ff1681565b6118a0611f31565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461192f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192690613b66565b60405180910390fd5b80601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611992611f31565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1890613b66565b60405180910390fd5b611388611a2c610cf1565b611a369190613d07565b6103e882611a42610cf1565b611a4c9190613d38565b611a569190613d07565b1015611a97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8e90613f28565b60405180910390fd5b6103e881611aa3610cf1565b611aad9190613d38565b611ab79190613d07565b60098190555050565b600d8060000154908060010154908060020154908060030154908060040154908060050154905086565b6000611af4611f31565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7a90613b66565b60405180910390fd5b81600a8190555060019050919050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611c22611f31565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611cb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ca890613b66565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611d14611f31565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611da3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9a90613b66565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611e13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0a90613fba565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000808284611ee29190613bb5565b905083811015611f27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1e90614026565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611fa9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa0906140b8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612019576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120109061414a565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516120f791906138e4565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612174576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216b906141dc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156121e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121db9061426e565b60405180910390fd5b61dead73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612255576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224c90614300565b60405180910390fd5b61dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156122c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122bd90614392565b60405180910390fd5b600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561236a5750600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b6123a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123a090614424565b60405180910390fd5b60008114156123c3576123be83836000612cd6565b612c6d565b6123cb61147c565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612439575061240961147c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156124525750600b60029054906101000a900460ff16155b156127d857600b60009054906101000a900460ff1661254c57601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061250c5750601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61254b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254290614490565b60405180910390fd5b5b601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156125ef5750601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561263e57600754811115612639576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161263090614522565b60405180910390fd5b61272d565b601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156126e15750601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561272c5760085481111561272b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612722906145b4565b60405180910390fd5b5b5b601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166127d75760095461278a8361111b565b826127959190613bb5565b11156127d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127cd90614620565b60405180910390fd5b5b5b60006127e33061111b565b90506000600a5482101590508080156128085750600b60019054906101000a900460ff165b80156128215750600b60029054906101000a900460ff16155b80156128765750601860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80156128cc5750601560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156129225750601560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612966576001600b60026101000a81548160ff02191690831515021790555061294a612f6b565b6000600b60026101000a81548160ff0219169083151502179055505b6000600b60029054906101000a900460ff16159050601560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612a1c5750601560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612a2657600090505b60008115612c5d57601860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612a8c57506000600d60030154115b15612b3557612abc6064612aae600d600301548861317890919063ffffffff16565b6131f390919063ffffffff16565b9050600d60030154600d6005015482612ad59190613d38565b612adf9190613d07565b60146000828254612af09190613bb5565b92505081905550600d60030154600d6004015482612b0e9190613d38565b612b189190613d07565b60136000828254612b299190613bb5565b92505081905550612c39565b601860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612b9357506000600d60000154115b15612c3857612bc36064612bb5600d600001548861317890919063ffffffff16565b6131f390919063ffffffff16565b9050600d60000154600d6002015482612bdc9190613d38565b612be69190613d07565b60146000828254612bf79190613bb5565b92505081905550600d60000154600d6001015482612c159190613d38565b612c1f9190613d07565b60136000828254612c309190613bb5565b925050819055505b5b6000811115612c4e57612c4d873083612cd6565b5b8085612c5a9190614640565b94505b612c68878787612cd6565b505050505b505050565b6000838311158290612cba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cb19190613738565b60405180910390fd5b5060008385612cc99190614640565b9050809150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612d46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d3d906141dc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612db6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dad9061426e565b60405180910390fd5b612dc183838361323d565b612e2c81604051806060016040528060268152602001614a40602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c729092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612ebf816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ed390919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612f5e91906138e4565b60405180910390a3505050565b6000612f763061111b565b90506000601354601454612f8a9190613bb5565b9050600080831480612f9c5750600082145b15612fa957505050613176565b6014600a54612fb89190613d38565b831115612fd1576014600a54612fce9190613d38565b92505b600060028360145486612fe49190613d38565b612fee9190613d07565b612ff89190613d07565b9050600061300f828661324290919063ffffffff16565b9050600047905061301f8261328c565b6000613034824761324290919063ffffffff16565b9050600061305f876130516013548561317890919063ffffffff16565b6131f390919063ffffffff16565b90506000818361306f9190614640565b9050600060148190555060006013819055506000861180156130915750600081115b156130de576130a086826134d8565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56185826014546040516130d593929190614674565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613124906146dc565b60006040518083038185875af1925050503d8060008114613161576040519150601f19603f3d011682016040523d82523d6000602084013e613166565b606091505b5050809750505050505050505050505b565b60008083141561318b57600090506131ed565b600082846131999190613d38565b90508284826131a89190613d07565b146131e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131df90614763565b60405180910390fd5b809150505b92915050565b600061323583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506135c1565b905092915050565b505050565b600061328483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612c72565b905092915050565b6000600267ffffffffffffffff8111156132a9576132a8614783565b5b6040519080825280602002602001820160405280156132d75781602001602082028036833780820191505090505b50905030816000815181106132ef576132ee6147b2565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561338f57600080fd5b505afa1580156133a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133c791906147f6565b816001815181106133db576133da6147b2565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613440307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611f39565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016134a295949392919061491c565b600060405180830381600087803b1580156134bc57600080fd5b505af11580156134d0573d6000803e3d6000fd5b505050505050565b613503307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611f39565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008030426040518863ffffffff1660e01b815260040161356896959493929190614976565b6060604051808303818588803b15801561358157600080fd5b505af1158015613595573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906135ba91906149ec565b5050505050565b60008083118290613608576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135ff9190613738565b60405180910390fd5b50600083856136179190613d07565b9050809150509392505050565b600080fd5b6000819050919050565b61363c81613629565b811461364757600080fd5b50565b60008135905061365981613633565b92915050565b6000806040838503121561367657613675613624565b5b60006136848582860161364a565b92505060206136958582860161364a565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b838110156136d95780820151818401526020810190506136be565b838111156136e8576000848401525b50505050565b6000601f19601f8301169050919050565b600061370a8261369f565b61371481856136aa565b93506137248185602086016136bb565b61372d816136ee565b840191505092915050565b6000602082019050818103600083015261375281846136ff565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006137858261375a565b9050919050565b6137958161377a565b81146137a057600080fd5b50565b6000813590506137b28161378c565b92915050565b600080604083850312156137cf576137ce613624565b5b60006137dd858286016137a3565b92505060206137ee8582860161364a565b9150509250929050565b60008115159050919050565b61380d816137f8565b82525050565b60006020820190506138286000830184613804565b92915050565b60006020828403121561384457613843613624565b5b6000613852848285016137a3565b91505092915050565b6000819050919050565b600061388061387b6138768461375a565b61385b565b61375a565b9050919050565b600061389282613865565b9050919050565b60006138a482613887565b9050919050565b6138b481613899565b82525050565b60006020820190506138cf60008301846138ab565b92915050565b6138de81613629565b82525050565b60006020820190506138f960008301846138d5565b92915050565b60008060006060848603121561391857613917613624565b5b6000613926868287016137a3565b9350506020613937868287016137a3565b92505060406139488682870161364a565b9150509250925092565b600060ff82169050919050565b61396881613952565b82525050565b6000602082019050613983600083018461395f565b92915050565b6139928161377a565b82525050565b60006020820190506139ad6000830184613989565b92915050565b6139bc816137f8565b81146139c757600080fd5b50565b6000813590506139d9816139b3565b92915050565b600080604083850312156139f6576139f5613624565b5b6000613a04858286016137a3565b9250506020613a15858286016139ca565b9150509250929050565b600060208284031215613a3557613a34613624565b5b6000613a43848285016139ca565b91505092915050565b600060208284031215613a6257613a61613624565b5b6000613a708482850161364a565b91505092915050565b600060c082019050613a8e60008301896138d5565b613a9b60208301886138d5565b613aa860408301876138d5565b613ab560608301866138d5565b613ac260808301856138d5565b613acf60a08301846138d5565b979650505050505050565b60008060408385031215613af157613af0613624565b5b6000613aff858286016137a3565b9250506020613b10858286016137a3565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613b506020836136aa565b9150613b5b82613b1a565b602082019050919050565b60006020820190508181036000830152613b7f81613b43565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613bc082613629565b9150613bcb83613629565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613c0057613bff613b86565b5b828201905092915050565b7f4d757374206b6565702066656573206174203925206f72206c65737300000000600082015250565b6000613c41601c836136aa565b9150613c4c82613c0b565b602082019050919050565b60006020820190508181036000830152613c7081613c34565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613cbe57607f821691505b60208210811415613cd257613cd1613c77565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613d1282613629565b9150613d1d83613629565b925082613d2d57613d2c613cd8565b5b828204905092915050565b6000613d4382613629565b9150613d4e83613629565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613d8757613d86613b86565b5b828202905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e747360008201527f206c6f776572207468616e20302e352500000000000000000000000000000000602082015250565b6000613dee6030836136aa565b9150613df982613d92565b604082019050919050565b60006020820190508181036000830152613e1d81613de1565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000613e806039836136aa565b9150613e8b82613e24565b604082019050919050565b60006020820190508181036000830152613eaf81613e73565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000613f126024836136aa565b9150613f1d82613eb6565b604082019050919050565b60006020820190508181036000830152613f4181613f05565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613fa46026836136aa565b9150613faf82613f48565b604082019050919050565b60006020820190508181036000830152613fd381613f97565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614010601b836136aa565b915061401b82613fda565b602082019050919050565b6000602082019050818103600083015261403f81614003565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006140a26024836136aa565b91506140ad82614046565b604082019050919050565b600060208201905081810360008301526140d181614095565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006141346022836136aa565b915061413f826140d8565b604082019050919050565b6000602082019050818103600083015261416381614127565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006141c66025836136aa565b91506141d18261416a565b604082019050919050565b600060208201905081810360008301526141f5816141b9565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006142586023836136aa565b9150614263826141fc565b604082019050919050565b600060208201905081810360008301526142878161424b565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865206445614420616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006142ea6025836136aa565b91506142f58261428e565b604082019050919050565b60006020820190508181036000830152614319816142dd565b9050919050565b7f45524332303a207472616e7366657220746f207468652064456144206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061437c6023836136aa565b915061438782614320565b604082019050919050565b600060208201905081810360008301526143ab8161436f565b9050919050565b7f596f752068617665206265656e20626c61636b6c69737465642066726f6d207460008201527f72616e73666572696e6720746f6b656e73000000000000000000000000000000602082015250565b600061440e6031836136aa565b9150614419826143b2565b604082019050919050565b6000602082019050818103600083015261443d81614401565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b600061447a6016836136aa565b915061448582614444565b602082019050919050565b600060208201905081810360008301526144a98161446d565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b600061450c6035836136aa565b9150614517826144b0565b604082019050919050565b6000602082019050818103600083015261453b816144ff565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b600061459e6036836136aa565b91506145a982614542565b604082019050919050565b600060208201905081810360008301526145cd81614591565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b600061460a6013836136aa565b9150614615826145d4565b602082019050919050565b60006020820190508181036000830152614639816145fd565b9050919050565b600061464b82613629565b915061465683613629565b92508282101561466957614668613b86565b5b828203905092915050565b600060608201905061468960008301866138d5565b61469660208301856138d5565b6146a360408301846138d5565b949350505050565b600081905092915050565b50565b60006146c66000836146ab565b91506146d1826146b6565b600082019050919050565b60006146e7826146b9565b9150819050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b600061474d6021836136aa565b9150614758826146f1565b604082019050919050565b6000602082019050818103600083015261477c81614740565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506147f08161378c565b92915050565b60006020828403121561480c5761480b613624565b5b600061481a848285016147e1565b91505092915050565b6000819050919050565b600061484861484361483e84614823565b61385b565b613629565b9050919050565b6148588161482d565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6148938161377a565b82525050565b60006148a5838361488a565b60208301905092915050565b6000602082019050919050565b60006148c98261485e565b6148d38185614869565b93506148de8361487a565b8060005b8381101561490f5781516148f68882614899565b9750614901836148b1565b9250506001810190506148e2565b5085935050505092915050565b600060a08201905061493160008301886138d5565b61493e602083018761484f565b818103604083015261495081866148be565b905061495f6060830185613989565b61496c60808301846138d5565b9695505050505050565b600060c08201905061498b6000830189613989565b61499860208301886138d5565b6149a5604083018761484f565b6149b2606083018661484f565b6149bf6080830185613989565b6149cc60a08301846138d5565b979650505050505050565b6000815190506149e681613633565b92915050565b600080600060608486031215614a0557614a04613624565b5b6000614a13868287016149d7565b9350506020614a24868287016149d7565b9250506040614a35868287016149d7565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212204bfa42cf345825df90d387c163ecaef281118e01fb5381572784f0c935fe94f564736f6c63430008090033

Deployed Bytecode Sourcemap

28114:12853:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33733:351;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6693:99;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8853:168;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29406:63;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32355:543;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28188:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28643:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7810:107;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29250:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29210;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9503:354;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34792:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7653:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10266:217;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28246:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34924:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33381:344;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28605:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7980:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21138:148;;;;;;;;;;;;;:::i;:::-;;34388:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32003:112;;;;;;;;;;;;;:::i;:::-;;20497:78;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33272:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6911:103;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29476:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34542:240;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10986:268;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8319:174;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29692:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34098:132;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32908:268;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28983:206;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;32189:156;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8556:150;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34236:146;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21441:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33733:351;20718:12;:10;:12::i;:::-;20708:22;;:6;;;;;;;;;;;:22;;;20700:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33858:13:::1;33833:5;:22;;:38;;;;33907:13;33882:5;:22;;:38;;;;33978:5;:22;;;33953:5;:22;;;:47;;;;:::i;:::-;33931:5;:19;;:69;;;;34042:1;34019:5;:19;;;:24;;34011:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;33733:351:::0;;:::o;6693:99::-;6746:13;6779:5;6772:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6693:99;:::o;8853:168::-;8935:4;8952:39;8961:12;:10;:12::i;:::-;8975:7;8984:6;8952:8;:39::i;:::-;9009:4;9002:11;;8853:168;;;;:::o;29406:63::-;;;;;;;;;;;;;;;;;;;;;;:::o;32355:543::-;20718:12;:10;:12::i;:::-;20708:22;;:6;;;;;;;;;;;:22;;;20700:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;32535:4:::1;32519:13;:11;:13::i;:::-;:20;;;;:::i;:::-;32509:4;32490:15;32474:13;:11;:13::i;:::-;:31;;;;:::i;:::-;32473:40;;;;:::i;:::-;32472:68;;32464:129;;;;;;;;;;;;:::i;:::-;;;;;;;;;32676:4;32660:13;:11;:13::i;:::-;:20;;;;:::i;:::-;32650:4;32630:16;32614:13;:11;:13::i;:::-;:32;;;;:::i;:::-;32613:41;;;;:::i;:::-;32612:69;;32604:130;;;;;;;;;;;;:::i;:::-;;;;;;;;;32807:4;32788:15;32772:13;:11;:13::i;:::-;:31;;;;:::i;:::-;32771:40;;;;:::i;:::-;32745:23;:66;;;;32886:4;32866:16;32850:13;:11;:13::i;:::-;:32;;;;:::i;:::-;32849:41;;;;:::i;:::-;32822:24;:68;;;;32355:543:::0;;:::o;28188:51::-;;;:::o;28643:20::-;;;;;;;;;;;;;:::o;7810:107::-;7870:7;7897:12;;7890:19;;7810:107;:::o;29250:33::-;;;;:::o;29210:::-;;;;:::o;9503:354::-;9642:4;9659:36;9669:6;9677:9;9688:6;9659:9;:36::i;:::-;9706:121;9715:6;9723:12;:10;:12::i;:::-;9737:89;9775:6;9737:89;;;;;;;;;;;;;;;;;:11;:19;9749:6;9737:19;;;;;;;;;;;;;;;:33;9757:12;:10;:12::i;:::-;9737:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;9706:8;:121::i;:::-;9845:4;9838:11;;9503:354;;;;;:::o;34792:124::-;20718:12;:10;:12::i;:::-;20708:22;;:6;;;;;;;;;;;:22;;;20700:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34890:18:::1;34872:15;;:36;;;;;;;;;;;;;;;;;;34792:124:::0;:::o;7653:92::-;7710:5;7735:2;7728:9;;7653:92;:::o;10266:217::-;10353:4;10370:83;10379:12;:10;:12::i;:::-;10393:7;10402:50;10441:10;10402:11;:25;10414:12;:10;:12::i;:::-;10402:25;;;;;;;;;;;;;;;:34;10428:7;10402:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;10370:8;:83::i;:::-;10471:4;10464:11;;10266:217;;;;:::o;28246:38::-;;;:::o;34924:125::-;34989:4;35013:19;:28;35033:7;35013:28;;;;;;;;;;;;;;;;;;;;;;;;;35006:35;;34924:125;;;:::o;33381:344::-;20718:12;:10;:12::i;:::-;20708:22;;:6;;;;;;;;;;;:22;;;20700:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33504:13:::1;33480:5;:21;;:37;;;;33552:13;33528:5;:21;;:37;;;;33621:5;:21;;;33597:5;:21;;;:45;;;;:::i;:::-;33576:5;:18;;:66;;;;33683:1;33661:5;:18;;;:23;;33653:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;33381:344:::0;;:::o;28605:31::-;;;;;;;;;;;;;:::o;7980:126::-;8053:7;8080:9;:18;8090:7;8080:18;;;;;;;;;;;;;;;;8073:25;;7980:126;;;:::o;21138:148::-;20718:12;:10;:12::i;:::-;20708:22;;:6;;;;;;;;;;;:22;;;20700:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21245:1:::1;21208:40;;21229:6;;;;;;;;;;;21208:40;;;;;;;;;;;;21276:1;21259:6;;:19;;;;;;;;;;;;;;;;;;21138:148::o:0;34388:144::-;20718:12;:10;:12::i;:::-;20708:22;;:6;;;;;;;;;;;:22;;;20700:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34520:4:::1;34478:31;:39;34510:6;34478:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;34388:144:::0;;:::o;32003:112::-;20718:12;:10;:12::i;:::-;20708:22;;:6;;;;;;;;;;;:22;;;20700:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;32074:4:::1;32058:13;;:20;;;;;;;;;;;;;;;;;;32103:4;32089:11;;:18;;;;;;;;;;;;;;;;;;32003:112::o:0;20497:78::-;20534:7;20561:6;;;;;;;;;;;20554:13;;20497:78;:::o;33272:101::-;20718:12;:10;:12::i;:::-;20708:22;;:6;;;;;;;;;;;:22;;;20700:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33358:7:::1;33344:11;;:21;;;;;;;;;;;;;;;;;;33272:101:::0;:::o;6911:103::-;6966:13;6999:7;6992:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6911:103;:::o;29476:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;34542:240::-;20718:12;:10;:12::i;:::-;20708:22;;:6;;;;;;;;;;;:22;;;20700:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34649:13:::1;34641:21;;:4;:21;;;;34633:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;34769:5;34735:25;:31;34761:4;34735:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;34542:240:::0;;:::o;10986:268::-;11078:4;11095:129;11104:12;:10;:12::i;:::-;11118:7;11127:96;11166:15;11127:96;;;;;;;;;;;;;;;;;:11;:25;11139:12;:10;:12::i;:::-;11127:25;;;;;;;;;;;;;;;:34;11153:7;11127:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;11095:8;:129::i;:::-;11242:4;11235:11;;10986:268;;;;:::o;8319:174::-;8404:4;8421:42;8431:12;:10;:12::i;:::-;8445:9;8456:6;8421:9;:42::i;:::-;8481:4;8474:11;;8319:174;;;;:::o;29692:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;34098:132::-;20718:12;:10;:12::i;:::-;20708:22;;:6;;;;;;;;;;;:22;;;20700:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34214:8:::1;34183:19;:28;34203:7;34183:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;34098:132:::0;;:::o;32908:268::-;20718:12;:10;:12::i;:::-;20708:22;;:6;;;;;;;;;;;:22;;;20700:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33061:4:::1;33045:13;:11;:13::i;:::-;:20;;;;:::i;:::-;33035:4;33018:13;33002;:11;:13::i;:::-;:29;;;;:::i;:::-;33001:38;;;;:::i;:::-;33000:66;;32992:115;;;;;;;;;;;;:::i;:::-;;;;;;;;;33164:4;33147:13;33131;:11;:13::i;:::-;:29;;;;:::i;:::-;33130:38;;;;:::i;:::-;33118:9;:50;;;;32908:268:::0;:::o;28983:206::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;32189:156::-;32269:4;20718:12;:10;:12::i;:::-;20708:22;;:6;;;;;;;;;;;:22;;;20700:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;32306:9:::1;32285:18;:30;;;;32333:4;32326:11;;32189:156:::0;;;:::o;8556:150::-;8644:7;8671:11;:18;8683:5;8671:18;;;;;;;;;;;;;;;:27;8690:7;8671:27;;;;;;;;;;;;;;;;8664:34;;8556:150;;;;:::o;34236:146::-;20718:12;:10;:12::i;:::-;20708:22;;:6;;;;;;;;;;;:22;;;20700:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34366:8:::1;34328:26;:35;34355:7;34328:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;34236:146:::0;;:::o;21441:244::-;20718:12;:10;:12::i;:::-;20708:22;;:6;;;;;;;;;;;:22;;;20700:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21550:1:::1;21530:22;;:8;:22;;;;21522:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;21640:8;21611:38;;21632:6;;;;;;;;;;;21611:38;;;;;;;;;;;;21669:8;21660:6;;:17;;;;;;;;;;;;;;;;;;21441:244:::0;:::o;15551:180::-;15608:7;15628:9;15644:1;15640;:5;;;;:::i;:::-;15628:17;;15669:1;15664;:6;;15656:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;15722:1;15715:8;;;15551:180;;;;:::o;95:97::-;147:7;174:10;167:17;;95:97;:::o;14171:380::-;14324:1;14307:19;;:5;:19;;;;14299:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14405:1;14386:21;;:7;:21;;;;14378:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14489:6;14459:11;:18;14471:5;14459:18;;;;;;;;;;;;;;;:27;14478:7;14459:27;;;;;;;;;;;;;;;:36;;;;14527:7;14511:32;;14520:5;14511:32;;;14536:6;14511:32;;;;;;:::i;:::-;;;;;;;;14171:380;;;:::o;35057:3399::-;35205:1;35189:18;;:4;:18;;;;35181:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35282:1;35268:16;;:2;:16;;;;35260:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;35359:6;35343:23;;:4;:23;;;;35335:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;35441:6;35427:21;;:2;:21;;;;35419:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;35508:10;:14;35519:2;35508:14;;;;;;;;;;;;;;;;;;;;;;;;;35507:15;:36;;;;;35527:10;:16;35538:4;35527:16;;;;;;;;;;;;;;;;;;;;;;;;;35526:17;35507:36;35499:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;35632:1;35622:6;:11;35618:93;;;35650:28;35666:4;35672:2;35676:1;35650:15;:28::i;:::-;35693:7;;35618:93;35749:7;:5;:7::i;:::-;35741:15;;:4;:15;;;;:45;;;;;35779:7;:5;:7::i;:::-;35773:13;;:2;:13;;;;35741:45;:71;;;;;35804:8;;;;;;;;;;;35803:9;35741:71;35723:932;;;35844:13;;;;;;;;;;;35839:142;;35886:19;:25;35906:4;35886:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;35915:19;:23;35935:2;35915:23;;;;;;;;;;;;;;;;;;;;;;;;;35886:52;35878:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;35839:142;36025:25;:31;36051:4;36025:31;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;36061:31;:35;36093:2;36061:35;;;;;;;;;;;;;;;;;;;;;;;;;36060:36;36025:71;36021:470;;;36135:23;;36125:6;:33;;36117:99;;;;;;;;;;;;:::i;:::-;;;;;;;;;36021:470;;;36282:25;:29;36308:2;36282:29;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;36316:31;:37;36348:4;36316:37;;;;;;;;;;;;;;;;;;;;;;;;;36315:38;36282:71;36278:213;;;36392:24;;36382:6;:34;;36374:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;36278:213;36021:470;36510:26;:30;36537:2;36510:30;;;;;;;;;;;;;;;;;;;;;;;;;36505:139;;36595:9;;36578:13;36588:2;36578:9;:13::i;:::-;36569:6;:22;;;;:::i;:::-;:35;;36561:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36505:139;35723:932;36681:28;36712:24;36730:4;36712:9;:24::i;:::-;36681:55;;36750:12;36789:18;;36765:20;:42;;36750:57;;36838:7;:35;;;;;36862:11;;;;;;;;;;;36838:35;:61;;;;;36891:8;;;;;;;;;;;36890:9;36838:61;:107;;;;;36916:25;:29;36942:2;36916:29;;;;;;;;;;;;;;;;;;;;;;;;;36838:107;:150;;;;;36963:19;:25;36983:4;36963:25;;;;;;;;;;;;;;;;;;;;;;;;;36962:26;36838:150;:191;;;;;37006:19;:23;37026:2;37006:23;;;;;;;;;;;;;;;;;;;;;;;;;37005:24;36838:191;36820:323;;;37067:4;37056:8;;:15;;;;;;;;;;;;;;;;;;37088:10;:8;:10::i;:::-;37126:5;37115:8;;:16;;;;;;;;;;;;;;;;;;36820:323;37156:12;37172:8;;;;;;;;;;;37171:9;37156:24;;37282:19;:25;37302:4;37282:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;37311:19;:23;37331:2;37311:23;;;;;;;;;;;;;;;;;;;;;;;;;37282:52;37278:100;;;37361:5;37351:15;;37278:100;37391:12;37496:7;37492:911;;;37562:25;:29;37588:2;37562:29;;;;;;;;;;;;;;;;;;;;;;;;;:56;;;;;37617:1;37595:5;:19;;;:23;37562:56;37558:694;;;37646:40;37682:3;37646:31;37657:5;:19;;;37646:6;:10;;:31;;;;:::i;:::-;:35;;:40;;;;:::i;:::-;37639:47;;37759:5;:19;;;37734:5;:22;;;37727:4;:29;;;;:::i;:::-;:51;;;;:::i;:::-;37705:18;;:73;;;;;;;:::i;:::-;;;;;;;;37851:5;:19;;;37826:5;:22;;;37819:4;:29;;;;:::i;:::-;:51;;;;:::i;:::-;37797:18;;:73;;;;;;;:::i;:::-;;;;;;;;37558:694;;;37932:25;:31;37958:4;37932:31;;;;;;;;;;;;;;;;;;;;;;;;;:57;;;;;37988:1;37967:5;:18;;;:22;37932:57;37928:324;;;38017:39;38052:3;38017:30;38028:5;:18;;;38017:6;:10;;:30;;;;:::i;:::-;:34;;:39;;;;:::i;:::-;38010:46;;38128:5;:18;;;38104:5;:21;;;38097:4;:28;;;;:::i;:::-;:49;;;;:::i;:::-;38075:18;;:71;;;;;;;:::i;:::-;;;;;;;;38218:5;:18;;;38194:5;:21;;;38187:4;:28;;;;:::i;:::-;:49;;;;:::i;:::-;38165:18;;:71;;;;;;;:::i;:::-;;;;;;;;37928:324;37558:694;38279:1;38272:4;:8;38268:91;;;38301:42;38317:4;38331;38338;38301:15;:42::i;:::-;38268:91;38385:4;38375:14;;;;;:::i;:::-;;;37492:911;38415:33;38431:4;38437:2;38441:6;38415:15;:33::i;:::-;35170:3286;;;;35057:3399;;;;:::o;16452:191::-;16537:7;16570:1;16565;:6;;16573:12;16557:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;16597:9;16613:1;16609;:5;;;;:::i;:::-;16597:17;;16634:1;16627:8;;;16452:191;;;;;:::o;11744:573::-;11902:1;11884:20;;:6;:20;;;;11876:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;11986:1;11965:23;;:9;:23;;;;11957:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;12041:47;12062:6;12070:9;12081:6;12041:20;:47::i;:::-;12121:71;12143:6;12121:71;;;;;;;;;;;;;;;;;:9;:17;12131:6;12121:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;12101:9;:17;12111:6;12101:17;;;;;;;;;;;;;;;:91;;;;12226:32;12251:6;12226:9;:20;12236:9;12226:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;12203:9;:20;12213:9;12203:20;;;;;;;;;;;;;;;:55;;;;12291:9;12274:35;;12283:6;12274:35;;;12302:6;12274:35;;;;;;:::i;:::-;;;;;;;;11744:573;;;:::o;39595:1367::-;39634:23;39660:24;39678:4;39660:9;:24::i;:::-;39634:50;;39695:25;39744:18;;39723;;:39;;;;:::i;:::-;39695:67;;39774:12;39822:1;39803:15;:20;:46;;;;39848:1;39827:17;:22;39803:46;39799:63;;;39853:7;;;;;39799:63;39917:2;39896:18;;:23;;;;:::i;:::-;39878:15;:41;39874:115;;;39975:2;39954:18;;:23;;;;:::i;:::-;39936:41;;39874:115;40050:23;40135:1;40115:17;40094:18;;40076:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;40050:86;;40147:26;40176:36;40196:15;40176;:19;;:36;;;;:::i;:::-;40147:65;;40226:25;40254:21;40226:49;;40288:36;40305:18;40288:16;:36::i;:::-;40339:18;40360:44;40386:17;40360:21;:25;;:44;;;;:::i;:::-;40339:65;;40418:23;40444:57;40483:17;40444:34;40459:18;;40444:10;:14;;:34;;;;:::i;:::-;:38;;:57;;;;:::i;:::-;40418:83;;40512:23;40551:15;40538:10;:28;;;;:::i;:::-;40512:54;;40602:1;40581:18;:22;;;;40635:1;40614:18;:22;;;;40673:1;40655:15;:19;:42;;;;;40696:1;40678:15;:19;40655:42;40651:212;;;40714:46;40727:15;40744;40714:12;:46::i;:::-;40780:71;40795:18;40815:15;40832:18;;40780:71;;;;;;;;:::i;:::-;;;;;;;;40651:212;40896:15;;;;;;;;;;;40888:29;;40926:21;40888:66;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40875:79;;;;;39623:1339;;;;;;;;;39595:1367;:::o;16902:471::-;16959:7;17209:1;17204;:6;17200:47;;;17234:1;17227:8;;;;17200:47;17260:9;17276:1;17272;:5;;;;:::i;:::-;17260:17;;17305:1;17300;17296;:5;;;;:::i;:::-;:10;17288:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;17364:1;17357:8;;;16902:471;;;;;:::o;17849:131::-;17906:7;17933:39;17937:1;17940;17933:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;17926:46;;17849:131;;;;:::o;15154:126::-;;;;:::o;16014:135::-;16071:7;16098:43;16102:1;16105;16098:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;16091:50;;16014:135;;;;:::o;38464:593::-;38592:21;38630:1;38616:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38592:40;;38661:4;38643;38648:1;38643:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;38687:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38677:4;38682:1;38677:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;38722:62;38739:4;38754:15;38772:11;38722:8;:62::i;:::-;38823:15;:66;;;38904:11;38930:1;38974:4;39001;39021:15;38823:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38519:538;38464:593;:::o;39065:522::-;39213:62;39230:4;39245:15;39263:11;39213:8;:62::i;:::-;39318:15;:31;;;39358:9;39393:4;39413:11;39439:1;39482;39533:4;39553:15;39318:261;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;39065:522;;:::o;18476:277::-;18561:7;18593:1;18589;:5;18596:12;18581:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;18620:9;18636:1;18632;:5;;;;:::i;:::-;18620:17;;18744:1;18737:8;;;18476:277;;;;;:::o;88:117:1:-;197:1;194;187:12;334:77;371:7;400:5;389:16;;334:77;;;:::o;417:122::-;490:24;508:5;490:24;:::i;:::-;483:5;480:35;470:63;;529:1;526;519:12;470:63;417:122;:::o;545:139::-;591:5;629:6;616:20;607:29;;645:33;672:5;645:33;:::i;:::-;545:139;;;;:::o;690:474::-;758:6;766;815:2;803:9;794:7;790:23;786:32;783:119;;;821:79;;:::i;:::-;783:119;941:1;966:53;1011:7;1002:6;991:9;987:22;966:53;:::i;:::-;956:63;;912:117;1068:2;1094:53;1139:7;1130:6;1119:9;1115:22;1094:53;:::i;:::-;1084:63;;1039:118;690:474;;;;;:::o;1170:99::-;1222:6;1256:5;1250:12;1240:22;;1170:99;;;:::o;1275:169::-;1359:11;1393:6;1388:3;1381:19;1433:4;1428:3;1424:14;1409:29;;1275:169;;;;:::o;1450:307::-;1518:1;1528:113;1542:6;1539:1;1536:13;1528:113;;;1627:1;1622:3;1618:11;1612:18;1608:1;1603:3;1599:11;1592:39;1564:2;1561:1;1557:10;1552:15;;1528:113;;;1659:6;1656:1;1653:13;1650:101;;;1739:1;1730:6;1725:3;1721:16;1714:27;1650:101;1499:258;1450:307;;;:::o;1763:102::-;1804:6;1855:2;1851:7;1846:2;1839:5;1835:14;1831:28;1821:38;;1763:102;;;:::o;1871:364::-;1959:3;1987:39;2020:5;1987:39;:::i;:::-;2042:71;2106:6;2101:3;2042:71;:::i;:::-;2035:78;;2122:52;2167:6;2162:3;2155:4;2148:5;2144:16;2122:52;:::i;:::-;2199:29;2221:6;2199:29;:::i;:::-;2194:3;2190:39;2183:46;;1963:272;1871:364;;;;:::o;2241:313::-;2354:4;2392:2;2381:9;2377:18;2369:26;;2441:9;2435:4;2431:20;2427:1;2416:9;2412:17;2405:47;2469:78;2542:4;2533:6;2469:78;:::i;:::-;2461:86;;2241:313;;;;:::o;2560:126::-;2597:7;2637:42;2630:5;2626:54;2615:65;;2560:126;;;:::o;2692:96::-;2729:7;2758:24;2776:5;2758:24;:::i;:::-;2747:35;;2692:96;;;:::o;2794:122::-;2867:24;2885:5;2867:24;:::i;:::-;2860:5;2857:35;2847:63;;2906:1;2903;2896:12;2847:63;2794:122;:::o;2922:139::-;2968:5;3006:6;2993:20;2984:29;;3022:33;3049:5;3022:33;:::i;:::-;2922:139;;;;:::o;3067:474::-;3135:6;3143;3192:2;3180:9;3171:7;3167:23;3163:32;3160:119;;;3198:79;;:::i;:::-;3160:119;3318:1;3343:53;3388:7;3379:6;3368:9;3364:22;3343:53;:::i;:::-;3333:63;;3289:117;3445:2;3471:53;3516:7;3507:6;3496:9;3492:22;3471:53;:::i;:::-;3461:63;;3416:118;3067:474;;;;;:::o;3547:90::-;3581:7;3624:5;3617:13;3610:21;3599:32;;3547:90;;;:::o;3643:109::-;3724:21;3739:5;3724:21;:::i;:::-;3719:3;3712:34;3643:109;;:::o;3758:210::-;3845:4;3883:2;3872:9;3868:18;3860:26;;3896:65;3958:1;3947:9;3943:17;3934:6;3896:65;:::i;:::-;3758:210;;;;:::o;3974:329::-;4033:6;4082:2;4070:9;4061:7;4057:23;4053:32;4050:119;;;4088:79;;:::i;:::-;4050:119;4208:1;4233:53;4278:7;4269:6;4258:9;4254:22;4233:53;:::i;:::-;4223:63;;4179:117;3974:329;;;;:::o;4309:60::-;4337:3;4358:5;4351:12;;4309:60;;;:::o;4375:142::-;4425:9;4458:53;4476:34;4485:24;4503:5;4485:24;:::i;:::-;4476:34;:::i;:::-;4458:53;:::i;:::-;4445:66;;4375:142;;;:::o;4523:126::-;4573:9;4606:37;4637:5;4606:37;:::i;:::-;4593:50;;4523:126;;;:::o;4655:153::-;4732:9;4765:37;4796:5;4765:37;:::i;:::-;4752:50;;4655:153;;;:::o;4814:185::-;4928:64;4986:5;4928:64;:::i;:::-;4923:3;4916:77;4814:185;;:::o;5005:276::-;5125:4;5163:2;5152:9;5148:18;5140:26;;5176:98;5271:1;5260:9;5256:17;5247:6;5176:98;:::i;:::-;5005:276;;;;:::o;5287:118::-;5374:24;5392:5;5374:24;:::i;:::-;5369:3;5362:37;5287:118;;:::o;5411:222::-;5504:4;5542:2;5531:9;5527:18;5519:26;;5555:71;5623:1;5612:9;5608:17;5599:6;5555:71;:::i;:::-;5411:222;;;;:::o;5639:619::-;5716:6;5724;5732;5781:2;5769:9;5760:7;5756:23;5752:32;5749:119;;;5787:79;;:::i;:::-;5749:119;5907:1;5932:53;5977:7;5968:6;5957:9;5953:22;5932:53;:::i;:::-;5922:63;;5878:117;6034:2;6060:53;6105:7;6096:6;6085:9;6081:22;6060:53;:::i;:::-;6050:63;;6005:118;6162:2;6188:53;6233:7;6224:6;6213:9;6209:22;6188:53;:::i;:::-;6178:63;;6133:118;5639:619;;;;;:::o;6264:86::-;6299:7;6339:4;6332:5;6328:16;6317:27;;6264:86;;;:::o;6356:112::-;6439:22;6455:5;6439:22;:::i;:::-;6434:3;6427:35;6356:112;;:::o;6474:214::-;6563:4;6601:2;6590:9;6586:18;6578:26;;6614:67;6678:1;6667:9;6663:17;6654:6;6614:67;:::i;:::-;6474:214;;;;:::o;6694:118::-;6781:24;6799:5;6781:24;:::i;:::-;6776:3;6769:37;6694:118;;:::o;6818:222::-;6911:4;6949:2;6938:9;6934:18;6926:26;;6962:71;7030:1;7019:9;7015:17;7006:6;6962:71;:::i;:::-;6818:222;;;;:::o;7046:116::-;7116:21;7131:5;7116:21;:::i;:::-;7109:5;7106:32;7096:60;;7152:1;7149;7142:12;7096:60;7046:116;:::o;7168:133::-;7211:5;7249:6;7236:20;7227:29;;7265:30;7289:5;7265:30;:::i;:::-;7168:133;;;;:::o;7307:468::-;7372:6;7380;7429:2;7417:9;7408:7;7404:23;7400:32;7397:119;;;7435:79;;:::i;:::-;7397:119;7555:1;7580:53;7625:7;7616:6;7605:9;7601:22;7580:53;:::i;:::-;7570:63;;7526:117;7682:2;7708:50;7750:7;7741:6;7730:9;7726:22;7708:50;:::i;:::-;7698:60;;7653:115;7307:468;;;;;:::o;7781:323::-;7837:6;7886:2;7874:9;7865:7;7861:23;7857:32;7854:119;;;7892:79;;:::i;:::-;7854:119;8012:1;8037:50;8079:7;8070:6;8059:9;8055:22;8037:50;:::i;:::-;8027:60;;7983:114;7781:323;;;;:::o;8110:329::-;8169:6;8218:2;8206:9;8197:7;8193:23;8189:32;8186:119;;;8224:79;;:::i;:::-;8186:119;8344:1;8369:53;8414:7;8405:6;8394:9;8390:22;8369:53;:::i;:::-;8359:63;;8315:117;8110:329;;;;:::o;8445:775::-;8678:4;8716:3;8705:9;8701:19;8693:27;;8730:71;8798:1;8787:9;8783:17;8774:6;8730:71;:::i;:::-;8811:72;8879:2;8868:9;8864:18;8855:6;8811:72;:::i;:::-;8893;8961:2;8950:9;8946:18;8937:6;8893:72;:::i;:::-;8975;9043:2;9032:9;9028:18;9019:6;8975:72;:::i;:::-;9057:73;9125:3;9114:9;9110:19;9101:6;9057:73;:::i;:::-;9140;9208:3;9197:9;9193:19;9184:6;9140:73;:::i;:::-;8445:775;;;;;;;;;:::o;9226:474::-;9294:6;9302;9351:2;9339:9;9330:7;9326:23;9322:32;9319:119;;;9357:79;;:::i;:::-;9319:119;9477:1;9502:53;9547:7;9538:6;9527:9;9523:22;9502:53;:::i;:::-;9492:63;;9448:117;9604:2;9630:53;9675:7;9666:6;9655:9;9651:22;9630:53;:::i;:::-;9620:63;;9575:118;9226:474;;;;;:::o;9706:182::-;9846:34;9842:1;9834:6;9830:14;9823:58;9706:182;:::o;9894:366::-;10036:3;10057:67;10121:2;10116:3;10057:67;:::i;:::-;10050:74;;10133:93;10222:3;10133:93;:::i;:::-;10251:2;10246:3;10242:12;10235:19;;9894:366;;;:::o;10266:419::-;10432:4;10470:2;10459:9;10455:18;10447:26;;10519:9;10513:4;10509:20;10505:1;10494:9;10490:17;10483:47;10547:131;10673:4;10547:131;:::i;:::-;10539:139;;10266:419;;;:::o;10691:180::-;10739:77;10736:1;10729:88;10836:4;10833:1;10826:15;10860:4;10857:1;10850:15;10877:305;10917:3;10936:20;10954:1;10936:20;:::i;:::-;10931:25;;10970:20;10988:1;10970:20;:::i;:::-;10965:25;;11124:1;11056:66;11052:74;11049:1;11046:81;11043:107;;;11130:18;;:::i;:::-;11043:107;11174:1;11171;11167:9;11160:16;;10877:305;;;;:::o;11188:178::-;11328:30;11324:1;11316:6;11312:14;11305:54;11188:178;:::o;11372:366::-;11514:3;11535:67;11599:2;11594:3;11535:67;:::i;:::-;11528:74;;11611:93;11700:3;11611:93;:::i;:::-;11729:2;11724:3;11720:12;11713:19;;11372:366;;;:::o;11744:419::-;11910:4;11948:2;11937:9;11933:18;11925:26;;11997:9;11991:4;11987:20;11983:1;11972:9;11968:17;11961:47;12025:131;12151:4;12025:131;:::i;:::-;12017:139;;11744:419;;;:::o;12169:180::-;12217:77;12214:1;12207:88;12314:4;12311:1;12304:15;12338:4;12335:1;12328:15;12355:320;12399:6;12436:1;12430:4;12426:12;12416:22;;12483:1;12477:4;12473:12;12504:18;12494:81;;12560:4;12552:6;12548:17;12538:27;;12494:81;12622:2;12614:6;12611:14;12591:18;12588:38;12585:84;;;12641:18;;:::i;:::-;12585:84;12406:269;12355:320;;;:::o;12681:180::-;12729:77;12726:1;12719:88;12826:4;12823:1;12816:15;12850:4;12847:1;12840:15;12867:185;12907:1;12924:20;12942:1;12924:20;:::i;:::-;12919:25;;12958:20;12976:1;12958:20;:::i;:::-;12953:25;;12997:1;12987:35;;13002:18;;:::i;:::-;12987:35;13044:1;13041;13037:9;13032:14;;12867:185;;;;:::o;13058:348::-;13098:7;13121:20;13139:1;13121:20;:::i;:::-;13116:25;;13155:20;13173:1;13155:20;:::i;:::-;13150:25;;13343:1;13275:66;13271:74;13268:1;13265:81;13260:1;13253:9;13246:17;13242:105;13239:131;;;13350:18;;:::i;:::-;13239:131;13398:1;13395;13391:9;13380:20;;13058:348;;;;:::o;13412:235::-;13552:34;13548:1;13540:6;13536:14;13529:58;13621:18;13616:2;13608:6;13604:15;13597:43;13412:235;:::o;13653:366::-;13795:3;13816:67;13880:2;13875:3;13816:67;:::i;:::-;13809:74;;13892:93;13981:3;13892:93;:::i;:::-;14010:2;14005:3;14001:12;13994:19;;13653:366;;;:::o;14025:419::-;14191:4;14229:2;14218:9;14214:18;14206:26;;14278:9;14272:4;14268:20;14264:1;14253:9;14249:17;14242:47;14306:131;14432:4;14306:131;:::i;:::-;14298:139;;14025:419;;;:::o;14450:244::-;14590:34;14586:1;14578:6;14574:14;14567:58;14659:27;14654:2;14646:6;14642:15;14635:52;14450:244;:::o;14700:366::-;14842:3;14863:67;14927:2;14922:3;14863:67;:::i;:::-;14856:74;;14939:93;15028:3;14939:93;:::i;:::-;15057:2;15052:3;15048:12;15041:19;;14700:366;;;:::o;15072:419::-;15238:4;15276:2;15265:9;15261:18;15253:26;;15325:9;15319:4;15315:20;15311:1;15300:9;15296:17;15289:47;15353:131;15479:4;15353:131;:::i;:::-;15345:139;;15072:419;;;:::o;15497:223::-;15637:34;15633:1;15625:6;15621:14;15614:58;15706:6;15701:2;15693:6;15689:15;15682:31;15497:223;:::o;15726:366::-;15868:3;15889:67;15953:2;15948:3;15889:67;:::i;:::-;15882:74;;15965:93;16054:3;15965:93;:::i;:::-;16083:2;16078:3;16074:12;16067:19;;15726:366;;;:::o;16098:419::-;16264:4;16302:2;16291:9;16287:18;16279:26;;16351:9;16345:4;16341:20;16337:1;16326:9;16322:17;16315:47;16379:131;16505:4;16379:131;:::i;:::-;16371:139;;16098:419;;;:::o;16523:225::-;16663:34;16659:1;16651:6;16647:14;16640:58;16732:8;16727:2;16719:6;16715:15;16708:33;16523:225;:::o;16754:366::-;16896:3;16917:67;16981:2;16976:3;16917:67;:::i;:::-;16910:74;;16993:93;17082:3;16993:93;:::i;:::-;17111:2;17106:3;17102:12;17095:19;;16754:366;;;:::o;17126:419::-;17292:4;17330:2;17319:9;17315:18;17307:26;;17379:9;17373:4;17369:20;17365:1;17354:9;17350:17;17343:47;17407:131;17533:4;17407:131;:::i;:::-;17399:139;;17126:419;;;:::o;17551:177::-;17691:29;17687:1;17679:6;17675:14;17668:53;17551:177;:::o;17734:366::-;17876:3;17897:67;17961:2;17956:3;17897:67;:::i;:::-;17890:74;;17973:93;18062:3;17973:93;:::i;:::-;18091:2;18086:3;18082:12;18075:19;;17734:366;;;:::o;18106:419::-;18272:4;18310:2;18299:9;18295:18;18287:26;;18359:9;18353:4;18349:20;18345:1;18334:9;18330:17;18323:47;18387:131;18513:4;18387:131;:::i;:::-;18379:139;;18106:419;;;:::o;18531:223::-;18671:34;18667:1;18659:6;18655:14;18648:58;18740:6;18735:2;18727:6;18723:15;18716:31;18531:223;:::o;18760:366::-;18902:3;18923:67;18987:2;18982:3;18923:67;:::i;:::-;18916:74;;18999:93;19088:3;18999:93;:::i;:::-;19117:2;19112:3;19108:12;19101:19;;18760:366;;;:::o;19132:419::-;19298:4;19336:2;19325:9;19321:18;19313:26;;19385:9;19379:4;19375:20;19371:1;19360:9;19356:17;19349:47;19413:131;19539:4;19413:131;:::i;:::-;19405:139;;19132:419;;;:::o;19557:221::-;19697:34;19693:1;19685:6;19681:14;19674:58;19766:4;19761:2;19753:6;19749:15;19742:29;19557:221;:::o;19784:366::-;19926:3;19947:67;20011:2;20006:3;19947:67;:::i;:::-;19940:74;;20023:93;20112:3;20023:93;:::i;:::-;20141:2;20136:3;20132:12;20125:19;;19784:366;;;:::o;20156:419::-;20322:4;20360:2;20349:9;20345:18;20337:26;;20409:9;20403:4;20399:20;20395:1;20384:9;20380:17;20373:47;20437:131;20563:4;20437:131;:::i;:::-;20429:139;;20156:419;;;:::o;20581:224::-;20721:34;20717:1;20709:6;20705:14;20698:58;20790:7;20785:2;20777:6;20773:15;20766:32;20581:224;:::o;20811:366::-;20953:3;20974:67;21038:2;21033:3;20974:67;:::i;:::-;20967:74;;21050:93;21139:3;21050:93;:::i;:::-;21168:2;21163:3;21159:12;21152:19;;20811:366;;;:::o;21183:419::-;21349:4;21387:2;21376:9;21372:18;21364:26;;21436:9;21430:4;21426:20;21422:1;21411:9;21407:17;21400:47;21464:131;21590:4;21464:131;:::i;:::-;21456:139;;21183:419;;;:::o;21608:222::-;21748:34;21744:1;21736:6;21732:14;21725:58;21817:5;21812:2;21804:6;21800:15;21793:30;21608:222;:::o;21836:366::-;21978:3;21999:67;22063:2;22058:3;21999:67;:::i;:::-;21992:74;;22075:93;22164:3;22075:93;:::i;:::-;22193:2;22188:3;22184:12;22177:19;;21836:366;;;:::o;22208:419::-;22374:4;22412:2;22401:9;22397:18;22389:26;;22461:9;22455:4;22451:20;22447:1;22436:9;22432:17;22425:47;22489:131;22615:4;22489:131;:::i;:::-;22481:139;;22208:419;;;:::o;22633:224::-;22773:34;22769:1;22761:6;22757:14;22750:58;22842:7;22837:2;22829:6;22825:15;22818:32;22633:224;:::o;22863:366::-;23005:3;23026:67;23090:2;23085:3;23026:67;:::i;:::-;23019:74;;23102:93;23191:3;23102:93;:::i;:::-;23220:2;23215:3;23211:12;23204:19;;22863:366;;;:::o;23235:419::-;23401:4;23439:2;23428:9;23424:18;23416:26;;23488:9;23482:4;23478:20;23474:1;23463:9;23459:17;23452:47;23516:131;23642:4;23516:131;:::i;:::-;23508:139;;23235:419;;;:::o;23660:222::-;23800:34;23796:1;23788:6;23784:14;23777:58;23869:5;23864:2;23856:6;23852:15;23845:30;23660:222;:::o;23888:366::-;24030:3;24051:67;24115:2;24110:3;24051:67;:::i;:::-;24044:74;;24127:93;24216:3;24127:93;:::i;:::-;24245:2;24240:3;24236:12;24229:19;;23888:366;;;:::o;24260:419::-;24426:4;24464:2;24453:9;24449:18;24441:26;;24513:9;24507:4;24503:20;24499:1;24488:9;24484:17;24477:47;24541:131;24667:4;24541:131;:::i;:::-;24533:139;;24260:419;;;:::o;24685:236::-;24825:34;24821:1;24813:6;24809:14;24802:58;24894:19;24889:2;24881:6;24877:15;24870:44;24685:236;:::o;24927:366::-;25069:3;25090:67;25154:2;25149:3;25090:67;:::i;:::-;25083:74;;25166:93;25255:3;25166:93;:::i;:::-;25284:2;25279:3;25275:12;25268:19;;24927:366;;;:::o;25299:419::-;25465:4;25503:2;25492:9;25488:18;25480:26;;25552:9;25546:4;25542:20;25538:1;25527:9;25523:17;25516:47;25580:131;25706:4;25580:131;:::i;:::-;25572:139;;25299:419;;;:::o;25724:172::-;25864:24;25860:1;25852:6;25848:14;25841:48;25724:172;:::o;25902:366::-;26044:3;26065:67;26129:2;26124:3;26065:67;:::i;:::-;26058:74;;26141:93;26230:3;26141:93;:::i;:::-;26259:2;26254:3;26250:12;26243:19;;25902:366;;;:::o;26274:419::-;26440:4;26478:2;26467:9;26463:18;26455:26;;26527:9;26521:4;26517:20;26513:1;26502:9;26498:17;26491:47;26555:131;26681:4;26555:131;:::i;:::-;26547:139;;26274:419;;;:::o;26699:240::-;26839:34;26835:1;26827:6;26823:14;26816:58;26908:23;26903:2;26895:6;26891:15;26884:48;26699:240;:::o;26945:366::-;27087:3;27108:67;27172:2;27167:3;27108:67;:::i;:::-;27101:74;;27184:93;27273:3;27184:93;:::i;:::-;27302:2;27297:3;27293:12;27286:19;;26945:366;;;:::o;27317:419::-;27483:4;27521:2;27510:9;27506:18;27498:26;;27570:9;27564:4;27560:20;27556:1;27545:9;27541:17;27534:47;27598:131;27724:4;27598:131;:::i;:::-;27590:139;;27317:419;;;:::o;27742:241::-;27882:34;27878:1;27870:6;27866:14;27859:58;27951:24;27946:2;27938:6;27934:15;27927:49;27742:241;:::o;27989:366::-;28131:3;28152:67;28216:2;28211:3;28152:67;:::i;:::-;28145:74;;28228:93;28317:3;28228:93;:::i;:::-;28346:2;28341:3;28337:12;28330:19;;27989:366;;;:::o;28361:419::-;28527:4;28565:2;28554:9;28550:18;28542:26;;28614:9;28608:4;28604:20;28600:1;28589:9;28585:17;28578:47;28642:131;28768:4;28642:131;:::i;:::-;28634:139;;28361:419;;;:::o;28786:169::-;28926:21;28922:1;28914:6;28910:14;28903:45;28786:169;:::o;28961:366::-;29103:3;29124:67;29188:2;29183:3;29124:67;:::i;:::-;29117:74;;29200:93;29289:3;29200:93;:::i;:::-;29318:2;29313:3;29309:12;29302:19;;28961:366;;;:::o;29333:419::-;29499:4;29537:2;29526:9;29522:18;29514:26;;29586:9;29580:4;29576:20;29572:1;29561:9;29557:17;29550:47;29614:131;29740:4;29614:131;:::i;:::-;29606:139;;29333:419;;;:::o;29758:191::-;29798:4;29818:20;29836:1;29818:20;:::i;:::-;29813:25;;29852:20;29870:1;29852:20;:::i;:::-;29847:25;;29891:1;29888;29885:8;29882:34;;;29896:18;;:::i;:::-;29882:34;29941:1;29938;29934:9;29926:17;;29758:191;;;;:::o;29955:442::-;30104:4;30142:2;30131:9;30127:18;30119:26;;30155:71;30223:1;30212:9;30208:17;30199:6;30155:71;:::i;:::-;30236:72;30304:2;30293:9;30289:18;30280:6;30236:72;:::i;:::-;30318;30386:2;30375:9;30371:18;30362:6;30318:72;:::i;:::-;29955:442;;;;;;:::o;30403:147::-;30504:11;30541:3;30526:18;;30403:147;;;;:::o;30556:114::-;;:::o;30676:398::-;30835:3;30856:83;30937:1;30932:3;30856:83;:::i;:::-;30849:90;;30948:93;31037:3;30948:93;:::i;:::-;31066:1;31061:3;31057:11;31050:18;;30676:398;;;:::o;31080:379::-;31264:3;31286:147;31429:3;31286:147;:::i;:::-;31279:154;;31450:3;31443:10;;31080:379;;;:::o;31465:220::-;31605:34;31601:1;31593:6;31589:14;31582:58;31674:3;31669:2;31661:6;31657:15;31650:28;31465:220;:::o;31691:366::-;31833:3;31854:67;31918:2;31913:3;31854:67;:::i;:::-;31847:74;;31930:93;32019:3;31930:93;:::i;:::-;32048:2;32043:3;32039:12;32032:19;;31691:366;;;:::o;32063:419::-;32229:4;32267:2;32256:9;32252:18;32244:26;;32316:9;32310:4;32306:20;32302:1;32291:9;32287:17;32280:47;32344:131;32470:4;32344:131;:::i;:::-;32336:139;;32063:419;;;:::o;32488:180::-;32536:77;32533:1;32526:88;32633:4;32630:1;32623:15;32657:4;32654:1;32647:15;32674:180;32722:77;32719:1;32712:88;32819:4;32816:1;32809:15;32843:4;32840:1;32833:15;32860:143;32917:5;32948:6;32942:13;32933:22;;32964:33;32991:5;32964:33;:::i;:::-;32860:143;;;;:::o;33009:351::-;33079:6;33128:2;33116:9;33107:7;33103:23;33099:32;33096:119;;;33134:79;;:::i;:::-;33096:119;33254:1;33279:64;33335:7;33326:6;33315:9;33311:22;33279:64;:::i;:::-;33269:74;;33225:128;33009:351;;;;:::o;33366:85::-;33411:7;33440:5;33429:16;;33366:85;;;:::o;33457:158::-;33515:9;33548:61;33566:42;33575:32;33601:5;33575:32;:::i;:::-;33566:42;:::i;:::-;33548:61;:::i;:::-;33535:74;;33457:158;;;:::o;33621:147::-;33716:45;33755:5;33716:45;:::i;:::-;33711:3;33704:58;33621:147;;:::o;33774:114::-;33841:6;33875:5;33869:12;33859:22;;33774:114;;;:::o;33894:184::-;33993:11;34027:6;34022:3;34015:19;34067:4;34062:3;34058:14;34043:29;;33894:184;;;;:::o;34084:132::-;34151:4;34174:3;34166:11;;34204:4;34199:3;34195:14;34187:22;;34084:132;;;:::o;34222:108::-;34299:24;34317:5;34299:24;:::i;:::-;34294:3;34287:37;34222:108;;:::o;34336:179::-;34405:10;34426:46;34468:3;34460:6;34426:46;:::i;:::-;34504:4;34499:3;34495:14;34481:28;;34336:179;;;;:::o;34521:113::-;34591:4;34623;34618:3;34614:14;34606:22;;34521:113;;;:::o;34670:732::-;34789:3;34818:54;34866:5;34818:54;:::i;:::-;34888:86;34967:6;34962:3;34888:86;:::i;:::-;34881:93;;34998:56;35048:5;34998:56;:::i;:::-;35077:7;35108:1;35093:284;35118:6;35115:1;35112:13;35093:284;;;35194:6;35188:13;35221:63;35280:3;35265:13;35221:63;:::i;:::-;35214:70;;35307:60;35360:6;35307:60;:::i;:::-;35297:70;;35153:224;35140:1;35137;35133:9;35128:14;;35093:284;;;35097:14;35393:3;35386:10;;34794:608;;;34670:732;;;;:::o;35408:831::-;35671:4;35709:3;35698:9;35694:19;35686:27;;35723:71;35791:1;35780:9;35776:17;35767:6;35723:71;:::i;:::-;35804:80;35880:2;35869:9;35865:18;35856:6;35804:80;:::i;:::-;35931:9;35925:4;35921:20;35916:2;35905:9;35901:18;35894:48;35959:108;36062:4;36053:6;35959:108;:::i;:::-;35951:116;;36077:72;36145:2;36134:9;36130:18;36121:6;36077:72;:::i;:::-;36159:73;36227:3;36216:9;36212:19;36203:6;36159:73;:::i;:::-;35408:831;;;;;;;;:::o;36245:807::-;36494:4;36532:3;36521:9;36517:19;36509:27;;36546:71;36614:1;36603:9;36599:17;36590:6;36546:71;:::i;:::-;36627:72;36695:2;36684:9;36680:18;36671:6;36627:72;:::i;:::-;36709:80;36785:2;36774:9;36770:18;36761:6;36709:80;:::i;:::-;36799;36875:2;36864:9;36860:18;36851:6;36799:80;:::i;:::-;36889:73;36957:3;36946:9;36942:19;36933:6;36889:73;:::i;:::-;36972;37040:3;37029:9;37025:19;37016:6;36972:73;:::i;:::-;36245:807;;;;;;;;;:::o;37058:143::-;37115:5;37146:6;37140:13;37131:22;;37162:33;37189:5;37162:33;:::i;:::-;37058:143;;;;:::o;37207:663::-;37295:6;37303;37311;37360:2;37348:9;37339:7;37335:23;37331:32;37328:119;;;37366:79;;:::i;:::-;37328:119;37486:1;37511:64;37567:7;37558:6;37547:9;37543:22;37511:64;:::i;:::-;37501:74;;37457:128;37624:2;37650:64;37706:7;37697:6;37686:9;37682:22;37650:64;:::i;:::-;37640:74;;37595:129;37763:2;37789:64;37845:7;37836:6;37825:9;37821:22;37789:64;:::i;:::-;37779:74;;37734:129;37207:663;;;;;:::o

Swarm Source

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