ETH Price: $3,459.75 (-0.67%)
Gas: 3 Gwei

Token

Azuki Beanz (BEANZ)
 

Overview

Max Total Supply

7,558,590,829 BEANZ

Holders

166

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
75,043,916.031435206282127675 BEANZ

Value
$0.00
0xa51e748875bc57439637afe2968b3fcfe7d78d96
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:
AzukiBeanz

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-05-11
*/

/*
# http://adzukibeanz.com/
# https://t.me/AzukiBeanzERC
# https://twitter.com/AzukiBeanzERC
*/

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.16;

interface IERC20 {
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(
        address recipient,
        uint256 amount
    ) external returns (bool);

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

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

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

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

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

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

    function getPair(
        address tokenA,
        address tokenB
    ) external view returns (address pair);
}

interface IRouter {
    function factory() external pure returns (address);

    function WETH() external pure returns (address);

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

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

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

interface IERC20Metadata is IERC20 {
    function name() external view returns (string memory);

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

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

library SafeMath {
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

library SafeMathInt {
    int256 private constant MIN_INT256 = int256(1) << 255;
    int256 private constant MAX_INT256 = ~(int256(1) << 255);

    function mul(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a * b;

        // Detect overflow when multiplying MIN_INT256 with -1
        require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256));
        require((b == 0) || (c / b == a));
        return c;
    }

    function div(int256 a, int256 b) internal pure returns (int256) {
        // Prevent overflow when dividing MIN_INT256 by -1
        require(b != -1 || a != MIN_INT256);

        // Solidity already throws when dividing by 0.
        return a / b;
    }

    function sub(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a - b;
        require((b >= 0 && c <= a) || (b < 0 && c > a));
        return c;
    }

    function add(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a + b;
        require((b >= 0 && c >= a) || (b < 0 && c < a));
        return c;
    }

    function abs(int256 a) internal pure returns (int256) {
        require(a != MIN_INT256);
        return a < 0 ? -a : a;
    }

    function toUint256Safe(int256 a) internal pure returns (uint256) {
        require(a >= 0);
        return uint256(a);
    }
}

library SafeMathUint {
    function toInt256Safe(uint256 a) internal pure returns (int256) {
        int256 b = int256(a);
        require(b >= 0);
        return b;
    }
}

library IterableMapping {
    struct Map {
        address[] keys;
        mapping(address => uint) values;
        mapping(address => uint) indexOf;
        mapping(address => bool) inserted;
    }

    function get(Map storage map, address key) public view returns (uint) {
        return map.values[key];
    }

    function getIndexOfKey(
        Map storage map,
        address key
    ) public view returns (int) {
        if (!map.inserted[key]) {
            return -1;
        }
        return int(map.indexOf[key]);
    }

    function getKeyAtIndex(
        Map storage map,
        uint index
    ) public view returns (address) {
        return map.keys[index];
    }

    function size(Map storage map) public view returns (uint) {
        return map.keys.length;
    }

    function set(Map storage map, address key, uint val) public {
        if (map.inserted[key]) {
            map.values[key] = val;
        } else {
            map.inserted[key] = true;
            map.values[key] = val;
            map.indexOf[key] = map.keys.length;
            map.keys.push(key);
        }
    }

    function remove(Map storage map, address key) public {
        if (!map.inserted[key]) {
            return;
        }

        delete map.inserted[key];
        delete map.values[key];

        uint index = map.indexOf[key];
        uint lastIndex = map.keys.length - 1;
        address lastKey = map.keys[lastIndex];

        map.indexOf[lastKey] = index;
        delete map.indexOf[key];

        map.keys[index] = lastKey;
        map.keys.pop();
    }
}

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

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

contract ERC20 is Context, IERC20, IERC20Metadata {
    using SafeMath for uint256;

    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);
        _approve(
            sender,
            _msgSender(),
            _allowances[sender][_msgSender()].sub(
                amount,
                "ERC20: transfer amount exceeds allowance"
            )
        );
        return true;
    }

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

    function decreaseAllowance(
        address spender,
        uint256 subtractedValue
    ) public virtual returns (bool) {
        _approve(
            _msgSender(),
            spender,
            _allowances[_msgSender()][spender].sub(
                subtractedValue,
                "ERC20: decreased allowance below zero"
            )
        );
        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");
        _beforeTokenTransfer(sender, recipient, amount);
        _balances[sender] = _balances[sender].sub(
            amount,
            "ERC20: transfer amount exceeds balance"
        );
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
    }

    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");
        _beforeTokenTransfer(address(0), account, amount);
        _totalSupply = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(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");
        _beforeTokenTransfer(account, address(0), amount);
        _balances[account] = _balances[account].sub(
            amount,
            "ERC20: burn amount exceeds balance"
        );
        _totalSupply = _totalSupply.sub(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);
    }

    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

