Token Party Dice

 

Overview ERC20

Price
$0.00 @ 0.000000 ETH
Fully Diluted Market Cap
Total Supply:
944,640.056085 DICE

Holders:
1,395 addresses

Transfers:
-

Contract:
0xAeEBa475eDC438f8Eeb6BFBc3164c1C7716Fb3040xAeEBa475eDC438f8Eeb6BFBc3164c1C7716Fb304

Decimals:
18

Social Profiles:
Not Available, Update ?

Loading
[ Download CSV Export  ] 
Loading
[ Download CSV Export  ] 
Loading

Click here to update the token ICO / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
RiskyDice

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-11-17
*/

// RISKY DICE is an ERC20 with a gambling function built in.
//████████╗░░░███╗░░░███╗███████╗░░░░██╗██████╗░░█████╗░██████╗░████████╗██╗░░░██╗██╗░░██╗░█████╗░████████╗
//╚══██╔══╝░░░████╗░████║██╔════╝░░░██╔╝██╔══██╗██╔══██╗██╔══██╗╚══██╔══╝╚██╗░██╔╝██║░░██║██╔══██╗╚══██╔══╝
//░░░██║░░░░░░██╔████╔██║█████╗░░░░██╔╝░██████╔╝███████║██████╔╝░░░██║░░░░╚████╔╝░███████║███████║░░░██║░░░
//░░░██║░░░░░░██║╚██╔╝██║██╔══╝░░░██╔╝░░██╔═══╝░██╔══██║██╔══██╗░░░██║░░░░░╚██╔╝░░██╔══██║██╔══██║░░░██║░░░
//░░░██║░░░██╗██║░╚═╝░██║███████╗██╔╝░░░██║░░░░░██║░░██║██║░░██║░░░██║░░░░░░██║░░░██║░░██║██║░░██║░░░██║░░░
//░░░╚═╝░░░╚═╝╚═╝░░░░░╚═╝╚══════╝╚═╝░░░░╚═╝░░░░░╚═╝░░╚═╝╚═╝░░╚═╝░░░╚═╝░░░░░░╚═╝░░░╚═╝░░╚═╝╚═╝░░╚═╝░░░╚═╝░░░
                                            
pragma solidity 0.8.9;

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

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

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

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

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

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

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

    event Mint(address indexed sender, uint amount0, uint amount1);
    event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

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

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

    function initialize(address, address) external;
}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns (uint8);
}


