ETH Price: $3,115.70 (+1.54%)
Gas: 7 Gwei

Token

Happy Train (HTR)
 

Overview

Max Total Supply

100,000,000,000 HTR

Holders

68

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
mixtral-8x7b.eth
Balance
273,591,354.439478561408687665 HTR

Value
$0.00
0xc0bc001c852d5ac8315d83d4903b6c939fe49101
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
HappyTrainToken

Compiler Version
v0.8.20+commit.a1b79de6

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-10-24
*/

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

pragma solidity >=0.6.2;

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

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

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

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

pragma solidity >=0.6.2;


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

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

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

pragma solidity >=0.5.0;

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

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

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

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

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

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

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

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

    function initialize(address, address) external;
}

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

pragma solidity >=0.5.0;

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

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

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

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

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

// File: @openzeppelin/contracts/interfaces/draft-IERC6093.sol


// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/draft-IERC6093.sol)
pragma solidity ^0.8.20;

/**
 * @dev Standard ERC20 Errors
 * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC20 tokens.
 */
interface IERC20Errors {
    /**
     * @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.
     * @param sender Address whose tokens are being transferred.
     * @param balance Current balance for the interacting account.
     * @param needed Minimum amount required to perform a transfer.
     */
    error ERC20InsufficientBalance(address sender, uint256 balance, uint256 needed);

    /**
     * @dev Indicates a failure with the token `sender`. Used in transfers.
     * @param sender Address whose tokens are being transferred.
     */
    error ERC20InvalidSender(address sender);

    /**
     * @dev Indicates a failure with the token `receiver`. Used in transfers.
     * @param receiver Address to which tokens are being transferred.
     */
    error ERC20InvalidReceiver(address receiver);

    /**
     * @dev Indicates a failure with the `spender`’s `allowance`. Used in transfers.
     * @param spender Address that may be allowed to operate on tokens without being their owner.
     * @param allowance Amount of tokens a `spender` is allowed to operate with.
     * @param needed Minimum amount required to perform a transfer.
     */
    error ERC20InsufficientAllowance(address spender, uint256 allowance, uint256 needed);

    /**
     * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.
     * @param approver Address initiating an approval operation.
     */
    error ERC20InvalidApprover(address approver);

    /**
     * @dev Indicates a failure with the `spender` to be approved. Used in approvals.
     * @param spender Address that may be allowed to operate on tokens without being their owner.
     */
    error ERC20InvalidSpender(address spender);
}

/**
 * @dev Standard ERC721 Errors
 * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC721 tokens.
 */
interface IERC721Errors {
    /**
     * @dev Indicates that an address can't be an owner. For example, `address(0)` is a forbidden owner in EIP-20.
     * Used in balance queries.
     * @param owner Address of the current owner of a token.
     */
    error ERC721InvalidOwner(address owner);

    /**
     * @dev Indicates a `tokenId` whose `owner` is the zero address.
     * @param tokenId Identifier number of a token.
     */
    error ERC721NonexistentToken(uint256 tokenId);

    /**
     * @dev Indicates an error related to the ownership over a particular token. Used in transfers.
     * @param sender Address whose tokens are being transferred.
     * @param tokenId Identifier number of a token.
     * @param owner Address of the current owner of a token.
     */
    error ERC721IncorrectOwner(address sender, uint256 tokenId, address owner);

    /**
     * @dev Indicates a failure with the token `sender`. Used in transfers.
     * @param sender Address whose tokens are being transferred.
     */
    error ERC721InvalidSender(address sender);

    /**
     * @dev Indicates a failure with the token `receiver`. Used in transfers.
     * @param receiver Address to which tokens are being transferred.
     */
    error ERC721InvalidReceiver(address receiver);

    /**
     * @dev Indicates a failure with the `operator`’s approval. Used in transfers.
     * @param operator Address that may be allowed to operate on tokens without being their owner.
     * @param tokenId Identifier number of a token.
     */
    error ERC721InsufficientApproval(address operator, uint256 tokenId);

    /**
     * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.
     * @param approver Address initiating an approval operation.
     */
    error ERC721InvalidApprover(address approver);

    /**
     * @dev Indicates a failure with the `operator` to be approved. Used in approvals.
     * @param operator Address that may be allowed to operate on tokens without being their owner.
     */
    error ERC721InvalidOperator(address operator);
}

/**
 * @dev Standard ERC1155 Errors
 * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC1155 tokens.
 */
interface IERC1155Errors {
    /**
     * @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.
     * @param sender Address whose tokens are being transferred.
     * @param balance Current balance for the interacting account.
     * @param needed Minimum amount required to perform a transfer.
     * @param tokenId Identifier number of a token.
     */
    error ERC1155InsufficientBalance(address sender, uint256 balance, uint256 needed, uint256 tokenId);

    /**
     * @dev Indicates a failure with the token `sender`. Used in transfers.
     * @param sender Address whose tokens are being transferred.
     */
    error ERC1155InvalidSender(address sender);

    /**
     * @dev Indicates a failure with the token `receiver`. Used in transfers.
     * @param receiver Address to which tokens are being transferred.
     */
    error ERC1155InvalidReceiver(address receiver);

    /**
     * @dev Indicates a failure with the `operator`’s approval. Used in transfers.
     * @param operator Address that may be allowed to operate on tokens without being their owner.
     * @param owner Address of the current owner of a token.
     */
    error ERC1155MissingApprovalForAll(address operator, address owner);

    /**
     * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.
     * @param approver Address initiating an approval operation.
     */
    error ERC1155InvalidApprover(address approver);

    /**
     * @dev Indicates a failure with the `operator` to be approved. Used in approvals.
     * @param operator Address that may be allowed to operate on tokens without being their owner.
     */
    error ERC1155InvalidOperator(address operator);

    /**
     * @dev Indicates an array length mismatch between ids and values in a safeBatchTransferFrom operation.
     * Used in batch transfers.
     * @param idsLength Length of the array of token identifiers
     * @param valuesLength Length of the array of token amounts
     */
    error ERC1155InvalidArrayLength(uint256 idsLength, uint256 valuesLength);
}

// File: @openzeppelin/contracts/utils/Context.sol


// OpenZeppelin Contracts (last updated v5.0.0) (utils/Context.sol)

pragma solidity ^0.8.20;

/**
 * @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) {
        return msg.data;
    }
}

// File: @openzeppelin/contracts/access/Ownable.sol


// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol)

pragma solidity ^0.8.20;


/**
 * @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.
 *
 * The initial owner is set to the address provided by the deployer. 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;

    /**
     * @dev The caller account is not authorized to perform an operation.
     */
    error OwnableUnauthorizedAccount(address account);

    /**
     * @dev The owner is not a valid owner account. (eg. `address(0)`)
     */
    error OwnableInvalidOwner(address owner);

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev Initializes the contract setting the address provided by the deployer as the initial owner.
     */
    constructor(address initialOwner) {
        if (initialOwner == address(0)) {
            revert OwnableInvalidOwner(address(0));
        }
        _transferOwnership(initialOwner);
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

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

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        if (owner() != _msgSender()) {
            revert OwnableUnauthorizedAccount(_msgSender());
        }
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby disabling any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(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 {
        if (newOwner == address(0)) {
            revert OwnableInvalidOwner(address(0));
        }
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

// File: @openzeppelin/contracts/token/ERC20/IERC20.sol


// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.20;

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

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

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

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

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

// File: @openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol


// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/extensions/IERC20Metadata.sol)

pragma solidity ^0.8.20;


/**
 * @dev Interface for the optional metadata functions from the ERC20 standard.
 */
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/ERC20.sol


// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/ERC20.sol)

pragma solidity ^0.8.20;





/**
 * @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}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * The default value of {decimals} is 18. To change this, you should override
 * this function so it returns a different value.
 *
 * We have followed general OpenZeppelin Contracts guidelines: functions revert
 * instead 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.
 */
abstract contract ERC20 is Context, IERC20, IERC20Metadata, IERC20Errors {
    mapping(address account => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * 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 returns (string memory) {
        return _name;
    }

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual 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 default value returned by this function, unless
     * it's 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 returns (uint8) {
        return 18;
    }

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

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

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

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

    /**
     * @dev See {IERC20-approve}.
     *
     * NOTE: If `value` is the maximum `uint256`, the allowance is not updated on
     * `transferFrom`. This is semantically equivalent to an infinite approval.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 value) public virtual returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, value);
        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}.
     *
     * NOTE: Does not update the allowance if the current allowance
     * is the maximum `uint256`.
     *
     * Requirements:
     *
     * - `from` and `to` cannot be the zero address.
     * - `from` must have a balance of at least `value`.
     * - the caller must have allowance for ``from``'s tokens of at least
     * `value`.
     */
    function transferFrom(address from, address to, uint256 value) public virtual returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, value);
        _transfer(from, to, value);
        return true;
    }

    /**
     * @dev Moves a `value` amount of tokens from `from` to `to`.
     *
     * This internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * NOTE: This function is not virtual, {_update} should be overridden instead.
     */
    function _transfer(address from, address to, uint256 value) internal {
        if (from == address(0)) {
            revert ERC20InvalidSender(address(0));
        }
        if (to == address(0)) {
            revert ERC20InvalidReceiver(address(0));
        }
        _update(from, to, value);
    }

    /**
     * @dev Transfers a `value` amount of tokens from `from` to `to`, or alternatively mints (or burns) if `from`
     * (or `to`) is the zero address. All customizations to transfers, mints, and burns should be done by overriding
     * this function.
     *
     * Emits a {Transfer} event.
     */
    function _update(address from, address to, uint256 value) internal virtual {
        if (from == address(0)) {
            // Overflow check required: The rest of the code assumes that totalSupply never overflows
            _totalSupply += value;
        } else {
            uint256 fromBalance = _balances[from];
            if (fromBalance < value) {
                revert ERC20InsufficientBalance(from, fromBalance, value);
            }
            unchecked {
                // Overflow not possible: value <= fromBalance <= totalSupply.
                _balances[from] = fromBalance - value;
            }
        }

        if (to == address(0)) {
            unchecked {
                // Overflow not possible: value <= totalSupply or value <= fromBalance <= totalSupply.
                _totalSupply -= value;
            }
        } else {
            unchecked {
                // Overflow not possible: balance + value is at most totalSupply, which we know fits into a uint256.
                _balances[to] += value;
            }
        }

        emit Transfer(from, to, value);
    }

    /**
     * @dev Creates a `value` amount of tokens and assigns them to `account`, by transferring it from address(0).
     * Relies on the `_update` mechanism
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * NOTE: This function is not virtual, {_update} should be overridden instead.
     */
    function _mint(address account, uint256 value) internal {
        if (account == address(0)) {
            revert ERC20InvalidReceiver(address(0));
        }
        _update(address(0), account, value);
    }

    /**
     * @dev Destroys a `value` amount of tokens from `account`, lowering the total supply.
     * Relies on the `_update` mechanism.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * NOTE: This function is not virtual, {_update} should be overridden instead
     */
    function _burn(address account, uint256 value) internal {
        if (account == address(0)) {
            revert ERC20InvalidSender(address(0));
        }
        _update(account, address(0), value);
    }

    /**
     * @dev Sets `value` 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.
     *
     * Overrides to this logic should be done to the variant with an additional `bool emitEvent` argument.
     */
    function _approve(address owner, address spender, uint256 value) internal {
        _approve(owner, spender, value, true);
    }

    /**
     * @dev Variant of {_approve} with an optional flag to enable or disable the {Approval} event.
     *
     * By default (when calling {_approve}) the flag is set to true. On the other hand, approval changes made by
     * `_spendAllowance` during the `transferFrom` operation set the flag to false. This saves gas by not emitting any
     * `Approval` event during `transferFrom` operations.
     *
     * Anyone who wishes to continue emitting `Approval` events on the`transferFrom` operation can force the flag to
     * true using the following override:
     * ```
     * function _approve(address owner, address spender, uint256 value, bool) internal virtual override {
     *     super._approve(owner, spender, value, true);
     * }
     * ```
     *
     * Requirements are the same as {_approve}.
     */
    function _approve(address owner, address spender, uint256 value, bool emitEvent) internal virtual {
        if (owner == address(0)) {
            revert ERC20InvalidApprover(address(0));
        }
        if (spender == address(0)) {
            revert ERC20InvalidSpender(address(0));
        }
        _allowances[owner][spender] = value;
        if (emitEvent) {
            emit Approval(owner, spender, value);
        }
    }

    /**
     * @dev Updates `owner` s allowance for `spender` based on spent `value`.
     *
     * Does not update the allowance value in case of infinite allowance.
     * Revert if not enough allowance is available.
     *
     * Does not emit an {Approval} event.
     */
    function _spendAllowance(address owner, address spender, uint256 value) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            if (currentAllowance < value) {
                revert ERC20InsufficientAllowance(spender, currentAllowance, value);
            }
            unchecked {
                _approve(owner, spender, currentAllowance - value, false);
            }
        }
    }
}

// File: HappyTrainToken_Ethereum_Pinksale.sol


pragma solidity ^0.8.20;