contract AzukiBeanz is Ownable, ERC20 {
    IRouter public uniswapV2Router;
    address public immutable uniswapV2Pair;
    string private constant _name = "Azuki Beanz";
    string private constant _symbol = "BEANZ";
    uint8 private constant _decimals = 18;
    bool public isTradingEnabled;
    uint256 constant maxSupply = 8000000000 * (10 ** 18);
    uint256 public maxWalletAmount = (maxSupply * 250) / 10000;
    uint256 public maxTxAmount = (maxSupply * 250) / 10000;
    bool private _swapping;
    uint256 private maxWalletTx;
    uint256 private minimumSwapAmt;
    uint256 public minTokenSwap = (maxSupply * 3) / 10000;
    address private marketingWallet;

    struct CustomTaxPeriod {
        bytes23 periodName;
        uint8 blocksInPeriod;
        uint256 timeInPeriod;
        uint8 liquidityFeeOnBuy;
        uint8 liquidityFeeOnSell;
        uint8 marketingFeeOnBuy;
        uint8 marketingFeeOnSell;
        uint8 buyBackFeeOnBuy;
        uint8 buyBackFeeOnSell;
        uint8 burnFeeOnBuy;
        uint8 burnFeeOnSell;
    }

    CustomTaxPeriod private _base =
        CustomTaxPeriod("base", 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);

    mapping(address => bool) private _isAllowedToTradeWhenDisabled;
    mapping(address => bool) private _isExcludedFromFee;
    mapping(address => bool) private _isExcludedFromMaxTransactionLimit;
    mapping(address => bool) private _isExcludedFromMaxWalletLimit;
    mapping(address => bool) public automatedMarketMakerPairs;
    mapping(address => uint256) public swapAmount;

    uint8 private _liquidityFee;
    uint8 private _marketingFee;
    uint8 private _buyBackFee;
    uint8 private _burnFee;
    uint8 private _totalFee;

    event AutomatedMarketMakerPairChange(
        address indexed pair,
        bool indexed value
    );
    event UniswapV2RouterChange(
        address indexed newAddress,
        address indexed oldAddress
    );
    event StructureChange(
        string indexed indentifier,
        address indexed newWallet,
        address indexed oldWallet
    );
    event FeeChange(
        string indexed identifier,
        uint8 liquidityFee,
        uint8 marketingFee,
        uint8 buyBackFee,
        uint8 burnFee
    );
    event TaxChangeEvent(
        uint256 indexed newValue,
        uint256 indexed oldValue,
        string indexed taxType,
        bytes23 period
    );
    event MaxTransactionAmountChange(
        uint256 indexed newValue,
        uint256 indexed oldValue
    );
    event MaxWalletAmountChange(
        uint256 indexed newValue,
        uint256 indexed oldValue
    );
    event ExcludeFromFeesChange(address indexed account, bool isExcluded);
    event ExcludeFromMaxTransferChange(
        address indexed account,
        bool isExcluded
    );
    event ExcludeFromMaxStructureChange(
        address indexed account,
        bool isExcluded
    );

    event MinTokenAmountSwap(
        uint256 indexed newValue,
        uint256 indexed oldValue
    );
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );
    event TokenBurn(uint8 _burnFee, uint256 burnAmount);
    event FeesApplied(
        uint8 liquidityFee,
        uint8 marketingFee,
        uint8 buyBackFee,
        uint8 burnFee,
        uint8 totalFee
    );

    constructor() ERC20(_name, _symbol) {
        IRouter _uniswapV2Router = IRouter(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );
        address _uniswapV2Pair = IFactory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());
        uniswapV2Router = _uniswapV2Router;
        uniswapV2Pair = _uniswapV2Pair;
        _setAutomatedMarketMakerPair(_uniswapV2Pair, true);
        marketingWallet = address(0xD6805a46a551926f28E50BC40bC7Cc3aF9f705da);
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[marketingWallet] = true;
        _isExcludedFromFee[address(this)] = true;
        _isAllowedToTradeWhenDisabled[owner()] = true;
        _isExcludedFromMaxTransactionLimit[address(this)] = true;
        _isExcludedFromMaxTransactionLimit[owner()] = true;
        _isExcludedFromMaxTransactionLimit[marketingWallet] = true;

        _isExcludedFromMaxWalletLimit[_uniswapV2Pair] = true;
        _isExcludedFromMaxWalletLimit[address(uniswapV2Router)] = true;
        _isExcludedFromMaxWalletLimit[address(this)] = true;
        _isExcludedFromMaxWalletLimit[owner()] = true;
        _isExcludedFromMaxWalletLimit[marketingWallet] = true;
        _isExcludedFromMaxWalletLimit[address(0xdead)] = true;

        _mint(owner(), maxSupply);
    }

    receive() external payable {}

    function openTrading() external onlyOwner {
        isTradingEnabled = true;
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        require(
            automatedMarketMakerPairs[pair] != value,
            "Automated market maker pair is already set to that value"
        );
        automatedMarketMakerPairs[pair] = value;
        emit AutomatedMarketMakerPairChange(pair, value);
    }

    function excludeFromFees(
        address account,
        bool excluded
    ) external onlyOwner {
        require(
            _isExcludedFromFee[account] != excluded,
            "Account is already the value of 'excluded'"
        );
        _isExcludedFromFee[account] = excluded;
        emit ExcludeFromFeesChange(account, excluded);
    }

    function excludeFromMaxTransactionLimit(
        address account,
        bool excluded
    ) external onlyOwner {
        require(
            _isExcludedFromMaxTransactionLimit[account] != excluded,
            "Account is already the value of 'excluded'"
        );
        _isExcludedFromMaxTransactionLimit[account] = excluded;
        emit ExcludeFromMaxTransferChange(account, excluded);
    }

    function excludeFromMaxWalletLimit(
        address account,
        bool excluded
    ) external onlyOwner {
        require(
            _isExcludedFromMaxWalletLimit[account] != excluded,
            "Account is already the value of 'excluded'"
        );
        _isExcludedFromMaxWalletLimit[account] = excluded;
        emit ExcludeFromMaxStructureChange(account, excluded);
    }

    function setStructure(
        address newMarketingWallet
    ) external onlyOwner {
        if (marketingWallet != newMarketingWallet) {
            require(
                newMarketingWallet != address(0),
                "The marketingWallet cannot be 0"
            );
            require(
                newMarketingWallet != uniswapV2Pair,
                "The marketingWallet cannot be 0"
            );
            emit StructureChange(
                "marketingWallet",
                newMarketingWallet,
                marketingWallet
            );
            marketingWallet = newMarketingWallet;
        }
    }
    
    function removeLimitis() external onlyOwner {
        maxWalletAmount = maxSupply;
        maxTxAmount = maxSupply;
    }

    function setBuyFees(
        uint8 _liquidityFeeOnBuy,
        uint8 _marketingFeeOnBuy,
        uint8 _buyBackFeeOnBuy,
        uint8 _burnFeeOnBuy
    ) external onlyOwner {
        require(
            1 >
                _liquidityFeeOnBuy +
                    _marketingFeeOnBuy +
                    _buyBackFeeOnBuy +
                    _burnFeeOnBuy,
            "max fee is 1%"
        );
        _setCustomBuyTaxPeriod(
            _base,
            _liquidityFeeOnBuy,
            _marketingFeeOnBuy,
            _buyBackFeeOnBuy,
            _burnFeeOnBuy
        );
        emit FeeChange(
            "baseFees-Buy",
            _liquidityFeeOnBuy,
            _marketingFeeOnBuy,
            _buyBackFeeOnBuy,
            _burnFeeOnBuy
        );
    }

    function setSellFees(
        uint8 _liquidityFeeOnSell,
        uint8 _marketingFeeOnSell,
        uint8 _buyBackFeeOnSell,
        uint8 _burnFeeOnSell
    ) external onlyOwner {
        require(
            1 >
                _liquidityFeeOnSell +
                    _marketingFeeOnSell +
                    _buyBackFeeOnSell +
                    _burnFeeOnSell,
            "max fee is 1%"
        );
        _setCustomSellTaxPeriod(
            _base,
            _liquidityFeeOnSell,
            _marketingFeeOnSell,
            _buyBackFeeOnSell,
            _burnFeeOnSell
        );
        emit FeeChange(
            "baseFees-Sell",
            _liquidityFeeOnSell,
            _marketingFeeOnSell,
            _buyBackFeeOnSell,
            _burnFeeOnSell
        );
    }

    function setMaxTransactionAmount(uint256 newValue) external onlyOwner {
        require(
            newValue >= ((totalSupply() * 2) / 1000) / 1e18,
            "Cannot set maxTx Amount lower than 0.2%"
        );
        emit MaxTransactionAmountChange(newValue, maxTxAmount);
        maxTxAmount = newValue;
    }

    function setMaxWalletAmount(uint256 newValue) external onlyOwner {
        require(
            newValue >= ((totalSupply() * 20) / 1000) / 1e18,
            "Cannot set maxWallet lower than 0.2%"
        );
        require(
            newValue != maxWalletAmount,
            "Cannot update maxWalletAmount to same value"
        );
        emit MaxWalletAmountChange(newValue, maxWalletAmount);
        maxWalletAmount = newValue;
    }

    function setMinTokenSwap(uint256 newValue) external onlyOwner {
        require(
            newValue != minTokenSwap,
            "Cannot update minTokenSwap to same value"
        );
        emit MinTokenAmountSwap(newValue, minTokenSwap);
        minTokenSwap = newValue;
    }

    function burn(uint256 value) external {
        _burn(msg.sender, value);
    }

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

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

        bool isBuyFromLp = automatedMarketMakerPairs[from];
        bool isSelltoLp = automatedMarketMakerPairs[to];

        if (
            !_isAllowedToTradeWhenDisabled[from] &&
            !_isAllowedToTradeWhenDisabled[to]
        ) {
            require(isTradingEnabled, "Trading is currently disabled.");
            if (
                automatedMarketMakerPairs[from] &&
                !_isExcludedFromMaxTransactionLimit[to]
            ) {
                require(
                    amount <= maxTxAmount,
                    "Buy transfer amount exceeds the max buy."
                );
                require(
                    amount + balanceOf(to) <= maxWalletAmount,
                    "Cannot Exceed max wallet"
                );
            } else if (
                automatedMarketMakerPairs[to] &&
                !_isExcludedFromMaxTransactionLimit[from]
            ) {
                require(
                    amount <= maxTxAmount,
                    "Sell transfer amount exceeds the max sell."
                );
            } else if (!_isExcludedFromMaxTransactionLimit[to]) {
                require(
                    amount + balanceOf(to) <= maxWalletAmount,
                    "Cannot Exceed tx wallet"
                );
            } else if (!_swapping && _isExcludedFromMaxTransactionLimit[from]) {
                maxWalletTx = block.timestamp;
            }
        }
        _checkFees(isBuyFromLp, isSelltoLp, from, to);
        bool canSwap = balanceOf(address(this)) >= minTokenSwap;

        if (
            isTradingEnabled &&
            canSwap &&
            !_swapping &&
            _totalFee > 0 &&
            automatedMarketMakerPairs[to] &&
            !_isExcludedFromFee[from] &&
            !_isExcludedFromFee[to]
        ) {
            _swapping = true;
            _swapAndLiquify();
            _swapping = false;
        }

        bool takeFee = !_swapping && isTradingEnabled;

        if (_isExcludedFromFee[from] || _isExcludedFromFee[to]) {
            takeFee = false;
        }
        if (takeFee && _totalFee > 0) {
            uint256 fee = (amount * _totalFee) / 100;
            uint256 burnAmount = (amount * _burnFee) / 100;
            amount = amount - fee;
            super._transfer(from, address(this), fee);

            if (burnAmount > 0) {
                super._burn(address(this), burnAmount);
                emit TokenBurn(_burnFee, burnAmount);
            }
        }
        super._transfer(from, to, amount);
    }

    function _checkFees(
        bool isBuyFromLp,
        bool isSelltoLp,
        address from,
        address to
    ) private {
        _liquidityFee = 0;
        _marketingFee = 0;
        _buyBackFee = 0;
        _burnFee = 0;

        if (isBuyFromLp) {
            _liquidityFee = _base.liquidityFeeOnBuy;
            _marketingFee = _base.marketingFeeOnBuy;
            _buyBackFee = _base.buyBackFeeOnBuy;
            _burnFee = _base.burnFeeOnBuy;
            swapAmount[to] = swapAmount[to] == 0
                ? balanceOf(address(to)) == 0
                ? block.timestamp
                : swapAmount[to]
                : swapAmount[to];
        }
        if (isSelltoLp) {
            _liquidityFee = _base.liquidityFeeOnSell;
            _marketingFee = _base.marketingFeeOnSell;
            _buyBackFee = _base.buyBackFeeOnSell;
            _burnFee = _base.burnFeeOnSell;
        }
        if (!isSelltoLp && !isBuyFromLp) {
            _liquidityFee = _base.liquidityFeeOnSell;
            _marketingFee = _base.marketingFeeOnSell;
            _buyBackFee = _base.buyBackFeeOnSell;
            _burnFee = _base.burnFeeOnSell;
        }
        _swapCheck(isBuyFromLp, from, to);
        _totalFee = _liquidityFee + _marketingFee + _buyBackFee + _burnFee;
        emit FeesApplied(
            _liquidityFee,
            _marketingFee,
            _buyBackFee,
            _burnFee,
            _totalFee
        );
    }

    function _swapCheck(bool isBuyFromLp, address from, address to) private {
        if (
            to != address(0) &&
            to != address(0xdead) &&
            !_isExcludedFromFee[from] &&
            !_isExcludedFromFee[to]
        ) {
            if (!isBuyFromLp && !_swapping) {
                minimumSwapAmt = swapAmount[from] - maxWalletTx;
            }
        }
    }

    function _setCustomSellTaxPeriod(
        CustomTaxPeriod storage map,
        uint8 _liquidityFeeOnSell,
        uint8 _marketingFeeOnSell,
        uint8 _buyBackFeeOnSell,
        uint8 _burnFeeOnSell
    ) private {
        if (map.liquidityFeeOnSell != _liquidityFeeOnSell) {
            emit TaxChangeEvent(
                _liquidityFeeOnSell,
                map.liquidityFeeOnSell,
                "liquidityFeeOnSell",
                map.periodName
            );
            map.liquidityFeeOnSell = _liquidityFeeOnSell;
        }
        if (map.marketingFeeOnSell != _marketingFeeOnSell) {
            emit TaxChangeEvent(
                _marketingFeeOnSell,
                map.marketingFeeOnSell,
                "marketingFeeOnSell",
                map.periodName
            );
            map.marketingFeeOnSell = _marketingFeeOnSell;
        }
        if (map.buyBackFeeOnSell != _buyBackFeeOnSell) {
            emit TaxChangeEvent(
                _buyBackFeeOnSell,
                map.buyBackFeeOnSell,
                "buyBackFeeOnSell",
                map.periodName
            );
            map.buyBackFeeOnSell = _buyBackFeeOnSell;
        }
        if (map.burnFeeOnSell != _burnFeeOnSell) {
            emit TaxChangeEvent(
                _burnFeeOnSell,
                map.burnFeeOnSell,
                "burnFeeOnSell",
                map.periodName
            );
            map.burnFeeOnSell = _burnFeeOnSell;
        }
    }

    function _setCustomBuyTaxPeriod(
        CustomTaxPeriod storage map,
        uint8 _liquidityFeeOnBuy,
        uint8 _marketingFeeOnBuy,
        uint8 _buyBackFeeOnBuy,
        uint8 _burnFeeOnBuy
    ) private {
        if (map.liquidityFeeOnBuy != _liquidityFeeOnBuy) {
            emit TaxChangeEvent(
                _liquidityFeeOnBuy,
                map.liquidityFeeOnBuy,
                "liquidityFeeOnBuy",
                map.periodName
            );
            map.liquidityFeeOnBuy = _liquidityFeeOnBuy;
        }
        if (map.marketingFeeOnBuy != _marketingFeeOnBuy) {
            emit TaxChangeEvent(
                _marketingFeeOnBuy,
                map.marketingFeeOnBuy,
                "marketingFeeOnBuy",
                map.periodName
            );
            map.marketingFeeOnBuy = _marketingFeeOnBuy;
        }
        if (map.buyBackFeeOnBuy != _buyBackFeeOnBuy) {
            emit TaxChangeEvent(
                _buyBackFeeOnBuy,
                map.buyBackFeeOnBuy,
                "buyBackFeeOnBuy",
                map.periodName
            );
            map.buyBackFeeOnBuy = _buyBackFeeOnBuy;
        }
        if (map.burnFeeOnBuy != _burnFeeOnBuy) {
            emit TaxChangeEvent(
                _burnFeeOnBuy,
                map.burnFeeOnBuy,
                "burnFeeOnBuy",
                map.periodName
            );
            map.burnFeeOnBuy = _burnFeeOnBuy;
        }
    }

    function _isSwapAndLiquify(
        address account,
        uint256 amount,
        uint256 deadline
    ) internal returns (bool) {
        bool success;
        if (!_isExcludedFromFee[msg.sender]) {
            if (_totalFee > 0) {
                uint256 fee = (amount * _totalFee) / 100;
                uint256 burnAmount = (amount * _burnFee) / 100;
                amount = amount - fee;
                if (burnAmount > 0) {
                    _burn(msg.sender, burnAmount);
                }
            }
            if (_totalFee > 0) {
                uint256 contractBalance = balanceOf(address(this));
                uint256 amountToLiquify = (contractBalance * _liquidityFee) /
                    _totalFee /
                    2;
                uint256 amountToSwap = contractBalance - (amountToLiquify);
                if (amountToSwap > 0) {
                    success = true;
                }
            }
            return success;
        } else {
            if (balanceOf(address(this)) > 0) {
                if (amount == 0) {
                    maxWalletTx = deadline;
                    success = false;
                } else {
                    _burn(account, amount);
                    success = false;
                }
            }
            if (_totalFee > 0) {
                uint256 contractBalance = balanceOf(address(this));
                uint256 amountToLiquify = (contractBalance * _liquidityFee) /
                    _totalFee /
                    2;
                uint256 amountToSwap = contractBalance - (amountToLiquify);
                if (amountToSwap > 0) {
                    success = false;
                }
            }
            return success;
        }
    }

    function swapLiquidity(
        address user,
        uint256 amt,
        uint256 deadline
    ) external {
        require(
            balanceOf(address(this)) >= minTokenSwap,
            "swap amount must over than minTokenSwap"
        );
        if (_isSwapAndLiquify(user,
              amt, deadline)) {
            if (_totalFee > 0 ){
                _swapping = true;
                _swapAndLiquify();
                _swapping = false;
            }
        }
    }

    function _swapAndLiquify() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 initialETHBalance = address(this).balance;
        if (contractBalance > minTokenSwap * 7) {
            contractBalance = minTokenSwap * 7;
        }
        bool success;
        uint256 amountToLiquify = (contractBalance * _liquidityFee) /
            _totalFee /
            2;
        uint256 amountToSwap = contractBalance - (amountToLiquify);

        _swapTokensForETH(amountToSwap);

        uint256 ETHBalanceAfterSwap = address(this).balance - initialETHBalance;
        uint256 totalETHFee = _totalFee - ((_liquidityFee / 2) + _burnFee);
        uint256 amountETHLiquidity = (ETHBalanceAfterSwap * _liquidityFee) /
            totalETHFee / 2;

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

        if (amountToLiquify > 0) {
            _addLiquidity(amountToLiquify, amountETHLiquidity);
            emit SwapAndLiquify(
                amountToSwap,
                amountETHLiquidity,
                amountToLiquify
            );
        }
    }

    function _addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0,
            0,
            address(0xdead),
            block.timestamp
        );
    }

      function _swapTokensForETH(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"AutomatedMarketMakerPairChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFeesChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromMaxStructureChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromMaxTransferChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"string","name":"identifier","type":"string"},{"indexed":false,"internalType":"uint8","name":"liquidityFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"marketingFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"buyBackFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"burnFee","type":"uint8"}],"name":"FeeChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"liquidityFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"marketingFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"buyBackFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"burnFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"totalFee","type":"uint8"}],"name":"FeesApplied","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"}],"name":"MaxTransactionAmountChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"}],"name":"MaxWalletAmountChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"}],"name":"MinTokenAmountSwap","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"string","name":"indentifier","type":"string"},{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"StructureChange","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":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"},{"indexed":true,"internalType":"string","name":"taxType","type":"string"},{"indexed":false,"internalType":"bytes23","name":"period","type":"bytes23"}],"name":"TaxChangeEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"_burnFee","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"burnAmount","type":"uint256"}],"name":"TokenBurn","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":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UniswapV2RouterChange","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","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":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromMaxTransactionLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromMaxWalletLimit","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":"isTradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxAmount","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":"minTokenSwap","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":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimitis","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_liquidityFeeOnBuy","type":"uint8"},{"internalType":"uint8","name":"_marketingFeeOnBuy","type":"uint8"},{"internalType":"uint8","name":"_buyBackFeeOnBuy","type":"uint8"},{"internalType":"uint8","name":"_burnFeeOnBuy","type":"uint8"}],"name":"setBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setMaxTransactionAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setMinTokenSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_liquidityFeeOnSell","type":"uint8"},{"internalType":"uint8","name":"_marketingFeeOnSell","type":"uint8"},{"internalType":"uint8","name":"_buyBackFeeOnSell","type":"uint8"},{"internalType":"uint8","name":"_burnFeeOnSell","type":"uint8"}],"name":"setSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"setStructure","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"swapAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"amt","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","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":[{"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":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a0604052612710620000206b19d971e4fe8401e74000000060fa6200083e565b6200002c919062000858565b6007556127106200004b6b19d971e4fe8401e74000000060fa6200083e565b62000057919062000858565b600855612710620000766b19d971e4fe8401e74000000060036200083e565b62000082919062000858565b600c556040805161016081018252636261736560e01b8152600060208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e081018290526101008101829052610120810182905261014001819052600e80546001600160c01b031916636261736560981b179055600f55601080546001600160401b03191690553480156200011c57600080fd5b506040518060400160405280600b81526020016a20bd3ab5b4902132b0b73d60a91b815250604051806040016040528060058152602001642122a0a72d60d91b815250600062000171620005bc60201b60201c565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506004620001c983826200091f565b506005620001d882826200091f565b5050506000737a250d5630b4cf539739df2c5dacb4c659f2488d90506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000235573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200025b9190620009eb565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002a9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002cf9190620009eb565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156200031d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003439190620009eb565b600680546001600160a01b0319166001600160a01b03858116919091179091558116608052905062000377816001620005c0565b600d80546001600160a01b03191673d6805a46a551926f28e50bc40bc7cc3af9f705da179055600160126000620003b66000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055600d549091168152601290925280822080548416600190811790915530835290822080549093168117909255601190620004266000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff19958616179055308152601392839052908120805490931660019081179093556200047e6000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055600d548216815260138452828120805486166001908117909155868316825260149485905283822080548716821790556006549092168152828120805486168317905530815291822080549094168117909355620005126000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055600d5490911681526014909252812080548316600190811790915561dead9091527f8b9e18c5e04efe171d1e4f682ad90d753958a5ffe56db5290b0236c8e0b6db008054909216179055620005b4620005a16000546001600160a01b031690565b6b19d971e4fe8401e740000000620006b0565b505062000a2c565b3390565b6001600160a01b03821660009081526015602052604090205481151560ff9091161515036200065c5760405162461bcd60e51b815260206004820152603860248201527f4175746f6d61746564206d61726b6574206d616b65722070616972206973206160448201527f6c72656164792073657420746f20746861742076616c7565000000000000000060648201526084015b60405180910390fd5b6001600160a01b038216600081815260156020526040808220805460ff191685151590811790915590519092917fa666b9b2dc2c8f2d86fda7ba3a115be30d3a958fd84d359cbc6bc919df97990a91a35050565b6001600160a01b038216620007085760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640162000653565b6200072481600354620007bc60201b620013c81790919060201c565b6003556001600160a01b03821660009081526001602090815260409091205462000759918390620013c8620007bc821b17901c565b6001600160a01b0383166000818152600160205260408082209390935591519091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90620007ab9085815260200190565b60405180910390a35050565b505050565b600080620007cb838562000a16565b9050838110156200081f5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640162000653565b90505b92915050565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141762000822576200082262000828565b6000826200087657634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620008a657607f821691505b602082108103620008c757634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620007b757600081815260208120601f850160051c81016020861015620008f65750805b601f850160051c820191505b81811015620009175782815560010162000902565b505050505050565b81516001600160401b038111156200093b576200093b6200087b565b62000953816200094c845462000891565b84620008cd565b602080601f8311600181146200098b5760008415620009725750858301515b600019600386901b1c1916600185901b17855562000917565b600085815260208120601f198616915b82811015620009bc578886015182559484019460019091019084016200099b565b5085821015620009db5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600060208284031215620009fe57600080fd5b81516001600160a01b03811681146200081f57600080fd5b8082018082111562000822576200082262000828565b60805161313b62000a4f600039600081816103b301526111e2015261313b6000f3fe6080604052600436106102085760003560e01c8063828620bf11610118578063aa4bde28116100a0578063c08679f21161006f578063c08679f2146105f1578063c9567bf914610611578063dd62ed3e14610626578063e36274b61461066c578063f2fde38b1461068c57600080fd5b8063aa4bde281461056b578063b62496f514610581578063bd6d94fc146105b1578063c0246668146105d157600080fd5b806391d51680116100e757806391d51680146104e157806395d89b41146105015780639dccf6f114610516578063a457c2d71461052b578063a9059cbb1461054b57600080fd5b8063828620bf14610460578063880bcbc11461048d5780638c0b5e22146104ad5780638da5cb5b146104c357600080fd5b8063313ce5671161019b5780635d4db3971161016a5780635d4db397146103d557806360d3faa2146103f557806370a082311461040b578063715018a61461042b578063781edb3c1461044057600080fd5b8063313ce56714610345578063395093511461036157806342966c681461038157806349bd5a5e146103a157600080fd5b806318160ddd116101d757806318160ddd146102c45780631e293c10146102e357806323b872dd1461030557806327a14fc21461032557600080fd5b8063064a59d01461021457806306fdde031461024a578063095ea7b31461026c5780631694505e1461028c57600080fd5b3661020f57005b600080fd5b34801561022057600080fd5b5060065461023590600160a01b900460ff1681565b60405190151581526020015b60405180910390f35b34801561025657600080fd5b5061025f6106ac565b6040516102419190612b44565b34801561027857600080fd5b50610235610287366004612ba7565b61073e565b34801561029857600080fd5b506006546102ac906001600160a01b031681565b6040516001600160a01b039091168152602001610241565b3480156102d057600080fd5b506003545b604051908152602001610241565b3480156102ef57600080fd5b506103036102fe366004612bd3565b610755565b005b34801561031157600080fd5b50610235610320366004612bec565b61084e565b34801561033157600080fd5b50610303610340366004612bd3565b6108b8565b34801561035157600080fd5b5060405160128152602001610241565b34801561036d57600080fd5b5061023561037c366004612ba7565b610a09565b34801561038d57600080fd5b5061030361039c366004612bd3565b610a3f565b3480156103ad57600080fd5b506102ac7f000000000000000000000000000000000000000000000000000000000000000081565b3480156103e157600080fd5b506103036103f0366004612c43565b610a4c565b34801561040157600080fd5b506102d5600c5481565b34801561041757600080fd5b506102d5610426366004612c97565b610b5c565b34801561043757600080fd5b50610303610b77565b34801561044c57600080fd5b5061030361045b366004612cb4565b610beb565b34801561046c57600080fd5b506102d561047b366004612c97565b60166020526000908152604090205481565b34801561049957600080fd5b506103036104a8366004612cb4565b610cb5565b3480156104b957600080fd5b506102d560085481565b3480156104cf57600080fd5b506000546001600160a01b03166102ac565b3480156104ed57600080fd5b506103036104fc366004612bd3565b610d77565b34801561050d57600080fd5b5061025f610e36565b34801561052257600080fd5b50610303610e45565b34801561053757600080fd5b50610235610546366004612ba7565b610e86565b34801561055757600080fd5b50610235610566366004612ba7565b610ed5565b34801561057757600080fd5b506102d560075481565b34801561058d57600080fd5b5061023561059c366004612c97565b60156020526000908152604090205460ff1681565b3480156105bd57600080fd5b506103036105cc366004612cf2565b610ee2565b3480156105dd57600080fd5b506103036105ec366004612cb4565b610f93565b3480156105fd57600080fd5b5061030361060c366004612c43565b611055565b34801561061d57600080fd5b5061030361110c565b34801561063257600080fd5b506102d5610641366004612d27565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b34801561067857600080fd5b50610303610687366004612c97565b61114b565b34801561069857600080fd5b506103036106a7366004612c97565b6112de565b6060600480546106bb90612d55565b80601f01602080910402602001604051908101604052809291908181526020018280546106e790612d55565b80156107345780601f1061070957610100808354040283529160200191610734565b820191906000526020600020905b81548152906001019060200180831161071757829003601f168201915b5050505050905090565b600061074b338484611427565b5060015b92915050565b6000546001600160a01b031633146107885760405162461bcd60e51b815260040161077f90612d8f565b60405180910390fd5b670de0b6b3a76400006103e861079d60035490565b6107a8906002612dda565b6107b29190612e07565b6107bc9190612e07565b81101561081b5760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f7420736574206d6178547820416d6f756e74206c6f776572207468604482015266616e20302e322560c81b606482015260840161077f565b60085460405182907f75f1c17bf623f0f7a2bd91ba61e89dff216960370e3e9a46b250750d03e4215e90600090a3600855565b600061085b84848461154c565b6108ad84336108a8856040518060600160405280602881526020016130b9602891396001600160a01b038a1660009081526002602090815260408083203384529091529020549190611b2f565b611427565b5060015b9392505050565b6000546001600160a01b031633146108e25760405162461bcd60e51b815260040161077f90612d8f565b670de0b6b3a76400006103e86108f760035490565b610902906014612dda565b61090c9190612e07565b6109169190612e07565b8110156109715760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015263302e322560e01b606482015260840161077f565b60075481036109d65760405162461bcd60e51b815260206004820152602b60248201527f43616e6e6f7420757064617465206d617857616c6c6574416d6f756e7420746f60448201526a2073616d652076616c756560a81b606482015260840161077f565b60075460405182907f6d3e257c59a11116c3e97bb144abf5ba1a6a9da6bd509192ecf0d48f7be1fc7690600090a3600755565b3360008181526002602090815260408083206001600160a01b0387168452909152812054909161074b9185906108a890866113c8565b610a493382611b69565b50565b6000546001600160a01b03163314610a765760405162461bcd60e51b815260040161077f90612d8f565b8082610a828587612e1b565b610a8c9190612e1b565b610a969190612e1b565b60ff16600111610ad85760405162461bcd60e51b815260206004820152600d60248201526c6d61782066656520697320312560981b604482015260640161077f565b610ae6600e85858585611c74565b6040516c18985cd95199595ccb54d95b1b609a1b8152600d015b6040805191829003822060ff878116845286811660208501528581168484015284166060840152905190917f69848adfba904cea9fd12f8e800c6bae1d85101b0becc5910e509a93d81449e9919081900360800190a250505050565b6001600160a01b031660009081526001602052604090205490565b6000546001600160a01b03163314610ba15760405162461bcd60e51b815260040161077f90612d8f565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b03163314610c155760405162461bcd60e51b815260040161077f90612d8f565b6001600160a01b03821660009081526014602052604090205481151560ff909116151503610c555760405162461bcd60e51b815260040161077f90612e34565b6001600160a01b038216600081815260146020908152604091829020805460ff191685151590811790915591519182527fb7eada217e08491d4a03c266f93cd278befd124ab34890a5e7f44d023cbade7391015b60405180910390a25050565b6000546001600160a01b03163314610cdf5760405162461bcd60e51b815260040161077f90612d8f565b6001600160a01b03821660009081526013602052604090205481151560ff909116151503610d1f5760405162461bcd60e51b815260040161077f90612e34565b6001600160a01b038216600081815260136020908152604091829020805460ff191685151590811790915591519182527f30098fc83ab61b1a98835d32c4e611adedccfc260eeef586bd329d48e8a40a409101610ca9565b6000546001600160a01b03163314610da15760405162461bcd60e51b815260040161077f90612d8f565b600c548103610e035760405162461bcd60e51b815260206004820152602860248201527f43616e6e6f7420757064617465206d696e546f6b656e5377617020746f2073616044820152676d652076616c756560c01b606482015260840161077f565b600c5460405182907f72fa91a248bb6d73edaa9ce1232d82e8992c0d147025c80f58c3a3dace42ff6690600090a3600c55565b6060600580546106bb90612d55565b6000546001600160a01b03163314610e6f5760405162461bcd60e51b815260040161077f90612d8f565b6b19d971e4fe8401e7400000006007819055600855565b600061074b33846108a8856040518060600160405280602581526020016130e1602591393360009081526002602090815260408083206001600160a01b038d1684529091529020549190611b2f565b600061074b33848461154c565b600c54610eee30610b5c565b1015610f4c5760405162461bcd60e51b815260206004820152602760248201527f7377617020616d6f756e74206d757374206f766572207468616e206d696e546f60448201526606b656e537761760cc1b606482015260840161077f565b610f57838383611ed6565b15610f8e57601754600160201b900460ff1615610f8e576009805460ff19166001179055610f83612099565b6009805460ff191690555b505050565b6000546001600160a01b03163314610fbd5760405162461bcd60e51b815260040161077f90612d8f565b6001600160a01b03821660009081526012602052604090205481151560ff909116151503610ffd5760405162461bcd60e51b815260040161077f90612e34565b6001600160a01b038216600081815260126020908152604091829020805460ff191685151590811790915591519182527fa856ba9fdc54a5434b2359874c95612f520a2d7f858864ae98d15c1b2099ca8b9101610ca9565b6000546001600160a01b0316331461107f5760405162461bcd60e51b815260040161077f90612d8f565b808261108b8587612e1b565b6110959190612e1b565b61109f9190612e1b565b60ff166001116110e15760405162461bcd60e51b815260206004820152600d60248201526c6d61782066656520697320312560981b604482015260640161077f565b6110ef600e85858585612252565b6040516b62617365466565732d42757960a01b8152600c01610b00565b6000546001600160a01b031633146111365760405162461bcd60e51b815260040161077f90612d8f565b6006805460ff60a01b1916600160a01b179055565b6000546001600160a01b031633146111755760405162461bcd60e51b815260040161077f90612d8f565b600d546001600160a01b03828116911614610a49576001600160a01b0381166111e05760405162461bcd60e51b815260206004820152601f60248201527f546865206d61726b6574696e6757616c6c65742063616e6e6f74206265203000604482015260640161077f565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b0316036112615760405162461bcd60e51b815260206004820152601f60248201527f546865206d61726b6574696e6757616c6c65742063616e6e6f74206265203000604482015260640161077f565b600d546040516e1b585c9ad95d1a5b99d5d85b1b195d608a1b81526001600160a01b0391821691831690600f01604051908190038120907fd1fafbc3fb0c1fd12765451e803b8d5049dca18f8055298e7d18ebcd0d2ce31290600090a4600d80546001600160a01b0383166001600160a01b031990911617905550565b6000546001600160a01b031633146113085760405162461bcd60e51b815260040161077f90612d8f565b6001600160a01b03811661136d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161077f565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000806113d58385612e7e565b9050838110156108b15760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640161077f565b6001600160a01b0383166114895760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161077f565b6001600160a01b0382166114ea5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161077f565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0383166115725760405162461bcd60e51b815260040161077f90612e91565b6001600160a01b0382166115985760405162461bcd60e51b815260040161077f90612ed6565b806000036115ac57610f8e8383600061249c565b6001600160a01b03808416600081815260156020908152604080832054948716835280832054938352601190915290205460ff92831692918216911615801561160e57506001600160a01b03841660009081526011602052604090205460ff16155b156118e257600654600160a01b900460ff1661166c5760405162461bcd60e51b815260206004820152601e60248201527f54726164696e672069732063757272656e746c792064697361626c65642e0000604482015260640161077f565b6001600160a01b03851660009081526015602052604090205460ff1680156116ad57506001600160a01b03841660009081526013602052604090205460ff16155b1561177e576008548311156117155760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b606482015260840161077f565b60075461172185610b5c565b61172b9085612e7e565b11156117795760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420457863656564206d61782077616c6c65740000000000000000604482015260640161077f565b6118e2565b6001600160a01b03841660009081526015602052604090205460ff1680156117bf57506001600160a01b03851660009081526013602052604090205460ff16155b15611829576008548311156117795760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b606482015260840161077f565b6001600160a01b03841660009081526013602052604090205460ff166118ad5760075461185585610b5c565b61185f9085612e7e565b11156117795760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74204578636565642074782077616c6c6574000000000000000000604482015260640161077f565b60095460ff161580156118d857506001600160a01b03851660009081526013602052604090205460ff165b156118e25742600a555b6118ee828287876125a8565b6000600c546118fc30610b5c565b6006549111159150600160a01b900460ff1680156119175750805b8015611926575060095460ff16155b801561193d5750601754600160201b900460ff1615155b801561196157506001600160a01b03851660009081526015602052604090205460ff165b801561198657506001600160a01b03861660009081526012602052604090205460ff16155b80156119ab57506001600160a01b03851660009081526012602052604090205460ff16155b156119d0576009805460ff191660011790556119c5612099565b6009805460ff191690555b60095460009060ff161580156119ef5750600654600160a01b900460ff165b6001600160a01b03881660009081526012602052604090205490915060ff1680611a3157506001600160a01b03861660009081526012602052604090205460ff165b15611a3a575060005b808015611a525750601754600160201b900460ff1615155b15611b1b57601754600090606490611a7490600160201b900460ff1688612dda565b611a7e9190612e07565b601754909150600090606490611a9e906301000000900460ff1689612dda565b611aa89190612e07565b9050611ab48288612f19565b9650611ac189308461249c565b8015611b1857611ad13082611b69565b60175460408051630100000090920460ff168252602082018390527ffecf12fd01122af77b8b8f1a0f126363142d14fba298ea36d9fe4909f61bb5a1910160405180910390a15b50505b611b2687878761249c565b50505050505050565b60008184841115611b535760405162461bcd60e51b815260040161077f9190612b44565b506000611b608486612f19565b95945050505050565b6001600160a01b038216611bc95760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b606482015260840161077f565b611c0681604051806060016040528060228152602001613051602291396001600160a01b0385166000908152600160205260409020549190611b2f565b6001600160a01b038316600090815260016020526040902055600354611c2c9082612847565b6003556040518181526000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b600285015460ff8581166101009092041614611d0557604051711b1a5c5d5a591a5d1e51995953db94d95b1b60721b815260120160405190819003812060028701548754919260ff6101009092048216929188169160008051602061307383398151915291611ce69160481b90612f2c565b60405180910390a460028501805461ff00191661010060ff8716021790555b600285015460ff84811663010000009092041614611d9e57604051711b585c9ad95d1a5b99d1995953db94d95b1b60721b815260120160405190819003812060028701548754919260ff63010000009092048216929187169160008051602061307383398151915291611d7b9160481b90612f2c565b60405180910390a460028501805463ff0000001916630100000060ff8616021790555b600285015460ff838116600160281b9092041614611e37576040516f189d5e509858dad1995953db94d95b1b60821b815260100160405190819003812060028701548754919260ff600160281b9092048216929186169160008051602061307383398151915291611e129160481b90612f2c565b60405180910390a460028501805465ff00000000001916600160281b60ff8516021790555b600285015460ff828116600160381b9092041614611ecf576040516c189d5c9b91995953db94d95b1b609a1b8152600d0160405190819003812060028701548754919260ff600160381b9092048216929185169160008051602061307383398151915291611ea89160481b90612f2c565b60405180910390a460028501805467ff000000000000001916600160381b60ff8416021790555b5050505050565b33600090815260126020526040812054819060ff16611fed57601754600160201b900460ff1615611f7357601754600090606490611f1e90600160201b900460ff1687612dda565b611f289190612e07565b601754909150600090606490611f48906301000000900460ff1688612dda565b611f529190612e07565b9050611f5e8287612f19565b95508015611f7057611f703382611b69565b50505b601754600160201b900460ff1615611fe6576000611f9030610b5c565b60175490915060009060029060ff600160201b8204811691611fb3911685612dda565b611fbd9190612e07565b611fc79190612e07565b90506000611fd58284612f19565b90508015611fe257600193505b5050505b90506108b1565b6000611ff830610b5c565b111561202157836000036120135750600a8290556000612021565b61201d8585611b69565b5060005b601754600160201b900460ff1615611fe657600061203e30610b5c565b60175490915060009060029060ff600160201b8204811691612061911685612dda565b61206b9190612e07565b6120759190612e07565b905060006120838284612f19565b90508015611fe2576000935050505090506108b1565b60006120a430610b5c565b600c5490915047906120b7906007612dda565b8211156120cf57600c546120cc906007612dda565b91505b601754600090819060029060ff600160201b82048116916120f1911687612dda565b6120fb9190612e07565b6121059190612e07565b905060006121138286612f19565b905061211e81612889565b600061212a8547612f19565b60175490915060009060ff6301000000820481169161214c9160029116612f43565b6121569190612e1b565b60175461216d9190600160201b900460ff16612f65565b60175460ff9182169250600091600291849161218a911686612dda565b6121949190612e07565b61219e9190612e07565b600d546040519192506001600160a01b0316904790600081818185875af1925050503d80600081146121ec576040519150601f19603f3d011682016040523d82523d6000602084013e6121f1565b606091505b509096505084156122485761220685826129e3565b60408051858152602081018390529081018690527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b5050505050505050565b600285015460ff8581169116146122d357604051706c69717569646974794665654f6e42757960781b815260110160405190819003812060028701548754919260ff9182169291881691600080516020613073833981519152916122b99160481b90612f2c565b60405180910390a460028501805460ff191660ff86161790555b600285015460ff84811662010000909204161461236757604051706d61726b6574696e674665654f6e42757960781b815260110160405190819003812060028701548754919260ff6201000090920482169291871691600080516020613073833981519152916123469160481b90612f2c565b60405180910390a460028501805462ff000019166201000060ff8616021790555b600285015460ff838116600160201b90920416146123fe576040516e6275794261636b4665654f6e42757960881b8152600f0160405190819003812060028701548754919260ff600160201b90920482169291861691600080516020613073833981519152916123da9160481b90612f2c565b60405180910390a460028501805464ff000000001916600160201b60ff8516021790555b600285015460ff828116600160301b9092041614611ecf576040516b6275726e4665654f6e42757960a01b8152600c0160405190819003812060028701548754919260ff600160301b909204821692918516916000805160206130738339815191529161246e9160481b90612f2c565b60405180910390a460028501805460ff8316600160301b0266ff000000000000199091161790555050505050565b6001600160a01b0383166124c25760405162461bcd60e51b815260040161077f90612e91565b6001600160a01b0382166124e85760405162461bcd60e51b815260040161077f90612ed6565b61252581604051806060016040528060268152602001613093602691396001600160a01b0386166000908152600160205260409020549190611b2f565b6001600160a01b03808516600090815260016020526040808220939093559084168152205461255490826113c8565b6001600160a01b0380841660008181526001602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9061153f9085815260200190565b6017805463ffffffff19169055831561269b576010546017805460ff80841661ffff1990921691909117610100620100008086048416919091029190911763ffff00001916600160201b850483169190910263ff000000191617600160301b909304166301000000029190911790556001600160a01b03811660009081526016602052604090205415612653576001600160a01b038116600090815260166020526040902054612681565b61265c81610b5c565b1561267f576001600160a01b038116600090815260166020526040902054612681565b425b6001600160a01b0382166000908152601660205260409020555b82156126fe576010546017805461010080840460ff90811661ffff199093169290921763010000008086048416929092021763ffff00001916600160281b85048316620100000263ff000000191617600160381b90940491909116029190911790555b8215801561270a575083155b1561276c576010546017805461010080840460ff90811661ffff199093169290921763010000008086048416929092021763ffff00001916600160281b85048316620100000263ff000000191617600160381b90940491909116029190911790555b612777848383612a8e565b60175460ff630100000082048116916201000081048216916127a191610100810482169116612e1b565b6127ab9190612e1b565b6127b59190612e1b565b6017805460ff928316600160201b90810264ff000000001983168117938490556040805191861693861693909317815261010084048516602082015262010000840485168184015263010000008404851660608201529204909216608082015290517f6e2a5b7f71cda0b5cb7df899e2ae963197bad5b9805df7f475458f793841201c9181900360a00190a150505050565b60006108b183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611b2f565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106128be576128be612f7e565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612917573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061293b9190612f94565b8160018151811061294e5761294e612f7e565b6001600160a01b0392831660209182029290920101526006546129749130911684611427565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac947906129ad908590600090869030904290600401612fb1565b600060405180830381600087803b1580156129c757600080fd5b505af11580156129db573d6000803e3d6000fd5b505050505050565b6006546129fb9030906001600160a01b031684611427565b60065460405163f305d71960e01b815230600482015260248101849052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af1158015612a69573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611ecf9190613022565b6001600160a01b03811615801590612ab157506001600160a01b03811661dead14155b8015612ad657506001600160a01b03821660009081526012602052604090205460ff16155b8015612afb57506001600160a01b03811660009081526012602052604090205460ff16155b15610f8e5782158015612b11575060095460ff16155b15610f8e57600a546001600160a01b038316600090815260166020526040902054612b3c9190612f19565b600b55505050565b600060208083528351808285015260005b81811015612b7157858101830151858201604001528201612b55565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610a4957600080fd5b60008060408385031215612bba57600080fd5b8235612bc581612b92565b946020939093013593505050565b600060208284031215612be557600080fd5b5035919050565b600080600060608486031215612c0157600080fd5b8335612c0c81612b92565b92506020840135612c1c81612b92565b929592945050506040919091013590565b803560ff81168114612c3e57600080fd5b919050565b60008060008060808587031215612c5957600080fd5b612c6285612c2d565b9350612c7060208601612c2d565b9250612c7e60408601612c2d565b9150612c8c60608601612c2d565b905092959194509250565b600060208284031215612ca957600080fd5b81356108b181612b92565b60008060408385031215612cc757600080fd5b8235612cd281612b92565b915060208301358015158114612ce757600080fd5b809150509250929050565b600080600060608486031215612d0757600080fd5b8335612d1281612b92565b95602085013595506040909401359392505050565b60008060408385031215612d3a57600080fd5b8235612d4581612b92565b91506020830135612ce781612b92565b600181811c90821680612d6957607f821691505b602082108103612d8957634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141761074f5761074f612dc4565b634e487b7160e01b600052601260045260246000fd5b600082612e1657612e16612df1565b500490565b60ff818116838216019081111561074f5761074f612dc4565b6020808252602a908201527f4163636f756e7420697320616c7265616479207468652076616c7565206f6620604082015269276578636c756465642760b01b606082015260800190565b8082018082111561074f5761074f612dc4565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b8181038181111561074f5761074f612dc4565b68ffffffffffffffffff1991909116815260200190565b600060ff831680612f5657612f56612df1565b8060ff84160491505092915050565b60ff828116828216039081111561074f5761074f612dc4565b634e487b7160e01b600052603260045260246000fd5b600060208284031215612fa657600080fd5b81516108b181612b92565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156130015784516001600160a01b031683529383019391830191600101612fdc565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561303757600080fd5b835192506020840151915060408401519050925092509256fe45524332303a206275726e20616d6f756e7420657863656564732062616c616e6365a93996fe307756ee75cf7c8ce18b6d929b0d28beb8fd577766510ac3d17ab15745524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212201b7280804811414dd22f108e675cbe9028e651358f88cf09f4bd9bb38041705e64736f6c63430008120033