contract ERC20 is Context, IERC20, IERC20Metadata {
    using SafeMath for uint256;

    mapping(address => uint256) private _balances;

    mapping(address => mapping(address => uint256)) private _allowances;

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

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

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

        _beforeTokenTransfer(sender, recipient, amount);

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

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

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

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

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

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

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

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

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

    /**
     * @dev Hook that is called before any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * will be to transferred to `to`.
     * - when `from` is zero, `amount` tokens will be minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

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

        return c;
    }

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

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

        return c;
    }

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

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

        return c;
    }

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

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

        return c;
    }

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

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

contract Ownable is Context {
    address private _owner;

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

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

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

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

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



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

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

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

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

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

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

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

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


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

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


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

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

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

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

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

error Reentrancy();

abstract contract ReentrancyGuard {
  uint256 private locked = 1;

  modifier nonReentrant() {
    if (locked != 1) {
      revert Reentrancy();
    }

    locked = 2;

    _;

    locked = 1;
  }
}

interface IRandomizer {
    function setNumBlocksAfterIncrement(uint8 _numBlocksAfterIncrement) external;
    function incrementCommitId() external;
    function addRandomForCommit(uint256 _seed) external;
    function requestRandomNumber() external returns(uint256);
    function revealRandomNumber(uint256 _requestId) external view returns(uint256);
    function isRandomReady(uint256 _requestId) external view returns(bool);
}

contract RiskyDice is ERC20, Ownable, ReentrancyGuard {
    using SafeMath for uint256;

    IRandomizer public randomizer;
    mapping(address => uint256) public userId;
    mapping(address => uint256) public betsize;
    event bet(address indexed from, uint amount);
    event win(address indexed from, uint roll, bool won, uint amount); 
    uint256 public edge;

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

    bool private swapping;

    address public marketingWallet;
    address public devWallet;
    
    uint256 public maxTransactionAmount;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;

    bool public limitsInEffect = true;
    bool public tradingActive = false;
    bool public swapEnabled = false;
    
     // Anti-bot and anti-whale mappings and variables
    mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch
    bool public transferDelayEnabled = true;

    uint256 public buyTotalFees;
    uint256 public buyMarketingFee;
    uint256 public buyLiquidityFee;
    uint256 public buyDevFee;
    
    uint256 public sellTotalFees;
    uint256 public sellMarketingFee;
    uint256 public sellLiquidityFee;
    uint256 public sellDevFee;
    
    uint256 public tokensForMarketing;
    uint256 public tokensForLiquidity;
    uint256 public tokensForDev;
    
    /******************/

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

    // store addresses that a automatic market maker pairs. Any transfer *to* these addresses
    // could be subject to a maximum transfer amount
    mapping (address => bool) public automatedMarketMakerPairs;

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

    event ExcludeFromFees(address indexed account, bool isExcluded);

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

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

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

    constructor(address _randomizer) ERC20("Party Dice", "DICE") {
        
        randomizer = IRandomizer(_randomizer);

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x1b02dA8Cb0d097eB8D57A175b88c7D8b47997506);
        
        excludeFromMaxTransaction(address(_uniswapV2Router), true);
        uniswapV2Router = _uniswapV2Router;
        
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        excludeFromMaxTransaction(address(uniswapV2Pair), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);
        
        uint256 _edge = 5;
        uint256 _buyMarketingFee = 0;
        uint256 _buyLiquidityFee = 0;
        uint256 _buyDevFee = 2;

        uint256 _sellMarketingFee = 0;
        uint256 _sellLiquidityFee = 8;
        uint256 _sellDevFee = 0;
        
        uint256 totalSupply = 1000000 * 1e18;
        
        maxTransactionAmount = totalSupply * 1 / 100; // 1% maxTransactionAmountTxn
        maxWallet = totalSupply * 1 / 100; // 1% maxWallet
        swapTokensAtAmount = totalSupply * 5 / 10000; // 0.05% swap wallet

        edge = _edge;

        buyMarketingFee = _buyMarketingFee;
        buyLiquidityFee = _buyLiquidityFee;
        buyDevFee = _buyDevFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee;
        
        sellMarketingFee = _sellMarketingFee;
        sellLiquidityFee = _sellLiquidityFee;
        sellDevFee = _sellDevFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;
        
        marketingWallet = address(0x75365dDb02bc316748fB9A2dc5a33B42f1fBA2E7); // set as marketing wallet
        devWallet = address(0x75365dDb02bc316748fB9A2dc5a33B42f1fBA2E7); // set as dev wallet

        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
        
        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);
        
        /*
            _mint is an internal function in ERC20.sol that is only called here,
            and CANNOT be called ever again
        */
        _mint(msg.sender, totalSupply);
    }

    receive() external payable {
    }

    function ROLL(uint256 _amount) nonReentrant public{
        require(_amount <= totalSupply() / 100, "Can not flip more than 1% of the supply at a time");
        require(userId[msg.sender] == 0, "one bet at a time buddy!");
        _burn(msg.sender, _amount);
        userId[msg.sender] = randomizer.requestRandomNumber();
        betsize[msg.sender] = (_amount * 2);
        emit bet(msg.sender, _amount);
    }

    function REVEAL() nonReentrant public{
        require(userId[msg.sender] != 0, "User has no unrevealed numbers.");
        require(randomizer.isRandomReady(userId[msg.sender]), "Random number not ready, try again.");
        uint256 secretnum;
        uint256 rand = randomizer.revealRandomNumber(userId[msg.sender]);
        secretnum = uint256(keccak256(abi.encode(rand))) % 100;
        if (secretnum < (50 - edge)){
            _mint(msg.sender, betsize[msg.sender]);
            emit win(msg.sender, secretnum, true, betsize[msg.sender]);
        }
        else {
            emit win(msg.sender, secretnum, false, betsize[msg.sender]);
        }
        delete betsize[msg.sender];
        delete userId[msg.sender];
    }

    function setEdge(uint8 _edge) public onlyOwner{
        require(_edge <= 50, "Whoah there buddy! You can't have more than 100% edge!");
        edge = _edge;
    }

    function dangerClearCache() public{
        delete betsize[msg.sender];
        delete userId[msg.sender];
    }

    function setRouter(address router) public onlyOwner{
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(router);
        
        excludeFromMaxTransaction(address(_uniswapV2Router), true);
        uniswapV2Router = _uniswapV2Router;
        
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        excludeFromMaxTransaction(address(uniswapV2Pair), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);
    }

    // once enabled, can never be turned off
    function enableTrading() external onlyOwner {
        tradingActive = true;
        swapEnabled = true;
    }
    
    // remove limits after token is stable
    function removeLimits() external onlyOwner returns (bool){
        limitsInEffect = false;
        return true;
    }
    
    // disable Transfer delay - cannot be reenabled
    function disableTransferDelay() external onlyOwner returns (bool){
        transferDelayEnabled = false;
        return true;
    }
    
     // change the minimum amount of tokens to sell from fees
    function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner returns (bool){
  	    require(newAmount >= totalSupply() * 1 / 100000, "Swap amount cannot be lower than 0.001% total supply.");
  	    require(newAmount <= totalSupply() * 5 / 1000, "Swap amount cannot be higher than 0.5% total supply.");
  	    swapTokensAtAmount = newAmount;
  	    return true;
  	}
    
    function updateMaxTxnAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 1 / 1000)/1e18, "Cannot set maxTransactionAmount lower than 0.1%");
        maxTransactionAmount = newNum * (10**18);
    }

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

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

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

        _setAutomatedMarketMakerPair(pair, value);
    }

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

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function updateMarketingWallet(address newMarketingWallet) external onlyOwner {
        emit marketingWalletUpdated(newMarketingWallet, marketingWallet);
        marketingWallet = newMarketingWallet;
    }
    
    function updateDevWallet(address newWallet) external onlyOwner {
        emit devWalletUpdated(newWallet, devWallet);
        devWallet = newWallet;
    }
    
    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");
        
         if(amount == 0) {
            super._transfer(from, to, 0);
            return;
        }
        
        if(limitsInEffect){
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !swapping
            ){
                if(!tradingActive){
                    require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active.");
                }

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

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

            swapping = false;
        }

        bool takeFee = !swapping;

        // if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }
        
        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if(takeFee){
            // on sell
            if (automatedMarketMakerPairs[to] && sellTotalFees > 0){
                fees = amount.mul(sellTotalFees).div(100);
                tokensForLiquidity += fees * sellLiquidityFee / sellTotalFees;
                tokensForDev += fees * sellDevFee / sellTotalFees;
                tokensForMarketing += fees * sellMarketingFee / sellTotalFees;
            }
            // on buy
            else if(automatedMarketMakerPairs[from] && buyTotalFees > 0) {
        	    fees = amount.mul(buyTotalFees).div(100);
        	    tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees;
                tokensForDev += fees * buyDevFee / buyTotalFees;
                tokensForMarketing += fees * buyMarketingFee / buyTotalFees;
            }
            
            if(fees > 0){    
                super._transfer(from, address(this), fees);
            }
        	
        	amount -= fees;
        }

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

    function swapTokensForEth(uint256 tokenAmount) private {

        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

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

        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
        
    }
    
    
    
    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // add the liquidity
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            marketingWallet,
            block.timestamp
        );
    }

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

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

        swapTokensForEth(amountToSwapForETH); 
        
        uint256 ethBalance = address(this).balance.sub(initialETHBalance);
        
        uint256 ethForMarketing = ethBalance.mul(tokensForMarketing).div(totalTokensToSwap);
        uint256 ethForDev = ethBalance.mul(tokensForDev).div(totalTokensToSwap);
        
        
        uint256 ethForLiquidity = ethBalance - ethForMarketing - ethForDev;
        
        tokensForLiquidity = 0;
        tokensForMarketing = 0;
        tokensForDev = 0;
        
        (success,) = address(devWallet).call{value: ethForDev}("");
        
        if(liquidityTokens > 0 && ethForLiquidity > 0){
            addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity, tokensForLiquidity);
        }
        
        
        (success,) = address(marketingWallet).call{value: address(this).balance}("");
    }
    
    function payout() public onlyOwner {
        payable(msg.sender).transfer(address(this).balance);
    }

    function withdrawToken() public onlyOwner {
        this.approve(address(this), totalSupply());
        this.transferFrom(address(this), owner(), balanceOf(address(this)));
        
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_randomizer","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"Reentrancy","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[],"name":"AutoNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[],"name":"ManualNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"bet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"devWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"marketingWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"roll","type":"uint256"},{"indexed":false,"internalType":"bool","name":"won","type":"bool"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"win","type":"event"},{"inputs":[],"name":"REVEAL","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"ROLL","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"betsize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dangerClearCache","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"edge","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","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":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"payout","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"randomizer","outputs":[{"internalType":"contract IRandomizer","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_edge","type":"uint8"}],"name":"setEdge","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"router","type":"address"}],"name":"setRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"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"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052600160068190556012805462ffffff1916821790556014805460ff191690911790553480156200003357600080fd5b50604051620041de380380620041de833981016040819052620000569162000851565b604080518082018252600a8152695061727479204469636560b01b6020808301918252835180850190945260048452634449434560e01b908401528151919291620000a491600391620007ab565b508051620000ba906004906020840190620007ab565b5050506000620000cf620004cb60201b60201c565b600580546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600780546001600160a01b0319166001600160a01b038316179055731b02da8cb0d097eb8d57a175b88c7d8b479975066200015a816001620004cf565b600b80546001600160a01b0319166001600160a01b0383169081179091556040805163c45a015560e01b8152905163c45a015591600480820192602092909190829003018186803b158015620001af57600080fd5b505afa158015620001c4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001ea919062000851565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200023357600080fd5b505afa15801562000248573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200026e919062000851565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b158015620002b757600080fd5b505af1158015620002cc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002f2919062000851565b600c80546001600160a01b0319166001600160a01b039290921691821790556200031e906001620004cf565b600c5462000337906001600160a01b0316600162000549565b600560008060028160088169d3c21bcecceda100000060646200035c82600162000892565b620003689190620008b4565b600f5560646200037a82600162000892565b620003869190620008b4565b6011556127106200039982600562000892565b620003a59190620008b4565b601055600a88905560168790556017869055601885905584620003c98789620008d7565b620003d59190620008d7565b601555601a849055601b839055601c82905581620003f48486620008d7565b620004009190620008d7565b601955600d80547375365ddb02bc316748fb9a2dc5a33b42f1fba2e76001600160a01b03199182168117909255600e8054909116909117905562000458620004506005546001600160a01b031690565b60016200059d565b620004653060016200059d565b6200047461dead60016200059d565b620004936200048b6005546001600160a01b031690565b6001620004cf565b620004a0306001620004cf565b620004af61dead6001620004cf565b620004bb338262000645565b505050505050505050506200092f565b3390565b6005546001600160a01b031633146200051e5760405162461bcd60e51b81526020600482018190526024820152600080516020620041be83398151915260448201526064015b60405180910390fd5b6001600160a01b03919091166000908152602160205260409020805460ff1916911515919091179055565b6001600160a01b038216600081815260226020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6005546001600160a01b03163314620005e85760405162461bcd60e51b81526020600482018190526024820152600080516020620041be833981519152604482015260640162000515565b6001600160a01b03821660008181526020808052604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b0382166200069d5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640162000515565b620006b9816002546200074160201b620020871790919060201c565b6002556001600160a01b03821660009081526020818152604090912054620006ec9183906200208762000741821b17901c565b6001600160a01b038316600081815260208181526040808320949094559251848152919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b600080620007508385620008d7565b905083811015620007a45760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640162000515565b9392505050565b828054620007b990620008f2565b90600052602060002090601f016020900481019282620007dd576000855562000828565b82601f10620007f857805160ff191683800117855562000828565b8280016001018555821562000828579182015b82811115620008285782518255916020019190600101906200080b565b50620008369291506200083a565b5090565b5b808211156200083657600081556001016200083b565b6000602082840312156200086457600080fd5b81516001600160a01b0381168114620007a457600080fd5b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615620008af57620008af6200087c565b500290565b600082620008d257634e487b7160e01b600052601260045260246000fd5b500490565b60008219821115620008ed57620008ed6200087c565b500190565b600181811c908216806200090757607f821691505b602082108114156200092957634e487b7160e01b600052602260045260246000fd5b50919050565b61387f806200093f6000396000f3fe6080604052600436106103d25760003560e01c80638a8c523c116101fd578063c024666811610118578063d85ba063116100ab578063f10fb5841161007a578063f10fb58414610b42578063f11a24d314610b62578063f2fde38b14610b78578063f637434214610b98578063f8b45b0514610bae57600080fd5b8063d85ba06314610abb578063dd62ed3e14610ad1578063e2f4560514610b17578063e884f26014610b2d57600080fd5b8063c876d0b9116100e7578063c876d0b914610a56578063c8c8ebe414610a70578063ca628c7814610a86578063d257b34f14610a9b57600080fd5b8063c0246668146109d6578063c0d78655146109f6578063c17b5b8c14610a16578063c18bc19514610a3657600080fd5b80639fccce3211610190578063aacebbe31161015f578063aacebbe314610951578063adc2c98a14610971578063b62496f514610987578063bbc0c742146109b757600080fd5b80639fccce32146108e5578063a0d82dc5146108fb578063a457c2d714610911578063a9059cbb1461093157600080fd5b8063924de9b7116101cc578063924de9b71461087a57806395d89b411461089a5780639a7a23d6146108af5780639c3b4fdc146108cf57600080fd5b80638a8c523c146108115780638da5cb5b146108265780638ea5220f14610844578063921369131461086457600080fd5b8063451478e2116102ed578063715018a61161028057806375f0a8741161024f57806375f0a874146107a65780637bce5a04146107c65780638095d564146107dc57806382651bd0146107fc57600080fd5b8063715018a61461073c57806372be411214610751578063751039fc146107715780637571336a1461078657600080fd5b806363bd1d4a116102bc57806363bd1d4a146106bb5780636a486a8e146106d05780636ddd1713146106e657806370a082311461070657600080fd5b8063451478e21461061c57806349bd5a5e146106495780634a62bb65146106695780634fbee1931461068357600080fd5b80631f3fed8f11610365578063313ce56711610334578063313ce56714610593578063376fe102146105af57806339509351146105dc5780633e430e1d146105fc57600080fd5b80631f3fed8f14610527578063203e727e1461053d57806323b872dd1461055d57806327c8f8351461057d57600080fd5b80631694505e116103a15780631694505e1461049a57806318160ddd146104d25780631816467f146104f15780631a8145bb1461051157600080fd5b8063023489ff146103de57806306fdde031461040f578063095ea7b31461043a57806310d5de531461046a57600080fd5b366103d957005b600080fd5b3480156103ea57600080fd5b5061040d3360009081526009602090815260408083208390556008909152812055565b005b34801561041b57600080fd5b50610424610bc4565b6040516104319190613324565b60405180910390f35b34801561044657600080fd5b5061045a61045536600461338e565b610c56565b6040519015158152602001610431565b34801561047657600080fd5b5061045a6104853660046133ba565b60216020526000908152604090205460ff1681565b3480156104a657600080fd5b50600b546104ba906001600160a01b031681565b6040516001600160a01b039091168152602001610431565b3480156104de57600080fd5b506002545b604051908152602001610431565b3480156104fd57600080fd5b5061040d61050c3660046133ba565b610c6d565b34801561051d57600080fd5b506104e3601e5481565b34801561053357600080fd5b506104e3601d5481565b34801561054957600080fd5b5061040d6105583660046133d7565b610cfd565b34801561056957600080fd5b5061045a6105783660046133f0565b610dda565b34801561058957600080fd5b506104ba61dead81565b34801561059f57600080fd5b5060405160128152602001610431565b3480156105bb57600080fd5b506104e36105ca3660046133ba565b60086020526000908152604090205481565b3480156105e857600080fd5b5061045a6105f736600461338e565b610e43565b34801561060857600080fd5b5061040d6106173660046133d7565b610e79565b34801561062857600080fd5b506104e36106373660046133ba565b60096020526000908152604090205481565b34801561065557600080fd5b50600c546104ba906001600160a01b031681565b34801561067557600080fd5b5060125461045a9060ff1681565b34801561068f57600080fd5b5061045a61069e3660046133ba565b6001600160a01b0316600090815260208052604090205460ff1690565b3480156106c757600080fd5b5061040d61107f565b3480156106dc57600080fd5b506104e360195481565b3480156106f257600080fd5b5060125461045a9062010000900460ff1681565b34801561071257600080fd5b506104e36107213660046133ba565b6001600160a01b031660009081526020819052604090205490565b34801561074857600080fd5b5061040d6110d8565b34801561075d57600080fd5b5061040d61076c366004613431565b61114c565b34801561077d57600080fd5b5061045a6111f1565b34801561079257600080fd5b5061040d6107a1366004613462565b61122e565b3480156107b257600080fd5b50600d546104ba906001600160a01b031681565b3480156107d257600080fd5b506104e360165481565b3480156107e857600080fd5b5061040d6107f736600461349b565b611283565b34801561080857600080fd5b5061040d61132b565b34801561081d57600080fd5b5061040d611677565b34801561083257600080fd5b506005546001600160a01b03166104ba565b34801561085057600080fd5b50600e546104ba906001600160a01b031681565b34801561087057600080fd5b506104e3601a5481565b34801561088657600080fd5b5061040d6108953660046134c7565b6116b4565b3480156108a657600080fd5b506104246116fa565b3480156108bb57600080fd5b5061040d6108ca366004613462565b611709565b3480156108db57600080fd5b506104e360185481565b3480156108f157600080fd5b506104e3601f5481565b34801561090757600080fd5b506104e3601c5481565b34801561091d57600080fd5b5061045a61092c36600461338e565b6117c5565b34801561093d57600080fd5b5061045a61094c36600461338e565b611814565b34801561095d57600080fd5b5061040d61096c3660046133ba565b611821565b34801561097d57600080fd5b506104e3600a5481565b34801561099357600080fd5b5061045a6109a23660046133ba565b60226020526000908152604090205460ff1681565b3480156109c357600080fd5b5060125461045a90610100900460ff1681565b3480156109e257600080fd5b5061040d6109f1366004613462565b6118a8565b348015610a0257600080fd5b5061040d610a113660046133ba565b61192f565b348015610a2257600080fd5b5061040d610a3136600461349b565b611b32565b348015610a4257600080fd5b5061040d610a513660046133d7565b611bd3565b348015610a6257600080fd5b5060145461045a9060ff1681565b348015610a7c57600080fd5b506104e3600f5481565b348015610a9257600080fd5b5061040d611ca4565b348015610aa757600080fd5b5061045a610ab63660046133d7565b611e0d565b348015610ac757600080fd5b506104e360155481565b348015610add57600080fd5b506104e3610aec3660046134e4565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610b2357600080fd5b506104e360105481565b348015610b3957600080fd5b5061045a611f5f565b348015610b4e57600080fd5b506007546104ba906001600160a01b031681565b348015610b6e57600080fd5b506104e360175481565b348015610b8457600080fd5b5061040d610b933660046133ba565b611f9c565b348015610ba457600080fd5b506104e3601b5481565b348015610bba57600080fd5b506104e360115481565b606060038054610bd390613512565b80601f0160208091040260200160405190810160405280929190818152602001828054610bff90613512565b8015610c4c5780601f10610c2157610100808354040283529160200191610c4c565b820191906000526020600020905b815481529060010190602001808311610c2f57829003601f168201915b5050505050905090565b6000610c633384846120ed565b5060015b92915050565b6005546001600160a01b03163314610ca05760405162461bcd60e51b8152600401610c979061354d565b60405180910390fd5b600e546040516001600160a01b03918216918316907f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74390600090a3600e80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314610d275760405162461bcd60e51b8152600401610c979061354d565b670de0b6b3a76400006103e8610d3c60025490565b610d47906001613598565b610d5191906135cd565b610d5b91906135cd565b811015610dc25760405162461bcd60e51b815260206004820152602f60248201527f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060448201526e6c6f776572207468616e20302e312560881b6064820152608401610c97565b610dd481670de0b6b3a7640000613598565b600f5550565b6000610de7848484612212565b610e398433610e34856040518060600160405280602881526020016137fd602891396001600160a01b038a1660009081526001602090815260408083203384529091529020549190612a13565b6120ed565b5060019392505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610c63918590610e349086612087565b600654600114610e9c5760405163558a1e0360e11b815260040160405180910390fd5b60026006556064610eac60025490565b610eb691906135cd565b811115610f1f5760405162461bcd60e51b815260206004820152603160248201527f43616e206e6f7420666c6970206d6f7265207468616e203125206f662074686560448201527020737570706c7920617420612074696d6560781b6064820152608401610c97565b3360009081526008602052604090205415610f7c5760405162461bcd60e51b815260206004820152601860248201527f6f6e652062657420617420612074696d652062756464792100000000000000006044820152606401610c97565b610f863382612a4d565b600760009054906101000a90046001600160a01b03166001600160a01b0316638678a7b26040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610fd657600080fd5b505af1158015610fea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061100e91906135e1565b33600090815260086020526040902055611029816002613598565b33600081815260096020526040908190209290925590517ff846cabce075bfb6875a72a411d59be4aba1d687bfdd34a5c4f5761263e05a439061106f9084815260200190565b60405180910390a2506001600655565b6005546001600160a01b031633146110a95760405162461bcd60e51b8152600401610c979061354d565b60405133904780156108fc02916000818181858888f193505050501580156110d5573d6000803e3d6000fd5b50565b6005546001600160a01b031633146111025760405162461bcd60e51b8152600401610c979061354d565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b031633146111765760405162461bcd60e51b8152600401610c979061354d565b60328160ff1611156111e95760405162461bcd60e51b815260206004820152603660248201527f57686f61682074686572652062756464792120596f752063616e27742068617660448201527565206d6f7265207468616e203130302520656467652160501b6064820152608401610c97565b60ff16600a55565b6005546000906001600160a01b0316331461121e5760405162461bcd60e51b8152600401610c979061354d565b506012805460ff19169055600190565b6005546001600160a01b031633146112585760405162461bcd60e51b8152600401610c979061354d565b6001600160a01b03919091166000908152602160205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146112ad5760405162461bcd60e51b8152600401610c979061354d565b601683905560178290556018819055806112c783856135fa565b6112d191906135fa565b6015819055601410156113265760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323025206f72206c6573730000006044820152606401610c97565b505050565b60065460011461134e5760405163558a1e0360e11b815260040160405180910390fd5b6002600655336000908152600860205260409020546113af5760405162461bcd60e51b815260206004820152601f60248201527f5573657220686173206e6f20756e72657665616c6564206e756d626572732e006044820152606401610c97565b600754336000908152600860205260409081902054905163f030210760e01b81526001600160a01b039092169163f0302107916113f29160040190815260200190565b60206040518083038186803b15801561140a57600080fd5b505afa15801561141e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114429190613612565b61149a5760405162461bcd60e51b815260206004820152602360248201527f52616e646f6d206e756d626572206e6f742072656164792c207472792061676160448201526234b71760e91b6064820152608401610c97565b60075433600090815260086020526040808220549051634ad30a7560e01b81526004810191909152909182916001600160a01b0390911690634ad30a759060240160206040518083038186803b1580156114f357600080fd5b505afa158015611507573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061152b91906135e1565b905060648160405160200161154291815260200190565b6040516020818303038152906040528051906020012060001c611565919061362f565b9150600a5460326115769190613643565b8210156115f957336000818152600960205260409020546115979190612b59565b33600081815260096020526040908190205490517f156e2b078d5769ea50eb97c72155feb7cd6cdc9452fe4ba5171514e5c7be986f916115ec9186916001919283529015156020830152604082015260600190565b60405180910390a2611651565b336000818152600960205260408082205490517f156e2b078d5769ea50eb97c72155feb7cd6cdc9452fe4ba5171514e5c7be986f92611648928783529015156020830152604082015260600190565b60405180910390a25b505033600090815260096020908152604080832083905560089091528120556001600655565b6005546001600160a01b031633146116a15760405162461bcd60e51b8152600401610c979061354d565b6012805462ffff00191662010100179055565b6005546001600160a01b031633146116de5760405162461bcd60e51b8152600401610c979061354d565b60128054911515620100000262ff000019909216919091179055565b606060048054610bd390613512565b6005546001600160a01b031633146117335760405162461bcd60e51b8152600401610c979061354d565b600c546001600160a01b03838116911614156117b75760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610c97565b6117c18282612c30565b5050565b6000610c633384610e3485604051806060016040528060258152602001613825602591393360009081526001602090815260408083206001600160a01b038d1684529091529020549190612a13565b6000610c63338484612212565b6005546001600160a01b0316331461184b5760405162461bcd60e51b8152600401610c979061354d565b600d546040516001600160a01b03918216918316907fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567490600090a3600d80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146118d25760405162461bcd60e51b8152600401610c979061354d565b6001600160a01b03821660008181526020808052604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146119595760405162461bcd60e51b8152600401610c979061354d565b8061196581600161122e565b600b80546001600160a01b0319166001600160a01b0383169081179091556040805163c45a015560e01b8152905163c45a015591600480820192602092909190829003018186803b1580156119b957600080fd5b505afa1580156119cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119f1919061365a565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611a3957600080fd5b505afa158015611a4d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a71919061365a565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b158015611ab957600080fd5b505af1158015611acd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611af1919061365a565b600c80546001600160a01b0319166001600160a01b03929092169182179055611b1b90600161122e565b600c546117c1906001600160a01b03166001612c30565b6005546001600160a01b03163314611b5c5760405162461bcd60e51b8152600401610c979061354d565b601a839055601b829055601c81905580611b7683856135fa565b611b8091906135fa565b601981815510156113265760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323525206f72206c6573730000006044820152606401610c97565b6005546001600160a01b03163314611bfd5760405162461bcd60e51b8152600401610c979061354d565b670de0b6b3a76400006103e8611c1260025490565b611c1d906005613598565b611c2791906135cd565b611c3191906135cd565b811015611c8c5760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015263302e352560e01b6064820152608401610c97565b611c9e81670de0b6b3a7640000613598565b60115550565b6005546001600160a01b03163314611cce5760405162461bcd60e51b8152600401610c979061354d565b3063095ea7b381611cde60025490565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381600087803b158015611d2457600080fd5b505af1158015611d38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d5c9190613612565b50306323b872dd81611d766005546001600160a01b031690565b306000908152602081905260409020546040516001600160e01b031960e086901b1681526001600160a01b0393841660048201529290911660248301526044820152606401602060405180830381600087803b158015611dd557600080fd5b505af1158015611de9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110d59190613612565b6005546000906001600160a01b03163314611e3a5760405162461bcd60e51b8152600401610c979061354d565b620186a0611e4760025490565b611e52906001613598565b611e5c91906135cd565b821015611ec95760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610c97565b6103e8611ed560025490565b611ee0906005613598565b611eea91906135cd565b821115611f565760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b6064820152608401610c97565b50601055600190565b6005546000906001600160a01b03163314611f8c5760405162461bcd60e51b8152600401610c979061354d565b506014805460ff19169055600190565b6005546001600160a01b03163314611fc65760405162461bcd60e51b8152600401610c979061354d565b6001600160a01b03811661202b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c97565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b60008061209483856135fa565b9050838110156120e65760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610c97565b9392505050565b6001600160a01b03831661214f5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610c97565b6001600160a01b0382166121b05760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610c97565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0383166122385760405162461bcd60e51b8152600401610c9790613677565b6001600160a01b03821661225e5760405162461bcd60e51b8152600401610c97906136bc565b8061226f5761132683836000612c84565b60125460ff16156126e2576005546001600160a01b038481169116148015906122a657506005546001600160a01b03838116911614155b80156122ba57506001600160a01b03821615155b80156122d157506001600160a01b03821661dead14155b80156122e75750600c54600160a01b900460ff16155b156126e257601254610100900460ff1661237d576001600160a01b038316600090815260208052604090205460ff168061233857506001600160a01b038216600090815260208052604090205460ff165b61237d5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610c97565b60145460ff161561247c576005546001600160a01b038381169116148015906123b45750600b546001600160a01b03838116911614155b80156123ce5750600c546001600160a01b03838116911614155b1561247c573260009081526013602052604090205443116124695760405162461bcd60e51b815260206004820152604960248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b6064820152681030b63637bbb2b21760b91b608482015260a401610c97565b3260009081526013602052604090204390555b6001600160a01b03831660009081526022602052604090205460ff1680156124bd57506001600160a01b03821660009081526021602052604090205460ff16155b156125a157600f548111156125325760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b6064820152608401610c97565b6011546001600160a01b03831660009081526020819052604090205461255890836135fa565b111561259c5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610c97565b6126e2565b6001600160a01b03821660009081526022602052604090205460ff1680156125e257506001600160a01b03831660009081526021602052604090205460ff16155b1561265857600f5481111561259c5760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152751036b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760511b6064820152608401610c97565b6001600160a01b03821660009081526021602052604090205460ff166126e2576011546001600160a01b03831660009081526020819052604090205461269e90836135fa565b11156126e25760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610c97565b306000908152602081905260409020546010548110801590819061270e575060125462010000900460ff165b80156127245750600c54600160a01b900460ff16155b801561274957506001600160a01b03851660009081526022602052604090205460ff16155b801561276d57506001600160a01b038516600090815260208052604090205460ff16155b801561279157506001600160a01b038416600090815260208052604090205460ff16155b156127bf57600c805460ff60a01b1916600160a01b1790556127b1612d8d565b600c805460ff60a01b191690555b600c546001600160a01b038616600090815260208052604090205460ff600160a01b90920482161591168061280b57506001600160a01b038516600090815260208052604090205460ff165b15612814575060005b600081156129ff576001600160a01b03861660009081526022602052604090205460ff16801561284657506000601954115b156129045761286b606461286560195488612fc790919063ffffffff16565b90613046565b9050601954601b548261287e9190613598565b61288891906135cd565b601e600082825461289991906135fa565b9091555050601954601c546128ae9083613598565b6128b891906135cd565b601f60008282546128c991906135fa565b9091555050601954601a546128de9083613598565b6128e891906135cd565b601d60008282546128f991906135fa565b909155506129e19050565b6001600160a01b03871660009081526022602052604090205460ff16801561292e57506000601554115b156129e15761294d606461286560155488612fc790919063ffffffff16565b9050601554601754826129609190613598565b61296a91906135cd565b601e600082825461297b91906135fa565b90915550506015546018546129909083613598565b61299a91906135cd565b601f60008282546129ab91906135fa565b90915550506015546016546129c09083613598565b6129ca91906135cd565b601d60008282546129db91906135fa565b90915550505b80156129f2576129f2873083612c84565b6129fc8186613643565b94505b612a0a878787612c84565b50505050505050565b60008184841115612a375760405162461bcd60e51b8152600401610c979190613324565b506000612a448486613643565b95945050505050565b6001600160a01b038216612aad5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610c97565b612aea816040518060600160405280602281526020016137b5602291396001600160a01b0385166000908152602081905260409020549190612a13565b6001600160a01b038316600090815260208190526040902055600254612b109082613088565b6002556040518181526000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020015b60405180910390a35050565b6001600160a01b038216612baf5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610c97565b600254612bbc9082612087565b6002556001600160a01b038216600090815260208190526040902054612be29082612087565b6001600160a01b038316600081815260208181526040808320949094559251848152919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101612b4d565b6001600160a01b038216600081815260226020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b038316612caa5760405162461bcd60e51b8152600401610c9790613677565b6001600160a01b038216612cd05760405162461bcd60e51b8152600401610c97906136bc565b612d0d816040518060600160405280602681526020016137d7602691396001600160a01b0386166000908152602081905260409020549190612a13565b6001600160a01b038085166000908152602081905260408082209390935590841681522054612d3c9082612087565b6001600160a01b038381166000818152602081815260409182902094909455518481529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101612205565b3060009081526020819052604081205490506000601f54601d54601e54612db491906135fa565b612dbe91906135fa565b90506000821580612dcd575081155b15612dd757505050565b601054612de5906014613598565b831115612dfd57601054612dfa906014613598565b92505b6000600283601e5486612e109190613598565b612e1a91906135cd565b612e2491906135cd565b90506000612e328583613088565b905047612e3e826130ca565b6000612e4a4783613088565b90506000612e6787612865601d5485612fc790919063ffffffff16565b90506000612e8488612865601f5486612fc790919063ffffffff16565b9050600081612e938486613643565b612e9d9190613643565b6000601e819055601d819055601f819055600e546040519293506001600160a01b031691849181818185875af1925050503d8060008114612efa576040519150601f19603f3d011682016040523d82523d6000602084013e612eff565b606091505b50909850508615801590612f135750600081115b15612f6657612f228782613233565b601e54604080518881526020810184905280820192909252517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a15b600d546040516001600160a01b03909116904790600081818185875af1925050503d8060008114612fb3576040519150601f19603f3d011682016040523d82523d6000602084013e612fb8565b606091505b50505050505050505050505050565b600082612fd657506000610c67565b6000612fe28385613598565b905082612fef85836135cd565b146120e65760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610c97565b60006120e683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506132f6565b60006120e683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612a13565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106130ff576130ff6136ff565b6001600160a01b03928316602091820292909201810191909152600b54604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561315357600080fd5b505afa158015613167573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061318b919061365a565b8160018151811061319e5761319e6136ff565b6001600160a01b039283166020918202929092010152600b546131c491309116846120ed565b600b5460405163791ac94760e01b81526001600160a01b039091169063791ac947906131fd908590600090869030904290600401613715565b600060405180830381600087803b15801561321757600080fd5b505af115801561322b573d6000803e3d6000fd5b505050505050565b600b5461324b9030906001600160a01b0316846120ed565b600b54600d5460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c4016060604051808303818588803b1580156132b657600080fd5b505af11580156132ca573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906132ef9190613786565b5050505050565b600081836133175760405162461bcd60e51b8152600401610c979190613324565b506000612a4484866135cd565b600060208083528351808285015260005b8181101561335157858101830151858201604001528201613335565b81811115613363576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b03811681146110d557600080fd5b600080604083850312156133a157600080fd5b82356133ac81613379565b946020939093013593505050565b6000602082840312156133cc57600080fd5b81356120e681613379565b6000602082840312156133e957600080fd5b5035919050565b60008060006060848603121561340557600080fd5b833561341081613379565b9250602084013561342081613379565b929592945050506040919091013590565b60006020828403121561344357600080fd5b813560ff811681146120e657600080fd5b80151581146110d557600080fd5b6000806040838503121561347557600080fd5b823561348081613379565b9150602083013561349081613454565b809150509250929050565b6000806000606084860312156134b057600080fd5b505081359360208301359350604090920135919050565b6000602082840312156134d957600080fd5b81356120e681613454565b600080604083850312156134f757600080fd5b823561350281613379565b9150602083013561349081613379565b600181811c9082168061352657607f821691505b6020821081141561354757634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60008160001904831182151516156135b2576135b2613582565b500290565b634e487b7160e01b600052601260045260246000fd5b6000826135dc576135dc6135b7565b500490565b6000602082840312156135f357600080fd5b5051919050565b6000821982111561360d5761360d613582565b500190565b60006020828403121561362457600080fd5b81516120e681613454565b60008261363e5761363e6135b7565b500690565b60008282101561365557613655613582565b500390565b60006020828403121561366c57600080fd5b81516120e681613379565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156137655784516001600160a01b031683529383019391830191600101613740565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561379b57600080fd5b835192506020840151915060408401519050925092509256fe45524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220c9b51a5c8bd843242273d8ecd4f17b749c868f6bbdcb2b72d2af06fa4e99ba5964736f6c634300080900334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65720000000000000000000000008e79c8607a28fe1ec3527991c89f1d9e36d1bad9

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

0000000000000000000000008e79c8607a28fe1ec3527991c89f1d9e36d1bad9

-----Decoded View---------------
Arg [0] : _randomizer (address): 0x8e79c8607a28fe1ec3527991c89f1d9e36d1bad9

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000008e79c8607a28fe1ec3527991c89f1d9e36d1bad9


Deployed ByteCode Sourcemap

31968:18078:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38360:115;;;;;;;;;;;;38420:10;38412:19;;;;:7;:19;;;;;;;;38405:26;;;38449:6;:18;;;;;38442:25;38360:115;;;9445:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11612:169;;;;;;;;;;-1:-1:-1;11612:169:0;;;;;:::i;:::-;;:::i;:::-;;;1237:14:1;;1230:22;1212:41;;1200:2;1185:18;11612:169:0;1072:187:1;33619:64:0;;;;;;;;;;-1:-1:-1;33619:64:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;32349:41;;;;;;;;;;-1:-1:-1;32349:41:0;;;;-1:-1:-1;;;;;32349:41:0;;;;;;-1:-1:-1;;;;;1707:32:1;;;1689:51;;1677:2;1662:18;32349:41:0;1516:230:1;10565:108:0;;;;;;;;;;-1:-1:-1;10653:12:0;;10565:108;;;1897:25:1;;;1885:2;1870:18;10565:108:0;1751:177:1;42469:157:0;;;;;;;;;;-1:-1:-1;42469:157:0;;;;;:::i;:::-;;:::i;33398:33::-;;;;;;;;;;;;;;;;33358;;;;;;;;;;;;;;;;40018:234;;;;;;;;;;-1:-1:-1;40018:234:0;;;;;:::i;:::-;;:::i;12263:355::-;;;;;;;;;;-1:-1:-1;12263:355:0;;;;;:::i;:::-;;:::i;32432:53::-;;;;;;;;;;;;32478:6;32432:53;;10407:93;;;;;;;;;;-1:-1:-1;10407:93:0;;10490:2;2929:36:1;;2917:2;2902:18;10407:93:0;2787:184:1;32100:41:0;;;;;;;;;;-1:-1:-1;32100:41:0;;;;;:::i;:::-;;;;;;;;;;;;;;13027:218;;;;;;;;;;-1:-1:-1;13027:218:0;;;;;:::i;:::-;;:::i;37007:419::-;;;;;;;;;;-1:-1:-1;37007:419:0;;;;;:::i;:::-;;:::i;32148:42::-;;;;;;;;;;-1:-1:-1;32148:42:0;;;;;:::i;:::-;;;;;;;;;;;;;;32397:28;;;;;;;;;;-1:-1:-1;32397:28:0;;;;-1:-1:-1;;;;;32397:28:0;;;32713:33;;;;;;;;;;-1:-1:-1;32713:33:0;;;;;;;;42638:125;;;;;;;;;;-1:-1:-1;42638:125:0;;;;;:::i;:::-;-1:-1:-1;;;;;42727:28:0;42703:4;42727:28;;;:19;:28;;;;;;;;;42638:125;49739:105;;;;;;;;;;;;;:::i;33209:28::-;;;;;;;;;;;;;;;;32793:31;;;;;;;;;;-1:-1:-1;32793:31:0;;;;;;;;;;;10736:127;;;;;;;;;;-1:-1:-1;10736:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;10837:18:0;10810:7;10837:18;;;;;;;;;;;;10736:127;23910:148;;;;;;;;;;;;;:::i;38186:166::-;;;;;;;;;;-1:-1:-1;38186:166:0;;;;;:::i;:::-;;:::i;39231:120::-;;;;;;;;;;;;;:::i;40487:144::-;;;;;;;;;;-1:-1:-1;40487:144:0;;;;;:::i;:::-;;:::i;32524:30::-;;;;;;;;;;-1:-1:-1;32524:30:0;;;;-1:-1:-1;;;;;32524:30:0;;;33098;;;;;;;;;;;;;;;;40844:369;;;;;;;;;;-1:-1:-1;40844:369:0;;;;;:::i;:::-;;:::i;37434:744::-;;;;;;;;;;;;;:::i;39063:112::-;;;;;;;;;;;;;:::i;23268:79::-;;;;;;;;;;-1:-1:-1;23333:6:0;;-1:-1:-1;;;;;23333:6:0;23268:79;;32561:24;;;;;;;;;;-1:-1:-1;32561:24:0;;;;-1:-1:-1;;;;;32561:24:0;;;33244:31;;;;;;;;;;;;;;;;40731:101;;;;;;;;;;-1:-1:-1;40731:101:0;;;;;:::i;:::-;;:::i;9664:104::-;;;;;;;;;;;;;:::i;41801:244::-;;;;;;;;;;-1:-1:-1;41801:244:0;;;;;:::i;:::-;;:::i;33172:24::-;;;;;;;;;;;;;;;;33438:27;;;;;;;;;;;;;;;;33320:25;;;;;;;;;;;;;;;;13748:269;;;;;;;;;;-1:-1:-1;13748:269:0;;;;;:::i;:::-;;:::i;11076:175::-;;;;;;;;;;-1:-1:-1;11076:175:0;;;;;:::i;:::-;;:::i;42249:208::-;;;;;;;;;;-1:-1:-1;42249:208:0;;;;;:::i;:::-;;:::i;32321:19::-;;;;;;;;;;;;;;;;33841:58;;;;;;;;;;-1:-1:-1;33841:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;32753:33;;;;;;;;;;-1:-1:-1;32753:33:0;;;;;;;;;;;41611:182;;;;;;;;;;-1:-1:-1;41611:182:0;;;;;:::i;:::-;;:::i;38483:526::-;;;;;;;;;;-1:-1:-1;38483:526:0;;;;;:::i;:::-;;:::i;41225:378::-;;;;;;;;;;-1:-1:-1;41225:378:0;;;;;:::i;:::-;;:::i;40260:215::-;;;;;;;;;;-1:-1:-1;40260:215:0;;;;;:::i;:::-;;:::i;33016:39::-;;;;;;;;;;-1:-1:-1;33016:39:0;;;;;;;;32598:35;;;;;;;;;;;;;;;;49852:191;;;;;;;;;;;;;:::i;39625:381::-;;;;;;;;;;-1:-1:-1;39625:381:0;;;;;:::i;:::-;;:::i;33064:27::-;;;;;;;;;;;;;;;;11314:151;;;;;;;;;;-1:-1:-1;11314:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;11430:18:0;;;11403:7;11430:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;11314:151;32640:33;;;;;;;;;;;;;;;;39416:134;;;;;;;;;;;;;:::i;32064:29::-;;;;;;;;;;-1:-1:-1;32064:29:0;;;;-1:-1:-1;;;;;32064:29:0;;;33135:30;;;;;;;;;;;;;;;;24213:244;;;;;;;;;;-1:-1:-1;24213:244:0;;;;;:::i;:::-;;:::i;33282:31::-;;;;;;;;;;;;;;;;32680:24;;;;;;;;;;;;;;;;9445:100;9499:13;9532:5;9525:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9445:100;:::o;11612:169::-;11695:4;11712:39;2161:10;11735:7;11744:6;11712:8;:39::i;:::-;-1:-1:-1;11769:4:0;11612:169;;;;;:::o;42469:157::-;23480:6;;-1:-1:-1;;;;;23480:6:0;2161:10;23480:22;23472:67;;;;-1:-1:-1;;;23472:67:0;;;;;;;:::i;:::-;;;;;;;;;42576:9:::1;::::0;42548:38:::1;::::0;-1:-1:-1;;;;;42576:9:0;;::::1;::::0;42548:38;::::1;::::0;::::1;::::0;42576:9:::1;::::0;42548:38:::1;42597:9;:21:::0;;-1:-1:-1;;;;;;42597:21:0::1;-1:-1:-1::0;;;;;42597:21:0;;;::::1;::::0;;;::::1;::::0;;42469:157::o;40018:234::-;23480:6;;-1:-1:-1;;;;;23480:6:0;2161:10;23480:22;23472:67;;;;-1:-1:-1;;;23472:67:0;;;;;;;:::i;:::-;40137:4:::1;40131;40111:13;10653:12:::0;;;10565:108;40111:13:::1;:17;::::0;40127:1:::1;40111:17;:::i;:::-;:24;;;;:::i;:::-;40110:31;;;;:::i;:::-;40100:6;:41;;40092:101;;;::::0;-1:-1:-1;;;40092:101:0;;6458:2:1;40092:101:0::1;::::0;::::1;6440:21:1::0;6497:2;6477:18;;;6470:30;6536:34;6516:18;;;6509:62;-1:-1:-1;;;6587:18:1;;;6580:45;6642:19;;40092:101:0::1;6256:411:1::0;40092:101:0::1;40227:17;:6:::0;40237::::1;40227:17;:::i;:::-;40204:20;:40:::0;-1:-1:-1;40018:234:0:o;12263:355::-;12403:4;12420:36;12430:6;12438:9;12449:6;12420:9;:36::i;:::-;12467:121;12476:6;2161:10;12498:89;12536:6;12498:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12498:19:0;;;;;;:11;:19;;;;;;;;2161:10;12498:33;;;;;;;;;;:37;:89::i;:::-;12467:8;:121::i;:::-;-1:-1:-1;12606:4:0;12263:355;;;;;:::o;13027:218::-;2161:10;13115:4;13164:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;13164:34:0;;;;;;;;;;13115:4;;13132:83;;13155:7;;13164:50;;13203:10;13164:38;:50::i;37007:419::-;31419:6;;31429:1;31419:11;31415:53;;31448:12;;-1:-1:-1;;;31448:12:0;;;;;;;;;;;31415:53;31485:1;31476:6;:10;37103:3:::1;37087:13;10653:12:::0;;;10565:108;37087:13:::1;:19;;;;:::i;:::-;37076:7;:30;;37068:92;;;::::0;-1:-1:-1;;;37068:92:0;;6874:2:1;37068:92:0::1;::::0;::::1;6856:21:1::0;6913:2;6893:18;;;6886:30;6952:34;6932:18;;;6925:62;-1:-1:-1;;;7003:18:1;;;6996:47;7060:19;;37068:92:0::1;6672:413:1::0;37068:92:0::1;37186:10;37179:18;::::0;;;:6:::1;:18;::::0;;;;;:23;37171:60:::1;;;::::0;-1:-1:-1;;;37171:60:0;;7292:2:1;37171:60:0::1;::::0;::::1;7274:21:1::0;7331:2;7311:18;;;7304:30;7370:26;7350:18;;;7343:54;7414:18;;37171:60:0::1;7090:348:1::0;37171:60:0::1;37242:26;37248:10;37260:7;37242:5;:26::i;:::-;37300:10;;;;;;;;;-1:-1:-1::0;;;;;37300:10:0::1;-1:-1:-1::0;;;;;37300:30:0::1;;:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37286:10;37279:18;::::0;;;:6:::1;:18;::::0;;;;:53;37366:11:::1;:7:::0;37376:1:::1;37366:11;:::i;:::-;37351:10;37343:19;::::0;;;:7:::1;:19;::::0;;;;;;:35;;;;37394:24;;::::1;::::0;::::1;::::0;37410:7;1897:25:1;;1885:2;1870:18;;1751:177;37394:24:0::1;;;;;;;;-1:-1:-1::0;31514:1:0;31505:6;:10;37007:419::o;49739:105::-;23480:6;;-1:-1:-1;;;;;23480:6:0;2161:10;23480:22;23472:67;;;;-1:-1:-1;;;23472:67:0;;;;;;;:::i;:::-;49785:51:::1;::::0;49793:10:::1;::::0;49814:21:::1;49785:51:::0;::::1;;;::::0;::::1;::::0;;;49814:21;49793:10;49785:51;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;49739:105::o:0;23910:148::-;23480:6;;-1:-1:-1;;;;;23480:6:0;2161:10;23480:22;23472:67;;;;-1:-1:-1;;;23472:67:0;;;;;;;:::i;:::-;24001:6:::1;::::0;23980:40:::1;::::0;24017:1:::1;::::0;-1:-1:-1;;;;;24001:6:0::1;::::0;23980:40:::1;::::0;24017:1;;23980:40:::1;24031:6;:19:::0;;-1:-1:-1;;;;;;24031:19:0::1;::::0;;23910:148::o;38186:166::-;23480:6;;-1:-1:-1;;;;;23480:6:0;2161:10;23480:22;23472:67;;;;-1:-1:-1;;;23472:67:0;;;;;;;:::i;:::-;38260:2:::1;38251:5;:11;;;;38243:78;;;::::0;-1:-1:-1;;;38243:78:0;;7834:2:1;38243:78:0::1;::::0;::::1;7816:21:1::0;7873:2;7853:18;;;7846:30;7912:34;7892:18;;;7885:62;-1:-1:-1;;;7963:18:1;;;7956:52;8025:19;;38243:78:0::1;7632:418:1::0;38243:78:0::1;38332:12;;:4;:12:::0;38186:166::o;39231:120::-;23480:6;;39283:4;;-1:-1:-1;;;;;23480:6:0;2161:10;23480:22;23472:67;;;;-1:-1:-1;;;23472:67:0;;;;;;;:::i;:::-;-1:-1:-1;39299:14:0::1;:22:::0;;-1:-1:-1;;39299:22:0::1;::::0;;;39231:120;:::o;40487:144::-;23480:6;;-1:-1:-1;;;;;23480:6:0;2161:10;23480:22;23472:67;;;;-1:-1:-1;;;23472:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;40577:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;40577:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;40487:144::o;40844:369::-;23480:6;;-1:-1:-1;;;;;23480:6:0;2161:10;23480:22;23472:67;;;;-1:-1:-1;;;23472:67:0;;;;;;;:::i;:::-;40960:15:::1;:31:::0;;;41002:15:::1;:31:::0;;;41044:9:::1;:19:::0;;;41056:7;41089:33:::1;41020:13:::0;40978;41089:33:::1;:::i;:::-;:45;;;;:::i;:::-;41074:12;:60:::0;;;41169:2:::1;-1:-1:-1::0;41153:18:0::1;41145:60;;;::::0;-1:-1:-1;;;41145:60:0;;8390:2:1;41145:60:0::1;::::0;::::1;8372:21:1::0;8429:2;8409:18;;;8402:30;8468:31;8448:18;;;8441:59;8517:18;;41145:60:0::1;8188:353:1::0;41145:60:0::1;40844:369:::0;;;:::o;37434:744::-;31419:6;;31429:1;31419:11;31415:53;;31448:12;;-1:-1:-1;;;31448:12:0;;;;;;;;;;;31415:53;31485:1;31476:6;:10;37497::::1;37490:18;::::0;;;:6:::1;:18;::::0;;;;;37482:67:::1;;;::::0;-1:-1:-1;;;37482:67:0;;8748:2:1;37482:67:0::1;::::0;::::1;8730:21:1::0;8787:2;8767:18;;;8760:30;8826:33;8806:18;;;8799:61;8877:18;;37482:67:0::1;8546:355:1::0;37482:67:0::1;37568:10;::::0;37600::::1;37568;37593:18:::0;;;:6:::1;:18;::::0;;;;;;;37568:44;;-1:-1:-1;;;37568:44:0;;-1:-1:-1;;;;;37568:10:0;;::::1;::::0;:24:::1;::::0;:44:::1;::::0;::::1;;1897:25:1::0;;;1885:2;1870:18;;1751:177;37568:44:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37560:92;;;::::0;-1:-1:-1;;;37560:92:0;;9358:2:1;37560:92:0::1;::::0;::::1;9340:21:1::0;9397:2;9377:18;;;9370:30;9436:34;9416:18;;;9409:62;-1:-1:-1;;;9487:18:1;;;9480:33;9530:19;;37560:92:0::1;9156:399:1::0;37560:92:0::1;37706:10;::::0;37743::::1;37663:17;37736:18:::0;;;:6:::1;:18;::::0;;;;;;37706:49;;-1:-1:-1;;;37706:49:0;;::::1;::::0;::::1;1897:25:1::0;;;;37663:17:0;;;;-1:-1:-1;;;;;37706:10:0;;::::1;::::0;:29:::1;::::0;1870:18:1;;37706:49:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37691:64;;37817:3;37807:4;37796:16;;;;;;1897:25:1::0;;1885:2;1870:18;;1751:177;37796:16:0::1;;;;;;;;;;;;;37786:27;;;;;;37778:36;;:42;;;;:::i;:::-;37766:54;;37853:4;;37848:2;:9;;;;:::i;:::-;37835;:23;37831:267;;;37880:10;37892:19;::::0;;;:7:::1;:19;::::0;;;;;37874:38:::1;::::0;37880:10;37874:5:::1;:38::i;:::-;37936:10;37965:19;::::0;;;:7:::1;:19;::::0;;;;;;;37932:53;;::::1;::::0;::::1;::::0;37948:9;;37959:4:::1;::::0;10003:25:1;;;10071:14;;10064:22;10059:2;10044:18;;10037:50;10118:2;10103:18;;10096:34;9991:2;9976:18;;9807:329;37932:53:0::1;;;;;;;;37831:267;;;38036:10;38059:5;38066:19:::0;;;:7:::1;:19;::::0;;;;;;38032:54;;::::1;::::0;::::1;::::0;38048:9;10003:25:1;;10071:14;;10064:22;10059:2;10044:18;;10037:50;10118:2;10103:18;;10096:34;9991:2;9976:18;;9807:329;38032:54:0::1;;;;;;;;37831:267;-1:-1:-1::0;;38123:10:0::1;38115:19;::::0;;;:7:::1;:19;::::0;;;;;;;38108:26;;;38152:6:::1;:18:::0;;;;;38145:25;31514:1;31505:6;:10;37434:744::o;39063:112::-;23480:6;;-1:-1:-1;;;;;23480:6:0;2161:10;23480:22;23472:67;;;;-1:-1:-1;;;23472:67:0;;;;;;;:::i;:::-;39118:13:::1;:20:::0;;-1:-1:-1;;39149:18:0;;;;;39063:112::o;40731:101::-;23480:6;;-1:-1:-1;;;;;23480:6:0;2161:10;23480:22;23472:67;;;;-1:-1:-1;;;23472:67:0;;;;;;;:::i;:::-;40803:11:::1;:21:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;40803:21:0;;::::1;::::0;;;::::1;::::0;;40731:101::o;9664:104::-;9720:13;9753:7;9746:14;;;;;:::i;41801:244::-;23480:6;;-1:-1:-1;;;;;23480:6:0;2161:10;23480:22;23472:67;;;;-1:-1:-1;;;23472:67:0;;;;;;;:::i;:::-;41908:13:::1;::::0;-1:-1:-1;;;;;41900:21:0;;::::1;41908:13:::0;::::1;41900:21;;41892:91;;;::::0;-1:-1:-1;;;41892:91:0;;10343:2:1;41892:91:0::1;::::0;::::1;10325:21:1::0;10382:2;10362:18;;;10355:30;10421:34;10401:18;;;10394:62;10492:27;10472:18;;;10465:55;10537:19;;41892:91:0::1;10141:421:1::0;41892:91:0::1;41996:41;42025:4;42031:5;41996:28;:41::i;:::-;41801:244:::0;;:::o;13748:269::-;13841:4;13858:129;2161:10;13881:7;13890:96;13929:15;13890:96;;;;;;;;;;;;;;;;;2161:10;13890:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;13890:34:0;;;;;;;;;;;;:38;:96::i;11076:175::-;11162:4;11179:42;2161:10;11203:9;11214:6;11179:9;:42::i;42249:208::-;23480:6;;-1:-1:-1;;;;;23480:6:0;2161:10;23480:22;23472:67;;;;-1:-1:-1;;;23472:67:0;;;;;;;:::i;:::-;42386:15:::1;::::0;42343:59:::1;::::0;-1:-1:-1;;;;;42386:15:0;;::::1;::::0;42343:59;::::1;::::0;::::1;::::0;42386:15:::1;::::0;42343:59:::1;42413:15;:36:::0;;-1:-1:-1;;;;;;42413:36:0::1;-1:-1:-1::0;;;;;42413:36:0;;;::::1;::::0;;;::::1;::::0;;42249:208::o;41611:182::-;23480:6;;-1:-1:-1;;;;;23480:6:0;2161:10;23480:22;23472:67;;;;-1:-1:-1;;;23472:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;41696:28:0;::::1;;::::0;;;:19:::1;:28:::0;;;;;;;;:39;;-1:-1:-1;;41696:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;41751:34;;1212:41:1;;;41751:34:0::1;::::0;1185:18:1;41751:34:0::1;;;;;;;41611:182:::0;;:::o;38483:526::-;23480:6;;-1:-1:-1;;;;;23480:6:0;2161:10;23480:22;23472:67;;;;-1:-1:-1;;;23472:67:0;;;;;;;:::i;:::-;38602:6;38630:58:::1;38602:6:::0;38683:4:::1;38630:25;:58::i;:::-;38699:15;:34:::0;;-1:-1:-1;;;;;;38699:34:0::1;-1:-1:-1::0;;;;;38699:34:0;::::1;::::0;;::::1;::::0;;;38788:26:::1;::::0;;-1:-1:-1;;;38788:26:0;;;;:24:::1;::::0;:26:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;38699:34;38788:26;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;38770:56:0::1;;38835:4;38842:16;-1:-1:-1::0;;;;;38842:21:0::1;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38770:96;::::0;-1:-1:-1;;;;;;38770:96:0::1;::::0;;;;;;-1:-1:-1;;;;;11053:15:1;;;38770:96:0::1;::::0;::::1;11035:34:1::0;11105:15;;11085:18;;;11078:43;10970:18;;38770:96:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38754:13;:112:::0;;-1:-1:-1;;;;;;38754:112:0::1;-1:-1:-1::0;;;;;38754:112:0;;;::::1;::::0;;::::1;::::0;;38877:55:::1;::::0;-1:-1:-1;38877:25:0::1;:55::i;:::-;38980:13;::::0;38943:58:::1;::::0;-1:-1:-1;;;;;38980:13:0::1;::::0;38943:28:::1;:58::i;41225:378::-:0;23480:6;;-1:-1:-1;;;;;23480:6:0;2161:10;23480:22;23472:67;;;;-1:-1:-1;;;23472:67:0;;;;;;;:::i;:::-;41342:16:::1;:32:::0;;;41385:16:::1;:32:::0;;;41428:10:::1;:20:::0;;;41441:7;41475:35:::1;41404:13:::0;41361;41475:35:::1;:::i;:::-;:48;;;;:::i;:::-;41459:13;:64:::0;;;-1:-1:-1;41542:19:0::1;41534:61;;;::::0;-1:-1:-1;;;41534:61:0;;11334:2:1;41534:61:0::1;::::0;::::1;11316:21:1::0;11373:2;11353:18;;;11346:30;11412:31;11392:18;;;11385:59;11461:18;;41534:61:0::1;11132:353:1::0;40260:215:0;23480:6;;-1:-1:-1;;;;;23480:6:0;2161:10;23480:22;23472:67;;;;-1:-1:-1;;;23472:67:0;;;;;;;:::i;:::-;40382:4:::1;40376;40356:13;10653:12:::0;;;10565:108;40356:13:::1;:17;::::0;40372:1:::1;40356:17;:::i;:::-;:24;;;;:::i;:::-;40355:31;;;;:::i;:::-;40345:6;:41;;40337:90;;;::::0;-1:-1:-1;;;40337:90:0;;11692:2:1;40337:90:0::1;::::0;::::1;11674:21:1::0;11731:2;11711:18;;;11704:30;11770:34;11750:18;;;11743:62;-1:-1:-1;;;11821:18:1;;;11814:34;11865:19;;40337:90:0::1;11490:400:1::0;40337:90:0::1;40450:17;:6:::0;40460::::1;40450:17;:::i;:::-;40438:9;:29:::0;-1:-1:-1;40260:215:0:o;49852:191::-;23480:6;;-1:-1:-1;;;;;23480:6:0;2161:10;23480:22;23472:67;;;;-1:-1:-1;;;23472:67:0;;;;;;;:::i;:::-;49905:4:::1;:12;:4:::0;49933:13:::1;10653:12:::0;;;10565:108;49933:13:::1;49905:42;::::0;-1:-1:-1;;;;;;49905:42:0::1;::::0;;;;;;-1:-1:-1;;;;;12087:32:1;;;49905:42:0::1;::::0;::::1;12069:51:1::0;12136:18;;;12129:34;12042:18;;49905:42:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;49958:4:0::1;:17;:4:::0;49991:7:::1;23333:6:::0;;-1:-1:-1;;;;;23333:6:0;;23268:79;49991:7:::1;50018:4;10810:7:::0;10837:18;;;;;;;;;;;49958:67:::1;::::0;-1:-1:-1;;;;;;49958:67:0::1;::::0;;;;;;-1:-1:-1;;;;;12432:15:1;;;49958:67:0::1;::::0;::::1;12414:34:1::0;12484:15;;;;12464:18;;;12457:43;12516:18;;;12509:34;12349:18;;49958:67:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;39625:381::-:0;23480:6;;39706:4;;-1:-1:-1;;;;;23480:6:0;2161:10;23480:22;23472:67;;;;-1:-1:-1;;;23472:67:0;;;;;;;:::i;:::-;39762:6:::1;39742:13;10653:12:::0;;;10565:108;39742:13:::1;:17;::::0;39758:1:::1;39742:17;:::i;:::-;:26;;;;:::i;:::-;39729:9;:39;;39721:105;;;::::0;-1:-1:-1;;;39721:105:0;;12756:2:1;39721:105:0::1;::::0;::::1;12738:21:1::0;12795:2;12775:18;;;12768:30;12834:34;12814:18;;;12807:62;-1:-1:-1;;;12885:18:1;;;12878:51;12946:19;;39721:105:0::1;12554:417:1::0;39721:105:0::1;39877:4;39857:13;10653:12:::0;;;10565:108;39857:13:::1;:17;::::0;39873:1:::1;39857:17;:::i;:::-;:24;;;;:::i;:::-;39844:9;:37;;39836:102;;;::::0;-1:-1:-1;;;39836:102:0;;13178:2:1;39836:102:0::1;::::0;::::1;13160:21:1::0;13217:2;13197:18;;;13190:30;13256:34;13236:18;;;13229:62;-1:-1:-1;;;13307:18:1;;;13300:50;13367:19;;39836:102:0::1;12976:416:1::0;39836:102:0::1;-1:-1:-1::0;39948:18:0::1;:30:::0;39995:4:::1;::::0;39625:381::o;39416:134::-;23480:6;;39476:4;;-1:-1:-1;;;;;23480:6:0;2161:10;23480:22;23472:67;;;;-1:-1:-1;;;23472:67:0;;;;;;;:::i;:::-;-1:-1:-1;39492:20:0::1;:28:::0;;-1:-1:-1;;39492:28:0::1;::::0;;;39416:134;:::o;24213:244::-;23480:6;;-1:-1:-1;;;;;23480:6:0;2161:10;23480:22;23472:67;;;;-1:-1:-1;;;23472:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24302:22:0;::::1;24294:73;;;::::0;-1:-1:-1;;;24294:73:0;;13599:2:1;24294:73:0::1;::::0;::::1;13581:21:1::0;13638:2;13618:18;;;13611:30;13677:34;13657:18;;;13650:62;-1:-1:-1;;;13728:18:1;;;13721:36;13774:19;;24294:73:0::1;13397:402:1::0;24294:73:0::1;24404:6;::::0;24383:38:::1;::::0;-1:-1:-1;;;;;24383:38:0;;::::1;::::0;24404:6:::1;::::0;24383:38:::1;::::0;24404:6:::1;::::0;24383:38:::1;24432:6;:17:::0;;-1:-1:-1;;;;;;24432:17:0::1;-1:-1:-1::0;;;;;24432:17:0;;;::::1;::::0;;;::::1;::::0;;24213:244::o;18312:181::-;18370:7;;18402:5;18406:1;18402;:5;:::i;:::-;18390:17;;18431:1;18426;:6;;18418:46;;;;-1:-1:-1;;;18418:46:0;;14006:2:1;18418:46:0;;;13988:21:1;14045:2;14025:18;;;14018:30;14084:29;14064:18;;;14057:57;14131:18;;18418:46:0;13804:351:1;18418:46:0;18484:1;18312:181;-1:-1:-1;;;18312:181:0:o;16934:380::-;-1:-1:-1;;;;;17070:19:0;;17062:68;;;;-1:-1:-1;;;17062:68:0;;14362:2:1;17062:68:0;;;14344:21:1;14401:2;14381:18;;;14374:30;14440:34;14420:18;;;14413:62;-1:-1:-1;;;14491:18:1;;;14484:34;14535:19;;17062:68:0;14160:400:1;17062:68:0;-1:-1:-1;;;;;17149:21:0;;17141:68;;;;-1:-1:-1;;;17141:68:0;;14767:2:1;17141:68:0;;;14749:21:1;14806:2;14786:18;;;14779:30;14845:34;14825:18;;;14818:62;-1:-1:-1;;;14896:18:1;;;14889:32;14938:19;;17141:68:0;14565:398:1;17141:68:0;-1:-1:-1;;;;;17222:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;17274:32;;1897:25:1;;;17274:32:0;;1870:18:1;17274:32:0;;;;;;;;16934:380;;;:::o;42775:4134::-;-1:-1:-1;;;;;42907:18:0;;42899:68;;;;-1:-1:-1;;;42899:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;42986:16:0;;42978:64;;;;-1:-1:-1;;;42978:64:0;;;;;;;:::i;:::-;43067:11;43064:92;;43095:28;43111:4;43117:2;43121:1;43095:15;:28::i;43064:92::-;43179:14;;;;43176:1841;;;23333:6;;-1:-1:-1;;;;;43231:15:0;;;23333:6;;43231:15;;;;:49;;-1:-1:-1;23333:6:0;;-1:-1:-1;;;;;43267:13:0;;;23333:6;;43267:13;;43231:49;:86;;;;-1:-1:-1;;;;;;43301:16:0;;;;43231:86;:128;;;;-1:-1:-1;;;;;;43338:21:0;;43352:6;43338:21;;43231:128;:158;;;;-1:-1:-1;43381:8:0;;-1:-1:-1;;;43381:8:0;;;;43380:9;43231:158;43209:1797;;;43427:13;;;;;;;43423:148;;-1:-1:-1;;;;;43472:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;43501:23:0;;;;;;:19;:23;;;;;;;;43472:52;43464:87;;;;-1:-1:-1;;;43464:87:0;;15980:2:1;43464:87:0;;;15962:21:1;16019:2;15999:18;;;15992:30;-1:-1:-1;;;16038:18:1;;;16031:52;16100:18;;43464:87:0;15778:346:1;43464:87:0;43729:20;;;;43725:423;;;23333:6;;-1:-1:-1;;;;;43777:13:0;;;23333:6;;43777:13;;;;:47;;-1:-1:-1;43808:15:0;;-1:-1:-1;;;;;43794:30:0;;;43808:15;;43794:30;;43777:47;:79;;;;-1:-1:-1;43842:13:0;;-1:-1:-1;;;;;43828:28:0;;;43842:13;;43828:28;;43777:79;43773:356;;;43921:9;43892:39;;;;:28;:39;;;;;;43934:12;-1:-1:-1;43884:140:0;;;;-1:-1:-1;;;43884:140:0;;16331:2:1;43884:140:0;;;16313:21:1;16370:2;16350:18;;;16343:30;16409:34;16389:18;;;16382:62;16480:34;16460:18;;;16453:62;-1:-1:-1;;;16531:19:1;;;16524:40;16581:19;;43884:140:0;16129:477:1;43884:140:0;44080:9;44051:39;;;;:28;:39;;;;;44093:12;44051:54;;43773:356;-1:-1:-1;;;;;44217:31:0;;;;;;:25;:31;;;;;;;;:71;;;;-1:-1:-1;;;;;;44253:35:0;;;;;;:31;:35;;;;;;;;44252:36;44217:71;44213:778;;;44335:20;;44325:6;:30;;44317:96;;;;-1:-1:-1;;;44317:96:0;;16813:2:1;44317:96:0;;;16795:21:1;16852:2;16832:18;;;16825:30;16891:34;16871:18;;;16864:62;-1:-1:-1;;;16942:18:1;;;16935:51;17003:19;;44317:96:0;16611:417:1;44317:96:0;44474:9;;-1:-1:-1;;;;;10837:18:0;;10810:7;10837:18;;;;;;;;;;;44448:22;;:6;:22;:::i;:::-;:35;;44440:67;;;;-1:-1:-1;;;44440:67:0;;17235:2:1;44440:67:0;;;17217:21:1;17274:2;17254:18;;;17247:30;-1:-1:-1;;;17293:18:1;;;17286:49;17352:18;;44440:67:0;17033:343:1;44440:67:0;44213:778;;;-1:-1:-1;;;;;44601:29:0;;;;;;:25;:29;;;;;;;;:71;;;;-1:-1:-1;;;;;;44635:37:0;;;;;;:31;:37;;;;;;;;44634:38;44601:71;44597:394;;;44719:20;;44709:6;:30;;44701:97;;;;-1:-1:-1;;;44701:97:0;;17583:2:1;44701:97:0;;;17565:21:1;17622:2;17602:18;;;17595:30;17661:34;17641:18;;;17634:62;-1:-1:-1;;;17712:18:1;;;17705:52;17774:19;;44701:97:0;17381:418:1;44597:394:0;-1:-1:-1;;;;;44845:35:0;;;;;;:31;:35;;;;;;;;44841:150;;44938:9;;-1:-1:-1;;;;;10837:18:0;;10810:7;10837:18;;;;;;;;;;;44912:22;;:6;:22;:::i;:::-;:35;;44904:67;;;;-1:-1:-1;;;44904:67:0;;17235:2:1;44904:67:0;;;17217:21:1;17274:2;17254:18;;;17247:30;-1:-1:-1;;;17293:18:1;;;17286:49;17352:18;;44904:67:0;17033:343:1;44904:67:0;45100:4;45051:28;10837:18;;;;;;;;;;;45166;;45142:42;;;;;;;45215:35;;-1:-1:-1;45239:11:0;;;;;;;45215:35;:61;;;;-1:-1:-1;45268:8:0;;-1:-1:-1;;;45268:8:0;;;;45267:9;45215:61;:110;;;;-1:-1:-1;;;;;;45294:31:0;;;;;;:25;:31;;;;;;;;45293:32;45215:110;:153;;;;-1:-1:-1;;;;;;45343:25:0;;;;;;:19;:25;;;;;;;;45342:26;45215:153;:194;;;;-1:-1:-1;;;;;;45386:23:0;;;;;;:19;:23;;;;;;;;45385:24;45215:194;45197:338;;;45436:8;:15;;-1:-1:-1;;;;45436:15:0;-1:-1:-1;;;45436:15:0;;;45480:10;:8;:10::i;:::-;45507:8;:16;;-1:-1:-1;;;;45507:16:0;;;45197:338;45563:8;;-1:-1:-1;;;;;45672:25:0;;45547:12;45672:25;;;:19;:25;;;;;;45563:8;-1:-1:-1;;;45563:8:0;;;;;45562:9;;45672:25;;:52;;-1:-1:-1;;;;;;45701:23:0;;;;;;:19;:23;;;;;;;;45672:52;45669:99;;;-1:-1:-1;45751:5:0;45669:99;45788:12;45892:7;45889:967;;;-1:-1:-1;;;;;45943:29:0;;;;;;:25;:29;;;;;;;;:50;;;;;45992:1;45976:13;;:17;45943:50;45939:748;;;46020:34;46050:3;46020:25;46031:13;;46020:6;:10;;:25;;;;:::i;:::-;:29;;:34::i;:::-;46013:41;;46121:13;;46102:16;;46095:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;46073:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;46189:13:0;;46176:10;;46169:17;;:4;:17;:::i;:::-;:33;;;;:::i;:::-;46153:12;;:49;;;;;;;:::i;:::-;;;;-1:-1:-1;;46269:13:0;;46250:16;;46243:23;;:4;:23;:::i;:::-;:39;;;;:::i;:::-;46221:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;45939:748:0;;-1:-1:-1;45939:748:0;;-1:-1:-1;;;;;46343:31:0;;;;;;:25;:31;;;;;;;;:51;;;;;46393:1;46378:12;;:16;46343:51;46340:347;;;46419:33;46448:3;46419:24;46430:12;;46419:6;:10;;:24;;;;:::i;:33::-;46412:40;;46515:12;;46497:15;;46490:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;46468:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;46581:12:0;;46569:9;;46562:16;;:4;:16;:::i;:::-;:31;;;;:::i;:::-;46546:12;;:47;;;;;;;:::i;:::-;;;;-1:-1:-1;;46659:12:0;;46641:15;;46634:22;;:4;:22;:::i;:::-;:37;;;;:::i;:::-;46612:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;46340:347:0;46718:8;;46715:93;;46750:42;46766:4;46780;46787;46750:15;:42::i;:::-;46830:14;46840:4;46830:14;;:::i;:::-;;;45889:967;46868:33;46884:4;46890:2;46894:6;46868:15;:33::i;:::-;42888:4021;;;;42775:4134;;;:::o;19215:192::-;19301:7;19337:12;19329:6;;;;19321:29;;;;-1:-1:-1;;;19321:29:0;;;;;;;;:::i;:::-;-1:-1:-1;19361:9:0;19373:5;19377:1;19373;:5;:::i;:::-;19361:17;19215:192;-1:-1:-1;;;;;19215:192:0:o;16078:418::-;-1:-1:-1;;;;;16162:21:0;;16154:67;;;;-1:-1:-1;;;16154:67:0;;18006:2:1;16154:67:0;;;17988:21:1;18045:2;18025:18;;;18018:30;18084:34;18064:18;;;18057:62;-1:-1:-1;;;18135:18:1;;;18128:31;18176:19;;16154:67:0;17804:397:1;16154:67:0;16317:68;16340:6;16317:68;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;16317:18:0;;:9;:18;;;;;;;;;;;;:68;:22;:68::i;:::-;-1:-1:-1;;;;;16296:18:0;;:9;:18;;;;;;;;;;:89;16411:12;;:24;;16428:6;16411:16;:24::i;:::-;16396:12;:39;16451:37;;1897:25:1;;;16477:1:0;;-1:-1:-1;;;;;16451:37:0;;;;;1885:2:1;1870:18;16451:37:0;;;;;;;;16078:418;;:::o;15367:378::-;-1:-1:-1;;;;;15451:21:0;;15443:65;;;;-1:-1:-1;;;15443:65:0;;18408:2:1;15443:65:0;;;18390:21:1;18447:2;18427:18;;;18420:30;18486:33;18466:18;;;18459:61;18537:18;;15443:65:0;18206:355:1;15443:65:0;15598:12;;:24;;15615:6;15598:16;:24::i;:::-;15583:12;:39;-1:-1:-1;;;;;15654:18:0;;:9;:18;;;;;;;;;;;:30;;15677:6;15654:22;:30::i;:::-;-1:-1:-1;;;;;15633:18:0;;:9;:18;;;;;;;;;;;:51;;;;15700:37;;1897:25:1;;;15633:18:0;;:9;;15700:37;;1870:18:1;15700:37:0;1751:177:1;42053:188:0;-1:-1:-1;;;;;42136:31:0;;;;;;:25;:31;;;;;;:39;;-1:-1:-1;;42136:39:0;;;;;;;;;;42193:40;;42136:39;;:31;42193:40;;;42053:188;;:::o;14507:573::-;-1:-1:-1;;;;;14647:20:0;;14639:70;;;;-1:-1:-1;;;14639:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;14728:23:0;;14720:71;;;;-1:-1:-1;;;14720:71:0;;;;;;;:::i;:::-;14884;14906:6;14884:71;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;14884:17:0;;:9;:17;;;;;;;;;;;;:71;:21;:71::i;:::-;-1:-1:-1;;;;;14864:17:0;;;:9;:17;;;;;;;;;;;:91;;;;14989:20;;;;;;;:32;;15014:6;14989:24;:32::i;:::-;-1:-1:-1;;;;;14966:20:0;;;:9;:20;;;;;;;;;;;;:55;;;;15037:35;1897:25:1;;;14966:20:0;;15037:35;;;;;;1870:18:1;15037:35:0;1751:177:1;48071:1656:0;48154:4;48110:23;10837:18;;;;;;;;;;;48110:50;;48171:25;48241:12;;48220:18;;48199;;:39;;;;:::i;:::-;:54;;;;:::i;:::-;48171:82;-1:-1:-1;48264:12:0;48300:20;;;:46;;-1:-1:-1;48324:22:0;;48300:46;48297:60;;;48349:7;;;48071:1656::o;48297:60::-;48390:18;;:23;;48411:2;48390:23;:::i;:::-;48372:15;:41;48369:111;;;48445:18;;:23;;48466:2;48445:23;:::i;:::-;48427:41;;48369:111;48549:23;48634:1;48614:17;48593:18;;48575:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;48549:86;-1:-1:-1;48646:26:0;48675:36;:15;48549:86;48675:19;:36::i;:::-;48646:65;-1:-1:-1;48760:21:0;48794:36;48646:65;48794:16;:36::i;:::-;48852:18;48873:44;:21;48899:17;48873:25;:44::i;:::-;48852:65;;48938:23;48964:57;49003:17;48964:34;48979:18;;48964:10;:14;;:34;;;;:::i;:57::-;48938:83;;49032:17;49052:51;49085:17;49052:28;49067:12;;49052:10;:14;;:28;;;;:::i;:51::-;49032:71;-1:-1:-1;49134:23:0;49032:71;49160:28;49173:15;49160:10;:28;:::i;:::-;:40;;;;:::i;:::-;49242:1;49221:18;:22;;;49254:18;:22;;;49287:12;:16;;;49345:9;;49337:45;;49134:66;;-1:-1:-1;;;;;;49345:9:0;;49368;;49337:45;49242:1;49337:45;49368:9;49345;49337:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;49324:58:0;;-1:-1:-1;;49406:19:0;;;;;:42;;;49447:1;49429:15;:19;49406:42;49403:210;;;49464:46;49477:15;49494;49464:12;:46::i;:::-;49582:18;;49530:71;;;18978:25:1;;;19034:2;19019:18;;19012:34;;;19062:18;;;19055:34;;;;49530:71:0;;;;;;18966:2:1;49530:71:0;;;49403:210;49664:15;;49656:63;;-1:-1:-1;;;;;49664:15:0;;;;49693:21;;49656:63;;;;49693:21;49664:15;49656:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;48071:1656:0:o;19666:471::-;19724:7;19969:6;19965:47;;-1:-1:-1;19999:1:0;19992:8;;19965:47;20024:9;20036:5;20040:1;20036;:5;:::i;:::-;20024:17;-1:-1:-1;20069:1:0;20060:5;20064:1;20024:17;20060:5;:::i;:::-;:10;20052:56;;;;-1:-1:-1;;;20052:56:0;;19302:2:1;20052:56:0;;;19284:21:1;19341:2;19321:18;;;19314:30;19380:34;19360:18;;;19353:62;-1:-1:-1;;;19431:18:1;;;19424:31;19472:19;;20052:56:0;19100:397:1;20613:132:0;20671:7;20698:39;20702:1;20705;20698:39;;;;;;;;;;;;;;;;;:3;:39::i;18776:136::-;18834:7;18861:43;18865:1;18868;18861:43;;;;;;;;;;;;;;;;;:3;:43::i;46917:601::-;47069:16;;;47083:1;47069:16;;;;;;;;47045:21;;47069:16;;;;;;;;;;-1:-1:-1;47069:16:0;47045:40;;47114:4;47096;47101:1;47096:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;47096:23:0;;;:7;;;;;;;;;;:23;;;;47140:15;;:22;;;-1:-1:-1;;;47140:22:0;;;;:15;;;;;:20;;:22;;;;;47096:7;;47140:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;47130:4;47135:1;47130:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;47130:32:0;;;:7;;;;;;;;;:32;47207:15;;47175:62;;47192:4;;47207:15;47225:11;47175:8;:62::i;:::-;47276:15;;:224;;-1:-1:-1;;;47276:224:0;;-1:-1:-1;;;;;47276:15:0;;;;:66;;:224;;47357:11;;47276:15;;47427:4;;47454;;47474:15;;47276:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46972:546;46917:601;:::o;47542:521::-;47722:15;;47690:62;;47707:4;;-1:-1:-1;;;;;47722:15:0;47740:11;47690:8;:62::i;:::-;47795:15;;47999;;47795:260;;-1:-1:-1;;;47795:260:0;;47867:4;47795:260;;;21092:34:1;21142:18;;;21135:34;;;47795:15:0;21185:18:1;;;21178:34;;;21228:18;;;21221:34;-1:-1:-1;;;;;47999:15:0;;;21271:19:1;;;21264:44;48029:15:0;21324:19:1;;;21317:35;47795:15:0;;;:31;;47834:9;;21026:19:1;;47795:260:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;47542:521;;:::o;21241:278::-;21327:7;21362:12;21355:5;21347:28;;;;-1:-1:-1;;;21347:28:0;;;;;;;;:::i;:::-;-1:-1:-1;21386:9:0;21398:5;21402:1;21398;:5;:::i;14:597:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;452:6;449:1;446:13;443:91;;;522:1;517:2;508:6;497:9;493:22;489:31;482:42;443:91;-1:-1:-1;595:2:1;574:15;-1:-1:-1;;570:29:1;555:45;;;;602:2;551:54;;14:597;-1:-1:-1;;;14:597:1:o;616:131::-;-1:-1:-1;;;;;691:31:1;;681:42;;671:70;;737:1;734;727:12;752:315;820:6;828;881:2;869:9;860:7;856:23;852:32;849:52;;;897:1;894;887:12;849:52;936:9;923:23;955:31;980:5;955:31;:::i;:::-;1005:5;1057:2;1042:18;;;;1029:32;;-1:-1:-1;;;752:315:1:o;1264:247::-;1323:6;1376:2;1364:9;1355:7;1351:23;1347:32;1344:52;;;1392:1;1389;1382:12;1344:52;1431:9;1418:23;1450:31;1475:5;1450:31;:::i;1933:180::-;1992:6;2045:2;2033:9;2024:7;2020:23;2016:32;2013:52;;;2061:1;2058;2051:12;2013:52;-1:-1:-1;2084:23:1;;1933:180;-1:-1:-1;1933:180:1:o;2118:456::-;2195:6;2203;2211;2264:2;2252:9;2243:7;2239:23;2235:32;2232:52;;;2280:1;2277;2270:12;2232:52;2319:9;2306:23;2338:31;2363:5;2338:31;:::i;:::-;2388:5;-1:-1:-1;2445:2:1;2430:18;;2417:32;2458:33;2417:32;2458:33;:::i;:::-;2118:456;;2510:7;;-1:-1:-1;;;2564:2:1;2549:18;;;;2536:32;;2118:456::o;2976:269::-;3033:6;3086:2;3074:9;3065:7;3061:23;3057:32;3054:52;;;3102:1;3099;3092:12;3054:52;3141:9;3128:23;3191:4;3184:5;3180:16;3173:5;3170:27;3160:55;;3211:1;3208;3201:12;3250:118;3336:5;3329:13;3322:21;3315:5;3312:32;3302:60;;3358:1;3355;3348:12;3373:382;3438:6;3446;3499:2;3487:9;3478:7;3474:23;3470:32;3467:52;;;3515:1;3512;3505:12;3467:52;3554:9;3541:23;3573:31;3598:5;3573:31;:::i;:::-;3623:5;-1:-1:-1;3680:2:1;3665:18;;3652:32;3693:30;3652:32;3693:30;:::i;:::-;3742:7;3732:17;;;3373:382;;;;;:::o;3760:316::-;3837:6;3845;3853;3906:2;3894:9;3885:7;3881:23;3877:32;3874:52;;;3922:1;3919;3912:12;3874:52;-1:-1:-1;;3945:23:1;;;4015:2;4000:18;;3987:32;;-1:-1:-1;4066:2:1;4051:18;;;4038:32;;3760:316;-1:-1:-1;3760:316:1:o;4081:241::-;4137:6;4190:2;4178:9;4169:7;4165:23;4161:32;4158:52;;;4206:1;4203;4196:12;4158:52;4245:9;4232:23;4264:28;4286:5;4264:28;:::i;4327:388::-;4395:6;4403;4456:2;4444:9;4435:7;4431:23;4427:32;4424:52;;;4472:1;4469;4462:12;4424:52;4511:9;4498:23;4530:31;4555:5;4530:31;:::i;:::-;4580:5;-1:-1:-1;4637:2:1;4622:18;;4609:32;4650:33;4609:32;4650:33;:::i;4948:380::-;5027:1;5023:12;;;;5070;;;5091:61;;5145:4;5137:6;5133:17;5123:27;;5091:61;5198:2;5190:6;5187:14;5167:18;5164:38;5161:161;;;5244:10;5239:3;5235:20;5232:1;5225:31;5279:4;5276:1;5269:15;5307:4;5304:1;5297:15;5161:161;;4948:380;;;:::o;5333:356::-;5535:2;5517:21;;;5554:18;;;5547:30;5613:34;5608:2;5593:18;;5586:62;5680:2;5665:18;;5333:356::o;5694:127::-;5755:10;5750:3;5746:20;5743:1;5736:31;5786:4;5783:1;5776:15;5810:4;5807:1;5800:15;5826:168;5866:7;5932:1;5928;5924:6;5920:14;5917:1;5914:21;5909:1;5902:9;5895:17;5891:45;5888:71;;;5939:18;;:::i;:::-;-1:-1:-1;5979:9:1;;5826:168::o;5999:127::-;6060:10;6055:3;6051:20;6048:1;6041:31;6091:4;6088:1;6081:15;6115:4;6112:1;6105:15;6131:120;6171:1;6197;6187:35;;6202:18;;:::i;:::-;-1:-1:-1;6236:9:1;;6131:120::o;7443:184::-;7513:6;7566:2;7554:9;7545:7;7541:23;7537:32;7534:52;;;7582:1;7579;7572:12;7534:52;-1:-1:-1;7605:16:1;;7443:184;-1:-1:-1;7443:184:1:o;8055:128::-;8095:3;8126:1;8122:6;8119:1;8116:13;8113:39;;;8132:18;;:::i;:::-;-1:-1:-1;8168:9:1;;8055:128::o;8906:245::-;8973:6;9026:2;9014:9;9005:7;9001:23;8997:32;8994:52;;;9042:1;9039;9032:12;8994:52;9074:9;9068:16;9093:28;9115:5;9093:28;:::i;9560:112::-;9592:1;9618;9608:35;;9623:18;;:::i;:::-;-1:-1:-1;9657:9:1;;9560:112::o;9677:125::-;9717:4;9745:1;9742;9739:8;9736:34;;;9750:18;;:::i;:::-;-1:-1:-1;9787:9:1;;9677:125::o;10567:251::-;10637:6;10690:2;10678:9;10669:7;10665:23;10661:32;10658:52;;;10706:1;10703;10696:12;10658:52;10738:9;10732:16;10757:31;10782:5;10757:31;:::i;14968:401::-;15170:2;15152:21;;;15209:2;15189:18;;;15182:30;15248:34;15243:2;15228:18;;15221:62;-1:-1:-1;;;15314:2:1;15299:18;;15292:35;15359:3;15344:19;;14968:401::o;15374:399::-;15576:2;15558:21;;;15615:2;15595:18;;;15588:30;15654:34;15649:2;15634:18;;15627:62;-1:-1:-1;;;15720:2:1;15705:18;;15698:33;15763:3;15748:19;;15374:399::o;19634:127::-;19695:10;19690:3;19686:20;19683:1;19676:31;19726:4;19723:1;19716:15;19750:4;19747:1;19740:15;19766:980;20028:4;20076:3;20065:9;20061:19;20107:6;20096:9;20089:25;20133:2;20171:6;20166:2;20155:9;20151:18;20144:34;20214:3;20209:2;20198:9;20194:18;20187:31;20238:6;20273;20267:13;20304:6;20296;20289:22;20342:3;20331:9;20327:19;20320:26;;20381:2;20373:6;20369:15;20355:29;;20402:1;20412:195;20426:6;20423:1;20420:13;20412:195;;;20491:13;;-1:-1:-1;;;;;20487:39:1;20475:52;;20582:15;;;;20547:12;;;;20523:1;20441:9;20412:195;;;-1:-1:-1;;;;;;;20663:32:1;;;;20658:2;20643:18;;20636:60;-1:-1:-1;;;20727:3:1;20712:19;20705:35;20624:3;19766:980;-1:-1:-1;;;19766:980:1:o;21363:306::-;21451:6;21459;21467;21520:2;21508:9;21499:7;21495:23;21491:32;21488:52;;;21536:1;21533;21526:12;21488:52;21565:9;21559:16;21549:26;;21615:2;21604:9;21600:18;21594:25;21584:35;;21659:2;21648:9;21644:18;21638:25;21628:35;;21363:306;;;;;:::o

Metadata Hash

ipfs://c9b51a5c8bd843242273d8ecd4f17b749c868f6bbdcb2b72d2af06fa4e99ba59
Loading