ETH Price: $2,377.45 (-10.57%)

Contract

0x1842F548295b222C56939745d8DDf74981d40030
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

More Info

Private Name Tags

TokenTracker

QuDefi (QUDEFI) (@$0.0096)

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Approve219235922025-02-25 13:18:351 hr ago1740489515IN
QuDefi: QUDEFI Token
0 ETH0.000166073.56283284
Approve219235622025-02-25 13:12:352 hrs ago1740489155IN
QuDefi: QUDEFI Token
0 ETH0.000184913.96694439
Transfer219235442025-02-25 13:08:592 hrs ago1740488939IN
QuDefi: QUDEFI Token
0 ETH0.000129672.37307042
Transfer219235232025-02-25 13:04:472 hrs ago1740488687IN
QuDefi: QUDEFI Token
0 ETH0.000125842.52536827
Transfer219235062025-02-25 13:01:232 hrs ago1740488483IN
QuDefi: QUDEFI Token
0 ETH0.000428572.43178211
Approve219235012025-02-25 13:00:232 hrs ago1740488423IN
QuDefi: QUDEFI Token
0 ETH0.000167613.59586733
Transfer219234232025-02-25 12:44:472 hrs ago1740487487IN
QuDefi: QUDEFI Token
0 ETH0.000241173.60248482
Transfer219223452025-02-25 9:07:596 hrs ago1740474479IN
QuDefi: QUDEFI Token
0 ETH0.00033286.09022439
Transfer219223372025-02-25 9:06:236 hrs ago1740474383IN
QuDefi: QUDEFI Token
0 ETH0.000313095.72698152
Transfer219223202025-02-25 9:02:596 hrs ago1740474179IN
QuDefi: QUDEFI Token
0 ETH0.000540827.53929028
Transfer219222912025-02-25 8:57:116 hrs ago1740473831IN
QuDefi: QUDEFI Token
0 ETH0.000485476.76657094
Transfer219222822025-02-25 8:55:236 hrs ago1740473723IN
QuDefi: QUDEFI Token
0 ETH0.000526117.33297837
Transfer219222722025-02-25 8:53:236 hrs ago1740473603IN
QuDefi: QUDEFI Token
0 ETH0.000598578.34291962
Transfer219222312025-02-25 8:44:476 hrs ago1740473087IN
QuDefi: QUDEFI Token
0 ETH0.0006121511.20211086
Transfer219222292025-02-25 8:44:236 hrs ago1740473063IN
QuDefi: QUDEFI Token
0 ETH0.0008745912.1901705
Transfer219218212025-02-25 7:22:117 hrs ago1740468131IN
QuDefi: QUDEFI Token
0 ETH0.000473146.5958085
Transfer219218042025-02-25 7:18:477 hrs ago1740467927IN
QuDefi: QUDEFI Token
0 ETH0.000402497.36558328
Transfer219217932025-02-25 7:16:357 hrs ago1740467795IN
QuDefi: QUDEFI Token
0 ETH0.0009764813.61025863
Transfer219217682025-02-25 7:11:358 hrs ago1740467495IN
QuDefi: QUDEFI Token
0 ETH0.000375826.8774898
Transfer219217652025-02-25 7:10:598 hrs ago1740467459IN
QuDefi: QUDEFI Token
0 ETH0.000329844.59743625
Transfer219217612025-02-25 7:10:118 hrs ago1740467411IN
QuDefi: QUDEFI Token
0 ETH0.000401385.59453019
Transfer219217542025-02-25 7:08:478 hrs ago1740467327IN
QuDefi: QUDEFI Token
0 ETH0.000206673.78214427
Transfer219217532025-02-25 7:08:358 hrs ago1740467315IN
QuDefi: QUDEFI Token
0 ETH0.000445856.21435508
Transfer219217472025-02-25 7:07:238 hrs ago1740467243IN
QuDefi: QUDEFI Token
0 ETH0.000179043.27643101
Transfer219217442025-02-25 7:06:478 hrs ago1740467207IN
QuDefi: QUDEFI Token
0 ETH0.000224323.12665119
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block
From
To
219235062025-02-25 13:01:232 hrs ago1740488483
QuDefi: QUDEFI Token
0.10643683 ETH
219235062025-02-25 13:01:232 hrs ago1740488483
QuDefi: QUDEFI Token
0.10643683 ETH
219164902025-02-24 13:30:1125 hrs ago1740403811
QuDefi: QUDEFI Token
0.12112143 ETH
219164902025-02-24 13:30:1125 hrs ago1740403811
QuDefi: QUDEFI Token
0.12112143 ETH
219133042025-02-24 2:48:3536 hrs ago1740365315
QuDefi: QUDEFI Token
0.1133412 ETH
219133042025-02-24 2:48:3536 hrs ago1740365315
QuDefi: QUDEFI Token
0.1133412 ETH
218977492025-02-21 22:38:233 days ago1740177503
QuDefi: QUDEFI Token
0.13130801 ETH
218977492025-02-21 22:38:233 days ago1740177503
QuDefi: QUDEFI Token
0.13130801 ETH
218663722025-02-17 13:23:478 days ago1739798627
QuDefi: QUDEFI Token
0.15668933 ETH
218663722025-02-17 13:23:478 days ago1739798627
QuDefi: QUDEFI Token
0.15668933 ETH
218460622025-02-14 17:02:4710 days ago1739552567
QuDefi: QUDEFI Token
0.16138308 ETH
218460622025-02-14 17:02:4710 days ago1739552567
QuDefi: QUDEFI Token
0.16138308 ETH
218429732025-02-14 6:40:2311 days ago1739515223
QuDefi: QUDEFI Token
0.20337738 ETH
218429732025-02-14 6:40:2311 days ago1739515223
QuDefi: QUDEFI Token
0.20337738 ETH
218262642025-02-11 22:28:1113 days ago1739312891
QuDefi: QUDEFI Token
0.1931902 ETH
218262642025-02-11 22:28:1113 days ago1739312891
QuDefi: QUDEFI Token
0.1931902 ETH
218128752025-02-10 1:36:2315 days ago1739151383
QuDefi: QUDEFI Token
0.18562757 ETH
218128752025-02-10 1:36:2315 days ago1739151383
QuDefi: QUDEFI Token
0.18562757 ETH
218121582025-02-09 23:11:5915 days ago1739142719
QuDefi: QUDEFI Token
0.20603135 ETH
218121582025-02-09 23:11:5915 days ago1739142719
QuDefi: QUDEFI Token
0.20603135 ETH
218118132025-02-09 22:02:3515 days ago1739138555
QuDefi: QUDEFI Token
0.27084086 ETH
218118132025-02-09 22:02:3515 days ago1739138555
QuDefi: QUDEFI Token
0.27084086 ETH
218050792025-02-08 23:29:2316 days ago1739057363
QuDefi: QUDEFI Token
0.34336992 ETH
218050792025-02-08 23:29:2316 days ago1739057363
QuDefi: QUDEFI Token
0.34336992 ETH
217979362025-02-07 23:32:2317 days ago1738971143
QuDefi: QUDEFI Token
0.3939461 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
QUDEFI

Compiler Version
v0.8.26+commit.8a97fa7a

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-10-17
*/

/**

 ██████╗ ██╗   ██╗██████╗ ███████╗███████╗██╗
██╔═══██╗██║   ██║██╔══██╗██╔════╝██╔════╝██║
██║   ██║██║   ██║██║  ██║█████╗  █████╗  ██║
██║▄▄ ██║██║   ██║██║  ██║██╔══╝  ██╔══╝  ██║
╚██████╔╝╚██████╔╝██████╔╝███████╗██║     ██║
 ╚══▀▀═╝  ╚═════╝ ╚═════╝ ╚══════╝╚═╝     ╚═╝


https://linktr.ee/QuDefi_QuLabs

*/

pragma solidity 0.8.26;

// OpenZeppelin Contracts (last updated v5.1.0) (utils/cryptography/ECDSA.sol)

pragma solidity ^0.8.20;

/**
 * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.
 *
 * These functions can be used to verify that a message was signed by the holder
 * of the private keys of a given address.
 */
library ECDSA {
    enum RecoverError {
        NoError,
        InvalidSignature,
        InvalidSignatureLength,
        InvalidSignatureS
    }

    /**
     * @dev The signature derives the `address(0)`.
     */
    error ECDSAInvalidSignature();

    /**
     * @dev The signature has an invalid length.
     */
    error ECDSAInvalidSignatureLength(uint256 length);

    /**
     * @dev The signature has an S value that is in the upper half order.
     */
    error ECDSAInvalidSignatureS(bytes32 s);

    /**
     * @dev Returns the address that signed a hashed message (`hash`) with `signature` or an error. This will not
     * return address(0) without also returning an error description. Errors are documented using an enum (error type)
     * and a bytes32 providing additional information about the error.
     *
     * If no error is returned, then the address can be used for verification purposes.
     *
     * The `ecrecover` EVM precompile allows for malleable (non-unique) signatures:
     * this function rejects them by requiring the `s` value to be in the lower
     * half order, and the `v` value to be either 27 or 28.
     *
     * IMPORTANT: `hash` _must_ be the result of a hash operation for the
     * verification to be secure: it is possible to craft signatures that
     * recover to arbitrary addresses for non-hashed data. A safe way to ensure
     * this is by receiving a hash of the original message (which may otherwise
     * be too long), and then calling {MessageHashUtils-toEthSignedMessageHash} on it.
     *
     * Documentation for signature generation:
     * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js]
     * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers]
     */
    function tryRecover(
        bytes32 hash,
        bytes memory signature
    ) internal pure returns (address recovered, RecoverError err, bytes32 errArg) {
        if (signature.length == 65) {
            bytes32 r;
            bytes32 s;
            uint8 v;
            // ecrecover takes the signature parameters, and the only way to get them
            // currently is to use assembly.
            assembly ("memory-safe") {
                r := mload(add(signature, 0x20))
                s := mload(add(signature, 0x40))
                v := byte(0, mload(add(signature, 0x60)))
            }
            return tryRecover(hash, v, r, s);
        } else {
            return (address(0), RecoverError.InvalidSignatureLength, bytes32(signature.length));
        }
    }

    /**
     * @dev Returns the address that signed a hashed message (`hash`) with
     * `signature`. This address can then be used for verification purposes.
     *
     * The `ecrecover` EVM precompile allows for malleable (non-unique) signatures:
     * this function rejects them by requiring the `s` value to be in the lower
     * half order, and the `v` value to be either 27 or 28.
     *
     * IMPORTANT: `hash` _must_ be the result of a hash operation for the
     * verification to be secure: it is possible to craft signatures that
     * recover to arbitrary addresses for non-hashed data. A safe way to ensure
     * this is by receiving a hash of the original message (which may otherwise
     * be too long), and then calling {MessageHashUtils-toEthSignedMessageHash} on it.
     */
    function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {
        (address recovered, RecoverError error, bytes32 errorArg) = tryRecover(hash, signature);
        _throwError(error, errorArg);
        return recovered;
    }

    /**
     * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately.
     *
     * See https://eips.ethereum.org/EIPS/eip-2098[ERC-2098 short signatures]
     */
    function tryRecover(
        bytes32 hash,
        bytes32 r,
        bytes32 vs
    ) internal pure returns (address recovered, RecoverError err, bytes32 errArg) {
        unchecked {
            bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff);
            // We do not check for an overflow here since the shift operation results in 0 or 1.
            uint8 v = uint8((uint256(vs) >> 255) + 27);
            return tryRecover(hash, v, r, s);
        }
    }

    /**
     * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately.
     */
    function recover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address) {
        (address recovered, RecoverError error, bytes32 errorArg) = tryRecover(hash, r, vs);
        _throwError(error, errorArg);
        return recovered;
    }

    /**
     * @dev Overload of {ECDSA-tryRecover} that receives the `v`,
     * `r` and `s` signature fields separately.
     */
    function tryRecover(
        bytes32 hash,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) internal pure returns (address recovered, RecoverError err, bytes32 errArg) {
        // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature
        // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines
        // the valid range for s in (301): 0 < s < secp256k1n ÷ 2 + 1, and for v in (302): v ∈ {27, 28}. Most
        // signatures from current libraries generate a unique signature with an s-value in the lower half order.
        //
        // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value
        // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or
        // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept
        // these malleable signatures as well.
        if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {
            return (address(0), RecoverError.InvalidSignatureS, s);
        }

        // If the signature is valid (and not malleable), return the signer address
        address signer = ecrecover(hash, v, r, s);
        if (signer == address(0)) {
            return (address(0), RecoverError.InvalidSignature, bytes32(0));
        }

        return (signer, RecoverError.NoError, bytes32(0));
    }

    /**
     * @dev Overload of {ECDSA-recover} that receives the `v`,
     * `r` and `s` signature fields separately.
     */
    function recover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) internal pure returns (address) {
        (address recovered, RecoverError error, bytes32 errorArg) = tryRecover(hash, v, r, s);
        _throwError(error, errorArg);
        return recovered;
    }

    /**
     * @dev Optionally reverts with the corresponding custom error according to the `error` argument provided.
     */
    function _throwError(RecoverError error, bytes32 errorArg) private pure {
        if (error == RecoverError.NoError) {
            return; // no error: do nothing
        } else if (error == RecoverError.InvalidSignature) {
            revert ECDSAInvalidSignature();
        } else if (error == RecoverError.InvalidSignatureLength) {
            revert ECDSAInvalidSignatureLength(uint256(errorArg));
        } else if (error == RecoverError.InvalidSignatureS) {
            revert ECDSAInvalidSignatureS(errorArg);
        }
    }
}
// OpenZeppelin Contracts v4.4.1 (utils/Counters.sol)

pragma solidity ^0.8.0;

/**
 * @title Counters
 * @author Matt Condon (@shrugs)
 * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number
 * of elements in a mapping, issuing ERC721 ids, or counting request ids.
 *
 * Include with `using Counters for Counters.Counter;`
 */
library Counters {
    struct Counter {
        // This variable should never be directly accessed by users of the library: interactions must be restricted to
        // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add
        // this feature: see https://github.com/ethereum/solidity/issues/4637
        uint256 _value; // default: 0
    }

    function current(Counter storage counter) internal view returns (uint256) {
        return counter._value;
    }

    function increment(Counter storage counter) internal {
        unchecked {
            counter._value += 1;
        }
    }

    function decrement(Counter storage counter) internal {
        uint256 value = counter._value;
        require(value > 0, "Counter: decrement overflow");
        unchecked {
            counter._value = value - 1;
        }
    }

    function reset(Counter storage counter) internal {
        counter._value = 0;
    }
}

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

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

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

interface IERC20Metadata is IERC20{
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);
}

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;

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    function name() public view virtual override returns (string memory) {
        return _name;
    }

    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }

    function transfer(address to, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _transfer(owner, to, amount);
        return true;
    }

    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }

    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, amount);
        return true;
    }

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

    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, allowance(owner, spender) + addedValue);
        return true;
    }


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

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

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


    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

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

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

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

contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    
    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    function owner() public view returns (address) {
        return _owner;
    }

    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    function renounceOwnership() external virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

library Address {
    function isContract(address account) internal view returns (bool) {
        return account.code.length > 0;
    }

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

    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, "Address: low-level call failed");
    }

    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

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

    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");
        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResultFromTarget(target, success, returndata, errorMessage);
    }

    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResultFromTarget(target, success, returndata, errorMessage);
    }

    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResultFromTarget(target, success, returndata, errorMessage);
    }

    function verifyCallResultFromTarget(
        address target,
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        if (success) {
            if (returndata.length == 0) {
                // only check isContract if the call was successful and the return data is empty
                // otherwise we already know that it was a contract
                require(isContract(target), "Address: call to non-contract");
            }
            return returndata;
        } else {
            _revert(returndata, errorMessage);
        }
    }

    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            _revert(returndata, errorMessage);
        }
    }

    function _revert(bytes memory returndata, string memory errorMessage) private pure {
        // Look for revert reason and bubble it up if present
        if (returndata.length > 0) {
            // The easiest way to bubble the revert reason is using memory via assembly
            /// @solidity memory-safe-assembly
            assembly {
                let returndata_size := mload(returndata)
                revert(add(32, returndata), returndata_size)
            }
        } else {
            revert(errorMessage);
        }
    }
}

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

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

    function safeApprove(IERC20 token, address spender, uint256 value) internal {
        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));
    }
}

interface ILpPair {
    function sync() external;
}