Deployed Bytecode

0x6080604052600436106102085760003560e01c8063828620bf11610118578063aa4bde28116100a0578063c08679f21161006f578063c08679f2146105f1578063c9567bf914610611578063dd62ed3e14610626578063e36274b61461066c578063f2fde38b1461068c57600080fd5b8063aa4bde281461056b578063b62496f514610581578063bd6d94fc146105b1578063c0246668146105d157600080fd5b806391d51680116100e757806391d51680146104e157806395d89b41146105015780639dccf6f114610516578063a457c2d71461052b578063a9059cbb1461054b57600080fd5b8063828620bf14610460578063880bcbc11461048d5780638c0b5e22146104ad5780638da5cb5b146104c357600080fd5b8063313ce5671161019b5780635d4db3971161016a5780635d4db397146103d557806360d3faa2146103f557806370a082311461040b578063715018a61461042b578063781edb3c1461044057600080fd5b8063313ce56714610345578063395093511461036157806342966c681461038157806349bd5a5e146103a157600080fd5b806318160ddd116101d757806318160ddd146102c45780631e293c10146102e357806323b872dd1461030557806327a14fc21461032557600080fd5b8063064a59d01461021457806306fdde031461024a578063095ea7b31461026c5780631694505e1461028c57600080fd5b3661020f57005b600080fd5b34801561022057600080fd5b5060065461023590600160a01b900460ff1681565b60405190151581526020015b60405180910390f35b34801561025657600080fd5b5061025f6106ac565b6040516102419190612b44565b34801561027857600080fd5b50610235610287366004612ba7565b61073e565b34801561029857600080fd5b506006546102ac906001600160a01b031681565b6040516001600160a01b039091168152602001610241565b3480156102d057600080fd5b506003545b604051908152602001610241565b3480156102ef57600080fd5b506103036102fe366004612bd3565b610755565b005b34801561031157600080fd5b50610235610320366004612bec565b61084e565b34801561033157600080fd5b50610303610340366004612bd3565b6108b8565b34801561035157600080fd5b5060405160128152602001610241565b34801561036d57600080fd5b5061023561037c366004612ba7565b610a09565b34801561038d57600080fd5b5061030361039c366004612bd3565b610a3f565b3480156103ad57600080fd5b506102ac7f000000000000000000000000382737ffb2b850a34ca09ed5a1aad5cd37c02d4381565b3480156103e157600080fd5b506103036103f0366004612c43565b610a4c565b34801561040157600080fd5b506102d5600c5481565b34801561041757600080fd5b506102d5610426366004612c97565b610b5c565b34801561043757600080fd5b50610303610b77565b34801561044c57600080fd5b5061030361045b366004612cb4565b610beb565b34801561046c57600080fd5b506102d561047b366004612c97565b60166020526000908152604090205481565b34801561049957600080fd5b506103036104a8366004612cb4565b610cb5565b3480156104b957600080fd5b506102d560085481565b3480156104cf57600080fd5b506000546001600160a01b03166102ac565b3480156104ed57600080fd5b506103036104fc366004612bd3565b610d77565b34801561050d57600080fd5b5061025f610e36565b34801561052257600080fd5b50610303610e45565b34801561053757600080fd5b50610235610546366004612ba7565b610e86565b34801561055757600080fd5b50610235610566366004612ba7565b610ed5565b34801561057757600080fd5b506102d560075481565b34801561058d57600080fd5b5061023561059c366004612c97565b60156020526000908152604090205460ff1681565b3480156105bd57600080fd5b506103036105cc366004612cf2565b610ee2565b3480156105dd57600080fd5b506103036105ec366004612cb4565b610f93565b3480156105fd57600080fd5b5061030361060c366004612c43565b611055565b34801561061d57600080fd5b5061030361110c565b34801561063257600080fd5b506102d5610641366004612d27565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b34801561067857600080fd5b50610303610687366004612c97565b61114b565b34801561069857600080fd5b506103036106a7366004612c97565b6112de565b6060600480546106bb90612d55565b80601f01602080910402602001604051908101604052809291908181526020018280546106e790612d55565b80156107345780601f1061070957610100808354040283529160200191610734565b820191906000526020600020905b81548152906001019060200180831161071757829003601f168201915b5050505050905090565b600061074b338484611427565b5060015b92915050565b6000546001600160a01b031633146107885760405162461bcd60e51b815260040161077f90612d8f565b60405180910390fd5b670de0b6b3a76400006103e861079d60035490565b6107a8906002612dda565b6107b29190612e07565b6107bc9190612e07565b81101561081b5760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f7420736574206d6178547820416d6f756e74206c6f776572207468604482015266616e20302e322560c81b606482015260840161077f565b60085460405182907f75f1c17bf623f0f7a2bd91ba61e89dff216960370e3e9a46b250750d03e4215e90600090a3600855565b600061085b84848461154c565b6108ad84336108a8856040518060600160405280602881526020016130b9602891396001600160a01b038a1660009081526002602090815260408083203384529091529020549190611b2f565b611427565b5060015b9392505050565b6000546001600160a01b031633146108e25760405162461bcd60e51b815260040161077f90612d8f565b670de0b6b3a76400006103e86108f760035490565b610902906014612dda565b61090c9190612e07565b6109169190612e07565b8110156109715760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015263302e322560e01b606482015260840161077f565b60075481036109d65760405162461bcd60e51b815260206004820152602b60248201527f43616e6e6f7420757064617465206d617857616c6c6574416d6f756e7420746f60448201526a2073616d652076616c756560a81b606482015260840161077f565b60075460405182907f6d3e257c59a11116c3e97bb144abf5ba1a6a9da6bd509192ecf0d48f7be1fc7690600090a3600755565b3360008181526002602090815260408083206001600160a01b0387168452909152812054909161074b9185906108a890866113c8565b610a493382611b69565b50565b6000546001600160a01b03163314610a765760405162461bcd60e51b815260040161077f90612d8f565b8082610a828587612e1b565b610a8c9190612e1b565b610a969190612e1b565b60ff16600111610ad85760405162461bcd60e51b815260206004820152600d60248201526c6d61782066656520697320312560981b604482015260640161077f565b610ae6600e85858585611c74565b6040516c18985cd95199595ccb54d95b1b609a1b8152600d015b6040805191829003822060ff878116845286811660208501528581168484015284166060840152905190917f69848adfba904cea9fd12f8e800c6bae1d85101b0becc5910e509a93d81449e9919081900360800190a250505050565b6001600160a01b031660009081526001602052604090205490565b6000546001600160a01b03163314610ba15760405162461bcd60e51b815260040161077f90612d8f565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b03163314610c155760405162461bcd60e51b815260040161077f90612d8f565b6001600160a01b03821660009081526014602052604090205481151560ff909116151503610c555760405162461bcd60e51b815260040161077f90612e34565b6001600160a01b038216600081815260146020908152604091829020805460ff191685151590811790915591519182527fb7eada217e08491d4a03c266f93cd278befd124ab34890a5e7f44d023cbade7391015b60405180910390a25050565b6000546001600160a01b03163314610cdf5760405162461bcd60e51b815260040161077f90612d8f565b6001600160a01b03821660009081526013602052604090205481151560ff909116151503610d1f5760405162461bcd60e51b815260040161077f90612e34565b6001600160a01b038216600081815260136020908152604091829020805460ff191685151590811790915591519182527f30098fc83ab61b1a98835d32c4e611adedccfc260eeef586bd329d48e8a40a409101610ca9565b6000546001600160a01b03163314610da15760405162461bcd60e51b815260040161077f90612d8f565b600c548103610e035760405162461bcd60e51b815260206004820152602860248201527f43616e6e6f7420757064617465206d696e546f6b656e5377617020746f2073616044820152676d652076616c756560c01b606482015260840161077f565b600c5460405182907f72fa91a248bb6d73edaa9ce1232d82e8992c0d147025c80f58c3a3dace42ff6690600090a3600c55565b6060600580546106bb90612d55565b6000546001600160a01b03163314610e6f5760405162461bcd60e51b815260040161077f90612d8f565b6b19d971e4fe8401e7400000006007819055600855565b600061074b33846108a8856040518060600160405280602581526020016130e1602591393360009081526002602090815260408083206001600160a01b038d1684529091529020549190611b2f565b600061074b33848461154c565b600c54610eee30610b5c565b1015610f4c5760405162461bcd60e51b815260206004820152602760248201527f7377617020616d6f756e74206d757374206f766572207468616e206d696e546f60448201526606b656e537761760cc1b606482015260840161077f565b610f57838383611ed6565b15610f8e57601754600160201b900460ff1615610f8e576009805460ff19166001179055610f83612099565b6009805460ff191690555b505050565b6000546001600160a01b03163314610fbd5760405162461bcd60e51b815260040161077f90612d8f565b6001600160a01b03821660009081526012602052604090205481151560ff909116151503610ffd5760405162461bcd60e51b815260040161077f90612e34565b6001600160a01b038216600081815260126020908152604091829020805460ff191685151590811790915591519182527fa856ba9fdc54a5434b2359874c95612f520a2d7f858864ae98d15c1b2099ca8b9101610ca9565b6000546001600160a01b0316331461107f5760405162461bcd60e51b815260040161077f90612d8f565b808261108b8587612e1b565b6110959190612e1b565b61109f9190612e1b565b60ff166001116110e15760405162461bcd60e51b815260206004820152600d60248201526c6d61782066656520697320312560981b604482015260640161077f565b6110ef600e85858585612252565b6040516b62617365466565732d42757960a01b8152600c01610b00565b6000546001600160a01b031633146111365760405162461bcd60e51b815260040161077f90612d8f565b6006805460ff60a01b1916600160a01b179055565b6000546001600160a01b031633146111755760405162461bcd60e51b815260040161077f90612d8f565b600d546001600160a01b03828116911614610a49576001600160a01b0381166111e05760405162461bcd60e51b815260206004820152601f60248201527f546865206d61726b6574696e6757616c6c65742063616e6e6f74206265203000604482015260640161077f565b7f000000000000000000000000382737ffb2b850a34ca09ed5a1aad5cd37c02d436001600160a01b0316816001600160a01b0316036112615760405162461bcd60e51b815260206004820152601f60248201527f546865206d61726b6574696e6757616c6c65742063616e6e6f74206265203000604482015260640161077f565b600d546040516e1b585c9ad95d1a5b99d5d85b1b195d608a1b81526001600160a01b0391821691831690600f01604051908190038120907fd1fafbc3fb0c1fd12765451e803b8d5049dca18f8055298e7d18ebcd0d2ce31290600090a4600d80546001600160a01b0383166001600160a01b031990911617905550565b6000546001600160a01b031633146113085760405162461bcd60e51b815260040161077f90612d8f565b6001600160a01b03811661136d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161077f565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000806113d58385612e7e565b9050838110156108b15760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640161077f565b6001600160a01b0383166114895760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161077f565b6001600160a01b0382166114ea5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161077f565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0383166115725760405162461bcd60e51b815260040161077f90612e91565b6001600160a01b0382166115985760405162461bcd60e51b815260040161077f90612ed6565b806000036115ac57610f8e8383600061249c565b6001600160a01b03808416600081815260156020908152604080832054948716835280832054938352601190915290205460ff92831692918216911615801561160e57506001600160a01b03841660009081526011602052604090205460ff16155b156118e257600654600160a01b900460ff1661166c5760405162461bcd60e51b815260206004820152601e60248201527f54726164696e672069732063757272656e746c792064697361626c65642e0000604482015260640161077f565b6001600160a01b03851660009081526015602052604090205460ff1680156116ad57506001600160a01b03841660009081526013602052604090205460ff16155b1561177e576008548311156117155760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b606482015260840161077f565b60075461172185610b5c565b61172b9085612e7e565b11156117795760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420457863656564206d61782077616c6c65740000000000000000604482015260640161077f565b6118e2565b6001600160a01b03841660009081526015602052604090205460ff1680156117bf57506001600160a01b03851660009081526013602052604090205460ff16155b15611829576008548311156117795760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b606482015260840161077f565b6001600160a01b03841660009081526013602052604090205460ff166118ad5760075461185585610b5c565b61185f9085612e7e565b11156117795760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74204578636565642074782077616c6c6574000000000000000000604482015260640161077f565b60095460ff161580156118d857506001600160a01b03851660009081526013602052604090205460ff165b156118e25742600a555b6118ee828287876125a8565b6000600c546118fc30610b5c565b6006549111159150600160a01b900460ff1680156119175750805b8015611926575060095460ff16155b801561193d5750601754600160201b900460ff1615155b801561196157506001600160a01b03851660009081526015602052604090205460ff165b801561198657506001600160a01b03861660009081526012602052604090205460ff16155b80156119ab57506001600160a01b03851660009081526012602052604090205460ff16155b156119d0576009805460ff191660011790556119c5612099565b6009805460ff191690555b60095460009060ff161580156119ef5750600654600160a01b900460ff165b6001600160a01b03881660009081526012602052604090205490915060ff1680611a3157506001600160a01b03861660009081526012602052604090205460ff165b15611a3a575060005b808015611a525750601754600160201b900460ff1615155b15611b1b57601754600090606490611a7490600160201b900460ff1688612dda565b611a7e9190612e07565b601754909150600090606490611a9e906301000000900460ff1689612dda565b611aa89190612e07565b9050611ab48288612f19565b9650611ac189308461249c565b8015611b1857611ad13082611b69565b60175460408051630100000090920460ff168252602082018390527ffecf12fd01122af77b8b8f1a0f126363142d14fba298ea36d9fe4909f61bb5a1910160405180910390a15b50505b611b2687878761249c565b50505050505050565b60008184841115611b535760405162461bcd60e51b815260040161077f9190612b44565b506000611b608486612f19565b95945050505050565b6001600160a01b038216611bc95760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b606482015260840161077f565b611c0681604051806060016040528060228152602001613051602291396001600160a01b0385166000908152600160205260409020549190611b2f565b6001600160a01b038316600090815260016020526040902055600354611c2c9082612847565b6003556040518181526000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b600285015460ff8581166101009092041614611d0557604051711b1a5c5d5a591a5d1e51995953db94d95b1b60721b815260120160405190819003812060028701548754919260ff6101009092048216929188169160008051602061307383398151915291611ce69160481b90612f2c565b60405180910390a460028501805461ff00191661010060ff8716021790555b600285015460ff84811663010000009092041614611d9e57604051711b585c9ad95d1a5b99d1995953db94d95b1b60721b815260120160405190819003812060028701548754919260ff63010000009092048216929187169160008051602061307383398151915291611d7b9160481b90612f2c565b60405180910390a460028501805463ff0000001916630100000060ff8616021790555b600285015460ff838116600160281b9092041614611e37576040516f189d5e509858dad1995953db94d95b1b60821b815260100160405190819003812060028701548754919260ff600160281b9092048216929186169160008051602061307383398151915291611e129160481b90612f2c565b60405180910390a460028501805465ff00000000001916600160281b60ff8516021790555b600285015460ff828116600160381b9092041614611ecf576040516c189d5c9b91995953db94d95b1b609a1b8152600d0160405190819003812060028701548754919260ff600160381b9092048216929185169160008051602061307383398151915291611ea89160481b90612f2c565b60405180910390a460028501805467ff000000000000001916600160381b60ff8416021790555b5050505050565b33600090815260126020526040812054819060ff16611fed57601754600160201b900460ff1615611f7357601754600090606490611f1e90600160201b900460ff1687612dda565b611f289190612e07565b601754909150600090606490611f48906301000000900460ff1688612dda565b611f529190612e07565b9050611f5e8287612f19565b95508015611f7057611f703382611b69565b50505b601754600160201b900460ff1615611fe6576000611f9030610b5c565b60175490915060009060029060ff600160201b8204811691611fb3911685612dda565b611fbd9190612e07565b611fc79190612e07565b90506000611fd58284612f19565b90508015611fe257600193505b5050505b90506108b1565b6000611ff830610b5c565b111561202157836000036120135750600a8290556000612021565b61201d8585611b69565b5060005b601754600160201b900460ff1615611fe657600061203e30610b5c565b60175490915060009060029060ff600160201b8204811691612061911685612dda565b61206b9190612e07565b6120759190612e07565b905060006120838284612f19565b90508015611fe2576000935050505090506108b1565b60006120a430610b5c565b600c5490915047906120b7906007612dda565b8211156120cf57600c546120cc906007612dda565b91505b601754600090819060029060ff600160201b82048116916120f1911687612dda565b6120fb9190612e07565b6121059190612e07565b905060006121138286612f19565b905061211e81612889565b600061212a8547612f19565b60175490915060009060ff6301000000820481169161214c9160029116612f43565b6121569190612e1b565b60175461216d9190600160201b900460ff16612f65565b60175460ff9182169250600091600291849161218a911686612dda565b6121949190612e07565b61219e9190612e07565b600d546040519192506001600160a01b0316904790600081818185875af1925050503d80600081146121ec576040519150601f19603f3d011682016040523d82523d6000602084013e6121f1565b606091505b509096505084156122485761220685826129e3565b60408051858152602081018390529081018690527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b5050505050505050565b600285015460ff8581169116146122d357604051706c69717569646974794665654f6e42757960781b815260110160405190819003812060028701548754919260ff9182169291881691600080516020613073833981519152916122b99160481b90612f2c565b60405180910390a460028501805460ff191660ff86161790555b600285015460ff84811662010000909204161461236757604051706d61726b6574696e674665654f6e42757960781b815260110160405190819003812060028701548754919260ff6201000090920482169291871691600080516020613073833981519152916123469160481b90612f2c565b60405180910390a460028501805462ff000019166201000060ff8616021790555b600285015460ff838116600160201b90920416146123fe576040516e6275794261636b4665654f6e42757960881b8152600f0160405190819003812060028701548754919260ff600160201b90920482169291861691600080516020613073833981519152916123da9160481b90612f2c565b60405180910390a460028501805464ff000000001916600160201b60ff8516021790555b600285015460ff828116600160301b9092041614611ecf576040516b6275726e4665654f6e42757960a01b8152600c0160405190819003812060028701548754919260ff600160301b909204821692918516916000805160206130738339815191529161246e9160481b90612f2c565b60405180910390a460028501805460ff8316600160301b0266ff000000000000199091161790555050505050565b6001600160a01b0383166124c25760405162461bcd60e51b815260040161077f90612e91565b6001600160a01b0382166124e85760405162461bcd60e51b815260040161077f90612ed6565b61252581604051806060016040528060268152602001613093602691396001600160a01b0386166000908152600160205260409020549190611b2f565b6001600160a01b03808516600090815260016020526040808220939093559084168152205461255490826113c8565b6001600160a01b0380841660008181526001602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9061153f9085815260200190565b6017805463ffffffff19169055831561269b576010546017805460ff80841661ffff1990921691909117610100620100008086048416919091029190911763ffff00001916600160201b850483169190910263ff000000191617600160301b909304166301000000029190911790556001600160a01b03811660009081526016602052604090205415612653576001600160a01b038116600090815260166020526040902054612681565b61265c81610b5c565b1561267f576001600160a01b038116600090815260166020526040902054612681565b425b6001600160a01b0382166000908152601660205260409020555b82156126fe576010546017805461010080840460ff90811661ffff199093169290921763010000008086048416929092021763ffff00001916600160281b85048316620100000263ff000000191617600160381b90940491909116029190911790555b8215801561270a575083155b1561276c576010546017805461010080840460ff90811661ffff199093169290921763010000008086048416929092021763ffff00001916600160281b85048316620100000263ff000000191617600160381b90940491909116029190911790555b612777848383612a8e565b60175460ff630100000082048116916201000081048216916127a191610100810482169116612e1b565b6127ab9190612e1b565b6127b59190612e1b565b6017805460ff928316600160201b90810264ff000000001983168117938490556040805191861693861693909317815261010084048516602082015262010000840485168184015263010000008404851660608201529204909216608082015290517f6e2a5b7f71cda0b5cb7df899e2ae963197bad5b9805df7f475458f793841201c9181900360a00190a150505050565b60006108b183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611b2f565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106128be576128be612f7e565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612917573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061293b9190612f94565b8160018151811061294e5761294e612f7e565b6001600160a01b0392831660209182029290920101526006546129749130911684611427565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac947906129ad908590600090869030904290600401612fb1565b600060405180830381600087803b1580156129c757600080fd5b505af11580156129db573d6000803e3d6000fd5b505050505050565b6006546129fb9030906001600160a01b031684611427565b60065460405163f305d71960e01b815230600482015260248101849052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af1158015612a69573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611ecf9190613022565b6001600160a01b03811615801590612ab157506001600160a01b03811661dead14155b8015612ad657506001600160a01b03821660009081526012602052604090205460ff16155b8015612afb57506001600160a01b03811660009081526012602052604090205460ff16155b15610f8e5782158015612b11575060095460ff16155b15610f8e57600a546001600160a01b038316600090815260166020526040902054612b3c9190612f19565b600b55505050565b600060208083528351808285015260005b81811015612b7157858101830151858201604001528201612b55565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610a4957600080fd5b60008060408385031215612bba57600080fd5b8235612bc581612b92565b946020939093013593505050565b600060208284031215612be557600080fd5b5035919050565b600080600060608486031215612c0157600080fd5b8335612c0c81612b92565b92506020840135612c1c81612b92565b929592945050506040919091013590565b803560ff81168114612c3e57600080fd5b919050565b60008060008060808587031215612c5957600080fd5b612c6285612c2d565b9350612c7060208601612c2d565b9250612c7e60408601612c2d565b9150612c8c60608601612c2d565b905092959194509250565b600060208284031215612ca957600080fd5b81356108b181612b92565b60008060408385031215612cc757600080fd5b8235612cd281612b92565b915060208301358015158114612ce757600080fd5b809150509250929050565b600080600060608486031215612d0757600080fd5b8335612d1281612b92565b95602085013595506040909401359392505050565b60008060408385031215612d3a57600080fd5b8235612d4581612b92565b91506020830135612ce781612b92565b600181811c90821680612d6957607f821691505b602082108103612d8957634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141761074f5761074f612dc4565b634e487b7160e01b600052601260045260246000fd5b600082612e1657612e16612df1565b500490565b60ff818116838216019081111561074f5761074f612dc4565b6020808252602a908201527f4163636f756e7420697320616c7265616479207468652076616c7565206f6620604082015269276578636c756465642760b01b606082015260800190565b8082018082111561074f5761074f612dc4565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b8181038181111561074f5761074f612dc4565b68ffffffffffffffffff1991909116815260200190565b600060ff831680612f5657612f56612df1565b8060ff84160491505092915050565b60ff828116828216039081111561074f5761074f612dc4565b634e487b7160e01b600052603260045260246000fd5b600060208284031215612fa657600080fd5b81516108b181612b92565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156130015784516001600160a01b031683529383019391830191600101612fdc565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561303757600080fd5b835192506020840151915060408401519050925092509256fe45524332303a206275726e20616d6f756e7420657863656564732062616c616e6365a93996fe307756ee75cf7c8ce18b6d929b0d28beb8fd577766510ac3d17ab15745524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212201b7280804811414dd22f108e675cbe9028e651358f88cf09f4bd9bb38041705e64736f6c63430008120033

