ETH Price: $3,280.73 (-5.60%)

Token

Dragon's Vault (DRAGON)
 

Overview

Max Total Supply

10,000,000 DRAGON

Holders

22

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
0.000000001 DRAGON

Value
$0.00
0x0643f96392B74f3E2B84ff7098E00f7122051EFA
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:
Token

Compiler Version
v0.8.24+commit.e11b9ed9

Optimization Enabled:
No with 200 runs

Other Settings:
paris EvmVersion, Unlicense license
File 1 of 6 : DragonToken.sol
/*
 * SPDX-License-Identifier: MIT
 *
 * Dragon's Vault Token
 *
 * https://dragonsvault.fi
 * https://t.me/Dragons_Vault
 * https://twitter.com/DragonVaultSol
 */
pragma solidity ^0.8.20;


import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
import "@openzeppelin/contracts/access/Ownable.sol";

interface IWETH {
    function deposit() external payable;
    function transfer(address to, uint value) external returns (bool);
    function withdraw(uint) external;
}

interface IUniswapV2Router02 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);

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

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

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

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

    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);

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

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

    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}

contract Token is ERC20, Ownable {
    /// STATE VARIABLES ///

    /// @notice Address of UniswapV2Router
    IUniswapV2Router02 public immutable uniswapV2Router;
    /// @notice Address of /ETH LP - cannot be immutable as we only want to define it when enabling trading.
    address public uniswapV2Pair;
    /// @notice Burn address
    address public constant deadAddress = address(0xdead);

    /// @notice Team wallet address
    address public teamWallet;

    bool private swapping;

    /// @notice Bool if trading is active
    bool public tradingActive = false;
    /// @notice Bool if swap is enabled
    bool public swapEnabled = false;
    /// @notice Bool if limits are in effect
    bool public limitsInEffect = true;

    /// @notice Current max wallet amount (If limits in effect)
    uint256 public maxWallet;
    /// @notice Current max transaction amount (If limits in effect)
    uint256 public maxTransactionAmount;
    /// @notice Current percent of supply to swap tokens at (i.e. 5 = 0.05%)
    uint256 public swapPercent;

    /// @notice Current buy side total fees
    uint256 public buyTotalFees;
    /// @notice Current buy side backing fee
    uint256 public buyBackingFee;
    /// @notice Current buy side liquidity fee
    uint256 public buyLiquidityFee;
    /// @notice Current buy side team fee
    uint256 public buyTeamFee;

    /// @notice Current sell side total fees
    uint256 public sellTotalFees;
    /// @notice Current sell side backing fee
    uint256 public sellBackingFee;
    /// @notice Current sell side liquidity fee
    uint256 public sellLiquidityFee;
    /// @notice Current sell side team fee
    uint256 public sellTeamFee;

    /// @notice Current tokens going for backing
    uint256 public tokensForBacking;
    /// @notice Current tokens going for liquidity
    uint256 public tokensForLiquidity;
    /// @notice Current tokens going for tean
    uint256 public tokensForTeam;

    /// MAPPINGS ///

    /// @dev Bool if address is excluded from fees
    mapping(address => bool) private _isExcludedFromFees;

    /// @notice Bool if address is excluded from max transaction amount
    mapping(address => bool) public _isExcludedMaxTransactionAmount;

    /// @notice Bool if address is AMM pair
    mapping(address => bool) public automatedMarketMakerPairs;

    /// EVENTS ///

    event TradingStarted(address indexed pair, uint256 liquidityTokens, uint256 liquidityWeth);
    event ExcludeFromFees(address indexed account, bool isExcluded);
    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);

    /// CONSTRUCTOR ///
    /// @param _teamWallet   Address of team wallet
    constructor(address _teamWallet) ERC20("Dragon's Vault", "DRAGON"){
        address _uniAddr;
        if (block.chainid == 1 || block.chainid == 31337) {
            _uniAddr = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; // Ethereum: Uniswap V2
        } else if (block.chainid == 11155111) {
            _uniAddr = 0xC532a74256D3Db42D0Bf7a0400fEFDbad7694008; // Ethereum: Uniswap V2
        } else {
            revert("Chain cannot work with Uniswap");
        }

        uniswapV2Router = IUniswapV2Router02(_uniAddr);

        uint256 startingSupply_ = 10_000_000 * 10 ** decimals();

        maxWallet = 200_000 * 10 ** decimals(); // 2%
        maxTransactionAmount = 200_000 * 10 ** decimals(); // 2%
        swapPercent = 10; // 0.10%

        buyBackingFee = 0;
        buyLiquidityFee = 0;
        buyTeamFee = 10;
        buyTotalFees = buyBackingFee + buyLiquidityFee + buyTeamFee;

        sellBackingFee = 0;
        sellLiquidityFee = 0;
        sellTeamFee = 35;
        sellTotalFees = sellBackingFee + sellLiquidityFee + sellTeamFee;

        teamWallet = _teamWallet; // set as team wallet

        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);
        excludeFromFees(teamWallet, true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);

        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(teamWallet, true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);

        _mint(address(this), startingSupply_);
        _transfer(address(this), msg.sender, (totalSupply() * 20) / 100);
    }

    receive() external payable {}

    /// AMM PAIR ///

    /// @notice       Sets if address is AMM pair
    /// @param pair   Address of pair
    /// @param value  Bool if AMM pair
    function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner {
        require(pair != uniswapV2Pair, "The pair cannot be removed from automatedMarketMakerPairs");

        _setAutomatedMarketMakerPair(pair, value);
    }

    /// @dev Internal function to set `vlaue` of `pair`
    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    /// INTERNAL TRANSFER ///

    /// @dev Internal function to burn `amount` from `account`
    function _burnFrom(address account, uint256 amount) internal {
        uint256 decreasedAllowance_ = allowance(account, msg.sender) - amount;

        _approve(account, msg.sender, decreasedAllowance_);
        _burn(account, amount);
    }

    /// @dev Internal function to transfer - handles fee logic
    function _transfer(address from, address to, uint256 amount) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

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

        if (limitsInEffect) {
            if (from != owner() && to != owner() && to != address(0) && to != address(0xdead) && !swapping) {
                if (!tradingActive) {
                    require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active.");
                }

                //when buy
                if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) {
                    require(amount <= maxTransactionAmount, "Buy transfer amount exceeds the maxTransactionAmount.");
                    require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
                }
                    //when sell
                else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) {
                    require(amount <= maxTransactionAmount, "Sell transfer amount exceeds the maxTransactionAmount.");
                } else if (!_isExcludedMaxTransactionAmount[to]) {
                    require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
                }
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount();

        if (
            canSwap &&
            swapEnabled &&
            !swapping &&
            !automatedMarketMakerPairs[from] &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]
        ) {
            swapping = true;

            swapBack();

            swapping = false;
        }

        bool takeFee = !swapping;

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

        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if (takeFee) {
            // on sell
            if (automatedMarketMakerPairs[to] && sellTotalFees > 0) {
                fees = (amount * sellTotalFees) / 100;
                tokensForLiquidity += (fees * sellLiquidityFee) / sellTotalFees;
                tokensForTeam += (fees * sellTeamFee) / sellTotalFees;
                tokensForBacking += (fees * sellBackingFee) / sellTotalFees;
            }
                // on buy
            else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = (amount * buyTotalFees) / 100;
                tokensForLiquidity += (fees * buyLiquidityFee) / buyTotalFees;
                tokensForTeam += (fees * buyTeamFee) / buyTotalFees;
                tokensForBacking += (fees * buyBackingFee) / buyTotalFees;
            }

            if (fees > 0) {
                super._transfer(from, address(this), fees);
            }

            amount -= fees;
        }

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

    // #region INTERNAL FUNCTION

    /// @dev INTERNAL function to swap `tokenAmount` for ETH
    /// @dev Invoked in `swapBack()`
    function swapTokensForEth(uint256 tokenAmount) internal {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

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

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

    /// @dev INTERNAL function to transfer fees properly
    /// @dev Invoked in `_transfer()`
    function swapBack() internal {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity + tokensForBacking + tokensForTeam;
        bool success;

        if (contractBalance == 0 || totalTokensToSwap == 0) {
            return;
        }

        if (contractBalance > swapTokensAtAmount() * 20) {
            contractBalance = swapTokensAtAmount() * 20;
        }

        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = (contractBalance * tokensForLiquidity) / totalTokensToSwap / 2;
        uint256 amountToSwapForETH = contractBalance - liquidityTokens;

        uint256 initialETHBalance = address(this).balance;

        swapTokensForEth(amountToSwapForETH);

        uint256 ethBalance = address(this).balance - initialETHBalance;
        uint256 ethForTeam = (ethBalance * tokensForTeam) / totalTokensToSwap - (tokensForLiquidity / 2);

        tokensForLiquidity = 0;
        tokensForBacking = 0;
        tokensForTeam = 0;

        (success, ) = address(teamWallet).call{value: ethForTeam}("");

        uint256 _balance = address(this).balance;
        IWETH(uniswapV2Router.WETH()).deposit{value: _balance}();
        IERC20(uniswapV2Router.WETH()).transfer(teamWallet, _balance);
    }

    /// VIEW FUNCTION ///

    /// @notice Returns decimals
    function decimals() public view virtual override returns (uint8) {
        return 9;
    }

    /// @notice Returns if address is excluded from fees
    function isExcludedFromFees(address account) public view returns (bool) {
        return _isExcludedFromFees[account];
    }

    /// @notice Returns at what percent of supply to swap tokens at
    function swapTokensAtAmount() public view returns (uint256 amount_) {
        amount_ = (totalSupply() * swapPercent) / 10000;
    }

    /// USER FUNCTIONS ///

    /// @notice         Burn
    /// @param account  Address to burn from
    /// @param amount   Amount to to burn
    function burnFrom(address account, uint256 amount) external {
        _burnFrom(account, amount);
    }

    /// @notice         Burn
    /// @param amount   Amount to to burn
    function burn(uint256 amount) external {
        _burn(msg.sender, amount);
    }

    /// OWNER FUNCTIONS ///

    /// @notice Enable trading - once enabled, can never be turned off. Send in LP amount here and mint so you don't get rekt.
    function enableTrading() external payable onlyOwner {
        require(!tradingActive, "Trading is active already");
        require(msg.value > 0, "Send liquidity eth");

        uint256 liquidityTokens = balanceOf(address(this)); // 100% of the balance assigned to this contract
        require(liquidityTokens > 0, "No tokens!");

        // create pair and pool
        uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory()).createPair(address(this), uniswapV2Router.WETH());
        excludeFromMaxTransaction(address(uniswapV2Pair), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);

        IERC20Metadata weth = IERC20Metadata(uniswapV2Router.WETH());
        weth.approve(address(uniswapV2Router), type(uint256).max);
        _approve(address(this), address(uniswapV2Router), type(uint256).max);

        // add the liquidity
        uniswapV2Router.addLiquidityETH{value: msg.value}(
            address(this),
            liquidityTokens,
            0,
            0,
            owner(),
            block.timestamp
        );

        tradingActive = true;
        swapEnabled = true;
        emit TradingStarted(uniswapV2Pair, liquidityTokens, msg.value);
    }

    /// @notice Update percent of supply to swap tokens at
    function updateSwapTokensAtPercent(uint256 newPercent) external onlyOwner returns (bool) {
        require(newPercent >= 1, "Swap amount cannot be lower than 0.01% total supply.");
        require(newPercent <= 50, "Swap amount cannot be higher than 0.50% total supply.");
        swapPercent = newPercent;
        return true;
    }

    /// @notice Update swap enabled
    /// @dev    Only use to disable contract sales if absolutely necessary (emergency use only)
    function updateSwapEnabled(bool enabled) external onlyOwner {
        swapEnabled = enabled;
    }

    /// @notice Update buy side fees
    function updateBuyFees(uint256 _teamFee) external onlyOwner {
        buyBackingFee = 0;
        buyLiquidityFee = 0;
        buyTeamFee = _teamFee;
        buyTotalFees = buyBackingFee + buyLiquidityFee + buyTeamFee;
    }

    /// @notice Update sell side fees
    function updateSellFees(uint256 _teamFee) external onlyOwner {
        sellBackingFee = 0;
        sellLiquidityFee = 0;
        sellTeamFee = _teamFee;
        sellTotalFees = sellBackingFee + sellLiquidityFee + sellTeamFee;
    }

    /// @notice Set if an address is excluded from fees
    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }

    /// @notice Set if an address is excluded from max transaction
    function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }

    /// @notice Update team wallet
    function updateTeamWallet(address newWallet) external onlyOwner {
        teamWallet = newWallet;
        excludeFromFees(newWallet, true);
        excludeFromMaxTransaction(newWallet, true);
    }

    /// @notice Remove limits in palce
    function removeLimits() external onlyOwner returns (bool) {
        limitsInEffect = false;
        return true;
    }

    /// @notice Withdraw stuck tokens from contract
    function withdrawStuck() external onlyOwner {
        uint256 balance = IERC20(address(this)).balanceOf(address(this));
        IERC20(address(this)).transfer(msg.sender, balance);
        payable(msg.sender).transfer(address(this).balance);
    }

    /// @notice Withdraw stuck token from contract
    function withdrawStuckToken(address _token, address _to) external onlyOwner {
        require(_token != address(0), "_token address cannot be 0");
        uint256 _contractBalance = IERC20(_token).balanceOf(address(this));
        IERC20(_token).transfer(_to, _contractBalance);
    }

    /// @notice Withdraw stuck ETH from contract
    function withdrawStuckEth(address toAddr) external onlyOwner {
        (bool success, ) = toAddr.call{value: address(this).balance}("");
        require(success);
    }
}

