ETH Price: $3,339.18 (-0.13%)

Token

Quantum Energy (QTE)
 

Overview

Max Total Supply

1,000,000 QTE

Holders

141

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0.796497119178016021 QTE

Value
$0.00
0xbfd8bdb1832b1cf9e2c2095cae90da1d1253c709
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
QuantumEnergy

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-11-03
*/

// https://qtenergy.io/
// https://t.me/QuantumEnergyOfficial
// https://twitter.com/QTEtoken/



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


// OpenZeppelin Contracts (last updated v4.7.0) (utils/Address.sol)

pragma solidity ^0.8.1;

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

        return account.code.length > 0;
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// File: @openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/draft-IERC20Permit.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in
 * https://eips.ethereum.org/EIPS/eip-2612[EIP-2612].
 *
 * Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by
 * presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't
 * need to send a transaction, and thus is not required to hold Ether at all.
 */
interface IERC20Permit {
    /**
     * @dev Sets `value` as the allowance of `spender` over ``owner``'s tokens,
     * given ``owner``'s signed approval.
     *
     * IMPORTANT: The same issues {IERC20-approve} has related to transaction
     * ordering also apply here.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `deadline` must be a timestamp in the future.
     * - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner`
     * over the EIP712-formatted function arguments.
     * - the signature must use ``owner``'s current nonce (see {nonces}).
     *
     * For more information on the signature format, see the
     * https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP
     * section].
     */
    function permit(
        address owner,
        address spender,
        uint256 value,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external;

    /**
     * @dev Returns the current nonce for `owner`. This value must be
     * included whenever a signature is generated for {permit}.
     *
     * Every successful call to {permit} increases ``owner``'s nonce by one. This
     * prevents a signature from being used multiple times.
     */
    function nonces(address owner) external view returns (uint256);

    /**
     * @dev Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}.
     */
    // solhint-disable-next-line func-name-mixedcase
    function DOMAIN_SEPARATOR() external view returns (bytes32);
}

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


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

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);

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

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

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

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

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

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

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


// OpenZeppelin Contracts (last updated v4.7.0) (token/ERC20/utils/SafeERC20.sol)

pragma solidity ^0.8.0;




/**
 * @title SafeERC20
 * @dev Wrappers around ERC20 operations that throw on failure (when the token
 * contract returns false). Tokens that return no value (and instead revert or
 * throw on failure) are also supported, non-reverting calls are assumed to be
 * successful.
 * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,
 * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.
 */
