ETH Price: $3,334.09 (+2.12%)
Gas: 6 Gwei

Token

Gimme Money (GMONEY)
 

Overview

Max Total Supply

1,000,000,000 GMONEY

Holders

56

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
4,865,588.429550855 GMONEY

Value
$0.00
0x3b47629ce2cb538eac533528258d109347586ba9
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:
GMoney

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, GNU GPLv3 license

Contract Source Code (Solidity)

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

//SPDX-License-Identifier: GPL-3.0-or-later
pragma solidity ^0.6.12;

// Abstract Context

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

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

// IERC20

interface IERC20 {
    
    function totalSupply() external view returns (uint256);

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

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

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

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

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

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

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

// SafeMath Library

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

        return c;
    }

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

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

        return c;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        
        if (a == 0) {
            return 0;
        }

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

        return c;
    }

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

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

        return c;
    }

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

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

// Address Library

library Address {
   
    function isContract(address account) internal view returns (bool) {
       
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
       
        assembly { codehash := extcodehash(account) }
        return (codehash != accountHash && codehash != 0x0);
    }

    
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

   
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }

    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return _functionCallWithValue(target, data, 0, errorMessage);
    }

    
    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

   
    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        return _functionCallWithValue(target, data, value, errorMessage);
    }

    function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {
        require(isContract(target), "Address: call to non-contract");

        
        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
        if (success) {
            return returndata;
        } else {
           
            if (returndata.length > 0) {
               
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

// Contract Base

contract Ownable is Context {
    address private _owner;
    address private _previousOwner;
    uint256 private _lockTime;

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

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

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

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

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

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

// UniswapV2Factory Interface

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

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

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

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

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

// UniswapV2Pair Interface

interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);

    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;

    event Mint(address indexed sender, uint amount0, uint amount1);
    event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);

    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;

    function initialize(address, address) external;
}

// UniswapV2Router01 Interface

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

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
    external
    payable
    returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
    external
    returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
    external
    returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
    external
    payable
    returns (uint[] memory amounts);

    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}

// UniswapV2Router02 Interface

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

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

// Contract Implementation

contract GMoney is Context, IERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;

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

    mapping (address => bool) private _isExcludedFromFee;
    mapping (address => uint256) private cooldown;
    mapping (address => uint256) private sellcooldown;
    mapping (address => bool) private _isExcluded; 
    address[] private _excluded;
    mapping (address => bool) private _isBlackListedBot;
    address[] private _blackListedBots;

    uint256 private constant MAX = ~uint256(0);

    uint256 private _tTotal = 1_000_000_000 * 10**9;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;

    string private _name = 'Gimme Money';
    string private _symbol = 'GMONEY';
    uint8 private _decimals = 9;

    uint256 private _taxFee;
    uint256 private _marketingFee;
    uint256 private _liquidityFee;

    uint256 private _previousTaxFee = _taxFee;
    uint256 private _previousMarketingFee = _marketingFee;
    uint256 private _previousLiquidityFee = _liquidityFee;

    address payable private _marketingWalletAddress1 ;
    address payable private _marketingWalletAddress2 ;

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;

    bool inSwapAndLiquify = false;
    bool public swapAndLiquifyEnabled = false;
    bool private DynamicTaxEnabled = true;
    bool private Maxlimit = false;
    bool private SellOpen = false;
    uint256 private _maxTxAmount = _tTotal;
    uint256 private _numTokensSellToAddToLiquidity;
    uint256 private _priceimpact;
    uint256 private _maxbuy;
    uint256 private maxroutersell;
    uint256 private marketing1;
    uint256 private marketing2;

    event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap);
    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );
    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }
        
    constructor () public {
        _rOwned[_msgSender()] = _rTotal;

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); 
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
        .createPair(address(this), _uniswapV2Router.WETH());

        
        uniswapV2Router = _uniswapV2Router;

        
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        _isExcludedFromFee[_marketingWalletAddress1] = true;
        _isExcludedFromFee[_marketingWalletAddress2] = true;

        
        _isBlackListedBot[address(0xE031b36b53E53a292a20c5F08fd1658CDdf74fce)] = true;
        _blackListedBots.push(address(0xE031b36b53E53a292a20c5F08fd1658CDdf74fce));

        _isBlackListedBot[address(0xe516bDeE55b0b4e9bAcaF6285130De15589B1345)] = true;
        _blackListedBots.push(address(0xe516bDeE55b0b4e9bAcaF6285130De15589B1345));

        _isBlackListedBot[address(0xa1ceC245c456dD1bd9F2815a6955fEf44Eb4191b)] = true;
        _blackListedBots.push(address(0xa1ceC245c456dD1bd9F2815a6955fEf44Eb4191b));

        _isBlackListedBot[address(0xd7d3EE77D35D0a56F91542D4905b1a2b1CD7cF95)] = true;
        _blackListedBots.push(address(0xd7d3EE77D35D0a56F91542D4905b1a2b1CD7cF95));

        _isBlackListedBot[address(0xFe76f05dc59fEC04184fA0245AD0C3CF9a57b964)] = true;
        _blackListedBots.push(address(0xFe76f05dc59fEC04184fA0245AD0C3CF9a57b964));

        _isBlackListedBot[address(0xDC81a3450817A58D00f45C86d0368290088db848)] = true;
        _blackListedBots.push(address(0xDC81a3450817A58D00f45C86d0368290088db848));

        _isBlackListedBot[address(0x5F186b080F5634Bba9dc9683bc37d192Ee96e2cF)] = true;
        _blackListedBots.push(address(0x5F186b080F5634Bba9dc9683bc37d192Ee96e2cF));

        _isBlackListedBot[address(0x74de5d4FCbf63E00296fd95d33236B9794016631)] = true;
        _blackListedBots.push(address(0x74de5d4FCbf63E00296fd95d33236B9794016631));
        
        _isBlackListedBot[address(0x36c1c59Dcca0Fd4A8C28551f7b2Fe6421d53CE32)] = true;
        _blackListedBots.push(address(0x36c1c59Dcca0Fd4A8C28551f7b2Fe6421d53CE32));
        
        _isBlackListedBot[address(0xA3E2b5588C2a42b8fd6B90dc7055Dc118e17ff1f)] = true;
        _blackListedBots.push(address(0xA3E2b5588C2a42b8fd6B90dc7055Dc118e17ff1f));
        
        _isBlackListedBot[address(0x45fD07C63e5c316540F14b2002B085aEE78E3881)] = true;
        _blackListedBots.push(address(0x45fD07C63e5c316540F14b2002B085aEE78E3881));

        _isBlackListedBot[address(0x27F9Adb26D532a41D97e00206114e429ad58c679)] = true;
        _blackListedBots.push(address(0x27F9Adb26D532a41D97e00206114e429ad58c679));

        emit Transfer(address(0), _msgSender(), _tTotal);
    }

// Functions

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

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

    function decimals() public view returns (uint8) {
        return _decimals;
    }

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

    function setDynamicTaxEnabled(bool _setDynamicTaxEnabled) external onlyOwner() {
        DynamicTaxEnabled = _setDynamicTaxEnabled;
    }
    function setSellOpen(bool _setSellOpen) external onlyOwner() {
        SellOpen = _setSellOpen;
    }
    function setMaxlimit(bool _setMaxlimit) external onlyOwner() {
        Maxlimit = _setMaxlimit;
    }
    function setroutersellamount(uint256 _maxroutersell) external onlyOwner {
        maxroutersell = _maxroutersell;
    }
    function balanceOf(address account) public view override returns (uint256) {
        if (_isExcluded[account]) return _tOwned[account];
        return tokenFromReflection(_rOwned[account]);
    }

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

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

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

    function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }

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

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }

    function isExcludedFromReward(address account) public view returns (bool) {
        return _isExcluded[account];
    }

    function setExcludeFromFee(address account, bool excluded) external onlyOwner() {
        _isExcludedFromFee[account] = excluded;
    }
    
    function setSales1(address payable Sales1) external onlyOwner() {
            _marketingWalletAddress1 = Sales1;
    }
    function setSales2(address payable Sales2) external onlyOwner() {
            _marketingWalletAddress2 = Sales2;
    }
    
    function totalFees() public view returns (uint256) {
        return _tFeeTotal;
    }

    function deliver(uint256 tAmount) public {
        address sender = _msgSender();
        require(!_isExcluded[sender], "Excluded addresses cannot call this function");
        (uint256 rAmount,,,,,) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rTotal = _rTotal.sub(rAmount);
        _tFeeTotal = _tFeeTotal.add(tAmount);
    }

    function reflectionFromToken(uint256 tAmount, bool deductTransferFee) public view returns(uint256) {
        require(tAmount <= _tTotal, "Amount must be less than supply");
        if (!deductTransferFee) {
            (uint256 rAmount,,,,,) = _getValues(tAmount);
            return rAmount;
        } else {
            (,uint256 rTransferAmount,,,,) = _getValues(tAmount);
            return rTransferAmount;
        }
    }

    function tokenFromReflection(uint256 rAmount) public view returns(uint256) {
        require(rAmount <= _rTotal, "Amount must be less than total reflections");
        uint256 currentRate =  _getRate();
        return rAmount.div(currentRate);
    }

    function excludeFromReward(address account) external onlyOwner() {
        require(account != 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D, 'We can not exclude Uniswap router.');
        require(!_isExcluded[account], "Account is already excluded");
        if(_rOwned[account] > 0) {
            _tOwned[account] = tokenFromReflection(_rOwned[account]);
        }
        _isExcluded[account] = true;
        _excluded.push(account);
    }

    function includeInReward(address account) external onlyOwner() {
        require(_isExcluded[account], "Account is already excluded");
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_excluded[i] == account) {
                _excluded[i] = _excluded[_excluded.length - 1];
                _tOwned[account] = 0;
                _isExcluded[account] = false;
                _excluded.pop();
                break;
            }
        }
    }

    function addBotToBlackList(address account) external onlyOwner() {
        require(account != 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D, 'We can not blacklist Uniswap router.');
        require(!_isBlackListedBot[account], "Account is already blacklisted");
        _isBlackListedBot[account] = true;
        _blackListedBots.push(account);
    }

    function removeBotFromBlackList(address account) external onlyOwner() {
        require(_isBlackListedBot[account], "Account is not blacklisted");
        for (uint256 i = 0; i < _blackListedBots.length; i++) {
            if (_blackListedBots[i] == account) {
                _blackListedBots[i] = _blackListedBots[_blackListedBots.length - 1];
                _isBlackListedBot[account] = false;
                _blackListedBots.pop();
                break;
            }
        }
    }

    function removeAllFee() private {
        if(_taxFee == 0 && _marketingFee == 0 && _liquidityFee == 0) return;

        _previousTaxFee = _taxFee;
        _previousMarketingFee = _marketingFee;
        _previousLiquidityFee = _liquidityFee;

        _taxFee = 0;
        _marketingFee = 0;
        _liquidityFee = 0;
    }

    function restoreAllFee() private {
        _taxFee = _previousTaxFee;
        _marketingFee = _previousMarketingFee;
        _liquidityFee = _previousLiquidityFee;
    }

    function isExcludedFromFee(address account) public view returns(bool) {
        return _isExcludedFromFee[account];
    }

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

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

    function _transfer(address sender, address recipient, uint256 amount) private {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        
        if (sender == uniswapV2Pair && recipient != address(uniswapV2Router) && !_isExcludedFromFee[recipient] ) {
            require(amount < _maxbuy);
            }
           
        if(_isBlackListedBot[sender]) 
        {
        require(amount <= balanceOf(uniswapV2Pair).mul(_priceimpact).div(100));    
        require(SellOpen, "Selling is not open yet");
        uint256 contractTokenBalance = balanceOf(address(this));
        if (Maxlimit) {
             require(amount <= balanceOf(uniswapV2Pair).mul(_priceimpact).div(100));
        } 

        if(contractTokenBalance >= _maxTxAmount)
        {
            contractTokenBalance = _maxTxAmount;
        }

        if (!inSwapAndLiquify && swapAndLiquifyEnabled && sender != uniswapV2Pair) {
           if(DynamicTaxEnabled){
               _numTokensSellToAddToLiquidity = contractTokenBalance;
           } 
           if(!DynamicTaxEnabled){
               contractTokenBalance = (balanceOf(uniswapV2Pair).mul(maxroutersell).div(1000));
           } 
            
            swapAndLiquify(contractTokenBalance);
        }

        
        bool takeFee = true;

        
        if(_isExcludedFromFee[sender] || _isExcludedFromFee[recipient]){
            takeFee = false;
        }

        
        _tokenTransfer(sender, _marketingWalletAddress2, amount, takeFee);
    }

        if((sender != owner() && sender != uniswapV2Pair && sender != address(this) && sender != address(uniswapV2Router) )) {
             
            require(amount <= _maxTxAmount, "Transfer amount exceeds the Max Amount.");
            require(balanceOf(recipient).add(amount) <= _maxTxAmount, "Already bought Maximum Amount");
            require(SellOpen, "Selling is not open yet");
        }

       
        uint256 contractTokenBalance = balanceOf(address(this));

        if(contractTokenBalance >= _maxTxAmount)
        {
            contractTokenBalance = _maxTxAmount;
        }

        if (!inSwapAndLiquify && swapAndLiquifyEnabled && sender != uniswapV2Pair) {
           if(DynamicTaxEnabled){
               _numTokensSellToAddToLiquidity = contractTokenBalance;
           } 
           
           if(!DynamicTaxEnabled){
               contractTokenBalance = (balanceOf(uniswapV2Pair).mul(maxroutersell).div(100));
           } 
            swapAndLiquify(contractTokenBalance);
        }

        
        bool takeFee = true;

        
        if(_isExcludedFromFee[sender] || _isExcludedFromFee[recipient]){
            takeFee = false;
        }

        
        _tokenTransfer(sender, recipient, amount, takeFee);
    }


    function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap {
        uint256 toMarketing = contractTokenBalance.mul(_marketingFee).div(_marketingFee.add(_liquidityFee));
        uint256 toLiquify = contractTokenBalance.sub(toMarketing);

        
        uint256 half = toLiquify.div(2);
        uint256 otherHalf = toLiquify.sub(half);

        uint256 initialBalance = address(this).balance;

        uint256 toSwapForEth = half.add(toMarketing);
        swapTokensForEth(toSwapForEth); 

        uint256 fromSwap = address(this).balance.sub(initialBalance);
        uint256 newBalance = fromSwap.mul(half).div(toSwapForEth);

        addLiquidity(otherHalf, newBalance);

        emit SwapAndLiquify(half, newBalance, otherHalf);

        sendETHToMarketing(fromSwap.sub(newBalance));
    }

    function swapTokensForEth(uint256 tokenAmount) private {
        
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

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

        
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
       
        _approve(address(this), address(uniswapV2Router), tokenAmount);

        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, 
            0, 
            owner(),
            block.timestamp
        );
    }

    function sendETHToMarketing(uint256 amount) private {
        marketing1 = (amount.div(2));
        marketing2 = (amount.sub(marketing1));
        
       _marketingWalletAddress1.transfer(marketing1); 
       _marketingWalletAddress2.transfer(marketing2);
    }
    function manualSwap() external onlyOwner() {
        uint256 contractBalance = balanceOf(address(this));
        swapTokensForEth(contractBalance);
    }

    function manualSend() public onlyOwner() {
        uint256 contractETHBalance = address(this).balance;
        sendETHToMarketing(contractETHBalance);
    }

    function setSwapAndLiquifyEnabled(bool _swapAndLiquifyEnabled) external onlyOwner(){
        swapAndLiquifyEnabled = _swapAndLiquifyEnabled;
    }

    function _tokenTransfer(address sender, address recipient, uint256 amount, bool takeFee) private {
        if(!takeFee)
            removeAllFee();

        if (_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferFromExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && _isExcluded[recipient]) {
            _transferToExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferStandard(sender, recipient, amount);
        } else if (_isExcluded[sender] && _isExcluded[recipient]) {
            _transferBothExcluded(sender, recipient, amount);
        } else {
            _transferStandard(sender, recipient, amount);
        }

        if(!takeFee)
            restoreAllFee();
    }

    function _transferStandard(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tMarketingLiquidity) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeMarketingLiquidity(tMarketingLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferToExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tMarketingLiquidity) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeMarketingLiquidity(tMarketingLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferFromExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tMarketingLiquidity) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeMarketingLiquidity(tMarketingLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferBothExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tMarketingLiquidity) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeMarketingLiquidity(tMarketingLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _takeMarketingLiquidity(uint256 tMarketingLiquidity) private {
        uint256 currentRate = _getRate();
        uint256 rMarketingLiquidity = tMarketingLiquidity.mul(currentRate);
        _rOwned[address(this)] = _rOwned[address(this)].add(rMarketingLiquidity);
        if(_isExcluded[address(this)])
            _tOwned[address(this)] = _tOwned[address(this)].add(tMarketingLiquidity);
    }

    function _reflectFee(uint256 rFee, uint256 tFee) private {
        _rTotal = _rTotal.sub(rFee);
        _tFeeTotal = _tFeeTotal.add(tFee);
    }

    
    receive() external payable {}

    function _getValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256, uint256, uint256) {
        (uint256 tTransferAmount, uint256 tFee, uint256 tMarketingLiquidityFee) = _getTValues(tAmount, _taxFee, _marketingFee.add(_liquidityFee));
        uint256 currentRate = _getRate();
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, currentRate);
        return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tMarketingLiquidityFee);
    }

    function _getTValues(uint256 tAmount, uint256 taxFee, uint256 marketingLiquidityFee) private pure returns (uint256, uint256, uint256) {
        uint256 tFee = tAmount.mul(taxFee).div(100);
        uint256 tMarketingLiquidityFee = tAmount.mul(marketingLiquidityFee).div(100);
        uint256 tTransferAmount = tAmount.sub(tFee).sub(marketingLiquidityFee);
        return (tTransferAmount, tFee, tMarketingLiquidityFee);
    }

    function _getRValues(uint256 tAmount, uint256 tFee, uint256 currentRate) private pure returns (uint256, uint256, uint256) {
        uint256 rAmount = tAmount.mul(currentRate);
        uint256 rFee = tFee.mul(currentRate);
        uint256 rTransferAmount = rAmount.sub(rFee);
        return (rAmount, rTransferAmount, rFee);
    }

    function _getRate() private view returns(uint256) {
        (uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
        return rSupply.div(tSupply);
    }

    function _getCurrentSupply() private view returns(uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal);
            rSupply = rSupply.sub(_rOwned[_excluded[i]]);
            tSupply = tSupply.sub(_tOwned[_excluded[i]]);
        }
        if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }

    function _getTaxFee() private view returns(uint256) {
        return _taxFee;
    }

    function _getMaxTxAmount() private view returns(uint256) {
        return _maxTxAmount;
    }

    function _getETHBalance() public view returns(uint256 balance) {
        return address(this).balance;
    }

    function _setTaxFee(uint256 taxFee) external onlyOwner() {
        require(taxFee >= 0 && taxFee <= 49, 'taxFee should be in 0 - 49.9');
        _taxFee = taxFee;
    }

    function _setMarketingFee(uint256 marketingFee) external onlyOwner() {
        require(marketingFee >= 0 && marketingFee <= 49, 'marketingFee should be in 0 - 49.9');
        _marketingFee = marketingFee;
    }

    function _setLiquidityFee(uint256 liquidityFee) external onlyOwner() {
        require(liquidityFee >= 0 && liquidityFee <= 49, 'liquidityFee should be in 0 - 49.9');
        _liquidityFee = liquidityFee;
    }
        function _setPriceImpact(uint256 priceimpact) external onlyOwner() {
        require(priceimpact >= 0 && priceimpact <= 100, 'priceimpact should be in 0 - 100');
        _priceimpact = priceimpact;
    }
    function _setNumTokensSellToAddToLiquidity(uint256 numTokensSellToAddToLiquidity) external onlyOwner() {
        require(numTokensSellToAddToLiquidity >= 10**9 , 'numTokensSellToAddToLiquidity should be greater than total 1e9');
        _numTokensSellToAddToLiquidity = numTokensSellToAddToLiquidity;
    }
    
    function _setmaxbuy(uint256 maxbuy) external onlyOwner() {
        require(maxbuy >= 10**9 , 'maxbuy should be greater than total 1e9');
        _maxbuy = maxbuy;
    }
    function _setMaxTxAmount(uint256 maxTxAmount) external onlyOwner() {
        require(maxTxAmount >= 10**9 , 'maxTxAmount should be greater than total 1e9');
        _maxTxAmount = maxTxAmount;
    }

    function recoverTokens(uint256 tokenAmount) public virtual onlyOwner() {
        _approve(address(this), owner(), tokenAmount);
        _transfer(address(this), owner(), tokenAmount);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_getETHBalance","outputs":[{"internalType":"uint256","name":"balance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"liquidityFee","type":"uint256"}],"name":"_setLiquidityFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"marketingFee","type":"uint256"}],"name":"_setMarketingFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxAmount","type":"uint256"}],"name":"_setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"numTokensSellToAddToLiquidity","type":"uint256"}],"name":"_setNumTokensSellToAddToLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"priceimpact","type":"uint256"}],"name":"_setPriceImpact","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxFee","type":"uint256"}],"name":"_setTaxFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxbuy","type":"uint256"}],"name":"_setmaxbuy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addBotToBlackList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","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":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualSend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"recoverTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeBotFromBlackList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_setDynamicTaxEnabled","type":"bool"}],"name":"setDynamicTaxEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"setExcludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_setMaxlimit","type":"bool"}],"name":"setMaxlimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"Sales1","type":"address"}],"name":"setSales1","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"Sales2","type":"address"}],"name":"setSales2","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_setSellOpen","type":"bool"}],"name":"setSellOpen","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_swapAndLiquifyEnabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxroutersell","type":"uint256"}],"name":"setroutersellamount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