File 2 of 6 : Ownable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)

pragma solidity ^0.8.0;

import "../utils/Context.sol";

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

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

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

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby disabling any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

File 3 of 6 : ERC20.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/ERC20.sol)

pragma solidity ^0.8.0;

import "./IERC20.sol";
import "./extensions/IERC20Metadata.sol";
import "../../utils/Context.sol";

/**
 * @dev Implementation of the {IERC20} interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using {_mint}.
 * For a generic mechanism see {ERC20PresetMinterPauser}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * The default value of {decimals} is 18. To change this, you should override
 * this function so it returns a different value.
 *
 * We have followed general OpenZeppelin Contracts guidelines: functions revert
 * instead returning `false` on failure. This behavior is nonetheless
 * conventional and does not conflict with the expectations of ERC20
 * applications.
 *
 * Additionally, an {Approval} event is emitted on calls to {transferFrom}.
 * This allows applications to reconstruct the allowance for all accounts just
 * by listening to said events. Other implementations of the EIP may not emit
 * these events, as it isn't required by the specification.
 *
 * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
 * functions have been added to mitigate the well-known issues around setting
 * allowances. See {IERC20-approve}.
 */
contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * 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");

        _beforeTokenTransfer(from, to, amount);

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

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, amount);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

File 4 of 6 : IERC20.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

File 5 of 6 : IERC20Metadata.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)

pragma solidity ^0.8.0;

import "../IERC20.sol";

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

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

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

File 6 of 6 : Context.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.4) (utils/Context.sol)

pragma solidity ^0.8.0;

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

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

    function _contextSuffixLength() internal view virtual returns (uint256) {
        return 0;
    }
}