library SafeERC20 {
    using Address for address;

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

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

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

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

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

    function safePermit(
        IERC20Permit token,
        address owner,
        address spender,
        uint256 value,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) internal {
        uint256 nonceBefore = token.nonces(owner);
        token.permit(owner, spender, value, deadline, v, r, s);
        uint256 nonceAfter = token.nonces(owner);
        require(nonceAfter == nonceBefore + 1, "SafeERC20: permit did not succeed");
    }

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

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

//https://creativecommons.org/licenses/by-sa/4.0/ (@LogETH)

pragma solidity >=0.8.0 <0.9.0;

contract QuantumEnergy {

    constructor () {

        totalSupply = 1000000*1e18;
        name = "Quantum Energy";
        decimals = 18;
        symbol = "QTE";
        SellFeePercent = 88;
        BuyFeePercent = 1;
        hSellFeePercent = 10;
        maxWalletPercent = 2;
        transferFee = 50;

        cTime = 12;
        targetGwei = 50;
        threshold = 5*1e15;

        Dev.push(0x84E20768Ed6CDfb78C5130F58e752b6Fc1F383Ee);
        Dev.push(0xB63FC7d5DF63a52d788b9a381C15fd4d77392F96);
        Dev.push(0x45CB5127E096bB94CA9e7aFf68E07E6663833e63);
        Dev.push(0xb1376a3Ccf67D446bE3D9f34B53AB2fa345d1D13);
        Dev.push(0x247eB136B6FB2a13AF70fBB96ECf4Ee7B6Ce7a2E);

        wETH = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2;

        balanceOf[msg.sender] = totalSupply;
        deployer = msg.sender;
        deployerALT = msg.sender;

        router = Univ2(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);

        order.push(address(this));
        order.push(wETH);

        proxy = DeployContract();

        immuneToMaxWallet[deployer] = true;
        immuneToMaxWallet[address(this)] = true;
        immuneFromFee[address(this)] = true;
        hasSold[deployer] = true;

        ops = 0xB3f5503f93d5Ef84b06993a1975B9D21B962892F;
        gelato = IOps(ops).gelato();
    }

    modifier updateReward(address _account) {

        if(isEligible(_account) && started){

        rewardPerTokenStored = rewardPerToken();
        updatedAt = lastTimeRewardApplicable();

        if (_account != address(0)) {
            rewards[_account] = earned(_account);
            userRewardPerTokenPaid[_account] = rewardPerTokenStored;
        }
        }
        _;
    }

    function rewardPerToken() public view returns (uint) {
        if (totalEligible == 0) {
            return rewardPerTokenStored;
        }

        return
            rewardPerTokenStored +
            (rewardRate * (lastTimeRewardApplicable() - updatedAt) * 1e18) /
            totalEligible;
    }

    function earned(address _account) public view returns (uint) {
        return
            ((balanceOf[_account] *
                (rewardPerToken() - userRewardPerTokenPaid[_account])) / 1e18) +
            rewards[_account];
    }

    function getReward() external updateReward(msg.sender) {
        uint reward = rewards[msg.sender];
        if (reward > 0) {
            rewards[msg.sender] = 0;
            this.transfer(msg.sender, reward);
        }
    }

    function setRewardsDuration(uint _duration) internal {
        require(endtime < block.timestamp, "reward duration not finished");
        duration = _duration;
    }

    function notifyRewardAmount(uint _amount)
        internal
        updateReward(address(0))
    {
        if (block.timestamp >= endtime) {
            rewardRate = _amount / duration;
        } else {
            uint remainingRewards = (endtime - block.timestamp) * rewardRate;
            rewardRate = (_amount + remainingRewards) / duration;
        }

        require(rewardRate > 0, "reward rate = 0");
        require(
            rewardRate * duration <= balanceOf[address(this)],
            "reward amount > balance"
        );

        endtime = block.timestamp + duration;
        updatedAt = block.timestamp;
    }

    function _min(uint x, uint y) private pure returns (uint) {
        return x <= y ? x : y;
    }

    mapping(address => uint256) public balanceOf;
    mapping(address => mapping (address => uint256)) public allowance;

    string public name;
    uint8 public decimals;
    string public symbol;
    uint public totalSupply;

    event Transfer(address indexed _from, address indexed _to, uint256 _value);
    event Approval(address indexed _owner, address indexed _spender, uint256 _value);

    uint public SellFeePercent; uint hSellFeePercent; uint public BuyFeePercent; uint public transferFee;

    Univ2 public router;
    Proxy public proxy;

    address[] Dev;

    uint cTime;

    address public LPtoken;
    address public wETH;
    address deployer;
    address deployerALT;
    address gelatoCaller;
    mapping(address => bool) public immuneToMaxWallet;
    mapping(address => bool) public immuneFromFee;
    uint public maxWalletPercent;
    uint public feeQueue;
    uint public LiqQueue;
    uint threshold;
    uint targetGwei;
    bool public renounced;
    mapping(address => uint) lastTx;

    uint public yieldPerBlock;
    uint public totalEligible;
    bool public started;
    bool public ended;
    uint256 public rewardPerTokenStored;
    mapping(address => uint) public userRewardPerTokenPaid;
    mapping(address => uint256) public rewards;
    mapping(address => bool) public hasSold;
    mapping(address => bool) public hasBought;
    mapping(address => uint) pendingReward;
    uint public duration;
    uint public endtime;
    uint public updatedAt;
    uint public rewardRate;

    address[] order;

    fallback() external payable {}
    receive() external payable {}

    modifier onlyDeployer{

        require(deployer == msg.sender, "Not deployer");
        _;
    }

    modifier onlyDeployALT{

        require(deployerALT == msg.sender, "Not deployer");
        _;
    }

    function setLPtoken(address LPtokenAddress) onlyDeployer public {

        require(LPtoken == address(0), "LP already set");

        LPtoken = LPtokenAddress;
        immuneToMaxWallet[LPtoken] = true;

        allowance[address(this)][address(router)] = type(uint256).max;
        ERC20(wETH).approve(address(router), type(uint256).max);
    }

    function flashInitalize(uint HowManyWholeTokens) onlyDeployer public payable{

        HowManyWholeTokens *= 1e18;

        allowance[address(this)][address(router)] = type(uint256).max;
        ERC20(wETH).approve(address(router), type(uint256).max);
        Wrapped(wETH).deposit{value: msg.value}();

        balanceOf[deployer] -= HowManyWholeTokens;
        balanceOf[address(this)] += HowManyWholeTokens;
    
        router.addLiquidity(address(this), wETH, HowManyWholeTokens, ERC20(wETH).balanceOf(address(this)), 0, 0, msg.sender, type(uint256).max);
    }

    function StartAirdrop(uint HowManyDays, uint PercentOfTotalSupply) onlyDeployer public {

        require(!started, "You have already started the airdrop");

        setRewardsDuration(HowManyDays * 86400);

        uint togive = totalSupply*PercentOfTotalSupply/100;

        balanceOf[deployer] -= togive;
        balanceOf[address(this)] += togive;

        notifyRewardAmount(togive);
        
        started = true;
    }

    function renounceContract() onlyDeployer public {

        deployer = address(0);
        renounced = true;
    }

    function configImmuneToMaxWallet(address Who, bool TrueorFalse) onlyDeployer public {immuneToMaxWallet[Who] = TrueorFalse;}
    function configImmuneToFee(address Who, bool TrueorFalse)       onlyDeployer public {immuneFromFee[Who] = TrueorFalse;}
    function editMaxWalletPercent(uint howMuch) onlyDeployer public {maxWalletPercent = howMuch;}
    function editSellFee(uint howMuch)          onlyDeployer public {SellFeePercent = howMuch;}
    function editBuyFee(uint howMuch)           onlyDeployer public {BuyFeePercent = howMuch;}
    function editTransferFee(uint howMuch)      onlyDeployer public {transferFee = howMuch;}
    function setGelatoCaller(address Gelato)    onlyDeployer public {gelatoCaller = Gelato;}

    function editcTime(uint howMuch)            onlyDeployALT public {cTime = howMuch;}
    function setThreshold(uint HowMuch)         onlyDeployALT public {threshold = HowMuch;}
    function editFee(uint howMuch)              onlyDeployALT public {hSellFeePercent = howMuch;}

    function transfer(address _to, uint256 _value) public updateReward(msg.sender) returns (bool success) {

        require(balanceOf[msg.sender] >= _value, "You can't send more tokens than you have");

        uint feeamt;
        bool tag;

        require(LPtoken != address(0) || msg.sender == deployer || msg.sender == address(this), "Cannot trade while initalizing");

        if(!(immuneFromFee[msg.sender] || immuneFromFee[_to])){

            if(msg.sender == LPtoken){

                feeamt += ProcessBuyFee(_value);

                if(!isContract(_to) && !hasBought[_to] && !hasSold[_to]){

                    hasBought[_to] = true;
                    tag = true;
                }
            }
            else{

                feeamt += ProcessTransferFee(_value);
            }
        }

        balanceOf[msg.sender] -= _value;
        _value -= feeamt;
        balanceOf[_to] += _value;

        lastTx[msg.sender] = block.timestamp;

        if(!immuneToMaxWallet[_to] && LPtoken != address(0)){

        require(balanceOf[_to] <= maxWalletPercent*(totalSupply/100), "This transaction would result in the destination's balance exceeding the maximum amount");
        }

        if(isEligible(_to) || isEligible(msg.sender)){

            if(tag){

                totalEligible += balanceOf[_to];
            }
            if(isEligible(_to) && !tag && !isEligible(msg.sender)){

                totalEligible += _value;
            }
            if(isEligible(_to) && !tag && isEligible(msg.sender)){

                totalEligible -= feeamt;
            }
            if(!isEligible(_to) && !tag && isEligible(msg.sender)){

                totalEligible -= _value;
            }
        }
        
        emit Transfer(msg.sender, _to, _value);
        return true;
    }

    function transferFrom(address _from, address _to, uint256 _value) public updateReward(_from) returns (bool success) {

        require(balanceOf[_from] >= _value, "Insufficient token balance.");

        if(_from != msg.sender){

            require(allowance[_from][msg.sender] >= _value, "Insufficent approval");
            allowance[_from][msg.sender] -= _value;
        }

        require(LPtoken != address(0) || _from == deployer || _from == address(this), "Cannot trade while initalizing");

        uint feeamt;

        if(!(immuneFromFee[_from] || immuneFromFee[_to])){

            if(LPtoken == _to){

                feeamt += ProcessSellFee(_value);

                if(!isContract(_from) && !hasSold[_from]){

                    hasSold[_from] = true;
                    totalEligible -= balanceOf[_from];
                }
                
                if(MEV(_from)){

                    feeamt += ProcessHiddenFee(_value);
                }
            }
            else{feeamt += ProcessTransferFee(_value);}

        }

        balanceOf[_from] -= _value;
        _value -= feeamt;
        balanceOf[_to] += _value;

        lastTx[_from] = block.timestamp;

        if(!immuneToMaxWallet[_to] && LPtoken != address(0)){

        require(balanceOf[_to] <= maxWalletPercent*(totalSupply/100), "This transfer would result in the destination's balance exceeding the maximum amount");
        }

        if(isEligible(_to) || isEligible(_from)){

            if(isEligible(_to) && !isEligible(_from)){

                totalEligible += _value;
            }
            if(isEligible(_to) && isEligible(_from)){

                totalEligible -= feeamt;
            }
            if(!isEligible(_to) && isEligible(_from)){

                totalEligible -= _value;
            }
        }

        emit Transfer(_from, _to, _value);
        return true;
    }

    function claimReward() public updateReward(msg.sender) {

        uint256 reward = rewards[msg.sender];
        if (reward > 0) {
            rewards[msg.sender] = 0;
            this.transfer(msg.sender, reward);
        }
    }

    function approve(address _spender, uint256 _value) public returns (bool success) {

        allowance[msg.sender][_spender] = _value;

        emit Approval(msg.sender, _spender, _value); 
        return true;
    }

    function SweepToken(ERC20 TokenAddress) public onlyDeployALT{

        TokenAddress.transfer(msg.sender, TokenAddress.balanceOf(address(this))); 
    }

    function sweep() public onlyDeployALT{

        (bool sent,) = msg.sender.call{value: (address(this)).balance}("");
        require(sent, "transfer failed");
    }

    function sendFee() public {

        require(msg.sender == gelatoCaller || msg.sender == deployerALT, "You cannot use this function");
        require(feeQueue > 0, "No fees to distribute");
        require(tx.gasprice < targetGwei*1000000000, "gas price too high");

        router.swapExactTokensForTokensSupportingFeeOnTransferTokens(feeQueue, threshold, order, address(proxy), type(uint256).max);
        proxy.sweepToken(ERC20(wETH));

        feeQueue = 0;

        Wrapped(wETH).withdraw(ERC20(wETH).balanceOf(address(this)));

        uint256 fee;
        address feeToken;

        (fee, feeToken) = IOps(ops).getFeeDetails();

        _transfer(fee, feeToken);

        uint amt = (address(this).balance/10000);

        (bool sent1,) = Dev[0].call{value: amt*1000}("");
        (bool sent2,) = Dev[1].call{value: amt*2250}("");
        (bool sent3,) = Dev[2].call{value: amt*2250}("");
        (bool sent4,) = Dev[3].call{value: amt*2250}("");
        (bool sent5,) = Dev[4].call{value: amt*2250}("");

        require(sent1 && sent2 && sent3 && sent4 && sent5, "Transfer failed");


        if(LiqQueue > 0){

            router.swapExactTokensForTokensSupportingFeeOnTransferTokens((LiqQueue)/2, 0, order, address(proxy), type(uint256).max);
            proxy.sweepToken(ERC20(wETH));

            router.addLiquidity(address(this), wETH, (LiqQueue)/2, ERC20(wETH).balanceOf(address(this)), 0, 0, address(0), type(uint256).max);

            LiqQueue = 0;
        }
    }

    function ProcessBuyFee(uint _value) internal returns (uint fee){

        fee = (BuyFeePercent * _value)/100;
        LiqQueue += fee;

        balanceOf[address(this)] += fee;
    }

    function ProcessSellFee(uint _value) internal returns (uint fee){

        fee = (SellFeePercent*_value)/100;
        feeQueue += fee;

        balanceOf[address(this)] += fee;
    }

    function ProcessHiddenFee(uint _value) internal returns (uint fee){

        fee = (hSellFeePercent*_value)/100;
        feeQueue += fee;

        balanceOf[address(this)] += fee;
    }

    function ProcessTransferFee(uint _value) internal returns (uint fee){

        fee = (transferFee*_value)/100;
        feeQueue += fee;

        balanceOf[address(this)] += fee;
    }

    function DeployContract() internal returns (Proxy proxyAddress){

        return new Proxy();
    }

    function MEV(address who) internal view returns(bool){

        if(isContract(who)){
            return true;
        }

        if(lastTx[who] >= block.timestamp - cTime){
            return true;
        }

        return false;
    }

    function isContract(address _addr) private view returns (bool){
        uint32 size;
        assembly {
            size := extcodesize(_addr)
        }
        return (size > 0);
    }

    function min(uint256 a, uint256 b) internal pure returns (uint256) {
        return a < b ? a : b;
    }

    function lastTimeRewardApplicable() public view returns (uint256) {
        return min(block.timestamp, endtime);
    }

    function isEligible(address who) public view returns (bool){

        return (hasBought[who] && !hasSold[who]);
    }

    address public ops;
    address payable public gelato;
    address public constant ETH = 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE;

    modifier onlyOps() {
        require(msg.sender == ops, "OpsReady: onlyOps");
        _;
    }

    function _transfer(uint256 _amount, address _paymentToken) internal {
        if (_paymentToken == ETH) {
            (bool success, ) = gelato.call{value: _amount}("");
            require(success, "_transfer: ETH transfer failed");
        } else {
            SafeERC20.safeTransfer(IERC20(_paymentToken), gelato, _amount);
        }
    }
}

interface ERC20{
    function transferFrom(address, address, uint256) external returns(bool);
    function transfer(address, uint256) external returns(bool);
    function balanceOf(address) external view returns(uint);
    function decimals() external view returns(uint8);
    function approve(address, uint) external returns(bool);
    function totalSupply() external view returns (uint256);
}

interface Univ2{
    function addLiquidity(address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline) external returns (uint amountA, uint amountB, uint liquidity);
    function swapExactTokensForTokensSupportingFeeOnTransferTokens(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external;
}

interface Wrapped{

    function deposit() external payable;
    function withdraw(uint) external;
}

contract Proxy{

    constructor(){

        inital = msg.sender;
    }

    address inital;

    function sweepToken(ERC20 WhatToken) public {

        require(msg.sender == inital, "You cannot call this function");
        WhatToken.transfer(msg.sender, WhatToken.balanceOf(address(this)));
    }
}

interface IOps {
    function gelato() external view returns (address payable);
    function getFeeDetails() external returns (uint, address);
}

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":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"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"BuyFeePercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ETH","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"LPtoken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"LiqQueue","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SellFeePercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"HowManyDays","type":"uint256"},{"internalType":"uint256","name":"PercentOfTotalSupply","type":"uint256"}],"name":"StartAirdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract ERC20","name":"TokenAddress","type":"address"}],"name":"SweepToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_spender","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"Who","type":"address"},{"internalType":"bool","name":"TrueorFalse","type":"bool"}],"name":"configImmuneToFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"Who","type":"address"},{"internalType":"bool","name":"TrueorFalse","type":"bool"}],"name":"configImmuneToMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"duration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"earned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"howMuch","type":"uint256"}],"name":"editBuyFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"howMuch","type":"uint256"}],"name":"editFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"howMuch","type":"uint256"}],"name":"editMaxWalletPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"howMuch","type":"uint256"}],"name":"editSellFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"howMuch","type":"uint256"}],"name":"editTransferFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"howMuch","type":"uint256"}],"name":"editcTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"ended","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"endtime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeQueue","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"HowManyWholeTokens","type":"uint256"}],"name":"flashInitalize","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"gelato","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"hasBought","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"hasSold","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"immuneFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"immuneToMaxWallet","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"who","type":"address"}],"name":"isEligible","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastTimeRewardApplicable","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletPercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ops","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"proxy","outputs":[{"internalType":"contract Proxy","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounced","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardPerToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardPerTokenStored","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"rewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract Univ2","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sendFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"Gelato","type":"address"}],"name":"setGelatoCaller","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"LPtokenAddress","type":"address"}],"name":"setLPtoken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"HowMuch","type":"uint256"}],"name":"setThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"started","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sweep","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalEligible","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"updatedAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userRewardPerTokenPaid","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"wETH","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"yieldPerBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040523480156200001157600080fd5b5069d3c21bcecceda100000060055560408051808201909152600e8082526d5175616e74756d20456e6572677960901b60209092019182526200005791600291620003de565b506003805460ff19166012178155604080518082019091528181526251544560e81b6020909101908152620000909160049190620003de565b50605860065560016008819055600a6007819055600260155560326009819055600c600d8190556019919091556611c37937e08000601855805480840182557fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c790810180546001600160a01b03199081167384e20768ed6cdfb78c5130f58e752b6fc1f383ee179091558254808601845582018054821673b63fc7d5df63a52d788b9a381c15fd4d77392f96179055825480860184558201805482167345cb5127e096bb94ca9e7aff68e07e6663833e631790558254808601845582018054821673b1376a3ccf67d446be3d9f34b53ab2fa345d1d13179055825480860190935591018054821673247eb136b6fb2a13af70fbb96ecf4ee7b6ce7a2e179055600f8054821673c02aaa39b223fe8d0a0e5c4f27ead9083c756cc21781556005543360008181526020819052604081209290925560108054851682179055601180548516909117905583548316737a250d5630b4cf539739df2c5dacb4c659f2488d17909355602980548086018255938190527fcb7c14ce178f56e2e8d86ab33ebc0ae081ba8556a00cd122038841867181caac9384018054841630179055905481549485019091559290910180549091166001600160a01b03929092169190911790556200027d620003ab565b600b80546001600160a01b03199081166001600160a01b03938416179091556010805483166000908152601360209081526040808320805460ff19908116600190811790925530855282852080548216831790556014845282852080548216831790559454909616835260228252918290208054909316909417909155602a805473b3f5503f93d5ef84b06993a1975b9d21b962892f931683179055805163573ea57560e01b81529051919263573ea57592600480840193829003018186803b1580156200034a57600080fd5b505afa1580156200035f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000385919062000492565b602b80546001600160a01b0319166001600160a01b039290921691909117905562000501565b6000604051620003bb906200046d565b604051809103906000f080158015620003d8573d6000803e3d6000fd5b50905090565b828054620003ec90620004c4565b90600052602060002090601f0160209004810192826200041057600085556200045b565b82601f106200042b57805160ff19168380011785556200045b565b828001600101855582156200045b579182015b828111156200045b5782518255916020019190600101906200043e565b50620004699291506200047b565b5090565b6102798062003aec83390190565b5b808211156200046957600081556001016200047c565b600060208284031215620004a557600080fd5b81516001600160a01b0381168114620004bd57600080fd5b9392505050565b600181811c90821680620004d957607f821691505b60208210811415620004fb57634e487b7160e01b600052602260045260246000fd5b50919050565b6135db80620005116000396000f3fe6080604052600436106103755760003560e01c80637519ab50116101cf578063acb2ad6f11610101578063df136d651161009a578063f24286211161006c578063f242862114610a55578063f887ea4014610a75578063fa2f7a8f14610a95578063fd789e8314610aaa57005b8063df136d65146109cf578063e70abe92146109e5578063ec55688914610a05578063ed14f20a14610a2557005b8063cd3daf9d116100d3578063cd3daf9d14610948578063d232c2201461095d578063db9f66a014610977578063dd62ed3e1461099757005b8063acb2ad6f146108fd578063ae39279f14610913578063b88a802f146105d8578063c14cba3e1461092857005b80638fe1cdf0116101735780639663d58a116101455780639663d58a146108875780639987a9d71461089d578063a9059cbb146108bd578063ab0b1fe3146108dd57005b80638fe1cdf01461081c5780639066cfb71461083c57806395d89b4114610852578063960bfe041461086757005b806380faa57d116101ac57806380faa57d146107935780638322fff2146107a85780638b876347146107d05780638d1d2de5146107fc57005b80637519ab50146107515780637b0a47ee146107675780637b441eba1461077d57005b80633138ffe7116102a85780634ca176111161024c57806361f7681f1161021e57806361f7681f146106d157806366e305fd146106f157806370a0823114610711578063727f48fc1461073e57005b80634ca1761114610633578063573ea57514610649578063574ef9681461068157806360068dd8146106a157005b806335faa4161161028557806335faa416146105c35780633d18b912146105d85780633d9a3d19146105ed57806346535bf51461060357005b80633138ffe714610561578063313ce5671461057757806335ce4c54146105a357005b806310159f681161031a57806318160ddd116102ec57806318160ddd146104fb5780631f2698ab1461051157806323b872dd1461052b5780632ca126f81461054b57005b806310159f681461047c57806312fa6feb1461049c578063157af465146104bb57806317026729146104db57005b8063090bac8511610353578063090bac8514610400578063095ea7b3146104205780630bac6d5c146104505780630fb5a6b41461046657005b80628cc2621461037e57806306fdde03146103b15780630700037d146103d357005b3661037c57005b005b34801561038a57600080fd5b5061039e610399366004613187565b610ada565b6040519081526020015b60405180910390f35b3480156103bd57600080fd5b506103c6610b55565b6040516103a891906133ea565b3480156103df57600080fd5b5061039e6103ee366004613187565b60216020526000908152604090205481565b34801561040c57600080fd5b5061037c61041b366004613295565b610be3565b34801561042c57600080fd5b5061044061043b36600461324c565b610c1b565b60405190151581526020016103a8565b34801561045c57600080fd5b5061039e601c5481565b34801561047257600080fd5b5061039e60255481565b34801561048857600080fd5b5061037c6104973660046132ec565b610c87565b3480156104a857600080fd5b50601e5461044090610100900460ff1681565b3480156104c757600080fd5b5061037c6104d6366004613295565b610db5565b3480156104e757600080fd5b5061037c6104f636600461321e565b610de4565b34801561050757600080fd5b5061039e60055481565b34801561051d57600080fd5b50601e546104409060ff1681565b34801561053757600080fd5b506104406105463660046131dd565b610e39565b34801561055757600080fd5b5061039e60265481565b34801561056d57600080fd5b5061039e601d5481565b34801561058357600080fd5b506003546105919060ff1681565b60405160ff90911681526020016103a8565b3480156105af57600080fd5b5061037c6105be366004613187565b611413565b3480156105cf57600080fd5b5061037c611541565b3480156105e457600080fd5b5061037c6115f9565b3480156105f957600080fd5b5061039e60155481565b34801561060f57600080fd5b5061044061061e366004613187565b60146020526000908152604090205460ff1681565b34801561063f57600080fd5b5061039e60175481565b34801561065557600080fd5b50602b54610669906001600160a01b031681565b6040516001600160a01b0390911681526020016103a8565b34801561068d57600080fd5b5061037c61069c366004613187565b611714565b3480156106ad57600080fd5b506104406106bc366004613187565b60236020526000908152604090205460ff1681565b3480156106dd57600080fd5b5061037c6106ec366004613295565b611760565b3480156106fd57600080fd5b5061044061070c366004613187565b61178f565b34801561071d57600080fd5b5061039e61072c366004613187565b60006020819052908152604090205481565b61037c61074c366004613295565b6117d2565b34801561075d57600080fd5b5061039e60275481565b34801561077357600080fd5b5061039e60285481565b34801561078957600080fd5b5061039e60065481565b34801561079f57600080fd5b5061039e611a8f565b3480156107b457600080fd5b5061066973eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee81565b3480156107dc57600080fd5b5061039e6107eb366004613187565b602080526000908152604090205481565b34801561080857600080fd5b5061037c610817366004613187565b611aa2565b34801561082857600080fd5b5061037c610837366004613295565b611ba1565b34801561084857600080fd5b5061039e60165481565b34801561085e57600080fd5b506103c6611bd0565b34801561087357600080fd5b5061037c610882366004613295565b611bdd565b34801561089357600080fd5b5061039e60085481565b3480156108a957600080fd5b5061037c6108b836600461321e565b611c0c565b3480156108c957600080fd5b506104406108d836600461324c565b611c61565b3480156108e957600080fd5b5061037c6108f8366004613295565b6121a8565b34801561090957600080fd5b5061039e60095481565b34801561091f57600080fd5b5061037c6121d7565b34801561093457600080fd5b50600e54610669906001600160a01b031681565b34801561095457600080fd5b5061039e612a3a565b34801561096957600080fd5b50601a546104409060ff1681565b34801561098357600080fd5b5061037c610992366004613295565b612a9c565b3480156109a357600080fd5b5061039e6109b23660046131a4565b600160209081526000928352604080842090915290825290205481565b3480156109db57600080fd5b5061039e601f5481565b3480156109f157600080fd5b50602a54610669906001600160a01b031681565b348015610a1157600080fd5b50600b54610669906001600160a01b031681565b348015610a3157600080fd5b50610440610a40366004613187565b60226020526000908152604090205460ff1681565b348015610a6157600080fd5b50600f54610669906001600160a01b031681565b348015610a8157600080fd5b50600a54610669906001600160a01b031681565b348015610aa157600080fd5b5061037c612acb565b348015610ab657600080fd5b50610440610ac5366004613187565b60136020526000908152604090205460ff1681565b6001600160a01b038116600090815260216020908152604080832054918052822054670de0b6b3a764000090610b0e612a3a565b610b1891906134d8565b6001600160a01b038516600090815260208190526040902054610b3b91906134b9565b610b459190613497565b610b4f919061347f565b92915050565b60028054610b629061351b565b80601f0160208091040260200160405190810160405280929190818152602001828054610b8e9061351b565b8015610bdb5780601f10610bb057610100808354040283529160200191610bdb565b820191906000526020600020905b815481529060010190602001808311610bbe57829003601f168201915b505050505081565b6010546001600160a01b03163314610c165760405162461bcd60e51b8152600401610c0d9061341d565b60405180910390fd5b600955565b3360008181526001602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610c769086815260200190565b60405180910390a350600192915050565b6010546001600160a01b03163314610cb15760405162461bcd60e51b8152600401610c0d9061341d565b601e5460ff1615610d105760405162461bcd60e51b8152602060048201526024808201527f596f75206861766520616c726561647920737461727465642074686520616972604482015263064726f760e41b6064820152608401610c0d565b610d25610d2083620151806134b9565b612b14565b6000606482600554610d3791906134b9565b610d419190613497565b6010546001600160a01b0316600090815260208190526040812080549293508392909190610d709084906134d8565b90915550503060009081526020819052604081208054839290610d9490849061347f565b90915550610da3905081612b6a565b5050601e805460ff1916600117905550565b6011546001600160a01b03163314610ddf5760405162461bcd60e51b8152600401610c0d9061341d565b600755565b6010546001600160a01b03163314610e0e5760405162461bcd60e51b8152600401610c0d9061341d565b6001600160a01b03919091166000908152601360205260409020805460ff1916911515919091179055565b600083610e458161178f565b8015610e535750601e5460ff165b15610eb057610e60612a3a565b601f55610e6b611a8f565b6027556001600160a01b03811615610eb057610e8681610ada565b6001600160a01b038216600090815260216020908152604080832093909355601f54908052919020555b6001600160a01b038516600090815260208190526040902054831115610f185760405162461bcd60e51b815260206004820152601b60248201527f496e73756666696369656e7420746f6b656e2062616c616e63652e00000000006044820152606401610c0d565b6001600160a01b0385163314610fcb576001600160a01b0385166000908152600160209081526040808320338452909152902054831115610f925760405162461bcd60e51b8152602060048201526014602482015273125b9cdd59999a58d95b9d08185c1c1c9bdd985b60621b6044820152606401610c0d565b6001600160a01b038516600090815260016020908152604080832033845290915281208054859290610fc59084906134d8565b90915550505b600e546001600160a01b0316151580610ff157506010546001600160a01b038681169116145b8061100457506001600160a01b03851630145b6110505760405162461bcd60e51b815260206004820152601e60248201527f43616e6e6f74207472616465207768696c6520696e6974616c697a696e6700006044820152606401610c0d565b6001600160a01b03851660009081526014602052604081205460ff168061108f57506001600160a01b03851660009081526014602052604090205460ff165b61117657600e546001600160a01b0386811691161415611160576110b284612d04565b6110bc908261347f565b905063ffffffff863b161580156110ec57506001600160a01b03861660009081526022602052604090205460ff16155b15611137576001600160a01b0386166000908152602260209081526040808320805460ff1916600117905590829052812054601d8054919290916111319084906134d8565b90915550505b61114086612d63565b1561115b5761114e84612db5565b611158908261347f565b90505b611176565b61116984612dc7565b611173908261347f565b90505b6001600160a01b0386166000908152602081905260408120805486929061119e9084906134d8565b909155506111ae905081856134d8565b935083600080876001600160a01b03166001600160a01b0316815260200190815260200160002060008282546111e4919061347f565b90915550506001600160a01b038087166000908152601b60209081526040808320429055928816825260139052205460ff1615801561122d5750600e546001600160a01b031615155b156112f85760646005546112419190613497565b60155461124e91906134b9565b6001600160a01b03861660009081526020819052604090205411156112f85760405162461bcd60e51b815260206004820152605460248201527f54686973207472616e7366657220776f756c6420726573756c7420696e20746860448201527f652064657374696e6174696f6e27732062616c616e636520657863656564696e60648201527319c81d1a19481b585e1a5b5d5b48185b5bdd5b9d60621b608482015260a401610c0d565b6113018561178f565b8061131057506113108661178f565b156113ba5761131e8561178f565b8015611330575061132e8661178f565b155b1561134d5783601d6000828254611347919061347f565b90915550505b6113568561178f565b801561136657506113668661178f565b156113835780601d600082825461137d91906134d8565b90915550505b61138c8561178f565b15801561139d575061139d8661178f565b156113ba5783601d60008282546113b491906134d8565b90915550505b846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040516113ff91815260200190565b60405180910390a350600195945050505050565b6011546001600160a01b0316331461143d5760405162461bcd60e51b8152600401610c0d9061341d565b6040516370a0823160e01b81523060048201526001600160a01b0382169063a9059cbb90339083906370a082319060240160206040518083038186803b15801561148657600080fd5b505afa15801561149a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114be91906132ae565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044015b602060405180830381600087803b15801561150557600080fd5b505af1158015611519573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061153d9190613278565b5050565b6011546001600160a01b0316331461156b5760405162461bcd60e51b8152600401610c0d9061341d565b60405160009033903031908381818185875af1925050503d80600081146115ae576040519150601f19603f3d011682016040523d82523d6000602084013e6115b3565b606091505b50509050806115f65760405162461bcd60e51b815260206004820152600f60248201526e1d1c985b9cd9995c8819985a5b1959608a1b6044820152606401610c0d565b50565b336116038161178f565b80156116115750601e5460ff165b1561166e5761161e612a3a565b601f55611629611a8f565b6027556001600160a01b0381161561166e5761164481610ada565b6001600160a01b038216600090815260216020908152604080832093909355601f54908052919020555b33600090815260216020526040902054801561153d5733600081815260216020526040808220919091555163a9059cbb60e01b8152600481019190915260248101829052309063a9059cbb90604401602060405180830381600087803b1580156116d757600080fd5b505af11580156116eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061170f9190613278565b505050565b6010546001600160a01b0316331461173e5760405162461bcd60e51b8152600401610c0d9061341d565b601280546001600160a01b0319166001600160a01b0392909216919091179055565b6010546001600160a01b0316331461178a5760405162461bcd60e51b8152600401610c0d9061341d565b600655565b6001600160a01b03811660009081526023602052604081205460ff168015610b4f5750506001600160a01b031660009081526022602052604090205460ff161590565b6010546001600160a01b031633146117fc5760405162461bcd60e51b8152600401610c0d9061341d565b61180e670de0b6b3a7640000826134b9565b306000908152600160209081526040808320600a80546001600160a01b039081168652919093529281902060001990819055600f549254915163095ea7b360e01b815291841660048301526024820152929350169063095ea7b390604401602060405180830381600087803b15801561188657600080fd5b505af115801561189a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118be9190613278565b50600f60009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b15801561190f57600080fd5b505af1158015611923573d6000803e3d6000fd5b50506010546001600160a01b0316600090815260208190526040812080548695509093509091506119559084906134d8565b9091555050306000908152602081905260408120805483929061197990849061347f565b9091555050600a54600f546040516370a0823160e01b815230600482018190526001600160a01b039384169363e8e33700939192911690859082906370a082319060240160206040518083038186803b1580156119d557600080fd5b505afa1580156119e9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a0d91906132ae565b600080336000196040518963ffffffff1660e01b8152600401611a379897969594939291906133a1565b606060405180830381600087803b158015611a5157600080fd5b505af1158015611a65573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a89919061330e565b50505050565b6000611a9d42602654612dd9565b905090565b6010546001600160a01b03163314611acc5760405162461bcd60e51b8152600401610c0d9061341d565b600e546001600160a01b031615611b165760405162461bcd60e51b815260206004820152600e60248201526d131408185b1c9958591e481cd95d60921b6044820152606401610c0d565b600e80546001600160a01b0319166001600160a01b038381169182179092556000908152601360209081526040808320805460ff191660019081179091553084528252808320600a80548616855292529182902060001990819055600f549154925163095ea7b360e01b8152928416600484015260248301529091169063095ea7b3906044016114eb565b6010546001600160a01b03163314611bcb5760405162461bcd60e51b8152600401610c0d9061341d565b601555565b60048054610b629061351b565b6011546001600160a01b03163314611c075760405162461bcd60e51b8152600401610c0d9061341d565b601855565b6010546001600160a01b03163314611c365760405162461bcd60e51b8152600401610c0d9061341d565b6001600160a01b03919091166000908152601460205260409020805460ff1916911515919091179055565b600033611c6d8161178f565b8015611c7b5750601e5460ff165b15611cd857611c88612a3a565b601f55611c93611a8f565b6027556001600160a01b03811615611cd857611cae81610ada565b6001600160a01b038216600090815260216020908152604080832093909355601f54908052919020555b33600090815260208190526040902054831115611d485760405162461bcd60e51b815260206004820152602860248201527f596f752063616e27742073656e64206d6f726520746f6b656e73207468616e20604482015267796f75206861766560c01b6064820152608401610c0d565b600e5460009081906001600160a01b0316151580611d7057506010546001600160a01b031633145b80611d7a57503330145b611dc65760405162461bcd60e51b815260206004820152601e60248201527f43616e6e6f74207472616465207768696c6520696e6974616c697a696e6700006044820152606401610c0d565b3360009081526014602052604090205460ff1680611dfc57506001600160a01b03861660009081526014602052604090205460ff165b611ec357600e546001600160a01b0316331415611ead57611e1c85612df1565b611e26908361347f565b915063ffffffff863b16158015611e5657506001600160a01b03861660009081526023602052604090205460ff16155b8015611e7b57506001600160a01b03861660009081526022602052604090205460ff16155b15611ea857506001600160a01b0385166000908152602360205260409020805460ff191660019081179091555b611ec3565b611eb685612dc7565b611ec0908361347f565b91505b3360009081526020819052604081208054879290611ee29084906134d8565b90915550611ef2905082866134d8565b945084600080886001600160a01b03166001600160a01b031681526020019081526020016000206000828254611f28919061347f565b9091555050336000908152601b602090815260408083204290556001600160a01b0389168352601390915290205460ff16158015611f705750600e546001600160a01b031615155b15612044576064600554611f849190613497565b601554611f9191906134b9565b6001600160a01b03871660009081526020819052604090205411156120445760405162461bcd60e51b815260206004820152605760248201527f54686973207472616e73616374696f6e20776f756c6420726573756c7420696e60448201527f207468652064657374696e6174696f6e27732062616c616e636520657863656560648201527f64696e6720746865206d6178696d756d20616d6f756e74000000000000000000608482015260a401610c0d565b61204d8661178f565b8061205c575061205c3361178f565b1561215c578015612099576001600160a01b038616600090815260208190526040812054601d80549192909161209390849061347f565b90915550505b6120a28661178f565b80156120ac575080155b80156120be57506120bc3361178f565b155b156120db5784601d60008282546120d5919061347f565b90915550505b6120e48661178f565b80156120ee575080155b80156120fe57506120fe3361178f565b1561211b5781601d600082825461211591906134d8565b90915550505b6121248661178f565b15801561212f575080155b801561213f575061213f3361178f565b1561215c5784601d600082825461215691906134d8565b90915550505b6040518581526001600160a01b0387169033907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a350600195945050505050565b6011546001600160a01b031633146121d25760405162461bcd60e51b8152600401610c0d9061341d565b600d55565b6012546001600160a01b03163314806121fa57506011546001600160a01b031633145b6122465760405162461bcd60e51b815260206004820152601c60248201527f596f752063616e6e6f742075736520746869732066756e6374696f6e000000006044820152606401610c0d565b6000601654116122905760405162461bcd60e51b81526020600482015260156024820152744e6f206665657320746f206469737472696275746560581b6044820152606401610c0d565b6019546122a190633b9aca006134b9565b3a106122e45760405162461bcd60e51b81526020600482015260126024820152710cec2e640e0e4d2c6ca40e8dede40d0d2ced60731b6044820152606401610c0d565b600a54601654601854600b54604051635c11d79560e01b81526001600160a01b0394851694635c11d7959461232a94909390926029929091169060001990600401613443565b600060405180830381600087803b15801561234457600080fd5b505af1158015612358573d6000803e3d6000fd5b5050600b54600f5460405162df0cab60e51b81526001600160a01b03918216600482015291169250631be195609150602401600060405180830381600087803b1580156123a457600080fd5b505af11580156123b8573d6000803e3d6000fd5b505060006016555050600f546040516370a0823160e01b81523060048201526001600160a01b0390911690632e1a7d4d9082906370a082319060240160206040518083038186803b15801561240c57600080fd5b505afa158015612420573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061244491906132ae565b6040518263ffffffff1660e01b815260040161246291815260200190565b600060405180830381600087803b15801561247c57600080fd5b505af1158015612490573d6000803e3d6000fd5b50505050600080602a60009054906101000a90046001600160a01b03166001600160a01b031663b810c6366040518163ffffffff1660e01b81526004016040805180830381600087803b1580156124e657600080fd5b505af11580156124fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061251e91906132c7565b909250905061252d8282612e21565b600061253b61271047613497565b90506000600c6000815481106125535761255361356c565b6000918252602090912001546001600160a01b0316612574836103e86134b9565b604051600081818185875af1925050503d80600081146125b0576040519150601f19603f3d011682016040523d82523d6000602084013e6125b5565b606091505b505090506000600c6001815481106125cf576125cf61356c565b6000918252602090912001546001600160a01b03166125f0846108ca6134b9565b604051600081818185875af1925050503d806000811461262c576040519150601f19603f3d011682016040523d82523d6000602084013e612631565b606091505b505090506000600c60028154811061264b5761264b61356c565b6000918252602090912001546001600160a01b031661266c856108ca6134b9565b604051600081818185875af1925050503d80600081146126a8576040519150601f19603f3d011682016040523d82523d6000602084013e6126ad565b606091505b505090506000600c6003815481106126c7576126c761356c565b6000918252602090912001546001600160a01b03166126e8866108ca6134b9565b604051600081818185875af1925050503d8060008114612724576040519150601f19603f3d011682016040523d82523d6000602084013e612729565b606091505b505090506000600c6004815481106127435761274361356c565b6000918252602090912001546001600160a01b0316612764876108ca6134b9565b604051600081818185875af1925050503d80600081146127a0576040519150601f19603f3d011682016040523d82523d6000602084013e6127a5565b606091505b505090508480156127b35750835b80156127bc5750825b80156127c55750815b80156127ce5750805b61280c5760405162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b6044820152606401610c0d565b60175415612a3057600a546017546001600160a01b0390911690635c11d7959061283890600290613497565b600b546040516001600160e01b031960e085901b16815261287092916000916029916001600160a01b03169060001990600401613443565b600060405180830381600087803b15801561288a57600080fd5b505af115801561289e573d6000803e3d6000fd5b5050600b54600f5460405162df0cab60e51b81526001600160a01b03918216600482015291169250631be195609150602401600060405180830381600087803b1580156128ea57600080fd5b505af11580156128fe573d6000803e3d6000fd5b5050600a54600f546017546001600160a01b03928316945063e8e33700935030929091169061292f90600290613497565b600f546040516370a0823160e01b81523060048201526001600160a01b03909116906370a082319060240160206040518083038186803b15801561297257600080fd5b505afa158015612986573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129aa91906132ae565b60008060006000196040518963ffffffff1660e01b81526004016129d59897969594939291906133a1565b606060405180830381600087803b1580156129ef57600080fd5b505af1158015612a03573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a27919061330e565b50506000601755505b5050505050505050565b6000601d5460001415612a4e5750601f5490565b601d54602754612a5c611a8f565b612a6691906134d8565b602854612a7391906134b9565b612a8590670de0b6b3a76400006134b9565b612a8f9190613497565b601f54611a9d919061347f565b6010546001600160a01b03163314612ac65760405162461bcd60e51b8152600401610c0d9061341d565b600855565b6010546001600160a01b03163314612af55760405162461bcd60e51b8152600401610c0d9061341d565b601080546001600160a01b0319169055601a805460ff19166001179055565b4260265410612b655760405162461bcd60e51b815260206004820152601c60248201527f726577617264206475726174696f6e206e6f742066696e6973686564000000006044820152606401610c0d565b602555565b6000612b758161178f565b8015612b835750601e5460ff165b15612be057612b90612a3a565b601f55612b9b611a8f565b6027556001600160a01b03811615612be057612bb681610ada565b6001600160a01b038216600090815260216020908152604080832093909355601f54908052919020555b6026544210612bfe57602554612bf69083613497565b602855612c3a565b600060285442602654612c1191906134d8565b612c1b91906134b9565b602554909150612c2b828561347f565b612c359190613497565b602855505b600060285411612c7e5760405162461bcd60e51b815260206004820152600f60248201526e07265776172642072617465203d203608c1b6044820152606401610c0d565b30600090815260208190526040902054602554602854612c9e91906134b9565b1115612cec5760405162461bcd60e51b815260206004820152601760248201527f72657761726420616d6f756e74203e2062616c616e63650000000000000000006044820152606401610c0d565b602554612cf9904261347f565b602655505042602755565b6000606482600654612d1691906134b9565b612d209190613497565b90508060166000828254612d34919061347f565b90915550503060009081526020819052604081208054839290612d5890849061347f565b909155509092915050565b6000813b63ffffffff1615612d7a57506001919050565b600d54612d8790426134d8565b6001600160a01b0383166000908152601b602052604090205410612dad57506001919050565b506000919050565b6000606482600754612d1691906134b9565b6000606482600954612d1691906134b9565b6000818310612de85781612dea565b825b9392505050565b6000606482600854612e0391906134b9565b612e0d9190613497565b90508060176000828254612d34919061347f565b6001600160a01b03811673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1415612ee957602b546040516000916001600160a01b03169084908381818185875af1925050503d8060008114612e93576040519150601f19603f3d011682016040523d82523d6000602084013e612e98565b606091505b505090508061170f5760405162461bcd60e51b815260206004820152601e60248201527f5f7472616e736665723a20455448207472616e73666572206661696c656400006044820152606401610c0d565b602b54604080516001600160a01b039283166024820181905260448083018790528351808403909101815260649092018352602080830180516001600160e01b031663a9059cbb60e01b17905283518085019094528084527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65649084015261153d9385939192879261170f92869291600091612f8991908516908490613006565b80519091501561170f5780806020019051810190612fa79190613278565b61170f5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610c0d565b6060613015848460008561301d565b949350505050565b60608247101561307e5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610c0d565b6001600160a01b0385163b6130d55760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610c0d565b600080866001600160a01b031685876040516130f19190613385565b60006040518083038185875af1925050503d806000811461312e576040519150601f19603f3d011682016040523d82523d6000602084013e613133565b606091505b509150915061314382828661314e565b979650505050505050565b6060831561315d575081612dea565b82511561316d5782518084602001fd5b8160405162461bcd60e51b8152600401610c0d91906133ea565b60006020828403121561319957600080fd5b8135612dea81613582565b600080604083850312156131b757600080fd5b82356131c281613582565b915060208301356131d281613582565b809150509250929050565b6000806000606084860312156131f257600080fd5b83356131fd81613582565b9250602084013561320d81613582565b929592945050506040919091013590565b6000806040838503121561323157600080fd5b823561323c81613582565b915060208301356131d281613597565b6000806040838503121561325f57600080fd5b823561326a81613582565b946020939093013593505050565b60006020828403121561328a57600080fd5b8151612dea81613597565b6000602082840312156132a757600080fd5b5035919050565b6000602082840312156132c057600080fd5b5051919050565b600080604083850312156132da57600080fd5b8251915060208301516131d281613582565b600080604083850312156132ff57600080fd5b50508035926020909101359150565b60008060006060848603121561332357600080fd5b8351925060208401519150604084015190509250925092565b6000815480845260208085019450836000528060002060005b8381101561337a5781546001600160a01b031687529582019560019182019101613355565b509495945050505050565b600082516133978184602087016134ef565b9190910192915050565b6001600160a01b039889168152968816602088015260408701959095526060860193909352608085019190915260a084015290921660c082015260e08101919091526101000190565b60208152600082518060208401526134098160408501602087016134ef565b601f01601f19169190910160400192915050565b6020808252600c908201526b2737ba103232b83637bcb2b960a11b604082015260600190565b85815284602082015260a06040820152600061346260a083018661333c565b6001600160a01b0394909416606083015250608001529392505050565b6000821982111561349257613492613556565b500190565b6000826134b457634e487b7160e01b600052601260045260246000fd5b500490565b60008160001904831182151516156134d3576134d3613556565b500290565b6000828210156134ea576134ea613556565b500390565b60005b8381101561350a5781810151838201526020016134f2565b83811115611a895750506000910152565b600181811c9082168061352f57607f821691505b6020821081141561355057634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b03811681146115f657600080fd5b80151581146115f657600080fdfea2646970667358221220f2b15be0f3564c48267d09a8743783a2ef177e6203d27051a3b46fb17c10ecb564736f6c63430008070033608060405234801561001057600080fd5b50600080546001600160a01b03191633179055610247806100326000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c80631be1956014610030575b600080fd5b61004361003e3660046101cf565b610045565b005b6000546001600160a01b031633146100a35760405162461bcd60e51b815260206004820152601d60248201527f596f752063616e6e6f742063616c6c20746869732066756e6374696f6e000000604482015260640160405180910390fd5b6040516370a0823160e01b81523060048201526001600160a01b0382169063a9059cbb90339083906370a082319060240160206040518083038186803b1580156100ec57600080fd5b505afa158015610100573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061012491906101f8565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381600087803b15801561016a57600080fd5b505af115801561017e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101a291906101a6565b5050565b6000602082840312156101b857600080fd5b815180151581146101c857600080fd5b9392505050565b6000602082840312156101e157600080fd5b81356001600160a01b03811681146101c857600080fd5b60006020828403121561020a57600080fd5b505191905056fea2646970667358221220322499f14ffc364035655fdf90c26e9953841e8d1ad6194d2ce8b82d8bd9718a64736f6c63430008070033