interface IDexRouter {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function swapExactTokensForETHSupportingFeeOnTransferTokens(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external;
}

interface IDexFactory {
    function createPair(address tokenA, address tokenB) external returns (address pair);
}

contract QUDEFI is ERC20, Ownable {
    using Counters for Counters.Counter;

    // Mappings
    mapping(address => bool) public exemptFromFees;
    mapping(address => bool) public exemptFromLimits;
    mapping(address => bool) public isAMMPair;
    mapping(address => uint256) private _holderLastTransferBlock; // MEV protection
    mapping(address => bool) private bots;

    // Addresses
    address public marketingAddress;
    address public devAddress;
    address public blacklistOwner;
    address public immutable lpPair;
    address public immutable WETH;

    // Contracts
    IDexRouter public immutable dexRouter;

    // Booleans
    bool public tradingAllowed;
    bool public antiMevEnabled = false;
    bool public limited = true;
    bool public transferDelayEnabled = false;

    // Structs
    struct TxLimits {
        uint128 transactionLimit;
        uint128 walletLimit;
    }

    struct Taxes {
        uint64 marketingTax;
        uint64 devTax;
        uint64 liquidityTax;
        uint64 totalTax;
    }

    struct TokensForTax {
        uint80 tokensForMarketing;
        uint80 tokensForLiquidity;
        uint80 tokensForDev;
        bool gasSaver;
    }

    // Public Variables
    TxLimits public txLimits;
    Taxes public buyTax;
    Taxes public sellTax;
    TokensForTax public tokensForTax;

    // Constants
    uint64 public constant FEE_DIVISOR = 10000;

    // Counters
    uint256 public launchBlock;
    uint256 public pressCounter;

    // Swap Variables
    uint256 public swapTokensAtAmt;
    uint256 public lastSwapBackBlock;

    // Events
    event UpdatedTransactionLimit(uint newMax);
    event UpdatedWalletLimit(uint newMax);
    event SetExemptFromFees(address _address, bool _isExempt);
    event SetExemptFromLimits(address _address, bool _isExempt);
    event RemovedLimits();
    event BlacklistOwnerRenounced(address previousOwner, address newOwner);
    event UpdatedBuyTax(uint newAmt);
    event UpdatedSellTax(uint newAmt);
    event removeTaxEvent(uint newAmt);

    // New event for burn
    event TokensBurned(address indexed burner, uint256 amount);

    // Dead address constant
    address public constant DEAD_ADDRESS = 0x000000000000000000000000000000000000dEaD;

    // Add this mapping
    mapping(address => Counters.Counter) private nonces;

    // constructor

    constructor()
        ERC20("QuDefi", "QUDEFI")
    {   
        _mint(msg.sender, 100000000 * (10 ** 18));

        address _v2Router;

        // @dev assumes WETH pair
        if(block.chainid == 1){
            _v2Router = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
        } else if(block.chainid == 5){
            _v2Router = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
        } else if(block.chainid == 97){
            _v2Router = 0xD99D1c33F9fC3444f8101754aBC46c52416550D1;
        } else if(block.chainid == 56){
            _v2Router = 0x10ED43C718714eb63d5aA57B78B54704E256024E;
        } else if(block.chainid == 42161){
            _v2Router = 0x1b02dA8Cb0d097eB8D57A175b88c7D8b47997506;
        } else if(block.chainid == 8453){
            _v2Router = 0x4752ba5DBc23f44D87826276BF6Fd6b1C372aD24;
        } else {
            revert("Chain not configured");
        }

        dexRouter = IDexRouter(_v2Router);

        txLimits.transactionLimit = uint128(totalSupply() * 10 / 1000);
        txLimits.walletLimit = uint128(totalSupply() * 10 / 1000);
        swapTokensAtAmt = totalSupply() * 25 / 100000;

        marketingAddress = msg.sender; // update
        devAddress = msg.sender; // update
        blacklistOwner = msg.sender;

        buyTax.marketingTax = 1300;// 1% = 100
        buyTax.liquidityTax = 0;
        buyTax.devTax = 0;
        buyTax.totalTax = buyTax.marketingTax + buyTax.liquidityTax + buyTax.devTax;

        sellTax.marketingTax = 2000;
        sellTax.liquidityTax = 0;
        sellTax.devTax = 0;
        sellTax.totalTax = sellTax.marketingTax + sellTax.liquidityTax + sellTax.devTax;

        tokensForTax.gasSaver = true;

        WETH = dexRouter.WETH();
        lpPair = IDexFactory(dexRouter.factory()).createPair(address(this), WETH);

        isAMMPair[lpPair] = true;

        exemptFromLimits[lpPair] = true;
        exemptFromLimits[msg.sender] = true;
        exemptFromLimits[address(this)] = true;

        exemptFromFees[msg.sender] = true;
        exemptFromFees[address(this)] = true;
        exemptFromFees[address(dexRouter)] = true;
 
        _approve(address(this), address(dexRouter), type(uint256).max);
        _approve(address(msg.sender), address(dexRouter), totalSupply());
    }

    function isBot(address a) public view returns (bool){
      return bots[a];
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual override {
        
        if(!exemptFromFees[from] && !exemptFromFees[to]){
            require(!bots[from] && !bots[to], "Bot");
            require(tradingAllowed, "Trading not active");
            amount -= handleTax(from, to, amount);
            checkLimits(from, to, amount);
        }

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

    function checkLimits(address from, address to, uint256 amount) internal {
        if(limited){
            bool exFromLimitsTo = exemptFromLimits[to];
            uint256 balanceOfTo = balanceOf(to);
            TxLimits memory _txLimits = txLimits;
            // buy
            if (isAMMPair[from] && !exFromLimitsTo) {
                require(amount <= _txLimits.transactionLimit, "Max Txn");
                require(amount + balanceOfTo <= _txLimits.walletLimit, "Max Wallet");
            } 
            // sell
            else if (isAMMPair[to] && !exemptFromLimits[from]) {
                require(amount <= _txLimits.transactionLimit, "Max Txn");
            }
            else if(!exFromLimitsTo) {
                require(amount + balanceOfTo <= _txLimits.walletLimit, "Max Wallet");
            }

            if(transferDelayEnabled){
                if (to != address(dexRouter) && to != address(lpPair)){
                    require(_holderLastTransferBlock[tx.origin] + 6 < block.number, "Transfer Delay");
                    _holderLastTransferBlock[to] = block.number;
                    _holderLastTransferBlock[tx.origin] = block.number;
                    if(from == address(lpPair)){
                        require(tx.origin == to, "no buying to external wallets yet");
                    }
                }
            }

        }

    }

    function handleTax(address from, address to, uint256 amount) internal returns (uint256){

        if(balanceOf(address(this)) >= swapTokensAtAmt && !isAMMPair[from] && lastSwapBackBlock + 2 <= block.number) {
            convertTaxes();
        }
        
        uint128 tax = 0;

        Taxes memory taxes;

        if (isAMMPair[to]){
            taxes = sellTax;
        } else if(isAMMPair[from]){
            taxes = buyTax;
        }
        
        if(taxes.totalTax > 0){
            TokensForTax memory tokensForTaxUpdate = tokensForTax;
            if(launchBlock == block.number){
                if (isAMMPair[from] || isAMMPair[to]){
                    tax = uint128(amount * 500 / FEE_DIVISOR);
                }
            } else if(launchBlock == block.number + 1 || launchBlock == block.number + 2){
                if (isAMMPair[from] || isAMMPair[to]){
                    tax = uint128(amount * 2000 / FEE_DIVISOR);
                }
            } else {
                tax = uint128(amount * taxes.totalTax / FEE_DIVISOR);
            }
            tokensForTaxUpdate.tokensForLiquidity += uint80(tax * taxes.liquidityTax / taxes.totalTax / 1e9);
            tokensForTaxUpdate.tokensForMarketing += uint80(tax * taxes.marketingTax / taxes.totalTax / 1e9);
            tokensForTaxUpdate.tokensForDev += uint80(tax * taxes.devTax / taxes.totalTax / 1e9);
            tokensForTax = tokensForTaxUpdate;
            super._transfer(from, address(this), tax);
        }
        
        return tax;
    }
 
    function swapTokensForETH(uint256 tokenAmt) private {

        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = WETH;

        dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmt,
            0,
            path,
            address(this),
            block.timestamp
        );
    }

    function convertTaxes() private {

        uint256 contractBalance = balanceOf(address(this));
        TokensForTax memory tokensForTaxMem = tokensForTax;
        uint256 totalTokensToSwap = tokensForTaxMem.tokensForLiquidity + tokensForTaxMem.tokensForMarketing + tokensForTaxMem.tokensForDev;
        
        if(contractBalance == 0 || totalTokensToSwap == 0) {return;}

        if(contractBalance > swapTokensAtAmt * 10){
            contractBalance = swapTokensAtAmt * 10;
        }

        if(tokensForTaxMem.tokensForLiquidity > 0){
            uint256 liquidityTokens = contractBalance * tokensForTaxMem.tokensForLiquidity / totalTokensToSwap;
            super._transfer(address(this), lpPair, liquidityTokens);
            try ILpPair(lpPair).sync(){} catch {}
            contractBalance -= liquidityTokens;
            totalTokensToSwap -= tokensForTaxMem.tokensForLiquidity;
        }

        if(contractBalance > 0){

            swapTokensForETH(contractBalance);
            
            uint256 ethBalance = address(this).balance;

            bool success;

            if(tokensForTaxMem.tokensForDev > 0){
                (success,) = devAddress.call{value: ethBalance * tokensForTaxMem.tokensForDev / totalTokensToSwap}("");  
            }

            ethBalance = address(this).balance;

            if(ethBalance > 0){
                (success,) = marketingAddress.call{value: ethBalance}("");  
            }
        }

        tokensForTaxMem.tokensForLiquidity = 0;
        tokensForTaxMem.tokensForMarketing = 0;
        tokensForTaxMem.tokensForDev = 0;

        tokensForTax = tokensForTaxMem;
        lastSwapBackBlock = block.number;
    }

    // owner functions
    function setExemptFromFee(address _address, bool _isExempt) external onlyOwner {
        require(_address != address(0), "Zero Address");
        require(_address != address(this), "Cannot unexempt contract");
        exemptFromFees[_address] = _isExempt;
        emit SetExemptFromFees(_address, _isExempt);
    }

    function setExemptFromLimit(address _address, bool _isExempt) external onlyOwner {
        require(_address != address(0), "Zero Address");
        if(!_isExempt){
            require(_address != lpPair, "Cannot remove pair");
        }
        exemptFromLimits[_address] = _isExempt;
        emit SetExemptFromLimits(_address, _isExempt);
    }

    function updateTransactionLimit(uint128 newNumInTokens) external onlyOwner {
        require(newNumInTokens >= (totalSupply() * 1 / 1000)/(10**decimals()), "Too low");
        txLimits.transactionLimit = uint128(newNumInTokens * (10**decimals()));
        emit UpdatedTransactionLimit(txLimits.transactionLimit);
    }

    function updateWalletLimit(uint128 newNumInTokens) external onlyOwner {
        require(newNumInTokens >= (totalSupply() * 1 / 1000)/(10**decimals()), "Too low");
        txLimits.walletLimit = uint128(newNumInTokens * (10**decimals()));
        emit UpdatedWalletLimit(txLimits.walletLimit);
    }

    function updateSwapTokensAmt(uint256 newAmount) external onlyOwner {
        require(newAmount >= (totalSupply() * 1) / 100000, "Swap amount cannot be lower than 0.001% total supply.");
        require(newAmount <= (totalSupply() * 5) / 1000, "Swap amount cannot be higher than 0.5% total supply.");
        swapTokensAtAmt = newAmount;
    }

    function updateBuyTax(uint64 _marketingTax, uint64 _liquidityTax, uint64 _devTax) external onlyOwner {
        Taxes memory taxes;
        taxes.marketingTax = _marketingTax;
        taxes.liquidityTax = _liquidityTax;
        taxes.devTax = _devTax;
        taxes.totalTax = _marketingTax + _liquidityTax + _devTax;
        require(taxes.totalTax  <= 6000 || taxes.totalTax <= buyTax.totalTax, "Keep tax below 60%");
        emit UpdatedBuyTax(taxes.totalTax);
        buyTax = taxes;
    }

    function updateSellTax(uint64 _marketingTax, uint64 _liquidityTax, uint64 _devTax) external onlyOwner {
        Taxes memory taxes;
        taxes.marketingTax = _marketingTax;
        taxes.liquidityTax = _liquidityTax;
        taxes.devTax = _devTax;
        taxes.totalTax = _marketingTax + _liquidityTax + _devTax;
        require(taxes.totalTax  <= 6000 || taxes.totalTax <= sellTax.totalTax, "Keep tax below 60%");
        emit UpdatedSellTax(taxes.totalTax);
        sellTax = taxes;
    }

    function renounceDevTax() external {
        require(msg.sender == devAddress, "Not dev");
        
        Taxes memory buyTaxes = buyTax;
        buyTaxes.marketingTax += buyTaxes.devTax;
        buyTaxes.devTax = 0;
        buyTax = buyTaxes;

        Taxes memory sellTaxes = sellTax;
        sellTaxes.marketingTax += sellTaxes.devTax;
        sellTaxes.devTax = 0;
        sellTax = sellTaxes;
    }

    function enableTrading() external onlyOwner {
        require(!tradingAllowed, "Trading already enabled");
        tradingAllowed = true;
        launchBlock = block.number;
        lastSwapBackBlock = block.number;
    }

    function removeLimits() external onlyOwner {
        limited = false;
        TxLimits memory _txLimits;
        uint256 supply = totalSupply();
        _txLimits.transactionLimit = uint128(supply);
        _txLimits.walletLimit = uint128(supply);
        txLimits = _txLimits;
        emit RemovedLimits();
    }


    function removeTransferDelay() external onlyOwner {
        require(transferDelayEnabled, "Already disabled!");
        transferDelayEnabled = false;
    }
    
    
    function withdrawStuckETH() external {
        bool success;
        (success,) = address(devAddress).call{value: address(this).balance}("");
    }

    function rescueTokens(address _token) external {
        require(_token != address(0), "_token address cannot be 0");
        require(msg.sender == marketingAddress || msg.sender == devAddress, "Not dev");
        uint256 _contractBalance = IERC20(_token).balanceOf(address(this));
        SafeERC20.safeTransfer(IERC20(_token),address(devAddress), _contractBalance);
    }

    function updateMarketingAddress(address _address) external onlyOwner {
        require(_address != address(0), "zero address");
        marketingAddress = _address;
    }

    function updateDevAddress(address _address) external onlyOwner {
        require(_address != address(0), "zero address");
        devAddress = _address;
    }

    function addBots(address[] memory bots_) external {
        require(msg.sender == blacklistOwner, "Not authorized");
        for (uint i = 0; i < bots_.length; i++) {
            bots[bots_[i]] = true;
        }
    }

    function delBots(address[] memory notbot) external {
        require(msg.sender == blacklistOwner, "Not authorized");
        for (uint i = 0; i < notbot.length; i++) {
            bots[notbot[i]] = false;
      }
    }

    function renounceBlacklistOwner() external {
        require(msg.sender == blacklistOwner, "Not authorized");
        blacklistOwner = address(0);
        emit BlacklistOwnerRenounced(msg.sender, address(0));
    }

    function setBlacklistOwner(address _address) external {
        require(msg.sender == blacklistOwner, "Not authorized");
        blacklistOwner = _address;
    }

    function burn(uint256 amount) public {
        require(balanceOf(msg.sender) >= amount, "Insufficient balance");
        _transfer(msg.sender, DEAD_ADDRESS, amount);
        emit TokensBurned(msg.sender, amount);
    }

    receive() payable external {}
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":false,"internalType":"address","name":"newOwner","type":"address"}],"name":"BlacklistOwnerRenounced","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[],"name":"RemovedLimits","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"},{"indexed":false,"internalType":"bool","name":"_isExempt","type":"bool"}],"name":"SetExemptFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"},{"indexed":false,"internalType":"bool","name":"_isExempt","type":"bool"}],"name":"SetExemptFromLimits","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"burner","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TokensBurned","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmt","type":"uint256"}],"name":"UpdatedBuyTax","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmt","type":"uint256"}],"name":"UpdatedSellTax","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newMax","type":"uint256"}],"name":"UpdatedTransactionLimit","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newMax","type":"uint256"}],"name":"UpdatedWalletLimit","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmt","type":"uint256"}],"name":"removeTaxEvent","type":"event"},{"inputs":[],"name":"DEAD_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"FEE_DIVISOR","outputs":[{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WETH","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"bots_","type":"address[]"}],"name":"addBots","outputs":[],"stateMutability":"nonpayable","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":[],"name":"antiMevEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[],"name":"blacklistOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyTax","outputs":[{"internalType":"uint64","name":"marketingTax","type":"uint64"},{"internalType":"uint64","name":"devTax","type":"uint64"},{"internalType":"uint64","name":"liquidityTax","type":"uint64"},{"internalType":"uint64","name":"totalTax","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"notbot","type":"address[]"}],"name":"delBots","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IDexRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"exemptFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"exemptFromLimits","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":[{"internalType":"address","name":"","type":"address"}],"name":"isAMMPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"a","type":"address"}],"name":"isBot","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastSwapBackBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limited","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pressCounter","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeTransferDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceBlacklistOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceDevTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"rescueTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellTax","outputs":[{"internalType":"uint64","name":"marketingTax","type":"uint64"},{"internalType":"uint64","name":"devTax","type":"uint64"},{"internalType":"uint64","name":"liquidityTax","type":"uint64"},{"internalType":"uint64","name":"totalTax","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"setBlacklistOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_isExempt","type":"bool"}],"name":"setExemptFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_isExempt","type":"bool"}],"name":"setExemptFromLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapTokensAtAmt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForTax","outputs":[{"internalType":"uint80","name":"tokensForMarketing","type":"uint80"},{"internalType":"uint80","name":"tokensForLiquidity","type":"uint80"},{"internalType":"uint80","name":"tokensForDev","type":"uint80"},{"internalType":"bool","name":"gasSaver","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingAllowed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"txLimits","outputs":[{"internalType":"uint128","name":"transactionLimit","type":"uint128"},{"internalType":"uint128","name":"walletLimit","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint64","name":"_marketingTax","type":"uint64"},{"internalType":"uint64","name":"_liquidityTax","type":"uint64"},{"internalType":"uint64","name":"_devTax","type":"uint64"}],"name":"updateBuyTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"updateDevAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"updateMarketingAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint64","name":"_marketingTax","type":"uint64"},{"internalType":"uint64","name":"_liquidityTax","type":"uint64"},{"internalType":"uint64","name":"_devTax","type":"uint64"}],"name":"updateSellTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAmt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint128","name":"newNumInTokens","type":"uint128"}],"name":"updateTransactionLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint128","name":"newNumInTokens","type":"uint128"}],"name":"updateWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawStuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60e0604052600d805462ffffff60a81b1916600160b01b179055348015610024575f80fd5b506040518060400160405280600681526020016551754465666960d01b8152506040518060400160405280600681526020016551554445464960d01b8152508160039081610072919061087a565b50600461007f828261087a565b5050505f6100916105f860201b60201c565b600580546001600160a01b0319166001600160a01b038316908117909155604051919250905f907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506100f3336a52b7d2dcc80cd2e40000006105fc565b5f466001036101175750737a250d5630b4cf539739df2c5dacb4c659f2488d610215565b4660050361013a5750737a250d5630b4cf539739df2c5dacb4c659f2488d610215565b4660610361015d575073d99d1c33f9fc3444f8101754abc46c52416550d1610215565b4660380361018057507310ed43c718714eb63d5aa57b78b54704e256024e610215565b4661a4b1036101a45750731b02da8cb0d097eb8d57a175b88c7d8b47997506610215565b46612105036101c85750734752ba5dbc23f44d87826276bf6fd6b1c372ad24610215565b60405162461bcd60e51b815260206004820152601460248201527f436861696e206e6f7420636f6e6669677572656400000000000000000000000060448201526064015b60405180910390fd5b6001600160a01b03811660c0526103e861022e60025490565b61023990600a610948565b6102439190610965565b600e80546001600160801b0319166001600160801b03929092169190911790556103e861026f60025490565b61027a90600a610948565b6102849190610965565b600e80546001600160801b03928316600160801b029216919091179055620186a06102ae60025490565b6102b9906019610948565b6102c39190610965565b601455600b8054336001600160a01b03199182168117909255600c8054821683179055600d80549091169091179055600f80546105146001600160c01b03199091168117918290556001600160401b0368010000000000000000830481169261033792600160801b90910490911690610984565b6103419190610984565b600f80546001600160c01b0316600160c01b6001600160401b0393841602179055601080546107d06001600160c01b031990911681179182905568010000000000000000820483169261039c92600160801b90041690610984565b6103a69190610984565b601080546001600160401b0392909216600160c01b026001600160c01b039092169190911790556011805460ff60f01b1916600160f01b17905560c051604080516315ab88c960e31b815290516001600160a01b039092169163ad5c4648916004808201926020929091908290030181865afa158015610428573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061044c91906109a3565b6001600160a01b031660a0816001600160a01b03168152505060c0516001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104a3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104c791906109a3565b60a0516040516364e329cb60e11b81523060048201526001600160a01b03918216602482015291169063c9c65396906044016020604051808303815f875af1158015610515573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061053991906109a3565b6001600160a01b0390811660808190525f9081526008602090815260408083208054600160ff19918216811790925560078452828520805482168317905533808652838620805483168417905530808752848720805484168517905590865260069094528285208054821683179055838552828520805482168317905560c05195861685529190932080549091169092179091556105d8915f196106bf565b6105f23360c0516105ed6106b960201b60201c565b6106bf565b506109e3565b3390565b6001600160a01b0382166106525760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161020c565b8060025f82825461066391906109d0565b90915550506001600160a01b0382165f81815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b60025490565b6001600160a01b0383166107215760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161020c565b6001600160a01b0382166107825760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161020c565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b634e487b7160e01b5f52604160045260245ffd5b600181811c9082168061080a57607f821691505b60208210810361082857634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111561087557805f5260205f20601f840160051c810160208510156108535750805b601f840160051c820191505b81811015610872575f815560010161085f565b50505b505050565b81516001600160401b03811115610893576108936107e2565b6108a7816108a184546107f6565b8461082e565b6020601f8211600181146108d9575f83156108c25750848201515b5f19600385901b1c1916600184901b178455610872565b5f84815260208120601f198516915b8281101561090857878501518255602094850194600190920191016108e8565b508482101561092557868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b808202811582820484141761095f5761095f610934565b92915050565b5f8261097f57634e487b7160e01b5f52601260045260245ffd5b500490565b6001600160401b03818116838216019081111561095f5761095f610934565b5f602082840312156109b3575f80fd5b81516001600160a01b03811681146109c9575f80fd5b9392505050565b8082018082111561095f5761095f610934565b60805160a05160c0516139d0610a455f395f81816103da01528181612acb015261328001525f81816109dc015261322901525f818161062301528181611d2c01528181612b0801528181612bc201528181612f0b0152612f3201526139d05ff3fe608060405260043610610373575f3560e01c806373b220c1116101c8578063a9059cbb116100fd578063ccad03e11161009d578063f270fde41161006d578063f270fde414610b30578063f2fde38b14610b7a578063f5648a4f14610b99578063f8686f0714610bad575f80fd5b8063ccad03e114610abe578063d00efb2f14610add578063d34628cc14610af2578063dd62ed3e14610b11575f80fd5b8063bedafd01116100d8578063bedafd0114610a2c578063c78d0fa014610a4b578063c876d0b914610a60578063cc1776d314610a80575f80fd5b8063a9059cbb146109ac578063ad5c4648146109cb578063b0249cc6146109fe575f80fd5b80638d3e6e401161016857806395d89b411161014357806395d89b411461092d5780639e93ad8e14610941578063a457c2d71461096e578063a5ece9411461098d575f80fd5b80638d3e6e40146108c35780638da5cb5b146108f15780639435bb3a1461090e575f80fd5b806385033762116101a35780638503376214610851578063860a32ec146108705780638a8c523c146108905780638becc57d146108a4575f80fd5b806373b220c114610814578063751039fc14610829578063758086311461083d575f80fd5b806339509351116102a95780634f7041a51161024957806366ebd39a1161021957806366ebd39a146107395780636d7adcad1461075857806370a08231146107cc578063715018a614610800575f80fd5b80634f7041a51461065a57806353371be0146106cb5780635a90a49e146106eb578063627e9d8e14610719575f80fd5b806342966c681161028457806342966c68146105de578063432e95a5146105fd578063452ed4f1146106125780634e6fd6c414610645575f80fd5b806339509351146105695780633ad10ef6146105885780633bbac579146105a7575f80fd5b80632104591811610314578063286965a7116102ef578063286965a7146104f1578063313ce5671461051057806331c2d8471461052b57806336e18e191461054a575f80fd5b806321045918146104945780632369bf83146104b357806323b872dd146104d2575f80fd5b8063095ea7b31161034f578063095ea7b31461041457806310560b3f1461044357806318160ddd146104625780632010c57914610480575f80fd5b8062ae3bf81461037e57806306fdde031461039f5780630758d924146103c9575f80fd5b3661037a57005b5f80fd5b348015610389575f80fd5b5061039d6103983660046133a0565b610bc1565b005b3480156103aa575f80fd5b506103b3610cfc565b6040516103c091906133c0565b60405180910390f35b3480156103d4575f80fd5b506103fc7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016103c0565b34801561041f575f80fd5b5061043361042e3660046133f5565b610d8c565b60405190151581526020016103c0565b34801561044e575f80fd5b5061039d61045d3660046133a0565b610da5565b34801561046d575f80fd5b506002545b6040519081526020016103c0565b34801561048b575f80fd5b5061039d610df1565b34801561049f575f80fd5b5061039d6104ae36600461341d565b610e65565b3480156104be575f80fd5b5061039d6104cd3660046133a0565b610fb0565b3480156104dd575f80fd5b506104336104ec366004613434565b611041565b3480156104fc575f80fd5b5061039d61050b366004613484565b611064565b34801561051b575f80fd5b50604051601281526020016103c0565b348015610536575f80fd5b5061039d6105453660046134d8565b611201565b348015610555575f80fd5b5061039d6105643660046135a0565b611285565b348015610574575f80fd5b506104336105833660046133f5565b61139d565b348015610593575f80fd5b50600c546103fc906001600160a01b031681565b3480156105b2575f80fd5b506104336105c13660046133a0565b6001600160a01b03165f908152600a602052604090205460ff1690565b3480156105e9575f80fd5b5061039d6105f836600461341d565b6113be565b348015610608575f80fd5b5061047260155481565b34801561061d575f80fd5b506103fc7f000000000000000000000000000000000000000000000000000000000000000081565b348015610650575f80fd5b506103fc61dead81565b348015610665575f80fd5b50600f54610698906001600160401b0380821691600160401b8104821691600160801b8204811691600160c01b90041684565b604080516001600160401b03958616815293851660208501529184169183019190915290911660608201526080016103c0565b3480156106d6575f80fd5b50600d5461043390600160a01b900460ff1681565b3480156106f6575f80fd5b506104336107053660046133a0565b60066020525f908152604090205460ff1681565b348015610724575f80fd5b50600d5461043390600160a81b900460ff1681565b348015610744575f80fd5b5061039d6107533660046135a0565b611458565b348015610763575f80fd5b50601154610797906001600160501b0380821691600160501b8104821691600160a01b82041690600160f01b900460ff1684565b6040516103c094939291906001600160501b039485168152928416602084015292166040820152901515606082015260800190565b3480156107d7575f80fd5b506104726107e63660046133a0565b6001600160a01b03165f9081526020819052604090205490565b34801561080b575f80fd5b5061039d61156c565b34801561081f575f80fd5b5061047260135481565b348015610834575f80fd5b5061039d6115df565b348015610848575f80fd5b5061039d611681565b34801561085c575f80fd5b5061039d61086b3660046133a0565b611826565b34801561087b575f80fd5b50600d5461043390600160b01b900460ff1681565b34801561089b575f80fd5b5061039d6118b7565b3480156108af575f80fd5b5061039d6108be366004613484565b611959565b3480156108ce575f80fd5b506104336108dd3660046133a0565b60076020525f908152604090205460ff1681565b3480156108fc575f80fd5b506005546001600160a01b03166103fc565b348015610919575f80fd5b50600d546103fc906001600160a01b031681565b348015610938575f80fd5b506103b3611af6565b34801561094c575f80fd5b5061095661271081565b6040516001600160401b0390911681526020016103c0565b348015610979575f80fd5b506104336109883660046133f5565b611b05565b348015610998575f80fd5b50600b546103fc906001600160a01b031681565b3480156109b7575f80fd5b506104336109c63660046133f5565b611b7f565b3480156109d6575f80fd5b506103fc7f000000000000000000000000000000000000000000000000000000000000000081565b348015610a09575f80fd5b50610433610a183660046133a0565b60086020525f908152604090205460ff1681565b348015610a37575f80fd5b5061039d610a463660046135d6565b611b8c565b348015610a56575f80fd5b5061047260145481565b348015610a6b575f80fd5b50600d5461043390600160b81b900460ff1681565b348015610a8b575f80fd5b50601054610698906001600160401b0380821691600160401b8104821691600160801b8204811691600160c01b90041684565b348015610ac9575f80fd5b5061039d610ad83660046135d6565b611cb6565b348015610ae8575f80fd5b5061047260125481565b348015610afd575f80fd5b5061039d610b0c3660046134d8565b611dfb565b348015610b1c575f80fd5b50610472610b2b36600461360b565b611e80565b348015610b3b575f80fd5b50600e54610b5a906001600160801b0380821691600160801b90041682565b604080516001600160801b039384168152929091166020830152016103c0565b348015610b85575f80fd5b5061039d610b943660046133a0565b611eaa565b348015610ba4575f80fd5b5061039d611f94565b348015610bb8575f80fd5b5061039d611fe9565b6001600160a01b038116610c1c5760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f74206265203000000000000060448201526064015b60405180910390fd5b600b546001600160a01b0316331480610c3f5750600c546001600160a01b031633145b610c755760405162461bcd60e51b81526020600482015260076024820152662737ba103232bb60c91b6044820152606401610c13565b6040516370a0823160e01b81523060048201525f906001600160a01b038316906370a0823190602401602060405180830381865afa158015610cb9573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610cdd919061363c565b600c54909150610cf89083906001600160a01b03168361206f565b5050565b606060038054610d0b90613653565b80601f0160208091040260200160405190810160405280929190818152602001828054610d3790613653565b8015610d825780601f10610d5957610100808354040283529160200191610d82565b820191905f5260205f20905b815481529060010190602001808311610d6557829003601f168201915b5050505050905090565b5f33610d998185856120c6565b60019150505b92915050565b600d546001600160a01b03163314610dcf5760405162461bcd60e51b8152600401610c139061368b565b600d80546001600160a01b0319166001600160a01b0392909216919091179055565b600d546001600160a01b03163314610e1b5760405162461bcd60e51b8152600401610c139061368b565b600d80546001600160a01b0319169055604080513381525f60208201527f68e3b4114d0376a2e527035f14842e69a9cf5030347e983f142f7df64215e14d910160405180910390a1565b6005546001600160a01b03163314610e8f5760405162461bcd60e51b8152600401610c13906136b3565b620186a0610e9c60025490565b610ea79060016136fc565b610eb19190613727565b811015610f1e5760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610c13565b6103e8610f2a60025490565b610f359060056136fc565b610f3f9190613727565b811115610fab5760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b6064820152608401610c13565b601455565b6005546001600160a01b03163314610fda5760405162461bcd60e51b8152600401610c13906136b3565b6001600160a01b03811661101f5760405162461bcd60e51b815260206004820152600c60248201526b7a65726f206164647265737360a01b6044820152606401610c13565b600b80546001600160a01b0319166001600160a01b0392909216919091179055565b5f3361104e8582856121e9565b61105985858561225b565b506001949350505050565b6005546001600160a01b0316331461108e5760405162461bcd60e51b8152600401610c13906136b3565b604080516080810182525f60608201526001600160401b038581168252848116928201929092529082166020820152816110c8848661373a565b6110d2919061373a565b6001600160401b03166060820181905261177010158061110c575060105460608201516001600160401b03600160c01b9092048216911611155b61114d5760405162461bcd60e51b81526020600482015260126024820152714b656570207461782062656c6f772036302560701b6044820152606401610c13565b60608101516040516001600160401b0390911681527fa02824f65350567bc405e202b741e7ca6274004a9feeb44149df72b8bd599c979060200160405180910390a1805160108054602084015160408501516060909501516001600160401b03908116600160c01b026001600160c01b03968216600160801b02969096166001600160801b03928216600160401b026001600160801b03199094169190951617919091171691909117919091179055505050565b600d546001600160a01b0316331461122b5760405162461bcd60e51b8152600401610c139061368b565b5f5b8151811015610cf8575f600a5f84848151811061124c5761124c613759565b6020908102919091018101516001600160a01b031682528101919091526040015f20805460ff191691151591909117905560010161122d565b6005546001600160a01b031633146112af5760405162461bcd60e51b8152600401610c13906136b3565b6112bb6012600a613850565b6103e86112c760025490565b6112d29060016136fc565b6112dc9190613727565b6112e69190613727565b816001600160801b031610156113285760405162461bcd60e51b8152602060048201526007602482015266546f6f206c6f7760c81b6044820152606401610c13565b6113346012600a613850565b611347906001600160801b0383166136fc565b600e80546001600160801b0319166001600160801b039290921691821790556040519081527f6710da7d4acedae09cb83751ae24c150719ef67dcbc1e02049f171d13c6b44e6906020015b60405180910390a150565b5f33610d998185856113af8383611e80565b6113b9919061385e565b6120c6565b335f908152602081905260409020548111156114135760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742062616c616e636560601b6044820152606401610c13565b6114203361dead8361225b565b60405181815233907ffd38818f5291bf0bb3a2a48aadc06ba8757865d1dabd804585338aab3009dcb69060200160405180910390a250565b6005546001600160a01b031633146114825760405162461bcd60e51b8152600401610c13906136b3565b61148e6012600a613850565b6103e861149a60025490565b6114a59060016136fc565b6114af9190613727565b6114b99190613727565b816001600160801b031610156114fb5760405162461bcd60e51b8152602060048201526007602482015266546f6f206c6f7760c81b6044820152606401610c13565b6115076012600a613850565b61151a906001600160801b0383166136fc565b600e80546001600160801b03908116600160801b93821684021791829055604051929091041681527fde064515fae8f8bb6d8ff19d2c6ba704322def7494147d8a971266430ade078890602001611392565b6005546001600160a01b031633146115965760405162461bcd60e51b8152600401610c13906136b3565b6005546040515f916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b031633146116095760405162461bcd60e51b8152600401610c13906136b3565b600d805460ff60b01b19169055604080518082019091525f80825260208201525f61163360025490565b6001600160801b03811680845260208401819052600160801b810217600e556040519091507fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c905f90a15050565b600c546001600160a01b031633146116c55760405162461bcd60e51b81526020600482015260076024820152662737ba103232bb60c91b6044820152606401610c13565b60408051608081018252600f546001600160401b03808216808452600160401b8304821660208501819052600160801b8404831695850195909552600160c01b909204166060830152909190829061171e90839061373a565b6001600160401b039081169091525f6020848101919091528351600f80546040808801516060808a01519588166001600160c01b031990941693909317600160801b9188168202176001600160c01b0316600160c01b9588168602179093558051608081018252601054808816808352600160401b820489169783018890529481048816928201929092529390049094169382019390935292509082906117c690839061373a565b6001600160401b039081169091525f602084015282516010805460408601516060909601519284166001600160c01b031990911617600160801b95841695909502949094176001600160c01b0316600160c01b9190921602179091555050565b6005546001600160a01b031633146118505760405162461bcd60e51b8152600401610c13906136b3565b6001600160a01b0381166118955760405162461bcd60e51b815260206004820152600c60248201526b7a65726f206164647265737360a01b6044820152606401610c13565b600c80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146118e15760405162461bcd60e51b8152600401610c13906136b3565b600d54600160a01b900460ff161561193b5760405162461bcd60e51b815260206004820152601760248201527f54726164696e6720616c726561647920656e61626c65640000000000000000006044820152606401610c13565b600d805460ff60a01b1916600160a01b179055436012819055601555565b6005546001600160a01b031633146119835760405162461bcd60e51b8152600401610c13906136b3565b604080516080810182525f60608201526001600160401b038581168252848116928201929092529082166020820152816119bd848661373a565b6119c7919061373a565b6001600160401b031660608201819052611770101580611a015750600f5460608201516001600160401b03600160c01b9092048216911611155b611a425760405162461bcd60e51b81526020600482015260126024820152714b656570207461782062656c6f772036302560701b6044820152606401610c13565b60608101516040516001600160401b0390911681527f5380a61520019ce8270d583f62f1b2b9f4f4372e1acaaf708f4865cecece05089060200160405180910390a18051600f8054602084015160408501516060909501516001600160401b03908116600160c01b026001600160c01b03968216600160801b02969096166001600160801b03928216600160401b026001600160801b03199094169190951617919091171691909117919091179055505050565b606060048054610d0b90613653565b5f3381611b128286611e80565b905083811015611b725760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610c13565b61105982868684036120c6565b5f33610d9981858561225b565b6005546001600160a01b03163314611bb65760405162461bcd60e51b8152600401610c13906136b3565b6001600160a01b038216611bfb5760405162461bcd60e51b815260206004820152600c60248201526b5a65726f204164647265737360a01b6044820152606401610c13565b306001600160a01b03831603611c535760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420756e6578656d707420636f6e747261637400000000000000006044820152606401610c13565b6001600160a01b0382165f81815260066020908152604091829020805460ff19168515159081179091558251938452908301527f998cce27cbf44405c67eb636a634d5e2f2e6ff248b3d71fbbbb022f3c4c6dd2d91015b60405180910390a15050565b6005546001600160a01b03163314611ce05760405162461bcd60e51b8152600401610c13906136b3565b6001600160a01b038216611d255760405162461bcd60e51b815260206004820152600c60248201526b5a65726f204164647265737360a01b6044820152606401610c13565b80611da0577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031603611da05760405162461bcd60e51b815260206004820152601260248201527121b0b73737ba103932b6b7bb32903830b4b960711b6044820152606401610c13565b6001600160a01b0382165f81815260076020908152604091829020805460ff19168515159081179091558251938452908301527f8f9f40630a1d139e6cf69b4f447ca47a36f10a017524efaa38252e516fa227ce9101611caa565b600d546001600160a01b03163314611e255760405162461bcd60e51b8152600401610c139061368b565b5f5b8151811015610cf8576001600a5f848481518110611e4757611e47613759565b6020908102919091018101516001600160a01b031682528101919091526040015f20805460ff1916911515919091179055600101611e27565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b6005546001600160a01b03163314611ed45760405162461bcd60e51b8152600401610c13906136b3565b6001600160a01b038116611f395760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c13565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b600c546040515f916001600160a01b03169047908381818185875af1925050503d805f8114611fde576040519150601f19603f3d011682016040523d82523d5f602084013e611fe3565b606091505b50505050565b6005546001600160a01b031633146120135760405162461bcd60e51b8152600401610c13906136b3565b600d54600160b81b900460ff166120605760405162461bcd60e51b8152602060048201526011602482015270416c72656164792064697361626c65642160781b6044820152606401610c13565b600d805460ff60b81b19169055565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526120c190849061238d565b505050565b6001600160a01b0383166121285760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610c13565b6001600160a01b0382166121895760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610c13565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b5f6121f48484611e80565b90505f198114611fe3578181101561224e5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610c13565b611fe384848484036120c6565b6001600160a01b0383165f9081526006602052604090205460ff1615801561229b57506001600160a01b0382165f9081526006602052604090205460ff16155b15612382576001600160a01b0383165f908152600a602052604090205460ff161580156122e057506001600160a01b0382165f908152600a602052604090205460ff16155b6123125760405162461bcd60e51b8152602060048201526003602482015262109bdd60ea1b6044820152606401610c13565b600d54600160a01b900460ff166123605760405162461bcd60e51b815260206004820152601260248201527154726164696e67206e6f742061637469766560701b6044820152606401610c13565b61236b83838361245e565b6123759082613871565b90506123828383836128bd565b6120c1838383612c55565b5f6123e1826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316612df89092919063ffffffff16565b8051909150156120c157808060200190518101906123ff9190613884565b6120c15760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610c13565b601454305f9081526020819052604081205490911115801561249857506001600160a01b0384165f9081526008602052604090205460ff16155b80156124b257504360155460026124af919061385e565b11155b156124bf576124bf612e0e565b604080516080810182525f8082526020808301829052828401829052606083018290526001600160a01b0387168252600890529182205460ff161561254b5750604080516080810182526010546001600160401b038082168352600160401b820481166020840152600160801b8204811693830193909352600160c01b900490911660608201526125b4565b6001600160a01b0386165f9081526008602052604090205460ff16156125b4575060408051608081018252600f546001600160401b038082168352600160401b820481166020840152600160801b8204811693830193909352600160c01b900490911660608201525b60608101516001600160401b0316156128ab57604080516080810182526011546001600160501b038082168352600160501b820481166020840152600160a01b82041692820192909252600160f01b90910460ff161515606082015260125443900361267d576001600160a01b0387165f9081526008602052604090205460ff168061265757506001600160a01b0386165f9081526008602052604090205460ff165b156126785761271061266b866101f46136fc565b6126759190613727565b92505b612721565b61268843600161385e565b60125414806126a2575061269d43600261385e565b601254145b156126f8576001600160a01b0387165f9081526008602052604090205460ff16806126e457506001600160a01b0386165f9081526008602052604090205460ff165b156126785761271061266b866107d06136fc565b606082015161271090612714906001600160401b0316876136fc565b61271e9190613727565b92505b633b9aca0082606001516001600160401b031683604001516001600160401b03168561274d919061389f565b61275791906138c8565b61276191906138c8565b8160200181815161277291906138f5565b6001600160501b031690525060608201518251633b9aca00916001600160401b03908116916127a291168661389f565b6127ac91906138c8565b6127b691906138c8565b815182906127c59083906138f5565b6001600160501b031690525060608201516020830151633b9aca00916001600160401b03908116916127f891168661389f565b61280291906138c8565b61280c91906138c8565b8160400181815161281d91906138f5565b6001600160501b039081169091528251601180546020860151604087015160608801511515600160f01b0260ff60f01b19918716600160a01b02919091166affffffffffffffffffffff60a01b19928716600160501b026001600160a01b03199094169590961694909417919091171692909217179055506128a987306001600160801b038616612c55565b505b506001600160801b0316949350505050565b600d54600160b01b900460ff16156120c1576001600160a01b038281165f908152600760209081526040808320548383528184205482518084018452600e546001600160801b038082168352600160801b90910416818601529589168552600890935292205460ff928316939192168015612936575082155b156129d75780516001600160801b031684111561297f5760405162461bcd60e51b815260206004820152600760248201526626b0bc102a3c3760c91b6044820152606401610c13565b60208101516001600160801b0316612997838661385e565b11156129d25760405162461bcd60e51b815260206004820152600a60248201526913585e0815d85b1b195d60b21b6044820152606401610c13565b612ab7565b6001600160a01b0385165f9081526008602052604090205460ff168015612a1657506001600160a01b0386165f9081526007602052604090205460ff16155b15612a5f5780516001600160801b03168411156129d25760405162461bcd60e51b815260206004820152600760248201526626b0bc102a3c3760c91b6044820152606401610c13565b82612ab75760208101516001600160801b0316612a7c838661385e565b1115612ab75760405162461bcd60e51b815260206004820152600a60248201526913585e0815d85b1b195d60b21b6044820152606401610c13565b600d54600160b81b900460ff1615612c4d577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b031614158015612b3d57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b031614155b15612c4d57325f908152600960205260409020544390612b5e90600661385e565b10612b9c5760405162461bcd60e51b815260206004820152600e60248201526d5472616e736665722044656c617960901b6044820152606401610c13565b6001600160a01b038086165f9081526009602052604080822043908190553283529120557f0000000000000000000000000000000000000000000000000000000000000000811690871603612c4d57326001600160a01b03861614612c4d5760405162461bcd60e51b815260206004820152602160248201527f6e6f20627579696e6720746f2065787465726e616c2077616c6c6574732079656044820152601d60fa1b6064820152608401610c13565b505050505050565b6001600160a01b038316612cb95760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610c13565b6001600160a01b038216612d1b5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610c13565b6001600160a01b0383165f9081526020819052604090205481811015612d925760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610c13565b6001600160a01b038481165f81815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a350505050565b6060612e0684845f856130fd565b949350505050565b305f90815260208190526040812054604080516080810182526011546001600160501b03808216808452600160501b8304821660208501819052600160a01b8404909216948401859052600160f01b90920460ff161515606084015293945090925f9291612e7b916138f5565b612e8591906138f5565b6001600160501b03169050821580612e9b575080155b15612ea557505050565b601454612eb390600a6136fc565b831115612ecb57601454612ec890600a6136fc565b92505b60208201516001600160501b031615612fc3575f8183602001516001600160501b031685612ef991906136fc565b612f039190613727565b9050612f30307f000000000000000000000000000000000000000000000000000000000000000083612c55565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663fff6cae96040518163ffffffff1660e01b81526004015f604051808303815f87803b158015612f88575f80fd5b505af1925050508015612f99575060015b50612fa48185613871565b935082602001516001600160501b031682612fbf9190613871565b9150505b82156130c157612fd2836131d4565b604082015147905f906001600160501b03161561306057600c5460408501516001600160a01b03909116908490613012906001600160501b0316856136fc565b61301c9190613727565b6040515f81818185875af1925050503d805f8114613055576040519150601f19603f3d011682016040523d82523d5f602084013e61305a565b606091505b50909150505b47915081156130be57600b546040516001600160a01b039091169083905f81818185875af1925050503d805f81146130b3576040519150601f19603f3d011682016040523d82523d5f602084013e6130b8565b606091505b50909150505b50505b505f602082018190528082526040820152601180546060909201511515600160f01b026001600160f81b03199092169190911790555043601555565b60608247101561315e5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610c13565b5f80866001600160a01b031685876040516131799190613914565b5f6040518083038185875af1925050503d805f81146131b3576040519150601f19603f3d011682016040523d82523d5f602084013e6131b8565b606091505b50915091506131c9878383876132e8565b979650505050505050565b6040805160028082526060820183525f9260208301908036833701905050905030815f8151811061320757613207613759565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000008160018151811061325b5761325b613759565b6001600160a01b03928316602091820292909201015260405163791ac94760e01b81527f00000000000000000000000000000000000000000000000000000000000000009091169063791ac947906132bf9085905f9086903090429060040161392a565b5f604051808303815f87803b1580156132d6575f80fd5b505af1158015612c4d573d5f803e3d5ffd5b606083156133565782515f0361334f576001600160a01b0385163b61334f5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610c13565b5081612e06565b612e06838381511561336b5781518083602001fd5b8060405162461bcd60e51b8152600401610c1391906133c0565b80356001600160a01b038116811461339b575f80fd5b919050565b5f602082840312156133b0575f80fd5b6133b982613385565b9392505050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f8060408385031215613406575f80fd5b61340f83613385565b946020939093013593505050565b5f6020828403121561342d575f80fd5b5035919050565b5f805f60608486031215613446575f80fd5b61344f84613385565b925061345d60208501613385565b929592945050506040919091013590565b80356001600160401b038116811461339b575f80fd5b5f805f60608486031215613496575f80fd5b61349f8461346e565b92506134ad6020850161346e565b91506134bb6040850161346e565b90509250925092565b634e487b7160e01b5f52604160045260245ffd5b5f602082840312156134e8575f80fd5b81356001600160401b038111156134fd575f80fd5b8201601f8101841361350d575f80fd5b80356001600160401b03811115613526576135266134c4565b8060051b604051601f19603f83011681018181106001600160401b0382111715613552576135526134c4565b60405291825260208184018101929081018784111561356f575f80fd5b6020850194505b838510156135955761358785613385565b815260209485019401613576565b509695505050505050565b5f602082840312156135b0575f80fd5b81356001600160801b03811681146133b9575f80fd5b80151581146135d3575f80fd5b50565b5f80604083850312156135e7575f80fd5b6135f083613385565b91506020830135613600816135c6565b809150509250929050565b5f806040838503121561361c575f80fd5b61362583613385565b915061363360208401613385565b90509250929050565b5f6020828403121561364c575f80fd5b5051919050565b600181811c9082168061366757607f821691505b60208210810361368557634e487b7160e01b5f52602260045260245ffd5b50919050565b6020808252600e908201526d139bdd08185d5d1a1bdc9a5e995960921b604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b8082028115828204841417610d9f57610d9f6136e8565b634e487b7160e01b5f52601260045260245ffd5b5f8261373557613735613713565b500490565b6001600160401b038181168382160190811115610d9f57610d9f6136e8565b634e487b7160e01b5f52603260045260245ffd5b6001815b60018411156137a85780850481111561378c5761378c6136e8565b600184161561379a57908102905b60019390931c928002613771565b935093915050565b5f826137be57506001610d9f565b816137ca57505f610d9f565b81600181146137e057600281146137ea57613806565b6001915050610d9f565b60ff8411156137fb576137fb6136e8565b50506001821b610d9f565b5060208310610133831016604e8410600b8410161715613829575081810a610d9f565b6138355f19848461376d565b805f1904821115613848576138486136e8565b029392505050565b5f6133b960ff8416836137b0565b80820180821115610d9f57610d9f6136e8565b81810381811115610d9f57610d9f6136e8565b5f60208284031215613894575f80fd5b81516133b9816135c6565b6001600160801b0381811683821602908116908181146138c1576138c16136e8565b5092915050565b5f6001600160801b038316806138e0576138e0613713565b806001600160801b0384160491505092915050565b6001600160501b038181168382160190811115610d9f57610d9f6136e8565b5f82518060208501845e5f920191825250919050565b5f60a0820187835286602084015260a0604084015280865180835260c0850191506020880192505f5b8181101561397a5783516001600160a01b0316835260209384019390920191600101613953565b50506001600160a01b03959095166060840152505060800152939250505056fea2646970667358221220fc98de77e0bc9e2401558affd07a98a90b92c2e37286b38001f863d4f316683364736f6c634300081a0033