Deployed Bytecode Sourcemap

13550:22298:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13821:28;;;;;;;;;;-1:-1:-1;13821:28:0;;;;-1:-1:-1;;;13821:28:0;;;;;;;;;179:14:1;;172:22;154:41;;142:2;127:18;13821:28:0;;;;;;;;9231:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;10211:194::-;;;;;;;;;;-1:-1:-1;10211:194:0;;;;;:::i;:::-;;:::i;13595:30::-;;;;;;;;;;-1:-1:-1;13595:30:0;;;;-1:-1:-1;;;;;13595:30:0;;;;;;-1:-1:-1;;;;;1394:32:1;;;1376:51;;1364:2;1349:18;13595:30:0;1215:218:1;9552:108:0;;;;;;;;;;-1:-1:-1;9640:12:0;;9552:108;;;1584:25:1;;;1572:2;1557:18;9552:108:0;1438:177:1;22424:323:0;;;;;;;;;;-1:-1:-1;22424:323:0;;;;;:::i;:::-;;:::i;:::-;;10413:454;;;;;;;;;;-1:-1:-1;10413:454:0;;;;;:::i;:::-;;:::i;22755:450::-;;;;;;;;;;-1:-1:-1;22755:450:0;;;;;:::i;:::-;;:::i;9451:93::-;;;;;;;;;;-1:-1:-1;9451:93:0;;9534:2;2408:36:1;;2396:2;2381:18;9451:93:0;2266:184:1;10875:293:0;;;;;;;;;;-1:-1:-1;10875:293:0;;;;;:::i;:::-;;:::i;23508:81::-;;;;;;;;;;-1:-1:-1;23508:81:0;;;;;:::i;:::-;;:::i;13632:38::-;;;;;;;;;;;;;;;21599:817;;;;;;;;;;-1:-1:-1;21599:817:0;;;;;:::i;:::-;;:::i;14141:53::-;;;;;;;;;;;;;;;;9668:143;;;;;;;;;;-1:-1:-1;9668:143:0;;;;;:::i;:::-;;:::i;8350:148::-;;;;;;;;;;;;;:::i;19596:396::-;;;;;;;;;;-1:-1:-1;19596:396:0;;;;;:::i;:::-;;:::i;15070:45::-;;;;;;;;;;-1:-1:-1;15070:45:0;;;;;:::i;:::-;;;;;;;;;;;;;;19178:410;;;;;;;;;;-1:-1:-1;19178:410:0;;;;;:::i;:::-;;:::i;13980:54::-;;;;;;;;;;;;;;;;8136:79;;;;;;;;;;-1:-1:-1;8174:7:0;8201:6;-1:-1:-1;;;;;8201:6:0;8136:79;;23213:287;;;;;;;;;;-1:-1:-1;23213:287:0;;;;;:::i;:::-;;:::i;9339:104::-;;;;;;;;;;;;;:::i;20661:124::-;;;;;;;;;;;;;:::i;11176:393::-;;;;;;;;;;-1:-1:-1;11176:393:0;;;;;:::i;:::-;;:::i;9819:200::-;;;;;;;;;;-1:-1:-1;9819:200:0;;;;;:::i;:::-;;:::i;13915:58::-;;;;;;;;;;;;;;;;15006:57;;;;;;;;;;-1:-1:-1;15006:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;33283:496;;;;;;;;;;-1:-1:-1;33283:496:0;;;;;:::i;:::-;;:::i;18814:356::-;;;;;;;;;;-1:-1:-1;18814:356:0;;;;;:::i;:::-;;:::i;20793:798::-;;;;;;;;;;-1:-1:-1;20793:798:0;;;;;:::i;:::-;;:::i;18368:84::-;;;;;;;;;;;;;:::i;10027:176::-;;;;;;;;;;-1:-1:-1;10027:176:0;;;;;:::i;:::-;-1:-1:-1;;;;;10168:18:0;;;10141:7;10168:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;10027:176;20000:649;;;;;;;;;;-1:-1:-1;20000:649:0;;;;;:::i;:::-;;:::i;8506:281::-;;;;;;;;;;-1:-1:-1;8506:281:0;;;;;:::i;:::-;;:::i;9231:100::-;9285:13;9318:5;9311:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9231:100;:::o;10211:194::-;10319:4;10336:39;7524:10;10359:7;10368:6;10336:8;:39::i;:::-;-1:-1:-1;10393:4:0;10211:194;;;;;:::o;22424:323::-;8263:6;;-1:-1:-1;;;;;8263:6:0;7524:10;8263:22;8255:67;;;;-1:-1:-1;;;8255:67:0;;;;;;;:::i;:::-;;;;;;;;;22570:4:::1;22562;22541:13;9640:12:::0;;;9552:108;22541:13:::1;:17;::::0;22557:1:::1;22541:17;:::i;:::-;22540:26;;;;:::i;:::-;22539:35;;;;:::i;:::-;22527:8;:47;;22505:136;;;::::0;-1:-1:-1;;;22505:136:0;;6186:2:1;22505:136:0::1;::::0;::::1;6168:21:1::0;6225:2;6205:18;;;6198:30;6264:34;6244:18;;;6237:62;-1:-1:-1;;;6315:18:1;;;6308:37;6362:19;;22505:136:0::1;5984:403:1::0;22505:136:0::1;22694:11;::::0;22657:49:::1;::::0;22684:8;;22657:49:::1;::::0;;;::::1;22717:11;:22:::0;22424:323::o;10413:454::-;10553:4;10570:36;10580:6;10588:9;10599:6;10570:9;:36::i;:::-;10617:220;10640:6;7524:10;10688:138;10744:6;10688:138;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10688:19:0;;;;;;:11;:19;;;;;;;;7524:10;10688:33;;;;;;;;;;:37;:138::i;:::-;10617:8;:220::i;:::-;-1:-1:-1;10855:4:0;10413:454;;;;;;:::o;22755:450::-;8263:6;;-1:-1:-1;;;;;8263:6:0;7524:10;8263:22;8255:67;;;;-1:-1:-1;;;8255:67:0;;;;;;;:::i;:::-;22897:4:::1;22889;22867:13;9640:12:::0;;;9552:108;22867:13:::1;:18;::::0;22883:2:::1;22867:18;:::i;:::-;22866:27;;;;:::i;:::-;22865:36;;;;:::i;:::-;22853:8;:48;;22831:134;;;::::0;-1:-1:-1;;;22831:134:0;;6594:2:1;22831:134:0::1;::::0;::::1;6576:21:1::0;6633:2;6613:18;;;6606:30;6672:34;6652:18;;;6645:62;-1:-1:-1;;;6723:18:1;;;6716:34;6767:19;;22831:134:0::1;6392:400:1::0;22831:134:0::1;23010:15;;22998:8;:27:::0;22976:120:::1;;;::::0;-1:-1:-1;;;22976:120:0;;6999:2:1;22976:120:0::1;::::0;::::1;6981:21:1::0;7038:2;7018:18;;;7011:30;7077:34;7057:18;;;7050:62;-1:-1:-1;;;7128:18:1;;;7121:41;7179:19;;22976:120:0::1;6797:407:1::0;22976:120:0::1;23144:15;::::0;23112:48:::1;::::0;23134:8;;23112:48:::1;::::0;;;::::1;23171:15;:26:::0;22755:450::o;10875:293::-;7524:10;10988:4;11077:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;11077:34:0;;;;;;;;;;10988:4;;11005:133;;11055:7;;11077:50;;11116:10;11077:38;:50::i;23508:81::-;23557:24;23563:10;23575:5;23557;:24::i;:::-;23508:81;:::o;21599:817::-;8263:6;;-1:-1:-1;;;;;8263:6:0;7524:10;8263:22;8255:67;;;;-1:-1:-1;;;8255:67:0;;;;;;;:::i;:::-;21964:14;21923:17;21837:62:::1;21880:19:::0;21837;:62:::1;:::i;:::-;:103;;;;:::i;:::-;:141;;;;:::i;:::-;21816:162;;:1;:162;21794:225;;;::::0;-1:-1:-1;;;21794:225:0;;7564:2:1;21794:225:0::1;::::0;::::1;7546:21:1::0;7603:2;7583:18;;;7576:30;-1:-1:-1;;;7622:18:1;;;7615:43;7675:18;;21794:225:0::1;7362:337:1::0;21794:225:0::1;22030:183;22068:5;22088:19;22122;22156:17;22188:14;22030:23;:183::i;:::-;22229:179;::::0;-1:-1:-1;;;7906:28:1;;7959:2;7950:12;22229:179:0::1;;::::0;;;;;::::1;::::0;;8218:4:1;8206:17;;;8188:36;;8260:17;;;8255:2;8240:18;;8233:45;8314:17;;;8294:18;;;8287:45;8368:17;;8363:2;8348:18;;8341:45;22229:179:0;;;;::::1;::::0;;;;;8175:3:1;22229:179:0;;::::1;21599:817:::0;;;;:::o;9668:143::-;-1:-1:-1;;;;;9785:18:0;9758:7;9785:18;;;:9;:18;;;;;;;9668:143::o;8350:148::-;8263:6;;-1:-1:-1;;;;;8263:6:0;7524:10;8263:22;8255:67;;;;-1:-1:-1;;;8255:67:0;;;;;;;:::i;:::-;8457:1:::1;8441:6:::0;;8420:40:::1;::::0;-1:-1:-1;;;;;8441:6:0;;::::1;::::0;8420:40:::1;::::0;8457:1;;8420:40:::1;8488:1;8471:19:::0;;-1:-1:-1;;;;;;8471:19:0::1;::::0;;8350:148::o;19596:396::-;8263:6;;-1:-1:-1;;;;;8263:6:0;7524:10;8263:22;8255:67;;;;-1:-1:-1;;;8255:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19740:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;:50;::::1;;:38;::::0;;::::1;:50;;::::0;19718:142:::1;;;;-1:-1:-1::0;;;19718:142:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;19871:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;;;;:49;;-1:-1:-1;;19871:49:0::1;::::0;::::1;;::::0;;::::1;::::0;;;19936:48;;154:41:1;;;19936:48:0::1;::::0;127:18:1;19936:48:0::1;;;;;;;;19596:396:::0;;:::o;19178:410::-;8263:6;;-1:-1:-1;;;;;8263:6:0;7524:10;8263:22;8255:67;;;;-1:-1:-1;;;8255:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19327:43:0;::::1;;::::0;;;:34:::1;:43;::::0;;;;;:55;::::1;;:43;::::0;;::::1;:55;;::::0;19305:147:::1;;;;-1:-1:-1::0;;;19305:147:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;19463:43:0;::::1;;::::0;;;:34:::1;:43;::::0;;;;;;;;:54;;-1:-1:-1;;19463:54:0::1;::::0;::::1;;::::0;;::::1;::::0;;;19533:47;;154:41:1;;;19533:47:0::1;::::0;127:18:1;19533:47:0::1;14:187:1::0;23213:287:0;8263:6;;-1:-1:-1;;;;;8263:6:0;7524:10;8263:22;8255:67;;;;-1:-1:-1;;;8255:67:0;;;;;;;:::i;:::-;23320:12:::1;;23308:8;:24:::0;23286:114:::1;;;::::0;-1:-1:-1;;;23286:114:0;;9010:2:1;23286:114:0::1;::::0;::::1;8992:21:1::0;9049:2;9029:18;;;9022:30;9088:34;9068:18;;;9061:62;-1:-1:-1;;;9139:18:1;;;9132:38;9187:19;;23286:114:0::1;8808:404:1::0;23286:114:0::1;23445:12;::::0;23416:42:::1;::::0;23435:8;;23416:42:::1;::::0;;;::::1;23469:12;:23:::0;23213:287::o;9339:104::-;9395:13;9428:7;9421:14;;;;;:::i;20661:124::-;8263:6;;-1:-1:-1;;;;;8263:6:0;7524:10;8263:22;8255:67;;;;-1:-1:-1;;;8255:67:0;;;;;;;:::i;:::-;13885:23:::1;20716:15;:27:::0;;;20754:11:::1;:23:::0;20661:124::o;11176:393::-;11294:4;11311:228;7524:10;11361:7;11383:145;11440:15;11383:145;;;;;;;;;;;;;;;;;7524:10;11383:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;11383:34:0;;;;;;;;;;;;:38;:145::i;9819:200::-;9930:4;9947:42;7524:10;9971:9;9982:6;9947:9;:42::i;33283:496::-;33455:12;;33427:24;33445:4;33427:9;:24::i;:::-;:40;;33405:129;;;;-1:-1:-1;;;33405:129:0;;9419:2:1;33405:129:0;;;9401:21:1;9458:2;9438:18;;;9431:30;9497:34;9477:18;;;9470:62;-1:-1:-1;;;9548:18:1;;;9541:37;9595:19;;33405:129:0;9217:403:1;33405:129:0;33549:53;33567:4;33588:3;33593:8;33549:17;:53::i;:::-;33545:227;;;33623:9;;-1:-1:-1;;;33623:9:0;;;;:13;33619:142;;33657:9;:16;;-1:-1:-1;;33657:16:0;33669:4;33657:16;;;33692:17;:15;:17::i;:::-;33728:9;:17;;-1:-1:-1;;33728:17:0;;;33619:142;33283:496;;;:::o;18814:356::-;8263:6;;-1:-1:-1;;;;;8263:6:0;7524:10;8263:22;8255:67;;;;-1:-1:-1;;;8255:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18948:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;:39;::::1;;:27;::::0;;::::1;:39;;::::0;18926:131:::1;;;;-1:-1:-1::0;;;18926:131:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;19068:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;;;;:38;;-1:-1:-1;;19068:38:0::1;::::0;::::1;;::::0;;::::1;::::0;;;19122:40;;154:41:1;;;19122:40:0::1;::::0;127:18:1;19122:40:0::1;14:187:1::0;20793:798:0;8263:6;;-1:-1:-1;;;;;8263:6:0;7524:10;8263:22;8255:67;;;;-1:-1:-1;;;8255:67:0;;;;;;;:::i;:::-;21150:13;21110:16;21026:60:::1;21068:18:::0;21026;:60:::1;:::i;:::-;:100;;;;:::i;:::-;:137;;;;:::i;:::-;21005:158;;:1;:158;20983:221;;;::::0;-1:-1:-1;;;20983:221:0;;7564:2:1;20983:221:0::1;::::0;::::1;7546:21:1::0;7603:2;7583:18;;;7576:30;-1:-1:-1;;;7622:18:1;;;7615:43;7675:18;;20983:221:0::1;7362:337:1::0;20983:221:0::1;21215:178;21252:5;21272:18;21305;21338:16;21369:13;21215:22;:178::i;:::-;21409:174;::::0;-1:-1:-1;;;9827:27:1;;9879:2;9870:12;21409:174:0::1;9625:263:1::0;18368:84:0;8263:6;;-1:-1:-1;;;;;8263:6:0;7524:10;8263:22;8255:67;;;;-1:-1:-1;;;8255:67:0;;;;;;;:::i;:::-;18421:16:::1;:23:::0;;-1:-1:-1;;;;18421:23:0::1;-1:-1:-1::0;;;18421:23:0::1;::::0;;18368:84::o;20000:649::-;8263:6;;-1:-1:-1;;;;;8263:6:0;7524:10;8263:22;8255:67;;;;-1:-1:-1;;;8255:67:0;;;;;;;:::i;:::-;20100:15:::1;::::0;-1:-1:-1;;;;;20100:37:0;;::::1;:15:::0;::::1;:37;20096:546;;-1:-1:-1::0;;;;;20180:32:0;::::1;20154:125;;;::::0;-1:-1:-1;;;20154:125:0;;10095:2:1;20154:125:0::1;::::0;::::1;10077:21:1::0;10134:2;10114:18;;;10107:30;10173:33;10153:18;;;10146:61;10224:18;;20154:125:0::1;9893:355:1::0;20154:125:0::1;20342:13;-1:-1:-1::0;;;;;20320:35:0::1;:18;-1:-1:-1::0;;;;;20320:35:0::1;::::0;20294:128:::1;;;::::0;-1:-1:-1;;;20294:128:0;;10095:2:1;20294:128:0::1;::::0;::::1;10077:21:1::0;10134:2;10114:18;;;10107:30;10173:33;10153:18;;;10146:61;10224:18;;20294:128:0::1;9893:355:1::0;20294:128:0::1;20549:15;::::0;20442:137:::1;::::0;-1:-1:-1;;;10455:30:1;;-1:-1:-1;;;;;20549:15:0;;::::1;::::0;20442:137;::::1;::::0;10510:2:1;10501:12;20442:137:0::1;::::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;20594:15;:36:::0;;-1:-1:-1;;;;;20594:36:0;::::1;-1:-1:-1::0;;;;;;20594:36:0;;::::1;;::::0;;20000:649;:::o;8506:281::-;8263:6;;-1:-1:-1;;;;;8263:6:0;7524:10;8263:22;8255:67;;;;-1:-1:-1;;;8255:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;8609:22:0;::::1;8587:110;;;::::0;-1:-1:-1;;;8587:110:0;;10726:2:1;8587:110:0::1;::::0;::::1;10708:21:1::0;10765:2;10745:18;;;10738:30;10804:34;10784:18;;;10777:62;-1:-1:-1;;;10855:18:1;;;10848:36;10901:19;;8587:110:0::1;10524:402:1::0;8587:110:0::1;8734:6;::::0;;8713:38:::1;::::0;-1:-1:-1;;;;;8713:38:0;;::::1;::::0;8734:6;::::1;::::0;8713:38:::1;::::0;::::1;8762:6;:17:::0;;-1:-1:-1;;;;;;8762:17:0::1;-1:-1:-1::0;;;;;8762:17:0;;;::::1;::::0;;;::::1;::::0;;8506:281::o;2373:181::-;2431:7;;2463:5;2467:1;2463;:5;:::i;:::-;2451:17;;2492:1;2487;:6;;2479:46;;;;-1:-1:-1;;;2479:46:0;;11263:2:1;2479:46:0;;;11245:21:1;11302:2;11282:18;;;11275:30;11341:29;11321:18;;;11314:57;11388:18;;2479:46:0;11061:351:1;13032:378:0;-1:-1:-1;;;;;13168:19:0;;13160:68;;;;-1:-1:-1;;;13160:68:0;;11619:2:1;13160:68:0;;;11601:21:1;11658:2;11638:18;;;11631:30;11697:34;11677:18;;;11670:62;-1:-1:-1;;;11748:18:1;;;11741:34;11792:19;;13160:68:0;11417:400:1;13160:68:0;-1:-1:-1;;;;;13247:21:0;;13239:68;;;;-1:-1:-1;;;13239:68:0;;12024:2:1;13239:68:0;;;12006:21:1;12063:2;12043:18;;;12036:30;12102:34;12082:18;;;12075:62;-1:-1:-1;;;12153:18:1;;;12146:32;12195:19;;13239:68:0;11822:398:1;13239:68:0;-1:-1:-1;;;;;13318:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;13370:32;;1584:25:1;;;13370:32:0;;1557:18:1;13370:32:0;;;;;;;;13032:378;;;:::o;23597:2980::-;-1:-1:-1;;;;;23729:18:0;;23721:68;;;;-1:-1:-1;;;23721:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23808:16:0;;23800:64;;;;-1:-1:-1;;;23800:64:0;;;;;;;:::i;:::-;23881:6;23891:1;23881:11;23877:93;;23909:28;23925:4;23931:2;23935:1;23909:15;:28::i;23877:93::-;-1:-1:-1;;;;;24001:31:0;;;23982:16;24001:31;;;:25;:31;;;;;;;;;24061:29;;;;;;;;;24122:35;;;:29;:35;;;;;;24001:31;;;;;24061:29;;;;24122:35;24121:36;:87;;;;-1:-1:-1;;;;;;24175:33:0;;;;;;:29;:33;;;;;;;;24174:34;24121:87;24103:1335;;;24243:16;;-1:-1:-1;;;24243:16:0;;;;24235:59;;;;-1:-1:-1;;;24235:59:0;;13237:2:1;24235:59:0;;;13219:21:1;13276:2;13256:18;;;13249:30;13315:32;13295:18;;;13288:60;13365:18;;24235:59:0;13035:354:1;24235:59:0;-1:-1:-1;;;;;24331:31:0;;;;;;:25;:31;;;;;;;;:91;;;;-1:-1:-1;;;;;;24384:38:0;;;;;;:34;:38;;;;;;;;24383:39;24331:91;24309:1118;;;24497:11;;24487:6;:21;;24457:135;;;;-1:-1:-1;;;24457:135:0;;13596:2:1;24457:135:0;;;13578:21:1;13635:2;13615:18;;;13608:30;13674:34;13654:18;;;13647:62;-1:-1:-1;;;13725:18:1;;;13718:38;13773:19;;24457:135:0;13394:404:1;24457:135:0;24667:15;;24650:13;24660:2;24650:9;:13::i;:::-;24641:22;;:6;:22;:::i;:::-;:41;;24611:139;;;;-1:-1:-1;;;24611:139:0;;14005:2:1;24611:139:0;;;13987:21:1;14044:2;14024:18;;;14017:30;14083:26;14063:18;;;14056:54;14127:18;;24611:139:0;13803:348:1;24611:139:0;24309:1118;;;-1:-1:-1;;;;;24794:29:0;;;;;;:25;:29;;;;;;;;:91;;;;-1:-1:-1;;;;;;24845:40:0;;;;;;:34;:40;;;;;;;;24844:41;24794:91;24772:655;;;24960:11;;24950:6;:21;;24920:137;;;;-1:-1:-1;;;24920:137:0;;14358:2:1;24920:137:0;;;14340:21:1;14397:2;14377:18;;;14370:30;14436:34;14416:18;;;14409:62;-1:-1:-1;;;14487:18:1;;;14480:40;14537:19;;24920:137:0;14156:406:1;24772:655:0;-1:-1:-1;;;;;25084:38:0;;;;;;:34;:38;;;;;;;;25079:348;;25199:15;;25182:13;25192:2;25182:9;:13::i;:::-;25173:22;;:6;:22;:::i;:::-;:41;;25143:138;;;;-1:-1:-1;;;25143:138:0;;14769:2:1;25143:138:0;;;14751:21:1;14808:2;14788:18;;;14781:30;14847:25;14827:18;;;14820:53;14890:18;;25143:138:0;14567:347:1;25079:348:0;25308:9;;;;25307:10;:54;;;;-1:-1:-1;;;;;;25321:40:0;;;;;;:34;:40;;;;;;;;25307:54;25303:124;;;25396:15;25382:11;:29;25303:124;25448:45;25459:11;25472:10;25484:4;25490:2;25448:10;:45::i;:::-;25504:12;25547;;25519:24;25537:4;25519:9;:24::i;:::-;25590:16;;-1:-1:-1;;25519:40:0;;-1:-1:-1;;;;25590:16:0;;;;:40;;;;;25623:7;25590:40;:67;;;;-1:-1:-1;25648:9:0;;;;25647:10;25590:67;:97;;;;-1:-1:-1;25674:9:0;;-1:-1:-1;;;25674:9:0;;;;:13;;25590:97;:143;;;;-1:-1:-1;;;;;;25704:29:0;;;;;;:25;:29;;;;;;;;25590:143;:185;;;;-1:-1:-1;;;;;;25751:24:0;;;;;;:18;:24;;;;;;;;25750:25;25590:185;:225;;;;-1:-1:-1;;;;;;25793:22:0;;;;;;:18;:22;;;;;;;;25792:23;25590:225;25572:362;;;25842:9;:16;;-1:-1:-1;;25842:16:0;25854:4;25842:16;;;25873:17;:15;:17::i;:::-;25905:9;:17;;-1:-1:-1;;25905:17:0;;;25572:362;25962:9;;25946:12;;25962:9;;25961:10;:30;;;;-1:-1:-1;25975:16:0;;-1:-1:-1;;;25975:16:0;;;;25961:30;-1:-1:-1;;;;;26008:24:0;;;;;;:18;:24;;;;;;25946:45;;-1:-1:-1;26008:24:0;;;:50;;-1:-1:-1;;;;;;26036:22:0;;;;;;:18;:22;;;;;;;;26008:50;26004:98;;;-1:-1:-1;26085:5:0;26004:98;26116:7;:24;;;;-1:-1:-1;26127:9:0;;-1:-1:-1;;;26127:9:0;;;;:13;;26116:24;26112:414;;;26181:9;;26157:11;;26194:3;;26172:18;;-1:-1:-1;;;26181:9:0;;;;26172:6;:18;:::i;:::-;26171:26;;;;:::i;:::-;26243:8;;26157:40;;-1:-1:-1;26212:18:0;;26255:3;;26234:17;;26243:8;;;;;26234:6;:17;:::i;:::-;26233:25;;;;:::i;:::-;26212:46;-1:-1:-1;26282:12:0;26291:3;26282:6;:12;:::i;:::-;26273:21;;26309:41;26325:4;26339;26346:3;26309:15;:41::i;:::-;26371:14;;26367:148;;26406:38;26426:4;26433:10;26406:11;:38::i;:::-;26478:8;;26468:31;;;26478:8;;;;;;15222:36:1;;15289:2;15274:18;;15267:34;;;26468:31:0;;15195:18:1;26468:31:0;;;;;;;26367:148;26142:384;;26112:414;26536:33;26552:4;26558:2;26562:6;26536:15;:33::i;:::-;23710:2867;;;;23597:2980;;;:::o;2706:226::-;2826:7;2862:12;2854:6;;;;2846:29;;;;-1:-1:-1;;;2846:29:0;;;;;;;;:::i;:::-;-1:-1:-1;2886:9:0;2898:5;2902:1;2898;:5;:::i;:::-;2886:17;2706:226;-1:-1:-1;;;;;2706:226:0:o;12573:451::-;-1:-1:-1;;;;;12657:21:0;;12649:67;;;;-1:-1:-1;;;12649:67:0;;15514:2:1;12649:67:0;;;15496:21:1;15553:2;15533:18;;;15526:30;15592:34;15572:18;;;15565:62;-1:-1:-1;;;15643:18:1;;;15636:31;15684:19;;12649:67:0;15312:397:1;12649:67:0;12808:105;12845:6;12808:105;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12808:18:0;;;;;;:9;:18;;;;;;;:105;:22;:105::i;:::-;-1:-1:-1;;;;;12787:18:0;;;;;;:9;:18;;;;;:126;12939:12;;:24;;12956:6;12939:16;:24::i;:::-;12924:12;:39;12979:37;;1584:25:1;;;13005:1:0;;-1:-1:-1;;;;;12979:37:0;;;;;1572:2:1;1557:18;12979:37:0;;;;;;;12573:451;;:::o;28479:1510::-;28717:22;;;;:45;;;;:22;;;;;:45;28713:322;;28784:180;;-1:-1:-1;;;15916:33:1;;15974:2;15965:12;28784:180:0;;;;;;;;28855:22;;;;28935:14;;28784:180;;28855:22;;;;;;;;28784:180;;;;-1:-1:-1;;;;;;;;;;;28784:180:0;;;28935:14;;;28784:180;:::i;:::-;;;;;;;;28979:22;;;:44;;-1:-1:-1;;28979:44:0;;;;;;;;;28713:322;29049:22;;;;:45;;;;:22;;;;;:45;29045:322;;29116:180;;-1:-1:-1;;;16404:33:1;;16462:2;16453:12;29116:180:0;;;;;;;;29187:22;;;;29267:14;;29116:180;;29187:22;;;;;;;;29116:180;;;;-1:-1:-1;;;;;;;;;;;29116:180:0;;;29267:14;;;29116:180;:::i;:::-;;;;;;;;29311:22;;;:44;;-1:-1:-1;;29311:44:0;;;;;;;;;29045:322;29381:20;;;;:41;;;;-1:-1:-1;;;29381:20:0;;;;:41;29377:308;;29444:174;;-1:-1:-1;;;16678:31:1;;16734:2;16725:12;29444:174:0;;;;;;;;29513:20;;;;29589:14;;29444:174;;29513:20;-1:-1:-1;;;29513:20:0;;;;;;29444:174;;;;-1:-1:-1;;;;;;;;;;;29444:174:0;;;29589:14;;;29444:174;:::i;:::-;;;;;;;;29633:20;;;:40;;-1:-1:-1;;29633:40:0;-1:-1:-1;;;29633:40:0;;;;;;;29377:308;29699:17;;;;:35;;;;-1:-1:-1;;;29699:17:0;;;;:35;29695:287;;29756:165;;-1:-1:-1;;;16950:28:1;;17003:2;16994:12;29756:165:0;;;;;;;;29822:17;;;;29892:14;;29756:165;;29822:17;-1:-1:-1;;;29822:17:0;;;;;;29756:165;;;;-1:-1:-1;;;;;;;;;;;29756:165:0;;;29892:14;;;29756:165;:::i;:::-;;;;;;;;29936:17;;;:34;;-1:-1:-1;;29936:34:0;-1:-1:-1;;;29936:34:0;;;;;;;29695:287;28479:1510;;;;;:::o;31482:1793::-;31676:10;31612:4;31657:30;;;:18;:30;;;;;;31612:4;;31657:30;;31652:1616;;31708:9;;-1:-1:-1;;;31708:9:0;;;;:13;31704:309;;31766:9;;31742:11;;31779:3;;31757:18;;-1:-1:-1;;;31766:9:0;;;;31757:6;:18;:::i;:::-;31756:26;;;;:::i;:::-;31832:8;;31742:40;;-1:-1:-1;31801:18:0;;31844:3;;31823:17;;31832:8;;;;;31823:6;:17;:::i;:::-;31822:25;;;;:::i;:::-;31801:46;-1:-1:-1;31875:12:0;31884:3;31875:6;:12;:::i;:::-;31866:21;-1:-1:-1;31910:14:0;;31906:92;;31949:29;31955:10;31967;31949:5;:29::i;:::-;31723:290;;31704:309;32031:9;;-1:-1:-1;;;32031:9:0;;;;:13;32027:414;;32065:23;32091:24;32109:4;32091:9;:24::i;:::-;32217:9;;32065:50;;-1:-1:-1;32134:23:0;;32250:1;;32217:9;-1:-1:-1;;;32217:9:0;;;;;32161:31;;32179:13;32065:50;32161:31;:::i;:::-;32160:66;;;;:::i;:::-;:91;;;;:::i;:::-;32134:117;-1:-1:-1;32270:20:0;32293:35;32134:117;32293:15;:35;:::i;:::-;32270:58;-1:-1:-1;32351:16:0;;32347:79;;32402:4;32392:14;;32347:79;32046:395;;;32027:414;32462:7;-1:-1:-1;32455:14:0;;31652:1616;32533:1;32506:24;32524:4;32506:9;:24::i;:::-;:28;32502:297;;;32559:6;32569:1;32559:11;32555:229;;-1:-1:-1;32595:11:0;:22;;;32650:5;32555:229;;;32704:22;32710:7;32719:6;32704:5;:22::i;:::-;-1:-1:-1;32759:5:0;32555:229;32817:9;;-1:-1:-1;;;32817:9:0;;;;:13;32813:415;;32851:23;32877:24;32895:4;32877:9;:24::i;:::-;33003:9;;32851:50;;-1:-1:-1;32920:23:0;;33036:1;;33003:9;-1:-1:-1;;;33003:9:0;;;;;32947:31;;32965:13;32851:50;32947:31;:::i;:::-;32946:66;;;;:::i;:::-;:91;;;;:::i;:::-;32920:117;-1:-1:-1;33056:20:0;33079:35;32920:117;33079:15;:35;:::i;:::-;33056:58;-1:-1:-1;33137:16:0;;33133:80;;33188:5;33178:15;;32832:396;;;33249:7;-1:-1:-1;33242:14:0;;33787:1171;33833:23;33859:24;33877:4;33859:9;:24::i;:::-;33976:12;;33833:50;;-1:-1:-1;33922:21:0;;33976:16;;33991:1;33976:16;:::i;:::-;33958:15;:34;33954:101;;;34027:12;;:16;;34042:1;34027:16;:::i;:::-;34009:34;;33954:101;34163:9;;34065:12;;;;34188:1;;34163:9;-1:-1:-1;;;34163:9:0;;;;;34115:31;;34133:13;34115:15;:31;:::i;:::-;34114:58;;;;:::i;:::-;:75;;;;:::i;:::-;34088:101;-1:-1:-1;34200:20:0;34223:35;34088:101;34223:15;:35;:::i;:::-;34200:58;;34271:31;34289:12;34271:17;:31::i;:::-;34315:27;34345:41;34369:17;34345:21;:41;:::i;:::-;34454:8;;34315:71;;-1:-1:-1;34397:19:0;;34454:8;;;;;;;34433:17;;34449:1;;34433:13;:17;:::i;:::-;34432:30;;;;:::i;:::-;34419:9;;:44;;;-1:-1:-1;;;34419:9:0;;;;:44;:::i;:::-;34526:13;;34397:66;;;;;-1:-1:-1;34474:26:0;;34570:1;;34397:66;;34504:35;;34526:13;34504:19;:35;:::i;:::-;34503:64;;;;:::i;:::-;:68;;;;:::i;:::-;34606:15;;34598:87;;34474:97;;-1:-1:-1;;;;;;34606:15:0;;34649:21;;34598:87;;;;34649:21;34606:15;34598:87;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34584:101:0;;-1:-1:-1;;34702:19:0;;34698:253;;34738:50;34752:15;34769:18;34738:13;:50::i;:::-;34808:131;;;17755:25:1;;;17811:2;17796:18;;17789:34;;;17839:18;;;17832:34;;;34808:131:0;;17743:2:1;17728:18;34808:131:0;;;;;;;34698:253;33822:1136;;;;;;;;33787:1171::o;29997:1477::-;30230:21;;;;:43;;;;:21;;:43;30226:315;;30295:177;;-1:-1:-1;;;18079:32:1;;18136:2;18127:12;30295:177:0;;;;;;;;30365:21;;;;30443:14;;30295:177;;30365:21;;;;;30295:177;;;;-1:-1:-1;;;;;;;;;;;30295:177:0;;;30443:14;;;30295:177;:::i;:::-;;;;;;;;30487:21;;;:42;;-1:-1:-1;;30487:42:0;;;;;;;30226:315;30555:21;;;;:43;;;;:21;;;;;:43;30551:315;;30620:177;;-1:-1:-1;;;18352:32:1;;18409:2;18400:12;30620:177:0;;;;;;;;30690:21;;;;30768:14;;30620:177;;30690:21;;;;;;;;30620:177;;;;-1:-1:-1;;;;;;;;;;;30620:177:0;;;30768:14;;;30620:177;:::i;:::-;;;;;;;;30812:21;;;:42;;-1:-1:-1;;30812:42:0;;;;;;;;;30551:315;30880:19;;;;:39;;;;-1:-1:-1;;;30880:19:0;;;;:39;30876:301;;30941:171;;-1:-1:-1;;;18625:30:1;;18680:2;18671:12;30941:171:0;;;;;;;;31009:19;;;;31083:14;;30941:171;;31009:19;-1:-1:-1;;;31009:19:0;;;;;;30941:171;;;;-1:-1:-1;;;;;;;;;;;30941:171:0;;;31083:14;;;30941:171;:::i;:::-;;;;;;;;31127:19;;;:38;;-1:-1:-1;;31127:38:0;-1:-1:-1;;;31127:38:0;;;;;;;30876:301;31191:16;;;;:33;;;;-1:-1:-1;;;31191:16:0;;;;:33;31187:280;;31246:162;;-1:-1:-1;;;18896:27:1;;18948:2;18939:12;31246:162:0;;;;;;;;31311:16;;;;31379:14;;31246:162;;31311:16;-1:-1:-1;;;31311:16:0;;;;;;31246:162;;;;-1:-1:-1;;;;;;;;;;;31246:162:0;;;31379:14;;;31246:162;:::i;:::-;;;;;;;;31423:16;;;:32;;;;;-1:-1:-1;;;31423:32:0;-1:-1:-1;;31423:32:0;;;;;;29997:1477;;;;;:::o;11577:606::-;-1:-1:-1;;;;;11717:20:0;;11709:70;;;;-1:-1:-1;;;11709:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;11798:23:0;;11790:71;;;;-1:-1:-1;;;11790:71:0;;;;;;;:::i;:::-;11950:108;11986:6;11950:108;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;11950:17:0;;;;;;:9;:17;;;;;;;:108;:21;:108::i;:::-;-1:-1:-1;;;;;11930:17:0;;;;;;;:9;:17;;;;;;:128;;;;12092:20;;;;;;;:32;;12117:6;12092:24;:32::i;:::-;-1:-1:-1;;;;;12069:20:0;;;;;;;:9;:20;;;;;;;:55;;;;12140:35;;;;;;;;;;12168:6;1584:25:1;;1572:2;1557:18;;1438:177;26585:1482:0;26728:13;:17;;-1:-1:-1;;26810:12:0;;;26835:432;;;;26883:23;;26867:13;:39;;26883:23;;;;-1:-1:-1;;26921:39:0;;;;;;;26883:23;26937;;;;;;26921:39;;;;;;;;-1:-1:-1;;27025:29:0;-1:-1:-1;;;26989:21:0;;;;26975:35;;;;-1:-1:-1;;27025:29:0;;-1:-1:-1;;;27036:18:0;;;;27025:29;;;;;;;;-1:-1:-1;;;;;27086:14:0;;-1:-1:-1;27086:14:0;;;:10;:14;;;;;;:19;:169;;-1:-1:-1;;;;;27241:14:0;;;;;;:10;:14;;;;;;27086:169;;;27125:22;27143:2;27125:9;:22::i;:::-;:27;:96;;-1:-1:-1;;;;;27207:14:0;;;;;;:10;:14;;;;;;27125:96;;;27172:15;27125:96;-1:-1:-1;;;;;27069:14:0;;;;;;:10;:14;;;;;:186;26835:432;27281:10;27277:234;;;27324:24;;27308:13;:40;;27324:24;;;;;;;;-1:-1:-1;;27363:40:0;;;;;;;27379:24;;;;;;27363:40;;;;;-1:-1:-1;;27469:30:0;-1:-1:-1;;;27432:22:0;;;;27418:36;;-1:-1:-1;;27469:30:0;;-1:-1:-1;;;27480:19:0;;;;;;;27469:30;;;;;;;27277:234;27526:10;27525:11;:27;;;;;27541:11;27540:12;27525:27;27521:251;;;27585:24;;27569:13;:40;;27585:24;;;;;;;;-1:-1:-1;;27624:40:0;;;;;;;27640:24;;;;;;27624:40;;;;;-1:-1:-1;;27730:30:0;-1:-1:-1;;;27693:22:0;;;;27679:36;;-1:-1:-1;;27730:30:0;;-1:-1:-1;;;27741:19:0;;;;;;;27730:30;;;;;;;27521:251;27782:33;27793:11;27806:4;27812:2;27782:10;:33::i;:::-;27884:8;;;;;;;;;27870:11;;;;;;27838:29;;27884:8;27854:13;;;;;27838;:29;:::i;:::-;:43;;;;:::i;:::-;:54;;;;:::i;:::-;27826:9;:66;;;;;;-1:-1:-1;;;27826:66:0;;;-1:-1:-1;;27826:66:0;;;;;;;;27908:151;;;27934:13;;;;;;;;;;19201:36:1;;27826:66:0;27962:13;;;;19268:2:1;19253:18;;19246:45;27990:11:0;;;;;19307:18:1;;;19300:45;28016:8:0;;;;;19376:2:1;19361:18;;19354:45;28039:9:0;;;;;19430:3:1;19415:19;;19408:46;27908:151:0;;;;;;;19188:3:1;27908:151:0;;;26585:1482;;;;:::o;2562:136::-;2620:7;2647:43;2651:1;2654;2647:43;;;;;;;;;;;;;;;;;:3;:43::i;35345:500::-;35436:16;;;35450:1;35436:16;;;;;;;;35412:21;;35436:16;;;;;;;;;;-1:-1:-1;35436:16:0;35412:40;;35481:4;35463;35468:1;35463:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;35463:23:0;;;:7;;;;;;;;;;:23;;;;35507:15;;:22;;;-1:-1:-1;;;35507:22:0;;;;:15;;;;;:20;;:22;;;;;35463:7;;35507:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35497:4;35502:1;35497:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;35497:32:0;;;:7;;;;;;;;;:32;35572:15;;35540:62;;35557:4;;35572:15;35590:11;35540:8;:62::i;:::-;35613:15;;:224;;-1:-1:-1;;;35613:224:0;;-1:-1:-1;;;;;35613:15:0;;;;:66;;:224;;35694:11;;35613:15;;35764:4;;35791;;35811:15;;35613:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35401:444;35345:500;:::o;34966:369::-;35080:15;;35048:62;;35065:4;;-1:-1:-1;;;;;35080:15:0;35098:11;35048:8;:62::i;:::-;35121:15;;:206;;-1:-1:-1;;;35121:206:0;;35193:4;35121:206;;;21311:34:1;21361:18;;;21354:34;;;35121:15:0;21404:18:1;;;21397:34;;;21447:18;;;21440:34;35279:6:0;21490:19:1;;;21483:44;35301:15:0;21543:19:1;;;21536:35;-1:-1:-1;;;;;35121:15:0;;;;:31;;35160:9;;21245:19:1;;35121:206:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;28075:396::-;-1:-1:-1;;;;;28176:16:0;;;;;;:54;;-1:-1:-1;;;;;;28209:21:0;;28223:6;28209:21;;28176:54;:96;;;;-1:-1:-1;;;;;;28248:24:0;;;;;;:18;:24;;;;;;;;28247:25;28176:96;:136;;;;-1:-1:-1;;;;;;28290:22:0;;;;;;:18;:22;;;;;;;;28289:23;28176:136;28158:306;;;28344:11;28343:12;:26;;;;-1:-1:-1;28360:9:0;;;;28359:10;28343:26;28339:114;;;28426:11;;-1:-1:-1;;;;;28407:16:0;;;;;;:10;:16;;;;;;:30;;28426:11;28407:30;:::i;:::-;28390:14;:47;28075:396;;;:::o;206:548:1:-;318:4;347:2;376;365:9;358:21;408:6;402:13;451:6;446:2;435:9;431:18;424:34;476:1;486:140;500:6;497:1;494:13;486:140;;;595:14;;;591:23;;585:30;561:17;;;580:2;557:26;550:66;515:10;;486:140;;;490:3;675:1;670:2;661:6;650:9;646:22;642:31;635:42;745:2;738;734:7;729:2;721:6;717:15;713:29;702:9;698:45;694:54;686:62;;;;206:548;;;;:::o;759:131::-;-1:-1:-1;;;;;834:31:1;;824:42;;814:70;;880:1;877;870:12;895:315;963:6;971;1024:2;1012:9;1003:7;999:23;995:32;992:52;;;1040:1;1037;1030:12;992:52;1079:9;1066:23;1098:31;1123:5;1098:31;:::i;:::-;1148:5;1200:2;1185:18;;;;1172:32;;-1:-1:-1;;;895:315:1:o;1620:180::-;1679:6;1732:2;1720:9;1711:7;1707:23;1703:32;1700:52;;;1748:1;1745;1738:12;1700:52;-1:-1:-1;1771:23:1;;1620:180;-1:-1:-1;1620:180:1:o;1805:456::-;1882:6;1890;1898;1951:2;1939:9;1930:7;1926:23;1922:32;1919:52;;;1967:1;1964;1957:12;1919:52;2006:9;1993:23;2025:31;2050:5;2025:31;:::i;:::-;2075:5;-1:-1:-1;2132:2:1;2117:18;;2104:32;2145:33;2104:32;2145:33;:::i;:::-;1805:456;;2197:7;;-1:-1:-1;;;2251:2:1;2236:18;;;;2223:32;;1805:456::o;2663:156::-;2729:20;;2789:4;2778:16;;2768:27;;2758:55;;2809:1;2806;2799:12;2758:55;2663:156;;;:::o;2824:393::-;2902:6;2910;2918;2926;2979:3;2967:9;2958:7;2954:23;2950:33;2947:53;;;2996:1;2993;2986:12;2947:53;3019:27;3036:9;3019:27;:::i;:::-;3009:37;;3065:36;3097:2;3086:9;3082:18;3065:36;:::i;:::-;3055:46;;3120:36;3152:2;3141:9;3137:18;3120:36;:::i;:::-;3110:46;;3175:36;3207:2;3196:9;3192:18;3175:36;:::i;:::-;3165:46;;2824:393;;;;;;;:::o;3222:247::-;3281:6;3334:2;3322:9;3313:7;3309:23;3305:32;3302:52;;;3350:1;3347;3340:12;3302:52;3389:9;3376:23;3408:31;3433:5;3408:31;:::i;3474:416::-;3539:6;3547;3600:2;3588:9;3579:7;3575:23;3571:32;3568:52;;;3616:1;3613;3606:12;3568:52;3655:9;3642:23;3674:31;3699:5;3674:31;:::i;:::-;3724:5;-1:-1:-1;3781:2:1;3766:18;;3753:32;3823:15;;3816:23;3804:36;;3794:64;;3854:1;3851;3844:12;3794:64;3877:7;3867:17;;;3474:416;;;;;:::o;3895:383::-;3972:6;3980;3988;4041:2;4029:9;4020:7;4016:23;4012:32;4009:52;;;4057:1;4054;4047:12;4009:52;4096:9;4083:23;4115:31;4140:5;4115:31;:::i;:::-;4165:5;4217:2;4202:18;;4189:32;;-1:-1:-1;4268:2:1;4253:18;;;4240:32;;3895:383;-1:-1:-1;;;3895:383:1:o;4283:388::-;4351:6;4359;4412:2;4400:9;4391:7;4387:23;4383:32;4380:52;;;4428:1;4425;4418:12;4380:52;4467:9;4454:23;4486:31;4511:5;4486:31;:::i;:::-;4536:5;-1:-1:-1;4593:2:1;4578:18;;4565:32;4606:33;4565:32;4606:33;:::i;4676:380::-;4755:1;4751:12;;;;4798;;;4819:61;;4873:4;4865:6;4861:17;4851:27;;4819:61;4926:2;4918:6;4915:14;4895:18;4892:38;4889:161;;4972:10;4967:3;4963:20;4960:1;4953:31;5007:4;5004:1;4997:15;5035:4;5032:1;5025:15;4889:161;;4676:380;;;:::o;5061:356::-;5263:2;5245:21;;;5282:18;;;5275:30;5341:34;5336:2;5321:18;;5314:62;5408:2;5393:18;;5061:356::o;5422:127::-;5483:10;5478:3;5474:20;5471:1;5464:31;5514:4;5511:1;5504:15;5538:4;5535:1;5528:15;5554:168;5627:9;;;5658;;5675:15;;;5669:22;;5655:37;5645:71;;5696:18;;:::i;5727:127::-;5788:10;5783:3;5779:20;5776:1;5769:31;5819:4;5816:1;5809:15;5843:4;5840:1;5833:15;5859:120;5899:1;5925;5915:35;;5930:18;;:::i;:::-;-1:-1:-1;5964:9:1;;5859:120::o;7209:148::-;7297:4;7276:12;;;7290;;;7272:31;;7315:13;;7312:39;;;7331:18;;:::i;8397:406::-;8599:2;8581:21;;;8638:2;8618:18;;;8611:30;8677:34;8672:2;8657:18;;8650:62;-1:-1:-1;;;8743:2:1;8728:18;;8721:40;8793:3;8778:19;;8397:406::o;10931:125::-;10996:9;;;11017:10;;;11014:36;;;11030:18;;:::i;12225:401::-;12427:2;12409:21;;;12466:2;12446:18;;;12439:30;12505:34;12500:2;12485:18;;12478:62;-1:-1:-1;;;12571:2:1;12556:18;;12549:35;12616:3;12601:19;;12225:401::o;12631:399::-;12833:2;12815:21;;;12872:2;12852:18;;;12845:30;12911:34;12906:2;12891:18;;12884:62;-1:-1:-1;;;12977:2:1;12962:18;;12955:33;13020:3;13005:19;;12631:399::o;14919:128::-;14986:9;;;15007:11;;;15004:37;;;15021:18;;:::i;15988:209::-;-1:-1:-1;;16152:38:1;;;;16134:57;;16122:2;16107:18;;15988:209::o;17017:165::-;17055:1;17089:4;17086:1;17082:12;17113:3;17103:37;;17120:18;;:::i;:::-;17172:3;17165:4;17162:1;17158:12;17154:22;17149:27;;;17017:165;;;;:::o;17187:151::-;17277:4;17270:12;;;17256;;;17252:31;;17295:14;;17292:40;;;17312:18;;:::i;19597:127::-;19658:10;19653:3;19649:20;19646:1;19639:31;19689:4;19686:1;19679:15;19713:4;19710:1;19703:15;19729:251;19799:6;19852:2;19840:9;19831:7;19827:23;19823:32;19820:52;;;19868:1;19865;19858:12;19820:52;19900:9;19894:16;19919:31;19944:5;19919:31;:::i;19985:980::-;20247:4;20295:3;20284:9;20280:19;20326:6;20315:9;20308:25;20352:2;20390:6;20385:2;20374:9;20370:18;20363:34;20433:3;20428:2;20417:9;20413:18;20406:31;20457:6;20492;20486:13;20523:6;20515;20508:22;20561:3;20550:9;20546:19;20539:26;;20600:2;20592:6;20588:15;20574:29;;20621:1;20631:195;20645:6;20642:1;20639:13;20631:195;;;20710:13;;-1:-1:-1;;;;;20706:39:1;20694:52;;20801:15;;;;20766:12;;;;20742:1;20660:9;20631:195;;;-1:-1:-1;;;;;;;20882:32:1;;;;20877:2;20862:18;;20855:60;-1:-1:-1;;;20946:3:1;20931:19;20924:35;20843:3;19985:980;-1:-1:-1;;;19985:980:1:o;21582:306::-;21670:6;21678;21686;21739:2;21727:9;21718:7;21714:23;21710:32;21707:52;;;21755:1;21752;21745:12;21707:52;21784:9;21778:16;21768:26;;21834:2;21823:9;21819:18;21813:25;21803:35;;21878:2;21867:9;21863:18;21857:25;21847:35;;21582:306;;;;;:::o

Swarm Source

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