/*

OFFICIAL WEBSITE: https://happytrain.io/


$$╗  $$╗ $$$$$╗ $$$$$$╗ $$$$$$╗ $$╗   $$╗  $$$$$$$$╗$$$$$$╗  $$$$$╗ $$╗$$╗  $$╗
$$║  $$║$$╔══$$╗$$╔══$$╗$$╔══$$╗╚$$╗ $$╔╝  ╚══$$╔══╝$$╔══$$╗$$╔══$$╗$$║$$$$╗ $$║
$$$$$$$║$$$$$$$║$$$$$$╔╝$$$$$$╔╝ ╚$$$$╔╝      $$║   $$$$$$╔╝$$$$$$$║$$║$$╔$$╗$$║
$$╔══$$║$$╔══$$║$$╔═══╝ $$╔═══╝   ╚$$╔╝       $$║   $$╔══$$╗$$╔══$$║$$║$$║╚$$$$║
$$║  $$║$$║  $$║$$║     $$║        $$║        $$║   $$║  $$║$$║  $$║$$║$$║ ╚$$$║
╚═╝  ╚═╝╚═╝  ╚═╝╚═╝     ╚═╝        ╚═╝        ╚═╝   ╚═╝  ╚═╝╚═╝  ╚═╝╚═╝╚═╝  ╚══╝
*/






