ETH Price: $2,462.46 (+0.44%)

Token

Deagle (DEAGLE)
 

Overview

Max Total Supply

100,000,000 DEAGLE

Holders

76

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0.000000000000000001 DEAGLE

Value
$0.00
0x10345dd4c85db864df8984f8e38293bc973d27e2
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:
Deagle

Compiler Version
v0.8.26+commit.8a97fa7a

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-09-26
*/

/**


$DEAGLE - Desert Eagle Meme Sniper Roulette

Sniper technology, Degen psychology.

Web: deaglesniper.io
Gitbook: https://deaglesniper-io.gitbook.io/deaglesniper.io/
X: https://x.com/deaglesniper/status/1836705420871643601?s=46
Telegram: https://t.me/DeagleSniper


*/

pragma solidity 0.8.26;

// SPDX-License-Identifier: MIT

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

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

interface IERC20 {
    /**
     * @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 `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, 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 `sender` to `recipient` 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 sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

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

interface IERC20Metadata is IERC20{
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

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

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

contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

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

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

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

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

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

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

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

    /**
     * @dev See {IERC20-approve}.
     *
     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on
     * `transferFrom`. This is semantically equivalent to an infinite approval.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, amount);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * NOTE: Does not update the allowance if the current allowance
     * is the maximum `uint256`.
     *
     * Requirements:
     *
     * - `from` and `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     * - the caller must have allowance for ``from``'s tokens of at least
     * `amount`.
     */
    function transferFrom(address from, address to, uint256 amount) public virtual override returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, amount);
        _transfer(from, to, amount);
        return true;
    }

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

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

        return true;
    }

    /**
     * @dev Moves `amount` of tokens from `from` to `to`.
     *
     * This internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     */
    function _transfer(address from, address to, uint256 amount) internal virtual {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

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

        emit Transfer(from, to, amount);
    }

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

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

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

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

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

