ETH Price: $2,491.68 (-2.47%)

Token

DiamondDesk (DESK)
 

Overview

Max Total Supply

210,000,000 DESK

Holders

69

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
doss.eth
Balance
88,119.332509602245668528 DESK

Value
$0.00
0x47C7562761993a4A58d92d77d926C7697d25aDCE
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:
desk

Compiler Version
v0.8.15+commit.e14f2714

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-03-08
*/

// SPDX-License-Identifier: MIT

/**
https://www.diamonddesk.io/
https://twitter.com/diamonddeskotc
https://ordi-otc.gitbook.io/diamond-desk/
https://t.me/DiamondDesk
**/

pragma solidity 0.8.15;

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

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

interface IERC20 {

    function totalSupply() external view returns (uint256);


    function balanceOf(address account) external view returns (uint256);


    function transfer(address recipient, uint256 amount) external returns (bool);


    function allowance(address owner, address spender) external view returns (uint256);

    function approve(address spender, uint256 amount) external returns (bool);


    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);


    event Transfer(address indexed from, address indexed to, uint256 value);


    event Approval(address indexed owner, address indexed spender, uint256 value);
}

interface IERC20Metadata is IERC20 {

    function name() external view returns (string memory);


    function symbol() external view returns (string memory);


    function decimals() external view returns (uint8);
}

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

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

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

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

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

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

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
        unchecked {
            _approve(sender, _msgSender(), currentAllowance - amount);
        }

        return true;
    }

    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(_msgSender(), spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        uint256 senderBalance = _balances[sender];
        require(senderBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[sender] = senderBalance - amount;
        }
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);
    }

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

        _totalSupply += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);
    }

    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");
        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);
    }

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

