ETH Price: $3,310.19 (-10.00%)

Token

RavenFund (RAVEN)
 

Overview

Max Total Supply

10,000,000 RAVEN

Holders

122

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
8,672.764751467079185236 RAVEN

Value
$0.00
0x45E4680E3bCbFE4C9DD0e27997936Aa028c51FEc
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:
RavenFund

Compiler Version
v0.8.21+commit.d9974bed

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT

/*
                                                  ,::::.._
                                               ,':::::::::.
                                           _,-'`:::,::(o)::`-,.._
                                        _.', ', `:::::::::;'-..__`.
                                   _.-'' ' ,' ,' ,\:::,'::-`'''
                               _.-'' , ' , ,'  ' ,' `:::/
                         _..-'' , ' , ' ,' , ,' ',' '/::
                 _...:::'`-..'_, ' , ,'  , ' ,'' , ,'::|
              _`.:::::,':::::,'::`-:..'_',_'_,'..-'::,'|
      _..-:::'::,':::::::,':::,':,'::,':::,'::::::,':::;
        `':,'::::::,:,':::::::::::::::::':::,'::_:::,'/
        __..:'::,':::::::--''' `-:,':,':::'::-' ,':::/
   _.::::::,:::.-''-`-`..'_,'. ,',  , ' , ,'  ', `','
 ,::SSt:''''`                 \:. . ,' '  ,',' '_,'
                               ``::._,'_'_,',.-'
                                   \\ \\
                                    \\_\\
                                     \\`-`.-'_
                                  .`-.\\__`. ``
                                     ``-.-._
                                         `

* Socials :
* https://www.ravenfund.app/
* https://t.me/RavenFundPortal
* https://twitter.com/RavenFund
* https://raven-fund.gitbook.io/raven/

*/
pragma solidity 0.8.21;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

        return true;
    }

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

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

        return true;
    }

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

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

        emit Transfer(sender, recipient, amount);
    }

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

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

    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

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