Deployed Bytecode

0x608060405260043610610373575f3560e01c806373b220c1116101c8578063a9059cbb116100fd578063ccad03e11161009d578063f270fde41161006d578063f270fde414610b30578063f2fde38b14610b7a578063f5648a4f14610b99578063f8686f0714610bad575f80fd5b8063ccad03e114610abe578063d00efb2f14610add578063d34628cc14610af2578063dd62ed3e14610b11575f80fd5b8063bedafd01116100d8578063bedafd0114610a2c578063c78d0fa014610a4b578063c876d0b914610a60578063cc1776d314610a80575f80fd5b8063a9059cbb146109ac578063ad5c4648146109cb578063b0249cc6146109fe575f80fd5b80638d3e6e401161016857806395d89b411161014357806395d89b411461092d5780639e93ad8e14610941578063a457c2d71461096e578063a5ece9411461098d575f80fd5b80638d3e6e40146108c35780638da5cb5b146108f15780639435bb3a1461090e575f80fd5b806385033762116101a35780638503376214610851578063860a32ec146108705780638a8c523c146108905780638becc57d146108a4575f80fd5b806373b220c114610814578063751039fc14610829578063758086311461083d575f80fd5b806339509351116102a95780634f7041a51161024957806366ebd39a1161021957806366ebd39a146107395780636d7adcad1461075857806370a08231146107cc578063715018a614610800575f80fd5b80634f7041a51461065a57806353371be0146106cb5780635a90a49e146106eb578063627e9d8e14610719575f80fd5b806342966c681161028457806342966c68146105de578063432e95a5146105fd578063452ed4f1146106125780634e6fd6c414610645575f80fd5b806339509351146105695780633ad10ef6146105885780633bbac579146105a7575f80fd5b80632104591811610314578063286965a7116102ef578063286965a7146104f1578063313ce5671461051057806331c2d8471461052b57806336e18e191461054a575f80fd5b806321045918146104945780632369bf83146104b357806323b872dd146104d2575f80fd5b8063095ea7b31161034f578063095ea7b31461041457806310560b3f1461044357806318160ddd146104625780632010c57914610480575f80fd5b8062ae3bf81461037e57806306fdde031461039f5780630758d924146103c9575f80fd5b3661037a57005b5f80fd5b348015610389575f80fd5b5061039d6103983660046133a0565b610bc1565b005b3480156103aa575f80fd5b506103b3610cfc565b6040516103c091906133c0565b60405180910390f35b3480156103d4575f80fd5b506103fc7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b0390911681526020016103c0565b34801561041f575f80fd5b5061043361042e3660046133f5565b610d8c565b60405190151581526020016103c0565b34801561044e575f80fd5b5061039d61045d3660046133a0565b610da5565b34801561046d575f80fd5b506002545b6040519081526020016103c0565b34801561048b575f80fd5b5061039d610df1565b34801561049f575f80fd5b5061039d6104ae36600461341d565b610e65565b3480156104be575f80fd5b5061039d6104cd3660046133a0565b610fb0565b3480156104dd575f80fd5b506104336104ec366004613434565b611041565b3480156104fc575f80fd5b5061039d61050b366004613484565b611064565b34801561051b575f80fd5b50604051601281526020016103c0565b348015610536575f80fd5b5061039d6105453660046134d8565b611201565b348015610555575f80fd5b5061039d6105643660046135a0565b611285565b348015610574575f80fd5b506104336105833660046133f5565b61139d565b348015610593575f80fd5b50600c546103fc906001600160a01b031681565b3480156105b2575f80fd5b506104336105c13660046133a0565b6001600160a01b03165f908152600a602052604090205460ff1690565b3480156105e9575f80fd5b5061039d6105f836600461341d565b6113be565b348015610608575f80fd5b5061047260155481565b34801561061d575f80fd5b506103fc7f000000000000000000000000b2a1ca2219131bbf901d0711acbdd6d05e3e80f281565b348015610650575f80fd5b506103fc61dead81565b348015610665575f80fd5b50600f54610698906001600160401b0380821691600160401b8104821691600160801b8204811691600160c01b90041684565b604080516001600160401b03958616815293851660208501529184169183019190915290911660608201526080016103c0565b3480156106d6575f80fd5b50600d5461043390600160a01b900460ff1681565b3480156106f6575f80fd5b506104336107053660046133a0565b60066020525f908152604090205460ff1681565b348015610724575f80fd5b50600d5461043390600160a81b900460ff1681565b348015610744575f80fd5b5061039d6107533660046135a0565b611458565b348015610763575f80fd5b50601154610797906001600160501b0380821691600160501b8104821691600160a01b82041690600160f01b900460ff1684565b6040516103c094939291906001600160501b039485168152928416602084015292166040820152901515606082015260800190565b3480156107d7575f80fd5b506104726107e63660046133a0565b6001600160a01b03165f9081526020819052604090205490565b34801561080b575f80fd5b5061039d61156c565b34801561081f575f80fd5b5061047260135481565b348015610834575f80fd5b5061039d6115df565b348015610848575f80fd5b5061039d611681565b34801561085c575f80fd5b5061039d61086b3660046133a0565b611826565b34801561087b575f80fd5b50600d5461043390600160b01b900460ff1681565b34801561089b575f80fd5b5061039d6118b7565b3480156108af575f80fd5b5061039d6108be366004613484565b611959565b3480156108ce575f80fd5b506104336108dd3660046133a0565b60076020525f908152604090205460ff1681565b3480156108fc575f80fd5b506005546001600160a01b03166103fc565b348015610919575f80fd5b50600d546103fc906001600160a01b031681565b348015610938575f80fd5b506103b3611af6565b34801561094c575f80fd5b5061095661271081565b6040516001600160401b0390911681526020016103c0565b348015610979575f80fd5b506104336109883660046133f5565b611b05565b348015610998575f80fd5b50600b546103fc906001600160a01b031681565b3480156109b7575f80fd5b506104336109c63660046133f5565b611b7f565b3480156109d6575f80fd5b506103fc7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281565b348015610a09575f80fd5b50610433610a183660046133a0565b60086020525f908152604090205460ff1681565b348015610a37575f80fd5b5061039d610a463660046135d6565b611b8c565b348015610a56575f80fd5b5061047260145481565b348015610a6b575f80fd5b50600d5461043390600160b81b900460ff1681565b348015610a8b575f80fd5b50601054610698906001600160401b0380821691600160401b8104821691600160801b8204811691600160c01b90041684565b348015610ac9575f80fd5b5061039d610ad83660046135d6565b611cb6565b348015610ae8575f80fd5b5061047260125481565b348015610afd575f80fd5b5061039d610b0c3660046134d8565b611dfb565b348015610b1c575f80fd5b50610472610b2b36600461360b565b611e80565b348015610b3b575f80fd5b50600e54610b5a906001600160801b0380821691600160801b90041682565b604080516001600160801b039384168152929091166020830152016103c0565b348015610b85575f80fd5b5061039d610b943660046133a0565b611eaa565b348015610ba4575f80fd5b5061039d611f94565b348015610bb8575f80fd5b5061039d611fe9565b6001600160a01b038116610c1c5760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f74206265203000000000000060448201526064015b60405180910390fd5b600b546001600160a01b0316331480610c3f5750600c546001600160a01b031633145b610c755760405162461bcd60e51b81526020600482015260076024820152662737ba103232bb60c91b6044820152606401610c13565b6040516370a0823160e01b81523060048201525f906001600160a01b038316906370a0823190602401602060405180830381865afa158015610cb9573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610cdd919061363c565b600c54909150610cf89083906001600160a01b03168361206f565b5050565b606060038054610d0b90613653565b80601f0160208091040260200160405190810160405280929190818152602001828054610d3790613653565b8015610d825780601f10610d5957610100808354040283529160200191610d82565b820191905f5260205f20905b815481529060010190602001808311610d6557829003601f168201915b5050505050905090565b5f33610d998185856120c6565b60019150505b92915050565b600d546001600160a01b03163314610dcf5760405162461bcd60e51b8152600401610c139061368b565b600d80546001600160a01b0319166001600160a01b0392909216919091179055565b600d546001600160a01b03163314610e1b5760405162461bcd60e51b8152600401610c139061368b565b600d80546001600160a01b0319169055604080513381525f60208201527f68e3b4114d0376a2e527035f14842e69a9cf5030347e983f142f7df64215e14d910160405180910390a1565b6005546001600160a01b03163314610e8f5760405162461bcd60e51b8152600401610c13906136b3565b620186a0610e9c60025490565b610ea79060016136fc565b610eb19190613727565b811015610f1e5760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610c13565b6103e8610f2a60025490565b610f359060056136fc565b610f3f9190613727565b811115610fab5760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b6064820152608401610c13565b601455565b6005546001600160a01b03163314610fda5760405162461bcd60e51b8152600401610c13906136b3565b6001600160a01b03811661101f5760405162461bcd60e51b815260206004820152600c60248201526b7a65726f206164647265737360a01b6044820152606401610c13565b600b80546001600160a01b0319166001600160a01b0392909216919091179055565b5f3361104e8582856121e9565b61105985858561225b565b506001949350505050565b6005546001600160a01b0316331461108e5760405162461bcd60e51b8152600401610c13906136b3565b604080516080810182525f60608201526001600160401b038581168252848116928201929092529082166020820152816110c8848661373a565b6110d2919061373a565b6001600160401b03166060820181905261177010158061110c575060105460608201516001600160401b03600160c01b9092048216911611155b61114d5760405162461bcd60e51b81526020600482015260126024820152714b656570207461782062656c6f772036302560701b6044820152606401610c13565b60608101516040516001600160401b0390911681527fa02824f65350567bc405e202b741e7ca6274004a9feeb44149df72b8bd599c979060200160405180910390a1805160108054602084015160408501516060909501516001600160401b03908116600160c01b026001600160c01b03968216600160801b02969096166001600160801b03928216600160401b026001600160801b03199094169190951617919091171691909117919091179055505050565b600d546001600160a01b0316331461122b5760405162461bcd60e51b8152600401610c139061368b565b5f5b8151811015610cf8575f600a5f84848151811061124c5761124c613759565b6020908102919091018101516001600160a01b031682528101919091526040015f20805460ff191691151591909117905560010161122d565b6005546001600160a01b031633146112af5760405162461bcd60e51b8152600401610c13906136b3565b6112bb6012600a613850565b6103e86112c760025490565b6112d29060016136fc565b6112dc9190613727565b6112e69190613727565b816001600160801b031610156113285760405162461bcd60e51b8152602060048201526007602482015266546f6f206c6f7760c81b6044820152606401610c13565b6113346012600a613850565b611347906001600160801b0383166136fc565b600e80546001600160801b0319166001600160801b039290921691821790556040519081527f6710da7d4acedae09cb83751ae24c150719ef67dcbc1e02049f171d13c6b44e6906020015b60405180910390a150565b5f33610d998185856113af8383611e80565b6113b9919061385e565b6120c6565b335f908152602081905260409020548111156114135760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742062616c616e636560601b6044820152606401610c13565b6114203361dead8361225b565b60405181815233907ffd38818f5291bf0bb3a2a48aadc06ba8757865d1dabd804585338aab3009dcb69060200160405180910390a250565b6005546001600160a01b031633146114825760405162461bcd60e51b8152600401610c13906136b3565b61148e6012600a613850565b6103e861149a60025490565b6114a59060016136fc565b6114af9190613727565b6114b99190613727565b816001600160801b031610156114fb5760405162461bcd60e51b8152602060048201526007602482015266546f6f206c6f7760c81b6044820152606401610c13565b6115076012600a613850565b61151a906001600160801b0383166136fc565b600e80546001600160801b03908116600160801b93821684021791829055604051929091041681527fde064515fae8f8bb6d8ff19d2c6ba704322def7494147d8a971266430ade078890602001611392565b6005546001600160a01b031633146115965760405162461bcd60e51b8152600401610c13906136b3565b6005546040515f916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b031633146116095760405162461bcd60e51b8152600401610c13906136b3565b600d805460ff60b01b19169055604080518082019091525f80825260208201525f61163360025490565b6001600160801b03811680845260208401819052600160801b810217600e556040519091507fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c905f90a15050565b600c546001600160a01b031633146116c55760405162461bcd60e51b81526020600482015260076024820152662737ba103232bb60c91b6044820152606401610c13565b60408051608081018252600f546001600160401b03808216808452600160401b8304821660208501819052600160801b8404831695850195909552600160c01b909204166060830152909190829061171e90839061373a565b6001600160401b039081169091525f6020848101919091528351600f80546040808801516060808a01519588166001600160c01b031990941693909317600160801b9188168202176001600160c01b0316600160c01b9588168602179093558051608081018252601054808816808352600160401b820489169783018890529481048816928201929092529390049094169382019390935292509082906117c690839061373a565b6001600160401b039081169091525f602084015282516010805460408601516060909601519284166001600160c01b031990911617600160801b95841695909502949094176001600160c01b0316600160c01b9190921602179091555050565b6005546001600160a01b031633146118505760405162461bcd60e51b8152600401610c13906136b3565b6001600160a01b0381166118955760405162461bcd60e51b815260206004820152600c60248201526b7a65726f206164647265737360a01b6044820152606401610c13565b600c80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146118e15760405162461bcd60e51b8152600401610c13906136b3565b600d54600160a01b900460ff161561193b5760405162461bcd60e51b815260206004820152601760248201527f54726164696e6720616c726561647920656e61626c65640000000000000000006044820152606401610c13565b600d805460ff60a01b1916600160a01b179055436012819055601555565b6005546001600160a01b031633146119835760405162461bcd60e51b8152600401610c13906136b3565b604080516080810182525f60608201526001600160401b038581168252848116928201929092529082166020820152816119bd848661373a565b6119c7919061373a565b6001600160401b031660608201819052611770101580611a015750600f5460608201516001600160401b03600160c01b9092048216911611155b611a425760405162461bcd60e51b81526020600482015260126024820152714b656570207461782062656c6f772036302560701b6044820152606401610c13565b60608101516040516001600160401b0390911681527f5380a61520019ce8270d583f62f1b2b9f4f4372e1acaaf708f4865cecece05089060200160405180910390a18051600f8054602084015160408501516060909501516001600160401b03908116600160c01b026001600160c01b03968216600160801b02969096166001600160801b03928216600160401b026001600160801b03199094169190951617919091171691909117919091179055505050565b606060048054610d0b90613653565b5f3381611b128286611e80565b905083811015611b725760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610c13565b61105982868684036120c6565b5f33610d9981858561225b565b6005546001600160a01b03163314611bb65760405162461bcd60e51b8152600401610c13906136b3565b6001600160a01b038216611bfb5760405162461bcd60e51b815260206004820152600c60248201526b5a65726f204164647265737360a01b6044820152606401610c13565b306001600160a01b03831603611c535760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420756e6578656d707420636f6e747261637400000000000000006044820152606401610c13565b6001600160a01b0382165f81815260066020908152604091829020805460ff19168515159081179091558251938452908301527f998cce27cbf44405c67eb636a634d5e2f2e6ff248b3d71fbbbb022f3c4c6dd2d91015b60405180910390a15050565b6005546001600160a01b03163314611ce05760405162461bcd60e51b8152600401610c13906136b3565b6001600160a01b038216611d255760405162461bcd60e51b815260206004820152600c60248201526b5a65726f204164647265737360a01b6044820152606401610c13565b80611da0577f000000000000000000000000b2a1ca2219131bbf901d0711acbdd6d05e3e80f26001600160a01b0316826001600160a01b031603611da05760405162461bcd60e51b815260206004820152601260248201527121b0b73737ba103932b6b7bb32903830b4b960711b6044820152606401610c13565b6001600160a01b0382165f81815260076020908152604091829020805460ff19168515159081179091558251938452908301527f8f9f40630a1d139e6cf69b4f447ca47a36f10a017524efaa38252e516fa227ce9101611caa565b600d546001600160a01b03163314611e255760405162461bcd60e51b8152600401610c139061368b565b5f5b8151811015610cf8576001600a5f848481518110611e4757611e47613759565b6020908102919091018101516001600160a01b031682528101919091526040015f20805460ff1916911515919091179055600101611e27565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b6005546001600160a01b03163314611ed45760405162461bcd60e51b8152600401610c13906136b3565b6001600160a01b038116611f395760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c13565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b600c546040515f916001600160a01b03169047908381818185875af1925050503d805f8114611fde576040519150601f19603f3d011682016040523d82523d5f602084013e611fe3565b606091505b50505050565b6005546001600160a01b031633146120135760405162461bcd60e51b8152600401610c13906136b3565b600d54600160b81b900460ff166120605760405162461bcd60e51b8152602060048201526011602482015270416c72656164792064697361626c65642160781b6044820152606401610c13565b600d805460ff60b81b19169055565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526120c190849061238d565b505050565b6001600160a01b0383166121285760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610c13565b6001600160a01b0382166121895760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610c13565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b5f6121f48484611e80565b90505f198114611fe3578181101561224e5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610c13565b611fe384848484036120c6565b6001600160a01b0383165f9081526006602052604090205460ff1615801561229b57506001600160a01b0382165f9081526006602052604090205460ff16155b15612382576001600160a01b0383165f908152600a602052604090205460ff161580156122e057506001600160a01b0382165f908152600a602052604090205460ff16155b6123125760405162461bcd60e51b8152602060048201526003602482015262109bdd60ea1b6044820152606401610c13565b600d54600160a01b900460ff166123605760405162461bcd60e51b815260206004820152601260248201527154726164696e67206e6f742061637469766560701b6044820152606401610c13565b61236b83838361245e565b6123759082613871565b90506123828383836128bd565b6120c1838383612c55565b5f6123e1826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316612df89092919063ffffffff16565b8051909150156120c157808060200190518101906123ff9190613884565b6120c15760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610c13565b601454305f9081526020819052604081205490911115801561249857506001600160a01b0384165f9081526008602052604090205460ff16155b80156124b257504360155460026124af919061385e565b11155b156124bf576124bf612e0e565b604080516080810182525f8082526020808301829052828401829052606083018290526001600160a01b0387168252600890529182205460ff161561254b5750604080516080810182526010546001600160401b038082168352600160401b820481166020840152600160801b8204811693830193909352600160c01b900490911660608201526125b4565b6001600160a01b0386165f9081526008602052604090205460ff16156125b4575060408051608081018252600f546001600160401b038082168352600160401b820481166020840152600160801b8204811693830193909352600160c01b900490911660608201525b60608101516001600160401b0316156128ab57604080516080810182526011546001600160501b038082168352600160501b820481166020840152600160a01b82041692820192909252600160f01b90910460ff161515606082015260125443900361267d576001600160a01b0387165f9081526008602052604090205460ff168061265757506001600160a01b0386165f9081526008602052604090205460ff165b156126785761271061266b866101f46136fc565b6126759190613727565b92505b612721565b61268843600161385e565b60125414806126a2575061269d43600261385e565b601254145b156126f8576001600160a01b0387165f9081526008602052604090205460ff16806126e457506001600160a01b0386165f9081526008602052604090205460ff165b156126785761271061266b866107d06136fc565b606082015161271090612714906001600160401b0316876136fc565b61271e9190613727565b92505b633b9aca0082606001516001600160401b031683604001516001600160401b03168561274d919061389f565b61275791906138c8565b61276191906138c8565b8160200181815161277291906138f5565b6001600160501b031690525060608201518251633b9aca00916001600160401b03908116916127a291168661389f565b6127ac91906138c8565b6127b691906138c8565b815182906127c59083906138f5565b6001600160501b031690525060608201516020830151633b9aca00916001600160401b03908116916127f891168661389f565b61280291906138c8565b61280c91906138c8565b8160400181815161281d91906138f5565b6001600160501b039081169091528251601180546020860151604087015160608801511515600160f01b0260ff60f01b19918716600160a01b02919091166affffffffffffffffffffff60a01b19928716600160501b026001600160a01b03199094169590961694909417919091171692909217179055506128a987306001600160801b038616612c55565b505b506001600160801b0316949350505050565b600d54600160b01b900460ff16156120c1576001600160a01b038281165f908152600760209081526040808320548383528184205482518084018452600e546001600160801b038082168352600160801b90910416818601529589168552600890935292205460ff928316939192168015612936575082155b156129d75780516001600160801b031684111561297f5760405162461bcd60e51b815260206004820152600760248201526626b0bc102a3c3760c91b6044820152606401610c13565b60208101516001600160801b0316612997838661385e565b11156129d25760405162461bcd60e51b815260206004820152600a60248201526913585e0815d85b1b195d60b21b6044820152606401610c13565b612ab7565b6001600160a01b0385165f9081526008602052604090205460ff168015612a1657506001600160a01b0386165f9081526007602052604090205460ff16155b15612a5f5780516001600160801b03168411156129d25760405162461bcd60e51b815260206004820152600760248201526626b0bc102a3c3760c91b6044820152606401610c13565b82612ab75760208101516001600160801b0316612a7c838661385e565b1115612ab75760405162461bcd60e51b815260206004820152600a60248201526913585e0815d85b1b195d60b21b6044820152606401610c13565b600d54600160b81b900460ff1615612c4d577f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0316856001600160a01b031614158015612b3d57507f000000000000000000000000b2a1ca2219131bbf901d0711acbdd6d05e3e80f26001600160a01b0316856001600160a01b031614155b15612c4d57325f908152600960205260409020544390612b5e90600661385e565b10612b9c5760405162461bcd60e51b815260206004820152600e60248201526d5472616e736665722044656c617960901b6044820152606401610c13565b6001600160a01b038086165f9081526009602052604080822043908190553283529120557f000000000000000000000000b2a1ca2219131bbf901d0711acbdd6d05e3e80f2811690871603612c4d57326001600160a01b03861614612c4d5760405162461bcd60e51b815260206004820152602160248201527f6e6f20627579696e6720746f2065787465726e616c2077616c6c6574732079656044820152601d60fa1b6064820152608401610c13565b505050505050565b6001600160a01b038316612cb95760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610c13565b6001600160a01b038216612d1b5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610c13565b6001600160a01b0383165f9081526020819052604090205481811015612d925760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610c13565b6001600160a01b038481165f81815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a350505050565b6060612e0684845f856130fd565b949350505050565b305f90815260208190526040812054604080516080810182526011546001600160501b03808216808452600160501b8304821660208501819052600160a01b8404909216948401859052600160f01b90920460ff161515606084015293945090925f9291612e7b916138f5565b612e8591906138f5565b6001600160501b03169050821580612e9b575080155b15612ea557505050565b601454612eb390600a6136fc565b831115612ecb57601454612ec890600a6136fc565b92505b60208201516001600160501b031615612fc3575f8183602001516001600160501b031685612ef991906136fc565b612f039190613727565b9050612f30307f000000000000000000000000b2a1ca2219131bbf901d0711acbdd6d05e3e80f283612c55565b7f000000000000000000000000b2a1ca2219131bbf901d0711acbdd6d05e3e80f26001600160a01b031663fff6cae96040518163ffffffff1660e01b81526004015f604051808303815f87803b158015612f88575f80fd5b505af1925050508015612f99575060015b50612fa48185613871565b935082602001516001600160501b031682612fbf9190613871565b9150505b82156130c157612fd2836131d4565b604082015147905f906001600160501b03161561306057600c5460408501516001600160a01b03909116908490613012906001600160501b0316856136fc565b61301c9190613727565b6040515f81818185875af1925050503d805f8114613055576040519150601f19603f3d011682016040523d82523d5f602084013e61305a565b606091505b50909150505b47915081156130be57600b546040516001600160a01b039091169083905f81818185875af1925050503d805f81146130b3576040519150601f19603f3d011682016040523d82523d5f602084013e6130b8565b606091505b50909150505b50505b505f602082018190528082526040820152601180546060909201511515600160f01b026001600160f81b03199092169190911790555043601555565b60608247101561315e5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610c13565b5f80866001600160a01b031685876040516131799190613914565b5f6040518083038185875af1925050503d805f81146131b3576040519150601f19603f3d011682016040523d82523d5f602084013e6131b8565b606091505b50915091506131c9878383876132e8565b979650505050505050565b6040805160028082526060820183525f9260208301908036833701905050905030815f8151811061320757613207613759565b60200260200101906001600160a01b031690816001600160a01b0316815250507f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc28160018151811061325b5761325b613759565b6001600160a01b03928316602091820292909201015260405163791ac94760e01b81527f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d9091169063791ac947906132bf9085905f9086903090429060040161392a565b5f604051808303815f87803b1580156132d6575f80fd5b505af1158015612c4d573d5f803e3d5ffd5b606083156133565782515f0361334f576001600160a01b0385163b61334f5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610c13565b5081612e06565b612e06838381511561336b5781518083602001fd5b8060405162461bcd60e51b8152600401610c1391906133c0565b80356001600160a01b038116811461339b575f80fd5b919050565b5f602082840312156133b0575f80fd5b6133b982613385565b9392505050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f8060408385031215613406575f80fd5b61340f83613385565b946020939093013593505050565b5f6020828403121561342d575f80fd5b5035919050565b5f805f60608486031215613446575f80fd5b61344f84613385565b925061345d60208501613385565b929592945050506040919091013590565b80356001600160401b038116811461339b575f80fd5b5f805f60608486031215613496575f80fd5b61349f8461346e565b92506134ad6020850161346e565b91506134bb6040850161346e565b90509250925092565b634e487b7160e01b5f52604160045260245ffd5b5f602082840312156134e8575f80fd5b81356001600160401b038111156134fd575f80fd5b8201601f8101841361350d575f80fd5b80356001600160401b03811115613526576135266134c4565b8060051b604051601f19603f83011681018181106001600160401b0382111715613552576135526134c4565b60405291825260208184018101929081018784111561356f575f80fd5b6020850194505b838510156135955761358785613385565b815260209485019401613576565b509695505050505050565b5f602082840312156135b0575f80fd5b81356001600160801b03811681146133b9575f80fd5b80151581146135d3575f80fd5b50565b5f80604083850312156135e7575f80fd5b6135f083613385565b91506020830135613600816135c6565b809150509250929050565b5f806040838503121561361c575f80fd5b61362583613385565b915061363360208401613385565b90509250929050565b5f6020828403121561364c575f80fd5b5051919050565b600181811c9082168061366757607f821691505b60208210810361368557634e487b7160e01b5f52602260045260245ffd5b50919050565b6020808252600e908201526d139bdd08185d5d1a1bdc9a5e995960921b604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b8082028115828204841417610d9f57610d9f6136e8565b634e487b7160e01b5f52601260045260245ffd5b5f8261373557613735613713565b500490565b6001600160401b038181168382160190811115610d9f57610d9f6136e8565b634e487b7160e01b5f52603260045260245ffd5b6001815b60018411156137a85780850481111561378c5761378c6136e8565b600184161561379a57908102905b60019390931c928002613771565b935093915050565b5f826137be57506001610d9f565b816137ca57505f610d9f565b81600181146137e057600281146137ea57613806565b6001915050610d9f565b60ff8411156137fb576137fb6136e8565b50506001821b610d9f565b5060208310610133831016604e8410600b8410161715613829575081810a610d9f565b6138355f19848461376d565b805f1904821115613848576138486136e8565b029392505050565b5f6133b960ff8416836137b0565b80820180821115610d9f57610d9f6136e8565b81810381811115610d9f57610d9f6136e8565b5f60208284031215613894575f80fd5b81516133b9816135c6565b6001600160801b0381811683821602908116908181146138c1576138c16136e8565b5092915050565b5f6001600160801b038316806138e0576138e0613713565b806001600160801b0384160491505092915050565b6001600160501b038181168382160190811115610d9f57610d9f6136e8565b5f82518060208501845e5f920191825250919050565b5f60a0820187835286602084015260a0604084015280865180835260c0850191506020880192505f5b8181101561397a5783516001600160a01b0316835260209384019390920191600101613953565b50506001600160a01b03959095166060840152505060800152939250505056fea2646970667358221220fc98de77e0bc9e2401558affd07a98a90b92c2e37286b38001f863d4f316683364736f6c634300081a0033

