Token Candy Token

DeFi  

Overview CRC20

Price
$0.00 @ 0.000000 CRO
Fully Diluted Market Cap
Total Supply:
34,068,327.802424 CANDY

Holders:
1,108 addresses
Balance
62.87109374999999 CANDY

Value
$0.00
0xbb4d8b7948bd7c60698e7b45e410751f0bbf26b9
Loading
[ Download CSV Export  ] 
Loading
[ Download CSV Export  ] 
Loading

OVERVIEW

Bored Candy City is not just a DEX. They are working on a complete Defi ecosystem around the $CANDY token.


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

Contract Source Code Verified (Exact Match)

Contract Name:
CandyToken

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// Sources flattened with hardhat v2.3.3 https://hardhat.org

// File @openzeppelin/contracts/utils/[email protected]

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/*
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
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;
    }
}


// File @openzeppelin/contracts/access/[email protected]



pragma solidity ^0.8.0;

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract 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 virtual 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;
    }
}


// File @openzeppelin/contracts/token/ERC20/[email protected]



pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
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);
}


// File @openzeppelin/contracts/token/ERC20/extensions/[email protected]



pragma solidity ^0.8.0;

/**
 * @dev Interface for the optional metadata functions from the ERC20 standard.
 *
 * _Available since v4.1._
 */
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);
}


// File @openzeppelin/contracts/token/ERC20/[email protected]



pragma solidity ^0.8.0;



/**
 * @dev Implementation of the {IERC20} interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using {_mint}.
 * For a generic mechanism see {ERC20PresetMinterPauser}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * We have followed general OpenZeppelin guidelines: functions revert instead
 * of returning `false` on failure. This behavior is nonetheless conventional
 * and does not conflict with the expectations of ERC20 applications.
 *
 * Additionally, an {Approval} event is emitted on calls to {transferFrom}.
 * This allows applications to reconstruct the allowance for all accounts just
 * by listening to said events. Other implementations of the EIP may not emit
 * these events, as it isn't required by the specification.
 *
 * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
 * functions have been added to mitigate the well-known issues around setting
 * allowances. See {IERC20-approve}.
 */
contract ERC20 is Context, IERC20, IERC20Metadata {
    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 defaut 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);

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
        _approve(sender, _msgSender(), currentAllowance - amount);

        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] + 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) {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        _approve(_msgSender(), spender, currentAllowance - subtractedValue);

        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);

        uint256 senderBalance = _balances[sender];
        require(senderBalance >= amount, "ERC20: transfer amount exceeds balance");
        _balances[sender] = senderBalance - amount;
        _balances[recipient] += 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:
     *
     * - `to` 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 += amount;
        _balances[account] += 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);

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        _balances[account] = accountBalance - amount;
        _totalSupply -= 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 { }
}


// File contracts/access/Operatable.sol