Settings
{
  "evmVersion": "paris",
  "libraries": {},
  "metadata": {
    "bytecodeHash": "ipfs",
    "useLiteralContent": true
  },
  "optimizer": {
    "enabled": false,
    "runs": 200
  },
  "remappings": [],
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_teamWallet","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":false,"internalType":"uint256","name":"liquidityTokens","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"liquidityWeth","type":"uint256"}],"name":"TradingStarted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyBackingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTeamFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","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":"enableTrading","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellBackingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTeamFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapPercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"amount_","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"teamWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForBacking","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForTeam","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_teamFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_teamFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPercent","type":"uint256"}],"name":"updateSwapTokensAtPercent","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateTeamWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawStuck","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"toAddr","type":"address"}],"name":"withdrawStuckEth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"name":"withdrawStuckToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a06040526000600760156101000a81548160ff0219169083151502179055506000600760166101000a81548160ff0219169083151502179055506001600760176101000a81548160ff0219169083151502179055503480156200006257600080fd5b5060405162007e8a38038062007e8a833981810160405281019062000088919062001fa0565b6040518060400160405280600e81526020017f447261676f6e2773205661756c740000000000000000000000000000000000008152506040518060400160405280600681526020017f445241474f4e000000000000000000000000000000000000000000000000000081525081600390816200010591906200224c565b5080600490816200011791906200224c565b5050506200013a6200012e620004c160201b60201c565b620004c960201b60201c565b600060014614806200014d5750617a6946145b156200017057737a250d5630b4cf539739df2c5dacb4c659f2488d9050620001d6565b62aa36a74603620001985773c532a74256d3db42d0bf7a0400fefdbad76940089050620001d5565b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001cc9062002394565b60405180910390fd5b5b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff168152505060006200021c6200058f60201b60201c565b600a6200022a919062002546565b629896806200023a919062002597565b90506200024c6200058f60201b60201c565b600a6200025a919062002546565b62030d406200026a919062002597565b600881905550620002806200058f60201b60201c565b600a6200028e919062002546565b62030d406200029e919062002597565b600981905550600a80819055506000600c819055506000600d81905550600a600e81905550600e54600d54600c54620002d89190620025e2565b620002e49190620025e2565b600b81905550600060108190555060006011819055506023601281905550601254601154601054620003179190620025e2565b620003239190620025e2565b600f8190555082600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200038c6200037e6200059860201b60201c565b6001620005c260201b60201c565b620003c1600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620005c260201b60201c565b620003d4306001620005c260201b60201c565b620003e961dead6001620005c260201b60201c565b6200040b620003fd6200059860201b60201c565b60016200067d60201b60201c565b62000440600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200067d60201b60201c565b620004533060016200067d60201b60201c565b6200046861dead60016200067d60201b60201c565b6200047a3082620006e860201b60201c565b620004b8303360646014620004946200085560201b60201c565b620004a0919062002597565b620004ac91906200264c565b6200085f60201b60201c565b50505062002fa8565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60006009905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620005d2620013ce60201b60201c565b80601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051620006719190620026a1565b60405180910390a25050565b6200068d620013ce60201b60201c565b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036200075a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000751906200270e565b60405180910390fd5b6200076e600083836200145f60201b60201c565b8060026000828254620007829190620025e2565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000835919062002741565b60405180910390a362000851600083836200146460201b60201c565b5050565b6000600254905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603620008d1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008c890620027d4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000943576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200093a906200286c565b60405180910390fd5b60008103620009665762000960838360006200146960201b60201c565b620013c9565b600760179054906101000a900460ff161562000ea3576200098c6200059860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801562000a035750620009d36200059860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801562000a3d5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801562000a78575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801562000a925750600760149054906101000a900460ff16155b1562000ea257600760159054906101000a900460ff1662000b9257601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168062000b4f5750601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b62000b91576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000b8890620028de565b60405180910390fd5b5b601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801562000c365750601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1562000cef5760095481111562000c84576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000c7b9062002976565b60405180910390fd5b60085462000c9883620016fa60201b60201c565b8262000ca59190620025e2565b111562000ce9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000ce090620029e8565b60405180910390fd5b62000ea1565b601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801562000d935750601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1562000de75760095481111562000de1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000dd89062002a80565b60405180910390fd5b62000ea0565b601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1662000e9f5760085462000e4d83620016fa60201b60201c565b8262000e5a9190620025e2565b111562000e9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000e9590620029e8565b60405180910390fd5b5b5b5b5b5b600062000eb630620016fa60201b60201c565b9050600062000eca6200174260201b60201c565b821015905080801562000ee95750600760169054906101000a900460ff165b801562000f035750600760149054906101000a900460ff16155b801562000f5a5750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801562000fb15750601660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015620010085750601660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1562001055576001600760146101000a81548160ff021916908315150217905550620010396200177760201b60201c565b6000600760146101000a81548160ff0219169083151502179055505b6000600760149054906101000a900460ff16159050601660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806200110c5750601660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156200111757600090505b60008115620013b157601860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156200117c57506000600f54115b1562001253576064600f548662001194919062002597565b620011a091906200264c565b9050600f5460115482620011b5919062002597565b620011c191906200264c565b60146000828254620011d49190620025e2565b92505081905550600f5460125482620011ee919062002597565b620011fa91906200264c565b601560008282546200120d9190620025e2565b92505081905550600f546010548262001227919062002597565b6200123391906200264c565b60136000828254620012469190620025e2565b9250508190555062001382565b601860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015620012af57506000600b54115b1562001381576064600b5486620012c7919062002597565b620012d391906200264c565b9050600b54600d5482620012e8919062002597565b620012f491906200264c565b60146000828254620013079190620025e2565b92505081905550600b54600e548262001321919062002597565b6200132d91906200264c565b60156000828254620013409190620025e2565b92505081905550600b54600c54826200135a919062002597565b6200136691906200264c565b60136000828254620013799190620025e2565b925050819055505b5b6000811115620013a0576200139f8730836200146960201b60201c565b5b8085620013ae919062002aa2565b94505b620013c48787876200146960201b60201c565b505050505b505050565b620013de620004c160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620014046200059860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200145d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620014549062002b2d565b60405180910390fd5b565b505050565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603620014db576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620014d290620027d4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036200154d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162001544906200286c565b60405180910390fd5b620015608383836200145f60201b60201c565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015620015e9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620015e09062002bc5565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051620016d9919062002741565b60405180910390a3620016f48484846200146460201b60201c565b50505050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000612710600a546200175a6200085560201b60201c565b62001766919062002597565b6200177291906200264c565b905090565b60006200178a30620016fa60201b60201c565b90506000601554601354601454620017a39190620025e2565b620017af9190620025e2565b9050600080831480620017c25750600082145b15620017d15750505062001b67565b6014620017e36200174260201b60201c565b620017ef919062002597565b83111562001818576014620018096200174260201b60201c565b62001815919062002597565b92505b6000600283601454866200182d919062002597565b6200183991906200264c565b6200184591906200264c565b90506000818562001857919062002aa2565b905060004790506200186f8262001b6960201b60201c565b600081476200187f919062002aa2565b9050600060026014546200189491906200264c565b8760155484620018a5919062002597565b620018b191906200264c565b620018bd919062002aa2565b9050600060148190555060006013819055506000601581905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16816040516200191f9062002c1c565b60006040518083038185875af1925050503d80600081146200195e576040519150601f19603f3d011682016040523d82523d6000602084013e62001963565b606091505b505080965050600047905060805173ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620019bc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620019e2919062001fa0565b73ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801562001a2a57600080fd5b505af115801562001a3f573d6000803e3d6000fd5b505050505060805173ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001a92573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001ab8919062001fa0565b73ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b815260040162001b1692919062002c44565b6020604051808303816000875af115801562001b36573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001b5c919062002ca2565b505050505050505050505b565b6000600267ffffffffffffffff81111562001b895762001b8862001fdd565b5b60405190808252806020026020018201604052801562001bb85781602001602082028036833780820191505090505b509050308160008151811062001bd35762001bd262002cd4565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060805173ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001c5b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001c81919062001fa0565b8160018151811062001c985762001c9762002cd4565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505062001ce7306080518462001d6560201b60201c565b60805173ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040162001d2d95949392919062002e14565b600060405180830381600087803b15801562001d4857600080fd5b505af115801562001d5d573d6000803e3d6000fd5b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160362001dd7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162001dce9062002eee565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362001e49576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162001e409062002f86565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405162001f29919062002741565b60405180910390a3505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062001f688262001f3b565b9050919050565b62001f7a8162001f5b565b811462001f8657600080fd5b50565b60008151905062001f9a8162001f6f565b92915050565b60006020828403121562001fb95762001fb862001f36565b5b600062001fc98482850162001f89565b91505092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200205457607f821691505b6020821081036200206a57620020696200200c565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620020d47fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262002095565b620020e0868362002095565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b60006200212d620021276200212184620020f8565b62002102565b620020f8565b9050919050565b6000819050919050565b62002149836200210c565b62002161620021588262002134565b848454620020a2565b825550505050565b600090565b6200217862002169565b620021858184846200213e565b505050565b5b81811015620021ad57620021a16000826200216e565b6001810190506200218b565b5050565b601f821115620021fc57620021c68162002070565b620021d18462002085565b81016020851015620021e1578190505b620021f9620021f08562002085565b8301826200218a565b50505b505050565b600082821c905092915050565b6000620022216000198460080262002201565b1980831691505092915050565b60006200223c83836200220e565b9150826002028217905092915050565b620022578262001fd2565b67ffffffffffffffff81111562002273576200227262001fdd565b5b6200227f82546200203b565b6200228c828285620021b1565b600060209050601f831160018114620022c45760008415620022af578287015190505b620022bb85826200222e565b8655506200232b565b601f198416620022d48662002070565b60005b82811015620022fe57848901518255600182019150602085019450602081019050620022d7565b868310156200231e57848901516200231a601f8916826200220e565b8355505b6001600288020188555050505b505050505050565b600082825260208201905092915050565b7f436861696e2063616e6e6f7420776f726b207769746820556e69737761700000600082015250565b60006200237c601e8362002333565b9150620023898262002344565b602082019050919050565b60006020820190508181036000830152620023af816200236d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111562002444578086048111156200241c576200241b620023b6565b5b60018516156200242c5780820291505b80810290506200243c85620023e5565b9450620023fc565b94509492505050565b6000826200245f576001905062002532565b816200246f576000905062002532565b81600181146200248857600281146200249357620024c9565b600191505062002532565b60ff841115620024a857620024a7620023b6565b5b8360020a915084821115620024c257620024c1620023b6565b5b5062002532565b5060208310610133831016604e8410600b8410161715620025035782820a905083811115620024fd57620024fc620023b6565b5b62002532565b620025128484846001620023f2565b925090508184048111156200252c576200252b620023b6565b5b81810290505b9392505050565b600060ff82169050919050565b60006200255382620020f8565b9150620025608362002539565b92506200258f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846200244d565b905092915050565b6000620025a482620020f8565b9150620025b183620020f8565b9250828202620025c181620020f8565b91508282048414831517620025db57620025da620023b6565b5b5092915050565b6000620025ef82620020f8565b9150620025fc83620020f8565b9250828201905080821115620026175762002616620023b6565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006200265982620020f8565b91506200266683620020f8565b9250826200267957620026786200261d565b5b828204905092915050565b60008115159050919050565b6200269b8162002684565b82525050565b6000602082019050620026b8600083018462002690565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000620026f6601f8362002333565b91506200270382620026be565b602082019050919050565b600060208201905081810360008301526200272981620026e7565b9050919050565b6200273b81620020f8565b82525050565b600060208201905062002758600083018462002730565b92915050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000620027bc60258362002333565b9150620027c9826200275e565b604082019050919050565b60006020820190508181036000830152620027ef81620027ad565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006200285460238362002333565b91506200286182620027f6565b604082019050919050565b60006020820190508181036000830152620028878162002845565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000620028c660168362002333565b9150620028d3826200288e565b602082019050919050565b60006020820190508181036000830152620028f981620028b7565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b60006200295e60358362002333565b91506200296b8262002900565b604082019050919050565b6000602082019050818103600083015262002991816200294f565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000620029d060138362002333565b9150620029dd8262002998565b602082019050919050565b6000602082019050818103600083015262002a0381620029c1565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b600062002a6860368362002333565b915062002a758262002a0a565b604082019050919050565b6000602082019050818103600083015262002a9b8162002a59565b9050919050565b600062002aaf82620020f8565b915062002abc83620020f8565b925082820390508181111562002ad75762002ad6620023b6565b5b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062002b1560208362002333565b915062002b228262002add565b602082019050919050565b6000602082019050818103600083015262002b488162002b06565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b600062002bad60268362002333565b915062002bba8262002b4f565b604082019050919050565b6000602082019050818103600083015262002be08162002b9e565b9050919050565b600081905092915050565b50565b600062002c0460008362002be7565b915062002c118262002bf2565b600082019050919050565b600062002c298262002bf5565b9150819050919050565b62002c3e8162001f5b565b82525050565b600060408201905062002c5b600083018562002c33565b62002c6a602083018462002730565b9392505050565b62002c7c8162002684565b811462002c8857600080fd5b50565b60008151905062002c9c8162002c71565b92915050565b60006020828403121562002cbb5762002cba62001f36565b5b600062002ccb8482850162002c8b565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b600062002d2e62002d2862002d228462002d03565b62002102565b620020f8565b9050919050565b62002d408162002d0d565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b62002d7d8162001f5b565b82525050565b600062002d91838362002d72565b60208301905092915050565b6000602082019050919050565b600062002db78262002d46565b62002dc3818562002d51565b935062002dd08362002d62565b8060005b8381101562002e0757815162002deb888262002d83565b975062002df88362002d9d565b92505060018101905062002dd4565b5085935050505092915050565b600060a08201905062002e2b600083018862002730565b62002e3a602083018762002d35565b818103604083015262002e4e818662002daa565b905062002e5f606083018562002c33565b62002e6e608083018462002730565b9695505050505050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600062002ed660248362002333565b915062002ee38262002e78565b604082019050919050565b6000602082019050818103600083015262002f098162002ec7565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600062002f6e60228362002333565b915062002f7b8262002f10565b604082019050919050565b6000602082019050818103600083015262002fa18162002f5f565b9050919050565b608051614e796200301160003960008181610d930152818161138501528181611430015281816115bb015281816116680152818161170f01528181611756015281816134a701528181613596015281816137780152818161385901526138800152614e796000f3fe6080604052600436106103395760003560e01c80637cb332bb116101ab578063bc205ad3116100f7578063e2f4560511610095578063f2fde38b1161006f578063f2fde38b14610c12578063f637434214610c3b578063f8b45b0514610c66578063fde83a3414610c9157610340565b8063e2f4560514610b93578063eba4c33314610bbe578063f11a24d314610be757610340565b8063c8c8ebe4116100d1578063c8c8ebe414610ad5578063d729715f14610b00578063d85ba06314610b2b578063dd62ed3e14610b5657610340565b8063bc205ad314610a58578063be1512f314610a81578063c024666814610aac57610340565b80639a7a23d611610164578063a9059cbb1161013e578063a9059cbb14610976578063b62496f5146109b3578063ba22abc3146109f0578063bbc0c74214610a2d57610340565b80639a7a23d6146108e55780639c2e4ac61461090e578063a457c2d71461093957610340565b80637cb332bb146108085780637f6bf20a146108315780638a8c523c1461085c5780638da5cb5b14610866578063924de9b71461089157806395d89b41146108ba57610340565b80634ac1126a1161028557806370a0823111610223578063751039fc116101fd578063751039fc146107625780637571336a1461078d57806379cc6790146107b65780637ca8448a146107df57610340565b806370a08231146106e5578063715018a61461072257806371fc46881461073957610340565b806367a1bd551161025f57806367a1bd551461064d5780636a486a8e146106645780636ddd17131461068f5780636f33037f146106ba57610340565b80634ac1126a146105ba5780634fbee193146105e5578063599270441461062257610340565b806323b872dd116102f257806339509351116102cc57806339509351146104fe57806342966c681461053b57806349bd5a5e146105645780634a62bb651461058f57610340565b806323b872dd1461046b57806327c8f835146104a8578063313ce567146104d357610340565b806306fdde0314610345578063095ea7b31461037057806310d5de53146103ad5780631694505e146103ea57806318160ddd146104155780631a8145bb1461044057610340565b3661034057005b600080fd5b34801561035157600080fd5b5061035a610cbc565b60405161036791906139a6565b60405180910390f35b34801561037c57600080fd5b5061039760048036038101906103929190613a61565b610d4e565b6040516103a49190613abc565b60405180910390f35b3480156103b957600080fd5b506103d460048036038101906103cf9190613ad7565b610d71565b6040516103e19190613abc565b60405180910390f35b3480156103f657600080fd5b506103ff610d91565b60405161040c9190613b63565b60405180910390f35b34801561042157600080fd5b5061042a610db5565b6040516104379190613b8d565b60405180910390f35b34801561044c57600080fd5b50610455610dbf565b6040516104629190613b8d565b60405180910390f35b34801561047757600080fd5b50610492600480360381019061048d9190613ba8565b610dc5565b60405161049f9190613abc565b60405180910390f35b3480156104b457600080fd5b506104bd610df4565b6040516104ca9190613c0a565b60405180910390f35b3480156104df57600080fd5b506104e8610dfa565b6040516104f59190613c41565b60405180910390f35b34801561050a57600080fd5b5061052560048036038101906105209190613a61565b610e03565b6040516105329190613abc565b60405180910390f35b34801561054757600080fd5b50610562600480360381019061055d9190613c5c565b610e3a565b005b34801561057057600080fd5b50610579610e47565b6040516105869190613c0a565b60405180910390f35b34801561059b57600080fd5b506105a4610e6d565b6040516105b19190613abc565b60405180910390f35b3480156105c657600080fd5b506105cf610e80565b6040516105dc9190613b8d565b60405180910390f35b3480156105f157600080fd5b5061060c60048036038101906106079190613ad7565b610e86565b6040516106199190613abc565b60405180910390f35b34801561062e57600080fd5b50610637610edc565b6040516106449190613c0a565b60405180910390f35b34801561065957600080fd5b50610662610f02565b005b34801561067057600080fd5b50610679611051565b6040516106869190613b8d565b60405180910390f35b34801561069b57600080fd5b506106a4611057565b6040516106b19190613abc565b60405180910390f35b3480156106c657600080fd5b506106cf61106a565b6040516106dc9190613b8d565b60405180910390f35b3480156106f157600080fd5b5061070c60048036038101906107079190613ad7565b611070565b6040516107199190613b8d565b60405180910390f35b34801561072e57600080fd5b506107376110b8565b005b34801561074557600080fd5b50610760600480360381019061075b9190613c5c565b6110cc565b005b34801561076e57600080fd5b50610777611111565b6040516107849190613abc565b60405180910390f35b34801561079957600080fd5b506107b460048036038101906107af9190613cb5565b61113d565b005b3480156107c257600080fd5b506107dd60048036038101906107d89190613a61565b6111a0565b005b3480156107eb57600080fd5b5061080660048036038101906108019190613ad7565b6111ae565b005b34801561081457600080fd5b5061082f600480360381019061082a9190613ad7565b611230565b005b34801561083d57600080fd5b50610846611292565b6040516108539190613b8d565b60405180910390f35b610864611298565b005b34801561087257600080fd5b5061087b6118b2565b6040516108889190613c0a565b60405180910390f35b34801561089d57600080fd5b506108b860048036038101906108b39190613cf5565b6118dc565b005b3480156108c657600080fd5b506108cf611901565b6040516108dc91906139a6565b60405180910390f35b3480156108f157600080fd5b5061090c60048036038101906109079190613cb5565b611993565b005b34801561091a57600080fd5b50610923611a39565b6040516109309190613b8d565b60405180910390f35b34801561094557600080fd5b50610960600480360381019061095b9190613a61565b611a3f565b60405161096d9190613abc565b60405180910390f35b34801561098257600080fd5b5061099d60048036038101906109989190613a61565b611ab6565b6040516109aa9190613abc565b60405180910390f35b3480156109bf57600080fd5b506109da60048036038101906109d59190613ad7565b611ad9565b6040516109e79190613abc565b60405180910390f35b3480156109fc57600080fd5b50610a176004803603810190610a129190613c5c565b611af9565b604051610a249190613abc565b60405180910390f35b348015610a3957600080fd5b50610a42611b9b565b604051610a4f9190613abc565b60405180910390f35b348015610a6457600080fd5b50610a7f6004803603810190610a7a9190613d22565b611bae565b005b348015610a8d57600080fd5b50610a96611d27565b604051610aa39190613b8d565b60405180910390f35b348015610ab857600080fd5b50610ad36004803603810190610ace9190613cb5565b611d2d565b005b348015610ae157600080fd5b50610aea611dde565b604051610af79190613b8d565b60405180910390f35b348015610b0c57600080fd5b50610b15611de4565b604051610b229190613b8d565b60405180910390f35b348015610b3757600080fd5b50610b40611dea565b604051610b4d9190613b8d565b60405180910390f35b348015610b6257600080fd5b50610b7d6004803603810190610b789190613d22565b611df0565b604051610b8a9190613b8d565b60405180910390f35b348015610b9f57600080fd5b50610ba8611e77565b604051610bb59190613b8d565b60405180910390f35b348015610bca57600080fd5b50610be56004803603810190610be09190613c5c565b611ea0565b005b348015610bf357600080fd5b50610bfc611ee5565b604051610c099190613b8d565b60405180910390f35b348015610c1e57600080fd5b50610c396004803603810190610c349190613ad7565b611eeb565b005b348015610c4757600080fd5b50610c50611f6e565b604051610c5d9190613b8d565b60405180910390f35b348015610c7257600080fd5b50610c7b611f74565b604051610c889190613b8d565b60405180910390f35b348015610c9d57600080fd5b50610ca6611f7a565b604051610cb39190613b8d565b60405180910390f35b606060038054610ccb90613d91565b80601f0160208091040260200160405190810160405280929190818152602001828054610cf790613d91565b8015610d445780601f10610d1957610100808354040283529160200191610d44565b820191906000526020600020905b815481529060010190602001808311610d2757829003601f168201915b5050505050905090565b600080610d59611f80565b9050610d66818585611f88565b600191505092915050565b60176020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b60145481565b600080610dd0611f80565b9050610ddd858285612151565b610de88585856121dd565b60019150509392505050565b61dead81565b60006009905090565b600080610e0e611f80565b9050610e2f818585610e208589611df0565b610e2a9190613df1565b611f88565b600191505092915050565b610e443382612c95565b50565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600760179054906101000a900460ff1681565b600a5481565b6000601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610f0a612e62565b60003073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610f459190613c0a565b602060405180830381865afa158015610f62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f869190613e3a565b90503073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401610fc3929190613e67565b6020604051808303816000875af1158015610fe2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110069190613ea5565b503373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f1935050505015801561104d573d6000803e3d6000fd5b5050565b600f5481565b600760169054906101000a900460ff1681565b60105481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6110c0612e62565b6110ca6000612ee0565b565b6110d4612e62565b6000600c819055506000600d8190555080600e81905550600e54600d54600c546110fe9190613df1565b6111089190613df1565b600b8190555050565b600061111b612e62565b6000600760176101000a81548160ff0219169083151502179055506001905090565b611145612e62565b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6111aa8282612fa6565b5050565b6111b6612e62565b60008173ffffffffffffffffffffffffffffffffffffffff16476040516111dc90613f03565b60006040518083038185875af1925050503d8060008114611219576040519150601f19603f3d011682016040523d82523d6000602084013e61121e565b606091505b505090508061122c57600080fd5b5050565b611238612e62565b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611284816001611d2d565b61128f81600161113d565b50565b60135481565b6112a0612e62565b600760159054906101000a900460ff16156112f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e790613f64565b60405180910390fd5b60003411611333576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132a90613fd0565b60405180910390fd5b600061133e30611070565b905060008111611383576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137a9061403c565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114129190614071565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396307f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611499573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114bd9190614071565b6040518363ffffffff1660e01b81526004016114da92919061409e565b6020604051808303816000875af11580156114f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061151d9190614071565b600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061158a600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600161113d565b6115b7600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001612fd9565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611624573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116489190614071565b90508073ffffffffffffffffffffffffffffffffffffffff1663095ea7b37f00000000000000000000000000000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b81526004016116c5929190613e67565b6020604051808303816000875af11580156116e4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117089190613ea5565b50611754307f00000000000000000000000000000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff611f88565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d71934308560008061179e6118b2565b426040518863ffffffff1660e01b81526004016117c096959493929190614102565b60606040518083038185885af11580156117de573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906118039190614163565b5050506001600760156101000a81548160ff0219169083151502179055506001600760166101000a81548160ff021916908315150217905550600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f102f2b2e0e616d5265ade25857ea806f7468dcdf53a7b89c85090cf4dcd2195b83346040516118a69291906141b6565b60405180910390a25050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6118e4612e62565b80600760166101000a81548160ff02191690831515021790555050565b60606004805461191090613d91565b80601f016020809104026020016040519081016040528092919081815260200182805461193c90613d91565b80156119895780601f1061195e57610100808354040283529160200191611989565b820191906000526020600020905b81548152906001019060200180831161196c57829003601f168201915b5050505050905090565b61199b612e62565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611a2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2290614251565b60405180910390fd5b611a358282612fd9565b5050565b600e5481565b600080611a4a611f80565b90506000611a588286611df0565b905083811015611a9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a94906142e3565b60405180910390fd5b611aaa8286868403611f88565b60019250505092915050565b600080611ac1611f80565b9050611ace8185856121dd565b600191505092915050565b60186020528060005260406000206000915054906101000a900460ff1681565b6000611b03612e62565b6001821015611b47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3e90614375565b60405180910390fd5b6032821115611b8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8290614407565b60405180910390fd5b81600a8190555060019050919050565b600760159054906101000a900460ff1681565b611bb6612e62565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611c25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1c90614473565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611c609190613c0a565b602060405180830381865afa158015611c7d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ca19190613e3a565b90508273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401611cde929190613e67565b6020604051808303816000875af1158015611cfd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d219190613ea5565b50505050565b600c5481565b611d35612e62565b80601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611dd29190613abc565b60405180910390a25050565b60095481565b60125481565b600b5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000612710600a54611e87610db5565b611e919190614493565b611e9b9190614504565b905090565b611ea8612e62565b6000601081905550600060118190555080601281905550601254601154601054611ed29190613df1565b611edc9190613df1565b600f8190555050565b600d5481565b611ef3612e62565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611f62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f59906145a7565b60405180910390fd5b611f6b81612ee0565b50565b60115481565b60085481565b60155481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611ff7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fee90614639565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612066576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205d906146cb565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516121449190613b8d565b60405180910390a3505050565b600061215d8484611df0565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146121d757818110156121c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121c090614737565b60405180910390fd5b6121d68484848403611f88565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361224c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612243906147c9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036122bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122b29061485b565b60405180910390fd5b600081036122d4576122cf8383600061307a565b612c90565b600760179054906101000a900460ff16156127cf576122f16118b2565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561235f575061232f6118b2565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156123985750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156123d2575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156123eb5750600760149054906101000a900460ff16155b156127ce57600760159054906101000a900460ff166124e557601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806124a55750601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6124e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124db906148c7565b60405180910390fd5b5b601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156125885750601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561262f576009548111156125d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125c990614959565b60405180910390fd5b6008546125de83611070565b826125e99190613df1565b111561262a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612621906149c5565b60405180910390fd5b6127cd565b601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156126d25750601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156127215760095481111561271c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161271390614a57565b60405180910390fd5b6127cc565b601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166127cb5760085461277e83611070565b826127899190613df1565b11156127ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127c1906149c5565b60405180910390fd5b5b5b5b5b5b60006127da30611070565b905060006127e6611e77565b82101590508080156128045750600760169054906101000a900460ff165b801561281d5750600760149054906101000a900460ff16155b80156128735750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156128c95750601660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561291f5750601660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612963576001600760146101000a81548160ff0219169083151502179055506129476132f0565b6000600760146101000a81548160ff0219169083151502179055505b6000600760149054906101000a900460ff16159050601660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612a195750601660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612a2357600090505b60008115612c8057601860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612a8657506000600f54115b15612b45576064600f5486612a9b9190614493565b612aa59190614504565b9050600f5460115482612ab89190614493565b612ac29190614504565b60146000828254612ad39190613df1565b92505081905550600f5460125482612aeb9190614493565b612af59190614504565b60156000828254612b069190613df1565b92505081905550600f5460105482612b1e9190614493565b612b289190614504565b60136000828254612b399190613df1565b92505081905550612c5c565b601860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612ba057506000600b54115b15612c5b576064600b5486612bb59190614493565b612bbf9190614504565b9050600b54600d5482612bd29190614493565b612bdc9190614504565b60146000828254612bed9190613df1565b92505081905550600b54600e5482612c059190614493565b612c0f9190614504565b60156000828254612c209190613df1565b92505081905550600b54600c5482612c389190614493565b612c429190614504565b60136000828254612c539190613df1565b925050819055505b5b6000811115612c7157612c7087308361307a565b5b8085612c7d9190614a77565b94505b612c8b87878761307a565b505050505b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612d04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cfb90614b1d565b60405180910390fd5b612d10826000836136cf565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612d96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d8d90614baf565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008282540392505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612e499190613b8d565b60405180910390a3612e5d836000846136d4565b505050565b612e6a611f80565b73ffffffffffffffffffffffffffffffffffffffff16612e886118b2565b73ffffffffffffffffffffffffffffffffffffffff1614612ede576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ed590614c1b565b60405180910390fd5b565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081612fb38433611df0565b612fbd9190614a77565b9050612fca833383611f88565b612fd48383612c95565b505050565b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036130e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130e0906147c9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613158576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161314f9061485b565b60405180910390fd5b6131638383836136cf565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156131e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131e090614cad565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516132d79190613b8d565b60405180910390a36132ea8484846136d4565b50505050565b60006132fb30611070565b905060006015546013546014546133129190613df1565b61331c9190613df1565b905060008083148061332e5750600082145b1561333b575050506136cd565b6014613345611e77565b61334f9190614493565b83111561336d576014613360611e77565b61336a9190614493565b92505b6000600283601454866133809190614493565b61338a9190614504565b6133949190614504565b9050600081856133a49190614a77565b905060004790506133b4826136d9565b600081476133c29190614a77565b9050600060026014546133d59190614504565b87601554846133e49190614493565b6133ee9190614504565b6133f89190614a77565b9050600060148190555060006013819055506000601581905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168160405161345890613f03565b60006040518083038185875af1925050503d8060008114613495576040519150601f19603f3d011682016040523d82523d6000602084013e61349a565b606091505b50508096505060004790507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613510573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135349190614071565b73ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561357b57600080fd5b505af115801561358f573d6000803e3d6000fd5b50505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156135ff573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136239190614071565b73ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b815260040161367f929190613e67565b6020604051808303816000875af115801561369e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136c29190613ea5565b505050505050505050505b565b505050565b505050565b6000600267ffffffffffffffff8111156136f6576136f5614ccd565b5b6040519080825280602002602001820160405280156137245781602001602082028036833780820191505090505b509050308160008151811061373c5761373b614cfc565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156137e1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138059190614071565b8160018151811061381957613818614cfc565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061387e307f000000000000000000000000000000000000000000000000000000000000000084611f88565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016138e0959493929190614de9565b600060405180830381600087803b1580156138fa57600080fd5b505af115801561390e573d6000803e3d6000fd5b505050505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613950578082015181840152602081019050613935565b60008484015250505050565b6000601f19601f8301169050919050565b600061397882613916565b6139828185613921565b9350613992818560208601613932565b61399b8161395c565b840191505092915050565b600060208201905081810360008301526139c0818461396d565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006139f8826139cd565b9050919050565b613a08816139ed565b8114613a1357600080fd5b50565b600081359050613a25816139ff565b92915050565b6000819050919050565b613a3e81613a2b565b8114613a4957600080fd5b50565b600081359050613a5b81613a35565b92915050565b60008060408385031215613a7857613a776139c8565b5b6000613a8685828601613a16565b9250506020613a9785828601613a4c565b9150509250929050565b60008115159050919050565b613ab681613aa1565b82525050565b6000602082019050613ad16000830184613aad565b92915050565b600060208284031215613aed57613aec6139c8565b5b6000613afb84828501613a16565b91505092915050565b6000819050919050565b6000613b29613b24613b1f846139cd565b613b04565b6139cd565b9050919050565b6000613b3b82613b0e565b9050919050565b6000613b4d82613b30565b9050919050565b613b5d81613b42565b82525050565b6000602082019050613b786000830184613b54565b92915050565b613b8781613a2b565b82525050565b6000602082019050613ba26000830184613b7e565b92915050565b600080600060608486031215613bc157613bc06139c8565b5b6000613bcf86828701613a16565b9350506020613be086828701613a16565b9250506040613bf186828701613a4c565b9150509250925092565b613c04816139ed565b82525050565b6000602082019050613c1f6000830184613bfb565b92915050565b600060ff82169050919050565b613c3b81613c25565b82525050565b6000602082019050613c566000830184613c32565b92915050565b600060208284031215613c7257613c716139c8565b5b6000613c8084828501613a4c565b91505092915050565b613c9281613aa1565b8114613c9d57600080fd5b50565b600081359050613caf81613c89565b92915050565b60008060408385031215613ccc57613ccb6139c8565b5b6000613cda85828601613a16565b9250506020613ceb85828601613ca0565b9150509250929050565b600060208284031215613d0b57613d0a6139c8565b5b6000613d1984828501613ca0565b91505092915050565b60008060408385031215613d3957613d386139c8565b5b6000613d4785828601613a16565b9250506020613d5885828601613a16565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613da957607f821691505b602082108103613dbc57613dbb613d62565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613dfc82613a2b565b9150613e0783613a2b565b9250828201905080821115613e1f57613e1e613dc2565b5b92915050565b600081519050613e3481613a35565b92915050565b600060208284031215613e5057613e4f6139c8565b5b6000613e5e84828501613e25565b91505092915050565b6000604082019050613e7c6000830185613bfb565b613e896020830184613b7e565b9392505050565b600081519050613e9f81613c89565b92915050565b600060208284031215613ebb57613eba6139c8565b5b6000613ec984828501613e90565b91505092915050565b600081905092915050565b50565b6000613eed600083613ed2565b9150613ef882613edd565b600082019050919050565b6000613f0e82613ee0565b9150819050919050565b7f54726164696e672069732061637469766520616c726561647900000000000000600082015250565b6000613f4e601983613921565b9150613f5982613f18565b602082019050919050565b60006020820190508181036000830152613f7d81613f41565b9050919050565b7f53656e64206c6971756964697479206574680000000000000000000000000000600082015250565b6000613fba601283613921565b9150613fc582613f84565b602082019050919050565b60006020820190508181036000830152613fe981613fad565b9050919050565b7f4e6f20746f6b656e732100000000000000000000000000000000000000000000600082015250565b6000614026600a83613921565b915061403182613ff0565b602082019050919050565b6000602082019050818103600083015261405581614019565b9050919050565b60008151905061406b816139ff565b92915050565b600060208284031215614087576140866139c8565b5b60006140958482850161405c565b91505092915050565b60006040820190506140b36000830185613bfb565b6140c06020830184613bfb565b9392505050565b6000819050919050565b60006140ec6140e76140e2846140c7565b613b04565b613a2b565b9050919050565b6140fc816140d1565b82525050565b600060c0820190506141176000830189613bfb565b6141246020830188613b7e565b61413160408301876140f3565b61413e60608301866140f3565b61414b6080830185613bfb565b61415860a0830184613b7e565b979650505050505050565b60008060006060848603121561417c5761417b6139c8565b5b600061418a86828701613e25565b935050602061419b86828701613e25565b92505060406141ac86828701613e25565b9150509250925092565b60006040820190506141cb6000830185613b7e565b6141d86020830184613b7e565b9392505050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b600061423b603983613921565b9150614246826141df565b604082019050919050565b6000602082019050818103600083015261426a8161422e565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006142cd602583613921565b91506142d882614271565b604082019050919050565b600060208201905081810360008301526142fc816142c0565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e30312520746f74616c20737570706c792e000000000000000000000000602082015250565b600061435f603483613921565b915061436a82614303565b604082019050919050565b6000602082019050818103600083015261438e81614352565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e35302520746f74616c20737570706c792e0000000000000000000000602082015250565b60006143f1603583613921565b91506143fc82614395565b604082019050919050565b60006020820190508181036000830152614420816143e4565b9050919050565b7f5f746f6b656e20616464726573732063616e6e6f742062652030000000000000600082015250565b600061445d601a83613921565b915061446882614427565b602082019050919050565b6000602082019050818103600083015261448c81614450565b9050919050565b600061449e82613a2b565b91506144a983613a2b565b92508282026144b781613a2b565b915082820484148315176144ce576144cd613dc2565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061450f82613a2b565b915061451a83613a2b565b92508261452a576145296144d5565b5b828204905092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614591602683613921565b915061459c82614535565b604082019050919050565b600060208201905081810360008301526145c081614584565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614623602483613921565b915061462e826145c7565b604082019050919050565b6000602082019050818103600083015261465281614616565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006146b5602283613921565b91506146c082614659565b604082019050919050565b600060208201905081810360008301526146e4816146a8565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000614721601d83613921565b915061472c826146eb565b602082019050919050565b6000602082019050818103600083015261475081614714565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006147b3602583613921565b91506147be82614757565b604082019050919050565b600060208201905081810360008301526147e2816147a6565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614845602383613921565b9150614850826147e9565b604082019050919050565b6000602082019050818103600083015261487481614838565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b60006148b1601683613921565b91506148bc8261487b565b602082019050919050565b600060208201905081810360008301526148e0816148a4565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000614943603583613921565b915061494e826148e7565b604082019050919050565b6000602082019050818103600083015261497281614936565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006149af601383613921565b91506149ba82614979565b602082019050919050565b600060208201905081810360008301526149de816149a2565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000614a41603683613921565b9150614a4c826149e5565b604082019050919050565b60006020820190508181036000830152614a7081614a34565b9050919050565b6000614a8282613a2b565b9150614a8d83613a2b565b9250828203905081811115614aa557614aa4613dc2565b5b92915050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000614b07602183613921565b9150614b1282614aab565b604082019050919050565b60006020820190508181036000830152614b3681614afa565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b6000614b99602283613921565b9150614ba482614b3d565b604082019050919050565b60006020820190508181036000830152614bc881614b8c565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614c05602083613921565b9150614c1082614bcf565b602082019050919050565b60006020820190508181036000830152614c3481614bf8565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000614c97602683613921565b9150614ca282614c3b565b604082019050919050565b60006020820190508181036000830152614cc681614c8a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614d60816139ed565b82525050565b6000614d728383614d57565b60208301905092915050565b6000602082019050919050565b6000614d9682614d2b565b614da08185614d36565b9350614dab83614d47565b8060005b83811015614ddc578151614dc38882614d66565b9750614dce83614d7e565b925050600181019050614daf565b5085935050505092915050565b600060a082019050614dfe6000830188613b7e565b614e0b60208301876140f3565b8181036040830152614e1d8186614d8b565b9050614e2c6060830185613bfb565b614e396080830184613b7e565b969550505050505056fea26469706673582212208532035826db9fce0269c3533ca37de2f0aab749a88c9ca77ad7f0760c318e1e64736f6c6343000818003300000000000000000000000062b01a5951513ec7c0cca40f2e802e6cdc363edb