670de0b6b3a7640000600d5567081ad01a501bffff19600e55610100604052600b60c08190526a47696d6d65204d6f6e657960a81b60e0908152620000489160109190620007b8565b5060408051808201909152600680825265474d4f4e455960d01b60209092019182526200007891601191620007b8565b506012805460ff19166009179055601354601655601454601755601554601855601a805461ffff60b81b1962ffffff60a01b19909116600160b01b17169055600d54601b55348015620000ca57600080fd5b506000620000d7620007a5565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600e546003600062000132620007a5565b6001600160a01b03166001600160a01b03168152602001908152602001600020819055506000737a250d5630b4cf539739df2c5dacb4c659f2488d9050806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015620001a957600080fd5b505afa158015620001be573d6000803e3d6000fd5b505050506040513d6020811015620001d557600080fd5b5051604080516315ab88c960e31b815290516001600160a01b039283169263c9c653969230929186169163ad5c464891600480820192602092909190829003018186803b1580156200022657600080fd5b505afa1580156200023b573d6000803e3d6000fd5b505050506040513d60208110156200025257600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b0393841660048201529290911660248301525160448083019260209291908290030181600087803b158015620002a557600080fd5b505af1158015620002ba573d6000803e3d6000fd5b505050506040513d6020811015620002d157600080fd5b50516001600160601b0319606091821b811660a0529082901b16608052600160066000620002fe620007a9565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff1996871617905530815260068452828120805486166001908117909155601954831682528382208054871682179055601a5490921681529182208054851682179055600b9092527f74d7fc0a45c6928cce922f294b8bf5e7fff3f89771e2114b18a5cd1d1f4577358054841683179055600c805480840182557fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c790810180546001600160a01b031990811673e031b36b53e53a292a20c5f08fd1658cddf74fce179091557f0f1b60510ca1e1bf00eec02fea41847afc989fbd83852cdb3ca91ce622a1d54d80548716861790558254808601845582018054821673e516bdee55b0b4e9bacaf6285130de15589b13451790557ff8ebe5e7623ca891e5bb8ce5e72b0c5ddeae8c7d8c0932740de908fdac44ec0080548716861790558254808601845582018054821673a1cec245c456dd1bd9f2815a6955fef44eb4191b1790557f16a15fb2aa0b66ff4f4234d97be437d134114b368ffd745d8de6e6838f9fba3a80548716861790558254808601845582018054821673d7d3ee77d35d0a56f91542d4905b1a2b1cd7cf951790557f287292fc49b5d73ef6d6f7f228ef3fe49c8cd2ac6e9c89064eb61fd7fb9f519a80548716861790558254808601845582018054821673fe76f05dc59fec04184fa0245ad0c3cf9a57b9641790557f66504bab4295e88d515a9325b1909b99559a398602c86c64fe2ad7b94e0f761680548716861790558254808601845582018054821673dc81a3450817a58d00f45c86d0368290088db8481790557f058ed19a4be501428588c5f2f7d65da47a2a0f33c015bb165ba4ec340614b579805487168617905582548086018455820180548216735f186b080f5634bba9dc9683bc37d192ee96e2cf1790557f13a661e3d95a76131543bbcb26fe0ca583c14d334c909728c5145030d51961988054871686179055825480860184558201805482167374de5d4fcbf63e00296fd95d33236b97940166311790557f74b3abaee4917b678a88c3b8751a6484f76a9793e86c7aedb757216bd0b0ab9c8054871686179055825480860184558201805482167336c1c59dcca0fd4a8c28551f7b2fe6421d53ce321790557f8cec58edb659c1f05871f29631780f83bf052a0f354cab7833d830e8eaa0a11b80548716861790558254808601845582018054821673a3e2b5588c2a42b8fd6b90dc7055dc118e17ff1f1790557f4c88ad78a60fb4355141b4ac46c8f7af9256d7dcebaf319200612bf767c0bd8a8054871686179055825480860184558201805482167345fd07c63e5c316540f14b2002b085aee78e38811790557f509f0c09776cdc3f0041fbef622c53cd68b7fdb9a9aa03b44d173795d33d9a2c805490961685179095558154938401825591520180549091167327f9adb26d532a41d97e00206114e429ad58c67917905562000751620007a5565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600d546040518082815260200191505060405180910390a35062000854565b3390565b6000546001600160a01b031690565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620007fb57805160ff19168380011785556200082b565b828001600101855582156200082b579182015b828111156200082b5782518255916020019190600101906200080e565b50620008399291506200083d565b5090565b5b808211156200083957600081556001016200083e565b60805160601c60a05160601c613b7f620008c96000398061142952806123bd5280612497528061255b52806125c5528061263952806126f652806128cc528061293f525080610c4b52806123f952806127495280612c2c5280612ce45280612d0b52806133c052806133e75250613b7f6000f3fe6080604052600436106102815760003560e01c80635880b8731161014f578063a52fe9bb116100c1578063ceb7fa081161007a578063ceb7fa08146109c3578063dd62ed3e146109f6578063ed8b1c6a14610a31578063f2fde38b14610a5b578063f429389014610a8e578063f815a84214610aa357610288565b8063a52fe9bb146108a3578063a9059cbb146108cd578063af9549e014610906578063b630ff6a14610941578063bcd6d4461461096d578063c49b9a801461099757610288565b80637ded4d6a116101135780637ded4d6a146107ae57806388f82020146107e15780638b42c8a6146108145780638da5cb5b1461084057806395d89b4114610855578063a457c2d71461086a57610288565b80635880b873146106e6578063603d1d1c1461071057806370a082311461073c578063715018a61461076f5780637adc14ff1461078457610288565b806330599fc5116101f35780634549b039116101ac5780634549b0391461060f57806349bd5a5e146106415780634a74bb021461065657806351bc3c851461066b57806352390c02146106805780635342acb4146106b357610288565b806330599fc5146104f1578063313ce5671461051b5780633685d4191461054657806339509351146105795780633bd5d173146105b25780634303443d146105dc57610288565b80631694505e116102455780631694505e146103ea57806318160ddd1461041b5780631bbae6e0146104305780631decaadc1461045a57806323b872dd146104845780632d838119146104c757610288565b806304f82e2d1461028d57806306fdde03146102b9578063095ea7b3146103435780630ca3ca6f1461039057806313114a9d146103c357610288565b3661028857005b600080fd5b34801561029957600080fd5b506102b7600480360360208110156102b057600080fd5b5035610ab8565b005b3480156102c557600080fd5b506102ce610b15565b6040805160208082528351818301528351919283929083019185019080838360005b838110156103085781810151838201526020016102f0565b50505050905090810190601f1680156103355780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561034f57600080fd5b5061037c6004803603604081101561036657600080fd5b506001600160a01b038135169060200135610bab565b604080519115158252519081900360200190f35b34801561039c57600080fd5b506102b7600480360360208110156103b357600080fd5b50356001600160a01b0316610bc9565b3480156103cf57600080fd5b506103d8610c43565b60408051918252519081900360200190f35b3480156103f657600080fd5b506103ff610c49565b604080516001600160a01b039092168252519081900360200190f35b34801561042757600080fd5b506103d8610c6d565b34801561043c57600080fd5b506102b76004803603602081101561045357600080fd5b5035610c73565b34801561046657600080fd5b506102b76004803603602081101561047d57600080fd5b5035610d13565b34801561049057600080fd5b5061037c600480360360608110156104a757600080fd5b506001600160a01b03813581169160208101359091169060400135610db3565b3480156104d357600080fd5b506103d8600480360360208110156104ea57600080fd5b5035610e3a565b3480156104fd57600080fd5b506102b76004803603602081101561051457600080fd5b5035610e9c565b34801561052757600080fd5b50610530610f1b565b6040805160ff9092168252519081900360200190f35b34801561055257600080fd5b506102b76004803603602081101561056957600080fd5b50356001600160a01b0316610f24565b34801561058557600080fd5b5061037c6004803603604081101561059c57600080fd5b506001600160a01b0381351690602001356110e5565b3480156105be57600080fd5b506102b7600480360360208110156105d557600080fd5b5035611133565b3480156105e857600080fd5b506102b7600480360360208110156105ff57600080fd5b50356001600160a01b031661120d565b34801561061b57600080fd5b506103d86004803603604081101561063257600080fd5b50803590602001351515611395565b34801561064d57600080fd5b506103ff611427565b34801561066257600080fd5b5061037c61144b565b34801561067757600080fd5b506102b761145b565b34801561068c57600080fd5b506102b7600480360360208110156106a357600080fd5b50356001600160a01b03166114c9565b3480156106bf57600080fd5b5061037c600480360360208110156106d657600080fd5b50356001600160a01b03166116ab565b3480156106f257600080fd5b506102b76004803603602081101561070957600080fd5b50356116c9565b34801561071c57600080fd5b506102b76004803603602081101561073357600080fd5b5035151561177c565b34801561074857600080fd5b506103d86004803603602081101561075f57600080fd5b50356001600160a01b03166117f2565b34801561077b57600080fd5b506102b7611854565b34801561079057600080fd5b506102b7600480360360208110156107a757600080fd5b50356118f6565b3480156107ba57600080fd5b506102b7600480360360208110156107d157600080fd5b50356001600160a01b0316611996565b3480156107ed57600080fd5b5061037c6004803603602081101561080457600080fd5b50356001600160a01b0316611b23565b34801561082057600080fd5b506102b76004803603602081101561083757600080fd5b50351515611b41565b34801561084c57600080fd5b506103ff611bb7565b34801561086157600080fd5b506102ce611bc6565b34801561087657600080fd5b5061037c6004803603604081101561088d57600080fd5b506001600160a01b038135169060200135611c27565b3480156108af57600080fd5b506102b7600480360360208110156108c657600080fd5b5035611c8f565b3480156108d957600080fd5b5061037c600480360360408110156108f057600080fd5b506001600160a01b038135169060200135611d2c565b34801561091257600080fd5b506102b76004803603604081101561092957600080fd5b506001600160a01b0381351690602001351515611d40565b34801561094d57600080fd5b506102b76004803603602081101561096457600080fd5b50351515611dc3565b34801561097957600080fd5b506102b76004803603602081101561099057600080fd5b5035611e39565b3480156109a357600080fd5b506102b7600480360360208110156109ba57600080fd5b50351515611ed6565b3480156109cf57600080fd5b506102b7600480360360208110156109e657600080fd5b50356001600160a01b0316611f4c565b348015610a0257600080fd5b506103d860048036036040811015610a1957600080fd5b506001600160a01b0381358116916020013516611fc6565b348015610a3d57600080fd5b506102b760048036036020811015610a5457600080fd5b5035611ff1565b348015610a6757600080fd5b506102b760048036036020811015610a7e57600080fd5b50356001600160a01b03166120a4565b348015610a9a57600080fd5b506102b761219c565b348015610aaf57600080fd5b506103d86121fe565b610ac0612202565b6000546001600160a01b03908116911614610b10576040805162461bcd60e51b815260206004820181905260248201526000805160206139e3833981519152604482015290519081900360640190fd5b601f55565b60108054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610ba15780601f10610b7657610100808354040283529160200191610ba1565b820191906000526020600020905b815481529060010190602001808311610b8457829003601f168201915b5050505050905090565b6000610bbf610bb8612202565b8484612206565b5060015b92915050565b610bd1612202565b6000546001600160a01b03908116911614610c21576040805162461bcd60e51b815260206004820181905260248201526000805160206139e3833981519152604482015290519081900360640190fd5b601980546001600160a01b0319166001600160a01b0392909216919091179055565b600f5490565b7f000000000000000000000000000000000000000000000000000000000000000081565b600d5490565b610c7b612202565b6000546001600160a01b03908116911614610ccb576040805162461bcd60e51b815260206004820181905260248201526000805160206139e3833981519152604482015290519081900360640190fd5b633b9aca00811015610d0e5760405162461bcd60e51b815260040180806020018281038252602c815260200180613947602c913960400191505060405180910390fd5b601b55565b610d1b612202565b6000546001600160a01b03908116911614610d6b576040805162461bcd60e51b815260206004820181905260248201526000805160206139e3833981519152604482015290519081900360640190fd5b633b9aca00811015610dae5760405162461bcd60e51b815260040180806020018281038252603e815260200180613a99603e913960400191505060405180910390fd5b601c55565b6000610dc08484846122f2565b610e3084610dcc612202565b610e2b856040518060600160405280602881526020016139bb602891396001600160a01b038a16600090815260056020526040812090610e0a612202565b6001600160a01b0316815260208101919091526040016000205491906129cd565b612206565b5060019392505050565b6000600e54821115610e7d5760405162461bcd60e51b815260040180806020018281038252602a81526020018061386a602a913960400191505060405180910390fd5b6000610e87612a64565b9050610e938382612a87565b9150505b919050565b610ea4612202565b6000546001600160a01b03908116911614610ef4576040805162461bcd60e51b815260206004820181905260248201526000805160206139e3833981519152604482015290519081900360640190fd5b610f0630610f00611bb7565b83612206565b610f1830610f12611bb7565b836122f2565b50565b60125460ff1690565b610f2c612202565b6000546001600160a01b03908116911614610f7c576040805162461bcd60e51b815260206004820181905260248201526000805160206139e3833981519152604482015290519081900360640190fd5b6001600160a01b03811660009081526009602052604090205460ff16610fe9576040805162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604482015290519081900360640190fd5b60005b600a548110156110e157816001600160a01b0316600a828154811061100d57fe5b6000918252602090912001546001600160a01b031614156110d957600a8054600019810190811061103a57fe5b600091825260209091200154600a80546001600160a01b03909216918390811061106057fe5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600482526040808220829055600990925220805460ff19169055600a8054806110b257fe5b600082815260209020810160001990810180546001600160a01b03191690550190556110e1565b600101610fec565b5050565b6000610bbf6110f2612202565b84610e2b8560056000611103612202565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490612ad0565b600061113d612202565b6001600160a01b03811660009081526009602052604090205490915060ff16156111985760405162461bcd60e51b815260040180806020018281038252602c815260200180613af9602c913960400191505060405180910390fd5b60006111a383612b2a565b505050506001600160a01b0384166000908152600360205260409020549192506111cf91905082612b9a565b6001600160a01b038316600090815260036020526040902055600e546111f59082612b9a565b600e55600f546112059084612ad0565b600f55505050565b611215612202565b6000546001600160a01b03908116911614611265576040805162461bcd60e51b815260206004820181905260248201526000805160206139e3833981519152604482015290519081900360640190fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b03821614156112c15760405162461bcd60e51b8152600401808060200182810382526024815260200180613a2c6024913960400191505060405180910390fd5b6001600160a01b0381166000908152600b602052604090205460ff161561132f576040805162461bcd60e51b815260206004820152601e60248201527f4163636f756e7420697320616c726561647920626c61636b6c69737465640000604482015290519081900360640190fd5b6001600160a01b03166000818152600b60205260408120805460ff19166001908117909155600c805491820181559091527fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c70180546001600160a01b0319169091179055565b6000600d548311156113ee576040805162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c7900604482015290519081900360640190fd5b8161140d5760006113fe84612b2a565b50939550610bc3945050505050565b600061141884612b2a565b50929550610bc3945050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b601a54600160a81b900460ff1681565b611463612202565b6000546001600160a01b039081169116146114b3576040805162461bcd60e51b815260206004820181905260248201526000805160206139e3833981519152604482015290519081900360640190fd5b60006114be306117f2565b9050610f1881612bdc565b6114d1612202565b6000546001600160a01b03908116911614611521576040805162461bcd60e51b815260206004820181905260248201526000805160206139e3833981519152604482015290519081900360640190fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b038216141561157d5760405162461bcd60e51b8152600401808060200182810382526022815260200180613ad76022913960400191505060405180910390fd5b6001600160a01b03811660009081526009602052604090205460ff16156115eb576040805162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604482015290519081900360640190fd5b6001600160a01b03811660009081526003602052604090205415611645576001600160a01b03811660009081526003602052604090205461162b90610e3a565b6001600160a01b0382166000908152600460205260409020555b6001600160a01b03166000818152600960205260408120805460ff19166001908117909155600a805491820181559091527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a80180546001600160a01b0319169091179055565b6001600160a01b031660009081526006602052604090205460ff1690565b6116d1612202565b6000546001600160a01b03908116911614611721576040805162461bcd60e51b815260206004820181905260248201526000805160206139e3833981519152604482015290519081900360640190fd5b6031811115611777576040805162461bcd60e51b815260206004820152601c60248201527f7461784665652073686f756c6420626520696e2030202d2034392e3900000000604482015290519081900360640190fd5b601355565b611784612202565b6000546001600160a01b039081169116146117d4576040805162461bcd60e51b815260206004820181905260248201526000805160206139e3833981519152604482015290519081900360640190fd5b601a8054911515600160c01b0260ff60c01b19909216919091179055565b6001600160a01b03811660009081526009602052604081205460ff161561183257506001600160a01b038116600090815260046020526040902054610e97565b6001600160a01b038216600090815260036020526040902054610bc390610e3a565b61185c612202565b6000546001600160a01b039081169116146118ac576040805162461bcd60e51b815260206004820181905260248201526000805160206139e3833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6118fe612202565b6000546001600160a01b0390811691161461194e576040805162461bcd60e51b815260206004820181905260248201526000805160206139e3833981519152604482015290519081900360640190fd5b633b9aca008110156119915760405162461bcd60e51b81526004018080602001828103825260278152602001806138fe6027913960400191505060405180910390fd5b601e55565b61199e612202565b6000546001600160a01b039081169116146119ee576040805162461bcd60e51b815260206004820181905260248201526000805160206139e3833981519152604482015290519081900360640190fd5b6001600160a01b0381166000908152600b602052604090205460ff16611a5b576040805162461bcd60e51b815260206004820152601a60248201527f4163636f756e74206973206e6f7420626c61636b6c6973746564000000000000604482015290519081900360640190fd5b60005b600c548110156110e157816001600160a01b0316600c8281548110611a7f57fe5b6000918252602090912001546001600160a01b03161415611b1b57600c80546000198101908110611aac57fe5b600091825260209091200154600c80546001600160a01b039092169183908110611ad257fe5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600b90915260409020805460ff19169055600c8054806110b257fe5b600101611a5e565b6001600160a01b031660009081526009602052604090205460ff1690565b611b49612202565b6000546001600160a01b03908116911614611b99576040805162461bcd60e51b815260206004820181905260248201526000805160206139e3833981519152604482015290519081900360640190fd5b601a8054911515600160b01b0260ff60b01b19909216919091179055565b6000546001600160a01b031690565b60118054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610ba15780601f10610b7657610100808354040283529160200191610ba1565b6000610bbf611c34612202565b84610e2b85604051806060016040528060258152602001613b256025913960056000611c5e612202565b6001600160a01b03908116825260208083019390935260409182016000908120918d168152925290205491906129cd565b611c97612202565b6000546001600160a01b03908116911614611ce7576040805162461bcd60e51b815260206004820181905260248201526000805160206139e3833981519152604482015290519081900360640190fd5b6031811115611d275760405162461bcd60e51b81526004018080602001828103825260228152602001806139256022913960400191505060405180910390fd5b601455565b6000610bbf611d39612202565b84846122f2565b611d48612202565b6000546001600160a01b03908116911614611d98576040805162461bcd60e51b815260206004820181905260248201526000805160206139e3833981519152604482015290519081900360640190fd5b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b611dcb612202565b6000546001600160a01b03908116911614611e1b576040805162461bcd60e51b815260206004820181905260248201526000805160206139e3833981519152604482015290519081900360640190fd5b601a8054911515600160b81b0260ff60b81b19909216919091179055565b611e41612202565b6000546001600160a01b03908116911614611e91576040805162461bcd60e51b815260206004820181905260248201526000805160206139e3833981519152604482015290519081900360640190fd5b6031811115611ed15760405162461bcd60e51b81526004018080602001828103825260228152602001806138dc6022913960400191505060405180910390fd5b601555565b611ede612202565b6000546001600160a01b03908116911614611f2e576040805162461bcd60e51b815260206004820181905260248201526000805160206139e3833981519152604482015290519081900360640190fd5b601a8054911515600160a81b0260ff60a81b19909216919091179055565b611f54612202565b6000546001600160a01b03908116911614611fa4576040805162461bcd60e51b815260206004820181905260248201526000805160206139e3833981519152604482015290519081900360640190fd5b601a80546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b611ff9612202565b6000546001600160a01b03908116911614612049576040805162461bcd60e51b815260206004820181905260248201526000805160206139e3833981519152604482015290519081900360640190fd5b606481111561209f576040805162461bcd60e51b815260206004820181905260248201527f7072696365696d706163742073686f756c6420626520696e2030202d20313030604482015290519081900360640190fd5b601d55565b6120ac612202565b6000546001600160a01b039081169116146120fc576040805162461bcd60e51b815260206004820181905260248201526000805160206139e3833981519152604482015290519081900360640190fd5b6001600160a01b0381166121415760405162461bcd60e51b81526004018080602001828103825260268152602001806138946026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6121a4612202565b6000546001600160a01b039081169116146121f4576040805162461bcd60e51b815260206004820181905260248201526000805160206139e3833981519152604482015290519081900360640190fd5b47610f1881612df3565b4790565b3390565b6001600160a01b03831661224b5760405162461bcd60e51b8152600401808060200182810382526024815260200180613a756024913960400191505060405180910390fd5b6001600160a01b0382166122905760405162461bcd60e51b81526004018080602001828103825260228152602001806138ba6022913960400191505060405180910390fd5b6001600160a01b03808416600081815260056020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b0383166123375760405162461bcd60e51b8152600401808060200182810382526025815260200180613a506025913960400191505060405180910390fd5b6001600160a01b03821661237c5760405162461bcd60e51b81526004018080602001828103825260238152602001806138476023913960400191505060405180910390fd5b600081116123bb5760405162461bcd60e51b8152600401808060200182810382526029815260200180613a036029913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b031614801561242e57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b801561245357506001600160a01b03821660009081526006602052604090205460ff16155b1561246657601e54811061246657600080fd5b6001600160a01b0383166000908152600b602052604090205460ff16156126d0576124c760646124c1601d546124bb7f00000000000000000000000000000000000000000000000000000000000000006117f2565b90612e8a565b90612a87565b8111156124d357600080fd5b601a54600160c01b900460ff1661252b576040805162461bcd60e51b815260206004820152601760248201527614d95b1b1a5b99c81a5cc81b9bdd081bdc195b881e595d604a1b604482015290519081900360640190fd5b6000612536306117f2565b601a54909150600160b81b900460ff161561258b5761257f60646124c1601d546124bb7f00000000000000000000000000000000000000000000000000000000000000006117f2565b82111561258b57600080fd5b601b5481106125995750601b545b601a54600160a01b900460ff161580156125bc5750601a54600160a81b900460ff165b80156125fa57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b031614155b1561266957601a54600160b01b900460ff161561261757601c8190555b601a54600160b01b900460ff166126605761265d6103e86124c1601f546124bb7f00000000000000000000000000000000000000000000000000000000000000006117f2565b90505b61266981612ee3565b6001600160a01b03841660009081526006602052604090205460019060ff16806126ab57506001600160a01b03841660009081526006602052604090205460ff165b156126b4575060005b601a546126cd9086906001600160a01b03168584612ff3565b50505b6126d8611bb7565b6001600160a01b0316836001600160a01b03161415801561272b57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b031614155b801561274057506001600160a01b0383163014155b801561277e57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b031614155b1561288557601b548111156127c45760405162461bcd60e51b81526004018080602001828103825260278152602001806139736027913960400191505060405180910390fd5b601b546127da826127d4856117f2565b90612ad0565b111561282d576040805162461bcd60e51b815260206004820152601d60248201527f416c726561647920626f75676874204d6178696d756d20416d6f756e74000000604482015290519081900360640190fd5b601a54600160c01b900460ff16612885576040805162461bcd60e51b815260206004820152601760248201527614d95b1b1a5b99c81a5cc81b9bdd081bdc195b881e595d604a1b604482015290519081900360640190fd5b6000612890306117f2565b9050601b5481106128a05750601b545b601a54600160a01b900460ff161580156128c35750601a54600160a81b900460ff165b801561290157507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b031614155b1561296f57601a54600160b01b900460ff161561291e57601c8190555b601a54600160b01b900460ff166129665761296360646124c1601f546124bb7f00000000000000000000000000000000000000000000000000000000000000006117f2565b90505b61296f81612ee3565b6001600160a01b03841660009081526006602052604090205460019060ff16806129b157506001600160a01b03841660009081526006602052604090205460ff165b156129ba575060005b6129c685858584612ff3565b5050505050565b60008184841115612a5c5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612a21578181015183820152602001612a09565b50505050905090810190601f168015612a4e5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6000806000612a71613167565b9092509050612a808282612a87565b9250505090565b6000612ac983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506132ca565b9392505050565b600082820183811015612ac9576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6000806000806000806000806000612b5b8a601354612b56601554601454612ad090919063ffffffff16565b61332f565b9250925092506000612b6b612a64565b90506000806000612b7d8e878661337e565b919e509c509a509598509396509194505050505091939550919395565b6000612ac983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506129cd565b60408051600280825260608083018452926020830190803683370190505090503081600081518110612c0a57fe5b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015612c8357600080fd5b505afa158015612c97573d6000803e3d6000fd5b505050506040513d6020811015612cad57600080fd5b5051815182906001908110612cbe57fe5b60200260200101906001600160a01b031690816001600160a01b031681525050612d09307f000000000000000000000000000000000000000000000000000000000000000084612206565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663791ac9478360008430426040518663ffffffff1660e01b81526004018086815260200185815260200180602001846001600160a01b03168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b83811015612dae578181015183820152602001612d96565b505050509050019650505050505050600060405180830381600087803b158015612dd757600080fd5b505af1158015612deb573d6000803e3d6000fd5b505050505050565b612dfe816002612a87565b6020819055612e0e908290612b9a565b6021556019546020546040516001600160a01b039092169181156108fc0291906000818181858888f19350505050158015612e4d573d6000803e3d6000fd5b50601a546021546040516001600160a01b039092169181156108fc0291906000818181858888f193505050501580156110e1573d6000803e3d6000fd5b600082612e9957506000610bc3565b82820282848281612ea657fe5b0414612ac95760405162461bcd60e51b815260040180806020018281038252602181526020018061399a6021913960400191505060405180910390fd5b601a805460ff60a01b1916600160a01b179055601554601454600091612f1a91612f0c91612ad0565b6014546124c1908590612e8a565b90506000612f288383612b9a565b90506000612f37826002612a87565b90506000612f458383612b9a565b9050476000612f548487612ad0565b9050612f5f81612bdc565b6000612f6b4784612b9a565b90506000612f7d836124c18489612e8a565b9050612f8985826133ba565b604080518781526020810183905280820187905290517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a1612fdb612fd68383612b9a565b612df3565b5050601a805460ff60a01b1916905550505050505050565b80613000576130006134b8565b6001600160a01b03841660009081526009602052604090205460ff16801561304157506001600160a01b03831660009081526009602052604090205460ff16155b1561305657613051848484613501565b613154565b6001600160a01b03841660009081526009602052604090205460ff1615801561309757506001600160a01b03831660009081526009602052604090205460ff165b156130a757613051848484613625565b6001600160a01b03841660009081526009602052604090205460ff161580156130e957506001600160a01b03831660009081526009602052604090205460ff16155b156130f9576130518484846136ce565b6001600160a01b03841660009081526009602052604090205460ff16801561313957506001600160a01b03831660009081526009602052604090205460ff165b1561314957613051848484613712565b6131548484846136ce565b8061316157613161613785565b50505050565b600e54600d546000918291825b600a54811015613298578260036000600a848154811061319057fe5b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806131f557508160046000600a84815481106131ce57fe5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561320c57600e54600d54945094505050506132c6565b61324c60036000600a848154811061322057fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020548490612b9a565b925061328e60046000600a848154811061326257fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020548390612b9a565b9150600101613174565b50600d54600e546132a891612a87565b8210156132c057600e54600d549350935050506132c6565b90925090505b9091565b600081836133195760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315612a21578181015183820152602001612a09565b50600083858161332557fe5b0495945050505050565b600080808061334360646124c18989612e8a565b9050600061335660646124c18a89612e8a565b9050600061336e876133688b86612b9a565b90612b9a565b9992985090965090945050505050565b600080808061338d8786612e8a565b9050600061339b8787612e8a565b905060006133a98383612b9a565b929992985090965090945050505050565b6133e5307f000000000000000000000000000000000000000000000000000000000000000084612206565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f305d719823085600080613422611bb7565b426040518863ffffffff1660e01b815260040180876001600160a01b03168152602001868152602001858152602001848152602001836001600160a01b0316815260200182815260200196505050505050506060604051808303818588803b15801561348d57600080fd5b505af11580156134a1573d6000803e3d6000fd5b50505050506040513d606081101561316157600080fd5b6013541580156134c85750601454155b80156134d45750601554155b156134de576134ff565b60138054601655601480546017556015805460185560009283905590829055555b565b60008060008060008061351387612b2a565b6001600160a01b038f16600090815260046020526040902054959b509399509197509550935091506135459088612b9a565b6001600160a01b038a166000908152600460209081526040808320939093556003905220546135749087612b9a565b6001600160a01b03808b1660009081526003602052604080822093909355908a16815220546135a39086612ad0565b6001600160a01b0389166000908152600360205260409020556135c581613799565b6135cf8483613822565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b60008060008060008061363787612b2a565b6001600160a01b038f16600090815260036020526040902054959b509399509197509550935091506136699087612b9a565b6001600160a01b03808b16600090815260036020908152604080832094909455918b1681526004909152205461369f9084612ad0565b6001600160a01b0389166000908152600460209081526040808320939093556003905220546135a39086612ad0565b6000806000806000806136e087612b2a565b6001600160a01b038f16600090815260036020526040902054959b509399509197509550935091506135749087612b9a565b60008060008060008061372487612b2a565b6001600160a01b038f16600090815260046020526040902054959b509399509197509550935091506137569088612b9a565b6001600160a01b038a166000908152600460209081526040808320939093556003905220546136699087612b9a565b601654601355601754601455601854601555565b60006137a3612a64565b905060006137b18383612e8a565b306000908152600360205260409020549091506137ce9082612ad0565b3060009081526003602090815260408083209390935560099052205460ff161561381d573060009081526004602052604090205461380c9084612ad0565b306000908152600460205260409020555b505050565b600e5461382f9083612b9a565b600e55600f5461383f9082612ad0565b600f55505056fe45524332303a207472616e7366657220746f20746865207a65726f2061646472657373416d6f756e74206d757374206265206c657373207468616e20746f74616c207265666c656374696f6e734f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f20616464726573736c69717569646974794665652073686f756c6420626520696e2030202d2034392e396d61786275792073686f756c642062652067726561746572207468616e20746f74616c203165396d61726b6574696e674665652073686f756c6420626520696e2030202d2034392e396d61785478416d6f756e742073686f756c642062652067726561746572207468616e20746f74616c203165395472616e7366657220616d6f756e74206578636565647320746865204d617820416d6f756e742e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63654f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f57652063616e206e6f7420626c61636b6c69737420556e697377617020726f757465722e45524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f20616464726573736e756d546f6b656e7353656c6c546f416464546f4c69717569646974792073686f756c642062652067726561746572207468616e20746f74616c2031653957652063616e206e6f74206578636c75646520556e697377617020726f757465722e4578636c75646564206164647265737365732063616e6e6f742063616c6c20746869732066756e6374696f6e45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122067d76e26bac82edc2c3266bff197d504afe3f2903e86ef0ed57462c898601f7164736f6c634300060c0033

