ETH Price: $3,170.79 (-7.84%)
Gas: 3 Gwei

Token

Ho-Musubi (HMSB)
 

Overview

Max Total Supply

4,029,727,185,829.403990291268986685 HMSB

Holders

25

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
14,981,038.67846324 HMSB

Value
$0.00
0x51cc8d6dbd8877589a1c0bcba5a2e5c05da4a707
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:
HoMusubi

Compiler Version
v0.8.15+commit.e14f2714

Optimization Enabled:
Yes with 600 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-08-10
*/

// SPDX-License-Identifier: MIT

/**

THE JAPANESE GOD OF FIRE CAME TO BRING CHAOS TO THE WORLD!

TAXES | 8% ON BUYS AND 8% ON SELLS, ALL GOES TO TRUE BURN!

MAX WALLET 2% - MAX BUY 2% - MAX SELL 1%

https://ho-musubi.com

https://twitter.com/Ho_Musubi_Token

https://t.me/homusubi

*/

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 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

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

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

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

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

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

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

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

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

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

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

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

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    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 HoMusubi is ERC20, Ownable {

    uint256 public maxBuyAmount;
    uint256 public maxSellAmount;
    uint256 public maxWalletAmount;

    IDexRouter public dexRouter;
    address public lpPair;

    bool private swapping;
    uint256 public swapTokensAtAmount;

    address operationsAddress;
    address devAddress;

    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 buyOperationsFee;
    uint256 public buyLiquidityFee;
    uint256 public buyDevFee;
    uint256 public buyBurnFee;

    uint256 public sellTotalFees;
    uint256 public sellOperationsFee;
    uint256 public sellLiquidityFee;
    uint256 public sellDevFee;
    uint256 public sellBurnFee;

    uint256 public tokensForOperations;
    uint256 public tokensForLiquidity;
    uint256 public tokensForDev;
    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 UpdatedMaxBuyAmount(uint256 newAmount);

    event UpdatedMaxSellAmount(uint256 newAmount);

    event UpdatedMaxWalletAmount(uint256 newAmount);

    event UpdatedOperationsAddress(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("Ho-Musubi", "HMSB") {

        address newOwner = msg.sender; // can leave alone if owner is deployer.

        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 = 5 * 1e12 * 1e18;

        maxBuyAmount = totalSupply * 2 / 100;
        maxSellAmount = totalSupply * 1 / 100;
        maxWalletAmount = totalSupply * 2 / 100;
        swapTokensAtAmount = totalSupply * 5 / 10000;

        buyOperationsFee = 0;
        buyLiquidityFee = 0;
        buyDevFee = 0;
        buyBurnFee = 8;
        buyTotalFees = buyOperationsFee + buyLiquidityFee + buyDevFee + buyBurnFee;

        sellOperationsFee = 0;
        sellLiquidityFee = 0;
        sellDevFee = 0;
        sellBurnFee = 8;
        sellTotalFees = sellOperationsFee + sellLiquidityFee + sellDevFee + sellBurnFee;

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

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

        operationsAddress = address(newOwner);
        devAddress = address(newOwner);

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

    receive() external payable {}

    // only enable if no plan to airdrop

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

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

    function removeBoughtEarly(address wallet) external onlyOwner {
        require(boughtEarly[wallet], "Wallet is already not flagged.");
        boughtEarly[wallet] = false;
    }

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

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

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

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

    // 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 airdropToWallets(address[] memory wallets, uint256[] memory amountsInTokens) external onlyOwner {
        require(wallets.length == amountsInTokens.length, "arrays must be the same length");
        require(wallets.length < 600, "Can only airdrop 600 wallets per txn due to gas limits"); // allows for airdrop + launch at the same exact time, reducing delays and reducing sniper input.
        for(uint256 i = 0; i < wallets.length; i++){
            address wallet = wallets[i];
            uint256 amount = amountsInTokens[i];
            super._transfer(msg.sender, wallet, amount);
        }
    }

    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 _operationsFee, uint256 _liquidityFee, uint256 _devFee, uint256 _burnFee) external onlyOwner {
        buyOperationsFee = _operationsFee;
        buyLiquidityFee = _liquidityFee;
        buyDevFee = _devFee;
        buyBurnFee = _burnFee;
        buyTotalFees = buyOperationsFee + buyLiquidityFee + buyDevFee + buyBurnFee;
        require(buyTotalFees <= 15, "Must keep fees at 15% or less");
    }

    function updateSellFees(uint256 _operationsFee, uint256 _liquidityFee, uint256 _devFee, uint256 _burnFee) external onlyOwner {
        sellOperationsFee = _operationsFee;
        sellLiquidityFee = _liquidityFee;
        sellDevFee = _devFee;
        sellBurnFee = _burnFee;
        sellTotalFees = sellOperationsFee + sellLiquidityFee + sellDevFee + sellBurnFee;
        require(sellTotalFees <= 20, "Must keep fees at 20% or less");
    }

    function returnToNormalTax() external onlyOwner {
        sellOperationsFee = 0;
        sellLiquidityFee = 0;
        sellDevFee = 0;
        sellBurnFee = 8;
        sellTotalFees = sellOperationsFee + sellLiquidityFee + sellDevFee + sellBurnFee;
        require(sellTotalFees <= 20, "Must keep fees at 20% or less");

        buyOperationsFee = 0;
        buyLiquidityFee = 0;
        buyDevFee = 0;
        buyBurnFee = 8;
        buyTotalFees = buyOperationsFee + buyLiquidityFee + buyDevFee + buyBurnFee;
        require(buyTotalFees <= 15, "Must keep fees at 15% or less");
    }

    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(!earlyBuyPenaltyInEffect() && 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 <= maxBuyAmount, "Buy transfer amount exceeds the max buy.");
                        require(amount + balanceOf(to) <= maxWalletAmount, "Cannot Exceed max wallet");
                }
                //when sell
                else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) {
                        require(amount <= maxSellAmount, "Sell transfer amount exceeds the max sell.");
                }
                else if (!_isExcludedMaxTransactionAmount[to]){
                    require(amount + balanceOf(to) <= maxWalletAmount, "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 * buyTotalFees / 100;
        	    tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees;
                tokensForOperations += fees * buyOperationsFee / buyTotalFees;
                tokensForDev += fees * buyDevFee / buyTotalFees;
                tokensForBurn += fees * buyBurnFee / buyTotalFees;
            }

            // on sell
            else if (automatedMarketMakerPairs[to] && sellTotalFees > 0){
                fees = amount * sellTotalFees / 100;
                tokensForLiquidity += fees * sellLiquidityFee / sellTotalFees;
                tokensForOperations += fees * sellOperationsFee / sellTotalFees;
                tokensForDev += fees * sellDevFee / sellTotalFees;
                tokensForBurn += fees * sellBurnFee / sellTotalFees;
            }

            // on buy
            else if(automatedMarketMakerPairs[from] && buyTotalFees > 0) {
        	    fees = amount * buyTotalFees / 100;
        	    tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees;
                tokensForOperations += fees * buyOperationsFee / buyTotalFees;
                tokensForDev += fees * buyDevFee / 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 + tokensForOperations + tokensForDev;

        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 ethForOperations = ethBalance * tokensForOperations / (totalTokensToSwap - (tokensForLiquidity/2));
        uint256 ethForDev = ethBalance * tokensForDev / (totalTokensToSwap - (tokensForLiquidity/2));

        ethForLiquidity -= ethForOperations + ethForDev;

        tokensForLiquidity = 0;
        tokensForOperations = 0;
        tokensForDev = 0;
        tokensForBurn = 0;

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

        (success,) = address(devAddress).call{value: ethForDev}("");

        (success,) = address(operationsAddress).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 if stuck or someone sends to the address
    function withdrawStuckETH() external onlyOwner {
        bool success;
        (success,) = address(msg.sender).call{value: address(this).balance}("");
    }

    function setOperationsAddress(address _operationsAddress) external onlyOwner {
        require(_operationsAddress != address(0), "_operationsAddress address cannot be 0");
        operationsAddress = payable(_operationsAddress);
    }

    function setDevAddress(address _devAddress) external onlyOwner {
        require(_devAddress != address(0), "_devAddress address cannot be 0");
        devAddress = payable(_devAddress);
    }

    // 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 buyBackTokens(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);

        // make the swap
        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":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxBuyAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxSellAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxWalletAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"}],"name":"UpdatedOperationsAddress","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"wallets","type":"address[]"},{"internalType":"uint256[]","name":"amountsInTokens","type":"uint256[]"}],"name":"airdropToWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"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":[],"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":"buyBackTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyBurnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevFee","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":"buyOperationsFee","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":"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":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","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":[],"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":"maxBuyAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","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":[{"internalType":"address","name":"wallet","type":"address"}],"name":"removeBoughtEarly","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"returnToNormalTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellBurnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellDevFee","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":"sellOperationsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_devAddress","type":"address"}],"name":"setDevAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_operationsAddress","type":"address"}],"name":"setOperationsAddress","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":"tokensForDev","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":"tokensForOperations","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":"_operationsFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"},{"internalType":"uint256","name":"_burnFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxBuyAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxSellAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_operationsFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","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":[],"name":"withdrawStuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526000600e556012805462ffffff191660019081179091556014805460ff191690911790553480156200003557600080fd5b5060405180604001604052806009815260200168486f2d4d757375626960b81b815250604051806040016040528060048152602001632426a9a160e11b815250816003908162000086919062000850565b50600462000095828262000850565b5050506000620000aa6200044860201b60201c565b600580546001600160a01b0319166001600160a01b0383169081179091556040519192509060009060008051602062004ade833981519152908290a350600980546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d9081179091556040805163c45a015560e01b81529051339291829163c45a0155916004808201926020929091908290030181865afa15801562000151573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200017791906200091c565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001c5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001eb91906200091c565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000239573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200025f91906200091c565b600a80546001600160a01b0319166001600160a01b039290921691821790556200028b9060016200044c565b600a54620002a4906001600160a01b03166001620004af565b6c3f1bdf10116048a593400000006064620002c182600262000964565b620002cd919062000986565b6006556064620002df82600162000964565b620002eb919062000986565b6007556064620002fd82600262000964565b62000309919062000986565b6008556127106200031c82600562000964565b62000328919062000986565b600b5560006016819055601781905560188190556008601981905590620003508180620009a9565b6200035c9190620009a9565b620003689190620009a9565b6015556000601b819055601c819055601d8190556008601e81905590620003908180620009a9565b6200039c9190620009a9565b620003a89190620009a9565b601a55620003b88360016200044c565b620003c53060016200044c565b620003d461dead60016200044c565b620003e18360016200051b565b620003ee3060016200051b565b620003fd61dead60016200051b565b600c80546001600160a01b0385166001600160a01b03199182168117909255600d80549091169091179055620004348382620005c9565b6200043f83620006ae565b505050620009c4565b3390565b6001600160a01b038216600081815260246020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6001600160a01b0382166000908152602560205260409020805460ff1916821515179055620004df82826200044c565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6005546001600160a01b031633146200056a5760405162461bcd60e51b8152602060048201819052602482015260008051602062004abe83398151915260448201526064015b60405180910390fd5b6001600160a01b038216600081815260236020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b038216620006215760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640162000561565b8060026000828254620006359190620009a9565b90915550506001600160a01b0382166000908152602081905260408120805483929062000664908490620009a9565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005546001600160a01b03163314620006f95760405162461bcd60e51b8152602060048201819052602482015260008051602062004abe833981519152604482015260640162000561565b6001600160a01b038116620007605760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840162000561565b6005546040516001600160a01b0380841692169060008051602062004ade83398151915290600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620007d657607f821691505b602082108103620007f757634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200084b57600081815260208120601f850160051c81016020861015620008265750805b601f850160051c820191505b81811015620008475782815560010162000832565b5050505b505050565b81516001600160401b038111156200086c576200086c620007ab565b62000884816200087d8454620007c1565b84620007fd565b602080601f831160018114620008bc5760008415620008a35750858301515b600019600386901b1c1916600185901b17855562000847565b600085815260208120601f198616915b82811015620008ed57888601518255948401946001909101908401620008cc565b50858210156200090c5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000602082840312156200092f57600080fd5b81516001600160a01b03811681146200094757600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b60008160001904831182151516156200098157620009816200094e565b500290565b600082620009a457634e487b7160e01b600052601260045260246000fd5b500490565b60008219821115620009bf57620009bf6200094e565b500190565b6140ea80620009d46000396000f3fe6080604052600436106103fd5760003560e01c80638da5cb5b1161020d578063d0d41fe111610128578063e7ad9fcd116100bb578063f2fde38b1161008a578063f63743421161006f578063f637434214610b57578063fb002c9714610b6d578063fc155d1d14610b8357600080fd5b8063f2fde38b14610b22578063f5648a4f14610b4257600080fd5b8063e7ad9fcd14610ac1578063e884f26014610ae1578063ee40166e14610af6578063f11a24d314610b0c57600080fd5b8063dd62ed3e116100f7578063dd62ed3e14610a3a578063e2cd5fcd14610a80578063e2f4560514610a95578063e71dc3f514610aab57600080fd5b8063d0d41fe1146109c4578063d257b34f146109e4578063d85ba06314610a04578063dc3f0d0f14610a1a57600080fd5b8063a9059cbb116101a0578063bbc0c7421161016f578063bbc0c7421461094b578063c02466681461096a578063c18bc1951461098a578063c876d0b9146109aa57600080fd5b8063a9059cbb146108cf578063aa4bde28146108ef578063adb873bd14610905578063b62496f51461091b57600080fd5b80639fccce32116101dc5780639fccce321461086d578063a0d82dc514610883578063a457c2d714610899578063a62068ce146108b957600080fd5b80638da5cb5b1461080457806395d89b41146108225780639a7a23d6146108375780639c3b4fdc1461085757600080fd5b80634f77f6c0116103185780636ddd1713116102ab5780637571336a1161027a57806385ecfd281161025f57806385ecfd28146107a957806388e765ff146107d95780638a8c523c146107ef57600080fd5b80637571336a146107695780638366e79a1461078957600080fd5b80636ddd1713146106e957806370a0823114610709578063715018a61461073f578063751039fc1461075457600080fd5b80635bb988c9116102e75780635bb988c91461068757806366d602ae146106a75780636a486a8e146106bd5780636b0a894c146106d357600080fd5b80634f77f6c01461062f57806351f205e41461064557806358a6d5311461065a5780635a139dd41461067157600080fd5b806323b872dd11610390578063395093511161035f57806339509351146105b5578063452ed4f1146105d5578063499b8394146105f55780634a62bb651461061557600080fd5b806323b872dd146105395780632be32b61146105595780632e6ed7ef14610579578063313ce5671461059957600080fd5b806318160ddd116103cc57806318160ddd146104cc5780631a8145bb146104eb5780631d777856146105015780632307b4411461051757600080fd5b806306fdde03146104095780630758d92414610434578063095ea7b31461046c57806310d5de531461049c57600080fd5b3661040457005b600080fd5b34801561041557600080fd5b5061041e610ba3565b60405161042b9190613b19565b60405180910390f35b34801561044057600080fd5b50600954610454906001600160a01b031681565b6040516001600160a01b03909116815260200161042b565b34801561047857600080fd5b5061048c610487366004613b86565b610c35565b604051901515815260200161042b565b3480156104a857600080fd5b5061048c6104b7366004613bb2565b60246020526000908152604090205460ff1681565b3480156104d857600080fd5b506002545b60405190815260200161042b565b3480156104f757600080fd5b506104dd60205481565b34801561050d57600080fd5b506104dd60225481565b34801561052357600080fd5b50610537610532366004613cac565b610c4b565b005b34801561054557600080fd5b5061048c610554366004613d6e565b610dce565b34801561056557600080fd5b50610537610574366004613daf565b610e78565b34801561058557600080fd5b50610537610594366004613dc8565b610fa3565b3480156105a557600080fd5b506040516012815260200161042b565b3480156105c157600080fd5b5061048c6105d0366004613b86565b61107a565b3480156105e157600080fd5b50600a54610454906001600160a01b031681565b34801561060157600080fd5b50610537610610366004613bb2565b6110b6565b34801561062157600080fd5b5060125461048c9060ff1681565b34801561063b57600080fd5b506104dd601b5481565b34801561065157600080fd5b50610537611185565b34801561066657600080fd5b50600f54431061048c565b34801561067d57600080fd5b506104dd60165481565b34801561069357600080fd5b506105376106a2366004613bb2565b6112b3565b3480156106b357600080fd5b506104dd60075481565b3480156106c957600080fd5b506104dd601a5481565b3480156106df57600080fd5b506104dd60115481565b3480156106f557600080fd5b5060125461048c9062010000900460ff1681565b34801561071557600080fd5b506104dd610724366004613bb2565b6001600160a01b031660009081526020819052604090205490565b34801561074b57600080fd5b50610537611384565b34801561076057600080fd5b50610537611416565b34801561077557600080fd5b50610537610784366004613e08565b61149f565b34801561079557600080fd5b5061048c6107a4366004613e41565b611585565b3480156107b557600080fd5b5061048c6107c4366004613bb2565b60106020526000908152604090205460ff1681565b3480156107e557600080fd5b506104dd60065481565b3480156107fb57600080fd5b506105376117ac565b34801561081057600080fd5b506005546001600160a01b0316610454565b34801561082e57600080fd5b5061041e61189c565b34801561084357600080fd5b50610537610852366004613e08565b6118ab565b34801561086357600080fd5b506104dd60185481565b34801561087957600080fd5b506104dd60215481565b34801561088f57600080fd5b506104dd601d5481565b3480156108a557600080fd5b5061048c6108b4366004613b86565b6119bd565b3480156108c557600080fd5b506104dd600f5481565b3480156108db57600080fd5b5061048c6108ea366004613b86565b611a56565b3480156108fb57600080fd5b506104dd60085481565b34801561091157600080fd5b506104dd601e5481565b34801561092757600080fd5b5061048c610936366004613bb2565b60256020526000908152604090205460ff1681565b34801561095757600080fd5b5060125461048c90610100900460ff1681565b34801561097657600080fd5b50610537610985366004613e08565b611a63565b34801561099657600080fd5b506105376109a5366004613daf565b611b0a565b3480156109b657600080fd5b5060145461048c9060ff1681565b3480156109d057600080fd5b506105376109df366004613bb2565b611c42565b3480156109f057600080fd5b506105376109ff366004613daf565b611d02565b348015610a1057600080fd5b506104dd60155481565b348015610a2657600080fd5b50610537610a35366004613daf565b611e7c565b348015610a4657600080fd5b506104dd610a55366004613e41565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610a8c57600080fd5b50610537611fa1565b348015610aa157600080fd5b506104dd600b5481565b348015610ab757600080fd5b506104dd60195481565b348015610acd57600080fd5b50610537610adc366004613dc8565b612103565b348015610aed57600080fd5b506105376121d4565b348015610b0257600080fd5b506104dd600e5481565b348015610b1857600080fd5b506104dd60175481565b348015610b2e57600080fd5b50610537610b3d366004613bb2565b612228565b348015610b4e57600080fd5b50610537612331565b348015610b6357600080fd5b506104dd601c5481565b348015610b7957600080fd5b506104dd601f5481565b348015610b8f57600080fd5b50610537610b9e366004613daf565b6123bb565b606060038054610bb290613e6f565b80601f0160208091040260200160405190810160405280929190818152602001828054610bde90613e6f565b8015610c2b5780601f10610c0057610100808354040283529160200191610c2b565b820191906000526020600020905b815481529060010190602001808311610c0e57829003601f168201915b5050505050905090565b6000610c4233848461261d565b50600192915050565b6005546001600160a01b03163314610c985760405162461bcd60e51b8152602060048201819052602482015260008051602061409583398151915260448201526064015b60405180910390fd5b8051825114610ce95760405162461bcd60e51b815260206004820152601e60248201527f617272617973206d757374206265207468652073616d65206c656e67746800006044820152606401610c8f565b610258825110610d615760405162461bcd60e51b815260206004820152603660248201527f43616e206f6e6c792061697264726f70203630302077616c6c6574732070657260448201527f2074786e2064756520746f20676173206c696d697473000000000000000000006064820152608401610c8f565b60005b8251811015610dc9576000838281518110610d8157610d81613ea9565b602002602001015190506000838381518110610d9f57610d9f613ea9565b60200260200101519050610db4338383612742565b50508080610dc190613ed5565b915050610d64565b505050565b6000610ddb848484612911565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610e605760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610c8f565b610e6d853385840361261d565b506001949350505050565b6005546001600160a01b03163314610ec05760405162461bcd60e51b815260206004820181905260248201526000805160206140958339815191526044820152606401610c8f565b670de0b6b3a76400006103e8610ed560025490565b610ee0906002613eee565b610eea9190613f0d565b610ef49190613f0d565b811015610f555760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152687468616e20302e322560b81b6064820152608401610c8f565b610f6781670de0b6b3a7640000613eee565b60068190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de41009906020015b60405180910390a150565b6005546001600160a01b03163314610feb5760405162461bcd60e51b815260206004820181905260248201526000805160206140958339815191526044820152606401610c8f565b6016849055601783905560188290556019819055808261100b8587613f2f565b6110159190613f2f565b61101f9190613f2f565b6015819055600f10156110745760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313525206f72206c6573730000006044820152606401610c8f565b50505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610c429185906110b1908690613f2f565b61261d565b6005546001600160a01b031633146110fe5760405162461bcd60e51b815260206004820181905260248201526000805160206140958339815191526044820152606401610c8f565b6001600160a01b0381166111635760405162461bcd60e51b815260206004820152602660248201527f5f6f7065726174696f6e734164647265737320616464726573732063616e6e6f60448201526507420626520360d41b6064820152608401610c8f565b600c80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146111cd5760405162461bcd60e51b815260206004820181905260248201526000805160206140958339815191526044820152606401610c8f565b600b54306000908152602081905260409020541015611256576040805162461bcd60e51b81526020600482015260248101919091527f43616e206f6e6c792073776170207768656e20746f6b656e20616d6f756e742060448201527f6973206174206f7220686967686572207468616e207265737472696374696f6e6064820152608401610c8f565b600a805460ff60a01b1916600160a01b17905561127161350f565b600a805460ff60a01b191690556040514281527f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb329060200160405180910390a1565b6005546001600160a01b031633146112fb5760405162461bcd60e51b815260206004820181905260248201526000805160206140958339815191526044820152606401610c8f565b6001600160a01b03811660009081526010602052604090205460ff166113635760405162461bcd60e51b815260206004820152601e60248201527f57616c6c657420697320616c7265616479206e6f7420666c61676765642e00006044820152606401610c8f565b6001600160a01b03166000908152601060205260409020805460ff19169055565b6005546001600160a01b031633146113cc5760405162461bcd60e51b815260206004820181905260248201526000805160206140958339815191526044820152606401610c8f565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b0316331461145e5760405162461bcd60e51b815260206004820181905260248201526000805160206140958339815191526044820152606401610c8f565b6012805460ff199081169091556014805490911690556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6005546001600160a01b031633146114e75760405162461bcd60e51b815260206004820181905260248201526000805160206140958339815191526044820152606401610c8f565b8061155a57600a546001600160a01b039081169083160361155a5760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610c8f565b6001600160a01b03919091166000908152602460205260409020805460ff1916911515919091179055565b6005546000906001600160a01b031633146115d05760405162461bcd60e51b815260206004820181905260248201526000805160206140958339815191526044820152606401610c8f565b6001600160a01b0383166116265760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610c8f565b306001600160a01b0384160361167e5760405162461bcd60e51b815260206004820152601c60248201527f43616e2774207769746864726177206e617469766520746f6b656e73000000006044820152606401610c8f565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa1580156116c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116e99190613f47565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303816000875af115801561173c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117609190613f60565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b6005546001600160a01b031633146117f45760405162461bcd60e51b815260206004820181905260248201526000805160206140958339815191526044820152606401610c8f565b601254610100900460ff161561184c5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610c8f565b6012805462ffff0019166201010017905543600e81905561186e906001613f2f565b600f556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a1565b606060048054610bb290613e6f565b6005546001600160a01b031633146118f35760405162461bcd60e51b815260206004820181905260248201526000805160206140958339815191526044820152606401610c8f565b600a546001600160a01b03908116908316036119775760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610c8f565b6119818282613759565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b3360009081526001602090815260408083206001600160a01b038616845290915281205482811015611a3f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610c8f565b611a4c338585840361261d565b5060019392505050565b6000610c42338484612911565b6005546001600160a01b03163314611aab5760405162461bcd60e51b815260206004820181905260248201526000805160206140958339815191526044820152606401610c8f565b6001600160a01b038216600081815260236020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b03163314611b525760405162461bcd60e51b815260206004820181905260248201526000805160206140958339815191526044820152606401610c8f565b670de0b6b3a76400006103e8611b6760025490565b611b72906003613eee565b611b7c9190613f0d565b611b869190613f0d565b811015611bfb5760405162461bcd60e51b815260206004820152602c60248201527f43616e6e6f7420736574206d61782077616c6c657420616d6f756e74206c6f7760448201527f6572207468616e20302e332500000000000000000000000000000000000000006064820152608401610c8f565b611c0d81670de0b6b3a7640000613eee565b60088190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc90602001610f98565b6005546001600160a01b03163314611c8a5760405162461bcd60e51b815260206004820181905260248201526000805160206140958339815191526044820152606401610c8f565b6001600160a01b038116611ce05760405162461bcd60e51b815260206004820152601f60248201527f5f6465764164647265737320616464726573732063616e6e6f742062652030006044820152606401610c8f565b600d80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314611d4a5760405162461bcd60e51b815260206004820181905260248201526000805160206140958339815191526044820152606401610c8f565b620186a0611d5760025490565b611d62906001613eee565b611d6c9190613f0d565b811015611de15760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527f20302e3030312520746f74616c20737570706c792e00000000000000000000006064820152608401610c8f565b6103e8611ded60025490565b611df8906001613eee565b611e029190613f0d565b811115611e775760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160448201527f6e20302e312520746f74616c20737570706c792e0000000000000000000000006064820152608401610c8f565b600b55565b6005546001600160a01b03163314611ec45760405162461bcd60e51b815260206004820181905260248201526000805160206140958339815191526044820152606401610c8f565b670de0b6b3a76400006103e8611ed960025490565b611ee4906002613eee565b611eee9190613f0d565b611ef89190613f0d565b811015611f5a5760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015269207468616e20302e322560b01b6064820152608401610c8f565b611f6c81670de0b6b3a7640000613eee565b60078190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e90602001610f98565b6005546001600160a01b03163314611fe95760405162461bcd60e51b815260206004820181905260248201526000805160206140958339815191526044820152606401610c8f565b6000601b819055601c819055601d8190556008601e8190559061200c8180613f2f565b6120169190613f2f565b6120209190613f2f565b601a819055601410156120755760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323025206f72206c6573730000006044820152606401610c8f565b600060168190556017819055601881905560086019819055906120988180613f2f565b6120a29190613f2f565b6120ac9190613f2f565b6015819055600f10156121015760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313525206f72206c6573730000006044820152606401610c8f565b565b6005546001600160a01b0316331461214b5760405162461bcd60e51b815260206004820181905260248201526000805160206140958339815191526044820152606401610c8f565b601b849055601c839055601d829055601e819055808261216b8587613f2f565b6121759190613f2f565b61217f9190613f2f565b601a819055601410156110745760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323025206f72206c6573730000006044820152606401610c8f565b6005546001600160a01b0316331461221c5760405162461bcd60e51b815260206004820181905260248201526000805160206140958339815191526044820152606401610c8f565b6014805460ff19169055565b6005546001600160a01b031633146122705760405162461bcd60e51b815260206004820181905260248201526000805160206140958339815191526044820152606401610c8f565b6001600160a01b0381166122d55760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c8f565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146123795760405162461bcd60e51b815260206004820181905260248201526000805160206140958339815191526044820152606401610c8f565b604051600090339047908381818185875af1925050503d8060008114611074576040519150601f19603f3d011682016040523d82523d6000602084013e611074565b6005546001600160a01b031633146124035760405162461bcd60e51b815260206004820181905260248201526000805160206140958339815191526044820152606401610c8f565b678ac7230489e800008111156124915760405162461bcd60e51b815260206004820152604760248201527f4d6179206e6f7420627579206d6f7265207468616e2031302045544820696e2060448201527f612073696e676c652062757920746f207265647563652073616e64776963682060648201526661747461636b7360c81b608482015260a401610c8f565b6040805160028082526060820183526000926020830190803683375050600954604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa1580156124fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061251f9190613f7d565b8160008151811061253257612532613ea9565b60200260200101906001600160a01b031690816001600160a01b031681525050308160018151811061256657612566613ea9565b6001600160a01b03928316602091820292909201015260095460405163b6f9de9560e01b815291169063b6f9de959084906125ae90600090869061dead904290600401613fde565b6000604051808303818588803b1580156125c757600080fd5b505af11580156125db573d6000803e3d6000fd5b50505050507fa017c1567cfcdd2d750a8c01e39fe2a846bcebc293c7d078477014d6848205688260405161261191815260200190565b60405180910390a15050565b6001600160a01b03831661267f5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610c8f565b6001600160a01b0382166126e05760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610c8f565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0383166127a65760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610c8f565b6001600160a01b0382166128085760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610c8f565b6001600160a01b038316600090815260208190526040902054818110156128805760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610c8f565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906128b7908490613f2f565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161290391815260200190565b60405180910390a350505050565b6001600160a01b0383166129755760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610c8f565b6001600160a01b0382166129d75760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610c8f565b60008111612a275760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610c8f565b601254610100900460ff16612ac1576001600160a01b03831660009081526023602052604090205460ff1680612a7557506001600160a01b03821660009081526023602052604090205460ff165b612ac15760405162461bcd60e51b815260206004820152601660248201527f54726164696e67206973206e6f74206163746976652e000000000000000000006044820152606401610c8f565b600f544310158015612ad557506000600f54115b15612ba5576001600160a01b03831660009081526010602052604090205460ff161580612b0f57506005546001600160a01b038381169116145b80612b2457506001600160a01b03821661dead145b612ba55760405162461bcd60e51b815260206004820152604660248201527f426f74732063616e6e6f74207472616e7366657220746f6b656e7320696e206f60448201527f72206f75742065786365707420746f206f776e6572206f722064656164206164606482015265323932b9b99760d11b608482015260a401610c8f565b60125460ff1615612fd3576005546001600160a01b03848116911614801590612bdc57506005546001600160a01b03838116911614155b8015612bf057506001600160a01b03821615155b8015612c0757506001600160a01b03821661dead14155b8015612c2c57506001600160a01b03831660009081526023602052604090205460ff16155b8015612c5157506001600160a01b03821660009081526023602052604090205460ff16155b15612fd35760145460ff1615612d72576009546001600160a01b03838116911614801590612c8d5750600a546001600160a01b03838116911614155b15612d7257612c9d600243614013565b32600090815260136020526040902054108015612cdb5750612cc0600243614013565b6001600160a01b038316600090815260136020526040902054105b612d4d5760405162461bcd60e51b815260206004820152603560248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527f65642e202054727920616761696e206c617465722e00000000000000000000006064820152608401610c8f565b3260009081526013602052604080822043908190556001600160a01b03851683529120555b6001600160a01b03831660009081526025602052604090205460ff168015612db357506001600160a01b03821660009081526024602052604090205460ff16155b15612e9457600654811115612e1b5760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610c8f565b6008546001600160a01b038316600090815260208190526040902054612e419083613f2f565b1115612e8f5760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420457863656564206d61782077616c6c657400000000000000006044820152606401610c8f565b612fd3565b6001600160a01b03821660009081526025602052604090205460ff168015612ed557506001600160a01b03831660009081526024602052604090205460ff16155b15612f3f57600754811115612e8f5760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610c8f565b6001600160a01b03821660009081526024602052604090205460ff16612fd3576008546001600160a01b038316600090815260208190526040902054612f859083613f2f565b1115612fd35760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420457863656564206d61782077616c6c657400000000000000006044820152606401610c8f565b30600090815260208190526040902054600b5481108015908190612fff575060125462010000900460ff165b80156130155750600a54600160a01b900460ff16155b801561303a57506001600160a01b03851660009081526025602052604090205460ff16155b801561305f57506001600160a01b03851660009081526023602052604090205460ff16155b801561308457506001600160a01b03841660009081526023602052604090205460ff16155b156130b257600a805460ff60a01b1916600160a01b1790556130a461350f565b600a805460ff60a01b191690555b6001600160a01b03851660009081526023602052604090205460019060ff16806130f457506001600160a01b03851660009081526023602052604090205460ff165b156130fd575060005b600081156134fb57600f544310801561312e57506001600160a01b03871660009081526025602052604090205460ff165b801561315357506001600160a01b03861660009081526025602052604090205460ff16155b801561316157506000601554115b156132e4576001600160a01b03861660009081526010602052604090205460ff16613201576001600160a01b0386166000908152601060205260408120805460ff1916600190811790915560118054919290916131bf908490613f2f565b90915550506040516001600160a01b03871681527f55678e47d0a699d3ab99b0184c4ff14f2246ba80522deb921aa0c8823578c44a9060200160405180910390a15b6064601554866132119190613eee565b61321b9190613f0d565b90506015546017548261322e9190613eee565b6132389190613f0d565b602060008282546132499190613f2f565b909155505060155460165461325e9083613eee565b6132689190613f0d565b601f60008282546132799190613f2f565b909155505060155460185461328e9083613eee565b6132989190613f0d565b602160008282546132a99190613f2f565b90915550506015546019546132be9083613eee565b6132c89190613f0d565b602260008282546132d99190613f2f565b909155506134dd9050565b6001600160a01b03861660009081526025602052604090205460ff16801561330e57506000601a54115b156133d0576064601a54866133239190613eee565b61332d9190613f0d565b9050601a54601c54826133409190613eee565b61334a9190613f0d565b6020600082825461335b9190613f2f565b9091555050601a54601b546133709083613eee565b61337a9190613f0d565b601f600082825461338b9190613f2f565b9091555050601a54601d546133a09083613eee565b6133aa9190613f0d565b602160008282546133bb9190613f2f565b9091555050601a54601e546132be9083613eee565b6001600160a01b03871660009081526025602052604090205460ff1680156133fa57506000601554115b156134dd5760646015548661340f9190613eee565b6134199190613f0d565b90506015546017548261342c9190613eee565b6134369190613f0d565b602060008282546134479190613f2f565b909155505060155460165461345c9083613eee565b6134669190613f0d565b601f60008282546134779190613f2f565b909155505060155460185461348c9083613eee565b6134969190613f0d565b602160008282546134a79190613f2f565b90915550506015546019546134bc9083613eee565b6134c69190613f0d565b602260008282546134d79190613f2f565b90915550505b80156134ee576134ee873083612742565b6134f88186614013565b94505b613506878787612742565b50505050505050565b600060225411801561353257506022543060009081526020819052604090205410155b156135435761354330602254613787565b600060228190553081526020819052604081205490506000602154601f5460205461356e9190613f2f565b6135789190613f2f565b9050811580613585575080155b1561358e575050565b600b5461359c906014613eee565b8211156135b457600b546135b1906014613eee565b91505b600080600283602054866135c89190613eee565b6135d29190613f0d565b6135dc9190613f0d565b90506135f06135eb8286614013565b6138b1565b6020544790819060009061360690600290613f0d565b6136109087614013565b601f5461361d9085613eee565b6136279190613f0d565b90506000600260205461363a9190613f0d565b6136449088614013565b6021546136519086613eee565b61365b9190613f0d565b90506136678183613f2f565b6136719084614013565b60006020819055601f8190556021819055602255925084158015906136965750600083115b156136a5576136a58584613a0b565b600d546040516001600160a01b03909116908290600081818185875af1925050503d80600081146136f2576040519150601f19603f3d011682016040523d82523d6000602084013e6136f7565b606091505b5050600c546040519197506001600160a01b0316904790600081818185875af1925050503d8060008114613747576040519150601f19603f3d011682016040523d82523d6000602084013e61374c565b606091505b5050505050505050505050565b6001600160a01b0382166000908152602560205260409020805460ff19168215151790556119818282613abd565b6001600160a01b0382166137e75760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610c8f565b6001600160a01b0382166000908152602081905260409020548181101561385b5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610c8f565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101612735565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106138e6576138e6613ea9565b6001600160a01b03928316602091820292909201810191909152600954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa15801561393f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139639190613f7d565b8160018151811061397657613976613ea9565b6001600160a01b03928316602091820292909201015260095461399c913091168461261d565b60095460405163791ac94760e01b81526001600160a01b039091169063791ac947906139d590859060009086903090429060040161402a565b600060405180830381600087803b1580156139ef57600080fd5b505af1158015613a03573d6000803e3d6000fd5b505050505050565b600954613a239030906001600160a01b03168461261d565b60095460405163f305d71960e01b815230600482015260248101849052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af1158015613a91573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613ab69190614066565b5050505050565b6001600160a01b038216600081815260246020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd67469101612611565b600060208083528351808285015260005b81811015613b4657858101830151858201604001528201613b2a565b81811115613b58576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114613b8357600080fd5b50565b60008060408385031215613b9957600080fd5b8235613ba481613b6e565b946020939093013593505050565b600060208284031215613bc457600080fd5b8135613bcf81613b6e565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715613c1557613c15613bd6565b604052919050565b600067ffffffffffffffff821115613c3757613c37613bd6565b5060051b60200190565b600082601f830112613c5257600080fd5b81356020613c67613c6283613c1d565b613bec565b82815260059290921b84018101918181019086841115613c8657600080fd5b8286015b84811015613ca15780358352918301918301613c8a565b509695505050505050565b60008060408385031215613cbf57600080fd5b823567ffffffffffffffff80821115613cd757600080fd5b818501915085601f830112613ceb57600080fd5b81356020613cfb613c6283613c1d565b82815260059290921b84018101918181019089841115613d1a57600080fd5b948201945b83861015613d41578535613d3281613b6e565b82529482019490820190613d1f565b96505086013592505080821115613d5757600080fd5b50613d6485828601613c41565b9150509250929050565b600080600060608486031215613d8357600080fd5b8335613d8e81613b6e565b92506020840135613d9e81613b6e565b929592945050506040919091013590565b600060208284031215613dc157600080fd5b5035919050565b60008060008060808587031215613dde57600080fd5b5050823594602084013594506040840135936060013592509050565b8015158114613b8357600080fd5b60008060408385031215613e1b57600080fd5b8235613e2681613b6e565b91506020830135613e3681613dfa565b809150509250929050565b60008060408385031215613e5457600080fd5b8235613e5f81613b6e565b91506020830135613e3681613b6e565b600181811c90821680613e8357607f821691505b602082108103613ea357634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201613ee757613ee7613ebf565b5060010190565b6000816000190483118215151615613f0857613f08613ebf565b500290565b600082613f2a57634e487b7160e01b600052601260045260246000fd5b500490565b60008219821115613f4257613f42613ebf565b500190565b600060208284031215613f5957600080fd5b5051919050565b600060208284031215613f7257600080fd5b8151613bcf81613dfa565b600060208284031215613f8f57600080fd5b8151613bcf81613b6e565b600081518084526020808501945080840160005b83811015613fd35781516001600160a01b031687529582019590820190600101613fae565b509495945050505050565b848152608060208201526000613ff76080830186613f9a565b6001600160a01b03949094166040830152506060015292915050565b60008282101561402557614025613ebf565b500390565b85815284602082015260a06040820152600061404960a0830186613f9a565b6001600160a01b0394909416606083015250608001529392505050565b60008060006060848603121561407b57600080fd5b835192506020840151915060408401519050925092509256fe4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a2646970667358221220a83d028a6a38e47f31a8c15e39da93ff8d72e4429d32b7cd16622ec8a3d5544c64736f6c634300080f00334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65728be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0

Deployed Bytecode

0x6080604052600436106103fd5760003560e01c80638da5cb5b1161020d578063d0d41fe111610128578063e7ad9fcd116100bb578063f2fde38b1161008a578063f63743421161006f578063f637434214610b57578063fb002c9714610b6d578063fc155d1d14610b8357600080fd5b8063f2fde38b14610b22578063f5648a4f14610b4257600080fd5b8063e7ad9fcd14610ac1578063e884f26014610ae1578063ee40166e14610af6578063f11a24d314610b0c57600080fd5b8063dd62ed3e116100f7578063dd62ed3e14610a3a578063e2cd5fcd14610a80578063e2f4560514610a95578063e71dc3f514610aab57600080fd5b8063d0d41fe1146109c4578063d257b34f146109e4578063d85ba06314610a04578063dc3f0d0f14610a1a57600080fd5b8063a9059cbb116101a0578063bbc0c7421161016f578063bbc0c7421461094b578063c02466681461096a578063c18bc1951461098a578063c876d0b9146109aa57600080fd5b8063a9059cbb146108cf578063aa4bde28146108ef578063adb873bd14610905578063b62496f51461091b57600080fd5b80639fccce32116101dc5780639fccce321461086d578063a0d82dc514610883578063a457c2d714610899578063a62068ce146108b957600080fd5b80638da5cb5b1461080457806395d89b41146108225780639a7a23d6146108375780639c3b4fdc1461085757600080fd5b80634f77f6c0116103185780636ddd1713116102ab5780637571336a1161027a57806385ecfd281161025f57806385ecfd28146107a957806388e765ff146107d95780638a8c523c146107ef57600080fd5b80637571336a146107695780638366e79a1461078957600080fd5b80636ddd1713146106e957806370a0823114610709578063715018a61461073f578063751039fc1461075457600080fd5b80635bb988c9116102e75780635bb988c91461068757806366d602ae146106a75780636a486a8e146106bd5780636b0a894c146106d357600080fd5b80634f77f6c01461062f57806351f205e41461064557806358a6d5311461065a5780635a139dd41461067157600080fd5b806323b872dd11610390578063395093511161035f57806339509351146105b5578063452ed4f1146105d5578063499b8394146105f55780634a62bb651461061557600080fd5b806323b872dd146105395780632be32b61146105595780632e6ed7ef14610579578063313ce5671461059957600080fd5b806318160ddd116103cc57806318160ddd146104cc5780631a8145bb146104eb5780631d777856146105015780632307b4411461051757600080fd5b806306fdde03146104095780630758d92414610434578063095ea7b31461046c57806310d5de531461049c57600080fd5b3661040457005b600080fd5b34801561041557600080fd5b5061041e610ba3565b60405161042b9190613b19565b60405180910390f35b34801561044057600080fd5b50600954610454906001600160a01b031681565b6040516001600160a01b03909116815260200161042b565b34801561047857600080fd5b5061048c610487366004613b86565b610c35565b604051901515815260200161042b565b3480156104a857600080fd5b5061048c6104b7366004613bb2565b60246020526000908152604090205460ff1681565b3480156104d857600080fd5b506002545b60405190815260200161042b565b3480156104f757600080fd5b506104dd60205481565b34801561050d57600080fd5b506104dd60225481565b34801561052357600080fd5b50610537610532366004613cac565b610c4b565b005b34801561054557600080fd5b5061048c610554366004613d6e565b610dce565b34801561056557600080fd5b50610537610574366004613daf565b610e78565b34801561058557600080fd5b50610537610594366004613dc8565b610fa3565b3480156105a557600080fd5b506040516012815260200161042b565b3480156105c157600080fd5b5061048c6105d0366004613b86565b61107a565b3480156105e157600080fd5b50600a54610454906001600160a01b031681565b34801561060157600080fd5b50610537610610366004613bb2565b6110b6565b34801561062157600080fd5b5060125461048c9060ff1681565b34801561063b57600080fd5b506104dd601b5481565b34801561065157600080fd5b50610537611185565b34801561066657600080fd5b50600f54431061048c565b34801561067d57600080fd5b506104dd60165481565b34801561069357600080fd5b506105376106a2366004613bb2565b6112b3565b3480156106b357600080fd5b506104dd60075481565b3480156106c957600080fd5b506104dd601a5481565b3480156106df57600080fd5b506104dd60115481565b3480156106f557600080fd5b5060125461048c9062010000900460ff1681565b34801561071557600080fd5b506104dd610724366004613bb2565b6001600160a01b031660009081526020819052604090205490565b34801561074b57600080fd5b50610537611384565b34801561076057600080fd5b50610537611416565b34801561077557600080fd5b50610537610784366004613e08565b61149f565b34801561079557600080fd5b5061048c6107a4366004613e41565b611585565b3480156107b557600080fd5b5061048c6107c4366004613bb2565b60106020526000908152604090205460ff1681565b3480156107e557600080fd5b506104dd60065481565b3480156107fb57600080fd5b506105376117ac565b34801561081057600080fd5b506005546001600160a01b0316610454565b34801561082e57600080fd5b5061041e61189c565b34801561084357600080fd5b50610537610852366004613e08565b6118ab565b34801561086357600080fd5b506104dd60185481565b34801561087957600080fd5b506104dd60215481565b34801561088f57600080fd5b506104dd601d5481565b3480156108a557600080fd5b5061048c6108b4366004613b86565b6119bd565b3480156108c557600080fd5b506104dd600f5481565b3480156108db57600080fd5b5061048c6108ea366004613b86565b611a56565b3480156108fb57600080fd5b506104dd60085481565b34801561091157600080fd5b506104dd601e5481565b34801561092757600080fd5b5061048c610936366004613bb2565b60256020526000908152604090205460ff1681565b34801561095757600080fd5b5060125461048c90610100900460ff1681565b34801561097657600080fd5b50610537610985366004613e08565b611a63565b34801561099657600080fd5b506105376109a5366004613daf565b611b0a565b3480156109b657600080fd5b5060145461048c9060ff1681565b3480156109d057600080fd5b506105376109df366004613bb2565b611c42565b3480156109f057600080fd5b506105376109ff366004613daf565b611d02565b348015610a1057600080fd5b506104dd60155481565b348015610a2657600080fd5b50610537610a35366004613daf565b611e7c565b348015610a4657600080fd5b506104dd610a55366004613e41565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610a8c57600080fd5b50610537611fa1565b348015610aa157600080fd5b506104dd600b5481565b348015610ab757600080fd5b506104dd60195481565b348015610acd57600080fd5b50610537610adc366004613dc8565b612103565b348015610aed57600080fd5b506105376121d4565b348015610b0257600080fd5b506104dd600e5481565b348015610b1857600080fd5b506104dd60175481565b348015610b2e57600080fd5b50610537610b3d366004613bb2565b612228565b348015610b4e57600080fd5b50610537612331565b348015610b6357600080fd5b506104dd601c5481565b348015610b7957600080fd5b506104dd601f5481565b348015610b8f57600080fd5b50610537610b9e366004613daf565b6123bb565b606060038054610bb290613e6f565b80601f0160208091040260200160405190810160405280929190818152602001828054610bde90613e6f565b8015610c2b5780601f10610c0057610100808354040283529160200191610c2b565b820191906000526020600020905b815481529060010190602001808311610c0e57829003601f168201915b5050505050905090565b6000610c4233848461261d565b50600192915050565b6005546001600160a01b03163314610c985760405162461bcd60e51b8152602060048201819052602482015260008051602061409583398151915260448201526064015b60405180910390fd5b8051825114610ce95760405162461bcd60e51b815260206004820152601e60248201527f617272617973206d757374206265207468652073616d65206c656e67746800006044820152606401610c8f565b610258825110610d615760405162461bcd60e51b815260206004820152603660248201527f43616e206f6e6c792061697264726f70203630302077616c6c6574732070657260448201527f2074786e2064756520746f20676173206c696d697473000000000000000000006064820152608401610c8f565b60005b8251811015610dc9576000838281518110610d8157610d81613ea9565b602002602001015190506000838381518110610d9f57610d9f613ea9565b60200260200101519050610db4338383612742565b50508080610dc190613ed5565b915050610d64565b505050565b6000610ddb848484612911565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610e605760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610c8f565b610e6d853385840361261d565b506001949350505050565b6005546001600160a01b03163314610ec05760405162461bcd60e51b815260206004820181905260248201526000805160206140958339815191526044820152606401610c8f565b670de0b6b3a76400006103e8610ed560025490565b610ee0906002613eee565b610eea9190613f0d565b610ef49190613f0d565b811015610f555760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152687468616e20302e322560b81b6064820152608401610c8f565b610f6781670de0b6b3a7640000613eee565b60068190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de41009906020015b60405180910390a150565b6005546001600160a01b03163314610feb5760405162461bcd60e51b815260206004820181905260248201526000805160206140958339815191526044820152606401610c8f565b6016849055601783905560188290556019819055808261100b8587613f2f565b6110159190613f2f565b61101f9190613f2f565b6015819055600f10156110745760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313525206f72206c6573730000006044820152606401610c8f565b50505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610c429185906110b1908690613f2f565b61261d565b6005546001600160a01b031633146110fe5760405162461bcd60e51b815260206004820181905260248201526000805160206140958339815191526044820152606401610c8f565b6001600160a01b0381166111635760405162461bcd60e51b815260206004820152602660248201527f5f6f7065726174696f6e734164647265737320616464726573732063616e6e6f60448201526507420626520360d41b6064820152608401610c8f565b600c80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146111cd5760405162461bcd60e51b815260206004820181905260248201526000805160206140958339815191526044820152606401610c8f565b600b54306000908152602081905260409020541015611256576040805162461bcd60e51b81526020600482015260248101919091527f43616e206f6e6c792073776170207768656e20746f6b656e20616d6f756e742060448201527f6973206174206f7220686967686572207468616e207265737472696374696f6e6064820152608401610c8f565b600a805460ff60a01b1916600160a01b17905561127161350f565b600a805460ff60a01b191690556040514281527f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb329060200160405180910390a1565b6005546001600160a01b031633146112fb5760405162461bcd60e51b815260206004820181905260248201526000805160206140958339815191526044820152606401610c8f565b6001600160a01b03811660009081526010602052604090205460ff166113635760405162461bcd60e51b815260206004820152601e60248201527f57616c6c657420697320616c7265616479206e6f7420666c61676765642e00006044820152606401610c8f565b6001600160a01b03166000908152601060205260409020805460ff19169055565b6005546001600160a01b031633146113cc5760405162461bcd60e51b815260206004820181905260248201526000805160206140958339815191526044820152606401610c8f565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b0316331461145e5760405162461bcd60e51b815260206004820181905260248201526000805160206140958339815191526044820152606401610c8f565b6012805460ff199081169091556014805490911690556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6005546001600160a01b031633146114e75760405162461bcd60e51b815260206004820181905260248201526000805160206140958339815191526044820152606401610c8f565b8061155a57600a546001600160a01b039081169083160361155a5760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610c8f565b6001600160a01b03919091166000908152602460205260409020805460ff1916911515919091179055565b6005546000906001600160a01b031633146115d05760405162461bcd60e51b815260206004820181905260248201526000805160206140958339815191526044820152606401610c8f565b6001600160a01b0383166116265760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610c8f565b306001600160a01b0384160361167e5760405162461bcd60e51b815260206004820152601c60248201527f43616e2774207769746864726177206e617469766520746f6b656e73000000006044820152606401610c8f565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa1580156116c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116e99190613f47565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303816000875af115801561173c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117609190613f60565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b6005546001600160a01b031633146117f45760405162461bcd60e51b815260206004820181905260248201526000805160206140958339815191526044820152606401610c8f565b601254610100900460ff161561184c5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610c8f565b6012805462ffff0019166201010017905543600e81905561186e906001613f2f565b600f556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a1565b606060048054610bb290613e6f565b6005546001600160a01b031633146118f35760405162461bcd60e51b815260206004820181905260248201526000805160206140958339815191526044820152606401610c8f565b600a546001600160a01b03908116908316036119775760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610c8f565b6119818282613759565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b3360009081526001602090815260408083206001600160a01b038616845290915281205482811015611a3f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610c8f565b611a4c338585840361261d565b5060019392505050565b6000610c42338484612911565b6005546001600160a01b03163314611aab5760405162461bcd60e51b815260206004820181905260248201526000805160206140958339815191526044820152606401610c8f565b6001600160a01b038216600081815260236020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b03163314611b525760405162461bcd60e51b815260206004820181905260248201526000805160206140958339815191526044820152606401610c8f565b670de0b6b3a76400006103e8611b6760025490565b611b72906003613eee565b611b7c9190613f0d565b611b869190613f0d565b811015611bfb5760405162461bcd60e51b815260206004820152602c60248201527f43616e6e6f7420736574206d61782077616c6c657420616d6f756e74206c6f7760448201527f6572207468616e20302e332500000000000000000000000000000000000000006064820152608401610c8f565b611c0d81670de0b6b3a7640000613eee565b60088190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc90602001610f98565b6005546001600160a01b03163314611c8a5760405162461bcd60e51b815260206004820181905260248201526000805160206140958339815191526044820152606401610c8f565b6001600160a01b038116611ce05760405162461bcd60e51b815260206004820152601f60248201527f5f6465764164647265737320616464726573732063616e6e6f742062652030006044820152606401610c8f565b600d80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314611d4a5760405162461bcd60e51b815260206004820181905260248201526000805160206140958339815191526044820152606401610c8f565b620186a0611d5760025490565b611d62906001613eee565b611d6c9190613f0d565b811015611de15760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527f20302e3030312520746f74616c20737570706c792e00000000000000000000006064820152608401610c8f565b6103e8611ded60025490565b611df8906001613eee565b611e029190613f0d565b811115611e775760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160448201527f6e20302e312520746f74616c20737570706c792e0000000000000000000000006064820152608401610c8f565b600b55565b6005546001600160a01b03163314611ec45760405162461bcd60e51b815260206004820181905260248201526000805160206140958339815191526044820152606401610c8f565b670de0b6b3a76400006103e8611ed960025490565b611ee4906002613eee565b611eee9190613f0d565b611ef89190613f0d565b811015611f5a5760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015269207468616e20302e322560b01b6064820152608401610c8f565b611f6c81670de0b6b3a7640000613eee565b60078190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e90602001610f98565b6005546001600160a01b03163314611fe95760405162461bcd60e51b815260206004820181905260248201526000805160206140958339815191526044820152606401610c8f565b6000601b819055601c819055601d8190556008601e8190559061200c8180613f2f565b6120169190613f2f565b6120209190613f2f565b601a819055601410156120755760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323025206f72206c6573730000006044820152606401610c8f565b600060168190556017819055601881905560086019819055906120988180613f2f565b6120a29190613f2f565b6120ac9190613f2f565b6015819055600f10156121015760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313525206f72206c6573730000006044820152606401610c8f565b565b6005546001600160a01b0316331461214b5760405162461bcd60e51b815260206004820181905260248201526000805160206140958339815191526044820152606401610c8f565b601b849055601c839055601d829055601e819055808261216b8587613f2f565b6121759190613f2f565b61217f9190613f2f565b601a819055601410156110745760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323025206f72206c6573730000006044820152606401610c8f565b6005546001600160a01b0316331461221c5760405162461bcd60e51b815260206004820181905260248201526000805160206140958339815191526044820152606401610c8f565b6014805460ff19169055565b6005546001600160a01b031633146122705760405162461bcd60e51b815260206004820181905260248201526000805160206140958339815191526044820152606401610c8f565b6001600160a01b0381166122d55760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c8f565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146123795760405162461bcd60e51b815260206004820181905260248201526000805160206140958339815191526044820152606401610c8f565b604051600090339047908381818185875af1925050503d8060008114611074576040519150601f19603f3d011682016040523d82523d6000602084013e611074565b6005546001600160a01b031633146124035760405162461bcd60e51b815260206004820181905260248201526000805160206140958339815191526044820152606401610c8f565b678ac7230489e800008111156124915760405162461bcd60e51b815260206004820152604760248201527f4d6179206e6f7420627579206d6f7265207468616e2031302045544820696e2060448201527f612073696e676c652062757920746f207265647563652073616e64776963682060648201526661747461636b7360c81b608482015260a401610c8f565b6040805160028082526060820183526000926020830190803683375050600954604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa1580156124fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061251f9190613f7d565b8160008151811061253257612532613ea9565b60200260200101906001600160a01b031690816001600160a01b031681525050308160018151811061256657612566613ea9565b6001600160a01b03928316602091820292909201015260095460405163b6f9de9560e01b815291169063b6f9de959084906125ae90600090869061dead904290600401613fde565b6000604051808303818588803b1580156125c757600080fd5b505af11580156125db573d6000803e3d6000fd5b50505050507fa017c1567cfcdd2d750a8c01e39fe2a846bcebc293c7d078477014d6848205688260405161261191815260200190565b60405180910390a15050565b6001600160a01b03831661267f5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610c8f565b6001600160a01b0382166126e05760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610c8f565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0383166127a65760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610c8f565b6001600160a01b0382166128085760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610c8f565b6001600160a01b038316600090815260208190526040902054818110156128805760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610c8f565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906128b7908490613f2f565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161290391815260200190565b60405180910390a350505050565b6001600160a01b0383166129755760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610c8f565b6001600160a01b0382166129d75760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610c8f565b60008111612a275760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610c8f565b601254610100900460ff16612ac1576001600160a01b03831660009081526023602052604090205460ff1680612a7557506001600160a01b03821660009081526023602052604090205460ff165b612ac15760405162461bcd60e51b815260206004820152601660248201527f54726164696e67206973206e6f74206163746976652e000000000000000000006044820152606401610c8f565b600f544310158015612ad557506000600f54115b15612ba5576001600160a01b03831660009081526010602052604090205460ff161580612b0f57506005546001600160a01b038381169116145b80612b2457506001600160a01b03821661dead145b612ba55760405162461bcd60e51b815260206004820152604660248201527f426f74732063616e6e6f74207472616e7366657220746f6b656e7320696e206f60448201527f72206f75742065786365707420746f206f776e6572206f722064656164206164606482015265323932b9b99760d11b608482015260a401610c8f565b60125460ff1615612fd3576005546001600160a01b03848116911614801590612bdc57506005546001600160a01b03838116911614155b8015612bf057506001600160a01b03821615155b8015612c0757506001600160a01b03821661dead14155b8015612c2c57506001600160a01b03831660009081526023602052604090205460ff16155b8015612c5157506001600160a01b03821660009081526023602052604090205460ff16155b15612fd35760145460ff1615612d72576009546001600160a01b03838116911614801590612c8d5750600a546001600160a01b03838116911614155b15612d7257612c9d600243614013565b32600090815260136020526040902054108015612cdb5750612cc0600243614013565b6001600160a01b038316600090815260136020526040902054105b612d4d5760405162461bcd60e51b815260206004820152603560248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527f65642e202054727920616761696e206c617465722e00000000000000000000006064820152608401610c8f565b3260009081526013602052604080822043908190556001600160a01b03851683529120555b6001600160a01b03831660009081526025602052604090205460ff168015612db357506001600160a01b03821660009081526024602052604090205460ff16155b15612e9457600654811115612e1b5760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610c8f565b6008546001600160a01b038316600090815260208190526040902054612e419083613f2f565b1115612e8f5760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420457863656564206d61782077616c6c657400000000000000006044820152606401610c8f565b612fd3565b6001600160a01b03821660009081526025602052604090205460ff168015612ed557506001600160a01b03831660009081526024602052604090205460ff16155b15612f3f57600754811115612e8f5760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610c8f565b6001600160a01b03821660009081526024602052604090205460ff16612fd3576008546001600160a01b038316600090815260208190526040902054612f859083613f2f565b1115612fd35760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420457863656564206d61782077616c6c657400000000000000006044820152606401610c8f565b30600090815260208190526040902054600b5481108015908190612fff575060125462010000900460ff165b80156130155750600a54600160a01b900460ff16155b801561303a57506001600160a01b03851660009081526025602052604090205460ff16155b801561305f57506001600160a01b03851660009081526023602052604090205460ff16155b801561308457506001600160a01b03841660009081526023602052604090205460ff16155b156130b257600a805460ff60a01b1916600160a01b1790556130a461350f565b600a805460ff60a01b191690555b6001600160a01b03851660009081526023602052604090205460019060ff16806130f457506001600160a01b03851660009081526023602052604090205460ff165b156130fd575060005b600081156134fb57600f544310801561312e57506001600160a01b03871660009081526025602052604090205460ff165b801561315357506001600160a01b03861660009081526025602052604090205460ff16155b801561316157506000601554115b156132e4576001600160a01b03861660009081526010602052604090205460ff16613201576001600160a01b0386166000908152601060205260408120805460ff1916600190811790915560118054919290916131bf908490613f2f565b90915550506040516001600160a01b03871681527f55678e47d0a699d3ab99b0184c4ff14f2246ba80522deb921aa0c8823578c44a9060200160405180910390a15b6064601554866132119190613eee565b61321b9190613f0d565b90506015546017548261322e9190613eee565b6132389190613f0d565b602060008282546132499190613f2f565b909155505060155460165461325e9083613eee565b6132689190613f0d565b601f60008282546132799190613f2f565b909155505060155460185461328e9083613eee565b6132989190613f0d565b602160008282546132a99190613f2f565b90915550506015546019546132be9083613eee565b6132c89190613f0d565b602260008282546132d99190613f2f565b909155506134dd9050565b6001600160a01b03861660009081526025602052604090205460ff16801561330e57506000601a54115b156133d0576064601a54866133239190613eee565b61332d9190613f0d565b9050601a54601c54826133409190613eee565b61334a9190613f0d565b6020600082825461335b9190613f2f565b9091555050601a54601b546133709083613eee565b61337a9190613f0d565b601f600082825461338b9190613f2f565b9091555050601a54601d546133a09083613eee565b6133aa9190613f0d565b602160008282546133bb9190613f2f565b9091555050601a54601e546132be9083613eee565b6001600160a01b03871660009081526025602052604090205460ff1680156133fa57506000601554115b156134dd5760646015548661340f9190613eee565b6134199190613f0d565b90506015546017548261342c9190613eee565b6134369190613f0d565b602060008282546134479190613f2f565b909155505060155460165461345c9083613eee565b6134669190613f0d565b601f60008282546134779190613f2f565b909155505060155460185461348c9083613eee565b6134969190613f0d565b602160008282546134a79190613f2f565b90915550506015546019546134bc9083613eee565b6134c69190613f0d565b602260008282546134d79190613f2f565b90915550505b80156134ee576134ee873083612742565b6134f88186614013565b94505b613506878787612742565b50505050505050565b600060225411801561353257506022543060009081526020819052604090205410155b156135435761354330602254613787565b600060228190553081526020819052604081205490506000602154601f5460205461356e9190613f2f565b6135789190613f2f565b9050811580613585575080155b1561358e575050565b600b5461359c906014613eee565b8211156135b457600b546135b1906014613eee565b91505b600080600283602054866135c89190613eee565b6135d29190613f0d565b6135dc9190613f0d565b90506135f06135eb8286614013565b6138b1565b6020544790819060009061360690600290613f0d565b6136109087614013565b601f5461361d9085613eee565b6136279190613f0d565b90506000600260205461363a9190613f0d565b6136449088614013565b6021546136519086613eee565b61365b9190613f0d565b90506136678183613f2f565b6136719084614013565b60006020819055601f8190556021819055602255925084158015906136965750600083115b156136a5576136a58584613a0b565b600d546040516001600160a01b03909116908290600081818185875af1925050503d80600081146136f2576040519150601f19603f3d011682016040523d82523d6000602084013e6136f7565b606091505b5050600c546040519197506001600160a01b0316904790600081818185875af1925050503d8060008114613747576040519150601f19603f3d011682016040523d82523d6000602084013e61374c565b606091505b5050505050505050505050565b6001600160a01b0382166000908152602560205260409020805460ff19168215151790556119818282613abd565b6001600160a01b0382166137e75760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610c8f565b6001600160a01b0382166000908152602081905260409020548181101561385b5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610c8f565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101612735565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106138e6576138e6613ea9565b6001600160a01b03928316602091820292909201810191909152600954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa15801561393f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139639190613f7d565b8160018151811061397657613976613ea9565b6001600160a01b03928316602091820292909201015260095461399c913091168461261d565b60095460405163791ac94760e01b81526001600160a01b039091169063791ac947906139d590859060009086903090429060040161402a565b600060405180830381600087803b1580156139ef57600080fd5b505af1158015613a03573d6000803e3d6000fd5b505050505050565b600954613a239030906001600160a01b03168461261d565b60095460405163f305d71960e01b815230600482015260248101849052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af1158015613a91573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613ab69190614066565b5050505050565b6001600160a01b038216600081815260246020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd67469101612611565b600060208083528351808285015260005b81811015613b4657858101830151858201604001528201613b2a565b81811115613b58576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114613b8357600080fd5b50565b60008060408385031215613b9957600080fd5b8235613ba481613b6e565b946020939093013593505050565b600060208284031215613bc457600080fd5b8135613bcf81613b6e565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715613c1557613c15613bd6565b604052919050565b600067ffffffffffffffff821115613c3757613c37613bd6565b5060051b60200190565b600082601f830112613c5257600080fd5b81356020613c67613c6283613c1d565b613bec565b82815260059290921b84018101918181019086841115613c8657600080fd5b8286015b84811015613ca15780358352918301918301613c8a565b509695505050505050565b60008060408385031215613cbf57600080fd5b823567ffffffffffffffff80821115613cd757600080fd5b818501915085601f830112613ceb57600080fd5b81356020613cfb613c6283613c1d565b82815260059290921b84018101918181019089841115613d1a57600080fd5b948201945b83861015613d41578535613d3281613b6e565b82529482019490820190613d1f565b96505086013592505080821115613d5757600080fd5b50613d6485828601613c41565b9150509250929050565b600080600060608486031215613d8357600080fd5b8335613d8e81613b6e565b92506020840135613d9e81613b6e565b929592945050506040919091013590565b600060208284031215613dc157600080fd5b5035919050565b60008060008060808587031215613dde57600080fd5b5050823594602084013594506040840135936060013592509050565b8015158114613b8357600080fd5b60008060408385031215613e1b57600080fd5b8235613e2681613b6e565b91506020830135613e3681613dfa565b809150509250929050565b60008060408385031215613e5457600080fd5b8235613e5f81613b6e565b91506020830135613e3681613b6e565b600181811c90821680613e8357607f821691505b602082108103613ea357634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201613ee757613ee7613ebf565b5060010190565b6000816000190483118215151615613f0857613f08613ebf565b500290565b600082613f2a57634e487b7160e01b600052601260045260246000fd5b500490565b60008219821115613f4257613f42613ebf565b500190565b600060208284031215613f5957600080fd5b5051919050565b600060208284031215613f7257600080fd5b8151613bcf81613dfa565b600060208284031215613f8f57600080fd5b8151613bcf81613b6e565b600081518084526020808501945080840160005b83811015613fd35781516001600160a01b031687529582019590820190600101613fae565b509495945050505050565b848152608060208201526000613ff76080830186613f9a565b6001600160a01b03949094166040830152506060015292915050565b60008282101561402557614025613ebf565b500390565b85815284602082015260a06040820152600061404960a0830186613f9a565b6001600160a01b0394909416606083015250608001529392505050565b60008060006060848603121561407b57600080fd5b835192506020840151915060408401519050925092509256fe4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a2646970667358221220a83d028a6a38e47f31a8c15e39da93ff8d72e4429d32b7cd16622ec8a3d5544c64736f6c634300080f0033

Deployed Bytecode Sourcemap

10327:19909:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4216:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10480:27;;;;;;;;;;-1:-1:-1;10480:27:0;;;;-1:-1:-1;;;;;10480:27:0;;;;;;-1:-1:-1;;;;;798:55:1;;;780:74;;768:2;753:18;10480:27:0;616:244:1;5130:169:0;;;;;;;;;;-1:-1:-1;5130:169:0;;;;;:::i;:::-;;:::i;:::-;;;1509:14:1;;1502:22;1484:41;;1472:2;1457:18;5130:169:0;1344:187:1;11868:64:0;;;;;;;;;;-1:-1:-1;11868:64:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;4537:108;;;;;;;;;;-1:-1:-1;4625:12:0;;4537:108;;;1934:25:1;;;1922:2;1907:18;4537:108:0;1788:177:1;11616:33:0;;;;;;;;;;;;;;;;11690:28;;;;;;;;;;;;;;;;17114:618;;;;;;;;;;-1:-1:-1;17114:618:0;;;;;:::i;:::-;;:::i;:::-;;5307:492;;;;;;;;;;-1:-1:-1;5307:492:0;;;;;:::i;:::-;;:::i;15632:269::-;;;;;;;;;;-1:-1:-1;15632:269:0;;;;;:::i;:::-;;:::i;18559:436::-;;;;;;;;;;-1:-1:-1;18559:436:0;;;;;:::i;:::-;;:::i;4436:93::-;;;;;;;;;;-1:-1:-1;4436:93:0;;4519:2;5635:36:1;;5623:2;5608:18;4436:93:0;5493:184:1;5807:215:0;;;;;;;;;;-1:-1:-1;5807:215:0;;;;;:::i;:::-;;:::i;10514:21::-;;;;;;;;;;-1:-1:-1;10514:21:0;;;;-1:-1:-1;;;;;10514:21:0;;;28710:237;;;;;;;;;;-1:-1:-1;28710:237:0;;;;;:::i;:::-;;:::i;10875:33::-;;;;;;;;;;-1:-1:-1;10875:33:0;;;;;;;;11431:32;;;;;;;;;;;;;;;;29202:312;;;;;;;;;;;;;:::i;25184:120::-;;;;;;;;;;-1:-1:-1;25278:18:0;;25263:12;:33;25184:120;;11256:31;;;;;;;;;;;;;;;;15284:181;;;;;;;;;;-1:-1:-1;15284:181:0;;;;;:::i;:::-;;:::i;10406:28::-;;;;;;;;;;;;;;;;11396;;;;;;;;;;;;;;;;10841:25;;;;;;;;;;;;;;;;10955:31;;;;;;;;;;-1:-1:-1;10955:31:0;;;;;;;;;;;4653:127;;;;;;;;;;-1:-1:-1;4653:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;4754:18:0;4727:7;4754:18;;;;;;;;;;;;4653:127;8851:150;;;;;;;;;;;;;:::i;15122:154::-;;;;;;;;;;;;;:::i;17740:260::-;;;;;;;;;;-1:-1:-1;17740:260:0;;;;;:::i;:::-;;:::i;28016:456::-;;;;;;;;;;-1:-1:-1;28016:456:0;;;;;:::i;:::-;;:::i;10790:44::-;;;;;;;;;;-1:-1:-1;10790:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;10372:27;;;;;;;;;;;;;;;;14767:303;;;;;;;;;;;;;:::i;8637:79::-;;;;;;;;;;-1:-1:-1;8702:6:0;;-1:-1:-1;;;;;8702:6:0;8637:79;;4324:104;;;;;;;;;;;;;:::i;18008:295::-;;;;;;;;;;-1:-1:-1;18008:295:0;;;;;:::i;:::-;;:::i;11331:24::-;;;;;;;;;;;;;;;;11656:27;;;;;;;;;;;;;;;;11508:25;;;;;;;;;;;;;;;;6030:413;;;;;;;;;;-1:-1:-1;6030:413:0;;;;;:::i;:::-;;:::i;10750:33::-;;;;;;;;;;;;;;;;4788:175;;;;;;;;;;-1:-1:-1;4788:175:0;;;;;:::i;:::-;;:::i;10441:30::-;;;;;;;;;;;;;;;;11540:26;;;;;;;;;;;;;;;;12090:58;;;;;;;;;;-1:-1:-1;12090:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;10915:33;;;;;;;;;;-1:-1:-1;10915:33:0;;;;;;;;;;;20066:182;;;;;;;;;;-1:-1:-1;20066:182:0;;;;;:::i;:::-;;:::i;16191:284::-;;;;;;;;;;-1:-1:-1;16191:284:0;;;;;:::i;:::-;;:::i;11174:39::-;;;;;;;;;;-1:-1:-1;11174:39:0;;;;;;;;28955:195;;;;;;;;;;-1:-1:-1;28955:195:0;;;;;:::i;:::-;;:::i;16545:346::-;;;;;;;;;;-1:-1:-1;16545:346:0;;;;;:::i;:::-;;:::i;11222:27::-;;;;;;;;;;;;;;;;15909:274;;;;;;;;;;-1:-1:-1;15909:274:0;;;;;:::i;:::-;;:::i;4971:151::-;;;;;;;;;;-1:-1:-1;4971:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;5087:18:0;;;5060:7;5087:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;4971:151;19458:600;;;;;;;;;;;;;:::i;10572:33::-;;;;;;;;;;;;;;;;11362:25;;;;;;;;;;;;;;;;19003:447;;;;;;;;;;-1:-1:-1;19003:447:0;;;;;:::i;:::-;;:::i;15526:98::-;;;;;;;;;;;;;:::i;10673:37::-;;;;;;;;;;;;;;;;11294:30;;;;;;;;;;;;;;;;9009:244;;;;;;;;;;-1:-1:-1;9009:244:0;;;;;:::i;:::-;;:::i;28542:160::-;;;;;;;;;;;;;:::i;11470:31::-;;;;;;;;;;;;;;;;11575:34;;;;;;;;;;;;;;;;29617:616;;;;;;;;;;-1:-1:-1;29617:616:0;;;;;:::i;:::-;;:::i;4216:100::-;4270:13;4303:5;4296:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4216:100;:::o;5130:169::-;5213:4;5230:39;445:10;5253:7;5262:6;5230:8;:39::i;:::-;-1:-1:-1;5287:4:0;5130:169;;;;:::o;17114:618::-;8764:6;;-1:-1:-1;;;;;8764:6:0;445:10;8764:22;8756:67;;;;-1:-1:-1;;;8756:67:0;;7403:2:1;8756:67:0;;;7385:21:1;;;7422:18;;;7415:30;-1:-1:-1;;;;;;;;;;;7461:18:1;;;7454:62;7533:18;;8756:67:0;;;;;;;;;17256:15:::1;:22;17238:7;:14;:40;17230:83;;;::::0;-1:-1:-1;;;17230:83:0;;7764:2:1;17230:83:0::1;::::0;::::1;7746:21:1::0;7803:2;7783:18;;;7776:30;7842:32;7822:18;;;7815:60;7892:18;;17230:83:0::1;7562:354:1::0;17230:83:0::1;17349:3;17332:7;:14;:20;17324:87;;;::::0;-1:-1:-1;;;17324:87:0;;8123:2:1;17324:87:0::1;::::0;::::1;8105:21:1::0;8162:2;8142:18;;;8135:30;8201:34;8181:18;;;8174:62;8272:24;8252:18;;;8245:52;8314:19;;17324:87:0::1;7921:418:1::0;17324:87:0::1;17524:9;17520:205;17543:7;:14;17539:1;:18;17520:205;;;17578:14;17595:7;17603:1;17595:10;;;;;;;;:::i;:::-;;;;;;;17578:27;;17620:14;17637:15;17653:1;17637:18;;;;;;;;:::i;:::-;;;;;;;17620:35;;17670:43;17686:10;17698:6;17706;17670:15;:43::i;:::-;17563:162;;17559:3;;;;;:::i;:::-;;;;17520:205;;;;17114:618:::0;;:::o;5307:492::-;5447:4;5464:36;5474:6;5482:9;5493:6;5464:9;:36::i;:::-;-1:-1:-1;;;;;5540:19:0;;5513:24;5540:19;;;:11;:19;;;;;;;;445:10;5540:33;;;;;;;;5592:26;;;;5584:79;;;;-1:-1:-1;;;5584:79:0;;8950:2:1;5584:79:0;;;8932:21:1;8989:2;8969:18;;;8962:30;9028:34;9008:18;;;9001:62;-1:-1:-1;;;9079:18:1;;;9072:38;9127:19;;5584:79:0;8748:404:1;5584:79:0;5699:57;5708:6;445:10;5749:6;5730:16;:25;5699:8;:57::i;:::-;-1:-1:-1;5787:4:0;;5307:492;-1:-1:-1;;;;5307:492:0:o;15632:269::-;8764:6;;-1:-1:-1;;;;;8764:6:0;445:10;8764:22;8756:67;;;;-1:-1:-1;;;8756:67:0;;7403:2:1;8756:67:0;;;7385:21:1;;;7422:18;;;7415:30;-1:-1:-1;;;;;;;;;;;7461:18:1;;;7454:62;7533:18;;8756:67:0;7201:356:1;8756:67:0;15751:4:::1;15745;15725:13;4625:12:::0;;;4537:108;15725:13:::1;:17;::::0;15741:1:::1;15725:17;:::i;:::-;:24;;;;:::i;:::-;15724:31;;;;:::i;:::-;15714:6;:41;;15706:95;;;::::0;-1:-1:-1;;;15706:95:0;;9754:2:1;15706:95:0::1;::::0;::::1;9736:21:1::0;9793:2;9773:18;;;9766:30;9832:34;9812:18;;;9805:62;-1:-1:-1;;;9883:18:1;;;9876:39;9932:19;;15706:95:0::1;9552:405:1::0;15706:95:0::1;15827:17;:6:::0;15837::::1;15827:17;:::i;:::-;15812:12;:32:::0;;;15860:33:::1;::::0;1934:25:1;;;15860:33:0::1;::::0;1922:2:1;1907:18;15860:33:0::1;;;;;;;;15632:269:::0;:::o;18559:436::-;8764:6;;-1:-1:-1;;;;;8764:6:0;445:10;8764:22;8756:67;;;;-1:-1:-1;;;8756:67:0;;7403:2:1;8756:67:0;;;7385:21:1;;;7422:18;;;7415:30;-1:-1:-1;;;;;;;;;;;7461:18:1;;;7454:62;7533:18;;8756:67:0;7201:356:1;8756:67:0;18694:16:::1;:33:::0;;;18738:15:::1;:31:::0;;;18780:9:::1;:19:::0;;;18810:10:::1;:21:::0;;;18823:8;18792:7;18857:34:::1;18756:13:::0;18713:14;18857:34:::1;:::i;:::-;:46;;;;:::i;:::-;:59;;;;:::i;:::-;18842:12;:74:::0;;;18951:2:::1;-1:-1:-1::0;18935:18:0::1;18927:60;;;::::0;-1:-1:-1;;;18927:60:0;;10297:2:1;18927:60:0::1;::::0;::::1;10279:21:1::0;10336:2;10316:18;;;10309:30;10375:31;10355:18;;;10348:59;10424:18;;18927:60:0::1;10095:353:1::0;18927:60:0::1;18559:436:::0;;;;:::o;5807:215::-;445:10;5895:4;5944:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;5944:34:0;;;;;;;;;;5895:4;;5912:80;;5935:7;;5944:47;;5981:10;;5944:47;:::i;:::-;5912:8;:80::i;28710:237::-;8764:6;;-1:-1:-1;;;;;8764:6:0;445:10;8764:22;8756:67;;;;-1:-1:-1;;;8756:67:0;;7403:2:1;8756:67:0;;;7385:21:1;;;7422:18;;;7415:30;-1:-1:-1;;;;;;;;;;;7461:18:1;;;7454:62;7533:18;;8756:67:0;7201:356:1;8756:67:0;-1:-1:-1;;;;;28806:32:0;::::1;28798:83;;;::::0;-1:-1:-1;;;28798:83:0;;10655:2:1;28798:83:0::1;::::0;::::1;10637:21:1::0;10694:2;10674:18;;;10667:30;10733:34;10713:18;;;10706:62;-1:-1:-1;;;10784:18:1;;;10777:36;10830:19;;28798:83:0::1;10453:402:1::0;28798:83:0::1;28892:17;:47:::0;;-1:-1:-1;;;;;;28892:47:0::1;-1:-1:-1::0;;;;;28892:47:0;;;::::1;::::0;;;::::1;::::0;;28710:237::o;29202:312::-;8764:6;;-1:-1:-1;;;;;8764:6:0;445:10;8764:22;8756:67;;;;-1:-1:-1;;;8756:67:0;;7403:2:1;8756:67:0;;;7385:21:1;;;7422:18;;;7415:30;-1:-1:-1;;;;;;;;;;;7461:18:1;;;7454:62;7533:18;;8756:67:0;7201:356:1;8756:67:0;29293:18:::1;::::0;29283:4:::1;4727:7:::0;4754:18;;;;;;;;;;;29265:46:::1;;29257:123;;;::::0;;-1:-1:-1;;;29257:123:0;;11062:2:1;29257:123:0::1;::::0;::::1;11044:21:1::0;11081:18;;;11074:30;;;;11140:34;11120:18;;;11113:62;11211:34;11191:18;;;11184:62;11263:19;;29257:123:0::1;10860:428:1::0;29257:123:0::1;29391:8;:15:::0;;-1:-1:-1;;;;29391:15:0::1;-1:-1:-1::0;;;29391:15:0::1;::::0;;29417:10:::1;:8;:10::i;:::-;29438:8;:16:::0;;-1:-1:-1;;;;29438:16:0::1;::::0;;29470:36:::1;::::0;29490:15:::1;1934:25:1::0;;29470:36:0::1;::::0;1922:2:1;1907:18;29470:36:0::1;;;;;;;29202:312::o:0;15284:181::-;8764:6;;-1:-1:-1;;;;;8764:6:0;445:10;8764:22;8756:67;;;;-1:-1:-1;;;8756:67:0;;7403:2:1;8756:67:0;;;7385:21:1;;;7422:18;;;7415:30;-1:-1:-1;;;;;;;;;;;7461:18:1;;;7454:62;7533:18;;8756:67:0;7201:356:1;8756:67:0;-1:-1:-1;;;;;15365:19:0;::::1;;::::0;;;:11:::1;:19;::::0;;;;;::::1;;15357:62;;;::::0;-1:-1:-1;;;15357:62:0;;11495:2:1;15357:62:0::1;::::0;::::1;11477:21:1::0;11534:2;11514:18;;;11507:30;11573:32;11553:18;;;11546:60;11623:18;;15357:62:0::1;11293:354:1::0;15357:62:0::1;-1:-1:-1::0;;;;;15430:19:0::1;15452:5;15430:19:::0;;;:11:::1;:19;::::0;;;;:27;;-1:-1:-1;;15430:27:0::1;::::0;;15284:181::o;8851:150::-;8764:6;;-1:-1:-1;;;;;8764:6:0;445:10;8764:22;8756:67;;;;-1:-1:-1;;;8756:67:0;;7403:2:1;8756:67:0;;;7385:21:1;;;7422:18;;;7415:30;-1:-1:-1;;;;;;;;;;;7461:18:1;;;7454:62;7533:18;;8756:67:0;7201:356:1;8756:67:0;8944:6:::1;::::0;8923:40:::1;::::0;8960:1:::1;::::0;-1:-1:-1;;;;;8944:6:0::1;::::0;8923:40:::1;::::0;8960:1;;8923:40:::1;8974:6;:19:::0;;-1:-1:-1;;;;;;8974:19:0::1;::::0;;8851:150::o;15122:154::-;8764:6;;-1:-1:-1;;;;;8764:6:0;445:10;8764:22;8756:67;;;;-1:-1:-1;;;8756:67:0;;7403:2:1;8756:67:0;;;7385:21:1;;;7422:18;;;7415:30;-1:-1:-1;;;;;;;;;;;7461:18:1;;;7454:62;7533:18;;8756:67:0;7201:356:1;8756:67:0;15176:14:::1;:22:::0;;-1:-1:-1;;15176:22:0;;::::1;::::0;;;15209:20:::1;:28:::0;;;;::::1;::::0;;15253:15:::1;::::0;::::1;::::0;15193:5:::1;::::0;15253:15:::1;15122:154::o:0;17740:260::-;8764:6;;-1:-1:-1;;;;;8764:6:0;445:10;8764:22;8756:67;;;;-1:-1:-1;;;8756:67:0;;7403:2:1;8756:67:0;;;7385:21:1;;;7422:18;;;7415:30;-1:-1:-1;;;;;;;;;;;7461:18:1;;;7454:62;7533:18;;8756:67:0;7201:356:1;8756:67:0;17836:4:::1;17832:104;;17874:6;::::0;-1:-1:-1;;;;;17874:6:0;;::::1;17864:16:::0;;::::1;::::0;17856:68:::1;;;::::0;-1:-1:-1;;;17856:68:0;;11854:2:1;17856:68:0::1;::::0;::::1;11836:21:1::0;11893:2;11873:18;;;11866:30;11932:34;11912:18;;;11905:62;-1:-1:-1;;;11983:18:1;;;11976:37;12030:19;;17856:68:0::1;11652:403:1::0;17856:68:0::1;-1:-1:-1::0;;;;;17946:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;17946:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;17740:260::o;28016:456::-;8764:6;;28103:10;;-1:-1:-1;;;;;8764:6:0;445:10;8764:22;8756:67;;;;-1:-1:-1;;;8756:67:0;;7403:2:1;8756:67:0;;;7385:21:1;;;7422:18;;;7415:30;-1:-1:-1;;;;;;;;;;;7461:18:1;;;7454:62;7533:18;;8756:67:0;7201:356:1;8756:67:0;-1:-1:-1;;;;;28134:20:0;::::1;28126:59;;;::::0;-1:-1:-1;;;28126:59:0;;12262:2:1;28126:59:0::1;::::0;::::1;12244:21:1::0;12301:2;12281:18;;;12274:30;12340:28;12320:18;;;12313:56;12386:18;;28126:59:0::1;12060:350:1::0;28126:59:0::1;28222:4;-1:-1:-1::0;;;;;28204:23:0;::::1;::::0;28196:64:::1;;;::::0;-1:-1:-1;;;28196:64:0;;12617:2:1;28196:64:0::1;::::0;::::1;12599:21:1::0;12656:2;12636:18;;;12629:30;12695;12675:18;;;12668:58;12743:18;;28196:64:0::1;12415:352:1::0;28196:64:0::1;28298:39;::::0;-1:-1:-1;;;28298:39:0;;28331:4:::1;28298:39;::::0;::::1;780:74:1::0;28271:24:0::1;::::0;-1:-1:-1;;;;;28298:24:0;::::1;::::0;::::1;::::0;753:18:1;;28298:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28356:46;::::0;-1:-1:-1;;;28356:46:0;;-1:-1:-1;;;;;13153:55:1;;;28356:46:0::1;::::0;::::1;13135:74:1::0;13225:18;;;13218:34;;;28271:66:0;;-1:-1:-1;28356:23:0;;::::1;::::0;::::1;::::0;13108:18:1;;28356:46:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28418;::::0;;-1:-1:-1;;;;;13153:55:1;;13135:74;;13240:2;13225:18;;13218:34;;;28348:54:0;;-1:-1:-1;28418:46:0::1;::::0;13108:18:1;28418:46:0::1;;;;;;;28115:357;28016:456:::0;;;;:::o;14767:303::-;8764:6;;-1:-1:-1;;;;;8764:6:0;445:10;8764:22;8756:67;;;;-1:-1:-1;;;8756:67:0;;7403:2:1;8756:67:0;;;7385:21:1;;;7422:18;;;7415:30;-1:-1:-1;;;;;;;;;;;7461:18:1;;;7454:62;7533:18;;8756:67:0;7201:356:1;8756:67:0;14831:13:::1;::::0;::::1;::::0;::::1;;;14830:14;14822:50;;;::::0;-1:-1:-1;;;14822:50:0;;13715:2:1;14822:50:0::1;::::0;::::1;13697:21:1::0;13754:2;13734:18;;;13727:30;13793:25;13773:18;;;13766:53;13836:18;;14822:50:0::1;13513:347:1::0;14822:50:0::1;14883:13;:20:::0;;-1:-1:-1;;14914:18:0;;;;;14964:12:::1;14943:18;:33:::0;;;15008:22:::1;::::0;-1:-1:-1;15008:22:0::1;:::i;:::-;14987:18;:43:::0;15046:16:::1;::::0;::::1;::::0;;;::::1;14767:303::o:0;4324:104::-;4380:13;4413:7;4406:14;;;;;:::i;18008:295::-;8764:6;;-1:-1:-1;;;;;8764:6:0;445:10;8764:22;8756:67;;;;-1:-1:-1;;;8756:67:0;;7403:2:1;8756:67:0;;;7385:21:1;;;7422:18;;;7415:30;-1:-1:-1;;;;;;;;;;;7461:18:1;;;7454:62;7533:18;;8756:67:0;7201:356:1;8756:67:0;18117:6:::1;::::0;-1:-1:-1;;;;;18117:6:0;;::::1;18109:14:::0;;::::1;::::0;18101:84:::1;;;::::0;-1:-1:-1;;;18101:84:0;;14067:2:1;18101:84:0::1;::::0;::::1;14049:21:1::0;14106:2;14086:18;;;14079:30;14145:34;14125:18;;;14118:62;14216:27;14196:18;;;14189:55;14261:19;;18101:84:0::1;13865:421:1::0;18101:84:0::1;18198:41;18227:4;18233:5;18198:28;:41::i;:::-;18255:40;::::0;;::::1;;::::0;-1:-1:-1;;;;;18255:40:0;::::1;::::0;::::1;::::0;;;::::1;18008:295:::0;;:::o;6030:413::-;445:10;6123:4;6167:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;6167:34:0;;;;;;;;;;6220:35;;;;6212:85;;;;-1:-1:-1;;;6212:85:0;;14493:2:1;6212:85:0;;;14475:21:1;14532:2;14512:18;;;14505:30;14571:34;14551:18;;;14544:62;-1:-1:-1;;;14622:18:1;;;14615:35;14667:19;;6212:85:0;14291:401:1;6212:85:0;6333:67;445:10;6356:7;6384:15;6365:16;:34;6333:8;:67::i;:::-;-1:-1:-1;6431:4:0;;6030:413;-1:-1:-1;;;6030:413:0:o;4788:175::-;4874:4;4891:42;445:10;4915:9;4926:6;4891:9;:42::i;20066:182::-;8764:6;;-1:-1:-1;;;;;8764:6:0;445:10;8764:22;8756:67;;;;-1:-1:-1;;;8756:67:0;;7403:2:1;8756:67:0;;;7385:21:1;;;7422:18;;;7415:30;-1:-1:-1;;;;;;;;;;;7461:18:1;;;7454:62;7533:18;;8756:67:0;7201:356:1;8756:67:0;-1:-1:-1;;;;;20151:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;20151:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;20206:34;;1484:41:1;;;20206:34:0::1;::::0;1457:18:1;20206:34:0::1;;;;;;;20066:182:::0;;:::o;16191:284::-;8764:6;;-1:-1:-1;;;;;8764:6:0;445:10;8764:22;8756:67;;;;-1:-1:-1;;;8756:67:0;;7403:2:1;8756:67:0;;;7385:21:1;;;7422:18;;;7415:30;-1:-1:-1;;;;;;;;;;;7461:18:1;;;7454:62;7533:18;;8756:67:0;7201:356:1;8756:67:0;16313:4:::1;16307;16287:13;4625:12:::0;;;4537:108;16287:13:::1;:17;::::0;16303:1:::1;16287:17;:::i;:::-;:24;;;;:::i;:::-;16286:31;;;;:::i;:::-;16276:6;:41;;16268:98;;;::::0;-1:-1:-1;;;16268:98:0;;14899:2:1;16268:98:0::1;::::0;::::1;14881:21:1::0;14938:2;14918:18;;;14911:30;14977:34;14957:18;;;14950:62;15048:14;15028:18;;;15021:42;15080:19;;16268:98:0::1;14697:408:1::0;16268:98:0::1;16395:17;:6:::0;16405::::1;16395:17;:::i;:::-;16377:15;:35:::0;;;16428:39:::1;::::0;1934:25:1;;;16428:39:0::1;::::0;1922:2:1;1907:18;16428:39:0::1;1788:177:1::0;28955:195:0;8764:6;;-1:-1:-1;;;;;8764:6:0;445:10;8764:22;8756:67;;;;-1:-1:-1;;;8756:67:0;;7403:2:1;8756:67:0;;;7385:21:1;;;7422:18;;;7415:30;-1:-1:-1;;;;;;;;;;;7461:18:1;;;7454:62;7533:18;;8756:67:0;7201:356:1;8756:67:0;-1:-1:-1;;;;;29037:25:0;::::1;29029:69;;;::::0;-1:-1:-1;;;29029:69:0;;15312:2:1;29029:69:0::1;::::0;::::1;15294:21:1::0;15351:2;15331:18;;;15324:30;15390:33;15370:18;;;15363:61;15441:18;;29029:69:0::1;15110:355:1::0;29029:69:0::1;29109:10;:33:::0;;-1:-1:-1;;;;;;29109:33:0::1;-1:-1:-1::0;;;;;29109:33:0;;;::::1;::::0;;;::::1;::::0;;28955:195::o;16545:346::-;8764:6;;-1:-1:-1;;;;;8764:6:0;445:10;8764:22;8756:67;;;;-1:-1:-1;;;8756:67:0;;7403:2:1;8756:67:0;;;7385:21:1;;;7422:18;;;7415:30;-1:-1:-1;;;;;;;;;;;7461:18:1;;;7454:62;7533:18;;8756:67:0;7201:356:1;8756:67:0;16668:6:::1;16648:13;4625:12:::0;;;4537:108;16648:13:::1;:17;::::0;16664:1:::1;16648:17;:::i;:::-;:26;;;;:::i;:::-;16635:9;:39;;16627:105;;;::::0;-1:-1:-1;;;16627:105:0;;15672:2:1;16627:105:0::1;::::0;::::1;15654:21:1::0;15711:2;15691:18;;;15684:30;15750:34;15730:18;;;15723:62;15821:23;15801:18;;;15794:51;15862:19;;16627:105:0::1;15470:417:1::0;16627:105:0::1;16783:4;16763:13;4625:12:::0;;;4537:108;16763:13:::1;:17;::::0;16779:1:::1;16763:17;:::i;:::-;:24;;;;:::i;:::-;16750:9;:37;;16742:102;;;::::0;-1:-1:-1;;;16742:102:0;;16094:2:1;16742:102:0::1;::::0;::::1;16076:21:1::0;16133:2;16113:18;;;16106:30;16172:34;16152:18;;;16145:62;16243:22;16223:18;;;16216:50;16283:19;;16742:102:0::1;15892:416:1::0;16742:102:0::1;16854:18;:30:::0;16545:346::o;15909:274::-;8764:6;;-1:-1:-1;;;;;8764:6:0;445:10;8764:22;8756:67;;;;-1:-1:-1;;;8756:67:0;;7403:2:1;8756:67:0;;;7385:21:1;;;7422:18;;;7415:30;-1:-1:-1;;;;;;;;;;;7461:18:1;;;7454:62;7533:18;;8756:67:0;7201:356:1;8756:67:0;16029:4:::1;16023;16003:13;4625:12:::0;;;4537:108;16003:13:::1;:17;::::0;16019:1:::1;16003:17;:::i;:::-;:24;;;;:::i;:::-;16002:31;;;;:::i;:::-;15992:6;:41;;15984:96;;;::::0;-1:-1:-1;;;15984:96:0;;16515:2:1;15984:96:0::1;::::0;::::1;16497:21:1::0;16554:2;16534:18;;;16527:30;16593:34;16573:18;;;16566:62;-1:-1:-1;;;16644:18:1;;;16637:40;16694:19;;15984:96:0::1;16313:406:1::0;15984:96:0::1;16107:17;:6:::0;16117::::1;16107:17;:::i;:::-;16091:13;:33:::0;;;16140:35:::1;::::0;1934:25:1;;;16140:35:0::1;::::0;1922:2:1;1907:18;16140:35:0::1;1788:177:1::0;19458:600:0;8764:6;;-1:-1:-1;;;;;8764:6:0;445:10;8764:22;8756:67;;;;-1:-1:-1;;;8756:67:0;;7403:2:1;8756:67:0;;;7385:21:1;;;7422:18;;;7415:30;-1:-1:-1;;;;;;;;;;;7461:18:1;;;7454:62;7533:18;;8756:67:0;7201:356:1;8756:67:0;19537:1:::1;19517:17;:21:::0;;;19549:16:::1;:20:::0;;;19580:10:::1;:14:::0;;;19619:1:::1;19605:11;:15:::0;;;19619:1;19647:36:::1;19537:1:::0;;19647:36:::1;:::i;:::-;:49;;;;:::i;:::-;:63;;;;:::i;:::-;19631:13;:79:::0;;;19746:2:::1;-1:-1:-1::0;19729:19:0::1;19721:61;;;::::0;-1:-1:-1;;;19721:61:0;;16926:2:1;19721:61:0::1;::::0;::::1;16908:21:1::0;16965:2;16945:18;;;16938:30;17004:31;16984:18;;;16977:59;17053:18;;19721:61:0::1;16724:353:1::0;19721:61:0::1;19814:1;19795:16;:20:::0;;;19826:15:::1;:19:::0;;;19856:9:::1;:13:::0;;;19893:1:::1;19880:10;:14:::0;;;19893:1;19920:34:::1;19814:1:::0;;19920:34:::1;:::i;:::-;:46;;;;:::i;:::-;:59;;;;:::i;:::-;19905:12;:74:::0;;;20014:2:::1;-1:-1:-1::0;19998:18:0::1;19990:60;;;::::0;-1:-1:-1;;;19990:60:0;;10297:2:1;19990:60:0::1;::::0;::::1;10279:21:1::0;10336:2;10316:18;;;10309:30;10375:31;10355:18;;;10348:59;10424:18;;19990:60:0::1;10095:353:1::0;19990:60:0::1;19458:600::o:0;19003:447::-;8764:6;;-1:-1:-1;;;;;8764:6:0;445:10;8764:22;8756:67;;;;-1:-1:-1;;;8756:67:0;;7403:2:1;8756:67:0;;;7385:21:1;;;7422:18;;;7415:30;-1:-1:-1;;;;;;;;;;;7461:18:1;;;7454:62;7533:18;;8756:67:0;7201:356:1;8756:67:0;19139:17:::1;:34:::0;;;19184:16:::1;:32:::0;;;19227:10:::1;:20:::0;;;19258:11:::1;:22:::0;;;19272:8;19240:7;19307:36:::1;19203:13:::0;19159:14;19307:36:::1;:::i;:::-;:49;;;;:::i;:::-;:63;;;;:::i;:::-;19291:13;:79:::0;;;19406:2:::1;-1:-1:-1::0;19389:19:0::1;19381:61;;;::::0;-1:-1:-1;;;19381:61:0;;16926:2:1;19381:61:0::1;::::0;::::1;16908:21:1::0;16965:2;16945:18;;;16938:30;17004:31;16984:18;;;16977:59;17053:18;;19381:61:0::1;16724:353:1::0;15526:98:0;8764:6;;-1:-1:-1;;;;;8764:6:0;445:10;8764:22;8756:67;;;;-1:-1:-1;;;8756:67:0;;7403:2:1;8756:67:0;;;7385:21:1;;;7422:18;;;7415:30;-1:-1:-1;;;;;;;;;;;7461:18:1;;;7454:62;7533:18;;8756:67:0;7201:356:1;8756:67:0;15588:20:::1;:28:::0;;-1:-1:-1;;15588:28:0::1;::::0;;15526:98::o;9009:244::-;8764:6;;-1:-1:-1;;;;;8764:6:0;445:10;8764:22;8756:67;;;;-1:-1:-1;;;8756:67:0;;7403:2:1;8756:67:0;;;7385:21:1;;;7422:18;;;7415:30;-1:-1:-1;;;;;;;;;;;7461:18:1;;;7454:62;7533:18;;8756:67:0;7201:356:1;8756:67:0;-1:-1:-1;;;;;9098:22:0;::::1;9090:73;;;::::0;-1:-1:-1;;;9090:73:0;;17284:2:1;9090:73:0::1;::::0;::::1;17266:21:1::0;17323:2;17303:18;;;17296:30;17362:34;17342:18;;;17335:62;-1:-1:-1;;;17413:18:1;;;17406:36;17459:19;;9090:73:0::1;17082:402:1::0;9090:73:0::1;9200:6;::::0;9179:38:::1;::::0;-1:-1:-1;;;;;9179:38:0;;::::1;::::0;9200:6:::1;::::0;9179:38:::1;::::0;9200:6:::1;::::0;9179:38:::1;9228:6;:17:::0;;-1:-1:-1;;;;;;9228:17:0::1;-1:-1:-1::0;;;;;9228:17:0;;;::::1;::::0;;;::::1;::::0;;9009:244::o;28542:160::-;8764:6;;-1:-1:-1;;;;;8764:6:0;445:10;8764:22;8756:67;;;;-1:-1:-1;;;8756:67:0;;7403:2:1;8756:67:0;;;7385:21:1;;;7422:18;;;7415:30;-1:-1:-1;;;;;;;;;;;7461:18:1;;;7454:62;7533:18;;8756:67:0;7201:356:1;8756:67:0;28636:58:::1;::::0;28600:12:::1;::::0;28644:10:::1;::::0;28668:21:::1;::::0;28600:12;28636:58;28600:12;28636:58;28668:21;28644:10;28636:58:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29617:616:::0;8764:6;;-1:-1:-1;;;;;8764:6:0;445:10;8764:22;8756:67;;;;-1:-1:-1;;;8756:67:0;;7403:2:1;8756:67:0;;;7385:21:1;;;7422:18;;;7415:30;-1:-1:-1;;;;;;;;;;;7461:18:1;;;7454:62;7533:18;;8756:67:0;7201:356:1;8756:67:0;29714:8:::1;29699:11;:23;;29691:107;;;::::0;-1:-1:-1;;;29691:107:0;;17901:2:1;29691:107:0::1;::::0;::::1;17883:21:1::0;17940:2;17920:18;;;17913:30;17979:34;17959:18;;;17952:62;18050:34;18030:18;;;18023:62;-1:-1:-1;;;18101:19:1;;;18094:38;18149:19;;29691:107:0::1;17699:475:1::0;29691:107:0::1;29835:16;::::0;;29849:1:::1;29835:16:::0;;;;;::::1;::::0;;29811:21:::1;::::0;29835:16:::1;::::0;::::1;::::0;;::::1;::::0;::::1;-1:-1:-1::0;;29872:9:0::1;::::0;:16:::1;::::0;;-1:-1:-1;;;29872:16:0;;;;29811:40;;-1:-1:-1;;;;;;29872:9:0;;::::1;::::0;:14:::1;::::0;-1:-1:-1;29872:16:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;:9;:16:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29862:4;29867:1;29862:7;;;;;;;;:::i;:::-;;;;;;:26;-1:-1:-1::0;;;;;29862:26:0::1;;;-1:-1:-1::0;;;;;29862:26:0::1;;;::::0;::::1;29917:4;29899;29904:1;29899:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;29899:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;:23;29961:9:::1;::::0;:219:::1;::::0;-1:-1:-1;;;29961:219:0;;:9;::::1;::::0;:60:::1;::::0;30029:11;;29961:219:::1;::::0;:9:::1;::::0;30105:4;;30132:6:::1;::::0;30154:15:::1;::::0;29961:219:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;30196:29;30213:11;30196:29;;;;1934:25:1::0;;1922:2;1907:18;;1788:177;30196:29:0::1;;;;;;;;29680:553;29617:616:::0;:::o;7930:380::-;-1:-1:-1;;;;;8066:19:0;;8058:68;;;;-1:-1:-1;;;8058:68:0;;19664:2:1;8058:68:0;;;19646:21:1;19703:2;19683:18;;;19676:30;19742:34;19722:18;;;19715:62;-1:-1:-1;;;19793:18:1;;;19786:34;19837:19;;8058:68:0;19462:400:1;8058:68:0;-1:-1:-1;;;;;8145:21:0;;8137:68;;;;-1:-1:-1;;;8137:68:0;;20069:2:1;8137:68:0;;;20051:21:1;20108:2;20088:18;;;20081:30;20147:34;20127:18;;;20120:62;-1:-1:-1;;;20198:18:1;;;20191:32;20240:19;;8137:68:0;19867:398:1;8137:68:0;-1:-1:-1;;;;;8218:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;8270:32;;1934:25:1;;;8270:32:0;;1907:18:1;8270:32:0;;;;;;;;7930:380;;;:::o;6451:614::-;-1:-1:-1;;;;;6591:20:0;;6583:70;;;;-1:-1:-1;;;6583:70:0;;20472:2:1;6583:70:0;;;20454:21:1;20511:2;20491:18;;;20484:30;20550:34;20530:18;;;20523:62;-1:-1:-1;;;20601:18:1;;;20594:35;20646:19;;6583:70:0;20270:401:1;6583:70:0;-1:-1:-1;;;;;6672:23:0;;6664:71;;;;-1:-1:-1;;;6664:71:0;;20878:2:1;6664:71:0;;;20860:21:1;20917:2;20897:18;;;20890:30;20956:34;20936:18;;;20929:62;-1:-1:-1;;;21007:18:1;;;21000:33;21050:19;;6664:71:0;20676:399:1;6664:71:0;-1:-1:-1;;;;;6772:17:0;;6748:21;6772:17;;;;;;;;;;;6808:23;;;;6800:74;;;;-1:-1:-1;;;6800:74:0;;21282:2:1;6800:74:0;;;21264:21:1;21321:2;21301:18;;;21294:30;21360:34;21340:18;;;21333:62;-1:-1:-1;;;21411:18:1;;;21404:36;21457:19;;6800:74:0;21080:402:1;6800:74:0;-1:-1:-1;;;;;6910:17:0;;;:9;:17;;;;;;;;;;;6930:22;;;6910:42;;6974:20;;;;;;;;:30;;6946:6;;6910:9;6974:30;;6946:6;;6974:30;:::i;:::-;;;;;;;;7039:9;-1:-1:-1;;;;;7022:35:0;7031:6;-1:-1:-1;;;;;7022:35:0;;7050:6;7022:35;;;;1934:25:1;;1922:2;1907:18;;1788:177;7022:35:0;;;;;;;;6572:493;6451:614;;;:::o;20256:4920::-;-1:-1:-1;;;;;20356:18:0;;20348:68;;;;-1:-1:-1;;;20348:68:0;;20472:2:1;20348:68:0;;;20454:21:1;20511:2;20491:18;;;20484:30;20550:34;20530:18;;;20523:62;-1:-1:-1;;;20601:18:1;;;20594:35;20646:19;;20348:68:0;20270:401:1;20348:68:0;-1:-1:-1;;;;;20435:16:0;;20427:64;;;;-1:-1:-1;;;20427:64:0;;20878:2:1;20427:64:0;;;20860:21:1;20917:2;20897:18;;;20890:30;20956:34;20936:18;;;20929:62;-1:-1:-1;;;21007:18:1;;;21000:33;21050:19;;20427:64:0;20676:399:1;20427:64:0;20519:1;20510:6;:10;20502:52;;;;-1:-1:-1;;;20502:52:0;;21689:2:1;20502:52:0;;;21671:21:1;21728:2;21708:18;;;21701:30;21767:31;21747:18;;;21740:59;21816:18;;20502:52:0;21487:353:1;20502:52:0;20571:13;;;;;;;20567:132;;-1:-1:-1;;;;;20608:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;20637:23:0;;;;;;:19;:23;;;;;;;;20608:52;20600:87;;;;-1:-1:-1;;;20600:87:0;;22047:2:1;20600:87:0;;;22029:21:1;22086:2;22066:18;;;22059:30;22125:24;22105:18;;;22098:52;22167:18;;20600:87:0;21845:346:1;20600:87:0;25278:18;;25263:12;:33;20714:26;:52;;;;;20765:1;20744:18;;:22;20714:52;20711:226;;;-1:-1:-1;;;;;20791:17:0;;;;;;:11;:17;;;;;;;;20790:18;;:35;;-1:-1:-1;8702:6:0;;-1:-1:-1;;;;;20812:13:0;;;8702:6;;20812:13;20790:35;:60;;;-1:-1:-1;;;;;;20829:21:0;;20843:6;20829:21;20790:60;20782:143;;;;-1:-1:-1;;;20782:143:0;;22398:2:1;20782:143:0;;;22380:21:1;22437:2;22417:18;;;22410:30;22476:34;22456:18;;;22449:62;22547:34;22527:18;;;22520:62;-1:-1:-1;;;22598:19:1;;;22591:37;22645:19;;20782:143:0;22196:474:1;20782:143:0;20952:14;;;;20949:1649;;;8702:6;;-1:-1:-1;;;;;20986:15:0;;;8702:6;;20986:15;;;;:32;;-1:-1:-1;8702:6:0;;-1:-1:-1;;;;;21005:13:0;;;8702:6;;21005:13;;20986:32;:52;;;;-1:-1:-1;;;;;;21022:16:0;;;;20986:52;:77;;;;-1:-1:-1;;;;;;21042:21:0;;21056:6;21042:21;;20986:77;:107;;;;-1:-1:-1;;;;;;21068:25:0;;;;;;:19;:25;;;;;;;;21067:26;20986:107;:135;;;;-1:-1:-1;;;;;;21098:23:0;;;;;;:19;:23;;;;;;;;21097:24;20986:135;20982:1605;;;21279:20;;;;21275:506;;;21341:9;;-1:-1:-1;;;;;21327:24:0;;;21341:9;;21327:24;;;;:49;;-1:-1:-1;21369:6:0;;-1:-1:-1;;;;;21355:21:0;;;21369:6;;21355:21;;21327:49;21323:439;;;21454:16;21469:1;21454:12;:16;:::i;:::-;21441:9;21412:39;;;;:28;:39;;;;;;:58;:113;;;;-1:-1:-1;21509:16:0;21524:1;21509:12;:16;:::i;:::-;-1:-1:-1;;;;;21474:32:0;;;;;;:28;:32;;;;;;:51;21412:113;21404:179;;;;-1:-1:-1;;;21404:179:0;;23007:2:1;21404:179:0;;;22989:21:1;23046:2;23026:18;;;23019:30;23085:34;23065:18;;;23058:62;23156:23;23136:18;;;23129:51;23197:19;;21404:179:0;22805:417:1;21404:179:0;21639:9;21610:39;;;;:28;:39;;;;;;21652:12;21610:54;;;;-1:-1:-1;;;;;21691:32:0;;;;;;:47;21323:439;-1:-1:-1;;;;;21833:31:0;;;;;;:25;:31;;;;;;;;:71;;;;-1:-1:-1;;;;;;21869:35:0;;;;;;:31;:35;;;;;;;;21868:36;21833:71;21829:743;;;21951:12;;21941:6;:22;;21933:75;;;;-1:-1:-1;;;21933:75:0;;23429:2:1;21933:75:0;;;23411:21:1;23468:2;23448:18;;;23441:30;23507:34;23487:18;;;23480:62;-1:-1:-1;;;23558:18:1;;;23551:38;23606:19;;21933:75:0;23227:404:1;21933:75:0;22069:15;;-1:-1:-1;;;;;4754:18:0;;4727:7;4754:18;;;;;;;;;;;22043:22;;:6;:22;:::i;:::-;:41;;22035:78;;;;-1:-1:-1;;;22035:78:0;;23838:2:1;22035:78:0;;;23820:21:1;23877:2;23857:18;;;23850:30;23916:26;23896:18;;;23889:54;23960:18;;22035:78:0;23636:348:1;22035:78:0;21829:743;;;-1:-1:-1;;;;;22189:29:0;;;;;;:25;:29;;;;;;;;:71;;;;-1:-1:-1;;;;;;22223:37:0;;;;;;:31;:37;;;;;;;;22222:38;22189:71;22185:387;;;22307:13;;22297:6;:23;;22289:78;;;;-1:-1:-1;;;22289:78:0;;24191:2:1;22289:78:0;;;24173:21:1;24230:2;24210:18;;;24203:30;24269:34;24249:18;;;24242:62;-1:-1:-1;;;24320:18:1;;;24313:40;24370:19;;22289:78:0;23989:406:1;22185:387:0;-1:-1:-1;;;;;22415:35:0;;;;;;:31;:35;;;;;;;;22410:162;;22508:15;;-1:-1:-1;;;;;4754:18:0;;4727:7;4754:18;;;;;;;;;;;22482:22;;:6;:22;:::i;:::-;:41;;22474:78;;;;-1:-1:-1;;;22474:78:0;;23838:2:1;22474:78:0;;;23820:21:1;23877:2;23857:18;;;23850:30;23916:26;23896:18;;;23889:54;23960:18;;22474:78:0;23636:348:1;22474:78:0;22659:4;22610:28;4754:18;;;;;;;;;;;22717;;22693:42;;;;;;;22751:22;;-1:-1:-1;22762:11:0;;;;;;;22751:22;:35;;;;-1:-1:-1;22778:8:0;;-1:-1:-1;;;22778:8:0;;;;22777:9;22751:35;:71;;;;-1:-1:-1;;;;;;22791:31:0;;;;;;:25;:31;;;;;;;;22790:32;22751:71;:101;;;;-1:-1:-1;;;;;;22827:25:0;;;;;;:19;:25;;;;;;;;22826:26;22751:101;:129;;;;-1:-1:-1;;;;;;22857:23:0;;;;;;:19;:23;;;;;;;;22856:24;22751:129;22748:236;;;22897:8;:15;;-1:-1:-1;;;;22897:15:0;-1:-1:-1;;;22897:15:0;;;22929:10;:8;:10::i;:::-;22956:8;:16;;-1:-1:-1;;;;22956:16:0;;;22748:236;-1:-1:-1;;;;;23114:25:0;;22996:12;23114:25;;;:19;:25;;;;;;23011:4;;23114:25;;;:52;;-1:-1:-1;;;;;;23143:23:0;;;;;;:19;:23;;;;;;;;23114:52;23111:99;;;-1:-1:-1;23193:5:0;23111:99;23222:12;23326:7;23323:1800;;;25278:18;;25263:12;:33;23388:60;;;;-1:-1:-1;;;;;;23417:31:0;;;;;;:25;:31;;;;;;;;23388:60;:94;;;;-1:-1:-1;;;;;;23453:29:0;;;;;;:25;:29;;;;;;;;23452:30;23388:94;:114;;;;;23501:1;23486:12;;:16;23388:114;23385:1594;;;-1:-1:-1;;;;;23528:15:0;;;;;;:11;:15;;;;;;;;23524:171;;-1:-1:-1;;;;;23567:15:0;;;;;;:11;:15;;;;;:22;;-1:-1:-1;;23567:22:0;23585:4;23567:22;;;;;;23612:10;:15;;23585:4;;23612:10;;:15;;23585:4;;23612:15;:::i;:::-;;;;-1:-1:-1;;23655:20:0;;-1:-1:-1;;;;;798:55:1;;780:74;;23655:20:0;;768:2:1;753:18;23655:20:0;;;;;;;23524:171;23746:3;23731:12;;23722:6;:21;;;;:::i;:::-;:27;;;;:::i;:::-;23715:34;;23812:12;;23794:15;;23787:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;23765:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;23892:12:0;;23873:16;;23866:23;;:4;:23;:::i;:::-;:38;;;;:::i;:::-;23843:19;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;23958:12:0;;23946:9;;23939:16;;:4;:16;:::i;:::-;:31;;;;:::i;:::-;23923:12;;:47;;;;;;;:::i;:::-;;;;-1:-1:-1;;24026:12:0;;24013:10;;24006:17;;:4;:17;:::i;:::-;:32;;;;:::i;:::-;23989:13;;:49;;;;;;;:::i;:::-;;;;-1:-1:-1;23385:1594:0;;-1:-1:-1;23385:1594:0;;-1:-1:-1;;;;;24103:29:0;;;;;;:25;:29;;;;;;;;:50;;;;;24152:1;24136:13;;:17;24103:50;24099:880;;;24205:3;24189:13;;24180:6;:22;;;;:::i;:::-;:28;;;;:::i;:::-;24173:35;;24275:13;;24256:16;;24249:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;24227:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;24357:13:0;;24337:17;;24330:24;;:4;:24;:::i;:::-;:40;;;;:::i;:::-;24307:19;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;24425:13:0;;24412:10;;24405:17;;:4;:17;:::i;:::-;:33;;;;:::i;:::-;24389:12;;:49;;;;;;;:::i;:::-;;;;-1:-1:-1;;24495:13:0;;24481:11;;24474:18;;:4;:18;:::i;24099:880::-;-1:-1:-1;;;;;24571:31:0;;;;;;:25;:31;;;;;;;;:51;;;;;24621:1;24606:12;;:16;24571:51;24568:411;;;24671:3;24656:12;;24647:6;:21;;;;:::i;:::-;:27;;;;:::i;:::-;24640:34;;24737:12;;24719:15;;24712:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;24690:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;24817:12:0;;24798:16;;24791:23;;:4;:23;:::i;:::-;:38;;;;:::i;:::-;24768:19;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;24883:12:0;;24871:9;;24864:16;;:4;:16;:::i;:::-;:31;;;;:::i;:::-;24848:12;;:47;;;;;;;:::i;:::-;;;;-1:-1:-1;;24951:12:0;;24938:10;;24931:17;;:4;:17;:::i;:::-;:32;;;;:::i;:::-;24914:13;;:49;;;;;;;:::i;:::-;;;;-1:-1:-1;;24568:411:0;24998:8;;24995:89;;25026:42;25042:4;25056;25063;25026:15;:42::i;:::-;25097:14;25107:4;25097:14;;:::i;:::-;;;23323:1800;25135:33;25151:4;25157:2;25161:6;25135:15;:33::i;:::-;20335:4841;;;;20256:4920;;;:::o;26410:1598::-;26470:1;26454:13;;:17;:62;;;;-1:-1:-1;26503:13:0;;26493:4;4727:7;4754:18;;;;;;;;;;;26475:41;;26454:62;26451:129;;;26533:35;26547:4;26554:13;;26533:5;:35::i;:::-;26606:1;26590:13;:17;;;26664:4;4754:18;;;;;;;;;;26620:50;;26681:25;26752:12;;26730:19;;26709:18;;:40;;;;:::i;:::-;:55;;;;:::i;:::-;26681:83;-1:-1:-1;26780:20:0;;;:46;;-1:-1:-1;26804:22:0;;26780:46;26777:60;;;26829:7;;26410:1598::o;26777:60::-;26870:18;;:23;;26891:2;26870:23;:::i;:::-;26852:15;:41;26849:113;;;26927:18;;:23;;26948:2;26927:23;:::i;:::-;26909:41;;26849:113;26974:12;27048:23;27133:1;27113:17;27092:18;;27074:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;27048:86;-1:-1:-1;27147:51:0;27164:33;27048:86;27164:15;:33;:::i;:::-;27147:16;:51::i;:::-;27397:18;;27232:21;;;;27211:18;;27397:20;;27416:1;;27397:20;:::i;:::-;27376:42;;:17;:42;:::i;:::-;27353:19;;27340:32;;:10;:32;:::i;:::-;:79;;;;:::i;:::-;27313:106;;27430:17;27519:1;27500:18;;:20;;;;:::i;:::-;27479:42;;:17;:42;:::i;:::-;27463:12;;27450:25;;:10;:25;:::i;:::-;:72;;;;:::i;:::-;27430:92;-1:-1:-1;27554:28:0;27430:92;27554:16;:28;:::i;:::-;27535:47;;;;:::i;:::-;27616:1;27595:18;:22;;;27628:19;:23;;;27662:12;:16;;;27689:13;:17;27535:47;-1:-1:-1;27722:19:0;;;;;:42;;;27763:1;27745:15;:19;27722:42;27719:119;;;27780:46;27793:15;27810;27780:12;:46::i;:::-;27871:10;;27863:46;;-1:-1:-1;;;;;27871:10:0;;;;27895:9;;27863:46;;;;27895:9;27871:10;27863:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;27943:17:0;;27935:65;;27850:59;;-1:-1:-1;;;;;;27943:17:0;;27974:21;;27935:65;;;;27974:21;27943:17;27935:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;26410:1598:0:o;18311:240::-;-1:-1:-1;;;;;18394:31:0;;;;;;:25;:31;;;;;:39;;-1:-1:-1;;18394:39:0;;;;;;;18446;18394:31;:39;18446:26;:39::i;7372:550::-;-1:-1:-1;;;;;7456:21:0;;7448:67;;;;-1:-1:-1;;;7448:67:0;;24602:2:1;7448:67:0;;;24584:21:1;24641:2;24621:18;;;24614:30;24680:34;24660:18;;;24653:62;-1:-1:-1;;;24731:18:1;;;24724:31;24772:19;;7448:67:0;24400:397:1;7448:67:0;-1:-1:-1;;;;;7551:18:0;;7526:22;7551:18;;;;;;;;;;;7588:24;;;;7580:71;;;;-1:-1:-1;;;7580:71:0;;25004:2:1;7580:71:0;;;24986:21:1;25043:2;25023:18;;;25016:30;25082:34;25062:18;;;25055:62;-1:-1:-1;;;25133:18:1;;;25126:32;25175:19;;7580:71:0;24802:398:1;7580:71:0;-1:-1:-1;;;;;7687:18:0;;:9;:18;;;;;;;;;;;7708:23;;;7687:44;;7826:12;:22;;;;;;;7877:37;1934:25:1;;;7687:9:0;;:18;7877:37;;1907:18:1;7877:37:0;1788:177:1;25312:573:0;25464:16;;;25478:1;25464:16;;;;;;;;25440:21;;25464:16;;;;;;;;;;-1:-1:-1;25464:16:0;25440:40;;25509:4;25491;25496:1;25491:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;25491:23:0;;;:7;;;;;;;;;;:23;;;;25535:9;;:16;;;-1:-1:-1;;;25535:16:0;;;;:9;;;;;:14;;:16;;;;;25491:7;;25535:16;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25525:4;25530:1;25525:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;25525:26:0;;;:7;;;;;;;;;:26;25596:9;;25564:56;;25581:4;;25596:9;25608:11;25564:8;:56::i;:::-;25659:9;;:218;;-1:-1:-1;;;25659:218:0;;-1:-1:-1;;;;;25659:9:0;;;;:60;;:218;;25734:11;;25659:9;;25804:4;;25831;;25851:15;;25659:218;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25367:518;25312:573;:::o;25893:509::-;26073:9;;26041:56;;26058:4;;-1:-1:-1;;;;;26073:9:0;26085:11;26041:8;:56::i;:::-;26140:9;;:254;;-1:-1:-1;;;26140:254:0;;26206:4;26140:254;;;26179:34:1;26229:18;;;26222:34;;;26140:9:0;26272:18:1;;;26265:34;;;26315:18;;;26308:34;26346:6:0;26358:19:1;;;26351:44;26368:15:0;26411:19:1;;;26404:35;-1:-1:-1;;;;;26140:9:0;;;;:25;;26173:9;;26090:19:1;;26140:254:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;25893:509;;:::o;16899:207::-;-1:-1:-1;;;;;16987:39:0;;;;;;:31;:39;;;;;;;;;:52;;-1:-1:-1;;16987:52:0;;;;;;;;;;17055:43;;26929:74:1;;;27019:18;;;27012:50;17055:43:0;;26902:18:1;17055:43:0;26761:307: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;865:154::-;-1:-1:-1;;;;;944:5:1;940:54;933:5;930:65;920:93;;1009:1;1006;999:12;920:93;865:154;:::o;1024:315::-;1092:6;1100;1153:2;1141:9;1132:7;1128:23;1124:32;1121:52;;;1169:1;1166;1159:12;1121:52;1208:9;1195:23;1227:31;1252:5;1227:31;:::i;:::-;1277:5;1329:2;1314:18;;;;1301:32;;-1:-1:-1;;;1024:315:1:o;1536:247::-;1595:6;1648:2;1636:9;1627:7;1623:23;1619:32;1616:52;;;1664:1;1661;1654:12;1616:52;1703:9;1690:23;1722:31;1747:5;1722:31;:::i;:::-;1772:5;1536:247;-1:-1:-1;;;1536:247:1:o;1970:127::-;2031:10;2026:3;2022:20;2019:1;2012:31;2062:4;2059:1;2052:15;2086:4;2083:1;2076:15;2102:275;2173:2;2167:9;2238:2;2219:13;;-1:-1:-1;;2215:27:1;2203:40;;2273:18;2258:34;;2294:22;;;2255:62;2252:88;;;2320:18;;:::i;:::-;2356:2;2349:22;2102:275;;-1:-1:-1;2102:275:1:o;2382:183::-;2442:4;2475:18;2467:6;2464:30;2461:56;;;2497:18;;:::i;:::-;-1:-1:-1;2542:1:1;2538:14;2554:4;2534:25;;2382:183::o;2570:662::-;2624:5;2677:3;2670:4;2662:6;2658:17;2654:27;2644:55;;2695:1;2692;2685:12;2644:55;2731:6;2718:20;2757:4;2781:60;2797:43;2837:2;2797:43;:::i;:::-;2781:60;:::i;:::-;2875:15;;;2961:1;2957:10;;;;2945:23;;2941:32;;;2906:12;;;;2985:15;;;2982:35;;;3013:1;3010;3003:12;2982:35;3049:2;3041:6;3037:15;3061:142;3077:6;3072:3;3069:15;3061:142;;;3143:17;;3131:30;;3181:12;;;;3094;;3061:142;;;-1:-1:-1;3221:5:1;2570:662;-1:-1:-1;;;;;;2570:662:1:o;3237:1215::-;3355:6;3363;3416:2;3404:9;3395:7;3391:23;3387:32;3384:52;;;3432:1;3429;3422:12;3384:52;3472:9;3459:23;3501:18;3542:2;3534:6;3531:14;3528:34;;;3558:1;3555;3548:12;3528:34;3596:6;3585:9;3581:22;3571:32;;3641:7;3634:4;3630:2;3626:13;3622:27;3612:55;;3663:1;3660;3653:12;3612:55;3699:2;3686:16;3721:4;3745:60;3761:43;3801:2;3761:43;:::i;3745:60::-;3839:15;;;3921:1;3917:10;;;;3909:19;;3905:28;;;3870:12;;;;3945:19;;;3942:39;;;3977:1;3974;3967:12;3942:39;4001:11;;;;4021:217;4037:6;4032:3;4029:15;4021:217;;;4117:3;4104:17;4134:31;4159:5;4134:31;:::i;:::-;4178:18;;4054:12;;;;4216;;;;4021:217;;;4257:5;-1:-1:-1;;4300:18:1;;4287:32;;-1:-1:-1;;4331:16:1;;;4328:36;;;4360:1;4357;4350:12;4328:36;;4383:63;4438:7;4427:8;4416:9;4412:24;4383:63;:::i;:::-;4373:73;;;3237:1215;;;;;:::o;4457:456::-;4534:6;4542;4550;4603:2;4591:9;4582:7;4578:23;4574:32;4571:52;;;4619:1;4616;4609:12;4571:52;4658:9;4645:23;4677:31;4702:5;4677:31;:::i;:::-;4727:5;-1:-1:-1;4784:2:1;4769:18;;4756:32;4797:33;4756:32;4797:33;:::i;:::-;4457:456;;4849:7;;-1:-1:-1;;;4903:2:1;4888:18;;;;4875:32;;4457:456::o;4918:180::-;4977:6;5030:2;5018:9;5009:7;5005:23;5001:32;4998:52;;;5046:1;5043;5036:12;4998:52;-1:-1:-1;5069:23:1;;4918:180;-1:-1:-1;4918:180:1:o;5103:385::-;5189:6;5197;5205;5213;5266:3;5254:9;5245:7;5241:23;5237:33;5234:53;;;5283:1;5280;5273:12;5234:53;-1:-1:-1;;5306:23:1;;;5376:2;5361:18;;5348:32;;-1:-1:-1;5427:2:1;5412:18;;5399:32;;5478:2;5463:18;5450:32;;-1:-1:-1;5103:385:1;-1:-1:-1;5103:385:1:o;5913:118::-;5999:5;5992:13;5985:21;5978:5;5975:32;5965:60;;6021:1;6018;6011:12;6036:382;6101:6;6109;6162:2;6150:9;6141:7;6137:23;6133:32;6130:52;;;6178:1;6175;6168:12;6130:52;6217:9;6204:23;6236:31;6261:5;6236:31;:::i;:::-;6286:5;-1:-1:-1;6343:2:1;6328:18;;6315:32;6356:30;6315:32;6356:30;:::i;:::-;6405:7;6395:17;;;6036:382;;;;;:::o;6423:388::-;6491:6;6499;6552:2;6540:9;6531:7;6527:23;6523:32;6520:52;;;6568:1;6565;6558:12;6520:52;6607:9;6594:23;6626:31;6651:5;6626:31;:::i;:::-;6676:5;-1:-1:-1;6733:2:1;6718:18;;6705:32;6746:33;6705:32;6746:33;:::i;6816:380::-;6895:1;6891:12;;;;6938;;;6959:61;;7013:4;7005:6;7001:17;6991:27;;6959:61;7066:2;7058:6;7055:14;7035:18;7032:38;7029:161;;7112:10;7107:3;7103:20;7100:1;7093:31;7147:4;7144:1;7137:15;7175:4;7172:1;7165:15;7029:161;;6816:380;;;:::o;8344:127::-;8405:10;8400:3;8396:20;8393:1;8386:31;8436:4;8433:1;8426:15;8460:4;8457:1;8450:15;8476:127;8537:10;8532:3;8528:20;8525:1;8518:31;8568:4;8565:1;8558:15;8592:4;8589:1;8582:15;8608:135;8647:3;8668:17;;;8665:43;;8688:18;;:::i;:::-;-1:-1:-1;8735:1:1;8724:13;;8608:135::o;9157:168::-;9197:7;9263:1;9259;9255:6;9251:14;9248:1;9245:21;9240:1;9233:9;9226:17;9222:45;9219:71;;;9270:18;;:::i;:::-;-1:-1:-1;9310:9:1;;9157:168::o;9330:217::-;9370:1;9396;9386:132;;9440:10;9435:3;9431:20;9428:1;9421:31;9475:4;9472:1;9465:15;9503:4;9500:1;9493:15;9386:132;-1:-1:-1;9532:9:1;;9330:217::o;9962:128::-;10002:3;10033:1;10029:6;10026:1;10023:13;10020:39;;;10039:18;;:::i;:::-;-1:-1:-1;10075:9:1;;9962:128::o;12772:184::-;12842:6;12895:2;12883:9;12874:7;12870:23;12866:32;12863:52;;;12911:1;12908;12901:12;12863:52;-1:-1:-1;12934:16:1;;12772:184;-1:-1:-1;12772:184:1:o;13263:245::-;13330:6;13383:2;13371:9;13362:7;13358:23;13354:32;13351:52;;;13399:1;13396;13389:12;13351:52;13431:9;13425:16;13450:28;13472:5;13450:28;:::i;18179:251::-;18249:6;18302:2;18290:9;18281:7;18277:23;18273:32;18270:52;;;18318:1;18315;18308:12;18270:52;18350:9;18344:16;18369:31;18394:5;18369:31;:::i;18435:484::-;18488:3;18526:5;18520:12;18553:6;18548:3;18541:19;18579:4;18608:2;18603:3;18599:12;18592:19;;18645:2;18638:5;18634:14;18666:1;18676:218;18690:6;18687:1;18684:13;18676:218;;;18755:13;;-1:-1:-1;;;;;18751:62:1;18739:75;;18834:12;;;;18869:15;;;;18712:1;18705:9;18676:218;;;-1:-1:-1;18910:3:1;;18435:484;-1:-1:-1;;;;;18435:484:1:o;18924:533::-;19195:6;19184:9;19177:25;19238:3;19233:2;19222:9;19218:18;19211:31;19158:4;19259:57;19311:3;19300:9;19296:19;19288:6;19259:57;:::i;:::-;-1:-1:-1;;;;;19352:55:1;;;;19347:2;19332:18;;19325:83;-1:-1:-1;19439:2:1;19424:18;19417:34;19251:65;18924:533;-1:-1:-1;;18924:533:1:o;22675:125::-;22715:4;22743:1;22740;22737:8;22734:34;;;22748:18;;:::i;:::-;-1:-1:-1;22785:9:1;;22675:125::o;25205:605::-;25504:6;25493:9;25486:25;25547:6;25542:2;25531:9;25527:18;25520:34;25590:3;25585:2;25574:9;25570:18;25563:31;25467:4;25611:57;25663:3;25652:9;25648:19;25640:6;25611:57;:::i;:::-;-1:-1:-1;;;;;25704:55:1;;;;25699:2;25684:18;;25677:83;-1:-1:-1;25791:3:1;25776:19;25769:35;25603:65;25205:605;-1:-1:-1;;;25205:605:1:o;26450:306::-;26538:6;26546;26554;26607:2;26595:9;26586:7;26582:23;26578:32;26575:52;;;26623:1;26620;26613:12;26575:52;26652:9;26646:16;26636:26;;26702:2;26691:9;26687:18;26681:25;26671:35;;26746:2;26735:9;26731:18;26725:25;26715:35;;26450:306;;;;;:::o

Swarm Source

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