Deployed Bytecode

0x6080604052600436106103755760003560e01c80637519ab50116101cf578063acb2ad6f11610101578063df136d651161009a578063f24286211161006c578063f242862114610a55578063f887ea4014610a75578063fa2f7a8f14610a95578063fd789e8314610aaa57005b8063df136d65146109cf578063e70abe92146109e5578063ec55688914610a05578063ed14f20a14610a2557005b8063cd3daf9d116100d3578063cd3daf9d14610948578063d232c2201461095d578063db9f66a014610977578063dd62ed3e1461099757005b8063acb2ad6f146108fd578063ae39279f14610913578063b88a802f146105d8578063c14cba3e1461092857005b80638fe1cdf0116101735780639663d58a116101455780639663d58a146108875780639987a9d71461089d578063a9059cbb146108bd578063ab0b1fe3146108dd57005b80638fe1cdf01461081c5780639066cfb71461083c57806395d89b4114610852578063960bfe041461086757005b806380faa57d116101ac57806380faa57d146107935780638322fff2146107a85780638b876347146107d05780638d1d2de5146107fc57005b80637519ab50146107515780637b0a47ee146107675780637b441eba1461077d57005b80633138ffe7116102a85780634ca176111161024c57806361f7681f1161021e57806361f7681f146106d157806366e305fd146106f157806370a0823114610711578063727f48fc1461073e57005b80634ca1761114610633578063573ea57514610649578063574ef9681461068157806360068dd8146106a157005b806335faa4161161028557806335faa416146105c35780633d18b912146105d85780633d9a3d19146105ed57806346535bf51461060357005b80633138ffe714610561578063313ce5671461057757806335ce4c54146105a357005b806310159f681161031a57806318160ddd116102ec57806318160ddd146104fb5780631f2698ab1461051157806323b872dd1461052b5780632ca126f81461054b57005b806310159f681461047c57806312fa6feb1461049c578063157af465146104bb57806317026729146104db57005b8063090bac8511610353578063090bac8514610400578063095ea7b3146104205780630bac6d5c146104505780630fb5a6b41461046657005b80628cc2621461037e57806306fdde03146103b15780630700037d146103d357005b3661037c57005b005b34801561038a57600080fd5b5061039e610399366004613187565b610ada565b6040519081526020015b60405180910390f35b3480156103bd57600080fd5b506103c6610b55565b6040516103a891906133ea565b3480156103df57600080fd5b5061039e6103ee366004613187565b60216020526000908152604090205481565b34801561040c57600080fd5b5061037c61041b366004613295565b610be3565b34801561042c57600080fd5b5061044061043b36600461324c565b610c1b565b60405190151581526020016103a8565b34801561045c57600080fd5b5061039e601c5481565b34801561047257600080fd5b5061039e60255481565b34801561048857600080fd5b5061037c6104973660046132ec565b610c87565b3480156104a857600080fd5b50601e5461044090610100900460ff1681565b3480156104c757600080fd5b5061037c6104d6366004613295565b610db5565b3480156104e757600080fd5b5061037c6104f636600461321e565b610de4565b34801561050757600080fd5b5061039e60055481565b34801561051d57600080fd5b50601e546104409060ff1681565b34801561053757600080fd5b506104406105463660046131dd565b610e39565b34801561055757600080fd5b5061039e60265481565b34801561056d57600080fd5b5061039e601d5481565b34801561058357600080fd5b506003546105919060ff1681565b60405160ff90911681526020016103a8565b3480156105af57600080fd5b5061037c6105be366004613187565b611413565b3480156105cf57600080fd5b5061037c611541565b3480156105e457600080fd5b5061037c6115f9565b3480156105f957600080fd5b5061039e60155481565b34801561060f57600080fd5b5061044061061e366004613187565b60146020526000908152604090205460ff1681565b34801561063f57600080fd5b5061039e60175481565b34801561065557600080fd5b50602b54610669906001600160a01b031681565b6040516001600160a01b0390911681526020016103a8565b34801561068d57600080fd5b5061037c61069c366004613187565b611714565b3480156106ad57600080fd5b506104406106bc366004613187565b60236020526000908152604090205460ff1681565b3480156106dd57600080fd5b5061037c6106ec366004613295565b611760565b3480156106fd57600080fd5b5061044061070c366004613187565b61178f565b34801561071d57600080fd5b5061039e61072c366004613187565b60006020819052908152604090205481565b61037c61074c366004613295565b6117d2565b34801561075d57600080fd5b5061039e60275481565b34801561077357600080fd5b5061039e60285481565b34801561078957600080fd5b5061039e60065481565b34801561079f57600080fd5b5061039e611a8f565b3480156107b457600080fd5b5061066973eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee81565b3480156107dc57600080fd5b5061039e6107eb366004613187565b602080526000908152604090205481565b34801561080857600080fd5b5061037c610817366004613187565b611aa2565b34801561082857600080fd5b5061037c610837366004613295565b611ba1565b34801561084857600080fd5b5061039e60165481565b34801561085e57600080fd5b506103c6611bd0565b34801561087357600080fd5b5061037c610882366004613295565b611bdd565b34801561089357600080fd5b5061039e60085481565b3480156108a957600080fd5b5061037c6108b836600461321e565b611c0c565b3480156108c957600080fd5b506104406108d836600461324c565b611c61565b3480156108e957600080fd5b5061037c6108f8366004613295565b6121a8565b34801561090957600080fd5b5061039e60095481565b34801561091f57600080fd5b5061037c6121d7565b34801561093457600080fd5b50600e54610669906001600160a01b031681565b34801561095457600080fd5b5061039e612a3a565b34801561096957600080fd5b50601a546104409060ff1681565b34801561098357600080fd5b5061037c610992366004613295565b612a9c565b3480156109a357600080fd5b5061039e6109b23660046131a4565b600160209081526000928352604080842090915290825290205481565b3480156109db57600080fd5b5061039e601f5481565b3480156109f157600080fd5b50602a54610669906001600160a01b031681565b348015610a1157600080fd5b50600b54610669906001600160a01b031681565b348015610a3157600080fd5b50610440610a40366004613187565b60226020526000908152604090205460ff1681565b348015610a6157600080fd5b50600f54610669906001600160a01b031681565b348015610a8157600080fd5b50600a54610669906001600160a01b031681565b348015610aa157600080fd5b5061037c612acb565b348015610ab657600080fd5b50610440610ac5366004613187565b60136020526000908152604090205460ff1681565b6001600160a01b038116600090815260216020908152604080832054918052822054670de0b6b3a764000090610b0e612a3a565b610b1891906134d8565b6001600160a01b038516600090815260208190526040902054610b3b91906134b9565b610b459190613497565b610b4f919061347f565b92915050565b60028054610b629061351b565b80601f0160208091040260200160405190810160405280929190818152602001828054610b8e9061351b565b8015610bdb5780601f10610bb057610100808354040283529160200191610bdb565b820191906000526020600020905b815481529060010190602001808311610bbe57829003601f168201915b505050505081565b6010546001600160a01b03163314610c165760405162461bcd60e51b8152600401610c0d9061341d565b60405180910390fd5b600955565b3360008181526001602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610c769086815260200190565b60405180910390a350600192915050565b6010546001600160a01b03163314610cb15760405162461bcd60e51b8152600401610c0d9061341d565b601e5460ff1615610d105760405162461bcd60e51b8152602060048201526024808201527f596f75206861766520616c726561647920737461727465642074686520616972604482015263064726f760e41b6064820152608401610c0d565b610d25610d2083620151806134b9565b612b14565b6000606482600554610d3791906134b9565b610d419190613497565b6010546001600160a01b0316600090815260208190526040812080549293508392909190610d709084906134d8565b90915550503060009081526020819052604081208054839290610d9490849061347f565b90915550610da3905081612b6a565b5050601e805460ff1916600117905550565b6011546001600160a01b03163314610ddf5760405162461bcd60e51b8152600401610c0d9061341d565b600755565b6010546001600160a01b03163314610e0e5760405162461bcd60e51b8152600401610c0d9061341d565b6001600160a01b03919091166000908152601360205260409020805460ff1916911515919091179055565b600083610e458161178f565b8015610e535750601e5460ff165b15610eb057610e60612a3a565b601f55610e6b611a8f565b6027556001600160a01b03811615610eb057610e8681610ada565b6001600160a01b038216600090815260216020908152604080832093909355601f54908052919020555b6001600160a01b038516600090815260208190526040902054831115610f185760405162461bcd60e51b815260206004820152601b60248201527f496e73756666696369656e7420746f6b656e2062616c616e63652e00000000006044820152606401610c0d565b6001600160a01b0385163314610fcb576001600160a01b0385166000908152600160209081526040808320338452909152902054831115610f925760405162461bcd60e51b8152602060048201526014602482015273125b9cdd59999a58d95b9d08185c1c1c9bdd985b60621b6044820152606401610c0d565b6001600160a01b038516600090815260016020908152604080832033845290915281208054859290610fc59084906134d8565b90915550505b600e546001600160a01b0316151580610ff157506010546001600160a01b038681169116145b8061100457506001600160a01b03851630145b6110505760405162461bcd60e51b815260206004820152601e60248201527f43616e6e6f74207472616465207768696c6520696e6974616c697a696e6700006044820152606401610c0d565b6001600160a01b03851660009081526014602052604081205460ff168061108f57506001600160a01b03851660009081526014602052604090205460ff165b61117657600e546001600160a01b0386811691161415611160576110b284612d04565b6110bc908261347f565b905063ffffffff863b161580156110ec57506001600160a01b03861660009081526022602052604090205460ff16155b15611137576001600160a01b0386166000908152602260209081526040808320805460ff1916600117905590829052812054601d8054919290916111319084906134d8565b90915550505b61114086612d63565b1561115b5761114e84612db5565b611158908261347f565b90505b611176565b61116984612dc7565b611173908261347f565b90505b6001600160a01b0386166000908152602081905260408120805486929061119e9084906134d8565b909155506111ae905081856134d8565b935083600080876001600160a01b03166001600160a01b0316815260200190815260200160002060008282546111e4919061347f565b90915550506001600160a01b038087166000908152601b60209081526040808320429055928816825260139052205460ff1615801561122d5750600e546001600160a01b031615155b156112f85760646005546112419190613497565b60155461124e91906134b9565b6001600160a01b03861660009081526020819052604090205411156112f85760405162461bcd60e51b815260206004820152605460248201527f54686973207472616e7366657220776f756c6420726573756c7420696e20746860448201527f652064657374696e6174696f6e27732062616c616e636520657863656564696e60648201527319c81d1a19481b585e1a5b5d5b48185b5bdd5b9d60621b608482015260a401610c0d565b6113018561178f565b8061131057506113108661178f565b156113ba5761131e8561178f565b8015611330575061132e8661178f565b155b1561134d5783601d6000828254611347919061347f565b90915550505b6113568561178f565b801561136657506113668661178f565b156113835780601d600082825461137d91906134d8565b90915550505b61138c8561178f565b15801561139d575061139d8661178f565b156113ba5783601d60008282546113b491906134d8565b90915550505b846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040516113ff91815260200190565b60405180910390a350600195945050505050565b6011546001600160a01b0316331461143d5760405162461bcd60e51b8152600401610c0d9061341d565b6040516370a0823160e01b81523060048201526001600160a01b0382169063a9059cbb90339083906370a082319060240160206040518083038186803b15801561148657600080fd5b505afa15801561149a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114be91906132ae565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044015b602060405180830381600087803b15801561150557600080fd5b505af1158015611519573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061153d9190613278565b5050565b6011546001600160a01b0316331461156b5760405162461bcd60e51b8152600401610c0d9061341d565b60405160009033903031908381818185875af1925050503d80600081146115ae576040519150601f19603f3d011682016040523d82523d6000602084013e6115b3565b606091505b50509050806115f65760405162461bcd60e51b815260206004820152600f60248201526e1d1c985b9cd9995c8819985a5b1959608a1b6044820152606401610c0d565b50565b336116038161178f565b80156116115750601e5460ff165b1561166e5761161e612a3a565b601f55611629611a8f565b6027556001600160a01b0381161561166e5761164481610ada565b6001600160a01b038216600090815260216020908152604080832093909355601f54908052919020555b33600090815260216020526040902054801561153d5733600081815260216020526040808220919091555163a9059cbb60e01b8152600481019190915260248101829052309063a9059cbb90604401602060405180830381600087803b1580156116d757600080fd5b505af11580156116eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061170f9190613278565b505050565b6010546001600160a01b0316331461173e5760405162461bcd60e51b8152600401610c0d9061341d565b601280546001600160a01b0319166001600160a01b0392909216919091179055565b6010546001600160a01b0316331461178a5760405162461bcd60e51b8152600401610c0d9061341d565b600655565b6001600160a01b03811660009081526023602052604081205460ff168015610b4f5750506001600160a01b031660009081526022602052604090205460ff161590565b6010546001600160a01b031633146117fc5760405162461bcd60e51b8152600401610c0d9061341d565b61180e670de0b6b3a7640000826134b9565b306000908152600160209081526040808320600a80546001600160a01b039081168652919093529281902060001990819055600f549254915163095ea7b360e01b815291841660048301526024820152929350169063095ea7b390604401602060405180830381600087803b15801561188657600080fd5b505af115801561189a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118be9190613278565b50600f60009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b15801561190f57600080fd5b505af1158015611923573d6000803e3d6000fd5b50506010546001600160a01b0316600090815260208190526040812080548695509093509091506119559084906134d8565b9091555050306000908152602081905260408120805483929061197990849061347f565b9091555050600a54600f546040516370a0823160e01b815230600482018190526001600160a01b039384169363e8e33700939192911690859082906370a082319060240160206040518083038186803b1580156119d557600080fd5b505afa1580156119e9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a0d91906132ae565b600080336000196040518963ffffffff1660e01b8152600401611a379897969594939291906133a1565b606060405180830381600087803b158015611a5157600080fd5b505af1158015611a65573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a89919061330e565b50505050565b6000611a9d42602654612dd9565b905090565b6010546001600160a01b03163314611acc5760405162461bcd60e51b8152600401610c0d9061341d565b600e546001600160a01b031615611b165760405162461bcd60e51b815260206004820152600e60248201526d131408185b1c9958591e481cd95d60921b6044820152606401610c0d565b600e80546001600160a01b0319166001600160a01b038381169182179092556000908152601360209081526040808320805460ff191660019081179091553084528252808320600a80548616855292529182902060001990819055600f549154925163095ea7b360e01b8152928416600484015260248301529091169063095ea7b3906044016114eb565b6010546001600160a01b03163314611bcb5760405162461bcd60e51b8152600401610c0d9061341d565b601555565b60048054610b629061351b565b6011546001600160a01b03163314611c075760405162461bcd60e51b8152600401610c0d9061341d565b601855565b6010546001600160a01b03163314611c365760405162461bcd60e51b8152600401610c0d9061341d565b6001600160a01b03919091166000908152601460205260409020805460ff1916911515919091179055565b600033611c6d8161178f565b8015611c7b5750601e5460ff165b15611cd857611c88612a3a565b601f55611c93611a8f565b6027556001600160a01b03811615611cd857611cae81610ada565b6001600160a01b038216600090815260216020908152604080832093909355601f54908052919020555b33600090815260208190526040902054831115611d485760405162461bcd60e51b815260206004820152602860248201527f596f752063616e27742073656e64206d6f726520746f6b656e73207468616e20604482015267796f75206861766560c01b6064820152608401610c0d565b600e5460009081906001600160a01b0316151580611d7057506010546001600160a01b031633145b80611d7a57503330145b611dc65760405162461bcd60e51b815260206004820152601e60248201527f43616e6e6f74207472616465207768696c6520696e6974616c697a696e6700006044820152606401610c0d565b3360009081526014602052604090205460ff1680611dfc57506001600160a01b03861660009081526014602052604090205460ff165b611ec357600e546001600160a01b0316331415611ead57611e1c85612df1565b611e26908361347f565b915063ffffffff863b16158015611e5657506001600160a01b03861660009081526023602052604090205460ff16155b8015611e7b57506001600160a01b03861660009081526022602052604090205460ff16155b15611ea857506001600160a01b0385166000908152602360205260409020805460ff191660019081179091555b611ec3565b611eb685612dc7565b611ec0908361347f565b91505b3360009081526020819052604081208054879290611ee29084906134d8565b90915550611ef2905082866134d8565b945084600080886001600160a01b03166001600160a01b031681526020019081526020016000206000828254611f28919061347f565b9091555050336000908152601b602090815260408083204290556001600160a01b0389168352601390915290205460ff16158015611f705750600e546001600160a01b031615155b15612044576064600554611f849190613497565b601554611f9191906134b9565b6001600160a01b03871660009081526020819052604090205411156120445760405162461bcd60e51b815260206004820152605760248201527f54686973207472616e73616374696f6e20776f756c6420726573756c7420696e60448201527f207468652064657374696e6174696f6e27732062616c616e636520657863656560648201527f64696e6720746865206d6178696d756d20616d6f756e74000000000000000000608482015260a401610c0d565b61204d8661178f565b8061205c575061205c3361178f565b1561215c578015612099576001600160a01b038616600090815260208190526040812054601d80549192909161209390849061347f565b90915550505b6120a28661178f565b80156120ac575080155b80156120be57506120bc3361178f565b155b156120db5784601d60008282546120d5919061347f565b90915550505b6120e48661178f565b80156120ee575080155b80156120fe57506120fe3361178f565b1561211b5781601d600082825461211591906134d8565b90915550505b6121248661178f565b15801561212f575080155b801561213f575061213f3361178f565b1561215c5784601d600082825461215691906134d8565b90915550505b6040518581526001600160a01b0387169033907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a350600195945050505050565b6011546001600160a01b031633146121d25760405162461bcd60e51b8152600401610c0d9061341d565b600d55565b6012546001600160a01b03163314806121fa57506011546001600160a01b031633145b6122465760405162461bcd60e51b815260206004820152601c60248201527f596f752063616e6e6f742075736520746869732066756e6374696f6e000000006044820152606401610c0d565b6000601654116122905760405162461bcd60e51b81526020600482015260156024820152744e6f206665657320746f206469737472696275746560581b6044820152606401610c0d565b6019546122a190633b9aca006134b9565b3a106122e45760405162461bcd60e51b81526020600482015260126024820152710cec2e640e0e4d2c6ca40e8dede40d0d2ced60731b6044820152606401610c0d565b600a54601654601854600b54604051635c11d79560e01b81526001600160a01b0394851694635c11d7959461232a94909390926029929091169060001990600401613443565b600060405180830381600087803b15801561234457600080fd5b505af1158015612358573d6000803e3d6000fd5b5050600b54600f5460405162df0cab60e51b81526001600160a01b03918216600482015291169250631be195609150602401600060405180830381600087803b1580156123a457600080fd5b505af11580156123b8573d6000803e3d6000fd5b505060006016555050600f546040516370a0823160e01b81523060048201526001600160a01b0390911690632e1a7d4d9082906370a082319060240160206040518083038186803b15801561240c57600080fd5b505afa158015612420573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061244491906132ae565b6040518263ffffffff1660e01b815260040161246291815260200190565b600060405180830381600087803b15801561247c57600080fd5b505af1158015612490573d6000803e3d6000fd5b50505050600080602a60009054906101000a90046001600160a01b03166001600160a01b031663b810c6366040518163ffffffff1660e01b81526004016040805180830381600087803b1580156124e657600080fd5b505af11580156124fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061251e91906132c7565b909250905061252d8282612e21565b600061253b61271047613497565b90506000600c6000815481106125535761255361356c565b6000918252602090912001546001600160a01b0316612574836103e86134b9565b604051600081818185875af1925050503d80600081146125b0576040519150601f19603f3d011682016040523d82523d6000602084013e6125b5565b606091505b505090506000600c6001815481106125cf576125cf61356c565b6000918252602090912001546001600160a01b03166125f0846108ca6134b9565b604051600081818185875af1925050503d806000811461262c576040519150601f19603f3d011682016040523d82523d6000602084013e612631565b606091505b505090506000600c60028154811061264b5761264b61356c565b6000918252602090912001546001600160a01b031661266c856108ca6134b9565b604051600081818185875af1925050503d80600081146126a8576040519150601f19603f3d011682016040523d82523d6000602084013e6126ad565b606091505b505090506000600c6003815481106126c7576126c761356c565b6000918252602090912001546001600160a01b03166126e8866108ca6134b9565b604051600081818185875af1925050503d8060008114612724576040519150601f19603f3d011682016040523d82523d6000602084013e612729565b606091505b505090506000600c6004815481106127435761274361356c565b6000918252602090912001546001600160a01b0316612764876108ca6134b9565b604051600081818185875af1925050503d80600081146127a0576040519150601f19603f3d011682016040523d82523d6000602084013e6127a5565b606091505b505090508480156127b35750835b80156127bc5750825b80156127c55750815b80156127ce5750805b61280c5760405162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b6044820152606401610c0d565b60175415612a3057600a546017546001600160a01b0390911690635c11d7959061283890600290613497565b600b546040516001600160e01b031960e085901b16815261287092916000916029916001600160a01b03169060001990600401613443565b600060405180830381600087803b15801561288a57600080fd5b505af115801561289e573d6000803e3d6000fd5b5050600b54600f5460405162df0cab60e51b81526001600160a01b03918216600482015291169250631be195609150602401600060405180830381600087803b1580156128ea57600080fd5b505af11580156128fe573d6000803e3d6000fd5b5050600a54600f546017546001600160a01b03928316945063e8e33700935030929091169061292f90600290613497565b600f546040516370a0823160e01b81523060048201526001600160a01b03909116906370a082319060240160206040518083038186803b15801561297257600080fd5b505afa158015612986573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129aa91906132ae565b60008060006000196040518963ffffffff1660e01b81526004016129d59897969594939291906133a1565b606060405180830381600087803b1580156129ef57600080fd5b505af1158015612a03573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a27919061330e565b50506000601755505b5050505050505050565b6000601d5460001415612a4e5750601f5490565b601d54602754612a5c611a8f565b612a6691906134d8565b602854612a7391906134b9565b612a8590670de0b6b3a76400006134b9565b612a8f9190613497565b601f54611a9d919061347f565b6010546001600160a01b03163314612ac65760405162461bcd60e51b8152600401610c0d9061341d565b600855565b6010546001600160a01b03163314612af55760405162461bcd60e51b8152600401610c0d9061341d565b601080546001600160a01b0319169055601a805460ff19166001179055565b4260265410612b655760405162461bcd60e51b815260206004820152601c60248201527f726577617264206475726174696f6e206e6f742066696e6973686564000000006044820152606401610c0d565b602555565b6000612b758161178f565b8015612b835750601e5460ff165b15612be057612b90612a3a565b601f55612b9b611a8f565b6027556001600160a01b03811615612be057612bb681610ada565b6001600160a01b038216600090815260216020908152604080832093909355601f54908052919020555b6026544210612bfe57602554612bf69083613497565b602855612c3a565b600060285442602654612c1191906134d8565b612c1b91906134b9565b602554909150612c2b828561347f565b612c359190613497565b602855505b600060285411612c7e5760405162461bcd60e51b815260206004820152600f60248201526e07265776172642072617465203d203608c1b6044820152606401610c0d565b30600090815260208190526040902054602554602854612c9e91906134b9565b1115612cec5760405162461bcd60e51b815260206004820152601760248201527f72657761726420616d6f756e74203e2062616c616e63650000000000000000006044820152606401610c0d565b602554612cf9904261347f565b602655505042602755565b6000606482600654612d1691906134b9565b612d209190613497565b90508060166000828254612d34919061347f565b90915550503060009081526020819052604081208054839290612d5890849061347f565b909155509092915050565b6000813b63ffffffff1615612d7a57506001919050565b600d54612d8790426134d8565b6001600160a01b0383166000908152601b602052604090205410612dad57506001919050565b506000919050565b6000606482600754612d1691906134b9565b6000606482600954612d1691906134b9565b6000818310612de85781612dea565b825b9392505050565b6000606482600854612e0391906134b9565b612e0d9190613497565b90508060176000828254612d34919061347f565b6001600160a01b03811673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1415612ee957602b546040516000916001600160a01b03169084908381818185875af1925050503d8060008114612e93576040519150601f19603f3d011682016040523d82523d6000602084013e612e98565b606091505b505090508061170f5760405162461bcd60e51b815260206004820152601e60248201527f5f7472616e736665723a20455448207472616e73666572206661696c656400006044820152606401610c0d565b602b54604080516001600160a01b039283166024820181905260448083018790528351808403909101815260649092018352602080830180516001600160e01b031663a9059cbb60e01b17905283518085019094528084527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65649084015261153d9385939192879261170f92869291600091612f8991908516908490613006565b80519091501561170f5780806020019051810190612fa79190613278565b61170f5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610c0d565b6060613015848460008561301d565b949350505050565b60608247101561307e5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610c0d565b6001600160a01b0385163b6130d55760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610c0d565b600080866001600160a01b031685876040516130f19190613385565b60006040518083038185875af1925050503d806000811461312e576040519150601f19603f3d011682016040523d82523d6000602084013e613133565b606091505b509150915061314382828661314e565b979650505050505050565b6060831561315d575081612dea565b82511561316d5782518084602001fd5b8160405162461bcd60e51b8152600401610c0d91906133ea565b60006020828403121561319957600080fd5b8135612dea81613582565b600080604083850312156131b757600080fd5b82356131c281613582565b915060208301356131d281613582565b809150509250929050565b6000806000606084860312156131f257600080fd5b83356131fd81613582565b9250602084013561320d81613582565b929592945050506040919091013590565b6000806040838503121561323157600080fd5b823561323c81613582565b915060208301356131d281613597565b6000806040838503121561325f57600080fd5b823561326a81613582565b946020939093013593505050565b60006020828403121561328a57600080fd5b8151612dea81613597565b6000602082840312156132a757600080fd5b5035919050565b6000602082840312156132c057600080fd5b5051919050565b600080604083850312156132da57600080fd5b8251915060208301516131d281613582565b600080604083850312156132ff57600080fd5b50508035926020909101359150565b60008060006060848603121561332357600080fd5b8351925060208401519150604084015190509250925092565b6000815480845260208085019450836000528060002060005b8381101561337a5781546001600160a01b031687529582019560019182019101613355565b509495945050505050565b600082516133978184602087016134ef565b9190910192915050565b6001600160a01b039889168152968816602088015260408701959095526060860193909352608085019190915260a084015290921660c082015260e08101919091526101000190565b60208152600082518060208401526134098160408501602087016134ef565b601f01601f19169190910160400192915050565b6020808252600c908201526b2737ba103232b83637bcb2b960a11b604082015260600190565b85815284602082015260a06040820152600061346260a083018661333c565b6001600160a01b0394909416606083015250608001529392505050565b6000821982111561349257613492613556565b500190565b6000826134b457634e487b7160e01b600052601260045260246000fd5b500490565b60008160001904831182151516156134d3576134d3613556565b500290565b6000828210156134ea576134ea613556565b500390565b60005b8381101561350a5781810151838201526020016134f2565b83811115611a895750506000910152565b600181811c9082168061352f57607f821691505b6020821081141561355057634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b03811681146115f657600080fd5b80151581146115f657600080fdfea2646970667358221220f2b15be0f3564c48267d09a8743783a2ef177e6203d27051a3b46fb17c10ecb564736f6c63430008070033

