ETH Price: $2,518.75 (-0.45%)
Gas: 0.72 Gwei

Contract

0x95c82b1159429fc5e617d1B1C751C41797Ae832e
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Approve197956922024-05-04 8:56:59118 days ago1714813019IN
0x95c82b11...797Ae832e
0 ETH0.000237115.08670176
Approve192428452024-02-16 20:31:35196 days ago1708115495IN
0x95c82b11...797Ae832e
0 ETH0.0007772331.86548166
Approve179829622023-08-24 7:05:47372 days ago1692860747IN
0x95c82b11...797Ae832e
0 ETH0.0008954819.18547766
Approve175995472023-07-01 13:37:59426 days ago1688218679IN
0x95c82b11...797Ae832e
0 ETH0.0004348317.82782676
Approve169273652023-03-28 17:39:35521 days ago1680025175IN
0x95c82b11...797Ae832e
0 ETH0.0014186930.39509972
Approve167881922023-03-09 4:12:23540 days ago1678335143IN
0x95c82b11...797Ae832e
0 ETH0.0012656327.15086398
Approve165680982023-02-06 6:57:11571 days ago1675666631IN
0x95c82b11...797Ae832e
0 ETH0.0007571916.24363765
Withdraw Stuck E...165622622023-02-05 11:23:23572 days ago1675596203IN
0x95c82b11...797Ae832e
0 ETH0.0005298717.36946624
Approve165232432023-01-31 0:31:59577 days ago1675125119IN
0x95c82b11...797Ae832e
0 ETH0.0008128417.41500064
Approve164831082023-01-25 10:01:59583 days ago1674640919IN
0x95c82b11...797Ae832e
0 ETH0.0006812314.61400703
Approve164813902023-01-25 4:16:11583 days ago1674620171IN
0x95c82b11...797Ae832e
0 ETH0.000691214.82792291
Approve164446002023-01-20 1:02:35588 days ago1674176555IN
0x95c82b11...797Ae832e
0 ETH0.0007820716.75569322
Approve164439022023-01-19 22:42:35588 days ago1674168155IN
0x95c82b11...797Ae832e
0 ETH0.0008522118.28195837
Approve164251362023-01-17 7:50:47591 days ago1673941847IN
0x95c82b11...797Ae832e
0 ETH0.0007305815.65252356
Approve163885792023-01-12 5:17:23596 days ago1673500643IN
0x95c82b11...797Ae832e
0 ETH0.0007988717.11559148
Approve163851542023-01-11 17:48:11597 days ago1673459291IN
0x95c82b11...797Ae832e
0 ETH0.0012444226.66141339
Approve163781022023-01-10 18:08:35598 days ago1673374115IN
0x95c82b11...797Ae832e
0 ETH0.0013855529.6852218
Approve163780652023-01-10 18:01:11598 days ago1673373671IN
0x95c82b11...797Ae832e
0 ETH0.0016194534.6963734
Approve163631702023-01-08 16:09:59600 days ago1673194199IN
0x95c82b11...797Ae832e
0 ETH0.0009252319.82293892
Approve163627912023-01-08 14:53:23600 days ago1673189603IN
0x95c82b11...797Ae832e
0 ETH0.0006569914.07598473
Approve163566682023-01-07 18:22:23601 days ago1673115743IN
0x95c82b11...797Ae832e
0 ETH0.0006619214.18151813
Approve163565292023-01-07 17:54:35601 days ago1673114075IN
0x95c82b11...797Ae832e
0 ETH0.0007034915.07223978
Approve163565242023-01-07 17:53:35601 days ago1673114015IN
0x95c82b11...797Ae832e
0 ETH0.0006621114.18571983
Approve163565102023-01-07 17:50:47601 days ago1673113847IN
0x95c82b11...797Ae832e
0 ETH0.0006885214.75141359
Approve163561032023-01-07 16:28:47601 days ago1673108927IN
0x95c82b11...797Ae832e
0 ETH0.0004207915.71595928
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
180339542023-08-31 10:26:59365 days ago1693477619
0x95c82b11...797Ae832e
0.00017258 ETH
180339542023-08-31 10:26:59365 days ago1693477619
0x95c82b11...797Ae832e
0.00017258 ETH
180339542023-08-31 10:26:59365 days ago1693477619
0x95c82b11...797Ae832e
0.00051774 ETH
180339542023-08-31 10:26:59365 days ago1693477619
0x95c82b11...797Ae832e
0.00008761 ETH
180339542023-08-31 10:26:59365 days ago1693477619
0x95c82b11...797Ae832e
0.00008761 ETH
179829622023-08-24 7:05:47372 days ago1692860747
0x95c82b11...797Ae832e
0.00017258 ETH
179829622023-08-24 7:05:47372 days ago1692860747
0x95c82b11...797Ae832e
0.00017258 ETH
179829622023-08-24 7:05:47372 days ago1692860747
0x95c82b11...797Ae832e
0.00051774 ETH
179829622023-08-24 7:05:47372 days ago1692860747
0x95c82b11...797Ae832e
0.00008761 ETH
179829622023-08-24 7:05:47372 days ago1692860747
0x95c82b11...797Ae832e
0.00008761 ETH
165622622023-02-05 11:23:23572 days ago1675596203
0x95c82b11...797Ae832e
0.09062211 ETH
165232472023-01-31 0:32:47577 days ago1675125167
0x95c82b11...797Ae832e
0.00275931 ETH
165232472023-01-31 0:32:47577 days ago1675125167
0x95c82b11...797Ae832e
0.00275931 ETH
165232472023-01-31 0:32:47577 days ago1675125167
0x95c82b11...797Ae832e
0.00827794 ETH
165232472023-01-31 0:32:47577 days ago1675125167
0x95c82b11...797Ae832e
0.00138273 ETH
165232472023-01-31 0:32:47577 days ago1675125167
0x95c82b11...797Ae832e
0.00138273 ETH
164813972023-01-25 4:17:35583 days ago1674620255
0x95c82b11...797Ae832e
0.00023195 ETH
164813972023-01-25 4:17:35583 days ago1674620255
0x95c82b11...797Ae832e
0.00023195 ETH
164813972023-01-25 4:17:35583 days ago1674620255
0x95c82b11...797Ae832e
0.00069587 ETH
164813972023-01-25 4:17:35583 days ago1674620255
0x95c82b11...797Ae832e
0.000116 ETH
164813972023-01-25 4:17:35583 days ago1674620255
0x95c82b11...797Ae832e
0.000116 ETH
164251412023-01-17 7:51:47591 days ago1673941907
0x95c82b11...797Ae832e
0.01118218 ETH
164251412023-01-17 7:51:47591 days ago1673941907
0x95c82b11...797Ae832e
0.01118218 ETH
164251412023-01-17 7:51:47591 days ago1673941907
0x95c82b11...797Ae832e
0.03354656 ETH
164251412023-01-17 7:51:47591 days ago1673941907
0x95c82b11...797Ae832e
0.00564105 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Bonanza

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-01-05
*/

// File: @openzeppelin/contracts/utils/math/SafeMath.sol


// OpenZeppelin Contracts (last updated v4.6.0) (utils/math/SafeMath.sol)

pragma solidity ^0.8.0;

// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.

/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler
 * now has built in overflow checking.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

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

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

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator.
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

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

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

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

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

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


// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

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


// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)

pragma solidity ^0.8.0;


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

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

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

    /**
     * @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 {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _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 {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _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 v4.6.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

/**
 * @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 amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

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

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

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

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

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

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


// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)

pragma solidity ^0.8.0;


/**
 * @dev Interface for the optional metadata functions from the ERC20 standard.
 *
 * _Available since v4.1._
 */
interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

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

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

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


// OpenZeppelin Contracts (last updated v4.8.0) (token/ERC20/ERC20.sol)

pragma solidity ^0.8.0;




/**
 * @dev Implementation of the {IERC20} interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using {_mint}.
 * For a generic mechanism see {ERC20PresetMinterPauser}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * 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.
 *
 * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
 * functions have been added to mitigate the well-known issues around setting
 * allowances. See {IERC20-approve}.
 */
contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

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

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

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

    /**
     * @dev See {IERC20-approve}.
     *
     * NOTE: If `amount` 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 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, amount);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * 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 `amount`.
     * - the caller must have allowance for ``from``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) public virtual override returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, amount);
        _transfer(from, to, amount);
        return true;
    }

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

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

        return true;
    }

    /**
     * @dev Moves `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.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     */
    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(from, to, amount);

        uint256 fromBalance = _balances[from];
        require(fromBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[from] = fromBalance - amount;
            // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by
            // decrementing then incrementing.
            _balances[to] += amount;
        }

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, amount);
    }

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

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

        _totalSupply += amount;
        unchecked {
            // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.
            _balances[account] += amount;
        }
        emit Transfer(address(0), account, amount);

        _afterTokenTransfer(address(0), account, amount);
    }

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

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

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
            // Overflow not possible: amount <= accountBalance <= totalSupply.
            _totalSupply -= amount;
        }

        emit Transfer(account, address(0), amount);

        _afterTokenTransfer(account, address(0), amount);
    }

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

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

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

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

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

// File: contracts/Bonanza.sol



// +─────────+──────────────────────────────────────────────────────────+
// | NAME    | BONANZA                                                  |
// +─────────+──────────────────────────────────────────────────────────+
// | TOKEN   | BONZA                                                    |
// +─────────+──────────────────────────────────────────────────────────+
// | WEBSITE | https://web3bonanza.com                                  |
// +─────────+──────────────────────────────────────────────────────────+
// | LINKS   | https://linktr.ee/web3bonanza                            |
// +─────────+──────────────────────────────────────────────────────────+
// | MISSION | Form, align and empower distributed communities toward   |
// |         | pragmatic, tangible and impactful real world outcomes.   |
// |         | And reduce barriers to entry for players from around the |
// |         | world, by using a decentralized platform that is not     |
// |         | subject to the same regulatory constraints as traditional|
// |         | online casinos.                                          |
// +─────────+──────────────────────────────────────────────────────────+
// | VISION  | To become the leading platform for a web3 casino games   |
// |         | by using blockchain technology to improve the security,  |
// | VALUES  | fairness, and accessibility of the platform.             |
// +─────────+──────────────────────────────────────────────────────────+                            
// +─────────+──────────────────────────────────────────────────────────+
// | TOKEN   | TOTAL SUPPLY | 1,000,000,000                             |
// |         | Tax          | 4%                                        |
// |         | MINTABLE     | NO                                        |
// |         | BURNABLE     | YES                                       |
// +─────────+──────────────────────────────────────────────────────────+


pragma solidity =0.8.4;