Deployed Bytecode

0x6080604052600436106103395760003560e01c80637cb332bb116101ab578063bc205ad3116100f7578063e2f4560511610095578063f2fde38b1161006f578063f2fde38b14610c12578063f637434214610c3b578063f8b45b0514610c66578063fde83a3414610c9157610340565b8063e2f4560514610b93578063eba4c33314610bbe578063f11a24d314610be757610340565b8063c8c8ebe4116100d1578063c8c8ebe414610ad5578063d729715f14610b00578063d85ba06314610b2b578063dd62ed3e14610b5657610340565b8063bc205ad314610a58578063be1512f314610a81578063c024666814610aac57610340565b80639a7a23d611610164578063a9059cbb1161013e578063a9059cbb14610976578063b62496f5146109b3578063ba22abc3146109f0578063bbc0c74214610a2d57610340565b80639a7a23d6146108e55780639c2e4ac61461090e578063a457c2d71461093957610340565b80637cb332bb146108085780637f6bf20a146108315780638a8c523c1461085c5780638da5cb5b14610866578063924de9b71461089157806395d89b41146108ba57610340565b80634ac1126a1161028557806370a0823111610223578063751039fc116101fd578063751039fc146107625780637571336a1461078d57806379cc6790146107b65780637ca8448a146107df57610340565b806370a08231146106e5578063715018a61461072257806371fc46881461073957610340565b806367a1bd551161025f57806367a1bd551461064d5780636a486a8e146106645780636ddd17131461068f5780636f33037f146106ba57610340565b80634ac1126a146105ba5780634fbee193146105e5578063599270441461062257610340565b806323b872dd116102f257806339509351116102cc57806339509351146104fe57806342966c681461053b57806349bd5a5e146105645780634a62bb651461058f57610340565b806323b872dd1461046b57806327c8f835146104a8578063313ce567146104d357610340565b806306fdde0314610345578063095ea7b31461037057806310d5de53146103ad5780631694505e146103ea57806318160ddd146104155780631a8145bb1461044057610340565b3661034057005b600080fd5b34801561035157600080fd5b5061035a610cbc565b60405161036791906139a6565b60405180910390f35b34801561037c57600080fd5b5061039760048036038101906103929190613a61565b610d4e565b6040516103a49190613abc565b60405180910390f35b3480156103b957600080fd5b506103d460048036038101906103cf9190613ad7565b610d71565b6040516103e19190613abc565b60405180910390f35b3480156103f657600080fd5b506103ff610d91565b60405161040c9190613b63565b60405180910390f35b34801561042157600080fd5b5061042a610db5565b6040516104379190613b8d565b60405180910390f35b34801561044c57600080fd5b50610455610dbf565b6040516104629190613b8d565b60405180910390f35b34801561047757600080fd5b50610492600480360381019061048d9190613ba8565b610dc5565b60405161049f9190613abc565b60405180910390f35b3480156104b457600080fd5b506104bd610df4565b6040516104ca9190613c0a565b60405180910390f35b3480156104df57600080fd5b506104e8610dfa565b6040516104f59190613c41565b60405180910390f35b34801561050a57600080fd5b5061052560048036038101906105209190613a61565b610e03565b6040516105329190613abc565b60405180910390f35b34801561054757600080fd5b50610562600480360381019061055d9190613c5c565b610e3a565b005b34801561057057600080fd5b50610579610e47565b6040516105869190613c0a565b60405180910390f35b34801561059b57600080fd5b506105a4610e6d565b6040516105b19190613abc565b60405180910390f35b3480156105c657600080fd5b506105cf610e80565b6040516105dc9190613b8d565b60405180910390f35b3480156105f157600080fd5b5061060c60048036038101906106079190613ad7565b610e86565b6040516106199190613abc565b60405180910390f35b34801561062e57600080fd5b50610637610edc565b6040516106449190613c0a565b60405180910390f35b34801561065957600080fd5b50610662610f02565b005b34801561067057600080fd5b50610679611051565b6040516106869190613b8d565b60405180910390f35b34801561069b57600080fd5b506106a4611057565b6040516106b19190613abc565b60405180910390f35b3480156106c657600080fd5b506106cf61106a565b6040516106dc9190613b8d565b60405180910390f35b3480156106f157600080fd5b5061070c60048036038101906107079190613ad7565b611070565b6040516107199190613b8d565b60405180910390f35b34801561072e57600080fd5b506107376110b8565b005b34801561074557600080fd5b50610760600480360381019061075b9190613c5c565b6110cc565b005b34801561076e57600080fd5b50610777611111565b6040516107849190613abc565b60405180910390f35b34801561079957600080fd5b506107b460048036038101906107af9190613cb5565b61113d565b005b3480156107c257600080fd5b506107dd60048036038101906107d89190613a61565b6111a0565b005b3480156107eb57600080fd5b5061080660048036038101906108019190613ad7565b6111ae565b005b34801561081457600080fd5b5061082f600480360381019061082a9190613ad7565b611230565b005b34801561083d57600080fd5b50610846611292565b6040516108539190613b8d565b60405180910390f35b610864611298565b005b34801561087257600080fd5b5061087b6118b2565b6040516108889190613c0a565b60405180910390f35b34801561089d57600080fd5b506108b860048036038101906108b39190613cf5565b6118dc565b005b3480156108c657600080fd5b506108cf611901565b6040516108dc91906139a6565b60405180910390f35b3480156108f157600080fd5b5061090c60048036038101906109079190613cb5565b611993565b005b34801561091a57600080fd5b50610923611a39565b6040516109309190613b8d565b60405180910390f35b34801561094557600080fd5b50610960600480360381019061095b9190613a61565b611a3f565b60405161096d9190613abc565b60405180910390f35b34801561098257600080fd5b5061099d60048036038101906109989190613a61565b611ab6565b6040516109aa9190613abc565b60405180910390f35b3480156109bf57600080fd5b506109da60048036038101906109d59190613ad7565b611ad9565b6040516109e79190613abc565b60405180910390f35b3480156109fc57600080fd5b50610a176004803603810190610a129190613c5c565b611af9565b604051610a249190613abc565b60405180910390f35b348015610a3957600080fd5b50610a42611b9b565b604051610a4f9190613abc565b60405180910390f35b348015610a6457600080fd5b50610a7f6004803603810190610a7a9190613d22565b611bae565b005b348015610a8d57600080fd5b50610a96611d27565b604051610aa39190613b8d565b60405180910390f35b348015610ab857600080fd5b50610ad36004803603810190610ace9190613cb5565b611d2d565b005b348015610ae157600080fd5b50610aea611dde565b604051610af79190613b8d565b60405180910390f35b348015610b0c57600080fd5b50610b15611de4565b604051610b229190613b8d565b60405180910390f35b348015610b3757600080fd5b50610b40611dea565b604051610b4d9190613b8d565b60405180910390f35b348015610b6257600080fd5b50610b7d6004803603810190610b789190613d22565b611df0565b604051610b8a9190613b8d565b60405180910390f35b348015610b9f57600080fd5b50610ba8611e77565b604051610bb59190613b8d565b60405180910390f35b348015610bca57600080fd5b50610be56004803603810190610be09190613c5c565b611ea0565b005b348015610bf357600080fd5b50610bfc611ee5565b604051610c099190613b8d565b60405180910390f35b348015610c1e57600080fd5b50610c396004803603810190610c349190613ad7565b611eeb565b005b348015610c4757600080fd5b50610c50611f6e565b604051610c5d9190613b8d565b60405180910390f35b348015610c7257600080fd5b50610c7b611f74565b604051610c889190613b8d565b60405180910390f35b348015610c9d57600080fd5b50610ca6611f7a565b604051610cb39190613b8d565b60405180910390f35b606060038054610ccb90613d91565b80601f0160208091040260200160405190810160405280929190818152602001828054610cf790613d91565b8015610d445780601f10610d1957610100808354040283529160200191610d44565b820191906000526020600020905b815481529060010190602001808311610d2757829003601f168201915b5050505050905090565b600080610d59611f80565b9050610d66818585611f88565b600191505092915050565b60176020528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b60145481565b600080610dd0611f80565b9050610ddd858285612151565b610de88585856121dd565b60019150509392505050565b61dead81565b60006009905090565b600080610e0e611f80565b9050610e2f818585610e208589611df0565b610e2a9190613df1565b611f88565b600191505092915050565b610e443382612c95565b50565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600760179054906101000a900460ff1681565b600a5481565b6000601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610f0a612e62565b60003073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610f459190613c0a565b602060405180830381865afa158015610f62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f869190613e3a565b90503073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401610fc3929190613e67565b6020604051808303816000875af1158015610fe2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110069190613ea5565b503373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f1935050505015801561104d573d6000803e3d6000fd5b5050565b600f5481565b600760169054906101000a900460ff1681565b60105481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6110c0612e62565b6110ca6000612ee0565b565b6110d4612e62565b6000600c819055506000600d8190555080600e81905550600e54600d54600c546110fe9190613df1565b6111089190613df1565b600b8190555050565b600061111b612e62565b6000600760176101000a81548160ff0219169083151502179055506001905090565b611145612e62565b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6111aa8282612fa6565b5050565b6111b6612e62565b60008173ffffffffffffffffffffffffffffffffffffffff16476040516111dc90613f03565b60006040518083038185875af1925050503d8060008114611219576040519150601f19603f3d011682016040523d82523d6000602084013e61121e565b606091505b505090508061122c57600080fd5b5050565b611238612e62565b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611284816001611d2d565b61128f81600161113d565b50565b60135481565b6112a0612e62565b600760159054906101000a900460ff16156112f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e790613f64565b60405180910390fd5b60003411611333576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132a90613fd0565b60405180910390fd5b600061133e30611070565b905060008111611383576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137a9061403c565b60405180910390fd5b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114129190614071565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611499573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114bd9190614071565b6040518363ffffffff1660e01b81526004016114da92919061409e565b6020604051808303816000875af11580156114f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061151d9190614071565b600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061158a600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600161113d565b6115b7600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001612fd9565b60007f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611624573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116489190614071565b90508073ffffffffffffffffffffffffffffffffffffffff1663095ea7b37f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b81526004016116c5929190613e67565b6020604051808303816000875af11580156116e4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117089190613ea5565b50611754307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff611f88565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d71934308560008061179e6118b2565b426040518863ffffffff1660e01b81526004016117c096959493929190614102565b60606040518083038185885af11580156117de573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906118039190614163565b5050506001600760156101000a81548160ff0219169083151502179055506001600760166101000a81548160ff021916908315150217905550600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f102f2b2e0e616d5265ade25857ea806f7468dcdf53a7b89c85090cf4dcd2195b83346040516118a69291906141b6565b60405180910390a25050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6118e4612e62565b80600760166101000a81548160ff02191690831515021790555050565b60606004805461191090613d91565b80601f016020809104026020016040519081016040528092919081815260200182805461193c90613d91565b80156119895780601f1061195e57610100808354040283529160200191611989565b820191906000526020600020905b81548152906001019060200180831161196c57829003601f168201915b5050505050905090565b61199b612e62565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611a2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2290614251565b60405180910390fd5b611a358282612fd9565b5050565b600e5481565b600080611a4a611f80565b90506000611a588286611df0565b905083811015611a9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a94906142e3565b60405180910390fd5b611aaa8286868403611f88565b60019250505092915050565b600080611ac1611f80565b9050611ace8185856121dd565b600191505092915050565b60186020528060005260406000206000915054906101000a900460ff1681565b6000611b03612e62565b6001821015611b47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3e90614375565b60405180910390fd5b6032821115611b8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8290614407565b60405180910390fd5b81600a8190555060019050919050565b600760159054906101000a900460ff1681565b611bb6612e62565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611c25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1c90614473565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611c609190613c0a565b602060405180830381865afa158015611c7d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ca19190613e3a565b90508273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401611cde929190613e67565b6020604051808303816000875af1158015611cfd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d219190613ea5565b50505050565b600c5481565b611d35612e62565b80601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611dd29190613abc565b60405180910390a25050565b60095481565b60125481565b600b5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000612710600a54611e87610db5565b611e919190614493565b611e9b9190614504565b905090565b611ea8612e62565b6000601081905550600060118190555080601281905550601254601154601054611ed29190613df1565b611edc9190613df1565b600f8190555050565b600d5481565b611ef3612e62565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611f62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f59906145a7565b60405180910390fd5b611f6b81612ee0565b50565b60115481565b60085481565b60155481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611ff7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fee90614639565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612066576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205d906146cb565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516121449190613b8d565b60405180910390a3505050565b600061215d8484611df0565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146121d757818110156121c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121c090614737565b60405180910390fd5b6121d68484848403611f88565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361224c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612243906147c9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036122bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122b29061485b565b60405180910390fd5b600081036122d4576122cf8383600061307a565b612c90565b600760179054906101000a900460ff16156127cf576122f16118b2565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561235f575061232f6118b2565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156123985750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156123d2575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156123eb5750600760149054906101000a900460ff16155b156127ce57600760159054906101000a900460ff166124e557601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806124a55750601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6124e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124db906148c7565b60405180910390fd5b5b601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156125885750601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561262f576009548111156125d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125c990614959565b60405180910390fd5b6008546125de83611070565b826125e99190613df1565b111561262a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612621906149c5565b60405180910390fd5b6127cd565b601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156126d25750601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156127215760095481111561271c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161271390614a57565b60405180910390fd5b6127cc565b601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166127cb5760085461277e83611070565b826127899190613df1565b11156127ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127c1906149c5565b60405180910390fd5b5b5b5b5b5b60006127da30611070565b905060006127e6611e77565b82101590508080156128045750600760169054906101000a900460ff165b801561281d5750600760149054906101000a900460ff16155b80156128735750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156128c95750601660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561291f5750601660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612963576001600760146101000a81548160ff0219169083151502179055506129476132f0565b6000600760146101000a81548160ff0219169083151502179055505b6000600760149054906101000a900460ff16159050601660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612a195750601660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612a2357600090505b60008115612c8057601860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612a8657506000600f54115b15612b45576064600f5486612a9b9190614493565b612aa59190614504565b9050600f5460115482612ab89190614493565b612ac29190614504565b60146000828254612ad39190613df1565b92505081905550600f5460125482612aeb9190614493565b612af59190614504565b60156000828254612b069190613df1565b92505081905550600f5460105482612b1e9190614493565b612b289190614504565b60136000828254612b399190613df1565b92505081905550612c5c565b601860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612ba057506000600b54115b15612c5b576064600b5486612bb59190614493565b612bbf9190614504565b9050600b54600d5482612bd29190614493565b612bdc9190614504565b60146000828254612bed9190613df1565b92505081905550600b54600e5482612c059190614493565b612c0f9190614504565b60156000828254612c209190613df1565b92505081905550600b54600c5482612c389190614493565b612c429190614504565b60136000828254612c539190613df1565b925050819055505b5b6000811115612c7157612c7087308361307a565b5b8085612c7d9190614a77565b94505b612c8b87878761307a565b505050505b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612d04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cfb90614b1d565b60405180910390fd5b612d10826000836136cf565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612d96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d8d90614baf565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008282540392505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612e499190613b8d565b60405180910390a3612e5d836000846136d4565b505050565b612e6a611f80565b73ffffffffffffffffffffffffffffffffffffffff16612e886118b2565b73ffffffffffffffffffffffffffffffffffffffff1614612ede576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ed590614c1b565b60405180910390fd5b565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081612fb38433611df0565b612fbd9190614a77565b9050612fca833383611f88565b612fd48383612c95565b505050565b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036130e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130e0906147c9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613158576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161314f9061485b565b60405180910390fd5b6131638383836136cf565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156131e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131e090614cad565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516132d79190613b8d565b60405180910390a36132ea8484846136d4565b50505050565b60006132fb30611070565b905060006015546013546014546133129190613df1565b61331c9190613df1565b905060008083148061332e5750600082145b1561333b575050506136cd565b6014613345611e77565b61334f9190614493565b83111561336d576014613360611e77565b61336a9190614493565b92505b6000600283601454866133809190614493565b61338a9190614504565b6133949190614504565b9050600081856133a49190614a77565b905060004790506133b4826136d9565b600081476133c29190614a77565b9050600060026014546133d59190614504565b87601554846133e49190614493565b6133ee9190614504565b6133f89190614a77565b9050600060148190555060006013819055506000601581905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168160405161345890613f03565b60006040518083038185875af1925050503d8060008114613495576040519150601f19603f3d011682016040523d82523d6000602084013e61349a565b606091505b50508096505060004790507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613510573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135349190614071565b73ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561357b57600080fd5b505af115801561358f573d6000803e3d6000fd5b50505050507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156135ff573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136239190614071565b73ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b815260040161367f929190613e67565b6020604051808303816000875af115801561369e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136c29190613ea5565b505050505050505050505b565b505050565b505050565b6000600267ffffffffffffffff8111156136f6576136f5614ccd565b5b6040519080825280602002602001820160405280156137245781602001602082028036833780820191505090505b509050308160008151811061373c5761373b614cfc565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156137e1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138059190614071565b8160018151811061381957613818614cfc565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061387e307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611f88565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016138e0959493929190614de9565b600060405180830381600087803b1580156138fa57600080fd5b505af115801561390e573d6000803e3d6000fd5b505050505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613950578082015181840152602081019050613935565b60008484015250505050565b6000601f19601f8301169050919050565b600061397882613916565b6139828185613921565b9350613992818560208601613932565b61399b8161395c565b840191505092915050565b600060208201905081810360008301526139c0818461396d565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006139f8826139cd565b9050919050565b613a08816139ed565b8114613a1357600080fd5b50565b600081359050613a25816139ff565b92915050565b6000819050919050565b613a3e81613a2b565b8114613a4957600080fd5b50565b600081359050613a5b81613a35565b92915050565b60008060408385031215613a7857613a776139c8565b5b6000613a8685828601613a16565b9250506020613a9785828601613a4c565b9150509250929050565b60008115159050919050565b613ab681613aa1565b82525050565b6000602082019050613ad16000830184613aad565b92915050565b600060208284031215613aed57613aec6139c8565b5b6000613afb84828501613a16565b91505092915050565b6000819050919050565b6000613b29613b24613b1f846139cd565b613b04565b6139cd565b9050919050565b6000613b3b82613b0e565b9050919050565b6000613b4d82613b30565b9050919050565b613b5d81613b42565b82525050565b6000602082019050613b786000830184613b54565b92915050565b613b8781613a2b565b82525050565b6000602082019050613ba26000830184613b7e565b92915050565b600080600060608486031215613bc157613bc06139c8565b5b6000613bcf86828701613a16565b9350506020613be086828701613a16565b9250506040613bf186828701613a4c565b9150509250925092565b613c04816139ed565b82525050565b6000602082019050613c1f6000830184613bfb565b92915050565b600060ff82169050919050565b613c3b81613c25565b82525050565b6000602082019050613c566000830184613c32565b92915050565b600060208284031215613c7257613c716139c8565b5b6000613c8084828501613a4c565b91505092915050565b613c9281613aa1565b8114613c9d57600080fd5b50565b600081359050613caf81613c89565b92915050565b60008060408385031215613ccc57613ccb6139c8565b5b6000613cda85828601613a16565b9250506020613ceb85828601613ca0565b9150509250929050565b600060208284031215613d0b57613d0a6139c8565b5b6000613d1984828501613ca0565b91505092915050565b60008060408385031215613d3957613d386139c8565b5b6000613d4785828601613a16565b9250506020613d5885828601613a16565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613da957607f821691505b602082108103613dbc57613dbb613d62565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613dfc82613a2b565b9150613e0783613a2b565b9250828201905080821115613e1f57613e1e613dc2565b5b92915050565b600081519050613e3481613a35565b92915050565b600060208284031215613e5057613e4f6139c8565b5b6000613e5e84828501613e25565b91505092915050565b6000604082019050613e7c6000830185613bfb565b613e896020830184613b7e565b9392505050565b600081519050613e9f81613c89565b92915050565b600060208284031215613ebb57613eba6139c8565b5b6000613ec984828501613e90565b91505092915050565b600081905092915050565b50565b6000613eed600083613ed2565b9150613ef882613edd565b600082019050919050565b6000613f0e82613ee0565b9150819050919050565b7f54726164696e672069732061637469766520616c726561647900000000000000600082015250565b6000613f4e601983613921565b9150613f5982613f18565b602082019050919050565b60006020820190508181036000830152613f7d81613f41565b9050919050565b7f53656e64206c6971756964697479206574680000000000000000000000000000600082015250565b6000613fba601283613921565b9150613fc582613f84565b602082019050919050565b60006020820190508181036000830152613fe981613fad565b9050919050565b7f4e6f20746f6b656e732100000000000000000000000000000000000000000000600082015250565b6000614026600a83613921565b915061403182613ff0565b602082019050919050565b6000602082019050818103600083015261405581614019565b9050919050565b60008151905061406b816139ff565b92915050565b600060208284031215614087576140866139c8565b5b60006140958482850161405c565b91505092915050565b60006040820190506140b36000830185613bfb565b6140c06020830184613bfb565b9392505050565b6000819050919050565b60006140ec6140e76140e2846140c7565b613b04565b613a2b565b9050919050565b6140fc816140d1565b82525050565b600060c0820190506141176000830189613bfb565b6141246020830188613b7e565b61413160408301876140f3565b61413e60608301866140f3565b61414b6080830185613bfb565b61415860a0830184613b7e565b979650505050505050565b60008060006060848603121561417c5761417b6139c8565b5b600061418a86828701613e25565b935050602061419b86828701613e25565b92505060406141ac86828701613e25565b9150509250925092565b60006040820190506141cb6000830185613b7e565b6141d86020830184613b7e565b9392505050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b600061423b603983613921565b9150614246826141df565b604082019050919050565b6000602082019050818103600083015261426a8161422e565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006142cd602583613921565b91506142d882614271565b604082019050919050565b600060208201905081810360008301526142fc816142c0565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e30312520746f74616c20737570706c792e000000000000000000000000602082015250565b600061435f603483613921565b915061436a82614303565b604082019050919050565b6000602082019050818103600083015261438e81614352565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e35302520746f74616c20737570706c792e0000000000000000000000602082015250565b60006143f1603583613921565b91506143fc82614395565b604082019050919050565b60006020820190508181036000830152614420816143e4565b9050919050565b7f5f746f6b656e20616464726573732063616e6e6f742062652030000000000000600082015250565b600061445d601a83613921565b915061446882614427565b602082019050919050565b6000602082019050818103600083015261448c81614450565b9050919050565b600061449e82613a2b565b91506144a983613a2b565b92508282026144b781613a2b565b915082820484148315176144ce576144cd613dc2565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061450f82613a2b565b915061451a83613a2b565b92508261452a576145296144d5565b5b828204905092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614591602683613921565b915061459c82614535565b604082019050919050565b600060208201905081810360008301526145c081614584565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614623602483613921565b915061462e826145c7565b604082019050919050565b6000602082019050818103600083015261465281614616565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006146b5602283613921565b91506146c082614659565b604082019050919050565b600060208201905081810360008301526146e4816146a8565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000614721601d83613921565b915061472c826146eb565b602082019050919050565b6000602082019050818103600083015261475081614714565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006147b3602583613921565b91506147be82614757565b604082019050919050565b600060208201905081810360008301526147e2816147a6565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614845602383613921565b9150614850826147e9565b604082019050919050565b6000602082019050818103600083015261487481614838565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b60006148b1601683613921565b91506148bc8261487b565b602082019050919050565b600060208201905081810360008301526148e0816148a4565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000614943603583613921565b915061494e826148e7565b604082019050919050565b6000602082019050818103600083015261497281614936565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006149af601383613921565b91506149ba82614979565b602082019050919050565b600060208201905081810360008301526149de816149a2565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000614a41603683613921565b9150614a4c826149e5565b604082019050919050565b60006020820190508181036000830152614a7081614a34565b9050919050565b6000614a8282613a2b565b9150614a8d83613a2b565b9250828203905081811115614aa557614aa4613dc2565b5b92915050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000614b07602183613921565b9150614b1282614aab565b604082019050919050565b60006020820190508181036000830152614b3681614afa565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b6000614b99602283613921565b9150614ba482614b3d565b604082019050919050565b60006020820190508181036000830152614bc881614b8c565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614c05602083613921565b9150614c1082614bcf565b602082019050919050565b60006020820190508181036000830152614c3481614bf8565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000614c97602683613921565b9150614ca282614c3b565b604082019050919050565b60006020820190508181036000830152614cc681614c8a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614d60816139ed565b82525050565b6000614d728383614d57565b60208301905092915050565b6000602082019050919050565b6000614d9682614d2b565b614da08185614d36565b9350614dab83614d47565b8060005b83811015614ddc578151614dc38882614d66565b9750614dce83614d7e565b925050600181019050614daf565b5085935050505092915050565b600060a082019050614dfe6000830188613b7e565b614e0b60208301876140f3565b8181036040830152614e1d8186614d8b565b9050614e2c6060830185613bfb565b614e396080830184613b7e565b969550505050505056fea26469706673582212208532035826db9fce0269c3533ca37de2f0aab749a88c9ca77ad7f0760c318e1e64736f6c63430008180033

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

00000000000000000000000062b01a5951513ec7c0cca40f2e802e6cdc363edb

-----Decoded View---------------
Arg [0] : _teamWallet (address): 0x62b01a5951513eC7C0Cca40F2e802e6cdC363Edb

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 00000000000000000000000062b01a5951513ec7c0cca40f2e802e6cdc363edb


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.