contract Ownable is Context {
    address private _owner;

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

    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

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

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

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

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

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

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

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

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

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

contract  desk  is ERC20, Ownable {

    uint256 public maxBuy;
    uint256 public maxSell;
    uint256 public maxWallet;

    IDexRouter public dexRouter;
    address public lpPair;

    bool private swapping;
    uint256 public swapTokensAtAmount;

    address diamondAddress;
    address teamAddress;

    uint256 public tradingActiveBlock = 0; // 0 means trading is not active
    uint256 public blockForPenaltyEnd;
    mapping (address => bool) public boughtEarly;
    uint256 public botsCaught;

    bool public limitsInEffect = true;
    bool public tradingActive = false;
    bool public swapEnabled = false;

     // Anti-bot and anti-whale mappings and variables
    mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch
    bool public transferDelayEnabled = true;

    uint256 public buyTotalFees;
    uint256 public buydiamondFee;
    uint256 public buyLiquidityFee;
    uint256 public buyteamFee;
    uint256 public buyBurnFee;

    uint256 public sellTotalFees;
    uint256 public selldiamondFee;
    uint256 public sellLiquidityFee;
    uint256 public sellteamFee;
    uint256 public sellBurnFee;

    uint256 public tokensFordiamond;
    uint256 public tokensForLiquidity;
    uint256 public tokensForteam;
    uint256 public tokensForBurn;

    /******************/

    // exlcude from fees and max transaction amount
    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) public _isExcludedMaxTransactionAmount;

    // store addresses that a automatic market maker pairs. Any transfer *to* these addresses
    // could be subject to a maximum transfer amount
    mapping (address => bool) public automatedMarketMakerPairs;

    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);

    event EnabledTrading();

    event RemovedLimits();

    event ExcludeFromFees(address indexed account, bool isExcluded);

    event UpdatedmaxBuy(uint256 newAmount);

    event UpdatedmaxSell(uint256 newAmount);

    event UpdatedmaxWallet(uint256 newAmount);

    event UpdateddiamondAddress(address indexed newWallet);

    event MaxTransactionExclusion(address _address, bool excluded);

    event BuyBackTriggered(uint256 amount);

    event OwnerForcedSwapBack(uint256 timestamp);

    event CaughtEarlyBuyer(address sniper);

    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );

    event TransferForeignToken(address token, uint256 amount);

    constructor() ERC20("DiamondDesk", "DESK") {

        address newOwner = msg.sender;

        IDexRouter _dexRouter = IDexRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        dexRouter = _dexRouter;

        // create pair
        lpPair = IDexFactory(_dexRouter.factory()).createPair(address(this), _dexRouter.WETH());
        _excludeFromMaxTransaction(address(lpPair), true);
        _setAutomatedMarketMakerPair(address(lpPair), true);

        uint256 totalSupply = 210000000 * 1e18;

        maxBuy = totalSupply * 3 / 1000;
        maxSell = totalSupply * 3 / 1000;
        maxWallet = totalSupply * 3 / 1000;
        swapTokensAtAmount = totalSupply * 1 / 1000;

        buydiamondFee = 25;
        buyLiquidityFee = 0;
        buyteamFee = 25;
        buyBurnFee = 0;
        buyTotalFees = buydiamondFee + buyLiquidityFee + buyteamFee + buyBurnFee;

        selldiamondFee = 25;
        sellLiquidityFee = 0;
        sellteamFee = 25;
        sellBurnFee = 0;
        sellTotalFees = selldiamondFee + sellLiquidityFee + sellteamFee + sellBurnFee;

        _excludeFromMaxTransaction(newOwner, true);
        _excludeFromMaxTransaction(address(this), true);
        _excludeFromMaxTransaction(address(0xdead), true);

        excludeFromFees(newOwner, true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);

        diamondAddress = address(newOwner);
        teamAddress = address(newOwner);

        _createInitialSupply(newOwner, totalSupply);
        transferOwnership(newOwner);
    }

    receive() external payable {}

    // only enable if no plan to airdrop

    function initialize(uint256 deadBlocks) external onlyOwner {
        require(!tradingActive, "Cannot reenable trading");
        tradingActive = true;
        swapEnabled = true;
        tradingActiveBlock = block.number;
        blockForPenaltyEnd = tradingActiveBlock + deadBlocks;
        emit EnabledTrading();
    }

    // remove limits after token is stable
    function removeLimits() external onlyOwner {
        limitsInEffect = false;
        transferDelayEnabled = false;
        emit RemovedLimits();
    }

    function blEarlyBuy(address wallet, bool flag) external onlyOwner {
        boughtEarly[wallet] = flag;
    }

    function blEarlyBuyers(address[] calldata wallets, bool flag) external onlyOwner {
        for(uint256 i = 0; i < wallets.length; i++){
            boughtEarly[wallets[i]] = flag;
        }
    }

    // disable Transfer delay - cannot be reenabled
    function disableTransferDelay() external onlyOwner {
        transferDelayEnabled = false;
    }

    function updatemaxBuy(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 2 / 1000)/1e18, "Cannot set max buy amount lower than 0.2%");
        maxBuy = newNum * (10**18);
        emit UpdatedmaxBuy(maxBuy);
    }

    function updatemaxSell(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 2 / 1000)/1e18, "Cannot set max sell amount lower than 0.2%");
        maxSell = newNum * (10**18);
        emit UpdatedmaxSell(maxSell);
    }

    function updatemaxWallet(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 3 / 1000)/1e18, "Cannot set max wallet amount lower than 0.3%");
        maxWallet = newNum * (10**18);
        emit UpdatedmaxWallet(maxWallet);
    }

    // change the minimum amount of tokens to sell from fees
    function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner {
        require(newAmount >= totalSupply() * 1 / 100000, "Swap amount cannot be lower than 0.001% total supply.");
        require(newAmount <= totalSupply() * 1 / 1000, "Swap amount cannot be higher than 0.1% total supply.");
        swapTokensAtAmount = newAmount;
    }

    function _excludeFromMaxTransaction(address updAds, bool isExcluded) private {
        _isExcludedMaxTransactionAmount[updAds] = isExcluded;
        emit MaxTransactionExclusion(updAds, isExcluded);
    }

    function excludeFromMaxTransaction(address updAds, bool isEx) external onlyOwner {
        if(!isEx){
            require(updAds != lpPair, "Cannot remove uniswap pair from max txn");
        }
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }

    function setAutomatedMarketMakerPair(address pair, bool value) external onlyOwner {
        require(pair != lpPair, "The pair cannot be removed from automatedMarketMakerPairs");

        _setAutomatedMarketMakerPair(pair, value);
        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;

        _excludeFromMaxTransaction(pair, value);

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function updateBuyFees(uint256 _diamondFee, uint256 _liquidityFee, uint256 _teamFee, uint256 _burnFee) external onlyOwner {
        buydiamondFee = _diamondFee;
        buyLiquidityFee = _liquidityFee;
        buyteamFee = _teamFee;
        buyBurnFee = _burnFee;
        buyTotalFees = buydiamondFee + buyLiquidityFee + buyteamFee + buyBurnFee;
    }

    function updateSellFees(uint256 _diamondFee, uint256 _liquidityFee, uint256 _teamFee, uint256 _burnFee) external onlyOwner {
        selldiamondFee = _diamondFee;
        sellLiquidityFee = _liquidityFee;
        sellteamFee = _teamFee;
        sellBurnFee = _burnFee;
        sellTotalFees = selldiamondFee + sellLiquidityFee + sellteamFee + sellBurnFee;
    }

    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }

    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");
        require(amount > 0, "amount must be greater than 0");

        if(!tradingActive){
            require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active.");
        }

        if(blockForPenaltyEnd > 0){
            require(!boughtEarly[from] || to == owner() || to == address(0xdead), "Bots cannot transfer tokens in or out except to owner or dead address.");
        }

        if(limitsInEffect){
            if (from != owner() && to != owner() && to != address(0) && to != address(0xdead) && !_isExcludedFromFees[from] && !_isExcludedFromFees[to]){

                // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch.
                if (transferDelayEnabled){
                    if (to != address(dexRouter) && to != address(lpPair)){
                        require(_holderLastTransferTimestamp[tx.origin] < block.number - 2 && _holderLastTransferTimestamp[to] < block.number - 2, "_transfer:: Transfer Delay enabled.  Try again later.");
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                        _holderLastTransferTimestamp[to] = block.number;
                    }
                }

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

        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 = true;
        // 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){
            // bot/sniper penalty.
            if(earlyBuyPenaltyInEffect() && automatedMarketMakerPairs[from] && !automatedMarketMakerPairs[to] && buyTotalFees > 0){

                if(!boughtEarly[to]){
                    boughtEarly[to] = true;
                    botsCaught += 1;
                    emit CaughtEarlyBuyer(to);
                }

                fees = amount * 99 / 100;
                tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees;
                tokensFordiamond += fees * buydiamondFee / buyTotalFees;
                tokensForteam += fees * buyteamFee / buyTotalFees;
                tokensForBurn += fees * buyBurnFee / buyTotalFees;
            }

            // on sell
            else if (automatedMarketMakerPairs[to] && sellTotalFees > 0){
                fees = amount * sellTotalFees / 100;
                tokensForLiquidity += fees * sellLiquidityFee / sellTotalFees;
                tokensFordiamond += fees * selldiamondFee / sellTotalFees;
                tokensForteam += fees * sellteamFee / sellTotalFees;
                tokensForBurn += fees * sellBurnFee / sellTotalFees;
            }

            // on buy
            else if(automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = amount * buyTotalFees / 100;
                tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees;
                tokensFordiamond += fees * buydiamondFee / buyTotalFees;
                tokensForteam += fees * buyteamFee / buyTotalFees;
                tokensForBurn += fees * buyBurnFee / buyTotalFees;
            }

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

            amount -= fees;
        }

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

    function earlyBuyPenaltyInEffect() public view returns (bool){
        return block.number < blockForPenaltyEnd;
    }

    function swapTokensForEth(uint256 tokenAmount) private {

        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = dexRouter.WETH();

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

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

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(dexRouter), tokenAmount);

        // add the liquidity
        dexRouter.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            address(0xdead),
            block.timestamp
        );
    }

    function swapBack() private {

        if(tokensForBurn > 0 && balanceOf(address(this)) >= tokensForBurn) {
            _burn(address(this), tokensForBurn);
        }
        tokensForBurn = 0;

        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity + tokensFordiamond + tokensForteam;

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

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

        bool success;

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

        swapTokensForEth(contractBalance - liquidityTokens);

        uint256 ethBalance = address(this).balance;
        uint256 ethForLiquidity = ethBalance;

        uint256 ethFordiamond = ethBalance * tokensFordiamond / (totalTokensToSwap - (tokensForLiquidity/2));
        uint256 ethForteam = ethBalance * tokensForteam / (totalTokensToSwap - (tokensForLiquidity/2));

        ethForLiquidity -= ethFordiamond + ethForteam;

        tokensForLiquidity = 0;
        tokensFordiamond = 0;
        tokensForteam = 0;
        tokensForBurn = 0;

        if(liquidityTokens > 0 && ethForLiquidity > 0){
            addLiquidity(liquidityTokens, ethForLiquidity);
        }

        (success,) = address(teamAddress).call{value: ethForteam}("");

        (success,) = address(diamondAddress).call{value: address(this).balance}("");
    }

    function transferForeignToken(address _token, address _to) external onlyOwner returns (bool _sent) {
        require(_token != address(0), "_token address cannot be 0");
        require(_token != address(this), "Can't withdraw native tokens");
        uint256 _contractBalance = IERC20(_token).balanceOf(address(this));
        _sent = IERC20(_token).transfer(_to, _contractBalance);
        emit TransferForeignToken(_token, _contractBalance);
    }

    // withdraw ETH from contract address
    function withdrawStuckETH() external onlyOwner {
        bool success;
        (success,) = address(msg.sender).call{value: address(this).balance}("");
    }

    function setDiamondAddress(address _diamondAddress) external onlyOwner {
        require(_diamondAddress != address(0), "_diamondAddress address cannot be 0");
        diamondAddress = payable(_diamondAddress);
    }

    function setteamAddress(address _teamAddress) external onlyOwner {
        require(_teamAddress != address(0), "_teamAddress address cannot be 0");
        teamAddress = payable(_teamAddress);
    }


    // force Swap back if slippage issues.
    function forceSwapBack() external onlyOwner {
        require(balanceOf(address(this)) >= swapTokensAtAmount, "Can only swap when token amount is at or higher than restriction");
        swapping = true;
        swapBack();
        swapping = false;
        emit OwnerForcedSwapBack(block.timestamp);
    }

    // useful for buybacks or to reclaim any ETH on the contract in a way that helps holders.
    function buyBackDESKTokens(uint256 amountInWei) external onlyOwner {
        require(amountInWei <= 10 ether, "May not buy more than 10 ETH in a single buy to reduce sandwich attacks");

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

        dexRouter.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amountInWei}(
            0, // accept any amount of Ethereum
            path,
            address(0xdead),
            block.timestamp
        );
        emit BuyBackTriggered(amountInWei);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"BuyBackTriggered","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sniper","type":"address"}],"name":"CaughtEarlyBuyer","type":"event"},{"anonymous":false,"inputs":[],"name":"EnabledTrading","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":false,"internalType":"address","name":"_address","type":"address"},{"indexed":false,"internalType":"bool","name":"excluded","type":"bool"}],"name":"MaxTransactionExclusion","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"OwnerForcedSwapBack","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[],"name":"RemovedLimits","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TransferForeignToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"}],"name":"UpdateddiamondAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedmaxBuy","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedmaxSell","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedmaxWallet","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":"address","name":"wallet","type":"address"},{"internalType":"bool","name":"flag","type":"bool"}],"name":"blEarlyBuy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"wallets","type":"address[]"},{"internalType":"bool","name":"flag","type":"bool"}],"name":"blEarlyBuyers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"blockForPenaltyEnd","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"botsCaught","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"boughtEarly","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountInWei","type":"uint256"}],"name":"buyBackDESKTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyBurnFee","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":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buydiamondFee","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":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IDexRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"earlyBuyPenaltyInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":[],"name":"forceSwapBack","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":"uint256","name":"deadBlocks","type":"uint256"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSell","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":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellBurnFee","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":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"selldiamondFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellteamFee","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":[{"internalType":"address","name":"_diamondAddress","type":"address"}],"name":"setDiamondAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_teamAddress","type":"address"}],"name":"setteamAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForBurn","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":"tokensFordiamond","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":[],"name":"tradingActiveBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"name":"transferForeignToken","outputs":[{"internalType":"bool","name":"_sent","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","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":[{"internalType":"uint256","name":"_diamondFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_teamFee","type":"uint256"},{"internalType":"uint256","name":"_burnFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_diamondFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_teamFee","type":"uint256"},{"internalType":"uint256","name":"_burnFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updatemaxBuy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updatemaxSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updatemaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawStuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526000600e556012805462ffffff191660019081179091556014805460ff191690911790553480156200003557600080fd5b506040518060400160405280600b81526020016a4469616d6f6e644465736b60a81b815250604051806040016040528060048152602001634445534b60e01b815250816003908162000088919062000851565b50600462000097828262000851565b5050506000620000ac6200044960201b60201c565b600580546001600160a01b0319166001600160a01b0383169081179091556040519192509060009060008051602062004314833981519152908290a350600980546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d9081179091556040805163c45a015560e01b81529051339291829163c45a0155916004808201926020929091908290030181865afa15801562000153573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200017991906200091d565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001c7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001ed91906200091d565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156200023b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200026191906200091d565b600a80546001600160a01b0319166001600160a01b039290921691821790556200028d9060016200044d565b600a54620002a6906001600160a01b03166001620004b0565b6aadb53acfa41aee120000006103e8620002c282600362000965565b620002ce919062000987565b6006556103e8620002e182600362000965565b620002ed919062000987565b6007556103e86200030082600362000965565b6200030c919062000987565b6008556103e86200031f82600162000965565b6200032b919062000987565b600b556019601681905560006017819055601882905580825590620003518282620009aa565b6200035d9190620009aa565b620003699190620009aa565b6015556019601b8190556000601c819055601d829055601e81905590620003918282620009aa565b6200039d9190620009aa565b620003a99190620009aa565b601a55620003b98360016200044d565b620003c63060016200044d565b620003d561dead60016200044d565b620003e28360016200051c565b620003ef3060016200051c565b620003fe61dead60016200051c565b600c80546001600160a01b0385166001600160a01b03199182168117909255600d80549091169091179055620004358382620005ca565b6200044083620006af565b505050620009c5565b3390565b6001600160a01b038216600081815260246020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6001600160a01b0382166000908152602560205260409020805460ff1916821515179055620004e082826200044d565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6005546001600160a01b031633146200056b5760405162461bcd60e51b81526020600482018190526024820152600080516020620042f483398151915260448201526064015b60405180910390fd5b6001600160a01b038216600081815260236020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b038216620006225760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640162000562565b8060026000828254620006369190620009aa565b90915550506001600160a01b0382166000908152602081905260408120805483929062000665908490620009aa565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005546001600160a01b03163314620006fa5760405162461bcd60e51b81526020600482018190526024820152600080516020620042f4833981519152604482015260640162000562565b6001600160a01b038116620007615760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840162000562565b6005546040516001600160a01b038084169216906000805160206200431483398151915290600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620007d757607f821691505b602082108103620007f857634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200084c57600081815260208120601f850160051c81016020861015620008275750805b601f850160051c820191505b81811015620008485782815560010162000833565b5050505b505050565b81516001600160401b038111156200086d576200086d620007ac565b62000885816200087e8454620007c2565b84620007fe565b602080601f831160018114620008bd5760008415620008a45750858301515b600019600386901b1c1916600185901b17855562000848565b600085815260208120601f198616915b82811015620008ee57888601518255948401946001909101908401620008cd565b50858210156200090d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000602082840312156200093057600080fd5b81516001600160a01b03811681146200094857600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b60008160001904831182151516156200098257620009826200094f565b500290565b600082620009a557634e487b7160e01b600052601260045260246000fd5b500490565b60008219821115620009c057620009c06200094f565b500190565b61391f80620009d56000396000f3fe6080604052600436106103d25760003560e01c80638da5cb5b116101fd578063c9f75a9611610118578063ec36a724116100ab578063f2fde38b1161007a578063f2fde38b14610ad7578063f5648a4f14610af7578063f637434214610b0c578063f8b45b0514610b22578063fe4b84df14610b3857600080fd5b8063ec36a72414610a6b578063ee40166e14610a8b578063f079d88f14610aa1578063f11a24d314610ac157600080fd5b8063e2f45605116100e7578063e2f4560514610a0a578063e71dc3f514610a20578063e7ad9fcd14610a36578063e884f26014610a5657600080fd5b8063c9f75a961461096e578063d257b34f1461098e578063d85ba063146109ae578063dd62ed3e146109c457600080fd5b8063b62496f511610190578063bc18cb041161015f578063bc18cb04146108fe578063c02466681461091e578063c87417791461093e578063c876d0b91461095457600080fd5b8063b62496f514610883578063b8eb3546146108b3578063bb27909b146108c9578063bbc0c742146108df57600080fd5b8063a457c2d7116101cc578063a457c2d714610817578063a62068ce14610837578063a9059cbb1461084d578063adb873bd1461086d57600080fd5b80638da5cb5b146107ae57806395d89b41146107cc5780639a7a23d6146107e15780639fff66b71461080157600080fd5b8063437e599e116102ed5780636ddd171311610280578063751039fc1161024f578063751039fc146107295780637571336a1461073e5780638366e79a1461075e57806385ecfd281461077e57600080fd5b80636ddd1713146106be57806370a08231146106de57806370db69d6146106fe578063715018a61461071457600080fd5b806351f205e4116102bc57806351f205e41461066657806358a6d5311461067b5780636a486a8e146106925780636b0a894c146106a857600080fd5b8063437e599e146105f6578063452ed4f11461060c578063487c86e21461062c5780634a62bb651461064c57600080fd5b806323b872dd11610365578063313ce56711610334578063313ce5671461058e5780633710b28e146105aa57806339509351146105c057806339a0d64f146105e057600080fd5b806323b872dd1461050e57806326eb8b061461052e5780632e6ed7ef1461054e57806330a5a2bc1461056e57600080fd5b806315b70eaf116103a157806315b70eaf146104a157806318160ddd146104c35780631a8145bb146104e25780631d777856146104f857600080fd5b806306fdde03146103de5780630758d92414610409578063095ea7b31461044157806310d5de531461047157600080fd5b366103d957005b600080fd5b3480156103ea57600080fd5b506103f3610b58565b60405161040091906133c3565b60405180910390f35b34801561041557600080fd5b50600954610429906001600160a01b031681565b6040516001600160a01b039091168152602001610400565b34801561044d57600080fd5b5061046161045c366004613430565b610bea565b6040519015158152602001610400565b34801561047d57600080fd5b5061046161048c36600461345c565b60246020526000908152604090205460ff1681565b3480156104ad57600080fd5b506104c16104bc366004613480565b610c00565b005b3480156104cf57600080fd5b506002545b604051908152602001610400565b3480156104ee57600080fd5b506104d460205481565b34801561050457600080fd5b506104d460225481565b34801561051a57600080fd5b50610461610529366004613499565b610e4d565b34801561053a57600080fd5b506104c161054936600461345c565b610ef7565b34801561055a57600080fd5b506104c16105693660046134da565b610fa5565b34801561057a57600080fd5b506104c1610589366004613480565b61100c565b34801561059a57600080fd5b5060405160128152602001610400565b3480156105b657600080fd5b506104d460165481565b3480156105cc57600080fd5b506104616105db366004613430565b61111c565b3480156105ec57600080fd5b506104d460215481565b34801561060257600080fd5b506104d4601f5481565b34801561061857600080fd5b50600a54610429906001600160a01b031681565b34801561063857600080fd5b506104c1610647366004613480565b611158565b34801561065857600080fd5b506012546104619060ff1681565b34801561067257600080fd5b506104c161125e565b34801561068757600080fd5b50600f544310610461565b34801561069e57600080fd5b506104d4601a5481565b3480156106b457600080fd5b506104d460115481565b3480156106ca57600080fd5b506012546104619062010000900460ff1681565b3480156106ea57600080fd5b506104d46106f936600461345c565b611367565b34801561070a57600080fd5b506104d460065481565b34801561072057600080fd5b506104c1611382565b34801561073557600080fd5b506104c16113f6565b34801561074a57600080fd5b506104c161075936600461351a565b611461565b34801561076a57600080fd5b50610461610779366004613553565b611529565b34801561078a57600080fd5b5061046161079936600461345c565b60106020526000908152604090205460ff1681565b3480156107ba57600080fd5b506005546001600160a01b0316610429565b3480156107d857600080fd5b506103f3611732565b3480156107ed57600080fd5b506104c16107fc36600461351a565b611741565b34801561080d57600080fd5b506104d4601d5481565b34801561082357600080fd5b50610461610832366004613430565b611835565b34801561084357600080fd5b506104d4600f5481565b34801561085957600080fd5b50610461610868366004613430565b6118ce565b34801561087957600080fd5b506104d4601e5481565b34801561088f57600080fd5b5061046161089e36600461345c565b60256020526000908152604090205460ff1681565b3480156108bf57600080fd5b506104d460075481565b3480156108d557600080fd5b506104d460185481565b3480156108eb57600080fd5b5060125461046190610100900460ff1681565b34801561090a57600080fd5b506104c1610919366004613581565b6118db565b34801561092a57600080fd5b506104c161093936600461351a565b61197c565b34801561094a57600080fd5b506104d4601b5481565b34801561096057600080fd5b506014546104619060ff1681565b34801561097a57600080fd5b506104c161098936600461351a565b611a05565b34801561099a57600080fd5b506104c16109a9366004613480565b611a5a565b3480156109ba57600080fd5b506104d460155481565b3480156109d057600080fd5b506104d46109df366004613553565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610a1657600080fd5b506104d4600b5481565b348015610a2c57600080fd5b506104d460195481565b348015610a4257600080fd5b506104c1610a513660046134da565b611ba5565b348015610a6257600080fd5b506104c1611c0c565b348015610a7757600080fd5b506104c1610a86366004613480565b611c42565b348015610a9757600080fd5b506104d4600e5481565b348015610aad57600080fd5b506104c1610abc36600461345c565b611d49565b348015610acd57600080fd5b506104d460175481565b348015610ae357600080fd5b506104c1610af236600461345c565b611deb565b348015610b0357600080fd5b506104c1611ed6565b348015610b1857600080fd5b506104d4601c5481565b348015610b2e57600080fd5b506104d460085481565b348015610b4457600080fd5b506104c1610b53366004613480565b611f42565b606060038054610b6790613607565b80601f0160208091040260200160405190810160405280929190818152602001828054610b9390613607565b8015610be05780601f10610bb557610100808354040283529160200191610be0565b820191906000526020600020905b815481529060010190602001808311610bc357829003601f168201915b5050505050905090565b6000610bf7338484612015565b50600192915050565b6005546001600160a01b03163314610c335760405162461bcd60e51b8152600401610c2a90613641565b60405180910390fd5b678ac7230489e80000811115610cc15760405162461bcd60e51b815260206004820152604760248201527f4d6179206e6f7420627579206d6f7265207468616e2031302045544820696e2060448201527f612073696e676c652062757920746f207265647563652073616e64776963682060648201526661747461636b7360c81b608482015260a401610c2a565b6040805160028082526060820183526000926020830190803683375050600954604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015610d2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d4f9190613676565b81600081518110610d6257610d62613693565b60200260200101906001600160a01b031690816001600160a01b0316815250503081600181518110610d9657610d96613693565b6001600160a01b03928316602091820292909201015260095460405163b6f9de9560e01b815291169063b6f9de95908490610dde90600090869061dead9042906004016136ed565b6000604051808303818588803b158015610df757600080fd5b505af1158015610e0b573d6000803e3d6000fd5b50505050507fa017c1567cfcdd2d750a8c01e39fe2a846bcebc293c7d078477014d68482056882604051610e4191815260200190565b60405180910390a15050565b6000610e5a84848461213a565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610edf5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610c2a565b610eec8533858403612015565b506001949350505050565b6005546001600160a01b03163314610f215760405162461bcd60e51b8152600401610c2a90613641565b6001600160a01b038116610f835760405162461bcd60e51b815260206004820152602360248201527f5f6469616d6f6e644164647265737320616464726573732063616e6e6f74206260448201526206520360ec1b6064820152608401610c2a565b600c80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314610fcf5760405162461bcd60e51b8152600401610c2a90613641565b60168490556017839055601882905560198190558082610fef8587613738565b610ff99190613738565b6110039190613738565b60155550505050565b6005546001600160a01b031633146110365760405162461bcd60e51b8152600401610c2a90613641565b670de0b6b3a76400006103e861104b60025490565b611056906003613750565b611060919061376f565b61106a919061376f565b8110156110ce5760405162461bcd60e51b815260206004820152602c60248201527f43616e6e6f7420736574206d61782077616c6c657420616d6f756e74206c6f7760448201526b6572207468616e20302e332560a01b6064820152608401610c2a565b6110e081670de0b6b3a7640000613750565b60088190556040519081527fe5256bd7f53a82b84850000e86f4c7a83417ef39249ec70aa373642b42fd81f2906020015b60405180910390a150565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610bf7918590611153908690613738565b612015565b6005546001600160a01b031633146111825760405162461bcd60e51b8152600401610c2a90613641565b670de0b6b3a76400006103e861119760025490565b6111a2906002613750565b6111ac919061376f565b6111b6919061376f565b8110156112175760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152687468616e20302e322560b81b6064820152608401610c2a565b61122981670de0b6b3a7640000613750565b60068190556040519081527f9e5f6887bec93b2a8980ac2b63bf58f3cac0621573cb6c4ff79615f6ad8db18b90602001611111565b6005546001600160a01b031633146112885760405162461bcd60e51b8152600401610c2a90613641565b600b5461129430611367565b101561130a576040805162461bcd60e51b81526020600482015260248101919091527f43616e206f6e6c792073776170207768656e20746f6b656e20616d6f756e742060448201527f6973206174206f7220686967686572207468616e207265737472696374696f6e6064820152608401610c2a565b600a805460ff60a01b1916600160a01b179055611325612c6f565b600a805460ff60a01b191690556040514281527f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb329060200160405180910390a1565b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b031633146113ac5760405162461bcd60e51b8152600401610c2a90613641565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b031633146114205760405162461bcd60e51b8152600401610c2a90613641565b6012805460ff199081169091556014805490911690556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6005546001600160a01b0316331461148b5760405162461bcd60e51b8152600401610c2a90613641565b806114fe57600a546001600160a01b03908116908316036114fe5760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610c2a565b6001600160a01b03919091166000908152602460205260409020805460ff1916911515919091179055565b6005546000906001600160a01b031633146115565760405162461bcd60e51b8152600401610c2a90613641565b6001600160a01b0383166115ac5760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610c2a565b306001600160a01b038416036116045760405162461bcd60e51b815260206004820152601c60248201527f43616e2774207769746864726177206e617469766520746f6b656e73000000006044820152606401610c2a565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa15801561164b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061166f9190613791565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303816000875af11580156116c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116e691906137aa565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b606060048054610b6790613607565b6005546001600160a01b0316331461176b5760405162461bcd60e51b8152600401610c2a90613641565b600a546001600160a01b03908116908316036117ef5760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610c2a565b6117f98282612eae565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156118b75760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610c2a565b6118c43385858403612015565b5060019392505050565b6000610bf733848461213a565b6005546001600160a01b031633146119055760405162461bcd60e51b8152600401610c2a90613641565b60005b8281101561197657816010600086868581811061192757611927613693565b905060200201602081019061193c919061345c565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558061196e816137c7565b915050611908565b50505050565b6005546001600160a01b031633146119a65760405162461bcd60e51b8152600401610c2a90613641565b6001600160a01b038216600081815260236020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b03163314611a2f5760405162461bcd60e51b8152600401610c2a90613641565b6001600160a01b03919091166000908152601060205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314611a845760405162461bcd60e51b8152600401610c2a90613641565b620186a0611a9160025490565b611a9c906001613750565b611aa6919061376f565b811015611b135760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610c2a565b6103e8611b1f60025490565b611b2a906001613750565b611b34919061376f565b811115611ba05760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171892903a37ba30b61039bab838363c9760611b6064820152608401610c2a565b600b55565b6005546001600160a01b03163314611bcf5760405162461bcd60e51b8152600401610c2a90613641565b601b849055601c839055601d829055601e8190558082611bef8587613738565b611bf99190613738565b611c039190613738565b601a5550505050565b6005546001600160a01b03163314611c365760405162461bcd60e51b8152600401610c2a90613641565b6014805460ff19169055565b6005546001600160a01b03163314611c6c5760405162461bcd60e51b8152600401610c2a90613641565b670de0b6b3a76400006103e8611c8160025490565b611c8c906002613750565b611c96919061376f565b611ca0919061376f565b811015611d025760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015269207468616e20302e322560b01b6064820152608401610c2a565b611d1481670de0b6b3a7640000613750565b60078190556040519081527f06caf19cbd3cc1a6191f881ab36667a79f6cf20decdf382956956e60dc839a4c90602001611111565b6005546001600160a01b03163314611d735760405162461bcd60e51b8152600401610c2a90613641565b6001600160a01b038116611dc95760405162461bcd60e51b815260206004820181905260248201527f5f7465616d4164647265737320616464726573732063616e6e6f7420626520306044820152606401610c2a565b600d80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314611e155760405162461bcd60e51b8152600401610c2a90613641565b6001600160a01b038116611e7a5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c2a565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314611f005760405162461bcd60e51b8152600401610c2a90613641565b604051600090339047908381818185875af1925050503d8060008114611976576040519150601f19603f3d011682016040523d82523d6000602084013e611976565b6005546001600160a01b03163314611f6c5760405162461bcd60e51b8152600401610c2a90613641565b601254610100900460ff1615611fc45760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610c2a565b6012805462ffff0019166201010017905543600e819055611fe6908290613738565b600f556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a150565b6001600160a01b0383166120775760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610c2a565b6001600160a01b0382166120d85760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610c2a565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0383166121605760405162461bcd60e51b8152600401610c2a906137e0565b6001600160a01b0382166121865760405162461bcd60e51b8152600401610c2a90613825565b600081116121d65760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610c2a565b601254610100900460ff16612269576001600160a01b03831660009081526023602052604090205460ff168061222457506001600160a01b03821660009081526023602052604090205460ff165b6122695760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610c2a565b600f541561233c576001600160a01b03831660009081526010602052604090205460ff1615806122a657506005546001600160a01b038381169116145b806122bb57506001600160a01b03821661dead145b61233c5760405162461bcd60e51b815260206004820152604660248201527f426f74732063616e6e6f74207472616e7366657220746f6b656e7320696e206f60448201527f72206f75742065786365707420746f206f776e6572206f722064656164206164606482015265323932b9b99760d11b608482015260a401610c2a565b60125460ff1615612738576005546001600160a01b0384811691161480159061237357506005546001600160a01b03838116911614155b801561238757506001600160a01b03821615155b801561239e57506001600160a01b03821661dead14155b80156123c357506001600160a01b03831660009081526023602052604090205460ff16155b80156123e857506001600160a01b03821660009081526023602052604090205460ff16155b156127385760145460ff1615612501576009546001600160a01b038381169116148015906124245750600a546001600160a01b03838116911614155b1561250157612434600243613868565b326000908152601360205260409020541080156124725750612457600243613868565b6001600160a01b038316600090815260136020526040902054105b6124dc5760405162461bcd60e51b815260206004820152603560248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527432b21710102a393c9030b3b0b4b7103630ba32b91760591b6064820152608401610c2a565b3260009081526013602052604080822043908190556001600160a01b03851683529120555b6001600160a01b03831660009081526025602052604090205460ff16801561254257506001600160a01b03821660009081526024602052604090205460ff16155b1561260e576006548111156125aa5760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610c2a565b6008546125b683611367565b6125c09083613738565b11156126095760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08115e18d95959081b585e081dd85b1b195d60421b6044820152606401610c2a565b612738565b6001600160a01b03821660009081526025602052604090205460ff16801561264f57506001600160a01b03831660009081526024602052604090205460ff16155b156126b9576007548111156126095760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610c2a565b6001600160a01b03821660009081526024602052604090205460ff16612738576008546126e583611367565b6126ef9083613738565b11156127385760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08115e18d95959081b585e081dd85b1b195d60421b6044820152606401610c2a565b600061274330611367565b600b5490915081108015908190612762575060125462010000900460ff165b80156127785750600a54600160a01b900460ff16155b801561279d57506001600160a01b03851660009081526025602052604090205460ff16155b80156127c257506001600160a01b03851660009081526023602052604090205460ff16155b80156127e757506001600160a01b03841660009081526023602052604090205460ff16155b1561281557600a805460ff60a01b1916600160a01b179055612807612c6f565b600a805460ff60a01b191690555b6001600160a01b03851660009081526023602052604090205460019060ff168061285757506001600160a01b03851660009081526023602052604090205460ff165b15612860575060005b60008115612c5b57600f544310801561289157506001600160a01b03871660009081526025602052604090205460ff165b80156128b657506001600160a01b03861660009081526025602052604090205460ff16155b80156128c457506000601554115b15612a44576001600160a01b03861660009081526010602052604090205460ff16612964576001600160a01b0386166000908152601060205260408120805460ff191660019081179091556011805491929091612922908490613738565b90915550506040516001600160a01b03871681527f55678e47d0a699d3ab99b0184c4ff14f2246ba80522deb921aa0c8823578c44a9060200160405180910390a15b6064612971866063613750565b61297b919061376f565b90506015546017548261298e9190613750565b612998919061376f565b602060008282546129a99190613738565b90915550506015546016546129be9083613750565b6129c8919061376f565b601f60008282546129d99190613738565b90915550506015546018546129ee9083613750565b6129f8919061376f565b60216000828254612a099190613738565b9091555050601554601954612a1e9083613750565b612a28919061376f565b60226000828254612a399190613738565b90915550612c3d9050565b6001600160a01b03861660009081526025602052604090205460ff168015612a6e57506000601a54115b15612b30576064601a5486612a839190613750565b612a8d919061376f565b9050601a54601c5482612aa09190613750565b612aaa919061376f565b60206000828254612abb9190613738565b9091555050601a54601b54612ad09083613750565b612ada919061376f565b601f6000828254612aeb9190613738565b9091555050601a54601d54612b009083613750565b612b0a919061376f565b60216000828254612b1b9190613738565b9091555050601a54601e54612a1e9083613750565b6001600160a01b03871660009081526025602052604090205460ff168015612b5a57506000601554115b15612c3d57606460155486612b6f9190613750565b612b79919061376f565b905060155460175482612b8c9190613750565b612b96919061376f565b60206000828254612ba79190613738565b9091555050601554601654612bbc9083613750565b612bc6919061376f565b601f6000828254612bd79190613738565b9091555050601554601854612bec9083613750565b612bf6919061376f565b60216000828254612c079190613738565b9091555050601554601954612c1c9083613750565b612c26919061376f565b60226000828254612c379190613738565b90915550505b8015612c4e57612c4e873083612edc565b612c588186613868565b94505b612c66878787612edc565b50505050505050565b6000602254118015612c8b5750602254612c8830611367565b10155b15612c9c57612c9c30602254613031565b60006022819055612cac30611367565b90506000602154601f54602054612cc39190613738565b612ccd9190613738565b9050811580612cda575080155b15612ce3575050565b600b54612cf1906014613750565b821115612d0957600b54612d06906014613750565b91505b60008060028360205486612d1d9190613750565b612d27919061376f565b612d31919061376f565b9050612d45612d408286613868565b61315b565b60205447908190600090612d5b9060029061376f565b612d659087613868565b601f54612d729085613750565b612d7c919061376f565b905060006002602054612d8f919061376f565b612d999088613868565b602154612da69086613750565b612db0919061376f565b9050612dbc8183613738565b612dc69084613868565b60006020819055601f819055602181905560225592508415801590612deb5750600083115b15612dfa57612dfa85846132b5565b600d546040516001600160a01b03909116908290600081818185875af1925050503d8060008114612e47576040519150601f19603f3d011682016040523d82523d6000602084013e612e4c565b606091505b5050600c546040519197506001600160a01b0316904790600081818185875af1925050503d8060008114612e9c576040519150601f19603f3d011682016040523d82523d6000602084013e612ea1565b606091505b5050505050505050505050565b6001600160a01b0382166000908152602560205260409020805460ff19168215151790556117f98282613367565b6001600160a01b038316612f025760405162461bcd60e51b8152600401610c2a906137e0565b6001600160a01b038216612f285760405162461bcd60e51b8152600401610c2a90613825565b6001600160a01b03831660009081526020819052604090205481811015612fa05760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610c2a565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290612fd7908490613738565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161302391815260200190565b60405180910390a350505050565b6001600160a01b0382166130915760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610c2a565b6001600160a01b038216600090815260208190526040902054818110156131055760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610c2a565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910161212d565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061319057613190613693565b6001600160a01b03928316602091820292909201810191909152600954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156131e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061320d9190613676565b8160018151811061322057613220613693565b6001600160a01b0392831660209182029290920101526009546132469130911684612015565b60095460405163791ac94760e01b81526001600160a01b039091169063791ac9479061327f90859060009086903090429060040161387f565b600060405180830381600087803b15801561329957600080fd5b505af11580156132ad573d6000803e3d6000fd5b505050505050565b6009546132cd9030906001600160a01b031684612015565b60095460405163f305d71960e01b815230600482015260248101849052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af115801561333b573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061336091906138bb565b5050505050565b6001600160a01b038216600081815260246020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd67469101610e41565b600060208083528351808285015260005b818110156133f0578581018301518582016040015282016133d4565b81811115613402576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b038116811461342d57600080fd5b50565b6000806040838503121561344357600080fd5b823561344e81613418565b946020939093013593505050565b60006020828403121561346e57600080fd5b813561347981613418565b9392505050565b60006020828403121561349257600080fd5b5035919050565b6000806000606084860312156134ae57600080fd5b83356134b981613418565b925060208401356134c981613418565b929592945050506040919091013590565b600080600080608085870312156134f057600080fd5b5050823594602084013594506040840135936060013592509050565b801515811461342d57600080fd5b6000806040838503121561352d57600080fd5b823561353881613418565b915060208301356135488161350c565b809150509250929050565b6000806040838503121561356657600080fd5b823561357181613418565b9150602083013561354881613418565b60008060006040848603121561359657600080fd5b833567ffffffffffffffff808211156135ae57600080fd5b818601915086601f8301126135c257600080fd5b8135818111156135d157600080fd5b8760208260051b85010111156135e657600080fd5b602092830195509350508401356135fc8161350c565b809150509250925092565b600181811c9082168061361b57607f821691505b60208210810361363b57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60006020828403121561368857600080fd5b815161347981613418565b634e487b7160e01b600052603260045260246000fd5b600081518084526020808501945080840160005b838110156136e25781516001600160a01b0316875295820195908201906001016136bd565b509495945050505050565b84815260806020820152600061370660808301866136a9565b6001600160a01b03949094166040830152506060015292915050565b634e487b7160e01b600052601160045260246000fd5b6000821982111561374b5761374b613722565b500190565b600081600019048311821515161561376a5761376a613722565b500290565b60008261378c57634e487b7160e01b600052601260045260246000fd5b500490565b6000602082840312156137a357600080fd5b5051919050565b6000602082840312156137bc57600080fd5b81516134798161350c565b6000600182016137d9576137d9613722565b5060010190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60008282101561387a5761387a613722565b500390565b85815284602082015260a06040820152600061389e60a08301866136a9565b6001600160a01b0394909416606083015250608001529392505050565b6000806000606084860312156138d057600080fd5b835192506020840151915060408401519050925092509256fea26469706673582212205dbe9f8c3925aafdade4e48a0f322b2423fa5a369a40421703a03c556ab2c99e64736f6c634300080f00334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65728be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0

Deployed Bytecode

0x6080604052600436106103d25760003560e01c80638da5cb5b116101fd578063c9f75a9611610118578063ec36a724116100ab578063f2fde38b1161007a578063f2fde38b14610ad7578063f5648a4f14610af7578063f637434214610b0c578063f8b45b0514610b22578063fe4b84df14610b3857600080fd5b8063ec36a72414610a6b578063ee40166e14610a8b578063f079d88f14610aa1578063f11a24d314610ac157600080fd5b8063e2f45605116100e7578063e2f4560514610a0a578063e71dc3f514610a20578063e7ad9fcd14610a36578063e884f26014610a5657600080fd5b8063c9f75a961461096e578063d257b34f1461098e578063d85ba063146109ae578063dd62ed3e146109c457600080fd5b8063b62496f511610190578063bc18cb041161015f578063bc18cb04146108fe578063c02466681461091e578063c87417791461093e578063c876d0b91461095457600080fd5b8063b62496f514610883578063b8eb3546146108b3578063bb27909b146108c9578063bbc0c742146108df57600080fd5b8063a457c2d7116101cc578063a457c2d714610817578063a62068ce14610837578063a9059cbb1461084d578063adb873bd1461086d57600080fd5b80638da5cb5b146107ae57806395d89b41146107cc5780639a7a23d6146107e15780639fff66b71461080157600080fd5b8063437e599e116102ed5780636ddd171311610280578063751039fc1161024f578063751039fc146107295780637571336a1461073e5780638366e79a1461075e57806385ecfd281461077e57600080fd5b80636ddd1713146106be57806370a08231146106de57806370db69d6146106fe578063715018a61461071457600080fd5b806351f205e4116102bc57806351f205e41461066657806358a6d5311461067b5780636a486a8e146106925780636b0a894c146106a857600080fd5b8063437e599e146105f6578063452ed4f11461060c578063487c86e21461062c5780634a62bb651461064c57600080fd5b806323b872dd11610365578063313ce56711610334578063313ce5671461058e5780633710b28e146105aa57806339509351146105c057806339a0d64f146105e057600080fd5b806323b872dd1461050e57806326eb8b061461052e5780632e6ed7ef1461054e57806330a5a2bc1461056e57600080fd5b806315b70eaf116103a157806315b70eaf146104a157806318160ddd146104c35780631a8145bb146104e25780631d777856146104f857600080fd5b806306fdde03146103de5780630758d92414610409578063095ea7b31461044157806310d5de531461047157600080fd5b366103d957005b600080fd5b3480156103ea57600080fd5b506103f3610b58565b60405161040091906133c3565b60405180910390f35b34801561041557600080fd5b50600954610429906001600160a01b031681565b6040516001600160a01b039091168152602001610400565b34801561044d57600080fd5b5061046161045c366004613430565b610bea565b6040519015158152602001610400565b34801561047d57600080fd5b5061046161048c36600461345c565b60246020526000908152604090205460ff1681565b3480156104ad57600080fd5b506104c16104bc366004613480565b610c00565b005b3480156104cf57600080fd5b506002545b604051908152602001610400565b3480156104ee57600080fd5b506104d460205481565b34801561050457600080fd5b506104d460225481565b34801561051a57600080fd5b50610461610529366004613499565b610e4d565b34801561053a57600080fd5b506104c161054936600461345c565b610ef7565b34801561055a57600080fd5b506104c16105693660046134da565b610fa5565b34801561057a57600080fd5b506104c1610589366004613480565b61100c565b34801561059a57600080fd5b5060405160128152602001610400565b3480156105b657600080fd5b506104d460165481565b3480156105cc57600080fd5b506104616105db366004613430565b61111c565b3480156105ec57600080fd5b506104d460215481565b34801561060257600080fd5b506104d4601f5481565b34801561061857600080fd5b50600a54610429906001600160a01b031681565b34801561063857600080fd5b506104c1610647366004613480565b611158565b34801561065857600080fd5b506012546104619060ff1681565b34801561067257600080fd5b506104c161125e565b34801561068757600080fd5b50600f544310610461565b34801561069e57600080fd5b506104d4601a5481565b3480156106b457600080fd5b506104d460115481565b3480156106ca57600080fd5b506012546104619062010000900460ff1681565b3480156106ea57600080fd5b506104d46106f936600461345c565b611367565b34801561070a57600080fd5b506104d460065481565b34801561072057600080fd5b506104c1611382565b34801561073557600080fd5b506104c16113f6565b34801561074a57600080fd5b506104c161075936600461351a565b611461565b34801561076a57600080fd5b50610461610779366004613553565b611529565b34801561078a57600080fd5b5061046161079936600461345c565b60106020526000908152604090205460ff1681565b3480156107ba57600080fd5b506005546001600160a01b0316610429565b3480156107d857600080fd5b506103f3611732565b3480156107ed57600080fd5b506104c16107fc36600461351a565b611741565b34801561080d57600080fd5b506104d4601d5481565b34801561082357600080fd5b50610461610832366004613430565b611835565b34801561084357600080fd5b506104d4600f5481565b34801561085957600080fd5b50610461610868366004613430565b6118ce565b34801561087957600080fd5b506104d4601e5481565b34801561088f57600080fd5b5061046161089e36600461345c565b60256020526000908152604090205460ff1681565b3480156108bf57600080fd5b506104d460075481565b3480156108d557600080fd5b506104d460185481565b3480156108eb57600080fd5b5060125461046190610100900460ff1681565b34801561090a57600080fd5b506104c1610919366004613581565b6118db565b34801561092a57600080fd5b506104c161093936600461351a565b61197c565b34801561094a57600080fd5b506104d4601b5481565b34801561096057600080fd5b506014546104619060ff1681565b34801561097a57600080fd5b506104c161098936600461351a565b611a05565b34801561099a57600080fd5b506104c16109a9366004613480565b611a5a565b3480156109ba57600080fd5b506104d460155481565b3480156109d057600080fd5b506104d46109df366004613553565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610a1657600080fd5b506104d4600b5481565b348015610a2c57600080fd5b506104d460195481565b348015610a4257600080fd5b506104c1610a513660046134da565b611ba5565b348015610a6257600080fd5b506104c1611c0c565b348015610a7757600080fd5b506104c1610a86366004613480565b611c42565b348015610a9757600080fd5b506104d4600e5481565b348015610aad57600080fd5b506104c1610abc36600461345c565b611d49565b348015610acd57600080fd5b506104d460175481565b348015610ae357600080fd5b506104c1610af236600461345c565b611deb565b348015610b0357600080fd5b506104c1611ed6565b348015610b1857600080fd5b506104d4601c5481565b348015610b2e57600080fd5b506104d460085481565b348015610b4457600080fd5b506104c1610b53366004613480565b611f42565b606060038054610b6790613607565b80601f0160208091040260200160405190810160405280929190818152602001828054610b9390613607565b8015610be05780601f10610bb557610100808354040283529160200191610be0565b820191906000526020600020905b815481529060010190602001808311610bc357829003601f168201915b5050505050905090565b6000610bf7338484612015565b50600192915050565b6005546001600160a01b03163314610c335760405162461bcd60e51b8152600401610c2a90613641565b60405180910390fd5b678ac7230489e80000811115610cc15760405162461bcd60e51b815260206004820152604760248201527f4d6179206e6f7420627579206d6f7265207468616e2031302045544820696e2060448201527f612073696e676c652062757920746f207265647563652073616e64776963682060648201526661747461636b7360c81b608482015260a401610c2a565b6040805160028082526060820183526000926020830190803683375050600954604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015610d2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d4f9190613676565b81600081518110610d6257610d62613693565b60200260200101906001600160a01b031690816001600160a01b0316815250503081600181518110610d9657610d96613693565b6001600160a01b03928316602091820292909201015260095460405163b6f9de9560e01b815291169063b6f9de95908490610dde90600090869061dead9042906004016136ed565b6000604051808303818588803b158015610df757600080fd5b505af1158015610e0b573d6000803e3d6000fd5b50505050507fa017c1567cfcdd2d750a8c01e39fe2a846bcebc293c7d078477014d68482056882604051610e4191815260200190565b60405180910390a15050565b6000610e5a84848461213a565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610edf5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610c2a565b610eec8533858403612015565b506001949350505050565b6005546001600160a01b03163314610f215760405162461bcd60e51b8152600401610c2a90613641565b6001600160a01b038116610f835760405162461bcd60e51b815260206004820152602360248201527f5f6469616d6f6e644164647265737320616464726573732063616e6e6f74206260448201526206520360ec1b6064820152608401610c2a565b600c80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314610fcf5760405162461bcd60e51b8152600401610c2a90613641565b60168490556017839055601882905560198190558082610fef8587613738565b610ff99190613738565b6110039190613738565b60155550505050565b6005546001600160a01b031633146110365760405162461bcd60e51b8152600401610c2a90613641565b670de0b6b3a76400006103e861104b60025490565b611056906003613750565b611060919061376f565b61106a919061376f565b8110156110ce5760405162461bcd60e51b815260206004820152602c60248201527f43616e6e6f7420736574206d61782077616c6c657420616d6f756e74206c6f7760448201526b6572207468616e20302e332560a01b6064820152608401610c2a565b6110e081670de0b6b3a7640000613750565b60088190556040519081527fe5256bd7f53a82b84850000e86f4c7a83417ef39249ec70aa373642b42fd81f2906020015b60405180910390a150565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610bf7918590611153908690613738565b612015565b6005546001600160a01b031633146111825760405162461bcd60e51b8152600401610c2a90613641565b670de0b6b3a76400006103e861119760025490565b6111a2906002613750565b6111ac919061376f565b6111b6919061376f565b8110156112175760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152687468616e20302e322560b81b6064820152608401610c2a565b61122981670de0b6b3a7640000613750565b60068190556040519081527f9e5f6887bec93b2a8980ac2b63bf58f3cac0621573cb6c4ff79615f6ad8db18b90602001611111565b6005546001600160a01b031633146112885760405162461bcd60e51b8152600401610c2a90613641565b600b5461129430611367565b101561130a576040805162461bcd60e51b81526020600482015260248101919091527f43616e206f6e6c792073776170207768656e20746f6b656e20616d6f756e742060448201527f6973206174206f7220686967686572207468616e207265737472696374696f6e6064820152608401610c2a565b600a805460ff60a01b1916600160a01b179055611325612c6f565b600a805460ff60a01b191690556040514281527f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb329060200160405180910390a1565b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b031633146113ac5760405162461bcd60e51b8152600401610c2a90613641565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b031633146114205760405162461bcd60e51b8152600401610c2a90613641565b6012805460ff199081169091556014805490911690556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6005546001600160a01b0316331461148b5760405162461bcd60e51b8152600401610c2a90613641565b806114fe57600a546001600160a01b03908116908316036114fe5760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610c2a565b6001600160a01b03919091166000908152602460205260409020805460ff1916911515919091179055565b6005546000906001600160a01b031633146115565760405162461bcd60e51b8152600401610c2a90613641565b6001600160a01b0383166115ac5760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610c2a565b306001600160a01b038416036116045760405162461bcd60e51b815260206004820152601c60248201527f43616e2774207769746864726177206e617469766520746f6b656e73000000006044820152606401610c2a565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa15801561164b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061166f9190613791565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303816000875af11580156116c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116e691906137aa565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b606060048054610b6790613607565b6005546001600160a01b0316331461176b5760405162461bcd60e51b8152600401610c2a90613641565b600a546001600160a01b03908116908316036117ef5760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610c2a565b6117f98282612eae565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156118b75760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610c2a565b6118c43385858403612015565b5060019392505050565b6000610bf733848461213a565b6005546001600160a01b031633146119055760405162461bcd60e51b8152600401610c2a90613641565b60005b8281101561197657816010600086868581811061192757611927613693565b905060200201602081019061193c919061345c565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558061196e816137c7565b915050611908565b50505050565b6005546001600160a01b031633146119a65760405162461bcd60e51b8152600401610c2a90613641565b6001600160a01b038216600081815260236020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b03163314611a2f5760405162461bcd60e51b8152600401610c2a90613641565b6001600160a01b03919091166000908152601060205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314611a845760405162461bcd60e51b8152600401610c2a90613641565b620186a0611a9160025490565b611a9c906001613750565b611aa6919061376f565b811015611b135760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610c2a565b6103e8611b1f60025490565b611b2a906001613750565b611b34919061376f565b811115611ba05760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171892903a37ba30b61039bab838363c9760611b6064820152608401610c2a565b600b55565b6005546001600160a01b03163314611bcf5760405162461bcd60e51b8152600401610c2a90613641565b601b849055601c839055601d829055601e8190558082611bef8587613738565b611bf99190613738565b611c039190613738565b601a5550505050565b6005546001600160a01b03163314611c365760405162461bcd60e51b8152600401610c2a90613641565b6014805460ff19169055565b6005546001600160a01b03163314611c6c5760405162461bcd60e51b8152600401610c2a90613641565b670de0b6b3a76400006103e8611c8160025490565b611c8c906002613750565b611c96919061376f565b611ca0919061376f565b811015611d025760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015269207468616e20302e322560b01b6064820152608401610c2a565b611d1481670de0b6b3a7640000613750565b60078190556040519081527f06caf19cbd3cc1a6191f881ab36667a79f6cf20decdf382956956e60dc839a4c90602001611111565b6005546001600160a01b03163314611d735760405162461bcd60e51b8152600401610c2a90613641565b6001600160a01b038116611dc95760405162461bcd60e51b815260206004820181905260248201527f5f7465616d4164647265737320616464726573732063616e6e6f7420626520306044820152606401610c2a565b600d80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314611e155760405162461bcd60e51b8152600401610c2a90613641565b6001600160a01b038116611e7a5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c2a565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314611f005760405162461bcd60e51b8152600401610c2a90613641565b604051600090339047908381818185875af1925050503d8060008114611976576040519150601f19603f3d011682016040523d82523d6000602084013e611976565b6005546001600160a01b03163314611f6c5760405162461bcd60e51b8152600401610c2a90613641565b601254610100900460ff1615611fc45760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610c2a565b6012805462ffff0019166201010017905543600e819055611fe6908290613738565b600f556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a150565b6001600160a01b0383166120775760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610c2a565b6001600160a01b0382166120d85760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610c2a565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0383166121605760405162461bcd60e51b8152600401610c2a906137e0565b6001600160a01b0382166121865760405162461bcd60e51b8152600401610c2a90613825565b600081116121d65760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610c2a565b601254610100900460ff16612269576001600160a01b03831660009081526023602052604090205460ff168061222457506001600160a01b03821660009081526023602052604090205460ff165b6122695760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610c2a565b600f541561233c576001600160a01b03831660009081526010602052604090205460ff1615806122a657506005546001600160a01b038381169116145b806122bb57506001600160a01b03821661dead145b61233c5760405162461bcd60e51b815260206004820152604660248201527f426f74732063616e6e6f74207472616e7366657220746f6b656e7320696e206f60448201527f72206f75742065786365707420746f206f776e6572206f722064656164206164606482015265323932b9b99760d11b608482015260a401610c2a565b60125460ff1615612738576005546001600160a01b0384811691161480159061237357506005546001600160a01b03838116911614155b801561238757506001600160a01b03821615155b801561239e57506001600160a01b03821661dead14155b80156123c357506001600160a01b03831660009081526023602052604090205460ff16155b80156123e857506001600160a01b03821660009081526023602052604090205460ff16155b156127385760145460ff1615612501576009546001600160a01b038381169116148015906124245750600a546001600160a01b03838116911614155b1561250157612434600243613868565b326000908152601360205260409020541080156124725750612457600243613868565b6001600160a01b038316600090815260136020526040902054105b6124dc5760405162461bcd60e51b815260206004820152603560248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527432b21710102a393c9030b3b0b4b7103630ba32b91760591b6064820152608401610c2a565b3260009081526013602052604080822043908190556001600160a01b03851683529120555b6001600160a01b03831660009081526025602052604090205460ff16801561254257506001600160a01b03821660009081526024602052604090205460ff16155b1561260e576006548111156125aa5760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610c2a565b6008546125b683611367565b6125c09083613738565b11156126095760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08115e18d95959081b585e081dd85b1b195d60421b6044820152606401610c2a565b612738565b6001600160a01b03821660009081526025602052604090205460ff16801561264f57506001600160a01b03831660009081526024602052604090205460ff16155b156126b9576007548111156126095760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610c2a565b6001600160a01b03821660009081526024602052604090205460ff16612738576008546126e583611367565b6126ef9083613738565b11156127385760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08115e18d95959081b585e081dd85b1b195d60421b6044820152606401610c2a565b600061274330611367565b600b5490915081108015908190612762575060125462010000900460ff165b80156127785750600a54600160a01b900460ff16155b801561279d57506001600160a01b03851660009081526025602052604090205460ff16155b80156127c257506001600160a01b03851660009081526023602052604090205460ff16155b80156127e757506001600160a01b03841660009081526023602052604090205460ff16155b1561281557600a805460ff60a01b1916600160a01b179055612807612c6f565b600a805460ff60a01b191690555b6001600160a01b03851660009081526023602052604090205460019060ff168061285757506001600160a01b03851660009081526023602052604090205460ff165b15612860575060005b60008115612c5b57600f544310801561289157506001600160a01b03871660009081526025602052604090205460ff165b80156128b657506001600160a01b03861660009081526025602052604090205460ff16155b80156128c457506000601554115b15612a44576001600160a01b03861660009081526010602052604090205460ff16612964576001600160a01b0386166000908152601060205260408120805460ff191660019081179091556011805491929091612922908490613738565b90915550506040516001600160a01b03871681527f55678e47d0a699d3ab99b0184c4ff14f2246ba80522deb921aa0c8823578c44a9060200160405180910390a15b6064612971866063613750565b61297b919061376f565b90506015546017548261298e9190613750565b612998919061376f565b602060008282546129a99190613738565b90915550506015546016546129be9083613750565b6129c8919061376f565b601f60008282546129d99190613738565b90915550506015546018546129ee9083613750565b6129f8919061376f565b60216000828254612a099190613738565b9091555050601554601954612a1e9083613750565b612a28919061376f565b60226000828254612a399190613738565b90915550612c3d9050565b6001600160a01b03861660009081526025602052604090205460ff168015612a6e57506000601a54115b15612b30576064601a5486612a839190613750565b612a8d919061376f565b9050601a54601c5482612aa09190613750565b612aaa919061376f565b60206000828254612abb9190613738565b9091555050601a54601b54612ad09083613750565b612ada919061376f565b601f6000828254612aeb9190613738565b9091555050601a54601d54612b009083613750565b612b0a919061376f565b60216000828254612b1b9190613738565b9091555050601a54601e54612a1e9083613750565b6001600160a01b03871660009081526025602052604090205460ff168015612b5a57506000601554115b15612c3d57606460155486612b6f9190613750565b612b79919061376f565b905060155460175482612b8c9190613750565b612b96919061376f565b60206000828254612ba79190613738565b9091555050601554601654612bbc9083613750565b612bc6919061376f565b601f6000828254612bd79190613738565b9091555050601554601854612bec9083613750565b612bf6919061376f565b60216000828254612c079190613738565b9091555050601554601954612c1c9083613750565b612c26919061376f565b60226000828254612c379190613738565b90915550505b8015612c4e57612c4e873083612edc565b612c588186613868565b94505b612c66878787612edc565b50505050505050565b6000602254118015612c8b5750602254612c8830611367565b10155b15612c9c57612c9c30602254613031565b60006022819055612cac30611367565b90506000602154601f54602054612cc39190613738565b612ccd9190613738565b9050811580612cda575080155b15612ce3575050565b600b54612cf1906014613750565b821115612d0957600b54612d06906014613750565b91505b60008060028360205486612d1d9190613750565b612d27919061376f565b612d31919061376f565b9050612d45612d408286613868565b61315b565b60205447908190600090612d5b9060029061376f565b612d659087613868565b601f54612d729085613750565b612d7c919061376f565b905060006002602054612d8f919061376f565b612d999088613868565b602154612da69086613750565b612db0919061376f565b9050612dbc8183613738565b612dc69084613868565b60006020819055601f819055602181905560225592508415801590612deb5750600083115b15612dfa57612dfa85846132b5565b600d546040516001600160a01b03909116908290600081818185875af1925050503d8060008114612e47576040519150601f19603f3d011682016040523d82523d6000602084013e612e4c565b606091505b5050600c546040519197506001600160a01b0316904790600081818185875af1925050503d8060008114612e9c576040519150601f19603f3d011682016040523d82523d6000602084013e612ea1565b606091505b5050505050505050505050565b6001600160a01b0382166000908152602560205260409020805460ff19168215151790556117f98282613367565b6001600160a01b038316612f025760405162461bcd60e51b8152600401610c2a906137e0565b6001600160a01b038216612f285760405162461bcd60e51b8152600401610c2a90613825565b6001600160a01b03831660009081526020819052604090205481811015612fa05760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610c2a565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290612fd7908490613738565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161302391815260200190565b60405180910390a350505050565b6001600160a01b0382166130915760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610c2a565b6001600160a01b038216600090815260208190526040902054818110156131055760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610c2a565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910161212d565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061319057613190613693565b6001600160a01b03928316602091820292909201810191909152600954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156131e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061320d9190613676565b8160018151811061322057613220613693565b6001600160a01b0392831660209182029290920101526009546132469130911684612015565b60095460405163791ac94760e01b81526001600160a01b039091169063791ac9479061327f90859060009086903090429060040161387f565b600060405180830381600087803b15801561329957600080fd5b505af11580156132ad573d6000803e3d6000fd5b505050505050565b6009546132cd9030906001600160a01b031684612015565b60095460405163f305d71960e01b815230600482015260248101849052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af115801561333b573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061336091906138bb565b5050505050565b6001600160a01b038216600081815260246020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd67469101610e41565b600060208083528351808285015260005b818110156133f0578581018301518582016040015282016133d4565b81811115613402576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b038116811461342d57600080fd5b50565b6000806040838503121561344357600080fd5b823561344e81613418565b946020939093013593505050565b60006020828403121561346e57600080fd5b813561347981613418565b9392505050565b60006020828403121561349257600080fd5b5035919050565b6000806000606084860312156134ae57600080fd5b83356134b981613418565b925060208401356134c981613418565b929592945050506040919091013590565b600080600080608085870312156134f057600080fd5b5050823594602084013594506040840135936060013592509050565b801515811461342d57600080fd5b6000806040838503121561352d57600080fd5b823561353881613418565b915060208301356135488161350c565b809150509250929050565b6000806040838503121561356657600080fd5b823561357181613418565b9150602083013561354881613418565b60008060006040848603121561359657600080fd5b833567ffffffffffffffff808211156135ae57600080fd5b818601915086601f8301126135c257600080fd5b8135818111156135d157600080fd5b8760208260051b85010111156135e657600080fd5b602092830195509350508401356135fc8161350c565b809150509250925092565b600181811c9082168061361b57607f821691505b60208210810361363b57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60006020828403121561368857600080fd5b815161347981613418565b634e487b7160e01b600052603260045260246000fd5b600081518084526020808501945080840160005b838110156136e25781516001600160a01b0316875295820195908201906001016136bd565b509495945050505050565b84815260806020820152600061370660808301866136a9565b6001600160a01b03949094166040830152506060015292915050565b634e487b7160e01b600052601160045260246000fd5b6000821982111561374b5761374b613722565b500190565b600081600019048311821515161561376a5761376a613722565b500290565b60008261378c57634e487b7160e01b600052601260045260246000fd5b500490565b6000602082840312156137a357600080fd5b5051919050565b6000602082840312156137bc57600080fd5b81516134798161350c565b6000600182016137d9576137d9613722565b5060010190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60008282101561387a5761387a613722565b500390565b85815284602082015260a06040820152600061389e60a08301866136a9565b6001600160a01b0394909416606083015250608001529392505050565b6000806000606084860312156138d057600080fd5b835192506020840151915060408401519050925092509256fea26469706673582212205dbe9f8c3925aafdade4e48a0f322b2423fa5a369a40421703a03c556ab2c99e64736f6c634300080f0033

Deployed Bytecode Sourcemap

8076:18374:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1965:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8209:27;;;;;;;;;;-1:-1:-1;8209:27:0;;;;-1:-1:-1;;;;;8209:27:0;;;;;;-1:-1:-1;;;;;798:32:1;;;780:51;;768:2;753:18;8209:27:0;616:221:1;2879:169:0;;;;;;;;;;-1:-1:-1;2879:169:0;;;;;:::i;:::-;;:::i;:::-;;;1463:14:1;;1456:22;1438:41;;1426:2;1411:18;2879:169:0;1298:187:1;9589:64:0;;;;;;;;;;-1:-1:-1;9589:64:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;25853:594;;;;;;;;;;-1:-1:-1;25853:594:0;;;;;:::i;:::-;;:::i;:::-;;2286:108;;;;;;;;;;-1:-1:-1;2374:12:0;;2286:108;;;2073:25:1;;;2061:2;2046:18;2286:108:0;1927:177:1;9336:33:0;;;;;;;;;;;;;;;;9411:28;;;;;;;;;;;;;;;;3056:492;;;;;;;;;;-1:-1:-1;3056:492:0;;;;;:::i;:::-;;:::i;24956:219::-;;;;;;;;;;-1:-1:-1;24956:219:0;;;;;:::i;:::-;;:::i;15666:357::-;;;;;;;;;;-1:-1:-1;15666:357:0;;;;;:::i;:::-;;:::i;13944:260::-;;;;;;;;;;-1:-1:-1;13944:260:0;;;;;:::i;:::-;;:::i;2185:93::-;;;;;;;;;;-1:-1:-1;2185:93:0;;2268:2;3102:36:1;;3090:2;3075:18;2185:93:0;2960:184:1;8983:28:0;;;;;;;;;;;;;;;;3556:215;;;;;;;;;;-1:-1:-1;3556:215:0;;;;;:::i;:::-;;:::i;9376:28::-;;;;;;;;;;;;;;;;9298:31;;;;;;;;;;;;;;;;8243:21;;;;;;;;;;-1:-1:-1;8243:21:0;;;;-1:-1:-1;;;;;8243:21:0;;;13433:245;;;;;;;;;;-1:-1:-1;13433:245:0;;;;;:::i;:::-;;:::i;8602:33::-;;;;;;;;;;-1:-1:-1;8602:33:0;;;;;;;;25438:312;;;;;;;;;;;;;:::i;21460:120::-;;;;;;;;;;-1:-1:-1;21554:18:0;;21539:12;:33;21460:120;;9121:28;;;;;;;;;;;;;;;;8568:25;;;;;;;;;;;;;;;;8682:31;;;;;;;;;;-1:-1:-1;8682:31:0;;;;;;;;;;;2402:127;;;;;;;;;;-1:-1:-1;2402:127:0;;;;;:::i;:::-;;:::i;8119:21::-;;;;;;;;;;;;;;;;6600:150;;;;;;;;;;;;;:::i;12786:154::-;;;;;;;;;;;;;:::i;14847:260::-;;;;;;;;;;-1:-1:-1;14847:260:0;;;;;:::i;:::-;;:::i;24281:456::-;;;;;;;;;;-1:-1:-1;24281:456:0;;;;;:::i;:::-;;:::i;8517:44::-;;;;;;;;;;-1:-1:-1;8517:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;6386:79;;;;;;;;;;-1:-1:-1;6451:6:0;;-1:-1:-1;;;;;6451:6:0;6386:79;;2073:104;;;;;;;;;;;;;:::i;15115:295::-;;;;;;;;;;-1:-1:-1;15115:295:0;;;;;:::i;:::-;;:::i;9230:26::-;;;;;;;;;;;;;;;;3779:413;;;;;;;;;;-1:-1:-1;3779:413:0;;;;;:::i;:::-;;:::i;8477:33::-;;;;;;;;;;;;;;;;2537:175;;;;;;;;;;-1:-1:-1;2537:175:0;;;;;:::i;:::-;;:::i;9263:26::-;;;;;;;;;;;;;;;;9811:58;;;;;;;;;;-1:-1:-1;9811:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;8147:22;;;;;;;;;;;;;;;;9055:25;;;;;;;;;;;;;;;;8642:33;;;;;;;;;;-1:-1:-1;8642:33:0;;;;;;;;;;;13067:199;;;;;;;;;;-1:-1:-1;13067:199:0;;;;;:::i;:::-;;:::i;16406:182::-;;;;;;;;;;-1:-1:-1;16406:182:0;;;;;:::i;:::-;;:::i;9156:29::-;;;;;;;;;;;;;;;;8901:39;;;;;;;;;;-1:-1:-1;8901:39:0;;;;;;;;12948:111;;;;;;;;;;-1:-1:-1;12948:111:0;;;;;:::i;:::-;;:::i;14274:350::-;;;;;;;;;;-1:-1:-1;14274:350:0;;;;;:::i;:::-;;:::i;8949:27::-;;;;;;;;;;;;;;;;2720:151;;;;;;;;;;-1:-1:-1;2720:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;2836:18:0;;;2809:7;2836:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;2720:151;8301:33;;;;;;;;;;;;;;;;9087:25;;;;;;;;;;;;;;;;16031:367;;;;;;;;;;-1:-1:-1;16031:367:0;;;;;:::i;:::-;;:::i;13327:98::-;;;;;;;;;;;;;:::i;13686:250::-;;;;;;;;;;-1:-1:-1;13686:250:0;;;;;:::i;:::-;;:::i;8400:37::-;;;;;;;;;;;;;;;;25183:201;;;;;;;;;;-1:-1:-1;25183:201:0;;;;;:::i;:::-;;:::i;9018:30::-;;;;;;;;;;;;;;;;6758:244;;;;;;;;;;-1:-1:-1;6758:244:0;;;;;:::i;:::-;;:::i;24788:160::-;;;;;;;;;;;;;:::i;9192:31::-;;;;;;;;;;;;;;;;8176:24;;;;;;;;;;;;;;;;12407:327;;;;;;;;;;-1:-1:-1;12407:327:0;;;;;:::i;:::-;;:::i;1965:100::-;2019:13;2052:5;2045:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1965:100;:::o;2879:169::-;2962:4;2979:39;321:10;3002:7;3011:6;2979:8;:39::i;:::-;-1:-1:-1;3036:4:0;2879:169;;;;:::o;25853:594::-;6513:6;;-1:-1:-1;;;;;6513:6:0;321:10;6513:22;6505:67;;;;-1:-1:-1;;;6505:67:0;;;;;;;:::i;:::-;;;;;;;;;25954:8:::1;25939:11;:23;;25931:107;;;::::0;-1:-1:-1;;;25931:107:0;;5963:2:1;25931:107:0::1;::::0;::::1;5945:21:1::0;6002:2;5982:18;;;5975:30;6041:34;6021:18;;;6014:62;6112:34;6092:18;;;6085:62;-1:-1:-1;;;6163:19:1;;;6156:38;6211:19;;25931:107:0::1;5761:475:1::0;25931:107:0::1;26075:16;::::0;;26089:1:::1;26075:16:::0;;;;;::::1;::::0;;26051:21:::1;::::0;26075:16:::1;::::0;::::1;::::0;;::::1;::::0;::::1;-1:-1:-1::0;;26112:9:0::1;::::0;:16:::1;::::0;;-1:-1:-1;;;26112:16:0;;;;26051:40;;-1:-1:-1;;;;;;26112:9:0;;::::1;::::0;:14:::1;::::0;-1:-1:-1;26112:16:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;:9;:16:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26102:4;26107:1;26102:7;;;;;;;;:::i;:::-;;;;;;:26;-1:-1:-1::0;;;;;26102:26:0::1;;;-1:-1:-1::0;;;;;26102:26:0::1;;;::::0;::::1;26157:4;26139;26144:1;26139:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;26139:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;:23;26175:9:::1;::::0;:219:::1;::::0;-1:-1:-1;;;26175:219:0;;:9;::::1;::::0;:60:::1;::::0;26243:11;;26175:219:::1;::::0;:9:::1;::::0;26319:4;;26346:6:::1;::::0;26368:15:::1;::::0;26175:219:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;26410:29;26427:11;26410:29;;;;2073:25:1::0;;2061:2;2046:18;;1927:177;26410:29:0::1;;;;;;;;25920:527;25853:594:::0;:::o;3056:492::-;3196:4;3213:36;3223:6;3231:9;3242:6;3213:9;:36::i;:::-;-1:-1:-1;;;;;3289:19:0;;3262:24;3289:19;;;:11;:19;;;;;;;;321:10;3289:33;;;;;;;;3341:26;;;;3333:79;;;;-1:-1:-1;;;3333:79:0;;7944:2:1;3333:79:0;;;7926:21:1;7983:2;7963:18;;;7956:30;8022:34;8002:18;;;7995:62;-1:-1:-1;;;8073:18:1;;;8066:38;8121:19;;3333:79:0;7742:404:1;3333:79:0;3448:57;3457:6;321:10;3498:6;3479:16;:25;3448:8;:57::i;:::-;-1:-1:-1;3536:4:0;;3056:492;-1:-1:-1;;;;3056:492:0:o;24956:219::-;6513:6;;-1:-1:-1;;;;;6513:6:0;321:10;6513:22;6505:67;;;;-1:-1:-1;;;6505:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25046:29:0;::::1;25038:77;;;::::0;-1:-1:-1;;;25038:77:0;;8353:2:1;25038:77:0::1;::::0;::::1;8335:21:1::0;8392:2;8372:18;;;8365:30;8431:34;8411:18;;;8404:62;-1:-1:-1;;;8482:18:1;;;8475:33;8525:19;;25038:77:0::1;8151:399:1::0;25038:77:0::1;25126:14;:41:::0;;-1:-1:-1;;;;;;25126:41:0::1;-1:-1:-1::0;;;;;25126:41:0;;;::::1;::::0;;;::::1;::::0;;24956:219::o;15666:357::-;6513:6;;-1:-1:-1;;;;;6513:6:0;321:10;6513:22;6505:67;;;;-1:-1:-1;;;6505:67:0;;;;;;;:::i;:::-;15799:13:::1;:27:::0;;;15837:15:::1;:31:::0;;;15879:10:::1;:21:::0;;;15911:10:::1;:21:::0;;;15924:8;15892;15958:31:::1;15855:13:::0;15815:11;15958:31:::1;:::i;:::-;:44;;;;:::i;:::-;:57;;;;:::i;:::-;15943:12;:72:::0;-1:-1:-1;;;;15666:357:0:o;13944:260::-;6513:6;;-1:-1:-1;;;;;6513:6:0;321:10;6513:22;6505:67;;;;-1:-1:-1;;;6505:67:0;;;;;;;:::i;:::-;14060:4:::1;14054;14034:13;2374:12:::0;;;2286:108;14034:13:::1;:17;::::0;14050:1:::1;14034:17;:::i;:::-;:24;;;;:::i;:::-;14033:31;;;;:::i;:::-;14023:6;:41;;14015:98;;;::::0;-1:-1:-1;;;14015:98:0;;9417:2:1;14015:98:0::1;::::0;::::1;9399:21:1::0;9456:2;9436:18;;;9429:30;9495:34;9475:18;;;9468:62;-1:-1:-1;;;9546:18:1;;;9539:42;9598:19;;14015:98:0::1;9215:408:1::0;14015:98:0::1;14136:17;:6:::0;14146::::1;14136:17;:::i;:::-;14124:9;:29:::0;;;14169:27:::1;::::0;2073:25:1;;;14169:27:0::1;::::0;2061:2:1;2046:18;14169:27:0::1;;;;;;;;13944:260:::0;:::o;3556:215::-;321:10;3644:4;3693:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;3693:34:0;;;;;;;;;;3644:4;;3661:80;;3684:7;;3693:47;;3730:10;;3693:47;:::i;:::-;3661:8;:80::i;13433:245::-;6513:6;;-1:-1:-1;;;;;6513:6:0;321:10;6513:22;6505:67;;;;-1:-1:-1;;;6505:67:0;;;;;;;:::i;:::-;13546:4:::1;13540;13520:13;2374:12:::0;;;2286:108;13520:13:::1;:17;::::0;13536:1:::1;13520:17;:::i;:::-;:24;;;;:::i;:::-;13519:31;;;;:::i;:::-;13509:6;:41;;13501:95;;;::::0;-1:-1:-1;;;13501:95:0;;9830:2:1;13501:95:0::1;::::0;::::1;9812:21:1::0;9869:2;9849:18;;;9842:30;9908:34;9888:18;;;9881:62;-1:-1:-1;;;9959:18:1;;;9952:39;10008:19;;13501:95:0::1;9628:405:1::0;13501:95:0::1;13616:17;:6:::0;13626::::1;13616:17;:::i;:::-;13607:6;:26:::0;;;13649:21:::1;::::0;2073:25:1;;;13649:21:0::1;::::0;2061:2:1;2046:18;13649:21:0::1;1927:177:1::0;25438:312:0;6513:6;;-1:-1:-1;;;;;6513:6:0;321:10;6513:22;6505:67;;;;-1:-1:-1;;;6505:67:0;;;;;;;:::i;:::-;25529:18:::1;;25501:24;25519:4;25501:9;:24::i;:::-;:46;;25493:123;;;::::0;;-1:-1:-1;;;25493:123:0;;10240:2:1;25493:123:0::1;::::0;::::1;10222:21:1::0;10259:18;;;10252:30;;;;10318:34;10298:18;;;10291:62;10389:34;10369:18;;;10362:62;10441:19;;25493:123:0::1;10038:428:1::0;25493:123:0::1;25627:8;:15:::0;;-1:-1:-1;;;;25627:15:0::1;-1:-1:-1::0;;;25627:15:0::1;::::0;;25653:10:::1;:8;:10::i;:::-;25674:8;:16:::0;;-1:-1:-1;;;;25674:16:0::1;::::0;;25706:36:::1;::::0;25726:15:::1;2073:25:1::0;;25706:36:0::1;::::0;2061:2:1;2046:18;25706:36:0::1;;;;;;;25438:312::o:0;2402:127::-;-1:-1:-1;;;;;2503:18:0;2476:7;2503:18;;;;;;;;;;;;2402:127::o;6600:150::-;6513:6;;-1:-1:-1;;;;;6513:6:0;321:10;6513:22;6505:67;;;;-1:-1:-1;;;6505:67:0;;;;;;;:::i;:::-;6693:6:::1;::::0;6672:40:::1;::::0;6709:1:::1;::::0;-1:-1:-1;;;;;6693:6:0::1;::::0;6672:40:::1;::::0;6709:1;;6672:40:::1;6723:6;:19:::0;;-1:-1:-1;;;;;;6723:19:0::1;::::0;;6600:150::o;12786:154::-;6513:6;;-1:-1:-1;;;;;6513:6:0;321:10;6513:22;6505:67;;;;-1:-1:-1;;;6505:67:0;;;;;;;:::i;:::-;12840:14:::1;:22:::0;;-1:-1:-1;;12840:22:0;;::::1;::::0;;;12873:20:::1;:28:::0;;;;::::1;::::0;;12917:15:::1;::::0;::::1;::::0;12857:5:::1;::::0;12917:15:::1;12786:154::o:0;14847:260::-;6513:6;;-1:-1:-1;;;;;6513:6:0;321:10;6513:22;6505:67;;;;-1:-1:-1;;;6505:67:0;;;;;;;:::i;:::-;14943:4:::1;14939:104;;14981:6;::::0;-1:-1:-1;;;;;14981:6:0;;::::1;14971:16:::0;;::::1;::::0;14963:68:::1;;;::::0;-1:-1:-1;;;14963:68:0;;10673:2:1;14963:68:0::1;::::0;::::1;10655:21:1::0;10712:2;10692:18;;;10685:30;10751:34;10731:18;;;10724:62;-1:-1:-1;;;10802:18:1;;;10795:37;10849:19;;14963:68:0::1;10471:403:1::0;14963:68:0::1;-1:-1:-1::0;;;;;15053:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;15053:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;14847:260::o;24281:456::-;6513:6;;24368:10;;-1:-1:-1;;;;;6513:6:0;321:10;6513:22;6505:67;;;;-1:-1:-1;;;6505:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24399:20:0;::::1;24391:59;;;::::0;-1:-1:-1;;;24391:59:0;;11081:2:1;24391:59:0::1;::::0;::::1;11063:21:1::0;11120:2;11100:18;;;11093:30;11159:28;11139:18;;;11132:56;11205:18;;24391:59:0::1;10879:350:1::0;24391:59:0::1;24487:4;-1:-1:-1::0;;;;;24469:23:0;::::1;::::0;24461:64:::1;;;::::0;-1:-1:-1;;;24461:64:0;;11436:2:1;24461:64:0::1;::::0;::::1;11418:21:1::0;11475:2;11455:18;;;11448:30;11514;11494:18;;;11487:58;11562:18;;24461:64:0::1;11234:352:1::0;24461:64:0::1;24563:39;::::0;-1:-1:-1;;;24563:39:0;;24596:4:::1;24563:39;::::0;::::1;780:51:1::0;24536:24:0::1;::::0;-1:-1:-1;;;;;24563:24:0;::::1;::::0;::::1;::::0;753:18:1;;24563:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24621:46;::::0;-1:-1:-1;;;24621:46:0;;-1:-1:-1;;;;;11972:32:1;;;24621:46:0::1;::::0;::::1;11954:51:1::0;12021:18;;;12014:34;;;24536:66:0;;-1:-1:-1;24621:23:0;;::::1;::::0;::::1;::::0;11927:18:1;;24621:46:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24683;::::0;;-1:-1:-1;;;;;11972:32:1;;11954:51;;12036:2;12021:18;;12014:34;;;24613:54:0;;-1:-1:-1;24683:46:0::1;::::0;11927:18:1;24683:46:0::1;;;;;;;24380:357;24281:456:::0;;;;:::o;2073:104::-;2129:13;2162:7;2155:14;;;;;:::i;15115:295::-;6513:6;;-1:-1:-1;;;;;6513:6:0;321:10;6513:22;6505:67;;;;-1:-1:-1;;;6505:67:0;;;;;;;:::i;:::-;15224:6:::1;::::0;-1:-1:-1;;;;;15224:6:0;;::::1;15216:14:::0;;::::1;::::0;15208:84:::1;;;::::0;-1:-1:-1;;;15208:84:0;;12511:2:1;15208:84:0::1;::::0;::::1;12493:21:1::0;12550:2;12530:18;;;12523:30;12589:34;12569:18;;;12562:62;12660:27;12640:18;;;12633:55;12705:19;;15208:84:0::1;12309:421:1::0;15208:84:0::1;15305:41;15334:4;15340:5;15305:28;:41::i;:::-;15362:40;::::0;;::::1;;::::0;-1:-1:-1;;;;;15362:40:0;::::1;::::0;::::1;::::0;;;::::1;15115:295:::0;;:::o;3779:413::-;321:10;3872:4;3916:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;3916:34:0;;;;;;;;;;3969:35;;;;3961:85;;;;-1:-1:-1;;;3961:85:0;;12937:2:1;3961:85:0;;;12919:21:1;12976:2;12956:18;;;12949:30;13015:34;12995:18;;;12988:62;-1:-1:-1;;;13066:18:1;;;13059:35;13111:19;;3961:85:0;12735:401:1;3961:85:0;4082:67;321:10;4105:7;4133:15;4114:16;:34;4082:8;:67::i;:::-;-1:-1:-1;4180:4:0;;3779:413;-1:-1:-1;;;3779:413:0:o;2537:175::-;2623:4;2640:42;321:10;2664:9;2675:6;2640:9;:42::i;13067:199::-;6513:6;;-1:-1:-1;;;;;6513:6:0;321:10;6513:22;6505:67;;;;-1:-1:-1;;;6505:67:0;;;;;;;:::i;:::-;13163:9:::1;13159:100;13178:18:::0;;::::1;13159:100;;;13243:4;13217:11;:23;13229:7;;13237:1;13229:10;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;13217:23:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;13217:23:0;:30;;-1:-1:-1;;13217:30:0::1;::::0;::::1;;::::0;;;::::1;::::0;;13198:3;::::1;::::0;::::1;:::i;:::-;;;;13159:100;;;;13067:199:::0;;;:::o;16406:182::-;6513:6;;-1:-1:-1;;;;;6513:6:0;321:10;6513:22;6505:67;;;;-1:-1:-1;;;6505:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;16491:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;16491:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;16546:34;;1438:41:1;;;16546:34:0::1;::::0;1411:18:1;16546:34:0::1;;;;;;;16406:182:::0;;:::o;12948:111::-;6513:6;;-1:-1:-1;;;;;6513:6:0;321:10;6513:22;6505:67;;;;-1:-1:-1;;;6505:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;13025:19:0;;;::::1;;::::0;;;:11:::1;:19;::::0;;;;:26;;-1:-1:-1;;13025:26:0::1;::::0;::::1;;::::0;;;::::1;::::0;;12948:111::o;14274:350::-;6513:6;;-1:-1:-1;;;;;6513:6:0;321:10;6513:22;6505:67;;;;-1:-1:-1;;;6505:67:0;;;;;;;:::i;:::-;14398:6:::1;14378:13;2374:12:::0;;;2286:108;14378:13:::1;:17;::::0;14394:1:::1;14378:17;:::i;:::-;:26;;;;:::i;:::-;14365:9;:39;;14357:105;;;::::0;-1:-1:-1;;;14357:105:0;;13483:2:1;14357:105:0::1;::::0;::::1;13465:21:1::0;13522:2;13502:18;;;13495:30;13561:34;13541:18;;;13534:62;-1:-1:-1;;;13612:18:1;;;13605:51;13673:19;;14357:105:0::1;13281:417:1::0;14357:105:0::1;14514:4;14494:13;2374:12:::0;;;2286:108;14494:13:::1;:17;::::0;14510:1:::1;14494:17;:::i;:::-;:24;;;;:::i;:::-;14481:9;:37;;14473:102;;;::::0;-1:-1:-1;;;14473:102:0;;13905:2:1;14473:102:0::1;::::0;::::1;13887:21:1::0;13944:2;13924:18;;;13917:30;13983:34;13963:18;;;13956:62;-1:-1:-1;;;14034:18:1;;;14027:50;14094:19;;14473:102:0::1;13703:416:1::0;14473:102:0::1;14586:18;:30:::0;14274:350::o;16031:367::-;6513:6;;-1:-1:-1;;;;;6513:6:0;321:10;6513:22;6505:67;;;;-1:-1:-1;;;6505:67:0;;;;;;;:::i;:::-;16165:14:::1;:28:::0;;;16204:16:::1;:32:::0;;;16247:11:::1;:22:::0;;;16280:11:::1;:22:::0;;;16294:8;16261;16329:33:::1;16223:13:::0;16182:11;16329:33:::1;:::i;:::-;:47;;;;:::i;:::-;:61;;;;:::i;:::-;16313:13;:77:::0;-1:-1:-1;;;;16031:367:0:o;13327:98::-;6513:6;;-1:-1:-1;;;;;6513:6:0;321:10;6513:22;6505:67;;;;-1:-1:-1;;;6505:67:0;;;;;;;:::i;:::-;13389:20:::1;:28:::0;;-1:-1:-1;;13389:28:0::1;::::0;;13327:98::o;13686:250::-;6513:6;;-1:-1:-1;;;;;6513:6:0;321:10;6513:22;6505:67;;;;-1:-1:-1;;;6505:67:0;;;;;;;:::i;:::-;13800:4:::1;13794;13774:13;2374:12:::0;;;2286:108;13774:13:::1;:17;::::0;13790:1:::1;13774:17;:::i;:::-;:24;;;;:::i;:::-;13773:31;;;;:::i;:::-;13763:6;:41;;13755:96;;;::::0;-1:-1:-1;;;13755:96:0;;14326:2:1;13755:96:0::1;::::0;::::1;14308:21:1::0;14365:2;14345:18;;;14338:30;14404:34;14384:18;;;14377:62;-1:-1:-1;;;14455:18:1;;;14448:40;14505:19;;13755:96:0::1;14124:406:1::0;13755:96:0::1;13872:17;:6:::0;13882::::1;13872:17;:::i;:::-;13862:7;:27:::0;;;13905:23:::1;::::0;2073:25:1;;;13905:23:0::1;::::0;2061:2:1;2046:18;13905:23:0::1;1927:177:1::0;25183:201:0;6513:6;;-1:-1:-1;;;;;6513:6:0;321:10;6513:22;6505:67;;;;-1:-1:-1;;;6505:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25267:26:0;::::1;25259:71;;;::::0;-1:-1:-1;;;25259:71:0;;14737:2:1;25259:71:0::1;::::0;::::1;14719:21:1::0;;;14756:18;;;14749:30;14815:34;14795:18;;;14788:62;14867:18;;25259:71:0::1;14535:356:1::0;25259:71:0::1;25341:11;:35:::0;;-1:-1:-1;;;;;;25341:35:0::1;-1:-1:-1::0;;;;;25341:35:0;;;::::1;::::0;;;::::1;::::0;;25183:201::o;6758:244::-;6513:6;;-1:-1:-1;;;;;6513:6:0;321:10;6513:22;6505:67;;;;-1:-1:-1;;;6505:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6847:22:0;::::1;6839:73;;;::::0;-1:-1:-1;;;6839:73:0;;15098:2:1;6839:73:0::1;::::0;::::1;15080:21:1::0;15137:2;15117:18;;;15110:30;15176:34;15156:18;;;15149:62;-1:-1:-1;;;15227:18:1;;;15220:36;15273:19;;6839:73:0::1;14896:402:1::0;6839:73:0::1;6949:6;::::0;6928:38:::1;::::0;-1:-1:-1;;;;;6928:38:0;;::::1;::::0;6949:6:::1;::::0;6928:38:::1;::::0;6949:6:::1;::::0;6928:38:::1;6977:6;:17:::0;;-1:-1:-1;;;;;;6977:17:0::1;-1:-1:-1::0;;;;;6977:17:0;;;::::1;::::0;;;::::1;::::0;;6758:244::o;24788:160::-;6513:6;;-1:-1:-1;;;;;6513:6:0;321:10;6513:22;6505:67;;;;-1:-1:-1;;;6505:67:0;;;;;;;:::i;:::-;24882:58:::1;::::0;24846:12:::1;::::0;24890:10:::1;::::0;24914:21:::1;::::0;24846:12;24882:58;24846:12;24882:58;24914:21;24890:10;24882:58:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12407:327:::0;6513:6;;-1:-1:-1;;;;;6513:6:0;321:10;6513:22;6505:67;;;;-1:-1:-1;;;6505:67:0;;;;;;;:::i;:::-;12486:13:::1;::::0;::::1;::::0;::::1;;;12485:14;12477:50;;;::::0;-1:-1:-1;;;12477:50:0;;15715:2:1;12477:50:0::1;::::0;::::1;15697:21:1::0;15754:2;15734:18;;;15727:30;15793:25;15773:18;;;15766:53;15836:18;;12477:50:0::1;15513:347:1::0;12477:50:0::1;12538:13;:20:::0;;-1:-1:-1;;12569:18:0;;;;;12619:12:::1;12598:18;:33:::0;;;12663:31:::1;::::0;12684:10;;12663:31:::1;:::i;:::-;12642:18;:52:::0;12710:16:::1;::::0;::::1;::::0;;;::::1;12407:327:::0;:::o;5679:380::-;-1:-1:-1;;;;;5815:19:0;;5807:68;;;;-1:-1:-1;;;5807:68:0;;16067:2:1;5807:68:0;;;16049:21:1;16106:2;16086:18;;;16079:30;16145:34;16125:18;;;16118:62;-1:-1:-1;;;16196:18:1;;;16189:34;16240:19;;5807:68:0;15865:400:1;5807:68:0;-1:-1:-1;;;;;5894:21:0;;5886:68;;;;-1:-1:-1;;;5886:68:0;;16472:2:1;5886:68:0;;;16454:21:1;16511:2;16491:18;;;16484:30;16550:34;16530:18;;;16523:62;-1:-1:-1;;;16601:18:1;;;16594:32;16643:19;;5886:68:0;16270:398:1;5886:68:0;-1:-1:-1;;;;;5967:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;6019:32;;2073:25:1;;;6019:32:0;;2046:18:1;6019:32:0;;;;;;;;5679:380;;;:::o;16596:4856::-;-1:-1:-1;;;;;16696:18:0;;16688:68;;;;-1:-1:-1;;;16688:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;16775:16:0;;16767:64;;;;-1:-1:-1;;;16767:64:0;;;;;;;:::i;:::-;16859:1;16850:6;:10;16842:52;;;;-1:-1:-1;;;16842:52:0;;17685:2:1;16842:52:0;;;17667:21:1;17724:2;17704:18;;;17697:30;17763:31;17743:18;;;17736:59;17812:18;;16842:52:0;17483:353:1;16842:52:0;16911:13;;;;;;;16907:132;;-1:-1:-1;;;;;16948:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;16977:23:0;;;;;;:19;:23;;;;;;;;16948:52;16940:87;;;;-1:-1:-1;;;16940:87:0;;18043:2:1;16940:87:0;;;18025:21:1;18082:2;18062:18;;;18055:30;-1:-1:-1;;;18101:18:1;;;18094:52;18163:18;;16940:87:0;17841:346:1;16940:87:0;17054:18;;:22;17051:196;;-1:-1:-1;;;;;17101:17:0;;;;;;:11;:17;;;;;;;;17100:18;;:35;;-1:-1:-1;6451:6:0;;-1:-1:-1;;;;;17122:13:0;;;6451:6;;17122:13;17100:35;:60;;;-1:-1:-1;;;;;;17139:21:0;;17153:6;17139:21;17100:60;17092:143;;;;-1:-1:-1;;;17092:143:0;;18394:2:1;17092:143:0;;;18376:21:1;18433:2;18413:18;;;18406:30;18472:34;18452:18;;;18445:62;18543:34;18523:18;;;18516:62;-1:-1:-1;;;18594:19:1;;;18587:37;18641:19;;17092:143:0;18192:474:1;17092:143:0;17262:14;;;;17259:1625;;;6451:6;;-1:-1:-1;;;;;17296:15:0;;;6451:6;;17296:15;;;;:32;;-1:-1:-1;6451:6:0;;-1:-1:-1;;;;;17315:13:0;;;6451:6;;17315:13;;17296:32;:52;;;;-1:-1:-1;;;;;;17332:16:0;;;;17296:52;:77;;;;-1:-1:-1;;;;;;17352:21:0;;17366:6;17352:21;;17296:77;:107;;;;-1:-1:-1;;;;;;17378:25:0;;;;;;:19;:25;;;;;;;;17377:26;17296:107;:135;;;;-1:-1:-1;;;;;;17408:23:0;;;;;;:19;:23;;;;;;;;17407:24;17296:135;17292:1581;;;17589:20;;;;17585:506;;;17651:9;;-1:-1:-1;;;;;17637:24:0;;;17651:9;;17637:24;;;;:49;;-1:-1:-1;17679:6:0;;-1:-1:-1;;;;;17665:21:0;;;17679:6;;17665:21;;17637:49;17633:439;;;17764:16;17779:1;17764:12;:16;:::i;:::-;17751:9;17722:39;;;;:28;:39;;;;;;:58;:113;;;;-1:-1:-1;17819:16:0;17834:1;17819:12;:16;:::i;:::-;-1:-1:-1;;;;;17784:32:0;;;;;;:28;:32;;;;;;:51;17722:113;17714:179;;;;-1:-1:-1;;;17714:179:0;;19003:2:1;17714:179:0;;;18985:21:1;19042:2;19022:18;;;19015:30;19081:34;19061:18;;;19054:62;-1:-1:-1;;;19132:18:1;;;19125:51;19193:19;;17714:179:0;18801:417:1;17714:179:0;17949:9;17920:39;;;;:28;:39;;;;;;17962:12;17920:54;;;;-1:-1:-1;;;;;18001:32:0;;;;;;:47;17633:439;-1:-1:-1;;;;;18143:31:0;;;;;;:25;:31;;;;;;;;:71;;;;-1:-1:-1;;;;;;18179:35:0;;;;;;:31;:35;;;;;;;;18178:36;18143:71;18139:719;;;18261:6;;18251;:16;;18243:69;;;;-1:-1:-1;;;18243:69:0;;19425:2:1;18243:69:0;;;19407:21:1;19464:2;19444:18;;;19437:30;19503:34;19483:18;;;19476:62;-1:-1:-1;;;19554:18:1;;;19547:38;19602:19;;18243:69:0;19223:404:1;18243:69:0;18373:9;;18356:13;18366:2;18356:9;:13::i;:::-;18347:22;;:6;:22;:::i;:::-;:35;;18339:72;;;;-1:-1:-1;;;18339:72:0;;19834:2:1;18339:72:0;;;19816:21:1;19873:2;19853:18;;;19846:30;-1:-1:-1;;;19892:18:1;;;19885:54;19956:18;;18339:72:0;19632:348:1;18339:72:0;18139:719;;;-1:-1:-1;;;;;18487:29:0;;;;;;:25;:29;;;;;;;;:71;;;;-1:-1:-1;;;;;;18521:37:0;;;;;;:31;:37;;;;;;;;18520:38;18487:71;18483:375;;;18605:7;;18595:6;:17;;18587:72;;;;-1:-1:-1;;;18587:72:0;;20187:2:1;18587:72:0;;;20169:21:1;20226:2;20206:18;;;20199:30;20265:34;20245:18;;;20238:62;-1:-1:-1;;;20316:18:1;;;20309:40;20366:19;;18587:72:0;19985:406:1;18483:375:0;-1:-1:-1;;;;;18707:35:0;;;;;;:31;:35;;;;;;;;18702:156;;18800:9;;18783:13;18793:2;18783:9;:13::i;:::-;18774:22;;:6;:22;:::i;:::-;:35;;18766:72;;;;-1:-1:-1;;;18766:72:0;;19834:2:1;18766:72:0;;;19816:21:1;19873:2;19853:18;;;19846:30;-1:-1:-1;;;19892:18:1;;;19885:54;19956:18;;18766:72:0;19632:348:1;18766:72:0;18896:28;18927:24;18945:4;18927:9;:24::i;:::-;19003:18;;18896:55;;-1:-1:-1;18979:42:0;;;;;;;19037:22;;-1:-1:-1;19048:11:0;;;;;;;19037:22;:35;;;;-1:-1:-1;19064:8:0;;-1:-1:-1;;;19064:8:0;;;;19063:9;19037:35;:71;;;;-1:-1:-1;;;;;;19077:31:0;;;;;;:25;:31;;;;;;;;19076:32;19037:71;:101;;;;-1:-1:-1;;;;;;19113:25:0;;;;;;:19;:25;;;;;;;;19112:26;19037:101;:129;;;;-1:-1:-1;;;;;;19143:23:0;;;;;;:19;:23;;;;;;;;19142:24;19037:129;19034:236;;;19183:8;:15;;-1:-1:-1;;;;19183:15:0;-1:-1:-1;;;19183:15:0;;;19215:10;:8;:10::i;:::-;19242:8;:16;;-1:-1:-1;;;;19242:16:0;;;19034:236;-1:-1:-1;;;;;19400:25:0;;19282:12;19400:25;;;:19;:25;;;;;;19297:4;;19400:25;;;:52;;-1:-1:-1;;;;;;19429:23:0;;;;;;:19;:23;;;;;;;;19400:52;19397:99;;;-1:-1:-1;19479:5:0;19397:99;19508:12;19612:7;19609:1790;;;21554:18;;21539:12;:33;19674:60;;;;-1:-1:-1;;;;;;19703:31:0;;;;;;:25;:31;;;;;;;;19674:60;:94;;;;-1:-1:-1;;;;;;19739:29:0;;;;;;:25;:29;;;;;;;;19738:30;19674:94;:114;;;;;19787:1;19772:12;;:16;19674:114;19671:1581;;;-1:-1:-1;;;;;19814:15:0;;;;;;:11;:15;;;;;;;;19810:171;;-1:-1:-1;;;;;19853:15:0;;;;;;:11;:15;;;;;:22;;-1:-1:-1;;19853:22:0;19871:4;19853:22;;;;;;19898:10;:15;;19871:4;;19898:10;;:15;;19871:4;;19898:15;:::i;:::-;;;;-1:-1:-1;;19941:20:0;;-1:-1:-1;;;;;798:32:1;;780:51;;19941:20:0;;768:2:1;753:18;19941:20:0;;;;;;;19810:171;20022:3;20008:11;:6;20017:2;20008:11;:::i;:::-;:17;;;;:::i;:::-;20001:24;;20091:12;;20073:15;;20066:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;20044:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;20165:12:0;;20149:13;;20142:20;;:4;:20;:::i;:::-;:35;;;;:::i;:::-;20122:16;;:55;;;;;;;:::i;:::-;;;;-1:-1:-1;;20233:12:0;;20220:10;;20213:17;;:4;:17;:::i;:::-;:32;;;;:::i;:::-;20196:13;;:49;;;;;;;:::i;:::-;;;;-1:-1:-1;;20301:12:0;;20288:10;;20281:17;;:4;:17;:::i;:::-;:32;;;;:::i;:::-;20264:13;;:49;;;;;;;:::i;:::-;;;;-1:-1:-1;19671:1581:0;;-1:-1:-1;19671:1581:0;;-1:-1:-1;;;;;20378:29:0;;;;;;:25;:29;;;;;;;;:50;;;;;20427:1;20411:13;;:17;20378:50;20374:878;;;20480:3;20464:13;;20455:6;:22;;;;:::i;:::-;:28;;;;:::i;:::-;20448:35;;20550:13;;20531:16;;20524:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;20502:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;20626:13:0;;20609:14;;20602:21;;:4;:21;:::i;:::-;:37;;;;:::i;:::-;20582:16;;:57;;;;;;;:::i;:::-;;;;-1:-1:-1;;20696:13:0;;20682:11;;20675:18;;:4;:18;:::i;:::-;:34;;;;:::i;:::-;20658:13;;:51;;;;;;;:::i;:::-;;;;-1:-1:-1;;20766:13:0;;20752:11;;20745:18;;:4;:18;:::i;20374:878::-;-1:-1:-1;;;;;20842:31:0;;;;;;:25;:31;;;;;;;;:51;;;;;20892:1;20877:12;;:16;20842:51;20839:413;;;20945:3;20930:12;;20921:6;:21;;;;:::i;:::-;:27;;;;:::i;:::-;20914:34;;21014:12;;20996:15;;20989:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;20967:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;21088:12:0;;21072:13;;21065:20;;:4;:20;:::i;:::-;:35;;;;:::i;:::-;21045:16;;:55;;;;;;;:::i;:::-;;;;-1:-1:-1;;21156:12:0;;21143:10;;21136:17;;:4;:17;:::i;:::-;:32;;;;:::i;:::-;21119:13;;:49;;;;;;;:::i;:::-;;;;-1:-1:-1;;21224:12:0;;21211:10;;21204:17;;:4;:17;:::i;:::-;:32;;;;:::i;:::-;21187:13;;:49;;;;;;;:::i;:::-;;;;-1:-1:-1;;20839:413:0;21271:8;;21268:89;;21299:42;21315:4;21329;21336;21299:15;:42::i;:::-;21373:14;21383:4;21373:14;;:::i;:::-;;;19609:1790;21411:33;21427:4;21433:2;21437:6;21411:15;:33::i;:::-;16675:4777;;;;16596:4856;;;:::o;22686:1587::-;22746:1;22730:13;;:17;:62;;;;;22779:13;;22751:24;22769:4;22751:9;:24::i;:::-;:41;;22730:62;22727:129;;;22809:35;22823:4;22830:13;;22809:5;:35::i;:::-;22882:1;22866:13;:17;;;22922:24;22940:4;22922:9;:24::i;:::-;22896:50;;22957:25;23025:13;;23006:16;;22985:18;;:37;;;;:::i;:::-;:53;;;;:::i;:::-;22957:81;-1:-1:-1;23054:20:0;;;:46;;-1:-1:-1;23078:22:0;;23054:46;23051:60;;;23103:7;;22686:1587::o;23051:60::-;23144:18;;:23;;23165:2;23144:23;:::i;:::-;23126:15;:41;23123:113;;;23201:18;;:23;;23222:2;23201:23;:::i;:::-;23183:41;;23123:113;23248:12;23322:23;23407:1;23387:17;23366:18;;23348:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;23322:86;-1:-1:-1;23421:51:0;23438:33;23322:86;23438:15;:33;:::i;:::-;23421:16;:51::i;:::-;23665:18;;23506:21;;;;23485:18;;23665:20;;23684:1;;23665:20;:::i;:::-;23644:42;;:17;:42;:::i;:::-;23624:16;;23611:29;;:10;:29;:::i;:::-;:76;;;;:::i;:::-;23587:100;;23698:18;23789:1;23770:18;;:20;;;;:::i;:::-;23749:42;;:17;:42;:::i;:::-;23732:13;;23719:26;;:10;:26;:::i;:::-;:73;;;;:::i;:::-;23698:94;-1:-1:-1;23824:26:0;23698:94;23824:13;:26;:::i;:::-;23805:45;;;;:::i;:::-;23884:1;23863:18;:22;;;23896:16;:20;;;23927:13;:17;;;23955:13;:17;23805:45;-1:-1:-1;23988:19:0;;;;;:42;;;24029:1;24011:15;:19;23988:42;23985:119;;;24046:46;24059:15;24076;24046:12;:46::i;:::-;24137:11;;24129:48;;-1:-1:-1;;;;;24137:11:0;;;;24162:10;;24129:48;;;;24162:10;24137:11;24129:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;24211:14:0;;24203:62;;24116:61;;-1:-1:-1;;;;;;24211:14:0;;24239:21;;24203:62;;;;24239:21;24211:14;24203:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;22686:1587:0:o;15418:240::-;-1:-1:-1;;;;;15501:31:0;;;;;;:25;:31;;;;;:39;;-1:-1:-1;;15501:39:0;;;;;;;15553;15501:31;:39;15553:26;:39::i;4200:614::-;-1:-1:-1;;;;;4340:20:0;;4332:70;;;;-1:-1:-1;;;4332:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;4421:23:0;;4413:71;;;;-1:-1:-1;;;4413:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;4521:17:0;;4497:21;4521:17;;;;;;;;;;;4557:23;;;;4549:74;;;;-1:-1:-1;;;4549:74:0;;20598:2:1;4549:74:0;;;20580:21:1;20637:2;20617:18;;;20610:30;20676:34;20656:18;;;20649:62;-1:-1:-1;;;20727:18:1;;;20720:36;20773:19;;4549:74:0;20396:402:1;4549:74:0;-1:-1:-1;;;;;4659:17:0;;;:9;:17;;;;;;;;;;;4679:22;;;4659:42;;4723:20;;;;;;;;:30;;4695:6;;4659:9;4723:30;;4695:6;;4723:30;:::i;:::-;;;;;;;;4788:9;-1:-1:-1;;;;;4771:35:0;4780:6;-1:-1:-1;;;;;4771:35:0;;4799:6;4771:35;;;;2073:25:1;;2061:2;2046:18;;1927:177;4771:35:0;;;;;;;;4321:493;4200:614;;;:::o;5121:550::-;-1:-1:-1;;;;;5205:21:0;;5197:67;;;;-1:-1:-1;;;5197:67:0;;21005:2:1;5197:67:0;;;20987:21:1;21044:2;21024:18;;;21017:30;21083:34;21063:18;;;21056:62;-1:-1:-1;;;21134:18:1;;;21127:31;21175:19;;5197:67:0;20803:397:1;5197:67:0;-1:-1:-1;;;;;5300:18:0;;5275:22;5300:18;;;;;;;;;;;5337:24;;;;5329:71;;;;-1:-1:-1;;;5329:71:0;;21407:2:1;5329:71:0;;;21389:21:1;21446:2;21426:18;;;21419:30;21485:34;21465:18;;;21458:62;-1:-1:-1;;;21536:18:1;;;21529:32;21578:19;;5329:71:0;21205:398:1;5329:71:0;-1:-1:-1;;;;;5436:18:0;;:9;:18;;;;;;;;;;;5457:23;;;5436:44;;5575:12;:22;;;;;;;5626:37;2073:25:1;;;5436:9:0;;:18;5626:37;;2046:18:1;5626:37:0;1927:177:1;21588:573:0;21740:16;;;21754:1;21740:16;;;;;;;;21716:21;;21740:16;;;;;;;;;;-1:-1:-1;21740:16:0;21716:40;;21785:4;21767;21772:1;21767:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;21767:23:0;;;:7;;;;;;;;;;:23;;;;21811:9;;:16;;;-1:-1:-1;;;21811:16:0;;;;:9;;;;;:14;;:16;;;;;21767:7;;21811:16;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21801:4;21806:1;21801:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;21801:26:0;;;:7;;;;;;;;;:26;21872:9;;21840:56;;21857:4;;21872:9;21884:11;21840:8;:56::i;:::-;21935:9;;:218;;-1:-1:-1;;;21935:218:0;;-1:-1:-1;;;;;21935:9:0;;;;:60;;:218;;22010:11;;21935:9;;22080:4;;22107;;22127:15;;21935:218;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21643:518;21588:573;:::o;22169:509::-;22349:9;;22317:56;;22334:4;;-1:-1:-1;;;;;22349:9:0;22361:11;22317:8;:56::i;:::-;22416:9;;:254;;-1:-1:-1;;;22416:254:0;;22482:4;22416:254;;;22536:34:1;22586:18;;;22579:34;;;22416:9:0;22629:18:1;;;22622:34;;;22672:18;;;22665:34;22622:6:0;22715:19:1;;;22708:44;22644:15:0;22768:19:1;;;22761:35;-1:-1:-1;;;;;22416:9:0;;;;:25;;22449:9;;22470:19:1;;22416:254:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;22169:509;;:::o;14632:207::-;-1:-1:-1;;;;;14720:39:0;;;;;;:31;:39;;;;;;;;;:52;;-1:-1:-1;;14720:52:0;;;;;;;;;;14788:43;;23286:51:1;;;23353:18;;;23346:50;14788:43:0;;23259:18:1;14788:43:0;23118:284:1;14:597;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;452:6;449:1;446:13;443:91;;;522:1;517:2;508:6;497:9;493:22;489:31;482:42;443:91;-1:-1:-1;595:2:1;574:15;-1:-1:-1;;570:29:1;555:45;;;;602:2;551:54;;14:597;-1:-1:-1;;;14:597:1:o;842:131::-;-1:-1:-1;;;;;917:31:1;;907:42;;897:70;;963:1;960;953:12;897:70;842:131;:::o;978:315::-;1046:6;1054;1107:2;1095:9;1086:7;1082:23;1078:32;1075:52;;;1123:1;1120;1113:12;1075:52;1162:9;1149:23;1181:31;1206:5;1181:31;:::i;:::-;1231:5;1283:2;1268:18;;;;1255:32;;-1:-1:-1;;;978:315:1:o;1490:247::-;1549:6;1602:2;1590:9;1581:7;1577:23;1573:32;1570:52;;;1618:1;1615;1608:12;1570:52;1657:9;1644:23;1676:31;1701:5;1676:31;:::i;:::-;1726:5;1490:247;-1:-1:-1;;;1490:247:1:o;1742:180::-;1801:6;1854:2;1842:9;1833:7;1829:23;1825:32;1822:52;;;1870:1;1867;1860:12;1822:52;-1:-1:-1;1893:23:1;;1742:180;-1:-1:-1;1742:180:1:o;2109:456::-;2186:6;2194;2202;2255:2;2243:9;2234:7;2230:23;2226:32;2223:52;;;2271:1;2268;2261:12;2223:52;2310:9;2297:23;2329:31;2354:5;2329:31;:::i;:::-;2379:5;-1:-1:-1;2436:2:1;2421:18;;2408:32;2449:33;2408:32;2449:33;:::i;:::-;2109:456;;2501:7;;-1:-1:-1;;;2555:2:1;2540:18;;;;2527:32;;2109:456::o;2570:385::-;2656:6;2664;2672;2680;2733:3;2721:9;2712:7;2708:23;2704:33;2701:53;;;2750:1;2747;2740:12;2701:53;-1:-1:-1;;2773:23:1;;;2843:2;2828:18;;2815:32;;-1:-1:-1;2894:2:1;2879:18;;2866:32;;2945:2;2930:18;2917:32;;-1:-1:-1;2570:385:1;-1:-1:-1;2570:385:1:o;3357:118::-;3443:5;3436:13;3429:21;3422:5;3419:32;3409:60;;3465:1;3462;3455:12;3480:382;3545:6;3553;3606:2;3594:9;3585:7;3581:23;3577:32;3574:52;;;3622:1;3619;3612:12;3574:52;3661:9;3648:23;3680:31;3705:5;3680:31;:::i;:::-;3730:5;-1:-1:-1;3787:2:1;3772:18;;3759:32;3800:30;3759:32;3800:30;:::i;:::-;3849:7;3839:17;;;3480:382;;;;;:::o;3867:388::-;3935:6;3943;3996:2;3984:9;3975:7;3971:23;3967:32;3964:52;;;4012:1;4009;4002:12;3964:52;4051:9;4038:23;4070:31;4095:5;4070:31;:::i;:::-;4120:5;-1:-1:-1;4177:2:1;4162:18;;4149:32;4190:33;4149:32;4190:33;:::i;4260:750::-;4352:6;4360;4368;4421:2;4409:9;4400:7;4396:23;4392:32;4389:52;;;4437:1;4434;4427:12;4389:52;4477:9;4464:23;4506:18;4547:2;4539:6;4536:14;4533:34;;;4563:1;4560;4553:12;4533:34;4601:6;4590:9;4586:22;4576:32;;4646:7;4639:4;4635:2;4631:13;4627:27;4617:55;;4668:1;4665;4658:12;4617:55;4708:2;4695:16;4734:2;4726:6;4723:14;4720:34;;;4750:1;4747;4740:12;4720:34;4805:7;4798:4;4788:6;4785:1;4781:14;4777:2;4773:23;4769:34;4766:47;4763:67;;;4826:1;4823;4816:12;4763:67;4857:4;4849:13;;;;-1:-1:-1;4881:6:1;-1:-1:-1;;4922:20:1;;4909:34;4952:28;4909:34;4952:28;:::i;:::-;4999:5;4989:15;;;4260:750;;;;;:::o;5015:380::-;5094:1;5090:12;;;;5137;;;5158:61;;5212:4;5204:6;5200:17;5190:27;;5158:61;5265:2;5257:6;5254:14;5234:18;5231:38;5228:161;;5311:10;5306:3;5302:20;5299:1;5292:31;5346:4;5343:1;5336:15;5374:4;5371:1;5364:15;5228:161;;5015:380;;;:::o;5400:356::-;5602:2;5584:21;;;5621:18;;;5614:30;5680:34;5675:2;5660:18;;5653:62;5747:2;5732:18;;5400:356::o;6373:251::-;6443:6;6496:2;6484:9;6475:7;6471:23;6467:32;6464:52;;;6512:1;6509;6502:12;6464:52;6544:9;6538:16;6563:31;6588:5;6563:31;:::i;6629:127::-;6690:10;6685:3;6681:20;6678:1;6671:31;6721:4;6718:1;6711:15;6745:4;6742:1;6735:15;6761:461;6814:3;6852:5;6846:12;6879:6;6874:3;6867:19;6905:4;6934:2;6929:3;6925:12;6918:19;;6971:2;6964:5;6960:14;6992:1;7002:195;7016:6;7013:1;7010:13;7002:195;;;7081:13;;-1:-1:-1;;;;;7077:39:1;7065:52;;7137:12;;;;7172:15;;;;7113:1;7031:9;7002:195;;;-1:-1:-1;7213:3:1;;6761:461;-1:-1:-1;;;;;6761:461:1:o;7227:510::-;7498:6;7487:9;7480:25;7541:3;7536:2;7525:9;7521:18;7514:31;7461:4;7562:57;7614:3;7603:9;7599:19;7591:6;7562:57;:::i;:::-;-1:-1:-1;;;;;7655:32:1;;;;7650:2;7635:18;;7628:60;-1:-1:-1;7719:2:1;7704:18;7697:34;7554:65;7227:510;-1:-1:-1;;7227:510:1:o;8555:127::-;8616:10;8611:3;8607:20;8604:1;8597:31;8647:4;8644:1;8637:15;8671:4;8668:1;8661:15;8687:128;8727:3;8758:1;8754:6;8751:1;8748:13;8745:39;;;8764:18;;:::i;:::-;-1:-1:-1;8800:9:1;;8687:128::o;8820:168::-;8860:7;8926:1;8922;8918:6;8914:14;8911:1;8908:21;8903:1;8896:9;8889:17;8885:45;8882:71;;;8933:18;;:::i;:::-;-1:-1:-1;8973:9:1;;8820:168::o;8993:217::-;9033:1;9059;9049:132;;9103:10;9098:3;9094:20;9091:1;9084:31;9138:4;9135:1;9128:15;9166:4;9163:1;9156:15;9049:132;-1:-1:-1;9195:9:1;;8993:217::o;11591:184::-;11661:6;11714:2;11702:9;11693:7;11689:23;11685:32;11682:52;;;11730:1;11727;11720:12;11682:52;-1:-1:-1;11753:16:1;;11591:184;-1:-1:-1;11591:184:1:o;12059:245::-;12126:6;12179:2;12167:9;12158:7;12154:23;12150:32;12147:52;;;12195:1;12192;12185:12;12147:52;12227:9;12221:16;12246:28;12268:5;12246:28;:::i;13141:135::-;13180:3;13201:17;;;13198:43;;13221:18;;:::i;:::-;-1:-1:-1;13268:1:1;13257:13;;13141:135::o;16673:401::-;16875:2;16857:21;;;16914:2;16894:18;;;16887:30;16953:34;16948:2;16933:18;;16926:62;-1:-1:-1;;;17019:2:1;17004:18;;16997:35;17064:3;17049:19;;16673:401::o;17079:399::-;17281:2;17263:21;;;17320:2;17300:18;;;17293:30;17359:34;17354:2;17339:18;;17332:62;-1:-1:-1;;;17425:2:1;17410:18;;17403:33;17468:3;17453:19;;17079:399::o;18671:125::-;18711:4;18739:1;18736;18733:8;18730:34;;;18744:18;;:::i;:::-;-1:-1:-1;18781:9:1;;18671:125::o;21608:582::-;21907:6;21896:9;21889:25;21950:6;21945:2;21934:9;21930:18;21923:34;21993:3;21988:2;21977:9;21973:18;21966:31;21870:4;22014:57;22066:3;22055:9;22051:19;22043:6;22014:57;:::i;:::-;-1:-1:-1;;;;;22107:32:1;;;;22102:2;22087:18;;22080:60;-1:-1:-1;22171:3:1;22156:19;22149:35;22006:65;21608:582;-1:-1:-1;;;21608:582:1:o;22807:306::-;22895:6;22903;22911;22964:2;22952:9;22943:7;22939:23;22935:32;22932:52;;;22980:1;22977;22970:12;22932:52;23009:9;23003:16;22993:26;;23059:2;23048:9;23044:18;23038:25;23028:35;;23103:2;23092:9;23088:18;23082:25;23072:35;;22807:306;;;;;:::o

Swarm Source

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