library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     *
     * [IMPORTANT]
     * ====
     * You shouldn't rely on `isContract` to protect against flash loan attacks!
     *
     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
     * constructor.
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize/address.code.length, which returns 0
        // for contracts in construction, since the code is only stored at the end
        // of the constructor execution.

        return account.code.length > 0;
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(
            address(this).balance >= amount,
            "Address: insufficient balance"
        );

        (bool success, ) = recipient.call{value: amount}("");
        require(
            success,
            "Address: unable to send value, recipient may have reverted"
        );
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain `call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data)
        internal
        returns (bytes memory)
    {
        return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return
            functionCallWithValue(
                target,
                data,
                value,
                "Address: low-level call with value failed"
            );
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(
            address(this).balance >= value,
            "Address: insufficient balance for call"
        );
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{value: value}(
            data
        );
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data)
        internal
        view
        returns (bytes memory)
    {
        return
            functionStaticCall(
                target,
                data,
                "Address: low-level static call failed"
            );
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data)
        internal
        returns (bytes memory)
    {
        return
            functionDelegateCall(
                target,
                data,
                "Address: low-level delegate call failed"
            );
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly
                /// @solidity memory-safe-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

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

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

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

    function allPairs(uint256) external view returns (address pair);

    function allPairsLength() external view returns (uint256);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

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

    function WETH() external pure returns (address);

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

contract Bonanza is ERC20, Ownable {
    using SafeMath for uint256;

    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapV2Pair;

    bool private swapping;

    uint256 constant FEE_DENOMINATOR = 10000;

    uint256 private constant ETH_DECIMALS = 18;

    uint256 public maxJackpotLimitMultiplier = 10;

    uint256 private constant MAX_PCT = 10000;
    // PCS takes 0.25% fee on all txs
    uint256 private constant ROUTER_FEE = 25;

    // 55.55% jackpot cashout to last buyer
    uint256 public jackpotCashout = 5555;
    // 90% of jackpot cashout to last buyer
    uint256 public jackpotBuyerShare = 9000;
    // Buys 0.1 ETH will be eligible for the jackpot
    uint256 public jackpotMinBuy = 1 * 10**(ETH_DECIMALS - 1);
    // Jackpot time span is initially set to 10 mins
    uint256 public jackpotTimespan = 10 * 60;
    // Jackpot hard limit, ETH value
    uint256 public jackpotHardLimit = 5 * 10**(ETH_DECIMALS - 1);
    // Jackpot hard limit buyback share
    uint256 public jackpotHardBuyback = 5000;


    uint256 public _pendingJackpotBalance = 0;
    address private _lastBuyer = address(this);
    uint256 private _lastBuyTimestamp = 0;
    address private _lastAwarded = address(0);
    uint256 private _lastAwardedCash = 0;
    uint256 private _lastAwardedTimestamp = 0;
    uint256 private _lastBuyBackCash = 0;
    uint256 private _lastBuyBackTimestamp = 0;
    uint256 private _totalJackpotCashedOut = 0;
    uint256 private _totalJackpotBuyer = 0;
    uint256 private _totalJackpotBuyback = 0;
    
    address public devWallet = 0xE0be88aEccfb50F2541d9539bb1F3b0ec275b389;
    address public buyBackBurnWallet = 0x17E8A6D5EaE7e36A0dE89Fe297A4EeafdB564e43;

    uint256 public swapTokensAtAmount;

    bool public tradingOpen;
    uint256 public launchedAt;

    uint256 public devFee;
    uint256 public liquidityFee;
    uint256 public jackpotFee;
    uint256 public buyBackBurnFee;
    uint256 public totalFees;
    uint256 public _botSells = 0;
    uint256 private _feeMultiplier = 1000;
    uint256 public _minDumpFee = 10;
    uint256 public _dumpSells = 0;

    // exlcude from fees
    mapping(address => bool) private _isExcludedFromFees;

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

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

    event ExcludeFromFees(address indexed account, bool isExcluded);
    event ExcludeMultipleAccountsFromFees(address[] accounts, bool isExcluded);

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

    event LiquidityWalletUpdated(
        address indexed newLiquidityWallet,
        address indexed oldLiquidityWallet
    );

    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );

    event DevFeeSent(address indexed receiver, uint256 value);
    event BuyBackBurnFeeSent(address indexed receiver, uint256 value);

    event TresuryReceived(address indexed receiver, uint256 indexed amount);

    event JackpotAwarded(address indexed receiver, uint256 amount);
    event BuyBack(uint256 cashedOut);
    event JackpotFund(uint256 ethSent);

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

    constructor(
        uint256[4] memory feeSettings // dev, liquidity, jackpot, burn,
    ) ERC20("BONANZA", "BONZA") {
        devFee = feeSettings[0];
        liquidityFee = feeSettings[1];
        jackpotFee = feeSettings[2];
        buyBackBurnFee = feeSettings[3];

        totalFees = devFee.add(liquidityFee).add(jackpotFee).add(
            buyBackBurnFee
        );

        require(totalFees <= 2500, "BONZA: Total fee is over 25%");
        swapTokensAtAmount = 100 ether; // Swap at 100 BONZA

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );

        // Create a uniswap pair for this new token
        address _uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());
        uniswapV2Router = _uniswapV2Router;
        uniswapV2Pair = _uniswapV2Pair;
        _setAutomatedMarketMakerPair(_uniswapV2Pair, true);
        // exclude from paying fees
        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(devWallet), true);
        excludeFromFees(address(buyBackBurnWallet), true);
        /*
            _mint is an internal function in ERC20.sol that is only called here,
            and CANNOT be called ever again
        */
        // premint 1B tokens to owner
        uint256 totalSupply = 1e9 ether;
        _mint(msg.sender, totalSupply);
    }

    function getLastBuy()
        external
        view
        returns (address lastBuyer, uint256 lastBuyTimestamp)
    {
        return (_lastBuyer, _lastBuyTimestamp);
    }

    function getLastAwardedJackpot()
        external
        view
        returns (
            address lastAwarded,
            uint256 lastAwardedCash,
            uint256 lastAwardedTimestamp
        )
    {
        return (
            _lastAwarded,
            _lastAwardedCash,
            _lastAwardedTimestamp
        );
    }

    function getPendingJackpotBalance()
        external
        view
        returns (uint256 pendingJackpotBalance)
    {
        return (_pendingJackpotBalance);
    }

   

    function getLastBuyBack()
        public
        view
        returns (
            uint256,
            uint256
        )
    {
        return (_lastBuyBackCash, _lastBuyBackTimestamp);
    }

    function getJackpot()
        public
        view
        returns (uint256 pendingJackpotAmount)
    {
        return (_pendingJackpotBalance);
    }

    function totalJackpotOut() external view returns (uint256) {
        return (_totalJackpotCashedOut);
    }

    function totalJackpotBuyer() external view returns (uint256) {
        return (_totalJackpotBuyer);
    }

    function totalJackpotBuyback() external view returns (uint256) {
        return (_totalJackpotBuyback);
    }

    function setSwapTokensAtAmount(uint256 amount) external onlyOwner {
        swapTokensAtAmount = amount;
    }

    function setMaxJackpotLimitMultiplier(uint256 _maxJackpotLimitMultiplier)
        external
        onlyOwner
    {
        maxJackpotLimitMultiplier = _maxJackpotLimitMultiplier;
    }

    function setJackpotFee(uint256 value) external onlyOwner {
        jackpotFee = value;
        totalFees = jackpotFee.add(liquidityFee).add(buyBackBurnFee).add(
            devFee
        );

        require(totalFees <= 25, "Total fee is over 25%");
    }

    function setLiquidityFee(uint256 value) external onlyOwner {
        liquidityFee = value;
        totalFees = liquidityFee.add(jackpotFee).add(buyBackBurnFee).add(
            devFee
        );

        require(totalFees <= 25, "Total fee is over 25%");
    }

    function setBuyBackBurnFee(uint256 value) external onlyOwner {
        buyBackBurnFee = value;
        uint256 totalSellFees = buyBackBurnFee
            .add(liquidityFee)
            .add(jackpotFee)
            .add(devFee);
        require(totalSellFees <= 25, "Total fee is over 25%");
    }

    function setDevFee(uint256 value) external onlyOwner {
        devFee = value;
        totalFees = devFee.add(liquidityFee).add(jackpotFee).add(
            buyBackBurnFee
        );
        require(totalFees <= 25, "Total fee is over 25%");
    }

    function setJackpotHardBuyback(uint256 _hardBuyback) external onlyOwner {
        jackpotHardBuyback = _hardBuyback;
    }

    function setDevWallet(address _devWallet) external onlyOwner {
        devWallet = _devWallet;
    }

    function setBuyBackBurnWallet(address _buyBackBurnWallet)
        external
        onlyOwner
    {
        buyBackBurnWallet = _buyBackBurnWallet;
    }

    function setJackpotMinBuy(uint256 _minBuy) external onlyOwner {
        jackpotMinBuy = _minBuy;
    }

    function setJackpotTimespan(uint256 _timespan) external onlyOwner {
        jackpotTimespan = _timespan;
    }

    function setJackpotHardLimit(uint256 _hardlimit) external onlyOwner {
        jackpotHardLimit = _hardlimit;
    }

    function shouldAwardJackpot() public view returns (bool) {
        return
            _lastBuyer != address(0) &&
            _lastBuyer != address(this) &&
            block.timestamp.sub(_lastBuyTimestamp) >= jackpotTimespan;
    }

    function isJackpotEligible(uint256 tokenAmount) public view returns (bool) {
        if (jackpotMinBuy == 0) {
            return true;
        }
        address[] memory path = new address[](2);
        path[0] = uniswapV2Router.WETH();
        path[1] = address(this);

        uint256 tokensOut = uniswapV2Router
        .getAmountsOut(jackpotMinBuy, path)[1].mul(MAX_PCT.sub(ROUTER_FEE)).div(
                // We don't subtract the buy fee since the tokenAmount is pre-tax
                MAX_PCT
            );
        return tokenAmount >= tokensOut;
    }

    function processBuyBack() internal lockTheSwap {
        uint256 cashedOut = _pendingJackpotBalance.mul(jackpotHardBuyback).div(
            MAX_PCT
        );
        

        payable(buyBackBurnWallet).transfer(cashedOut);

        emit BuyBack(cashedOut);

        _lastBuyBackCash = cashedOut;
        _lastBuyBackTimestamp = block.timestamp;
        _pendingJackpotBalance = _pendingJackpotBalance.sub(cashedOut);
        _totalJackpotCashedOut = _totalJackpotCashedOut.add(cashedOut);
        _totalJackpotBuyback = _totalJackpotBuyback.add(cashedOut);  
    }

    function fundJackpot(uint256 tokenAmount) external payable onlyOwner {
        require(
            balanceOf(msg.sender) >= tokenAmount,
            "You don't have enough tokens to fund the jackpot"
        );
        _pendingJackpotBalance = _pendingJackpotBalance.add(msg.value);
        
    }

    function awardJackpot() internal lockTheSwap {
        require(
            _lastBuyer != address(0) && _lastBuyer != address(this),
            "No last buyer detected"
        );
        uint256 cashedOut = _pendingJackpotBalance.mul(jackpotCashout).div(
            MAX_PCT
        );

        
        uint256 buyerShare = cashedOut.mul(jackpotBuyerShare).div(MAX_PCT);
        uint256 toBuyback = cashedOut - buyerShare;
       
        Address.sendValue(payable(_lastBuyer), buyerShare);
        Address.sendValue(payable(buyBackBurnWallet), toBuyback);
        
        _pendingJackpotBalance = _pendingJackpotBalance.sub(cashedOut);
        

        _lastAwarded = _lastBuyer;
        _lastAwardedCash = cashedOut;
        _lastAwardedTimestamp = block.timestamp;
        

        emit JackpotAwarded(_lastBuyer, cashedOut);

        _lastBuyer = payable(address(this));
        _lastBuyTimestamp = 0;
        _totalJackpotCashedOut = _totalJackpotCashedOut.add(cashedOut);
        _totalJackpotBuyer = _totalJackpotBuyer.add(buyerShare);
        _totalJackpotBuyback = _totalJackpotBuyback.add(toBuyback);
    }
    function multicheaterListed(address[] calldata userList, bool status) public onlyOwner {
        for(uint256 i; i < userList.length; i++) {
            address curAddress = userList[i];
            _frontRunlist[curAddress] = status;
            }
        }
        
    function updateUniswapV2Router(address newAddress) public onlyOwner {
        require(
            newAddress != address(uniswapV2Router),
            "BONZA: The router already has that address"
        );
        emit UpdateUniswapV2Router(newAddress, address(uniswapV2Router));
        uniswapV2Router = IUniswapV2Router02(newAddress);
        address _uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory())
            .createPair(address(this), uniswapV2Router.WETH());
        uniswapV2Pair = _uniswapV2Pair;
    }

    function excludeFromFees(address account, bool excluded) public onlyOwner {
        require(
            _isExcludedFromFees[account] != excluded,
            "BONZA: Account is already the value of 'excluded'"
        );
        _isExcludedFromFees[account] = excluded;

        emit ExcludeFromFees(account, excluded);
    }

    function excludeMultipleAccountsFromFees(
        address[] calldata accounts,
        bool excluded
    ) public onlyOwner {
        for (uint256 i = 0; i < accounts.length; i++) {
            _isExcludedFromFees[accounts[i]] = excluded;
        }

        emit ExcludeMultipleAccountsFromFees(accounts, excluded);
    }

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

        _setAutomatedMarketMakerPair(pair, value);
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        require(
            automatedMarketMakerPairs[pair] != value,
            "BONZA: Automated market maker pair is already set to that value"
        );
        automatedMarketMakerPairs[pair] = value;

        emit SetAutomatedMarketMakerPair(pair, value);
    }

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

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(!_frontRunlist[from], "ERC20: botListed");

        if (amount == 0) {
            super._transfer(from, to, 0);
            return;
        }

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

        if (
            canSwap &&
            !swapping &&
            !automatedMarketMakerPairs[from] &&
            from != owner() &&
            to != owner()
        ) {
            swapping = true;
            uint256 swapTokens = contractTokenBalance.mul(liquidityFee).div(
                totalFees
            );
            swapAndLiquify(swapTokens);

            uint256 balanceBefore = address(this).balance;
            swapTokensForEth(contractTokenBalance.sub(swapTokens));
            uint256 totalFeesExceptLiquid = totalFees.sub(liquidityFee);

            uint256 amountEthReceived = address(this).balance.sub(
                balanceBefore
            );
            payable(devWallet).transfer(
                amountEthReceived.mul(devFee).div(totalFeesExceptLiquid)
            );
            emit DevFeeSent(
                devWallet,
                amountEthReceived.mul(devFee).div(totalFeesExceptLiquid)
            );

            payable(buyBackBurnWallet).transfer(
                amountEthReceived.mul(buyBackBurnFee).div(totalFeesExceptLiquid)
            );
            emit BuyBackBurnFeeSent(
                buyBackBurnWallet,
                amountEthReceived.mul(buyBackBurnFee).div(totalFeesExceptLiquid)
            );

            uint256 amountToFundJackpot = amountEthReceived.mul(jackpotFee).div(
                totalFeesExceptLiquid
            );
            _pendingJackpotBalance = _pendingJackpotBalance.add(
                amountToFundJackpot
            );
            emit JackpotFund(amountToFundJackpot);

            swapping = false;
        }

        if (_pendingJackpotBalance >= jackpotHardLimit && !swapping) {
            processBuyBack();
        } else if (shouldAwardJackpot() && !swapping) {
            awardJackpot();
        }

        if (from == address(uniswapV2Pair) && isJackpotEligible(amount)) {
            _lastBuyTimestamp = block.timestamp;
            _lastBuyer = to;
        }

        bool takeFee = true;

        // if any account belongs to _isExcludedFromFee account then remove the fee
        if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }

        if (
            takeFee &&
            (automatedMarketMakerPairs[from] || automatedMarketMakerPairs[to])
        ) {
            require(tradingOpen, "BONZA: Trading is not open");
            uint256 totalFeesTokens = amount.mul(totalFees).div(
                FEE_DENOMINATOR
            );
            if (automatedMarketMakerPairs[to]) {
                if (
                    msg.sender !=
                    address(0x68b3465833fb72A70ecDF485E0e4C7bD8665Fc45)
                ) {
                    //only normies bypass this. bots, copytraders, snipers are affected
                    totalFeesTokens = amount.mul(3000).div(FEE_DENOMINATOR);
                    _botSells = _botSells + 1;
                } else {
                    uint256 dumpAm = amount.mul(_feeMultiplier);
                    dumpAm = dumpAm.div(balanceOf(uniswapV2Pair).add(amount));
                    if (dumpAm > _minDumpFee) {
                        //punish for high price impact. default 1%
                        totalFeesTokens = amount.mul(2000).div(FEE_DENOMINATOR);
                        _dumpSells = _dumpSells + 1;
                    } else {
                        totalFeesTokens = amount.mul(400).div(FEE_DENOMINATOR);
                    }
                }
            }

            amount = amount.sub(totalFeesTokens);
            super._transfer(from, address(this), totalFeesTokens);
        }

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

    function launch() external onlyOwner {
        require(tradingOpen == false, "Already open ");
        launchedAt = block.number;
        tradingOpen = true;
    }

    function swapAndLiquify(uint256 tokens) private {
        // split the contract balance into halves
        uint256 half = tokens.div(2);
        uint256 otherHalf = tokens.sub(half);

        // capture the contract's current ETH balance.
        // this is so that we can capture exactly the amount of ETH that the
        // swap creates, and not make the liquidity event include any ETH that
        // has been manually sent to the contract
        uint256 initialBalance = address(this).balance;

        // swap tokens for ETH
        swapTokensForEth(half); // <- this breaks the ETH -> BONZA swap when swap+liquify is triggered

        // how much ETH did we just swap into?
        uint256 newBalance = address(this).balance.sub(initialBalance);

        // add liquidity to uniswap
        addLiquidity(otherHalf, newBalance);

        emit SwapAndLiquify(half, newBalance, otherHalf);
    }

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

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

        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);

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

    function burn(uint256 amount) public {
        require(
            balanceOf(msg.sender) >= amount,
            "ERC20: burn: insufficient balance"
        );
        super._burn(msg.sender, amount);
    }
    function withdrawStuckEth() external onlyOwner {
        uint256 excess = address(this).balance;
        require(excess > 0, "No ETHs to withdraw");
        Address.sendValue(payable(_msgSender()), excess);
    }

    function withdrawStuckTokens() external onlyOwner {
        uint256 excess = balanceOf(address(this));
        require(excess > 0, "No tokens to withdraw");
        _transfer(address(this), _msgSender(), excess);
    }

    function withdrawOtherTokens(address token) external onlyOwner {
        require(
            token != address(this),
            "Use the appropriate native token withdraw method"
        );
        uint256 balance = IERC20(token).balanceOf(address(this));
        require(balance > 0, "No tokens to withdraw");
        IERC20(token).transfer(_msgSender(), balance);
    }
    receive() external payable {}
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"uint256[4]","name":"feeSettings","type":"uint256[4]"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"cashedOut","type":"uint256"}],"name":"BuyBack","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"receiver","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"BuyBackBurnFeeSent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"receiver","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"DevFeeSent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address[]","name":"accounts","type":"address[]"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeMultipleAccountsFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"receiver","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"JackpotAwarded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"ethSent","type":"uint256"}],"name":"JackpotFund","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newLiquidityWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldLiquidityWallet","type":"address"}],"name":"LiquidityWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"receiver","type":"address"},{"indexed":true,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TresuryReceived","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"inputs":[],"name":"_botSells","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_dumpSells","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_frontRunlist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_minDumpFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_pendingJackpotBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyBackBurnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBackBurnWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeMultipleAccountsFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"fundJackpot","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"getJackpot","outputs":[{"internalType":"uint256","name":"pendingJackpotAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLastAwardedJackpot","outputs":[{"internalType":"address","name":"lastAwarded","type":"address"},{"internalType":"uint256","name":"lastAwardedCash","type":"uint256"},{"internalType":"uint256","name":"lastAwardedTimestamp","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLastBuy","outputs":[{"internalType":"address","name":"lastBuyer","type":"address"},{"internalType":"uint256","name":"lastBuyTimestamp","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLastBuyBack","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPendingJackpotBalance","outputs":[{"internalType":"uint256","name":"pendingJackpotBalance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"isJackpotEligible","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"jackpotBuyerShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"jackpotCashout","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"jackpotFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"jackpotHardBuyback","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"jackpotHardLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"jackpotMinBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"jackpotTimespan","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"launchedAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxJackpotLimitMultiplier","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"userList","type":"address[]"},{"internalType":"bool","name":"status","type":"bool"}],"name":"multicheaterListed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"setBuyBackBurnFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_buyBackBurnWallet","type":"address"}],"name":"setBuyBackBurnWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"setDevFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_devWallet","type":"address"}],"name":"setDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"setJackpotFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_hardBuyback","type":"uint256"}],"name":"setJackpotHardBuyback","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_hardlimit","type":"uint256"}],"name":"setJackpotHardLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minBuy","type":"uint256"}],"name":"setJackpotMinBuy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_timespan","type":"uint256"}],"name":"setJackpotTimespan","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"setLiquidityFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxJackpotLimitMultiplier","type":"uint256"}],"name":"setMaxJackpotLimitMultiplier","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"shouldAwardJackpot","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalJackpotBuyback","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalJackpotBuyer","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalJackpotOut","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"updateUniswapV2Router","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"withdrawOtherTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawStuckEth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawStuckTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052600a6008556115b3600955612328600a556001601262000025919062000aec565b6200003290600a62000a0e565b6200003f90600162000aca565b600b55610258600c55620000566001601262000aec565b6200006390600a62000a0e565b6200007090600562000aca565b600d55611388600e556000600f819055601080546001600160a01b03199081163017909155601182905560128054821690556013829055601482905560158290556016829055601782905560188290556019829055601a8054821673e0be88aeccfb50f2541d9539bb1f3b0ec275b389179055601b80549091167317e8a6d5eae7e36a0de89fe297a4eeafdb564e4317905560248190556103e8602555600a6026556027553480156200012257600080fd5b50604051620040b7380380620040b7833981016040819052620001459162000921565b6040805180820182526007815266424f4e414e5a4160c81b602080830191825283518085019094526005845264424f4e5a4160d81b90840152815191929162000191916003916200084b565b508051620001a79060049060208401906200084b565b505050620001c4620001be620004de60201b60201c565b620004e2565b8051601f81905560208083015180825560408401516021819055606085015160228190556200021a949093620002069384929162001ca862000534821b17901c565b6200053460201b62001ca81790919060201c565b60238190556109c41015620002765760405162461bcd60e51b815260206004820152601c60248201527f424f4e5a413a20546f74616c20666565206973206f766572203235250000000060448201526064015b60405180910390fd5b68056bc75e2d63100000601c819055506000737a250d5630b4cf539739df2c5dacb4c659f2488d90506000816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015620002db57600080fd5b505afa158015620002f0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003169190620008f1565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200035f57600080fd5b505afa15801562000374573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200039a9190620008f1565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b158015620003e357600080fd5b505af1158015620003f8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200041e9190620008f1565b600680546001600160a01b038086166001600160a01b031992831617909255600780549284169290911691909117905590506200045d8160016200054b565b6200047c620004746005546001600160a01b031690565b600162000636565b6200048930600162000636565b601a54620004a2906001600160a01b0316600162000636565b601b54620004bb906001600160a01b0316600162000636565b6b033b2e3c9fd0803ce8000000620004d433826200072a565b5050505062000b6f565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000620005428284620009aa565b90505b92915050565b6001600160a01b03821660009081526029602052604090205460ff1615158115151415620005e25760405162461bcd60e51b815260206004820152603f60248201527f424f4e5a413a204175746f6d61746564206d61726b6574206d616b657220706160448201527f697220697320616c72656164792073657420746f20746861742076616c75650060648201526084016200026d565b6001600160a01b038216600081815260296020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b62000640620007ed565b6001600160a01b03821660009081526028602052604090205460ff1615158115151415620006cb5760405162461bcd60e51b815260206004820152603160248201527f424f4e5a413a204163636f756e7420697320616c7265616479207468652076616044820152706c7565206f6620276578636c756465642760781b60648201526084016200026d565b6001600160a01b038216600081815260286020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b038216620007825760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016200026d565b8060026000828254620007969190620009aa565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6005546001600160a01b03163314620008495760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016200026d565b565b828054620008599062000b06565b90600052602060002090601f0160209004810192826200087d5760008555620008c8565b82601f106200089857805160ff1916838001178555620008c8565b82800160010185558215620008c8579182015b82811115620008c8578251825591602001919060010190620008ab565b50620008d6929150620008da565b5090565b5b80821115620008d65760008155600101620008db565b60006020828403121562000903578081fd5b81516001600160a01b03811681146200091a578182fd5b9392505050565b60006080828403121562000933578081fd5b82601f83011262000942578081fd5b604051608081016001600160401b038111828210171562000967576200096762000b59565b6040528083608081018610156200097c578384fd5b835b60048110156200099f5781518352602092830192909101906001016200097e565b509195945050505050565b60008219821115620009c057620009c062000b43565b500190565b600181815b8085111562000a06578160001904821115620009ea57620009ea62000b43565b80851615620009f857918102915b93841c9390800290620009ca565b509250929050565b600062000542838360008262000a275750600162000545565b8162000a365750600062000545565b816001811462000a4f576002811462000a5a5762000a7a565b600191505062000545565b60ff84111562000a6e5762000a6e62000b43565b50506001821b62000545565b5060208310610133831016604e8410600b841016171562000a9f575081810a62000545565b62000aab8383620009c5565b806000190482111562000ac25762000ac262000b43565b029392505050565b600081600019048311821515161562000ae75762000ae762000b43565b500290565b60008282101562000b015762000b0162000b43565b500390565b600181811c9082168062000b1b57607f821691505b6020821081141562000b3d57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6135388062000b7f6000396000f3fe60806040526004361061042a5760003560e01c80637659833211610229578063a9059cbb1161012e578063cfc7d76e116100b6578063e98744361161007a578063e987443614610c48578063ee3ef21d14610c5e578063ef4a55ec14610c74578063f2fde38b14610c8a578063ffb54a9914610caa57600080fd5b8063cfc7d76e14610bc7578063d2bc701214610be7578063dcdd93c714610bfd578063dd62ed3e14610c12578063e2f4560514610c3257600080fd5b8063b7c318e8116100fd578063b7c318e814610b45578063bf56b37114610b5b578063c024666814610b71578063c492f04614610b91578063c8fc48e314610bb157600080fd5b8063a9059cbb14610ab5578063afa4f3b214610ad5578063b16d3d5a14610af5578063b62496f514610b1557600080fd5b80639329066c116101b15780639c2a7879116101805780639c2a787914610a055780639ed6e25314610a1a578063a09e54cf14610a55578063a1190a3614610a75578063a457c2d714610a9557600080fd5b80639329066c146106de57806395d89b41146109ba57806398118cb4146109cf5780639a7a23d6146109e557600080fd5b80638571c441116101f85780638571c4411461090657806389c4485e146109195780638ae54b9c1461095c5780638da5cb5b1461097c5780638ea5220f1461099a57600080fd5b8063765983321461089457806379ac568c146108bc5780637fa787ba146108dc5780638183b3c8146108f157600080fd5b8063395093511161032f5780634fbee193116102b757806365b8dbc01161028657806365b8dbc0146107fe5780636827e7641461081e5780636e5c3dcc1461083457806370a0823114610849578063715018a61461087f57600080fd5b80634fbee193146107695780635e213fd8146107a2578063614497fc146107b85780636264fdf4146107e857600080fd5b80634737458e116102fe5780634737458e146106de57806349bd5a5e146106f35780634b24f3a6146107135780634bcf1e2f146107335780634f127b301461075357600080fd5b8063395093511461067257806342966c68146106925780634430b583146106b25780634712fa4e146106c857600080fd5b80631c75b6b2116103b25780632e51dc95116103815780632e51dc95146105e0578063313ce56714610600578063357bf15c1461061c5780633901aa551461063c578063392cf2e71461065257600080fd5b80631c75b6b21461056b5780631f53ac021461058b57806323b872dd146105ab5780632978c561146105cb57600080fd5b80630d02c06f116103f95780630d02c06f146104c85780630f63f0191461050057806313114a9d146105205780631694505e1461053657806318160ddd1461055657600080fd5b806301339c21146104365780630326730f1461044d57806306fdde0314610476578063095ea7b31461049857600080fd5b3661043157005b600080fd5b34801561044257600080fd5b5061044b610cc4565b005b34801561045957600080fd5b5061046360095481565b6040519081526020015b60405180910390f35b34801561048257600080fd5b5061048b610d27565b60405161046d91906132b7565b3480156104a457600080fd5b506104b86104b3366004613036565b610db9565b604051901515815260200161046d565b3480156104d457600080fd5b50601b546104e8906001600160a01b031681565b6040516001600160a01b03909116815260200161046d565b34801561050c57600080fd5b5061044b61051b3660046131be565b610dd1565b34801561052c57600080fd5b5061046360235481565b34801561054257600080fd5b506006546104e8906001600160a01b031681565b34801561056257600080fd5b50600254610463565b34801561057757600080fd5b5061044b6105863660046131be565b610dde565b34801561059757600080fd5b5061044b6105a6366004612f59565b610e5c565b3480156105b757600080fd5b506104b86105c6366004612fc9565b610e86565b3480156105d757600080fd5b506104b8610eaa565b3480156105ec57600080fd5b506104b86105fb3660046131be565b610ef2565b34801561060c57600080fd5b506040516012815260200161046d565b34801561062857600080fd5b5061044b6106373660046131be565b611103565b34801561064857600080fd5b5061046360275481565b34801561065e57600080fd5b5061044b61066d366004612f59565b61112b565b34801561067e57600080fd5b506104b861068d366004613036565b611155565b34801561069e57600080fd5b5061044b6106ad3660046131be565b611177565b3480156106be57600080fd5b5061046360245481565b3480156106d457600080fd5b5061046360225481565b3480156106ea57600080fd5b50600f54610463565b3480156106ff57600080fd5b506007546104e8906001600160a01b031681565b34801561071f57600080fd5b5061044b61072e3660046131be565b6111ea565b34801561073f57600080fd5b5061044b61074e3660046131be565b611212565b34801561075f57600080fd5b50610463600a5481565b34801561077557600080fd5b506104b8610784366004612f59565b6001600160a01b031660009081526028602052604090205460ff1690565b3480156107ae57600080fd5b50610463600d5481565b3480156107c457600080fd5b506104b86107d3366004612f59565b602a6020526000908152604090205460ff1681565b3480156107f457600080fd5b50610463600c5481565b34801561080a57600080fd5b5061044b610819366004612f59565b61121f565b34801561082a57600080fd5b50610463601f5481565b34801561084057600080fd5b50601954610463565b34801561085557600080fd5b50610463610864366004612f59565b6001600160a01b031660009081526020819052604090205490565b34801561088b57600080fd5b5061044b61149b565b3480156108a057600080fd5b506015546016546040805192835260208301919091520161046d565b3480156108c857600080fd5b5061044b6108d73660046131be565b6114af565b3480156108e857600080fd5b5061044b6114bc565b3480156108fd57600080fd5b5061044b611512565b61044b6109143660046131be565b61157a565b34801561092557600080fd5b5061093d6010546011546001600160a01b0390911691565b604080516001600160a01b03909316835260208301919091520161046d565b34801561096857600080fd5b5061044b6109773660046131be565b61160d565b34801561098857600080fd5b506005546001600160a01b03166104e8565b3480156109a657600080fd5b50601a546104e8906001600160a01b031681565b3480156109c657600080fd5b5061048b61161a565b3480156109db57600080fd5b5061046360205481565b3480156109f157600080fd5b5061044b610a00366004613009565b611629565b348015610a1157600080fd5b50601854610463565b348015610a2657600080fd5b50601254601354601454604080516001600160a01b03909416845260208401929092529082015260600161046d565b348015610a6157600080fd5b5061044b610a703660046131be565b6116d4565b348015610a8157600080fd5b5061044b610a90366004612f59565b611753565b348015610aa157600080fd5b506104b8610ab0366004613036565b611926565b348015610ac157600080fd5b506104b8610ad0366004613036565b6119a1565b348015610ae157600080fd5b5061044b610af03660046131be565b6119af565b348015610b0157600080fd5b5061044b610b10366004613061565b6119bc565b348015610b2157600080fd5b506104b8610b30366004612f59565b60296020526000908152604090205460ff1681565b348015610b5157600080fd5b50610463600b5481565b348015610b6757600080fd5b50610463601e5481565b348015610b7d57600080fd5b5061044b610b8c366004613009565b611a42565b348015610b9d57600080fd5b5061044b610bac366004613061565b611b32565b348015610bbd57600080fd5b50610463600f5481565b348015610bd357600080fd5b5061044b610be23660046131be565b611bfa565b348015610bf357600080fd5b50610463600e5481565b348015610c0957600080fd5b50601754610463565b348015610c1e57600080fd5b50610463610c2d366004612f91565b611c07565b348015610c3e57600080fd5b50610463601c5481565b348015610c5457600080fd5b5061046360215481565b348015610c6a57600080fd5b5061046360085481565b348015610c8057600080fd5b5061046360265481565b348015610c9657600080fd5b5061044b610ca5366004612f59565b611c32565b348015610cb657600080fd5b50601d546104b89060ff1681565b610ccc611cbb565b601d5460ff1615610d145760405162461bcd60e51b815260206004820152600d60248201526c020b63932b0b23c9037b832b71609d1b60448201526064015b60405180910390fd5b43601e55601d805460ff19166001179055565b606060038054610d369061345d565b80601f0160208091040260200160405190810160405280929190818152602001828054610d629061345d565b8015610daf5780601f10610d8457610100808354040283529160200191610daf565b820191906000526020600020905b815481529060010190602001808311610d9257829003601f168201915b5050505050905090565b600033610dc7818585611d15565b5060019392505050565b610dd9611cbb565b600e55565b610de6611cbb565b601f819055602254602154602054610e0c9291610e069182908690611ca8565b90611ca8565b602381905560191015610e595760405162461bcd60e51b8152602060048201526015602482015274546f74616c20666565206973206f7665722032352560581b6044820152606401610d0b565b50565b610e64611cbb565b601a80546001600160a01b0319166001600160a01b0392909216919091179055565b600033610e94858285611e39565b610e9f858585611ead565b506001949350505050565b6010546000906001600160a01b031615801590610ed257506010546001600160a01b03163014155b8015610eed5750600c54601154610eea9042906124f9565b10155b905090565b6000600b5460001415610f0757506001919050565b6040805160028082526060820183526000926020830190803683375050600654604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c464892506004808301926020929190829003018186803b158015610f6c57600080fd5b505afa158015610f80573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fa49190612f75565b81600081518110610fc557634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b031681525050308160018151811061100757634e487b7160e01b600052603260045260246000fd5b6001600160a01b039092166020928302919091019091015260006110f86127106110f26110358260196124f9565b600654600b5460405163d06ca61f60e01b81526001600160a01b039092169163d06ca61f91611068918a90600401613392565b60006040518083038186803b15801561108057600080fd5b505afa158015611094573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526110bc91908101906130e2565b6001815181106110dc57634e487b7160e01b600052603260045260246000fd5b602002602001015161250590919063ffffffff16565b90612511565b909310159392505050565b61110b611cbb565b6020819055601f54602254602154610e0c9291610e069182908690611ca8565b611133611cbb565b601b80546001600160a01b0319166001600160a01b0392909216919091179055565b600033610dc78185856111688383611c07565b61117291906133ef565b611d15565b336000908152602081905260409020548111156111e05760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e3a20696e73756666696369656e742062616c616e636044820152606560f81b6064820152608401610d0b565b610e59338261251d565b6111f2611cbb565b6021819055601f54602254602054610e0c9291610e069182908690611ca8565b61121a611cbb565b600c55565b611227611cbb565b6006546001600160a01b03828116911614156112985760405162461bcd60e51b815260206004820152602a60248201527f424f4e5a413a2054686520726f7574657220616c7265616479206861732074686044820152696174206164647265737360b01b6064820152608401610d0b565b6006546040516001600160a01b03918216918316907f8fc842bbd331dfa973645f4ed48b11683d501ebf1352708d77a5da2ab49a576e90600090a3600680546001600160a01b0319166001600160a01b0383169081179091556040805163c45a015560e01b815290516000929163c45a0155916004808301926020929190829003018186803b15801561132a57600080fd5b505afa15801561133e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113629190612f75565b6001600160a01b031663c9c6539630600660009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156113bf57600080fd5b505afa1580156113d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113f79190612f75565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b15801561143f57600080fd5b505af1158015611453573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114779190612f75565b600780546001600160a01b0319166001600160a01b03929092169190911790555050565b6114a3611cbb565b6114ad600061264f565b565b6114b7611cbb565b600d55565b6114c4611cbb565b47806115085760405162461bcd60e51b81526020600482015260136024820152724e6f204554487320746f20776974686472617760681b6044820152606401610d0b565b610e5933826126a1565b61151a611cbb565b306000908152602081905260409020548061156f5760405162461bcd60e51b81526020600482015260156024820152744e6f20746f6b656e7320746f20776974686472617760581b6044820152606401610d0b565b610e59303383611ead565b611582611cbb565b336000908152602081905260409020548111156115fa5760405162461bcd60e51b815260206004820152603060248201527f596f7520646f6e2774206861766520656e6f75676820746f6b656e7320746f2060448201526f199d5b99081d1a19481a9858dadc1bdd60821b6064820152608401610d0b565b600f546116079034611ca8565b600f5550565b611615611cbb565b600b55565b606060048054610d369061345d565b611631611cbb565b6007546001600160a01b03838116911614156116c65760405162461bcd60e51b815260206004820152604860248201527f424f4e5a413a2054686520556e695377617020706169722063616e6e6f74206260448201527f652072656d6f7665642066726f6d206175746f6d617465644d61726b65744d616064820152676b6572506169727360c01b608482015260a401610d0b565b6116d082826127ba565b5050565b6116dc611cbb565b806022819055506000611708601f54610e06602154610e06602054602254611ca890919063ffffffff16565b905060198111156116d05760405162461bcd60e51b8152602060048201526015602482015274546f74616c20666565206973206f7665722032352560581b6044820152606401610d0b565b61175b611cbb565b6001600160a01b0381163014156117cd5760405162461bcd60e51b815260206004820152603060248201527f5573652074686520617070726f707269617465206e617469766520746f6b656e60448201526f081dda5d1a191c985dc81b595d1a1bd960821b6064820152608401610d0b565b6040516370a0823160e01b81523060048201526000906001600160a01b038316906370a082319060240160206040518083038186803b15801561180f57600080fd5b505afa158015611823573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061184791906131d6565b9050600081116118915760405162461bcd60e51b81526020600482015260156024820152744e6f20746f6b656e7320746f20776974686472617760581b6044820152606401610d0b565b6001600160a01b03821663a9059cbb336040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260248101849052604401602060405180830381600087803b1580156118e957600080fd5b505af11580156118fd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061192191906131a2565b505050565b600033816119348286611c07565b9050838110156119945760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610d0b565b610e9f8286868403611d15565b600033610dc7818585611ead565b6119b7611cbb565b601c55565b6119c4611cbb565b60005b82811015611a3c5760008484838181106119f157634e487b7160e01b600052603260045260246000fd5b9050602002016020810190611a069190612f59565b6001600160a01b03166000908152602a60205260409020805460ff19168415151790555080611a3481613498565b9150506119c7565b50505050565b611a4a611cbb565b6001600160a01b03821660009081526028602052604090205460ff1615158115151415611ad35760405162461bcd60e51b815260206004820152603160248201527f424f4e5a413a204163636f756e7420697320616c7265616479207468652076616044820152706c7565206f6620276578636c756465642760781b6064820152608401610d0b565b6001600160a01b038216600081815260286020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b611b3a611cbb565b60005b82811015611bb9578160286000868685818110611b6a57634e487b7160e01b600052603260045260246000fd5b9050602002016020810190611b7f9190612f59565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580611bb181613498565b915050611b3d565b507f7fdaf542373fa84f4ee8d662c642f44e4c2276a217d7d29e548b6eb29a233b35838383604051611bed9392919061325e565b60405180910390a1505050565b611c02611cbb565b600855565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b611c3a611cbb565b6001600160a01b038116611c9f5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610d0b565b610e598161264f565b6000611cb482846133ef565b9392505050565b6005546001600160a01b031633146114ad5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610d0b565b6001600160a01b038316611d775760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610d0b565b6001600160a01b038216611dd85760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610d0b565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000611e458484611c07565b90506000198114611a3c5781811015611ea05760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610d0b565b611a3c8484848403611d15565b6001600160a01b038316611ed35760405162461bcd60e51b8152600401610d0b9061334d565b6001600160a01b038216611ef95760405162461bcd60e51b8152600401610d0b9061330a565b6001600160a01b0383166000908152602a602052604090205460ff1615611f555760405162461bcd60e51b815260206004820152601060248201526f115490cc8c0e88189bdd131a5cdd195960821b6044820152606401610d0b565b80611f6657611921838360006128a3565b30600090815260208190526040902054601c5481108015908190611f945750600754600160a01b900460ff16155b8015611fb957506001600160a01b03851660009081526029602052604090205460ff16155b8015611fd357506005546001600160a01b03868116911614155b8015611fed57506005546001600160a01b03858116911614155b15612223576007805460ff60a01b1916600160a01b17905560235460205460009161201d916110f2908690612505565b9050612028816129cd565b4761203b61203685846124f9565b612a54565b60006120546020546023546124f990919063ffffffff16565b9050600061206247846124f9565b601a54601f549192506001600160a01b0316906108fc9061208a9085906110f2908690612505565b6040518115909202916000818181858888f193505050501580156120b2573d6000803e3d6000fd5b50601a54601f546001600160a01b03909116907ff00ef454165952f9f1864c60595e806f9a1b7f118b5474cfde32bf4061041be9906120f89085906110f2908690612505565b60405190815260200160405180910390a2601b546022546001600160a01b03909116906108fc906121309085906110f2908690612505565b6040518115909202916000818181858888f19350505050158015612158573d6000803e3d6000fd5b50601b546022546001600160a01b03909116907f579769e784a4913a8f5df95f727f72e471f586ad9255517de2d7beda328bf6569061219e9085906110f2908690612505565b60405190815260200160405180910390a260006121ca836110f26021548561250590919063ffffffff16565b600f549091506121da9082611ca8565b600f556040518181527fd3835920ef6bf575b72f3e7229fcbcb09eead1f54ab56cc16052cf1423395a739060200160405180910390a150506007805460ff60a01b191690555050505b600d54600f54101580156122415750600754600160a01b900460ff16155b156122535761224e612bd1565b61227e565b61225b610eaa565b80156122715750600754600160a01b900460ff16155b1561227e5761227e612cb7565b6007546001600160a01b03868116911614801561229f575061229f83610ef2565b156122c45742601155601080546001600160a01b0319166001600160a01b0386161790555b6001600160a01b03851660009081526028602052604090205460019060ff168061230657506001600160a01b03851660009081526028602052604090205460ff165b1561230f575060005b80801561235657506001600160a01b03861660009081526029602052604090205460ff168061235657506001600160a01b03851660009081526029602052604090205460ff165b156124e657601d5460ff166123ad5760405162461bcd60e51b815260206004820152601a60248201527f424f4e5a413a2054726164696e67206973206e6f74206f70656e0000000000006044820152606401610d0b565b60006123ca6127106110f26023548861250590919063ffffffff16565b6001600160a01b03871660009081526029602052604090205490915060ff16156124cd57337368b3465833fb72a70ecdf485e0e4c7bd8665fc45146124345761241b6127106110f287610bb8612505565b9050602454600161242c91906133ef565b6024556124cd565b600061244b6025548761250590919063ffffffff16565b6007546001600160a01b031660009081526020819052604090205490915061247f90612478908890610e06565b8290612511565b90506026548111156124b65761249d6127106110f2886107d0612505565b915060275460016124ae91906133ef565b6027556124cb565b6124c86127106110f288610190612505565b91505b505b6124d785826124f9565b94506124e48730836128a3565b505b6124f18686866128a3565b505050505050565b6000611cb48284613446565b6000611cb48284613427565b6000611cb48284613407565b6001600160a01b03821661257d5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610d0b565b6001600160a01b038216600090815260208190526040902054818110156125f15760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610d0b565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b804710156126f15760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610d0b565b6000826001600160a01b03168260405160006040518083038185875af1925050503d806000811461273e576040519150601f19603f3d011682016040523d82523d6000602084013e612743565b606091505b50509050806119215760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610d0b565b6001600160a01b03821660009081526029602052604090205460ff161515811515141561284f5760405162461bcd60e51b815260206004820152603f60248201527f424f4e5a413a204175746f6d61746564206d61726b6574206d616b657220706160448201527f697220697320616c72656164792073657420746f20746861742076616c7565006064820152608401610d0b565b6001600160a01b038216600081815260296020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b0383166128c95760405162461bcd60e51b8152600401610d0b9061334d565b6001600160a01b0382166128ef5760405162461bcd60e51b8152600401610d0b9061330a565b6001600160a01b038316600090815260208190526040902054818110156129675760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610d0b565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3611a3c565b60006129da826002612511565b905060006129e883836124f9565b9050476129f483612a54565b6000612a0047836124f9565b9050612a0c8382612e75565b60408051858152602081018390529081018490527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15050505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612a9757634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b158015612aeb57600080fd5b505afa158015612aff573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b239190612f75565b81600181518110612b4457634e487b7160e01b600052603260045260246000fd5b6001600160a01b039283166020918202929092010152600654612b6a9130911684611d15565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac94790612ba39085906000908690309042906004016133b3565b600060405180830381600087803b158015612bbd57600080fd5b505af11580156124f1573d6000803e3d6000fd5b6007805460ff60a01b1916600160a01b179055600e54600f54600091612bff91612710916110f29190612505565b601b546040519192506001600160a01b03169082156108fc029083906000818181858888f19350505050158015612c3a573d6000803e3d6000fd5b506040518181527fce4ecff3fe64868b2d2c7c1125babbbff1d01a1a2566d1edd4ed0f91deaa93509060200160405180910390a1601581905542601655600f54612c8490826124f9565b600f55601754612c949082611ca8565b601755601954612ca49082611ca8565b601955506007805460ff60a01b19169055565b6007805460ff60a01b1916600160a01b1790556010546001600160a01b031615801590612cef57506010546001600160a01b03163014155b612d345760405162461bcd60e51b8152602060048201526016602482015275139bc81b185cdd08189d5e595c8819195d1958dd195960521b6044820152606401610d0b565b6000612d536127106110f2600954600f5461250590919063ffffffff16565b90506000612d726127106110f2600a548561250590919063ffffffff16565b90506000612d808284613446565b601054909150612d99906001600160a01b0316836126a1565b601b54612daf906001600160a01b0316826126a1565b600f54612dbc90846124f9565b600f55601054601280546001600160a01b0319166001600160a01b0390921691821790556013849055426014556040518481527fc42c61c2d12c0229e818b1c076309b970ff23983d35fe17fa50b702be1e0c73e9060200160405180910390a2601080546001600160a01b031916301790556000601155601754612e409084611ca8565b601755601854612e509083611ca8565b601855601954612e609082611ca8565b60195550506007805460ff60a01b1916905550565b600654612e8d9030906001600160a01b031684611d15565b6006546001600160a01b031663f305d719823085600080612eb66005546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b158015612f1957600080fd5b505af1158015612f2d573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612f5291906131ee565b5050505050565b600060208284031215612f6a578081fd5b8135611cb4816134df565b600060208284031215612f86578081fd5b8151611cb4816134df565b60008060408385031215612fa3578081fd5b8235612fae816134df565b91506020830135612fbe816134df565b809150509250929050565b600080600060608486031215612fdd578081fd5b8335612fe8816134df565b92506020840135612ff8816134df565b929592945050506040919091013590565b6000806040838503121561301b578182fd5b8235613026816134df565b91506020830135612fbe816134f4565b60008060408385031215613048578182fd5b8235613053816134df565b946020939093013593505050565b600080600060408486031215613075578283fd5b833567ffffffffffffffff8082111561308c578485fd5b818601915086601f83011261309f578485fd5b8135818111156130ad578586fd5b8760208260051b85010111156130c1578586fd5b602092830195509350508401356130d7816134f4565b809150509250925092565b600060208083850312156130f4578182fd5b825167ffffffffffffffff8082111561310b578384fd5b818501915085601f83011261311e578384fd5b815181811115613130576131306134c9565b8060051b604051601f19603f83011681018181108582111715613155576131556134c9565b604052828152858101935084860182860187018a1015613173578788fd5b8795505b83861015613195578051855260019590950194938601938601613177565b5098975050505050505050565b6000602082840312156131b3578081fd5b8151611cb4816134f4565b6000602082840312156131cf578081fd5b5035919050565b6000602082840312156131e7578081fd5b5051919050565b600080600060608486031215613202578283fd5b8351925060208401519150604084015190509250925092565b6000815180845260208085019450808401835b838110156132535781516001600160a01b03168752958201959082019060010161322e565b509495945050505050565b6040808252810183905260008460608301825b868110156132a1578235613284816134df565b6001600160a01b0316825260209283019290910190600101613271565b5080925050508215156020830152949350505050565b6000602080835283518082850152825b818110156132e3578581018301518582016040015282016132c7565b818111156132f45783604083870101525b50601f01601f1916929092016040019392505050565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b8281526040602082015260006133ab604083018461321b565b949350505050565b85815284602082015260a0604082015260006133d260a083018661321b565b6001600160a01b0394909416606083015250608001529392505050565b60008219821115613402576134026134b3565b500190565b60008261342257634e487b7160e01b81526012600452602481fd5b500490565b6000816000190483118215151615613441576134416134b3565b500290565b600082821015613458576134586134b3565b500390565b600181811c9082168061347157607f821691505b6020821081141561349257634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156134ac576134ac6134b3565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114610e5957600080fd5b8015158114610e5957600080fdfea26469706673582212202d9e1b8136ab93ba63a0a6a4e78eea9fdaddcc60132f5f09a40edd1ffb83dfa164736f6c634300080400330000000000000000000000000000000000000000000000000000000000000064000000000000000000000000000000000000000000000000000000000000006400000000000000000000000000000000000000000000000000000000000000640000000000000000000000000000000000000000000000000000000000000064

Deployed Bytecode

0x60806040526004361061042a5760003560e01c80637659833211610229578063a9059cbb1161012e578063cfc7d76e116100b6578063e98744361161007a578063e987443614610c48578063ee3ef21d14610c5e578063ef4a55ec14610c74578063f2fde38b14610c8a578063ffb54a9914610caa57600080fd5b8063cfc7d76e14610bc7578063d2bc701214610be7578063dcdd93c714610bfd578063dd62ed3e14610c12578063e2f4560514610c3257600080fd5b8063b7c318e8116100fd578063b7c318e814610b45578063bf56b37114610b5b578063c024666814610b71578063c492f04614610b91578063c8fc48e314610bb157600080fd5b8063a9059cbb14610ab5578063afa4f3b214610ad5578063b16d3d5a14610af5578063b62496f514610b1557600080fd5b80639329066c116101b15780639c2a7879116101805780639c2a787914610a055780639ed6e25314610a1a578063a09e54cf14610a55578063a1190a3614610a75578063a457c2d714610a9557600080fd5b80639329066c146106de57806395d89b41146109ba57806398118cb4146109cf5780639a7a23d6146109e557600080fd5b80638571c441116101f85780638571c4411461090657806389c4485e146109195780638ae54b9c1461095c5780638da5cb5b1461097c5780638ea5220f1461099a57600080fd5b8063765983321461089457806379ac568c146108bc5780637fa787ba146108dc5780638183b3c8146108f157600080fd5b8063395093511161032f5780634fbee193116102b757806365b8dbc01161028657806365b8dbc0146107fe5780636827e7641461081e5780636e5c3dcc1461083457806370a0823114610849578063715018a61461087f57600080fd5b80634fbee193146107695780635e213fd8146107a2578063614497fc146107b85780636264fdf4146107e857600080fd5b80634737458e116102fe5780634737458e146106de57806349bd5a5e146106f35780634b24f3a6146107135780634bcf1e2f146107335780634f127b301461075357600080fd5b8063395093511461067257806342966c68146106925780634430b583146106b25780634712fa4e146106c857600080fd5b80631c75b6b2116103b25780632e51dc95116103815780632e51dc95146105e0578063313ce56714610600578063357bf15c1461061c5780633901aa551461063c578063392cf2e71461065257600080fd5b80631c75b6b21461056b5780631f53ac021461058b57806323b872dd146105ab5780632978c561146105cb57600080fd5b80630d02c06f116103f95780630d02c06f146104c85780630f63f0191461050057806313114a9d146105205780631694505e1461053657806318160ddd1461055657600080fd5b806301339c21146104365780630326730f1461044d57806306fdde0314610476578063095ea7b31461049857600080fd5b3661043157005b600080fd5b34801561044257600080fd5b5061044b610cc4565b005b34801561045957600080fd5b5061046360095481565b6040519081526020015b60405180910390f35b34801561048257600080fd5b5061048b610d27565b60405161046d91906132b7565b3480156104a457600080fd5b506104b86104b3366004613036565b610db9565b604051901515815260200161046d565b3480156104d457600080fd5b50601b546104e8906001600160a01b031681565b6040516001600160a01b03909116815260200161046d565b34801561050c57600080fd5b5061044b61051b3660046131be565b610dd1565b34801561052c57600080fd5b5061046360235481565b34801561054257600080fd5b506006546104e8906001600160a01b031681565b34801561056257600080fd5b50600254610463565b34801561057757600080fd5b5061044b6105863660046131be565b610dde565b34801561059757600080fd5b5061044b6105a6366004612f59565b610e5c565b3480156105b757600080fd5b506104b86105c6366004612fc9565b610e86565b3480156105d757600080fd5b506104b8610eaa565b3480156105ec57600080fd5b506104b86105fb3660046131be565b610ef2565b34801561060c57600080fd5b506040516012815260200161046d565b34801561062857600080fd5b5061044b6106373660046131be565b611103565b34801561064857600080fd5b5061046360275481565b34801561065e57600080fd5b5061044b61066d366004612f59565b61112b565b34801561067e57600080fd5b506104b861068d366004613036565b611155565b34801561069e57600080fd5b5061044b6106ad3660046131be565b611177565b3480156106be57600080fd5b5061046360245481565b3480156106d457600080fd5b5061046360225481565b3480156106ea57600080fd5b50600f54610463565b3480156106ff57600080fd5b506007546104e8906001600160a01b031681565b34801561071f57600080fd5b5061044b61072e3660046131be565b6111ea565b34801561073f57600080fd5b5061044b61074e3660046131be565b611212565b34801561075f57600080fd5b50610463600a5481565b34801561077557600080fd5b506104b8610784366004612f59565b6001600160a01b031660009081526028602052604090205460ff1690565b3480156107ae57600080fd5b50610463600d5481565b3480156107c457600080fd5b506104b86107d3366004612f59565b602a6020526000908152604090205460ff1681565b3480156107f457600080fd5b50610463600c5481565b34801561080a57600080fd5b5061044b610819366004612f59565b61121f565b34801561082a57600080fd5b50610463601f5481565b34801561084057600080fd5b50601954610463565b34801561085557600080fd5b50610463610864366004612f59565b6001600160a01b031660009081526020819052604090205490565b34801561088b57600080fd5b5061044b61149b565b3480156108a057600080fd5b506015546016546040805192835260208301919091520161046d565b3480156108c857600080fd5b5061044b6108d73660046131be565b6114af565b3480156108e857600080fd5b5061044b6114bc565b3480156108fd57600080fd5b5061044b611512565b61044b6109143660046131be565b61157a565b34801561092557600080fd5b5061093d6010546011546001600160a01b0390911691565b604080516001600160a01b03909316835260208301919091520161046d565b34801561096857600080fd5b5061044b6109773660046131be565b61160d565b34801561098857600080fd5b506005546001600160a01b03166104e8565b3480156109a657600080fd5b50601a546104e8906001600160a01b031681565b3480156109c657600080fd5b5061048b61161a565b3480156109db57600080fd5b5061046360205481565b3480156109f157600080fd5b5061044b610a00366004613009565b611629565b348015610a1157600080fd5b50601854610463565b348015610a2657600080fd5b50601254601354601454604080516001600160a01b03909416845260208401929092529082015260600161046d565b348015610a6157600080fd5b5061044b610a703660046131be565b6116d4565b348015610a8157600080fd5b5061044b610a90366004612f59565b611753565b348015610aa157600080fd5b506104b8610ab0366004613036565b611926565b348015610ac157600080fd5b506104b8610ad0366004613036565b6119a1565b348015610ae157600080fd5b5061044b610af03660046131be565b6119af565b348015610b0157600080fd5b5061044b610b10366004613061565b6119bc565b348015610b2157600080fd5b506104b8610b30366004612f59565b60296020526000908152604090205460ff1681565b348015610b5157600080fd5b50610463600b5481565b348015610b6757600080fd5b50610463601e5481565b348015610b7d57600080fd5b5061044b610b8c366004613009565b611a42565b348015610b9d57600080fd5b5061044b610bac366004613061565b611b32565b348015610bbd57600080fd5b50610463600f5481565b348015610bd357600080fd5b5061044b610be23660046131be565b611bfa565b348015610bf357600080fd5b50610463600e5481565b348015610c0957600080fd5b50601754610463565b348015610c1e57600080fd5b50610463610c2d366004612f91565b611c07565b348015610c3e57600080fd5b50610463601c5481565b348015610c5457600080fd5b5061046360215481565b348015610c6a57600080fd5b5061046360085481565b348015610c8057600080fd5b5061046360265481565b348015610c9657600080fd5b5061044b610ca5366004612f59565b611c32565b348015610cb657600080fd5b50601d546104b89060ff1681565b610ccc611cbb565b601d5460ff1615610d145760405162461bcd60e51b815260206004820152600d60248201526c020b63932b0b23c9037b832b71609d1b60448201526064015b60405180910390fd5b43601e55601d805460ff19166001179055565b606060038054610d369061345d565b80601f0160208091040260200160405190810160405280929190818152602001828054610d629061345d565b8015610daf5780601f10610d8457610100808354040283529160200191610daf565b820191906000526020600020905b815481529060010190602001808311610d9257829003601f168201915b5050505050905090565b600033610dc7818585611d15565b5060019392505050565b610dd9611cbb565b600e55565b610de6611cbb565b601f819055602254602154602054610e0c9291610e069182908690611ca8565b90611ca8565b602381905560191015610e595760405162461bcd60e51b8152602060048201526015602482015274546f74616c20666565206973206f7665722032352560581b6044820152606401610d0b565b50565b610e64611cbb565b601a80546001600160a01b0319166001600160a01b0392909216919091179055565b600033610e94858285611e39565b610e9f858585611ead565b506001949350505050565b6010546000906001600160a01b031615801590610ed257506010546001600160a01b03163014155b8015610eed5750600c54601154610eea9042906124f9565b10155b905090565b6000600b5460001415610f0757506001919050565b6040805160028082526060820183526000926020830190803683375050600654604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c464892506004808301926020929190829003018186803b158015610f6c57600080fd5b505afa158015610f80573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fa49190612f75565b81600081518110610fc557634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b031681525050308160018151811061100757634e487b7160e01b600052603260045260246000fd5b6001600160a01b039092166020928302919091019091015260006110f86127106110f26110358260196124f9565b600654600b5460405163d06ca61f60e01b81526001600160a01b039092169163d06ca61f91611068918a90600401613392565b60006040518083038186803b15801561108057600080fd5b505afa158015611094573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526110bc91908101906130e2565b6001815181106110dc57634e487b7160e01b600052603260045260246000fd5b602002602001015161250590919063ffffffff16565b90612511565b909310159392505050565b61110b611cbb565b6020819055601f54602254602154610e0c9291610e069182908690611ca8565b611133611cbb565b601b80546001600160a01b0319166001600160a01b0392909216919091179055565b600033610dc78185856111688383611c07565b61117291906133ef565b611d15565b336000908152602081905260409020548111156111e05760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e3a20696e73756666696369656e742062616c616e636044820152606560f81b6064820152608401610d0b565b610e59338261251d565b6111f2611cbb565b6021819055601f54602254602054610e0c9291610e069182908690611ca8565b61121a611cbb565b600c55565b611227611cbb565b6006546001600160a01b03828116911614156112985760405162461bcd60e51b815260206004820152602a60248201527f424f4e5a413a2054686520726f7574657220616c7265616479206861732074686044820152696174206164647265737360b01b6064820152608401610d0b565b6006546040516001600160a01b03918216918316907f8fc842bbd331dfa973645f4ed48b11683d501ebf1352708d77a5da2ab49a576e90600090a3600680546001600160a01b0319166001600160a01b0383169081179091556040805163c45a015560e01b815290516000929163c45a0155916004808301926020929190829003018186803b15801561132a57600080fd5b505afa15801561133e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113629190612f75565b6001600160a01b031663c9c6539630600660009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156113bf57600080fd5b505afa1580156113d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113f79190612f75565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b15801561143f57600080fd5b505af1158015611453573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114779190612f75565b600780546001600160a01b0319166001600160a01b03929092169190911790555050565b6114a3611cbb565b6114ad600061264f565b565b6114b7611cbb565b600d55565b6114c4611cbb565b47806115085760405162461bcd60e51b81526020600482015260136024820152724e6f204554487320746f20776974686472617760681b6044820152606401610d0b565b610e5933826126a1565b61151a611cbb565b306000908152602081905260409020548061156f5760405162461bcd60e51b81526020600482015260156024820152744e6f20746f6b656e7320746f20776974686472617760581b6044820152606401610d0b565b610e59303383611ead565b611582611cbb565b336000908152602081905260409020548111156115fa5760405162461bcd60e51b815260206004820152603060248201527f596f7520646f6e2774206861766520656e6f75676820746f6b656e7320746f2060448201526f199d5b99081d1a19481a9858dadc1bdd60821b6064820152608401610d0b565b600f546116079034611ca8565b600f5550565b611615611cbb565b600b55565b606060048054610d369061345d565b611631611cbb565b6007546001600160a01b03838116911614156116c65760405162461bcd60e51b815260206004820152604860248201527f424f4e5a413a2054686520556e695377617020706169722063616e6e6f74206260448201527f652072656d6f7665642066726f6d206175746f6d617465644d61726b65744d616064820152676b6572506169727360c01b608482015260a401610d0b565b6116d082826127ba565b5050565b6116dc611cbb565b806022819055506000611708601f54610e06602154610e06602054602254611ca890919063ffffffff16565b905060198111156116d05760405162461bcd60e51b8152602060048201526015602482015274546f74616c20666565206973206f7665722032352560581b6044820152606401610d0b565b61175b611cbb565b6001600160a01b0381163014156117cd5760405162461bcd60e51b815260206004820152603060248201527f5573652074686520617070726f707269617465206e617469766520746f6b656e60448201526f081dda5d1a191c985dc81b595d1a1bd960821b6064820152608401610d0b565b6040516370a0823160e01b81523060048201526000906001600160a01b038316906370a082319060240160206040518083038186803b15801561180f57600080fd5b505afa158015611823573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061184791906131d6565b9050600081116118915760405162461bcd60e51b81526020600482015260156024820152744e6f20746f6b656e7320746f20776974686472617760581b6044820152606401610d0b565b6001600160a01b03821663a9059cbb336040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260248101849052604401602060405180830381600087803b1580156118e957600080fd5b505af11580156118fd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061192191906131a2565b505050565b600033816119348286611c07565b9050838110156119945760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610d0b565b610e9f8286868403611d15565b600033610dc7818585611ead565b6119b7611cbb565b601c55565b6119c4611cbb565b60005b82811015611a3c5760008484838181106119f157634e487b7160e01b600052603260045260246000fd5b9050602002016020810190611a069190612f59565b6001600160a01b03166000908152602a60205260409020805460ff19168415151790555080611a3481613498565b9150506119c7565b50505050565b611a4a611cbb565b6001600160a01b03821660009081526028602052604090205460ff1615158115151415611ad35760405162461bcd60e51b815260206004820152603160248201527f424f4e5a413a204163636f756e7420697320616c7265616479207468652076616044820152706c7565206f6620276578636c756465642760781b6064820152608401610d0b565b6001600160a01b038216600081815260286020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b611b3a611cbb565b60005b82811015611bb9578160286000868685818110611b6a57634e487b7160e01b600052603260045260246000fd5b9050602002016020810190611b7f9190612f59565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580611bb181613498565b915050611b3d565b507f7fdaf542373fa84f4ee8d662c642f44e4c2276a217d7d29e548b6eb29a233b35838383604051611bed9392919061325e565b60405180910390a1505050565b611c02611cbb565b600855565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b611c3a611cbb565b6001600160a01b038116611c9f5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610d0b565b610e598161264f565b6000611cb482846133ef565b9392505050565b6005546001600160a01b031633146114ad5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610d0b565b6001600160a01b038316611d775760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610d0b565b6001600160a01b038216611dd85760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610d0b565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000611e458484611c07565b90506000198114611a3c5781811015611ea05760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610d0b565b611a3c8484848403611d15565b6001600160a01b038316611ed35760405162461bcd60e51b8152600401610d0b9061334d565b6001600160a01b038216611ef95760405162461bcd60e51b8152600401610d0b9061330a565b6001600160a01b0383166000908152602a602052604090205460ff1615611f555760405162461bcd60e51b815260206004820152601060248201526f115490cc8c0e88189bdd131a5cdd195960821b6044820152606401610d0b565b80611f6657611921838360006128a3565b30600090815260208190526040902054601c5481108015908190611f945750600754600160a01b900460ff16155b8015611fb957506001600160a01b03851660009081526029602052604090205460ff16155b8015611fd357506005546001600160a01b03868116911614155b8015611fed57506005546001600160a01b03858116911614155b15612223576007805460ff60a01b1916600160a01b17905560235460205460009161201d916110f2908690612505565b9050612028816129cd565b4761203b61203685846124f9565b612a54565b60006120546020546023546124f990919063ffffffff16565b9050600061206247846124f9565b601a54601f549192506001600160a01b0316906108fc9061208a9085906110f2908690612505565b6040518115909202916000818181858888f193505050501580156120b2573d6000803e3d6000fd5b50601a54601f546001600160a01b03909116907ff00ef454165952f9f1864c60595e806f9a1b7f118b5474cfde32bf4061041be9906120f89085906110f2908690612505565b60405190815260200160405180910390a2601b546022546001600160a01b03909116906108fc906121309085906110f2908690612505565b6040518115909202916000818181858888f19350505050158015612158573d6000803e3d6000fd5b50601b546022546001600160a01b03909116907f579769e784a4913a8f5df95f727f72e471f586ad9255517de2d7beda328bf6569061219e9085906110f2908690612505565b60405190815260200160405180910390a260006121ca836110f26021548561250590919063ffffffff16565b600f549091506121da9082611ca8565b600f556040518181527fd3835920ef6bf575b72f3e7229fcbcb09eead1f54ab56cc16052cf1423395a739060200160405180910390a150506007805460ff60a01b191690555050505b600d54600f54101580156122415750600754600160a01b900460ff16155b156122535761224e612bd1565b61227e565b61225b610eaa565b80156122715750600754600160a01b900460ff16155b1561227e5761227e612cb7565b6007546001600160a01b03868116911614801561229f575061229f83610ef2565b156122c45742601155601080546001600160a01b0319166001600160a01b0386161790555b6001600160a01b03851660009081526028602052604090205460019060ff168061230657506001600160a01b03851660009081526028602052604090205460ff165b1561230f575060005b80801561235657506001600160a01b03861660009081526029602052604090205460ff168061235657506001600160a01b03851660009081526029602052604090205460ff165b156124e657601d5460ff166123ad5760405162461bcd60e51b815260206004820152601a60248201527f424f4e5a413a2054726164696e67206973206e6f74206f70656e0000000000006044820152606401610d0b565b60006123ca6127106110f26023548861250590919063ffffffff16565b6001600160a01b03871660009081526029602052604090205490915060ff16156124cd57337368b3465833fb72a70ecdf485e0e4c7bd8665fc45146124345761241b6127106110f287610bb8612505565b9050602454600161242c91906133ef565b6024556124cd565b600061244b6025548761250590919063ffffffff16565b6007546001600160a01b031660009081526020819052604090205490915061247f90612478908890610e06565b8290612511565b90506026548111156124b65761249d6127106110f2886107d0612505565b915060275460016124ae91906133ef565b6027556124cb565b6124c86127106110f288610190612505565b91505b505b6124d785826124f9565b94506124e48730836128a3565b505b6124f18686866128a3565b505050505050565b6000611cb48284613446565b6000611cb48284613427565b6000611cb48284613407565b6001600160a01b03821661257d5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610d0b565b6001600160a01b038216600090815260208190526040902054818110156125f15760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610d0b565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b804710156126f15760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610d0b565b6000826001600160a01b03168260405160006040518083038185875af1925050503d806000811461273e576040519150601f19603f3d011682016040523d82523d6000602084013e612743565b606091505b50509050806119215760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610d0b565b6001600160a01b03821660009081526029602052604090205460ff161515811515141561284f5760405162461bcd60e51b815260206004820152603f60248201527f424f4e5a413a204175746f6d61746564206d61726b6574206d616b657220706160448201527f697220697320616c72656164792073657420746f20746861742076616c7565006064820152608401610d0b565b6001600160a01b038216600081815260296020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b0383166128c95760405162461bcd60e51b8152600401610d0b9061334d565b6001600160a01b0382166128ef5760405162461bcd60e51b8152600401610d0b9061330a565b6001600160a01b038316600090815260208190526040902054818110156129675760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610d0b565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3611a3c565b60006129da826002612511565b905060006129e883836124f9565b9050476129f483612a54565b6000612a0047836124f9565b9050612a0c8382612e75565b60408051858152602081018390529081018490527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15050505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612a9757634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b158015612aeb57600080fd5b505afa158015612aff573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b239190612f75565b81600181518110612b4457634e487b7160e01b600052603260045260246000fd5b6001600160a01b039283166020918202929092010152600654612b6a9130911684611d15565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac94790612ba39085906000908690309042906004016133b3565b600060405180830381600087803b158015612bbd57600080fd5b505af11580156124f1573d6000803e3d6000fd5b6007805460ff60a01b1916600160a01b179055600e54600f54600091612bff91612710916110f29190612505565b601b546040519192506001600160a01b03169082156108fc029083906000818181858888f19350505050158015612c3a573d6000803e3d6000fd5b506040518181527fce4ecff3fe64868b2d2c7c1125babbbff1d01a1a2566d1edd4ed0f91deaa93509060200160405180910390a1601581905542601655600f54612c8490826124f9565b600f55601754612c949082611ca8565b601755601954612ca49082611ca8565b601955506007805460ff60a01b19169055565b6007805460ff60a01b1916600160a01b1790556010546001600160a01b031615801590612cef57506010546001600160a01b03163014155b612d345760405162461bcd60e51b8152602060048201526016602482015275139bc81b185cdd08189d5e595c8819195d1958dd195960521b6044820152606401610d0b565b6000612d536127106110f2600954600f5461250590919063ffffffff16565b90506000612d726127106110f2600a548561250590919063ffffffff16565b90506000612d808284613446565b601054909150612d99906001600160a01b0316836126a1565b601b54612daf906001600160a01b0316826126a1565b600f54612dbc90846124f9565b600f55601054601280546001600160a01b0319166001600160a01b0390921691821790556013849055426014556040518481527fc42c61c2d12c0229e818b1c076309b970ff23983d35fe17fa50b702be1e0c73e9060200160405180910390a2601080546001600160a01b031916301790556000601155601754612e409084611ca8565b601755601854612e509083611ca8565b601855601954612e609082611ca8565b60195550506007805460ff60a01b1916905550565b600654612e8d9030906001600160a01b031684611d15565b6006546001600160a01b031663f305d719823085600080612eb66005546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b158015612f1957600080fd5b505af1158015612f2d573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612f5291906131ee565b5050505050565b600060208284031215612f6a578081fd5b8135611cb4816134df565b600060208284031215612f86578081fd5b8151611cb4816134df565b60008060408385031215612fa3578081fd5b8235612fae816134df565b91506020830135612fbe816134df565b809150509250929050565b600080600060608486031215612fdd578081fd5b8335612fe8816134df565b92506020840135612ff8816134df565b929592945050506040919091013590565b6000806040838503121561301b578182fd5b8235613026816134df565b91506020830135612fbe816134f4565b60008060408385031215613048578182fd5b8235613053816134df565b946020939093013593505050565b600080600060408486031215613075578283fd5b833567ffffffffffffffff8082111561308c578485fd5b818601915086601f83011261309f578485fd5b8135818111156130ad578586fd5b8760208260051b85010111156130c1578586fd5b602092830195509350508401356130d7816134f4565b809150509250925092565b600060208083850312156130f4578182fd5b825167ffffffffffffffff8082111561310b578384fd5b818501915085601f83011261311e578384fd5b815181811115613130576131306134c9565b8060051b604051601f19603f83011681018181108582111715613155576131556134c9565b604052828152858101935084860182860187018a1015613173578788fd5b8795505b83861015613195578051855260019590950194938601938601613177565b5098975050505050505050565b6000602082840312156131b3578081fd5b8151611cb4816134f4565b6000602082840312156131cf578081fd5b5035919050565b6000602082840312156131e7578081fd5b5051919050565b600080600060608486031215613202578283fd5b8351925060208401519150604084015190509250925092565b6000815180845260208085019450808401835b838110156132535781516001600160a01b03168752958201959082019060010161322e565b509495945050505050565b6040808252810183905260008460608301825b868110156132a1578235613284816134df565b6001600160a01b0316825260209283019290910190600101613271565b5080925050508215156020830152949350505050565b6000602080835283518082850152825b818110156132e3578581018301518582016040015282016132c7565b818111156132f45783604083870101525b50601f01601f1916929092016040019392505050565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b8281526040602082015260006133ab604083018461321b565b949350505050565b85815284602082015260a0604082015260006133d260a083018661321b565b6001600160a01b0394909416606083015250608001529392505050565b60008219821115613402576134026134b3565b500190565b60008261342257634e487b7160e01b81526012600452602481fd5b500490565b6000816000190483118215151615613441576134416134b3565b500290565b600082821015613458576134586134b3565b500390565b600181811c9082168061347157607f821691505b6020821081141561349257634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156134ac576134ac6134b3565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114610e5957600080fd5b8015158114610e5957600080fdfea26469706673582212202d9e1b8136ab93ba63a0a6a4e78eea9fdaddcc60132f5f09a40edd1ffb83dfa164736f6c63430008040033

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

0000000000000000000000000000000000000000000000000000000000000064000000000000000000000000000000000000000000000000000000000000006400000000000000000000000000000000000000000000000000000000000000640000000000000000000000000000000000000000000000000000000000000064

-----Decoded View---------------
Arg [0] : feeSettings (uint256[4]): 100,100,100,100

-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000064
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000064
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000064
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000064


Deployed Bytecode Sourcemap

46059:21679:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;64422:167;;;;;;;;;;;;;:::i;:::-;;46585:36;;;;;;;;;;;;;;;;;;;20074:25:1;;;20062:2;20047:18;46585:36:0;;;;;;;;16392:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;18743:201::-;;;;;;;;;;-1:-1:-1;18743:201:0;;;;;:::i;:::-;;:::i;:::-;;;8492:14:1;;8485:22;8467:41;;8455:2;8440:18;18743:201:0;8422:92:1;47729:77:0;;;;;;;;;;-1:-1:-1;47729:77:0;;;;-1:-1:-1;;;;;47729:77:0;;;;;;-1:-1:-1;;;;;5931:32:1;;;5913:51;;5901:2;5886:18;47729:77:0;5868:102:1;54099:124:0;;;;;;;;;;-1:-1:-1;54099:124:0;;;;;:::i;:::-;;:::i;48051:24::-;;;;;;;;;;;;;;;;46136:41;;;;;;;;;;-1:-1:-1;46136:41:0;;;;-1:-1:-1;;;;;46136:41:0;;;17512:108;;;;;;;;;;-1:-1:-1;17600:12:0;;17512:108;;53838:253;;;;;;;;;;-1:-1:-1;53838:253:0;;;;;:::i;:::-;;:::i;54231:102::-;;;;;;;;;;-1:-1:-1;54231:102:0;;;;;:::i;:::-;;:::i;19524:295::-;;;;;;;;;;-1:-1:-1;19524:295:0;;;;;:::i;:::-;;:::i;54862:238::-;;;;;;;;;;;;;:::i;55108:578::-;;;;;;;;;;-1:-1:-1;55108:578:0;;;;;:::i;:::-;;:::i;17354:93::-;;;;;;;;;;-1:-1:-1;17354:93:0;;17437:2;21753:36:1;;21741:2;21726:18;17354:93:0;21708:87:1;53252:267:0;;;;;;;;;;-1:-1:-1;53252:267:0;;;;;:::i;:::-;;:::i;48199:29::-;;;;;;;;;;;;;;;;54341:157;;;;;;;;;;-1:-1:-1;54341:157:0;;;;;:::i;:::-;;:::i;20228:238::-;;;;;;;;;;-1:-1:-1;20228:238:0;;;;;:::i;:::-;;:::i;66647:212::-;;;;;;;;;;-1:-1:-1;66647:212:0;;;;;:::i;:::-;;:::i;48082:28::-;;;;;;;;;;;;;;;;48015:29;;;;;;;;;;;;;;;;51754:172;;;;;;;;;;-1:-1:-1;51895:22:0;;51754:172;;46184:28;;;;;;;;;;-1:-1:-1;46184:28:0;;;;-1:-1:-1;;;;;46184:28:0;;;52981:263;;;;;;;;;;-1:-1:-1;52981:263:0;;;;;:::i;:::-;;:::i;54618:112::-;;;;;;;;;;-1:-1:-1;54618:112:0;;;;;:::i;:::-;;:::i;46673:39::-;;;;;;;;;;;;;;;;59945:126;;;;;;;;;;-1:-1:-1;59945:126:0;;;;;:::i;:::-;-1:-1:-1;;;;;60035:28:0;60011:4;60035:28;;;:19;:28;;;;;;;;;59945:126;46976:60;;;;;;;;;;;;;;;;48537:46;;;;;;;;;;-1:-1:-1;48537:46:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;46891:40;;;;;;;;;;;;;;;;58034:536;;;;;;;;;;-1:-1:-1;58034:536:0;;;;;:::i;:::-;;:::i;47921:21::-;;;;;;;;;;;;;;;;52545:111;;;;;;;;;;-1:-1:-1;52627:20:0;;52545:111;;17683:127;;;;;;;;;;-1:-1:-1;17683:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;17784:18:0;17757:7;17784:18;;;;;;;;;;;;17683:127;9817:103;;;;;;;;;;;;;:::i;51941:201::-;;;;;;;;;;-1:-1:-1;52094:16:0;;52112:21;;51941:201;;;21208:25:1;;;21264:2;21249:18;;21242:34;;;;21181:18;51941:201:0;21163:119:1;54738:116:0;;;;;;;;;;-1:-1:-1;54738:116:0;;;;;:::i;:::-;;:::i;66865:216::-;;;;;;;;;;;;;:::i;67089:222::-;;;;;;;;;;;;;:::i;56284:305::-;;;;;;:::i;:::-;;:::i;51214:179::-;;;;;;;;;;;;51355:10;;51367:17;;-1:-1:-1;;;;;51355:10:0;;;;51214:179;;;;;-1:-1:-1;;;;;6476:32:1;;;6458:51;;6540:2;6525:18;;6518:34;;;;6431:18;51214:179:0;6413:145:1;54506:104:0;;;;;;;;;;-1:-1:-1;54506:104:0;;;;;:::i;:::-;;:::i;9169:87::-;;;;;;;;;;-1:-1:-1;9242:6:0;;-1:-1:-1;;;;;9242:6:0;9169:87;;47653:69;;;;;;;;;;-1:-1:-1;47653:69:0;;;;-1:-1:-1;;;;;47653:69:0;;;16611:104;;;;;;;;;;;;;:::i;47949:27::-;;;;;;;;;;;;;;;;59258:319;;;;;;;;;;-1:-1:-1;59258:319:0;;;;;:::i;:::-;;:::i;52430:107::-;;;;;;;;;;-1:-1:-1;52510:18:0;;52430:107;;51401:345;;;;;;;;;;-1:-1:-1;51648:12:0;;51675:16;;51706:21;;51401:345;;;-1:-1:-1;;;;;51648:12:0;;;7377:51:1;;7459:2;7444:18;;7437:34;;;;7487:18;;;7480:34;7365:2;7350:18;51401:345:0;7332:188:1;53527:303:0;;;;;;;;;;-1:-1:-1;53527:303:0;;;;;:::i;:::-;;:::i;67319:381::-;;;;;;;;;;-1:-1:-1;67319:381:0;;;;;:::i;:::-;;:::i;20969:436::-;;;;;;;;;;-1:-1:-1;20969:436:0;;;;;:::i;:::-;;:::i;18016:193::-;;;;;;;;;;-1:-1:-1;18016:193:0;;;;;:::i;:::-;;:::i;52664:112::-;;;;;;;;;;-1:-1:-1;52664:112:0;;;;;:::i;:::-;;:::i;57756:262::-;;;;;;;;;;-1:-1:-1;57756:262:0;;;;;:::i;:::-;;:::i;48473:57::-;;;;;;;;;;-1:-1:-1;48473:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;46773;;;;;;;;;;;;;;;;47887:25;;;;;;;;;;;;;;;;58578:334;;;;;;;;;;-1:-1:-1;58578:334:0;;;;;:::i;:::-;;:::i;58920:330::-;;;;;;;;;;-1:-1:-1;58920:330:0;;;;;:::i;:::-;;:::i;47135:41::-;;;;;;;;;;;;;;;;52784:189;;;;;;;;;;-1:-1:-1;52784:189:0;;;;;:::i;:::-;;:::i;47084:40::-;;;;;;;;;;;;;;;;52313:109;;;;;;;;;;-1:-1:-1;52391:22:0;;52313:109;;18272:151;;;;;;;;;;-1:-1:-1;18272:151:0;;;;;:::i;:::-;;:::i;47815:33::-;;;;;;;;;;;;;;;;47983:25;;;;;;;;;;;;;;;;46351:45;;;;;;;;;;;;;;;;48161:31;;;;;;;;;;;;;;;;10075:201;;;;;;;;;;-1:-1:-1;10075:201:0;;;;;:::i;:::-;;:::i;47857:23::-;;;;;;;;;;-1:-1:-1;47857:23:0;;;;;;;;64422:167;9055:13;:11;:13::i;:::-;64478:11:::1;::::0;::::1;;:20;64470:46;;;::::0;-1:-1:-1;;;64470:46:0;;15706:2:1;64470:46:0::1;::::0;::::1;15688:21:1::0;15745:2;15725:18;;;15718:30;-1:-1:-1;;;15764:18:1;;;15757:43;15817:18;;64470:46:0::1;;;;;;;;;64540:12;64527:10;:25:::0;64563:11:::1;:18:::0;;-1:-1:-1;;64563:18:0::1;64577:4;64563:18;::::0;;64422:167::o;16392:100::-;16446:13;16479:5;16472:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16392:100;:::o;18743:201::-;18826:4;7800:10;18882:32;7800:10;18898:7;18907:6;18882:8;:32::i;:::-;-1:-1:-1;18932:4:0;;18743:201;-1:-1:-1;;;18743:201:0:o;54099:124::-;9055:13;:11;:13::i;:::-;54182:18:::1;:33:::0;54099:124::o;53838:253::-;9055:13;:11;:13::i;:::-;53902:6:::1;:14:::0;;;53998::::1;::::0;53968:10:::1;::::0;53950:12:::1;::::0;53939:84:::1;::::0;53998:14;53939:40:::1;::::0;;;53911:5;;53939:10:::1;:24::i;:::-;:28:::0;::::1;:40::i;:84::-;53927:9;:96:::0;;;54055:2:::1;-1:-1:-1::0;54042:15:0::1;54034:49;;;::::0;-1:-1:-1;;;54034:49:0;;14595:2:1;54034:49:0::1;::::0;::::1;14577:21:1::0;14634:2;14614:18;;;14607:30;-1:-1:-1;;;14653:18:1;;;14646:51;14714:18;;54034:49:0::1;14567:171:1::0;54034:49:0::1;53838:253:::0;:::o;54231:102::-;9055:13;:11;:13::i;:::-;54303:9:::1;:22:::0;;-1:-1:-1;;;;;;54303:22:0::1;-1:-1:-1::0;;;;;54303:22:0;;;::::1;::::0;;;::::1;::::0;;54231:102::o;19524:295::-;19655:4;7800:10;19713:38;19729:4;7800:10;19744:6;19713:15;:38::i;:::-;19762:27;19772:4;19778:2;19782:6;19762:9;:27::i;:::-;-1:-1:-1;19807:4:0;;19524:295;-1:-1:-1;;;;19524:295:0:o;54862:238::-;54950:10;;54913:4;;-1:-1:-1;;;;;54950:10:0;:24;;;;:68;;-1:-1:-1;54991:10:0;;-1:-1:-1;;;;;54991:10:0;55013:4;54991:27;;54950:68;:142;;;;-1:-1:-1;55077:15:0;;55055:17;;55035:38;;:15;;:19;:38::i;:::-;:57;;54950:142;54930:162;;54862:238;:::o;55108:578::-;55177:4;55198:13;;55215:1;55198:18;55194:62;;;-1:-1:-1;55240:4:0;;55108:578;-1:-1:-1;55108:578:0:o;55194:62::-;55290:16;;;55304:1;55290:16;;;;;;;;55266:21;;55290:16;;;;;;;;-1:-1:-1;;55327:15:0;;:22;;;-1:-1:-1;;;55327:22:0;;;;55266:40;;-1:-1:-1;;;;;;55327:15:0;;;;:20;;-1:-1:-1;55327:22:0;;;;;;;;;;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;55317:4;55322:1;55317:7;;;;;;-1:-1:-1;;;55317:7:0;;;;;;;;;;;;;;:32;-1:-1:-1;;;;;55317:32:0;;;-1:-1:-1;;;;;55317:32:0;;;;;55378:4;55360;55365:1;55360:7;;;;;;-1:-1:-1;;;55360:7:0;;;;;;;;;-1:-1:-1;;;;;55360:23:0;;;:7;;;;;;;;;;;:23;55396:17;55416:220;46440:5;55416:92;55484:23;46440:5;46529:2;55484:11;:23::i;:::-;55416:15;;55456:13;;55416:60;;-1:-1:-1;;;55416:60:0;;-1:-1:-1;;;;;55416:15:0;;;;:39;;:60;;55471:4;;55416:60;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;55416:60:0;;;;;;;;;;;;:::i;:::-;55477:1;55416:63;;;;;;-1:-1:-1;;;55416:63:0;;;;;;;;;;;;;;;:67;;:92;;;;:::i;:::-;:96;;:220::i;:::-;55654:24;;;;;55108:578;-1:-1:-1;;;55108:578:0:o;53252:267::-;9055:13;:11;:13::i;:::-;53322:12:::1;:20:::0;;;53432:6:::1;::::0;53398:14:::1;::::0;53382:10:::1;::::0;53365:84:::1;::::0;53432:6;53365:48:::1;::::0;;;53337:5;;53365:16:::1;:28::i;54341:157::-:0;9055:13;:11;:13::i;:::-;54452:17:::1;:38:::0;;-1:-1:-1;;;;;;54452:38:0::1;-1:-1:-1::0;;;;;54452:38:0;;;::::1;::::0;;;::::1;::::0;;54341:157::o;20228:238::-;20316:4;7800:10;20372:64;7800:10;20388:7;20425:10;20397:25;7800:10;20388:7;20397:9;:25::i;:::-;:38;;;;:::i;:::-;20372:8;:64::i;66647:212::-;66727:10;17757:7;17784:18;;;;;;;;;;;66742:6;-1:-1:-1;66717:31:0;66695:114;;;;-1:-1:-1;;;66695:114:0;;11070:2:1;66695:114:0;;;11052:21:1;11109:2;11089:18;;;11082:30;11148:34;11128:18;;;11121:62;-1:-1:-1;;;11199:18:1;;;11192:31;11240:19;;66695:114:0;11042:223:1;66695:114:0;66820:31;66832:10;66844:6;66820:11;:31::i;52981:263::-;9055:13;:11;:13::i;:::-;53049:10:::1;:18:::0;;;53157:6:::1;::::0;53123:14:::1;::::0;53105:12:::1;::::0;53090:84:::1;::::0;53157:6;53090:48:::1;::::0;;;53062:5;;53090:14:::1;:28::i;54618:112::-:0;9055:13;:11;:13::i;:::-;54695:15:::1;:27:::0;54618:112::o;58034:536::-;9055:13;:11;:13::i;:::-;58157:15:::1;::::0;-1:-1:-1;;;;;58135:38:0;;::::1;58157:15:::0;::::1;58135:38;;58113:130;;;::::0;-1:-1:-1;;;58113:130:0;;15295:2:1;58113:130:0::1;::::0;::::1;15277:21:1::0;15334:2;15314:18;;;15307:30;15373:34;15353:18;;;15346:62;-1:-1:-1;;;15424:18:1;;;15417:40;15474:19;;58113:130:0::1;15267:232:1::0;58113:130:0::1;58301:15;::::0;58259:59:::1;::::0;-1:-1:-1;;;;;58301:15:0;;::::1;::::0;58259:59;::::1;::::0;::::1;::::0;58301:15:::1;::::0;58259:59:::1;58329:15;:48:::0;;-1:-1:-1;;;;;;58329:48:0::1;-1:-1:-1::0;;;;;58329:48:0;::::1;::::0;;::::1;::::0;;;58431:25:::1;::::0;;-1:-1:-1;;;58431:25:0;;;;-1:-1:-1;;58329:48:0;58431:23:::1;::::0;:25:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;58329:48;58431:25;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;58413:69:0::1;;58491:4;58498:15;;;;;;;;;-1:-1:-1::0;;;;;58498:15:0::1;-1:-1:-1::0;;;;;58498:20:0::1;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;58413:108;::::0;-1:-1:-1;;;;;;58413:108:0::1;::::0;;;;;;-1:-1:-1;;;;;6205:15:1;;;58413:108:0::1;::::0;::::1;6187:34:1::0;6257:15;;6237:18;;;6230:43;6122:18;;58413:108:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;58532:13;:30:::0;;-1:-1:-1;;;;;;58532:30:0::1;-1:-1:-1::0;;;;;58532:30:0;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;58034:536:0:o;9817:103::-;9055:13;:11;:13::i;:::-;9882:30:::1;9909:1;9882:18;:30::i;:::-;9817:103::o:0;54738:116::-;9055:13;:11;:13::i;:::-;54817:16:::1;:29:::0;54738:116::o;66865:216::-;9055:13;:11;:13::i;:::-;66940:21:::1;66980:10:::0;66972:42:::1;;;::::0;-1:-1:-1;;;66972:42:0;;10319:2:1;66972:42:0::1;::::0;::::1;10301:21:1::0;10358:2;10338:18;;;10331:30;-1:-1:-1;;;10377:18:1;;;10370:49;10436:18;;66972:42:0::1;10291:169:1::0;66972:42:0::1;67025:48;7800:10:::0;67066:6:::1;67025:17;:48::i;67089:222::-:0;9055:13;:11;:13::i;:::-;67185:4:::1;67150:14;17784:18:::0;;;;;;;;;;;67210:10;67202:44:::1;;;::::0;-1:-1:-1;;;67202:44:0;;14945:2:1;67202:44:0::1;::::0;::::1;14927:21:1::0;14984:2;14964:18;;;14957:30;-1:-1:-1;;;15003:18:1;;;14996:51;15064:18;;67202:44:0::1;14917:171:1::0;67202:44:0::1;67257:46;67275:4;7800:10:::0;67296:6:::1;67257:9;:46::i;56284:305::-:0;9055:13;:11;:13::i;:::-;56396:10:::1;17757:7:::0;17784:18;;;;;;;;;;;56411:11;-1:-1:-1;56386:36:0::1;56364:134;;;::::0;-1:-1:-1;;;56364:134:0;;19307:2:1;56364:134:0::1;::::0;::::1;19289:21:1::0;19346:2;19326:18;;;19319:30;19385:34;19365:18;;;19358:62;-1:-1:-1;;;19436:18:1;;;19429:46;19492:19;;56364:134:0::1;19279:238:1::0;56364:134:0::1;56534:22;::::0;:37:::1;::::0;56561:9:::1;56534:26;:37::i;:::-;56509:22;:62:::0;-1:-1:-1;56284:305:0:o;54506:104::-;9055:13;:11;:13::i;:::-;54579::::1;:23:::0;54506:104::o;16611:::-;16667:13;16700:7;16693:14;;;;;:::i;59258:319::-;9055:13;:11;:13::i;:::-;59402::::1;::::0;-1:-1:-1;;;;;59394:21:0;;::::1;59402:13:::0;::::1;59394:21;;59372:143;;;::::0;-1:-1:-1;;;59372:143:0;;18826:2:1;59372:143:0::1;::::0;::::1;18808:21:1::0;18865:2;18845:18;;;18838:30;18904:34;18884:18;;;18877:62;18975:34;18955:18;;;18948:62;-1:-1:-1;;;19026:19:1;;;19019:39;19075:19;;59372:143:0::1;18798:302:1::0;59372:143:0::1;59528:41;59557:4;59563:5;59528:28;:41::i;:::-;59258:319:::0;;:::o;53527:303::-;9055:13;:11;:13::i;:::-;53616:5:::1;53599:14;:22;;;;53632:21;53656:102;53751:6;;53656:76;53721:10;;53656:46;53689:12;;53656:14;;:32;;:46;;;;:::i;:102::-;53632:126;;53794:2;53777:13;:19;;53769:53;;;::::0;-1:-1:-1;;;53769:53:0;;14595:2:1;53769:53:0::1;::::0;::::1;14577:21:1::0;14634:2;14614:18;;;14607:30;-1:-1:-1;;;14653:18:1;;;14646:51;14714:18;;53769:53:0::1;14567:171:1::0;67319:381:0;9055:13;:11;:13::i;:::-;-1:-1:-1;;;;;67415:22:0;::::1;67432:4;67415:22;;67393:120;;;::::0;-1:-1:-1;;;67393:120:0;;16048:2:1;67393:120:0::1;::::0;::::1;16030:21:1::0;16087:2;16067:18;;;16060:30;16126:34;16106:18;;;16099:62;-1:-1:-1;;;16177:18:1;;;16170:46;16233:19;;67393:120:0::1;16020:238:1::0;67393:120:0::1;67542:38;::::0;-1:-1:-1;;;67542:38:0;;67574:4:::1;67542:38;::::0;::::1;5913:51:1::0;67524:15:0::1;::::0;-1:-1:-1;;;;;67542:23:0;::::1;::::0;::::1;::::0;5886:18:1;;67542:38:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;67524:56;;67609:1;67599:7;:11;67591:45;;;::::0;-1:-1:-1;;;67591:45:0;;14945:2:1;67591:45:0::1;::::0;::::1;14927:21:1::0;14984:2;14964:18;;;14957:30;-1:-1:-1;;;15003:18:1;;;14996:51;15064:18;;67591:45:0::1;14917:171:1::0;67591:45:0::1;-1:-1:-1::0;;;;;67647:22:0;::::1;;7800:10:::0;67647:45:::1;::::0;-1:-1:-1;;;;;;67647:45:0::1;::::0;;;;;;-1:-1:-1;;;;;6476:32:1;;;67647:45:0::1;::::0;::::1;6458:51:1::0;6525:18;;;6518:34;;;6431:18;;67647:45:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;9079:1;67319:381:::0;:::o;20969:436::-;21062:4;7800:10;21062:4;21145:25;7800:10;21162:7;21145:9;:25::i;:::-;21118:52;;21209:15;21189:16;:35;;21181:85;;;;-1:-1:-1;;;21181:85:0;;19724:2:1;21181:85:0;;;19706:21:1;19763:2;19743:18;;;19736:30;19802:34;19782:18;;;19775:62;-1:-1:-1;;;19853:18:1;;;19846:35;19898:19;;21181:85:0;19696:227:1;21181:85:0;21302:60;21311:5;21318:7;21346:15;21327:16;:34;21302:8;:60::i;18016:193::-;18095:4;7800:10;18151:28;7800:10;18168:2;18172:6;18151:9;:28::i;52664:112::-;9055:13;:11;:13::i;:::-;52741:18:::1;:27:::0;52664:112::o;57756:262::-;9055:13;:11;:13::i;:::-;57858:9:::1;57854:153;57869:19:::0;;::::1;57854:153;;;57910:18;57931:8;;57940:1;57931:11;;;;;-1:-1:-1::0;;;57931:11:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;57957:25:0::1;;::::0;;;:13:::1;:25;::::0;;;;:34;;-1:-1:-1;;57957:34:0::1;::::0;::::1;;;::::0;;-1:-1:-1;57890:3:0;::::1;::::0;::::1;:::i;:::-;;;;57854:153;;;;57756:262:::0;;;:::o;58578:334::-;9055:13;:11;:13::i;:::-;-1:-1:-1;;;;;58685:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;::::1;;:40;;::::0;::::1;;;;58663:139;;;::::0;-1:-1:-1;;;58663:139:0;;12985:2:1;58663:139:0::1;::::0;::::1;12967:21:1::0;13024:2;13004:18;;;12997:30;13063:34;13043:18;;;13036:62;-1:-1:-1;;;13114:18:1;;;13107:47;13171:19;;58663:139:0::1;12957:239:1::0;58663:139:0::1;-1:-1:-1::0;;;;;58813:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;58813:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;58870:34;;8467:41:1;;;58870:34:0::1;::::0;8440:18:1;58870:34:0::1;;;;;;;58578:334:::0;;:::o;58920:330::-;9055:13;:11;:13::i;:::-;59063:9:::1;59058:116;59078:19:::0;;::::1;59058:116;;;59154:8;59119:19;:32;59139:8;;59148:1;59139:11;;;;;-1:-1:-1::0;;;59139:11:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;59119:32:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;59119:32:0;:43;;-1:-1:-1;;59119:43:0::1;::::0;::::1;;::::0;;;::::1;::::0;;59099:3;::::1;::::0;::::1;:::i;:::-;;;;59058:116;;;;59191:51;59223:8;;59233;59191:51;;;;;;;;:::i;:::-;;;;;;;;58920:330:::0;;;:::o;52784:189::-;9055:13;:11;:13::i;:::-;52911:25:::1;:54:::0;52784:189::o;18272:151::-;-1:-1:-1;;;;;18388:18:0;;;18361:7;18388:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;18272:151::o;10075:201::-;9055:13;:11;:13::i;:::-;-1:-1:-1;;;;;10164:22:0;::::1;10156:73;;;::::0;-1:-1:-1;;;10156:73:0;;11817:2:1;10156:73:0::1;::::0;::::1;11799:21:1::0;11856:2;11836:18;;;11829:30;11895:34;11875:18;;;11868:62;-1:-1:-1;;;11946:18:1;;;11939:36;11992:19;;10156:73:0::1;11789:228:1::0;10156:73:0::1;10240:28;10259:8;10240:18;:28::i;2876:98::-:0;2934:7;2961:5;2965:1;2961;:5;:::i;:::-;2954:12;2876:98;-1:-1:-1;;;2876:98:0:o;9334:132::-;9242:6;;-1:-1:-1;;;;;9242:6:0;7800:10;9398:23;9390:68;;;;-1:-1:-1;;;9390:68:0;;16465:2:1;9390:68:0;;;16447:21:1;;;16484:18;;;16477:30;16543:34;16523:18;;;16516:62;16595:18;;9390:68:0;16437:182:1;24996:380:0;-1:-1:-1;;;;;25132:19:0;;25124:68;;;;-1:-1:-1;;;25124:68:0;;18066:2:1;25124:68:0;;;18048:21:1;18105:2;18085:18;;;18078:30;18144:34;18124:18;;;18117:62;-1:-1:-1;;;18195:18:1;;;18188:34;18239:19;;25124:68:0;18038:226:1;25124:68:0;-1:-1:-1;;;;;25211:21:0;;25203:68;;;;-1:-1:-1;;;25203:68:0;;12224:2:1;25203:68:0;;;12206:21:1;12263:2;12243:18;;;12236:30;12302:34;12282:18;;;12275:62;-1:-1:-1;;;12353:18:1;;;12346:32;12395:19;;25203:68:0;12196:224:1;25203:68:0;-1:-1:-1;;;;;25284:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;25336:32;;20074:25:1;;;25336:32:0;;20047:18:1;25336:32:0;;;;;;;24996:380;;;:::o;25667:453::-;25802:24;25829:25;25839:5;25846:7;25829:9;:25::i;:::-;25802:52;;-1:-1:-1;;25869:16:0;:37;25865:248;;25951:6;25931:16;:26;;25923:68;;;;-1:-1:-1;;;25923:68:0;;12627:2:1;25923:68:0;;;12609:21:1;12666:2;12646:18;;;12639:30;12705:31;12685:18;;;12678:59;12754:18;;25923:68:0;12599:179:1;25923:68:0;26035:51;26044:5;26051:7;26079:6;26060:16;:25;26035:8;:51::i;60079:4335::-;-1:-1:-1;;;;;60211:18:0;;60203:68;;;;-1:-1:-1;;;60203:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;60290:16:0;;60282:64;;;;-1:-1:-1;;;60282:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;60366:19:0;;;;;;:13;:19;;;;;;;;60365:20;60357:49;;;;-1:-1:-1;;;60357:49:0;;11472:2:1;60357:49:0;;;11454:21:1;11511:2;11491:18;;;11484:30;-1:-1:-1;;;11530:18:1;;;11523:46;11586:18;;60357:49:0;11444:166:1;60357:49:0;60423:11;60419:93;;60451:28;60467:4;60473:2;60477:1;60451:15;:28::i;60419:93::-;60573:4;60524:28;17784:18;;;;;;;;;;;60631;;60607:42;;;;;;;60680:33;;-1:-1:-1;60705:8:0;;-1:-1:-1;;;60705:8:0;;;;60704:9;60680:33;:82;;;;-1:-1:-1;;;;;;60731:31:0;;;;;;:25;:31;;;;;;;;60730:32;60680:82;:114;;;;-1:-1:-1;9242:6:0;;-1:-1:-1;;;;;60779:15:0;;;9242:6;;60779:15;;60680:114;:144;;;;-1:-1:-1;9242:6:0;;-1:-1:-1;;;;;60811:13:0;;;9242:6;;60811:13;;60680:144;60662:1645;;;60851:8;:15;;-1:-1:-1;;;;60851:15:0;-1:-1:-1;;;60851:15:0;;;60963:9;;60927:12;;60851:15;;60902:85;;:38;;:20;;:24;:38::i;:85::-;60881:106;;61002:26;61017:10;61002:14;:26::i;:::-;61069:21;61105:54;61122:36;:20;61147:10;61122:24;:36::i;:::-;61105:16;:54::i;:::-;61174:29;61206:27;61220:12;;61206:9;;:13;;:27;;;;:::i;:::-;61174:59;-1:-1:-1;61250:25:0;61278:72;:21;61322:13;61278:25;:72::i;:::-;61373:9;;61433:6;;61250:100;;-1:-1:-1;;;;;;61373:9:0;;61365:117;;61411:56;;61445:21;;61411:29;;61250:100;;61411:21;:29::i;:56::-;61365:117;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;61531:9:0;;61581:6;;-1:-1:-1;;;;;61531:9:0;;;;61502:128;;61559:56;;61593:21;;61559:29;;:17;;:21;:29::i;:56::-;61502:128;;20074:25:1;;;20062:2;20047:18;61502:128:0;;;;;;;61655:17;;61723:14;;-1:-1:-1;;;;;61655:17:0;;;;61647:133;;61701:64;;61743:21;;61701:37;;:17;;:21;:37::i;:64::-;61647:133;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;61837:17:0;;61895:14;;-1:-1:-1;;;;;61837:17:0;;;;61800:152;;61873:64;;61915:21;;61873:37;;:17;;:21;:37::i;:64::-;61800:152;;20074:25:1;;;20062:2;20047:18;61800:152:0;;;;;;;61969:27;61999:92;62055:21;61999:33;62021:10;;61999:17;:21;;:33;;;;:::i;:92::-;62131:22;;61969:122;;-1:-1:-1;62131:79:0;;61969:122;62131:26;:79::i;:::-;62106:22;:104;62230:32;;20074:25:1;;;62230:32:0;;20062:2:1;20047:18;62230:32:0;;;;;;;-1:-1:-1;;62279:8:0;:16;;-1:-1:-1;;;;62279:16:0;;;-1:-1:-1;;;60662:1645:0;62349:16;;62323:22;;:42;;:55;;;;-1:-1:-1;62370:8:0;;-1:-1:-1;;;62370:8:0;;;;62369:9;62323:55;62319:190;;;62395:16;:14;:16::i;:::-;62319:190;;;62433:20;:18;:20::i;:::-;:33;;;;-1:-1:-1;62458:8:0;;-1:-1:-1;;;62458:8:0;;;;62457:9;62433:33;62429:80;;;62483:14;:12;:14::i;:::-;62541:13;;-1:-1:-1;;;;;62525:30:0;;;62541:13;;62525:30;:59;;;;;62559:25;62577:6;62559:17;:25::i;:::-;62521:157;;;62621:15;62601:17;:35;62651:10;:15;;-1:-1:-1;;;;;;62651:15:0;-1:-1:-1;;;;;62651:15:0;;;;;62521:157;-1:-1:-1;;;;;62811:25:0;;62690:12;62811:25;;;:19;:25;;;;;;62705:4;;62811:25;;;:52;;-1:-1:-1;;;;;;62840:23:0;;;;;;:19;:23;;;;;;;;62811:52;62807:100;;;-1:-1:-1;62890:5:0;62807:100;62937:7;:90;;;;-1:-1:-1;;;;;;62962:31:0;;;;;;:25;:31;;;;;;;;;:64;;-1:-1:-1;;;;;;62997:29:0;;;;;;:25;:29;;;;;;;;62962:64;62919:1442;;;63062:11;;;;63054:50;;;;-1:-1:-1;;;63054:50:0;;18471:2:1;63054:50:0;;;18453:21:1;18510:2;18490:18;;;18483:30;18549:28;18529:18;;;18522:56;18595:18;;63054:50:0;18443:176:1;63054:50:0;63119:23;63145:74;46286:5;63145:21;63156:9;;63145:6;:10;;:21;;;;:::i;:74::-;-1:-1:-1;;;;;63238:29:0;;;;;;:25;:29;;;;;;63119:100;;-1:-1:-1;63238:29:0;;63234:995;;;63314:10;63357:42;63314:86;63288:926;;63550:37;46286:5;63550:16;:6;63561:4;63550:10;:16::i;:37::-;63532:55;;63622:9;;63634:1;63622:13;;;;:::i;:::-;63610:9;:25;63288:926;;;63684:14;63701:26;63712:14;;63701:6;:10;;:26;;;;:::i;:::-;63780:13;;-1:-1:-1;;;;;63780:13:0;17757:7;17784:18;;;;;;;;;;;63684:43;;-1:-1:-1;63759:48:0;;63770:36;;63799:6;;63770:24;17683:127;63770:36;63759:6;;:10;:48::i;:::-;63750:57;;63843:11;;63834:6;:20;63830:365;;;63969:37;46286:5;63969:16;:6;63980:4;63969:10;:16::i;:37::-;63951:55;;64046:10;;64059:1;64046:14;;;;:::i;:::-;64033:10;:27;63830:365;;;64135:36;46286:5;64135:15;:6;64146:3;64135:10;:15::i;:36::-;64117:54;;63830:365;63288:926;;64254:27;:6;64265:15;64254:10;:27::i;:::-;64245:36;;64296:53;64312:4;64326;64333:15;64296;:53::i;:::-;62919:1442;;64373:33;64389:4;64395:2;64399:6;64373:15;:33::i;:::-;60079:4335;;;;;;:::o;3257:98::-;3315:7;3342:5;3346:1;3342;:5;:::i;3614:98::-;3672:7;3699:5;3703:1;3699;:5;:::i;4013:98::-;4071:7;4098:5;4102:1;4098;:5;:::i;23883:675::-;-1:-1:-1;;;;;23967:21:0;;23959:67;;;;-1:-1:-1;;;23959:67:0;;17258:2:1;23959:67:0;;;17240:21:1;17297:2;17277:18;;;17270:30;17336:34;17316:18;;;17309:62;-1:-1:-1;;;17387:18:1;;;17380:31;17428:19;;23959:67:0;17230:223:1;23959:67:0;-1:-1:-1;;;;;24126:18:0;;24101:22;24126:18;;;;;;;;;;;24163:24;;;;24155:71;;;;-1:-1:-1;;;24155:71:0;;10667:2:1;24155:71:0;;;10649:21:1;10706:2;10686:18;;;10679:30;10745:34;10725:18;;;10718:62;-1:-1:-1;;;10796:18:1;;;10789:32;10838:19;;24155:71:0;10639:224:1;24155:71:0;-1:-1:-1;;;;;24262:18:0;;:9;:18;;;;;;;;;;;24283:23;;;24262:44;;24401:12;:22;;;;;;;24452:37;20074:25:1;;;24262:9:0;;:18;24452:37;;20047:18:1;24452:37:0;;;;;;;67647:45:::1;9079:1;67319:381:::0;:::o;10436:191::-;10529:6;;;-1:-1:-1;;;;;10546:17:0;;;-1:-1:-1;;;;;;10546:17:0;;;;;;;10579:40;;10529:6;;;10546:17;10529:6;;10579:40;;10510:16;;10579:40;10436:191;;:::o;33110:391::-;33239:6;33214:21;:31;;33192:110;;;;-1:-1:-1;;;33192:110:0;;14237:2:1;33192:110:0;;;14219:21:1;14276:2;14256:18;;;14249:30;14315:31;14295:18;;;14288:59;14364:18;;33192:110:0;14209:179:1;33192:110:0;33316:12;33334:9;-1:-1:-1;;;;;33334:14:0;33356:6;33334:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33315:52;;;33400:7;33378:115;;;;-1:-1:-1;;;33378:115:0;;13810:2:1;33378:115:0;;;13792:21:1;13849:2;13829:18;;;13822:30;13888:34;13868:18;;;13861:62;13959:28;13939:18;;;13932:56;14005:19;;33378:115:0;13782:248:1;59585:352:0;-1:-1:-1;;;;;59690:31:0;;;;;;:25;:31;;;;;;;;:40;;;;;;;59668:153;;;;-1:-1:-1;;;59668:153:0;;16826:2:1;59668:153:0;;;16808:21:1;16865:2;16845:18;;;16838:30;16904:34;16884:18;;;16877:62;16975:33;16955:18;;;16948:61;17026:19;;59668:153:0;16798:253:1;59668:153:0;-1:-1:-1;;;;;59832:31:0;;;;;;:25;:31;;;;;;:39;;-1:-1:-1;;59832:39:0;;;;;;;;;;59889:40;;59832:39;;:31;59889:40;;;59585:352;;:::o;21875:840::-;-1:-1:-1;;;;;22006:18:0;;21998:68;;;;-1:-1:-1;;;21998:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22085:16:0;;22077:64;;;;-1:-1:-1;;;22077:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22227:15:0;;22205:19;22227:15;;;;;;;;;;;22261:21;;;;22253:72;;;;-1:-1:-1;;;22253:72:0;;13403:2:1;22253:72:0;;;13385:21:1;13442:2;13422:18;;;13415:30;13481:34;13461:18;;;13454:62;-1:-1:-1;;;13532:18:1;;;13525:36;13578:19;;22253:72:0;13375:228:1;22253:72:0;-1:-1:-1;;;;;22361:15:0;;;:9;:15;;;;;;;;;;;22379:20;;;22361:38;;22579:13;;;;;;;;;;:23;;;;;;22631:26;;20074:25:1;;;22579:13:0;;22631:26;;20047:18:1;22631:26:0;;;;;;;22670:37;67319:381;64597:924;64707:12;64722:13;:6;64733:1;64722:10;:13::i;:::-;64707:28;-1:-1:-1;64746:17:0;64766:16;:6;64707:28;64766:10;:16::i;:::-;64746:36;-1:-1:-1;65085:21:0;65151:22;65168:4;65151:16;:22::i;:::-;65305:18;65326:41;:21;65352:14;65326:25;:41::i;:::-;65305:62;;65417:35;65430:9;65441:10;65417:12;:35::i;:::-;65470:43;;;21489:25:1;;;21545:2;21530:18;;21523:34;;;21573:18;;;21566:34;;;65470:43:0;;21477:2:1;21462:18;65470:43:0;;;;;;;64597:924;;;;;:::o;65529:589::-;65679:16;;;65693:1;65679:16;;;;;;;;65655:21;;65679:16;;;;;;;;;;-1:-1:-1;65679:16:0;65655:40;;65724:4;65706;65711:1;65706:7;;;;;;-1:-1:-1;;;65706:7:0;;;;;;;;;-1:-1:-1;;;;;65706:23:0;;;:7;;;;;;;;;;:23;;;;65750:15;;:22;;;-1:-1:-1;;;65750:22:0;;;;:15;;;;;:20;;:22;;;;;65706:7;;65750:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;65740:4;65745:1;65740:7;;;;;;-1:-1:-1;;;65740:7:0;;;;;;;;;-1:-1:-1;;;;;65740:32:0;;;:7;;;;;;;;;:32;65817:15;;65785:62;;65802:4;;65817:15;65835:11;65785:8;:62::i;:::-;65886:15;;:224;;-1:-1:-1;;;65886:224:0;;-1:-1:-1;;;;;65886:15:0;;;;:66;;:224;;65967:11;;65886:15;;66037:4;;66064;;66084:15;;65886:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;55694:582;49618:8;:15;;-1:-1:-1;;;;49618:15:0;-1:-1:-1;;;49618:15:0;;;55799:18:::1;::::0;55772:22:::1;::::0;49618:15;;55772:83:::1;::::0;46440:5:::1;::::0;55772:46:::1;::::0;:22;:26:::1;:46::i;:83::-;55886:17;::::0;55878:46:::1;::::0;55752:103;;-1:-1:-1;;;;;;55886:17:0::1;::::0;55878:46;::::1;;;::::0;55752:103;;55886:17:::1;55878:46:::0;55886:17;55878:46;55752:103;55886:17;55878:46;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;55942:18:0::1;::::0;20074:25:1;;;55942:18:0::1;::::0;20062:2:1;20047:18;55942::0::1;;;;;;;55973:16;:28:::0;;;56036:15:::1;56012:21;:39:::0;56087:22:::1;::::0;:37:::1;::::0;55992:9;56087:26:::1;:37::i;:::-;56062:22;:62:::0;56160:22:::1;::::0;:37:::1;::::0;56187:9;56160:26:::1;:37::i;:::-;56135:22;:62:::0;56231:20:::1;::::0;:35:::1;::::0;56256:9;56231:24:::1;:35::i;:::-;56208:20;:58:::0;-1:-1:-1;49656:8:0;:16;;-1:-1:-1;;;;49656:16:0;;;55694:582::o;56597:1153::-;49618:8;:15;;-1:-1:-1;;;;49618:15:0;-1:-1:-1;;;49618:15:0;;;56675:10:::1;::::0;-1:-1:-1;;;;;56675:10:0::1;:24:::0;;::::1;::::0;:55:::1;;-1:-1:-1::0;56703:10:0::1;::::0;-1:-1:-1;;;;;56703:10:0::1;56725:4;56703:27;;56675:55;56653:127;;;::::0;-1:-1:-1;;;56653:127:0;;9968:2:1;56653:127:0::1;::::0;::::1;9950:21:1::0;10007:2;9987:18;;;9980:30;-1:-1:-1;;;10026:18:1;;;10019:52;10088:18;;56653:127:0::1;9940:172:1::0;56653:127:0::1;56791:17;56811:79;46440:5;56811:42;56838:14;;56811:22;;:26;;:42;;;;:::i;:79::-;56791:99;;56913:18;56934:45;46440:5;56934:32;56948:17;;56934:9;:13;;:32;;;;:::i;:45::-;56913:66:::0;-1:-1:-1;56990:17:0::1;57010:22;56913:66:::0;57010:9;:22:::1;:::i;:::-;57078:10;::::0;56990:42;;-1:-1:-1;57052:50:0::1;::::0;-1:-1:-1;;;;;57078:10:0::1;57091::::0;57052:17:::1;:50::i;:::-;57139:17;::::0;57113:56:::1;::::0;-1:-1:-1;;;;;57139:17:0::1;57159:9:::0;57113:17:::1;:56::i;:::-;57215:22;::::0;:37:::1;::::0;57242:9;57215:26:::1;:37::i;:::-;57190:22;:62:::0;57290:10:::1;::::0;57275:12:::1;:25:::0;;-1:-1:-1;;;;;;57275:25:0::1;-1:-1:-1::0;;;;;57290:10:0;;::::1;57275:25:::0;;::::1;::::0;;57311:16:::1;:28:::0;;;57374:15:::1;57350:21;:39:::0;57417:37:::1;::::0;20074:25:1;;;57417:37:0::1;::::0;20062:2:1;20047:18;57417:37:0::1;;;;;;;57467:10;:35:::0;;-1:-1:-1;;;;;;57467:35:0::1;57496:4;57467:35;::::0;;:10:::1;57513:17;:21:::0;57570:22:::1;::::0;:37:::1;::::0;57597:9;57570:26:::1;:37::i;:::-;57545:22;:62:::0;57639:18:::1;::::0;:34:::1;::::0;57662:10;57639:22:::1;:34::i;:::-;57618:18;:55:::0;57707:20:::1;::::0;:35:::1;::::0;57732:9;57707:24:::1;:35::i;:::-;57684:20;:58:::0;-1:-1:-1;;49656:8:0;:16;;-1:-1:-1;;;;49656:16:0;;;-1:-1:-1;56597:1153:0:o;66126:513::-;66306:15;;66274:62;;66291:4;;-1:-1:-1;;;;;66306:15:0;66324:11;66274:8;:62::i;:::-;66379:15;;-1:-1:-1;;;;;66379:15:0;:31;66418:9;66451:4;66471:11;66379:15;;66583:7;9242:6;;-1:-1:-1;;;;;9242:6:0;;9169:87;66583:7;66379:252;;;;;;-1:-1:-1;;;;;;66379:252:0;;;-1:-1:-1;;;;;6922:15:1;;;66379:252:0;;;6904:34:1;6954:18;;;6947:34;;;;6997:18;;;6990:34;;;;7040:18;;;7033:34;7104:15;;;7083:19;;;7076:44;66605:15:0;7136:19:1;;;7129:35;6838:19;;66379:252:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;66126:513;;:::o;14:257:1:-;73:6;126:2;114:9;105:7;101:23;97:32;94:2;;;147:6;139;132:22;94:2;191:9;178:23;210:31;235:5;210:31;:::i;276:261::-;346:6;399:2;387:9;378:7;374:23;370:32;367:2;;;420:6;412;405:22;367:2;457:9;451:16;476:31;501:5;476:31;:::i;542:398::-;610:6;618;671:2;659:9;650:7;646:23;642:32;639:2;;;692:6;684;677:22;639:2;736:9;723:23;755:31;780:5;755:31;:::i;:::-;805:5;-1:-1:-1;862:2:1;847:18;;834:32;875:33;834:32;875:33;:::i;:::-;927:7;917:17;;;629:311;;;;;:::o;945:466::-;1022:6;1030;1038;1091:2;1079:9;1070:7;1066:23;1062:32;1059:2;;;1112:6;1104;1097:22;1059:2;1156:9;1143:23;1175:31;1200:5;1175:31;:::i;:::-;1225:5;-1:-1:-1;1282:2:1;1267:18;;1254:32;1295:33;1254:32;1295:33;:::i;:::-;1049:362;;1347:7;;-1:-1:-1;;;1401:2:1;1386:18;;;;1373:32;;1049:362::o;1416:392::-;1481:6;1489;1542:2;1530:9;1521:7;1517:23;1513:32;1510:2;;;1563:6;1555;1548:22;1510:2;1607:9;1594:23;1626:31;1651:5;1626:31;:::i;:::-;1676:5;-1:-1:-1;1733:2:1;1718:18;;1705:32;1746:30;1705:32;1746:30;:::i;1813:325::-;1881:6;1889;1942:2;1930:9;1921:7;1917:23;1913:32;1910:2;;;1963:6;1955;1948:22;1910:2;2007:9;1994:23;2026:31;2051:5;2026:31;:::i;:::-;2076:5;2128:2;2113:18;;;;2100:32;;-1:-1:-1;;;1900:238:1:o;2143:800::-;2235:6;2243;2251;2304:2;2292:9;2283:7;2279:23;2275:32;2272:2;;;2325:6;2317;2310:22;2272:2;2370:9;2357:23;2399:18;2440:2;2432:6;2429:14;2426:2;;;2461:6;2453;2446:22;2426:2;2504:6;2493:9;2489:22;2479:32;;2549:7;2542:4;2538:2;2534:13;2530:27;2520:2;;2576:6;2568;2561:22;2520:2;2621;2608:16;2647:2;2639:6;2636:14;2633:2;;;2668:6;2660;2653:22;2633:2;2728:7;2721:4;2711:6;2708:1;2704:14;2700:2;2696:23;2692:34;2689:47;2686:2;;;2754:6;2746;2739:22;2686:2;2790:4;2782:13;;;;-1:-1:-1;2814:6:1;-1:-1:-1;;2855:20:1;;2842:34;2885:28;2842:34;2885:28;:::i;:::-;2932:5;2922:15;;;2262:681;;;;;:::o;2948:1161::-;3043:6;3074:2;3117;3105:9;3096:7;3092:23;3088:32;3085:2;;;3138:6;3130;3123:22;3085:2;3176:9;3170:16;3205:18;3246:2;3238:6;3235:14;3232:2;;;3267:6;3259;3252:22;3232:2;3310:6;3299:9;3295:22;3285:32;;3355:7;3348:4;3344:2;3340:13;3336:27;3326:2;;3382:6;3374;3367:22;3326:2;3416;3410:9;3438:2;3434;3431:10;3428:2;;;3444:18;;:::i;:::-;3490:2;3487:1;3483:10;3522:2;3516:9;3585:2;3581:7;3576:2;3572;3568:11;3564:25;3556:6;3552:38;3640:6;3628:10;3625:22;3620:2;3608:10;3605:18;3602:46;3599:2;;;3651:18;;:::i;:::-;3687:2;3680:22;3737:18;;;3771:15;;;;-1:-1:-1;3806:11:1;;;3836;;;3832:20;;3829:33;-1:-1:-1;3826:2:1;;;3880:6;3872;3865:22;3826:2;3907:6;3898:15;;3922:156;3936:2;3933:1;3930:9;3922:156;;;3993:10;;3981:23;;3954:1;3947:9;;;;;4024:12;;;;4056;;3922:156;;;-1:-1:-1;4097:6:1;3054:1055;-1:-1:-1;;;;;;;;3054:1055:1:o;4114:255::-;4181:6;4234:2;4222:9;4213:7;4209:23;4205:32;4202:2;;;4255:6;4247;4240:22;4202:2;4292:9;4286:16;4311:28;4333:5;4311:28;:::i;4374:190::-;4433:6;4486:2;4474:9;4465:7;4461:23;4457:32;4454:2;;;4507:6;4499;4492:22;4454:2;-1:-1:-1;4535:23:1;;4444:120;-1:-1:-1;4444:120:1:o;4569:194::-;4639:6;4692:2;4680:9;4671:7;4667:23;4663:32;4660:2;;;4713:6;4705;4698:22;4660:2;-1:-1:-1;4741:16:1;;4650:113;-1:-1:-1;4650:113:1:o;4768:316::-;4856:6;4864;4872;4925:2;4913:9;4904:7;4900:23;4896:32;4893:2;;;4946:6;4938;4931:22;4893:2;4980:9;4974:16;4964:26;;5030:2;5019:9;5015:18;5009:25;4999:35;;5074:2;5063:9;5059:18;5053:25;5043:35;;4883:201;;;;;:::o;5089:463::-;5142:3;5180:5;5174:12;5207:6;5202:3;5195:19;5233:4;5262:2;5257:3;5253:12;5246:19;;5299:2;5292:5;5288:14;5320:3;5332:195;5346:6;5343:1;5340:13;5332:195;;;5411:13;;-1:-1:-1;;;;;5407:39:1;5395:52;;5467:12;;;;5502:15;;;;5443:1;5361:9;5332:195;;;-1:-1:-1;5543:3:1;;5150:402;-1:-1:-1;;;;;5150:402:1:o;7525:797::-;7747:2;7759:21;;;7732:18;;7815:22;;;7699:4;7894:6;7868:2;7853:18;;7699:4;7931:304;7945:6;7942:1;7939:13;7931:304;;;8020:6;8007:20;8040:31;8065:5;8040:31;:::i;:::-;-1:-1:-1;;;;;8096:31:1;8084:44;;8151:4;8210:15;;;;8175:12;;;;8124:1;7960:9;7931:304;;;7935:3;8252;8244:11;;;;8307:6;8300:14;8293:22;8286:4;8275:9;8271:20;8264:52;7708:614;;;;;;:::o;8754:603::-;8866:4;8895:2;8924;8913:9;8906:21;8956:6;8950:13;8999:6;8994:2;8983:9;8979:18;8972:34;9024:4;9037:140;9051:6;9048:1;9045:13;9037:140;;;9146:14;;;9142:23;;9136:30;9112:17;;;9131:2;9108:26;9101:66;9066:10;;9037:140;;;9195:6;9192:1;9189:13;9186:2;;;9265:4;9260:2;9251:6;9240:9;9236:22;9232:31;9225:45;9186:2;-1:-1:-1;9341:2:1;9320:15;-1:-1:-1;;9316:29:1;9301:45;;;;9348:2;9297:54;;8875:482;-1:-1:-1;;;8875:482:1:o;9362:399::-;9564:2;9546:21;;;9603:2;9583:18;;;9576:30;9642:34;9637:2;9622:18;;9615:62;-1:-1:-1;;;9708:2:1;9693:18;;9686:33;9751:3;9736:19;;9536:225::o;17458:401::-;17660:2;17642:21;;;17699:2;17679:18;;;17672:30;17738:34;17733:2;17718:18;;17711:62;-1:-1:-1;;;17804:2:1;17789:18;;17782:35;17849:3;17834:19;;17632:227::o;20110:332::-;20317:6;20306:9;20299:25;20360:2;20355;20344:9;20340:18;20333:30;20280:4;20380:56;20432:2;20421:9;20417:18;20409:6;20380:56;:::i;:::-;20372:64;20289:153;-1:-1:-1;;;;20289:153:1:o;20447:582::-;20746:6;20735:9;20728:25;20789:6;20784:2;20773:9;20769:18;20762:34;20832:3;20827:2;20816:9;20812:18;20805:31;20709:4;20853:57;20905:3;20894:9;20890:19;20882:6;20853:57;:::i;:::-;-1:-1:-1;;;;;20946:32:1;;;;20941:2;20926:18;;20919:60;-1:-1:-1;21010:3:1;20995:19;20988:35;20845:65;20718:311;-1:-1:-1;;;20718:311:1:o;21800:128::-;21840:3;21871:1;21867:6;21864:1;21861:13;21858:2;;;21877:18;;:::i;:::-;-1:-1:-1;21913:9:1;;21848:80::o;21933:217::-;21973:1;21999;21989:2;;-1:-1:-1;;;22024:31:1;;22078:4;22075:1;22068:15;22106:4;22031:1;22096:15;21989:2;-1:-1:-1;22135:9:1;;21979:171::o;22155:168::-;22195:7;22261:1;22257;22253:6;22249:14;22246:1;22243:21;22238:1;22231:9;22224:17;22220:45;22217:2;;;22268:18;;:::i;:::-;-1:-1:-1;22308:9:1;;22207:116::o;22328:125::-;22368:4;22396:1;22393;22390:8;22387:2;;;22401:18;;:::i;:::-;-1:-1:-1;22438:9:1;;22377:76::o;22458:380::-;22537:1;22533:12;;;;22580;;;22601:2;;22655:4;22647:6;22643:17;22633:27;;22601:2;22708;22700:6;22697:14;22677:18;22674:38;22671:2;;;22754:10;22749:3;22745:20;22742:1;22735:31;22789:4;22786:1;22779:15;22817:4;22814:1;22807:15;22671:2;;22513:325;;;:::o;22843:135::-;22882:3;-1:-1:-1;;22903:17:1;;22900:2;;;22923:18;;:::i;:::-;-1:-1:-1;22970:1:1;22959:13;;22890:88::o;22983:127::-;23044:10;23039:3;23035:20;23032:1;23025:31;23075:4;23072:1;23065:15;23099:4;23096:1;23089:15;23115:127;23176:10;23171:3;23167:20;23164:1;23157:31;23207:4;23204:1;23197:15;23231:4;23228:1;23221:15;23247:131;-1:-1:-1;;;;;23322:31:1;;23312:42;;23302:2;;23368:1;23365;23358:12;23383:118;23469:5;23462:13;23455:21;23448:5;23445:32;23435:2;;23491:1;23488;23481:12

Swarm Source

ipfs://2d9e1b8136ab93ba63a0a6a4e78eea9fdaddcc60132f5f09a40edd1ffb83dfa1

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.