CRO Price: $0.08 (+1.88%)

Token

Cropper Chips (CropperChips)

Overview

Max Total Supply

1,987 CropperChips

Holders

36

Market

Price

$0.00 @ 0.000000 CRO

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 0 Decimals)

Balance
67 CropperChips

Value
$0.00
0x18f3bd138b6a272180a5c173ffe25288de9fc366
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information

Contract Source Code Verified (Exact Match)

Contract Name:
CropperChips

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at cronoscan.com on 2023-01-04
*/

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.9;


interface IERC20 {
    
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

abstract contract ReentrancyGuard {
    // Booleans are more expensive than uint256 or any type that takes up a full
    // word because each write operation emits an extra SLOAD to first read the
    // slot's contents, replace the bits taken up by the boolean, and then write
    // back. This is the compiler's defense against contract upgrades and
    // pointer aliasing, and it cannot be disabled.

    // The values being non-zero value makes deployment a bit more expensive,
    // but in exchange the refund on every call to nonReentrant will be lower in
    // amount. Since refunds are capped to a percentage of the total
    // transaction's gas, it is best to keep them low in cases like this one, to
    // increase the likelihood of the full refund coming into effect.
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

    /**
     * @dev Prevents a contract from calling itself, directly or indirectly.
     * Calling a `nonReentrant` function from another `nonReentrant`
     * function is not supported. It is possible to prevent this from happening
     * by making the `nonReentrant` function external, and making it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        // On the first call to nonReentrant, _notEntered will be true
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

        // Any calls to nonReentrant after this point will fail
        _status = _ENTERED;

        _;

        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        _status = _NOT_ENTERED;
    }
}

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

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

/**
 * @dev Interface of the ERC165 standard, as defined in the
 * https://eips.ethereum.org/EIPS/eip-165[EIP].
 *
 * Implementers can declare support of contract interfaces, which can then be
 * queried by others ({ERC165Checker}).
 *
 * For an implementation, see {ERC165}.
 */
interface IERC165 {
    /**
     * @dev Returns true if this contract implements the interface defined by
     * `interfaceId`. See the corresponding
     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
     * to learn more about how these ids are created.
     *
     * This function call must use less than 30 000 gas.
     */
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

/**
 * @dev Collection of functions related to the address type
 */
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

                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

library SafeERC20 {
    using Address for address;

    function safeTransfer(
        IERC20 token,
        address to,
        uint256 value
    ) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
    }

    function safeTransferFrom(
        IERC20 token,
        address from,
        address to,
        uint256 value
    ) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
    }

    /**
     * @dev Deprecated. This function has issues similar to the ones found in
     * {IERC20-approve}, and its usage is discouraged.
     *
     * Whenever possible, use {safeIncreaseAllowance} and
     * {safeDecreaseAllowance} instead.
     */
    function safeApprove(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        // safeApprove should only be called when setting an initial allowance,
        // or when resetting it to zero. To increase and decrease it, use
        // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'
        require(
            (value == 0) || (token.allowance(address(this), spender) == 0),
            "SafeERC20: approve from non-zero to non-zero allowance"
        );
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
    }

    function safeIncreaseAllowance(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        uint256 newAllowance = token.allowance(address(this), spender) + value;
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
    }

    function safeDecreaseAllowance(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        unchecked {
            uint256 oldAllowance = token.allowance(address(this), spender);
            require(oldAllowance >= value, "SafeERC20: decreased allowance below zero");
            uint256 newAllowance = oldAllowance - value;
            _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
        }
    }

    /**
     * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement
     * on the return value: the return value is optional (but if data is returned, it must not be false).
     * @param token The token targeted by the call.
     * @param data The call data (encoded using abi.encode or one of its variants).
     */
    function _callOptionalReturn(IERC20 token, bytes memory data) private {
        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since
        // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that
        // the target address contains contract code and also asserts for success in the low-level call.

        bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed");
        if (returndata.length > 0) {
            // Return data is optional
            require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
        }
    }
}

/**
 * @dev String operations.
 */
library Strings {
    bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";

    /**
     * @dev Converts a `uint256` to its ASCII `string` decimal representation.
     */
    function toString(uint256 value) internal pure returns (string memory) {
        // Inspired by OraclizeAPI's implementation - MIT licence
        // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol

        if (value == 0) {
            return "0";
        }
        uint256 temp = value;
        uint256 digits;
        while (temp != 0) {
            digits++;
            temp /= 10;
        }
        bytes memory buffer = new bytes(digits);
        while (value != 0) {
            digits -= 1;
            buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
            value /= 10;
        }
        return string(buffer);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.
     */
    function toHexString(uint256 value) internal pure returns (string memory) {
        if (value == 0) {
            return "0x00";
        }
        uint256 temp = value;
        uint256 length = 0;
        while (temp != 0) {
            length++;
            temp >>= 8;
        }
        return toHexString(value, length);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.
     */
    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
        bytes memory buffer = new bytes(2 * length + 2);
        buffer[0] = "0";
        buffer[1] = "x";
        for (uint256 i = 2 * length + 1; i > 1; --i) {
            buffer[i] = _HEX_SYMBOLS[value & 0xf];
            value >>= 4;
        }
        require(value == 0, "Strings: hex length insufficient");
        return string(buffer);
    }
}

/**
 * @dev Implementation of the {IERC165} interface.
 *
 * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check
 * for the additional interface id that will be supported. For example:
 *
 * ```solidity
 * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
 *     return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);
 * }
 * ```
 *
 * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.
 */
abstract contract ERC165 is IERC165 {
    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IERC165).interfaceId;
    }
}

/**
 * @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);
}

/**
 * @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 {}
}

/**
 * @dev Extension of {ERC20} that allows token holders to destroy both their own
 * tokens and those that they have an allowance for, in a way that can be
 * recognized off-chain (via event analysis).
 */
abstract contract ERC20Burnable is Context, ERC20 {
    /**
     * @dev Destroys `amount` tokens from the caller.
     *
     * See {ERC20-_burn}.
     */
    function burn(uint256 amount) public virtual {
        _burn(_msgSender(), amount);
    }

    /**
     * @dev Destroys `amount` tokens from `account`, deducting from the caller's
     * allowance.
     *
     * See {ERC20-_burn} and {ERC20-allowance}.
     *
     * Requirements:
     *
     * - the caller must have allowance for ``accounts``'s tokens of at least
     * `amount`.
     */
    function burnFrom(address account, uint256 amount) public virtual {
        _spendAllowance(account, _msgSender(), amount);
        _burn(account, amount);
    }
}

/**
 * @dev External interface of AccessControl declared to support ERC165 detection.
 */
interface IAccessControl {
    /**
     * @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole`
     *
     * `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite
     * {RoleAdminChanged} not being emitted signaling this.
     *
     * _Available since v3.1._
     */
    event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole);

    /**
     * @dev Emitted when `account` is granted `role`.
     *
     * `sender` is the account that originated the contract call, an admin role
     * bearer except when using {AccessControl-_setupRole}.
     */
    event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender);

    /**
     * @dev Emitted when `account` is revoked `role`.
     *
     * `sender` is the account that originated the contract call:
     *   - if using `revokeRole`, it is the admin role bearer
     *   - if using `renounceRole`, it is the role bearer (i.e. `account`)
     */
    event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender);

    /**
     * @dev Returns `true` if `account` has been granted `role`.
     */
    function hasRole(bytes32 role, address account) external view returns (bool);

    /**
     * @dev Returns the admin role that controls `role`. See {grantRole} and
     * {revokeRole}.
     *
     * To change a role's admin, use {AccessControl-_setRoleAdmin}.
     */
    function getRoleAdmin(bytes32 role) external view returns (bytes32);

    /**
     * @dev Grants `role` to `account`.
     *
     * If `account` had not been already granted `role`, emits a {RoleGranted}
     * event.
     *
     * Requirements:
     *
     * - the caller must have ``role``'s admin role.
     */
    function grantRole(bytes32 role, address account) external;

    /**
     * @dev Revokes `role` from `account`.
     *
     * If `account` had been granted `role`, emits a {RoleRevoked} event.
     *
     * Requirements:
     *
     * - the caller must have ``role``'s admin role.
     */
    function revokeRole(bytes32 role, address account) external;

    /**
     * @dev Revokes `role` from the calling account.
     *
     * Roles are often managed via {grantRole} and {revokeRole}: this function's
     * purpose is to provide a mechanism for accounts to lose their privileges
     * if they are compromised (such as when a trusted device is misplaced).
     *
     * If the calling account had been granted `role`, emits a {RoleRevoked}
     * event.
     *
     * Requirements:
     *
     * - the caller must be `account`.
     */
    function renounceRole(bytes32 role, address account) external;
}

/**
 * @dev Contract module that allows children to implement role-based access
 * control mechanisms. This is a lightweight version that doesn't allow enumerating role
 * members except through off-chain means by accessing the contract event logs. Some
 * applications may benefit from on-chain enumerability, for those cases see
 * {AccessControlEnumerable}.
 *
 * Roles are referred to by their `bytes32` identifier. These should be exposed
 * in the external API and be unique. The best way to achieve this is by
 * using `public constant` hash digests:
 *
 * ```
 * bytes32 public constant MY_ROLE = keccak256("MY_ROLE");
 * ```
 *
 * Roles can be used to represent a set of permissions. To restrict access to a
 * function call, use {hasRole}:
 *
 * ```
 * function foo() public {
 *     require(hasRole(MY_ROLE, msg.sender));
 *     ...
 * }
 * ```
 *
 * Roles can be granted and revoked dynamically via the {grantRole} and
 * {revokeRole} functions. Each role has an associated admin role, and only
 * accounts that have a role's admin role can call {grantRole} and {revokeRole}.
 *
 * By default, the admin role for all roles is `DEFAULT_ADMIN_ROLE`, which means
 * that only accounts with this role will be able to grant or revoke other
 * roles. More complex role relationships can be created by using
 * {_setRoleAdmin}.
 *
 * WARNING: The `DEFAULT_ADMIN_ROLE` is also its own admin: it has permission to
 * grant and revoke this role. Extra precautions should be taken to secure
 * accounts that have been granted it.
 */
abstract contract AccessControl is Context, IAccessControl, ERC165 {
    struct RoleData {
        mapping(address => bool) members;
        bytes32 adminRole;
    }

    mapping(bytes32 => RoleData) private _roles;

    bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00;

    /**
     * @dev Modifier that checks that an account has a specific role. Reverts
     * with a standardized message including the required role.
     *
     * The format of the revert reason is given by the following regular expression:
     *
     *  /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/
     *
     * _Available since v4.1._
     */
    modifier onlyRole(bytes32 role) {
        _checkRole(role);
        _;
    }

    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IAccessControl).interfaceId || super.supportsInterface(interfaceId);
    }

    /**
     * @dev Returns `true` if `account` has been granted `role`.
     */
    function hasRole(bytes32 role, address account) public view virtual override returns (bool) {
        return _roles[role].members[account];
    }

    /**
     * @dev Revert with a standard message if `_msgSender()` is missing `role`.
     * Overriding this function changes the behavior of the {onlyRole} modifier.
     *
     * Format of the revert message is described in {_checkRole}.
     *
     * _Available since v4.6._
     */
    function _checkRole(bytes32 role) internal view virtual {
        _checkRole(role, _msgSender());
    }

    /**
     * @dev Revert with a standard message if `account` is missing `role`.
     *
     * The format of the revert reason is given by the following regular expression:
     *
     *  /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/
     */
    function _checkRole(bytes32 role, address account) internal view virtual {
        if (!hasRole(role, account)) {
            revert(
                string(
                    abi.encodePacked(
                        "AccessControl: account ",
                        Strings.toHexString(uint160(account), 20),
                        " is missing role ",
                        Strings.toHexString(uint256(role), 32)
                    )
                )
            );
        }
    }

    /**
     * @dev Returns the admin role that controls `role`. See {grantRole} and
     * {revokeRole}.
     *
     * To change a role's admin, use {_setRoleAdmin}.
     */
    function getRoleAdmin(bytes32 role) public view virtual override returns (bytes32) {
        return _roles[role].adminRole;
    }

    /**
     * @dev Grants `role` to `account`.
     *
     * If `account` had not been already granted `role`, emits a {RoleGranted}
     * event.
     *
     * Requirements:
     *
     * - the caller must have ``role``'s admin role.
     */
    function grantRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) {
        _grantRole(role, account);
    }

    /**
     * @dev Revokes `role` from `account`.
     *
     * If `account` had been granted `role`, emits a {RoleRevoked} event.
     *
     * Requirements:
     *
     * - the caller must have ``role``'s admin role.
     */
    function revokeRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) {
        _revokeRole(role, account);
    }

    /**
     * @dev Revokes `role` from the calling account.
     *
     * Roles are often managed via {grantRole} and {revokeRole}: this function's
     * purpose is to provide a mechanism for accounts to lose their privileges
     * if they are compromised (such as when a trusted device is misplaced).
     *
     * If the calling account had been revoked `role`, emits a {RoleRevoked}
     * event.
     *
     * Requirements:
     *
     * - the caller must be `account`.
     */
    function renounceRole(bytes32 role, address account) public virtual override {
        require(account == _msgSender(), "AccessControl: can only renounce roles for self");

        _revokeRole(role, account);
    }

    /**
     * @dev Grants `role` to `account`.
     *
     * If `account` had not been already granted `role`, emits a {RoleGranted}
     * event. Note that unlike {grantRole}, this function doesn't perform any
     * checks on the calling account.
     *
     * [WARNING]
     * ====
     * This function should only be called from the constructor when setting
     * up the initial roles for the system.
     *
     * Using this function in any other way is effectively circumventing the admin
     * system imposed by {AccessControl}.
     * ====
     *
     * NOTE: This function is deprecated in favor of {_grantRole}.
     */
    function _setupRole(bytes32 role, address account) internal virtual {
        _grantRole(role, account);
    }

    /**
     * @dev Sets `adminRole` as ``role``'s admin role.
     *
     * Emits a {RoleAdminChanged} event.
     */
    function _setRoleAdmin(bytes32 role, bytes32 adminRole) internal virtual {
        bytes32 previousAdminRole = getRoleAdmin(role);
        _roles[role].adminRole = adminRole;
        emit RoleAdminChanged(role, previousAdminRole, adminRole);
    }

    /**
     * @dev Grants `role` to `account`.
     *
     * Internal function without access restriction.
     */
    function _grantRole(bytes32 role, address account) internal virtual {
        if (!hasRole(role, account)) {
            _roles[role].members[account] = true;
            emit RoleGranted(role, account, _msgSender());
        }
    }

    /**
     * @dev Revokes `role` from `account`.
     *
     * Internal function without access restriction.
     */
    function _revokeRole(bytes32 role, address account) internal virtual {
        if (hasRole(role, account)) {
            _roles[role].members[account] = false;
            emit RoleRevoked(role, account, _msgSender());
        }
    }
}

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

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

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

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