Deployed Bytecode Sourcemap

22777:16315:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37234:378;;;;;;;;;;-1:-1:-1;37234:378:0;;;;;:::i;:::-;;:::i;:::-;;11901:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23384:37;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;989:32:1;;;971:51;;959:2;944:18;23384:37:0;806:222:1;12833:201:0;;;;;;;;;;-1:-1:-1;12833:201:0;;;;;:::i;:::-;;:::i;:::-;;;1503:14:1;;1496:22;1478:41;;1466:2;1451:18;12833:201:0;1338:187:1;38658:164:0;;;;;;;;;;-1:-1:-1;38658:164:0;;;;;:::i;:::-;;:::i;12222:108::-;;;;;;;;;;-1:-1:-1;12310:12:0;;12222:108;;;1676:25:1;;;1664:2;1649:18;12222:108:0;1530:177:1;38432:218:0;;;;;;;;;;;;;:::i;34536:346::-;;;;;;;;;;-1:-1:-1;34536:346:0;;;;;:::i;:::-;;:::i;37620:173::-;;;;;;;;;;-1:-1:-1;37620:173:0;;;;;:::i;:::-;;:::i;13042:261::-;;;;;;;;;;-1:-1:-1;13042:261:0;;;;;:::i;:::-;;:::i;35398:504::-;;;;;;;;;;-1:-1:-1;35398:504:0;;;;;:::i;:::-;;:::i;12121:93::-;;;;;;;;;;-1:-1:-1;12121:93:0;;12204:2;2973:36:1;;2961:2;2946:18;12121:93:0;2831:184:1;38200:224:0;;;;;;;;;;-1:-1:-1;38200:224:0;;;;;:::i;:::-;;:::i;33896:322::-;;;;;;;;;;-1:-1:-1;33896:322:0;;;;;:::i;:::-;;:::i;13311:238::-;;;;;;;;;;-1:-1:-1;13311:238:0;;;;;:::i;:::-;;:::i;23222:25::-;;;;;;;;;;-1:-1:-1;23222:25:0;;;;-1:-1:-1;;;;;23222:25:0;;;27534:83;;;;;;;;;;-1:-1:-1;27534:83:0;;;;;:::i;:::-;-1:-1:-1;;;;;27602:7:0;27581:4;27602:7;;;:4;:7;;;;;;;;;27534:83;38830:222;;;;;;;;;;-1:-1:-1;38830:222:0;;;;;:::i;:::-;;:::i;24382:32::-;;;;;;;;;;;;;;;;23290:31;;;;;;;;;;;;;;;25011:81;;;;;;;;;;;;25050:42;25011:81;;24073:19;;;;;;;;;;-1:-1:-1;24073:19:0;;;;-1:-1:-1;;;;;24073:19:0;;;;-1:-1:-1;;;24073:19:0;;;;;-1:-1:-1;;;24073:19:0;;;;;-1:-1:-1;;;24073:19:0;;;;;;;;;-1:-1:-1;;;;;5039:31:1;;;5021:50;;5107:31;;;5102:2;5087:18;;5080:59;5175:31;;;5155:18;;;5148:59;;;;5243:31;;;5238:2;5223:18;;5216:59;5008:3;4993:19;24073::0;4798:483:1;23447:26:0;;;;;;;;;;-1:-1:-1;23447:26:0;;;;-1:-1:-1;;;23447:26:0;;;;;;22879:46;;;;;;;;;;-1:-1:-1;22879:46:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;23480:34;;;;;;;;;;-1:-1:-1;23480:34:0;;;;-1:-1:-1;;;23480:34:0;;;;;;34226:302;;;;;;;;;;-1:-1:-1;34226:302:0;;;;;:::i;:::-;;:::i;24126:32::-;;;;;;;;;;-1:-1:-1;24126:32:0;;;;-1:-1:-1;;;;;24126:32:0;;;;-1:-1:-1;;;24126:32:0;;;;;-1:-1:-1;;;24126:32:0;;;;-1:-1:-1;;;24126:32:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;5523:35:1;;;5505:54;;5595:35;;;5590:2;5575:18;;5568:63;5667:35;;5662:2;5647:18;;5640:63;5746:14;;5739:22;5734:2;5719:18;;5712:50;5492:3;5477:19;;5286:482;12338:127:0;;;;;;;;;;-1:-1:-1;12338:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;12439:18:0;12412:7;12439:18;;;;;;;;;;;;12338:127;16469:150;;;;;;;;;;;;;:::i;24286:27::-;;;;;;;;;;;;;;;;36569:321;;;;;;;;;;;;;:::i;35910:417::-;;;;;;;;;;;;;:::i;37801:161::-;;;;;;;;;;-1:-1:-1;37801:161:0;;;;;:::i;:::-;;:::i;23521:26::-;;;;;;;;;;-1:-1:-1;23521:26:0;;;;-1:-1:-1;;;23521:26:0;;;;;;36335:226;;;;;;;;;;;;;:::i;34890:500::-;;;;;;;;;;-1:-1:-1;34890:500:0;;;;;:::i;:::-;;:::i;22932:48::-;;;;;;;;;;-1:-1:-1;22932:48:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;16255:79;;;;;;;;;;-1:-1:-1;16320:6:0;;-1:-1:-1;;;;;16320:6:0;16255:79;;23254:29;;;;;;;;;;-1:-1:-1;23254:29:0;;;;-1:-1:-1;;;;;23254:29:0;;;12009:104;;;;;;;;;;;;;:::i;24185:42::-;;;;;;;;;;;;24222:5;24185:42;;;;;-1:-1:-1;;;;;5935:31:1;;;5917:50;;5905:2;5890:18;24185:42:0;5773:200:1;13559:436:0;;;;;;;;;;-1:-1:-1;13559:436:0;;;;;:::i;:::-;;:::i;23184:31::-;;;;;;;;;;-1:-1:-1;23184:31:0;;;;-1:-1:-1;;;;;23184:31:0;;;12473:193;;;;;;;;;;-1:-1:-1;12473:193:0;;;;;:::i;:::-;;:::i;23328:29::-;;;;;;;;;;;;;;;22987:41;;;;;;;;;;-1:-1:-1;22987:41:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;33209:319;;;;;;;;;;-1:-1:-1;33209:319:0;;;;;:::i;:::-;;:::i;24345:30::-;;;;;;;;;;;;;;;;23554:40;;;;;;;;;;-1:-1:-1;23554:40:0;;;;-1:-1:-1;;;23554:40:0;;;;;;24099:20;;;;;;;;;;-1:-1:-1;24099:20:0;;;;-1:-1:-1;;;;;24099:20:0;;;;-1:-1:-1;;;24099:20:0;;;;;-1:-1:-1;;;24099:20:0;;;;;-1:-1:-1;;;24099:20:0;;;;;33536:352;;;;;;;;;;-1:-1:-1;33536:352:0;;;;;:::i;:::-;;:::i;24253:26::-;;;;;;;;;;;;;;;;37970:222;;;;;;;;;;-1:-1:-1;37970:222:0;;;;;:::i;:::-;;:::i;12674:151::-;;;;;;;;;;-1:-1:-1;12674:151:0;;;;;:::i;:::-;;:::i;24042:24::-;;;;;;;;;;-1:-1:-1;24042:24:0;;;;-1:-1:-1;;;;;24042:24:0;;;;-1:-1:-1;;;24042:24:0;;;;;;;;;-1:-1:-1;;;;;6878:47:1;;;6860:66;;6962:47;;;;6957:2;6942:18;;6935:75;6833:18;24042:24:0;6686:330:1;16627:244:0;;;;;;;;;;-1:-1:-1;16627:244:0;;;;;:::i;:::-;;:::i;37076:150::-;;;;;;;;;;;;;:::i;36900:158::-;;;;;;;;;;;;;:::i;37234:378::-;-1:-1:-1;;;;;37300:20:0;;37292:59;;;;-1:-1:-1;;;37292:59:0;;7223:2:1;37292:59:0;;;7205:21:1;7262:2;7242:18;;;7235:30;7301:28;7281:18;;;7274:56;7347:18;;37292:59:0;;;;;;;;;37384:16;;-1:-1:-1;;;;;37384:16:0;37370:10;:30;;:58;;-1:-1:-1;37418:10:0;;-1:-1:-1;;;;;37418:10:0;37404;:24;37370:58;37362:78;;;;-1:-1:-1;;;37362:78:0;;7578:2:1;37362:78:0;;;7560:21:1;7617:1;7597:18;;;7590:29;-1:-1:-1;;;7635:18:1;;;7628:37;7682:18;;37362:78:0;7376:330:1;37362:78:0;37478:39;;-1:-1:-1;;;37478:39:0;;37511:4;37478:39;;;971:51:1;37451:24:0;;-1:-1:-1;;;;;37478:24:0;;;;;944:18:1;;37478:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37574:10;;37451:66;;-1:-1:-1;37528:76:0;;37558:6;;-1:-1:-1;;;;;37574:10:0;37451:66;37528:22;:76::i;:::-;37281:331;37234:378;:::o;11901:100::-;11955:13;11988:5;11981:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11901:100;:::o;12833:201::-;12916:4;10292:10;12972:32;10292:10;12988:7;12997:6;12972:8;:32::i;:::-;13022:4;13015:11;;;12833:201;;;;;:::o;38658:164::-;38745:14;;-1:-1:-1;;;;;38745:14:0;38731:10;:28;38723:55;;;;-1:-1:-1;;;38723:55:0;;;;;;;:::i;:::-;38789:14;:25;;-1:-1:-1;;;;;;38789:25:0;-1:-1:-1;;;;;38789:25:0;;;;;;;;;;38658:164::o;38432:218::-;38508:14;;-1:-1:-1;;;;;38508:14:0;38494:10;:28;38486:55;;;;-1:-1:-1;;;38486:55:0;;;;;;;:::i;:::-;38552:14;:27;;-1:-1:-1;;;;;;38552:27:0;;;38595:47;;;38619:10;8802:51:1;;-1:-1:-1;8884:2:1;8869:18;;8862:60;38595:47:0;;8775:18:1;38595:47:0;;;;;;;38432:218::o;34536:346::-;16382:6;;-1:-1:-1;;;;;16382:6:0;10292:10;16382:22;16374:67;;;;-1:-1:-1;;;16374:67:0;;;;;;;:::i;:::-;34657:6:::1;34636:13;12310:12:::0;;;12222:108;34636:13:::1;:17;::::0;34652:1:::1;34636:17;:::i;:::-;34635:28;;;;:::i;:::-;34622:9;:41;;34614:107;;;::::0;-1:-1:-1;;;34614:107:0;;10058:2:1;34614:107:0::1;::::0;::::1;10040:21:1::0;10097:2;10077:18;;;10070:30;10136:34;10116:18;;;10109:62;-1:-1:-1;;;10187:18:1;;;10180:51;10248:19;;34614:107:0::1;9856:417:1::0;34614:107:0::1;34775:4;34754:13;12310:12:::0;;;12222:108;34754:13:::1;:17;::::0;34770:1:::1;34754:17;:::i;:::-;34753:26;;;;:::i;:::-;34740:9;:39;;34732:104;;;::::0;-1:-1:-1;;;34732:104:0;;10480:2:1;34732:104:0::1;::::0;::::1;10462:21:1::0;10519:2;10499:18;;;10492:30;10558:34;10538:18;;;10531:62;-1:-1:-1;;;10609:18:1;;;10602:50;10669:19;;34732:104:0::1;10278:416:1::0;34732:104:0::1;34847:15;:27:::0;34536:346::o;37620:173::-;16382:6;;-1:-1:-1;;;;;16382:6:0;10292:10;16382:22;16374:67;;;;-1:-1:-1;;;16374:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;37708:22:0;::::1;37700:47;;;::::0;-1:-1:-1;;;37700:47:0;;10901:2:1;37700:47:0::1;::::0;::::1;10883:21:1::0;10940:2;10920:18;;;10913:30;-1:-1:-1;;;10959:18:1;;;10952:42;11011:18;;37700:47:0::1;10699:336:1::0;37700:47:0::1;37758:16;:27:::0;;-1:-1:-1;;;;;;37758:27:0::1;-1:-1:-1::0;;;;;37758:27:0;;;::::1;::::0;;;::::1;::::0;;37620:173::o;13042:261::-;13139:4;10292:10;13197:38;13213:4;10292:10;13228:6;13197:15;:38::i;:::-;13246:27;13256:4;13262:2;13266:6;13246:9;:27::i;:::-;-1:-1:-1;13291:4:0;;13042:261;-1:-1:-1;;;;13042:261:0:o;35398:504::-;16382:6;;-1:-1:-1;;;;;16382:6:0;10292:10;16382:22;16374:67;;;;-1:-1:-1;;;16374:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;;;;;;;;;;;;;;35540:34:0;;::::1;::::0;;35585;;::::1;-1:-1:-1::0;;;35585:34:0;;;;35630:22;;::::1;-1:-1:-1::0;;;35630:22:0;;35680:29:::1;35585:34:::0;35540;35680:29:::1;:::i;:::-;:39;;;;:::i;:::-;-1:-1:-1::0;;;;;35663:56:0::1;:14;::::0;::::1;:56:::0;;;35757:4:::1;-1:-1:-1::0;35738:23:0::1;::::0;:61:::1;;-1:-1:-1::0;35783:7:0::1;:16:::0;35765:14:::1;::::0;::::1;::::0;-1:-1:-1;;;;;;;;35783:16:0;;::::1;::::0;::::1;35765:34:::0;::::1;;;35738:61;35730:92;;;::::0;-1:-1:-1;;;35730:92:0;;11438:2:1;35730:92:0::1;::::0;::::1;11420:21:1::0;11477:2;11457:18;;;11450:30;-1:-1:-1;;;11496:18:1;;;11489:48;11554:18;;35730:92:0::1;11236:342:1::0;35730:92:0::1;35853:14;::::0;::::1;::::0;35838:30:::1;::::0;-1:-1:-1;;;;;5935:31:1;;;5917:50;;35838:30:0::1;::::0;5905:2:1;5890:18;35838:30:0::1;;;;;;;35879:15:::0;;:7:::1;:15:::0;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;::::0;-1:-1:-1;;;;;35879:15:0;;::::1;-1:-1:-1::0;;;35879:15:0::1;-1:-1:-1::0;;;;;35879:15:0;;::::1;-1:-1:-1::0;;;35879:15:0::1;::::0;;;;-1:-1:-1;;;;;35879:15:0;;::::1;-1:-1:-1::0;;;35879:15:0::1;-1:-1:-1::0;;;;;;35879:15:0;;;;;;::::1;::::0;;;;::::1;::::0;;;;;;;;::::1;::::0;;-1:-1:-1;;;35398:504:0:o;38200:224::-;38284:14;;-1:-1:-1;;;;;38284:14:0;38270:10;:28;38262:55;;;;-1:-1:-1;;;38262:55:0;;;;;;;:::i;:::-;38333:6;38328:89;38349:6;:13;38345:1;:17;38328:89;;;38402:5;38384:4;:15;38389:6;38396:1;38389:9;;;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;38384:15:0;;;;;;;;;;;-1:-1:-1;38384:15:0;:23;;-1:-1:-1;;38384:23:0;;;;;;;;;;-1:-1:-1;38364:3:0;38328:89;;33896:322;16382:6;;-1:-1:-1;;;;;16382:6:0;10292:10;16382:22;16374:67;;;;-1:-1:-1;;;16374:67:0;;;;;;;:::i;:::-;34036:14:::1;12204:2:::0;34036::::1;:14;:::i;:::-;34029:4;34009:13;12310:12:::0;;;12222:108;34009:13:::1;:17;::::0;34025:1:::1;34009:17;:::i;:::-;:24;;;;:::i;:::-;34008:43;;;;:::i;:::-;33990:14;-1:-1:-1::0;;;;;33990:61:0::1;;;33982:81;;;::::0;-1:-1:-1;;;33982:81:0;;13555:2:1;33982:81:0::1;::::0;::::1;13537:21:1::0;13594:1;13574:18;;;13567:29;-1:-1:-1;;;13612:18:1;;;13605:37;13659:18;;33982:81:0::1;13353:330:1::0;33982:81:0::1;34128:14;12204:2:::0;34128::::1;:14;:::i;:::-;34110:33;::::0;-1:-1:-1;;;;;34110:33:0;::::1;;:::i;:::-;34074:8;:70:::0;;-1:-1:-1;;;;;;34074:70:0::1;-1:-1:-1::0;;;;;34074:70:0;;;::::1;::::0;;::::1;::::0;;34160:50:::1;::::0;13834:66:1;;;34160:50:0::1;::::0;13822:2:1;13807:18;34160:50:0::1;;;;;;;;33896:322:::0;:::o;13311:238::-;13399:4;10292:10;13455:64;10292:10;13471:7;13508:10;13480:25;10292:10;13471:7;13480:9;:25::i;:::-;:38;;;;:::i;:::-;13455:8;:64::i;38830:222::-;38896:10;12412:7;12439:18;;;;;;;;;;;38911:6;-1:-1:-1;38886:31:0;38878:64;;;;-1:-1:-1;;;38878:64:0;;14243:2:1;38878:64:0;;;14225:21:1;14282:2;14262:18;;;14255:30;-1:-1:-1;;;14301:18:1;;;14294:50;14361:18;;38878:64:0;14041:344:1;38878:64:0;38953:43;38963:10;25050:42;38989:6;38953:9;:43::i;:::-;39012:32;;1676:25:1;;;39025:10:0;;39012:32;;1664:2:1;1649:18;39012:32:0;;;;;;;38830:222;:::o;34226:302::-;16382:6;;-1:-1:-1;;;;;16382:6:0;10292:10;16382:22;16374:67;;;;-1:-1:-1;;;16374:67:0;;;;;;;:::i;:::-;34361:14:::1;12204:2:::0;34361::::1;:14;:::i;:::-;34354:4;34334:13;12310:12:::0;;;12222:108;34334:13:::1;:17;::::0;34350:1:::1;34334:17;:::i;:::-;:24;;;;:::i;:::-;34333:43;;;;:::i;:::-;34315:14;-1:-1:-1::0;;;;;34315:61:0::1;;;34307:81;;;::::0;-1:-1:-1;;;34307:81:0;;13555:2:1;34307:81:0::1;::::0;::::1;13537:21:1::0;13594:1;13574:18;;;13567:29;-1:-1:-1;;;13612:18:1;;;13605:37;13659:18;;34307:81:0::1;13353:330:1::0;34307:81:0::1;34448:14;12204:2:::0;34448::::1;:14;:::i;:::-;34430:33;::::0;-1:-1:-1;;;;;34430:33:0;::::1;;:::i;:::-;34399:8;:65:::0;;-1:-1:-1;;;;;34399:65:0;;::::1;-1:-1:-1::0;;;34399:65:0;;::::1;::::0;::::1;;::::0;;;;34480:40:::1;::::0;34499:20;;;::::1;;13834:66:1::0;;34480:40:0::1;::::0;13822:2:1;13807:18;34480:40:0::1;13688:218:1::0;16469:150:0;16382:6;;-1:-1:-1;;;;;16382:6:0;10292:10;16382:22;16374:67;;;;-1:-1:-1;;;16374:67:0;;;;;;;:::i;:::-;16562:6:::1;::::0;16541:40:::1;::::0;16578:1:::1;::::0;-1:-1:-1;;;;;16562:6:0::1;::::0;16541:40:::1;::::0;16578:1;;16541:40:::1;16592:6;:19:::0;;-1:-1:-1;;;;;;16592:19:0::1;::::0;;16469:150::o;36569:321::-;16382:6;;-1:-1:-1;;;;;16382:6:0;10292:10;16382:22;16374:67;;;;-1:-1:-1;;;16374:67:0;;;;;;;:::i;:::-;36623:7:::1;:15:::0;;-1:-1:-1;;;;36623:15:0::1;::::0;;-1:-1:-1;;;;;;;;;36633:5:0::1;-1:-1:-1::0;;;;;;;36685:14:0::1;36702:13;12310:12:::0;;;12222:108;36702:13:::1;-1:-1:-1::0;;;;;36726:44:0;::::1;::::0;;;36781:21:::1;::::0;::::1;:39:::0;;;-1:-1:-1;;;36831:20:0;::::1;;:8;:20:::0;36867:15:::1;::::0;36685:30;;-1:-1:-1;36867:15:0::1;::::0;36726:26:::1;::::0;36867:15:::1;36612:278;;36569:321::o:0;35910:417::-;35978:10;;-1:-1:-1;;;;;35978:10:0;35964;:24;35956:44;;;;-1:-1:-1;;;35956:44:0;;7578:2:1;35956:44:0;;;7560:21:1;7617:1;7597:18;;;7590:29;-1:-1:-1;;;7635:18:1;;;7628:37;7682:18;;35956:44:0;7376:330:1;35956:44:0;36021:30;;;;;;;;36045:6;36021:30;-1:-1:-1;;;;;36021:30:0;;;;;;-1:-1:-1;;;36021:30:0;;;;;;;;;;-1:-1:-1;;;36021:30:0;;;;;;;;;;;-1:-1:-1;;;36021:30:0;;;;;;;;;;;;;36062:40;;36021:30;;36062:40;:::i;:::-;-1:-1:-1;;;;;36062:40:0;;;;;;36131:1;36113:15;;;;:19;;;;36143:17;;:6;:17;;;;;;;;;;;;;;;-1:-1:-1;;;;;;36143:17:0;;;;;;;-1:-1:-1;;;36143:17:0;;;;;;-1:-1:-1;;;;;36143:17:0;-1:-1:-1;;;36143:17:0;;;;;;;;;36173:32;;;;;;;36143:17;36173:32;;;;;;;-1:-1:-1;;;36173:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;36173:32:0;;;36216:42;;36173:32;;36216:42;:::i;:::-;-1:-1:-1;;;;;36216:42:0;;;;;;36288:1;36269:16;;;:20;36300:19;;:7;:19;;;;;;;;;;;;;;-1:-1:-1;;;;;;36300:19:0;;;;-1:-1:-1;;;36300:19:0;;;;;;;;;;;-1:-1:-1;;;;;36300:19:0;-1:-1:-1;;;36300:19:0;;;;;;;;;-1:-1:-1;;35910:417:0:o;37801:161::-;16382:6;;-1:-1:-1;;;;;16382:6:0;10292:10;16382:22;16374:67;;;;-1:-1:-1;;;16374:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;37883:22:0;::::1;37875:47;;;::::0;-1:-1:-1;;;37875:47:0;;10901:2:1;37875:47:0::1;::::0;::::1;10883:21:1::0;10940:2;10920:18;;;10913:30;-1:-1:-1;;;10959:18:1;;;10952:42;11011:18;;37875:47:0::1;10699:336:1::0;37875:47:0::1;37933:10;:21:::0;;-1:-1:-1;;;;;;37933:21:0::1;-1:-1:-1::0;;;;;37933:21:0;;;::::1;::::0;;;::::1;::::0;;37801:161::o;36335:226::-;16382:6;;-1:-1:-1;;;;;16382:6:0;10292:10;16382:22;16374:67;;;;-1:-1:-1;;;16374:67:0;;;;;;;:::i;:::-;36399:14:::1;::::0;-1:-1:-1;;;36399:14:0;::::1;;;36398:15;36390:51;;;::::0;-1:-1:-1;;;36390:51:0;;14592:2:1;36390:51:0::1;::::0;::::1;14574:21:1::0;14631:2;14611:18;;;14604:30;14670:25;14650:18;;;14643:53;14713:18;;36390:51:0::1;14390:347:1::0;36390:51:0::1;36452:14;:21:::0;;-1:-1:-1;;;;36452:21:0::1;-1:-1:-1::0;;;36452:21:0::1;::::0;;36498:12:::1;36484:11;:26:::0;;;36521:17:::1;:32:::0;36335:226::o;34890:500::-;16382:6;;-1:-1:-1;;;;;16382:6:0;10292:10;16382:22;16374:67;;;;-1:-1:-1;;;16374:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;;;;;;;;;;;;;;35031:34:0;;::::1;::::0;;35076;;::::1;-1:-1:-1::0;;;35076:34:0;;;;35121:22;;::::1;-1:-1:-1::0;;;35121:22:0;;35171:29:::1;35076:34:::0;35031;35171:29:::1;:::i;:::-;:39;;;;:::i;:::-;-1:-1:-1::0;;;;;35154:56:0::1;:14;::::0;::::1;:56:::0;;;35248:4:::1;-1:-1:-1::0;35229:23:0::1;::::0;:60:::1;;-1:-1:-1::0;35274:6:0::1;:15:::0;35256:14:::1;::::0;::::1;::::0;-1:-1:-1;;;;;;;;35274:15:0;;::::1;::::0;::::1;35256:33:::0;::::1;;;35229:60;35221:91;;;::::0;-1:-1:-1;;;35221:91:0;;11438:2:1;35221:91:0::1;::::0;::::1;11420:21:1::0;11477:2;11457:18;;;11450:30;-1:-1:-1;;;11496:18:1;;;11489:48;11554:18;;35221:91:0::1;11236:342:1::0;35221:91:0::1;35342:14;::::0;::::1;::::0;35328:29:::1;::::0;-1:-1:-1;;;;;5935:31:1;;;5917:50;;35328:29:0::1;::::0;5905:2:1;5890:18;35328:29:0::1;;;;;;;35368:14:::0;;:6:::1;:14:::0;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;::::0;-1:-1:-1;;;;;35368:14:0;;::::1;-1:-1:-1::0;;;35368:14:0::1;-1:-1:-1::0;;;;;35368:14:0;;::::1;-1:-1:-1::0;;;35368:14:0::1;::::0;;;;-1:-1:-1;;;;;35368:14:0;;::::1;-1:-1:-1::0;;;35368:14:0::1;-1:-1:-1::0;;;;;;35368:14:0;;;;;;::::1;::::0;;;;::::1;::::0;;;;;;;;::::1;::::0;;-1:-1:-1;;;34890:500:0:o;12009:104::-;12065:13;12098:7;12091:14;;;;;:::i;13559:436::-;13652:4;10292:10;13652:4;13735:25;10292:10;13752:7;13735:9;:25::i;:::-;13708:52;;13799:15;13779:16;:35;;13771:85;;;;-1:-1:-1;;;13771:85:0;;14944:2:1;13771:85:0;;;14926:21:1;14983:2;14963:18;;;14956:30;15022:34;15002:18;;;14995:62;-1:-1:-1;;;15073:18:1;;;15066:35;15118:19;;13771:85:0;14742:401:1;13771:85:0;13892:60;13901:5;13908:7;13936:15;13917:16;:34;13892:8;:60::i;12473:193::-;12552:4;10292:10;12608:28;10292:10;12625:2;12629:6;12608:9;:28::i;33209:319::-;16382:6;;-1:-1:-1;;;;;16382:6:0;10292:10;16382:22;16374:67;;;;-1:-1:-1;;;16374:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;33307:22:0;::::1;33299:47;;;::::0;-1:-1:-1;;;33299:47:0;;15350:2:1;33299:47:0::1;::::0;::::1;15332:21:1::0;15389:2;15369:18;;;15362:30;-1:-1:-1;;;15408:18:1;;;15401:42;15460:18;;33299:47:0::1;15148:336:1::0;33299:47:0::1;33385:4;-1:-1:-1::0;;;;;33365:25:0;::::1;::::0;33357:62:::1;;;::::0;-1:-1:-1;;;33357:62:0;;15691:2:1;33357:62:0::1;::::0;::::1;15673:21:1::0;15730:2;15710:18;;;15703:30;15769:26;15749:18;;;15742:54;15813:18;;33357:62:0::1;15489:348:1::0;33357:62:0::1;-1:-1:-1::0;;;;;33430:24:0;::::1;;::::0;;;:14:::1;:24;::::0;;;;;;;;:36;;-1:-1:-1;;33430:36:0::1;::::0;::::1;;::::0;;::::1;::::0;;;33482:38;;16010:51:1;;;16077:18;;;16070:50;33482:38:0::1;::::0;15983:18:1;33482:38:0::1;;;;;;;;33209:319:::0;;:::o;33536:352::-;16382:6;;-1:-1:-1;;;;;16382:6:0;10292:10;16382:22;16374:67;;;;-1:-1:-1;;;16374:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;33636:22:0;::::1;33628:47;;;::::0;-1:-1:-1;;;33628:47:0;;15350:2:1;33628:47:0::1;::::0;::::1;15332:21:1::0;15389:2;15369:18;;;15362:30;-1:-1:-1;;;15408:18:1;;;15401:42;15460:18;;33628:47:0::1;15148:336:1::0;33628:47:0::1;33690:9;33686:90;;33735:6;-1:-1:-1::0;;;;;33723:18:0::1;:8;-1:-1:-1::0;;;;;33723:18:0::1;::::0;33715:49:::1;;;::::0;-1:-1:-1;;;33715:49:0;;16333:2:1;33715:49:0::1;::::0;::::1;16315:21:1::0;16372:2;16352:18;;;16345:30;-1:-1:-1;;;16391:18:1;;;16384:48;16449:18;;33715:49:0::1;16131:342:1::0;33715:49:0::1;-1:-1:-1::0;;;;;33786:26:0;::::1;;::::0;;;:16:::1;:26;::::0;;;;;;;;:38;;-1:-1:-1;;33786:38:0::1;::::0;::::1;;::::0;;::::1;::::0;;;33840:40;;16010:51:1;;;16077:18;;;16070:50;33840:40:0::1;::::0;15983:18:1;33840:40:0::1;15842:284:1::0;37970:222:0;38053:14;;-1:-1:-1;;;;;38053:14:0;38039:10;:28;38031:55;;;;-1:-1:-1;;;38031:55:0;;;;;;;:::i;:::-;38102:6;38097:88;38118:5;:12;38114:1;:16;38097:88;;;38169:4;38152;:14;38157:5;38163:1;38157:8;;;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;38152:14:0;;;;;;;;;;;-1:-1:-1;38152:14:0;:21;;-1:-1:-1;;38152:21:0;;;;;;;;;;-1:-1:-1;38132:3:0;38097:88;;12674:151;-1:-1:-1;;;;;12790:18:0;;;12763:7;12790:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;12674:151::o;16627:244::-;16382:6;;-1:-1:-1;;;;;16382:6:0;10292:10;16382:22;16374:67;;;;-1:-1:-1;;;16374:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;16716:22:0;::::1;16708:73;;;::::0;-1:-1:-1;;;16708:73:0;;16680:2:1;16708:73:0::1;::::0;::::1;16662:21:1::0;16719:2;16699:18;;;16692:30;16758:34;16738:18;;;16731:62;-1:-1:-1;;;16809:18:1;;;16802:36;16855:19;;16708:73:0::1;16478:402:1::0;16708:73:0::1;16818:6;::::0;16797:38:::1;::::0;-1:-1:-1;;;;;16797:38:0;;::::1;::::0;16818:6:::1;::::0;16797:38:::1;::::0;16818:6:::1;::::0;16797:38:::1;16846:6;:17:::0;;-1:-1:-1;;;;;;16846:17:0::1;-1:-1:-1::0;;;;;16846:17:0;;;::::1;::::0;;;::::1;::::0;;16627:244::o;37076:150::-;37168:10;;37160:58;;37124:12;;-1:-1:-1;;;;;37168:10:0;;37192:21;;37124:12;37160:58;37124:12;37160:58;37192:21;37168:10;37160:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;37076:150:0:o;36900:158::-;16382:6;;-1:-1:-1;;;;;16382:6:0;10292:10;16382:22;16374:67;;;;-1:-1:-1;;;16374:67:0;;;;;;;:::i;:::-;36969:20:::1;::::0;-1:-1:-1;;;36969:20:0;::::1;;;36961:50;;;::::0;-1:-1:-1;;;36961:50:0;;17297:2:1;36961:50:0::1;::::0;::::1;17279:21:1::0;17336:2;17316:18;;;17309:30;-1:-1:-1;;;17355:18:1;;;17348:47;17412:18;;36961:50:0::1;17095:341:1::0;36961:50:0::1;37022:20;:28:::0;;-1:-1:-1;;;;37022:28:0::1;::::0;;36900:158::o;21191:177::-;21301:58;;;-1:-1:-1;;;;;17633:32:1;;21301:58:0;;;17615:51:1;17682:18;;;;17675:34;;;21301:58:0;;;;;;;;;;17588:18:1;;;;21301:58:0;;;;;;;;-1:-1:-1;;;;;21301:58:0;-1:-1:-1;;;21301:58:0;;;21274:86;;21294:5;;21274:19;:86::i;:::-;21191:177;;;:::o;15151:346::-;-1:-1:-1;;;;;15253:19:0;;15245:68;;;;-1:-1:-1;;;15245:68:0;;17922:2:1;15245:68:0;;;17904:21:1;17961:2;17941:18;;;17934:30;18000:34;17980:18;;;17973:62;-1:-1:-1;;;18051:18:1;;;18044:34;18095:19;;15245:68:0;17720:400:1;15245:68:0;-1:-1:-1;;;;;15332:21:0;;15324:68;;;;-1:-1:-1;;;15324:68:0;;18327:2:1;15324:68:0;;;18309:21:1;18366:2;18346:18;;;18339:30;18405:34;18385:18;;;18378:62;-1:-1:-1;;;18456:18:1;;;18449:32;18498:19;;15324:68:0;18125:398:1;15324:68:0;-1:-1:-1;;;;;15405:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;15457:32;;1676:25:1;;;15457:32:0;;1649:18:1;15457:32:0;;;;;;;15151:346;;;:::o;15505:419::-;15606:24;15633:25;15643:5;15650:7;15633:9;:25::i;:::-;15606:52;;-1:-1:-1;;15673:16:0;:37;15669:248;;15755:6;15735:16;:26;;15727:68;;;;-1:-1:-1;;;15727:68:0;;18730:2:1;15727:68:0;;;18712:21:1;18769:2;18749:18;;;18742:30;18808:31;18788:18;;;18781:59;18857:18;;15727:68:0;18528:353:1;15727:68:0;15839:51;15848:5;15855:7;15883:6;15864:16;:25;15839:8;:51::i;27625:464::-;-1:-1:-1;;;;;27771:20:0;;;;;;:14;:20;;;;;;;;27770:21;:44;;;;-1:-1:-1;;;;;;27796:18:0;;;;;;:14;:18;;;;;;;;27795:19;27770:44;27767:271;;;-1:-1:-1;;;;;27839:10:0;;;;;;:4;:10;;;;;;;;27838:11;:24;;;;-1:-1:-1;;;;;;27854:8:0;;;;;;:4;:8;;;;;;;;27853:9;27838:24;27830:40;;;;-1:-1:-1;;;27830:40:0;;19088:2:1;27830:40:0;;;19070:21:1;19127:1;19107:18;;;19100:29;-1:-1:-1;;;19145:18:1;;;19138:33;19188:18;;27830:40:0;18886:326:1;27830:40:0;27893:14;;-1:-1:-1;;;27893:14:0;;;;27885:45;;;;-1:-1:-1;;;27885:45:0;;19419:2:1;27885:45:0;;;19401:21:1;19458:2;19438:18;;;19431:30;-1:-1:-1;;;19477:18:1;;;19470:48;19535:18;;27885:45:0;19217:342:1;27885:45:0;27955:27;27965:4;27971:2;27975:6;27955:9;:27::i;:::-;27945:37;;;;:::i;:::-;;;27997:29;28009:4;28015:2;28019:6;27997:11;:29::i;:::-;28050:31;28066:4;28071:2;28074:6;28050:15;:31::i;21589:333::-;21670:23;21696:69;21724:4;21696:69;;;;;;;;;;;;;;;;;21704:5;-1:-1:-1;;;;;21696:27:0;;;:69;;;;;:::i;:::-;21780:17;;21670:95;;-1:-1:-1;21780:21:0;21776:139;;21837:10;21826:30;;;;;;;;;;;;:::i;:::-;21818:85;;;;-1:-1:-1;;;21818:85:0;;20149:2:1;21818:85:0;;;20131:21:1;20188:2;20168:18;;;20161:30;20227:34;20207:18;;;20200:62;-1:-1:-1;;;20278:18:1;;;20271:40;20328:19;;21818:85:0;19947:406:1;29504:1565:0;29635:15;;29625:4;29583:7;12439:18;;;;;;;;;;;29583:7;;-1:-1:-1;29607:43:0;:63;;;;-1:-1:-1;;;;;;29655:15:0;;;;;;:9;:15;;;;;;;;29654:16;29607:63;:104;;;;;29699:12;29674:17;;29694:1;29674:21;;;;:::i;:::-;:37;;29607:104;29604:150;;;29728:14;:12;:14::i;:::-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29837:13:0;;;;:9;:13;;;;;;;;29833:126;;;-1:-1:-1;29866:15:0;;;;;;;;29874:7;29866:15;-1:-1:-1;;;;;29866:15:0;;;;;-1:-1:-1;;;29866:15:0;;;;;;;;-1:-1:-1;;;29866:15:0;;;;;;;;;;;-1:-1:-1;;;29866:15:0;;;;;;;;;29833:126;;;-1:-1:-1;;;;;29902:15:0;;;;;;:9;:15;;;;;;;;29899:60;;;-1:-1:-1;29933:14:0;;;;;;;;29941:6;29933:14;-1:-1:-1;;;;;29933:14:0;;;;;-1:-1:-1;;;29933:14:0;;;;;;;;-1:-1:-1;;;29933:14:0;;;;;;;;;;;-1:-1:-1;;;29933:14:0;;;;;;;;;29899:60;29982:14;;;;-1:-1:-1;;;;;29982:18:0;;29979:1052;;30016:53;;;;;;;;30057:12;30016:53;-1:-1:-1;;;;;30016:53:0;;;;;-1:-1:-1;;;30016:53:0;;;;;;;;-1:-1:-1;;;30016:53:0;;;;;;;;;;-1:-1:-1;;;30016:53:0;;;;;;;;;;;30087:11;;30102:12;30087:27;;30084:511;;-1:-1:-1;;;;;30138:15:0;;;;;;:9;:15;;;;;;;;;:32;;-1:-1:-1;;;;;;30157:13:0;;;;;;:9;:13;;;;;;;;30138:32;30134:121;;;24222:5;30208:12;:6;30217:3;30208:12;:::i;:::-;:26;;;;:::i;:::-;30194:41;;30134:121;30084:511;;;30294:16;:12;30309:1;30294:16;:::i;:::-;30279:11;;:31;:66;;;-1:-1:-1;30329:16:0;:12;30344:1;30329:16;:::i;:::-;30314:11;;:31;30279:66;30276:319;;;-1:-1:-1;;;;;30369:15:0;;;;;;:9;:15;;;;;;;;;:32;;-1:-1:-1;;;;;;30388:13:0;;;;;;:9;:13;;;;;;;;30369:32;30365:122;;;24222:5;30439:13;:6;30448:4;30439:13;:::i;30276:319::-;30550:14;;;;24222:5;;30541:23;;-1:-1:-1;;;;;30541:23:0;:6;:23;:::i;:::-;:37;;;;:::i;:::-;30527:52;;30276:319;30701:3;30684:5;:14;;;-1:-1:-1;;;;;30657:41:0;30663:5;:18;;;-1:-1:-1;;;;;30657:24:0;:3;:24;;;;:::i;:::-;:41;;;;:::i;:::-;:47;;;;:::i;:::-;30609:18;:37;;:96;;;;;;;:::i;:::-;-1:-1:-1;;;;;30609:96:0;;;-1:-1:-1;30795:14:0;;;;30774:18;;30812:3;;-1:-1:-1;;;;;30768:41:0;;;;:24;;;:3;:24;:::i;:::-;:41;;;;:::i;:::-;:47;;;;:::i;:::-;30720:96;;:18;;:96;;;;;:::i;:::-;-1:-1:-1;;;;;30720:96:0;;;-1:-1:-1;30894:14:0;;;;30879:12;;;;30911:3;;-1:-1:-1;;;;;30873:35:0;;;;:18;;;:3;:18;:::i;:::-;:35;;;;:::i;:::-;:41;;;;:::i;:::-;30831:18;:31;;:84;;;;;;;:::i;:::-;-1:-1:-1;;;;;30831:84:0;;;;;;30930:33;;:12;:33;;;;;;;;;;;;;;;;-1:-1:-1;;;30930:33:0;-1:-1:-1;;;;30930:33:0;;;-1:-1:-1;;;30930:33:0;;;;;-1:-1:-1;;;;30930:33:0;;;-1:-1:-1;;;30930:33:0;-1:-1:-1;;;;;;30930:33:0;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30978:41:0;30994:4;31008;-1:-1:-1;;;;;30978:41:0;;:15;:41::i;:::-;30001:1030;29979:1052;-1:-1:-1;;;;;;31051:10:0;;29504:1565;-1:-1:-1;;;;29504:1565:0:o;28097:1399::-;28183:7;;-1:-1:-1;;;28183:7:0;;;;28180:1307;;;-1:-1:-1;;;;;28228:20:0;;;28206:19;28228:20;;;:16;:20;;;;;;;;;12439:18;;;;;;;28313:36;;;;;;;28341:8;28313:36;-1:-1:-1;;;;;28313:36:0;;;;;-1:-1:-1;;;28313:36:0;;;;;;;;28388:15;;;;;:9;:15;;;;;;28228:20;;;;;12439:18;;28388:15;:34;;;;;28408:14;28407:15;28388:34;28384:538;;;28461:26;;-1:-1:-1;;;;;28451:36:0;;;;28443:56;;;;-1:-1:-1;;;28443:56:0;;21322:2:1;28443:56:0;;;21304:21:1;21361:1;21341:18;;;21334:29;-1:-1:-1;;;21379:18:1;;;21372:37;21426:18;;28443:56:0;21120:330:1;28443:56:0;28550:21;;;;-1:-1:-1;;;;;28526:45:0;:20;28535:11;28526:6;:20;:::i;:::-;:45;;28518:68;;;;-1:-1:-1;;;28518:68:0;;21657:2:1;28518:68:0;;;21639:21:1;21696:2;21676:18;;;21669:30;-1:-1:-1;;;21715:18:1;;;21708:40;21765:18;;28518:68:0;21455:334:1;28518:68:0;28384:538;;;-1:-1:-1;;;;;28647:13:0;;;;;;:9;:13;;;;;;;;:40;;;;-1:-1:-1;;;;;;28665:22:0;;;;;;:16;:22;;;;;;;;28664:23;28647:40;28643:279;;;28726:26;;-1:-1:-1;;;;;28716:36:0;;;;28708:56;;;;-1:-1:-1;;;28708:56:0;;21322:2:1;28708:56:0;;;21304:21:1;21361:1;21341:18;;;21334:29;-1:-1:-1;;;21379:18:1;;;21372:37;21426:18;;28708:56:0;21120:330:1;28643:279:0;28803:14;28799:123;;28870:21;;;;-1:-1:-1;;;;;28846:45:0;:20;28855:11;28846:6;:20;:::i;:::-;:45;;28838:68;;;;-1:-1:-1;;;28838:68:0;;21657:2:1;28838:68:0;;;21639:21:1;21696:2;21676:18;;;21669:30;-1:-1:-1;;;21715:18:1;;;21708:40;21765:18;;28838:68:0;21455:334:1;28838:68:0;28941:20;;-1:-1:-1;;;28941:20:0;;;;28938:536;;;28999:9;-1:-1:-1;;;;;28985:24:0;:2;-1:-1:-1;;;;;28985:24:0;;;:49;;;;;29027:6;-1:-1:-1;;;;;29013:21:0;:2;-1:-1:-1;;;;;29013:21:0;;;28985:49;28981:478;;;29091:9;29066:35;;;;:24;:35;;;;;;29108:12;;29066:39;;29104:1;29066:39;:::i;:::-;:54;29058:81;;;;-1:-1:-1;;;29058:81:0;;21996:2:1;29058:81:0;;;21978:21:1;22035:2;22015:18;;;22008:30;-1:-1:-1;;;22054:18:1;;;22047:44;22108:18;;29058:81:0;21794:338:1;29058:81:0;-1:-1:-1;;;;;29162:28:0;;;;;;;:24;:28;;;;;;29193:12;29162:43;;;;29253:9;29228:35;;;;:50;29320:6;29304:23;;;;;;29301:139;;29363:9;-1:-1:-1;;;;;29363:15:0;;;29355:61;;;;-1:-1:-1;;;29355:61:0;;22339:2:1;29355:61:0;;;22321:21:1;22378:2;22358:18;;;22351:30;22417:34;22397:18;;;22390:62;-1:-1:-1;;;22468:18:1;;;22461:31;22509:19;;29355:61:0;22137:397:1;29355:61:0;28191:1296;;;28097:1399;;;:::o;14003:705::-;-1:-1:-1;;;;;14100:18:0;;14092:68;;;;-1:-1:-1;;;14092:68:0;;22741:2:1;14092:68:0;;;22723:21:1;22780:2;22760:18;;;22753:30;22819:34;22799:18;;;22792:62;-1:-1:-1;;;22870:18:1;;;22863:35;22915:19;;14092:68:0;22539:401:1;14092:68:0;-1:-1:-1;;;;;14179:16:0;;14171:64;;;;-1:-1:-1;;;14171:64:0;;23147:2:1;14171:64:0;;;23129:21:1;23186:2;23166:18;;;23159:30;23225:34;23205:18;;;23198:62;-1:-1:-1;;;23276:18:1;;;23269:33;23319:19;;14171:64:0;22945:399:1;14171:64:0;-1:-1:-1;;;;;14270:15:0;;14248:19;14270:15;;;;;;;;;;;14304:21;;;;14296:72;;;;-1:-1:-1;;;14296:72:0;;23551:2:1;14296:72:0;;;23533:21:1;23590:2;23570:18;;;23563:30;23629:34;23609:18;;;23602:62;-1:-1:-1;;;23680:18:1;;;23673:36;23726:19;;14296:72:0;23349:402:1;14296:72:0;-1:-1:-1;;;;;14404:15:0;;;:9;:15;;;;;;;;;;;14422:20;;;14404:38;;14622:13;;;;;;;;;;:23;;;;;;14674:26;;1676:25:1;;;14622:13:0;;14674:26;;1649:18:1;14674:26:0;;;;;;;14081:627;14003:705;;;:::o;17544:229::-;17681:12;17713:52;17735:6;17743:4;17749:1;17752:12;17713:21;:52::i;:::-;17706:59;17544:229;-1:-1:-1;;;;17544:229:0:o;31458:1719::-;31547:4;31503:23;12439:18;;;;;;;;;;;31564:50;;;;;;;;31602:12;31564:50;-1:-1:-1;;;;;31564:50:0;;;;;;-1:-1:-1;;;31564:50:0;;;;;;;;;;-1:-1:-1;;;31564:50:0;;;;;;;;;;;-1:-1:-1;;;31564:50:0;;;;;;;;;;;31503;;-1:-1:-1;31564:50:0;;-1:-1:-1;;31564:50:0;31653:71;;;:::i;:::-;:102;;;;:::i;:::-;-1:-1:-1;;;;;31625:130:0;;-1:-1:-1;31779:20:0;;;:46;;-1:-1:-1;31803:22:0;;31779:46;31776:60;;;31828:7;;;31458:1719::o;31776:60::-;31869:15;;:20;;31887:2;31869:20;:::i;:::-;31851:15;:38;31848:107;;;31923:15;;:20;;31941:2;31923:20;:::i;:::-;31905:38;;31848:107;31970:34;;;;-1:-1:-1;;;;;31970:38:0;;31967:407;;32024:23;32105:17;32068:15;:34;;;-1:-1:-1;;;;;32050:52:0;:15;:52;;;;:::i;:::-;:72;;;;:::i;:::-;32024:98;;32137:55;32161:4;32168:6;32176:15;32137;:55::i;:::-;32219:6;-1:-1:-1;;;;;32211:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32207:37;32258:34;32277:15;32258:34;;:::i;:::-;;;32328:15;:34;;;-1:-1:-1;;;;;32307:55:0;;;;;;:::i;:::-;;;32009:365;31967:407;32389:19;;32386:555;;32426:33;32443:15;32426:16;:33::i;:::-;32579:28;;;;32509:21;;32488:18;;-1:-1:-1;;;;;32579:32:0;;32576:175;;32644:10;;32680:28;;;;-1:-1:-1;;;;;32644:10:0;;;;32711:17;;32667:41;;-1:-1:-1;;;;;32667:41:0;:10;:41;:::i;:::-;:61;;;;:::i;:::-;32644:89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32631:102:0;;-1:-1:-1;;32576:175:0;32780:21;;-1:-1:-1;32821:14:0;;32818:112;;32868:16;;:44;;-1:-1:-1;;;;;32868:16:0;;;;32897:10;;32868:44;;;;32897:10;32868:16;:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32855:57:0;;-1:-1:-1;;32818:112:0;32409:532;;32386:555;-1:-1:-1;32990:1:0;32953:34;;;:38;;;33002;;;33051:28;;;:32;33096:12;:30;;;;;;;;;-1:-1:-1;;;33096:30:0;-1:-1:-1;;;;;;33096:30:0;;;;;;;;;-1:-1:-1;33157:12:0;33137:17;:32;31458:1719::o;18049:455::-;18219:12;18277:5;18252:21;:30;;18244:81;;;;-1:-1:-1;;;18244:81:0;;23958:2:1;18244:81:0;;;23940:21:1;23997:2;23977:18;;;23970:30;24036:34;24016:18;;;24009:62;-1:-1:-1;;;24087:18:1;;;24080:36;24133:19;;18244:81:0;23756:402:1;18244:81:0;18337:12;18351:23;18378:6;-1:-1:-1;;;;;18378:11:0;18397:5;18404:4;18378:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18336:73;;;;18427:69;18454:6;18462:7;18471:10;18483:12;18427:26;:69::i;:::-;18420:76;18049:455;-1:-1:-1;;;;;;;18049:455:0:o;31078:372::-;31167:16;;;31181:1;31167:16;;;;;;;;31143:21;;31167:16;;;;;;;;;;-1:-1:-1;31167:16:0;31143:40;;31212:4;31194;31199:1;31194:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;31194:23:0;;;-1:-1:-1;;;;;31194:23:0;;;;;31238:4;31228;31233:1;31228:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;31228:14:0;;;:7;;;;;;;;;:14;31255:187;;-1:-1:-1;;;31255:187:0;;:9;:60;;;;;;:187;;31330:8;;31353:1;;31369:4;;31396;;31416:15;;31255:187;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19608:644;19793:12;19822:7;19818:427;;;19850:10;:17;19871:1;19850:22;19846:290;;-1:-1:-1;;;;;16985:19:0;;;20060:60;;;;-1:-1:-1;;;20060:60:0;;25635:2:1;20060:60:0;;;25617:21:1;25674:2;25654:18;;;25647:30;25713:31;25693:18;;;25686:59;25762:18;;20060:60:0;25433:353:1;20060:60:0;-1:-1:-1;20157:10:0;20150:17;;19818:427;20200:33;20208:10;20220:12;20734:17;;:21;20730:388;;20966:10;20960:17;21023:15;21010:10;21006:2;21002:19;20995:44;20730:388;21093:12;21086:20;;-1:-1:-1;;;21086:20:0;;;;;;;;:::i;14:173:1:-;82:20;;-1:-1:-1;;;;;131:31:1;;121:42;;111:70;;177:1;174;167:12;111:70;14:173;;;:::o;192:186::-;251:6;304:2;292:9;283:7;279:23;275:32;272:52;;;320:1;317;310:12;272:52;343:29;362:9;343:29;:::i;:::-;333:39;192:186;-1:-1:-1;;;192:186:1:o;383:418::-;532:2;521:9;514:21;495:4;564:6;558:13;607:6;602:2;591:9;587:18;580:34;666:6;661:2;653:6;649:15;644:2;633:9;629:18;623:50;722:1;717:2;708:6;697:9;693:22;689:31;682:42;792:2;785;781:7;776:2;768:6;764:15;760:29;749:9;745:45;741:54;733:62;;;383:418;;;;:::o;1033:300::-;1101:6;1109;1162:2;1150:9;1141:7;1137:23;1133:32;1130:52;;;1178:1;1175;1168:12;1130:52;1201:29;1220:9;1201:29;:::i;:::-;1191:39;1299:2;1284:18;;;;1271:32;;-1:-1:-1;;;1033:300:1:o;1712:226::-;1771:6;1824:2;1812:9;1803:7;1799:23;1795:32;1792:52;;;1840:1;1837;1830:12;1792:52;-1:-1:-1;1885:23:1;;1712:226;-1:-1:-1;1712:226:1:o;1943:374::-;2020:6;2028;2036;2089:2;2077:9;2068:7;2064:23;2060:32;2057:52;;;2105:1;2102;2095:12;2057:52;2128:29;2147:9;2128:29;:::i;:::-;2118:39;;2176:38;2210:2;2199:9;2195:18;2176:38;:::i;:::-;1943:374;;2166:48;;-1:-1:-1;;;2283:2:1;2268:18;;;;2255:32;;1943:374::o;2322:171::-;2389:20;;-1:-1:-1;;;;;2438:30:1;;2428:41;;2418:69;;2483:1;2480;2473:12;2498:328;2572:6;2580;2588;2641:2;2629:9;2620:7;2616:23;2612:32;2609:52;;;2657:1;2654;2647:12;2609:52;2680:28;2698:9;2680:28;:::i;:::-;2670:38;;2727:37;2760:2;2749:9;2745:18;2727:37;:::i;:::-;2717:47;;2783:37;2816:2;2805:9;2801:18;2783:37;:::i;:::-;2773:47;;2498:328;;;;;:::o;3020:127::-;3081:10;3076:3;3072:20;3069:1;3062:31;3112:4;3109:1;3102:15;3136:4;3133:1;3126:15;3152:1127;3236:6;3289:2;3277:9;3268:7;3264:23;3260:32;3257:52;;;3305:1;3302;3295:12;3257:52;3345:9;3332:23;-1:-1:-1;;;;;3370:6:1;3367:30;3364:50;;;3410:1;3407;3400:12;3364:50;3433:22;;3486:4;3478:13;;3474:27;-1:-1:-1;3464:55:1;;3515:1;3512;3505:12;3464:55;3555:2;3542:16;-1:-1:-1;;;;;3573:6:1;3570:30;3567:56;;;3603:18;;:::i;:::-;3649:6;3646:1;3642:14;3685:2;3679:9;3748:2;3744:7;3739:2;3735;3731:11;3727:25;3719:6;3715:38;3819:6;3807:10;3804:22;-1:-1:-1;;;;;3771:10:1;3768:34;3765:62;3762:88;;;3830:18;;:::i;:::-;3866:2;3859:22;3916;;;3966:2;3996:11;;;3992:20;;;3916:22;3954:15;;4024:19;;;4021:39;;;4056:1;4053;4046:12;4021:39;4088:2;4084;4080:11;4069:22;;4100:148;4116:6;4111:3;4108:15;4100:148;;;4182:23;4201:3;4182:23;:::i;:::-;4170:36;;4235:2;4133:12;;;;4226;4100:148;;;-1:-1:-1;4267:6:1;3152:1127;-1:-1:-1;;;;;;3152:1127:1:o;4284:301::-;4343:6;4396:2;4384:9;4375:7;4371:23;4367:32;4364:52;;;4412:1;4409;4402:12;4364:52;4451:9;4438:23;-1:-1:-1;;;;;4494:5:1;4490:46;4483:5;4480:57;4470:85;;4551:1;4548;4541:12;5978:118;6064:5;6057:13;6050:21;6043:5;6040:32;6030:60;;6086:1;6083;6076:12;6030:60;5978:118;:::o;6101:315::-;6166:6;6174;6227:2;6215:9;6206:7;6202:23;6198:32;6195:52;;;6243:1;6240;6233:12;6195:52;6266:29;6285:9;6266:29;:::i;:::-;6256:39;;6345:2;6334:9;6330:18;6317:32;6358:28;6380:5;6358:28;:::i;:::-;6405:5;6395:15;;;6101:315;;;;;:::o;6421:260::-;6489:6;6497;6550:2;6538:9;6529:7;6525:23;6521:32;6518:52;;;6566:1;6563;6556:12;6518:52;6589:29;6608:9;6589:29;:::i;:::-;6579:39;;6637:38;6671:2;6660:9;6656:18;6637:38;:::i;:::-;6627:48;;6421:260;;;;;:::o;7711:184::-;7781:6;7834:2;7822:9;7813:7;7809:23;7805:32;7802:52;;;7850:1;7847;7840:12;7802:52;-1:-1:-1;7873:16:1;;7711:184;-1:-1:-1;7711:184:1:o;7900:380::-;7979:1;7975:12;;;;8022;;;8043:61;;8097:4;8089:6;8085:17;8075:27;;8043:61;8150:2;8142:6;8139:14;8119:18;8116:38;8113:161;;8196:10;8191:3;8187:20;8184:1;8177:31;8231:4;8228:1;8221:15;8259:4;8256:1;8249:15;8113:161;;7900:380;;;:::o;8285:338::-;8487:2;8469:21;;;8526:2;8506:18;;;8499:30;-1:-1:-1;;;8560:2:1;8545:18;;8538:44;8614:2;8599:18;;8285:338::o;8933:356::-;9135:2;9117:21;;;9154:18;;;9147:30;9213:34;9208:2;9193:18;;9186:62;9280:2;9265:18;;8933:356::o;9294:127::-;9355:10;9350:3;9346:20;9343:1;9336:31;9386:4;9383:1;9376:15;9410:4;9407:1;9400:15;9426:168;9499:9;;;9530;;9547:15;;;9541:22;;9527:37;9517:71;;9568:18;;:::i;9599:127::-;9660:10;9655:3;9651:20;9648:1;9641:31;9691:4;9688:1;9681:15;9715:4;9712:1;9705:15;9731:120;9771:1;9797;9787:35;;9802:18;;:::i;:::-;-1:-1:-1;9836:9:1;;9731:120::o;11040:191::-;-1:-1:-1;;;;;11108:26:1;;;11136;;;11104:59;;11175:27;;11172:53;;;11205:18;;:::i;11789:127::-;11850:10;11845:3;11841:20;11838:1;11831:31;11881:4;11878:1;11871:15;11905:4;11902:1;11895:15;11921:375;12009:1;12027:5;12041:249;12062:1;12052:8;12049:15;12041:249;;;12112:4;12107:3;12103:14;12097:4;12094:24;12091:50;;;12121:18;;:::i;:::-;12171:1;12161:8;12157:16;12154:49;;;12185:16;;;;12154:49;12268:1;12264:16;;;;;12224:15;;12041:249;;;11921:375;;;;;;:::o;12301:902::-;12350:5;12380:8;12370:80;;-1:-1:-1;12421:1:1;12435:5;;12370:80;12469:4;12459:76;;-1:-1:-1;12506:1:1;12520:5;;12459:76;12551:4;12569:1;12564:59;;;;12637:1;12632:174;;;;12544:262;;12564:59;12594:1;12585:10;;12608:5;;;12632:174;12669:3;12659:8;12656:17;12653:43;;;12676:18;;:::i;:::-;-1:-1:-1;;12732:1:1;12718:16;;12791:5;;12544:262;;12890:2;12880:8;12877:16;12871:3;12865:4;12862:13;12858:36;12852:2;12842:8;12839:16;12834:2;12828:4;12825:12;12821:35;12818:77;12815:203;;;-1:-1:-1;12927:19:1;;;13003:5;;12815:203;13050:42;-1:-1:-1;;13075:8:1;13069:4;13050:42;:::i;:::-;13128:6;13124:1;13120:6;13116:19;13107:7;13104:32;13101:58;;;13139:18;;:::i;:::-;13177:20;;12301:902;-1:-1:-1;;;12301:902:1:o;13208:140::-;13266:5;13295:47;13336:4;13326:8;13322:19;13316:4;13295:47;:::i;13911:125::-;13976:9;;;13997:10;;;13994:36;;;14010:18;;:::i;19564:128::-;19631:9;;;19652:11;;;19649:37;;;19666:18;;:::i;19697:245::-;19764:6;19817:2;19805:9;19796:7;19792:23;19788:32;19785:52;;;19833:1;19830;19823:12;19785:52;19865:9;19859:16;19884:28;19906:5;19884:28;:::i;20358:317::-;-1:-1:-1;;;;;20443:42:1;;;20487;;;20439:91;20550:52;;;;20621:24;;;20611:58;;20649:18;;:::i;:::-;20611:58;20358:317;;;;:::o;20680:227::-;20720:1;-1:-1:-1;;;;;20751:1:1;20747:42;20808:3;20798:37;;20815:18;;:::i;:::-;20897:3;-1:-1:-1;;;;;20857:1:1;20853:42;20849:52;20844:57;;;20680:227;;;;:::o;20912:203::-;-1:-1:-1;;;;;20980:30:1;;;21012;;;20976:67;;21055:31;;21052:57;;;21089:18;;:::i;24163:301::-;24292:3;24330:6;24324:13;24376:6;24369:4;24361:6;24357:17;24352:3;24346:37;24438:1;24402:16;;24427:13;;;-1:-1:-1;24402:16:1;24163:301;-1:-1:-1;24163:301:1:o;24469:959::-;24731:4;24779:3;24768:9;24764:19;24810:6;24799:9;24792:25;24853:6;24848:2;24837:9;24833:18;24826:34;24896:3;24891:2;24880:9;24876:18;24869:31;24920:6;24955;24949:13;24986:6;24978;24971:22;25024:3;25013:9;25009:19;25002:26;;25063:2;25055:6;25051:15;25037:29;;25084:1;25094:195;25108:6;25105:1;25102:13;25094:195;;;25173:13;;-1:-1:-1;;;;;25169:39:1;25157:52;;25238:2;25264:15;;;;25229:12;;;;25205:1;25123:9;25094:195;;;-1:-1:-1;;;;;;;25345:32:1;;;;25340:2;25325:18;;25318:60;-1:-1:-1;;25409:3:1;25394:19;25387:35;25306:3;24469:959;-1:-1:-1;;;24469:959:1:o

Swarm Source

ipfs://fc98de77e0bc9e2401558affd07a98a90b92c2e37286b38001f863d4f3166833

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

OVERVIEW

QuLabs combines cryptocurrency with traditional investment strategies to unlock generational wealth opportunities.

Validator Index Block Amount
View All Withdrawals

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

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