contract Ownable is Context {
    address private _owner;

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

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

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

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

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

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

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

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

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

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

contract RavenFund is ERC20, Ownable {

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

    IDexRouter public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;

    bool private swapping;
    uint256 public swapTokensAtAmount;

    address public marketingAddress;
    address public rewardsAddress;

    uint256 public tradingActiveBlock = 0; // 0 means trading is not active

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

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

    uint256 public buyTotalFees;
    uint256 public buyMarketingFee;
    uint256 public buyLiquidityFee;
    uint256 public buyRewardsFee;

    uint256 public sellTotalFees;
    uint256 public sellMarketingFee;
    uint256 public sellLiquidityFee;
    uint256 public sellrewardsFee;

    uint256 public tokensForMarketing;
    uint256 public tokensForLiquidity;
    uint256 public tokensForRewards;

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

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

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

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

    event EnabledTrading();
    event RemovedLimits();

    event ExcludeFromFees(address indexed account, bool isExcluded);

    event UpdatedMaxBuyAmount(uint256 newAmount);

    event UpdatedMaxSellAmount(uint256 newAmount);

    event UpdatedMaxWalletAmount(uint256 newAmount);

    event UpdatedMarketingAddress(address indexed newWallet);

    event UpdatedRewardsAddress(address indexed newWallet);

    event MaxTransactionExclusion(address _address, bool excluded);

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

    event TransferForeignToken(address token, uint256 amount);

    constructor() ERC20("RavenFund", "RAVEN") {

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

        IDexRouter _uniswapV2Router = IDexRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);

        _excludeFromMaxTransaction(address(_uniswapV2Router), true);
        uniswapV2Router = _uniswapV2Router;

        uniswapV2Pair = IDexFactory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);

        uint256 totalSupply = 10000000 * 1e18;

        maxBuyAmount = totalSupply * 1000 / 1000;
        maxSellAmount = totalSupply * 1 / 1000;
        maxWalletAmount = totalSupply * 1000 / 1000;
        swapTokensAtAmount = totalSupply * 250 / 100000; // 0.025% swap amount

        buyMarketingFee = 5;
        buyLiquidityFee = 0;
        buyRewardsFee = 0;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyRewardsFee;

        sellMarketingFee = 55;
        sellLiquidityFee = 0;
        sellrewardsFee = 0;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellrewardsFee;

        marketingAddress = address(0xC31fBfCc562F433cAb83146eE85988B403432006);
        rewardsAddress = address(0xC31fBfCc562F433cAb83146eE85988B403432006);

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

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


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

    receive() external payable {}

    // once enabled, can never be turned off
    function enableTrading() external onlyOwner {
        require(!tradingActive, "Cannot re enable trading");
        tradingActive = true;
        swapEnabled = true;
        tradingActiveBlock = block.number;
        emit EnabledTrading();
    }

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


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

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

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

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

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

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


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

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

        _setAutomatedMarketMakerPair(pair, value);
    }

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

        _excludeFromMaxTransaction(pair, value);

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function updateBuyFees(uint256 _marketingFee, uint256 _liquidityFee, uint256 _rewardsFee) external onlyOwner {
        buyMarketingFee = _marketingFee;
        buyLiquidityFee = _liquidityFee;
        buyRewardsFee = _rewardsFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyRewardsFee;
        require(buyTotalFees <= 15, "Must keep fees at 15% or less");
    }

    function updateSellFees(uint256 _marketingFee, uint256 _liquidityFee, uint256 _rewardsFee) external onlyOwner {
        sellMarketingFee = _marketingFee;
        sellLiquidityFee = _liquidityFee;
        sellrewardsFee = _rewardsFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellrewardsFee;
        require(sellTotalFees <= 99, "Must keep fees at 20% or less");
    }

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

    function _transfer(address from, address to, uint256 amount) internal override {

        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "amount must be greater than 0");


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

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

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

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

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

            swapBack();

            swapping = false;
        }

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

        uint256 fees = 0;
        uint256 penaltyAmount = 0;
        // only take fees on Trades, not on wallet transfers

        if(takeFee){
            // bot/sniper penalty.  Tokens get transferred to marketing wallet and ETH to liquidity.
            if(tradingActiveBlock>0 && (tradingActiveBlock + 3) > block.number){
                penaltyAmount = amount * 99 / 100;
                super._transfer(from, marketingAddress, penaltyAmount);
            }
            // on sell
            else if (automatedMarketMakerPairs[to] && sellTotalFees > 0){
                fees = amount * sellTotalFees /100;
                tokensForLiquidity += fees * sellLiquidityFee / sellTotalFees;
                tokensForMarketing += fees * sellMarketingFee / sellTotalFees;
                tokensForRewards += fees * sellrewardsFee / sellTotalFees;
            }
            // on buy
            else if(automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = amount * buyTotalFees / 100;
                tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees;
                tokensForMarketing += fees * buyMarketingFee / buyTotalFees;
                tokensForRewards += fees * buyRewardsFee / buyTotalFees;
            }

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

            amount -= fees + penaltyAmount;
        }

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

    function swapTokensForEth(uint256 tokenAmount) private {

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

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

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

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

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

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity + tokensForMarketing + tokensForRewards;

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

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

        bool success;

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

        swapTokensForEth(contractBalance - liquidityTokens);

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

        uint256 ethForMarketing = ethBalance * tokensForMarketing / (totalTokensToSwap - (tokensForLiquidity/2));
        uint256 ethForRewards = ethBalance * tokensForRewards / (totalTokensToSwap - (tokensForLiquidity/2));

        ethForLiquidity -= ethForMarketing + ethForRewards;

        tokensForLiquidity = 0;
        tokensForMarketing = 0;
        tokensForRewards = 0;

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

        (success,) = address(rewardsAddress).call{value: ethForRewards}("");

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

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

    // withdraw ETH if stuck or someone sends to the address
    function withdrawStuckETH() external onlyOwner {
        bool success;
        (success,) = address(msg.sender).call{value: address(this).balance}("");
    }

    function setMarketingAddress(address _marketingAddress) external onlyOwner {
        require(_marketingAddress != address(0), "_marketingAddress address cannot be 0");
        marketingAddress = payable(_marketingAddress);
        emit UpdatedMarketingAddress(_marketingAddress);
    }

    function setRewardsAddress(address _rewardsAddress) external onlyOwner {
        require(_rewardsAddress != address(0), "_rewardsAddress address cannot be 0");
        rewardsAddress = payable(_rewardsAddress);
        emit UpdatedRewardsAddress(_rewardsAddress);
    }
}

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":[],"name":"EnabledTrading","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"},{"indexed":false,"internalType":"bool","name":"excluded","type":"bool"}],"name":"MaxTransactionExclusion","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[],"name":"RemovedLimits","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TransferForeignToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"}],"name":"UpdatedMarketingAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxBuyAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxSellAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxWalletAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"}],"name":"UpdatedRewardsAddress","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyRewardsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"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":"limitRemoval","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBuyAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardsAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellrewardsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingAddress","type":"address"}],"name":"setMarketingAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_rewardsAddress","type":"address"}],"name":"setRewardsAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActiveBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"name":"transferForeignToken","outputs":[{"internalType":"bool","name":"_sent","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IDexRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_rewardsFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxBuyAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxSellAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_rewardsFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawStuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040525f600d55600e805462ffffff191660019081179091556010805460ff1916909117905534801562000033575f80fd5b506040518060400160405280600981526020016814985d995b919d5b9960ba1b815250604051806040016040528060058152602001642920ab22a760d91b8152508160039081620000859190620007f8565b506004620000948282620007f8565b5050505f620000a86200040060201b60201c565b600580546001600160a01b0319166001600160a01b038316908117909155604051919250905f905f80516020620039e1833981519152908290a35033737a250d5630b4cf539739df2c5dacb4c659f2488d6200010681600162000404565b6001600160a01b03811660808190526040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa1580156200014f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620001759190620008c0565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001c1573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620001e79190620008c0565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af115801562000232573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620002589190620008c0565b6001600160a01b031660a08190526200027390600162000466565b6a084595161401484a0000006103e86200028e828262000903565b6200029a919062000923565b6006556103e8620002ad82600162000903565b620002b9919062000923565b6007556103e8620002cb828262000903565b620002d7919062000923565b600855620186a0620002eb8260fa62000903565b620002f7919062000923565b600a55600560128190555f60138190556014819055906200031a90829062000943565b62000326919062000943565b601155603760168190555f60178190556018819055906200034990829062000943565b62000355919062000943565b601555600b805473c31fbfcc562f433cab83146ee85988b4034320066001600160a01b03199182168117909255600c805490911690911790556200039b83600162000404565b620003a830600162000404565b620003b761dead600162000404565b620003c4836001620004d0565b620003d1306001620004d0565b620003e061dead6001620004d0565b620003ec83826200057c565b620003f7836200065e565b50505062000959565b3390565b6001600160a01b0382165f818152601d6020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6001600160a01b0382165f908152601e60205260409020805460ff191682151517905562000495828262000404565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab905f90a35050565b6005546001600160a01b031633146200051e5760405162461bcd60e51b815260206004820181905260248201525f80516020620039c183398151915260448201526064015b60405180910390fd5b6001600160a01b0382165f818152601c6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b038216620005d45760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640162000515565b8060025f828254620005e7919062000943565b90915550506001600160a01b0382165f90815260208190526040812080548392906200061590849062000943565b90915550506040518181526001600160a01b038316905f907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005546001600160a01b03163314620006a85760405162461bcd60e51b815260206004820181905260248201525f80516020620039c1833981519152604482015260640162000515565b6001600160a01b0381166200070f5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840162000515565b6005546040516001600160a01b038084169216905f80516020620039e1833981519152905f90a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b634e487b7160e01b5f52604160045260245ffd5b600181811c908216806200078157607f821691505b602082108103620007a057634e487b7160e01b5f52602260045260245ffd5b50919050565b601f821115620007f3575f81815260208120601f850160051c81016020861015620007ce5750805b601f850160051c820191505b81811015620007ef57828155600101620007da565b5050505b505050565b81516001600160401b0381111562000814576200081462000758565b6200082c816200082584546200076c565b84620007a6565b602080601f83116001811462000862575f84156200084a5750858301515b5f19600386901b1c1916600185901b178555620007ef565b5f85815260208120601f198616915b82811015620008925788860151825594840194600190910190840162000871565b5085821015620008b057878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b5f60208284031215620008d1575f80fd5b81516001600160a01b0381168114620008e8575f80fd5b9392505050565b634e487b7160e01b5f52601160045260245ffd5b80820281158282048414176200091d576200091d620008ef565b92915050565b5f826200093e57634e487b7160e01b5f52601260045260245ffd5b500490565b808201808211156200091d576200091d620008ef565b60805160a051613007620009ba5f395f818161050e01528181610d2f015281816113a40152611e1501525f818161040101528181611dd80152818161297101528181612a2801528181612a6401528181612ad80152612aff01526130075ff3fe60806040526004361061035e575f3560e01c8063906e9dd0116101bd578063c18bc195116100f2578063e884f26011610092578063f2fde38b1161006d578063f2fde38b14610993578063f54afa78146109b2578063f5648a4f146109c7578063f6374342146109db575f80fd5b8063e884f26014610955578063ee40166e14610969578063f11a24d31461097e575f80fd5b8063d85ba063116100cd578063d85ba063146108c8578063dc3f0d0f146108dd578063dd62ed3e146108fc578063e2f4560514610940575f80fd5b8063c18bc19514610871578063c876d0b914610890578063d257b34f146108a9575f80fd5b8063a9059cbb1161015d578063bbc0c74211610138578063bbc0c742146107f6578063c024666814610814578063c0973eed14610833578063c17b5b8c14610852575f80fd5b8063a9059cbb14610794578063aa4bde28146107b3578063b62496f5146107c8575f80fd5b806395d89b411161019857806395d89b41146107235780639a7a23d614610737578063a457c2d714610756578063a5ece94114610775575f80fd5b8063906e9dd0146106db57806392136913146106fa57806392ab128b1461070f575f80fd5b806366d602ae116102935780637bce5a041161023357806388e765ff1161020e57806388e765ff146106765780638906758d1461068b5780638a8c523c146106aa5780638da5cb5b146106be575f80fd5b80637bce5a04146106235780638095d564146106385780638366e79a14610657575f80fd5b806370a082311161026e57806370a08231146105a7578063715018a6146105db5780637571336a146105ef57806377a3b6091461060e575f80fd5b806366d602ae1461055e5780636a486a8e146105735780636ddd171314610588575f80fd5b806323b872dd116102fe57806339509351116102d957806339509351146104de57806349bd5a5e146104fd5780634a62bb65146105305780635e95769c14610549575f80fd5b806323b872dd146104835780632be32b61146104a2578063313ce567146104c3575f80fd5b80631694505e116103395780631694505e146103f057806318160ddd1461043b5780631a8145bb146104595780631f3fed8f1461046e575f80fd5b806306fdde0314610369578063095ea7b31461039357806310d5de53146103c2575f80fd5b3661036557005b5f80fd5b348015610374575f80fd5b5061037d6109f0565b60405161038a9190612bd5565b60405180910390f35b34801561039e575f80fd5b506103b26103ad366004612c37565b610a80565b604051901515815260200161038a565b3480156103cd575f80fd5b506103b26103dc366004612c61565b601d6020525f908152604090205460ff1681565b3480156103fb575f80fd5b506104237f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161038a565b348015610446575f80fd5b506002545b60405190815260200161038a565b348015610464575f80fd5b5061044b601a5481565b348015610479575f80fd5b5061044b60195481565b34801561048e575f80fd5b506103b261049d366004612c83565b610a96565b3480156104ad575f80fd5b506104c16104bc366004612cc1565b610b43565b005b3480156104ce575f80fd5b506040516012815260200161038a565b3480156104e9575f80fd5b506103b26104f8366004612c37565b610c50565b348015610508575f80fd5b506104237f000000000000000000000000000000000000000000000000000000000000000081565b34801561053b575f80fd5b50600e546103b29060ff1681565b348015610554575f80fd5b5061044b60185481565b348015610569575f80fd5b5061044b60075481565b34801561057e575f80fd5b5061044b60155481565b348015610593575f80fd5b50600e546103b29062010000900460ff1681565b3480156105b2575f80fd5b5061044b6105c1366004612c61565b6001600160a01b03165f9081526020819052604090205490565b3480156105e6575f80fd5b506104c1610c8b565b3480156105fa575f80fd5b506104c1610609366004612ce5565b610cfe565b348015610619575f80fd5b5061044b60145481565b34801561062e575f80fd5b5061044b60125481565b348015610643575f80fd5b506104c1610652366004612d1c565b610de8565b348015610662575f80fd5b506103b2610671366004612d45565b610e90565b348015610681575f80fd5b5061044b60065481565b348015610696575f80fd5b506104c16106a5366004612c61565b611092565b3480156106b5575f80fd5b506104c1611167565b3480156106c9575f80fd5b506005546001600160a01b0316610423565b3480156106e6575f80fd5b506104c16106f5366004612c61565b611228565b348015610705575f80fd5b5061044b60165481565b34801561071a575f80fd5b506104c16112ff565b34801561072e575f80fd5b5061037d611369565b348015610742575f80fd5b506104c1610751366004612ce5565b611378565b348015610761575f80fd5b506103b2610770366004612c37565b611457565b348015610780575f80fd5b50600b54610423906001600160a01b031681565b34801561079f575f80fd5b506103b26107ae366004612c37565b6114ef565b3480156107be575f80fd5b5061044b60085481565b3480156107d3575f80fd5b506103b26107e2366004612c61565b601e6020525f908152604090205460ff1681565b348015610801575f80fd5b50600e546103b290610100900460ff1681565b34801561081f575f80fd5b506104c161082e366004612ce5565b6114fb565b34801561083e575f80fd5b50600c54610423906001600160a01b031681565b34801561085d575f80fd5b506104c161086c366004612d1c565b611583565b34801561087c575f80fd5b506104c161088b366004612cc1565b611626565b34801561089b575f80fd5b506010546103b29060ff1681565b3480156108b4575f80fd5b506104c16108c3366004612cc1565b61172f565b3480156108d3575f80fd5b5061044b60115481565b3480156108e8575f80fd5b506104c16108f7366004612cc1565b61187a565b348015610907575f80fd5b5061044b610916366004612d45565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b34801561094b575f80fd5b5061044b600a5481565b348015610960575f80fd5b506104c1611981565b348015610974575f80fd5b5061044b600d5481565b348015610989575f80fd5b5061044b60135481565b34801561099e575f80fd5b506104c16109ad366004612c61565b6119b7565b3480156109bd575f80fd5b5061044b601b5481565b3480156109d2575f80fd5b506104c1611aa1565b3480156109e6575f80fd5b5061044b60175481565b6060600380546109ff90612d71565b80601f0160208091040260200160405190810160405280929190818152602001828054610a2b90612d71565b8015610a765780601f10610a4d57610100808354040283529160200191610a76565b820191905f5260205f20905b815481529060010190602001808311610a5957829003601f168201915b5050505050905090565b5f610a8c338484611b15565b5060015b92915050565b5f610aa2848484611c38565b6001600160a01b0384165f90815260016020908152604080832033845290915290205482811015610b2b5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084015b60405180910390fd5b610b388533858403611b15565b506001949350505050565b6005546001600160a01b03163314610b6d5760405162461bcd60e51b8152600401610b2290612da9565b670de0b6b3a76400006103e8610b8260025490565b610b8d906001612df2565b610b979190612e09565b610ba19190612e09565b811015610c025760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152687468616e20302e312560b81b6064820152608401610b22565b610c1481670de0b6b3a7640000612df2565b60068190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de41009906020015b60405180910390a150565b335f8181526001602090815260408083206001600160a01b03871684529091528120549091610a8c918590610c86908690612e28565b611b15565b6005546001600160a01b03163314610cb55760405162461bcd60e51b8152600401610b2290612da9565b6005546040515f916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b03163314610d285760405162461bcd60e51b8152600401610b2290612da9565b80610dbe577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031603610dbe5760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610b22565b6001600160a01b03919091165f908152601d60205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314610e125760405162461bcd60e51b8152600401610b2290612da9565b60128390556013829055601481905580610e2c8385612e28565b610e369190612e28565b6011819055600f1015610e8b5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313525206f72206c6573730000006044820152606401610b22565b505050565b6005545f906001600160a01b03163314610ebc5760405162461bcd60e51b8152600401610b2290612da9565b6001600160a01b038316610f125760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610b22565b306001600160a01b03841603610f6a5760405162461bcd60e51b815260206004820152601c60248201527f43616e2774207769746864726177206e617469766520746f6b656e73000000006044820152606401610b22565b6040516370a0823160e01b81523060048201525f906001600160a01b038516906370a0823190602401602060405180830381865afa158015610fae573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fd29190612e3b565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303815f875af1158015611022573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110469190612e52565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b6005546001600160a01b031633146110bc5760405162461bcd60e51b8152600401610b2290612da9565b6001600160a01b03811661111e5760405162461bcd60e51b815260206004820152602360248201527f5f726577617264734164647265737320616464726573732063616e6e6f74206260448201526206520360ec1b6064820152608401610b22565b600c80546001600160a01b0319166001600160a01b0383169081179091556040517f647cd1cbe5341aa880069f5c966ac6cf0ed473b7c0bf494fb7fc7ca46dc4cc78905f90a250565b6005546001600160a01b031633146111915760405162461bcd60e51b8152600401610b2290612da9565b600e54610100900460ff16156111e95760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420726520656e61626c652074726164696e6700000000000000006044820152606401610b22565b600e805462ffff0019166201010017905543600d556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb7905f90a1565b6005546001600160a01b031633146112525760405162461bcd60e51b8152600401610b2290612da9565b6001600160a01b0381166112b65760405162461bcd60e51b815260206004820152602560248201527f5f6d61726b6574696e674164647265737320616464726573732063616e6e6f74604482015264020626520360dc1b6064820152608401610b22565b600b80546001600160a01b0319166001600160a01b0383169081179091556040517fd1e7d6a3390dd5008bd1c57798817b9f806e4c417264e7d3d67e42e784dc24a9905f90a250565b6005546001600160a01b031633146113295760405162461bcd60e51b8152600401610b2290612da9565b600e805460ff199081169091556010805490911690556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c905f90a1565b6060600480546109ff90612d71565b6005546001600160a01b031633146113a25760405162461bcd60e51b8152600401610b2290612da9565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316036114495760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610b22565b6114538282612501565b5050565b335f9081526001602090815260408083206001600160a01b0386168452909152812054828110156114d85760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610b22565b6114e53385858403611b15565b5060019392505050565b5f610a8c338484611c38565b6005546001600160a01b031633146115255760405162461bcd60e51b8152600401610b2290612da9565b6001600160a01b0382165f818152601c6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146115ad5760405162461bcd60e51b8152600401610b2290612da9565b601683905560178290556018819055806115c78385612e28565b6115d19190612e28565b601581905560631015610e8b5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323025206f72206c6573730000006044820152606401610b22565b6005546001600160a01b031633146116505760405162461bcd60e51b8152600401610b2290612da9565b670de0b6b3a76400006103e861166560025490565b611670906003612df2565b61167a9190612e09565b6116849190612e09565b8110156116e85760405162461bcd60e51b815260206004820152602c60248201527f43616e6e6f7420736574206d61782077616c6c657420616d6f756e74206c6f7760448201526b6572207468616e20302e332560a01b6064820152608401610b22565b6116fa81670de0b6b3a7640000612df2565b60088190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc90602001610c45565b6005546001600160a01b031633146117595760405162461bcd60e51b8152600401610b2290612da9565b620186a061176660025490565b611771906001612df2565b61177b9190612e09565b8110156117e85760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610b22565b6103e86117f460025490565b6117ff906001612df2565b6118099190612e09565b8111156118755760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171892903a37ba30b61039bab838363c9760611b6064820152608401610b22565b600a55565b6005546001600160a01b031633146118a45760405162461bcd60e51b8152600401610b2290612da9565b670de0b6b3a76400006103e86118b960025490565b6118c4906001612df2565b6118ce9190612e09565b6118d89190612e09565b81101561193a5760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015269207468616e20302e312560b01b6064820152608401610b22565b61194c81670de0b6b3a7640000612df2565b60078190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e90602001610c45565b6005546001600160a01b031633146119ab5760405162461bcd60e51b8152600401610b2290612da9565b6010805460ff19169055565b6005546001600160a01b031633146119e15760405162461bcd60e51b8152600401610b2290612da9565b6001600160a01b038116611a465760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b22565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314611acb5760405162461bcd60e51b8152600401610b2290612da9565b6040515f90339047908381818185875af1925050503d805f8114611b0a576040519150601f19603f3d011682016040523d82523d5f602084013e611b0f565b606091505b50505050565b6001600160a01b038316611b775760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b22565b6001600160a01b038216611bd85760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b22565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611c5e5760405162461bcd60e51b8152600401610b2290612e6d565b6001600160a01b038216611c845760405162461bcd60e51b8152600401610b2290612eb2565b5f8111611cd35760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610b22565b600e5460ff161561219a576005546001600160a01b03848116911614801590611d0a57506005546001600160a01b03838116911614155b8015611d1e57506001600160a01b03821615155b8015611d3557506001600160a01b03821661dead14155b1561219a57600e54610100900460ff16611dcb576001600160a01b0383165f908152601d602052604090205460ff1680611d8657506001600160a01b0382165f908152601d602052604090205460ff165b611dcb5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610b22565b60105460ff1615611f24577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614158015611e4a57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b15611f2457611e5a600443612ef5565b325f908152600f6020526040902054108015611e965750611e7c600443612ef5565b6001600160a01b0383165f908152600f6020526040902054105b611f005760405162461bcd60e51b815260206004820152603560248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527432b21710102a393c9030b3b0b4b7103630ba32b91760591b6064820152608401610b22565b325f908152600f602052604080822043908190556001600160a01b03851683529120555b6001600160a01b0383165f908152601e602052604090205460ff168015611f6357506001600160a01b0382165f908152601d602052604090205460ff16155b1561203e57600654811115611fcb5760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610b22565b6008546001600160a01b0383165f90815260208190526040902054611ff09083612e28565b11156120395760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08115e18d95959081b585e081dd85b1b195d60421b6044820152606401610b22565b61219a565b6001600160a01b0382165f908152601e602052604090205460ff16801561207d57506001600160a01b0383165f908152601d602052604090205460ff16155b156120e7576007548111156120395760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610b22565b6001600160a01b0382165f908152601d602052604090205460ff1615801561212757506001600160a01b0383165f908152601d602052604090205460ff16155b1561219a576008546001600160a01b0383165f908152602081905260409020546121519083612e28565b111561219a5760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08115e18d95959081b585e081dd85b1b195d60421b6044820152606401610b22565b305f90815260208190526040902054600a54811080159081906121c55750600e5462010000900460ff165b80156121d4575060095460ff16155b80156121f857506001600160a01b0385165f908152601e602052604090205460ff16155b801561221c57506001600160a01b0385165f908152601c602052604090205460ff16155b801561224057506001600160a01b0384165f908152601c602052604090205460ff16155b15612265576009805460ff1916600117905561225a612569565b6009805460ff191690555b6001600160a01b0385165f908152601c602052604090205460019060ff16806122a557506001600160a01b0385165f908152601c602052604090205460ff165b156122ad57505f5b5f8082156124ec575f600d541180156122d3575043600d5460036122d19190612e28565b115b1561230f5760646122e5876063612df2565b6122ef9190612e09565b600b5490915061230a9089906001600160a01b031683612767565b6124c4565b6001600160a01b0387165f908152601e602052604090205460ff16801561233757505f601554115b156123ec5760646015548761234c9190612df2565b6123569190612e09565b9150601554601754836123699190612df2565b6123739190612e09565b601a5f8282546123839190612e28565b90915550506015546016546123989084612df2565b6123a29190612e09565b60195f8282546123b29190612e28565b90915550506015546018546123c79084612df2565b6123d19190612e09565b601b5f8282546123e19190612e28565b909155506124c49050565b6001600160a01b0388165f908152601e602052604090205460ff16801561241457505f601154115b156124c4576064601154876124299190612df2565b6124339190612e09565b9150601154601354836124469190612df2565b6124509190612e09565b601a5f8282546124609190612e28565b90915550506011546012546124759084612df2565b61247f9190612e09565b60195f82825461248f9190612e28565b90915550506011546014546124a49084612df2565b6124ae9190612e09565b601b5f8282546124be9190612e28565b90915550505b81156124d5576124d5883084612767565b6124df8183612e28565b6124e99087612ef5565b95505b6124f7888888612767565b5050505050505050565b6001600160a01b0382165f908152601e60205260409020805460ff191682151517905561252e82826128ba565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab905f90a35050565b305f9081526020819052604081205490505f601b54601954601a5461258e9190612e28565b6125989190612e28565b90508115806125a5575080155b156125ae575050565b600a80546125bb91612df2565b8211156125d257600a80546125cf91612df2565b91505b5f80600283601a54866125e59190612df2565b6125ef9190612e09565b6125f99190612e09565b905061260d6126088286612ef5565b61291c565b601a54479081905f9061262290600290612e09565b61262c9087612ef5565b6019546126399085612df2565b6126439190612e09565b90505f6002601a546126559190612e09565b61265f9088612ef5565b601b5461266c9086612df2565b6126769190612e09565b90506126828183612e28565b61268c9084612ef5565b5f601a8190556019819055601b55925084158015906126aa57505f83115b156126b9576126b98584612ad2565b600c546040516001600160a01b039091169082905f81818185875af1925050503d805f8114612703576040519150601f19603f3d011682016040523d82523d5f602084013e612708565b606091505b5050600b546040519197506001600160a01b03169047905f81818185875af1925050503d805f8114612755576040519150601f19603f3d011682016040523d82523d5f602084013e61275a565b606091505b5050505050505050505050565b6001600160a01b03831661278d5760405162461bcd60e51b8152600401610b2290612e6d565b6001600160a01b0382166127b35760405162461bcd60e51b8152600401610b2290612eb2565b6001600160a01b0383165f908152602081905260409020548181101561282a5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610b22565b6001600160a01b038085165f90815260208190526040808220858503905591851681529081208054849290612860908490612e28565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516128ac91815260200190565b60405180910390a350505050565b6001600160a01b0382165f818152601d6020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6040805160028082526060820183525f9260208301908036833701905050905030815f8151811061294f5761294f612f08565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156129cb573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906129ef9190612f1c565b81600181518110612a0257612a02612f08565b60200260200101906001600160a01b031690816001600160a01b031681525050612a4d307f000000000000000000000000000000000000000000000000000000000000000084611b15565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac94790612aa19085905f90869030904290600401612f37565b5f604051808303815f87803b158015612ab8575f80fd5b505af1158015612aca573d5f803e3d5ffd5b505050505050565b612afd307f000000000000000000000000000000000000000000000000000000000000000084611b15565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f305d7198230855f80612b436005546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015612ba9573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190612bce9190612fa6565b5050505050565b5f6020808352835180828501525f5b81811015612c0057858101830151858201604001528201612be4565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114612c34575f80fd5b50565b5f8060408385031215612c48575f80fd5b8235612c5381612c20565b946020939093013593505050565b5f60208284031215612c71575f80fd5b8135612c7c81612c20565b9392505050565b5f805f60608486031215612c95575f80fd5b8335612ca081612c20565b92506020840135612cb081612c20565b929592945050506040919091013590565b5f60208284031215612cd1575f80fd5b5035919050565b8015158114612c34575f80fd5b5f8060408385031215612cf6575f80fd5b8235612d0181612c20565b91506020830135612d1181612cd8565b809150509250929050565b5f805f60608486031215612d2e575f80fd5b505081359360208301359350604090920135919050565b5f8060408385031215612d56575f80fd5b8235612d6181612c20565b91506020830135612d1181612c20565b600181811c90821680612d8557607f821691505b602082108103612da357634e487b7160e01b5f52602260045260245ffd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b8082028115828204841417610a9057610a90612dde565b5f82612e2357634e487b7160e01b5f52601260045260245ffd5b500490565b80820180821115610a9057610a90612dde565b5f60208284031215612e4b575f80fd5b5051919050565b5f60208284031215612e62575f80fd5b8151612c7c81612cd8565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610a9057610a90612dde565b634e487b7160e01b5f52603260045260245ffd5b5f60208284031215612f2c575f80fd5b8151612c7c81612c20565b5f60a082018783526020878185015260a0604085015281875180845260c08601915082890193505f5b81811015612f855784516001600160a01b031683529383019391830191600101612f60565b50506001600160a01b03969096166060850152505050608001529392505050565b5f805f60608486031215612fb8575f80fd5b835192506020840151915060408401519050925092509256fea26469706673582212201493fac46f2c559774024de89ebcb48178e8600e4f6847ebf91ce429bd825c2564736f6c634300081500334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65728be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0

Deployed Bytecode

0x60806040526004361061035e575f3560e01c8063906e9dd0116101bd578063c18bc195116100f2578063e884f26011610092578063f2fde38b1161006d578063f2fde38b14610993578063f54afa78146109b2578063f5648a4f146109c7578063f6374342146109db575f80fd5b8063e884f26014610955578063ee40166e14610969578063f11a24d31461097e575f80fd5b8063d85ba063116100cd578063d85ba063146108c8578063dc3f0d0f146108dd578063dd62ed3e146108fc578063e2f4560514610940575f80fd5b8063c18bc19514610871578063c876d0b914610890578063d257b34f146108a9575f80fd5b8063a9059cbb1161015d578063bbc0c74211610138578063bbc0c742146107f6578063c024666814610814578063c0973eed14610833578063c17b5b8c14610852575f80fd5b8063a9059cbb14610794578063aa4bde28146107b3578063b62496f5146107c8575f80fd5b806395d89b411161019857806395d89b41146107235780639a7a23d614610737578063a457c2d714610756578063a5ece94114610775575f80fd5b8063906e9dd0146106db57806392136913146106fa57806392ab128b1461070f575f80fd5b806366d602ae116102935780637bce5a041161023357806388e765ff1161020e57806388e765ff146106765780638906758d1461068b5780638a8c523c146106aa5780638da5cb5b146106be575f80fd5b80637bce5a04146106235780638095d564146106385780638366e79a14610657575f80fd5b806370a082311161026e57806370a08231146105a7578063715018a6146105db5780637571336a146105ef57806377a3b6091461060e575f80fd5b806366d602ae1461055e5780636a486a8e146105735780636ddd171314610588575f80fd5b806323b872dd116102fe57806339509351116102d957806339509351146104de57806349bd5a5e146104fd5780634a62bb65146105305780635e95769c14610549575f80fd5b806323b872dd146104835780632be32b61146104a2578063313ce567146104c3575f80fd5b80631694505e116103395780631694505e146103f057806318160ddd1461043b5780631a8145bb146104595780631f3fed8f1461046e575f80fd5b806306fdde0314610369578063095ea7b31461039357806310d5de53146103c2575f80fd5b3661036557005b5f80fd5b348015610374575f80fd5b5061037d6109f0565b60405161038a9190612bd5565b60405180910390f35b34801561039e575f80fd5b506103b26103ad366004612c37565b610a80565b604051901515815260200161038a565b3480156103cd575f80fd5b506103b26103dc366004612c61565b601d6020525f908152604090205460ff1681565b3480156103fb575f80fd5b506104237f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b03909116815260200161038a565b348015610446575f80fd5b506002545b60405190815260200161038a565b348015610464575f80fd5b5061044b601a5481565b348015610479575f80fd5b5061044b60195481565b34801561048e575f80fd5b506103b261049d366004612c83565b610a96565b3480156104ad575f80fd5b506104c16104bc366004612cc1565b610b43565b005b3480156104ce575f80fd5b506040516012815260200161038a565b3480156104e9575f80fd5b506103b26104f8366004612c37565b610c50565b348015610508575f80fd5b506104237f0000000000000000000000003c698c087141a2e2e76f882f78de55383cbd8f0681565b34801561053b575f80fd5b50600e546103b29060ff1681565b348015610554575f80fd5b5061044b60185481565b348015610569575f80fd5b5061044b60075481565b34801561057e575f80fd5b5061044b60155481565b348015610593575f80fd5b50600e546103b29062010000900460ff1681565b3480156105b2575f80fd5b5061044b6105c1366004612c61565b6001600160a01b03165f9081526020819052604090205490565b3480156105e6575f80fd5b506104c1610c8b565b3480156105fa575f80fd5b506104c1610609366004612ce5565b610cfe565b348015610619575f80fd5b5061044b60145481565b34801561062e575f80fd5b5061044b60125481565b348015610643575f80fd5b506104c1610652366004612d1c565b610de8565b348015610662575f80fd5b506103b2610671366004612d45565b610e90565b348015610681575f80fd5b5061044b60065481565b348015610696575f80fd5b506104c16106a5366004612c61565b611092565b3480156106b5575f80fd5b506104c1611167565b3480156106c9575f80fd5b506005546001600160a01b0316610423565b3480156106e6575f80fd5b506104c16106f5366004612c61565b611228565b348015610705575f80fd5b5061044b60165481565b34801561071a575f80fd5b506104c16112ff565b34801561072e575f80fd5b5061037d611369565b348015610742575f80fd5b506104c1610751366004612ce5565b611378565b348015610761575f80fd5b506103b2610770366004612c37565b611457565b348015610780575f80fd5b50600b54610423906001600160a01b031681565b34801561079f575f80fd5b506103b26107ae366004612c37565b6114ef565b3480156107be575f80fd5b5061044b60085481565b3480156107d3575f80fd5b506103b26107e2366004612c61565b601e6020525f908152604090205460ff1681565b348015610801575f80fd5b50600e546103b290610100900460ff1681565b34801561081f575f80fd5b506104c161082e366004612ce5565b6114fb565b34801561083e575f80fd5b50600c54610423906001600160a01b031681565b34801561085d575f80fd5b506104c161086c366004612d1c565b611583565b34801561087c575f80fd5b506104c161088b366004612cc1565b611626565b34801561089b575f80fd5b506010546103b29060ff1681565b3480156108b4575f80fd5b506104c16108c3366004612cc1565b61172f565b3480156108d3575f80fd5b5061044b60115481565b3480156108e8575f80fd5b506104c16108f7366004612cc1565b61187a565b348015610907575f80fd5b5061044b610916366004612d45565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b34801561094b575f80fd5b5061044b600a5481565b348015610960575f80fd5b506104c1611981565b348015610974575f80fd5b5061044b600d5481565b348015610989575f80fd5b5061044b60135481565b34801561099e575f80fd5b506104c16109ad366004612c61565b6119b7565b3480156109bd575f80fd5b5061044b601b5481565b3480156109d2575f80fd5b506104c1611aa1565b3480156109e6575f80fd5b5061044b60175481565b6060600380546109ff90612d71565b80601f0160208091040260200160405190810160405280929190818152602001828054610a2b90612d71565b8015610a765780601f10610a4d57610100808354040283529160200191610a76565b820191905f5260205f20905b815481529060010190602001808311610a5957829003601f168201915b5050505050905090565b5f610a8c338484611b15565b5060015b92915050565b5f610aa2848484611c38565b6001600160a01b0384165f90815260016020908152604080832033845290915290205482811015610b2b5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084015b60405180910390fd5b610b388533858403611b15565b506001949350505050565b6005546001600160a01b03163314610b6d5760405162461bcd60e51b8152600401610b2290612da9565b670de0b6b3a76400006103e8610b8260025490565b610b8d906001612df2565b610b979190612e09565b610ba19190612e09565b811015610c025760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152687468616e20302e312560b81b6064820152608401610b22565b610c1481670de0b6b3a7640000612df2565b60068190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de41009906020015b60405180910390a150565b335f8181526001602090815260408083206001600160a01b03871684529091528120549091610a8c918590610c86908690612e28565b611b15565b6005546001600160a01b03163314610cb55760405162461bcd60e51b8152600401610b2290612da9565b6005546040515f916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b03163314610d285760405162461bcd60e51b8152600401610b2290612da9565b80610dbe577f0000000000000000000000003c698c087141a2e2e76f882f78de55383cbd8f066001600160a01b0316826001600160a01b031603610dbe5760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610b22565b6001600160a01b03919091165f908152601d60205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314610e125760405162461bcd60e51b8152600401610b2290612da9565b60128390556013829055601481905580610e2c8385612e28565b610e369190612e28565b6011819055600f1015610e8b5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313525206f72206c6573730000006044820152606401610b22565b505050565b6005545f906001600160a01b03163314610ebc5760405162461bcd60e51b8152600401610b2290612da9565b6001600160a01b038316610f125760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610b22565b306001600160a01b03841603610f6a5760405162461bcd60e51b815260206004820152601c60248201527f43616e2774207769746864726177206e617469766520746f6b656e73000000006044820152606401610b22565b6040516370a0823160e01b81523060048201525f906001600160a01b038516906370a0823190602401602060405180830381865afa158015610fae573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fd29190612e3b565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303815f875af1158015611022573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110469190612e52565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b6005546001600160a01b031633146110bc5760405162461bcd60e51b8152600401610b2290612da9565b6001600160a01b03811661111e5760405162461bcd60e51b815260206004820152602360248201527f5f726577617264734164647265737320616464726573732063616e6e6f74206260448201526206520360ec1b6064820152608401610b22565b600c80546001600160a01b0319166001600160a01b0383169081179091556040517f647cd1cbe5341aa880069f5c966ac6cf0ed473b7c0bf494fb7fc7ca46dc4cc78905f90a250565b6005546001600160a01b031633146111915760405162461bcd60e51b8152600401610b2290612da9565b600e54610100900460ff16156111e95760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420726520656e61626c652074726164696e6700000000000000006044820152606401610b22565b600e805462ffff0019166201010017905543600d556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb7905f90a1565b6005546001600160a01b031633146112525760405162461bcd60e51b8152600401610b2290612da9565b6001600160a01b0381166112b65760405162461bcd60e51b815260206004820152602560248201527f5f6d61726b6574696e674164647265737320616464726573732063616e6e6f74604482015264020626520360dc1b6064820152608401610b22565b600b80546001600160a01b0319166001600160a01b0383169081179091556040517fd1e7d6a3390dd5008bd1c57798817b9f806e4c417264e7d3d67e42e784dc24a9905f90a250565b6005546001600160a01b031633146113295760405162461bcd60e51b8152600401610b2290612da9565b600e805460ff199081169091556010805490911690556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c905f90a1565b6060600480546109ff90612d71565b6005546001600160a01b031633146113a25760405162461bcd60e51b8152600401610b2290612da9565b7f0000000000000000000000003c698c087141a2e2e76f882f78de55383cbd8f066001600160a01b0316826001600160a01b0316036114495760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610b22565b6114538282612501565b5050565b335f9081526001602090815260408083206001600160a01b0386168452909152812054828110156114d85760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610b22565b6114e53385858403611b15565b5060019392505050565b5f610a8c338484611c38565b6005546001600160a01b031633146115255760405162461bcd60e51b8152600401610b2290612da9565b6001600160a01b0382165f818152601c6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146115ad5760405162461bcd60e51b8152600401610b2290612da9565b601683905560178290556018819055806115c78385612e28565b6115d19190612e28565b601581905560631015610e8b5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323025206f72206c6573730000006044820152606401610b22565b6005546001600160a01b031633146116505760405162461bcd60e51b8152600401610b2290612da9565b670de0b6b3a76400006103e861166560025490565b611670906003612df2565b61167a9190612e09565b6116849190612e09565b8110156116e85760405162461bcd60e51b815260206004820152602c60248201527f43616e6e6f7420736574206d61782077616c6c657420616d6f756e74206c6f7760448201526b6572207468616e20302e332560a01b6064820152608401610b22565b6116fa81670de0b6b3a7640000612df2565b60088190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc90602001610c45565b6005546001600160a01b031633146117595760405162461bcd60e51b8152600401610b2290612da9565b620186a061176660025490565b611771906001612df2565b61177b9190612e09565b8110156117e85760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610b22565b6103e86117f460025490565b6117ff906001612df2565b6118099190612e09565b8111156118755760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171892903a37ba30b61039bab838363c9760611b6064820152608401610b22565b600a55565b6005546001600160a01b031633146118a45760405162461bcd60e51b8152600401610b2290612da9565b670de0b6b3a76400006103e86118b960025490565b6118c4906001612df2565b6118ce9190612e09565b6118d89190612e09565b81101561193a5760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015269207468616e20302e312560b01b6064820152608401610b22565b61194c81670de0b6b3a7640000612df2565b60078190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e90602001610c45565b6005546001600160a01b031633146119ab5760405162461bcd60e51b8152600401610b2290612da9565b6010805460ff19169055565b6005546001600160a01b031633146119e15760405162461bcd60e51b8152600401610b2290612da9565b6001600160a01b038116611a465760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b22565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314611acb5760405162461bcd60e51b8152600401610b2290612da9565b6040515f90339047908381818185875af1925050503d805f8114611b0a576040519150601f19603f3d011682016040523d82523d5f602084013e611b0f565b606091505b50505050565b6001600160a01b038316611b775760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b22565b6001600160a01b038216611bd85760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b22565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611c5e5760405162461bcd60e51b8152600401610b2290612e6d565b6001600160a01b038216611c845760405162461bcd60e51b8152600401610b2290612eb2565b5f8111611cd35760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610b22565b600e5460ff161561219a576005546001600160a01b03848116911614801590611d0a57506005546001600160a01b03838116911614155b8015611d1e57506001600160a01b03821615155b8015611d3557506001600160a01b03821661dead14155b1561219a57600e54610100900460ff16611dcb576001600160a01b0383165f908152601d602052604090205460ff1680611d8657506001600160a01b0382165f908152601d602052604090205460ff165b611dcb5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610b22565b60105460ff1615611f24577f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0316826001600160a01b031614158015611e4a57507f0000000000000000000000003c698c087141a2e2e76f882f78de55383cbd8f066001600160a01b0316826001600160a01b031614155b15611f2457611e5a600443612ef5565b325f908152600f6020526040902054108015611e965750611e7c600443612ef5565b6001600160a01b0383165f908152600f6020526040902054105b611f005760405162461bcd60e51b815260206004820152603560248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527432b21710102a393c9030b3b0b4b7103630ba32b91760591b6064820152608401610b22565b325f908152600f602052604080822043908190556001600160a01b03851683529120555b6001600160a01b0383165f908152601e602052604090205460ff168015611f6357506001600160a01b0382165f908152601d602052604090205460ff16155b1561203e57600654811115611fcb5760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610b22565b6008546001600160a01b0383165f90815260208190526040902054611ff09083612e28565b11156120395760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08115e18d95959081b585e081dd85b1b195d60421b6044820152606401610b22565b61219a565b6001600160a01b0382165f908152601e602052604090205460ff16801561207d57506001600160a01b0383165f908152601d602052604090205460ff16155b156120e7576007548111156120395760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610b22565b6001600160a01b0382165f908152601d602052604090205460ff1615801561212757506001600160a01b0383165f908152601d602052604090205460ff16155b1561219a576008546001600160a01b0383165f908152602081905260409020546121519083612e28565b111561219a5760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08115e18d95959081b585e081dd85b1b195d60421b6044820152606401610b22565b305f90815260208190526040902054600a54811080159081906121c55750600e5462010000900460ff165b80156121d4575060095460ff16155b80156121f857506001600160a01b0385165f908152601e602052604090205460ff16155b801561221c57506001600160a01b0385165f908152601c602052604090205460ff16155b801561224057506001600160a01b0384165f908152601c602052604090205460ff16155b15612265576009805460ff1916600117905561225a612569565b6009805460ff191690555b6001600160a01b0385165f908152601c602052604090205460019060ff16806122a557506001600160a01b0385165f908152601c602052604090205460ff165b156122ad57505f5b5f8082156124ec575f600d541180156122d3575043600d5460036122d19190612e28565b115b1561230f5760646122e5876063612df2565b6122ef9190612e09565b600b5490915061230a9089906001600160a01b031683612767565b6124c4565b6001600160a01b0387165f908152601e602052604090205460ff16801561233757505f601554115b156123ec5760646015548761234c9190612df2565b6123569190612e09565b9150601554601754836123699190612df2565b6123739190612e09565b601a5f8282546123839190612e28565b90915550506015546016546123989084612df2565b6123a29190612e09565b60195f8282546123b29190612e28565b90915550506015546018546123c79084612df2565b6123d19190612e09565b601b5f8282546123e19190612e28565b909155506124c49050565b6001600160a01b0388165f908152601e602052604090205460ff16801561241457505f601154115b156124c4576064601154876124299190612df2565b6124339190612e09565b9150601154601354836124469190612df2565b6124509190612e09565b601a5f8282546124609190612e28565b90915550506011546012546124759084612df2565b61247f9190612e09565b60195f82825461248f9190612e28565b90915550506011546014546124a49084612df2565b6124ae9190612e09565b601b5f8282546124be9190612e28565b90915550505b81156124d5576124d5883084612767565b6124df8183612e28565b6124e99087612ef5565b95505b6124f7888888612767565b5050505050505050565b6001600160a01b0382165f908152601e60205260409020805460ff191682151517905561252e82826128ba565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab905f90a35050565b305f9081526020819052604081205490505f601b54601954601a5461258e9190612e28565b6125989190612e28565b90508115806125a5575080155b156125ae575050565b600a80546125bb91612df2565b8211156125d257600a80546125cf91612df2565b91505b5f80600283601a54866125e59190612df2565b6125ef9190612e09565b6125f99190612e09565b905061260d6126088286612ef5565b61291c565b601a54479081905f9061262290600290612e09565b61262c9087612ef5565b6019546126399085612df2565b6126439190612e09565b90505f6002601a546126559190612e09565b61265f9088612ef5565b601b5461266c9086612df2565b6126769190612e09565b90506126828183612e28565b61268c9084612ef5565b5f601a8190556019819055601b55925084158015906126aa57505f83115b156126b9576126b98584612ad2565b600c546040516001600160a01b039091169082905f81818185875af1925050503d805f8114612703576040519150601f19603f3d011682016040523d82523d5f602084013e612708565b606091505b5050600b546040519197506001600160a01b03169047905f81818185875af1925050503d805f8114612755576040519150601f19603f3d011682016040523d82523d5f602084013e61275a565b606091505b5050505050505050505050565b6001600160a01b03831661278d5760405162461bcd60e51b8152600401610b2290612e6d565b6001600160a01b0382166127b35760405162461bcd60e51b8152600401610b2290612eb2565b6001600160a01b0383165f908152602081905260409020548181101561282a5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610b22565b6001600160a01b038085165f90815260208190526040808220858503905591851681529081208054849290612860908490612e28565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516128ac91815260200190565b60405180910390a350505050565b6001600160a01b0382165f818152601d6020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6040805160028082526060820183525f9260208301908036833701905050905030815f8151811061294f5761294f612f08565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156129cb573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906129ef9190612f1c565b81600181518110612a0257612a02612f08565b60200260200101906001600160a01b031690816001600160a01b031681525050612a4d307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611b15565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac94790612aa19085905f90869030904290600401612f37565b5f604051808303815f87803b158015612ab8575f80fd5b505af1158015612aca573d5f803e3d5ffd5b505050505050565b612afd307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611b15565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663f305d7198230855f80612b436005546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015612ba9573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190612bce9190612fa6565b5050505050565b5f6020808352835180828501525f5b81811015612c0057858101830151858201604001528201612be4565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114612c34575f80fd5b50565b5f8060408385031215612c48575f80fd5b8235612c5381612c20565b946020939093013593505050565b5f60208284031215612c71575f80fd5b8135612c7c81612c20565b9392505050565b5f805f60608486031215612c95575f80fd5b8335612ca081612c20565b92506020840135612cb081612c20565b929592945050506040919091013590565b5f60208284031215612cd1575f80fd5b5035919050565b8015158114612c34575f80fd5b5f8060408385031215612cf6575f80fd5b8235612d0181612c20565b91506020830135612d1181612cd8565b809150509250929050565b5f805f60608486031215612d2e575f80fd5b505081359360208301359350604090920135919050565b5f8060408385031215612d56575f80fd5b8235612d6181612c20565b91506020830135612d1181612c20565b600181811c90821680612d8557607f821691505b602082108103612da357634e487b7160e01b5f52602260045260245ffd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b8082028115828204841417610a9057610a90612dde565b5f82612e2357634e487b7160e01b5f52601260045260245ffd5b500490565b80820180821115610a9057610a90612dde565b5f60208284031215612e4b575f80fd5b5051919050565b5f60208284031215612e62575f80fd5b8151612c7c81612cd8565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610a9057610a90612dde565b634e487b7160e01b5f52603260045260245ffd5b5f60208284031215612f2c575f80fd5b8151612c7c81612c20565b5f60a082018783526020878185015260a0604085015281875180845260c08601915082890193505f5b81811015612f855784516001600160a01b031683529383019391830191600101612f60565b50506001600160a01b03969096166060850152505050608001529392505050565b5f805f60608486031215612fb8575f80fd5b835192506020840151915060408401519050925092509256fea26469706673582212201493fac46f2c559774024de89ebcb48178e8600e4f6847ebf91ce429bd825c2564736f6c63430008150033

Deployed Bytecode Sourcemap

10544:16215:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5262:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6176:169;;;;;;;;;;-1:-1:-1;6176:169:0;;;;;:::i;:::-;;:::i;:::-;;;1188:14:1;;1181:22;1163:41;;1151:2;1136:18;6176:169:0;1023:187:1;11921:64:0;;;;;;;;;;-1:-1:-1;11921:64:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;10698:43;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1649:32:1;;;1631:51;;1619:2;1604:18;10698:43:0;1467:221:1;5583:108:0;;;;;;;;;;-1:-1:-1;5671:12:0;;5583:108;;;1839:25:1;;;1827:2;1812:18;5583:108:0;1693:177:1;11700:33:0;;;;;;;;;;;;;;;;11660;;;;;;;;;;;;;;;;6353:480;;;;;;;;;;-1:-1:-1;6353:480:0;;;;;:::i;:::-;;:::i;15436:269::-;;;;;;;;;;-1:-1:-1;15436:269:0;;;;;:::i;:::-;;:::i;:::-;;5482:93;;;;;;;;;;-1:-1:-1;5482:93:0;;5565:2;2663:36:1;;2651:2;2636:18;5482:93:0;2521:184:1;6841:215:0;;;;;;;;;;-1:-1:-1;6841:215:0;;;;;:::i;:::-;;:::i;10748:38::-;;;;;;;;;;;;;;;11020:33;;;;;;;;;;-1:-1:-1;11020:33:0;;;;;;;;11622:29;;;;;;;;;;;;;;;;10624:28;;;;;;;;;;;;;;;;11511;;;;;;;;;;;;;;;;11100:31;;;;;;;;;;-1:-1:-1;11100:31:0;;;;;;;;;;;5699:127;;;;;;;;;;-1:-1:-1;5699:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;5800:18:0;5773:7;5800:18;;;;;;;;;;;;5699:127;9303:150;;;;;;;;;;;;;:::i;16924:267::-;;;;;;;;;;-1:-1:-1;16924:267:0;;;;;:::i;:::-;;:::i;11474:28::-;;;;;;;;;;;;;;;;11400:30;;;;;;;;;;;;;;;;17701:385;;;;;;;;;;-1:-1:-1;17701:385:0;;;;;:::i;:::-;;:::i;25492:456::-;;;;;;;;;;-1:-1:-1;25492:456:0;;;;;:::i;:::-;;:::i;10590:27::-;;;;;;;;;;;;;;;;26483:273;;;;;;;;;;-1:-1:-1;26483:273:0;;;;;:::i;:::-;;:::i;14810:250::-;;;;;;;;;;;;;:::i;9089:79::-;;;;;;;;;;-1:-1:-1;9154:6:0;;-1:-1:-1;;;;;9154:6:0;9089:79;;26186:289;;;;;;;;;;-1:-1:-1;26186:289:0;;;;;:::i;:::-;;:::i;11546:31::-;;;;;;;;;;;;;;;;15112:154;;;;;;;;;;;;;:::i;5370:104::-;;;;;;;;;;;;;:::i;17199:246::-;;;;;;;;;;-1:-1:-1;17199:246:0;;;;;:::i;:::-;;:::i;7064:401::-;;;;;;;;;;-1:-1:-1;7064:401:0;;;;;:::i;:::-;;:::i;10865:31::-;;;;;;;;;;-1:-1:-1;10865:31:0;;;;-1:-1:-1;;;;;10865:31:0;;;5834:175;;;;;;;;;;-1:-1:-1;5834:175:0;;;;;:::i;:::-;;:::i;10659:30::-;;;;;;;;;;;;;;;;12143:58;;;;;;;;;;-1:-1:-1;12143:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;11060:33;;;;;;;;;;-1:-1:-1;11060:33:0;;;;;;;;;;;18496:182;;;;;;;;;;-1:-1:-1;18496:182:0;;;;;:::i;:::-;;:::i;10903:29::-;;;;;;;;;;-1:-1:-1;10903:29:0;;;;-1:-1:-1;;;;;10903:29:0;;;18094:394;;;;;;;;;;-1:-1:-1;18094:394:0;;;;;:::i;:::-;;:::i;15995:284::-;;;;;;;;;;-1:-1:-1;15995:284:0;;;;;:::i;:::-;;:::i;11318:39::-;;;;;;;;;;-1:-1:-1;11318:39:0;;;;;;;;16349:350;;;;;;;;;;-1:-1:-1;16349:350:0;;;;;:::i;:::-;;:::i;11366:27::-;;;;;;;;;;;;;;;;15713:274;;;;;;;;;;-1:-1:-1;15713:274:0;;;;;:::i;:::-;;:::i;6017:151::-;;;;;;;;;;-1:-1:-1;6017:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;6133:18:0;;;6106:7;6133:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;6017:151;10823:33;;;;;;;;;;;;;;;;15330:98;;;;;;;;;;;;;:::i;10941:37::-;;;;;;;;;;;;;;;;11437:30;;;;;;;;;;;;;;;;9461:244;;;;;;;;;;-1:-1:-1;9461:244:0;;;;;:::i;:::-;;:::i;11740:31::-;;;;;;;;;;;;;;;;26018:160;;;;;;;;;;;;;:::i;11584:31::-;;;;;;;;;;;;;;;;5262:100;5316:13;5349:5;5342:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5262:100;:::o;6176:169::-;6259:4;6276:39;1491:10;6299:7;6308:6;6276:8;:39::i;:::-;-1:-1:-1;6333:4:0;6176:169;;;;;:::o;6353:480::-;6493:4;6510:36;6520:6;6528:9;6539:6;6510:9;:36::i;:::-;-1:-1:-1;;;;;6586:19:0;;6559:24;6586:19;;;:11;:19;;;;;;;;1491:10;6586:33;;;;;;;;6638:26;;;;6630:79;;;;-1:-1:-1;;;6630:79:0;;4729:2:1;6630:79:0;;;4711:21:1;4768:2;4748:18;;;4741:30;4807:34;4787:18;;;4780:62;-1:-1:-1;;;4858:18:1;;;4851:38;4906:19;;6630:79:0;;;;;;;;;6737:57;6746:6;1491:10;6787:6;6768:16;:25;6737:8;:57::i;:::-;-1:-1:-1;6821:4:0;;6353:480;-1:-1:-1;;;;6353:480:0:o;15436:269::-;9216:6;;-1:-1:-1;;;;;9216:6:0;1491:10;9216:22;9208:67;;;;-1:-1:-1;;;9208:67:0;;;;;;;:::i;:::-;15555:4:::1;15549;15529:13;5671:12:::0;;;5583:108;15529:13:::1;:17;::::0;15545:1:::1;15529:17;:::i;:::-;:24;;;;:::i;:::-;15528:31;;;;:::i;:::-;15518:6;:41;;15510:95;;;::::0;-1:-1:-1;;;15510:95:0;;6026:2:1;15510:95:0::1;::::0;::::1;6008:21:1::0;6065:2;6045:18;;;6038:30;6104:34;6084:18;;;6077:62;-1:-1:-1;;;6155:18:1;;;6148:39;6204:19;;15510:95:0::1;5824:405:1::0;15510:95:0::1;15631:17;:6:::0;15641::::1;15631:17;:::i;:::-;15616:12;:32:::0;;;15664:33:::1;::::0;1839:25:1;;;15664:33:0::1;::::0;1827:2:1;1812:18;15664:33:0::1;;;;;;;;15436:269:::0;:::o;6841:215::-;1491:10;6929:4;6978:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;6978:34:0;;;;;;;;;;6929:4;;6946:80;;6969:7;;6978:47;;7015:10;;6978:47;:::i;:::-;6946:8;:80::i;9303:150::-;9216:6;;-1:-1:-1;;;;;9216:6:0;1491:10;9216:22;9208:67;;;;-1:-1:-1;;;9208:67:0;;;;;;;:::i;:::-;9396:6:::1;::::0;9375:40:::1;::::0;9412:1:::1;::::0;-1:-1:-1;;;;;9396:6:0::1;::::0;9375:40:::1;::::0;9412:1;;9375:40:::1;9426:6;:19:::0;;-1:-1:-1;;;;;;9426:19:0::1;::::0;;9303:150::o;16924:267::-;9216:6;;-1:-1:-1;;;;;9216:6:0;1491:10;9216:22;9208:67;;;;-1:-1:-1;;;9208:67:0;;;;;;;:::i;:::-;17020:4:::1;17016:111;;17058:13;-1:-1:-1::0;;;;;17048:23:0::1;:6;-1:-1:-1::0;;;;;17048:23:0::1;::::0;17040:75:::1;;;::::0;-1:-1:-1;;;17040:75:0;;6566:2:1;17040:75:0::1;::::0;::::1;6548:21:1::0;6605:2;6585:18;;;6578:30;6644:34;6624:18;;;6617:62;-1:-1:-1;;;6695:18:1;;;6688:37;6742:19;;17040:75:0::1;6364:403:1::0;17040:75:0::1;-1:-1:-1::0;;;;;17137:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;17137:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;16924:267::o;17701:385::-;9216:6;;-1:-1:-1;;;;;9216:6:0;1491:10;9216:22;9208:67;;;;-1:-1:-1;;;9208:67:0;;;;;;;:::i;:::-;17821:15:::1;:31:::0;;;17863:15:::1;:31:::0;;;17905:13:::1;:27:::0;;;17921:11;17958:33:::1;17881:13:::0;17839;17958:33:::1;:::i;:::-;:49;;;;:::i;:::-;17943:12;:64:::0;;;18042:2:::1;-1:-1:-1::0;18026:18:0::1;18018:60;;;::::0;-1:-1:-1;;;18018:60:0;;6974:2:1;18018:60:0::1;::::0;::::1;6956:21:1::0;7013:2;6993:18;;;6986:30;7052:31;7032:18;;;7025:59;7101:18;;18018:60:0::1;6772:353:1::0;18018:60:0::1;17701:385:::0;;;:::o;25492:456::-;9216:6;;25579:10;;-1:-1:-1;;;;;9216:6:0;1491:10;9216:22;9208:67;;;;-1:-1:-1;;;9208:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25610:20:0;::::1;25602:59;;;::::0;-1:-1:-1;;;25602:59:0;;7332:2:1;25602:59:0::1;::::0;::::1;7314:21:1::0;7371:2;7351:18;;;7344:30;7410:28;7390:18;;;7383:56;7456:18;;25602:59:0::1;7130:350:1::0;25602:59:0::1;25698:4;-1:-1:-1::0;;;;;25680:23:0;::::1;::::0;25672:64:::1;;;::::0;-1:-1:-1;;;25672:64:0;;7687:2:1;25672:64:0::1;::::0;::::1;7669:21:1::0;7726:2;7706:18;;;7699:30;7765;7745:18;;;7738:58;7813:18;;25672:64:0::1;7485:352:1::0;25672:64:0::1;25774:39;::::0;-1:-1:-1;;;25774:39:0;;25807:4:::1;25774:39;::::0;::::1;1631:51:1::0;25747:24:0::1;::::0;-1:-1:-1;;;;;25774:24:0;::::1;::::0;::::1;::::0;1604:18:1;;25774:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25832:46;::::0;-1:-1:-1;;;25832:46:0;;-1:-1:-1;;;;;8223:32:1;;;25832:46:0::1;::::0;::::1;8205:51:1::0;8272:18;;;8265:34;;;25747:66:0;;-1:-1:-1;25832:23:0;;::::1;::::0;::::1;::::0;8178:18:1;;25832:46:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25894;::::0;;-1:-1:-1;;;;;8223:32:1;;8205:51;;8287:2;8272:18;;8265:34;;;25824:54:0;;-1:-1:-1;25894:46:0::1;::::0;8178:18:1;25894:46:0::1;;;;;;;25591:357;25492:456:::0;;;;:::o;26483:273::-;9216:6;;-1:-1:-1;;;;;9216:6:0;1491:10;9216:22;9208:67;;;;-1:-1:-1;;;9208:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26573:29:0;::::1;26565:77;;;::::0;-1:-1:-1;;;26565:77:0;;8762:2:1;26565:77:0::1;::::0;::::1;8744:21:1::0;8801:2;8781:18;;;8774:30;8840:34;8820:18;;;8813:62;-1:-1:-1;;;8891:18:1;;;8884:33;8934:19;;26565:77:0::1;8560:399:1::0;26565:77:0::1;26653:14;:41:::0;;-1:-1:-1;;;;;;26653:41:0::1;-1:-1:-1::0;;;;;26653:41:0;::::1;::::0;;::::1;::::0;;;26710:38:::1;::::0;::::1;::::0;-1:-1:-1;;26710:38:0::1;26483:273:::0;:::o;14810:250::-;9216:6;;-1:-1:-1;;;;;9216:6:0;1491:10;9216:22;9208:67;;;;-1:-1:-1;;;9208:67:0;;;;;;;:::i;:::-;14874:13:::1;::::0;::::1;::::0;::::1;;;14873:14;14865:51;;;::::0;-1:-1:-1;;;14865:51:0;;9166:2:1;14865:51:0::1;::::0;::::1;9148:21:1::0;9205:2;9185:18;;;9178:30;9244:26;9224:18;;;9217:54;9288:18;;14865:51:0::1;8964:348:1::0;14865:51:0::1;14927:13;:20:::0;;-1:-1:-1;;14958:18:0;;;;;15008:12:::1;14987:18;:33:::0;15036:16:::1;::::0;::::1;::::0;-1:-1:-1;;15036:16:0::1;14810:250::o:0;26186:289::-;9216:6;;-1:-1:-1;;;;;9216:6:0;1491:10;9216:22;9208:67;;;;-1:-1:-1;;;9208:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26280:31:0;::::1;26272:81;;;::::0;-1:-1:-1;;;26272:81:0;;9519:2:1;26272:81:0::1;::::0;::::1;9501:21:1::0;9558:2;9538:18;;;9531:30;9597:34;9577:18;;;9570:62;-1:-1:-1;;;9648:18:1;;;9641:35;9693:19;;26272:81:0::1;9317:401:1::0;26272:81:0::1;26364:16;:45:::0;;-1:-1:-1;;;;;;26364:45:0::1;-1:-1:-1::0;;;;;26364:45:0;::::1;::::0;;::::1;::::0;;;26425:42:::1;::::0;::::1;::::0;-1:-1:-1;;26425:42:0::1;26186:289:::0;:::o;15112:154::-;9216:6;;-1:-1:-1;;;;;9216:6:0;1491:10;9216:22;9208:67;;;;-1:-1:-1;;;9208:67:0;;;;;;;:::i;:::-;15166:14:::1;:22:::0;;-1:-1:-1;;15166:22:0;;::::1;::::0;;;15199:20:::1;:28:::0;;;;::::1;::::0;;15243:15:::1;::::0;::::1;::::0;15183:5:::1;::::0;15243:15:::1;15112:154::o:0;5370:104::-;5426:13;5459:7;5452:14;;;;;:::i;17199:246::-;9216:6;;-1:-1:-1;;;;;9216:6:0;1491:10;9216:22;9208:67;;;;-1:-1:-1;;;9208:67:0;;;;;;;:::i;:::-;17308:13:::1;-1:-1:-1::0;;;;;17300:21:0::1;:4;-1:-1:-1::0;;;;;17300:21:0::1;::::0;17292:91:::1;;;::::0;-1:-1:-1;;;17292:91:0;;9925:2:1;17292:91:0::1;::::0;::::1;9907:21:1::0;9964:2;9944:18;;;9937:30;10003:34;9983:18;;;9976:62;10074:27;10054:18;;;10047:55;10119:19;;17292:91:0::1;9723:421:1::0;17292:91:0::1;17396:41;17425:4;17431:5;17396:28;:41::i;:::-;17199:246:::0;;:::o;7064:401::-;1491:10;7157:4;7201:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;7201:34:0;;;;;;;;;;7254:35;;;;7246:85;;;;-1:-1:-1;;;7246:85:0;;10351:2:1;7246:85:0;;;10333:21:1;10390:2;10370:18;;;10363:30;10429:34;10409:18;;;10402:62;-1:-1:-1;;;10480:18:1;;;10473:35;10525:19;;7246:85:0;10149:401:1;7246:85:0;7359:67;1491:10;7382:7;7410:15;7391:16;:34;7359:8;:67::i;:::-;-1:-1:-1;7453:4:0;;7064:401;-1:-1:-1;;;7064:401:0:o;5834:175::-;5920:4;5937:42;1491:10;5961:9;5972:6;5937:9;:42::i;18496:182::-;9216:6;;-1:-1:-1;;;;;9216:6:0;1491:10;9216:22;9208:67;;;;-1:-1:-1;;;9208:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18581:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;18581:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;18636:34;;1163:41:1;;;18636:34:0::1;::::0;1136:18:1;18636:34:0::1;;;;;;;18496:182:::0;;:::o;18094:394::-;9216:6;;-1:-1:-1;;;;;9216:6:0;1491:10;9216:22;9208:67;;;;-1:-1:-1;;;9208:67:0;;;;;;;:::i;:::-;18215:16:::1;:32:::0;;;18258:16:::1;:32:::0;;;18301:14:::1;:28:::0;;;18318:11;18356:35:::1;18277:13:::0;18234;18356:35:::1;:::i;:::-;:52;;;;:::i;:::-;18340:13;:68:::0;;;18444:2:::1;-1:-1:-1::0;18427:19:0::1;18419:61;;;::::0;-1:-1:-1;;;18419:61:0;;10757:2:1;18419:61:0::1;::::0;::::1;10739:21:1::0;10796:2;10776:18;;;10769:30;10835:31;10815:18;;;10808:59;10884:18;;18419:61:0::1;10555:353:1::0;15995:284:0;9216:6;;-1:-1:-1;;;;;9216:6:0;1491:10;9216:22;9208:67;;;;-1:-1:-1;;;9208:67:0;;;;;;;:::i;:::-;16117:4:::1;16111;16091:13;5671:12:::0;;;5583:108;16091:13:::1;:17;::::0;16107:1:::1;16091:17;:::i;:::-;:24;;;;:::i;:::-;16090:31;;;;:::i;:::-;16080:6;:41;;16072:98;;;::::0;-1:-1:-1;;;16072:98:0;;11115:2:1;16072:98:0::1;::::0;::::1;11097:21:1::0;11154:2;11134:18;;;11127:30;11193:34;11173:18;;;11166:62;-1:-1:-1;;;11244:18:1;;;11237:42;11296:19;;16072:98:0::1;10913:408:1::0;16072:98:0::1;16199:17;:6:::0;16209::::1;16199:17;:::i;:::-;16181:15;:35:::0;;;16232:39:::1;::::0;1839:25:1;;;16232:39:0::1;::::0;1827:2:1;1812:18;16232:39:0::1;1693:177:1::0;16349:350:0;9216:6;;-1:-1:-1;;;;;9216:6:0;1491:10;9216:22;9208:67;;;;-1:-1:-1;;;9208:67:0;;;;;;;:::i;:::-;16473:6:::1;16453:13;5671:12:::0;;;5583:108;16453:13:::1;:17;::::0;16469:1:::1;16453:17;:::i;:::-;:26;;;;:::i;:::-;16440:9;:39;;16432:105;;;::::0;-1:-1:-1;;;16432:105:0;;11528:2:1;16432:105:0::1;::::0;::::1;11510:21:1::0;11567:2;11547:18;;;11540:30;11606:34;11586:18;;;11579:62;-1:-1:-1;;;11657:18:1;;;11650:51;11718:19;;16432:105:0::1;11326:417:1::0;16432:105:0::1;16589:4;16569:13;5671:12:::0;;;5583:108;16569:13:::1;:17;::::0;16585:1:::1;16569:17;:::i;:::-;:24;;;;:::i;:::-;16556:9;:37;;16548:102;;;::::0;-1:-1:-1;;;16548:102:0;;11950:2:1;16548:102:0::1;::::0;::::1;11932:21:1::0;11989:2;11969:18;;;11962:30;12028:34;12008:18;;;12001:62;-1:-1:-1;;;12079:18:1;;;12072:50;12139:19;;16548:102:0::1;11748:416:1::0;16548:102:0::1;16661:18;:30:::0;16349:350::o;15713:274::-;9216:6;;-1:-1:-1;;;;;9216:6:0;1491:10;9216:22;9208:67;;;;-1:-1:-1;;;9208:67:0;;;;;;;:::i;:::-;15833:4:::1;15827;15807:13;5671:12:::0;;;5583:108;15807:13:::1;:17;::::0;15823:1:::1;15807:17;:::i;:::-;:24;;;;:::i;:::-;15806:31;;;;:::i;:::-;15796:6;:41;;15788:96;;;::::0;-1:-1:-1;;;15788:96:0;;12371:2:1;15788:96:0::1;::::0;::::1;12353:21:1::0;12410:2;12390:18;;;12383:30;12449:34;12429:18;;;12422:62;-1:-1:-1;;;12500:18:1;;;12493:40;12550:19;;15788:96:0::1;12169:406:1::0;15788:96:0::1;15911:17;:6:::0;15921::::1;15911:17;:::i;:::-;15895:13;:33:::0;;;15944:35:::1;::::0;1839:25:1;;;15944:35:0::1;::::0;1827:2:1;1812:18;15944:35:0::1;1693:177:1::0;15330:98:0;9216:6;;-1:-1:-1;;;;;9216:6:0;1491:10;9216:22;9208:67;;;;-1:-1:-1;;;9208:67:0;;;;;;;:::i;:::-;15392:20:::1;:28:::0;;-1:-1:-1;;15392:28:0::1;::::0;;15330:98::o;9461:244::-;9216:6;;-1:-1:-1;;;;;9216:6:0;1491:10;9216:22;9208:67;;;;-1:-1:-1;;;9208:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;9550:22:0;::::1;9542:73;;;::::0;-1:-1:-1;;;9542:73:0;;12782:2:1;9542:73:0::1;::::0;::::1;12764:21:1::0;12821:2;12801:18;;;12794:30;12860:34;12840:18;;;12833:62;-1:-1:-1;;;12911:18:1;;;12904:36;12957:19;;9542:73:0::1;12580:402:1::0;9542:73:0::1;9652:6;::::0;9631:38:::1;::::0;-1:-1:-1;;;;;9631:38:0;;::::1;::::0;9652:6:::1;::::0;9631:38:::1;::::0;9652:6:::1;::::0;9631:38:::1;9680:6;:17:::0;;-1:-1:-1;;;;;;9680:17:0::1;-1:-1:-1::0;;;;;9680:17:0;;;::::1;::::0;;;::::1;::::0;;9461:244::o;26018:160::-;9216:6;;-1:-1:-1;;;;;9216:6:0;1491:10;9216:22;9208:67;;;;-1:-1:-1;;;9208:67:0;;;;;;;:::i;:::-;26112:58:::1;::::0;26076:12:::1;::::0;26120:10:::1;::::0;26144:21:::1;::::0;26076:12;26112:58;26076:12;26112:58;26144:21;26120:10;26112:58:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;26018:160:0:o;8382:380::-;-1:-1:-1;;;;;8518:19:0;;8510:68;;;;-1:-1:-1;;;8510:68:0;;13399:2:1;8510:68:0;;;13381:21:1;13438:2;13418:18;;;13411:30;13477:34;13457:18;;;13450:62;-1:-1:-1;;;13528:18:1;;;13521:34;13572:19;;8510:68:0;13197:400:1;8510:68:0;-1:-1:-1;;;;;8597:21:0;;8589:68;;;;-1:-1:-1;;;8589:68:0;;13804:2:1;8589:68:0;;;13786:21:1;13843:2;13823:18;;;13816:30;13882:34;13862:18;;;13855:62;-1:-1:-1;;;13933:18:1;;;13926:32;13975:19;;8589:68:0;13602:398:1;8589:68:0;-1:-1:-1;;;;;8670:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;8722:32;;1839:25:1;;;8722:32:0;;1812:18:1;8722:32:0;;;;;;;8382:380;;;:::o;18686:4240::-;-1:-1:-1;;;;;18786:18:0;;18778:68;;;;-1:-1:-1;;;18778:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18865:16:0;;18857:64;;;;-1:-1:-1;;;18857:64:0;;;;;;;:::i;:::-;18949:1;18940:6;:10;18932:52;;;;-1:-1:-1;;;18932:52:0;;15017:2:1;18932:52:0;;;14999:21:1;15056:2;15036:18;;;15029:30;15095:31;15075:18;;;15068:59;15144:18;;18932:52:0;14815:353:1;18932:52:0;19002:14;;;;18999:1824;;;9154:6;;-1:-1:-1;;;;;19036:15:0;;;9154:6;;19036:15;;;;:32;;-1:-1:-1;9154:6:0;;-1:-1:-1;;;;;19055:13:0;;;9154:6;;19055:13;;19036:32;:52;;;;-1:-1:-1;;;;;;19072:16:0;;;;19036:52;:77;;;;-1:-1:-1;;;;;;19092:21:0;;19106:6;19092:21;;19036:77;19032:1780;;;19137:13;;;;;;;19133:172;;-1:-1:-1;;;;;19182:37:0;;;;;;:31;:37;;;;;;;;;:76;;-1:-1:-1;;;;;;19223:35:0;;;;;;:31;:35;;;;;;;;19182:76;19174:111;;;;-1:-1:-1;;;19174:111:0;;15375:2:1;19174:111:0;;;15357:21:1;15414:2;15394:18;;;15387:30;-1:-1:-1;;;15433:18:1;;;15426:52;15495:18;;19174:111:0;15173:346:1;19174:111:0;19461:20;;;;19457:519;;;19523:15;-1:-1:-1;;;;;19509:30:0;:2;-1:-1:-1;;;;;19509:30:0;;;:62;;;;;19557:13;-1:-1:-1;;;;;19543:28:0;:2;-1:-1:-1;;;;;19543:28:0;;;19509:62;19505:452;;;19649:16;19664:1;19649:12;:16;:::i;:::-;19636:9;19607:39;;;;:28;:39;;;;;;:58;:113;;;;-1:-1:-1;19704:16:0;19719:1;19704:12;:16;:::i;:::-;-1:-1:-1;;;;;19669:32:0;;;;;;:28;:32;;;;;;:51;19607:113;19599:179;;;;-1:-1:-1;;;19599:179:0;;15859:2:1;19599:179:0;;;15841:21:1;15898:2;15878:18;;;15871:30;15937:34;15917:18;;;15910:62;-1:-1:-1;;;15988:18:1;;;15981:51;16049:19;;19599:179:0;15657:417:1;19599:179:0;19834:9;19805:39;;;;:28;:39;;;;;;19847:12;19805:54;;;;-1:-1:-1;;;;;19886:32:0;;;;;;:47;19505:452;-1:-1:-1;;;;;20028:31:0;;;;;;:25;:31;;;;;;;;:71;;;;-1:-1:-1;;;;;;20064:35:0;;;;;;:31;:35;;;;;;;;20063:36;20028:71;20024:773;;;20142:12;;20132:6;:22;;20124:75;;;;-1:-1:-1;;;20124:75:0;;16281:2:1;20124:75:0;;;16263:21:1;16320:2;16300:18;;;16293:30;16359:34;16339:18;;;16332:62;-1:-1:-1;;;16410:18:1;;;16403:38;16458:19;;20124:75:0;16079:404:1;20124:75:0;20256:15;;-1:-1:-1;;;;;5800:18:0;;5773:7;5800:18;;;;;;;;;;;20230:22;;:6;:22;:::i;:::-;:41;;20222:78;;;;-1:-1:-1;;;20222:78:0;;16690:2:1;20222:78:0;;;16672:21:1;16729:2;16709:18;;;16702:30;-1:-1:-1;;;16748:18:1;;;16741:54;16812:18;;20222:78:0;16488:348:1;20222:78:0;20024:773;;;-1:-1:-1;;;;;20376:29:0;;;;;;:25;:29;;;;;;;;:71;;;;-1:-1:-1;;;;;;20410:37:0;;;;;;:31;:37;;;;;;;;20409:38;20376:71;20372:425;;;20490:13;;20480:6;:23;;20472:78;;;;-1:-1:-1;;;20472:78:0;;17043:2:1;20472:78:0;;;17025:21:1;17082:2;17062:18;;;17055:30;17121:34;17101:18;;;17094:62;-1:-1:-1;;;17172:18:1;;;17165:40;17222:19;;20472:78:0;16841:406:1;20372:425:0;-1:-1:-1;;;;;20598:35:0;;;;;;:31;:35;;;;;;;;20597:36;:78;;;;-1:-1:-1;;;;;;20638:37:0;;;;;;:31;:37;;;;;;;;20637:38;20597:78;20593:204;;;20733:15;;-1:-1:-1;;;;;5800:18:0;;5773:7;5800:18;;;;;;;;;;;20707:22;;:6;:22;:::i;:::-;:41;;20699:78;;;;-1:-1:-1;;;20699:78:0;;16690:2:1;20699:78:0;;;16672:21:1;16729:2;16709:18;;;16702:30;-1:-1:-1;;;16748:18:1;;;16741:54;16812:18;;20699:78:0;16488:348:1;20699:78:0;20884:4;20835:28;5800:18;;;;;;;;;;;20942;;20918:42;;;;;;;20976:22;;-1:-1:-1;20987:11:0;;;;;;;20976:22;:35;;;;-1:-1:-1;21003:8:0;;;;21002:9;20976:35;:71;;;;-1:-1:-1;;;;;;21016:31:0;;;;;;:25;:31;;;;;;;;21015:32;20976:71;:101;;;;-1:-1:-1;;;;;;21052:25:0;;;;;;:19;:25;;;;;;;;21051:26;20976:101;:129;;;;-1:-1:-1;;;;;;21082:23:0;;;;;;:19;:23;;;;;;;;21081:24;20976:129;20973:236;;;21122:8;:15;;-1:-1:-1;;21122:15:0;21133:4;21122:15;;;21154:10;:8;:10::i;:::-;21181:8;:16;;-1:-1:-1;;21181:16:0;;;20973:236;-1:-1:-1;;;;;21339:25:0;;21221:12;21339:25;;;:19;:25;;;;;;21236:4;;21339:25;;;:52;;-1:-1:-1;;;;;;21368:23:0;;;;;;:19;:23;;;;;;;;21339:52;21336:99;;;-1:-1:-1;21418:5:0;21336:99;21447:12;21474:21;21577:7;21574:1299;;;21724:1;21705:18;;:20;:63;;;;;21756:12;21730:18;;21751:1;21730:22;;;;:::i;:::-;21729:39;21705:63;21702:1008;;;21818:3;21804:11;:6;21813:2;21804:11;:::i;:::-;:17;;;;:::i;:::-;21862:16;;21788:33;;-1:-1:-1;21840:54:0;;21856:4;;-1:-1:-1;;;;;21862:16:0;21788:33;21840:15;:54::i;:::-;21702:1008;;;-1:-1:-1;;;;;21957:29:0;;;;;;:25;:29;;;;;;;;:50;;;;;22006:1;21990:13;;:17;21957:50;21953:757;;;22058:3;22043:13;;22034:6;:22;;;;:::i;:::-;:27;;;;:::i;:::-;22027:34;;22128:13;;22109:16;;22102:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;22080:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;22208:13:0;;22189:16;;22182:23;;:4;:23;:::i;:::-;:39;;;;:::i;:::-;22160:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;22284:13:0;;22267:14;;22260:21;;:4;:21;:::i;:::-;:37;;;;:::i;:::-;22240:16;;:57;;;;;;;:::i;:::-;;;;-1:-1:-1;21953:757:0;;-1:-1:-1;21953:757:0;;-1:-1:-1;;;;;22358:31:0;;;;;;:25;:31;;;;;;;;:51;;;;;22408:1;22393:12;;:16;22358:51;22355:355;;;22461:3;22446:12;;22437:6;:21;;;;:::i;:::-;:27;;;;:::i;:::-;22430:34;;22530:12;;22512:15;;22505:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;22483:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;22608:12:0;;22590:15;;22583:22;;:4;:22;:::i;:::-;:37;;;;:::i;:::-;22561:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;22682:12:0;;22666:13;;22659:20;;:4;:20;:::i;:::-;:35;;;;:::i;:::-;22639:16;;:55;;;;;;;:::i;:::-;;;;-1:-1:-1;;22355:355:0;22729:8;;22726:89;;22757:42;22773:4;22787;22794;22757:15;:42::i;:::-;22841:20;22848:13;22841:4;:20;:::i;:::-;22831:30;;;;:::i;:::-;;;21574:1299;22885:33;22901:4;22907:2;22911:6;22885:15;:33::i;:::-;18765:4161;;;;;18686:4240;;;:::o;17453:240::-;-1:-1:-1;;;;;17536:31:0;;;;;;:25;:31;;;;;:39;;-1:-1:-1;;17536:39:0;;;;;;;17588;17536:31;:39;17588:26;:39::i;:::-;17645:40;;;;;;-1:-1:-1;;;;;17645:40:0;;;;;;;;17453:240;;:::o;24063:1421::-;24146:4;24102:23;5800:18;;;;;;;;;;;24102:50;;24163:25;24233:16;;24212:18;;24191;;:39;;;;:::i;:::-;:58;;;;:::i;:::-;24163:86;-1:-1:-1;24265:20:0;;;:46;;-1:-1:-1;24289:22:0;;24265:46;24262:60;;;24314:7;;24063:1421::o;24262:60::-;24355:18;;;:23;;;:::i;:::-;24337:15;:41;24334:113;;;24412:18;;;:23;;;:::i;:::-;24394:41;;24334:113;24459:12;24533:23;24618:1;24598:17;24577:18;;24559:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;24533:86;-1:-1:-1;24632:51:0;24649:33;24533:86;24649:15;:33;:::i;:::-;24632:16;:51::i;:::-;24880:18;;24717:21;;;;24696:18;;24880:20;;24899:1;;24880:20;:::i;:::-;24859:42;;:17;:42;:::i;:::-;24837:18;;24824:31;;:10;:31;:::i;:::-;:78;;;;:::i;:::-;24798:104;;24913:21;25010:1;24991:18;;:20;;;;:::i;:::-;24970:42;;:17;:42;:::i;:::-;24950:16;;24937:29;;:10;:29;:::i;:::-;:76;;;;:::i;:::-;24913:100;-1:-1:-1;25045:31:0;24913:100;25045:15;:31;:::i;:::-;25026:50;;;;:::i;:::-;25110:1;25089:18;:22;;;25122:18;:22;;;25155:16;:20;25026:50;-1:-1:-1;25191:19:0;;;;;:42;;;25232:1;25214:15;:19;25191:42;25188:119;;;25249:46;25262:15;25279;25249:12;:46::i;:::-;25340:14;;25332:54;;-1:-1:-1;;;;;25340:14:0;;;;25368:13;;25332:54;;;;25368:13;25340:14;25332:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;25420:16:0;;25412:64;;25319:67;;-1:-1:-1;;;;;;25420:16:0;;25450:21;;25412:64;;;;25450:21;25420:16;25412:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;24063:1421:0:o;7473:602::-;-1:-1:-1;;;;;7613:20:0;;7605:70;;;;-1:-1:-1;;;7605:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;7694:23:0;;7686:71;;;;-1:-1:-1;;;7686:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;7794:17:0;;7770:21;7794:17;;;;;;;;;;;7830:23;;;;7822:74;;;;-1:-1:-1;;;7822:74:0;;17454:2:1;7822:74:0;;;17436:21:1;17493:2;17473:18;;;17466:30;17532:34;17512:18;;;17505:62;-1:-1:-1;;;17583:18:1;;;17576:36;17629:19;;7822:74:0;17252:402:1;7822:74:0;-1:-1:-1;;;;;7924:17:0;;;:9;:17;;;;;;;;;;;7944:22;;;7924:42;;7984:20;;;;;;;;:30;;7960:6;;7924:9;7984:30;;7960:6;;7984:30;:::i;:::-;;;;;;;;8049:9;-1:-1:-1;;;;;8032:35:0;8041:6;-1:-1:-1;;;;;8032:35:0;;8060:6;8032:35;;;;1839:25:1;;1827:2;1812:18;;1693:177;8032:35:0;;;;;;;;7594:481;7473:602;;;:::o;16707:207::-;-1:-1:-1;;;;;16795:39:0;;;;;;:31;:39;;;;;;;;;:52;;-1:-1:-1;;16795:52:0;;;;;;;;;;16863:43;;17827:51:1;;;17894:18;;;17887:50;16863:43:0;;17800:18:1;16863:43:0;;;;;;;16707:207;;:::o;22934:591::-;23086:16;;;23100:1;23086:16;;;;;;;;23062:21;;23086:16;;;;;;;;;;-1:-1:-1;23086:16:0;23062:40;;23131:4;23113;23118:1;23113:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;23113:23:0;;;-1:-1:-1;;;;;23113:23:0;;;;;23157:15;-1:-1:-1;;;;;23157:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23147:4;23152:1;23147:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;23147:32:0;;;-1:-1:-1;;;;;23147:32:0;;;;;23192:62;23209:4;23224:15;23242:11;23192:8;:62::i;:::-;23293:224;;-1:-1:-1;;;23293:224:0;;-1:-1:-1;;;;;23293:15:0;:66;;;;:224;;23374:11;;23400:1;;23444:4;;23471;;23491:15;;23293:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22989:536;22934:591;:::o;23533:522::-;23681:62;23698:4;23713:15;23731:11;23681:8;:62::i;:::-;23786:15;-1:-1:-1;;;;;23786:31:0;;23825:9;23858:4;23878:11;23904:1;23947;23998:7;9154:6;;-1:-1:-1;;;;;9154:6:0;;9089:79;23998:7;23786:261;;;;;;-1:-1:-1;;;;;;23786:261:0;;;-1:-1:-1;;;;;19812:15:1;;;23786:261:0;;;19794:34:1;19844:18;;;19837:34;;;;19887:18;;;19880:34;;;;19930:18;;;19923:34;19994:15;;;19973:19;;;19966:44;24021:15:0;20026:19:1;;;20019:35;19728:19;;23786:261:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;23533:522;;:::o;14:548:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;567:131::-;-1:-1:-1;;;;;642:31:1;;632:42;;622:70;;688:1;685;678:12;622:70;567:131;:::o;703:315::-;771:6;779;832:2;820:9;811:7;807:23;803:32;800:52;;;848:1;845;838:12;800:52;887:9;874:23;906:31;931:5;906:31;:::i;:::-;956:5;1008:2;993:18;;;;980:32;;-1:-1:-1;;;703:315:1:o;1215:247::-;1274:6;1327:2;1315:9;1306:7;1302:23;1298:32;1295:52;;;1343:1;1340;1333:12;1295:52;1382:9;1369:23;1401:31;1426:5;1401:31;:::i;:::-;1451:5;1215:247;-1:-1:-1;;;1215:247:1:o;1875:456::-;1952:6;1960;1968;2021:2;2009:9;2000:7;1996:23;1992:32;1989:52;;;2037:1;2034;2027:12;1989:52;2076:9;2063:23;2095:31;2120:5;2095:31;:::i;:::-;2145:5;-1:-1:-1;2202:2:1;2187:18;;2174:32;2215:33;2174:32;2215:33;:::i;:::-;1875:456;;2267:7;;-1:-1:-1;;;2321:2:1;2306:18;;;;2293:32;;1875:456::o;2336:180::-;2395:6;2448:2;2436:9;2427:7;2423:23;2419:32;2416:52;;;2464:1;2461;2454:12;2416:52;-1:-1:-1;2487:23:1;;2336:180;-1:-1:-1;2336:180:1:o;2918:118::-;3004:5;2997:13;2990:21;2983:5;2980:32;2970:60;;3026:1;3023;3016:12;3041:382;3106:6;3114;3167:2;3155:9;3146:7;3142:23;3138:32;3135:52;;;3183:1;3180;3173:12;3135:52;3222:9;3209:23;3241:31;3266:5;3241:31;:::i;:::-;3291:5;-1:-1:-1;3348:2:1;3333:18;;3320:32;3361:30;3320:32;3361:30;:::i;:::-;3410:7;3400:17;;;3041:382;;;;;:::o;3428:316::-;3505:6;3513;3521;3574:2;3562:9;3553:7;3549:23;3545:32;3542:52;;;3590:1;3587;3580:12;3542:52;-1:-1:-1;;3613:23:1;;;3683:2;3668:18;;3655:32;;-1:-1:-1;3734:2:1;3719:18;;;3706:32;;3428:316;-1:-1:-1;3428:316:1:o;3749:388::-;3817:6;3825;3878:2;3866:9;3857:7;3853:23;3849:32;3846:52;;;3894:1;3891;3884:12;3846:52;3933:9;3920:23;3952:31;3977:5;3952:31;:::i;:::-;4002:5;-1:-1:-1;4059:2:1;4044:18;;4031:32;4072:33;4031:32;4072:33;:::i;4142:380::-;4221:1;4217:12;;;;4264;;;4285:61;;4339:4;4331:6;4327:17;4317:27;;4285:61;4392:2;4384:6;4381:14;4361:18;4358:38;4355:161;;4438:10;4433:3;4429:20;4426:1;4419:31;4473:4;4470:1;4463:15;4501:4;4498:1;4491:15;4355:161;;4142:380;;;:::o;4936:356::-;5138:2;5120:21;;;5157:18;;;5150:30;5216:34;5211:2;5196:18;;5189:62;5283:2;5268:18;;4936:356::o;5297:127::-;5358:10;5353:3;5349:20;5346:1;5339:31;5389:4;5386:1;5379:15;5413:4;5410:1;5403:15;5429:168;5502:9;;;5533;;5550:15;;;5544:22;;5530:37;5520:71;;5571:18;;:::i;5602:217::-;5642:1;5668;5658:132;;5712:10;5707:3;5703:20;5700:1;5693:31;5747:4;5744:1;5737:15;5775:4;5772:1;5765:15;5658:132;-1:-1:-1;5804:9:1;;5602:217::o;6234:125::-;6299:9;;;6320:10;;;6317:36;;;6333:18;;:::i;7842:184::-;7912:6;7965:2;7953:9;7944:7;7940:23;7936:32;7933:52;;;7981:1;7978;7971:12;7933:52;-1:-1:-1;8004:16:1;;7842:184;-1:-1:-1;7842:184:1:o;8310:245::-;8377:6;8430:2;8418:9;8409:7;8405:23;8401:32;8398:52;;;8446:1;8443;8436:12;8398:52;8478:9;8472:16;8497:28;8519:5;8497:28;:::i;14005:401::-;14207:2;14189:21;;;14246:2;14226:18;;;14219:30;14285:34;14280:2;14265:18;;14258:62;-1:-1:-1;;;14351:2:1;14336:18;;14329:35;14396:3;14381:19;;14005:401::o;14411:399::-;14613:2;14595:21;;;14652:2;14632:18;;;14625:30;14691:34;14686:2;14671:18;;14664:62;-1:-1:-1;;;14757:2:1;14742:18;;14735:33;14800:3;14785:19;;14411:399::o;15524:128::-;15591:9;;;15612:11;;;15609:37;;;15626:18;;:::i;18080:127::-;18141:10;18136:3;18132:20;18129:1;18122:31;18172:4;18169:1;18162:15;18196:4;18193:1;18186:15;18212:251;18282:6;18335:2;18323:9;18314:7;18310:23;18306:32;18303:52;;;18351:1;18348;18341:12;18303:52;18383:9;18377:16;18402:31;18427:5;18402:31;:::i;18468:980::-;18730:4;18778:3;18767:9;18763:19;18809:6;18798:9;18791:25;18835:2;18873:6;18868:2;18857:9;18853:18;18846:34;18916:3;18911:2;18900:9;18896:18;18889:31;18940:6;18975;18969:13;19006:6;18998;18991:22;19044:3;19033:9;19029:19;19022:26;;19083:2;19075:6;19071:15;19057:29;;19104:1;19114:195;19128:6;19125:1;19122:13;19114:195;;;19193:13;;-1:-1:-1;;;;;19189:39:1;19177:52;;19284:15;;;;19249:12;;;;19225:1;19143:9;19114:195;;;-1:-1:-1;;;;;;;19365:32:1;;;;19360:2;19345:18;;19338:60;-1:-1:-1;;;19429:3:1;19414:19;19407:35;19326:3;18468:980;-1:-1:-1;;;18468:980:1:o;20065:306::-;20153:6;20161;20169;20222:2;20210:9;20201:7;20197:23;20193:32;20190:52;;;20238:1;20235;20228:12;20190:52;20267:9;20261:16;20251:26;;20317:2;20306:9;20302:18;20296:25;20286:35;;20361:2;20350:9;20346:18;20340:25;20330:35;;20065:306;;;;;:::o

Swarm Source

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