contract Ownable is Context {
    address private _owner;

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

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

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

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

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

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

    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

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

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

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

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

    /**
     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling
     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.
     *
     * _Available since v4.8._
     */
    function verifyCallResultFromTarget(
        address target,
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        if (success) {
            if (returndata.length == 0) {
                // only check isContract if the call was successful and the return data is empty
                // otherwise we already know that it was a contract
                require(isContract(target), "Address: call to non-contract");
            }
            return returndata;
        } else {
            _revert(returndata, errorMessage);
        }
    }

    /**
     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason or 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 {
            _revert(returndata, errorMessage);
        }
    }

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

library SafeERC20 {
    using Address for address;

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

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

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

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

interface ILpPair {
    function sync() external;
}

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

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

contract Deagle is ERC20, Ownable {

    mapping (address => bool) public exemptFromFees;
    mapping (address => bool) public exemptFromLimits;

    bool public tradingAllowed;

    mapping (address => bool) public isAMMPair;

    address public ammunitionAddress;
    address public crewAddress;

    Taxes public buyTax;
    Taxes public sellTax;

    TokensForTax public tokensForTax;

    bool public limited = true;

    uint256 public swapTokensAtAmt;
    uint256 public lastSwapBackBlock;

    address public immutable lpPair;
    IDexRouter public immutable dexRouter;
    address public immutable WETH;

    TxLimits public txLimits;

    uint64 public constant FEE_DIVISOR = 10000;

    uint256 public launchBlock;


    // structs

    struct TxLimits {
        uint128 transactionLimit;
        uint128 walletLimit;
    }

    struct Taxes {
        uint64 ammunitionTax;
        uint64 crewTax;
        uint64 liquidityTax;
        uint64 totalTax;
    }

    struct TokensForTax {
        uint80 tokensForAmmunition;
        uint80 tokensForLiquidity;
        uint80 tokensForCrew;
        bool gasSaver;
    }

    // events

    event SetExemptFromFees(address _address, bool _isExempt);
    event SetExemptFromLimits(address _address, bool _isExempt);
    event SafetyOff();
    event UpdatedBuyTax(uint newAmt);
    event UpdatedSellTax(uint newAmt);

    // constructor

    constructor()
        ERC20("Deagle", "DEAGLE")
    {   
        uint256 _totalSupply = 100 * 1e6 * (10 ** 18);
        _mint(msg.sender, _totalSupply * 8 / 10);
        _mint(address(this), _totalSupply - balanceOf(msg.sender));

        address _v2Router;

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

        dexRouter = IDexRouter(_v2Router);

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

        ammunitionAddress = msg.sender; // update
        crewAddress = msg.sender; // update

        buyTax.ammunitionTax = 500; // 1% = 100
        buyTax.liquidityTax = 0;
        buyTax.crewTax = 500;
        buyTax.totalTax = buyTax.ammunitionTax + buyTax.liquidityTax + buyTax.crewTax;

        sellTax.ammunitionTax = 500;
        sellTax.liquidityTax = 0;
        sellTax.crewTax = 500;
        sellTax.totalTax = sellTax.ammunitionTax + sellTax.liquidityTax + sellTax.crewTax;

        tokensForTax.gasSaver = true;

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

        isAMMPair[lpPair] = true;

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

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

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

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

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

    }

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

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

        Taxes memory taxes;

        if (isAMMPair[to]){
            taxes = sellTax;
        } else if(isAMMPair[from]){
            taxes = buyTax;
        }
        
        if(taxes.totalTax > 0){
            TokensForTax memory tokensForTaxUpdate = tokensForTax;
            if(launchBlock == block.number){
                if (isAMMPair[from]){
                    tax = uint128(amount * 1000 / FEE_DIVISOR);
                } else if (isAMMPair[to]) {
                    tax = uint128(amount * 5000 / FEE_DIVISOR);
                }
            } else {
                tax = uint128(amount * taxes.totalTax / FEE_DIVISOR);
            }
            tokensForTaxUpdate.tokensForLiquidity += uint80(tax * taxes.liquidityTax / taxes.totalTax / 1e9);
            tokensForTaxUpdate.tokensForAmmunition += uint80(tax * taxes.ammunitionTax / taxes.totalTax / 1e9);
            tokensForTaxUpdate.tokensForCrew += uint80(tax * taxes.crewTax / taxes.totalTax / 1e9);
            tokensForTax = tokensForTaxUpdate;
            super._transfer(from, address(this), tax);
        }
        
        return tax;
    }

    function swapTokensForETH(uint256 tokenAmt) private {

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

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

    function convertTaxes() private {

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

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

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

        if(contractBalance > 0){

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

            bool success;

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

            ethBalance = address(this).balance;

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

        tokensForTaxMem.tokensForLiquidity = 0;
        tokensForTaxMem.tokensForAmmunition = 0;
        tokensForTaxMem.tokensForCrew = 0;

        tokensForTax = tokensForTaxMem;
        lastSwapBackBlock = block.number;
    }

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

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

    function updateBuyTax(uint64 _ammunitionTax, uint64 _liquidityTax, uint64 _crewTax) external onlyOwner {
        Taxes memory taxes;
        taxes.ammunitionTax = _ammunitionTax;
        taxes.liquidityTax = _liquidityTax;
        taxes.crewTax = _crewTax;
        taxes.totalTax = _ammunitionTax + _liquidityTax + _crewTax;
        require(taxes.totalTax  <= 1000 || taxes.totalTax <= buyTax.totalTax, "Keep tax below 10%");
        emit UpdatedBuyTax(taxes.totalTax);
        buyTax = taxes;
    }

    function updateSellTax(uint64 _ammunitionTax, uint64 _liquidityTax, uint64 _crewTax) external onlyOwner {
        Taxes memory taxes;
        taxes.ammunitionTax = _ammunitionTax;
        taxes.liquidityTax = _liquidityTax;
        taxes.crewTax = _crewTax;
        taxes.totalTax = _ammunitionTax + _liquidityTax + _crewTax;
        require(taxes.totalTax  <= 1000 || taxes.totalTax <= sellTax.totalTax, "Keep tax below 10%");
        emit UpdatedSellTax(taxes.totalTax);
        sellTax = taxes;
    }

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

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

    function retrieveAmmo() external {
        bool success;
        (success,) = address(crewAddress).call{value: address(this).balance}("");
    }

    function rescueMission(address _token) external {
        require(_token != address(0), "_token address cannot be 0");
        uint256 _contractBalance = IERC20(_token).balanceOf(address(this));
        SafeERC20.safeTransfer(IERC20(_token),address(crewAddress), _contractBalance);
    }

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

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

    receive() payable external {}
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[],"name":"SafetyOff","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"},{"indexed":false,"internalType":"bool","name":"_isExempt","type":"bool"}],"name":"SetExemptFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"},{"indexed":false,"internalType":"bool","name":"_isExempt","type":"bool"}],"name":"SetExemptFromLimits","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmt","type":"uint256"}],"name":"UpdatedBuyTax","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmt","type":"uint256"}],"name":"UpdatedSellTax","type":"event"},{"inputs":[],"name":"FEE_DIVISOR","outputs":[{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WETH","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ammunitionAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTax","outputs":[{"internalType":"uint64","name":"ammunitionTax","type":"uint64"},{"internalType":"uint64","name":"crewTax","type":"uint64"},{"internalType":"uint64","name":"liquidityTax","type":"uint64"},{"internalType":"uint64","name":"totalTax","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"commenceDuel","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"crewAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IDexRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"exemptFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"exemptFromLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isAMMPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastSwapBackBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limited","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"rescueMission","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"retrieveAmmo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"safetyOff","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellTax","outputs":[{"internalType":"uint64","name":"ammunitionTax","type":"uint64"},{"internalType":"uint64","name":"crewTax","type":"uint64"},{"internalType":"uint64","name":"liquidityTax","type":"uint64"},{"internalType":"uint64","name":"totalTax","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_isExempt","type":"bool"}],"name":"setExemptFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_isExempt","type":"bool"}],"name":"setExemptFromLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapTokensAtAmt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForTax","outputs":[{"internalType":"uint80","name":"tokensForAmmunition","type":"uint80"},{"internalType":"uint80","name":"tokensForLiquidity","type":"uint80"},{"internalType":"uint80","name":"tokensForCrew","type":"uint80"},{"internalType":"bool","name":"gasSaver","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingAllowed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"txLimits","outputs":[{"internalType":"uint128","name":"transactionLimit","type":"uint128"},{"internalType":"uint128","name":"walletLimit","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"updateAmmunitionAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint64","name":"_ammunitionTax","type":"uint64"},{"internalType":"uint64","name":"_liquidityTax","type":"uint64"},{"internalType":"uint64","name":"_crewTax","type":"uint64"}],"name":"updateBuyTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"updateCrewAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint64","name":"_ammunitionTax","type":"uint64"},{"internalType":"uint64","name":"_liquidityTax","type":"uint64"},{"internalType":"uint64","name":"_crewTax","type":"uint64"}],"name":"updateSellTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60e0604052600f805460ff1916600117905534801561001c575f80fd5b5060405180604001604052806006815260200165446561676c6560d01b81525060405180604001604052806006815260200165444541474c4560d01b815250816003908161006a9190610888565b5060046100778282610888565b5050505f61008961060660201b60201c565b600580546001600160a01b0319166001600160a01b038316908117909155604051919250905f907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506a52b7d2dcc80cd2e400000061010233600a6100f3846008610956565b6100fd9190610973565b61060a565b335f908152602081905260409020546101219030906100fd9084610992565b5f466001036101455750737a250d5630b4cf539739df2c5dacb4c659f2488d610220565b466005036101685750737a250d5630b4cf539739df2c5dacb4c659f2488d610220565b4660610361018b575073d99d1c33f9fc3444f8101754abc46c52416550d1610220565b4661a4b1036101af5750731b02da8cb0d097eb8d57a175b88c7d8b47997506610220565b46612105036101d35750734752ba5dbc23f44d87826276bf6fd6b1c372ad24610220565b60405162461bcd60e51b815260206004820152601460248201527f436861696e206e6f7420636f6e6669677572656400000000000000000000000060448201526064015b60405180910390fd5b6001600160a01b03811660a0526103e861023960025490565b61024490600a610956565b61024e9190610973565b601280546001600160801b0319166001600160801b03929092169190911790556103e861027a60025490565b61028590600a610956565b61028f9190610973565b601280546001600160801b03928316600160801b029216919091179055620186a06102b960025490565b6102c4906019610956565b6102ce9190610973565b601055600a8054336001600160a01b03199182168117909255600b80549091169091179055600c80546001600160c01b0319166901f400000000000001f417908190556001600160401b0368010000000000000000820481169161033d91600160801b909104166101f46109a5565b61034791906109a5565b600c80546001600160c01b0316600160c01b6001600160401b0393841602179055600d80546001600160c01b0319166901f400000000000001f417908190556801000000000000000081048216916103a991600160801b9004166101f46109a5565b6103b391906109a5565b600d80546001600160401b0392909216600160c01b026001600160c01b03909216919091179055600e805460ff60f01b1916600160f01b17905560a051604080516315ab88c960e31b815290516001600160a01b039092169163ad5c4648916004808201926020929091908290030181865afa158015610435573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061045991906109c4565b6001600160a01b031660c0816001600160a01b03168152505060a0516001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104b0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104d491906109c4565b60c0516040516364e329cb60e11b81523060048201526001600160a01b03918216602482015291169063c9c65396906044016020604051808303815f875af1158015610522573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061054691906109c4565b6001600160a01b0390811660808190525f9081526009602090815260408083208054600160ff19918216811790925560078452828520805482168317905533808652838620805483168417905530808752848720805484168517905590865260069094528285208054821683179055838552828520805482168317905560a05195861685529190932080549091169092179091556105e5915f196106cd565b6105ff3360a0516105fa6106c760201b60201c565b6106cd565b5050610a04565b3390565b6001600160a01b0382166106605760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610217565b8060025f82825461067191906109f1565b90915550506001600160a01b0382165f81815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b60025490565b6001600160a01b03831661072f5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610217565b6001600160a01b0382166107905760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610217565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b634e487b7160e01b5f52604160045260245ffd5b600181811c9082168061081857607f821691505b60208210810361083657634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111561088357805f5260205f20601f840160051c810160208510156108615750805b601f840160051c820191505b81811015610880575f815560010161086d565b50505b505050565b81516001600160401b038111156108a1576108a16107f0565b6108b5816108af8454610804565b8461083c565b6020601f8211600181146108e7575f83156108d05750848201515b5f19600385901b1c1916600184901b178455610880565b5f84815260208120601f198516915b8281101561091657878501518255602094850194600190920191016108f6565b508482101561093357868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b808202811582820484141761096d5761096d610942565b92915050565b5f8261098d57634e487b7160e01b5f52601260045260245ffd5b500490565b8181038181111561096d5761096d610942565b6001600160401b03818116838216019081111561096d5761096d610942565b5f602082840312156109d4575f80fd5b81516001600160a01b03811681146109ea575f80fd5b9392505050565b8082018082111561096d5761096d610942565b60805160a05160c0516129a1610a515f395f81816106f6015261235901525f81816102da01526123b001525f818161042501528181611236015281816120fc015261212301526129a15ff3fe60806040526004361061024b575f3560e01c8063860a32ec11610134578063b0249cc6116100b3578063d00efb2f11610078578063d00efb2f146107d7578063dd62ed3e146107ec578063e4169ed51461080b578063f270fde41461082a578063f2fde38b14610874578063ffd6fbf414610893575f80fd5b8063b0249cc614610718578063bedafd0114610746578063c78d0fa014610765578063cc1776d31461077a578063ccad03e1146107b8575f80fd5b806395d89b41116100f957806395d89b41146106665780639e93ad8e1461067a578063a457c2d7146106a7578063a9059cbb146106c6578063ad5c4648146106e5575f80fd5b8063860a32ec146105cf5780638979dd00146105e85780638becc57d146105fc5780638d3e6e401461061b5780638da5cb5b14610649575f80fd5b8063313ce567116101cb5780634f7041a5116101905780634f7041a51461045b57806353371be0146104cc5780635a90a49e146104e55780636d7adcad1461051357806370a0823114610587578063715018a6146105bb575f80fd5b8063313ce567146103c557806339509351146103e0578063432e95a5146103ff578063452ed4f11461041457806347b9b45b14610447575f80fd5b806318160ddd1161021157806318160ddd1461032b5780631c292cce1461034957806323b872dd146103685780632571754514610387578063286965a7146103a6575f80fd5b80629a701614610256578063048471e01461029257806306fdde03146102a85780630758d924146102c9578063095ea7b3146102fc575f80fd5b3661025257005b5f80fd5b348015610261575f80fd5b50600b54610275906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561029d575f80fd5b506102a66108b2565b005b3480156102b3575f80fd5b506102bc61095a565b6040516102899190612588565b3480156102d4575f80fd5b506102757f000000000000000000000000000000000000000000000000000000000000000081565b348015610307575f80fd5b5061031b6103163660046125d8565b6109ea565b6040519015158152602001610289565b348015610336575f80fd5b506002545b604051908152602001610289565b348015610354575f80fd5b506102a6610363366004612600565b610a03565b348015610373575f80fd5b5061031b610382366004612620565b610a94565b348015610392575f80fd5b506102a66103a1366004612600565b610ab7565b3480156103b1575f80fd5b506102a66103c0366004612670565b610b48565b3480156103d0575f80fd5b5060405160128152602001610289565b3480156103eb575f80fd5b5061031b6103fa3660046125d8565b610ce5565b34801561040a575f80fd5b5061033b60115481565b34801561041f575f80fd5b506102757f000000000000000000000000000000000000000000000000000000000000000081565b348015610452575f80fd5b506102a6610d06565b348015610466575f80fd5b50600c54610499906001600160401b0380821691600160401b8104821691600160801b8204811691600160c01b90041684565b604080516001600160401b0395861681529385166020850152918416918301919091529091166060820152608001610289565b3480156104d7575f80fd5b5060085461031b9060ff1681565b3480156104f0575f80fd5b5061031b6104ff366004612600565b60066020525f908152604090205460ff1681565b34801561051e575f80fd5b50600e54610552906001600160501b0380821691600160501b8104821691600160a01b82041690600160f01b900460ff1684565b60405161028994939291906001600160501b039485168152928416602084015292166040820152901515606082015260800190565b348015610592575f80fd5b5061033b6105a1366004612600565b6001600160a01b03165f9081526020819052604090205490565b3480156105c6575f80fd5b506102a6610d9b565b3480156105da575f80fd5b50600f5461031b9060ff1681565b3480156105f3575f80fd5b506102a6610e0e565b348015610607575f80fd5b506102a6610616366004612670565b610e63565b348015610626575f80fd5b5061031b610635366004612600565b60076020525f908152604090205460ff1681565b348015610654575f80fd5b506005546001600160a01b0316610275565b348015610671575f80fd5b506102bc611000565b348015610685575f80fd5b5061068f61271081565b6040516001600160401b039091168152602001610289565b3480156106b2575f80fd5b5061031b6106c13660046125d8565b61100f565b3480156106d1575f80fd5b5061031b6106e03660046125d8565b611089565b3480156106f0575f80fd5b506102757f000000000000000000000000000000000000000000000000000000000000000081565b348015610723575f80fd5b5061031b610732366004612600565b60096020525f908152604090205460ff1681565b348015610751575f80fd5b506102a66107603660046126c0565b611096565b348015610770575f80fd5b5061033b60105481565b348015610785575f80fd5b50600d54610499906001600160401b0380821691600160401b8104821691600160801b8204811691600160c01b90041684565b3480156107c3575f80fd5b506102a66107d23660046126c0565b6111c0565b3480156107e2575f80fd5b5061033b60135481565b3480156107f7575f80fd5b5061033b6108063660046126f5565b611305565b348015610816575f80fd5b50600a54610275906001600160a01b031681565b348015610835575f80fd5b50601254610854906001600160801b0380821691600160801b90041682565b604080516001600160801b03938416815292909116602083015201610289565b34801561087f575f80fd5b506102a661088e366004612600565b61132f565b34801561089e575f80fd5b506102a66108ad366004612600565b611419565b6005546001600160a01b031633146108e55760405162461bcd60e51b81526004016108dc90612726565b60405180910390fd5b600f805460ff19169055604080518082019091525f80825260208201525f61090c60025490565b6001600160801b03811680845260208401819052600160801b8102176012556040519091507f66d01defaa9c2963b8b6a2188b20368e48e1bbf586d3f3d65b59ee5e4e32caa6905f90a15050565b6060600380546109699061275b565b80601f01602080910402602001604051908101604052809291908181526020018280546109959061275b565b80156109e05780601f106109b7576101008083540402835291602001916109e0565b820191905f5260205f20905b8154815290600101906020018083116109c357829003601f168201915b5050505050905090565b5f336109f78185856114f6565b60019150505b92915050565b6005546001600160a01b03163314610a2d5760405162461bcd60e51b81526004016108dc90612726565b6001600160a01b038116610a725760405162461bcd60e51b815260206004820152600c60248201526b7a65726f206164647265737360a01b60448201526064016108dc565b600a80546001600160a01b0319166001600160a01b0392909216919091179055565b5f33610aa1858285611619565b610aac85858561168b565b506001949350505050565b6005546001600160a01b03163314610ae15760405162461bcd60e51b81526004016108dc90612726565b6001600160a01b038116610b265760405162461bcd60e51b815260206004820152600c60248201526b7a65726f206164647265737360a01b60448201526064016108dc565b600b80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314610b725760405162461bcd60e51b81526004016108dc90612726565b604080516080810182525f60608201526001600160401b03858116825284811692820192909252908216602082015281610bac84866127a7565b610bb691906127a7565b6001600160401b0316606082018190526103e8101580610bf05750600d5460608201516001600160401b03600160c01b9092048216911611155b610c315760405162461bcd60e51b81526020600482015260126024820152714b656570207461782062656c6f772031302560701b60448201526064016108dc565b60608101516040516001600160401b0390911681527fa02824f65350567bc405e202b741e7ca6274004a9feeb44149df72b8bd599c979060200160405180910390a18051600d8054602084015160408501516060909501516001600160401b03908116600160c01b026001600160c01b03968216600160801b02969096166001600160801b03928216600160401b026001600160801b03199094169190951617919091171691909117919091179055505050565b5f336109f7818585610cf78383611305565b610d0191906127c6565b6114f6565b6005546001600160a01b03163314610d305760405162461bcd60e51b81526004016108dc90612726565b60085460ff1615610d835760405162461bcd60e51b815260206004820152601760248201527f54726164696e6720616c726561647920656e61626c656400000000000000000060448201526064016108dc565b6008805460ff19166001179055436013819055601155565b6005546001600160a01b03163314610dc55760405162461bcd60e51b81526004016108dc90612726565b6005546040515f916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b600b546040515f916001600160a01b03169047908381818185875af1925050503d805f8114610e58576040519150601f19603f3d011682016040523d82523d5f602084013e610e5d565b606091505b50505050565b6005546001600160a01b03163314610e8d5760405162461bcd60e51b81526004016108dc90612726565b604080516080810182525f60608201526001600160401b03858116825284811692820192909252908216602082015281610ec784866127a7565b610ed191906127a7565b6001600160401b0316606082018190526103e8101580610f0b5750600c5460608201516001600160401b03600160c01b9092048216911611155b610f4c5760405162461bcd60e51b81526020600482015260126024820152714b656570207461782062656c6f772031302560701b60448201526064016108dc565b60608101516040516001600160401b0390911681527f5380a61520019ce8270d583f62f1b2b9f4f4372e1acaaf708f4865cecece05089060200160405180910390a18051600c8054602084015160408501516060909501516001600160401b03908116600160c01b026001600160c01b03968216600160801b02969096166001600160801b03928216600160401b026001600160801b03199094169190951617919091171691909117919091179055505050565b6060600480546109699061275b565b5f338161101c8286611305565b90508381101561107c5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016108dc565b610aac82868684036114f6565b5f336109f781858561168b565b6005546001600160a01b031633146110c05760405162461bcd60e51b81526004016108dc90612726565b6001600160a01b0382166111055760405162461bcd60e51b815260206004820152600c60248201526b5a65726f204164647265737360a01b60448201526064016108dc565b306001600160a01b0383160361115d5760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420756e6578656d707420636f6e7472616374000000000000000060448201526064016108dc565b6001600160a01b0382165f81815260066020908152604091829020805460ff19168515159081179091558251938452908301527f998cce27cbf44405c67eb636a634d5e2f2e6ff248b3d71fbbbb022f3c4c6dd2d91015b60405180910390a15050565b6005546001600160a01b031633146111ea5760405162461bcd60e51b81526004016108dc90612726565b6001600160a01b03821661122f5760405162461bcd60e51b815260206004820152600c60248201526b5a65726f204164647265737360a01b60448201526064016108dc565b806112aa577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316036112aa5760405162461bcd60e51b815260206004820152601260248201527121b0b73737ba103932b6b7bb32903830b4b960711b60448201526064016108dc565b6001600160a01b0382165f81815260076020908152604091829020805460ff19168515159081179091558251938452908301527f8f9f40630a1d139e6cf69b4f447ca47a36f10a017524efaa38252e516fa227ce91016111b4565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b6005546001600160a01b031633146113595760405162461bcd60e51b81526004016108dc90612726565b6001600160a01b0381166113be5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016108dc565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03811661146f5760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f74206265203000000000000060448201526064016108dc565b6040516370a0823160e01b81523060048201525f906001600160a01b038316906370a0823190602401602060405180830381865afa1580156114b3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114d791906127d9565b600b549091506114f29083906001600160a01b031683611749565b5050565b6001600160a01b0383166115585760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016108dc565b6001600160a01b0382166115b95760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016108dc565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b5f6116248484611305565b90505f198114610e5d578181101561167e5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016108dc565b610e5d84848484036114f6565b6001600160a01b0383165f9081526006602052604090205460ff161580156116cb57506001600160a01b0382165f9081526006602052604090205460ff16155b156117395760085460ff166117175760405162461bcd60e51b815260206004820152601260248201527154726164696e67206e6f742061637469766560701b60448201526064016108dc565b61172283838361179b565b61172c90826127f0565b9050611739838383611b90565b611744838383611d8b565b505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052611744908490611f2e565b601054305f908152602081905260408120549091111580156117d557506001600160a01b0384165f9081526009602052604090205460ff16155b80156117ef57504360115460026117ec91906127c6565b11155b156117fc576117fc611fff565b604080516080810182525f8082526020808301829052828401829052606083018290526001600160a01b0387168252600990529182205460ff1615611888575060408051608081018252600d546001600160401b038082168352600160401b820481166020840152600160801b8204811693830193909352600160c01b900490911660608201526118f1565b6001600160a01b0386165f9081526009602052604090205460ff16156118f1575060408051608081018252600c546001600160401b038082168352600160401b820481166020840152600160801b8204811693830193909352600160c01b900490911660608201525b60608101516001600160401b031615611b7e5760408051608081018252600e546001600160501b038082168352600160501b820481166020840152600160a01b82041692820192909252600160f01b90910460ff16151560608201526013544390036119cb576001600160a01b0387165f9081526009602052604090205460ff161561199757612710611986866103e8612803565b611990919061282e565b92506119f4565b6001600160a01b0386165f9081526009602052604090205460ff16156119c65761271061198686611388612803565b6119f4565b6060820151612710906119e7906001600160401b031687612803565b6119f1919061282e565b92505b633b9aca0082606001516001600160401b031683604001516001600160401b031685611a209190612841565b611a2a919061286a565b611a34919061286a565b81602001818151611a459190612897565b6001600160501b031690525060608201518251633b9aca00916001600160401b0390811691611a75911686612841565b611a7f919061286a565b611a89919061286a565b81518290611a98908390612897565b6001600160501b031690525060608201516020830151633b9aca00916001600160401b0390811691611acb911686612841565b611ad5919061286a565b611adf919061286a565b81604001818151611af09190612897565b6001600160501b039081169091528251600e80546020860151604087015160608801511515600160f01b0260ff60f01b19918716600160a01b02919091166affffffffffffffffffffff60a01b19928716600160501b026001600160a01b0319909416959096169490941791909117169290921717905550611b7c87306001600160801b038616611d8b565b505b506001600160801b0316949350505050565b600f5460ff1615611744576001600160a01b038281165f9081526007602090815260408083205483835281842054825180840184526012546001600160801b038082168352600160801b90910416818601529589168552600990935292205460ff928316939192168015611c02575082155b15611ca35780516001600160801b0316841115611c4b5760405162461bcd60e51b815260206004820152600760248201526626b0bc102a3c3760c91b60448201526064016108dc565b60208101516001600160801b0316611c6383866127c6565b1115611c9e5760405162461bcd60e51b815260206004820152600a60248201526913585e0815d85b1b195d60b21b60448201526064016108dc565b611d83565b6001600160a01b0385165f9081526009602052604090205460ff168015611ce257506001600160a01b0386165f9081526007602052604090205460ff16155b15611d2b5780516001600160801b0316841115611c9e5760405162461bcd60e51b815260206004820152600760248201526626b0bc102a3c3760c91b60448201526064016108dc565b82611d835760208101516001600160801b0316611d4883866127c6565b1115611d835760405162461bcd60e51b815260206004820152600a60248201526913585e0815d85b1b195d60b21b60448201526064016108dc565b505050505050565b6001600160a01b038316611def5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016108dc565b6001600160a01b038216611e515760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016108dc565b6001600160a01b0383165f9081526020819052604090205481811015611ec85760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016108dc565b6001600160a01b038481165f81815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a350505050565b5f611f82826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166122ee9092919063ffffffff16565b8051909150156117445780806020019051810190611fa091906128b6565b6117445760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016108dc565b305f9081526020819052604081205460408051608081018252600e546001600160501b03808216808452600160501b8304821660208501819052600160a01b8404909216948401859052600160f01b90920460ff161515606084015293945090925f929161206c91612897565b6120769190612897565b6001600160501b0316905082158061208c575080155b1561209657505050565b6010546120a490600a612803565b8311156120bc576010546120b990600a612803565b92505b60208201516001600160501b0316156121b4575f8183602001516001600160501b0316856120ea9190612803565b6120f4919061282e565b9050612121307f000000000000000000000000000000000000000000000000000000000000000083611d8b565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663fff6cae96040518163ffffffff1660e01b81526004015f604051808303815f87803b158015612179575f80fd5b505af192505050801561218a575060015b5061219581856127f0565b935082602001516001600160501b0316826121b091906127f0565b9150505b82156122b2576121c383612304565b604082015147905f906001600160501b03161561225157600b5460408501516001600160a01b03909116908490612203906001600160501b031685612803565b61220d919061282e565b6040515f81818185875af1925050503d805f8114612246576040519150601f19603f3d011682016040523d82523d5f602084013e61224b565b606091505b50909150505b47915081156122af57600a546040516001600160a01b039091169083905f81818185875af1925050503d805f81146122a4576040519150601f19603f3d011682016040523d82523d5f602084013e6122a9565b606091505b50909150505b50505b505f602082018190528082526040820152600e80546060909201511515600160f01b026001600160f81b03199092169190911790555043601155565b60606122fc84845f85612418565b949350505050565b6040805160028082526060820183525f9260208301908036833701905050905030815f81518110612337576123376128d1565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000008160018151811061238b5761238b6128d1565b6001600160a01b03928316602091820292909201015260405163791ac94760e01b81527f00000000000000000000000000000000000000000000000000000000000000009091169063791ac947906123ef9085905f908690309042906004016128e5565b5f604051808303815f87803b158015612406575f80fd5b505af1158015611d83573d5f803e3d5ffd5b6060824710156124795760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016108dc565b5f80866001600160a01b031685876040516124949190612955565b5f6040518083038185875af1925050503d805f81146124ce576040519150601f19603f3d011682016040523d82523d5f602084013e6124d3565b606091505b50915091506124e4878383876124ef565b979650505050505050565b6060831561255d5782515f03612556576001600160a01b0385163b6125565760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016108dc565b50816122fc565b6122fc83838151156125725781518083602001fd5b8060405162461bcd60e51b81526004016108dc91905b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b80356001600160a01b03811681146125d3575f80fd5b919050565b5f80604083850312156125e9575f80fd5b6125f2836125bd565b946020939093013593505050565b5f60208284031215612610575f80fd5b612619826125bd565b9392505050565b5f805f60608486031215612632575f80fd5b61263b846125bd565b9250612649602085016125bd565b929592945050506040919091013590565b80356001600160401b03811681146125d3575f80fd5b5f805f60608486031215612682575f80fd5b61268b8461265a565b92506126996020850161265a565b91506126a76040850161265a565b90509250925092565b80151581146126bd575f80fd5b50565b5f80604083850312156126d1575f80fd5b6126da836125bd565b915060208301356126ea816126b0565b809150509250929050565b5f8060408385031215612706575f80fd5b61270f836125bd565b915061271d602084016125bd565b90509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c9082168061276f57607f821691505b60208210810361278d57634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52601160045260245ffd5b6001600160401b0381811683821601908111156109fd576109fd612793565b808201808211156109fd576109fd612793565b5f602082840312156127e9575f80fd5b5051919050565b818103818111156109fd576109fd612793565b80820281158282048414176109fd576109fd612793565b634e487b7160e01b5f52601260045260245ffd5b5f8261283c5761283c61281a565b500490565b6001600160801b03818116838216029081169081811461286357612863612793565b5092915050565b5f6001600160801b038316806128825761288261281a565b806001600160801b0384160491505092915050565b6001600160501b0381811683821601908111156109fd576109fd612793565b5f602082840312156128c6575f80fd5b8151612619816126b0565b634e487b7160e01b5f52603260045260245ffd5b5f60a0820187835286602084015260a0604084015280865180835260c0850191506020880192505f5b818110156129355783516001600160a01b031683526020938401939092019160010161290e565b50506001600160a01b039590951660608401525050608001529392505050565b5f82518060208501845e5f92019182525091905056fea2646970667358221220de72b29311dd96b14411fe4e669d3991fa803ee79e0c1e839967c0d47d9601d464736f6c634300081a0033

Deployed Bytecode

0x60806040526004361061024b575f3560e01c8063860a32ec11610134578063b0249cc6116100b3578063d00efb2f11610078578063d00efb2f146107d7578063dd62ed3e146107ec578063e4169ed51461080b578063f270fde41461082a578063f2fde38b14610874578063ffd6fbf414610893575f80fd5b8063b0249cc614610718578063bedafd0114610746578063c78d0fa014610765578063cc1776d31461077a578063ccad03e1146107b8575f80fd5b806395d89b41116100f957806395d89b41146106665780639e93ad8e1461067a578063a457c2d7146106a7578063a9059cbb146106c6578063ad5c4648146106e5575f80fd5b8063860a32ec146105cf5780638979dd00146105e85780638becc57d146105fc5780638d3e6e401461061b5780638da5cb5b14610649575f80fd5b8063313ce567116101cb5780634f7041a5116101905780634f7041a51461045b57806353371be0146104cc5780635a90a49e146104e55780636d7adcad1461051357806370a0823114610587578063715018a6146105bb575f80fd5b8063313ce567146103c557806339509351146103e0578063432e95a5146103ff578063452ed4f11461041457806347b9b45b14610447575f80fd5b806318160ddd1161021157806318160ddd1461032b5780631c292cce1461034957806323b872dd146103685780632571754514610387578063286965a7146103a6575f80fd5b80629a701614610256578063048471e01461029257806306fdde03146102a85780630758d924146102c9578063095ea7b3146102fc575f80fd5b3661025257005b5f80fd5b348015610261575f80fd5b50600b54610275906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561029d575f80fd5b506102a66108b2565b005b3480156102b3575f80fd5b506102bc61095a565b6040516102899190612588565b3480156102d4575f80fd5b506102757f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b348015610307575f80fd5b5061031b6103163660046125d8565b6109ea565b6040519015158152602001610289565b348015610336575f80fd5b506002545b604051908152602001610289565b348015610354575f80fd5b506102a6610363366004612600565b610a03565b348015610373575f80fd5b5061031b610382366004612620565b610a94565b348015610392575f80fd5b506102a66103a1366004612600565b610ab7565b3480156103b1575f80fd5b506102a66103c0366004612670565b610b48565b3480156103d0575f80fd5b5060405160128152602001610289565b3480156103eb575f80fd5b5061031b6103fa3660046125d8565b610ce5565b34801561040a575f80fd5b5061033b60115481565b34801561041f575f80fd5b506102757f0000000000000000000000008d5bb3ba816247ff13c86ab88e04041cebbd5a8581565b348015610452575f80fd5b506102a6610d06565b348015610466575f80fd5b50600c54610499906001600160401b0380821691600160401b8104821691600160801b8204811691600160c01b90041684565b604080516001600160401b0395861681529385166020850152918416918301919091529091166060820152608001610289565b3480156104d7575f80fd5b5060085461031b9060ff1681565b3480156104f0575f80fd5b5061031b6104ff366004612600565b60066020525f908152604090205460ff1681565b34801561051e575f80fd5b50600e54610552906001600160501b0380821691600160501b8104821691600160a01b82041690600160f01b900460ff1684565b60405161028994939291906001600160501b039485168152928416602084015292166040820152901515606082015260800190565b348015610592575f80fd5b5061033b6105a1366004612600565b6001600160a01b03165f9081526020819052604090205490565b3480156105c6575f80fd5b506102a6610d9b565b3480156105da575f80fd5b50600f5461031b9060ff1681565b3480156105f3575f80fd5b506102a6610e0e565b348015610607575f80fd5b506102a6610616366004612670565b610e63565b348015610626575f80fd5b5061031b610635366004612600565b60076020525f908152604090205460ff1681565b348015610654575f80fd5b506005546001600160a01b0316610275565b348015610671575f80fd5b506102bc611000565b348015610685575f80fd5b5061068f61271081565b6040516001600160401b039091168152602001610289565b3480156106b2575f80fd5b5061031b6106c13660046125d8565b61100f565b3480156106d1575f80fd5b5061031b6106e03660046125d8565b611089565b3480156106f0575f80fd5b506102757f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281565b348015610723575f80fd5b5061031b610732366004612600565b60096020525f908152604090205460ff1681565b348015610751575f80fd5b506102a66107603660046126c0565b611096565b348015610770575f80fd5b5061033b60105481565b348015610785575f80fd5b50600d54610499906001600160401b0380821691600160401b8104821691600160801b8204811691600160c01b90041684565b3480156107c3575f80fd5b506102a66107d23660046126c0565b6111c0565b3480156107e2575f80fd5b5061033b60135481565b3480156107f7575f80fd5b5061033b6108063660046126f5565b611305565b348015610816575f80fd5b50600a54610275906001600160a01b031681565b348015610835575f80fd5b50601254610854906001600160801b0380821691600160801b90041682565b604080516001600160801b03938416815292909116602083015201610289565b34801561087f575f80fd5b506102a661088e366004612600565b61132f565b34801561089e575f80fd5b506102a66108ad366004612600565b611419565b6005546001600160a01b031633146108e55760405162461bcd60e51b81526004016108dc90612726565b60405180910390fd5b600f805460ff19169055604080518082019091525f80825260208201525f61090c60025490565b6001600160801b03811680845260208401819052600160801b8102176012556040519091507f66d01defaa9c2963b8b6a2188b20368e48e1bbf586d3f3d65b59ee5e4e32caa6905f90a15050565b6060600380546109699061275b565b80601f01602080910402602001604051908101604052809291908181526020018280546109959061275b565b80156109e05780601f106109b7576101008083540402835291602001916109e0565b820191905f5260205f20905b8154815290600101906020018083116109c357829003601f168201915b5050505050905090565b5f336109f78185856114f6565b60019150505b92915050565b6005546001600160a01b03163314610a2d5760405162461bcd60e51b81526004016108dc90612726565b6001600160a01b038116610a725760405162461bcd60e51b815260206004820152600c60248201526b7a65726f206164647265737360a01b60448201526064016108dc565b600a80546001600160a01b0319166001600160a01b0392909216919091179055565b5f33610aa1858285611619565b610aac85858561168b565b506001949350505050565b6005546001600160a01b03163314610ae15760405162461bcd60e51b81526004016108dc90612726565b6001600160a01b038116610b265760405162461bcd60e51b815260206004820152600c60248201526b7a65726f206164647265737360a01b60448201526064016108dc565b600b80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314610b725760405162461bcd60e51b81526004016108dc90612726565b604080516080810182525f60608201526001600160401b03858116825284811692820192909252908216602082015281610bac84866127a7565b610bb691906127a7565b6001600160401b0316606082018190526103e8101580610bf05750600d5460608201516001600160401b03600160c01b9092048216911611155b610c315760405162461bcd60e51b81526020600482015260126024820152714b656570207461782062656c6f772031302560701b60448201526064016108dc565b60608101516040516001600160401b0390911681527fa02824f65350567bc405e202b741e7ca6274004a9feeb44149df72b8bd599c979060200160405180910390a18051600d8054602084015160408501516060909501516001600160401b03908116600160c01b026001600160c01b03968216600160801b02969096166001600160801b03928216600160401b026001600160801b03199094169190951617919091171691909117919091179055505050565b5f336109f7818585610cf78383611305565b610d0191906127c6565b6114f6565b6005546001600160a01b03163314610d305760405162461bcd60e51b81526004016108dc90612726565b60085460ff1615610d835760405162461bcd60e51b815260206004820152601760248201527f54726164696e6720616c726561647920656e61626c656400000000000000000060448201526064016108dc565b6008805460ff19166001179055436013819055601155565b6005546001600160a01b03163314610dc55760405162461bcd60e51b81526004016108dc90612726565b6005546040515f916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b600b546040515f916001600160a01b03169047908381818185875af1925050503d805f8114610e58576040519150601f19603f3d011682016040523d82523d5f602084013e610e5d565b606091505b50505050565b6005546001600160a01b03163314610e8d5760405162461bcd60e51b81526004016108dc90612726565b604080516080810182525f60608201526001600160401b03858116825284811692820192909252908216602082015281610ec784866127a7565b610ed191906127a7565b6001600160401b0316606082018190526103e8101580610f0b5750600c5460608201516001600160401b03600160c01b9092048216911611155b610f4c5760405162461bcd60e51b81526020600482015260126024820152714b656570207461782062656c6f772031302560701b60448201526064016108dc565b60608101516040516001600160401b0390911681527f5380a61520019ce8270d583f62f1b2b9f4f4372e1acaaf708f4865cecece05089060200160405180910390a18051600c8054602084015160408501516060909501516001600160401b03908116600160c01b026001600160c01b03968216600160801b02969096166001600160801b03928216600160401b026001600160801b03199094169190951617919091171691909117919091179055505050565b6060600480546109699061275b565b5f338161101c8286611305565b90508381101561107c5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016108dc565b610aac82868684036114f6565b5f336109f781858561168b565b6005546001600160a01b031633146110c05760405162461bcd60e51b81526004016108dc90612726565b6001600160a01b0382166111055760405162461bcd60e51b815260206004820152600c60248201526b5a65726f204164647265737360a01b60448201526064016108dc565b306001600160a01b0383160361115d5760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420756e6578656d707420636f6e7472616374000000000000000060448201526064016108dc565b6001600160a01b0382165f81815260066020908152604091829020805460ff19168515159081179091558251938452908301527f998cce27cbf44405c67eb636a634d5e2f2e6ff248b3d71fbbbb022f3c4c6dd2d91015b60405180910390a15050565b6005546001600160a01b031633146111ea5760405162461bcd60e51b81526004016108dc90612726565b6001600160a01b03821661122f5760405162461bcd60e51b815260206004820152600c60248201526b5a65726f204164647265737360a01b60448201526064016108dc565b806112aa577f0000000000000000000000008d5bb3ba816247ff13c86ab88e04041cebbd5a856001600160a01b0316826001600160a01b0316036112aa5760405162461bcd60e51b815260206004820152601260248201527121b0b73737ba103932b6b7bb32903830b4b960711b60448201526064016108dc565b6001600160a01b0382165f81815260076020908152604091829020805460ff19168515159081179091558251938452908301527f8f9f40630a1d139e6cf69b4f447ca47a36f10a017524efaa38252e516fa227ce91016111b4565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b6005546001600160a01b031633146113595760405162461bcd60e51b81526004016108dc90612726565b6001600160a01b0381166113be5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016108dc565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03811661146f5760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f74206265203000000000000060448201526064016108dc565b6040516370a0823160e01b81523060048201525f906001600160a01b038316906370a0823190602401602060405180830381865afa1580156114b3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114d791906127d9565b600b549091506114f29083906001600160a01b031683611749565b5050565b6001600160a01b0383166115585760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016108dc565b6001600160a01b0382166115b95760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016108dc565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b5f6116248484611305565b90505f198114610e5d578181101561167e5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016108dc565b610e5d84848484036114f6565b6001600160a01b0383165f9081526006602052604090205460ff161580156116cb57506001600160a01b0382165f9081526006602052604090205460ff16155b156117395760085460ff166117175760405162461bcd60e51b815260206004820152601260248201527154726164696e67206e6f742061637469766560701b60448201526064016108dc565b61172283838361179b565b61172c90826127f0565b9050611739838383611b90565b611744838383611d8b565b505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052611744908490611f2e565b601054305f908152602081905260408120549091111580156117d557506001600160a01b0384165f9081526009602052604090205460ff16155b80156117ef57504360115460026117ec91906127c6565b11155b156117fc576117fc611fff565b604080516080810182525f8082526020808301829052828401829052606083018290526001600160a01b0387168252600990529182205460ff1615611888575060408051608081018252600d546001600160401b038082168352600160401b820481166020840152600160801b8204811693830193909352600160c01b900490911660608201526118f1565b6001600160a01b0386165f9081526009602052604090205460ff16156118f1575060408051608081018252600c546001600160401b038082168352600160401b820481166020840152600160801b8204811693830193909352600160c01b900490911660608201525b60608101516001600160401b031615611b7e5760408051608081018252600e546001600160501b038082168352600160501b820481166020840152600160a01b82041692820192909252600160f01b90910460ff16151560608201526013544390036119cb576001600160a01b0387165f9081526009602052604090205460ff161561199757612710611986866103e8612803565b611990919061282e565b92506119f4565b6001600160a01b0386165f9081526009602052604090205460ff16156119c65761271061198686611388612803565b6119f4565b6060820151612710906119e7906001600160401b031687612803565b6119f1919061282e565b92505b633b9aca0082606001516001600160401b031683604001516001600160401b031685611a209190612841565b611a2a919061286a565b611a34919061286a565b81602001818151611a459190612897565b6001600160501b031690525060608201518251633b9aca00916001600160401b0390811691611a75911686612841565b611a7f919061286a565b611a89919061286a565b81518290611a98908390612897565b6001600160501b031690525060608201516020830151633b9aca00916001600160401b0390811691611acb911686612841565b611ad5919061286a565b611adf919061286a565b81604001818151611af09190612897565b6001600160501b039081169091528251600e80546020860151604087015160608801511515600160f01b0260ff60f01b19918716600160a01b02919091166affffffffffffffffffffff60a01b19928716600160501b026001600160a01b0319909416959096169490941791909117169290921717905550611b7c87306001600160801b038616611d8b565b505b506001600160801b0316949350505050565b600f5460ff1615611744576001600160a01b038281165f9081526007602090815260408083205483835281842054825180840184526012546001600160801b038082168352600160801b90910416818601529589168552600990935292205460ff928316939192168015611c02575082155b15611ca35780516001600160801b0316841115611c4b5760405162461bcd60e51b815260206004820152600760248201526626b0bc102a3c3760c91b60448201526064016108dc565b60208101516001600160801b0316611c6383866127c6565b1115611c9e5760405162461bcd60e51b815260206004820152600a60248201526913585e0815d85b1b195d60b21b60448201526064016108dc565b611d83565b6001600160a01b0385165f9081526009602052604090205460ff168015611ce257506001600160a01b0386165f9081526007602052604090205460ff16155b15611d2b5780516001600160801b0316841115611c9e5760405162461bcd60e51b815260206004820152600760248201526626b0bc102a3c3760c91b60448201526064016108dc565b82611d835760208101516001600160801b0316611d4883866127c6565b1115611d835760405162461bcd60e51b815260206004820152600a60248201526913585e0815d85b1b195d60b21b60448201526064016108dc565b505050505050565b6001600160a01b038316611def5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016108dc565b6001600160a01b038216611e515760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016108dc565b6001600160a01b0383165f9081526020819052604090205481811015611ec85760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016108dc565b6001600160a01b038481165f81815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a350505050565b5f611f82826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166122ee9092919063ffffffff16565b8051909150156117445780806020019051810190611fa091906128b6565b6117445760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016108dc565b305f9081526020819052604081205460408051608081018252600e546001600160501b03808216808452600160501b8304821660208501819052600160a01b8404909216948401859052600160f01b90920460ff161515606084015293945090925f929161206c91612897565b6120769190612897565b6001600160501b0316905082158061208c575080155b1561209657505050565b6010546120a490600a612803565b8311156120bc576010546120b990600a612803565b92505b60208201516001600160501b0316156121b4575f8183602001516001600160501b0316856120ea9190612803565b6120f4919061282e565b9050612121307f0000000000000000000000008d5bb3ba816247ff13c86ab88e04041cebbd5a8583611d8b565b7f0000000000000000000000008d5bb3ba816247ff13c86ab88e04041cebbd5a856001600160a01b031663fff6cae96040518163ffffffff1660e01b81526004015f604051808303815f87803b158015612179575f80fd5b505af192505050801561218a575060015b5061219581856127f0565b935082602001516001600160501b0316826121b091906127f0565b9150505b82156122b2576121c383612304565b604082015147905f906001600160501b03161561225157600b5460408501516001600160a01b03909116908490612203906001600160501b031685612803565b61220d919061282e565b6040515f81818185875af1925050503d805f8114612246576040519150601f19603f3d011682016040523d82523d5f602084013e61224b565b606091505b50909150505b47915081156122af57600a546040516001600160a01b039091169083905f81818185875af1925050503d805f81146122a4576040519150601f19603f3d011682016040523d82523d5f602084013e6122a9565b606091505b50909150505b50505b505f602082018190528082526040820152600e80546060909201511515600160f01b026001600160f81b03199092169190911790555043601155565b60606122fc84845f85612418565b949350505050565b6040805160028082526060820183525f9260208301908036833701905050905030815f81518110612337576123376128d1565b60200260200101906001600160a01b031690816001600160a01b0316815250507f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc28160018151811061238b5761238b6128d1565b6001600160a01b03928316602091820292909201015260405163791ac94760e01b81527f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d9091169063791ac947906123ef9085905f908690309042906004016128e5565b5f604051808303815f87803b158015612406575f80fd5b505af1158015611d83573d5f803e3d5ffd5b6060824710156124795760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016108dc565b5f80866001600160a01b031685876040516124949190612955565b5f6040518083038185875af1925050503d805f81146124ce576040519150601f19603f3d011682016040523d82523d5f602084013e6124d3565b606091505b50915091506124e4878383876124ef565b979650505050505050565b6060831561255d5782515f03612556576001600160a01b0385163b6125565760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016108dc565b50816122fc565b6122fc83838151156125725781518083602001fd5b8060405162461bcd60e51b81526004016108dc91905b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b80356001600160a01b03811681146125d3575f80fd5b919050565b5f80604083850312156125e9575f80fd5b6125f2836125bd565b946020939093013593505050565b5f60208284031215612610575f80fd5b612619826125bd565b9392505050565b5f805f60608486031215612632575f80fd5b61263b846125bd565b9250612649602085016125bd565b929592945050506040919091013590565b80356001600160401b03811681146125d3575f80fd5b5f805f60608486031215612682575f80fd5b61268b8461265a565b92506126996020850161265a565b91506126a76040850161265a565b90509250925092565b80151581146126bd575f80fd5b50565b5f80604083850312156126d1575f80fd5b6126da836125bd565b915060208301356126ea816126b0565b809150509250929050565b5f8060408385031215612706575f80fd5b61270f836125bd565b915061271d602084016125bd565b90509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c9082168061276f57607f821691505b60208210810361278d57634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52601160045260245ffd5b6001600160401b0381811683821601908111156109fd576109fd612793565b808201808211156109fd576109fd612793565b5f602082840312156127e9575f80fd5b5051919050565b818103818111156109fd576109fd612793565b80820281158282048414176109fd576109fd612793565b634e487b7160e01b5f52601260045260245ffd5b5f8261283c5761283c61281a565b500490565b6001600160801b03818116838216029081169081811461286357612863612793565b5092915050565b5f6001600160801b038316806128825761288261281a565b806001600160801b0384160491505092915050565b6001600160501b0381811683821601908111156109fd576109fd612793565b5f602082840312156128c6575f80fd5b8151612619816126b0565b634e487b7160e01b5f52603260045260245ffd5b5f60a0820187835286602084015260a0604084015280865180835260c0850191506020880192505f5b818110156129355783516001600160a01b031683526020938401939092019160010161290e565b50506001600160a01b039590951660608401525050608001529392505050565b5f82518060208501845e5f92019182525091905056fea2646970667358221220de72b29311dd96b14411fe4e669d3991fa803ee79e0c1e839967c0d47d9601d464736f6c634300081a0033

Deployed Bytecode Sourcemap

21770:11745:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22050:26;;;;;;;;;;-1:-1:-1;22050:26:0;;;;-1:-1:-1;;;;;22050:26:0;;;;;;-1:-1:-1;;;;;178:32:1;;;160:51;;148:2;133:18;22050:26:0;;;;;;;;32353:314;;;;;;;;;;;;;:::i;:::-;;4478:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;22332:37::-;;;;;;;;;;;;;;;6838:201;;;;;;;;;;-1:-1:-1;6838:201:0;;;;;:::i;:::-;;:::i;:::-;;;1520:14:1;;1513:22;1495:41;;1483:2;1468:18;6838:201:0;1355:187:1;5607:108:0;;;;;;;;;;-1:-1:-1;5695:12:0;;5607:108;;;1693:25:1;;;1681:2;1666:18;5607:108:0;1547:177:1;33129:175:0;;;;;;;;;;-1:-1:-1;33129:175:0;;;;;:::i;:::-;;:::i;7619:261::-;;;;;;;;;;-1:-1:-1;7619:261:0;;;;;:::i;:::-;;:::i;33312:163::-;;;;;;;;;;-1:-1:-1;33312:163:0;;;;;:::i;:::-;;:::i;31600:512::-;;;;;;;;;;-1:-1:-1;31600:512:0;;;;;:::i;:::-;;:::i;5449:93::-;;;;;;;;;;-1:-1:-1;5449:93:0;;5532:2;2950:36:1;;2938:2;2923:18;5449:93:0;2808:184:1;8289:238:0;;;;;;;;;;-1:-1:-1;8289:238:0;;;;;:::i;:::-;;:::i;22253:32::-;;;;;;;;;;;;;;;;22294:31;;;;;;;;;;;;;;;32120:225;;;;;;;;;;;;;:::i;22085:19::-;;;;;;;;;;-1:-1:-1;22085:19:0;;;;-1:-1:-1;;;;;22085:19:0;;;;-1:-1:-1;;;22085:19:0;;;;;-1:-1:-1;;;22085:19:0;;;;;-1:-1:-1;;;22085:19:0;;;;;;;;;-1:-1:-1;;;;;3238:31:1;;;3220:50;;3306:31;;;3301:2;3286:18;;3279:59;3374:31;;;3354:18;;;3347:59;;;;3442:31;;;3437:2;3422:18;;3415:59;3207:3;3192:19;22085::0;2997:483:1;21925:26:0;;;;;;;;;;-1:-1:-1;21925:26:0;;;;;;;;21813:47;;;;;;;;;;-1:-1:-1;21813:47:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;22140:32;;;;;;;;;;-1:-1:-1;22140:32:0;;;;-1:-1:-1;;;;;22140:32:0;;;;-1:-1:-1;;;22140:32:0;;;;;-1:-1:-1;;;22140:32:0;;;;-1:-1:-1;;;22140:32:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;3722:35:1;;;3704:54;;3794:35;;;3789:2;3774:18;;3767:63;3866:35;;3861:2;3846:18;;3839:63;3945:14;;3938:22;3933:2;3918:18;;3911:50;3691:3;3676:19;;3485:482;5778:127:0;;;;;;;;;;-1:-1:-1;5778:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;5879:18:0;5852:7;5879:18;;;;;;;;;;;;5778:127;13392:150;;;;;;;;;;;;;:::i;22181:26::-;;;;;;;;;;-1:-1:-1;22181:26:0;;;;;;;;32675:147;;;;;;;;;;;;;:::i;31084:508::-;;;;;;;;;;-1:-1:-1;31084:508:0;;;;;:::i;:::-;;:::i;21867:49::-;;;;;;;;;;-1:-1:-1;21867:49:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;13178:79;;;;;;;;;;-1:-1:-1;13243:6:0;;-1:-1:-1;;;;;13243:6:0;13178:79;;4697:104;;;;;;;;;;;;;:::i;22447:42::-;;;;;;;;;;;;22484:5;22447:42;;;;;-1:-1:-1;;;;;4134:31:1;;;4116:50;;4104:2;4089:18;22447:42:0;3972:200:1;9030:436:0;;;;;;;;;;-1:-1:-1;9030:436:0;;;;;:::i;:::-;;:::i;6111:193::-;;;;;;;;;;-1:-1:-1;6111:193:0;;;;;:::i;:::-;;:::i;22376:29::-;;;;;;;;;;;;;;;21960:42;;;;;;;;;;-1:-1:-1;21960:42:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;30397:319;;;;;;;;;;-1:-1:-1;30397:319:0;;;;;:::i;:::-;;:::i;22216:30::-;;;;;;;;;;;;;;;;22111:20;;;;;;;;;;-1:-1:-1;22111:20:0;;;;-1:-1:-1;;;;;22111:20:0;;;;-1:-1:-1;;;22111:20:0;;;;;-1:-1:-1;;;22111:20:0;;;;;-1:-1:-1;;;22111:20:0;;;;;30724:352;;;;;;;;;;-1:-1:-1;30724:352:0;;;;;:::i;:::-;;:::i;22498:26::-;;;;;;;;;;;;;;;;6367:151;;;;;;;;;;-1:-1:-1;6367:151:0;;;;;:::i;:::-;;:::i;22011:32::-;;;;;;;;;;-1:-1:-1;22011:32:0;;;;-1:-1:-1;;;;;22011:32:0;;;22414:24;;;;;;;;;;-1:-1:-1;22414:24:0;;;;-1:-1:-1;;;;;22414:24:0;;;;-1:-1:-1;;;22414:24:0;;;;;;;;;-1:-1:-1;;;;;5077:47:1;;;5059:66;;5161:47;;;;5156:2;5141:18;;5134:75;5032:18;22414:24:0;4885:330:1;13550:244:0;;;;;;;;;;-1:-1:-1;13550:244:0;;;;;:::i;:::-;;:::i;32830:291::-;;;;;;;;;;-1:-1:-1;32830:291:0;;;;;:::i;:::-;;:::i;32353:314::-;13305:6;;-1:-1:-1;;;;;13305:6:0;465:10;13305:22;13297:67;;;;-1:-1:-1;;;13297:67:0;;;;;;;:::i;:::-;;;;;;;;;32404:7:::1;:15:::0;;-1:-1:-1;;32404:15:0::1;::::0;;-1:-1:-1;;;;;;;;;32414:5:0::1;-1:-1:-1::0;;;;;;;32466:14:0::1;32483:13;5695:12:::0;;;5607:108;32483:13:::1;-1:-1:-1::0;;;;;32507:44:0;::::1;::::0;;;32562:21:::1;::::0;::::1;:39:::0;;;-1:-1:-1;;;32612:20:0;::::1;;:8;:20:::0;32648:11:::1;::::0;32466:30;;-1:-1:-1;32648:11:0::1;::::0;32507:26:::1;::::0;32648:11:::1;32393:274;;32353:314::o:0;4478:100::-;4532:13;4565:5;4558:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4478:100;:::o;6838:201::-;6921:4;465:10;6977:32;465:10;6993:7;7002:6;6977:8;:32::i;:::-;7027:4;7020:11;;;6838:201;;;;;:::o;33129:175::-;13305:6;;-1:-1:-1;;;;;13305:6:0;465:10;13305:22;13297:67;;;;-1:-1:-1;;;13297:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;33218:22:0;::::1;33210:47;;;::::0;-1:-1:-1;;;33210:47:0;;6168:2:1;33210:47:0::1;::::0;::::1;6150:21:1::0;6207:2;6187:18;;;6180:30;-1:-1:-1;;;6226:18:1;;;6219:42;6278:18;;33210:47:0::1;5966:336:1::0;33210:47:0::1;33268:17;:28:::0;;-1:-1:-1;;;;;;33268:28:0::1;-1:-1:-1::0;;;;;33268:28:0;;;::::1;::::0;;;::::1;::::0;;33129:175::o;7619:261::-;7716:4;465:10;7774:38;7790:4;465:10;7805:6;7774:15;:38::i;:::-;7823:27;7833:4;7839:2;7843:6;7823:9;:27::i;:::-;-1:-1:-1;7868:4:0;;7619:261;-1:-1:-1;;;;7619:261:0:o;33312:163::-;13305:6;;-1:-1:-1;;;;;13305:6:0;465:10;13305:22;13297:67;;;;-1:-1:-1;;;13297:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;33395:22:0;::::1;33387:47;;;::::0;-1:-1:-1;;;33387:47:0;;6168:2:1;33387:47:0::1;::::0;::::1;6150:21:1::0;6207:2;6187:18;;;6180:30;-1:-1:-1;;;6226:18:1;;;6219:42;6278:18;;33387:47:0::1;5966:336:1::0;33387:47:0::1;33445:11;:22:::0;;-1:-1:-1;;;;;;33445:22:0::1;-1:-1:-1::0;;;;;33445:22:0;;;::::1;::::0;;;::::1;::::0;;33312:163::o;31600:512::-;13305:6;;-1:-1:-1;;;;;13305:6:0;465:10;13305:22;13297:67;;;;-1:-1:-1;;;13297:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;;;;;;;;;;;;;;31744:36:0;;::::1;::::0;;31791:34;;::::1;-1:-1:-1::0;;;31791:34:0;;;;31836:24;;::::1;-1:-1:-1::0;;;31836:24:0;;31888:30:::1;31791:34:::0;31744:36;31888:30:::1;:::i;:::-;:41;;;;:::i;:::-;-1:-1:-1::0;;;;;31871:58:0::1;:14;::::0;::::1;:58:::0;;;31967:4:::1;-1:-1:-1::0;31948:23:0::1;::::0;:61:::1;;-1:-1:-1::0;31993:7:0::1;:16:::0;31975:14:::1;::::0;::::1;::::0;-1:-1:-1;;;;;;;;31993:16:0;;::::1;::::0;::::1;31975:34:::0;::::1;;;31948:61;31940:92;;;::::0;-1:-1:-1;;;31940:92:0;;6837:2:1;31940:92:0::1;::::0;::::1;6819:21:1::0;6876:2;6856:18;;;6849:30;-1:-1:-1;;;6895:18:1;;;6888:48;6953:18;;31940:92:0::1;6635:342:1::0;31940:92:0::1;32063:14;::::0;::::1;::::0;32048:30:::1;::::0;-1:-1:-1;;;;;4134:31:1;;;4116:50;;32048:30:0::1;::::0;4104:2:1;4089:18;32048:30:0::1;;;;;;;32089:15:::0;;:7:::1;:15:::0;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;::::0;-1:-1:-1;;;;;32089:15:0;;::::1;-1:-1:-1::0;;;32089:15:0::1;-1:-1:-1::0;;;;;32089:15:0;;::::1;-1:-1:-1::0;;;32089:15:0::1;::::0;;;;-1:-1:-1;;;;;32089:15:0;;::::1;-1:-1:-1::0;;;32089:15:0::1;-1:-1:-1::0;;;;;;32089:15:0;;;;;;::::1;::::0;;;;::::1;::::0;;;;;;;;::::1;::::0;;-1:-1:-1;;;31600:512:0:o;8289:238::-;8377:4;465:10;8433:64;465:10;8449:7;8486:10;8458:25;465:10;8449:7;8458:9;:25::i;:::-;:38;;;;:::i;:::-;8433:8;:64::i;32120:225::-;13305:6;;-1:-1:-1;;;;;13305:6:0;465:10;13305:22;13297:67;;;;-1:-1:-1;;;13297:67:0;;;;;;;:::i;:::-;32183:14:::1;::::0;::::1;;32182:15;32174:51;;;::::0;-1:-1:-1;;;32174:51:0;;7520:2:1;32174:51:0::1;::::0;::::1;7502:21:1::0;7559:2;7539:18;;;7532:30;7598:25;7578:18;;;7571:53;7641:18;;32174:51:0::1;7318:347:1::0;32174:51:0::1;32236:14;:21:::0;;-1:-1:-1;;32236:21:0::1;32253:4;32236:21;::::0;;32282:12:::1;32268:11;:26:::0;;;32305:17:::1;:32:::0;32120:225::o;13392:150::-;13305:6;;-1:-1:-1;;;;;13305:6:0;465:10;13305:22;13297:67;;;;-1:-1:-1;;;13297:67:0;;;;;;;:::i;:::-;13485:6:::1;::::0;13464:40:::1;::::0;13501:1:::1;::::0;-1:-1:-1;;;;;13485:6:0::1;::::0;13464:40:::1;::::0;13501:1;;13464:40:::1;13515:6;:19:::0;;-1:-1:-1;;;;;;13515:19:0::1;::::0;;13392:150::o;32675:147::-;32763:11;;32755:59;;32719:12;;-1:-1:-1;;;;;32763:11:0;;32788:21;;32719:12;32755:59;32719:12;32755:59;32788:21;32763:11;32755:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;32675:147:0:o;31084:508::-;13305:6;;-1:-1:-1;;;;;13305:6:0;465:10;13305:22;13297:67;;;;-1:-1:-1;;;13297:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;;;;;;;;;;;;;;31227:36:0;;::::1;::::0;;31274:34;;::::1;-1:-1:-1::0;;;31274:34:0;;;;31319:24;;::::1;-1:-1:-1::0;;;31319:24:0;;31371:30:::1;31274:34:::0;31227:36;31371:30:::1;:::i;:::-;:41;;;;:::i;:::-;-1:-1:-1::0;;;;;31354:58:0::1;:14;::::0;::::1;:58:::0;;;31450:4:::1;-1:-1:-1::0;31431:23:0::1;::::0;:60:::1;;-1:-1:-1::0;31476:6:0::1;:15:::0;31458:14:::1;::::0;::::1;::::0;-1:-1:-1;;;;;;;;31476:15:0;;::::1;::::0;::::1;31458:33:::0;::::1;;;31431:60;31423:91;;;::::0;-1:-1:-1;;;31423:91:0;;6837:2:1;31423:91:0::1;::::0;::::1;6819:21:1::0;6876:2;6856:18;;;6849:30;-1:-1:-1;;;6895:18:1;;;6888:48;6953:18;;31423:91:0::1;6635:342:1::0;31423:91:0::1;31544:14;::::0;::::1;::::0;31530:29:::1;::::0;-1:-1:-1;;;;;4134:31:1;;;4116:50;;31530:29:0::1;::::0;4104:2:1;4089:18;31530:29:0::1;;;;;;;31570:14:::0;;:6:::1;:14:::0;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;::::0;-1:-1:-1;;;;;31570:14:0;;::::1;-1:-1:-1::0;;;31570:14:0::1;-1:-1:-1::0;;;;;31570:14:0;;::::1;-1:-1:-1::0;;;31570:14:0::1;::::0;;;;-1:-1:-1;;;;;31570:14:0;;::::1;-1:-1:-1::0;;;31570:14:0::1;-1:-1:-1::0;;;;;;31570:14:0;;;;;;::::1;::::0;;;;::::1;::::0;;;;;;;;::::1;::::0;;-1:-1:-1;;;31084:508:0:o;4697:104::-;4753:13;4786:7;4779:14;;;;;:::i;9030:436::-;9123:4;465:10;9123:4;9206:25;465:10;9223:7;9206:9;:25::i;:::-;9179:52;;9270:15;9250:16;:35;;9242:85;;;;-1:-1:-1;;;9242:85:0;;8082:2:1;9242:85:0;;;8064:21:1;8121:2;8101:18;;;8094:30;8160:34;8140:18;;;8133:62;-1:-1:-1;;;8211:18:1;;;8204:35;8256:19;;9242:85:0;7880:401:1;9242:85:0;9363:60;9372:5;9379:7;9407:15;9388:16;:34;9363:8;:60::i;6111:193::-;6190:4;465:10;6246:28;465:10;6263:2;6267:6;6246:9;:28::i;30397:319::-;13305:6;;-1:-1:-1;;;;;13305:6:0;465:10;13305:22;13297:67;;;;-1:-1:-1;;;13297:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;30495:22:0;::::1;30487:47;;;::::0;-1:-1:-1;;;30487:47:0;;8488:2:1;30487:47:0::1;::::0;::::1;8470:21:1::0;8527:2;8507:18;;;8500:30;-1:-1:-1;;;8546:18:1;;;8539:42;8598:18;;30487:47:0::1;8286:336:1::0;30487:47:0::1;30573:4;-1:-1:-1::0;;;;;30553:25:0;::::1;::::0;30545:62:::1;;;::::0;-1:-1:-1;;;30545:62:0;;8829:2:1;30545:62:0::1;::::0;::::1;8811:21:1::0;8868:2;8848:18;;;8841:30;8907:26;8887:18;;;8880:54;8951:18;;30545:62:0::1;8627:348:1::0;30545:62:0::1;-1:-1:-1::0;;;;;30618:24:0;::::1;;::::0;;;:14:::1;:24;::::0;;;;;;;;:36;;-1:-1:-1;;30618:36:0::1;::::0;::::1;;::::0;;::::1;::::0;;;30670:38;;9148:51:1;;;9215:18;;;9208:50;30670:38:0::1;::::0;9121:18:1;30670:38:0::1;;;;;;;;30397:319:::0;;:::o;30724:352::-;13305:6;;-1:-1:-1;;;;;13305:6:0;465:10;13305:22;13297:67;;;;-1:-1:-1;;;13297:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;30824:22:0;::::1;30816:47;;;::::0;-1:-1:-1;;;30816:47:0;;8488:2:1;30816:47:0::1;::::0;::::1;8470:21:1::0;8527:2;8507:18;;;8500:30;-1:-1:-1;;;8546:18:1;;;8539:42;8598:18;;30816:47:0::1;8286:336:1::0;30816:47:0::1;30878:9;30874:90;;30923:6;-1:-1:-1::0;;;;;30911:18:0::1;:8;-1:-1:-1::0;;;;;30911:18:0::1;::::0;30903:49:::1;;;::::0;-1:-1:-1;;;30903:49:0;;9471:2:1;30903:49:0::1;::::0;::::1;9453:21:1::0;9510:2;9490:18;;;9483:30;-1:-1:-1;;;9529:18:1;;;9522:48;9587:18;;30903:49:0::1;9269:342:1::0;30903:49:0::1;-1:-1:-1::0;;;;;30974:26:0;::::1;;::::0;;;:16:::1;:26;::::0;;;;;;;;:38;;-1:-1:-1;;30974:38:0::1;::::0;::::1;;::::0;;::::1;::::0;;;31028:40;;9148:51:1;;;9215:18;;;9208:50;31028:40:0::1;::::0;9121:18:1;31028:40:0::1;8980:284:1::0;6367:151:0;-1:-1:-1;;;;;6483:18:0;;;6456:7;6483:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;6367:151::o;13550:244::-;13305:6;;-1:-1:-1;;;;;13305:6:0;465:10;13305:22;13297:67;;;;-1:-1:-1;;;13297:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;13639:22:0;::::1;13631:73;;;::::0;-1:-1:-1;;;13631:73:0;;9818:2:1;13631:73:0::1;::::0;::::1;9800:21:1::0;9857:2;9837:18;;;9830:30;9896:34;9876:18;;;9869:62;-1:-1:-1;;;9947:18:1;;;9940:36;9993:19;;13631:73:0::1;9616:402:1::0;13631:73:0::1;13741:6;::::0;13720:38:::1;::::0;-1:-1:-1;;;;;13720:38:0;;::::1;::::0;13741:6:::1;::::0;13720:38:::1;::::0;13741:6:::1;::::0;13720:38:::1;13769:6;:17:::0;;-1:-1:-1;;;;;;13769:17:0::1;-1:-1:-1::0;;;;;13769:17:0;;;::::1;::::0;;;::::1;::::0;;13550:244::o;32830:291::-;-1:-1:-1;;;;;32897:20:0;;32889:59;;;;-1:-1:-1;;;32889:59:0;;10225:2:1;32889:59:0;;;10207:21:1;10264:2;10244:18;;;10237:30;10303:28;10283:18;;;10276:56;10349:18;;32889:59:0;10023:350:1;32889:59:0;32986:39;;-1:-1:-1;;;32986:39:0;;33019:4;32986:39;;;160:51:1;32959:24:0;;-1:-1:-1;;;;;32986:24:0;;;;;133:18:1;;32986:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33082:11;;32959:66;;-1:-1:-1;33036:77:0;;33066:6;;-1:-1:-1;;;;;33082:11:0;32959:66;33036:22;:77::i;:::-;32878:243;32830:291;:::o;11791:346::-;-1:-1:-1;;;;;11893:19:0;;11885:68;;;;-1:-1:-1;;;11885:68:0;;10769:2:1;11885:68:0;;;10751:21:1;10808:2;10788:18;;;10781:30;10847:34;10827:18;;;10820:62;-1:-1:-1;;;10898:18:1;;;10891:34;10942:19;;11885:68:0;10567:400:1;11885:68:0;-1:-1:-1;;;;;11972:21:0;;11964:68;;;;-1:-1:-1;;;11964:68:0;;11174:2:1;11964:68:0;;;11156:21:1;11213:2;11193:18;;;11186:30;11252:34;11232:18;;;11225:62;-1:-1:-1;;;11303:18:1;;;11296:32;11345:19;;11964:68:0;10972:398:1;11964:68:0;-1:-1:-1;;;;;12045:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;12097:32;;1693:25:1;;;12097:32:0;;1666:18:1;12097:32:0;;;;;;;11791:346;;;:::o;12428:419::-;12529:24;12556:25;12566:5;12573:7;12556:9;:25::i;:::-;12529:52;;-1:-1:-1;;12596:16:0;:37;12592:248;;12678:6;12658:16;:26;;12650:68;;;;-1:-1:-1;;;12650:68:0;;11577:2:1;12650:68:0;;;11559:21:1;11616:2;11596:18;;;11589:30;11655:31;11635:18;;;11628:59;11704:18;;12650:68:0;11375:353:1;12650:68:0;12762:51;12771:5;12778:7;12806:6;12787:16;:25;12762:8;:51::i;25544:409::-;-1:-1:-1;;;;;25690:20:0;;;;;;:14;:20;;;;;;;;25689:21;:44;;;;-1:-1:-1;;;;;;25715:18:0;;;;;;:14;:18;;;;;;;;25714:19;25689:44;25686:216;;;25757:14;;;;25749:45;;;;-1:-1:-1;;;25749:45:0;;11935:2:1;25749:45:0;;;11917:21:1;11974:2;11954:18;;;11947:30;-1:-1:-1;;;11993:18:1;;;11986:48;12051:18;;25749:45:0;11733:342:1;25749:45:0;25819:27;25829:4;25835:2;25839:6;25819:9;:27::i;:::-;25809:37;;;;:::i;:::-;;;25861:29;25873:4;25879:2;25883:6;25861:11;:29::i;:::-;25914:31;25930:4;25935:2;25938:6;25914:15;:31::i;:::-;25544:409;;;:::o;19964:177::-;20074:58;;;-1:-1:-1;;;;;12405:32:1;;20074:58:0;;;12387:51:1;12454:18;;;;12447:34;;;20074:58:0;;;;;;;;;;12360:18:1;;;;20074:58:0;;;;;;;;-1:-1:-1;;;;;20074:58:0;-1:-1:-1;;;20074:58:0;;;20047:86;;20067:5;;20047:19;:86::i;26819:1431::-;26950:15;;26940:4;26898:7;5879:18;;;;;;;;;;;26898:7;;-1:-1:-1;26922:43:0;:63;;;;-1:-1:-1;;;;;;26970:15:0;;;;;;:9;:15;;;;;;;;26969:16;26922:63;:104;;;;;27014:12;26989:17;;27009:1;26989:21;;;;:::i;:::-;:37;;26922:104;26919:150;;;27043:14;:12;:14::i;:::-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27152:13:0;;;;:9;:13;;;;;;;;27148:126;;;-1:-1:-1;27181:15:0;;;;;;;;27189:7;27181:15;-1:-1:-1;;;;;27181:15:0;;;;;-1:-1:-1;;;27181:15:0;;;;;;;;-1:-1:-1;;;27181:15:0;;;;;;;;;;;-1:-1:-1;;;27181:15:0;;;;;;;;;27148:126;;;-1:-1:-1;;;;;27217:15:0;;;;;;:9;:15;;;;;;;;27214:60;;;-1:-1:-1;27248:14:0;;;;;;;;27256:6;27248:14;-1:-1:-1;;;;;27248:14:0;;;;;-1:-1:-1;;;27248:14:0;;;;;;;;-1:-1:-1;;;27248:14:0;;;;;;;;;;;-1:-1:-1;;;27248:14:0;;;;;;;;;27214:60;27297:14;;;;-1:-1:-1;;;;;27297:18:0;;27294:918;;27331:53;;;;;;;;27372:12;27331:53;-1:-1:-1;;;;;27331:53:0;;;;;-1:-1:-1;;;27331:53:0;;;;;;;;-1:-1:-1;;;27331:53:0;;;;;;;;;;-1:-1:-1;;;27331:53:0;;;;;;;;;;;27402:11;;27417:12;27402:27;;27399:373;;-1:-1:-1;;;;;27453:15:0;;;;;;:9;:15;;;;;;;;27449:215;;;22484:5;27506:13;:6;27515:4;27506:13;:::i;:::-;:27;;;;:::i;:::-;27492:42;;27399:373;;27449:215;-1:-1:-1;;;;;27564:13:0;;;;;;:9;:13;;;;;;;;27560:104;;;22484:5;27616:13;:6;27625:4;27616:13;:::i;27560:104::-;27399:373;;;27727:14;;;;22484:5;;27718:23;;-1:-1:-1;;;;;27718:23:0;:6;:23;:::i;:::-;:37;;;;:::i;:::-;27704:52;;27399:373;27878:3;27861:5;:14;;;-1:-1:-1;;;;;27834:41:0;27840:5;:18;;;-1:-1:-1;;;;;27834:24:0;:3;:24;;;;:::i;:::-;:41;;;;:::i;:::-;:47;;;;:::i;:::-;27786:18;:37;;:96;;;;;;;:::i;:::-;-1:-1:-1;;;;;27786:96:0;;;-1:-1:-1;27974:14:0;;;;27952:19;;27991:3;;-1:-1:-1;;;;;27946:42:0;;;;:25;;;:3;:25;:::i;:::-;:42;;;;:::i;:::-;:48;;;;:::i;:::-;27897:98;;:18;;:98;;;;;:::i;:::-;-1:-1:-1;;;;;27897:98:0;;;-1:-1:-1;28075:14:0;;;;28059:13;;;;28092:3;;-1:-1:-1;;;;;28053:36:0;;;;:19;;;:3;:19;:::i;:::-;:36;;;;:::i;:::-;:42;;;;:::i;:::-;28010:18;:32;;:86;;;;;;;:::i;:::-;-1:-1:-1;;;;;28010:86:0;;;;;;28111:33;;:12;:33;;;;;;;;;;;;;;;;-1:-1:-1;;;28111:33:0;-1:-1:-1;;;;28111:33:0;;;-1:-1:-1;;;28111:33:0;;;;;-1:-1:-1;;;;28111:33:0;;;-1:-1:-1;;;28111:33:0;-1:-1:-1;;;;;;28111:33:0;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28159:41:0;28175:4;28189;-1:-1:-1;;;;;28159:41:0;;:15;:41::i;:::-;27316:896;27294:918;-1:-1:-1;;;;;;28232:10:0;;26819:1431;-1:-1:-1;;;;26819:1431:0:o;25961:850::-;26052:7;;;;26049:753;;;-1:-1:-1;;;;;26097:20:0;;;26075:19;26097:20;;;:16;:20;;;;;;;;;5879:18;;;;;;;26182:36;;;;;;;26210:8;26182:36;-1:-1:-1;;;;;26182:36:0;;;;;-1:-1:-1;;;26182:36:0;;;;;;;;26257:15;;;;;:9;:15;;;;;;26097:20;;;;;5879:18;;26257:15;:34;;;;;26277:14;26276:15;26257:34;26253:538;;;26330:26;;-1:-1:-1;;;;;26320:36:0;;;;26312:56;;;;-1:-1:-1;;;26312:56:0;;13886:2:1;26312:56:0;;;13868:21:1;13925:1;13905:18;;;13898:29;-1:-1:-1;;;13943:18:1;;;13936:37;13990:18;;26312:56:0;13684:330:1;26312:56:0;26419:21;;;;-1:-1:-1;;;;;26395:45:0;:20;26404:11;26395:6;:20;:::i;:::-;:45;;26387:68;;;;-1:-1:-1;;;26387:68:0;;14221:2:1;26387:68:0;;;14203:21:1;14260:2;14240:18;;;14233:30;-1:-1:-1;;;14279:18:1;;;14272:40;14329:18;;26387:68:0;14019:334:1;26387:68:0;26253:538;;;-1:-1:-1;;;;;26516:13:0;;;;;;:9;:13;;;;;;;;:40;;;;-1:-1:-1;;;;;;26534:22:0;;;;;;:16;:22;;;;;;;;26533:23;26516:40;26512:279;;;26595:26;;-1:-1:-1;;;;;26585:36:0;;;;26577:56;;;;-1:-1:-1;;;26577:56:0;;13886:2:1;26577:56:0;;;13868:21:1;13925:1;13905:18;;;13898:29;-1:-1:-1;;;13943:18:1;;;13936:37;13990:18;;26577:56:0;13684:330:1;26512:279:0;26672:14;26668:123;;26739:21;;;;-1:-1:-1;;;;;26715:45:0;:20;26724:11;26715:6;:20;:::i;:::-;:45;;26707:68;;;;-1:-1:-1;;;26707:68:0;;14221:2:1;26707:68:0;;;14203:21:1;14260:2;14240:18;;;14233:30;-1:-1:-1;;;14279:18:1;;;14272:40;14329:18;;26707:68:0;14019:334:1;26707:68:0;26060:742;;;25961:850;;;:::o;9936:705::-;-1:-1:-1;;;;;10033:18:0;;10025:68;;;;-1:-1:-1;;;10025:68:0;;14560:2:1;10025:68:0;;;14542:21:1;14599:2;14579:18;;;14572:30;14638:34;14618:18;;;14611:62;-1:-1:-1;;;14689:18:1;;;14682:35;14734:19;;10025:68:0;14358:401:1;10025:68:0;-1:-1:-1;;;;;10112:16:0;;10104:64;;;;-1:-1:-1;;;10104:64:0;;14966:2:1;10104:64:0;;;14948:21:1;15005:2;14985:18;;;14978:30;15044:34;15024:18;;;15017:62;-1:-1:-1;;;15095:18:1;;;15088:33;15138:19;;10104:64:0;14764:399:1;10104:64:0;-1:-1:-1;;;;;10203:15:0;;10181:19;10203:15;;;;;;;;;;;10237:21;;;;10229:72;;;;-1:-1:-1;;;10229:72:0;;15370:2:1;10229:72:0;;;15352:21:1;15409:2;15389:18;;;15382:30;15448:34;15428:18;;;15421:62;-1:-1:-1;;;15499:18:1;;;15492:36;15545:19;;10229:72:0;15168:402:1;10229:72:0;-1:-1:-1;;;;;10337:15:0;;;:9;:15;;;;;;;;;;;10355:20;;;10337:38;;10555:13;;;;;;;;;;:23;;;;;;10607:26;;1693:25:1;;;10555:13:0;;10607:26;;1666:18:1;10607:26:0;;;;;;;10014:627;9936:705;;;:::o;20362:333::-;20443:23;20469:69;20497:4;20469:69;;;;;;;;;;;;;;;;;20477:5;-1:-1:-1;;;;;20469:27:0;;;:69;;;;;:::i;:::-;20553:17;;20443:95;;-1:-1:-1;20553:21:0;20549:139;;20610:10;20599:30;;;;;;;;;;;;:::i;:::-;20591:85;;;;-1:-1:-1;;;20591:85:0;;16027:2:1;20591:85:0;;;16009:21:1;16066:2;16046:18;;;16039:30;16105:34;16085:18;;;16078:62;-1:-1:-1;;;16156:18:1;;;16149:40;16206:19;;20591:85:0;15825:406:1;28638:1727:0;28727:4;28683:23;5879:18;;;;;;;;;;;28744:50;;;;;;;;28782:12;28744:50;-1:-1:-1;;;;;28744:50:0;;;;;;-1:-1:-1;;;28744:50:0;;;;;;;;;;-1:-1:-1;;;28744:50:0;;;;;;;;;;;-1:-1:-1;;;28744:50:0;;;;;;;;;;;28683;;-1:-1:-1;28744:50:0;;-1:-1:-1;;28744:50:0;28833:72;;;:::i;:::-;:104;;;;:::i;:::-;-1:-1:-1;;;;;28805:132:0;;-1:-1:-1;28961:20:0;;;:46;;-1:-1:-1;28985:22:0;;28961:46;28958:60;;;29010:7;;;28638:1727::o;28958:60::-;29051:15;;:20;;29069:2;29051:20;:::i;:::-;29033:15;:38;29030:107;;;29105:15;;:20;;29123:2;29105:20;:::i;:::-;29087:38;;29030:107;29152:34;;;;-1:-1:-1;;;;;29152:38:0;;29149:407;;29206:23;29287:17;29250:15;:34;;;-1:-1:-1;;;;;29232:52:0;:15;:52;;;;:::i;:::-;:72;;;;:::i;:::-;29206:98;;29319:55;29343:4;29350:6;29358:15;29319;:55::i;:::-;29401:6;-1:-1:-1;;;;;29393:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29389:37;29440:34;29459:15;29440:34;;:::i;:::-;;;29510:15;:34;;;-1:-1:-1;;;;;29489:55:0;;;;;;:::i;:::-;;;29191:365;29149:407;29571:19;;29568:559;;29608:33;29625:15;29608:16;:33::i;:::-;29761:29;;;;29691:21;;29670:18;;-1:-1:-1;;;;;29761:33:0;;29758:178;;29827:11;;29864:29;;;;-1:-1:-1;;;;;29827:11:0;;;;29896:17;;29851:42;;-1:-1:-1;;;;;29851:42:0;:10;:42;:::i;:::-;:62;;;;:::i;:::-;29827:91;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29814:104:0;;-1:-1:-1;;29758:178:0;29965:21;;-1:-1:-1;30006:14:0;;30003:113;;30053:17;;:45;;-1:-1:-1;;;;;30053:17:0;;;;30083:10;;30053:45;;;;30083:10;30053:17;:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30040:58:0;;-1:-1:-1;;30003:113:0;29591:536;;29568:559;-1:-1:-1;30176:1:0;30139:34;;;:38;;;30188:39;;;30238:29;;;:33;30284:12;:30;;;;;;;;;-1:-1:-1;;;30284:30:0;-1:-1:-1;;;;;;30284:30:0;;;;;;;;;-1:-1:-1;30345:12:0;30325:17;:32;28638:1727::o;14467:229::-;14604:12;14636:52;14658:6;14666:4;14672:1;14675:12;14636:21;:52::i;:::-;14629:59;14467:229;-1:-1:-1;;;;14467:229:0:o;28258:372::-;28347:16;;;28361:1;28347:16;;;;;;;;28323:21;;28347:16;;;;;;;;;;-1:-1:-1;28347:16:0;28323:40;;28392:4;28374;28379:1;28374:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;28374:23:0;;;-1:-1:-1;;;;;28374:23:0;;;;;28418:4;28408;28413:1;28408:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;28408:14:0;;;:7;;;;;;;;;:14;28435:187;;-1:-1:-1;;;28435:187:0;;:9;:60;;;;;;:187;;28510:8;;28533:1;;28549:4;;28576;;28596:15;;28435:187;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15587:455;15757:12;15815:5;15790:21;:30;;15782:81;;;;-1:-1:-1;;;15782:81:0;;17666:2:1;15782:81:0;;;17648:21:1;17705:2;17685:18;;;17678:30;17744:34;17724:18;;;17717:62;-1:-1:-1;;;17795:18:1;;;17788:36;17841:19;;15782:81:0;17464:402:1;15782:81:0;15875:12;15889:23;15916:6;-1:-1:-1;;;;;15916:11:0;15935:5;15942:4;15916:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15874:73;;;;15965:69;15992:6;16000:7;16009:10;16021:12;15965:26;:69::i;:::-;15958:76;15587:455;-1:-1:-1;;;;;;;15587:455:0:o;18160:644::-;18345:12;18374:7;18370:427;;;18402:10;:17;18423:1;18402:22;18398:290;;-1:-1:-1;;;;;13908:19:0;;;18612:60;;;;-1:-1:-1;;;18612:60:0;;18379:2:1;18612:60:0;;;18361:21:1;18418:2;18398:18;;;18391:30;18457:31;18437:18;;;18430:59;18506:18;;18612:60:0;18177:353:1;18612:60:0;-1:-1:-1;18709:10:0;18702:17;;18370:427;18752:33;18760:10;18772:12;19507:17;;:21;19503:388;;19739:10;19733:17;19796:15;19783:10;19779:2;19775:19;19768:44;19503:388;19866:12;19859:20;;-1:-1:-1;;;19859:20:0;;;;;;;222:418:1;371:2;360:9;353:21;334:4;403:6;397:13;446:6;441:2;430:9;426:18;419:34;505:6;500:2;492:6;488:15;483:2;472:9;468:18;462:50;561:1;556:2;547:6;536:9;532:22;528:31;521:42;631:2;624;620:7;615:2;607:6;603:15;599:29;588:9;584:45;580:54;572:62;;;222:418;;;;:::o;872:173::-;940:20;;-1:-1:-1;;;;;989:31:1;;979:42;;969:70;;1035:1;1032;1025:12;969:70;872:173;;;:::o;1050:300::-;1118:6;1126;1179:2;1167:9;1158:7;1154:23;1150:32;1147:52;;;1195:1;1192;1185:12;1147:52;1218:29;1237:9;1218:29;:::i;:::-;1208:39;1316:2;1301:18;;;;1288:32;;-1:-1:-1;;;1050:300:1:o;1729:186::-;1788:6;1841:2;1829:9;1820:7;1816:23;1812:32;1809:52;;;1857:1;1854;1847:12;1809:52;1880:29;1899:9;1880:29;:::i;:::-;1870:39;1729:186;-1:-1:-1;;;1729:186:1:o;1920:374::-;1997:6;2005;2013;2066:2;2054:9;2045:7;2041:23;2037:32;2034:52;;;2082:1;2079;2072:12;2034:52;2105:29;2124:9;2105:29;:::i;:::-;2095:39;;2153:38;2187:2;2176:9;2172:18;2153:38;:::i;:::-;1920:374;;2143:48;;-1:-1:-1;;;2260:2:1;2245:18;;;;2232:32;;1920:374::o;2299:171::-;2366:20;;-1:-1:-1;;;;;2415:30:1;;2405:41;;2395:69;;2460:1;2457;2450:12;2475:328;2549:6;2557;2565;2618:2;2606:9;2597:7;2593:23;2589:32;2586:52;;;2634:1;2631;2624:12;2586:52;2657:28;2675:9;2657:28;:::i;:::-;2647:38;;2704:37;2737:2;2726:9;2722:18;2704:37;:::i;:::-;2694:47;;2760:37;2793:2;2782:9;2778:18;2760:37;:::i;:::-;2750:47;;2475:328;;;;;:::o;4177:118::-;4263:5;4256:13;4249:21;4242:5;4239:32;4229:60;;4285:1;4282;4275:12;4229:60;4177:118;:::o;4300:315::-;4365:6;4373;4426:2;4414:9;4405:7;4401:23;4397:32;4394:52;;;4442:1;4439;4432:12;4394:52;4465:29;4484:9;4465:29;:::i;:::-;4455:39;;4544:2;4533:9;4529:18;4516:32;4557:28;4579:5;4557:28;:::i;:::-;4604:5;4594:15;;;4300:315;;;;;:::o;4620:260::-;4688:6;4696;4749:2;4737:9;4728:7;4724:23;4720:32;4717:52;;;4765:1;4762;4755:12;4717:52;4788:29;4807:9;4788:29;:::i;:::-;4778:39;;4836:38;4870:2;4859:9;4855:18;4836:38;:::i;:::-;4826:48;;4620:260;;;;;:::o;5220:356::-;5422:2;5404:21;;;5441:18;;;5434:30;5500:34;5495:2;5480:18;;5473:62;5567:2;5552:18;;5220:356::o;5581:380::-;5660:1;5656:12;;;;5703;;;5724:61;;5778:4;5770:6;5766:17;5756:27;;5724:61;5831:2;5823:6;5820:14;5800:18;5797:38;5794:161;;5877:10;5872:3;5868:20;5865:1;5858:31;5912:4;5909:1;5902:15;5940:4;5937:1;5930:15;5794:161;;5581:380;;;:::o;6307:127::-;6368:10;6363:3;6359:20;6356:1;6349:31;6399:4;6396:1;6389:15;6423:4;6420:1;6413:15;6439:191;-1:-1:-1;;;;;6507:26:1;;;6535;;;6503:59;;6574:27;;6571:53;;;6604:18;;:::i;7188:125::-;7253:9;;;7274:10;;;7271:36;;;7287:18;;:::i;10378:184::-;10448:6;10501:2;10489:9;10480:7;10476:23;10472:32;10469:52;;;10517:1;10514;10507:12;10469:52;-1:-1:-1;10540:16:1;;10378:184;-1:-1:-1;10378:184:1:o;12080:128::-;12147:9;;;12168:11;;;12165:37;;;12182:18;;:::i;12492:168::-;12565:9;;;12596;;12613:15;;;12607:22;;12593:37;12583:71;;12634:18;;:::i;12665:127::-;12726:10;12721:3;12717:20;12714:1;12707:31;12757:4;12754:1;12747:15;12781:4;12778:1;12771:15;12797:120;12837:1;12863;12853:35;;12868:18;;:::i;:::-;-1:-1:-1;12902:9:1;;12797:120::o;12922:317::-;-1:-1:-1;;;;;13007:42:1;;;13051;;;13003:91;13114:52;;;;13185:24;;;13175:58;;13213:18;;:::i;:::-;13175:58;12922:317;;;;:::o;13244:227::-;13284:1;-1:-1:-1;;;;;13315:1:1;13311:42;13372:3;13362:37;;13379:18;;:::i;:::-;13461:3;-1:-1:-1;;;;;13421:1:1;13417:42;13413:52;13408:57;;;13244:227;;;;:::o;13476:203::-;-1:-1:-1;;;;;13544:30:1;;;13576;;;13540:67;;13619:31;;13616:57;;;13653:18;;:::i;15575:245::-;15642:6;15695:2;15683:9;15674:7;15670:23;15666:32;15663:52;;;15711:1;15708;15701:12;15663:52;15743:9;15737:16;15762:28;15784:5;15762:28;:::i;16368:127::-;16429:10;16424:3;16420:20;16417:1;16410:31;16460:4;16457:1;16450:15;16484:4;16481:1;16474:15;16500:959;16762:4;16810:3;16799:9;16795:19;16841:6;16830:9;16823:25;16884:6;16879:2;16868:9;16864:18;16857:34;16927:3;16922:2;16911:9;16907:18;16900:31;16951:6;16986;16980:13;17017:6;17009;17002:22;17055:3;17044:9;17040:19;17033:26;;17094:2;17086:6;17082:15;17068:29;;17115:1;17125:195;17139:6;17136:1;17133:13;17125:195;;;17204:13;;-1:-1:-1;;;;;17200:39:1;17188:52;;17269:2;17295:15;;;;17260:12;;;;17236:1;17154:9;17125:195;;;-1:-1:-1;;;;;;;17376:32:1;;;;17371:2;17356:18;;17349:60;-1:-1:-1;;17440:3:1;17425:19;17418:35;17337:3;16500:959;-1:-1:-1;;;16500:959:1:o;17871:301::-;18000:3;18038:6;18032:13;18084:6;18077:4;18069:6;18065:17;18060:3;18054:37;18146:1;18110:16;;18135:13;;;-1:-1:-1;18110:16:1;17871:301;-1:-1:-1;17871:301:1:o

Swarm Source

ipfs://de72b29311dd96b14411fe4e669d3991fa803ee79e0c1e839967c0d47d9601d4
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.