contract HappyTrainToken is ERC20, Ownable {
    IUniswapV2Router02 public immutable uniswapV2Router;
    IUniswapV2Pair public immutable uniswapPair;
    address internal uniswapV2Factory;

    uint public minSwapSpreadSum = 10000000000000000000000; // raise it if buyLevel() || swapSplitBurnAddLiq() fails
    uint internal maxHoldSum = 0; // you can changeMaxHoldSum()
    uint public currentBuyFee = 50000;
    uint public currentSellFee = 50000;

    constructor(
        IUniswapV2Router02 _uniswapV2Router,
        uint256 initialSupply,
        uint256 _maxHoldSum,
        address _routerAddress,
        address _teamAddress,
        address _marketingAddress,
        address _wagonbuyerAddress
    ) ERC20("Happy Train", "HTR") Ownable(msg.sender) {
        uniswapV2Router = _uniswapV2Router;
        uniswapV2Factory = _uniswapV2Router.factory();
        _mint(msg.sender, initialSupply);
        maxHoldSum = _maxHoldSum;
        tokenAddress = address(this);
        pairAddress = IUniswapV2Factory(uniswapV2Factory).createPair(
            tokenAddress,
            uniswapV2Router.WETH()
        ); // Get LP address
        uniswapPair = IUniswapV2Pair(pairAddress); // Init IUniswapV2Pair using LP address
        marketingAddress = _marketingAddress;
        teamAddress = _teamAddress;
        wagonbuyerAddress = _wagonbuyerAddress;
        routerAddress = _routerAddress;
    }

    // Addresses
    address public routerAddress;
    address public tokenAddress;
    address public tokenBuyerAddress;
    address public pairAddress;
    address public teamAddress;
    address public marketingAddress;
    address public wagonbuyerAddress;
    address public deadAddress = 0x000000000000000000000000000000000000dEaD;
    mapping(address => bool) internal isExcludedFromFee;

    // Activate ability to recieve ETH from uniswapV2Router when swapping
    receive() external payable {}

    // Override the standard ERC20 transfer function (Used to BUY this token on DEX)
    function transfer(
        address to,
        uint256 amount
    ) public override returns (bool) {
        if (
            to != routerAddress &&
            to != deadAddress &&
            to != pairAddress &&
            !isExcludedFromFee[to]
        ) {
            require(
                IERC20(tokenAddress).balanceOf(to) + amount < maxHoldSum,
                "Address can't hold more"
            );
        }
        // Check if DEX is involved in transfer
        bool isPairAddressInvolved = (to == pairAddress ||
            msg.sender == pairAddress);
        // Take the fees from every swap
        if (
            isPairAddressInvolved &&
            !isExcludedFromFee[msg.sender] &&
            tokenBuyerAddress != to &&
            currentBuyFee > 0
        ) {
            // Calculate fee
            uint totalFee = (amount * currentBuyFee) / 1000000;
            uint amountToBuyer = amount - totalFee;
            // Transfer swap sum except totalFee
            _transfer(msg.sender, to, amountToBuyer);
            _transfer(msg.sender, address(this), totalFee);
        } else {
            // For all other scenarios, simply transfer the amount
            _transfer(msg.sender, to, amount);
        }
        return true;
    }

    // Override the standard ERC20 transferFrom function (Used to SELL this token on DEX)
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public override returns (bool) {
        if (
            recipient != routerAddress &&
            recipient != deadAddress &&
            recipient != pairAddress &&
            !isExcludedFromFee[recipient]
        ) {
            require(
                IERC20(tokenAddress).balanceOf(recipient) + amount < maxHoldSum,
                "Address can't hold more"
            );
        }
        // Check if DEX is involved in transfer
        bool isPairAddressInvolved = (sender == pairAddress ||
            msg.sender == pairAddress ||
            recipient == pairAddress);
        // Take the fees from every swap
        if (
            isPairAddressInvolved &&
            !isExcludedFromFee[sender] &&
            currentSellFee > 0
        ) {
            // Calculate fee
            uint totalFee = (amount * currentSellFee) / 1000000;
            uint amountToBuyer = amount - totalFee;
            // Transfer tokens to recipient and token fee gatherer address
            _transfer(sender, recipient, amountToBuyer);
            _transfer(sender, address(this), totalFee);
            // Check and update allowance
            uint256 currentAllowance = allowance(sender, msg.sender);
            require(
                currentAllowance >= amount,
                "ERC20: transfer amount exceeds allowance"
            );
            _approve(sender, msg.sender, currentAllowance - amount);
        } else {
            // For all other scenarios, simply transfer the amount
            _transfer(sender, recipient, amount);
            // Check and update allowance
            uint256 currentAllowance = allowance(sender, msg.sender);
            require(
                currentAllowance >= amount,
                "ERC20: transfer amount exceeds allowance"
            );
            _approve(sender, msg.sender, currentAllowance - amount);
        }
        return true;
    }

    // swapSplitAndBurn() + addLiquidityFromBalance()
    function swapSplitBurnAddLiq() public onlyOwner {
        swapSplitAndBurn();
        addLiquidityFromBalance();
    }

    // Swap and burn, isolated
    function swapSplitAndBurn() internal {
        uint currentTokenBalance = IERC20(tokenAddress).balanceOf(
            address(this)
        );
        uint tokenBalanceWithoutLiquifyAmount = (currentTokenBalance * 82) /
            100;
        // Swap and spread 82% of gathered token fees, currently held at contract
        if (currentTokenBalance > minSwapSpreadSum) {
            address[] memory path = new address[](2);
            path[0] = address(this);
            path[1] = uniswapV2Router.WETH();
            _approve(
                address(this),
                address(uniswapV2Router),
                currentTokenBalance
            );

            uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
                tokenBalanceWithoutLiquifyAmount,
                0,
                path,
                address(this),
                block.timestamp + 600
            );
            // Send send 20% * 4 ETH to 4 addresses
            uint currentEtherBalance = address(this).balance;
            uint shareTwentyPercent = currentEtherBalance / 5;
            payable(deadAddress).transfer(shareTwentyPercent);
            payable(teamAddress).transfer(shareTwentyPercent);
            payable(marketingAddress).transfer(shareTwentyPercent);
            payable(wagonbuyerAddress).transfer(shareTwentyPercent);
            // ... and ±20% left on address for liquidity providing action
        } else {
            revert(
                "Current token balance is not greater than minSwapSpreadSum"
            );
        }
    }

    // Add liquidity, isolated
    function addLiquidityFromBalance() internal {
        // Approve token transfer max
        uint tokenAmount = IERC20(tokenAddress).balanceOf(address(this));
        require(tokenAmount > 0, "tokens amount must be > 0");
        IERC20(tokenAddress).approve(address(uniswapV2Router), tokenAmount);

        // Get the sum of tokens to add
        uint256[] memory getTokenPriceArray = getTokenPrice(
            address(this).balance
        );
        uint256 tokensToAdd = getTokenPriceArray[1];

        // Add the liquidity
        IUniswapV2Router02(uniswapV2Router).addLiquidityETH{
            value: address(this).balance
        }(
            address(IERC20(tokenAddress)),
            tokensToAdd,
            0,
            0,
            msg.sender,
            block.timestamp + 600
        );
    }

    // Read current token price
    function getTokenPrice(
        uint256 amountIn
    ) public view returns (uint256[] memory tokensPerETH) {
        address[] memory path = new address[](2);
        path[0] = uniswapV2Router.WETH();
        path[1] = address(this);
        tokensPerETH = uniswapV2Router.getAmountsOut(amountIn, path);
    }

    // Raise minimum swap spread sum (to auto swap holded fee tokens), basic is 10k
    function changeMinSwapSpreadSum(uint newSumUint256) public onlyOwner {
        minSwapSpreadSum = newSumUint256;
    }

    // Read minimum swap spread sum
    function getMinSwapSpreadSum() external view returns (uint) {
        return minSwapSpreadSum;
    }

    // Read token contract ERC20 balance
    function getTokenContractBalance() external view returns (uint) {
        uint tokenAmount = IERC20(tokenAddress).balanceOf(address(this));
        return tokenAmount;
    }

    // Add more addresses to swap-with-no-fee list
    function excludeFromSwapFee(
        address[] calldata addressesToAdd
    ) public onlyOwner {
        for (uint256 i = 0; i < addressesToAdd.length; i++) {
            isExcludedFromFee[addressesToAdd[i]] = true;
        }
    }

    // Check if address is in swap-with-no-fee list
    function checkisExcludedFromFee(
        address _address
    ) public view returns (bool) {
        return isExcludedFromFee[_address];
    }

    // Change wagonbuyerAddress or tokenBuyerAddress
    function changeWagonbuyerAddress(address _address) public onlyOwner {
        wagonbuyerAddress = _address;
    }

    function changeTokenBuyerAddress(address _address) public onlyOwner {
        tokenBuyerAddress = _address;
    }

    // Change max holding sum to any preferred
    function changeMaxHoldSum(uint _newMaxHoldSum) public onlyOwner {
        require(_newMaxHoldSum >= (totalSupply() / 1000), "Must be at least 0.1%");
        maxHoldSum = _newMaxHoldSum;
    }

    // Withdraw contract ether balance
    function withdrawal(address receiver) public onlyOwner {
        payable(receiver).transfer(address(this).balance);
    }

    // Transfer or burn contract token balance
    function burnContractTokenBalance(address receiver) public onlyOwner {
        uint currentTokenBalance = IERC20(tokenAddress).balanceOf(tokenAddress);
        _transfer(address(this), receiver, currentTokenBalance);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"contract IUniswapV2Router02","name":"_uniswapV2Router","type":"address"},{"internalType":"uint256","name":"initialSupply","type":"uint256"},{"internalType":"uint256","name":"_maxHoldSum","type":"uint256"},{"internalType":"address","name":"_routerAddress","type":"address"},{"internalType":"address","name":"_teamAddress","type":"address"},{"internalType":"address","name":"_marketingAddress","type":"address"},{"internalType":"address","name":"_wagonbuyerAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"allowance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientAllowance","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientBalance","type":"error"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"name":"ERC20InvalidApprover","type":"error"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"ERC20InvalidReceiver","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"ERC20InvalidSender","type":"error"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"ERC20InvalidSpender","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"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":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"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":"value","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":"receiver","type":"address"}],"name":"burnContractTokenBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newMaxHoldSum","type":"uint256"}],"name":"changeMaxHoldSum","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newSumUint256","type":"uint256"}],"name":"changeMinSwapSpreadSum","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"changeTokenBuyerAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"changeWagonbuyerAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"checkisExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentBuyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentSellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addressesToAdd","type":"address[]"}],"name":"excludeFromSwapFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getMinSwapSpreadSum","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTokenContractBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"}],"name":"getTokenPrice","outputs":[{"internalType":"uint256[]","name":"tokensPerETH","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minSwapSpreadSum","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pairAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"routerAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapSplitBurnAddLiq","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"teamAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenBuyerAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapPair","outputs":[{"internalType":"contract IUniswapV2Pair","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"wagonbuyerAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"withdrawal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c060405269021e19e0c9bab24000006007555f60085561c35060095561c350600a5561dead60125f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555034801562000070575f80fd5b50604051620047f5380380620047f5833981810160405281019062000096919062000a0e565b336040518060400160405280600b81526020017f486170707920547261696e0000000000000000000000000000000000000000008152506040518060400160405280600381526020017f4854520000000000000000000000000000000000000000000000000000000000815250816003908162000114919062000d17565b50806004908162000126919062000d17565b5050505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036200019c575f6040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040162000193919062000e0c565b60405180910390fd5b620001ad81620005be60201b60201c565b508673ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200022c573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000252919062000e27565b60065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620002a333876200068160201b60201c565b8460088190555030600c5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c9c65396600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660805173ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000395573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620003bb919062000e27565b6040518363ffffffff1660e01b8152600401620003da92919062000e57565b6020604051808303815f875af1158015620003f7573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200041d919062000e27565b600e5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600e5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250508160105f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082600f5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060115f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083600b5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050505050505062000f50565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620006f4575f6040517fec442f05000000000000000000000000000000000000000000000000000000008152600401620006eb919062000e0c565b60405180910390fd5b620007075f83836200070b60201b60201c565b5050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036200075f578060025f82825462000752919062000eaf565b9250508190555062000830565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015620007eb578381836040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401620007e29392919062000efa565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000879578060025f8282540392505081905550620008c3565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000922919062000f35565b60405180910390a3505050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6200095e8262000933565b9050919050565b5f620009718262000952565b9050919050565b620009838162000965565b81146200098e575f80fd5b50565b5f81519050620009a18162000978565b92915050565b5f819050919050565b620009bb81620009a7565b8114620009c6575f80fd5b50565b5f81519050620009d981620009b0565b92915050565b620009ea8162000952565b8114620009f5575f80fd5b50565b5f8151905062000a0881620009df565b92915050565b5f805f805f805f60e0888a03121562000a2c5762000a2b6200092f565b5b5f62000a3b8a828b0162000991565b975050602062000a4e8a828b01620009c9565b965050604062000a618a828b01620009c9565b955050606062000a748a828b01620009f8565b945050608062000a878a828b01620009f8565b93505060a062000a9a8a828b01620009f8565b92505060c062000aad8a828b01620009f8565b91505092959891949750929550565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168062000b3857607f821691505b60208210810362000b4e5762000b4d62000af3565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830262000bb27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000b75565b62000bbe868362000b75565b95508019841693508086168417925050509392505050565b5f819050919050565b5f62000bff62000bf962000bf384620009a7565b62000bd6565b620009a7565b9050919050565b5f819050919050565b62000c1a8362000bdf565b62000c3262000c298262000c06565b84845462000b81565b825550505050565b5f90565b62000c4862000c3a565b62000c5581848462000c0f565b505050565b5b8181101562000c7c5762000c705f8262000c3e565b60018101905062000c5b565b5050565b601f82111562000ccb5762000c958162000b54565b62000ca08462000b66565b8101602085101562000cb0578190505b62000cc862000cbf8562000b66565b83018262000c5a565b50505b505050565b5f82821c905092915050565b5f62000ced5f198460080262000cd0565b1980831691505092915050565b5f62000d07838362000cdc565b9150826002028217905092915050565b62000d228262000abc565b67ffffffffffffffff81111562000d3e5762000d3d62000ac6565b5b62000d4a825462000b20565b62000d5782828562000c80565b5f60209050601f83116001811462000d8d575f841562000d78578287015190505b62000d84858262000cfa565b86555062000df3565b601f19841662000d9d8662000b54565b5f5b8281101562000dc65784890151825560018201915060208501945060208101905062000d9f565b8683101562000de6578489015162000de2601f89168262000cdc565b8355505b6001600288020188555050505b505050505050565b62000e068162000952565b82525050565b5f60208201905062000e215f83018462000dfb565b92915050565b5f6020828403121562000e3f5762000e3e6200092f565b5b5f62000e4e84828501620009f8565b91505092915050565b5f60408201905062000e6c5f83018562000dfb565b62000e7b602083018462000dfb565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f62000ebb82620009a7565b915062000ec883620009a7565b925082820190508082111562000ee35762000ee262000e82565b5b92915050565b62000ef481620009a7565b82525050565b5f60608201905062000f0f5f83018662000dfb565b62000f1e602083018562000ee9565b62000f2d604083018462000ee9565b949350505050565b5f60208201905062000f4a5f83018462000ee9565b92915050565b60805160a05161385262000fa35f395f61196701525f818161093a01528181611799015281816118c201528181611f8b0152818161206a015281816120910152818161243601526124e101526138525ff3fe60806040526004361061021d575f3560e01c80637e67c1f611610122578063a9059cbb116100aa578063d95cd3921161006e578063d95cd392146107a2578063dd62ed3e146107ca578063de7dad9914610806578063e4232bfb14610830578063f2fde38b1461085857610224565b8063a9059cbb1461069a578063c253cb66146106d6578063c457fb3714610712578063c816841b1461074e578063d7beceb61461077857610224565b806396131049116100f157806396131049146105cc57806396fe40bd146105f45780639d76ea581461061c578063a5ece94114610646578063a8b089821461067057610224565b80637e67c1f6146105385780638d22fefa1461054e5780638da5cb5b1461057857806395d89b41146105a257610224565b80632c2827de116101a55780633aaef985116101745780633aaef9851461046c5780635782776e146104945780636fda99bb146104bc57806370a08231146104e6578063715018a61461052257610224565b80632c2827de146103c4578063313ce567146103ee5780633268cc56146104185780633a2e06c91461044257610224565b806318160ddd116101ec57806318160ddd146102e25780631c75f0851461030c57806323b872dd1461033657806327c8f835146103725780632c08684b1461039c57610224565b806306fdde0314610228578063095ea7b31461025257806314905c401461028e5780631694505e146102b857610224565b3661022457005b5f80fd5b348015610233575f80fd5b5061023c610880565b6040516102499190612a2c565b60405180910390f35b34801561025d575f80fd5b5061027860048036038101906102739190612aea565b610910565b6040516102859190612b42565b60405180910390f35b348015610299575f80fd5b506102a2610932565b6040516102af9190612b6a565b60405180910390f35b3480156102c3575f80fd5b506102cc610938565b6040516102d99190612bde565b60405180910390f35b3480156102ed575f80fd5b506102f661095c565b6040516103039190612b6a565b60405180910390f35b348015610317575f80fd5b50610320610965565b60405161032d9190612c06565b60405180910390f35b348015610341575f80fd5b5061035c60048036038101906103579190612c1f565b61098a565b6040516103699190612b42565b60405180910390f35b34801561037d575f80fd5b50610386610e66565b6040516103939190612c06565b60405180910390f35b3480156103a7575f80fd5b506103c260048036038101906103bd9190612cd0565b610e8b565b005b3480156103cf575f80fd5b506103d8610f34565b6040516103e59190612c06565b60405180910390f35b3480156103f9575f80fd5b50610402610f59565b60405161040f9190612d36565b60405180910390f35b348015610423575f80fd5b5061042c610f61565b6040516104399190612c06565b60405180910390f35b34801561044d575f80fd5b50610456610f86565b6040516104639190612b6a565b60405180910390f35b348015610477575f80fd5b50610492600480360381019061048d9190612d4f565b610f8f565b005b34801561049f575f80fd5b506104ba60048036038101906104b59190612d7a565b610fda565b005b3480156104c7575f80fd5b506104d0610fec565b6040516104dd9190612b6a565b60405180910390f35b3480156104f1575f80fd5b5061050c60048036038101906105079190612d4f565b610ff2565b6040516105199190612b6a565b60405180910390f35b34801561052d575f80fd5b50610536611037565b005b348015610543575f80fd5b5061054c61104a565b005b348015610559575f80fd5b50610562611064565b60405161056f9190612b6a565b60405180910390f35b348015610583575f80fd5b5061058c611108565b6040516105999190612c06565b60405180910390f35b3480156105ad575f80fd5b506105b6611130565b6040516105c39190612a2c565b60405180910390f35b3480156105d7575f80fd5b506105f260048036038101906105ed9190612d4f565b6111c0565b005b3480156105ff575f80fd5b5061061a60048036038101906106159190612d7a565b61120f565b005b348015610627575f80fd5b50610630611278565b60405161063d9190612c06565b60405180910390f35b348015610651575f80fd5b5061065a61129d565b6040516106679190612c06565b60405180910390f35b34801561067b575f80fd5b506106846112c2565b6040516106919190612c06565b60405180910390f35b3480156106a5575f80fd5b506106c060048036038101906106bb9190612aea565b6112e7565b6040516106cd9190612b42565b60405180910390f35b3480156106e1575f80fd5b506106fc60048036038101906106f79190612d4f565b6116f6565b6040516107099190612b42565b60405180910390f35b34801561071d575f80fd5b5061073860048036038101906107339190612d7a565b611748565b6040516107459190612e5c565b60405180910390f35b348015610759575f80fd5b50610762611965565b60405161076f9190612e9c565b60405180910390f35b348015610783575f80fd5b5061078c611989565b6040516107999190612b6a565b60405180910390f35b3480156107ad575f80fd5b506107c860048036038101906107c39190612d4f565b61198f565b005b3480156107d5575f80fd5b506107f060048036038101906107eb9190612eb5565b6119da565b6040516107fd9190612b6a565b60405180910390f35b348015610811575f80fd5b5061081a611a5c565b6040516108279190612c06565b60405180910390f35b34801561083b575f80fd5b5061085660048036038101906108519190612d4f565b611a81565b005b348015610863575f80fd5b5061087e60048036038101906108799190612d4f565b611b55565b005b60606003805461088f90612f20565b80601f01602080910402602001604051908101604052809291908181526020018280546108bb90612f20565b80156109065780601f106108dd57610100808354040283529160200191610906565b820191905f5260205f20905b8154815290600101906020018083116108e957829003601f168201915b5050505050905090565b5f8061091a611bd9565b9050610927818585611be0565b600191505092915050565b600a5481565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f600254905090565b600f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015610a35575060125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b8015610a8e5750600e5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b8015610ae1575060135f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15610bce5760085482600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231866040518263ffffffff1660e01b8152600401610b449190612c06565b602060405180830381865afa158015610b5f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b839190612f64565b610b8d9190612fbc565b10610bcd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc490613039565b60405180910390fd5b5b5f600e5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610c765750600e5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b80610ccd5750600e5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b9050808015610d23575060135f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015610d3057505f600a54115b15610de7575f620f4240600a5485610d489190613057565b610d5291906130c5565b90505f8185610d6191906130f5565b9050610d6e878783611bf2565b610d79873084611bf2565b5f610d8488336119da565b905085811015610dc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc090613198565b60405180910390fd5b610ddf88338884610dda91906130f5565b611be0565b505050610e5a565b610df2858585611bf2565b5f610dfd86336119da565b905083811015610e42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3990613198565b60405180910390fd5b610e5886338684610e5391906130f5565b611be0565b505b60019150509392505050565b60125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610e93611ce2565b5f5b82829050811015610f2f57600160135f858585818110610eb857610eb76131b6565b5b9050602002016020810190610ecd9190612d4f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508080610f27906131e3565b915050610e95565b505050565b600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f6012905090565b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f600754905090565b610f97611ce2565b80600d5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610fe2611ce2565b8060078190555050565b60075481565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b61103f611ce2565b6110485f611d69565b565b611052611ce2565b61105a611e2c565b611062612319565b565b5f80600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016110c09190612c06565b602060405180830381865afa1580156110db573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110ff9190612f64565b90508091505090565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461113f90612f20565b80601f016020809104026020016040519081016040528092919081815260200182805461116b90612f20565b80156111b65780601f1061118d576101008083540402835291602001916111b6565b820191905f5260205f20905b81548152906001019060200180831161119957829003601f168201915b5050505050905090565b6111c8611ce2565b8073ffffffffffffffffffffffffffffffffffffffff166108fc4790811502906040515f60405180830381858888f1935050505015801561120b573d5f803e3d5ffd5b5050565b611217611ce2565b6103e861122261095c565b61122c91906130c5565b81101561126e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126590613274565b60405180910390fd5b8060088190555050565b600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60105f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611392575060125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156113eb5750600e5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b801561143e575060135f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561152b5760085482600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231866040518263ffffffff1660e01b81526004016114a19190612c06565b602060405180830381865afa1580156114bc573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114e09190612f64565b6114ea9190612fbc565b1061152a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152190613039565b60405180910390fd5b5b5f600e5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806115d35750600e5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b9050808015611629575060135f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b801561168257508373ffffffffffffffffffffffffffffffffffffffff16600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b801561168f57505f600954115b156116df575f620f4240600954856116a79190613057565b6116b191906130c5565b90505f81856116c091906130f5565b90506116cd338783611bf2565b6116d8333084611bf2565b50506116eb565b6116ea338585611bf2565b5b600191505092915050565b5f60135f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b60605f600267ffffffffffffffff81111561176657611765613292565b5b6040519080825280602002602001820160405280156117945781602001602082028036833780820191505090505b5090507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611800573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061182491906132d3565b815f81518110611837576118366131b6565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250503081600181518110611886576118856131b6565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d06ca61f84836040518363ffffffff1660e01b815260040161191b9291906133b5565b5f60405180830381865afa158015611935573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f8201168201806040525081019061195d91906134ee565b915050919050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60095481565b611997611ce2565b8060115f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b60115f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611a89611ce2565b5f600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b8152600401611b059190612c06565b602060405180830381865afa158015611b20573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b449190612f64565b9050611b51308383611bf2565b5050565b611b5d611ce2565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611bcd575f6040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401611bc49190612c06565b60405180910390fd5b611bd681611d69565b50565b5f33905090565b611bed83838360016125ba565b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611c62575f6040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600401611c599190612c06565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611cd2575f6040517fec442f05000000000000000000000000000000000000000000000000000000008152600401611cc99190612c06565b60405180910390fd5b611cdd838383612789565b505050565b611cea611bd9565b73ffffffffffffffffffffffffffffffffffffffff16611d08611108565b73ffffffffffffffffffffffffffffffffffffffff1614611d6757611d2b611bd9565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401611d5e9190612c06565b60405180910390fd5b565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611e879190612c06565b602060405180830381865afa158015611ea2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ec69190612f64565b90505f6064605283611ed89190613057565b611ee291906130c5565b90506007548211156122da575f600267ffffffffffffffff811115611f0a57611f09613292565b5b604051908082528060200260200182016040528015611f385781602001602082028036833780820191505090505b50905030815f81518110611f4f57611f4e6131b6565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ff2573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061201691906132d3565b8160018151811061202a576120296131b6565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061208f307f000000000000000000000000000000000000000000000000000000000000000085611be0565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430610258426120dd9190612fbc565b6040518663ffffffff1660e01b81526004016120fd95949392919061356e565b5f604051808303815f87803b158015612114575f80fd5b505af1158015612126573d5f803e3d5ffd5b505050505f4790505f60058261213c91906130c5565b905060125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f193505050501580156121a2573d5f803e3d5ffd5b50600f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f19350505050158015612207573d5f803e3d5ffd5b5060105f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f1935050505015801561226c573d5f803e3d5ffd5b5060115f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f193505050501580156122d1573d5f803e3d5ffd5b50505050612315565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230c90613636565b60405180910390fd5b5050565b5f600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016123749190612c06565b602060405180830381865afa15801561238f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123b39190612f64565b90505f81116123f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123ee9061369e565b60405180910390fd5b600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b37f0000000000000000000000000000000000000000000000000000000000000000836040518363ffffffff1660e01b81526004016124739291906136bc565b6020604051808303815f875af115801561248f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124b3919061370d565b505f6124be47611748565b90505f816001815181106124d5576124d46131b6565b5b602002602001015190507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d71947600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16845f8033610258426125509190612fbc565b6040518863ffffffff1660e01b815260040161257196959493929190613738565b60606040518083038185885af115801561258d573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906125b29190613797565b505050505050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361262a575f6040517fe602df050000000000000000000000000000000000000000000000000000000081526004016126219190612c06565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361269a575f6040517f94280d620000000000000000000000000000000000000000000000000000000081526004016126919190612c06565b60405180910390fd5b8160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508015612783578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161277a9190612b6a565b60405180910390a35b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036127d9578060025f8282546127cd9190612fbc565b925050819055506128a7565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015612862578381836040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401612859939291906137e7565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036128ee578060025f8282540392505081905550612938565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516129959190612b6a565b60405180910390a3505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b838110156129d95780820151818401526020810190506129be565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6129fe826129a2565b612a0881856129ac565b9350612a188185602086016129bc565b612a21816129e4565b840191505092915050565b5f6020820190508181035f830152612a4481846129f4565b905092915050565b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612a8682612a5d565b9050919050565b612a9681612a7c565b8114612aa0575f80fd5b50565b5f81359050612ab181612a8d565b92915050565b5f819050919050565b612ac981612ab7565b8114612ad3575f80fd5b50565b5f81359050612ae481612ac0565b92915050565b5f8060408385031215612b0057612aff612a55565b5b5f612b0d85828601612aa3565b9250506020612b1e85828601612ad6565b9150509250929050565b5f8115159050919050565b612b3c81612b28565b82525050565b5f602082019050612b555f830184612b33565b92915050565b612b6481612ab7565b82525050565b5f602082019050612b7d5f830184612b5b565b92915050565b5f819050919050565b5f612ba6612ba1612b9c84612a5d565b612b83565b612a5d565b9050919050565b5f612bb782612b8c565b9050919050565b5f612bc882612bad565b9050919050565b612bd881612bbe565b82525050565b5f602082019050612bf15f830184612bcf565b92915050565b612c0081612a7c565b82525050565b5f602082019050612c195f830184612bf7565b92915050565b5f805f60608486031215612c3657612c35612a55565b5b5f612c4386828701612aa3565b9350506020612c5486828701612aa3565b9250506040612c6586828701612ad6565b9150509250925092565b5f80fd5b5f80fd5b5f80fd5b5f8083601f840112612c9057612c8f612c6f565b5b8235905067ffffffffffffffff811115612cad57612cac612c73565b5b602083019150836020820283011115612cc957612cc8612c77565b5b9250929050565b5f8060208385031215612ce657612ce5612a55565b5b5f83013567ffffffffffffffff811115612d0357612d02612a59565b5b612d0f85828601612c7b565b92509250509250929050565b5f60ff82169050919050565b612d3081612d1b565b82525050565b5f602082019050612d495f830184612d27565b92915050565b5f60208284031215612d6457612d63612a55565b5b5f612d7184828501612aa3565b91505092915050565b5f60208284031215612d8f57612d8e612a55565b5b5f612d9c84828501612ad6565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b612dd781612ab7565b82525050565b5f612de88383612dce565b60208301905092915050565b5f602082019050919050565b5f612e0a82612da5565b612e148185612daf565b9350612e1f83612dbf565b805f5b83811015612e4f578151612e368882612ddd565b9750612e4183612df4565b925050600181019050612e22565b5085935050505092915050565b5f6020820190508181035f830152612e748184612e00565b905092915050565b5f612e8682612bad565b9050919050565b612e9681612e7c565b82525050565b5f602082019050612eaf5f830184612e8d565b92915050565b5f8060408385031215612ecb57612eca612a55565b5b5f612ed885828601612aa3565b9250506020612ee985828601612aa3565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680612f3757607f821691505b602082108103612f4a57612f49612ef3565b5b50919050565b5f81519050612f5e81612ac0565b92915050565b5f60208284031215612f7957612f78612a55565b5b5f612f8684828501612f50565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f612fc682612ab7565b9150612fd183612ab7565b9250828201905080821115612fe957612fe8612f8f565b5b92915050565b7f416464726573732063616e277420686f6c64206d6f72650000000000000000005f82015250565b5f6130236017836129ac565b915061302e82612fef565b602082019050919050565b5f6020820190508181035f83015261305081613017565b9050919050565b5f61306182612ab7565b915061306c83612ab7565b925082820261307a81612ab7565b9150828204841483151761309157613090612f8f565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6130cf82612ab7565b91506130da83612ab7565b9250826130ea576130e9613098565b5b828204905092915050565b5f6130ff82612ab7565b915061310a83612ab7565b925082820390508181111561312257613121612f8f565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f6131826028836129ac565b915061318d82613128565b604082019050919050565b5f6020820190508181035f8301526131af81613176565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f6131ed82612ab7565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361321f5761321e612f8f565b5b600182019050919050565b7f4d757374206265206174206c6561737420302e312500000000000000000000005f82015250565b5f61325e6015836129ac565b91506132698261322a565b602082019050919050565b5f6020820190508181035f83015261328b81613252565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f815190506132cd81612a8d565b92915050565b5f602082840312156132e8576132e7612a55565b5b5f6132f5848285016132bf565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61333081612a7c565b82525050565b5f6133418383613327565b60208301905092915050565b5f602082019050919050565b5f613363826132fe565b61336d8185613308565b935061337883613318565b805f5b838110156133a857815161338f8882613336565b975061339a8361334d565b92505060018101905061337b565b5085935050505092915050565b5f6040820190506133c85f830185612b5b565b81810360208301526133da8184613359565b90509392505050565b6133ec826129e4565b810181811067ffffffffffffffff8211171561340b5761340a613292565b5b80604052505050565b5f61341d612a4c565b905061342982826133e3565b919050565b5f67ffffffffffffffff82111561344857613447613292565b5b602082029050602081019050919050565b5f61346b6134668461342e565b613414565b9050808382526020820190506020840283018581111561348e5761348d612c77565b5b835b818110156134b757806134a38882612f50565b845260208401935050602081019050613490565b5050509392505050565b5f82601f8301126134d5576134d4612c6f565b5b81516134e5848260208601613459565b91505092915050565b5f6020828403121561350357613502612a55565b5b5f82015167ffffffffffffffff8111156135205761351f612a59565b5b61352c848285016134c1565b91505092915050565b5f819050919050565b5f61355861355361354e84613535565b612b83565b612ab7565b9050919050565b6135688161353e565b82525050565b5f60a0820190506135815f830188612b5b565b61358e602083018761355f565b81810360408301526135a08186613359565b90506135af6060830185612bf7565b6135bc6080830184612b5b565b9695505050505050565b7f43757272656e7420746f6b656e2062616c616e6365206973206e6f74206772655f8201527f61746572207468616e206d696e5377617053707265616453756d000000000000602082015250565b5f613620603a836129ac565b915061362b826135c6565b604082019050919050565b5f6020820190508181035f83015261364d81613614565b9050919050565b7f746f6b656e7320616d6f756e74206d757374206265203e2030000000000000005f82015250565b5f6136886019836129ac565b915061369382613654565b602082019050919050565b5f6020820190508181035f8301526136b58161367c565b9050919050565b5f6040820190506136cf5f830185612bf7565b6136dc6020830184612b5b565b9392505050565b6136ec81612b28565b81146136f6575f80fd5b50565b5f81519050613707816136e3565b92915050565b5f6020828403121561372257613721612a55565b5b5f61372f848285016136f9565b91505092915050565b5f60c08201905061374b5f830189612bf7565b6137586020830188612b5b565b613765604083018761355f565b613772606083018661355f565b61377f6080830185612bf7565b61378c60a0830184612b5b565b979650505050505050565b5f805f606084860312156137ae576137ad612a55565b5b5f6137bb86828701612f50565b93505060206137cc86828701612f50565b92505060406137dd86828701612f50565b9150509250925092565b5f6060820190506137fa5f830186612bf7565b6138076020830185612b5b565b6138146040830184612b5b565b94935050505056fea2646970667358221220cf32e1fed6e85048d09360d7c5f13a0dd1bb8a868b810fa8c18d8dcde8662d8d64736f6c634300081400330000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d0000000000000000000000000000000000000001431e0fae6d7217caa00000000000000000000000000000000000000000000001431e0fae6d7217caa00000000000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d0000000000000000000000005877a4da2aff455362a012b9887a263f8a026fa30000000000000000000000006c048aff6c80f9b69d3ca0fc17d3422a8cf0e1d50000000000000000000000007f70fb57af2dc84fba9e105ed5a2f57cd6ac2146

Deployed Bytecode

0x60806040526004361061021d575f3560e01c80637e67c1f611610122578063a9059cbb116100aa578063d95cd3921161006e578063d95cd392146107a2578063dd62ed3e146107ca578063de7dad9914610806578063e4232bfb14610830578063f2fde38b1461085857610224565b8063a9059cbb1461069a578063c253cb66146106d6578063c457fb3714610712578063c816841b1461074e578063d7beceb61461077857610224565b806396131049116100f157806396131049146105cc57806396fe40bd146105f45780639d76ea581461061c578063a5ece94114610646578063a8b089821461067057610224565b80637e67c1f6146105385780638d22fefa1461054e5780638da5cb5b1461057857806395d89b41146105a257610224565b80632c2827de116101a55780633aaef985116101745780633aaef9851461046c5780635782776e146104945780636fda99bb146104bc57806370a08231146104e6578063715018a61461052257610224565b80632c2827de146103c4578063313ce567146103ee5780633268cc56146104185780633a2e06c91461044257610224565b806318160ddd116101ec57806318160ddd146102e25780631c75f0851461030c57806323b872dd1461033657806327c8f835146103725780632c08684b1461039c57610224565b806306fdde0314610228578063095ea7b31461025257806314905c401461028e5780631694505e146102b857610224565b3661022457005b5f80fd5b348015610233575f80fd5b5061023c610880565b6040516102499190612a2c565b60405180910390f35b34801561025d575f80fd5b5061027860048036038101906102739190612aea565b610910565b6040516102859190612b42565b60405180910390f35b348015610299575f80fd5b506102a2610932565b6040516102af9190612b6a565b60405180910390f35b3480156102c3575f80fd5b506102cc610938565b6040516102d99190612bde565b60405180910390f35b3480156102ed575f80fd5b506102f661095c565b6040516103039190612b6a565b60405180910390f35b348015610317575f80fd5b50610320610965565b60405161032d9190612c06565b60405180910390f35b348015610341575f80fd5b5061035c60048036038101906103579190612c1f565b61098a565b6040516103699190612b42565b60405180910390f35b34801561037d575f80fd5b50610386610e66565b6040516103939190612c06565b60405180910390f35b3480156103a7575f80fd5b506103c260048036038101906103bd9190612cd0565b610e8b565b005b3480156103cf575f80fd5b506103d8610f34565b6040516103e59190612c06565b60405180910390f35b3480156103f9575f80fd5b50610402610f59565b60405161040f9190612d36565b60405180910390f35b348015610423575f80fd5b5061042c610f61565b6040516104399190612c06565b60405180910390f35b34801561044d575f80fd5b50610456610f86565b6040516104639190612b6a565b60405180910390f35b348015610477575f80fd5b50610492600480360381019061048d9190612d4f565b610f8f565b005b34801561049f575f80fd5b506104ba60048036038101906104b59190612d7a565b610fda565b005b3480156104c7575f80fd5b506104d0610fec565b6040516104dd9190612b6a565b60405180910390f35b3480156104f1575f80fd5b5061050c60048036038101906105079190612d4f565b610ff2565b6040516105199190612b6a565b60405180910390f35b34801561052d575f80fd5b50610536611037565b005b348015610543575f80fd5b5061054c61104a565b005b348015610559575f80fd5b50610562611064565b60405161056f9190612b6a565b60405180910390f35b348015610583575f80fd5b5061058c611108565b6040516105999190612c06565b60405180910390f35b3480156105ad575f80fd5b506105b6611130565b6040516105c39190612a2c565b60405180910390f35b3480156105d7575f80fd5b506105f260048036038101906105ed9190612d4f565b6111c0565b005b3480156105ff575f80fd5b5061061a60048036038101906106159190612d7a565b61120f565b005b348015610627575f80fd5b50610630611278565b60405161063d9190612c06565b60405180910390f35b348015610651575f80fd5b5061065a61129d565b6040516106679190612c06565b60405180910390f35b34801561067b575f80fd5b506106846112c2565b6040516106919190612c06565b60405180910390f35b3480156106a5575f80fd5b506106c060048036038101906106bb9190612aea565b6112e7565b6040516106cd9190612b42565b60405180910390f35b3480156106e1575f80fd5b506106fc60048036038101906106f79190612d4f565b6116f6565b6040516107099190612b42565b60405180910390f35b34801561071d575f80fd5b5061073860048036038101906107339190612d7a565b611748565b6040516107459190612e5c565b60405180910390f35b348015610759575f80fd5b50610762611965565b60405161076f9190612e9c565b60405180910390f35b348015610783575f80fd5b5061078c611989565b6040516107999190612b6a565b60405180910390f35b3480156107ad575f80fd5b506107c860048036038101906107c39190612d4f565b61198f565b005b3480156107d5575f80fd5b506107f060048036038101906107eb9190612eb5565b6119da565b6040516107fd9190612b6a565b60405180910390f35b348015610811575f80fd5b5061081a611a5c565b6040516108279190612c06565b60405180910390f35b34801561083b575f80fd5b5061085660048036038101906108519190612d4f565b611a81565b005b348015610863575f80fd5b5061087e60048036038101906108799190612d4f565b611b55565b005b60606003805461088f90612f20565b80601f01602080910402602001604051908101604052809291908181526020018280546108bb90612f20565b80156109065780601f106108dd57610100808354040283529160200191610906565b820191905f5260205f20905b8154815290600101906020018083116108e957829003601f168201915b5050505050905090565b5f8061091a611bd9565b9050610927818585611be0565b600191505092915050565b600a5481565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b5f600254905090565b600f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015610a35575060125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b8015610a8e5750600e5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b8015610ae1575060135f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15610bce5760085482600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231866040518263ffffffff1660e01b8152600401610b449190612c06565b602060405180830381865afa158015610b5f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b839190612f64565b610b8d9190612fbc565b10610bcd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc490613039565b60405180910390fd5b5b5f600e5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610c765750600e5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b80610ccd5750600e5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b9050808015610d23575060135f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015610d3057505f600a54115b15610de7575f620f4240600a5485610d489190613057565b610d5291906130c5565b90505f8185610d6191906130f5565b9050610d6e878783611bf2565b610d79873084611bf2565b5f610d8488336119da565b905085811015610dc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc090613198565b60405180910390fd5b610ddf88338884610dda91906130f5565b611be0565b505050610e5a565b610df2858585611bf2565b5f610dfd86336119da565b905083811015610e42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3990613198565b60405180910390fd5b610e5886338684610e5391906130f5565b611be0565b505b60019150509392505050565b60125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610e93611ce2565b5f5b82829050811015610f2f57600160135f858585818110610eb857610eb76131b6565b5b9050602002016020810190610ecd9190612d4f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508080610f27906131e3565b915050610e95565b505050565b600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f6012905090565b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f600754905090565b610f97611ce2565b80600d5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610fe2611ce2565b8060078190555050565b60075481565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b61103f611ce2565b6110485f611d69565b565b611052611ce2565b61105a611e2c565b611062612319565b565b5f80600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016110c09190612c06565b602060405180830381865afa1580156110db573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110ff9190612f64565b90508091505090565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461113f90612f20565b80601f016020809104026020016040519081016040528092919081815260200182805461116b90612f20565b80156111b65780601f1061118d576101008083540402835291602001916111b6565b820191905f5260205f20905b81548152906001019060200180831161119957829003601f168201915b5050505050905090565b6111c8611ce2565b8073ffffffffffffffffffffffffffffffffffffffff166108fc4790811502906040515f60405180830381858888f1935050505015801561120b573d5f803e3d5ffd5b5050565b611217611ce2565b6103e861122261095c565b61122c91906130c5565b81101561126e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126590613274565b60405180910390fd5b8060088190555050565b600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60105f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611392575060125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156113eb5750600e5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b801561143e575060135f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561152b5760085482600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231866040518263ffffffff1660e01b81526004016114a19190612c06565b602060405180830381865afa1580156114bc573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114e09190612f64565b6114ea9190612fbc565b1061152a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152190613039565b60405180910390fd5b5b5f600e5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806115d35750600e5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b9050808015611629575060135f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b801561168257508373ffffffffffffffffffffffffffffffffffffffff16600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b801561168f57505f600954115b156116df575f620f4240600954856116a79190613057565b6116b191906130c5565b90505f81856116c091906130f5565b90506116cd338783611bf2565b6116d8333084611bf2565b50506116eb565b6116ea338585611bf2565b5b600191505092915050565b5f60135f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b60605f600267ffffffffffffffff81111561176657611765613292565b5b6040519080825280602002602001820160405280156117945781602001602082028036833780820191505090505b5090507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611800573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061182491906132d3565b815f81518110611837576118366131b6565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250503081600181518110611886576118856131b6565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663d06ca61f84836040518363ffffffff1660e01b815260040161191b9291906133b5565b5f60405180830381865afa158015611935573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f8201168201806040525081019061195d91906134ee565b915050919050565b7f000000000000000000000000ce31bef3a00cf3b841c18ca52be7eba5dc67728e81565b60095481565b611997611ce2565b8060115f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b60115f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611a89611ce2565b5f600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b8152600401611b059190612c06565b602060405180830381865afa158015611b20573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b449190612f64565b9050611b51308383611bf2565b5050565b611b5d611ce2565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611bcd575f6040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401611bc49190612c06565b60405180910390fd5b611bd681611d69565b50565b5f33905090565b611bed83838360016125ba565b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611c62575f6040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600401611c599190612c06565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611cd2575f6040517fec442f05000000000000000000000000000000000000000000000000000000008152600401611cc99190612c06565b60405180910390fd5b611cdd838383612789565b505050565b611cea611bd9565b73ffffffffffffffffffffffffffffffffffffffff16611d08611108565b73ffffffffffffffffffffffffffffffffffffffff1614611d6757611d2b611bd9565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401611d5e9190612c06565b60405180910390fd5b565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611e879190612c06565b602060405180830381865afa158015611ea2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ec69190612f64565b90505f6064605283611ed89190613057565b611ee291906130c5565b90506007548211156122da575f600267ffffffffffffffff811115611f0a57611f09613292565b5b604051908082528060200260200182016040528015611f385781602001602082028036833780820191505090505b50905030815f81518110611f4f57611f4e6131b6565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ff2573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061201691906132d3565b8160018151811061202a576120296131b6565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061208f307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d85611be0565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430610258426120dd9190612fbc565b6040518663ffffffff1660e01b81526004016120fd95949392919061356e565b5f604051808303815f87803b158015612114575f80fd5b505af1158015612126573d5f803e3d5ffd5b505050505f4790505f60058261213c91906130c5565b905060125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f193505050501580156121a2573d5f803e3d5ffd5b50600f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f19350505050158015612207573d5f803e3d5ffd5b5060105f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f1935050505015801561226c573d5f803e3d5ffd5b5060115f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f193505050501580156122d1573d5f803e3d5ffd5b50505050612315565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230c90613636565b60405180910390fd5b5050565b5f600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016123749190612c06565b602060405180830381865afa15801561238f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123b39190612f64565b90505f81116123f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123ee9061369e565b60405180910390fd5b600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b37f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d836040518363ffffffff1660e01b81526004016124739291906136bc565b6020604051808303815f875af115801561248f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124b3919061370d565b505f6124be47611748565b90505f816001815181106124d5576124d46131b6565b5b602002602001015190507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d71947600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16845f8033610258426125509190612fbc565b6040518863ffffffff1660e01b815260040161257196959493929190613738565b60606040518083038185885af115801561258d573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906125b29190613797565b505050505050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361262a575f6040517fe602df050000000000000000000000000000000000000000000000000000000081526004016126219190612c06565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361269a575f6040517f94280d620000000000000000000000000000000000000000000000000000000081526004016126919190612c06565b60405180910390fd5b8160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508015612783578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161277a9190612b6a565b60405180910390a35b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036127d9578060025f8282546127cd9190612fbc565b925050819055506128a7565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015612862578381836040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401612859939291906137e7565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036128ee578060025f8282540392505081905550612938565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516129959190612b6a565b60405180910390a3505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b838110156129d95780820151818401526020810190506129be565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6129fe826129a2565b612a0881856129ac565b9350612a188185602086016129bc565b612a21816129e4565b840191505092915050565b5f6020820190508181035f830152612a4481846129f4565b905092915050565b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612a8682612a5d565b9050919050565b612a9681612a7c565b8114612aa0575f80fd5b50565b5f81359050612ab181612a8d565b92915050565b5f819050919050565b612ac981612ab7565b8114612ad3575f80fd5b50565b5f81359050612ae481612ac0565b92915050565b5f8060408385031215612b0057612aff612a55565b5b5f612b0d85828601612aa3565b9250506020612b1e85828601612ad6565b9150509250929050565b5f8115159050919050565b612b3c81612b28565b82525050565b5f602082019050612b555f830184612b33565b92915050565b612b6481612ab7565b82525050565b5f602082019050612b7d5f830184612b5b565b92915050565b5f819050919050565b5f612ba6612ba1612b9c84612a5d565b612b83565b612a5d565b9050919050565b5f612bb782612b8c565b9050919050565b5f612bc882612bad565b9050919050565b612bd881612bbe565b82525050565b5f602082019050612bf15f830184612bcf565b92915050565b612c0081612a7c565b82525050565b5f602082019050612c195f830184612bf7565b92915050565b5f805f60608486031215612c3657612c35612a55565b5b5f612c4386828701612aa3565b9350506020612c5486828701612aa3565b9250506040612c6586828701612ad6565b9150509250925092565b5f80fd5b5f80fd5b5f80fd5b5f8083601f840112612c9057612c8f612c6f565b5b8235905067ffffffffffffffff811115612cad57612cac612c73565b5b602083019150836020820283011115612cc957612cc8612c77565b5b9250929050565b5f8060208385031215612ce657612ce5612a55565b5b5f83013567ffffffffffffffff811115612d0357612d02612a59565b5b612d0f85828601612c7b565b92509250509250929050565b5f60ff82169050919050565b612d3081612d1b565b82525050565b5f602082019050612d495f830184612d27565b92915050565b5f60208284031215612d6457612d63612a55565b5b5f612d7184828501612aa3565b91505092915050565b5f60208284031215612d8f57612d8e612a55565b5b5f612d9c84828501612ad6565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b612dd781612ab7565b82525050565b5f612de88383612dce565b60208301905092915050565b5f602082019050919050565b5f612e0a82612da5565b612e148185612daf565b9350612e1f83612dbf565b805f5b83811015612e4f578151612e368882612ddd565b9750612e4183612df4565b925050600181019050612e22565b5085935050505092915050565b5f6020820190508181035f830152612e748184612e00565b905092915050565b5f612e8682612bad565b9050919050565b612e9681612e7c565b82525050565b5f602082019050612eaf5f830184612e8d565b92915050565b5f8060408385031215612ecb57612eca612a55565b5b5f612ed885828601612aa3565b9250506020612ee985828601612aa3565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680612f3757607f821691505b602082108103612f4a57612f49612ef3565b5b50919050565b5f81519050612f5e81612ac0565b92915050565b5f60208284031215612f7957612f78612a55565b5b5f612f8684828501612f50565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f612fc682612ab7565b9150612fd183612ab7565b9250828201905080821115612fe957612fe8612f8f565b5b92915050565b7f416464726573732063616e277420686f6c64206d6f72650000000000000000005f82015250565b5f6130236017836129ac565b915061302e82612fef565b602082019050919050565b5f6020820190508181035f83015261305081613017565b9050919050565b5f61306182612ab7565b915061306c83612ab7565b925082820261307a81612ab7565b9150828204841483151761309157613090612f8f565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6130cf82612ab7565b91506130da83612ab7565b9250826130ea576130e9613098565b5b828204905092915050565b5f6130ff82612ab7565b915061310a83612ab7565b925082820390508181111561312257613121612f8f565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f6131826028836129ac565b915061318d82613128565b604082019050919050565b5f6020820190508181035f8301526131af81613176565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f6131ed82612ab7565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361321f5761321e612f8f565b5b600182019050919050565b7f4d757374206265206174206c6561737420302e312500000000000000000000005f82015250565b5f61325e6015836129ac565b91506132698261322a565b602082019050919050565b5f6020820190508181035f83015261328b81613252565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f815190506132cd81612a8d565b92915050565b5f602082840312156132e8576132e7612a55565b5b5f6132f5848285016132bf565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61333081612a7c565b82525050565b5f6133418383613327565b60208301905092915050565b5f602082019050919050565b5f613363826132fe565b61336d8185613308565b935061337883613318565b805f5b838110156133a857815161338f8882613336565b975061339a8361334d565b92505060018101905061337b565b5085935050505092915050565b5f6040820190506133c85f830185612b5b565b81810360208301526133da8184613359565b90509392505050565b6133ec826129e4565b810181811067ffffffffffffffff8211171561340b5761340a613292565b5b80604052505050565b5f61341d612a4c565b905061342982826133e3565b919050565b5f67ffffffffffffffff82111561344857613447613292565b5b602082029050602081019050919050565b5f61346b6134668461342e565b613414565b9050808382526020820190506020840283018581111561348e5761348d612c77565b5b835b818110156134b757806134a38882612f50565b845260208401935050602081019050613490565b5050509392505050565b5f82601f8301126134d5576134d4612c6f565b5b81516134e5848260208601613459565b91505092915050565b5f6020828403121561350357613502612a55565b5b5f82015167ffffffffffffffff8111156135205761351f612a59565b5b61352c848285016134c1565b91505092915050565b5f819050919050565b5f61355861355361354e84613535565b612b83565b612ab7565b9050919050565b6135688161353e565b82525050565b5f60a0820190506135815f830188612b5b565b61358e602083018761355f565b81810360408301526135a08186613359565b90506135af6060830185612bf7565b6135bc6080830184612b5b565b9695505050505050565b7f43757272656e7420746f6b656e2062616c616e6365206973206e6f74206772655f8201527f61746572207468616e206d696e5377617053707265616453756d000000000000602082015250565b5f613620603a836129ac565b915061362b826135c6565b604082019050919050565b5f6020820190508181035f83015261364d81613614565b9050919050565b7f746f6b656e7320616d6f756e74206d757374206265203e2030000000000000005f82015250565b5f6136886019836129ac565b915061369382613654565b602082019050919050565b5f6020820190508181035f8301526136b58161367c565b9050919050565b5f6040820190506136cf5f830185612bf7565b6136dc6020830184612b5b565b9392505050565b6136ec81612b28565b81146136f6575f80fd5b50565b5f81519050613707816136e3565b92915050565b5f6020828403121561372257613721612a55565b5b5f61372f848285016136f9565b91505092915050565b5f60c08201905061374b5f830189612bf7565b6137586020830188612b5b565b613765604083018761355f565b613772606083018661355f565b61377f6080830185612bf7565b61378c60a0830184612b5b565b979650505050505050565b5f805f606084860312156137ae576137ad612a55565b5b5f6137bb86828701612f50565b93505060206137cc86828701612f50565b92505060406137dd86828701612f50565b9150509250925092565b5f6060820190506137fa5f830186612bf7565b6138076020830185612b5b565b6138146040830184612b5b565b94935050505056fea2646970667358221220cf32e1fed6e85048d09360d7c5f13a0dd1bb8a868b810fa8c18d8dcde8662d8d64736f6c63430008140033

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

0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d0000000000000000000000000000000000000001431e0fae6d7217caa00000000000000000000000000000000000000000000001431e0fae6d7217caa00000000000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d0000000000000000000000005877a4da2aff455362a012b9887a263f8a026fa30000000000000000000000006c048aff6c80f9b69d3ca0fc17d3422a8cf0e1d50000000000000000000000007f70fb57af2dc84fba9e105ed5a2f57cd6ac2146

-----Decoded View---------------
Arg [0] : _uniswapV2Router (address): 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
Arg [1] : initialSupply (uint256): 100000000000000000000000000000
Arg [2] : _maxHoldSum (uint256): 100000000000000000000000000000
Arg [3] : _routerAddress (address): 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
Arg [4] : _teamAddress (address): 0x5877a4dA2aff455362a012B9887A263F8a026fa3
Arg [5] : _marketingAddress (address): 0x6C048AfF6C80f9b69d3CA0FC17D3422a8Cf0e1D5
Arg [6] : _wagonbuyerAddress (address): 0x7F70FB57AF2DC84FbA9E105Ed5A2F57cD6Ac2146

-----Encoded View---------------
7 Constructor Arguments found :
Arg [0] : 0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d
Arg [1] : 0000000000000000000000000000000000000001431e0fae6d7217caa0000000
Arg [2] : 0000000000000000000000000000000000000001431e0fae6d7217caa0000000
Arg [3] : 0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d
Arg [4] : 0000000000000000000000005877a4da2aff455362a012b9887a263f8a026fa3
Arg [5] : 0000000000000000000000006c048aff6c80f9b69d3ca0fc17d3422a8cf0e1d5
Arg [6] : 0000000000000000000000007f70fb57af2dc84fba9e105ed5a2f57cd6ac2146


Deployed Bytecode Sourcemap

35062:10663:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24745:91;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27038:190;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35485:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35112:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25847:99;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36663:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38508:2056;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36773:71;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44276:236;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36591:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25698:84;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36522:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43888:102;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44904:115;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43723:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35262:54;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26009:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18358:103;;;;;;;;;;;;;:::i;:::-;;40627:121;;;;;;;;;;;;;:::i;:::-;;44040:176;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17683:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24955:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45318:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45075:195;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36557:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36696:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36630:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37109:1300;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44573:146;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43314:316;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35170:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35445:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44781:115;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26577:142;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36734:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45497:225;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18616:220;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24745:91;24790:13;24823:5;24816:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24745:91;:::o;27038:190::-;27111:4;27128:13;27144:12;:10;:12::i;:::-;27128:28;;27167:31;27176:5;27183:7;27192:5;27167:8;:31::i;:::-;27216:4;27209:11;;;27038:190;;;;:::o;35485:34::-;;;;:::o;35112:51::-;;;:::o;25847:99::-;25899:7;25926:12;;25919:19;;25847:99;:::o;36663:26::-;;;;;;;;;;;;;:::o;38508:2056::-;38640:4;38688:13;;;;;;;;;;;38675:26;;:9;:26;;;;:67;;;;;38731:11;;;;;;;;;;;38718:24;;:9;:24;;;;38675:67;:108;;;;;38772:11;;;;;;;;;;;38759:24;;:9;:24;;;;38675:108;:154;;;;;38801:17;:28;38819:9;38801:28;;;;;;;;;;;;;;;;;;;;;;;;;38800:29;38675:154;38657:359;;;38935:10;;38926:6;38889:12;;;;;;;;;;;38882:30;;;38913:9;38882:41;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:50;;;;:::i;:::-;:63;38856:148;;;;;;;;;;;;:::i;:::-;;;;;;;;;38657:359;39075:26;39115:11;;;;;;;;;;;39105:21;;:6;:21;;;:63;;;;39157:11;;;;;;;;;;;39143:25;;:10;:25;;;39105:63;:104;;;;39198:11;;;;;;;;;;;39185:24;;:9;:24;;;39105:104;39075:135;;39281:21;:64;;;;;39320:17;:25;39338:6;39320:25;;;;;;;;;;;;;;;;;;;;;;;;;39319:26;39281:64;:99;;;;;39379:1;39362:14;;:18;39281:99;39263:1272;;;39437:13;39481:7;39463:14;;39454:6;:23;;;;:::i;:::-;39453:35;;;;:::i;:::-;39437:51;;39503:18;39533:8;39524:6;:17;;;;:::i;:::-;39503:38;;39632:43;39642:6;39650:9;39661:13;39632:9;:43::i;:::-;39690:42;39700:6;39716:4;39723:8;39690:9;:42::i;:::-;39790:24;39817:29;39827:6;39835:10;39817:9;:29::i;:::-;39790:56;;39907:6;39887:16;:26;;39861:128;;;;;;;;;;;;:::i;:::-;;;;;;;;;40004:55;40013:6;40021:10;40052:6;40033:16;:25;;;;:::i;:::-;40004:8;:55::i;:::-;39392:679;;;39263:1272;;;40160:36;40170:6;40178:9;40189:6;40160:9;:36::i;:::-;40254:24;40281:29;40291:6;40299:10;40281:9;:29::i;:::-;40254:56;;40371:6;40351:16;:26;;40325:128;;;;;;;;;;;;:::i;:::-;;;;;;;;;40468:55;40477:6;40485:10;40516:6;40497:16;:25;;;;:::i;:::-;40468:8;:55::i;:::-;40077:458;39263:1272;40552:4;40545:11;;;38508:2056;;;;;:::o;36773:71::-;;;;;;;;;;;;;:::o;44276:236::-;17569:13;:11;:13::i;:::-;44388:9:::1;44383:122;44407:14;;:21;;44403:1;:25;44383:122;;;44489:4;44450:17;:36;44468:14;;44483:1;44468:17;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;44450:36;;;;;;;;;;;;;;;;:43;;;;;;;;;;;;;;;;;;44430:3;;;;;:::i;:::-;;;;44383:122;;;;44276:236:::0;;:::o;36591:32::-;;;;;;;;;;;;;:::o;25698:84::-;25747:5;25772:2;25765:9;;25698:84;:::o;36522:28::-;;;;;;;;;;;;;:::o;43888:102::-;43942:4;43966:16;;43959:23;;43888:102;:::o;44904:115::-;17569:13;:11;:13::i;:::-;45003:8:::1;44983:17;;:28;;;;;;;;;;;;;;;;;;44904:115:::0;:::o;43723:120::-;17569:13;:11;:13::i;:::-;43822::::1;43803:16;:32;;;;43723:120:::0;:::o;35262:54::-;;;;:::o;26009:118::-;26074:7;26101:9;:18;26111:7;26101:18;;;;;;;;;;;;;;;;26094:25;;26009:118;;;:::o;18358:103::-;17569:13;:11;:13::i;:::-;18423:30:::1;18450:1;18423:18;:30::i;:::-;18358:103::o:0;40627:121::-;17569:13;:11;:13::i;:::-;40686:18:::1;:16;:18::i;:::-;40715:25;:23;:25::i;:::-;40627:121::o:0;44040:176::-;44098:4;44115:16;44141:12;;;;;;;;;;;44134:30;;;44173:4;44134:45;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;44115:64;;44197:11;44190:18;;;44040:176;:::o;17683:87::-;17729:7;17756:6;;;;;;;;;;;17749:13;;17683:87;:::o;24955:95::-;25002:13;25035:7;25028:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24955:95;:::o;45318:123::-;17569:13;:11;:13::i;:::-;45392:8:::1;45384:26;;:49;45411:21;45384:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;45318:123:::0;:::o;45075:195::-;17569:13;:11;:13::i;:::-;45193:4:::1;45177:13;:11;:13::i;:::-;:20;;;;:::i;:::-;45158:14;:40;;45150:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;45248:14;45235:10;:27;;;;45075:195:::0;:::o;36557:27::-;;;;;;;;;;;;;:::o;36696:31::-;;;;;;;;;;;;;:::o;36630:26::-;;;;;;;;;;;;;:::o;37109:1300::-;37205:4;37246:13;;;;;;;;;;;37240:19;;:2;:19;;;;:53;;;;;37282:11;;;;;;;;;;;37276:17;;:2;:17;;;;37240:53;:87;;;;;37316:11;;;;;;;;;;;37310:17;;:2;:17;;;;37240:87;:126;;;;;37345:17;:21;37363:2;37345:21;;;;;;;;;;;;;;;;;;;;;;;;;37344:22;37240:126;37222:324;;;37465:10;;37456:6;37426:12;;;;;;;;;;;37419:30;;;37450:2;37419:34;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:43;;;;:::i;:::-;:56;37393:141;;;;;;;;;;;;:::i;:::-;;;;;;;;;37222:324;37605:26;37641:11;;;;;;;;;;;37635:17;;:2;:17;;;:59;;;;37683:11;;;;;;;;;;;37669:25;;:10;:25;;;37635:59;37605:90;;37766:21;:68;;;;;37805:17;:29;37823:10;37805:29;;;;;;;;;;;;;;;;;;;;;;;;;37804:30;37766:68;:108;;;;;37872:2;37851:23;;:17;;;;;;;;;;;:23;;;;37766:108;:142;;;;;37907:1;37891:13;;:17;37766:142;37748:632;;;37965:13;38008:7;37991:13;;37982:6;:22;;;;:::i;:::-;37981:34;;;;:::i;:::-;37965:50;;38030:18;38060:8;38051:6;:17;;;;:::i;:::-;38030:38;;38133:40;38143:10;38155:2;38159:13;38133:9;:40::i;:::-;38188:46;38198:10;38218:4;38225:8;38188:9;:46::i;:::-;37920:326;;37748:632;;;38335:33;38345:10;38357:2;38361:6;38335:9;:33::i;:::-;37748:632;38397:4;38390:11;;;37109:1300;;;;:::o;44573:146::-;44660:4;44684:17;:27;44702:8;44684:27;;;;;;;;;;;;;;;;;;;;;;;;;44677:34;;44573:146;;;:::o;43314:316::-;43392:29;43434:21;43472:1;43458:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43434:40;;43495:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;43485:4;43490:1;43485:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;43546:4;43528;43533:1;43528:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;43577:15;:29;;;43607:8;43617:4;43577:45;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;43562:60;;43423:207;43314:316;;;:::o;35170:43::-;;;:::o;35445:33::-;;;;:::o;44781:115::-;17569:13;:11;:13::i;:::-;44880:8:::1;44860:17;;:28;;;;;;;;;;;;;;;;;;44781:115:::0;:::o;26577:142::-;26657:7;26684:11;:18;26696:5;26684:18;;;;;;;;;;;;;;;:27;26703:7;26684:27;;;;;;;;;;;;;;;;26677:34;;26577:142;;;;:::o;36734:32::-;;;;;;;;;;;;;:::o;45497:225::-;17569:13;:11;:13::i;:::-;45577:24:::1;45611:12;;;;;;;;;;;45604:30;;;45635:12;;;;;;;;;;;45604:44;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;45577:71;;45659:55;45677:4;45684:8;45694:19;45659:9;:55::i;:::-;45566:156;45497:225:::0;:::o;18616:220::-;17569:13;:11;:13::i;:::-;18721:1:::1;18701:22;;:8;:22;;::::0;18697:93:::1;;18775:1;18747:31;;;;;;;;;;;:::i;:::-;;;;;;;;18697:93;18800:28;18819:8;18800:18;:28::i;:::-;18616:220:::0;:::o;15799:98::-;15852:7;15879:10;15872:17;;15799:98;:::o;31865:130::-;31950:37;31959:5;31966:7;31975:5;31982:4;31950:8;:37::i;:::-;31865:130;;;:::o;28440:308::-;28540:1;28524:18;;:4;:18;;;28520:88;;28593:1;28566:30;;;;;;;;;;;:::i;:::-;;;;;;;;28520:88;28636:1;28622:16;;:2;:16;;;28618:88;;28691:1;28662:32;;;;;;;;;;;:::i;:::-;;;;;;;;28618:88;28716:24;28724:4;28730:2;28734:5;28716:7;:24::i;:::-;28440:308;;;:::o;17848:166::-;17919:12;:10;:12::i;:::-;17908:23;;:7;:5;:7::i;:::-;:23;;;17904:103;;17982:12;:10;:12::i;:::-;17955:40;;;;;;;;;;;:::i;:::-;;;;;;;;17904:103;17848:166::o;18996:191::-;19070:16;19089:6;;;;;;;;;;;19070:25;;19115:8;19106:6;;:17;;;;;;;;;;;;;;;;;;19170:8;19139:40;;19160:8;19139:40;;;;;;;;;;;;19059:128;18996:191;:::o;40788:1609::-;40836:24;40870:12;;;;;;;;;;;40863:30;;;40916:4;40863:69;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40836:96;;40943:37;41025:3;41006:2;40984:19;:24;;;;:::i;:::-;40983:45;;;;:::i;:::-;40943:85;;41148:16;;41126:19;:38;41122:1268;;;41181:21;41219:1;41205:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41181:40;;41254:4;41236;41241:1;41236:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;41284:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41274:4;41279:1;41274:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;41321:136;41356:4;41388:15;41423:19;41321:8;:136::i;:::-;41474:15;:66;;;41559:32;41610:1;41630:4;41661;41703:3;41685:15;:21;;;;:::i;:::-;41474:247;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41789:24;41816:21;41789:48;;41852:23;41900:1;41878:19;:23;;;;:::i;:::-;41852:49;;41924:11;;;;;;;;;;;41916:29;;:49;41946:18;41916:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41988:11;;;;;;;;;;;41980:29;;:49;42010:18;41980:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42052:16;;;;;;;;;;;42044:34;;:54;42079:18;42044:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42121:17;;;;;;;;;;;42113:35;;:55;42149:18;42113:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41166:1091;;;41122:1268;;;42278:100;;;;;;;;;;:::i;:::-;;;;;;;;41122:1268;40825:1572;;40788:1609::o;42437:836::-;42531:16;42557:12;;;;;;;;;;;42550:30;;;42589:4;42550:45;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42531:64;;42628:1;42614:11;:15;42606:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;42677:12;;;;;;;;;;;42670:28;;;42707:15;42725:11;42670:67;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;42791:35;42829:60;42857:21;42829:13;:60::i;:::-;42791:98;;42900:19;42922:18;42941:1;42922:21;;;;;;;;:::i;:::-;;;;;;;;42900:43;;43005:15;42986:51;;;43059:21;43121:12;;;;;;;;;;;43150:11;43176:1;43192;43208:10;43251:3;43233:15;:21;;;;:::i;:::-;42986:279;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;42481:792;;;42437:836::o;32846:443::-;32976:1;32959:19;;:5;:19;;;32955:91;;33031:1;33002:32;;;;;;;;;;;:::i;:::-;;;;;;;;32955:91;33079:1;33060:21;;:7;:21;;;33056:92;;33133:1;33105:31;;;;;;;;;;;:::i;:::-;;;;;;;;33056:92;33188:5;33158:11;:18;33170:5;33158:18;;;;;;;;;;;;;;;:27;33177:7;33158:27;;;;;;;;;;;;;;;:35;;;;33208:9;33204:78;;;33255:7;33239:31;;33248:5;33239:31;;;33264:5;33239:31;;;;;;:::i;:::-;;;;;;;;33204:78;32846:443;;;;:::o;29072:1135::-;29178:1;29162:18;;:4;:18;;;29158:552;;29316:5;29300:12;;:21;;;;;;;:::i;:::-;;;;;;;;29158:552;;;29354:19;29376:9;:15;29386:4;29376:15;;;;;;;;;;;;;;;;29354:37;;29424:5;29410:11;:19;29406:117;;;29482:4;29488:11;29501:5;29457:50;;;;;;;;;;;;;:::i;:::-;;;;;;;;29406:117;29678:5;29664:11;:19;29646:9;:15;29656:4;29646:15;;;;;;;;;;;;;;;:37;;;;29339:371;29158:552;29740:1;29726:16;;:2;:16;;;29722:435;;29908:5;29892:12;;:21;;;;;;;;;;;29722:435;;;30125:5;30108:9;:13;30118:2;30108:13;;;;;;;;;;;;;;;;:22;;;;;;;;;;;29722:435;30189:2;30174:25;;30183:4;30174:25;;;30193:5;30174:25;;;;;;:::i;:::-;;;;;;;;29072:1135;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1349:75::-;1382:6;1415:2;1409:9;1399:19;;1349:75;:::o;1430:117::-;1539:1;1536;1529:12;1553:117;1662:1;1659;1652:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:118::-;3533:24;3551:5;3533:24;:::i;:::-;3528:3;3521:37;3446:118;;:::o;3570:222::-;3663:4;3701:2;3690:9;3686:18;3678:26;;3714:71;3782:1;3771:9;3767:17;3758:6;3714:71;:::i;:::-;3570:222;;;;:::o;3798:60::-;3826:3;3847:5;3840:12;;3798:60;;;:::o;3864:142::-;3914:9;3947:53;3965:34;3974:24;3992:5;3974:24;:::i;:::-;3965:34;:::i;:::-;3947:53;:::i;:::-;3934:66;;3864:142;;;:::o;4012:126::-;4062:9;4095:37;4126:5;4095:37;:::i;:::-;4082:50;;4012:126;;;:::o;4144:152::-;4220:9;4253:37;4284:5;4253:37;:::i;:::-;4240:50;;4144:152;;;:::o;4302:183::-;4415:63;4472:5;4415:63;:::i;:::-;4410:3;4403:76;4302:183;;:::o;4491:274::-;4610:4;4648:2;4637:9;4633:18;4625:26;;4661:97;4755:1;4744:9;4740:17;4731:6;4661:97;:::i;:::-;4491:274;;;;:::o;4771:118::-;4858:24;4876:5;4858:24;:::i;:::-;4853:3;4846:37;4771:118;;:::o;4895:222::-;4988:4;5026:2;5015:9;5011:18;5003:26;;5039:71;5107:1;5096:9;5092:17;5083:6;5039:71;:::i;:::-;4895:222;;;;:::o;5123:619::-;5200:6;5208;5216;5265:2;5253:9;5244:7;5240:23;5236:32;5233:119;;;5271:79;;:::i;:::-;5233:119;5391:1;5416:53;5461:7;5452:6;5441:9;5437:22;5416:53;:::i;:::-;5406:63;;5362:117;5518:2;5544:53;5589:7;5580:6;5569:9;5565:22;5544:53;:::i;:::-;5534:63;;5489:118;5646:2;5672:53;5717:7;5708:6;5697:9;5693:22;5672:53;:::i;:::-;5662:63;;5617:118;5123:619;;;;;:::o;5748:117::-;5857:1;5854;5847:12;5871:117;5980:1;5977;5970:12;5994:117;6103:1;6100;6093:12;6134:568;6207:8;6217:6;6267:3;6260:4;6252:6;6248:17;6244:27;6234:122;;6275:79;;:::i;:::-;6234:122;6388:6;6375:20;6365:30;;6418:18;6410:6;6407:30;6404:117;;;6440:79;;:::i;:::-;6404:117;6554:4;6546:6;6542:17;6530:29;;6608:3;6600:4;6592:6;6588:17;6578:8;6574:32;6571:41;6568:128;;;6615:79;;:::i;:::-;6568:128;6134:568;;;;;:::o;6708:559::-;6794:6;6802;6851:2;6839:9;6830:7;6826:23;6822:32;6819:119;;;6857:79;;:::i;:::-;6819:119;7005:1;6994:9;6990:17;6977:31;7035:18;7027:6;7024:30;7021:117;;;7057:79;;:::i;:::-;7021:117;7170:80;7242:7;7233:6;7222:9;7218:22;7170:80;:::i;:::-;7152:98;;;;6948:312;6708:559;;;;;:::o;7273:86::-;7308:7;7348:4;7341:5;7337:16;7326:27;;7273:86;;;:::o;7365:112::-;7448:22;7464:5;7448:22;:::i;:::-;7443:3;7436:35;7365:112;;:::o;7483:214::-;7572:4;7610:2;7599:9;7595:18;7587:26;;7623:67;7687:1;7676:9;7672:17;7663:6;7623:67;:::i;:::-;7483:214;;;;:::o;7703:329::-;7762:6;7811:2;7799:9;7790:7;7786:23;7782:32;7779:119;;;7817:79;;:::i;:::-;7779:119;7937:1;7962:53;8007:7;7998:6;7987:9;7983:22;7962:53;:::i;:::-;7952:63;;7908:117;7703:329;;;;:::o;8038:::-;8097:6;8146:2;8134:9;8125:7;8121:23;8117:32;8114:119;;;8152:79;;:::i;:::-;8114:119;8272:1;8297:53;8342:7;8333:6;8322:9;8318:22;8297:53;:::i;:::-;8287:63;;8243:117;8038:329;;;;:::o;8373:114::-;8440:6;8474:5;8468:12;8458:22;;8373:114;;;:::o;8493:184::-;8592:11;8626:6;8621:3;8614:19;8666:4;8661:3;8657:14;8642:29;;8493:184;;;;:::o;8683:132::-;8750:4;8773:3;8765:11;;8803:4;8798:3;8794:14;8786:22;;8683:132;;;:::o;8821:108::-;8898:24;8916:5;8898:24;:::i;:::-;8893:3;8886:37;8821:108;;:::o;8935:179::-;9004:10;9025:46;9067:3;9059:6;9025:46;:::i;:::-;9103:4;9098:3;9094:14;9080:28;;8935:179;;;;:::o;9120:113::-;9190:4;9222;9217:3;9213:14;9205:22;;9120:113;;;:::o;9269:732::-;9388:3;9417:54;9465:5;9417:54;:::i;:::-;9487:86;9566:6;9561:3;9487:86;:::i;:::-;9480:93;;9597:56;9647:5;9597:56;:::i;:::-;9676:7;9707:1;9692:284;9717:6;9714:1;9711:13;9692:284;;;9793:6;9787:13;9820:63;9879:3;9864:13;9820:63;:::i;:::-;9813:70;;9906:60;9959:6;9906:60;:::i;:::-;9896:70;;9752:224;9739:1;9736;9732:9;9727:14;;9692:284;;;9696:14;9992:3;9985:10;;9393:608;;;9269:732;;;;:::o;10007:373::-;10150:4;10188:2;10177:9;10173:18;10165:26;;10237:9;10231:4;10227:20;10223:1;10212:9;10208:17;10201:47;10265:108;10368:4;10359:6;10265:108;:::i;:::-;10257:116;;10007:373;;;;:::o;10386:148::-;10458:9;10491:37;10522:5;10491:37;:::i;:::-;10478:50;;10386:148;;;:::o;10540:175::-;10649:59;10702:5;10649:59;:::i;:::-;10644:3;10637:72;10540:175;;:::o;10721:266::-;10836:4;10874:2;10863:9;10859:18;10851:26;;10887:93;10977:1;10966:9;10962:17;10953:6;10887:93;:::i;:::-;10721:266;;;;:::o;10993:474::-;11061:6;11069;11118:2;11106:9;11097:7;11093:23;11089:32;11086:119;;;11124:79;;:::i;:::-;11086:119;11244:1;11269:53;11314:7;11305:6;11294:9;11290:22;11269:53;:::i;:::-;11259:63;;11215:117;11371:2;11397:53;11442:7;11433:6;11422:9;11418:22;11397:53;:::i;:::-;11387:63;;11342:118;10993:474;;;;;:::o;11473:180::-;11521:77;11518:1;11511:88;11618:4;11615:1;11608:15;11642:4;11639:1;11632:15;11659:320;11703:6;11740:1;11734:4;11730:12;11720:22;;11787:1;11781:4;11777:12;11808:18;11798:81;;11864:4;11856:6;11852:17;11842:27;;11798:81;11926:2;11918:6;11915:14;11895:18;11892:38;11889:84;;11945:18;;:::i;:::-;11889:84;11710:269;11659:320;;;:::o;11985:143::-;12042:5;12073:6;12067:13;12058:22;;12089:33;12116:5;12089:33;:::i;:::-;11985:143;;;;:::o;12134:351::-;12204:6;12253:2;12241:9;12232:7;12228:23;12224:32;12221:119;;;12259:79;;:::i;:::-;12221:119;12379:1;12404:64;12460:7;12451:6;12440:9;12436:22;12404:64;:::i;:::-;12394:74;;12350:128;12134:351;;;;:::o;12491:180::-;12539:77;12536:1;12529:88;12636:4;12633:1;12626:15;12660:4;12657:1;12650:15;12677:191;12717:3;12736:20;12754:1;12736:20;:::i;:::-;12731:25;;12770:20;12788:1;12770:20;:::i;:::-;12765:25;;12813:1;12810;12806:9;12799:16;;12834:3;12831:1;12828:10;12825:36;;;12841:18;;:::i;:::-;12825:36;12677:191;;;;:::o;12874:173::-;13014:25;13010:1;13002:6;12998:14;12991:49;12874:173;:::o;13053:366::-;13195:3;13216:67;13280:2;13275:3;13216:67;:::i;:::-;13209:74;;13292:93;13381:3;13292:93;:::i;:::-;13410:2;13405:3;13401:12;13394:19;;13053:366;;;:::o;13425:419::-;13591:4;13629:2;13618:9;13614:18;13606:26;;13678:9;13672:4;13668:20;13664:1;13653:9;13649:17;13642:47;13706:131;13832:4;13706:131;:::i;:::-;13698:139;;13425:419;;;:::o;13850:410::-;13890:7;13913:20;13931:1;13913:20;:::i;:::-;13908:25;;13947:20;13965:1;13947:20;:::i;:::-;13942:25;;14002:1;13999;13995:9;14024:30;14042:11;14024:30;:::i;:::-;14013:41;;14203:1;14194:7;14190:15;14187:1;14184:22;14164:1;14157:9;14137:83;14114:139;;14233:18;;:::i;:::-;14114:139;13898:362;13850:410;;;;:::o;14266:180::-;14314:77;14311:1;14304:88;14411:4;14408:1;14401:15;14435:4;14432:1;14425:15;14452:185;14492:1;14509:20;14527:1;14509:20;:::i;:::-;14504:25;;14543:20;14561:1;14543:20;:::i;:::-;14538:25;;14582:1;14572:35;;14587:18;;:::i;:::-;14572:35;14629:1;14626;14622:9;14617:14;;14452:185;;;;:::o;14643:194::-;14683:4;14703:20;14721:1;14703:20;:::i;:::-;14698:25;;14737:20;14755:1;14737:20;:::i;:::-;14732:25;;14781:1;14778;14774:9;14766:17;;14805:1;14799:4;14796:11;14793:37;;;14810:18;;:::i;:::-;14793:37;14643:194;;;;:::o;14843:227::-;14983:34;14979:1;14971:6;14967:14;14960:58;15052:10;15047:2;15039:6;15035:15;15028:35;14843:227;:::o;15076:366::-;15218:3;15239:67;15303:2;15298:3;15239:67;:::i;:::-;15232:74;;15315:93;15404:3;15315:93;:::i;:::-;15433:2;15428:3;15424:12;15417:19;;15076:366;;;:::o;15448:419::-;15614:4;15652:2;15641:9;15637:18;15629:26;;15701:9;15695:4;15691:20;15687:1;15676:9;15672:17;15665:47;15729:131;15855:4;15729:131;:::i;:::-;15721:139;;15448:419;;;:::o;15873:180::-;15921:77;15918:1;15911:88;16018:4;16015:1;16008:15;16042:4;16039:1;16032:15;16059:233;16098:3;16121:24;16139:5;16121:24;:::i;:::-;16112:33;;16167:66;16160:5;16157:77;16154:103;;16237:18;;:::i;:::-;16154:103;16284:1;16277:5;16273:13;16266:20;;16059:233;;;:::o;16298:171::-;16438:23;16434:1;16426:6;16422:14;16415:47;16298:171;:::o;16475:366::-;16617:3;16638:67;16702:2;16697:3;16638:67;:::i;:::-;16631:74;;16714:93;16803:3;16714:93;:::i;:::-;16832:2;16827:3;16823:12;16816:19;;16475:366;;;:::o;16847:419::-;17013:4;17051:2;17040:9;17036:18;17028:26;;17100:9;17094:4;17090:20;17086:1;17075:9;17071:17;17064:47;17128:131;17254:4;17128:131;:::i;:::-;17120:139;;16847:419;;;:::o;17272:180::-;17320:77;17317:1;17310:88;17417:4;17414:1;17407:15;17441:4;17438:1;17431:15;17458:143;17515:5;17546:6;17540:13;17531:22;;17562:33;17589:5;17562:33;:::i;:::-;17458:143;;;;:::o;17607:351::-;17677:6;17726:2;17714:9;17705:7;17701:23;17697:32;17694:119;;;17732:79;;:::i;:::-;17694:119;17852:1;17877:64;17933:7;17924:6;17913:9;17909:22;17877:64;:::i;:::-;17867:74;;17823:128;17607:351;;;;:::o;17964:114::-;18031:6;18065:5;18059:12;18049:22;;17964:114;;;:::o;18084:184::-;18183:11;18217:6;18212:3;18205:19;18257:4;18252:3;18248:14;18233:29;;18084:184;;;;:::o;18274:132::-;18341:4;18364:3;18356:11;;18394:4;18389:3;18385:14;18377:22;;18274:132;;;:::o;18412:108::-;18489:24;18507:5;18489:24;:::i;:::-;18484:3;18477:37;18412:108;;:::o;18526:179::-;18595:10;18616:46;18658:3;18650:6;18616:46;:::i;:::-;18694:4;18689:3;18685:14;18671:28;;18526:179;;;;:::o;18711:113::-;18781:4;18813;18808:3;18804:14;18796:22;;18711:113;;;:::o;18860:732::-;18979:3;19008:54;19056:5;19008:54;:::i;:::-;19078:86;19157:6;19152:3;19078:86;:::i;:::-;19071:93;;19188:56;19238:5;19188:56;:::i;:::-;19267:7;19298:1;19283:284;19308:6;19305:1;19302:13;19283:284;;;19384:6;19378:13;19411:63;19470:3;19455:13;19411:63;:::i;:::-;19404:70;;19497:60;19550:6;19497:60;:::i;:::-;19487:70;;19343:224;19330:1;19327;19323:9;19318:14;;19283:284;;;19287:14;19583:3;19576:10;;18984:608;;;18860:732;;;;:::o;19598:483::-;19769:4;19807:2;19796:9;19792:18;19784:26;;19820:71;19888:1;19877:9;19873:17;19864:6;19820:71;:::i;:::-;19938:9;19932:4;19928:20;19923:2;19912:9;19908:18;19901:48;19966:108;20069:4;20060:6;19966:108;:::i;:::-;19958:116;;19598:483;;;;;:::o;20087:281::-;20170:27;20192:4;20170:27;:::i;:::-;20162:6;20158:40;20300:6;20288:10;20285:22;20264:18;20252:10;20249:34;20246:62;20243:88;;;20311:18;;:::i;:::-;20243:88;20351:10;20347:2;20340:22;20130:238;20087:281;;:::o;20374:129::-;20408:6;20435:20;;:::i;:::-;20425:30;;20464:33;20492:4;20484:6;20464:33;:::i;:::-;20374:129;;;:::o;20509:311::-;20586:4;20676:18;20668:6;20665:30;20662:56;;;20698:18;;:::i;:::-;20662:56;20748:4;20740:6;20736:17;20728:25;;20808:4;20802;20798:15;20790:23;;20509:311;;;:::o;20843:732::-;20950:5;20975:81;20991:64;21048:6;20991:64;:::i;:::-;20975:81;:::i;:::-;20966:90;;21076:5;21105:6;21098:5;21091:21;21139:4;21132:5;21128:16;21121:23;;21192:4;21184:6;21180:17;21172:6;21168:30;21221:3;21213:6;21210:15;21207:122;;;21240:79;;:::i;:::-;21207:122;21355:6;21338:231;21372:6;21367:3;21364:15;21338:231;;;21447:3;21476:48;21520:3;21508:10;21476:48;:::i;:::-;21471:3;21464:61;21554:4;21549:3;21545:14;21538:21;;21414:155;21398:4;21393:3;21389:14;21382:21;;21338:231;;;21342:21;20956:619;;20843:732;;;;;:::o;21598:385::-;21680:5;21729:3;21722:4;21714:6;21710:17;21706:27;21696:122;;21737:79;;:::i;:::-;21696:122;21847:6;21841:13;21872:105;21973:3;21965:6;21958:4;21950:6;21946:17;21872:105;:::i;:::-;21863:114;;21686:297;21598:385;;;;:::o;21989:554::-;22084:6;22133:2;22121:9;22112:7;22108:23;22104:32;22101:119;;;22139:79;;:::i;:::-;22101:119;22280:1;22269:9;22265:17;22259:24;22310:18;22302:6;22299:30;22296:117;;;22332:79;;:::i;:::-;22296:117;22437:89;22518:7;22509:6;22498:9;22494:22;22437:89;:::i;:::-;22427:99;;22230:306;21989:554;;;;:::o;22549:85::-;22594:7;22623:5;22612:16;;22549:85;;;:::o;22640:158::-;22698:9;22731:61;22749:42;22758:32;22784:5;22758:32;:::i;:::-;22749:42;:::i;:::-;22731:61;:::i;:::-;22718:74;;22640:158;;;:::o;22804:147::-;22899:45;22938:5;22899:45;:::i;:::-;22894:3;22887:58;22804:147;;:::o;22957:831::-;23220:4;23258:3;23247:9;23243:19;23235:27;;23272:71;23340:1;23329:9;23325:17;23316:6;23272:71;:::i;:::-;23353:80;23429:2;23418:9;23414:18;23405:6;23353:80;:::i;:::-;23480:9;23474:4;23470:20;23465:2;23454:9;23450:18;23443:48;23508:108;23611:4;23602:6;23508:108;:::i;:::-;23500:116;;23626:72;23694:2;23683:9;23679:18;23670:6;23626:72;:::i;:::-;23708:73;23776:3;23765:9;23761:19;23752:6;23708:73;:::i;:::-;22957:831;;;;;;;;:::o;23794:245::-;23934:34;23930:1;23922:6;23918:14;23911:58;24003:28;23998:2;23990:6;23986:15;23979:53;23794:245;:::o;24045:366::-;24187:3;24208:67;24272:2;24267:3;24208:67;:::i;:::-;24201:74;;24284:93;24373:3;24284:93;:::i;:::-;24402:2;24397:3;24393:12;24386:19;;24045:366;;;:::o;24417:419::-;24583:4;24621:2;24610:9;24606:18;24598:26;;24670:9;24664:4;24660:20;24656:1;24645:9;24641:17;24634:47;24698:131;24824:4;24698:131;:::i;:::-;24690:139;;24417:419;;;:::o;24842:175::-;24982:27;24978:1;24970:6;24966:14;24959:51;24842:175;:::o;25023:366::-;25165:3;25186:67;25250:2;25245:3;25186:67;:::i;:::-;25179:74;;25262:93;25351:3;25262:93;:::i;:::-;25380:2;25375:3;25371:12;25364:19;;25023:366;;;:::o;25395:419::-;25561:4;25599:2;25588:9;25584:18;25576:26;;25648:9;25642:4;25638:20;25634:1;25623:9;25619:17;25612:47;25676:131;25802:4;25676:131;:::i;:::-;25668:139;;25395:419;;;:::o;25820:332::-;25941:4;25979:2;25968:9;25964:18;25956:26;;25992:71;26060:1;26049:9;26045:17;26036:6;25992:71;:::i;:::-;26073:72;26141:2;26130:9;26126:18;26117:6;26073:72;:::i;:::-;25820:332;;;;;:::o;26158:116::-;26228:21;26243:5;26228:21;:::i;:::-;26221:5;26218:32;26208:60;;26264:1;26261;26254:12;26208:60;26158:116;:::o;26280:137::-;26334:5;26365:6;26359:13;26350:22;;26381:30;26405:5;26381:30;:::i;:::-;26280:137;;;;:::o;26423:345::-;26490:6;26539:2;26527:9;26518:7;26514:23;26510:32;26507:119;;;26545:79;;:::i;:::-;26507:119;26665:1;26690:61;26743:7;26734:6;26723:9;26719:22;26690:61;:::i;:::-;26680:71;;26636:125;26423:345;;;;:::o;26774:807::-;27023:4;27061:3;27050:9;27046:19;27038:27;;27075:71;27143:1;27132:9;27128:17;27119:6;27075:71;:::i;:::-;27156:72;27224:2;27213:9;27209:18;27200:6;27156:72;:::i;:::-;27238:80;27314:2;27303:9;27299:18;27290:6;27238:80;:::i;:::-;27328;27404:2;27393:9;27389:18;27380:6;27328:80;:::i;:::-;27418:73;27486:3;27475:9;27471:19;27462:6;27418:73;:::i;:::-;27501;27569:3;27558:9;27554:19;27545:6;27501:73;:::i;:::-;26774:807;;;;;;;;;:::o;27587:663::-;27675:6;27683;27691;27740:2;27728:9;27719:7;27715:23;27711:32;27708:119;;;27746:79;;:::i;:::-;27708:119;27866:1;27891:64;27947:7;27938:6;27927:9;27923:22;27891:64;:::i;:::-;27881:74;;27837:128;28004:2;28030:64;28086:7;28077:6;28066:9;28062:22;28030:64;:::i;:::-;28020:74;;27975:129;28143:2;28169:64;28225:7;28216:6;28205:9;28201:22;28169:64;:::i;:::-;28159:74;;28114:129;27587:663;;;;;:::o;28256:442::-;28405:4;28443:2;28432:9;28428:18;28420:26;;28456:71;28524:1;28513:9;28509:17;28500:6;28456:71;:::i;:::-;28537:72;28605:2;28594:9;28590:18;28581:6;28537:72;:::i;:::-;28619;28687:2;28676:9;28672:18;28663:6;28619:72;:::i;:::-;28256:442;;;;;;:::o

Swarm Source

ipfs://cf32e1fed6e85048d09360d7c5f13a0dd1bb8a868b810fa8c18d8dcde8662d8d
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.