contract CropperChips is ERC20, ERC20Burnable, AccessControl,ReentrancyGuard {
using SafeERC20 for IERC20;
bytes32 public constant GAMES_ROLE = keccak256("GAMES_ROLE");

address payable private Wallet_Burn = payable(0x000000000000000000000000000000000000dEaD); 
address public MagicFarmWallet;
address public TeamWallet;
IERC20 public Cropperfield;
IUniswapV2Router02 public Router;

 event CropperfieldBurn(
        uint256 CroSwapped,
        uint256 CropperfieldBurned
    );

    event MagicFarmSent(
       address to, 
       uint256 CROSent
    );

     event TeamSent(
       address to, 
       uint256 CROSent
    );

constructor(address _MagicFarm,address _Team,address _Cropperfield,address _Router) ERC20("Cropper Chips", "CropperChips") {
     MagicFarmWallet = _MagicFarm;
     TeamWallet = _Team;

     IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(_Router); 
     Router = _uniswapV2Router; 

     Cropperfield = IERC20(_Cropperfield);

    _grantRole(DEFAULT_ADMIN_ROLE, msg.sender);
}

receive() external payable{}

uint256 public Reserves;
uint256 public TotalWinnings;
uint256 public TotalSampleCropperChips;
mapping(address=>uint) public userSampleCropperChips;


event BoxResults(address indexed user,uint FreeChips);

uint public ActiveUsers;
mapping(address=>bool) isActive;
uint public minVolRewards = 20000;

uint private per_gas;
uint private Per_ForTeam = 4000;
uint private Per_ForMagicFarm = 4000;
uint private Per_ForBurning = 2000;
uint private Total_Per = 10000;
mapping(address=>uint) public UsersId;

struct User {
    uint TotalVolume;
    uint TotalWinnings;
    address Address;
    uint ChipsinLastRewards;
    bool Requested;
    uint BlockToUse;
    uint Boxes;
}

mapping(uint=>User) public users; 

function UpdateVolumeAndWinnings(address _user,uint bet,uint winnings) external onlyRole(GAMES_ROLE) {
    uint userId = UsersId[_user];
    User storage user = users[userId];
    user.TotalVolume = user.TotalVolume + bet;
    user.TotalWinnings = user.TotalWinnings + winnings;
}


function GetAllUsers() public view returns(User[] memory) {
   User[] memory _users = new User[](ActiveUsers);
   
  for (uint i = 0; i<ActiveUsers; i++) {
      User storage user = users[i];
      _users[i] = user;
  }
  return _users;
}

function GetAUserByAddress(address _user) public view returns(User memory){
    uint userId = UsersId[_user];

    return users[userId];
}

function BuyCropperChips(uint amount) public payable {
      require(msg.value == amount);
      if(isActive[msg.sender] == false){
          UsersId[msg.sender] = ActiveUsers;
         User storage user = users[ActiveUsers];
         user.Address = msg.sender;
         isActive[msg.sender] = true;
         ActiveUsers++;
      }
      uint Chips = amount/1e18;
      uint feeForGas = Chips/100;
      if (Chips%100 > 0){
          feeForGas = feeForGas + 1;
      }
      uint CropperChipsToGet = Chips - feeForGas;
      uint TotalfeeForGas = amount*per_gas/100 + feeForGas*1e18;
      payable(TeamWallet).transfer(TotalfeeForGas);
      _mint(msg.sender, CropperChipsToGet);
 } 
 
function decimals() public view virtual override returns (uint8) {
        return 0;
    }

function SellCropperChips(uint amount) public payable nonReentrant {
      _burn(msg.sender, amount);
      uint CROtoget = amount*1e18;
      payable(msg.sender).transfer(CROtoget);
 } 
 
function AddCropperChips(uint amount,address to) external onlyRole(GAMES_ROLE) {
      _mint(to, amount);
 }

function RemoveCropperChips(uint amount,address to) external onlyRole(GAMES_ROLE) {
     burnFrom(to, amount);
 }
 
function AddSampleCropperChips(uint amount,address to) public onlyRole(GAMES_ROLE) {
         if(isActive[msg.sender] == false){
         UsersId[msg.sender] = ActiveUsers;
         User storage user = users[ActiveUsers];
         user.Address = msg.sender;
         isActive[msg.sender] = true;
         ActiveUsers++;
      }
     userSampleCropperChips[to] = userSampleCropperChips[to] + amount;
     TotalSampleCropperChips = TotalSampleCropperChips + amount;
 }

function RemoveSampleCropperChips(uint amount,address to) external onlyRole(GAMES_ROLE) {
     userSampleCropperChips[to] = userSampleCropperChips[to] - amount;
     TotalSampleCropperChips = TotalSampleCropperChips - amount;
 }

function ChangePercentageGas(uint _newgas) public onlyRole(DEFAULT_ADMIN_ROLE){
   per_gas = _newgas;
} 

function ChangePercentageWinnings(uint _newTeam,uint _newFarm,uint _newBurn) public onlyRole(DEFAULT_ADMIN_ROLE){
   Per_ForTeam = _newTeam;
   Per_ForMagicFarm = _newFarm;
   Per_ForBurning = _newBurn;
   Total_Per = _newTeam + _newFarm + _newBurn;
} 

function ChangeMinVolume(uint new_minVol) public onlyRole(DEFAULT_ADMIN_ROLE){
    minVolRewards = new_minVol;
}

function GetBox(address _user) public  nonReentrant{
     uint userId = UsersId[_user];
     User storage user = users[userId];
     require(user.TotalVolume >= (user.ChipsinLastRewards + minVolRewards));
     user.ChipsinLastRewards = user.ChipsinLastRewards + minVolRewards;
     user.Boxes = user.Boxes + 1;
}

function RequestToOpenBox(address _user) public {
    uint userId = UsersId[_user];
    User storage user = users[userId];
    require(user.Requested == false);
    require (user.Boxes>0);
    user.Boxes = user.Boxes - 1;
    user.BlockToUse = block.number;
    user.Requested = true;
}

function OpenBox(address _user) public nonReentrant{
    uint userId = UsersId[_user];
    User storage user = users[userId];
    require(user.Requested == true);
    require(block.number > user.BlockToUse);
      if (block.number - user.BlockToUse > 255) {
               user.Requested = false;
               return;
        }
     uint256 rand = uint256 (keccak256(abi.encodePacked(blockhash(user.BlockToUse), msg.sender)))%100;
     
     uint FreeCoins;
     rand == 0 ? FreeCoins = 2000:
     rand > 0 && rand <3 ? FreeCoins = 1000:
     rand >= 3 && rand <10 ? FreeCoins = 500:
     rand >=10 && rand <20 ? FreeCoins = 300:
     rand >=20 && rand <50 ? FreeCoins = 200:
     rand >=50 && rand <75 ? FreeCoins = 100:
     rand >=75 && rand <100 ? FreeCoins = 50:0;

     user.Requested = false;
     userSampleCropperChips[_user] = userSampleCropperChips[_user] + FreeCoins;
     TotalSampleCropperChips = TotalSampleCropperChips + FreeCoins;
     emit BoxResults(msg.sender, FreeCoins);
}

function AddReserves() public payable onlyRole(DEFAULT_ADMIN_ROLE) {
    Reserves = Reserves + msg.value;
}

function RemoveReserves(uint amount) public payable onlyRole(DEFAULT_ADMIN_ROLE) {
    Reserves = Reserves - amount;
    payable(TeamWallet).transfer(amount);
}


function CheckAndSwap() public payable {
   uint256 ChipsInCirculation = totalSupply();
   uint256 FreeChipsInCirculation = TotalSampleCropperChips;
   uint256 TotalChipsInCircilation = ChipsInCirculation*1e18 + FreeChipsInCirculation*1e18;
   require(address(this).balance > TotalChipsInCircilation + Reserves);
   uint256 AmountToProceed = address(this).balance - TotalChipsInCircilation - Reserves;
   uint256 AmountForFarm = AmountToProceed*Per_ForMagicFarm/Total_Per;
   uint256 AmountForTeam = AmountToProceed*Per_ForTeam/Total_Per;
   uint256 AmountForBurn = AmountToProceed-AmountForFarm-AmountForTeam;

   if(AmountForBurn>0){
    swapCROForTokens(AmountForBurn);
    uint BurnAmount = Cropperfield.balanceOf(address(this));
    Cropperfield.safeTransfer(Wallet_Burn,BurnAmount);
    emit CropperfieldBurn(AmountForBurn,BurnAmount);
   }
   
   if(AmountForFarm>0){
     payable(MagicFarmWallet).transfer(AmountForFarm);
     emit MagicFarmSent(MagicFarmWallet,AmountForFarm);
   }
   if(AmountForTeam>0){
     payable(TeamWallet).transfer(AmountForTeam);
     emit TeamSent(TeamWallet,AmountForTeam);
   }

   TotalWinnings = TotalWinnings + AmountToProceed;
}

function CheckCurrentWinnings() public view returns(uint256){
 uint256 currentWinnings;
 uint256 ChipsInCirculation = totalSupply();
 uint256 FreeChipsInCirculation = TotalSampleCropperChips;
 uint256 TotalChipsInCircilation = ChipsInCirculation*1e18 + FreeChipsInCirculation*1e18;
 if(address(this).balance > TotalChipsInCircilation + Reserves){
   currentWinnings = address(this).balance - TotalChipsInCircilation - Reserves;
 }
 return currentWinnings;
}

 function swapCROForTokens (uint256 amount) private {
      address[] memory path = new address[](2);
        path[0] = Router.WETH();
        path[1] = address(Cropperfield);

        Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(
            0,
            path,
            address(this),
            block.timestamp
        );
    }
    
function set_New_Router_Address(address newRouter) public onlyRole(DEFAULT_ADMIN_ROLE) {
        IUniswapV2Router02 _newRouter = IUniswapV2Router02(newRouter);
        Router = _newRouter;
}

}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_MagicFarm","type":"address"},{"internalType":"address","name":"_Team","type":"address"},{"internalType":"address","name":"_Cropperfield","type":"address"},{"internalType":"address","name":"_Router","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"FreeChips","type":"uint256"}],"name":"BoxResults","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"CroSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"CropperfieldBurned","type":"uint256"}],"name":"CropperfieldBurn","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"CROSent","type":"uint256"}],"name":"MagicFarmSent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"previousAdminRole","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"newAdminRole","type":"bytes32"}],"name":"RoleAdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleGranted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleRevoked","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"CROSent","type":"uint256"}],"name":"TeamSent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"ActiveUsers","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"to","type":"address"}],"name":"AddCropperChips","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"AddReserves","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"to","type":"address"}],"name":"AddSampleCropperChips","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"BuyCropperChips","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"new_minVol","type":"uint256"}],"name":"ChangeMinVolume","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newgas","type":"uint256"}],"name":"ChangePercentageGas","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newTeam","type":"uint256"},{"internalType":"uint256","name":"_newFarm","type":"uint256"},{"internalType":"uint256","name":"_newBurn","type":"uint256"}],"name":"ChangePercentageWinnings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"CheckAndSwap","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"CheckCurrentWinnings","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Cropperfield","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"GAMES_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"GetAUserByAddress","outputs":[{"components":[{"internalType":"uint256","name":"TotalVolume","type":"uint256"},{"internalType":"uint256","name":"TotalWinnings","type":"uint256"},{"internalType":"address","name":"Address","type":"address"},{"internalType":"uint256","name":"ChipsinLastRewards","type":"uint256"},{"internalType":"bool","name":"Requested","type":"bool"},{"internalType":"uint256","name":"BlockToUse","type":"uint256"},{"internalType":"uint256","name":"Boxes","type":"uint256"}],"internalType":"struct CropperChips.User","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"GetAllUsers","outputs":[{"components":[{"internalType":"uint256","name":"TotalVolume","type":"uint256"},{"internalType":"uint256","name":"TotalWinnings","type":"uint256"},{"internalType":"address","name":"Address","type":"address"},{"internalType":"uint256","name":"ChipsinLastRewards","type":"uint256"},{"internalType":"bool","name":"Requested","type":"bool"},{"internalType":"uint256","name":"BlockToUse","type":"uint256"},{"internalType":"uint256","name":"Boxes","type":"uint256"}],"internalType":"struct CropperChips.User[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"GetBox","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"MagicFarmWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"OpenBox","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"to","type":"address"}],"name":"RemoveCropperChips","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"RemoveReserves","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"to","type":"address"}],"name":"RemoveSampleCropperChips","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"RequestToOpenBox","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"Reserves","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"SellCropperChips","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"TeamWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TotalSampleCropperChips","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TotalWinnings","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"},{"internalType":"uint256","name":"bet","type":"uint256"},{"internalType":"uint256","name":"winnings","type":"uint256"}],"name":"UpdateVolumeAndWinnings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"UsersId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"grantRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[],"name":"minVolRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"renounceRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"revokeRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"}],"name":"set_New_Router_Address","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"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":"","type":"address"}],"name":"userSampleCropperChips","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"users","outputs":[{"internalType":"uint256","name":"TotalVolume","type":"uint256"},{"internalType":"uint256","name":"TotalWinnings","type":"uint256"},{"internalType":"address","name":"Address","type":"address"},{"internalType":"uint256","name":"ChipsinLastRewards","type":"uint256"},{"internalType":"bool","name":"Requested","type":"bool"},{"internalType":"uint256","name":"BlockToUse","type":"uint256"},{"internalType":"uint256","name":"Boxes","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052600780546001600160a01b03191661dead179055614e20601255610fa060148190556015556107d06016556127106017553480156200004257600080fd5b5060405162002ffd38038062002ffd8339810160408190526200006591620002a7565b604080518082018252600d81526c43726f7070657220436869707360981b60208083019182528351808501909452600c84526b43726f70706572436869707360a01b908401528151919291620000be91600391620001e4565b508051620000d4906004906020840190620001e4565b5050600160065550600880546001600160a01b038087166001600160a01b03199283161790925560098054868416908316179055600b8054848416908316179055600a80549285169290911691909117905580620001346000336200013f565b505050505062000341565b60008281526005602090815260408083206001600160a01b038516845290915290205460ff16620001e05760008281526005602090815260408083206001600160a01b03851684529091529020805460ff191660011790556200019f3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b828054620001f29062000304565b90600052602060002090601f01602090048101928262000216576000855562000261565b82601f106200023157805160ff191683800117855562000261565b8280016001018555821562000261579182015b828111156200026157825182559160200191906001019062000244565b506200026f92915062000273565b5090565b5b808211156200026f576000815560010162000274565b80516001600160a01b0381168114620002a257600080fd5b919050565b60008060008060808587031215620002be57600080fd5b620002c9856200028a565b9350620002d9602086016200028a565b9250620002e9604086016200028a565b9150620002f9606086016200028a565b905092959194509250565b600181811c908216806200031957607f821691505b602082108114156200033b57634e487b7160e01b600052602260045260246000fd5b50919050565b612cac80620003516000396000f3fe60806040526004361061031e5760003560e01c806379cc6790116101ab578063d33cf236116100f7578063e239df6a11610095578063f37a9fcc1161006f578063f37a9fcc146109a6578063f6d7eade146109c8578063f75bbeec146109e8578063f91db5cf14610a0857600080fd5b8063e239df6a1461095e578063e623676d1461097e578063e96338cd1461099e57600080fd5b8063da52c9ce116100d1578063da52c9ce14610903578063da621afa14610923578063dd62ed3e1461092b578063decb065a1461094b57600080fd5b8063d33cf23614610889578063d547741f146108b6578063d8fa69f4146108d657600080fd5b8063a217fddf11610164578063bb9030861161013e578063bb9030861461081b578063bdf3689a1461083d578063ccf7fd8d1461085d578063cecab93f1461087357600080fd5b8063a217fddf146107c6578063a457c2d7146107db578063a9059cbb146107fb57600080fd5b806379cc67901461071157806391d148541461073157806392c1ea471461075157806395d89b41146107715780639a3eaf1c14610786578063a13df7a6146107a657600080fd5b8063313ce5671161026a57806339509351116102235780634e7da90d116101fd5780634e7da90d1461066357806366cab7c214610683578063677a8870146106a357806370a08231146106db57600080fd5b8063395093511461060d57806342966c681461062d57806348cb2eb71461064d57600080fd5b8063313ce567146104d057806336568abe146104ec578063365b98b21461050c57806336b1a1bc146105b757806338473f39146105d757806338d17a03146105f757600080fd5b80631dd8fc0e116102d7578063248a9ca3116102b1578063248a9ca314610457578063262b0f5d146104875780632b7e9b761461049d5780632f2ff15d146104b057600080fd5b80631dd8fc0e146103f55780631fbef9881461042257806323b872dd1461043757600080fd5b8063012280171461032a57806301ffc9a71461034c57806306fdde0314610381578063095ea7b3146103a35780631501bcb0146103c357806318160ddd146103d657600080fd5b3661032557005b600080fd5b34801561033657600080fd5b5061034a610345366004612704565b610a28565b005b34801561035857600080fd5b5061036c610367366004612734565b610b0c565b60405190151581526020015b60405180910390f35b34801561038d57600080fd5b50610396610b43565b604051610378919061278a565b3480156103af57600080fd5b5061036c6103be3660046127bd565b610bd5565b61034a6103d13660046127e9565b610bed565b3480156103e257600080fd5b506002545b604051908152602001610378565b34801561040157600080fd5b506103e7610410366004612802565b60186020526000908152604090205481565b34801561042e57600080fd5b506103e7610d4b565b34801561044357600080fd5b5061036c61045236600461281f565b610dc9565b34801561046357600080fd5b506103e76104723660046127e9565b60009081526005602052604090206001015490565b34801561049357600080fd5b506103e760125481565b61034a6104ab3660046127e9565b610def565b3480156104bc57600080fd5b5061034a6104cb366004612704565b610e78565b3480156104dc57600080fd5b5060405160008152602001610378565b3480156104f857600080fd5b5061034a610507366004612704565b610ea2565b34801561051857600080fd5b506105726105273660046127e9565b6019602052600090815260409020805460018201546002830154600384015460048501546005860154600690960154949593946001600160a01b0390931693919260ff909116919087565b6040805197885260208801969096526001600160a01b039094169486019490945260608501919091521515608084015260a083019190915260c082015260e001610378565b3480156105c357600080fd5b5061034a6105d2366004612802565b610f20565b3480156105e357600080fd5b5061034a6105f2366004612802565b610f4e565b34801561060357600080fd5b506103e7600e5481565b34801561061957600080fd5b5061036c6106283660046127bd565b6111a9565b34801561063957600080fd5b5061034a6106483660046127e9565b6111cb565b34801561065957600080fd5b506103e7600c5481565b34801561066f57600080fd5b5061034a61067e366004612704565b6111d8565b34801561068f57600080fd5b5061034a61069e366004612704565b6111fa565b3480156106af57600080fd5b506009546106c3906001600160a01b031681565b6040516001600160a01b039091168152602001610378565b3480156106e757600080fd5b506103e76106f6366004612802565b6001600160a01b031660009081526020819052604090205490565b34801561071d57600080fd5b5061034a61072c3660046127bd565b61125d565b34801561073d57600080fd5b5061036c61074c366004612704565b611272565b34801561075d57600080fd5b5061034a61076c3660046127e9565b61129d565b34801561077d57600080fd5b506103966112ae565b34801561079257600080fd5b5061034a6107a1366004612802565b6112bd565b3480156107b257600080fd5b5061034a6107c1366004612860565b611360565b3480156107d257600080fd5b506103e7600081565b3480156107e757600080fd5b5061036c6107f63660046127bd565b611398565b34801561080757600080fd5b5061036c6108163660046127bd565b61141e565b34801561082757600080fd5b506103e7600080516020612c5783398151915281565b34801561084957600080fd5b5061034a6108583660046127e9565b61142c565b34801561086957600080fd5b506103e760105481565b34801561087f57600080fd5b506103e7600d5481565b34801561089557600080fd5b506108a96108a4366004612802565b61143d565b60405161037891906128d8565b3480156108c257600080fd5b5061034a6108d1366004612704565b6114c5565b3480156108e257600080fd5b506103e76108f1366004612802565b600f6020526000908152604090205481565b34801561090f57600080fd5b5061034a61091e366004612704565b6114ea565b61034a61150c565b34801561093757600080fd5b506103e76109463660046128e6565b6117eb565b61034a6109593660046127e9565b611816565b34801561096a57600080fd5b506008546106c3906001600160a01b031681565b34801561098a57600080fd5b5061034a610999366004612914565b61186c565b61034a6118d7565b3480156109b257600080fd5b506109bb6118f6565b6040516103789190612949565b3480156109d457600080fd5b50600b546106c3906001600160a01b031681565b3480156109f457600080fd5b50600a546106c3906001600160a01b031681565b348015610a1457600080fd5b5061034a610a23366004612802565b611a03565b600080516020612c57833981519152610a4081611a7b565b3360009081526011602052604090205460ff16610ab95760108054336000818152601860209081526040808320859055938252601981528382206002810180546001600160a01b0319168517905592825260119052918220805460ff19166001179055825490929091610ab2836129ad565b9190505550505b6001600160a01b0382166000908152600f6020526040902054610add9084906129c8565b6001600160a01b0383166000908152600f6020526040902055600e54610b049084906129c8565b600e55505050565b60006001600160e01b03198216637965db0b60e01b1480610b3d57506301ffc9a760e01b6001600160e01b03198316145b92915050565b606060038054610b52906129e0565b80601f0160208091040260200160405190810160405280929190818152602001828054610b7e906129e0565b8015610bcb5780601f10610ba057610100808354040283529160200191610bcb565b820191906000526020600020905b815481529060010190602001808311610bae57829003601f168201915b5050505050905090565b600033610be3818585611a85565b5060019392505050565b803414610bf957600080fd5b3360009081526011602052604090205460ff16610c725760108054336000818152601860209081526040808320859055938252601981528382206002810180546001600160a01b0319168517905592825260119052918220805460ff19166001179055825490929091610c6b836129ad565b9190505550505b6000610c86670de0b6b3a764000083612a2b565b90506000610c95606483612a2b565b90506000610ca4606484612a3f565b1115610cb857610cb58160016129c8565b90505b6000610cc48284612a53565b90506000610cda83670de0b6b3a7640000612a6a565b606460135487610cea9190612a6a565b610cf49190612a2b565b610cfe91906129c8565b6009546040519192506001600160a01b03169082156108fc029083906000818181858888f19350505050158015610d39573d6000803e3d6000fd5b50610d443383611ba9565b5050505050565b6000806000610d5960025490565b600e549091506000610d7382670de0b6b3a7640000612a6a565b610d8584670de0b6b3a7640000612a6a565b610d8f91906129c8565b9050600c5481610d9f91906129c8565b471115610dc057600c54610db38247612a53565b610dbd9190612a53565b93505b50919392505050565b600033610dd7858285611c68565b610de2858585611ce2565b60019150505b9392505050565b60026006541415610e1b5760405162461bcd60e51b8152600401610e1290612a89565b60405180910390fd5b6002600655610e2a3382611e86565b6000610e3e82670de0b6b3a7640000612a6a565b604051909150339082156108fc029083906000818181858888f19350505050158015610e6e573d6000803e3d6000fd5b5050600160065550565b600082815260056020526040902060010154610e9381611a7b565b610e9d8383611fb8565b505050565b6001600160a01b0381163314610f125760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610e12565b610f1c828261203e565b5050565b6000610f2b81611a7b565b50600b80546001600160a01b0319166001600160a01b0392909216919091179055565b60026006541415610f715760405162461bcd60e51b8152600401610e1290612a89565b60026006556001600160a01b0381166000908152601860209081526040808320548084526019909252909120600481015460ff161515600114610fb357600080fd5b80600501544311610fc357600080fd5b60ff816005015443610fd59190612a53565b1115610fec57600401805460ff19169055506111a1565b600581015460408051914060208301526bffffffffffffffffffffffff193360601b16908201526000906064906054016040516020818303038152906040528051906020012060001c61103f9190612a3f565b905060008115611106576000821180156110595750600382105b6110fc576003821015801561106e5750600a82105b6110f257600a82101580156110835750601482105b6110e857601482101580156110985750603282105b6110df57603282101580156110ad5750604b82105b6110d657604b82101580156110c25750606482105b6110cd57600061110c565b5060328061110c565b5060648061110c565b5060c88061110c565b5061012c8061110c565b506101f48061110c565b506103e88061110c565b506107d0805b5060048301805460ff191690556001600160a01b0385166000908152600f602052604090205461113d9082906129c8565b6001600160a01b0386166000908152600f6020526040902055600e546111649082906129c8565b600e5560405181815233907f863f5347abbbd165760d8ff25afad767d543b718753337462bee2ae4478587049060200160405180910390a2505050505b506001600655565b600033610be38185856111bc83836117eb565b6111c691906129c8565b611a85565b6111d53382611e86565b50565b600080516020612c578339815191526111f081611a7b565b610e9d8284611ba9565b600080516020612c5783398151915261121281611a7b565b6001600160a01b0382166000908152600f6020526040902054611236908490612a53565b6001600160a01b0383166000908152600f6020526040902055600e54610b04908490612a53565b611268823383611c68565b610f1c8282611e86565b60009182526005602090815260408084206001600160a01b0393909316845291905290205460ff1690565b60006112a881611a7b565b50601355565b606060048054610b52906129e0565b600260065414156112e05760405162461bcd60e51b8152600401610e1290612a89565b60026006556001600160a01b0381166000908152601860209081526040808320548084526019909252909120601254600382015461131e91906129c8565b8154101561132b57600080fd5b601254816003015461133d91906129c8565b600382015560068101546113529060016129c8565b600691820155600190555050565b600061136b81611a7b565b6014849055601583905560168290558161138584866129c8565b61138f91906129c8565b60175550505050565b600033816113a682866117eb565b9050838110156114065760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610e12565b6114138286868403611a85565b506001949350505050565b600033610be3818585611ce2565b600061143781611a7b565b50601255565b6114456126a7565b506001600160a01b0390811660009081526018602090815260408083205483526019825291829020825160e0810184528154815260018201549281019290925260028101549093169181019190915260038201546060820152600482015460ff1615156080820152600582015460a082015260069091015460c082015290565b6000828152600560205260409020600101546114e081611a7b565b610e9d838361203e565b600080516020612c5783398151915261150281611a7b565b610e9d828461125d565b600061151760025490565b600e54909150600061153182670de0b6b3a7640000612a6a565b61154384670de0b6b3a7640000612a6a565b61154d91906129c8565b9050600c548161155d91906129c8565b471161156857600080fd5b600c546000906115788347612a53565b6115829190612a53565b90506000601754601554836115979190612a6a565b6115a19190612a2b565b90506000601754601454846115b69190612a6a565b6115c09190612a2b565b90506000816115cf8486612a53565b6115d99190612a53565b905080156116c1576115ea816120a5565b600a546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a082319060240160206040518083038186803b15801561162e57600080fd5b505afa158015611642573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116669190612ac0565b600754600a54919250611686916001600160a01b03908116911683612202565b60408051838152602081018390527ff7806f19ce56809710f97f34ea8e2136472339d069d196d1edd61bf64e1e1b92910160405180910390a1505b8215611749576008546040516001600160a01b039091169084156108fc029085906000818181858888f19350505050158015611701573d6000803e3d6000fd5b50600854604080516001600160a01b039092168252602082018590527f7170d0a91ae2e0f379aa0e29b0c45bee5a58516932bf0ee1e22523c7cee7c2f5910160405180910390a15b81156117d1576009546040516001600160a01b039091169083156108fc029084906000818181858888f19350505050158015611789573d6000803e3d6000fd5b50600954604080516001600160a01b039092168252602082018490527fe9c7f2b211c760890268dc4250ab69d148f8840809c94c593b2bc430e673fa63910160405180910390a15b83600d546117df91906129c8565b600d5550505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b600061182181611a7b565b81600c5461182f9190612a53565b600c556009546040516001600160a01b039091169083156108fc029084906000818181858888f19350505050158015610e9d573d6000803e3d6000fd5b600080516020612c5783398151915261188481611a7b565b6001600160a01b038416600090815260186020908152604080832054808452601990925290912080546118b89086906129c8565b815560018101546118ca9085906129c8565b6001909101555050505050565b60006118e281611a7b565b34600c546118f091906129c8565b600c5550565b6060600060105467ffffffffffffffff81111561191557611915612ad9565b60405190808252806020026020018201604052801561194e57816020015b61193b6126a7565b8152602001906001900390816119335790505b50905060005b6010548110156119fd57600081815260196020908152604091829020825160e0810184528154815260018201549281019290925260028101546001600160a01b03169282019290925260038201546060820152600482015460ff1615156080820152600582015460a0820152600682015460c082015283518490849081106119de576119de612aef565b60200260200101819052505080806119f5906129ad565b915050611954565b50919050565b6001600160a01b0381166000908152601860209081526040808320548084526019909252909120600481015460ff1615611a3c57600080fd5b6000816006015411611a4d57600080fd5b60018160060154611a5e9190612a53565b6006820155436005820155600401805460ff191660011790555050565b6111d58133612254565b6001600160a01b038316611ae75760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610e12565b6001600160a01b038216611b485760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610e12565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038216611bff5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610e12565b8060026000828254611c1191906129c8565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6000611c7484846117eb565b90506000198114611cdc5781811015611ccf5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610e12565b611cdc8484848403611a85565b50505050565b6001600160a01b038316611d465760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610e12565b6001600160a01b038216611da85760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610e12565b6001600160a01b03831660009081526020819052604090205481811015611e205760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610e12565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3611cdc565b6001600160a01b038216611ee65760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610e12565b6001600160a01b03821660009081526020819052604090205481811015611f5a5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610e12565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505050565b611fc28282611272565b610f1c5760008281526005602090815260408083206001600160a01b03851684529091529020805460ff19166001179055611ffa3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6120488282611272565b15610f1c5760008281526005602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6040805160028082526060820183526000926020830190803683375050600b54604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c464892506004808301926020929190829003018186803b15801561210a57600080fd5b505afa15801561211e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121429190612b05565b8160008151811061215557612155612aef565b6001600160a01b039283166020918202929092010152600a5482519116908290600190811061218657612186612aef565b6001600160a01b039283166020918202929092010152600b5460405163b6f9de9560e01b815291169063b6f9de959084906121cc90600090869030904290600401612b22565b6000604051808303818588803b1580156121e557600080fd5b505af11580156121f9573d6000803e3d6000fd5b50505050505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052610e9d9084906122b8565b61225e8282611272565b610f1c57612276816001600160a01b0316601461238a565b61228183602061238a565b604051602001612292929190612b8c565b60408051601f198184030181529082905262461bcd60e51b8252610e129160040161278a565b600061230d826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166125269092919063ffffffff16565b805190915015610e9d578080602001905181019061232b9190612c01565b610e9d5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610e12565b60606000612399836002612a6a565b6123a49060026129c8565b67ffffffffffffffff8111156123bc576123bc612ad9565b6040519080825280601f01601f1916602001820160405280156123e6576020820181803683370190505b509050600360fc1b8160008151811061240157612401612aef565b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061243057612430612aef565b60200101906001600160f81b031916908160001a9053506000612454846002612a6a565b61245f9060016129c8565b90505b60018111156124d7576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061249357612493612aef565b1a60f81b8282815181106124a9576124a9612aef565b60200101906001600160f81b031916908160001a90535060049490941c936124d081612c23565b9050612462565b508315610de85760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610e12565b6060612535848460008561253d565b949350505050565b60608247101561259e5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610e12565b6001600160a01b0385163b6125f55760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610e12565b600080866001600160a01b031685876040516126119190612c3a565b60006040518083038185875af1925050503d806000811461264e576040519150601f19603f3d011682016040523d82523d6000602084013e612653565b606091505b509150915061266382828661266e565b979650505050505050565b6060831561267d575081610de8565b82511561268d5782518084602001fd5b8160405162461bcd60e51b8152600401610e12919061278a565b6040518060e00160405280600081526020016000815260200160006001600160a01b031681526020016000815260200160001515815260200160008152602001600081525090565b6001600160a01b03811681146111d557600080fd5b6000806040838503121561271757600080fd5b823591506020830135612729816126ef565b809150509250929050565b60006020828403121561274657600080fd5b81356001600160e01b031981168114610de857600080fd5b60005b83811015612779578181015183820152602001612761565b83811115611cdc5750506000910152565b60208152600082518060208401526127a981604085016020870161275e565b601f01601f19169190910160400192915050565b600080604083850312156127d057600080fd5b82356127db816126ef565b946020939093013593505050565b6000602082840312156127fb57600080fd5b5035919050565b60006020828403121561281457600080fd5b8135610de8816126ef565b60008060006060848603121561283457600080fd5b833561283f816126ef565b9250602084013561284f816126ef565b929592945050506040919091013590565b60008060006060848603121561287557600080fd5b505081359360208301359350604090920135919050565b80518252602080820151908301526040808201516001600160a01b0316908301526060808201519083015260808082015115159083015260a0808201519083015260c090810151910152565b60e08101610b3d828461288c565b600080604083850312156128f957600080fd5b8235612904816126ef565b91506020830135612729816126ef565b60008060006060848603121561292957600080fd5b8335612934816126ef565b95602085013595506040909401359392505050565b6020808252825182820181905260009190848201906040850190845b8181101561298b5761297883855161288c565b9284019260e09290920191600101612965565b50909695505050505050565b634e487b7160e01b600052601160045260246000fd5b60006000198214156129c1576129c1612997565b5060010190565b600082198211156129db576129db612997565b500190565b600181811c908216806129f457607f821691505b602082108114156119fd57634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b600082612a3a57612a3a612a15565b500490565b600082612a4e57612a4e612a15565b500690565b600082821015612a6557612a65612997565b500390565b6000816000190483118215151615612a8457612a84612997565b500290565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b600060208284031215612ad257600080fd5b5051919050565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b600060208284031215612b1757600080fd5b8151610de8816126ef565b600060808201868352602060808185015281875180845260a086019150828901935060005b81811015612b6c5784516001600160a01b031683529383019391830191600101612b47565b50506001600160a01b039690961660408501525050506060015292915050565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351612bc481601785016020880161275e565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351612bf581602884016020880161275e565b01602801949350505050565b600060208284031215612c1357600080fd5b81518015158114610de857600080fd5b600081612c3257612c32612997565b506000190190565b60008251612c4c81846020870161275e565b919091019291505056feeb21268345c442cd13bc375c13c0c652a51cc720d56a65267bae805bac04bf4aa2646970667358221220cf52c365511ee298c6b7856e6fda1190d29d8332834cc52cef12dd7f3f233a6764736f6c63430008090033000000000000000000000000382305f7e5332e426fab9eebdd22f0471e69c24b000000000000000000000000ce77eaf7c6ceb13141e91da918b3ecea368a5c7d000000000000000000000000c40469cccb76e080d26b84f460753bc0cf57f90b000000000000000000000000145677fc4d9b8f19b5d56d1820c48e0443049a30

Deployed Bytecode

0x60806040526004361061031e5760003560e01c806379cc6790116101ab578063d33cf236116100f7578063e239df6a11610095578063f37a9fcc1161006f578063f37a9fcc146109a6578063f6d7eade146109c8578063f75bbeec146109e8578063f91db5cf14610a0857600080fd5b8063e239df6a1461095e578063e623676d1461097e578063e96338cd1461099e57600080fd5b8063da52c9ce116100d1578063da52c9ce14610903578063da621afa14610923578063dd62ed3e1461092b578063decb065a1461094b57600080fd5b8063d33cf23614610889578063d547741f146108b6578063d8fa69f4146108d657600080fd5b8063a217fddf11610164578063bb9030861161013e578063bb9030861461081b578063bdf3689a1461083d578063ccf7fd8d1461085d578063cecab93f1461087357600080fd5b8063a217fddf146107c6578063a457c2d7146107db578063a9059cbb146107fb57600080fd5b806379cc67901461071157806391d148541461073157806392c1ea471461075157806395d89b41146107715780639a3eaf1c14610786578063a13df7a6146107a657600080fd5b8063313ce5671161026a57806339509351116102235780634e7da90d116101fd5780634e7da90d1461066357806366cab7c214610683578063677a8870146106a357806370a08231146106db57600080fd5b8063395093511461060d57806342966c681461062d57806348cb2eb71461064d57600080fd5b8063313ce567146104d057806336568abe146104ec578063365b98b21461050c57806336b1a1bc146105b757806338473f39146105d757806338d17a03146105f757600080fd5b80631dd8fc0e116102d7578063248a9ca3116102b1578063248a9ca314610457578063262b0f5d146104875780632b7e9b761461049d5780632f2ff15d146104b057600080fd5b80631dd8fc0e146103f55780631fbef9881461042257806323b872dd1461043757600080fd5b8063012280171461032a57806301ffc9a71461034c57806306fdde0314610381578063095ea7b3146103a35780631501bcb0146103c357806318160ddd146103d657600080fd5b3661032557005b600080fd5b34801561033657600080fd5b5061034a610345366004612704565b610a28565b005b34801561035857600080fd5b5061036c610367366004612734565b610b0c565b60405190151581526020015b60405180910390f35b34801561038d57600080fd5b50610396610b43565b604051610378919061278a565b3480156103af57600080fd5b5061036c6103be3660046127bd565b610bd5565b61034a6103d13660046127e9565b610bed565b3480156103e257600080fd5b506002545b604051908152602001610378565b34801561040157600080fd5b506103e7610410366004612802565b60186020526000908152604090205481565b34801561042e57600080fd5b506103e7610d4b565b34801561044357600080fd5b5061036c61045236600461281f565b610dc9565b34801561046357600080fd5b506103e76104723660046127e9565b60009081526005602052604090206001015490565b34801561049357600080fd5b506103e760125481565b61034a6104ab3660046127e9565b610def565b3480156104bc57600080fd5b5061034a6104cb366004612704565b610e78565b3480156104dc57600080fd5b5060405160008152602001610378565b3480156104f857600080fd5b5061034a610507366004612704565b610ea2565b34801561051857600080fd5b506105726105273660046127e9565b6019602052600090815260409020805460018201546002830154600384015460048501546005860154600690960154949593946001600160a01b0390931693919260ff909116919087565b6040805197885260208801969096526001600160a01b039094169486019490945260608501919091521515608084015260a083019190915260c082015260e001610378565b3480156105c357600080fd5b5061034a6105d2366004612802565b610f20565b3480156105e357600080fd5b5061034a6105f2366004612802565b610f4e565b34801561060357600080fd5b506103e7600e5481565b34801561061957600080fd5b5061036c6106283660046127bd565b6111a9565b34801561063957600080fd5b5061034a6106483660046127e9565b6111cb565b34801561065957600080fd5b506103e7600c5481565b34801561066f57600080fd5b5061034a61067e366004612704565b6111d8565b34801561068f57600080fd5b5061034a61069e366004612704565b6111fa565b3480156106af57600080fd5b506009546106c3906001600160a01b031681565b6040516001600160a01b039091168152602001610378565b3480156106e757600080fd5b506103e76106f6366004612802565b6001600160a01b031660009081526020819052604090205490565b34801561071d57600080fd5b5061034a61072c3660046127bd565b61125d565b34801561073d57600080fd5b5061036c61074c366004612704565b611272565b34801561075d57600080fd5b5061034a61076c3660046127e9565b61129d565b34801561077d57600080fd5b506103966112ae565b34801561079257600080fd5b5061034a6107a1366004612802565b6112bd565b3480156107b257600080fd5b5061034a6107c1366004612860565b611360565b3480156107d257600080fd5b506103e7600081565b3480156107e757600080fd5b5061036c6107f63660046127bd565b611398565b34801561080757600080fd5b5061036c6108163660046127bd565b61141e565b34801561082757600080fd5b506103e7600080516020612c5783398151915281565b34801561084957600080fd5b5061034a6108583660046127e9565b61142c565b34801561086957600080fd5b506103e760105481565b34801561087f57600080fd5b506103e7600d5481565b34801561089557600080fd5b506108a96108a4366004612802565b61143d565b60405161037891906128d8565b3480156108c257600080fd5b5061034a6108d1366004612704565b6114c5565b3480156108e257600080fd5b506103e76108f1366004612802565b600f6020526000908152604090205481565b34801561090f57600080fd5b5061034a61091e366004612704565b6114ea565b61034a61150c565b34801561093757600080fd5b506103e76109463660046128e6565b6117eb565b61034a6109593660046127e9565b611816565b34801561096a57600080fd5b506008546106c3906001600160a01b031681565b34801561098a57600080fd5b5061034a610999366004612914565b61186c565b61034a6118d7565b3480156109b257600080fd5b506109bb6118f6565b6040516103789190612949565b3480156109d457600080fd5b50600b546106c3906001600160a01b031681565b3480156109f457600080fd5b50600a546106c3906001600160a01b031681565b348015610a1457600080fd5b5061034a610a23366004612802565b611a03565b600080516020612c57833981519152610a4081611a7b565b3360009081526011602052604090205460ff16610ab95760108054336000818152601860209081526040808320859055938252601981528382206002810180546001600160a01b0319168517905592825260119052918220805460ff19166001179055825490929091610ab2836129ad565b9190505550505b6001600160a01b0382166000908152600f6020526040902054610add9084906129c8565b6001600160a01b0383166000908152600f6020526040902055600e54610b049084906129c8565b600e55505050565b60006001600160e01b03198216637965db0b60e01b1480610b3d57506301ffc9a760e01b6001600160e01b03198316145b92915050565b606060038054610b52906129e0565b80601f0160208091040260200160405190810160405280929190818152602001828054610b7e906129e0565b8015610bcb5780601f10610ba057610100808354040283529160200191610bcb565b820191906000526020600020905b815481529060010190602001808311610bae57829003601f168201915b5050505050905090565b600033610be3818585611a85565b5060019392505050565b803414610bf957600080fd5b3360009081526011602052604090205460ff16610c725760108054336000818152601860209081526040808320859055938252601981528382206002810180546001600160a01b0319168517905592825260119052918220805460ff19166001179055825490929091610c6b836129ad565b9190505550505b6000610c86670de0b6b3a764000083612a2b565b90506000610c95606483612a2b565b90506000610ca4606484612a3f565b1115610cb857610cb58160016129c8565b90505b6000610cc48284612a53565b90506000610cda83670de0b6b3a7640000612a6a565b606460135487610cea9190612a6a565b610cf49190612a2b565b610cfe91906129c8565b6009546040519192506001600160a01b03169082156108fc029083906000818181858888f19350505050158015610d39573d6000803e3d6000fd5b50610d443383611ba9565b5050505050565b6000806000610d5960025490565b600e549091506000610d7382670de0b6b3a7640000612a6a565b610d8584670de0b6b3a7640000612a6a565b610d8f91906129c8565b9050600c5481610d9f91906129c8565b471115610dc057600c54610db38247612a53565b610dbd9190612a53565b93505b50919392505050565b600033610dd7858285611c68565b610de2858585611ce2565b60019150505b9392505050565b60026006541415610e1b5760405162461bcd60e51b8152600401610e1290612a89565b60405180910390fd5b6002600655610e2a3382611e86565b6000610e3e82670de0b6b3a7640000612a6a565b604051909150339082156108fc029083906000818181858888f19350505050158015610e6e573d6000803e3d6000fd5b5050600160065550565b600082815260056020526040902060010154610e9381611a7b565b610e9d8383611fb8565b505050565b6001600160a01b0381163314610f125760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610e12565b610f1c828261203e565b5050565b6000610f2b81611a7b565b50600b80546001600160a01b0319166001600160a01b0392909216919091179055565b60026006541415610f715760405162461bcd60e51b8152600401610e1290612a89565b60026006556001600160a01b0381166000908152601860209081526040808320548084526019909252909120600481015460ff161515600114610fb357600080fd5b80600501544311610fc357600080fd5b60ff816005015443610fd59190612a53565b1115610fec57600401805460ff19169055506111a1565b600581015460408051914060208301526bffffffffffffffffffffffff193360601b16908201526000906064906054016040516020818303038152906040528051906020012060001c61103f9190612a3f565b905060008115611106576000821180156110595750600382105b6110fc576003821015801561106e5750600a82105b6110f257600a82101580156110835750601482105b6110e857601482101580156110985750603282105b6110df57603282101580156110ad5750604b82105b6110d657604b82101580156110c25750606482105b6110cd57600061110c565b5060328061110c565b5060648061110c565b5060c88061110c565b5061012c8061110c565b506101f48061110c565b506103e88061110c565b506107d0805b5060048301805460ff191690556001600160a01b0385166000908152600f602052604090205461113d9082906129c8565b6001600160a01b0386166000908152600f6020526040902055600e546111649082906129c8565b600e5560405181815233907f863f5347abbbd165760d8ff25afad767d543b718753337462bee2ae4478587049060200160405180910390a2505050505b506001600655565b600033610be38185856111bc83836117eb565b6111c691906129c8565b611a85565b6111d53382611e86565b50565b600080516020612c578339815191526111f081611a7b565b610e9d8284611ba9565b600080516020612c5783398151915261121281611a7b565b6001600160a01b0382166000908152600f6020526040902054611236908490612a53565b6001600160a01b0383166000908152600f6020526040902055600e54610b04908490612a53565b611268823383611c68565b610f1c8282611e86565b60009182526005602090815260408084206001600160a01b0393909316845291905290205460ff1690565b60006112a881611a7b565b50601355565b606060048054610b52906129e0565b600260065414156112e05760405162461bcd60e51b8152600401610e1290612a89565b60026006556001600160a01b0381166000908152601860209081526040808320548084526019909252909120601254600382015461131e91906129c8565b8154101561132b57600080fd5b601254816003015461133d91906129c8565b600382015560068101546113529060016129c8565b600691820155600190555050565b600061136b81611a7b565b6014849055601583905560168290558161138584866129c8565b61138f91906129c8565b60175550505050565b600033816113a682866117eb565b9050838110156114065760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610e12565b6114138286868403611a85565b506001949350505050565b600033610be3818585611ce2565b600061143781611a7b565b50601255565b6114456126a7565b506001600160a01b0390811660009081526018602090815260408083205483526019825291829020825160e0810184528154815260018201549281019290925260028101549093169181019190915260038201546060820152600482015460ff1615156080820152600582015460a082015260069091015460c082015290565b6000828152600560205260409020600101546114e081611a7b565b610e9d838361203e565b600080516020612c5783398151915261150281611a7b565b610e9d828461125d565b600061151760025490565b600e54909150600061153182670de0b6b3a7640000612a6a565b61154384670de0b6b3a7640000612a6a565b61154d91906129c8565b9050600c548161155d91906129c8565b471161156857600080fd5b600c546000906115788347612a53565b6115829190612a53565b90506000601754601554836115979190612a6a565b6115a19190612a2b565b90506000601754601454846115b69190612a6a565b6115c09190612a2b565b90506000816115cf8486612a53565b6115d99190612a53565b905080156116c1576115ea816120a5565b600a546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a082319060240160206040518083038186803b15801561162e57600080fd5b505afa158015611642573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116669190612ac0565b600754600a54919250611686916001600160a01b03908116911683612202565b60408051838152602081018390527ff7806f19ce56809710f97f34ea8e2136472339d069d196d1edd61bf64e1e1b92910160405180910390a1505b8215611749576008546040516001600160a01b039091169084156108fc029085906000818181858888f19350505050158015611701573d6000803e3d6000fd5b50600854604080516001600160a01b039092168252602082018590527f7170d0a91ae2e0f379aa0e29b0c45bee5a58516932bf0ee1e22523c7cee7c2f5910160405180910390a15b81156117d1576009546040516001600160a01b039091169083156108fc029084906000818181858888f19350505050158015611789573d6000803e3d6000fd5b50600954604080516001600160a01b039092168252602082018490527fe9c7f2b211c760890268dc4250ab69d148f8840809c94c593b2bc430e673fa63910160405180910390a15b83600d546117df91906129c8565b600d5550505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b600061182181611a7b565b81600c5461182f9190612a53565b600c556009546040516001600160a01b039091169083156108fc029084906000818181858888f19350505050158015610e9d573d6000803e3d6000fd5b600080516020612c5783398151915261188481611a7b565b6001600160a01b038416600090815260186020908152604080832054808452601990925290912080546118b89086906129c8565b815560018101546118ca9085906129c8565b6001909101555050505050565b60006118e281611a7b565b34600c546118f091906129c8565b600c5550565b6060600060105467ffffffffffffffff81111561191557611915612ad9565b60405190808252806020026020018201604052801561194e57816020015b61193b6126a7565b8152602001906001900390816119335790505b50905060005b6010548110156119fd57600081815260196020908152604091829020825160e0810184528154815260018201549281019290925260028101546001600160a01b03169282019290925260038201546060820152600482015460ff1615156080820152600582015460a0820152600682015460c082015283518490849081106119de576119de612aef565b60200260200101819052505080806119f5906129ad565b915050611954565b50919050565b6001600160a01b0381166000908152601860209081526040808320548084526019909252909120600481015460ff1615611a3c57600080fd5b6000816006015411611a4d57600080fd5b60018160060154611a5e9190612a53565b6006820155436005820155600401805460ff191660011790555050565b6111d58133612254565b6001600160a01b038316611ae75760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610e12565b6001600160a01b038216611b485760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610e12565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038216611bff5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610e12565b8060026000828254611c1191906129c8565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6000611c7484846117eb565b90506000198114611cdc5781811015611ccf5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610e12565b611cdc8484848403611a85565b50505050565b6001600160a01b038316611d465760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610e12565b6001600160a01b038216611da85760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610e12565b6001600160a01b03831660009081526020819052604090205481811015611e205760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610e12565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3611cdc565b6001600160a01b038216611ee65760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610e12565b6001600160a01b03821660009081526020819052604090205481811015611f5a5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610e12565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505050565b611fc28282611272565b610f1c5760008281526005602090815260408083206001600160a01b03851684529091529020805460ff19166001179055611ffa3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6120488282611272565b15610f1c5760008281526005602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6040805160028082526060820183526000926020830190803683375050600b54604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c464892506004808301926020929190829003018186803b15801561210a57600080fd5b505afa15801561211e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121429190612b05565b8160008151811061215557612155612aef565b6001600160a01b039283166020918202929092010152600a5482519116908290600190811061218657612186612aef565b6001600160a01b039283166020918202929092010152600b5460405163b6f9de9560e01b815291169063b6f9de959084906121cc90600090869030904290600401612b22565b6000604051808303818588803b1580156121e557600080fd5b505af11580156121f9573d6000803e3d6000fd5b50505050505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052610e9d9084906122b8565b61225e8282611272565b610f1c57612276816001600160a01b0316601461238a565b61228183602061238a565b604051602001612292929190612b8c565b60408051601f198184030181529082905262461bcd60e51b8252610e129160040161278a565b600061230d826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166125269092919063ffffffff16565b805190915015610e9d578080602001905181019061232b9190612c01565b610e9d5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610e12565b60606000612399836002612a6a565b6123a49060026129c8565b67ffffffffffffffff8111156123bc576123bc612ad9565b6040519080825280601f01601f1916602001820160405280156123e6576020820181803683370190505b509050600360fc1b8160008151811061240157612401612aef565b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061243057612430612aef565b60200101906001600160f81b031916908160001a9053506000612454846002612a6a565b61245f9060016129c8565b90505b60018111156124d7576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061249357612493612aef565b1a60f81b8282815181106124a9576124a9612aef565b60200101906001600160f81b031916908160001a90535060049490941c936124d081612c23565b9050612462565b508315610de85760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610e12565b6060612535848460008561253d565b949350505050565b60608247101561259e5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610e12565b6001600160a01b0385163b6125f55760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610e12565b600080866001600160a01b031685876040516126119190612c3a565b60006040518083038185875af1925050503d806000811461264e576040519150601f19603f3d011682016040523d82523d6000602084013e612653565b606091505b509150915061266382828661266e565b979650505050505050565b6060831561267d575081610de8565b82511561268d5782518084602001fd5b8160405162461bcd60e51b8152600401610e12919061278a565b6040518060e00160405280600081526020016000815260200160006001600160a01b031681526020016000815260200160001515815260200160008152602001600081525090565b6001600160a01b03811681146111d557600080fd5b6000806040838503121561271757600080fd5b823591506020830135612729816126ef565b809150509250929050565b60006020828403121561274657600080fd5b81356001600160e01b031981168114610de857600080fd5b60005b83811015612779578181015183820152602001612761565b83811115611cdc5750506000910152565b60208152600082518060208401526127a981604085016020870161275e565b601f01601f19169190910160400192915050565b600080604083850312156127d057600080fd5b82356127db816126ef565b946020939093013593505050565b6000602082840312156127fb57600080fd5b5035919050565b60006020828403121561281457600080fd5b8135610de8816126ef565b60008060006060848603121561283457600080fd5b833561283f816126ef565b9250602084013561284f816126ef565b929592945050506040919091013590565b60008060006060848603121561287557600080fd5b505081359360208301359350604090920135919050565b80518252602080820151908301526040808201516001600160a01b0316908301526060808201519083015260808082015115159083015260a0808201519083015260c090810151910152565b60e08101610b3d828461288c565b600080604083850312156128f957600080fd5b8235612904816126ef565b91506020830135612729816126ef565b60008060006060848603121561292957600080fd5b8335612934816126ef565b95602085013595506040909401359392505050565b6020808252825182820181905260009190848201906040850190845b8181101561298b5761297883855161288c565b9284019260e09290920191600101612965565b50909695505050505050565b634e487b7160e01b600052601160045260246000fd5b60006000198214156129c1576129c1612997565b5060010190565b600082198211156129db576129db612997565b500190565b600181811c908216806129f457607f821691505b602082108114156119fd57634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b600082612a3a57612a3a612a15565b500490565b600082612a4e57612a4e612a15565b500690565b600082821015612a6557612a65612997565b500390565b6000816000190483118215151615612a8457612a84612997565b500290565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b600060208284031215612ad257600080fd5b5051919050565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b600060208284031215612b1757600080fd5b8151610de8816126ef565b600060808201868352602060808185015281875180845260a086019150828901935060005b81811015612b6c5784516001600160a01b031683529383019391830191600101612b47565b50506001600160a01b039690961660408501525050506060015292915050565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351612bc481601785016020880161275e565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351612bf581602884016020880161275e565b01602801949350505050565b600060208284031215612c1357600080fd5b81518015158114610de857600080fd5b600081612c3257612c32612997565b506000190190565b60008251612c4c81846020870161275e565b919091019291505056feeb21268345c442cd13bc375c13c0c652a51cc720d56a65267bae805bac04bf4aa2646970667358221220cf52c365511ee298c6b7856e6fda1190d29d8332834cc52cef12dd7f3f233a6764736f6c63430008090033

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

000000000000000000000000382305f7e5332e426fab9eebdd22f0471e69c24b000000000000000000000000ce77eaf7c6ceb13141e91da918b3ecea368a5c7d000000000000000000000000c40469cccb76e080d26b84f460753bc0cf57f90b000000000000000000000000145677fc4d9b8f19b5d56d1820c48e0443049a30

-----Decoded View---------------
Arg [0] : _MagicFarm (address): 0x382305F7e5332E426fab9eeBdd22F0471e69c24b
Arg [1] : _Team (address): 0xCE77EAF7c6cEb13141E91da918b3EceA368a5C7D
Arg [2] : _Cropperfield (address): 0xc40469cCcb76e080d26B84f460753Bc0cf57f90b
Arg [3] : _Router (address): 0x145677FC4d9b8F19B5D56d1820c48e0443049a30

-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 000000000000000000000000382305f7e5332e426fab9eebdd22f0471e69c24b
Arg [1] : 000000000000000000000000ce77eaf7c6ceb13141e91da918b3ecea368a5c7d
Arg [2] : 000000000000000000000000c40469cccb76e080d26b84f460753bc0cf57f90b
Arg [3] : 000000000000000000000000145677fc4d9b8f19b5d56d1820c48e0443049a30


Deployed Bytecode Sourcemap

48350:9123:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52092:476;;;;;;;;;;-1:-1:-1;52092:476:0;;;;;:::i;:::-;;:::i;:::-;;38097:204;;;;;;;;;;-1:-1:-1;38097:204:0;;;;;:::i;:::-;;:::i;:::-;;;926:14:1;;919:22;901:41;;889:2;874:18;38097:204:0;;;;;;;;20662:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;23013:201::-;;;;;;;;;;-1:-1:-1;23013:201:0;;;;;:::i;:::-;;:::i;50861:700::-;;;;;;:::i;:::-;;:::i;21782:108::-;;;;;;;;;;-1:-1:-1;21870:12:0;;21782:108;;;2255:25:1;;;2243:2;2228:18;21782:108:0;2109:177:1;49914:37:0;;;;;;;;;;-1:-1:-1;49914:37:0;;;;;:::i;:::-;;;;;;;;;;;;;;56423:466;;;;;;;;;;;;;:::i;23794:295::-;;;;;;;;;;-1:-1:-1;23794:295:0;;;;;:::i;:::-;;:::i;39933:131::-;;;;;;;;;;-1:-1:-1;39933:131:0;;;;;:::i;:::-;40007:7;40034:12;;;:6;:12;;;;;:22;;;;39933:131;49710:33;;;;;;;;;;;;;;;;51663:189;;;;;;:::i;:::-;;:::i;40326:147::-;;;;;;;;;;-1:-1:-1;40326:147:0;;;;;:::i;:::-;;:::i;51567:92::-;;;;;;;;;;-1:-1:-1;51567:92:0;;51625:5;3833:36:1;;3821:2;3806:18;51567:92:0;3691:184:1;41374:218:0;;;;;;;;;;-1:-1:-1;41374:218:0;;;;;:::i;:::-;;:::i;50136:32::-;;;;;;;;;;-1:-1:-1;50136:32:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;50136:32:0;;;;;;;;;;;;;;;;;;4189:25:1;;;4245:2;4230:18;;4223:34;;;;-1:-1:-1;;;;;4293:32:1;;;4273:18;;;4266:60;;;;4357:2;4342:18;;4335:34;;;;4413:14;4406:22;4400:3;4385:19;;4378:51;4313:3;4445:19;;4438:35;;;;4504:3;4489:19;;4482:35;4176:3;4161:19;50136:32:0;3880:643:1;57275:193:0;;;;;;;;;;-1:-1:-1;57275:193:0;;;;;:::i;:::-;;:::i;53916:1020::-;;;;;;;;;;-1:-1:-1;53916:1020:0;;;;;:::i;:::-;;:::i;49492:38::-;;;;;;;;;;;;;;;;24498:238;;;;;;;;;;-1:-1:-1;24498:238:0;;;;;:::i;:::-;;:::i;32229:91::-;;;;;;;;;;-1:-1:-1;32229:91:0;;;;;:::i;:::-;;:::i;49435:23::-;;;;;;;;;;;;;;;;51858:110;;;;;;;;;;-1:-1:-1;51858:110:0;;;;;:::i;:::-;;:::i;52572:231::-;;;;;;;;;;-1:-1:-1;52572:231:0;;;;;:::i;:::-;;:::i;48650:25::-;;;;;;;;;;-1:-1:-1;48650:25:0;;;;-1:-1:-1;;;;;48650:25:0;;;;;;-1:-1:-1;;;;;4692:32:1;;;4674:51;;4662:2;4647:18;48650:25:0;4528:203:1;21953:127:0;;;;;;;;;;-1:-1:-1;21953:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;22054:18:0;22027:7;22054:18;;;;;;;;;;;;21953:127;32639:164;;;;;;;;;;-1:-1:-1;32639:164:0;;;;;:::i;:::-;;:::i;38393:147::-;;;;;;;;;;-1:-1:-1;38393:147:0;;;;;:::i;:::-;;:::i;52807:105::-;;;;;;;;;;-1:-1:-1;52807:105:0;;;;;:::i;:::-;;:::i;20881:104::-;;;;;;;;;;;;;:::i;53296:318::-;;;;;;;;;;-1:-1:-1;53296:318:0;;;;;:::i;:::-;;:::i;52917:256::-;;;;;;;;;;-1:-1:-1;52917:256:0;;;;;:::i;:::-;;:::i;37498:49::-;;;;;;;;;;-1:-1:-1;37498:49:0;37543:4;37498:49;;25239:436;;;;;;;;;;-1:-1:-1;25239:436:0;;;;;:::i;:::-;;:::i;22286:193::-;;;;;;;;;;-1:-1:-1;22286:193:0;;;;;:::i;:::-;;:::i;48459:60::-;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;48459:60:0;;53178:114;;;;;;;;;;-1:-1:-1;53178:114:0;;;;;:::i;:::-;;:::i;49650:23::-;;;;;;;;;;;;;;;;49461:28;;;;;;;;;;;;;;;;50715:142;;;;;;;;;;-1:-1:-1;50715:142:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;40718:149::-;;;;;;;;;;-1:-1:-1;40718:149:0;;;;;:::i;:::-;;:::i;49533:52::-;;;;;;;;;;-1:-1:-1;49533:52:0;;;;;:::i;:::-;;;;;;;;;;;;;;51972:115;;;;;;;;;;-1:-1:-1;51972:115:0;;;;;:::i;:::-;;:::i;55222:1197::-;;;:::i;22542:151::-;;;;;;;;;;-1:-1:-1;22542:151:0;;;;;:::i;:::-;;:::i;55053:163::-;;;;;;:::i;:::-;;:::i;48617:30::-;;;;;;;;;;-1:-1:-1;48617:30:0;;;;-1:-1:-1;;;;;48617:30:0;;;50174:285;;;;;;;;;;-1:-1:-1;50174:285:0;;;;;:::i;:::-;;:::i;54940:109::-;;;:::i;50465:246::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;48707:32::-;;;;;;;;;;-1:-1:-1;48707:32:0;;;;-1:-1:-1;;;;;48707:32:0;;;48678:26;;;;;;;;;;-1:-1:-1;48678:26:0;;;;-1:-1:-1;;;;;48678:26:0;;;53618:294;;;;;;;;;;-1:-1:-1;53618:294:0;;;;;:::i;:::-;;:::i;52092:476::-;-1:-1:-1;;;;;;;;;;;37989:16:0;38000:4;37989:10;:16::i;:::-;52199:10:::1;52190:20;::::0;;;:8:::1;:20;::::0;;;;;::::1;;52187:239;;52254:11;::::0;;52240:10:::1;52232:19;::::0;;;:7:::1;:19;::::0;;;;;;;:33;;;52297:18;;;:5:::1;:18:::0;;;;;52327:12:::1;::::0;::::1;:25:::0;;-1:-1:-1;;;;;;52327:25:0::1;::::0;::::1;::::0;;52364:20;;;:8:::1;:20:::0;;;;;:27;;-1:-1:-1;;52364:27:0::1;52327:25:::0;52364:27:::1;::::0;;52403:13;;52297:18;;52403:13;;::::1;::::0;::::1;:::i;:::-;;;;;;52220:206;52187:239;-1:-1:-1::0;;;;;52462:26:0;::::1;;::::0;;;:22:::1;:26;::::0;;;;;:35:::1;::::0;52491:6;;52462:35:::1;:::i;:::-;-1:-1:-1::0;;;;;52433:26:0;::::1;;::::0;;;:22:::1;:26;::::0;;;;:64;52531:23:::1;::::0;:32:::1;::::0;52557:6;;52531:32:::1;:::i;:::-;52505:23;:58:::0;-1:-1:-1;;;52092:476:0:o;38097:204::-;38182:4;-1:-1:-1;;;;;;38206:47:0;;-1:-1:-1;;;38206:47:0;;:87;;-1:-1:-1;;;;;;;;;;18085:40:0;;;38257:36;38199:94;38097:204;-1:-1:-1;;38097:204:0:o;20662:100::-;20716:13;20749:5;20742:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20662:100;:::o;23013:201::-;23096:4;2689:10;23152:32;2689:10;23168:7;23177:6;23152:8;:32::i;:::-;-1:-1:-1;23202:4:0;;23013:201;-1:-1:-1;;;23013:201:0:o;50861:700::-;50944:6;50931:9;:19;50923:28;;;;;;50972:10;50963:20;;;;:8;:20;;;;;;;;50960:240;;51028:11;;;51014:10;51006:19;;;;:7;:19;;;;;;;;:33;;;51071:18;;;:5;:18;;;;;51101:12;;;:25;;-1:-1:-1;;;;;;51101:25:0;;;;;51138:20;;;:8;:20;;;;;:27;;-1:-1:-1;;51138:27:0;51101:25;51138:27;;;51177:13;;51071:18;;51177:13;;;;;:::i;:::-;;;;;;50993:207;50960:240;51208:10;51221:11;51228:4;51221:6;:11;:::i;:::-;51208:24;-1:-1:-1;51241:14:0;51258:9;51264:3;51208:24;51258:9;:::i;:::-;51241:26;-1:-1:-1;51292:1:0;51280:9;51286:3;51280:5;:9;:::i;:::-;:13;51276:66;;;51319:13;:9;51331:1;51319:13;:::i;:::-;51307:25;;51276:66;51350:22;51375:17;51383:9;51375:5;:17;:::i;:::-;51350:42;-1:-1:-1;51401:19:0;51444:14;:9;51454:4;51444:14;:::i;:::-;51438:3;51430:7;;51423:6;:14;;;;:::i;:::-;:18;;;;:::i;:::-;:35;;;;:::i;:::-;51475:10;;51467:44;;51401:57;;-1:-1:-1;;;;;;51475:10:0;;51467:44;;;;;51401:57;;51475:10;51467:44;51475:10;51467:44;51401:57;51475:10;51467:44;;;;;;;;;;;;;;;;;;;;;51520:36;51526:10;51538:17;51520:5;:36::i;:::-;50914:647;;;;50861:700;:::o;56423:466::-;56475:7;56487:23;56514:26;56543:13;21870:12;;;21782:108;56543:13;56593:23;;56514:42;;-1:-1:-1;56560:30:0;56680:27;56593:23;56703:4;56680:27;:::i;:::-;56654:23;:18;56673:4;56654:23;:::i;:::-;:53;;;;:::i;:::-;56620:87;;56764:8;;56738:23;:34;;;;:::i;:::-;56714:21;:58;56711:149;;;56847:8;;56797:47;56821:23;56797:21;:47;:::i;:::-;:58;;;;:::i;:::-;56779:76;;56711:149;-1:-1:-1;56870:15:0;;56423:466;-1:-1:-1;;;56423:466:0:o;23794:295::-;23925:4;2689:10;23983:38;23999:4;2689:10;24014:6;23983:15;:38::i;:::-;24032:27;24042:4;24048:2;24052:6;24032:9;:27::i;:::-;24077:4;24070:11;;;23794:295;;;;;;:::o;51663:189::-;1629:1;2227:7;;:19;;2219:63;;;;-1:-1:-1;;;2219:63:0;;;;;;;:::i;:::-;;;;;;;;;1629:1;2360:7;:18;51739:25:::1;51745:10;51757:6:::0;51739:5:::1;:25::i;:::-;51773:13;51789:11;:6:::0;51796:4:::1;51789:11;:::i;:::-;51809:38;::::0;51773:27;;-1:-1:-1;51817:10:0::1;::::0;51809:38;::::1;;;::::0;51773:27;;51809:38:::1;::::0;;;51773:27;51817:10;51809:38;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;1585:1:0;2539:7;:22;-1:-1:-1;51663:189:0:o;40326:147::-;40007:7;40034:12;;;:6;:12;;;;;:22;;;37989:16;38000:4;37989:10;:16::i;:::-;40440:25:::1;40451:4;40457:7;40440:10;:25::i;:::-;40326:147:::0;;;:::o;41374:218::-;-1:-1:-1;;;;;41470:23:0;;2689:10;41470:23;41462:83;;;;-1:-1:-1;;;41462:83:0;;9737:2:1;41462:83:0;;;9719:21:1;9776:2;9756:18;;;9749:30;9815:34;9795:18;;;9788:62;-1:-1:-1;;;9866:18:1;;;9859:45;9921:19;;41462:83:0;9535:411:1;41462:83:0;41558:26;41570:4;41576:7;41558:11;:26::i;:::-;41374:218;;:::o;57275:193::-;37543:4;37989:16;37543:4;37989:10;:16::i;:::-;-1:-1:-1;57445:6:0::1;:19:::0;;-1:-1:-1;;;;;;57445:19:0::1;-1:-1:-1::0;;;;;57445:19:0;;;::::1;::::0;;;::::1;::::0;;57275:193::o;53916:1020::-;1629:1;2227:7;;:19;;2219:63;;;;-1:-1:-1;;;2219:63:0;;;;;;;:::i;:::-;1629:1;2360:7;:18;-1:-1:-1;;;;;53988:14:0;::::1;53974:11;53988:14:::0;;;:7:::1;:14;::::0;;;;;;;;54029:13;;;:5:::1;:13:::0;;;;;;54057:14:::1;::::0;::::1;::::0;::::1;;:22;;:14:::0;:22:::1;54049:31;;;::::0;::::1;;54110:4;:15;;;54095:12;:30;54087:39;;;::::0;::::1;;54172:3;54154:4;:15;;;54139:12;:30;;;;:::i;:::-;:36;54135:118;;;54195:14;;:22:::0;;-1:-1:-1;;54195:22:0::1;::::0;;-1:-1:-1;54235:7:0::1;;54135:118;54321:15;::::0;::::1;::::0;54294:56:::1;::::0;;54311:26;::::1;54294:56;::::0;::::1;10108:19:1::0;-1:-1:-1;;54339:10:0::1;10165:2:1::0;10161:15;10157:53;10143:12;;;10136:75;54260:12:0::1;::::0;54353:3:::1;::::0;10227:12:1;;54294:56:0::1;;;;;;;;;;;;54284:67;;;;;;54275:77;;:81;;;;:::i;:::-;54260:96:::0;-1:-1:-1;54371:14:0::1;54393:9:::0;;:311:::1;;54436:1;54429:4;:8;:19;;;;;54447:1;54441:4;:7;54429:19;:275;;54483:1;54475:4;:9;;:21;;;;;54494:2;54488:4;:8;54475:21;:229;;54529:2;54522:4;:9;;:21;;;;;54541:2;54535:4;:8;54522:21;:182;;54576:2;54569:4;:9;;:21;;;;;54588:2;54582:4;:8;54569:21;:135;;54623:2;54616:4;:9;;:21;;;;;54635:2;54629:4;:8;54616:21;:88;;54670:2;54663:4;:9;;:22;;;;;54682:3;54676:4;:9;54663:22;:41;;54703:1;54393:311;;54663:41;-1:-1:-1::0;54700:2:0::1;::::0;54393:311:::1;;54616:88;-1:-1:-1::0;54652:3:0::1;::::0;54393:311:::1;;54569:135;-1:-1:-1::0;54605:3:0::1;::::0;54393:311:::1;;54522:182;-1:-1:-1::0;54558:3:0::1;::::0;54393:311:::1;;54475:229;-1:-1:-1::0;54511:3:0::1;::::0;54393:311:::1;;54429:275;-1:-1:-1::0;54463:4:0::1;::::0;54393:311:::1;;;-1:-1:-1::0;54417:4:0::1;::::0;54393:311:::1;-1:-1:-1::0;54714:14:0::1;::::0;::::1;:22:::0;;-1:-1:-1;;54714:22:0::1;::::0;;-1:-1:-1;;;;;54776:29:0;::::1;54731:5;54776:29:::0;;;:22:::1;:29;::::0;;;;;:41:::1;::::0;54808:9;;54776:41:::1;:::i;:::-;-1:-1:-1::0;;;;;54744:29:0;::::1;;::::0;;;:22:::1;:29;::::0;;;;:73;54851:23:::1;::::0;:35:::1;::::0;54877:9;;54851:35:::1;:::i;:::-;54825:23;:61:::0;54899:33:::1;::::0;2255:25:1;;;54910:10:0::1;::::0;54899:33:::1;::::0;2243:2:1;2228:18;54899:33:0::1;;;;;;;53967:969;;;;2391:1;-1:-1:-1::0;1585:1:0;2539:7;:22;53916:1020::o;24498:238::-;24586:4;2689:10;24642:64;2689:10;24658:7;24695:10;24667:25;2689:10;24658:7;24667:9;:25::i;:::-;:38;;;;:::i;:::-;24642:8;:64::i;32229:91::-;32285:27;2689:10;32305:6;32285:5;:27::i;:::-;32229:91;:::o;51858:110::-;-1:-1:-1;;;;;;;;;;;37989:16:0;38000:4;37989:10;:16::i;:::-;51946:17:::1;51952:2;51956:6;51946:5;:17::i;52572:231::-:0;-1:-1:-1;;;;;;;;;;;37989:16:0;38000:4;37989:10;:16::i;:::-;-1:-1:-1;;;;;52697:26:0;::::1;;::::0;;;:22:::1;:26;::::0;;;;;:35:::1;::::0;52726:6;;52697:35:::1;:::i;:::-;-1:-1:-1::0;;;;;52668:26:0;::::1;;::::0;;;:22:::1;:26;::::0;;;;:64;52766:23:::1;::::0;:32:::1;::::0;52792:6;;52766:32:::1;:::i;32639:164::-:0;32716:46;32732:7;2689:10;32755:6;32716:15;:46::i;:::-;32773:22;32779:7;32788:6;32773:5;:22::i;38393:147::-;38479:4;38503:12;;;:6;:12;;;;;;;;-1:-1:-1;;;;;38503:29:0;;;;;;;;;;;;;;;38393:147::o;52807:105::-;37543:4;37989:16;37543:4;37989:10;:16::i;:::-;-1:-1:-1;52891:7:0::1;:17:::0;52807:105::o;20881:104::-;20937:13;20970:7;20963:14;;;;;:::i;53296:318::-;1629:1;2227:7;;:19;;2219:63;;;;-1:-1:-1;;;2219:63:0;;;;;;;:::i;:::-;1629:1;2360:7;:18;-1:-1:-1;;;;;53369:14:0;::::1;53355:11;53369:14:::0;;;:7:::1;:14;::::0;;;;;;;;53411:13;;;:5:::1;:13:::0;;;;;;53487::::1;::::0;53461:23:::1;::::0;::::1;::::0;:39:::1;::::0;53487:13;53461:39:::1;:::i;:::-;53440:16:::0;;:61:::1;;53432:70;;;::::0;::::1;;53562:13;;53536:4;:23;;;:39;;;;:::i;:::-;53510:23;::::0;::::1;:65:::0;53596:10:::1;::::0;::::1;::::0;:14:::1;::::0;53609:1:::1;53596:14;:::i;:::-;53583:10;::::0;;::::1;:27:::0;1585:1;2539:22;;-1:-1:-1;;53296:318:0:o;52917:256::-;37543:4;37989:16;37543:4;37989:10;:16::i;:::-;53035:11:::1;:22:::0;;;53063:16:::1;:27:::0;;;53096:14:::1;:25:::0;;;53113:8;53139:19:::1;53082:8:::0;53049;53139:19:::1;:::i;:::-;:30;;;;:::i;:::-;53127:9;:42:::0;-1:-1:-1;;;;52917:256:0:o;25239:436::-;25332:4;2689:10;25332:4;25415:25;2689:10;25432:7;25415:9;:25::i;:::-;25388:52;;25479:15;25459:16;:35;;25451:85;;;;-1:-1:-1;;;25451:85:0;;10452:2:1;25451:85:0;;;10434:21:1;10491:2;10471:18;;;10464:30;10530:34;10510:18;;;10503:62;-1:-1:-1;;;10581:18:1;;;10574:35;10626:19;;25451:85:0;10250:401:1;25451:85:0;25572:60;25581:5;25588:7;25616:15;25597:16;:34;25572:8;:60::i;:::-;-1:-1:-1;25663:4:0;;25239:436;-1:-1:-1;;;;25239:436:0:o;22286:193::-;22365:4;2689:10;22421:28;2689:10;22438:2;22442:6;22421:9;:28::i;53178:114::-;37543:4;37989:16;37543:4;37989:10;:16::i;:::-;-1:-1:-1;53262:13:0::1;:26:::0;53178:114::o;50715:142::-;50777:11;;:::i;:::-;-1:-1:-1;;;;;;50810:14:0;;;50796:11;50810:14;;;:7;:14;;;;;;;;;50840:13;;:5;:13;;;;;;50833:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50715:142::o;40718:149::-;40007:7;40034:12;;;:6;:12;;;;;:22;;;37989:16;38000:4;37989:10;:16::i;:::-;40833:26:::1;40845:4;40851:7;40833:11;:26::i;51972:115::-:0;-1:-1:-1;;;;;;;;;;;37989:16:0;38000:4;37989:10;:16::i;:::-;52062:20:::1;52071:2;52075:6;52062:8;:20::i;55222:1197::-:0;55267:26;55296:13;21870:12;;;21782:108;55296:13;55348:23;;55267:42;;-1:-1:-1;55315:30:0;55437:27;55348:23;55460:4;55437:27;:::i;:::-;55411:23;:18;55430:4;55411:23;:::i;:::-;:53;;;;:::i;:::-;55377:87;;55528:8;;55502:23;:34;;;;:::i;:::-;55478:21;:58;55470:67;;;;;;55619:8;;55543:23;;55569:47;55593:23;55569:21;:47;:::i;:::-;:58;;;;:::i;:::-;55543:84;;55633:21;55690:9;;55673:16;;55657:15;:32;;;;:::i;:::-;:42;;;;:::i;:::-;55633:66;;55705:21;55757:9;;55745:11;;55729:15;:27;;;;:::i;:::-;:37;;;;:::i;:::-;55705:61;-1:-1:-1;55772:21:0;55705:61;55796:29;55812:13;55796:15;:29;:::i;:::-;:43;;;;:::i;:::-;55772:67;-1:-1:-1;55850:15:0;;55847:236;;55873:31;55890:13;55873:16;:31::i;:::-;55929:12;;:37;;-1:-1:-1;;;55929:37:0;;55960:4;55929:37;;;4674:51:1;55911:15:0;;-1:-1:-1;;;;;55929:12:0;;:22;;4647:18:1;;55929:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;55999:11;;55973:12;;55911:55;;-1:-1:-1;55973:49:0;;-1:-1:-1;;;;;55973:12:0;;;;55999:11;55911:55;55973:25;:49::i;:::-;56034:42;;;11019:25:1;;;11075:2;11060:18;;11053:34;;;56034:42:0;;10992:18:1;56034:42:0;;;;;;;55866:217;55847:236;56096:15;;56093:139;;56128:15;;56120:48;;-1:-1:-1;;;;;56128:15:0;;;;56120:48;;;;;56154:13;;56128:15;56120:48;56128:15;56120:48;56154:13;56128:15;56120:48;;;;;;;;;;;;;;;;;;;;-1:-1:-1;56195:15:0;;56181:44;;;-1:-1:-1;;;;;56195:15:0;;;11272:51:1;;11354:2;11339:18;;11332:34;;;56181:44:0;;11245:18:1;56181:44:0;;;;;;;56093:139;56240:15;;56237:124;;56272:10;;56264:43;;-1:-1:-1;;;;;56272:10:0;;;;56264:43;;;;;56293:13;;56272:10;56264:43;56272:10;56264:43;56293:13;56272:10;56264:43;;;;;;;;;;;;;;;;;;;;-1:-1:-1;56329:10:0;;56320:34;;;-1:-1:-1;;;;;56329:10:0;;;11272:51:1;;11354:2;11339:18;;11332:34;;;56320::0;;11245:18:1;56320:34:0;;;;;;;56237:124;56400:15;56384:13;;:31;;;;:::i;:::-;56368:13;:47;-1:-1:-1;;;;;;;55222:1197:0:o;22542:151::-;-1:-1:-1;;;;;22658:18:0;;;22631:7;22658:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;22542:151::o;55053:163::-;37543:4;37989:16;37543:4;37989:10;:16::i;:::-;55163:6:::1;55152:8;;:17;;;;:::i;:::-;55141:8;:28:::0;55184:10:::1;::::0;55176:36:::1;::::0;-1:-1:-1;;;;;55184:10:0;;::::1;::::0;55176:36;::::1;;;::::0;55205:6;;55184:10:::1;55176:36:::0;55184:10;55176:36;55205:6;55184:10;55176:36;::::1;;;;;;;;;;;;;::::0;::::1;;;;50174:285:::0;-1:-1:-1;;;;;;;;;;;37989:16:0;38000:4;37989:10;:16::i;:::-;-1:-1:-1;;;;;50296:14:0;::::1;50282:11;50296:14:::0;;;:7:::1;:14;::::0;;;;;;;;50337:13;;;:5:::1;:13:::0;;;;;;50376:16;;:22:::1;::::0;50395:3;;50376:22:::1;:::i;:::-;50357:41:::0;;50426:18:::1;::::0;::::1;::::0;:29:::1;::::0;50447:8;;50426:29:::1;:::i;:::-;50405:18;::::0;;::::1;:50:::0;-1:-1:-1;;;;;50174:285:0:o;54940:109::-;37543:4;37989:16;37543:4;37989:10;:16::i;:::-;55036:9:::1;55025:8;;:20;;;;:::i;:::-;55014:8;:31:::0;-1:-1:-1;54940:109:0:o;50465:246::-;50508:13;50529:20;50563:11;;50552:23;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;50529:46;;50590:6;50585:105;50604:11;;50602:1;:13;50585:105;;;50631:17;50651:8;;;:5;:8;;;;;;;;;50668:16;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;50668:16:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:9;;:6;;50657:1;;50668:9;;;;;;:::i;:::-;;;;;;:16;;;;50622:68;50617:3;;;;;:::i;:::-;;;;50585:105;;;-1:-1:-1;50701:6:0;50465:246;-1:-1:-1;50465:246:0:o;53618:294::-;-1:-1:-1;;;;;53687:14:0;;53673:11;53687:14;;;:7;:14;;;;;;;;;53728:13;;;:5;:13;;;;;;53756:14;;;;;;:23;53748:32;;;;;;53807:1;53796:4;:10;;;:12;53787:22;;;;;;53842:1;53829:4;:10;;;:14;;;;:::i;:::-;53816:10;;;:27;53868:12;53850:15;;;:30;53887:14;;:21;;-1:-1:-1;;53887:21:0;-1:-1:-1;53887:21:0;;;-1:-1:-1;;53618:294:0:o;38844:105::-;38911:30;38922:4;2689:10;38911;:30::i;29266:380::-;-1:-1:-1;;;;;29402:19:0;;29394:68;;;;-1:-1:-1;;;29394:68:0;;11843:2:1;29394:68:0;;;11825:21:1;11882:2;11862:18;;;11855:30;11921:34;11901:18;;;11894:62;-1:-1:-1;;;11972:18:1;;;11965:34;12016:19;;29394:68:0;11641:400:1;29394:68:0;-1:-1:-1;;;;;29481:21:0;;29473:68;;;;-1:-1:-1;;;29473:68:0;;12248:2:1;29473:68:0;;;12230:21:1;12287:2;12267:18;;;12260:30;12326:34;12306:18;;;12299:62;-1:-1:-1;;;12377:18:1;;;12370:32;12419:19;;29473:68:0;12046:398:1;29473:68:0;-1:-1:-1;;;;;29554:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;29606:32;;2255:25:1;;;29606:32:0;;2228:18:1;29606:32:0;;;;;;;29266:380;;;:::o;27272:548::-;-1:-1:-1;;;;;27356:21:0;;27348:65;;;;-1:-1:-1;;;27348:65:0;;12651:2:1;27348:65:0;;;12633:21:1;12690:2;12670:18;;;12663:30;12729:33;12709:18;;;12702:61;12780:18;;27348:65:0;12449:355:1;27348:65:0;27504:6;27488:12;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;27659:18:0;;:9;:18;;;;;;;;;;;:28;;;;;;27714:37;2255:25:1;;;27714:37:0;;2228:18:1;27714:37:0;;;;;;;41374:218;;:::o;29937:453::-;30072:24;30099:25;30109:5;30116:7;30099:9;:25::i;:::-;30072:52;;-1:-1:-1;;30139:16:0;:37;30135:248;;30221:6;30201:16;:26;;30193:68;;;;-1:-1:-1;;;30193:68:0;;13011:2:1;30193:68:0;;;12993:21:1;13050:2;13030:18;;;13023:30;13089:31;13069:18;;;13062:59;13138:18;;30193:68:0;12809:353:1;30193:68:0;30305:51;30314:5;30321:7;30349:6;30330:16;:25;30305:8;:51::i;:::-;30061:329;29937:453;;;:::o;26145:840::-;-1:-1:-1;;;;;26276:18:0;;26268:68;;;;-1:-1:-1;;;26268:68:0;;13369:2:1;26268:68:0;;;13351:21:1;13408:2;13388:18;;;13381:30;13447:34;13427:18;;;13420:62;-1:-1:-1;;;13498:18:1;;;13491:35;13543:19;;26268:68:0;13167:401:1;26268:68:0;-1:-1:-1;;;;;26355:16:0;;26347:64;;;;-1:-1:-1;;;26347:64:0;;13775:2:1;26347:64:0;;;13757:21:1;13814:2;13794:18;;;13787:30;13853:34;13833:18;;;13826:62;-1:-1:-1;;;13904:18:1;;;13897:33;13947:19;;26347:64:0;13573:399:1;26347:64:0;-1:-1:-1;;;;;26497:15:0;;26475:19;26497:15;;;;;;;;;;;26531:21;;;;26523:72;;;;-1:-1:-1;;;26523:72:0;;14179:2:1;26523:72:0;;;14161:21:1;14218:2;14198:18;;;14191:30;14257:34;14237:18;;;14230:62;-1:-1:-1;;;14308:18:1;;;14301:36;14354:19;;26523:72:0;13977:402:1;26523:72:0;-1:-1:-1;;;;;26631:15:0;;;:9;:15;;;;;;;;;;;26649:20;;;26631:38;;26849:13;;;;;;;;;;:23;;;;;;26901:26;;2255:25:1;;;26849:13:0;;26901:26;;2228:18:1;26901:26:0;;;;;;;26940:37;40326:147;28153:675;-1:-1:-1;;;;;28237:21:0;;28229:67;;;;-1:-1:-1;;;28229:67:0;;14586:2:1;28229:67:0;;;14568:21:1;14625:2;14605:18;;;14598:30;14664:34;14644:18;;;14637:62;-1:-1:-1;;;14715:18:1;;;14708:31;14756:19;;28229:67:0;14384:397:1;28229:67:0;-1:-1:-1;;;;;28396:18:0;;28371:22;28396:18;;;;;;;;;;;28433:24;;;;28425:71;;;;-1:-1:-1;;;28425:71:0;;14988:2:1;28425:71:0;;;14970:21:1;15027:2;15007:18;;;15000:30;15066:34;15046:18;;;15039:62;-1:-1:-1;;;15117:18:1;;;15110:32;15159:19;;28425:71:0;14786:398:1;28425:71:0;-1:-1:-1;;;;;28532:18:0;;:9;:18;;;;;;;;;;;28553:23;;;28532:44;;28671:12;:22;;;;;;;28722:37;2255:25:1;;;28532:9:0;;:18;28722:37;;2228:18:1;28722:37:0;;;;;;;40326:147;;;:::o;42875:238::-;42959:22;42967:4;42973:7;42959;:22::i;:::-;42954:152;;42998:12;;;;:6;:12;;;;;;;;-1:-1:-1;;;;;42998:29:0;;;;;;;;;:36;;-1:-1:-1;;42998:36:0;43030:4;42998:36;;;43081:12;2689:10;;2609:98;43081:12;-1:-1:-1;;;;;43054:40:0;43072:7;-1:-1:-1;;;;;43054:40:0;43066:4;43054:40;;;;;;;;;;42875:238;;:::o;43245:239::-;43329:22;43337:4;43343:7;43329;:22::i;:::-;43325:152;;;43400:5;43368:12;;;:6;:12;;;;;;;;-1:-1:-1;;;;;43368:29:0;;;;;;;;;;:37;;-1:-1:-1;;43368:37:0;;;43425:40;2689:10;;43368:12;;43425:40;;43400:5;43425:40;43245:239;;:::o;56894:373::-;56978:16;;;56992:1;56978:16;;;;;;;;56954:21;;56978:16;;;;;;;;-1:-1:-1;;57015:6:0;;:13;;;-1:-1:-1;;;57015:13:0;;;;56954:40;;-1:-1:-1;;;;;;57015:6:0;;;;:11;;-1:-1:-1;57015:13:0;;;;;;;;;;;;;;:6;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;57005:4;57010:1;57005:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;57005:23:0;;;:7;;;;;;;;;:23;57057:12;;57039:7;;57057:12;;;57039:4;;57057:12;;57039:7;;;;;;:::i;:::-;-1:-1:-1;;;;;57039:31:0;;;:7;;;;;;;;;:31;57083:6;;:176;;-1:-1:-1;;;57083:176:0;;:6;;;:57;;57148:6;;57083:176;;:6;;57186:4;;57213;;57233:15;;57083:176;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;56945:322;56894:373;:::o;11997:211::-;12141:58;;;-1:-1:-1;;;;;11290:32:1;;12141:58:0;;;11272:51:1;11339:18;;;;11332:34;;;12141:58:0;;;;;;;;;;11245:18:1;;;;12141:58:0;;;;;;;;-1:-1:-1;;;;;12141:58:0;-1:-1:-1;;;12141:58:0;;;12114:86;;12134:5;;12114:19;:86::i;39239:505::-;39328:22;39336:4;39342:7;39328;:22::i;:::-;39323:414;;39516:41;39544:7;-1:-1:-1;;;;;39516:41:0;39554:2;39516:19;:41::i;:::-;39630:38;39658:4;39665:2;39630:19;:38::i;:::-;39421:270;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;39421:270:0;;;;;;;;;;-1:-1:-1;;;39367:358:0;;;;;;;:::i;14570:716::-;14994:23;15020:69;15048:4;15020:69;;;;;;;;;;;;;;;;;15028:5;-1:-1:-1;;;;;15020:27:0;;;:69;;;;;:::i;:::-;15104:17;;14994:95;;-1:-1:-1;15104:21:0;15100:179;;15201:10;15190:30;;;;;;;;;;;;:::i;:::-;15182:85;;;;-1:-1:-1;;;15182:85:0;;17633:2:1;15182:85:0;;;17615:21:1;17672:2;17652:18;;;17645:30;17711:34;17691:18;;;17684:62;-1:-1:-1;;;17762:18:1;;;17755:40;17812:19;;15182:85:0;17431:406:1;16820:451:0;16895:13;16921:19;16953:10;16957:6;16953:1;:10;:::i;:::-;:14;;16966:1;16953:14;:::i;:::-;16943:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16943:25:0;;16921:47;;-1:-1:-1;;;16979:6:0;16986:1;16979:9;;;;;;;;:::i;:::-;;;;:15;-1:-1:-1;;;;;16979:15:0;;;;;;;;;-1:-1:-1;;;17005:6:0;17012:1;17005:9;;;;;;;;:::i;:::-;;;;:15;-1:-1:-1;;;;;17005:15:0;;;;;;;;-1:-1:-1;17036:9:0;17048:10;17052:6;17048:1;:10;:::i;:::-;:14;;17061:1;17048:14;:::i;:::-;17036:26;;17031:135;17068:1;17064;:5;17031:135;;;-1:-1:-1;;;17116:5:0;17124:3;17116:11;17103:25;;;;;;;:::i;:::-;;;;17091:6;17098:1;17091:9;;;;;;;;:::i;:::-;;;;:37;-1:-1:-1;;;;;17091:37:0;;;;;;;;-1:-1:-1;17153:1:0;17143:11;;;;;17071:3;;;:::i;:::-;;;17031:135;;;-1:-1:-1;17184:10:0;;17176:55;;;;-1:-1:-1;;;17176:55:0;;18185:2:1;17176:55:0;;;18167:21:1;;;18204:18;;;18197:30;18263:34;18243:18;;;18236:62;18315:18;;17176:55:0;17983:356:1;7413:229:0;7550:12;7582:52;7604:6;7612:4;7618:1;7621:12;7582:21;:52::i;:::-;7575:59;7413:229;-1:-1:-1;;;;7413:229:0:o;8533:510::-;8703:12;8761:5;8736:21;:30;;8728:81;;;;-1:-1:-1;;;8728:81:0;;18546:2:1;8728:81:0;;;18528:21:1;18585:2;18565:18;;;18558:30;18624:34;18604:18;;;18597:62;-1:-1:-1;;;18675:18:1;;;18668:36;18721:19;;8728:81:0;18344:402:1;8728:81:0;-1:-1:-1;;;;;4963:19:0;;;8820:60;;;;-1:-1:-1;;;8820:60:0;;18953:2:1;8820:60:0;;;18935:21:1;18992:2;18972:18;;;18965:30;19031:31;19011:18;;;19004:59;19080:18;;8820:60:0;18751:353:1;8820:60:0;8894:12;8908:23;8935:6;-1:-1:-1;;;;;8935:11:0;8954:5;8961:4;8935:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8893:73;;;;8984:51;9001:7;9010:10;9022:12;8984:16;:51::i;:::-;8977:58;8533:510;-1:-1:-1;;;;;;;8533:510:0:o;11219:712::-;11369:12;11398:7;11394:530;;;-1:-1:-1;11429:10:0;11422:17;;11394:530;11543:17;;:21;11539:374;;11741:10;11735:17;11802:15;11789:10;11785:2;11781:19;11774:44;11539:374;11884:12;11877:20;;-1:-1:-1;;;11877:20:0;;;;;;;;:::i;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;14:131:1:-;-1:-1:-1;;;;;89:31:1;;79:42;;69:70;;135:1;132;125:12;150:315;218:6;226;279:2;267:9;258:7;254:23;250:32;247:52;;;295:1;292;285:12;247:52;331:9;318:23;308:33;;391:2;380:9;376:18;363:32;404:31;429:5;404:31;:::i;:::-;454:5;444:15;;;150:315;;;;;:::o;470:286::-;528:6;581:2;569:9;560:7;556:23;552:32;549:52;;;597:1;594;587:12;549:52;623:23;;-1:-1:-1;;;;;;675:32:1;;665:43;;655:71;;722:1;719;712:12;953:258;1025:1;1035:113;1049:6;1046:1;1043:13;1035:113;;;1125:11;;;1119:18;1106:11;;;1099:39;1071:2;1064:10;1035:113;;;1166:6;1163:1;1160:13;1157:48;;;-1:-1:-1;;1201:1:1;1183:16;;1176:27;953:258::o;1216:383::-;1365:2;1354:9;1347:21;1328:4;1397:6;1391:13;1440:6;1435:2;1424:9;1420:18;1413:34;1456:66;1515:6;1510:2;1499:9;1495:18;1490:2;1482:6;1478:15;1456:66;:::i;:::-;1583:2;1562:15;-1:-1:-1;;1558:29:1;1543:45;;;;1590:2;1539:54;;1216:383;-1:-1:-1;;1216:383:1:o;1604:315::-;1672:6;1680;1733:2;1721:9;1712:7;1708:23;1704:32;1701:52;;;1749:1;1746;1739:12;1701:52;1788:9;1775:23;1807:31;1832:5;1807:31;:::i;:::-;1857:5;1909:2;1894:18;;;;1881:32;;-1:-1:-1;;;1604:315:1:o;1924:180::-;1983:6;2036:2;2024:9;2015:7;2011:23;2007:32;2004:52;;;2052:1;2049;2042:12;2004:52;-1:-1:-1;2075:23:1;;1924:180;-1:-1:-1;1924:180:1:o;2291:247::-;2350:6;2403:2;2391:9;2382:7;2378:23;2374:32;2371:52;;;2419:1;2416;2409:12;2371:52;2458:9;2445:23;2477:31;2502:5;2477:31;:::i;2543:456::-;2620:6;2628;2636;2689:2;2677:9;2668:7;2664:23;2660:32;2657:52;;;2705:1;2702;2695:12;2657:52;2744:9;2731:23;2763:31;2788:5;2763:31;:::i;:::-;2813:5;-1:-1:-1;2870:2:1;2855:18;;2842:32;2883:33;2842:32;2883:33;:::i;:::-;2543:456;;2935:7;;-1:-1:-1;;;2989:2:1;2974:18;;;;2961:32;;2543:456::o;4736:316::-;4813:6;4821;4829;4882:2;4870:9;4861:7;4857:23;4853:32;4850:52;;;4898:1;4895;4888:12;4850:52;-1:-1:-1;;4921:23:1;;;4991:2;4976:18;;4963:32;;-1:-1:-1;5042:2:1;5027:18;;;5014:32;;4736:316;-1:-1:-1;4736:316:1:o;5057:467::-;5127:12;;5115:25;;5189:4;5178:16;;;5172:23;5156:14;;;5149:47;5249:4;5238:16;;;5232:23;-1:-1:-1;;;;;5228:49:1;5212:14;;;5205:73;5327:4;5316:16;;;5310:23;5294:14;;;5287:47;5397:4;5386:16;;;5380:23;5373:31;5366:39;5350:14;;;5343:63;5265:3;5444:16;;;5438:23;5422:14;;;5415:47;5511:4;5500:16;;;5494:23;5478:14;;5471:47;5057:467::o;5529:238::-;5707:3;5692:19;;5720:41;5696:9;5743:6;5720:41;:::i;5772:388::-;5840:6;5848;5901:2;5889:9;5880:7;5876:23;5872:32;5869:52;;;5917:1;5914;5907:12;5869:52;5956:9;5943:23;5975:31;6000:5;5975:31;:::i;:::-;6025:5;-1:-1:-1;6082:2:1;6067:18;;6054:32;6095:33;6054:32;6095:33;:::i;6165:383::-;6242:6;6250;6258;6311:2;6299:9;6290:7;6286:23;6282:32;6279:52;;;6327:1;6324;6317:12;6279:52;6366:9;6353:23;6385:31;6410:5;6385:31;:::i;:::-;6435:5;6487:2;6472:18;;6459:32;;-1:-1:-1;6538:2:1;6523:18;;;6510:32;;6165:383;-1:-1:-1;;;6165:383:1:o;6553:694::-;6768:2;6820:21;;;6890:13;;6793:18;;;6912:22;;;6739:4;;6768:2;6991:15;;;;6965:2;6950:18;;;6739:4;7034:187;7048:6;7045:1;7042:13;7034:187;;;7097:42;7135:3;7126:6;7120:13;7097:42;:::i;:::-;7196:15;;;;7168:4;7159:14;;;;;7070:1;7063:9;7034:187;;;-1:-1:-1;7238:3:1;;6553:694;-1:-1:-1;;;;;;6553:694:1:o;7708:127::-;7769:10;7764:3;7760:20;7757:1;7750:31;7800:4;7797:1;7790:15;7824:4;7821:1;7814:15;7840:135;7879:3;-1:-1:-1;;7900:17:1;;7897:43;;;7920:18;;:::i;:::-;-1:-1:-1;7967:1:1;7956:13;;7840:135::o;7980:128::-;8020:3;8051:1;8047:6;8044:1;8041:13;8038:39;;;8057:18;;:::i;:::-;-1:-1:-1;8093:9:1;;7980:128::o;8113:380::-;8192:1;8188:12;;;;8235;;;8256:61;;8310:4;8302:6;8298:17;8288:27;;8256:61;8363:2;8355:6;8352:14;8332:18;8329:38;8326:161;;;8409:10;8404:3;8400:20;8397:1;8390:31;8444:4;8441:1;8434:15;8472:4;8469:1;8462:15;8498:127;8559:10;8554:3;8550:20;8547:1;8540:31;8590:4;8587:1;8580:15;8614:4;8611:1;8604:15;8630:120;8670:1;8696;8686:35;;8701:18;;:::i;:::-;-1:-1:-1;8735:9:1;;8630:120::o;8755:112::-;8787:1;8813;8803:35;;8818:18;;:::i;:::-;-1:-1:-1;8852:9:1;;8755:112::o;8872:125::-;8912:4;8940:1;8937;8934:8;8931:34;;;8945:18;;:::i;:::-;-1:-1:-1;8982:9:1;;8872:125::o;9002:168::-;9042:7;9108:1;9104;9100:6;9096:14;9093:1;9090:21;9085:1;9078:9;9071:17;9067:45;9064:71;;;9115:18;;:::i;:::-;-1:-1:-1;9155:9:1;;9002:168::o;9175:355::-;9377:2;9359:21;;;9416:2;9396:18;;;9389:30;9455:33;9450:2;9435:18;;9428:61;9521:2;9506:18;;9175:355::o;10656:184::-;10726:6;10779:2;10767:9;10758:7;10754:23;10750:32;10747:52;;;10795:1;10792;10785:12;10747:52;-1:-1:-1;10818:16:1;;10656:184;-1:-1:-1;10656:184:1:o;11377:127::-;11438:10;11433:3;11429:20;11426:1;11419:31;11469:4;11466:1;11459:15;11493:4;11490:1;11483:15;11509:127;11570:10;11565:3;11561:20;11558:1;11551:31;11601:4;11598:1;11591:15;11625:4;11622:1;11615:15;15189:251;15259:6;15312:2;15300:9;15291:7;15287:23;15283:32;15280:52;;;15328:1;15325;15318:12;15280:52;15360:9;15354:16;15379:31;15404:5;15379:31;:::i;15445:908::-;15679:4;15727:3;15716:9;15712:19;15758:6;15747:9;15740:25;15784:2;15822:3;15817:2;15806:9;15802:18;15795:31;15846:6;15881;15875:13;15912:6;15904;15897:22;15950:3;15939:9;15935:19;15928:26;;15989:2;15981:6;15977:15;15963:29;;16010:1;16020:195;16034:6;16031:1;16028:13;16020:195;;;16099:13;;-1:-1:-1;;;;;16095:39:1;16083:52;;16190:15;;;;16155:12;;;;16131:1;16049:9;16020:195;;;-1:-1:-1;;;;;;;16271:32:1;;;;16266:2;16251:18;;16244:60;-1:-1:-1;;;16335:2:1;16320:18;16313:34;16232:3;15445:908;-1:-1:-1;;15445:908:1:o;16358:786::-;16769:25;16764:3;16757:38;16739:3;16824:6;16818:13;16840:62;16895:6;16890:2;16885:3;16881:12;16874:4;16866:6;16862:17;16840:62;:::i;:::-;-1:-1:-1;;;16961:2:1;16921:16;;;16953:11;;;16946:40;17011:13;;17033:63;17011:13;17082:2;17074:11;;17067:4;17055:17;;17033:63;:::i;:::-;17116:17;17135:2;17112:26;;16358:786;-1:-1:-1;;;;16358:786:1:o;17149:277::-;17216:6;17269:2;17257:9;17248:7;17244:23;17240:32;17237:52;;;17285:1;17282;17275:12;17237:52;17317:9;17311:16;17370:5;17363:13;17356:21;17349:5;17346:32;17336:60;;17392:1;17389;17382:12;17842:136;17881:3;17909:5;17899:39;;17918:18;;:::i;:::-;-1:-1:-1;;;17954:18:1;;17842:136::o;19109:274::-;19238:3;19276:6;19270:13;19292:53;19338:6;19333:3;19326:4;19318:6;19314:17;19292:53;:::i;:::-;19361:16;;;;;19109:274;-1:-1:-1;;19109:274:1:o

Swarm Source

ipfs://cf52c365511ee298c6b7856e6fda1190d29d8332834cc52cef12dd7f3f233a67
[ Download: CSV Export  ]
[ Download: CSV Export  ]

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