pragma solidity ^0.8.0;
/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an operator) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the operator account will be the one that deploys the contract. This
 * can later be changed with {transferOperator}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOperator`, which can be applied to your functions to restrict their use to
 * the operator.
  * 
  * It is recommended to use with Operator.sol to set permissions per specific functions
 */
abstract contract Operatable is Context {
    address private _operator;

    event OperatorTransferred(address indexed previousOperator, address indexed newOperator);

    /**
     * @dev Initializes the contract setting the deployer as the initial operator.
     */
    constructor() {
        _transferOperator(_msgSender());
    }

    /**
     * @dev Throws if called by any account other than the operator.
     */
    modifier onlyOperator() {
        _checkOperator();
        _;
    }

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

    /**
     * @dev Throws if the sender is not the operator.
     */
    function _checkOperator() internal view virtual {
        require(operator() == _msgSender(), "Operatable: caller is not the operator");
    }

    /**
     * @dev Leaves the contract without operator. It will not be possible to call
     * `onlyOperator` functions anymore. Can only be called by the current operator.
     *
     * NOTE: Renouncing operator will leave the contract without an operator,
     * thereby removing any functionality that is only available to the operator.
     */
    function renounceOperator() public virtual onlyOperator {
        _transferOperator(address(0));
    }

    /**
     * @dev Transfers operator of the contract to a new account (`newOperator`).
     * Can only be called by the current operator.
     */
    function transferOperator(address newOperator) public virtual onlyOperator {
        require(newOperator != address(0), "Ownable: new operator is the zero address");
        _transferOperator(newOperator);
    }

    /**
     * @dev Transfers operator of the contract to a new account (`newOperator`).
     * Internal function without access restriction.
     */
    function _transferOperator(address newOperator) internal virtual {
        address oldOperator = _operator;
        _operator = newOperator;
        emit OperatorTransferred(oldOperator, newOperator);
    }
}


// File contracts/interfaces/IUniswapAmm.sol



// File: @uniswap/v2-core/contracts/interfaces/IUniswapV2Factory.sol

pragma solidity ^0.8.4;

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

    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(uint256) external view returns (address pair);

    function allPairsLength() external view returns (uint256);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

// File: @uniswap/v2-core/contracts/interfaces/IUniswapV2Pair.sol

interface IUniswapV2Pair {
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
    event Transfer(address indexed from, address indexed to, uint256 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 (uint256);

    function balanceOf(address owner) external view returns (uint256);

    function allowance(address owner, address spender)
        external
        view
        returns (uint256);

    function approve(address spender, uint256 value) external returns (bool);

    function transfer(address to, uint256 value) external returns (bool);

    function transferFrom(
        address from,
        address to,
        uint256 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 (uint256);

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

    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 (uint256);

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

    function mint(address to) external returns (uint256 liquidity);

    function burn(address to)
        external
        returns (uint256 amount0, uint256 amount1);

    function swap(
        uint256 amount0Out,
        uint256 amount1Out,
        address to,
        bytes calldata data
    ) external;

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

// File: @uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router01.sol

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

    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint256 amountADesired,
        uint256 amountBDesired,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    )
        external
        returns (
            uint256 amountA,
            uint256 amountB,
            uint256 liquidity
        );

    function addLiquidityETH(
        address token,
        uint256 amountTokenDesired,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    )
        external
        payable
        returns (
            uint256 amountToken,
            uint256 amountETH,
            uint256 liquidity
        );

    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountA, uint256 amountB);

    function removeLiquidityETH(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountToken, uint256 amountETH);

    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountA, uint256 amountB);

    function removeLiquidityETHWithPermit(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountToken, uint256 amountETH);

    function swapExactTokensForTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapTokensForExactTokens(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapExactETHForTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

    function swapTokensForExactETH(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapExactTokensForETH(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapETHForExactTokens(
        uint256 amountOut,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

    function quote(
        uint256 amountA,
        uint256 reserveA,
        uint256 reserveB
    ) external pure returns (uint256 amountB);

    function getAmountOut(
        uint256 amountIn,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountOut);

    function getAmountIn(
        uint256 amountOut,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountIn);

    function getAmountsOut(uint256 amountIn, address[] calldata path)
        external
        view
        returns (uint256[] memory amounts);

    function getAmountsIn(uint256 amountOut, address[] calldata path)
        external
        view
        returns (uint256[] memory amounts);
}

// File: @uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router02.sol

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountETH);

    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountETH);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;

    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable;

    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;
}


// File contracts/candy/AntiBotHelper.sol



pragma solidity ^0.8.0;
/**
 * @notice Anti-Bot Helper
 * Blacklis feature
 * Max TX Amount feature
 * Max Wallet Amount feature
 */
contract AntiBotHelper is Ownable {
    address private constant DEAD = 0x000000000000000000000000000000000000dEaD;
    address private constant ZERO = address(0);

    uint256 public constant MAX_TX_AMOUNT_MIN_LIMIT = 100 ether;
    uint256 public constant MAX_WALLET_AMOUNT_MIN_LIMIT = 1000 ether;

    mapping(address => bool) internal _excludedFromTxLimit;
    mapping(address => bool) internal _excludedFromHoldLimit;
    mapping(address => bool) internal _blacklist;

    uint256 internal _txLimit = 50000 ether;
    uint256 internal _holdLimit = 500000 ether;

    constructor() {
        _excludedFromTxLimit[_msgSender()] = true;
        _excludedFromTxLimit[DEAD] = true;
        _excludedFromTxLimit[ZERO] = true;
        _excludedFromTxLimit[address(this)] = true;

        _excludedFromHoldLimit[_msgSender()] = true;
        _excludedFromHoldLimit[DEAD] = true;
        _excludedFromHoldLimit[ZERO] = true;
        _excludedFromHoldLimit[address(this)] = true;
    }

    /**
     * @notice Blacklist the account
     * @dev Only callable by owner
     */
    function blacklistAccount(address account, bool flag) external onlyOwner {
        _blacklist[account] = flag;
    }

    /**
     * @notice Check if the account is included in black list
     * @param account: the account to be checked
     */
    function blacklisted(address account) external view returns (bool) {
        return _blacklist[account];
    }

    /**
     * @notice Exclude / Include the account from max tx limit
     * @dev Only callable by owner
     */
    function excludeFromTxLimit(address account, bool flag) external onlyOwner {
        _excludedFromTxLimit[account] = flag;
    }

    /**
     * @notice Check if the account is excluded from max tx limit
     * @param account: the account to be checked
     */
    function excludedFromTxLimit(address account) external view returns (bool) {
        return _excludedFromTxLimit[account];
    }

    /**
     * @notice Exclude / Include the account from max wallet limit
     * @dev Only callable by owner
     */
    function excludeFromHoldLimit(address account, bool flag)
        external
        onlyOwner
    {
        _excludedFromHoldLimit[account] = flag;
    }

    /**
     * @notice Check if the account is excluded from max wallet limit
     * @param account: the account to be checked
     */
    function excludedFromHoldLimit(address account)
        external
        view
        returns (bool)
    {
        return _excludedFromHoldLimit[account];
    }

    /**
     * @notice Set anti whales limit configuration
     * @param txLimit: max amount of token in a transaction
     * @param holdLimit: max amount of token can be kept in a wallet
     * @dev Only callable by owner
     */
    function setAntiWhalesConfiguration(uint256 txLimit, uint256 holdLimit)
        external
        onlyOwner
    {
        require(txLimit >= MAX_TX_AMOUNT_MIN_LIMIT, "Max tx amount too small");
        require(
            holdLimit >= MAX_WALLET_AMOUNT_MIN_LIMIT,
            "Max wallet amount too small"
        );
        _txLimit = txLimit;
        _holdLimit = holdLimit;
    }

    function viewHoldLimit() external view returns (uint256) {
        return _holdLimit;
    }

    function viewTxLimit() external view returns (uint256) {
        return _txLimit;
    }
}


// File contracts/candy/FeeHelper.sol



pragma solidity ^0.8.0;
/**
 * @notice Tax Helper
 * Marketing fee
 * Burn fee
 * Fee in buy/sell/transfer separately
 */
contract FeeHelper is Ownable {
    enum TX_CASE {
        TRANSFER,
        BUY,
        SELL
    }

    struct TokenFee {
        uint16 marketingFee;
        uint16 treasuryFee;
        uint16 burnFee;
    }

    address private constant DEAD = 0x000000000000000000000000000000000000dEaD;
    address private constant ZERO = address(0);

    mapping(TX_CASE => TokenFee) internal _tokenFees;
    mapping(address => bool) internal _excludedFromTax;
    mapping(address => bool) internal _isSelfPair;

    constructor() {
        _excludedFromTax[_msgSender()] = true;
        _excludedFromTax[DEAD] = true;
        _excludedFromTax[ZERO] = true;
        _excludedFromTax[address(this)] = true;

        _tokenFees[TX_CASE.TRANSFER].marketingFee = 100;
        _tokenFees[TX_CASE.TRANSFER].treasuryFee = 0;
        _tokenFees[TX_CASE.TRANSFER].burnFee = 50;

        _tokenFees[TX_CASE.BUY].marketingFee = 400;
        _tokenFees[TX_CASE.TRANSFER].treasuryFee = 50;
        _tokenFees[TX_CASE.BUY].burnFee = 150;

        _tokenFees[TX_CASE.SELL].marketingFee = 500;
        _tokenFees[TX_CASE.TRANSFER].treasuryFee = 50;
        _tokenFees[TX_CASE.SELL].burnFee = 150;
    }

    /**
     * @notice Update fee in the token
     * @param feeCase: which case the fee is for: transfer / buy / sell
     * @param marketingFee: fee percent for marketing
     * @param treasuryFee: fee percent for treasury
     * @param burnFee: fee percent for burning
     */
    function setFee(
        TX_CASE feeCase,
        uint16 marketingFee,
        uint16 treasuryFee,
        uint16 burnFee
    ) external onlyOwner {
        require(marketingFee + treasuryFee + burnFee <= 10000, "Overflow");
        _tokenFees[feeCase].marketingFee = marketingFee;
        _tokenFees[feeCase].treasuryFee = treasuryFee;
        _tokenFees[feeCase].burnFee = burnFee;
    }

    /**
     * @notice Exclude / Include the account from fee
     * @dev Only callable by owner
     */
    function excludeFromTax(address account, bool flag) external onlyOwner {
        _excludedFromTax[account] = flag;
    }

    /**
     * @notice Check if the account is excluded from the fees
     * @param account: the account to be checked
     */
    function excludedFromTax(address account) external view returns (bool) {
        return _excludedFromTax[account];
    }

    function viewFees(TX_CASE feeCase) external view returns (TokenFee memory) {
        return _tokenFees[feeCase];
    }

    /**
     * @notice Check if fee should be applied
     */
    function shouldFeeApplied(address from, address to)
        internal
        view
        returns (bool feeApplied, TX_CASE txCase)
    {
        // Sender or receiver is excluded from fee
        if (_excludedFromTax[from] || _excludedFromTax[to]) {
            feeApplied = false;
        }
        // Buying tokens
        else if (_isSelfPair[from]) {
            TokenFee memory buyFee = _tokenFees[TX_CASE.BUY];
            feeApplied =
                (buyFee.marketingFee + buyFee.treasuryFee + buyFee.burnFee) > 0;
            txCase = TX_CASE.BUY;
        }
        // Selling tokens
        else if (_isSelfPair[to]) {
            TokenFee memory sellFee = _tokenFees[TX_CASE.SELL];
            feeApplied =
                (sellFee.marketingFee + sellFee.treasuryFee + sellFee.burnFee) >
                0;
            txCase = TX_CASE.SELL;
        }
        // Transferring tokens
        else {
            TokenFee memory transferFee = _tokenFees[TX_CASE.TRANSFER];
            feeApplied =
                (transferFee.marketingFee +
                    transferFee.treasuryFee +
                    transferFee.burnFee) >
                0;
            txCase = TX_CASE.TRANSFER;
        }
    }

    /**
     * @notice Include / Exclude lp address in self pairs
     */
    function includeInSelfPair(address lpAddress, bool flag)
        external
        onlyOwner
    {
        _isSelfPair[lpAddress] = flag;
    }

    /**
     * @notice Check if the lp address is self pair
     */
    function isSelfPair(address lpAddress) external view returns (bool) {
        return _isSelfPair[lpAddress];
    }
}


// File contracts/candy/CandyToken.sol



pragma solidity ^0.8.0;
/**
 * @dev Governace token in Bored Candy City
 *
 */
contract CandyToken is AntiBotHelper, FeeHelper, ERC20, Operatable {
    address constant DEAD = 0x000000000000000000000000000000000000dEaD;
    address constant ETH_ADDRESS = 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE;
    uint256 constant MAX_SUPPLY = 250000000 ether;

    address private _marketingWallet;
    address private _marketingToken;
    address private _treasuryWallet;

    bool private _inSwap;
    bool private _swapEnabled = true;
    uint256 private _thresholdAmount = 10000 ether; // Threshold amount of accumlated tax until swap to marketing token
    IUniswapV2Router02 private _swapRouter;

    event SwapToMarketingTokenSucceed(
        address indexed marketingToken,
        address indexed to,
        uint256 amountIn,
        uint256 amountOut
    );
    event SwapToMarketingTokenFailed(
        address indexed marketingToken,
        address indexed to,
        uint256 amount
    );

    modifier lockTheSwap() {
        _inSwap = true;
        _;
        _inSwap = false;
    }

    constructor(string memory name_, string memory symbol_)
        ERC20(name_, symbol_)
    {}

    function mint(uint256 amount) external onlyOperator {
        _mint(_msgSender(), amount);
    }

    function mint(address account, uint256 amount) external onlyOperator {
        _mint(account, 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 override {
        super._mint(account, amount);
        _afterTokenTransfer(address(0), account, amount);
    }

    function burn(uint256 amount) external {
        _burn(_msgSender(), 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 override {
        super._burn(account, amount);
        _afterTokenTransfer(account, address(0), amount);
    }

    /**
     * @dev Hook that is called after any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * has been transferred to `to`.
     * - when `from` is zero, `amount` tokens have been minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens have been 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 _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {
        require(!_blacklist[from] && !_blacklist[to], "blacklisted account");

        // Check max tx limit
        require(
            _excludedFromTxLimit[from] ||
                _excludedFromTxLimit[to] ||
                amount <= _txLimit,
            "Tx amount limited"
        );

        // Check max wallet amount limit
        require(
            _excludedFromHoldLimit[to] || balanceOf(to) <= _holdLimit,
            "Receiver hold limited"
        );

        require(totalSupply() <= MAX_SUPPLY, "Exceeds MAX_SUPPLY");
    }

    function setSwapRouter(address newSwapRouter) external onlyOwner {
        require(newSwapRouter != address(0), "Invalid swap router");

        _swapRouter = IUniswapV2Router02(newSwapRouter);
    }

    function viewSwapRouter() external view returns (address) {
        return address(_swapRouter);
    }

    function enableSwap(bool flag) external onlyOwner {
        _swapEnabled = flag;
    }

    function swapEnabled() external view returns (bool) {
        return _swapEnabled;
    }

    function setMarketingWallet(address wallet) external onlyOwner {
        require(wallet != address(0), "Invalid marketing wallet");
        _marketingWallet = wallet;
    }

    function viewMarketingWallet() external view returns (address) {
        return _marketingWallet;
    }

    function setMarketingToken(address token) external onlyOwner {
        _marketingToken = token;
    }

    function viewMarketingToken() external view returns (address) {
        return _marketingToken;
    }

    function setTreasuryWallet(address wallet) external onlyOwner {
        require(wallet != address(0), "Invalid treasury wallet");
        _treasuryWallet = wallet;
    }

    function viewTreasuryWallet() external view returns (address) {
        return _treasuryWallet;
    }

    /**
     * @dev Set threshold amount to be swapped to the marketing token
     * Too small value will cause sell tx happens in every tx
     */
    function setThresholdAmount(uint256 amount) external onlyOwner {
        require(amount > 0, "Invalid threshold");
        _thresholdAmount = amount;
    }

    function viewThresholdAmount() external view returns (uint256) {
        return _thresholdAmount;
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(amount > 0, "Zero transfer");

        // is the token balance of this contract address over the min number of
        // tokens that we need to initiate a swap + liquidity lock?
        // also, don't get caught in a circular liquidity event.
        // also, don't swap & liquify if sender is uniswap pair.
        uint256 contractTokenBalance = balanceOf(address(this));

        // indicates if fee should be deducted from transfer
        (bool feeApplied, TX_CASE txCase) = shouldFeeApplied(from, to);

        // Swap and liquify also triggered when the tx needs to have fee
        if (
            !_inSwap &&
            feeApplied &&
            _swapEnabled &&
            contractTokenBalance >= _thresholdAmount
        ) {
            swapToMarketingToken(_thresholdAmount);
        }

        //transfer amount, it will take tax, burn fee
        _tokenTransfer(from, to, amount, feeApplied, txCase);
    }

    // this method is responsible for taking all fee, if takeFee is true
    function _tokenTransfer(
        address sender,
        address recipient,
        uint256 amount,
        bool feeApplied,
        TX_CASE txCase
    ) private {
        if (feeApplied) {
            uint16 marketingFee = _tokenFees[txCase].marketingFee;
            uint16 treasuryFee = _tokenFees[txCase].treasuryFee;
            uint16 burnFee = _tokenFees[txCase].burnFee;

            uint256 burnFeeAmount = (amount * burnFee) / 10000;
            uint256 treasuryFeeAmount = (amount * treasuryFee) / 10000;
            uint256 marketingFeeAmount = (amount * marketingFee) / 10000;

            if (burnFeeAmount > 0) {
                _burn(sender, burnFeeAmount);
                amount -= burnFeeAmount;
            }
            if (treasuryFeeAmount > 0) {
                super._transfer(sender, _treasuryWallet, treasuryFeeAmount);
                amount -= treasuryFeeAmount;
            }
            if (marketingFeeAmount > 0) {
                super._transfer(sender, address(this), marketingFeeAmount);
                amount -= marketingFeeAmount;
            }
        }
        if (amount > 0) {
            super._transfer(sender, recipient, amount);
            _afterTokenTransfer(sender, recipient, amount);
        }
    }

    /**
     * @dev Swap token accumlated in this contract to the marketing token
     * 
     * According to the marketing token

     * - when marketing token is ETH, swapToETH function is called
     * - when marketing token is another token, swapToToken is called

     */
    function swapToMarketingToken(uint256 amount) private lockTheSwap {
        if (_marketingToken == address(this)) {
            super._transfer(address(this), _marketingWallet, amount);
            _afterTokenTransfer(address(this), _marketingWallet, amount);
        } else if (isETH(_marketingToken)) {
            swapToETH(amount, payable(_marketingWallet));
        } else {
            swapToToken(_marketingToken, amount, _marketingWallet);
        }
    }

    function swapToToken(
        address token,
        uint256 amount,
        address to
    ) private {
        // generate the uniswap pair path of token -> busd
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = token;

        _approve(address(this), address(_swapRouter), amount);

        // capture the target address's current BNB balance.
        uint256 balanceBefore = IERC20(_marketingToken).balanceOf(to);

        // make the swap
        try
            _swapRouter.swapExactTokensForTokensSupportingFeeOnTransferTokens(
                amount,
                0, // accept any amount of tokens
                path,
                to,
                block.timestamp + 300
            )
        {
            uint256 amountOut = IERC20(_marketingToken).balanceOf(to) -
                balanceBefore;
            emit SwapToMarketingTokenSucceed(
                _marketingToken,
                to,
                amount,
                amountOut
            );
        } catch (
            bytes memory /* lowLevelData */
        ) {
            emit SwapToMarketingTokenFailed(_marketingToken, to, amount);
        }
    }

    function swapToETH(uint256 amount, address payable to) private {
        // generate the uniswap pair path of token -> busd
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = _swapRouter.WETH();

        _approve(address(this), address(_swapRouter), amount);

        // capture the target address's current BNB balance.
        uint256 balanceBefore = to.balance;

        // make the swap
        try
            _swapRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
                amount,
                0, // accept any amount of BNB
                path,
                to,
                block.timestamp + 300
            )
        {
            // how much BNB did we just swap into?
            uint256 amountOut = to.balance - balanceBefore;
            emit SwapToMarketingTokenSucceed(
                _marketingToken,
                to,
                amount,
                amountOut
            );
        } catch (
            bytes memory /* lowLevelData */
        ) {
            // how much BNB did we just swap into?
            emit SwapToMarketingTokenFailed(_marketingToken, to, amount);
        }
    }

    function isETH(address token) internal pure returns (bool) {
        return (token == address(0) || token == ETH_ADDRESS);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"name_","type":"string"},{"internalType":"string","name":"symbol_","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOperator","type":"address"},{"indexed":true,"internalType":"address","name":"newOperator","type":"address"}],"name":"OperatorTransferred","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":"marketingToken","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"SwapToMarketingTokenFailed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"marketingToken","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountOut","type":"uint256"}],"name":"SwapToMarketingTokenSucceed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"MAX_TX_AMOUNT_MIN_LIMIT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_WALLET_AMOUNT_MIN_LIMIT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"flag","type":"bool"}],"name":"blacklistAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"blacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"flag","type":"bool"}],"name":"enableSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"flag","type":"bool"}],"name":"excludeFromHoldLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"flag","type":"bool"}],"name":"excludeFromTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"flag","type":"bool"}],"name":"excludeFromTxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludedFromHoldLimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludedFromTax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludedFromTxLimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"lpAddress","type":"address"},{"internalType":"bool","name":"flag","type":"bool"}],"name":"includeInSelfPair","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":"lpAddress","type":"address"}],"name":"isSelfPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"operator","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOperator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"txLimit","type":"uint256"},{"internalType":"uint256","name":"holdLimit","type":"uint256"}],"name":"setAntiWhalesConfiguration","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"enum FeeHelper.TX_CASE","name":"feeCase","type":"uint8"},{"internalType":"uint16","name":"marketingFee","type":"uint16"},{"internalType":"uint16","name":"treasuryFee","type":"uint16"},{"internalType":"uint16","name":"burnFee","type":"uint16"}],"name":"setFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"setMarketingToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newSwapRouter","type":"address"}],"name":"setSwapRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setThresholdAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"setTreasuryWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"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":"newOperator","type":"address"}],"name":"transferOperator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"enum FeeHelper.TX_CASE","name":"feeCase","type":"uint8"}],"name":"viewFees","outputs":[{"components":[{"internalType":"uint16","name":"marketingFee","type":"uint16"},{"internalType":"uint16","name":"treasuryFee","type":"uint16"},{"internalType":"uint16","name":"burnFee","type":"uint16"}],"internalType":"struct FeeHelper.TokenFee","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"viewHoldLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"viewMarketingToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"viewMarketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"viewSwapRouter","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"viewThresholdAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"viewTreasuryWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"viewTxLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]

6080604052690a968163f0a57b4000006004556969e10de76676d08000006005556011805460ff60a81b1916600160a81b17905569021e19e0c9bab24000006012553480156200004e57600080fd5b50604051620030c1380380620030c18339810160408190526200007191620004c3565b600080546001600160a01b03191633908117825560405184928492918291907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350336000818152600160208181526040808420805460ff1990811685179091557fb34209a263f6c38fe55f099e9e70f9d67e93982480ff3234a5e0108028ad164d80548216851790557fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb498054821685179055308086528286208054831686179055868652600280855283872080548416871790557f6a9609baa168169acaea398c4407efea4be641bb08e21e88806d9836fd9333cc80548416871790557fac33ff75c19e70fe83507db0d683fd3465c996598dc972688b7ace676c89077b805484168717905581875283872080548416871790559686526007845282862080548316861790557fb0c2646e02af70b79e3fe9277b98373379f54150e4e26b2b5650139f7a75a65d80548316861790557f6d5257204ebe7d88fd91ae87941cb2dd9d8062b64ae5a2bd2d28ec40b9fbf6df805483168617905585529084208054909116909217909155600681527f54cdd369e4e8a8515e52ca72ec816c2101831ad1f18bf44102ed171459c9b4f880547f3e5fec24aa4dc4e5aee2e025e51e1392c72a2500577559fae9665c6d52bd6a31805465ffffffffffff199092166432003200641790925564960000019065ffff0000ffff19918216179091557f8819ef417987f8ae7a81f42cdfb18815282fe989326fbff903d13cf0e03ace29805494909352929092166496000001f41790558251620002d991600c91908501906200036a565b508051620002ef90600d9060208401906200036a565b5050506200030c620003066200031460201b60201c565b62000318565b50506200057d565b3390565b600e80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f74da04524d50c64947f5dd5381ef1a4dca5cba8ed1d816243f9e48aa0b5617ed90600090a35050565b82805462000378906200052a565b90600052602060002090601f0160209004810192826200039c5760008555620003e7565b82601f10620003b757805160ff1916838001178555620003e7565b82800160010185558215620003e7579182015b82811115620003e7578251825591602001919060010190620003ca565b50620003f5929150620003f9565b5090565b5b80821115620003f55760008155600101620003fa565b600082601f83011262000421578081fd5b81516001600160401b03808211156200043e576200043e62000567565b604051601f8301601f19908116603f0116810190828211818310171562000469576200046962000567565b8160405283815260209250868385880101111562000485578485fd5b8491505b83821015620004a8578582018301518183018401529082019062000489565b83821115620004b957848385830101525b9695505050505050565b60008060408385031215620004d6578182fd5b82516001600160401b0380821115620004ed578384fd5b620004fb8683870162000410565b9350602085015191508082111562000511578283fd5b50620005208582860162000410565b9150509250929050565b600181811c908216806200053f57607f821691505b602082108114156200056157634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b612b34806200058d6000396000f3fe608060405234801561001057600080fd5b50600436106102bb5760003560e01c8063715018a611610182578063a9059cbb116100e9578063d045a824116100a2578063dd62ed3e1161007c578063dd62ed3e14610697578063e1511372146106d0578063f2fde38b146106fc578063f3ec8cc31461070f57600080fd5b8063d045a82414610647578063d2a09c7114610658578063dbac26e91461066b57600080fd5b8063a9059cbb146105b8578063aa324667146105cb578063b3195dea146105d3578063b9038fe114610613578063c4467db414610623578063c6a306471461063457600080fd5b8063961e2e7c1161013b578063961e2e7c1461053857806397d70ac61461054b578063989763ef14610553578063a0712d681461057f578063a457c2d714610592578063a8602fea146105a557600080fd5b8063715018a6146104de5780637cdcdea3146104e657806382fa05ed146104f95780638da5cb5b1461050c578063931e48e61461051d57806395d89b411461053057600080fd5b8063313ce5671161022657806342966c68116101df57806342966c68146104645780635275c70314610477578063570ca7351461047f5780635d098b38146104905780636ddd1713146104a357806370a08231146104b557600080fd5b8063313ce567146103cb57806336767731146103da57806339509351146103ff57806340c10f19146104125780634127365714610425578063418135371461043857600080fd5b806320d947e81161027857806320d947e81461036757806323b872dd1461037757806329605e771461038a5780632ab6f8db1461039d5780632d5a5d34146103a557806330280a71146103b857600080fd5b80630146e278146102c057806306fdde03146102d5578063095ea7b3146102f357806316b2a5a31461031657806318160ddd146103295780631fac0e521461033b575b600080fd5b6102d36102ce3660046127c6565b610720565b005b6102dd61077e565b6040516102ea9190612940565b60405180910390f35b6103066103013660046127fa565b610810565b60405190151581526020016102ea565b6102d36103243660046127c6565b610826565b600b545b6040519081526020016102ea565b61030661034936600461270f565b6001600160a01b031660009081526001602052604090205460ff1690565b61032d68056bc75e2d6310000081565b610306610385366004612786565b61087b565b6102d361039836600461270f565b61092c565b6102d36109a8565b6102d36103b33660046127c6565b6109bc565b6102d36103c63660046127c6565b610a11565b604051601281526020016102ea565b6013546001600160a01b03165b6040516001600160a01b0390911681526020016102ea565b61030661040d3660046127fa565b610a66565b6102d36104203660046127fa565b610a9d565b6102d361043336600461270f565b610ab3565b61030661044636600461270f565b6001600160a01b031660009081526008602052604090205460ff1690565b6102d36104723660046128ac565b610b4b565b60125461032d565b600e546001600160a01b03166103e7565b6102d361049e36600461270f565b610b55565b601154600160a81b900460ff16610306565b61032d6104c336600461270f565b6001600160a01b031660009081526009602052604090205490565b6102d3610bf7565b6102d36104f436600461270f565b610c6b565b6102d3610507366004612859565b610cb7565b6000546001600160a01b03166103e7565b6102d361052b3660046128dc565b610e89565b6102dd610f70565b6102d36105463660046128ac565b610f7f565b60055461032d565b61030661056136600461270f565b6001600160a01b031660009081526007602052604090205460ff1690565b6102d361058d3660046128ac565b610ff2565b6103066105a03660046127fa565b611004565b6102d36105b336600461270f565b61109f565b6103066105c63660046127fa565b611141565b60045461032d565b6105e66105e136600461283f565b61114e565b60408051825161ffff908116825260208085015182169083015292820151909216908201526060016102ea565b61032d683635c9adc5dea0000081565b600f546001600160a01b03166103e7565b6102d36106423660046127c6565b6111f7565b6011546001600160a01b03166103e7565b6102d3610666366004612825565b61124c565b61030661067936600461270f565b6001600160a01b031660009081526003602052604090205460ff1690565b61032d6106a536600461274e565b6001600160a01b039182166000908152600a6020908152604080832093909416825291909152205490565b6103066106de36600461270f565b6001600160a01b031660009081526002602052604090205460ff1690565b6102d361070a36600461270f565b611294565b6010546001600160a01b03166103e7565b6000546001600160a01b031633146107535760405162461bcd60e51b815260040161074a90612993565b60405180910390fd5b6001600160a01b03919091166000908152600860205260409020805460ff1916911515919091179055565b6060600c805461078d90612a98565b80601f01602080910402602001604051908101604052809291908181526020018280546107b990612a98565b80156108065780601f106107db57610100808354040283529160200191610806565b820191906000526020600020905b8154815290600101906020018083116107e957829003601f168201915b5050505050905090565b600061081d33848461137e565b50600192915050565b6000546001600160a01b031633146108505760405162461bcd60e51b815260040161074a90612993565b6001600160a01b03919091166000908152600260205260409020805460ff1916911515919091179055565b60006108888484846114a3565b6001600160a01b0384166000908152600a602090815260408083203384529091529020548281101561090d5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b606482015260840161074a565b610921853361091c8685612a81565b61137e565b506001949350505050565b610934611563565b6001600160a01b03811661099c5760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c653a206e6577206f70657261746f7220697320746865207a65726044820152686f206164647265737360b81b606482015260840161074a565b6109a5816115cc565b50565b6109b0611563565b6109ba60006115cc565b565b6000546001600160a01b031633146109e65760405162461bcd60e51b815260040161074a90612993565b6001600160a01b03919091166000908152600360205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314610a3b5760405162461bcd60e51b815260040161074a90612993565b6001600160a01b03919091166000908152600160205260409020805460ff1916911515919091179055565b336000818152600a602090815260408083206001600160a01b0387168452909152812054909161081d91859061091c908690612a2a565b610aa5611563565b610aaf828261161e565b5050565b6000546001600160a01b03163314610add5760405162461bcd60e51b815260040161074a90612993565b6001600160a01b038116610b295760405162461bcd60e51b815260206004820152601360248201527224b73b30b634b21039bbb0b8103937baba32b960691b604482015260640161074a565b601380546001600160a01b0319166001600160a01b0392909216919091179055565b6109a53382611634565b6000546001600160a01b03163314610b7f5760405162461bcd60e51b815260040161074a90612993565b6001600160a01b038116610bd55760405162461bcd60e51b815260206004820152601860248201527f496e76616c6964206d61726b6574696e672077616c6c65740000000000000000604482015260640161074a565b600f80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314610c215760405162461bcd60e51b815260040161074a90612993565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b03163314610c955760405162461bcd60e51b815260040161074a90612993565b601080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314610ce15760405162461bcd60e51b815260040161074a90612993565b61271081610cef8486612a04565b610cf99190612a04565b61ffff161115610d365760405162461bcd60e51b81526020600482015260086024820152674f766572666c6f7760c01b604482015260640161074a565b8260066000866002811115610d5b57634e487b7160e01b600052602160045260246000fd5b6002811115610d7a57634e487b7160e01b600052602160045260246000fd5b815260200190815260200160002060000160006101000a81548161ffff021916908361ffff1602179055508160066000866002811115610dca57634e487b7160e01b600052602160045260246000fd5b6002811115610de957634e487b7160e01b600052602160045260246000fd5b815260200190815260200160002060000160026101000a81548161ffff021916908361ffff1602179055508060066000866002811115610e3957634e487b7160e01b600052602160045260246000fd5b6002811115610e5857634e487b7160e01b600052602160045260246000fd5b815260200190815260200160002060000160046101000a81548161ffff021916908361ffff16021790555050505050565b6000546001600160a01b03163314610eb35760405162461bcd60e51b815260040161074a90612993565b68056bc75e2d63100000821015610f0c5760405162461bcd60e51b815260206004820152601760248201527f4d617820747820616d6f756e7420746f6f20736d616c6c000000000000000000604482015260640161074a565b683635c9adc5dea00000811015610f655760405162461bcd60e51b815260206004820152601b60248201527f4d61782077616c6c657420616d6f756e7420746f6f20736d616c6c0000000000604482015260640161074a565b600491909155600555565b6060600d805461078d90612a98565b6000546001600160a01b03163314610fa95760405162461bcd60e51b815260040161074a90612993565b60008111610fed5760405162461bcd60e51b8152602060048201526011602482015270125b9d985b1a59081d1a1c995cda1bdb19607a1b604482015260640161074a565b601255565b610ffa611563565b6109a5338261161e565b336000908152600a602090815260408083206001600160a01b0386168452909152812054828110156110865760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b606482015260840161074a565b611095338561091c8685612a81565b5060019392505050565b6000546001600160a01b031633146110c95760405162461bcd60e51b815260040161074a90612993565b6001600160a01b03811661111f5760405162461bcd60e51b815260206004820152601760248201527f496e76616c69642074726561737572792077616c6c6574000000000000000000604482015260640161074a565b601180546001600160a01b0319166001600160a01b0392909216919091179055565b600061081d3384846114a3565b60408051606081018252600080825260208201819052918101919091526006600083600281111561118f57634e487b7160e01b600052602160045260246000fd5b60028111156111ae57634e487b7160e01b600052602160045260246000fd5b815260208082019290925260409081016000208151606081018352905461ffff808216835262010000820481169483019490945264010000000090049092169082015292915050565b6000546001600160a01b031633146112215760405162461bcd60e51b815260040161074a90612993565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146112765760405162461bcd60e51b815260040161074a90612993565b60118054911515600160a81b0260ff60a81b19909216919091179055565b6000546001600160a01b031633146112be5760405162461bcd60e51b815260040161074a90612993565b6001600160a01b0381166113235760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161074a565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0383166113e05760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161074a565b6001600160a01b0382166114415760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161074a565b6001600160a01b038381166000818152600a602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600081116114e35760405162461bcd60e51b815260206004820152600d60248201526c2d32b937903a3930b739b332b960991b604482015260640161074a565b3060009081526009602052604081205490806114ff868661164a565b6011549193509150600160a01b900460ff1615801561151b5750815b80156115305750601154600160a81b900460ff165b801561153e57506012548310155b1561154e5761154e601254611874565b61155b868686858561192e565b505050505050565b600e546001600160a01b031633146109ba5760405162461bcd60e51b815260206004820152602660248201527f4f706572617461626c653a2063616c6c6572206973206e6f7420746865206f7060448201526532b930ba37b960d11b606482015260840161074a565b600e80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f74da04524d50c64947f5dd5381ef1a4dca5cba8ed1d816243f9e48aa0b5617ed90600090a35050565b6116288282611b3d565b610aaf60008383611c1c565b61163e8282611e0e565b610aaf82600083611c1c565b6001600160a01b038216600090815260076020526040812054819060ff168061168b57506001600160a01b03831660009081526007602052604090205460ff165b15611699576000915061186d565b6001600160a01b03841660009081526008602052604090205460ff1615611742576001600090815260066020908152604080516060810182527f3e5fec24aa4dc4e5aee2e025e51e1392c72a2500577559fae9665c6d52bd6a315461ffff80821680845262010000830482169584018690526401000000009092041692820183905290939261172791612a04565b6117319190612a04565b61ffff16119250600191505061186d565b6001600160a01b03831660009081526008602052604090205460ff16156117eb576002600090815260066020908152604080516060810182527f8819ef417987f8ae7a81f42cdfb18815282fe989326fbff903d13cf0e03ace295461ffff8082168084526201000083048216958401869052640100000000909204169282018390529093926117d091612a04565b6117da9190612a04565b61ffff16119250600291505061186d565b600080805260066020908152604080516060810182527f54cdd369e4e8a8515e52ca72ec816c2101831ad1f18bf44102ed171459c9b4f85461ffff80821680845262010000830482169584018690526401000000009092041692820183905290939261185691612a04565b6118609190612a04565b61ffff1611925060009150505b9250929050565b6011805460ff60a01b1916600160a01b1790556010546001600160a01b03163014156118cf57600f546118b29030906001600160a01b031683611f5d565b600f546118ca9030906001600160a01b031683611c1c565b61191e565b6010546118e4906001600160a01b0316612135565b1561190057600f546118ca9082906001600160a01b031661216f565b601054600f5461191e916001600160a01b03908116918491166123e1565b506011805460ff60a01b19169055565b8115611b1a5760006006600083600281111561195a57634e487b7160e01b600052602160045260246000fd5b600281111561197957634e487b7160e01b600052602160045260246000fd5b8152602081019190915260400160009081205461ffff1691506006818460028111156119b557634e487b7160e01b600052602160045260246000fd5b60028111156119d457634e487b7160e01b600052602160045260246000fd5b8152602081019190915260400160009081205462010000900461ffff169150600681856002811115611a1657634e487b7160e01b600052602160045260246000fd5b6002811115611a3557634e487b7160e01b600052602160045260246000fd5b81526020810191909152604001600090812054640100000000900461ffff169150612710611a638389612a62565b611a6d9190612a42565b90506000612710611a8261ffff86168a612a62565b611a8c9190612a42565b90506000612710611aa161ffff88168b612a62565b611aab9190612a42565b90508215611aca57611abd8b84611634565b611ac7838a612a81565b98505b8115611af557601154611ae8908c906001600160a01b031684611f5d565b611af2828a612a81565b98505b8015611b1357611b068b3083611f5d565b611b10818a612a81565b98505b5050505050505b8215611b3657611b2b858585611f5d565b611b36858585611c1c565b5050505050565b6001600160a01b038216611b935760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161074a565b80600b6000828254611ba59190612a2a565b90915550506001600160a01b03821660009081526009602052604081208054839290611bd2908490612a2a565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6001600160a01b03831660009081526003602052604090205460ff16158015611c5e57506001600160a01b03821660009081526003602052604090205460ff16155b611ca05760405162461bcd60e51b8152602060048201526013602482015272189b1858dadb1a5cdd1959081858d8dbdd5b9d606a1b604482015260640161074a565b6001600160a01b03831660009081526001602052604090205460ff1680611cdf57506001600160a01b03821660009081526001602052604090205460ff165b80611cec57506004548111155b611d2c5760405162461bcd60e51b8152602060048201526011602482015270151e08185b5bdd5b9d081b1a5b5a5d1959607a1b604482015260640161074a565b6001600160a01b03821660009081526002602052604090205460ff1680611d6d57506005546001600160a01b03831660009081526009602052604090205411155b611db15760405162461bcd60e51b8152602060048201526015602482015274149958d95a5d995c881a1bdb19081b1a5b5a5d1959605a1b604482015260640161074a565b6acecb8f27f4200f3a000000611dc6600b5490565b1115611e095760405162461bcd60e51b815260206004820152601260248201527145786365656473204d41585f535550504c5960701b604482015260640161074a565b505050565b6001600160a01b038216611e6e5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b606482015260840161074a565b6001600160a01b03821660009081526009602052604090205481811015611ee25760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b606482015260840161074a565b611eec8282612a81565b6001600160a01b038416600090815260096020526040812091909155600b8054849290611f1a908490612a81565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001611496565b6001600160a01b038316611fc15760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161074a565b6001600160a01b0382166120235760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161074a565b6001600160a01b0383166000908152600960205260409020548181101561209b5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161074a565b6120a58282612a81565b6001600160a01b0380861660009081526009602052604080822093909355908516815290812080548492906120db908490612a2a565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161212791815260200190565b60405180910390a350505050565b60006001600160a01b038216158061216957506001600160a01b03821673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee145b92915050565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106121b257634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152601354604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561220657600080fd5b505afa15801561221a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061223e9190612732565b8160018151811061225f57634e487b7160e01b600052603260045260246000fd5b6001600160a01b039283166020918202929092010152601354612285913091168561137e565b6013546001600160a01b0380841631911663791ac94785600085876122ac4261012c612a2a565b6040518663ffffffff1660e01b81526004016122cc9594939291906129c8565b600060405180830381600087803b1580156122e657600080fd5b505af19250505080156122f7575060015b612375573d808015612325576040519150601f19603f3d011682016040523d82523d6000602084013e61232a565b606091505b506010546040518681526001600160a01b038681169216907f606d992ad3ca50e926e8cc0a69c5f8b2582c664c584cd4c4f43037d392e5ddbc9060200160405180910390a3506123db565b600061238b826001600160a01b03861631612a81565b60105460408051888152602081018490529293506001600160a01b03878116939216917ff9d1427f4e951dab492e12d5a69efc72debccbeaf18ddeb9d576c1fc6a0dc1f9910160405180910390a3505b50505050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061242457634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b031681525050838160018151811061246657634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201015260135461248c913091168561137e565b6010546040516370a0823160e01b81526001600160a01b03848116600483015260009216906370a082319060240160206040518083038186803b1580156124d257600080fd5b505afa1580156124e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061250a91906128c4565b6013549091506001600160a01b0316635c11d795856000858761252f4261012c612a2a565b6040518663ffffffff1660e01b815260040161254f9594939291906129c8565b600060405180830381600087803b15801561256957600080fd5b505af192505050801561257a575060015b6125f8573d8080156125a8576040519150601f19603f3d011682016040523d82523d6000602084013e6125ad565b606091505b506010546040518681526001600160a01b038681169216907f606d992ad3ca50e926e8cc0a69c5f8b2582c664c584cd4c4f43037d392e5ddbc9060200160405180910390a350611b36565b6010546040516370a0823160e01b81526001600160a01b03858116600483015260009284929116906370a082319060240160206040518083038186803b15801561264157600080fd5b505afa158015612655573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061267991906128c4565b6126839190612a81565b60105460408051888152602081018490529293506001600160a01b03878116939216917ff9d1427f4e951dab492e12d5a69efc72debccbeaf18ddeb9d576c1fc6a0dc1f9910160405180910390a3505050505050565b803580151581146126e957600080fd5b919050565b8035600381106126e957600080fd5b803561ffff811681146126e957600080fd5b600060208284031215612720578081fd5b813561272b81612ae9565b9392505050565b600060208284031215612743578081fd5b815161272b81612ae9565b60008060408385031215612760578081fd5b823561276b81612ae9565b9150602083013561277b81612ae9565b809150509250929050565b60008060006060848603121561279a578081fd5b83356127a581612ae9565b925060208401356127b581612ae9565b929592945050506040919091013590565b600080604083850312156127d8578182fd5b82356127e381612ae9565b91506127f1602084016126d9565b90509250929050565b6000806040838503121561280c578182fd5b823561281781612ae9565b946020939093013593505050565b600060208284031215612836578081fd5b61272b826126d9565b600060208284031215612850578081fd5b61272b826126ee565b6000806000806080858703121561286e578081fd5b612877856126ee565b9350612885602086016126fd565b9250612893604086016126fd565b91506128a1606086016126fd565b905092959194509250565b6000602082840312156128bd578081fd5b5035919050565b6000602082840312156128d5578081fd5b5051919050565b600080604083850312156128ee578182fd5b50508035926020909101359150565b6000815180845260208085019450808401835b838110156129355781516001600160a01b031687529582019590820190600101612910565b509495945050505050565b6000602080835283518082850152825b8181101561296c57858101830151858201604001528201612950565b8181111561297d5783604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b85815284602082015260a0604082015260006129e760a08301866128fd565b6001600160a01b0394909416606083015250608001529392505050565b600061ffff808316818516808303821115612a2157612a21612ad3565b01949350505050565b60008219821115612a3d57612a3d612ad3565b500190565b600082612a5d57634e487b7160e01b81526012600452602481fd5b500490565b6000816000190483118215151615612a7c57612a7c612ad3565b500290565b600082821015612a9357612a93612ad3565b500390565b600181811c90821680612aac57607f821691505b60208210811415612acd57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b03811681146109a557600080fdfea2646970667358221220181f21dc79ce5e03ef1d676ae1957b0b2856b80c42e26a5c7a3b5cbe282b9f1564736f6c6343000804003300000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000b43616e647920546f6b656e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000543414e4459000000000000000000000000000000000000000000000000000000

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

00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000b43616e647920546f6b656e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000543414e4459000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : name_ (string): Candy Token
Arg [1] : symbol_ (string): CANDY

-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [2] : 000000000000000000000000000000000000000000000000000000000000000b
Arg [3] : 43616e647920546f6b656e000000000000000000000000000000000000000000
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [5] : 43414e4459000000000000000000000000000000000000000000000000000000


Deployed ByteCode Sourcemap

38473:11318:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37992:147;;;;;;:::i;:::-;;:::i;:::-;;8925:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11092:169;;;;;;:::i;:::-;;:::i;:::-;;;4904:14:1;;4897:22;4879:41;;4867:2;4852:18;11092:169:0;4834:92:1;32563:157:0;;;;;;:::i;:::-;;:::i;10045:108::-;10133:12;;10045:108;;;15870:25:1;;;15858:2;15843:18;10045:108:0;15825:76:1;32303:130:0;;;;;;:::i;:::-;-1:-1:-1;;;;;32396:29:0;32372:4;32396:29;;;:20;:29;;;;;;;;;32303:130;30604:59;;30654:9;30604:59;;11743:422;;;;;;:::i;:::-;;:::i;19926:214::-;;;;;;:::i;:::-;;:::i;19662:104::-;;;:::i;31535:118::-;;;;;;:::i;:::-;;:::i;32030:130::-;;;;;;:::i;:::-;;:::i;9887:93::-;;;9970:2;17483:36:1;;17471:2;17456:18;9887:93:0;17438:87:1;42420:104:0;42504:11;;-1:-1:-1;;;;;42504:11:0;42420:104;;;-1:-1:-1;;;;;4695:32:1;;;4677:51;;4665:2;4650:18;42420:104:0;4632:102:1;12574:215:0;;;;;;:::i;:::-;;:::i;39730:110::-;;;;;;:::i;:::-;;:::i;42209:203::-;;;;;;:::i;:::-;;:::i;38218:116::-;;;;;;:::i;:::-;-1:-1:-1;;;;;38304:22:0;38280:4;38304:22;;;:11;:22;;;;;;;;;38218:116;40315:85;;;;;;:::i;:::-;;:::i;43853:105::-;43934:16;;43853:105;;18979:93;19055:9;;-1:-1:-1;;;;;19055:9:0;18979:93;;42726:175;;;;;;:::i;:::-;;:::i;42628:90::-;42698:12;;-1:-1:-1;;;42698:12:0;;;;42628:90;;10216:127;;;;;;:::i;:::-;-1:-1:-1;;;;;10317:18:0;10290:7;10317:18;;;:9;:18;;;;;;;10216:127;2826:148;;;:::i;43022:103::-;;;;;;:::i;:::-;;:::i;35560:399::-;;;;;;:::i;:::-;;:::i;2175:87::-;2221:7;2248:6;-1:-1:-1;;;;;2248:6:0;2175:87;;33278:393;;;;;;:::i;:::-;;:::i;9144:104::-;;;:::i;43687:158::-;;;;;;:::i;:::-;;:::i;33679:93::-;33754:10;;33679:93;;36337:122;;;;;;:::i;:::-;-1:-1:-1;;;;;36426:25:0;36402:4;36426:25;;;:16;:25;;;;;;;;;36337:122;39624:98;;;;;;:::i;:::-;;:::i;13292:377::-;;;;;;:::i;:::-;;:::i;43244:172::-;;;;;;:::i;:::-;;:::i;10556:175::-;;;;;;:::i;:::-;;:::i;33780:89::-;33853:8;;33780:89;;36467:120;;;;;;:::i;:::-;;:::i;:::-;;;;15550:13:1;;15513:6;15546:22;;;15528:41;;15629:4;15617:17;;;15611:24;15607:33;;15585:20;;;15578:63;15689:17;;;15683:24;15679:33;;;15657:20;;;15650:63;15491:2;15476:18;36467:120:0;15458:261:1;30670:64:0;;30724:10;30670:64;;42909:105;42990:16;;-1:-1:-1;;;;;42990:16:0;42909:105;;36076:122;;;;;;:::i;:::-;;:::i;43424:103::-;43504:15;;-1:-1:-1;;;;;43504:15:0;43424:103;;42532:88;;;;;;:::i;:::-;;:::i;31792:112::-;;;;;;:::i;:::-;-1:-1:-1;;;;;31877:19:0;31853:4;31877:19;;;:10;:19;;;;;;;;;31792:112;10794:151;;;;;;:::i;:::-;-1:-1:-1;;;;;10910:18:0;;;10883:7;10910:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;10794:151;32867:166;;;;;;:::i;:::-;-1:-1:-1;;;;;32994:31:0;32965:4;32994:31;;;:22;:31;;;;;;;;;32867:166;3129:244;;;;;;:::i;:::-;;:::i;43133:103::-;43213:15;;-1:-1:-1;;;;;43213:15:0;43133:103;;37992:147;2221:7;2248:6;-1:-1:-1;;;;;2248:6:0;805:10;2395:23;2387:68;;;;-1:-1:-1;;;2387:68:0;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;38102:22:0;;;::::1;;::::0;;;:11:::1;:22;::::0;;;;:29;;-1:-1:-1;;38102:29:0::1;::::0;::::1;;::::0;;;::::1;::::0;;37992:147::o;8925:100::-;8979:13;9012:5;9005:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8925:100;:::o;11092:169::-;11175:4;11192:39;805:10;11215:7;11224:6;11192:8;:39::i;:::-;-1:-1:-1;11249:4:0;11092:169;;;;:::o;32563:157::-;2221:7;2248:6;-1:-1:-1;;;;;2248:6:0;805:10;2395:23;2387:68;;;;-1:-1:-1;;;2387:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32674:31:0;;;::::1;;::::0;;;:22:::1;:31;::::0;;;;:38;;-1:-1:-1;;32674:38:0::1;::::0;::::1;;::::0;;;::::1;::::0;;32563:157::o;11743:422::-;11849:4;11866:36;11876:6;11884:9;11895:6;11866:9;:36::i;:::-;-1:-1:-1;;;;;11942:19:0;;11915:24;11942:19;;;:11;:19;;;;;;;;805:10;11942:33;;;;;;;;11994:26;;;;11986:79;;;;-1:-1:-1;;;11986:79:0;;9203:2:1;11986:79:0;;;9185:21:1;9242:2;9222:18;;;9215:30;9281:34;9261:18;;;9254:62;-1:-1:-1;;;9332:18:1;;;9325:38;9380:19;;11986:79:0;9175:230:1;11986:79:0;12076:57;12085:6;805:10;12107:25;12126:6;12107:16;:25;:::i;:::-;12076:8;:57::i;:::-;-1:-1:-1;12153:4:0;;11743:422;-1:-1:-1;;;;11743:422:0:o;19926:214::-;18859:16;:14;:16::i;:::-;-1:-1:-1;;;;;20020:25:0;::::1;20012:79;;;::::0;-1:-1:-1;;;20012:79:0;;10329:2:1;20012:79:0::1;::::0;::::1;10311:21:1::0;10368:2;10348:18;;;10341:30;10407:34;10387:18;;;10380:62;-1:-1:-1;;;10458:18:1;;;10451:39;10507:19;;20012:79:0::1;10301:231:1::0;20012:79:0::1;20102:30;20120:11;20102:17;:30::i;:::-;19926:214:::0;:::o;19662:104::-;18859:16;:14;:16::i;:::-;19729:29:::1;19755:1;19729:17;:29::i;:::-;19662:104::o:0;31535:118::-;2221:7;2248:6;-1:-1:-1;;;;;2248:6:0;805:10;2395:23;2387:68;;;;-1:-1:-1;;;2387:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;31619:19:0;;;::::1;;::::0;;;:10:::1;:19;::::0;;;;:26;;-1:-1:-1;;31619:26:0::1;::::0;::::1;;::::0;;;::::1;::::0;;31535:118::o;32030:130::-;2221:7;2248:6;-1:-1:-1;;;;;2248:6:0;805:10;2395:23;2387:68;;;;-1:-1:-1;;;2387:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32116:29:0;;;::::1;;::::0;;;:20:::1;:29;::::0;;;;:36;;-1:-1:-1;;32116:36:0::1;::::0;::::1;;::::0;;;::::1;::::0;;32030:130::o;12574:215::-;805:10;12662:4;12711:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;12711:34:0;;;;;;;;;;12662:4;;12679:80;;12702:7;;12711:47;;12748:10;;12711:47;:::i;39730:110::-;18859:16;:14;:16::i;:::-;39810:22:::1;39816:7;39825:6;39810:5;:22::i;:::-;39730:110:::0;;:::o;42209:203::-;2221:7;2248:6;-1:-1:-1;;;;;2248:6:0;805:10;2395:23;2387:68;;;;-1:-1:-1;;;2387:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;42293:27:0;::::1;42285:59;;;::::0;-1:-1:-1;;;42285:59:0;;12135:2:1;42285:59:0::1;::::0;::::1;12117:21:1::0;12174:2;12154:18;;;12147:30;-1:-1:-1;;;12193:18:1;;;12186:49;12252:18;;42285:59:0::1;12107:169:1::0;42285:59:0::1;42357:11;:47:::0;;-1:-1:-1;;;;;;42357:47:0::1;-1:-1:-1::0;;;;;42357:47:0;;;::::1;::::0;;;::::1;::::0;;42209:203::o;40315:85::-;40365:27;805:10;40385:6;40365:5;:27::i;42726:175::-;2221:7;2248:6;-1:-1:-1;;;;;2248:6:0;805:10;2395:23;2387:68;;;;-1:-1:-1;;;2387:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;42808:20:0;::::1;42800:57;;;::::0;-1:-1:-1;;;42800:57:0;;7694:2:1;42800:57:0::1;::::0;::::1;7676:21:1::0;7733:2;7713:18;;;7706:30;7772:26;7752:18;;;7745:54;7816:18;;42800:57:0::1;7666:174:1::0;42800:57:0::1;42868:16;:25:::0;;-1:-1:-1;;;;;;42868:25:0::1;-1:-1:-1::0;;;;;42868:25:0;;;::::1;::::0;;;::::1;::::0;;42726:175::o;2826:148::-;2221:7;2248:6;-1:-1:-1;;;;;2248:6:0;805:10;2395:23;2387:68;;;;-1:-1:-1;;;2387:68:0;;;;;;;:::i;:::-;2933:1:::1;2917:6:::0;;2896:40:::1;::::0;-1:-1:-1;;;;;2917:6:0;;::::1;::::0;2896:40:::1;::::0;2933:1;;2896:40:::1;2964:1;2947:19:::0;;-1:-1:-1;;;;;;2947:19:0::1;::::0;;2826:148::o;43022:103::-;2221:7;2248:6;-1:-1:-1;;;;;2248:6:0;805:10;2395:23;2387:68;;;;-1:-1:-1;;;2387:68:0;;;;;;;:::i;:::-;43094:15:::1;:23:::0;;-1:-1:-1;;;;;;43094:23:0::1;-1:-1:-1::0;;;;;43094:23:0;;;::::1;::::0;;;::::1;::::0;;43022:103::o;35560:399::-;2221:7;2248:6;-1:-1:-1;;;;;2248:6:0;805:10;2395:23;2387:68;;;;-1:-1:-1;;;2387:68:0;;;;;;;:::i;:::-;35771:5:::1;35760:7:::0;35731:26:::1;35746:11:::0;35731:12;:26:::1;:::i;:::-;:36;;;;:::i;:::-;:45;;;;35723:66;;;::::0;-1:-1:-1;;;35723:66:0;;6145:2:1;35723:66:0::1;::::0;::::1;6127:21:1::0;6184:1;6164:18;;;6157:29;-1:-1:-1;;;6202:18:1;;;6195:38;6250:18;;35723:66:0::1;6117:157:1::0;35723:66:0::1;35835:12;35800:10;:19;35811:7;35800:19;;;;;;-1:-1:-1::0;;;35800:19:0::1;;;;;;;;;;;;;;;-1:-1:-1::0;;;35800:19:0::1;;;;;;;;;;;;;;;;;;;;:32;;;:47;;;;;;;;;;;;;;;;;;35892:11;35858:10;:19;35869:7;35858:19;;;;;;-1:-1:-1::0;;;35858:19:0::1;;;;;;;;;;;;;;;-1:-1:-1::0;;;35858:19:0::1;;;;;;;;;;;;;;;;;;;;:31;;;:45;;;;;;;;;;;;;;;;;;35944:7;35914:10;:19;35925:7;35914:19;;;;;;-1:-1:-1::0;;;35914:19:0::1;;;;;;;;;;;;;;;-1:-1:-1::0;;;35914:19:0::1;;;;;;;;;;;;;;;;;;;;:27;;;:37;;;;;;;;;;;;;;;;;;35560:399:::0;;;;:::o;33278:393::-;2221:7;2248:6;-1:-1:-1;;;;;2248:6:0;805:10;2395:23;2387:68;;;;-1:-1:-1;;;2387:68:0;;;;;;;:::i;:::-;30654:9:::1;33411:7;:34;;33403:70;;;::::0;-1:-1:-1;;;33403:70:0;;11085:2:1;33403:70:0::1;::::0;::::1;11067:21:1::0;11124:2;11104:18;;;11097:30;11163:25;11143:18;;;11136:53;11206:18;;33403:70:0::1;11057:173:1::0;33403:70:0::1;30724:10;33506:9;:40;;33484:117;;;::::0;-1:-1:-1;;;33484:117:0;;9973:2:1;33484:117:0::1;::::0;::::1;9955:21:1::0;10012:2;9992:18;;;9985:30;10051:29;10031:18;;;10024:57;10098:18;;33484:117:0::1;9945:177:1::0;33484:117:0::1;33612:8;:18:::0;;;;33641:10:::1;:22:::0;33278:393::o;9144:104::-;9200:13;9233:7;9226:14;;;;;:::i;43687:158::-;2221:7;2248:6;-1:-1:-1;;;;;2248:6:0;805:10;2395:23;2387:68;;;;-1:-1:-1;;;2387:68:0;;;;;;;:::i;:::-;43778:1:::1;43769:6;:10;43761:40;;;::::0;-1:-1:-1;;;43761:40:0;;10739:2:1;43761:40:0::1;::::0;::::1;10721:21:1::0;10778:2;10758:18;;;10751:30;-1:-1:-1;;;10797:18:1;;;10790:47;10854:18;;43761:40:0::1;10711:167:1::0;43761:40:0::1;43812:16;:25:::0;43687:158::o;39624:98::-;18859:16;:14;:16::i;:::-;39687:27:::1;805:10:::0;39707:6:::1;39687:5;:27::i;13292:377::-:0;805:10;13385:4;13429:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;13429:34:0;;;;;;;;;;13482:35;;;;13474:85;;;;-1:-1:-1;;;13474:85:0;;14043:2:1;13474:85:0;;;14025:21:1;14082:2;14062:18;;;14055:30;14121:34;14101:18;;;14094:62;-1:-1:-1;;;14172:18:1;;;14165:35;14217:19;;13474:85:0;14015:227:1;13474:85:0;13570:67;805:10;13593:7;13602:34;13621:15;13602:16;:34;:::i;13570:67::-;-1:-1:-1;13657:4:0;;13292:377;-1:-1:-1;;;13292:377:0:o;43244:172::-;2221:7;2248:6;-1:-1:-1;;;;;2248:6:0;805:10;2395:23;2387:68;;;;-1:-1:-1;;;2387:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;43325:20:0;::::1;43317:56;;;::::0;-1:-1:-1;;;43317:56:0;;11783:2:1;43317:56:0::1;::::0;::::1;11765:21:1::0;11822:2;11802:18;;;11795:30;11861:25;11841:18;;;11834:53;11904:18;;43317:56:0::1;11755:173:1::0;43317:56:0::1;43384:15;:24:::0;;-1:-1:-1;;;;;;43384:24:0::1;-1:-1:-1::0;;;;;43384:24:0;;;::::1;::::0;;;::::1;::::0;;43244:172::o;10556:175::-;10642:4;10659:42;805:10;10683:9;10694:6;10659:9;:42::i;36467:120::-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;36560:10:0;:19;36571:7;36560:19;;;;;;-1:-1:-1;;;36560:19:0;;;;;;;;;;;;;;;-1:-1:-1;;;36560:19:0;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;36560:19:0;36553:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36467:120;-1:-1:-1;;36467:120:0:o;36076:122::-;2221:7;2248:6;-1:-1:-1;;;;;2248:6:0;805:10;2395:23;2387:68;;;;-1:-1:-1;;;2387:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;36158:25:0;;;::::1;;::::0;;;:16:::1;:25;::::0;;;;:32;;-1:-1:-1;;36158:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;36076:122::o;42532:88::-;2221:7;2248:6;-1:-1:-1;;;;;2248:6:0;805:10;2395:23;2387:68;;;;-1:-1:-1;;;2387:68:0;;;;;;;:::i;:::-;42593:12:::1;:19:::0;;;::::1;;-1:-1:-1::0;;;42593:19:0::1;-1:-1:-1::0;;;;42593:19:0;;::::1;::::0;;;::::1;::::0;;42532:88::o;3129:244::-;2221:7;2248:6;-1:-1:-1;;;;;2248:6:0;805:10;2395:23;2387:68;;;;-1:-1:-1;;;2387:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;3218:22:0;::::1;3210:73;;;::::0;-1:-1:-1;;;3210:73:0;;6884:2:1;3210:73:0::1;::::0;::::1;6866:21:1::0;6923:2;6903:18;;;6896:30;6962:34;6942:18;;;6935:62;-1:-1:-1;;;7013:18:1;;;7006:36;7059:19;;3210:73:0::1;6856:228:1::0;3210:73:0::1;3320:6;::::0;;3299:38:::1;::::0;-1:-1:-1;;;;;3299:38:0;;::::1;::::0;3320:6;::::1;::::0;3299:38:::1;::::0;::::1;3348:6;:17:::0;;-1:-1:-1;;;;;;3348:17:0::1;-1:-1:-1::0;;;;;3348:17:0;;;::::1;::::0;;;::::1;::::0;;3129:244::o;16648:346::-;-1:-1:-1;;;;;16750:19:0;;16742:68;;;;-1:-1:-1;;;16742:68:0;;13638:2:1;16742:68:0;;;13620:21:1;13677:2;13657:18;;;13650:30;13716:34;13696:18;;;13689:62;-1:-1:-1;;;13767:18:1;;;13760:34;13811:19;;16742:68:0;13610:226:1;16742:68:0;-1:-1:-1;;;;;16829:21:0;;16821:68;;;;-1:-1:-1;;;16821:68:0;;7291:2:1;16821:68:0;;;7273:21:1;7330:2;7310:18;;;7303:30;7369:34;7349:18;;;7342:62;-1:-1:-1;;;7420:18:1;;;7413:32;7462:19;;16821:68:0;7263:224:1;16821:68:0;-1:-1:-1;;;;;16902:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;16954:32;;15870:25:1;;;16954:32:0;;15843:18:1;16954:32:0;;;;;;;;16648:346;;;:::o;43966:1077::-;44107:1;44098:6;:10;44090:36;;;;-1:-1:-1;;;44090:36:0;;8454:2:1;44090:36:0;;;8436:21:1;8493:2;8473:18;;;8466:30;-1:-1:-1;;;8512:18:1;;;8505:43;8565:18;;44090:36:0;8426:163:1;44090:36:0;44470:4;44421:28;10317:18;;;:9;:18;;;;;;;44421:28;44587:26;44604:4;44610:2;44587:16;:26::i;:::-;44719:7;;44551:62;;-1:-1:-1;44551:62:0;-1:-1:-1;;;;44719:7:0;;;;44718:8;:35;;;;;44743:10;44718:35;:64;;;;-1:-1:-1;44770:12:0;;-1:-1:-1;;;44770:12:0;;;;44718:64;:121;;;;;44823:16;;44799:20;:40;;44718:121;44700:216;;;44866:38;44887:16;;44866:20;:38::i;:::-;44983:52;44998:4;45004:2;45008:6;45016:10;45028:6;44983:14;:52::i;:::-;43966:1077;;;;;;:::o;19153:144::-;19055:9;;-1:-1:-1;;;;;19055:9:0;805:10;19220:26;19212:77;;;;-1:-1:-1;;;19212:77:0;;8047:2:1;19212:77:0;;;8029:21:1;8086:2;8066:18;;;8059:30;8125:34;8105:18;;;8098:62;-1:-1:-1;;;8176:18:1;;;8169:36;8222:19;;19212:77:0;8019:228:1;20302:210:0;20400:9;;;-1:-1:-1;;;;;20420:23:0;;;-1:-1:-1;;;;;;20420:23:0;;;;;;;20459:45;;20400:9;;;20420:23;20400:9;;20459:45;;20378:19;;20459:45;20302:210;;:::o;40127:180::-;40212:28;40224:7;40233:6;40212:11;:28::i;:::-;40251:48;40279:1;40283:7;40292:6;40251:19;:48::i;40733:180::-;40818:28;40830:7;40839:6;40818:11;:28::i;:::-;40857:48;40877:7;40894:1;40898:6;40857:19;:48::i;36660:1247::-;-1:-1:-1;;;;;36867:22:0;;36762:15;36867:22;;;:16;:22;;;;;;36762:15;;36867:22;;;:46;;-1:-1:-1;;;;;;36893:20:0;;;;;;:16;:20;;;;;;;;36867:46;36863:1037;;;36943:5;36930:18;;36863:1037;;;-1:-1:-1;;;;;37005:17:0;;;;;;:11;:17;;;;;;;;37001:899;;;37075:11;37039:22;37064:23;;;:10;:23;;;;;37039:48;;;;;;;37064:23;37039:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:22;37133:40;;;:::i;:::-;:57;;;;:::i;:::-;37132:63;;;37102:93;;37219:11;37210:20;;37001:899;;;;-1:-1:-1;;;;;37288:15:0;;;;;;:11;:15;;;;;;;;37284:616;;;37357:12;37320:23;37346:24;;;:10;:24;;;;;37320:50;;;;;;;37346:24;37320:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:23;37416:42;;;:::i;:::-;:60;;;;:::i;:::-;37415:83;;;37385:113;;37522:12;37513:21;;37284:616;;;;37608:27;37638:28;;;:10;:28;;;;;37608:58;;;;;;;37638:28;37608:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:27;37712:71;;;:::i;:::-;:114;;;;:::i;:::-;37711:137;;;37681:167;;37872:16;37863:25;;37284:616;;36660:1247;;;;;:::o;46703:472::-;39454:7;:14;;-1:-1:-1;;;;39454:14:0;-1:-1:-1;;;39454:14:0;;;46784:15:::1;::::0;-1:-1:-1;;;;;46784:15:0::1;46811:4;46784:32;46780:388;;;46864:16;::::0;46833:56:::1;::::0;46857:4:::1;::::0;-1:-1:-1;;;;;46864:16:0::1;46882:6:::0;46833:15:::1;:56::i;:::-;46939:16;::::0;46904:60:::1;::::0;46932:4:::1;::::0;-1:-1:-1;;;;;46939:16:0::1;46957:6:::0;46904:19:::1;:60::i;:::-;46780:388;;;46992:15;::::0;46986:22:::1;::::0;-1:-1:-1;;;;;46992:15:0::1;46986:5;:22::i;:::-;46982:186;;;47051:16;::::0;47025:44:::1;::::0;47035:6;;-1:-1:-1;;;;;47051:16:0::1;47025:9;:44::i;46982:186::-;47114:15;::::0;47139:16:::1;::::0;47102:54:::1;::::0;-1:-1:-1;;;;;47114:15:0;;::::1;::::0;47131:6;;47139:16:::1;47102:11;:54::i;:::-;-1:-1:-1::0;39491:7:0;:15;;-1:-1:-1;;;;39491:15:0;;;46703:472::o;45125:1284::-;45308:10;45304:942;;;45335:19;45357:10;:18;45368:6;45357:18;;;;;;-1:-1:-1;;;45357:18:0;;;;;;;;;;;;;;;-1:-1:-1;;;45357:18:0;;;;;;;;;;;;;;;;;;;;-1:-1:-1;45357:18:0;;;:31;;;;-1:-1:-1;45424:10:0;-1:-1:-1;45435:6:0;45424:18;;;;;;-1:-1:-1;;;45424:18:0;;;;;;;;;;;;;;;-1:-1:-1;;;45424:18:0;;;;;;;;;;;;;;;;;;;;-1:-1:-1;45424:18:0;;;:30;;;;;;;-1:-1:-1;45486:10:0;-1:-1:-1;45497:6:0;45424:30;45486:18;;;;;-1:-1:-1;;;45486:18:0;;;;;;;;;;;;;;;-1:-1:-1;;;45486:18:0;;;;;;;;;;;;;;;;;;;;-1:-1:-1;45486:18:0;;;:26;;;;;;;-1:-1:-1;45574:5:0;45554:16;45486:26;45554:6;:16;:::i;:::-;45553:26;;;;:::i;:::-;45529:50;-1:-1:-1;45594:25:0;45647:5;45623:20;;;;:6;:20;:::i;:::-;45622:30;;;;:::i;:::-;45594:58;-1:-1:-1;45667:26:0;45722:5;45697:21;;;;:6;:21;:::i;:::-;45696:31;;;;:::i;:::-;45667:60;-1:-1:-1;45748:17:0;;45744:128;;45786:28;45792:6;45800:13;45786:5;:28::i;:::-;45833:23;45843:13;45833:23;;:::i;:::-;;;45744:128;45890:21;;45886:167;;45956:15;;45932:59;;45948:6;;-1:-1:-1;;;;;45956:15:0;45973:17;45932:15;:59::i;:::-;46010:27;46020:17;46010:27;;:::i;:::-;;;45886:167;46071:22;;46067:168;;46114:58;46130:6;46146:4;46153:18;46114:15;:58::i;:::-;46191:28;46201:18;46191:28;;:::i;:::-;;;46067:168;45304:942;;;;;;;46260:10;;46256:146;;46287:42;46303:6;46311:9;46322:6;46287:15;:42::i;:::-;46344:46;46364:6;46372:9;46383:6;46344:19;:46::i;:::-;45125:1284;;;;;:::o;15045:338::-;-1:-1:-1;;;;;15129:21:0;;15121:65;;;;-1:-1:-1;;;15121:65:0;;14799:2:1;15121:65:0;;;14781:21:1;14838:2;14818:18;;;14811:30;14877:33;14857:18;;;14850:61;14928:18;;15121:65:0;14771:181:1;15121:65:0;15277:6;15261:12;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;15294:18:0;;;;;;:9;:18;;;;;:28;;15316:6;;15294:18;:28;;15316:6;;15294:28;:::i;:::-;;;;-1:-1:-1;;15338:37:0;;15870:25:1;;;-1:-1:-1;;;;;15338:37:0;;;15355:1;;15338:37;;15858:2:1;15843:18;15338:37:0;;;;;;;15045:338;;:::o;41517:684::-;-1:-1:-1;;;;;41659:16:0;;;;;;:10;:16;;;;;;;;41658:17;:36;;;;-1:-1:-1;;;;;;41680:14:0;;;;;;:10;:14;;;;;;;;41679:15;41658:36;41650:68;;;;-1:-1:-1;;;41650:68:0;;15159:2:1;41650:68:0;;;15141:21:1;15198:2;15178:18;;;15171:30;-1:-1:-1;;;15217:18:1;;;15210:49;15276:18;;41650:68:0;15131:169:1;41650:68:0;-1:-1:-1;;;;;41784:26:0;;;;;;:20;:26;;;;;;;;;:71;;-1:-1:-1;;;;;;41831:24:0;;;;;;:20;:24;;;;;;;;41784:71;:110;;;;41886:8;;41876:6;:18;;41784:110;41762:177;;;;-1:-1:-1;;;41762:177:0;;11437:2:1;41762:177:0;;;11419:21:1;11476:2;11456:18;;;11449:30;-1:-1:-1;;;11495:18:1;;;11488:47;11552:18;;41762:177:0;11409:167:1;41762:177:0;-1:-1:-1;;;;;42016:26:0;;;;;;:22;:26;;;;;;;;;:57;;-1:-1:-1;42063:10:0;;-1:-1:-1;;;;;10317:18:0;;10290:7;10317:18;;;:9;:18;;;;;;42046:27;;42016:57;41994:128;;;;-1:-1:-1;;;41994:128:0;;14449:2:1;41994:128:0;;;14431:21:1;14488:2;14468:18;;;14461:30;-1:-1:-1;;;14507:18:1;;;14500:51;14568:18;;41994:128:0;14421:171:1;41994:128:0;38730:15;42143:13;10133:12;;;10045:108;42143:13;:27;;42135:58;;;;-1:-1:-1;;;42135:58:0;;12885:2:1;42135:58:0;;;12867:21:1;12924:2;12904:18;;;12897:30;-1:-1:-1;;;12943:18:1;;;12936:48;13001:18;;42135:58:0;12857:168:1;42135:58:0;41517:684;;;:::o;15716:494::-;-1:-1:-1;;;;;15800:21:0;;15792:67;;;;-1:-1:-1;;;15792:67:0;;12483:2:1;15792:67:0;;;12465:21:1;12522:2;12502:18;;;12495:30;12561:34;12541:18;;;12534:62;-1:-1:-1;;;12612:18:1;;;12605:31;12653:19;;15792:67:0;12455:223:1;15792:67:0;-1:-1:-1;;;;;15959:18:0;;15934:22;15959:18;;;:9;:18;;;;;;15996:24;;;;15988:71;;;;-1:-1:-1;;;15988:71:0;;6481:2:1;15988:71:0;;;6463:21:1;6520:2;6500:18;;;6493:30;6559:34;6539:18;;;6532:62;-1:-1:-1;;;6610:18:1;;;6603:32;6652:19;;15988:71:0;6453:224:1;15988:71:0;16091:23;16108:6;16091:14;:23;:::i;:::-;-1:-1:-1;;;;;16070:18:0;;;;;;:9;:18;;;;;:44;;;;16125:12;:22;;16141:6;;16070:18;16125:22;;16141:6;;16125:22;:::i;:::-;;;;-1:-1:-1;;16165:37:0;;15870:25:1;;;16191:1:0;;-1:-1:-1;;;;;16165:37:0;;;;;15858:2:1;15843:18;16165:37:0;15825:76:1;14159:604:0;-1:-1:-1;;;;;14265:20:0;;14257:70;;;;-1:-1:-1;;;14257:70:0;;13232:2:1;14257:70:0;;;13214:21:1;13271:2;13251:18;;;13244:30;13310:34;13290:18;;;13283:62;-1:-1:-1;;;13361:18:1;;;13354:35;13406:19;;14257:70:0;13204:227:1;14257:70:0;-1:-1:-1;;;;;14346:23:0;;14338:71;;;;-1:-1:-1;;;14338:71:0;;5741:2:1;14338:71:0;;;5723:21:1;5780:2;5760:18;;;5753:30;5819:34;5799:18;;;5792:62;-1:-1:-1;;;5870:18:1;;;5863:33;5913:19;;14338:71:0;5713:225:1;14338:71:0;-1:-1:-1;;;;;14506:17:0;;14482:21;14506:17;;;:9;:17;;;;;;14542:23;;;;14534:74;;;;-1:-1:-1;;;14534:74:0;;8796:2:1;14534:74:0;;;8778:21:1;8835:2;8815:18;;;8808:30;8874:34;8854:18;;;8847:62;-1:-1:-1;;;8925:18:1;;;8918:36;8971:19;;14534:74:0;8768:228:1;14534:74:0;14639:22;14655:6;14639:13;:22;:::i;:::-;-1:-1:-1;;;;;14619:17:0;;;;;;;:9;:17;;;;;;:42;;;;14672:20;;;;;;;;:30;;14696:6;;14619:17;14672:30;;14696:6;;14672:30;:::i;:::-;;;;;;;;14737:9;-1:-1:-1;;;;;14720:35:0;14729:6;-1:-1:-1;;;;;14720:35:0;;14748:6;14720:35;;;;15870:25:1;;15858:2;15843:18;;15825:76;14720:35:0;;;;;;;;14159:604;;;;:::o;49658:130::-;49711:4;-1:-1:-1;;;;;49736:19:0;;;;:43;;-1:-1:-1;;;;;;49759:20:0;;38651:42;49759:20;49736:43;49728:52;49658:130;-1:-1:-1;;49658:130:0:o;48422:1228::-;48580:16;;;48594:1;48580:16;;;;;;;;48556:21;;48580:16;;;;;;;;;;-1:-1:-1;48580:16:0;48556:40;;48625:4;48607;48612:1;48607:7;;;;;;-1:-1:-1;;;48607:7:0;;;;;;;;;-1:-1:-1;;;;;48607:23:0;;;:7;;;;;;;;;;:23;;;;48651:11;;:18;;;-1:-1:-1;;;48651:18:0;;;;:11;;;;;:16;;:18;;;;;48607:7;;48651:18;;;;;:11;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;48641:4;48646:1;48641:7;;;;;;-1:-1:-1;;;48641:7:0;;;;;;;;;-1:-1:-1;;;;;48641:28:0;;;:7;;;;;;;;;:28;48714:11;;48682:53;;48699:4;;48714:11;48728:6;48682:8;:53::i;:::-;48900:11;;-1:-1:-1;;;;;48834:10:0;;;;;48900:11;:62;48981:6;48810:21;49054:4;48834:2;49098:21;:15;49116:3;49098:21;:::i;:::-;48900:234;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48883:760;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;49603:15:0;;49576:55;;15870:25:1;;;-1:-1:-1;;;;;49576:55:0;;;;49603:15;;49576:55;;15858:2:1;15843:18;49576:55:0;;;;;;;49440:203;48883:760;;;49211:17;49231:26;49244:13;-1:-1:-1;;;;;49231:10:0;;;:26;:::i;:::-;49323:15;;49277:150;;;17262:25:1;;;17318:2;17303:18;;17296:34;;;49211:46:0;;-1:-1:-1;;;;;;49277:150:0;;;;49323:15;;;49277:150;;17235:18:1;49277:150:0;;;;;;;49144:295;48883:760;48422:1228;;;;:::o;47183:1231::-;47384:16;;;47398:1;47384:16;;;;;;;;47360:21;;47384:16;;;;;;;;;;-1:-1:-1;47384:16:0;47360:40;;47429:4;47411;47416:1;47411:7;;;;;;-1:-1:-1;;;47411:7:0;;;;;;;;;;;;;;:23;-1:-1:-1;;;;;47411:23:0;;;-1:-1:-1;;;;;47411:23:0;;;;;47455:5;47445:4;47450:1;47445:7;;;;;;-1:-1:-1;;;47445:7:0;;;;;;;;;-1:-1:-1;;;;;47445:15:0;;;:7;;;;;;;;;:15;47505:11;;47473:53;;47490:4;;47505:11;47519:6;47473:8;:53::i;:::-;47632:15;;47625:37;;-1:-1:-1;;;47625:37:0;;-1:-1:-1;;;;;4695:32:1;;;47625:37:0;;;4677:51:1;47601:21:0;;47632:15;;47625:33;;4650:18:1;;47625:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;47718:11;;47601:61;;-1:-1:-1;;;;;;47718:11:0;:65;47802:6;47718:11;47878:4;47901:2;47922:21;:15;47940:3;47922:21;:::i;:::-;47718:240;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47701:706;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;48367:15:0;;48340:55;;15870:25:1;;;-1:-1:-1;;;;;48340:55:0;;;;48367:15;;48340:55;;15858:2:1;15843:18;48340:55:0;;;;;;;48256:151;47701:706;;;48010:15;;48003:37;;-1:-1:-1;;;48003:37:0;;-1:-1:-1;;;;;4695:32:1;;;48003:37:0;;;4677:51:1;47983:17:0;;48060:13;;48010:15;;;48003:33;;4650:18:1;;48003:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:70;;;;:::i;:::-;48139:15;;48093:150;;;17262:25:1;;;17318:2;17303:18;;17296:34;;;47983:90:0;;-1:-1:-1;;;;;;48093:150:0;;;;48139:15;;;48093:150;;17235:18:1;48093:150:0;;;;;;;47968:287;47183:1231;;;;;:::o;14:160:1:-;79:20;;135:13;;128:21;118:32;;108:2;;164:1;161;154:12;108:2;60:114;;;:::o;179:148::-;252:20;;301:1;291:12;;281:2;;317:1;314;307:12;332:159;399:20;;459:6;448:18;;438:29;;428:2;;481:1;478;471:12;496:257;555:6;608:2;596:9;587:7;583:23;579:32;576:2;;;629:6;621;614:22;576:2;673:9;660:23;692:31;717:5;692:31;:::i;:::-;742:5;566:187;-1:-1:-1;;;566:187:1:o;758:261::-;828:6;881:2;869:9;860:7;856:23;852:32;849:2;;;902:6;894;887:22;849:2;939:9;933:16;958:31;983:5;958:31;:::i;1024:398::-;1092:6;1100;1153:2;1141:9;1132:7;1128:23;1124:32;1121:2;;;1174:6;1166;1159:22;1121:2;1218:9;1205:23;1237:31;1262:5;1237:31;:::i;:::-;1287:5;-1:-1:-1;1344:2:1;1329:18;;1316:32;1357:33;1316:32;1357:33;:::i;:::-;1409:7;1399:17;;;1111:311;;;;;:::o;1427:466::-;1504:6;1512;1520;1573:2;1561:9;1552:7;1548:23;1544:32;1541:2;;;1594:6;1586;1579:22;1541:2;1638:9;1625:23;1657:31;1682:5;1657:31;:::i;:::-;1707:5;-1:-1:-1;1764:2:1;1749:18;;1736:32;1777:33;1736:32;1777:33;:::i;:::-;1531:362;;1829:7;;-1:-1:-1;;;1883:2:1;1868:18;;;;1855:32;;1531:362::o;1898:325::-;1963:6;1971;2024:2;2012:9;2003:7;1999:23;1995:32;1992:2;;;2045:6;2037;2030:22;1992:2;2089:9;2076:23;2108:31;2133:5;2108:31;:::i;:::-;2158:5;-1:-1:-1;2182:35:1;2213:2;2198:18;;2182:35;:::i;:::-;2172:45;;1982:241;;;;;:::o;2228:325::-;2296:6;2304;2357:2;2345:9;2336:7;2332:23;2328:32;2325:2;;;2378:6;2370;2363:22;2325:2;2422:9;2409:23;2441:31;2466:5;2441:31;:::i;:::-;2491:5;2543:2;2528:18;;;;2515:32;;-1:-1:-1;;;2315:238:1:o;2558:190::-;2614:6;2667:2;2655:9;2646:7;2642:23;2638:32;2635:2;;;2688:6;2680;2673:22;2635:2;2716:26;2732:9;2716:26;:::i;2753:213::-;2824:6;2877:2;2865:9;2856:7;2852:23;2848:32;2845:2;;;2898:6;2890;2883:22;2845:2;2926:34;2950:9;2926:34;:::i;2971:430::-;3066:6;3074;3082;3090;3143:3;3131:9;3122:7;3118:23;3114:33;3111:2;;;3165:6;3157;3150:22;3111:2;3193:34;3217:9;3193:34;:::i;:::-;3183:44;;3246:37;3279:2;3268:9;3264:18;3246:37;:::i;:::-;3236:47;;3302:37;3335:2;3324:9;3320:18;3302:37;:::i;:::-;3292:47;;3358:37;3391:2;3380:9;3376:18;3358:37;:::i;:::-;3348:47;;3101:300;;;;;;;:::o;3406:190::-;3465:6;3518:2;3506:9;3497:7;3493:23;3489:32;3486:2;;;3539:6;3531;3524:22;3486:2;-1:-1:-1;3567:23:1;;3476:120;-1:-1:-1;3476:120:1:o;3601:194::-;3671:6;3724:2;3712:9;3703:7;3699:23;3695:32;3692:2;;;3745:6;3737;3730:22;3692:2;-1:-1:-1;3773:16:1;;3682:113;-1:-1:-1;3682:113:1:o;3800:258::-;3868:6;3876;3929:2;3917:9;3908:7;3904:23;3900:32;3897:2;;;3950:6;3942;3935:22;3897:2;-1:-1:-1;;3978:23:1;;;4048:2;4033:18;;;4020:32;;-1:-1:-1;3887:171:1:o;4063:463::-;4116:3;4154:5;4148:12;4181:6;4176:3;4169:19;4207:4;4236:2;4231:3;4227:12;4220:19;;4273:2;4266:5;4262:14;4294:3;4306:195;4320:6;4317:1;4314:13;4306:195;;;4385:13;;-1:-1:-1;;;;;4381:39:1;4369:52;;4441:12;;;;4476:15;;;;4417:1;4335:9;4306:195;;;-1:-1:-1;4517:3:1;;4124:402;-1:-1:-1;;;;;4124:402:1:o;4931:603::-;5043:4;5072:2;5101;5090:9;5083:21;5133:6;5127:13;5176:6;5171:2;5160:9;5156:18;5149:34;5201:4;5214:140;5228:6;5225:1;5222:13;5214:140;;;5323:14;;;5319:23;;5313:30;5289:17;;;5308:2;5285:26;5278:66;5243:10;;5214:140;;;5372:6;5369:1;5366:13;5363:2;;;5442:4;5437:2;5428:6;5417:9;5413:22;5409:31;5402:45;5363:2;-1:-1:-1;5518:2:1;5497:15;-1:-1:-1;;5493:29:1;5478:45;;;;5525:2;5474:54;;5052:482;-1:-1:-1;;;5052:482:1:o;9410:356::-;9612:2;9594:21;;;9631:18;;;9624:30;9690:34;9685:2;9670:18;;9663:62;9757:2;9742:18;;9584:182::o;15906:590::-;16213:6;16202:9;16195:25;16256:6;16251:2;16240:9;16236:18;16229:34;16299:3;16294:2;16283:9;16279:18;16272:31;16176:4;16320:57;16372:3;16361:9;16357:19;16349:6;16320:57;:::i;:::-;-1:-1:-1;;;;;16413:32:1;;;;16408:2;16393:18;;16386:60;-1:-1:-1;16477:3:1;16462:19;16455:35;16312:65;16185:311;-1:-1:-1;;;16185:311:1:o;17530:224::-;17569:3;17597:6;17630:2;17627:1;17623:10;17660:2;17657:1;17653:10;17691:3;17687:2;17683:12;17678:3;17675:21;17672:2;;;17699:18;;:::i;:::-;17735:13;;17577:177;-1:-1:-1;;;;17577:177:1:o;17759:128::-;17799:3;17830:1;17826:6;17823:1;17820:13;17817:2;;;17836:18;;:::i;:::-;-1:-1:-1;17872:9:1;;17807:80::o;17892:217::-;17932:1;17958;17948:2;;-1:-1:-1;;;17983:31:1;;18037:4;18034:1;18027:15;18065:4;17990:1;18055:15;17948:2;-1:-1:-1;18094:9:1;;17938:171::o;18114:168::-;18154:7;18220:1;18216;18212:6;18208:14;18205:1;18202:21;18197:1;18190:9;18183:17;18179:45;18176:2;;;18227:18;;:::i;:::-;-1:-1:-1;18267:9:1;;18166:116::o;18287:125::-;18327:4;18355:1;18352;18349:8;18346:2;;;18360:18;;:::i;:::-;-1:-1:-1;18397:9:1;;18336:76::o;18417:380::-;18496:1;18492:12;;;;18539;;;18560:2;;18614:4;18606:6;18602:17;18592:27;;18560:2;18667;18659:6;18656:14;18636:18;18633:38;18630:2;;;18713:10;18708:3;18704:20;18701:1;18694:31;18748:4;18745:1;18738:15;18776:4;18773:1;18766:15;18630:2;;18472:325;;;:::o;18802:127::-;18863:10;18858:3;18854:20;18851:1;18844:31;18894:4;18891:1;18884:15;18918:4;18915:1;18908:15;18934:131;-1:-1:-1;;;;;19009:31:1;;18999:42;;18989:2;;19055:1;19052;19045:12

Swarm Source

ipfs://181f21dc79ce5e03ef1d676ae1957b0b2856b80c42e26a5c7a3b5cbe282b9f15
Loading