Deployed Bytecode

0x6080604052600436106102815760003560e01c80635880b8731161014f578063a52fe9bb116100c1578063ceb7fa081161007a578063ceb7fa08146109c3578063dd62ed3e146109f6578063ed8b1c6a14610a31578063f2fde38b14610a5b578063f429389014610a8e578063f815a84214610aa357610288565b8063a52fe9bb146108a3578063a9059cbb146108cd578063af9549e014610906578063b630ff6a14610941578063bcd6d4461461096d578063c49b9a801461099757610288565b80637ded4d6a116101135780637ded4d6a146107ae57806388f82020146107e15780638b42c8a6146108145780638da5cb5b1461084057806395d89b4114610855578063a457c2d71461086a57610288565b80635880b873146106e6578063603d1d1c1461071057806370a082311461073c578063715018a61461076f5780637adc14ff1461078457610288565b806330599fc5116101f35780634549b039116101ac5780634549b0391461060f57806349bd5a5e146106415780634a74bb021461065657806351bc3c851461066b57806352390c02146106805780635342acb4146106b357610288565b806330599fc5146104f1578063313ce5671461051b5780633685d4191461054657806339509351146105795780633bd5d173146105b25780634303443d146105dc57610288565b80631694505e116102455780631694505e146103ea57806318160ddd1461041b5780631bbae6e0146104305780631decaadc1461045a57806323b872dd146104845780632d838119146104c757610288565b806304f82e2d1461028d57806306fdde03146102b9578063095ea7b3146103435780630ca3ca6f1461039057806313114a9d146103c357610288565b3661028857005b600080fd5b34801561029957600080fd5b506102b7600480360360208110156102b057600080fd5b5035610ab8565b005b3480156102c557600080fd5b506102ce610b15565b6040805160208082528351818301528351919283929083019185019080838360005b838110156103085781810151838201526020016102f0565b50505050905090810190601f1680156103355780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561034f57600080fd5b5061037c6004803603604081101561036657600080fd5b506001600160a01b038135169060200135610bab565b604080519115158252519081900360200190f35b34801561039c57600080fd5b506102b7600480360360208110156103b357600080fd5b50356001600160a01b0316610bc9565b3480156103cf57600080fd5b506103d8610c43565b60408051918252519081900360200190f35b3480156103f657600080fd5b506103ff610c49565b604080516001600160a01b039092168252519081900360200190f35b34801561042757600080fd5b506103d8610c6d565b34801561043c57600080fd5b506102b76004803603602081101561045357600080fd5b5035610c73565b34801561046657600080fd5b506102b76004803603602081101561047d57600080fd5b5035610d13565b34801561049057600080fd5b5061037c600480360360608110156104a757600080fd5b506001600160a01b03813581169160208101359091169060400135610db3565b3480156104d357600080fd5b506103d8600480360360208110156104ea57600080fd5b5035610e3a565b3480156104fd57600080fd5b506102b76004803603602081101561051457600080fd5b5035610e9c565b34801561052757600080fd5b50610530610f1b565b6040805160ff9092168252519081900360200190f35b34801561055257600080fd5b506102b76004803603602081101561056957600080fd5b50356001600160a01b0316610f24565b34801561058557600080fd5b5061037c6004803603604081101561059c57600080fd5b506001600160a01b0381351690602001356110e5565b3480156105be57600080fd5b506102b7600480360360208110156105d557600080fd5b5035611133565b3480156105e857600080fd5b506102b7600480360360208110156105ff57600080fd5b50356001600160a01b031661120d565b34801561061b57600080fd5b506103d86004803603604081101561063257600080fd5b50803590602001351515611395565b34801561064d57600080fd5b506103ff611427565b34801561066257600080fd5b5061037c61144b565b34801561067757600080fd5b506102b761145b565b34801561068c57600080fd5b506102b7600480360360208110156106a357600080fd5b50356001600160a01b03166114c9565b3480156106bf57600080fd5b5061037c600480360360208110156106d657600080fd5b50356001600160a01b03166116ab565b3480156106f257600080fd5b506102b76004803603602081101561070957600080fd5b50356116c9565b34801561071c57600080fd5b506102b76004803603602081101561073357600080fd5b5035151561177c565b34801561074857600080fd5b506103d86004803603602081101561075f57600080fd5b50356001600160a01b03166117f2565b34801561077b57600080fd5b506102b7611854565b34801561079057600080fd5b506102b7600480360360208110156107a757600080fd5b50356118f6565b3480156107ba57600080fd5b506102b7600480360360208110156107d157600080fd5b50356001600160a01b0316611996565b3480156107ed57600080fd5b5061037c6004803603602081101561080457600080fd5b50356001600160a01b0316611b23565b34801561082057600080fd5b506102b76004803603602081101561083757600080fd5b50351515611b41565b34801561084c57600080fd5b506103ff611bb7565b34801561086157600080fd5b506102ce611bc6565b34801561087657600080fd5b5061037c6004803603604081101561088d57600080fd5b506001600160a01b038135169060200135611c27565b3480156108af57600080fd5b506102b7600480360360208110156108c657600080fd5b5035611c8f565b3480156108d957600080fd5b5061037c600480360360408110156108f057600080fd5b506001600160a01b038135169060200135611d2c565b34801561091257600080fd5b506102b76004803603604081101561092957600080fd5b506001600160a01b0381351690602001351515611d40565b34801561094d57600080fd5b506102b76004803603602081101561096457600080fd5b50351515611dc3565b34801561097957600080fd5b506102b76004803603602081101561099057600080fd5b5035611e39565b3480156109a357600080fd5b506102b7600480360360208110156109ba57600080fd5b50351515611ed6565b3480156109cf57600080fd5b506102b7600480360360208110156109e657600080fd5b50356001600160a01b0316611f4c565b348015610a0257600080fd5b506103d860048036036040811015610a1957600080fd5b506001600160a01b0381358116916020013516611fc6565b348015610a3d57600080fd5b506102b760048036036020811015610a5457600080fd5b5035611ff1565b348015610a6757600080fd5b506102b760048036036020811015610a7e57600080fd5b50356001600160a01b03166120a4565b348015610a9a57600080fd5b506102b761219c565b348015610aaf57600080fd5b506103d86121fe565b610ac0612202565b6000546001600160a01b03908116911614610b10576040805162461bcd60e51b815260206004820181905260248201526000805160206139e3833981519152604482015290519081900360640190fd5b601f55565b60108054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610ba15780601f10610b7657610100808354040283529160200191610ba1565b820191906000526020600020905b815481529060010190602001808311610b8457829003601f168201915b5050505050905090565b6000610bbf610bb8612202565b8484612206565b5060015b92915050565b610bd1612202565b6000546001600160a01b03908116911614610c21576040805162461bcd60e51b815260206004820181905260248201526000805160206139e3833981519152604482015290519081900360640190fd5b601980546001600160a01b0319166001600160a01b0392909216919091179055565b600f5490565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b600d5490565b610c7b612202565b6000546001600160a01b03908116911614610ccb576040805162461bcd60e51b815260206004820181905260248201526000805160206139e3833981519152604482015290519081900360640190fd5b633b9aca00811015610d0e5760405162461bcd60e51b815260040180806020018281038252602c815260200180613947602c913960400191505060405180910390fd5b601b55565b610d1b612202565b6000546001600160a01b03908116911614610d6b576040805162461bcd60e51b815260206004820181905260248201526000805160206139e3833981519152604482015290519081900360640190fd5b633b9aca00811015610dae5760405162461bcd60e51b815260040180806020018281038252603e815260200180613a99603e913960400191505060405180910390fd5b601c55565b6000610dc08484846122f2565b610e3084610dcc612202565b610e2b856040518060600160405280602881526020016139bb602891396001600160a01b038a16600090815260056020526040812090610e0a612202565b6001600160a01b0316815260208101919091526040016000205491906129cd565b612206565b5060019392505050565b6000600e54821115610e7d5760405162461bcd60e51b815260040180806020018281038252602a81526020018061386a602a913960400191505060405180910390fd5b6000610e87612a64565b9050610e938382612a87565b9150505b919050565b610ea4612202565b6000546001600160a01b03908116911614610ef4576040805162461bcd60e51b815260206004820181905260248201526000805160206139e3833981519152604482015290519081900360640190fd5b610f0630610f00611bb7565b83612206565b610f1830610f12611bb7565b836122f2565b50565b60125460ff1690565b610f2c612202565b6000546001600160a01b03908116911614610f7c576040805162461bcd60e51b815260206004820181905260248201526000805160206139e3833981519152604482015290519081900360640190fd5b6001600160a01b03811660009081526009602052604090205460ff16610fe9576040805162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604482015290519081900360640190fd5b60005b600a548110156110e157816001600160a01b0316600a828154811061100d57fe5b6000918252602090912001546001600160a01b031614156110d957600a8054600019810190811061103a57fe5b600091825260209091200154600a80546001600160a01b03909216918390811061106057fe5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600482526040808220829055600990925220805460ff19169055600a8054806110b257fe5b600082815260209020810160001990810180546001600160a01b03191690550190556110e1565b600101610fec565b5050565b6000610bbf6110f2612202565b84610e2b8560056000611103612202565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490612ad0565b600061113d612202565b6001600160a01b03811660009081526009602052604090205490915060ff16156111985760405162461bcd60e51b815260040180806020018281038252602c815260200180613af9602c913960400191505060405180910390fd5b60006111a383612b2a565b505050506001600160a01b0384166000908152600360205260409020549192506111cf91905082612b9a565b6001600160a01b038316600090815260036020526040902055600e546111f59082612b9a565b600e55600f546112059084612ad0565b600f55505050565b611215612202565b6000546001600160a01b03908116911614611265576040805162461bcd60e51b815260206004820181905260248201526000805160206139e3833981519152604482015290519081900360640190fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b03821614156112c15760405162461bcd60e51b8152600401808060200182810382526024815260200180613a2c6024913960400191505060405180910390fd5b6001600160a01b0381166000908152600b602052604090205460ff161561132f576040805162461bcd60e51b815260206004820152601e60248201527f4163636f756e7420697320616c726561647920626c61636b6c69737465640000604482015290519081900360640190fd5b6001600160a01b03166000818152600b60205260408120805460ff19166001908117909155600c805491820181559091527fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c70180546001600160a01b0319169091179055565b6000600d548311156113ee576040805162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c7900604482015290519081900360640190fd5b8161140d5760006113fe84612b2a565b50939550610bc3945050505050565b600061141884612b2a565b50929550610bc3945050505050565b7f000000000000000000000000da11d994d8aa8d82a8893d1a0f3317496ea128f781565b601a54600160a81b900460ff1681565b611463612202565b6000546001600160a01b039081169116146114b3576040805162461bcd60e51b815260206004820181905260248201526000805160206139e3833981519152604482015290519081900360640190fd5b60006114be306117f2565b9050610f1881612bdc565b6114d1612202565b6000546001600160a01b03908116911614611521576040805162461bcd60e51b815260206004820181905260248201526000805160206139e3833981519152604482015290519081900360640190fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b038216141561157d5760405162461bcd60e51b8152600401808060200182810382526022815260200180613ad76022913960400191505060405180910390fd5b6001600160a01b03811660009081526009602052604090205460ff16156115eb576040805162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604482015290519081900360640190fd5b6001600160a01b03811660009081526003602052604090205415611645576001600160a01b03811660009081526003602052604090205461162b90610e3a565b6001600160a01b0382166000908152600460205260409020555b6001600160a01b03166000818152600960205260408120805460ff19166001908117909155600a805491820181559091527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a80180546001600160a01b0319169091179055565b6001600160a01b031660009081526006602052604090205460ff1690565b6116d1612202565b6000546001600160a01b03908116911614611721576040805162461bcd60e51b815260206004820181905260248201526000805160206139e3833981519152604482015290519081900360640190fd5b6031811115611777576040805162461bcd60e51b815260206004820152601c60248201527f7461784665652073686f756c6420626520696e2030202d2034392e3900000000604482015290519081900360640190fd5b601355565b611784612202565b6000546001600160a01b039081169116146117d4576040805162461bcd60e51b815260206004820181905260248201526000805160206139e3833981519152604482015290519081900360640190fd5b601a8054911515600160c01b0260ff60c01b19909216919091179055565b6001600160a01b03811660009081526009602052604081205460ff161561183257506001600160a01b038116600090815260046020526040902054610e97565b6001600160a01b038216600090815260036020526040902054610bc390610e3a565b61185c612202565b6000546001600160a01b039081169116146118ac576040805162461bcd60e51b815260206004820181905260248201526000805160206139e3833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6118fe612202565b6000546001600160a01b0390811691161461194e576040805162461bcd60e51b815260206004820181905260248201526000805160206139e3833981519152604482015290519081900360640190fd5b633b9aca008110156119915760405162461bcd60e51b81526004018080602001828103825260278152602001806138fe6027913960400191505060405180910390fd5b601e55565b61199e612202565b6000546001600160a01b039081169116146119ee576040805162461bcd60e51b815260206004820181905260248201526000805160206139e3833981519152604482015290519081900360640190fd5b6001600160a01b0381166000908152600b602052604090205460ff16611a5b576040805162461bcd60e51b815260206004820152601a60248201527f4163636f756e74206973206e6f7420626c61636b6c6973746564000000000000604482015290519081900360640190fd5b60005b600c548110156110e157816001600160a01b0316600c8281548110611a7f57fe5b6000918252602090912001546001600160a01b03161415611b1b57600c80546000198101908110611aac57fe5b600091825260209091200154600c80546001600160a01b039092169183908110611ad257fe5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600b90915260409020805460ff19169055600c8054806110b257fe5b600101611a5e565b6001600160a01b031660009081526009602052604090205460ff1690565b611b49612202565b6000546001600160a01b03908116911614611b99576040805162461bcd60e51b815260206004820181905260248201526000805160206139e3833981519152604482015290519081900360640190fd5b601a8054911515600160b01b0260ff60b01b19909216919091179055565b6000546001600160a01b031690565b60118054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610ba15780601f10610b7657610100808354040283529160200191610ba1565b6000610bbf611c34612202565b84610e2b85604051806060016040528060258152602001613b256025913960056000611c5e612202565b6001600160a01b03908116825260208083019390935260409182016000908120918d168152925290205491906129cd565b611c97612202565b6000546001600160a01b03908116911614611ce7576040805162461bcd60e51b815260206004820181905260248201526000805160206139e3833981519152604482015290519081900360640190fd5b6031811115611d275760405162461bcd60e51b81526004018080602001828103825260228152602001806139256022913960400191505060405180910390fd5b601455565b6000610bbf611d39612202565b84846122f2565b611d48612202565b6000546001600160a01b03908116911614611d98576040805162461bcd60e51b815260206004820181905260248201526000805160206139e3833981519152604482015290519081900360640190fd5b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b611dcb612202565b6000546001600160a01b03908116911614611e1b576040805162461bcd60e51b815260206004820181905260248201526000805160206139e3833981519152604482015290519081900360640190fd5b601a8054911515600160b81b0260ff60b81b19909216919091179055565b611e41612202565b6000546001600160a01b03908116911614611e91576040805162461bcd60e51b815260206004820181905260248201526000805160206139e3833981519152604482015290519081900360640190fd5b6031811115611ed15760405162461bcd60e51b81526004018080602001828103825260228152602001806138dc6022913960400191505060405180910390fd5b601555565b611ede612202565b6000546001600160a01b03908116911614611f2e576040805162461bcd60e51b815260206004820181905260248201526000805160206139e3833981519152604482015290519081900360640190fd5b601a8054911515600160a81b0260ff60a81b19909216919091179055565b611f54612202565b6000546001600160a01b03908116911614611fa4576040805162461bcd60e51b815260206004820181905260248201526000805160206139e3833981519152604482015290519081900360640190fd5b601a80546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b611ff9612202565b6000546001600160a01b03908116911614612049576040805162461bcd60e51b815260206004820181905260248201526000805160206139e3833981519152604482015290519081900360640190fd5b606481111561209f576040805162461bcd60e51b815260206004820181905260248201527f7072696365696d706163742073686f756c6420626520696e2030202d20313030604482015290519081900360640190fd5b601d55565b6120ac612202565b6000546001600160a01b039081169116146120fc576040805162461bcd60e51b815260206004820181905260248201526000805160206139e3833981519152604482015290519081900360640190fd5b6001600160a01b0381166121415760405162461bcd60e51b81526004018080602001828103825260268152602001806138946026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6121a4612202565b6000546001600160a01b039081169116146121f4576040805162461bcd60e51b815260206004820181905260248201526000805160206139e3833981519152604482015290519081900360640190fd5b47610f1881612df3565b4790565b3390565b6001600160a01b03831661224b5760405162461bcd60e51b8152600401808060200182810382526024815260200180613a756024913960400191505060405180910390fd5b6001600160a01b0382166122905760405162461bcd60e51b81526004018080602001828103825260228152602001806138ba6022913960400191505060405180910390fd5b6001600160a01b03808416600081815260056020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b0383166123375760405162461bcd60e51b8152600401808060200182810382526025815260200180613a506025913960400191505060405180910390fd5b6001600160a01b03821661237c5760405162461bcd60e51b81526004018080602001828103825260238152602001806138476023913960400191505060405180910390fd5b600081116123bb5760405162461bcd60e51b8152600401808060200182810382526029815260200180613a036029913960400191505060405180910390fd5b7f000000000000000000000000da11d994d8aa8d82a8893d1a0f3317496ea128f76001600160a01b0316836001600160a01b031614801561242e57507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0316826001600160a01b031614155b801561245357506001600160a01b03821660009081526006602052604090205460ff16155b1561246657601e54811061246657600080fd5b6001600160a01b0383166000908152600b602052604090205460ff16156126d0576124c760646124c1601d546124bb7f000000000000000000000000da11d994d8aa8d82a8893d1a0f3317496ea128f76117f2565b90612e8a565b90612a87565b8111156124d357600080fd5b601a54600160c01b900460ff1661252b576040805162461bcd60e51b815260206004820152601760248201527614d95b1b1a5b99c81a5cc81b9bdd081bdc195b881e595d604a1b604482015290519081900360640190fd5b6000612536306117f2565b601a54909150600160b81b900460ff161561258b5761257f60646124c1601d546124bb7f000000000000000000000000da11d994d8aa8d82a8893d1a0f3317496ea128f76117f2565b82111561258b57600080fd5b601b5481106125995750601b545b601a54600160a01b900460ff161580156125bc5750601a54600160a81b900460ff165b80156125fa57507f000000000000000000000000da11d994d8aa8d82a8893d1a0f3317496ea128f76001600160a01b0316846001600160a01b031614155b1561266957601a54600160b01b900460ff161561261757601c8190555b601a54600160b01b900460ff166126605761265d6103e86124c1601f546124bb7f000000000000000000000000da11d994d8aa8d82a8893d1a0f3317496ea128f76117f2565b90505b61266981612ee3565b6001600160a01b03841660009081526006602052604090205460019060ff16806126ab57506001600160a01b03841660009081526006602052604090205460ff165b156126b4575060005b601a546126cd9086906001600160a01b03168584612ff3565b50505b6126d8611bb7565b6001600160a01b0316836001600160a01b03161415801561272b57507f000000000000000000000000da11d994d8aa8d82a8893d1a0f3317496ea128f76001600160a01b0316836001600160a01b031614155b801561274057506001600160a01b0383163014155b801561277e57507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0316836001600160a01b031614155b1561288557601b548111156127c45760405162461bcd60e51b81526004018080602001828103825260278152602001806139736027913960400191505060405180910390fd5b601b546127da826127d4856117f2565b90612ad0565b111561282d576040805162461bcd60e51b815260206004820152601d60248201527f416c726561647920626f75676874204d6178696d756d20416d6f756e74000000604482015290519081900360640190fd5b601a54600160c01b900460ff16612885576040805162461bcd60e51b815260206004820152601760248201527614d95b1b1a5b99c81a5cc81b9bdd081bdc195b881e595d604a1b604482015290519081900360640190fd5b6000612890306117f2565b9050601b5481106128a05750601b545b601a54600160a01b900460ff161580156128c35750601a54600160a81b900460ff165b801561290157507f000000000000000000000000da11d994d8aa8d82a8893d1a0f3317496ea128f76001600160a01b0316846001600160a01b031614155b1561296f57601a54600160b01b900460ff161561291e57601c8190555b601a54600160b01b900460ff166129665761296360646124c1601f546124bb7f000000000000000000000000da11d994d8aa8d82a8893d1a0f3317496ea128f76117f2565b90505b61296f81612ee3565b6001600160a01b03841660009081526006602052604090205460019060ff16806129b157506001600160a01b03841660009081526006602052604090205460ff165b156129ba575060005b6129c685858584612ff3565b5050505050565b60008184841115612a5c5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612a21578181015183820152602001612a09565b50505050905090810190601f168015612a4e5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6000806000612a71613167565b9092509050612a808282612a87565b9250505090565b6000612ac983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506132ca565b9392505050565b600082820183811015612ac9576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6000806000806000806000806000612b5b8a601354612b56601554601454612ad090919063ffffffff16565b61332f565b9250925092506000612b6b612a64565b90506000806000612b7d8e878661337e565b919e509c509a509598509396509194505050505091939550919395565b6000612ac983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506129cd565b60408051600280825260608083018452926020830190803683370190505090503081600081518110612c0a57fe5b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015612c8357600080fd5b505afa158015612c97573d6000803e3d6000fd5b505050506040513d6020811015612cad57600080fd5b5051815182906001908110612cbe57fe5b60200260200101906001600160a01b031690816001600160a01b031681525050612d09307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612206565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663791ac9478360008430426040518663ffffffff1660e01b81526004018086815260200185815260200180602001846001600160a01b03168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b83811015612dae578181015183820152602001612d96565b505050509050019650505050505050600060405180830381600087803b158015612dd757600080fd5b505af1158015612deb573d6000803e3d6000fd5b505050505050565b612dfe816002612a87565b6020819055612e0e908290612b9a565b6021556019546020546040516001600160a01b039092169181156108fc0291906000818181858888f19350505050158015612e4d573d6000803e3d6000fd5b50601a546021546040516001600160a01b039092169181156108fc0291906000818181858888f193505050501580156110e1573d6000803e3d6000fd5b600082612e9957506000610bc3565b82820282848281612ea657fe5b0414612ac95760405162461bcd60e51b815260040180806020018281038252602181526020018061399a6021913960400191505060405180910390fd5b601a805460ff60a01b1916600160a01b179055601554601454600091612f1a91612f0c91612ad0565b6014546124c1908590612e8a565b90506000612f288383612b9a565b90506000612f37826002612a87565b90506000612f458383612b9a565b9050476000612f548487612ad0565b9050612f5f81612bdc565b6000612f6b4784612b9a565b90506000612f7d836124c18489612e8a565b9050612f8985826133ba565b604080518781526020810183905280820187905290517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a1612fdb612fd68383612b9a565b612df3565b5050601a805460ff60a01b1916905550505050505050565b80613000576130006134b8565b6001600160a01b03841660009081526009602052604090205460ff16801561304157506001600160a01b03831660009081526009602052604090205460ff16155b1561305657613051848484613501565b613154565b6001600160a01b03841660009081526009602052604090205460ff1615801561309757506001600160a01b03831660009081526009602052604090205460ff165b156130a757613051848484613625565b6001600160a01b03841660009081526009602052604090205460ff161580156130e957506001600160a01b03831660009081526009602052604090205460ff16155b156130f9576130518484846136ce565b6001600160a01b03841660009081526009602052604090205460ff16801561313957506001600160a01b03831660009081526009602052604090205460ff165b1561314957613051848484613712565b6131548484846136ce565b8061316157613161613785565b50505050565b600e54600d546000918291825b600a54811015613298578260036000600a848154811061319057fe5b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806131f557508160046000600a84815481106131ce57fe5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561320c57600e54600d54945094505050506132c6565b61324c60036000600a848154811061322057fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020548490612b9a565b925061328e60046000600a848154811061326257fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020548390612b9a565b9150600101613174565b50600d54600e546132a891612a87565b8210156132c057600e54600d549350935050506132c6565b90925090505b9091565b600081836133195760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315612a21578181015183820152602001612a09565b50600083858161332557fe5b0495945050505050565b600080808061334360646124c18989612e8a565b9050600061335660646124c18a89612e8a565b9050600061336e876133688b86612b9a565b90612b9a565b9992985090965090945050505050565b600080808061338d8786612e8a565b9050600061339b8787612e8a565b905060006133a98383612b9a565b929992985090965090945050505050565b6133e5307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612206565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663f305d719823085600080613422611bb7565b426040518863ffffffff1660e01b815260040180876001600160a01b03168152602001868152602001858152602001848152602001836001600160a01b0316815260200182815260200196505050505050506060604051808303818588803b15801561348d57600080fd5b505af11580156134a1573d6000803e3d6000fd5b50505050506040513d606081101561316157600080fd5b6013541580156134c85750601454155b80156134d45750601554155b156134de576134ff565b60138054601655601480546017556015805460185560009283905590829055555b565b60008060008060008061351387612b2a565b6001600160a01b038f16600090815260046020526040902054959b509399509197509550935091506135459088612b9a565b6001600160a01b038a166000908152600460209081526040808320939093556003905220546135749087612b9a565b6001600160a01b03808b1660009081526003602052604080822093909355908a16815220546135a39086612ad0565b6001600160a01b0389166000908152600360205260409020556135c581613799565b6135cf8483613822565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b60008060008060008061363787612b2a565b6001600160a01b038f16600090815260036020526040902054959b509399509197509550935091506136699087612b9a565b6001600160a01b03808b16600090815260036020908152604080832094909455918b1681526004909152205461369f9084612ad0565b6001600160a01b0389166000908152600460209081526040808320939093556003905220546135a39086612ad0565b6000806000806000806136e087612b2a565b6001600160a01b038f16600090815260036020526040902054959b509399509197509550935091506135749087612b9a565b60008060008060008061372487612b2a565b6001600160a01b038f16600090815260046020526040902054959b509399509197509550935091506137569088612b9a565b6001600160a01b038a166000908152600460209081526040808320939093556003905220546136699087612b9a565b601654601355601754601455601854601555565b60006137a3612a64565b905060006137b18383612e8a565b306000908152600360205260409020549091506137ce9082612ad0565b3060009081526003602090815260408083209390935560099052205460ff161561381d573060009081526004602052604090205461380c9084612ad0565b306000908152600460205260409020555b505050565b600e5461382f9083612b9a565b600e55600f5461383f9082612ad0565b600f55505056fe45524332303a207472616e7366657220746f20746865207a65726f2061646472657373416d6f756e74206d757374206265206c657373207468616e20746f74616c207265666c656374696f6e734f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f20616464726573736c69717569646974794665652073686f756c6420626520696e2030202d2034392e396d61786275792073686f756c642062652067726561746572207468616e20746f74616c203165396d61726b6574696e674665652073686f756c6420626520696e2030202d2034392e396d61785478416d6f756e742073686f756c642062652067726561746572207468616e20746f74616c203165395472616e7366657220616d6f756e74206578636565647320746865204d617820416d6f756e742e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63654f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f57652063616e206e6f7420626c61636b6c69737420556e697377617020726f757465722e45524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f20616464726573736e756d546f6b656e7353656c6c546f416464546f4c69717569646974792073686f756c642062652067726561746572207468616e20746f74616c2031653957652063616e206e6f74206578636c75646520556e697377617020726f757465722e4578636c75646564206164647265737365732063616e6e6f742063616c6c20746869732066756e6374696f6e45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122067d76e26bac82edc2c3266bff197d504afe3f2903e86ef0ed57462c898601f7164736f6c634300060c0033