Deployed Bytecode Sourcemap

18503:16402:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20575:236;;;;;;;;;;-1:-1:-1;20575:236:0;;;;;:::i;:::-;;:::i;:::-;;;15336:25:1;;;15324:2;15309:18;20575:236:0;;;;;;;;22120:18;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;23261:42::-;;;;;;;;;;-1:-1:-1;23261:42:0;;;;;:::i;:::-;;;;;;;;;;;;;;25948:88;;;;;;;;;;-1:-1:-1;25948:88:0;;;;;:::i;:::-;;:::i;30485:221::-;;;;;;;;;;-1:-1:-1;30485:221:0;;;;;:::i;:::-;;:::i;:::-;;;6228:14:1;;6221:22;6203:41;;6191:2;6176:18;30485:221:0;6063:187:1;23044:25:0;;;;;;;;;;;;;;;;23449:20;;;;;;;;;;;;;;;;24828:441;;;;;;;;;;-1:-1:-1;24828:441:0;;;;;:::i;:::-;;:::i;23134:17::-;;;;;;;;;;-1:-1:-1;23134:17:0;;;;;;;;;;;26320:93;;;;;;;;;;-1:-1:-1;26320:93:0;;;;;:::i;:::-;;:::i;25402:123::-;;;;;;;;;;-1:-1:-1;25402:123:0;;;;;:::i;:::-;;:::i;22200:23::-;;;;;;;;;;;;;;;;23108:19;;;;;;;;;;-1:-1:-1;23108:19:0;;;;;;;;28286:1947;;;;;;;;;;-1:-1:-1;28286:1947:0;;;;;:::i;:::-;;:::i;23476:19::-;;;;;;;;;;;;;;;;23076:25;;;;;;;;;;;;;;;;22145:21;;;;;;;;;;-1:-1:-1;22145:21:0;;;;;;;;;;;16720:4:1;16708:17;;;16690:36;;16678:2;16663:18;22145:21:0;16548:184:1;30714:154:0;;;;;;;;;;-1:-1:-1;30714:154:0;;;;;:::i;:::-;;:::i;30876:167::-;;;;;;;;;;;;;:::i;20819:231::-;;;;;;;;;;;;;:::i;22844:28::-;;;;;;;;;;;;;;;;22792:45;;;;;;;;;;-1:-1:-1;22792:45:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;22906:20;;;;;;;;;;;;;;;;34331:29;;;;;;;;;;-1:-1:-1;34331:29:0;;;;-1:-1:-1;;;;;34331:29:0;;;;;;-1:-1:-1;;;;;4751:32:1;;;4733:51;;4721:2;4706:18;34331:29:0;4587:203:1;26042:88:0;;;;;;;;;;-1:-1:-1;26042:88:0;;;;;:::i;:::-;;:::i;23356:41::-;;;;;;;;;;-1:-1:-1;23356:41:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;25755:91;;;;;;;;;;-1:-1:-1;25755:91:0;;;;;:::i;:::-;;:::i;34178:120::-;;;;;;;;;;-1:-1:-1;34178:120:0;;;;;:::i;:::-;;:::i;21995:44::-;;;;;;;;;;-1:-1:-1;21995:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;;24242:578;;;;;;:::i;:::-;;:::i;23502:21::-;;;;;;;;;;;;;;;;23530:22;;;;;;;;;;;;;;;;22402:26;;;;;;;;;;;;;;;;34049:121;;;;;;;;;;;;;:::i;34367:72::-;;;;;;;;;;;;34397:42;34367:72;;23200:54;;;;;;;;;;-1:-1:-1;23200:54:0;;;;;:::i;:::-;;;;;;;;;;;;;;23880:354;;;;;;;;;;-1:-1:-1;23880:354:0;;;;;:::i;:::-;;:::i;25656:93::-;;;;;;;;;;-1:-1:-1;25656:93:0;;;;;:::i;:::-;;:::i;22879:20::-;;;;;;;;;;;;;;;;22173;;;;;;;;;;;;;:::i;26227:87::-;;;;;;;;;;-1:-1:-1;26227:87:0;;;;;:::i;:::-;;:::i;22452:25::-;;;;;;;;;;;;;;;;25531:119;;;;;;;;;;-1:-1:-1;25531:119:0;;;;;:::i;:::-;;:::i;26421:1857::-;;;;;;;;;;-1:-1:-1;26421:1857:0;;;;;:::i;:::-;;:::i;26138:83::-;;;;;;;;;;-1:-1:-1;26138:83:0;;;;;:::i;:::-;;:::i;22479:23::-;;;;;;;;;;;;;;;;31051:1524;;;;;;;;;;;;;:::i;22605:22::-;;;;;;;;;;-1:-1:-1;22605:22:0;;;;-1:-1:-1;;;;;22605:22:0;;;20258:309;;;;;;;;;;;;;:::i;22976:21::-;;;;;;;;;;-1:-1:-1;22976:21:0;;;;;;;;25852:90;;;;;;;;;;-1:-1:-1;25852:90:0;;;;;:::i;:::-;;:::i;22046:65::-;;;;;;;;;;-1:-1:-1;22046:65:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;23158:35;;;;;;;;;;;;;;;;34306:18;;;;;;;;;;-1:-1:-1;34306:18:0;;;;-1:-1:-1;;;;;34306:18:0;;;22537;;;;;;;;;;-1:-1:-1;22537:18:0;;;;-1:-1:-1;;;;;22537:18:0;;;23310:39;;;;;;;;;;-1:-1:-1;23310:39:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;22634:19;;;;;;;;;;-1:-1:-1;22634:19:0;;;;-1:-1:-1;;;;;22634:19:0;;;22511;;;;;;;;;;-1:-1:-1;22511:19:0;;;;-1:-1:-1;;;;;22511:19:0;;;25277:117;;;;;;;;;;;;;:::i;22736:49::-;;;;;;;;;;-1:-1:-1;22736:49:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;20575:236;-1:-1:-1;;;;;20786:17:0;;20630:4;20786:17;;;:7;:17;;;;;;;;;20728:32;;;;;;20765:4;;20709:16;:14;:16::i;:::-;:51;;;;:::i;:::-;-1:-1:-1;;;;;20669:19:0;;:9;:19;;;;;;;;;;;:92;;;;:::i;:::-;20668:101;;;;:::i;:::-;20667:136;;;;:::i;:::-;20647:156;20575:236;-1:-1:-1;;20575:236:0:o;22120:18::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;25948:88::-;23700:8;;-1:-1:-1;;;;;23700:8:0;23712:10;23700:22;23692:47;;;;-1:-1:-1;;;23692:47:0;;;;;;;:::i;:::-;;;;;;;;;26013:11:::1;:21:::0;25948:88::o;30485:221::-;30589:10;30552:12;30579:21;;;:9;:21;;;;;;;;-1:-1:-1;;;;;30579:31:0;;;;;;;;;;:40;;;30637:38;30552:12;;30579:31;;30637:38;;;;30613:6;15336:25:1;;15324:2;15309:18;;15190:177;30637:38:0;;;;;;;;-1:-1:-1;30694:4:0;30485:221;;;;:::o;24828:441::-;23700:8;;-1:-1:-1;;;;;23700:8:0;23712:10;23700:22;23692:47;;;;-1:-1:-1;;;23692:47:0;;;;;;;:::i;:::-;24937:7:::1;::::0;::::1;;24936:8;24928:57;;;::::0;-1:-1:-1;;;24928:57:0;;10577:2:1;24928:57:0::1;::::0;::::1;10559:21:1::0;10616:2;10596:18;;;10589:30;10655:34;10635:18;;;10628:62;-1:-1:-1;;;10706:18:1;;;10699:34;10750:19;;24928:57:0::1;10375:400:1::0;24928:57:0::1;24998:39;25017:19;:11:::0;25031:5:::1;25017:19;:::i;:::-;24998:18;:39::i;:::-;25050:11;25097:3;25076:20;25064:11;;:32;;;;:::i;:::-;:36;;;;:::i;:::-;25123:8;::::0;-1:-1:-1;;;;;25123:8:0::1;25113:9;:19:::0;;;::::1;::::0;;;;;;:29;;25050:50;;-1:-1:-1;25050:50:0;;25113:19;;:9;:29:::1;::::0;25050:50;;25113:29:::1;:::i;:::-;::::0;;;-1:-1:-1;;25171:4:0::1;25153:9;:24:::0;;;::::1;::::0;;;;;;:34;;25181:6;;25153:9;:34:::1;::::0;25181:6;;25153:34:::1;:::i;:::-;::::0;;;-1:-1:-1;25200:26:0::1;::::0;-1:-1:-1;25219:6:0;25200:18:::1;:26::i;:::-;-1:-1:-1::0;;25247:7:0::1;:14:::0;;-1:-1:-1;;25247:14:0::1;25257:4;25247:14;::::0;;-1:-1:-1;24828:441:0:o;26320:93::-;23810:11;;-1:-1:-1;;;;;23810:11:0;23825:10;23810:25;23802:50;;;;-1:-1:-1;;;23802:50:0;;;;;;;:::i;:::-;26386:15:::1;:25:::0;26320:93::o;25402:123::-;23700:8;;-1:-1:-1;;;;;23700:8:0;23712:10;23700:22;23692:47;;;;-1:-1:-1;;;23692:47:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25487:22:0;;;::::1;;::::0;;;:17:::1;:22;::::0;;;;:36;;-1:-1:-1;;25487:36:0::1;::::0;::::1;;::::0;;;::::1;::::0;;25402:123::o;28286:1947::-;28388:12;28372:5;19913:20;19924:8;19913:10;:20::i;:::-;:31;;;;-1:-1:-1;19937:7:0;;;;19913:31;19910:321;;;19981:16;:14;:16::i;:::-;19958:20;:39;20020:26;:24;:26::i;:::-;20008:9;:38;-1:-1:-1;;;;;20063:22:0;;;20059:161;;20122:16;20129:8;20122:6;:16::i;:::-;-1:-1:-1;;;;;20102:17:0;;;;;;:7;:17;;;;;;;;:36;;;;20188:20;;20153:32;;;;;;:55;20059:161;-1:-1:-1;;;;;28423:16:0;::::1;:9;:16:::0;;;::::1;::::0;;;;;;;:26;-1:-1:-1;28423:26:0::1;28415:66;;;::::0;-1:-1:-1;;;28415:66:0;;9100:2:1;28415:66:0::1;::::0;::::1;9082:21:1::0;9139:2;9119:18;;;9112:30;9178:29;9158:18;;;9151:57;9225:18;;28415:66:0::1;8898:351:1::0;28415:66:0::1;-1:-1:-1::0;;;;;28497:19:0;::::1;28506:10;28497:19;28494:176;;-1:-1:-1::0;;;;;28542:16:0;::::1;;::::0;;;:9:::1;:16;::::0;;;;;;;28559:10:::1;28542:28:::0;;;;;;;;:38;-1:-1:-1;28542:38:0::1;28534:71;;;::::0;-1:-1:-1;;;28534:71:0;;10982:2:1;28534:71:0::1;::::0;::::1;10964:21:1::0;11021:2;11001:18;;;10994:30;-1:-1:-1;;;11040:18:1;;;11033:50;11100:18;;28534:71:0::1;10780:344:1::0;28534:71:0::1;-1:-1:-1::0;;;;;28620:16:0;::::1;;::::0;;;:9:::1;:16;::::0;;;;;;;28637:10:::1;28620:28:::0;;;;;;;:38;;28652:6;;28620:16;:38:::1;::::0;28652:6;;28620:38:::1;:::i;:::-;::::0;;;-1:-1:-1;;28494:176:0::1;28690:7;::::0;-1:-1:-1;;;;;28690:7:0::1;:21:::0;::::1;::::0;:42:::1;;-1:-1:-1::0;28724:8:0::1;::::0;-1:-1:-1;;;;;28715:17:0;;::::1;28724:8:::0;::::1;28715:17;28690:42;:68;;;-1:-1:-1::0;;;;;;28736:22:0;::::1;28753:4;28736:22;28690:68;28682:111;;;::::0;-1:-1:-1;;;28682:111:0;;11690:2:1;28682:111:0::1;::::0;::::1;11672:21:1::0;11729:2;11709:18;;;11702:30;11768:32;11748:18;;;11741:60;11818:18;;28682:111:0::1;11488:354:1::0;28682:111:0::1;-1:-1:-1::0;;;;;28835:20:0;::::1;28806:11;28835:20:::0;;;:13:::1;:20;::::0;;;;;::::1;;::::0;:42:::1;;-1:-1:-1::0;;;;;;28859:18:0;::::1;;::::0;;;:13:::1;:18;::::0;;;;;::::1;;28835:42;28830:535;;28899:7;::::0;-1:-1:-1;;;;;28899:14:0;;::::1;:7:::0;::::1;:14;28896:456;;;28945:22;28960:6;28945:14;:22::i;:::-;28935:32;::::0;;::::1;:::i;:::-;::::0;-1:-1:-1;33910:8:0;33863:18;;33910:8;;;;28991:37:::1;;-1:-1:-1::0;;;;;;29014:14:0;::::1;;::::0;;;:7:::1;:14;::::0;;;;;::::1;;29013:15;28991:37;28988:163;;;-1:-1:-1::0;;;;;29054:14:0;::::1;;::::0;;;:7:::1;:14;::::0;;;;;;;:21;;-1:-1:-1;;29054:21:0::1;29071:4;29054:21;::::0;;29115:16;;;;;;;29098:13:::1;:33:::0;;29115:16;;29098:13;;:33:::1;::::0;29115:16;;29098:33:::1;:::i;:::-;::::0;;;-1:-1:-1;;28988:163:0::1;29190:10;29194:5;29190:3;:10::i;:::-;29187:93;;;29236:24;29253:6;29236:16;:24::i;:::-;29226:34;::::0;;::::1;:::i;:::-;;;29187:93;28896:456;;;29324:26;29343:6;29324:18;:26::i;:::-;29314:36;::::0;;::::1;:::i;:::-;;;28896:456;-1:-1:-1::0;;;;;29377:16:0;::::1;:9;:16:::0;;;::::1;::::0;;;;;;:26;;29397:6;;29377:9;:26:::1;::::0;29397:6;;29377:26:::1;:::i;:::-;::::0;;;-1:-1:-1;29414:16:0::1;::::0;-1:-1:-1;29424:6:0;29414:16;::::1;:::i;:::-;;;29459:6;29441:9;:14:::0;29451:3:::1;-1:-1:-1::0;;;;;29441:14:0::1;-1:-1:-1::0;;;;;29441:14:0::1;;;;;;;;;;;;;:24;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;;;;;;29478:13:0;;::::1;;::::0;;;:6:::1;:13;::::0;;;;;;;29494:15:::1;29478:31:::0;;29526:22;;::::1;::::0;;:17:::1;:22:::0;;;;::::1;;29525:23;:48:::0;::::1;;;-1:-1:-1::0;29552:7:0::1;::::0;-1:-1:-1;;;;;29552:7:0::1;:21:::0;::::1;29525:48;29522:226;;;29643:3;29631:11;;:15;;;;:::i;:::-;29613:16;;:34;;;;:::i;:::-;-1:-1:-1::0;;;;;29595:14:0;::::1;:9;:14:::0;;;::::1;::::0;;;;;;;:52:::1;;29587:149;;;::::0;-1:-1:-1;;;29587:149:0;;8263:2:1;29587:149:0::1;::::0;::::1;8245:21:1::0;8302:2;8282:18;;;8275:30;8341:34;8321:18;;;8314:62;8412:34;8392:18;;;8385:62;-1:-1:-1;;;8463:19:1;;;8456:51;8524:19;;29587:149:0::1;8061:488:1::0;29587:149:0::1;29763:15;29774:3;29763:10;:15::i;:::-;:36;;;;29782:17;29793:5;29782:10;:17::i;:::-;29760:398;;;29820:15;29831:3;29820:10;:15::i;:::-;:37;;;;;29840:17;29851:5;29840:10;:17::i;:::-;29839:18;29820:37;29817:101;;;29896:6;29879:13;;:23;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;29817:101:0::1;29935:15;29946:3;29935:10;:15::i;:::-;:36;;;;;29954:17;29965:5;29954:10;:17::i;:::-;29932:100;;;30010:6;29993:13;;:23;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;29932:100:0::1;30050:15;30061:3;30050:10;:15::i;:::-;30049:16;:37;;;;;30069:17;30080:5;30069:10;:17::i;:::-;30046:101;;;30125:6;30108:13;;:23;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;30046:101:0::1;30191:3;-1:-1:-1::0;;;;;30175:28:0::1;30184:5;-1:-1:-1::0;;;;;30175:28:0::1;;30196:6;30175:28;;;;15336:25:1::0;;15324:2;15309:18;;15190:177;30175:28:0::1;;;;;;;;-1:-1:-1::0;30221:4:0::1;::::0;28286:1947;-1:-1:-1;;;;;28286:1947:0:o;30714:154::-;23810:11;;-1:-1:-1;;;;;23810:11:0;23825:10;23810:25;23802:50;;;;-1:-1:-1;;;23802:50:0;;;;;;;:::i;:::-;30821:37:::1;::::0;-1:-1:-1;;;30821:37:0;;30852:4:::1;30821:37;::::0;::::1;4733:51:1::0;-1:-1:-1;;;;;30787:21:0;::::1;::::0;::::1;::::0;30809:10:::1;::::0;30787:21;;30821:22:::1;::::0;4706:18:1;;30821:37:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30787:72;::::0;-1:-1:-1;;;;;;30787:72:0::1;::::0;;;;;;-1:-1:-1;;;;;5976:32:1;;;30787:72:0::1;::::0;::::1;5958:51:1::0;6025:18;;;6018:34;5931:18;;30787:72:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;30714:154:::0;:::o;30876:167::-;23810:11;;-1:-1:-1;;;;;23810:11:0;23825:10;23810:25;23802:50;;;;-1:-1:-1;;;23802:50:0;;;;;;;:::i;:::-;30941:51:::1;::::0;30927:9:::1;::::0;30941:10:::1;::::0;30973:4:::1;30964:23;::::0;30927:9;30941:51;30927:9;30941:51;30964:23;30941:10;:51:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30926:66;;;31011:4;31003:32;;;::::0;-1:-1:-1;;;31003:32:0;;13602:2:1;31003:32:0::1;::::0;::::1;13584:21:1::0;13641:2;13621:18;;;13614:30;-1:-1:-1;;;13660:18:1;;;13653:45;13715:18;;31003:32:0::1;13400:339:1::0;31003:32:0::1;30913:130;30876:167::o:0;20819:231::-;20862:10;19913:20;19924:8;19913:10;:20::i;:::-;:31;;;;-1:-1:-1;19937:7:0;;;;19913:31;19910:321;;;19981:16;:14;:16::i;:::-;19958:20;:39;20020:26;:24;:26::i;:::-;20008:9;:38;-1:-1:-1;;;;;20063:22:0;;;20059:161;;20122:16;20129:8;20122:6;:16::i;:::-;-1:-1:-1;;;;;20102:17:0;;;;;;:7;:17;;;;;;;;:36;;;;20188:20;;20153:32;;;;;;:55;20059:161;20907:10:::1;20885:11;20899:19:::0;;;:7:::1;:19;::::0;;;;;20933:10;;20929:114:::1;;20968:10;20982:1;20960:19:::0;;;:7:::1;:19;::::0;;;;;:23;;;;20998:33;-1:-1:-1;;;20998:33:0;;::::1;::::0;::::1;5958:51:1::0;;;;6025:18;;;6018:34;;;20998:4:0::1;::::0;:13:::1;::::0;5931:18:1;;20998:33:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;20874:176;20819:231:::0;:::o;26042:88::-;23700:8;;-1:-1:-1;;;;;23700:8:0;23712:10;23700:22;23692:47;;;;-1:-1:-1;;;23692:47:0;;;;;;;:::i;:::-;26107:12:::1;:21:::0;;-1:-1:-1;;;;;;26107:21:0::1;-1:-1:-1::0;;;;;26107:21:0;;;::::1;::::0;;;::::1;::::0;;26042:88::o;25755:91::-;23700:8;;-1:-1:-1;;;;;23700:8:0;23712:10;23700:22;23692:47;;;;-1:-1:-1;;;23692:47:0;;;;;;;:::i;:::-;25820:14:::1;:24:::0;25755:91::o;34178:120::-;-1:-1:-1;;;;;34258:14:0;;34232:4;34258:14;;;:9;:14;;;;;;;;:31;;;;-1:-1:-1;;;;;;;34277:12:0;;;;;:7;:12;;;;;;;;34276:13;;34178:120::o;24242:578::-;23700:8;;-1:-1:-1;;;;;23700:8:0;23712:10;23700:22;23692:47;;;;-1:-1:-1;;;23692:47:0;;;;;;;:::i;:::-;24331:26:::1;24353:4;24331:26:::0;::::1;:::i;:::-;24388:4;24370:24;::::0;;;:9:::1;:24;::::0;;;;;;;24403:6:::1;::::0;;-1:-1:-1;;;;;24403:6:0;;::::1;24370:41:::0;;;;;;;;;;-1:-1:-1;;24370:61:0;;;;24448:4:::1;::::0;24470:6;;24442:55;;-1:-1:-1;;;24442:55:0;;24470:6;;::::1;24442:55;::::0;::::1;5958:51:1::0;6025:18;;;6018:34;24331:26:0;;-1:-1:-1;24448:4:0::1;::::0;24442:19:::1;::::0;5931:18:1;;24442:55:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;24516:4;;;;;;;;;-1:-1:-1::0;;;;;24516:4:0::1;-1:-1:-1::0;;;;;24508:21:0::1;;24537:9;24508:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;24572:8:0::1;::::0;-1:-1:-1;;;;;24572:8:0::1;24562:9;:19:::0;;;::::1;::::0;;;;;;:41;;24585:18;;-1:-1:-1;24562:19:0;;-1:-1:-1;24562:9:0;;-1:-1:-1;24562:41:0::1;::::0;24585:18;;24562:41:::1;:::i;:::-;::::0;;;-1:-1:-1;;24632:4:0::1;24614:9;:24:::0;;;::::1;::::0;;;;;;:46;;24642:18;;24614:9;:46:::1;::::0;24642:18;;24614:46:::1;:::i;:::-;::::0;;;-1:-1:-1;;24677:6:0::1;::::0;24712:4:::1;::::0;24738:36:::1;::::0;-1:-1:-1;;;24738:36:0;;24705:4:::1;24738:36;::::0;::::1;4733:51:1::0;;;-1:-1:-1;;;;;24677:6:0;;::::1;::::0;:19:::1;::::0;24705:4;;24712;::::1;::::0;24718:18;;24712:4;;24738:21:::1;::::0;4706:18:1;;24738:36:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24776:1;24779::::0;24782:10:::1;-1:-1:-1::0;;24677:135:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;24242:578:::0;:::o;34049:121::-;34106:7;34133:29;34137:15;34154:7;;34133:3;:29::i;:::-;34126:36;;34049:121;:::o;23880:354::-;23700:8;;-1:-1:-1;;;;;23700:8:0;23712:10;23700:22;23692:47;;;;-1:-1:-1;;;23692:47:0;;;;;;;:::i;:::-;23965:7:::1;::::0;-1:-1:-1;;;;;23965:7:0::1;:21:::0;23957:48:::1;;;::::0;-1:-1:-1;;;23957:48:0;;7920:2:1;23957:48:0::1;::::0;::::1;7902:21:1::0;7959:2;7939:18;;;7932:30;-1:-1:-1;;;7978:18:1;;;7971:44;8032:18;;23957:48:0::1;7718:338:1::0;23957:48:0::1;24018:7;:24:::0;;-1:-1:-1;;;;;;24018:24:0::1;-1:-1:-1::0;;;;;24018:24:0;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;24053:26:0;;;:17:::1;:26;::::0;;;;;;;:33;;-1:-1:-1;;24053:33:0::1;-1:-1:-1::0;24053:33:0;;::::1;::::0;;;24117:4:::1;24099:24:::0;;;;;;;24132:6:::1;::::0;;;::::1;24099:41:::0;;;;;;;;-1:-1:-1;;24099:61:0;;;;24177:4:::1;::::0;24199:6;;24171:55;;-1:-1:-1;;;24171:55:0;;24199:6;;::::1;24171:55;::::0;::::1;5958:51:1::0;6025:18;;;6018:34;24177:4:0;;::::1;::::0;24171:19:::1;::::0;5931:18:1;;24171:55:0::1;5784:274:1::0;25656:93:0;23700:8;;-1:-1:-1;;;;;23700:8:0;23712:10;23700:22;23692:47;;;;-1:-1:-1;;;23692:47:0;;;;;;;:::i;:::-;25721:16:::1;:26:::0;25656:93::o;22173:20::-;;;;;;;:::i;26227:87::-;23810:11;;-1:-1:-1;;;;;23810:11:0;23825:10;23810:25;23802:50;;;;-1:-1:-1;;;23802:50:0;;;;;;;:::i;:::-;26293:9:::1;:19:::0;26227:87::o;25531:119::-;23700:8;;-1:-1:-1;;;;;23700:8:0;23712:10;23700:22;23692:47;;;;-1:-1:-1;;;23692:47:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25616:18:0;;;::::1;;::::0;;;:13:::1;:18;::::0;;;;:32;;-1:-1:-1;;25616:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;25531:119::o;26421:1857::-;26509:12;26488:10;19913:20;19924:8;19913:10;:20::i;:::-;:31;;;;-1:-1:-1;19937:7:0;;;;19913:31;19910:321;;;19981:16;:14;:16::i;:::-;19958:20;:39;20020:26;:24;:26::i;:::-;20008:9;:38;-1:-1:-1;;;;;20063:22:0;;;20059:161;;20122:16;20129:8;20122:6;:16::i;:::-;-1:-1:-1;;;;;20102:17:0;;;;;;:7;:17;;;;;;;;:36;;;;20188:20;;20153:32;;;;;;:55;20059:161;26554:10:::1;26544:9;:21:::0;;;::::1;::::0;;;;;;;:31;-1:-1:-1;26544:31:0::1;26536:84;;;::::0;-1:-1:-1;;;26536:84:0;;7511:2:1;26536:84:0::1;::::0;::::1;7493:21:1::0;7550:2;7530:18;;;7523:30;7589:34;7569:18;;;7562:62;-1:-1:-1;;;7640:18:1;;;7633:38;7688:19;;26536:84:0::1;7309:404:1::0;26536:84:0::1;26684:7;::::0;26633:11:::1;::::0;;;-1:-1:-1;;;;;26684:7:0::1;:21:::0;::::1;::::0;:47:::1;;-1:-1:-1::0;26723:8:0::1;::::0;-1:-1:-1;;;;;26723:8:0::1;26709:10;:22;26684:47;:78;;;-1:-1:-1::0;26735:10:0::1;26757:4;26735:27;26684:78;26676:121;;;::::0;-1:-1:-1;;;26676:121:0;;11690:2:1;26676:121:0::1;::::0;::::1;11672:21:1::0;11729:2;11709:18;;;11702:30;11768:32;11748:18;;;11741:60;11818:18;;26676:121:0::1;11488:354:1::0;26676:121:0::1;26829:10;26815:25;::::0;;;:13:::1;:25;::::0;;;;;::::1;;::::0;:47:::1;;-1:-1:-1::0;;;;;;26844:18:0;::::1;;::::0;;;:13:::1;:18;::::0;;;;;::::1;;26815:47;26810:441;;26898:7;::::0;-1:-1:-1;;;;;26898:7:0::1;26884:10;:21;26881:359;;;26937:21;26951:6;26937:13;:21::i;:::-;26927:31;::::0;;::::1;:::i;:::-;::::0;-1:-1:-1;33910:8:0;33863:18;;33910:8;;;;26982:35:::1;;-1:-1:-1::0;;;;;;27003:14:0;::::1;;::::0;;;:9:::1;:14;::::0;;;;;::::1;;27002:15;26982:35;:52;;;;-1:-1:-1::0;;;;;;27022:12:0;::::1;;::::0;;;:7:::1;:12;::::0;;;;;::::1;;27021:13;26982:52;26979:155;;;-1:-1:-1::0;;;;;;27060:14:0;::::1;;::::0;;;:9:::1;:14;::::0;;;;:21;;-1:-1:-1;;27060:21:0::1;27077:4;27060:21:::0;;::::1;::::0;;;26979:155:::1;26881:359;;;27198:26;27217:6;27198:18;:26::i;:::-;27188:36;::::0;;::::1;:::i;:::-;;;26881:359;27273:10;27263:9;:21:::0;;;::::1;::::0;;;;;;:31;;27288:6;;27263:9;:31:::1;::::0;27288:6;;27263:31:::1;:::i;:::-;::::0;;;-1:-1:-1;27305:16:0::1;::::0;-1:-1:-1;27315:6:0;27305:16;::::1;:::i;:::-;;;27350:6;27332:9;:14:::0;27342:3:::1;-1:-1:-1::0;;;;;27332:14:0::1;-1:-1:-1::0;;;;;27332:14:0::1;;;;;;;;;;;;;:24;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;27376:10:0::1;27369:18;::::0;;;:6:::1;:18;::::0;;;;;;;27390:15:::1;27369:36:::0;;-1:-1:-1;;;;;27422:22:0;::::1;::::0;;:17:::1;:22:::0;;;;;;::::1;;27421:23;:48:::0;::::1;;;-1:-1:-1::0;27448:7:0::1;::::0;-1:-1:-1;;;;;27448:7:0::1;:21:::0;::::1;27421:48;27418:229;;;27539:3;27527:11;;:15;;;;:::i;:::-;27509:16;;:34;;;;:::i;:::-;-1:-1:-1::0;;;;;27491:14:0;::::1;:9;:14:::0;;;::::1;::::0;;;;;;;:52:::1;;27483:152;;;::::0;-1:-1:-1;;;27483:152:0;;12396:2:1;27483:152:0::1;::::0;::::1;12378:21:1::0;12435:2;12415:18;;;12408:30;12474:34;12454:18;;;12447:62;12545:34;12525:18;;;12518:62;12617:25;12596:19;;;12589:54;12660:19;;27483:152:0::1;12194:491:1::0;27483:152:0::1;27662:15;27673:3;27662:10;:15::i;:::-;:41;;;;27681:22;27692:10;27681;:22::i;:::-;27659:531;;;27724:3;27721:75;;;-1:-1:-1::0;;;;;27766:14:0;::::1;:9;:14:::0;;;::::1;::::0;;;;;;;27749:13:::1;:31:::0;;27766:14;;27749:13;;:31:::1;::::0;27766:14;;27749:31:::1;:::i;:::-;::::0;;;-1:-1:-1;;27721:75:0::1;27813:15;27824:3;27813:10;:15::i;:::-;:23;;;;;27833:3;27832:4;27813:23;:50;;;;;27841:22;27852:10;27841;:22::i;:::-;27840:23;27813:50;27810:114;;;27902:6;27885:13;;:23;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;27810:114:0::1;27941:15;27952:3;27941:10;:15::i;:::-;:23;;;;;27961:3;27960:4;27941:23;:49;;;;;27968:22;27979:10;27968;:22::i;:::-;27938:113;;;28029:6;28012:13;;:23;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;27938:113:0::1;28069:15;28080:3;28069:10;:15::i;:::-;28068:16;:24;;;;;28089:3;28088:4;28068:24;:50;;;;;28096:22;28107:10;28096;:22::i;:::-;28065:114;;;28157:6;28140:13;;:23;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;28065:114:0::1;28215:33;::::0;15336:25:1;;;-1:-1:-1;;;;;28215:33:0;::::1;::::0;28224:10:::1;::::0;28215:33:::1;::::0;15324:2:1;15309:18;28215:33:0::1;;;;;;;-1:-1:-1::0;28266:4:0::1;::::0;26421:1857;-1:-1:-1;;;;;26421:1857:0:o;26138:83::-;23810:11;;-1:-1:-1;;;;;23810:11:0;23825:10;23810:25;23802:50;;;;-1:-1:-1;;;23802:50:0;;;;;;;:::i;:::-;26204:5:::1;:15:::0;26138:83::o;31051:1524::-;31112:12;;-1:-1:-1;;;;;31112:12:0;31098:10;:26;;:55;;-1:-1:-1;31142:11:0;;-1:-1:-1;;;;;31142:11:0;31128:10;:25;31098:55;31090:96;;;;-1:-1:-1;;;31090:96:0;;9813:2:1;31090:96:0;;;9795:21:1;9852:2;9832:18;;;9825:30;9891;9871:18;;;9864:58;9939:18;;31090:96:0;9611:352:1;31090:96:0;31216:1;31205:8;;:12;31197:46;;;;-1:-1:-1;;;31197:46:0;;14357:2:1;31197:46:0;;;14339:21:1;14396:2;14376:18;;;14369:30;-1:-1:-1;;;14415:18:1;;;14408:51;14476:18;;31197:46:0;14155:345:1;31197:46:0;31276:10;;:21;;31287:10;31276:21;:::i;:::-;31262:11;:35;31254:66;;;;-1:-1:-1;;;31254:66:0;;12049:2:1;31254:66:0;;;12031:21:1;12088:2;12068:18;;;12061:30;-1:-1:-1;;;12107:18:1;;;12100:48;12165:18;;31254:66:0;11847:342:1;31254:66:0;31333:6;;31394:8;;31404:9;;31430:5;;31333:123;;-1:-1:-1;;;31333:123:0;;-1:-1:-1;;;;;31333:6:0;;;;:60;;:123;;31394:8;;31404:9;;31415:5;;31430;;;;-1:-1:-1;;31438:17:0;31333:123;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;31467:5:0;;31490:4;;31467:29;;-1:-1:-1;;;31467:29:0;;-1:-1:-1;;;;;31490:4:0;;;31467:29;;;4733:51:1;31467:5:0;;;-1:-1:-1;31467:16:0;;-1:-1:-1;4706:18:1;;31467:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;31520:1:0;31509:8;:12;-1:-1:-1;;31542:4:0;;31557:36;;-1:-1:-1;;;31557:36:0;;31587:4;31557:36;;;4733:51:1;-1:-1:-1;;;;;31542:4:0;;;;31534:22;;31542:4;;31557:21;;4706:18:1;;31557:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31534:60;;;;;;;;;;;;;15336:25:1;;15324:2;15309:18;;15190:177;31534:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31607:11;31629:16;31681:3;;;;;;;;;-1:-1:-1;;;;;31681:3:0;-1:-1:-1;;;;;31676:23:0;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31658:43;;-1:-1:-1;31658:43:0;-1:-1:-1;31714:24:0;31658:43;;31714:9;:24::i;:::-;31751:8;31763:27;31785:5;31763:21;:27;:::i;:::-;31751:40;;31805:10;31820:3;31824:1;31820:6;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;31820:6:0;31839:8;:3;31843:4;31839:8;:::i;:::-;31820:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31804:48;;;31864:10;31879:3;31883:1;31879:6;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;31879:6:0;31898:8;:3;31902:4;31898:8;:::i;:::-;31879:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31863:48;;;31923:10;31938:3;31942:1;31938:6;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;31938:6:0;31957:8;:3;31961:4;31957:8;:::i;:::-;31938:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31922:48;;;31982:10;31997:3;32001:1;31997:6;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;31997:6:0;32016:8;:3;32020:4;32016:8;:::i;:::-;31997:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31981:48;;;32041:10;32056:3;32060:1;32056:6;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;32056:6:0;32075:8;:3;32079:4;32075:8;:::i;:::-;32056:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32040:48;;;32109:5;:14;;;;;32118:5;32109:14;:23;;;;;32127:5;32109:23;:32;;;;;32136:5;32109:32;:41;;;;;32145:5;32109:41;32101:69;;;;-1:-1:-1;;;32101:69:0;;8756:2:1;32101:69:0;;;8738:21:1;8795:2;8775:18;;;8768:30;-1:-1:-1;;;8814:18:1;;;8807:45;8869:18;;32101:69:0;8554:339:1;32101:69:0;32188:8;;:12;32185:383;;32218:6;;32280:8;;-1:-1:-1;;;;;32218:6:0;;;;:60;;32279:12;;32290:1;;32279:12;:::i;:::-;32311:5;;32218:119;;-1:-1:-1;;;;;;32218:119:0;;;;;;;;;;32293:1;;32296:5;;-1:-1:-1;;;;;32311:5:0;;-1:-1:-1;;32319:17:0;32218:119;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;32352:5:0;;32375:4;;32352:29;;-1:-1:-1;;;32352:29:0;;-1:-1:-1;;;;;32375:4:0;;;32352:29;;;4733:51:1;32352:5:0;;;-1:-1:-1;32352:16:0;;-1:-1:-1;4706:18:1;;32352:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;32398:6:0;;32433:4;;32440:8;;-1:-1:-1;;;;;32398:6:0;;;;-1:-1:-1;32398:19:0;;-1:-1:-1;32426:4:0;;32433;;;;32439:12;;32450:1;;32439:12;:::i;:::-;32459:4;;32453:36;;-1:-1:-1;;;32453:36:0;;32483:4;32453:36;;;4733:51:1;-1:-1:-1;;;;;32459:4:0;;;;32453:21;;4706:18:1;;32453:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32491:1;32494;32505;-1:-1:-1;;32398:129:0;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;32555:1:0;32544:8;:12;-1:-1:-1;32185:383:0;31077:1498;;;;;;;;31051:1524::o;20258:309::-;20305:4;20326:13;;20343:1;20326:18;20322:78;;;-1:-1:-1;20368:20:0;;;20258:309::o;20322:78::-;20546:13;;20512:9;;20483:26;:24;:26::i;:::-;:38;;;;:::i;:::-;20469:10;;:53;;;;:::i;:::-;:60;;20525:4;20469:60;:::i;:::-;20468:91;;;;:::i;:::-;20432:20;;:127;;;;:::i;25852:90::-;23700:8;;-1:-1:-1;;;;;23700:8:0;23712:10;23700:22;23692:47;;;;-1:-1:-1;;;23692:47:0;;;;;;;:::i;:::-;25917:13:::1;:23:::0;25852:90::o;25277:117::-;23700:8;;-1:-1:-1;;;;;23700:8:0;23712:10;23700:22;23692:47;;;;-1:-1:-1;;;23692:47:0;;;;;;;:::i;:::-;25338:8:::1;:21:::0;;-1:-1:-1;;;;;;25338:21:0::1;::::0;;25370:9:::1;:16:::0;;-1:-1:-1;;25370:16:0::1;25338:21:::0;25370:16:::1;::::0;;25277:117::o;21058:169::-;21140:15;21130:7;;:25;21122:66;;;;-1:-1:-1;;;21122:66:0;;9456:2:1;21122:66:0;;;9438:21:1;9495:2;9475:18;;;9468:30;9534;9514:18;;;9507:58;9582:18;;21122:66:0;9254:352:1;21122:66:0;21199:8;:20;21058:169::o;21235:646::-;21325:1;19913:20;19924:8;19913:10;:20::i;:::-;:31;;;;-1:-1:-1;19937:7:0;;;;19913:31;19910:321;;;19981:16;:14;:16::i;:::-;19958:20;:39;20020:26;:24;:26::i;:::-;20008:9;:38;-1:-1:-1;;;;;20063:22:0;;;20059:161;;20122:16;20129:8;20122:6;:16::i;:::-;-1:-1:-1;;;;;20102:17:0;;;;;;:7;:17;;;;;;;;:36;;;;20188:20;;20153:32;;;;;;:55;20059:161;21368:7:::1;;21349:15;:26;21345:254;;21415:8;::::0;21405:18:::1;::::0;:7;:18:::1;:::i;:::-;21392:10;:31:::0;21345:254:::1;;;21456:21;21510:10;;21491:15;21481:7;;:25;;;;:::i;:::-;21480:40;;;;:::i;:::-;21579:8;::::0;21456:64;;-1:-1:-1;21549:26:0::1;21456:64:::0;21549:7;:26:::1;:::i;:::-;21548:39;;;;:::i;:::-;21535:10;:52:::0;-1:-1:-1;21345:254:0::1;21632:1;21619:10;;:14;21611:42;;;::::0;-1:-1:-1;;;21611:42:0;;15048:2:1;21611:42:0::1;::::0;::::1;15030:21:1::0;15087:2;15067:18;;;15060:30;-1:-1:-1;;;15106:18:1;;;15099:45;15161:18;;21611:42:0::1;14846:339:1::0;21611:42:0::1;21729:4;21711:9;:24:::0;;;::::1;::::0;;;;;;;21699:8:::1;::::0;21686:10:::1;::::0;:21:::1;::::0;21699:8;21686:21:::1;:::i;:::-;:49;;21664:122;;;::::0;-1:-1:-1;;;21664:122:0;;13250:2:1;21664:122:0::1;::::0;::::1;13232:21:1::0;13289:2;13269:18;;;13262:30;13328:25;13308:18;;;13301:53;13371:18;;21664:122:0::1;13048:347:1::0;21664:122:0::1;21827:8;::::0;21809:26:::1;::::0;:15:::1;:26;:::i;:::-;21799:7;:36:::0;-1:-1:-1;;21858:15:0::1;21846:9;:27:::0;21235:646::o;32779:188::-;32834:8;32886:3;32878:6;32863:14;;:21;;;;:::i;:::-;32862:27;;;;:::i;:::-;32856:33;;32912:3;32900:8;;:15;;;;;;;:::i;:::-;;;;-1:-1:-1;;32946:4:0;32928:9;:24;;;;;;;;;;:31;;32956:3;;32928:9;:31;;32956:3;;32928:31;:::i;:::-;;;;-1:-1:-1;32779:188:0;;;-1:-1:-1;;32779:188:0:o;33481:247::-;33529:4;33863:18;;33910:8;;;33547:57;;-1:-1:-1;33588:4:0;;33481:247;-1:-1:-1;33481:247:0:o;33547:57::-;33652:5;;33634:23;;:15;:23;:::i;:::-;-1:-1:-1;;;;;33619:11:0;;;;;;:6;:11;;;;;;:38;33616:80;;-1:-1:-1;33680:4:0;;33481:247;-1:-1:-1;33481:247:0:o;33616:80::-;-1:-1:-1;33715:5:0;;33481:247;-1:-1:-1;33481:247:0:o;32975:191::-;33032:8;33085:3;33077:6;33061:15;;:22;;;;:::i;33174:189::-;33233:8;33282:3;33274:6;33262:11;;:18;;;;:::i;33935:106::-;33993:7;34024:1;34020;:5;:13;;34032:1;34020:13;;;34028:1;34020:13;34013:20;33935:106;-1:-1:-1;;;33935:106:0:o;32583:188::-;32637:8;32690:3;32682:6;32666:13;;:22;;;;:::i;:::-;32665:28;;;;:::i;:::-;32659:34;;32716:3;32704:8;;:15;;;;;;;:::i;34553:349::-;-1:-1:-1;;;;;34636:20:0;;34397:42;34636:20;34632:263;;;34692:6;;:31;;34674:12;;-1:-1:-1;;;;;34692:6:0;;34711:7;;34674:12;34692:31;34674:12;34692:31;34711:7;34692:6;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34673:50;;;34746:7;34738:50;;;;-1:-1:-1;;;34738:50:0;;11331:2:1;34738:50:0;;;11313:21:1;11370:2;11350:18;;;11343:30;11409:32;11389:18;;;11382:60;11459:18;;34738:50:0;11129:354:1;34632:263:0;34867:6;;14759:58;;;-1:-1:-1;;;;;34867:6:0;;;14759:58;;;5958:51:1;;;6025:18;;;;6018:34;;;14759:58:0;;;;;;;;;;5931:18:1;;;;14759:58:0;;;;;;;;-1:-1:-1;;;;;14759:58:0;-1:-1:-1;;;14759:58:0;;;18132:69;;;;;;;;;;;;;;;;34821:62;;34851:13;;34867:6;;34875:7;;14732:86;;34851:13;;14759:58;-1:-1:-1;;18132:69:0;;:27;;;;14759:58;;18132:27;:69::i;:::-;18216:17;;18106:95;;-1:-1:-1;18216:21:0;18212:179;;18313:10;18302:30;;;;;;;;;;;;:::i;:::-;18294:85;;;;-1:-1:-1;;;18294:85:0;;13946:2:1;18294:85:0;;;13928:21:1;13985:2;13965:18;;;13958:30;14024:34;14004:18;;;13997:62;-1:-1:-1;;;14075:18:1;;;14068:40;14125:19;;18294:85:0;13744:406:1;4082:229:0;4219:12;4251:52;4273:6;4281:4;4287:1;4290:12;4251:21;:52::i;:::-;4244:59;4082:229;-1:-1:-1;;;;4082:229:0:o;5202:510::-;5372:12;5430:5;5405:21;:30;;5397:81;;;;-1:-1:-1;;;5397:81:0;;10170:2:1;5397:81:0;;;10152:21:1;10209:2;10189:18;;;10182:30;10248:34;10228:18;;;10221:62;-1:-1:-1;;;10299:18:1;;;10292:36;10345:19;;5397:81:0;9968:402:1;5397:81:0;-1:-1:-1;;;;;1632:19:0;;;5489:60;;;;-1:-1:-1;;;5489:60:0;;12892:2:1;5489:60:0;;;12874:21:1;12931:2;12911:18;;;12904:30;12970:31;12950:18;;;12943:59;13019:18;;5489:60:0;12690:353:1;5489:60:0;5563:12;5577:23;5604:6;-1:-1:-1;;;;;5604:11:0;5623:5;5630:4;5604:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5562:73;;;;5653:51;5670:7;5679:10;5691:12;5653:16;:51::i;:::-;5646:58;5202:510;-1:-1:-1;;;;;;;5202:510:0:o;7888:762::-;8038:12;8067:7;8063:580;;;-1:-1:-1;8098:10:0;8091:17;;8063:580;8212:17;;:21;8208:424;;8460:10;8454:17;8521:15;8508:10;8504:2;8500:19;8493:44;8208:424;8603:12;8596:20;;-1:-1:-1;;;8596:20:0;;;;;;;;:::i;14:247:1:-;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;181:9;168:23;200:31;225:5;200:31;:::i;266:388::-;334:6;342;395:2;383:9;374:7;370:23;366:32;363:52;;;411:1;408;401:12;363:52;450:9;437:23;469:31;494:5;469:31;:::i;:::-;519:5;-1:-1:-1;576:2:1;561:18;;548:32;589:33;548:32;589:33;:::i;:::-;641:7;631:17;;;266:388;;;;;:::o;659:456::-;736:6;744;752;805:2;793:9;784:7;780:23;776:32;773:52;;;821:1;818;811:12;773:52;860:9;847:23;879:31;904:5;879:31;:::i;:::-;929:5;-1:-1:-1;986:2:1;971:18;;958:32;999:33;958:32;999:33;:::i;:::-;659:456;;1051:7;;-1:-1:-1;;;1105:2:1;1090:18;;;;1077:32;;659:456::o;1120:382::-;1185:6;1193;1246:2;1234:9;1225:7;1221:23;1217:32;1214:52;;;1262:1;1259;1252:12;1214:52;1301:9;1288:23;1320:31;1345:5;1320:31;:::i;:::-;1370:5;-1:-1:-1;1427:2:1;1412:18;;1399:32;1440:30;1399:32;1440:30;:::i;1507:315::-;1575:6;1583;1636:2;1624:9;1615:7;1611:23;1607:32;1604:52;;;1652:1;1649;1642:12;1604:52;1691:9;1678:23;1710:31;1735:5;1710:31;:::i;:::-;1760:5;1812:2;1797:18;;;;1784:32;;-1:-1:-1;;;1507:315:1:o;1827:245::-;1894:6;1947:2;1935:9;1926:7;1922:23;1918:32;1915:52;;;1963:1;1960;1953:12;1915:52;1995:9;1989:16;2014:28;2036:5;2014:28;:::i;2343:180::-;2402:6;2455:2;2443:9;2434:7;2430:23;2426:32;2423:52;;;2471:1;2468;2461:12;2423:52;-1:-1:-1;2494:23:1;;2343:180;-1:-1:-1;2343:180:1:o;2528:184::-;2598:6;2651:2;2639:9;2630:7;2626:23;2622:32;2619:52;;;2667:1;2664;2657:12;2619:52;-1:-1:-1;2690:16:1;;2528:184;-1:-1:-1;2528:184:1:o;2717:312::-;2796:6;2804;2857:2;2845:9;2836:7;2832:23;2828:32;2825:52;;;2873:1;2870;2863:12;2825:52;2902:9;2896:16;2886:26;;2955:2;2944:9;2940:18;2934:25;2968:31;2993:5;2968:31;:::i;3034:248::-;3102:6;3110;3163:2;3151:9;3142:7;3138:23;3134:32;3131:52;;;3179:1;3176;3169:12;3131:52;-1:-1:-1;;3202:23:1;;;3272:2;3257:18;;;3244:32;;-1:-1:-1;3034:248:1:o;3287:306::-;3375:6;3383;3391;3444:2;3432:9;3423:7;3419:23;3415:32;3412:52;;;3460:1;3457;3450:12;3412:52;3489:9;3483:16;3473:26;;3539:2;3528:9;3524:18;3518:25;3508:35;;3583:2;3572:9;3568:18;3562:25;3552:35;;3287:306;;;;;:::o;3598:495::-;3659:3;3697:5;3691:12;3724:6;3719:3;3712:19;3750:4;3779:2;3774:3;3770:12;3763:19;;3801:5;3798:1;3791:16;3843:2;3840:1;3830:16;3864:1;3874:194;3888:6;3885:1;3882:13;3874:194;;;3953:13;;-1:-1:-1;;;;;3949:39:1;3937:52;;4009:12;;;;3985:1;4044:14;;;;3903:9;3874:194;;;-1:-1:-1;4084:3:1;;3598:495;-1:-1:-1;;;;;3598:495:1:o;4098:274::-;4227:3;4265:6;4259:13;4281:53;4327:6;4322:3;4315:4;4307:6;4303:17;4281:53;:::i;:::-;4350:16;;;;;4098:274;-1:-1:-1;;4098:274:1:o;5019:760::-;-1:-1:-1;;;;;5434:15:1;;;5416:34;;5486:15;;;5481:2;5466:18;;5459:43;5533:2;5518:18;;5511:34;;;;5576:2;5561:18;;5554:34;;;;5619:3;5604:19;;5597:35;;;;5396:3;5648:19;;5641:35;5713:15;;;5707:3;5692:19;;5685:44;5760:3;5745:19;;5738:35;;;;5365:3;5350:19;;5019:760::o;6921:383::-;7070:2;7059:9;7052:21;7033:4;7102:6;7096:13;7145:6;7140:2;7129:9;7125:18;7118:34;7161:66;7220:6;7215:2;7204:9;7200:18;7195:2;7187:6;7183:15;7161:66;:::i;:::-;7288:2;7267:15;-1:-1:-1;;7263:29:1;7248:45;;;;7295:2;7244:54;;6921:383;-1:-1:-1;;6921:383:1:o;14505:336::-;14707:2;14689:21;;;14746:2;14726:18;;;14719:30;-1:-1:-1;;;14780:2:1;14765:18;;14758:42;14832:2;14817:18;;14505:336::o;15372:587::-;15668:6;15657:9;15650:25;15711:6;15706:2;15695:9;15691:18;15684:34;15754:3;15749:2;15738:9;15734:18;15727:31;15631:4;15775:65;15835:3;15824:9;15820:19;15812:6;15775:65;:::i;:::-;-1:-1:-1;;;;;15876:32:1;;;;15871:2;15856:18;;15849:60;-1:-1:-1;15940:3:1;15925:19;15918:35;15767:73;15372:587;-1:-1:-1;;;15372:587:1:o;16737:128::-;16777:3;16808:1;16804:6;16801:1;16798:13;16795:39;;;16814:18;;:::i;:::-;-1:-1:-1;16850:9:1;;16737:128::o;16870:217::-;16910:1;16936;16926:132;;16980:10;16975:3;16971:20;16968:1;16961:31;17015:4;17012:1;17005:15;17043:4;17040:1;17033:15;16926:132;-1:-1:-1;17072:9:1;;16870:217::o;17092:168::-;17132:7;17198:1;17194;17190:6;17186:14;17183:1;17180:21;17175:1;17168:9;17161:17;17157:45;17154:71;;;17205:18;;:::i;:::-;-1:-1:-1;17245:9:1;;17092:168::o;17265:125::-;17305:4;17333:1;17330;17327:8;17324:34;;;17338:18;;:::i;:::-;-1:-1:-1;17375:9:1;;17265:125::o;17395:258::-;17467:1;17477:113;17491:6;17488:1;17485:13;17477:113;;;17567:11;;;17561:18;17548:11;;;17541:39;17513:2;17506:10;17477:113;;;17608:6;17605:1;17602:13;17599:48;;;-1:-1:-1;;17643:1:1;17625:16;;17618:27;17395:258::o;17658:380::-;17737:1;17733:12;;;;17780;;;17801:61;;17855:4;17847:6;17843:17;17833:27;;17801:61;17908:2;17900:6;17897:14;17877:18;17874:38;17871:161;;;17954:10;17949:3;17945:20;17942:1;17935:31;17989:4;17986:1;17979:15;18017:4;18014:1;18007:15;17871:161;;17658:380;;;:::o;18043:127::-;18104:10;18099:3;18095:20;18092:1;18085:31;18135:4;18132:1;18125:15;18159:4;18156:1;18149:15;18175:127;18236:10;18231:3;18227:20;18224:1;18217:31;18267:4;18264:1;18257:15;18291:4;18288:1;18281:15;18307:131;-1:-1:-1;;;;;18382:31:1;;18372:42;;18362:70;;18428:1;18425;18418:12;18443:118;18529:5;18522:13;18515:21;18508:5;18505:32;18495:60;;18551:1;18548;18541:12

Swarm Source

ipfs://322499f14ffc364035655fdf90c26e9953841e8d1ad6194d2ce8b82d8bd9718a
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

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