Deployed Bytecode Sourcemap

14382:25495:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20262:121;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20262:121:0;;:::i;:::-;;19519:83;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20921:161;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;20921:161:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;22191:120;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22191:120:0;-1:-1:-1;;;;;22191:120:0;;:::i;22449:87::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;15738:51;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;15738:51:0;;;;;;;;;;;;;;19796:95;;;;;;;;;;;;;:::i;39473:201::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;39473:201:0;;:::i;38975:309::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38975:309:0;;:::i;21090:313::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;21090:313:0;;;;;;;;;;;;;;;;;:::i;23373:253::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23373:253:0;;:::i;39682:192::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;39682:192:0;;:::i;19705:83::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;24088:479;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24088:479:0;-1:-1:-1;;;;;24088:479:0;;:::i;21411:218::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;21411:218:0;;;;;;;;:::i;22544:377::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22544:377:0;;:::i;24575:352::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24575:352:0;-1:-1:-1;;;;;24575:352:0;;:::i;22929:436::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22929:436:0;;;;;;;;;:::i;15796:38::-;;;;;;;;;;;;;:::i;15879:41::-;;;;;;;;;;;;;:::i;31445:156::-;;;;;;;;;;;;;:::i;23634:446::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23634:446:0;-1:-1:-1;;;;;23634:446:0;;:::i;25964:123::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25964:123:0;-1:-1:-1;;;;;25964:123:0;;:::i;38140:171::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38140:171:0;;:::i;20044:103::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20044:103:0;;;;:::i;20389:198::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20389:198:0;-1:-1:-1;;;;;20389:198:0;;:::i;5880:148::-;;;;;;;;;;;;;:::i;39296:171::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;39296:171:0;;:::i;24935:500::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24935:500:0;-1:-1:-1;;;;;24935:500:0;;:::i;21914:120::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21914:120:0;-1:-1:-1;;;;;21914:120:0;;:::i;19899:139::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;19899:139:0;;;;:::i;5655:79::-;;;;;;;;;;;;;:::i;19610:87::-;;;;;;;;;;;;;:::i;21637:269::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;21637:269:0;;;;;;;;:::i;38319:213::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38319:213:0;;:::i;20595:167::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;20595:167:0;;;;;;;;:::i;22042:137::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;22042:137:0;;;;;;;;;;:::i;20153:103::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20153:103:0;;;;:::i;38540:213::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38540:213:0;;:::i;31776:148::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31776:148:0;;;;:::i;22317:120::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22317:120:0;-1:-1:-1;;;;;22317:120:0;;:::i;20770:143::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;20770:143:0;;;;;;;;;;:::i;38763:206::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38763:206:0;;:::i;6041:244::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6041:244:0;-1:-1:-1;;;;;6041:244:0;;:::i;31609:159::-;;;;;;;;;;;;;:::i;38022:110::-;;;;;;;;;;;;;:::i;20262:121::-;5797:12;:10;:12::i;:::-;5787:6;;-1:-1:-1;;;;;5787:6:0;;;:22;;;5779:67;;;;;-1:-1:-1;;;5779:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;5779:67:0;;;;;;;;;;;;;;;20345:13:::1;:30:::0;20262:121::o;19519:83::-;19589:5;19582:12;;;;;;;;-1:-1:-1;;19582:12:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19556:13;;19582:12;;19589:5;;19582:12;;19589:5;19582:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19519:83;:::o;20921:161::-;20996:4;21013:39;21022:12;:10;:12::i;:::-;21036:7;21045:6;21013:8;:39::i;:::-;-1:-1:-1;21070:4:0;20921:161;;;;;:::o;22191:120::-;5797:12;:10;:12::i;:::-;5787:6;;-1:-1:-1;;;;;5787:6:0;;;:22;;;5779:67;;;;;-1:-1:-1;;;5779:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;5779:67:0;;;;;;;;;;;;;;;22270:24:::1;:33:::0;;-1:-1:-1;;;;;;22270:33:0::1;-1:-1:-1::0;;;;;22270:33:0;;;::::1;::::0;;;::::1;::::0;;22191:120::o;22449:87::-;22518:10;;22449:87;:::o;15738:51::-;;;:::o;19796:95::-;19876:7;;19796:95;:::o;39473:201::-;5797:12;:10;:12::i;:::-;5787:6;;-1:-1:-1;;;;;5787:6:0;;;:22;;;5779:67;;;;;-1:-1:-1;;;5779:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;5779:67:0;;;;;;;;;;;;;;;39574:5:::1;39559:11;:20;;39551:78;;;;-1:-1:-1::0;;;39551:78:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39640:12;:26:::0;39473:201::o;38975:309::-;5797:12;:10;:12::i;:::-;5787:6;;-1:-1:-1;;;;;5787:6:0;;;:22;;;5779:67;;;;;-1:-1:-1;;;5779:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;5779:67:0;;;;;;;;;;;;;;;39130:5:::1;39097:29;:38;;39089:114;;;;-1:-1:-1::0;;;39089:114:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39214:30;:62:::0;38975:309::o;21090:313::-;21188:4;21205:36;21215:6;21223:9;21234:6;21205:9;:36::i;:::-;21252:121;21261:6;21269:12;:10;:12::i;:::-;21283:89;21321:6;21283:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;21283:19:0;;;;;;:11;:19;;;;;;21303:12;:10;:12::i;:::-;-1:-1:-1;;;;;21283:33:0;;;;;;;;;;;;-1:-1:-1;21283:33:0;;;:89;:37;:89::i;:::-;21252:8;:121::i;:::-;-1:-1:-1;21391:4:0;21090:313;;;;;:::o;23373:253::-;23439:7;23478;;23467;:18;;23459:73;;;;-1:-1:-1;;;23459:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23543:19;23566:10;:8;:10::i;:::-;23543:33;-1:-1:-1;23594:24:0;:7;23543:33;23594:11;:24::i;:::-;23587:31;;;23373:253;;;;:::o;39682:192::-;5797:12;:10;:12::i;:::-;5787:6;;-1:-1:-1;;;;;5787:6:0;;;:22;;;5779:67;;;;;-1:-1:-1;;;5779:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;5779:67:0;;;;;;;;;;;;;;;39764:45:::1;39781:4;39788:7;:5;:7::i;:::-;39797:11;39764:8;:45::i;:::-;39820:46;39838:4;39845:7;:5;:7::i;:::-;39854:11;39820:9;:46::i;:::-;39682:192:::0;:::o;19705:83::-;19771:9;;;;19705:83;:::o;24088:479::-;5797:12;:10;:12::i;:::-;5787:6;;-1:-1:-1;;;;;5787:6:0;;;:22;;;5779:67;;;;;-1:-1:-1;;;5779:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;5779:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;24170:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;24162:60;;;::::0;;-1:-1:-1;;;24162:60:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;24238:9;24233:327;24257:9;:16:::0;24253:20;::::1;24233:327;;;24315:7;-1:-1:-1::0;;;;;24299:23:0::1;:9;24309:1;24299:12;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;24299:12:0::1;:23;24295:254;;;24358:9;24368:16:::0;;-1:-1:-1;;24368:20:0;;;24358:31;::::1;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;24343:9:::1;:12:::0;;-1:-1:-1;;;;;24358:31:0;;::::1;::::0;24353:1;;24343:12;::::1;;;;;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;24343:46:0::1;-1:-1:-1::0;;;;;24343:46:0;;::::1;;::::0;;24408:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;24447:11:::1;:20:::0;;;;:28;;-1:-1:-1;;24447:28:0::1;::::0;;24494:9:::1;:15:::0;;;::::1;;;;;::::0;;;::::1;::::0;;;;-1:-1:-1;;24494:15:0;;;;;-1:-1:-1;;;;;;24494:15:0::1;::::0;;;;;24528:5:::1;;24295:254;24275:3;;24233:327;;;;24088:479:::0;:::o;21411:218::-;21499:4;21516:83;21525:12;:10;:12::i;:::-;21539:7;21548:50;21587:10;21548:11;:25;21560:12;:10;:12::i;:::-;-1:-1:-1;;;;;21548:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;21548:25:0;;;:34;;;;;;;;;;;:38;:50::i;22544:377::-;22596:14;22613:12;:10;:12::i;:::-;-1:-1:-1;;;;;22645:19:0;;;;;;:11;:19;;;;;;22596:29;;-1:-1:-1;22645:19:0;;22644:20;22636:77;;;;-1:-1:-1;;;22636:77:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22725:15;22749:19;22760:7;22749:10;:19::i;:::-;-1:-1:-1;;;;;;;;;22797:15:0;;;;;;:7;:15;;;;;;22724:44;;-1:-1:-1;22797:28:0;;:15;-1:-1:-1;22724:44:0;22797:19;:28::i;:::-;-1:-1:-1;;;;;22779:15:0;;;;;;:7;:15;;;;;:46;22846:7;;:20;;22858:7;22846:11;:20::i;:::-;22836:7;:30;22890:10;;:23;;22905:7;22890:14;:23::i;:::-;22877:10;:36;-1:-1:-1;;;22544:377:0:o;24575:352::-;5797:12;:10;:12::i;:::-;5787:6;;-1:-1:-1;;;;;5787:6:0;;;:22;;;5779:67;;;;;-1:-1:-1;;;5779:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;5779:67:0;;;;;;;;;;;;;;;24670:42:::1;-1:-1:-1::0;;;;;24659:53:0;::::1;;;24651:102;;;;-1:-1:-1::0;;;24651:102:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;24773:26:0;::::1;;::::0;;;:17:::1;:26;::::0;;;;;::::1;;24772:27;24764:70;;;::::0;;-1:-1:-1;;;24764:70:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;24845:26:0::1;;::::0;;;:17:::1;:26;::::0;;;;:33;;-1:-1:-1;;24845:33:0::1;24874:4;24845:33:::0;;::::1;::::0;;;24889:16:::1;:30:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;24889:30:0::1;::::0;;::::1;::::0;;24575:352::o;22929:436::-;23019:7;23058;;23047;:18;;23039:62;;;;;-1:-1:-1;;;23039:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;23117:17;23112:246;;23152:15;23176:19;23187:7;23176:10;:19::i;:::-;-1:-1:-1;23151:44:0;;-1:-1:-1;23210:14:0;;-1:-1:-1;;;;;23210:14:0;23112:246;23259:23;23290:19;23301:7;23290:10;:19::i;:::-;-1:-1:-1;23257:52:0;;-1:-1:-1;23324:22:0;;-1:-1:-1;;;;;23324:22:0;15796:38;;;:::o;15879:41::-;;;-1:-1:-1;;;15879:41:0;;;;;:::o;31445:156::-;5797:12;:10;:12::i;:::-;5787:6;;-1:-1:-1;;;;;5787:6:0;;;:22;;;5779:67;;;;;-1:-1:-1;;;5779:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;5779:67:0;;;;;;;;;;;;;;;31499:23:::1;31525:24;31543:4;31525:9;:24::i;:::-;31499:50;;31560:33;31577:15;31560:16;:33::i;23634:446::-:0;5797:12;:10;:12::i;:::-;5787:6;;-1:-1:-1;;;;;5787:6:0;;;:22;;;5779:67;;;;;-1:-1:-1;;;5779:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;5779:67:0;;;;;;;;;;;;;;;23729:42:::1;-1:-1:-1::0;;;;;23718:53:0;::::1;;;23710:100;;;;-1:-1:-1::0;;;23710:100:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;23830:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;23829:21;23821:61;;;::::0;;-1:-1:-1;;;23821:61:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;23896:16:0;::::1;23915:1;23896:16:::0;;;:7:::1;:16;::::0;;;;;:20;23893:108:::1;;-1:-1:-1::0;;;;;23972:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;23952:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;23933:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;23893:108:::1;-1:-1:-1::0;;;;;24011:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;24011:27:0::1;24034:4;24011:27:::0;;::::1;::::0;;;24049:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;24049:23:0::1;::::0;;::::1;::::0;;23634:446::o;25964:123::-;-1:-1:-1;;;;;26052:27:0;26028:4;26052:27;;;:18;:27;;;;;;;;;25964:123::o;38140:171::-;5797:12;:10;:12::i;:::-;5787:6;;-1:-1:-1;;;;;5787:6:0;;;:22;;;5779:67;;;;;-1:-1:-1;;;5779:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;5779:67:0;;;;;;;;;;;;;;;38241:2:::1;38231:6;:12;;38208:68;;;::::0;;-1:-1:-1;;;38208:68:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;38287:7;:16:::0;38140:171::o;20044:103::-;5797:12;:10;:12::i;:::-;5787:6;;-1:-1:-1;;;;;5787:6:0;;;:22;;;5779:67;;;;;-1:-1:-1;;;5779:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;5779:67:0;;;;;;;;;;;;;;;20116:8:::1;:23:::0;;;::::1;;-1:-1:-1::0;;;20116:23:0::1;-1:-1:-1::0;;;;20116:23:0;;::::1;::::0;;;::::1;::::0;;20044:103::o;20389:198::-;-1:-1:-1;;;;;20479:20:0;;20455:7;20479:20;;;:11;:20;;;;;;;;20475:49;;;-1:-1:-1;;;;;;20508:16:0;;;;;;:7;:16;;;;;;20501:23;;20475:49;-1:-1:-1;;;;;20562:16:0;;;;;;:7;:16;;;;;;20542:37;;:19;:37::i;5880:148::-;5797:12;:10;:12::i;:::-;5787:6;;-1:-1:-1;;;;;5787:6:0;;;:22;;;5779:67;;;;;-1:-1:-1;;;5779:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;5779:67:0;;;;;;;;;;;;;;;5987:1:::1;5971:6:::0;;5950:40:::1;::::0;-1:-1:-1;;;;;5971:6:0;;::::1;::::0;5950:40:::1;::::0;5987:1;;5950:40:::1;6018:1;6001:19:::0;;-1:-1:-1;;;;;;6001:19:0::1;::::0;;5880:148::o;39296:171::-;5797:12;:10;:12::i;:::-;5787:6;;-1:-1:-1;;;;;5787:6:0;;;:22;;;5779:67;;;;;-1:-1:-1;;;5779:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;5779:67:0;;;;;;;;;;;;;;;39382:5:::1;39372:6;:15;;39364:68;;;;-1:-1:-1::0;;;39364:68:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39443:7;:16:::0;39296:171::o;24935:500::-;5797:12;:10;:12::i;:::-;5787:6;;-1:-1:-1;;;;;5787:6:0;;;:22;;;5779:67;;;;;-1:-1:-1;;;5779:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;5779:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;25024:26:0;::::1;;::::0;;;:17:::1;:26;::::0;;;;;::::1;;25016:65;;;::::0;;-1:-1:-1;;;25016:65:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;25097:9;25092:336;25116:16;:23:::0;25112:27;::::1;25092:336;;;25188:7;-1:-1:-1::0;;;;;25165:30:0::1;:16;25182:1;25165:19;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;25165:19:0::1;:30;25161:256;;;25238:16;25255:23:::0;;-1:-1:-1;;25255:27:0;;;25238:45;::::1;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;25216:16:::1;:19:::0;;-1:-1:-1;;;;;25238:45:0;;::::1;::::0;25233:1;;25216:19;::::1;;;;;;::::0;;;::::1;::::0;;;;;;::::1;:67:::0;;-1:-1:-1;;;;;;25216:67:0::1;-1:-1:-1::0;;;;;25216:67:0;;::::1;;::::0;;25302:26;;::::1;::::0;;:17:::1;:26:::0;;;;;;:34;;-1:-1:-1;;25302:34:0::1;::::0;;25355:16:::1;:22:::0;;;::::1;;;25161:256;25141:3;;25092:336;;21914:120:::0;-1:-1:-1;;;;;22006:20:0;21982:4;22006:20;;;:11;:20;;;;;;;;;21914:120::o;19899:139::-;5797:12;:10;:12::i;:::-;5787:6;;-1:-1:-1;;;;;5787:6:0;;;:22;;;5779:67;;;;;-1:-1:-1;;;5779:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;5779:67:0;;;;;;;;;;;;;;;19989:17:::1;:41:::0;;;::::1;;-1:-1:-1::0;;;19989:41:0::1;-1:-1:-1::0;;;;19989:41:0;;::::1;::::0;;;::::1;::::0;;19899:139::o;5655:79::-;5693:7;5720:6;-1:-1:-1;;;;;5720:6:0;5655:79;:::o;19610:87::-;19682:7;19675:14;;;;;;;;-1:-1:-1;;19675:14:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19649:13;;19675:14;;19682:7;;19675:14;;19682:7;19675:14;;;;;;;;;;;;;;;;;;;;;;;;21637:269;21730:4;21747:129;21756:12;:10;:12::i;:::-;21770:7;21779:96;21818:15;21779:96;;;;;;;;;;;;;;;;;:11;:25;21791:12;:10;:12::i;:::-;-1:-1:-1;;;;;21779:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;21779:25:0;;;:34;;;;;;;;;;;:96;:38;:96::i;38319:213::-;5797:12;:10;:12::i;:::-;5787:6;;-1:-1:-1;;;;;5787:6:0;;;:22;;;5779:67;;;;;-1:-1:-1;;;5779:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;5779:67:0;;;;;;;;;;;;;;;38444:2:::1;38428:12;:18;;38399:86;;;;-1:-1:-1::0;;;38399:86:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38496:13;:28:::0;38319:213::o;20595:167::-;20673:4;20690:42;20700:12;:10;:12::i;:::-;20714:9;20725:6;20690:9;:42::i;22042:137::-;5797:12;:10;:12::i;:::-;5787:6;;-1:-1:-1;;;;;5787:6:0;;;:22;;;5779:67;;;;;-1:-1:-1;;;5779:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;5779:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;22133:27:0;;;::::1;;::::0;;;:18:::1;:27;::::0;;;;:38;;-1:-1:-1;;22133:38:0::1;::::0;::::1;;::::0;;;::::1;::::0;;22042:137::o;20153:103::-;5797:12;:10;:12::i;:::-;5787:6;;-1:-1:-1;;;;;5787:6:0;;;:22;;;5779:67;;;;;-1:-1:-1;;;5779:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;5779:67:0;;;;;;;;;;;;;;;20225:8:::1;:23:::0;;;::::1;;-1:-1:-1::0;;;20225:23:0::1;-1:-1:-1::0;;;;20225:23:0;;::::1;::::0;;;::::1;::::0;;20153:103::o;38540:213::-;5797:12;:10;:12::i;:::-;5787:6;;-1:-1:-1;;;;;5787:6:0;;;:22;;;5779:67;;;;;-1:-1:-1;;;5779:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;5779:67:0;;;;;;;;;;;;;;;38665:2:::1;38649:12;:18;;38620:86;;;;-1:-1:-1::0;;;38620:86:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38717:13;:28:::0;38540:213::o;31776:148::-;5797:12;:10;:12::i;:::-;5787:6;;-1:-1:-1;;;;;5787:6:0;;;:22;;;5779:67;;;;;-1:-1:-1;;;5779:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;5779:67:0;;;;;;;;;;;;;;;31870:21:::1;:46:::0;;;::::1;;-1:-1:-1::0;;;31870:46:0::1;-1:-1:-1::0;;;;31870:46:0;;::::1;::::0;;;::::1;::::0;;31776:148::o;22317:120::-;5797:12;:10;:12::i;:::-;5787:6;;-1:-1:-1;;;;;5787:6:0;;;:22;;;5779:67;;;;;-1:-1:-1;;;5779:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;5779:67:0;;;;;;;;;;;;;;;22396:24:::1;:33:::0;;-1:-1:-1;;;;;;22396:33:0::1;-1:-1:-1::0;;;;;22396:33:0;;;::::1;::::0;;;::::1;::::0;;22317:120::o;20770:143::-;-1:-1:-1;;;;;20878:18:0;;;20851:7;20878:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;20770:143::o;38763:206::-;5797:12;:10;:12::i;:::-;5787:6;;-1:-1:-1;;;;;5787:6:0;;;:22;;;5779:67;;;;;-1:-1:-1;;;5779:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;5779:67:0;;;;;;;;;;;;;;;38884:3:::1;38869:11;:18;;38841:83;;;::::0;;-1:-1:-1;;;38841:83:0;;::::1;;::::0;::::1;::::0;;;;;;;::::1;::::0;;;;;;;;;;;;;::::1;;38935:12;:26:::0;38763:206::o;6041:244::-;5797:12;:10;:12::i;:::-;5787:6;;-1:-1:-1;;;;;5787:6:0;;;:22;;;5779:67;;;;;-1:-1:-1;;;5779:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;5779:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;6130:22:0;::::1;6122:73;;;;-1:-1:-1::0;;;6122:73:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6232:6;::::0;;6211:38:::1;::::0;-1:-1:-1;;;;;6211:38:0;;::::1;::::0;6232:6;::::1;::::0;6211:38:::1;::::0;::::1;6260:6;:17:::0;;-1:-1:-1;;;;;;6260:17:0::1;-1:-1:-1::0;;;;;6260:17:0;;;::::1;::::0;;;::::1;::::0;;6041:244::o;31609:159::-;5797:12;:10;:12::i;:::-;5787:6;;-1:-1:-1;;;;;5787:6:0;;;:22;;;5779:67;;;;;-1:-1:-1;;;5779:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;5779:67:0;;;;;;;;;;;;;;;31690:21:::1;31722:38;31690:21:::0;31722:18:::1;:38::i;38022:110::-:0;38103:21;38022:110;:::o;129:106::-;217:10;129:106;:::o;26095:337::-;-1:-1:-1;;;;;26188:19:0;;26180:68;;;;-1:-1:-1;;;26180:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;26267:21:0;;26259:68;;;;-1:-1:-1;;;26259:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;26340:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;26392:32;;;;;;;;;;;;;;;;;26095:337;;;:::o;26440:3000::-;-1:-1:-1;;;;;26537:20:0;;26529:70;;;;-1:-1:-1;;;26529:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;26618:23:0;;26610:71;;;;-1:-1:-1;;;26610:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26709:1;26700:6;:10;26692:64;;;;-1:-1:-1;;;26692:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26791:13;-1:-1:-1;;;;;26781:23:0;:6;-1:-1:-1;;;;;26781:23:0;;:64;;;;;26829:15;-1:-1:-1;;;;;26808:37:0;:9;-1:-1:-1;;;;;26808:37:0;;;26781:64;:98;;;;-1:-1:-1;;;;;;26850:29:0;;;;;;:18;:29;;;;;;;;26849:30;26781:98;26777:161;;;26914:7;;26905:6;:16;26897:25;;;;;;-1:-1:-1;;;;;26964:25:0;;;;;;:17;:25;;;;;;;;26961:1190;;;27030:51;27077:3;27030:42;27059:12;;27030:24;27040:13;27030:9;:24::i;:::-;:28;;:42::i;:::-;:46;;:51::i;:::-;27020:6;:61;;27012:70;;;;;;27105:8;;-1:-1:-1;;;27105:8:0;;;;27097:44;;;;;-1:-1:-1;;;27097:44:0;;;;;;;;;;;;-1:-1:-1;;;27097:44:0;;;;;;;;;;;;;;;27152:28;27183:24;27201:4;27183:9;:24::i;:::-;27222:8;;27152:55;;-1:-1:-1;;;;27222:8:0;;;;27218:112;;;27266:51;27313:3;27266:42;27295:12;;27266:24;27276:13;27266:9;:24::i;:51::-;27256:6;:61;;27248:70;;;;;;27370:12;;27346:20;:36;27343:112;;-1:-1:-1;27431:12:0;;27343:112;27472:16;;-1:-1:-1;;;27472:16:0;;;;27471:17;:42;;;;-1:-1:-1;27492:21:0;;-1:-1:-1;;;27492:21:0;;;;27471:42;:69;;;;;27527:13;-1:-1:-1;;;;;27517:23:0;:6;-1:-1:-1;;;;;27517:23:0;;;27471:69;27467:420;;;27559:17;;-1:-1:-1;;;27559:17:0;;;;27556:107;;;27595:30;:53;;;27556:107;27681:17;;-1:-1:-1;;;27681:17:0;;;;27677:133;;27741:53;27789:4;27741:43;27770:13;;27741:24;27751:13;27741:9;:24::i;:53::-;27717:78;;27677:133;27839:36;27854:20;27839:14;:36::i;:::-;-1:-1:-1;;;;;27954:26:0;;27909:12;27954:26;;;:18;:26;;;;;;27924:4;;27954:26;;;:59;;-1:-1:-1;;;;;;27984:29:0;;;;;;:18;:29;;;;;;;;27954:59;27951:105;;;-1:-1:-1;28039:5:0;27951:105;28101:24;;28078:65;;28093:6;;-1:-1:-1;;;;;28101:24:0;28127:6;28135:7;28078:14;:65::i;:::-;26961:1190;;;28177:7;:5;:7::i;:::-;-1:-1:-1;;;;;28167:17:0;:6;-1:-1:-1;;;;;28167:17:0;;;:44;;;;;28198:13;-1:-1:-1;;;;;28188:23:0;:6;-1:-1:-1;;;;;28188:23:0;;;28167:44;:71;;;;-1:-1:-1;;;;;;28215:23:0;;28233:4;28215:23;;28167:71;:109;;;;;28260:15;-1:-1:-1;;;;;28242:34:0;:6;-1:-1:-1;;;;;28242:34:0;;;28167:109;28163:397;;;28328:12;;28318:6;:22;;28310:74;;;;-1:-1:-1;;;28310:74:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28443:12;;28407:32;28432:6;28407:20;28417:9;28407;:20::i;:::-;:24;;:32::i;:::-;:48;;28399:90;;;;;-1:-1:-1;;;28399:90:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;28512:8;;-1:-1:-1;;;28512:8:0;;;;28504:44;;;;;-1:-1:-1;;;28504:44:0;;;;;;;;;;;;-1:-1:-1;;;28504:44:0;;;;;;;;;;;;;;;28581:28;28612:24;28630:4;28612:9;:24::i;:::-;28581:55;;28676:12;;28652:20;:36;28649:112;;-1:-1:-1;28737:12:0;;28649:112;28778:16;;-1:-1:-1;;;28778:16:0;;;;28777:17;:42;;;;-1:-1:-1;28798:21:0;;-1:-1:-1;;;28798:21:0;;;;28777:42;:69;;;;;28833:13;-1:-1:-1;;;;;28823:23:0;:6;-1:-1:-1;;;;;28823:23:0;;;28777:69;28773:418;;;28865:17;;-1:-1:-1;;;28865:17:0;;;;28862:107;;;28901:30;:53;;;28862:107;29000:17;;-1:-1:-1;;;29000:17:0;;;;28996:132;;29060:52;29108:3;29060:43;29089:13;;29060:24;29070:13;29060:9;:24::i;:52::-;29036:77;;28996:132;29143:36;29158:20;29143:14;:36::i;:::-;-1:-1:-1;;;;;29258:26:0;;29213:12;29258:26;;;:18;:26;;;;;;29228:4;;29258:26;;;:59;;-1:-1:-1;;;;;;29288:29:0;;;;;;:18;:29;;;;;;;;29258:59;29255:105;;;-1:-1:-1;29343:5:0;29255:105;29382:50;29397:6;29405:9;29416:6;29424:7;29382:14;:50::i;:::-;26440:3000;;;;;:::o;1579:192::-;1665:7;1701:12;1693:6;;;;1685:29;;;;-1:-1:-1;;;1685:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1737:5:0;;;1579:192::o;37092:163::-;37133:7;37154:15;37171;37190:19;:17;:19::i;:::-;37153:56;;-1:-1:-1;37153:56:0;-1:-1:-1;37227:20:0;37153:56;;37227:11;:20::i;:::-;37220:27;;;;37092:163;:::o;2047:132::-;2105:7;2132:39;2136:1;2139;2132:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;2125:46;2047:132;-1:-1:-1;;;2047:132:0:o;1246:181::-;1304:7;1336:5;;;1360:6;;;;1352:46;;;;;-1:-1:-1;;;1352:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;35787:518;35846:7;35855;35864;35873;35882;35891;35912:23;35937:12;35951:30;35985:63;35997:7;36006;;36015:32;36033:13;;36015;;:17;;:32;;;;:::i;:::-;35985:11;:63::i;:::-;35911:137;;;;;;36059:19;36081:10;:8;:10::i;:::-;36059:32;;36103:15;36120:23;36145:12;36161:39;36173:7;36182:4;36188:11;36161;:39::i;:::-;36102:98;;-1:-1:-1;36102:98:0;-1:-1:-1;36102:98:0;-1:-1:-1;36251:15:0;;-1:-1:-1;36268:4:0;;-1:-1:-1;36274:22:0;;-1:-1:-1;;;;;35787:518:0;;;;;;;:::o;1435:136::-;1493:7;1520:43;1524:1;1527;1520:43;;;;;;;;;;;;;;;;;:3;:43::i;30287:495::-;30387:16;;;30401:1;30387:16;;;30363:21;30387:16;;;;;30363:21;30387:16;;;;;;;;;;-1:-1:-1;30387:16:0;30363:40;;30432:4;30414;30419:1;30414:7;;;;;;;;;;;;;:23;-1:-1:-1;;;;;30414:23:0;;;-1:-1:-1;;;;;30414:23:0;;;;;30458:15;-1:-1:-1;;;;;30458:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30458:22:0;30448:7;;:4;;30453:1;;30448:7;;;;;;;;;;;:32;-1:-1:-1;;;;;30448:32:0;;;-1:-1:-1;;;;;30448:32:0;;;;;30493:62;30510:4;30525:15;30543:11;30493:8;:62::i;:::-;30578:15;-1:-1:-1;;;;;30578:66:0;;30659:11;30685:1;30701:4;30728;30748:15;30578:196;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;30578:196:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30287:495;;:::o;31171:268::-;31248:13;:6;31259:1;31248:10;:13::i;:::-;31234:10;:28;;;31287:22;;:6;;:10;:22::i;:::-;31273:10;:37;31330:24;;31364:10;;31330:45;;-1:-1:-1;;;;;31330:24:0;;;;:45;;;;;31364:10;31330:24;:45;:24;:45;31364:10;31330:24;:45;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31386:24:0;;31420:10;;31386:45;;-1:-1:-1;;;;;31386:24:0;;;;:45;;;;;31420:10;31386:24;:45;:24;:45;31420:10;31386:24;:45;;;;;;;;;;;;;;;;;;;1779:260;1837:7;1871:6;1867:47;;-1:-1:-1;1901:1:0;1894:8;;1867:47;1938:5;;;1942:1;1938;:5;:1;1962:5;;;;;:10;1954:56;;;;-1:-1:-1;;;1954:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29450:829;16598:16;:23;;-1:-1:-1;;;;16598:23:0;-1:-1:-1;;;16598:23:0;;;29619:13:::1;::::0;16598:16;29601:13;16598:23;;29557:77:::1;::::0;29601:32:::1;::::0;:17:::1;:32::i;:::-;29582:13;::::0;29557:39:::1;::::0;:20;;:24:::1;:39::i;:77::-;29535:99:::0;-1:-1:-1;29645:17:0::1;29665:37;:20:::0;29535:99;29665:24:::1;:37::i;:::-;29645:57:::0;-1:-1:-1;29725:12:0::1;29740:16;29645:57:::0;29754:1:::1;29740:13;:16::i;:::-;29725:31:::0;-1:-1:-1;29767:17:0::1;29787:19;:9:::0;29725:31;29787:13:::1;:19::i;:::-;29767:39:::0;-1:-1:-1;29844:21:0::1;29819:22;29901:21;:4:::0;29910:11;29901:8:::1;:21::i;:::-;29878:44;;29933:30;29950:12;29933:16;:30::i;:::-;29977:16;29996:41;:21;30022:14:::0;29996:25:::1;:41::i;:::-;29977:60:::0;-1:-1:-1;30048:18:0::1;30069:36;30092:12:::0;30069:18:::1;29977:60:::0;30082:4;30069:12:::1;:18::i;:36::-;30048:57;;30118:35;30131:9;30142:10;30118:12;:35::i;:::-;30171:43;::::0;;;;;::::1;::::0;::::1;::::0;;;;;;;;;;;::::1;::::0;;;;;;;::::1;30227:44;30246:24;:8:::0;30259:10;30246:12:::1;:24::i;:::-;30227:18;:44::i;:::-;-1:-1:-1::0;;16644:16:0;:24;;-1:-1:-1;;;;16644:24:0;;;-1:-1:-1;;;;;;;29450:829:0:o;31932:819::-;32044:7;32040:40;;32066:14;:12;:14::i;:::-;-1:-1:-1;;;;;32097:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;32121:22:0;;;;;;:11;:22;;;;;;;;32120:23;32097:46;32093:597;;;32160:48;32182:6;32190:9;32201:6;32160:21;:48::i;:::-;32093:597;;;-1:-1:-1;;;;;32231:19:0;;;;;;:11;:19;;;;;;;;32230:20;:46;;;;-1:-1:-1;;;;;;32254:22:0;;;;;;:11;:22;;;;;;;;32230:46;32226:464;;;32293:46;32313:6;32321:9;32332:6;32293:19;:46::i;32226:464::-;-1:-1:-1;;;;;32362:19:0;;;;;;:11;:19;;;;;;;;32361:20;:47;;;;-1:-1:-1;;;;;;32386:22:0;;;;;;:11;:22;;;;;;;;32385:23;32361:47;32357:333;;;32425:44;32443:6;32451:9;32462:6;32425:17;:44::i;32357:333::-;-1:-1:-1;;;;;32491:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;32514:22:0;;;;;;:11;:22;;;;;;;;32491:45;32487:203;;;32553:48;32575:6;32583:9;32594:6;32553:21;:48::i;32487:203::-;32634:44;32652:6;32660:9;32671:6;32634:17;:44::i;:::-;32706:7;32702:41;;32728:15;:13;:15::i;:::-;31932:819;;;;:::o;37263:555::-;37360:7;;37396;;37313;;;;;37414:289;37438:9;:16;37434:20;;37414:289;;;37504:7;37480;:21;37488:9;37498:1;37488:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;37488:12:0;37480:21;;;;;;;;;;;;;:31;;:66;;;37539:7;37515;:21;37523:9;37533:1;37523:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;37523:12:0;37515:21;;;;;;;;;;;;;:31;37480:66;37476:97;;;37556:7;;37565;;37548:25;;;;;;;;;37476:97;37598:34;37610:7;:21;37618:9;37628:1;37618:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;37618:12:0;37610:21;;;;;;;;;;;;;37598:7;;:11;:34::i;:::-;37588:44;;37657:34;37669:7;:21;37677:9;37687:1;37677:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;37677:12:0;37669:21;;;;;;;;;;;;;37657:7;;:11;:34::i;:::-;37647:44;-1:-1:-1;37456:3:0;;37414:289;;;-1:-1:-1;37739:7:0;;37727;;:20;;:11;:20::i;:::-;37717:7;:30;37713:61;;;37757:7;;37766;;37749:25;;;;;;;;37713:61;37793:7;;-1:-1:-1;37802:7:0;-1:-1:-1;37263:555:0;;;:::o;2193:278::-;2279:7;2314:12;2307:5;2299:28;;;;-1:-1:-1;;;2299:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2338:9;2354:1;2350;:5;;;;;;;2193:278;-1:-1:-1;;;;;2193:278:0:o;36313:429::-;36420:7;;;;36473:28;36497:3;36473:19;:7;36485:6;36473:11;:19::i;:28::-;36458:43;-1:-1:-1;36512:30:0;36545:43;36584:3;36545:34;:7;36557:21;36545:11;:34::i;:43::-;36512:76;-1:-1:-1;36599:23:0;36625:44;36647:21;36625:17;:7;36637:4;36625:11;:17::i;:::-;:21;;:44::i;:::-;36599:70;36705:4;;-1:-1:-1;36711:22:0;;-1:-1:-1;36313:429:0;;-1:-1:-1;;;;;36313:429:0:o;36750:334::-;36845:7;;;;36901:24;:7;36913:11;36901;:24::i;:::-;36883:42;-1:-1:-1;36936:12:0;36951:21;:4;36960:11;36951:8;:21::i;:::-;36936:36;-1:-1:-1;36983:23:0;37009:17;:7;36936:36;37009:11;:17::i;:::-;37045:7;;;;-1:-1:-1;37071:4:0;;-1:-1:-1;36750:334:0;;-1:-1:-1;;;;;36750:334:0:o;30790:373::-;30880:62;30897:4;30912:15;30930:11;30880:8;:62::i;:::-;30955:15;-1:-1:-1;;;;;30955:31:0;;30994:9;31027:4;31047:11;31073:1;31090;31107:7;:5;:7::i;:::-;31129:15;30955:200;;;;;;;;;;;;;-1:-1:-1;;;;;30955:200:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;30955:200:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25443:332;25489:7;;:12;:34;;;;-1:-1:-1;25505:13:0;;:18;25489:34;:56;;;;-1:-1:-1;25527:13:0;;:18;25489:56;25486:68;;;25547:7;;25486:68;25584:7;;;25566:15;:25;25626:13;;;25602:21;:37;25674:13;;;25650:21;:37;-1:-1:-1;25700:11:0;;;;25722:17;;;;25750;25443:332;:::o;33906:590::-;34009:15;34026:23;34051:12;34065:23;34090:12;34104:27;34135:19;34146:7;34135:10;:19::i;:::-;-1:-1:-1;;;;;34183:15:0;;;;;;:7;:15;;;;;;34008:146;;-1:-1:-1;34008:146:0;;-1:-1:-1;34008:146:0;;-1:-1:-1;34008:146:0;-1:-1:-1;34008:146:0;-1:-1:-1;34008:146:0;-1:-1:-1;34183:28:0;;34203:7;34183:19;:28::i;:::-;-1:-1:-1;;;;;34165:15:0;;;;;;:7;:15;;;;;;;;:46;;;;34240:7;:15;;;;:28;;34260:7;34240:19;:28::i;:::-;-1:-1:-1;;;;;34222:15:0;;;;;;;:7;:15;;;;;;:46;;;;34300:18;;;;;;;:39;;34323:15;34300:22;:39::i;:::-;-1:-1:-1;;;;;34279:18:0;;;;;;:7;:18;;;;;:60;34350:44;34374:19;34350:23;:44::i;:::-;34405:23;34417:4;34423;34405:11;:23::i;:::-;34461:9;-1:-1:-1;;;;;34444:44:0;34453:6;-1:-1:-1;;;;;34444:44:0;;34472:15;34444:44;;;;;;;;;;;;;;;;;;33906:590;;;;;;;;;:::o;33296:602::-;33397:15;33414:23;33439:12;33453:23;33478:12;33492:27;33523:19;33534:7;33523:10;:19::i;:::-;-1:-1:-1;;;;;33571:15:0;;;;;;:7;:15;;;;;;33396:146;;-1:-1:-1;33396:146:0;;-1:-1:-1;33396:146:0;;-1:-1:-1;33396:146:0;-1:-1:-1;33396:146:0;-1:-1:-1;33396:146:0;-1:-1:-1;33571:28:0;;33396:146;33571:19;:28::i;:::-;-1:-1:-1;;;;;33553:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;33631:18;;;;;:7;:18;;;;;:39;;33654:15;33631:22;:39::i;:::-;-1:-1:-1;;;;;33610:18:0;;;;;;:7;:18;;;;;;;;:60;;;;33702:7;:18;;;;:39;;33725:15;33702:22;:39::i;32759:529::-;32858:15;32875:23;32900:12;32914:23;32939:12;32953:27;32984:19;32995:7;32984:10;:19::i;:::-;-1:-1:-1;;;;;33032:15:0;;;;;;:7;:15;;;;;;32857:146;;-1:-1:-1;32857:146:0;;-1:-1:-1;32857:146:0;;-1:-1:-1;32857:146:0;-1:-1:-1;32857:146:0;-1:-1:-1;32857:146:0;-1:-1:-1;33032:28:0;;32857:146;33032:19;:28::i;34504:661::-;34607:15;34624:23;34649:12;34663:23;34688:12;34702:27;34733:19;34744:7;34733:10;:19::i;:::-;-1:-1:-1;;;;;34781:15:0;;;;;;:7;:15;;;;;;34606:146;;-1:-1:-1;34606:146:0;;-1:-1:-1;34606:146:0;;-1:-1:-1;34606:146:0;-1:-1:-1;34606:146:0;-1:-1:-1;34606:146:0;-1:-1:-1;34781:28:0;;34801:7;34781:19;:28::i;:::-;-1:-1:-1;;;;;34763:15:0;;;;;;:7;:15;;;;;;;;:46;;;;34838:7;:15;;;;:28;;34858:7;34838:19;:28::i;25783:173::-;25837:15;;25827:7;:25;25879:21;;25863:13;:37;25927:21;;25911:13;:37;25783:173::o;35173:408::-;35254:19;35276:10;:8;:10::i;:::-;35254:32;-1:-1:-1;35297:27:0;35327:36;:19;35254:32;35327:23;:36::i;:::-;35415:4;35399:22;;;;:7;:22;;;;;;35297:66;;-1:-1:-1;35399:47:0;;35297:66;35399:26;:47::i;:::-;35390:4;35374:22;;;;:7;:22;;;;;;;;:72;;;;35460:11;:26;;;;;;35457:116;;;35542:4;35526:22;;;;:7;:22;;;;;;:47;;35553:19;35526:26;:47::i;:::-;35517:4;35501:22;;;;:7;:22;;;;;:72;35457:116;35173:408;;;:::o;35589:147::-;35667:7;;:17;;35679:4;35667:11;:17::i;:::-;35657:7;:27;35708:10;;:20;;35723:4;35708:14;:20::i;:::-;35695:10;:33;-1:-1:-1;;35589:147:0:o

Swarm Source

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