Token Doshi

 

Overview [ERC-20]

Price
$0.00 @ 0.000000 Eth (-0.79%)
Fully Diluted Market Cap
Max Total Supply:
1,000,000,000,000,000,000 DOSHI

Holders:
834 ( -0.120%)

Transfers:
-

Loading
[ Download CSV Export  ] 
Loading
[ Download CSV Export  ] 
Loading

OVERVIEW

The Doshi project is the first of a multi chapter adventure storyline combining the two historic coins Doge and Shiba Inu. Doshi is all encompassing, providing a P2E game, designed for users to play, experience, explore, and monetize their content with others who are not in the same physical space.

Market

Volume (24H):$175.51
Market Capitalization:$0.00
Circulating Supply:0.00 DOSHI
Market Data Source: Coinmarketcap

# Exchange Pair Price  24H Volume % Volume
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Doshi

Compiler Version
v0.8.12+commit.f00d7308

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-03-22
*/

// SPDX-License-Identifier: Unlicensed

pragma solidity ^0.8.12;

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

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

    function _msgData() internal view virtual returns (bytes memory) {
        this;
        return msg.data;
    }
}

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

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (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 Ownable is Context {
    address private _owner;
    address private _previousOwner;
    uint256 private _lockTime;

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

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

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

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

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

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

    function geUnlockTime() public view returns (uint256) {
        return _lockTime;
    }

    function lock(uint256 time) public virtual onlyOwner {
        _previousOwner = _owner;
        _owner = address(0);
        _lockTime = block.timestamp + time;
        emit OwnershipTransferred(_owner, address(0));
    }
    
    function unlock() public virtual {
        require(_previousOwner == msg.sender, "You don't have permission to unlock");
        require(block.timestamp > _lockTime , "Contract is locked until 7 days");
        emit OwnershipTransferred(_owner, _previousOwner);
        _owner = _previousOwner;
    }
}

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

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

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

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

interface IAirdrop {
    function airdrop(address recipient, uint256 amount) external;
}

contract Doshi is Context, IERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;
    
    IUniswapV2Router02 private immutable uniswapV2Router;

    mapping (address => uint) private cooldown;

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

    mapping (address => bool) private _isExcludedFromFee;
    mapping (address => bool) private _isExcluded;
    mapping (address => bool) private botWallets;

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

    address[] private _excluded;
    
    bool botscantrade = false;
    bool private canTrade = false;
    bool private inSwapAndLiquify;
    bool private swapAndLiquifyEnabled = true;
    bool private cooldownEnabled = true;

    uint8 private _decimals = 9;

    uint256 private constant MAX = ~uint256(0);
    uint256 private _tTotal = 1e18 * 10**(_decimals);
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;
    uint256 private _taxFee = 1;
    uint256 private _previousTaxFee = _taxFee;
    uint256 private marketingFeePercent = 73;
    uint256 private developmentFeePercent = 10;
    uint256 private _liquidityFee = 11;
    uint256 private _previousLiquidityFee = _liquidityFee;
    uint256 private _maxTxAmount = 5e15 * 10**(_decimals);
    uint256 private _numTokensSellToAddToLiquidity = 3e14 * 10**(_decimals);
    uint256 private _maxWalletSize = 2e16 * 10**(_decimals);
    uint256 private tradingActiveBlock = 0;
    uint256 private blocksToBlacklist = 10;

    string private _name = "Doshi";
    string private _symbol = "DOSHI";

    address payable private marketingWallet;
    address payable private developmentWallet;
    address payable private liquidityWallet;
    address private immutable uniswapV2Pair;
    
    event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap);
    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiqudity);
    
    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }
    
    constructor (address addr1, address addr2, address addr3) {
        _rOwned[_msgSender()] = _rTotal;
        
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);

        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());
        
        uniswapV2Router = _uniswapV2Router;

        marketingWallet = payable(addr1);
        developmentWallet = payable(addr2);
        liquidityWallet = payable(addr3);
        
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        _isExcludedFromFee[addr1] = true;
        _isExcludedFromFee[addr2] = true;
        _isExcludedFromFee[addr3] = true;
        
        emit Transfer(address(0), _msgSender(), _tTotal);
    }

    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 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 totalFees() public view returns (uint256) {
        return _tFeeTotal;
    }
    
    function airdrop(address recipient, uint256 amount) external onlyOwner() {
        removeAllFee();
        _transfer(_msgSender(), recipient, amount * 10**9);
        restoreAllFee();
    }
    
    function airdropInternal(address recipient, uint256 amount) internal {
        removeAllFee();
        _transfer(_msgSender(), recipient, amount);
        restoreAllFee();
    }
    
    function airdropArray(address[] calldata newholders, uint256[] calldata amounts) external onlyOwner(){
        uint256 iterator = 0;
        require(newholders.length == amounts.length, "must be the same length");
        while(iterator < newholders.length){
            airdropInternal(newholders[iterator], amounts[iterator] * 10**9);
            iterator += 1;
        }
    }

    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) public onlyOwner() {
        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 _transferBothExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _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);        
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function setExcludedFromFees(address[] memory accounts, bool exempt) public onlyOwner {
        for (uint i = 0; i < accounts.length; i++) {
            _isExcludedFromFee[accounts[i]] = exempt;
        }
    }
    
    function setBots(address[] memory accounts, bool exempt) public onlyOwner {
        for (uint i = 0; i < accounts.length; i++) {
            botWallets[accounts[i]] = exempt;
        }
    }

    function setMarketingFeePercent(uint256 fee) public onlyOwner {
        marketingFeePercent = fee;
    }

    function setMarketingWallet(address walletAddress) public onlyOwner {
        _isExcludedFromFee[marketingWallet] = false;
        marketingWallet = payable(walletAddress);
        _isExcludedFromFee[marketingWallet] = true;
    }

    function setLiquidityWallet(address walletAddress) public onlyOwner {
        _isExcludedFromFee[liquidityWallet] = false;
        liquidityWallet = payable(walletAddress);
        _isExcludedFromFee[liquidityWallet] = true;
    }
    
    function setTaxFeePercent(uint256 taxFee) external onlyOwner() {
        require(taxFee < 10, "Tax fee cannot be more than 10%");
        _taxFee = taxFee;
    }
    
    function setLiquidityFeePercent(uint256 liquidityFee) external onlyOwner() {
        require(liquidityFee < 30, "Tax fee cannot be more than 30%");
        _liquidityFee = liquidityFee;
    }

    function _setMaxWalletSizePercent(uint256 maxWalletSize) external onlyOwner {
        _maxWalletSize = _tTotal.mul(maxWalletSize).div(10**3);
    }
   
    function setMaxTxAmount(uint256 maxTxAmount) external onlyOwner() {
        require(maxTxAmount > (1e15 * 10**(_decimals)), "Max Tx Amount cannot be less 0.1%");
        _maxTxAmount = maxTxAmount;
    }
    
    function setSwapThresholdAmount(uint256 SwapThresholdAmount) external onlyOwner() {
        require(SwapThresholdAmount > (1e14 * 10**(_decimals)), "Swap Threshold Amount cannot be less 0.01%");
        _numTokensSellToAddToLiquidity = SwapThresholdAmount;
    }
    
    function claimTokens() public onlyOwner {
        marketingWallet.transfer(address(this).balance);
    }
    
    function claimOtherTokens(IERC20 tokenAddress, address walletaddress) external onlyOwner() {
        tokenAddress.transfer(walletaddress, tokenAddress.balanceOf(address(this)));
    }
    
    function clearStuckBalance(address payable walletaddress) external onlyOwner() {
        walletaddress.transfer(address(this).balance);
    }
    
    function getBotWalletStatus(address botwallet) public view returns (bool) {
        return botWallets[botwallet];
    }
    
    function allowtrading() external onlyOwner() {
        canTrade = true;
        tradingActiveBlock = block.number;
    }

    function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }

    function setCooldownEnabled(bool onoff) external onlyOwner() {
        cooldownEnabled = onoff;
    }

    function setBlocksToBlacklist(uint256 blocks) public onlyOwner {
        blocksToBlacklist = blocks;
    }

    function manualswap() external onlyOwner {
        uint256 contractBalance = balanceOf(address(this));
        swapTokensForEth(contractBalance);
    }
    
    function manualsend() external onlyOwner {
        uint256 contractETHBalance = address(this).balance;
        sendETHToFee(contractETHBalance);
    }

    function withdrawStuckETH() external onlyOwner {
        bool success;
        (success,) = address(msg.sender).call{value: address(this).balance}("");
    }
    
    receive() external payable {}

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

    function _getValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256, uint256, uint256) {
        (uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getTValues(tAmount);
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, tLiquidity, _getRate());
        return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tLiquidity);
    }

    function _getTValues(uint256 tAmount) private view returns (uint256, uint256, uint256) {
        uint256 tFee = calculateTaxFee(tAmount);
        uint256 tLiquidity = calculateLiquidityFee(tAmount);
        uint256 tTransferAmount = tAmount.sub(tFee).sub(tLiquidity);
        return (tTransferAmount, tFee, tLiquidity);
    }

    function _getRValues(uint256 tAmount, uint256 tFee, uint256 tLiquidity, uint256 currentRate) private pure returns (uint256, uint256, uint256) {
        uint256 rAmount = tAmount.mul(currentRate);
        uint256 rFee = tFee.mul(currentRate);
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        uint256 rTransferAmount = rAmount.sub(rFee).sub(rLiquidity);
        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 _takeLiquidity(uint256 tLiquidity) private {
        uint256 currentRate =  _getRate();
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity);
        if(_isExcluded[address(this)])
            _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity);
    }
    
    function calculateTaxFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_taxFee).div(
            10**2
        );
    }

    function calculateLiquidityFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_liquidityFee).div(
            10**2
        );
    }
    
    function removeAllFee() private {
        if(_taxFee == 0 && _liquidityFee == 0) return;
        
        _previousTaxFee = _taxFee;
        _previousLiquidityFee = _liquidityFee;
        
        _taxFee = 0;
        _liquidityFee = 0;
    }
    
    function restoreAllFee() private {
        _taxFee = _previousTaxFee;
        _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 from, address to, uint256 amount) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");

        if (cooldownEnabled) {
            if (to != address(uniswapV2Router) && to != address(uniswapV2Pair)) {
                require(cooldown[tx.origin] < block.number - 1 && cooldown[to] < block.number - 1, "_transfer: Transfer Delay enabled.  Try again later.");
                cooldown[tx.origin] = block.number;
                cooldown[to] = block.number;
            }
        }

        if(from != owner() && to != owner()) {
            require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");
        }

        uint256 contractTokenBalance = balanceOf(address(this));
        
        if(contractTokenBalance >= _maxTxAmount) {
            contractTokenBalance = _maxTxAmount;
        }
        
        bool overMinTokenBalance = contractTokenBalance >= _numTokensSellToAddToLiquidity;
        if (overMinTokenBalance && !inSwapAndLiquify && from != uniswapV2Pair && swapAndLiquifyEnabled) {
            contractTokenBalance = _numTokensSellToAddToLiquidity;
            swapAndLiquify(contractTokenBalance);
        }
        
        bool takeFee = true;
        
        if(_isExcludedFromFee[from] || _isExcludedFromFee[to]){
            takeFee = false;
        }

        if (takeFee) {
            if (to != uniswapV2Pair) {
                require(amount + balanceOf(to) <= _maxWalletSize, "Recipient exceeds max wallet size.");
            }
        }
        
        _tokenTransfer(from,to,amount,takeFee);
    }

    function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap {
        uint256 half = contractTokenBalance.div(2);
        uint256 otherHalf = contractTokenBalance.sub(half);
        
        uint256 initialBalance = address(this).balance;
        
        swapTokensForEth(half);

        uint256 newBalance = address(this).balance.sub(initialBalance);
        uint256 marketingshare = newBalance.mul(marketingFeePercent).div(100);
        uint256 developmentshare = newBalance.mul(developmentFeePercent).div(100);

        marketingWallet.transfer(marketingshare);
        developmentWallet.transfer(developmentshare);

        newBalance -= (marketingshare + developmentshare);
        
        addLiquidity(otherHalf, newBalance);
        
        emit SwapAndLiquify(half, newBalance, otherHalf);
    }

    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, liquidityWallet, block.timestamp);
    }
        
    function sendETHToFee(uint256 amount) private {
        marketingWallet.transfer(amount.div(2));
        developmentWallet.transfer(amount.div(2));
    }
    
    function _tokenTransfer(address sender, address recipient, uint256 amount,bool takeFee) private {
        if(!canTrade) {
            require(sender == owner());
        }
        
        if(botWallets[sender] || botWallets[recipient]){
            require(botscantrade, "go away bot.");
        }
        
        if(!takeFee) {
            removeAllFee();
        } else {

            if(tradingActiveBlock + blocksToBlacklist >= block.number) {
                uint256 fees = amount.mul(99).div(100);
            
                if(fees > 0) {
                    _transferSuperStandard(sender, address(this), fees);
                }
            
                amount -= fees;
            }
        }
        
        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 tLiquidity) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferSuperStandard(address sender, address recipient, uint256 tAmount) private {
        _rOwned[sender] = _rOwned[sender].sub(tAmount);
        _rOwned[recipient] = _rOwned[recipient].add(tAmount);
        emit Transfer(sender, recipient, tAmount);
    }

    function _transferToExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);           
        _takeLiquidity(tLiquidity);
        _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 tLiquidity) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);   
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"addr1","type":"address"},{"internalType":"address","name":"addr2","type":"address"},{"internalType":"address","name":"addr3","type":"address"}],"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":[{"internalType":"uint256","name":"maxWalletSize","type":"uint256"}],"name":"_setMaxWalletSizePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"airdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"newholders","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"airdropArray","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":[],"name":"allowtrading","outputs":[],"stateMutability":"nonpayable","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":[{"internalType":"contract IERC20","name":"tokenAddress","type":"address"},{"internalType":"address","name":"walletaddress","type":"address"}],"name":"claimOtherTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"walletaddress","type":"address"}],"name":"clearStuckBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"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":[],"name":"geUnlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"botwallet","type":"address"}],"name":"getBotWalletStatus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":[{"internalType":"uint256","name":"time","type":"uint256"}],"name":"lock","outputs":[],"stateMutability":"nonpayable","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":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"blocks","type":"uint256"}],"name":"setBlocksToBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setBots","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"onoff","type":"bool"}],"name":"setCooldownEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setExcludedFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"liquidityFee","type":"uint256"}],"name":"setLiquidityFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"walletAddress","type":"address"}],"name":"setLiquidityWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"fee","type":"uint256"}],"name":"setMarketingFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"walletAddress","type":"address"}],"name":"setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxAmount","type":"uint256"}],"name":"setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"SwapThresholdAmount","type":"uint256"}],"name":"setSwapThresholdAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxFee","type":"uint256"}],"name":"setTaxFeePercent","outputs":[],"stateMutability":"nonpayable","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":"unlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawStuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c0604052600b805465ffffff00ffff1916650901010000001790819055620000379060ff6501000000000090910416600a62000664565b6200004b90670de0b6b3a76400006200067c565b600c8190556200005e906000196200069e565b6200006c90600019620006c1565b600d556001600f55600f546010556049601155600a601255600b601355601354601455600b60059054906101000a900460ff16600a620000ad919062000664565b620000c0906611c37937e080006200067c565b601555600b54620000df9065010000000000900460ff16600a62000664565b620000f290660110d9316ec0006200067c565b601655600b54620001119065010000000000900460ff16600a62000664565b620001249066470de4df8200006200067c565b6017556000601855600a60195560408051808201909152600580825264446f73686960d81b60209092019182526200015f91601a91620004a9565b5060408051808201909152600580825264444f53484960d81b60209092019182526200018e91601b91620004a9565b503480156200019c57600080fd5b50604051620041a0380380620041a0833981016040819052620001bf91620006f8565b600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600d543360009081526004602081815260409283902093909355815163c45a015560e01b81529151737a250d5630b4cf539739df2c5dacb4c659f2488d93849363c45a01559381810193918290030181865afa15801562000265573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200028b919062000742565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002d9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002ff919062000742565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156200034d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000373919062000742565b6001600160a01b0390811660a052818116608052601c80546001600160a01b031990811687841617909155601d80548216868416179055601e8054909116918416919091179055600160066000620003d36000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055308152600690935281832080548516600190811790915588821684528284208054861682179055878216845282842080548616821790559086168352912080549092161790556200044f3390565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600c546040516200049791815260200190565b60405180910390a3505050506200079d565b828054620004b79062000760565b90600052602060002090601f016020900481019282620004db576000855562000526565b82601f10620004f657805160ff191683800117855562000526565b8280016001018555821562000526579182015b828111156200052657825182559160200191906001019062000509565b506200053492915062000538565b5090565b5b8082111562000534576000815560010162000539565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620005a65781600019048211156200058a576200058a6200054f565b808516156200059857918102915b93841c93908002906200056a565b509250929050565b600082620005bf575060016200065e565b81620005ce575060006200065e565b8160018114620005e75760028114620005f25762000612565b60019150506200065e565b60ff8411156200060657620006066200054f565b50506001821b6200065e565b5060208310610133831016604e8410600b841016171562000637575081810a6200065e565b62000643838362000565565b80600019048211156200065a576200065a6200054f565b0290505b92915050565b60006200067560ff841683620005ae565b9392505050565b60008160001904831182151516156200069957620006996200054f565b500290565b600082620006bc57634e487b7160e01b600052601260045260246000fd5b500690565b600082821015620006d657620006d66200054f565b500390565b80516001600160a01b0381168114620006f357600080fd5b919050565b6000806000606084860312156200070e57600080fd5b6200071984620006db565b92506200072960208501620006db565b91506200073960408501620006db565b90509250925092565b6000602082840312156200075557600080fd5b6200067582620006db565b600181811c908216806200077557607f821691505b602082108114156200079757634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a0516139ac620007f460003960008181611fa40152818161218a015261223a015260008181611f670152818161260c015281816126c50152818161270101528181612da80152612e1001526139ac6000f3fe6080604052600436106102975760003560e01c806370a082311161015a578063a9059cbb116100c1578063dd4670641161007a578063dd467064146107fd578063dd62ed3e1461081d578063e6f7ef4d14610863578063ec28438a14610883578063f2fde38b146108a3578063f5648a4f146108c357600080fd5b8063a9059cbb14610753578063af2ce61414610773578063b6c5232414610793578063c3c8cd80146107a8578063c49b9a80146107bd578063d4a3883f146107dd57600080fd5b80638ee88c53116101135780638ee88c53146106b457806395d89b41146106d45780639c0db5f3146106e9578063a457c2d714610709578063a633423114610729578063a69df4b51461073e57600080fd5b806370a08231146105de578063715018a6146105fe578063764d72bf1461061357806388f82020146106335780638ba4cc3c1461066c5780638da5cb5b1461068c57600080fd5b806339509351116101fe57806352390c02116101b757806352390c02146104f75780635342acb4146105175780635932ead1146105505780635d098b381461057057806360d48489146105905780636fc3eaec146105c957600080fd5b806339509351146104425780633ae7dc20146104625780633bd5d173146104825780634549b039146104a2578063457c194c146104c257806348c54b9d146104e257600080fd5b806323b872dd1161025057806323b872dd14610374578063296f0a0c1461039457806329e04b4a146103b45780632d838119146103d4578063313ce567146103f45780633685d4191461042257600080fd5b8063061c82d0146102a357806306fdde03146102c5578063095ea7b3146102f0578063105222f91461032057806313114a9d1461034057806318160ddd1461035f57600080fd5b3661029e57005b600080fd5b3480156102af57600080fd5b506102c36102be366004613291565b6108d8565b005b3480156102d157600080fd5b506102da610960565b6040516102e791906132aa565b60405180910390f35b3480156102fc57600080fd5b5061031061030b366004613324565b6109f2565b60405190151581526020016102e7565b34801561032c57600080fd5b506102c361033b36600461337f565b610a09565b34801561034c57600080fd5b50600e545b6040519081526020016102e7565b34801561036b57600080fd5b50600c54610351565b34801561038057600080fd5b5061031061038f366004613456565b610a9f565b3480156103a057600080fd5b506102c36103af366004613497565b610b08565b3480156103c057600080fd5b506102c36103cf366004613291565b610b82565b3480156103e057600080fd5b506103516103ef366004613291565b610c3c565b34801561040057600080fd5b50600b5465010000000000900460ff1660405160ff90911681526020016102e7565b34801561042e57600080fd5b506102c361043d366004613497565b610cc0565b34801561044e57600080fd5b5061031061045d366004613324565b610e77565b34801561046e57600080fd5b506102c361047d3660046134b4565b610ead565b34801561048e57600080fd5b506102c361049d366004613291565b610fb8565b3480156104ae57600080fd5b506103516104bd3660046134ed565b6110a2565b3480156104ce57600080fd5b506102c36104dd366004613291565b61112f565b3480156104ee57600080fd5b506102c361115e565b34801561050357600080fd5b506102c3610512366004613497565b6111c4565b34801561052357600080fd5b50610310610532366004613497565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561055c57600080fd5b506102c361056b366004613512565b611317565b34801561057c57600080fd5b506102c361058b366004613497565b611361565b34801561059c57600080fd5b506103106105ab366004613497565b6001600160a01b031660009081526008602052604090205460ff1690565b3480156105d557600080fd5b506102c36113db565b3480156105ea57600080fd5b506103516105f9366004613497565b61140f565b34801561060a57600080fd5b506102c361146e565b34801561061f57600080fd5b506102c361062e366004613497565b6114d0565b34801561063f57600080fd5b5061031061064e366004613497565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561067857600080fd5b506102c3610687366004613324565b61152f565b34801561069857600080fd5b506000546040516001600160a01b0390911681526020016102e7565b3480156106c057600080fd5b506102c36106cf366004613291565b61158a565b3480156106e057600080fd5b506102da611609565b3480156106f557600080fd5b506102c361070436600461337f565b611618565b34801561071557600080fd5b50610310610724366004613324565b6116a9565b34801561073557600080fd5b506102c36116f8565b34801561074a57600080fd5b506102c3611737565b34801561075f57600080fd5b5061031061076e366004613324565b61183d565b34801561077f57600080fd5b506102c361078e366004613291565b61184a565b34801561079f57600080fd5b50600254610351565b3480156107b457600080fd5b506102c361189b565b3480156107c957600080fd5b506102c36107d8366004613512565b6118db565b3480156107e957600080fd5b506102c36107f836600461357b565b61195d565b34801561080957600080fd5b506102c3610818366004613291565b611a50565b34801561082957600080fd5b506103516108383660046134b4565b6001600160a01b03918216600090815260096020908152604080832093909416825291909152205490565b34801561086f57600080fd5b506102c361087e366004613291565b611ad5565b34801561088f57600080fd5b506102c361089e366004613291565b611b04565b3480156108af57600080fd5b506102c36108be366004613497565b611bb6565b3480156108cf57600080fd5b506102c3611c8e565b6000546001600160a01b0316331461090b5760405162461bcd60e51b8152600401610902906135e7565b60405180910390fd5b600a811061095b5760405162461bcd60e51b815260206004820152601f60248201527f546178206665652063616e6e6f74206265206d6f7265207468616e20313025006044820152606401610902565b600f55565b6060601a805461096f9061361c565b80601f016020809104026020016040519081016040528092919081815260200182805461099b9061361c565b80156109e85780601f106109bd576101008083540402835291602001916109e8565b820191906000526020600020905b8154815290600101906020018083116109cb57829003601f168201915b5050505050905090565b60006109ff338484611d05565b5060015b92915050565b6000546001600160a01b03163314610a335760405162461bcd60e51b8152600401610902906135e7565b60005b8251811015610a9a578160066000858481518110610a5657610a56613657565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580610a9281613683565b915050610a36565b505050565b6000610aac848484611e2a565b610afe8433610af98560405180606001604052806028815260200161390a602891396001600160a01b038a16600090815260096020908152604080832033845290915290205491906122f4565b611d05565b5060019392505050565b6000546001600160a01b03163314610b325760405162461bcd60e51b8152600401610902906135e7565b601e80546001600160a01b03908116600090815260066020526040808220805460ff1990811690915584546001600160a01b03191695909316948517909355928352912080549091166001179055565b6000546001600160a01b03163314610bac5760405162461bcd60e51b8152600401610902906135e7565b600b54610bc69065010000000000900460ff16600a613782565b610bd690655af3107a4000613791565b8111610c375760405162461bcd60e51b815260206004820152602a60248201527f53776170205468726573686f6c6420416d6f756e742063616e6e6f74206265206044820152696c65737320302e30312560b01b6064820152608401610902565b601655565b6000600d54821115610ca35760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610902565b6000610cad61232e565b9050610cb98382612351565b9392505050565b6000546001600160a01b03163314610cea5760405162461bcd60e51b8152600401610902906135e7565b6001600160a01b03811660009081526007602052604090205460ff16610d525760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610902565b60005b600a54811015610e7357816001600160a01b0316600a8281548110610d7c57610d7c613657565b6000918252602090912001546001600160a01b03161415610e6157600a8054610da7906001906137b0565b81548110610db757610db7613657565b600091825260209091200154600a80546001600160a01b039092169183908110610de357610de3613657565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600582526040808220829055600790925220805460ff19169055600a805480610e3b57610e3b6137c7565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610e6b81613683565b915050610d55565b5050565b3360008181526009602090815260408083206001600160a01b038716845290915281205490916109ff918590610af99086612393565b6000546001600160a01b03163314610ed75760405162461bcd60e51b8152600401610902906135e7565b6040516370a0823160e01b81523060048201526001600160a01b0383169063a9059cbb90839083906370a0823190602401602060405180830381865afa158015610f25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f4991906137dd565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015610f94573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a9a91906137f6565b3360008181526007602052604090205460ff161561102d5760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b6064820152608401610902565b6000611038836123f2565b505050506001600160a01b03841660009081526004602052604090205491925061106491905082612441565b6001600160a01b038316600090815260046020526040902055600d5461108a9082612441565b600d55600e5461109a9084612393565b600e55505050565b6000600c548311156110f65760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610902565b81611115576000611106846123f2565b50939550610a03945050505050565b6000611120846123f2565b50929550610a03945050505050565b6000546001600160a01b031633146111595760405162461bcd60e51b8152600401610902906135e7565b601155565b6000546001600160a01b031633146111885760405162461bcd60e51b8152600401610902906135e7565b601c546040516001600160a01b03909116904780156108fc02916000818181858888f193505050501580156111c1573d6000803e3d6000fd5b50565b6000546001600160a01b031633146111ee5760405162461bcd60e51b8152600401610902906135e7565b6001600160a01b03811660009081526007602052604090205460ff16156112575760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610902565b6001600160a01b038116600090815260046020526040902054156112b1576001600160a01b03811660009081526004602052604090205461129790610c3c565b6001600160a01b0382166000908152600560205260409020555b6001600160a01b03166000818152600760205260408120805460ff19166001908117909155600a805491820181559091527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a80180546001600160a01b0319169091179055565b6000546001600160a01b031633146113415760405162461bcd60e51b8152600401610902906135e7565b600b80549115156401000000000264ff0000000019909216919091179055565b6000546001600160a01b0316331461138b5760405162461bcd60e51b8152600401610902906135e7565b601c80546001600160a01b03908116600090815260066020526040808220805460ff1990811690915584546001600160a01b03191695909316948517909355928352912080549091166001179055565b6000546001600160a01b031633146114055760405162461bcd60e51b8152600401610902906135e7565b476111c181612483565b6001600160a01b03811660009081526007602052604081205460ff161561144c57506001600160a01b031660009081526005602052604090205490565b6001600160a01b038216600090815260046020526040902054610a0390610c3c565b6000546001600160a01b031633146114985760405162461bcd60e51b8152600401610902906135e7565b600080546040516001600160a01b0390911690600080516020613932833981519152908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146114fa5760405162461bcd60e51b8152600401610902906135e7565b6040516001600160a01b038216904780156108fc02916000818181858888f19350505050158015610e73573d6000803e3d6000fd5b6000546001600160a01b031633146115595760405162461bcd60e51b8152600401610902906135e7565b611561612508565b611579338361157484633b9aca00613791565b611e2a565b610e73601054600f55601454601355565b6000546001600160a01b031633146115b45760405162461bcd60e51b8152600401610902906135e7565b601e81106116045760405162461bcd60e51b815260206004820152601f60248201527f546178206665652063616e6e6f74206265206d6f7265207468616e20333025006044820152606401610902565b601355565b6060601b805461096f9061361c565b6000546001600160a01b031633146116425760405162461bcd60e51b8152600401610902906135e7565b60005b8251811015610a9a57816008600085848151811061166557611665613657565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff1916911515919091179055806116a181613683565b915050611645565b60006109ff3384610af985604051806060016040528060258152602001613952602591393360009081526009602090815260408083206001600160a01b038d16845290915290205491906122f4565b6000546001600160a01b031633146117225760405162461bcd60e51b8152600401610902906135e7565b600b805461ff00191661010017905543601855565b6001546001600160a01b0316331461179d5760405162461bcd60e51b815260206004820152602360248201527f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6044820152626f636b60e81b6064820152608401610902565b60025442116117ee5760405162461bcd60e51b815260206004820152601f60248201527f436f6e7472616374206973206c6f636b656420756e74696c20372064617973006044820152606401610902565b600154600080546040516001600160a01b03938416939091169160008051602061393283398151915291a3600154600080546001600160a01b0319166001600160a01b03909216919091179055565b60006109ff338484611e2a565b6000546001600160a01b031633146118745760405162461bcd60e51b8152600401610902906135e7565b6118956103e861188f83600c5461253690919063ffffffff16565b90612351565b60175550565b6000546001600160a01b031633146118c55760405162461bcd60e51b8152600401610902906135e7565b60006118d03061140f565b90506111c1816125b5565b6000546001600160a01b031633146119055760405162461bcd60e51b8152600401610902906135e7565b600b805482151563010000000263ff000000199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599061195290831515815260200190565b60405180910390a150565b6000546001600160a01b031633146119875760405162461bcd60e51b8152600401610902906135e7565b60008382146119d85760405162461bcd60e51b815260206004820152601760248201527f6d757374206265207468652073616d65206c656e6774680000000000000000006044820152606401610902565b83811015611a4957611a378585838181106119f5576119f5613657565b9050602002016020810190611a0a9190613497565b848484818110611a1c57611a1c613657565b90506020020135633b9aca00611a329190613791565b61276d565b611a42600182613813565b90506119d8565b5050505050565b6000546001600160a01b03163314611a7a5760405162461bcd60e51b8152600401610902906135e7565b60008054600180546001600160a01b03199081166001600160a01b03841617909155169055611aa98142613813565b600255600080546040516001600160a01b0390911690600080516020613932833981519152908390a350565b6000546001600160a01b03163314611aff5760405162461bcd60e51b8152600401610902906135e7565b601955565b6000546001600160a01b03163314611b2e5760405162461bcd60e51b8152600401610902906135e7565b600b54611b489065010000000000900460ff16600a613782565b611b599066038d7ea4c68000613791565b8111611bb15760405162461bcd60e51b815260206004820152602160248201527f4d617820547820416d6f756e742063616e6e6f74206265206c65737320302e316044820152602560f81b6064820152608401610902565b601555565b6000546001600160a01b03163314611be05760405162461bcd60e51b8152600401610902906135e7565b6001600160a01b038116611c455760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610902565b600080546040516001600160a01b038085169392169160008051602061393283398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611cb85760405162461bcd60e51b8152600401610902906135e7565b604051600090339047908381818185875af1925050503d8060008114611cfa576040519150601f19603f3d011682016040523d82523d6000602084013e611cff565b606091505b50505050565b6001600160a01b038316611d675760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610902565b6001600160a01b038216611dc85760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610902565b6001600160a01b0383811660008181526009602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b038316611e8e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610902565b6001600160a01b038216611ef05760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610902565b60008111611f525760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610902565b600b54640100000000900460ff16156120b5577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614158015611fd957507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b156120b557611fe96001436137b0565b32600090815260036020526040902054108015612027575061200c6001436137b0565b6001600160a01b038316600090815260036020526040902054105b6120905760405162461bcd60e51b815260206004820152603460248201527f5f7472616e736665723a205472616e736665722044656c617920656e61626c65604482015273321710102a393c9030b3b0b4b7103630ba32b91760611b6064820152608401610902565b3260009081526003602052604080822043908190556001600160a01b03851683529120555b6000546001600160a01b038481169116148015906120e157506000546001600160a01b03838116911614155b15612149576015548111156121495760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610902565b60006121543061140f565b9050601554811061216457506015545b601654811080159081906121815750600b5462010000900460ff16155b80156121bf57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b031614155b80156121d45750600b546301000000900460ff165b156121e75760165491506121e782612780565b6001600160a01b03851660009081526006602052604090205460019060ff168061222957506001600160a01b03851660009081526006602052604090205460ff165b15612232575060005b80156122e0577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b0316146122e05760175461227d8661140f565b6122879086613813565b11156122e05760405162461bcd60e51b815260206004820152602260248201527f526563697069656e742065786365656473206d61782077616c6c65742073697a604482015261329760f11b6064820152608401610902565b6122ec868686846128ed565b505050505050565b600081848411156123185760405162461bcd60e51b815260040161090291906132aa565b50600061232584866137b0565b95945050505050565b600080600061233b612b60565b909250905061234a8282612351565b9250505090565b6000610cb983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612ce2565b6000806123a08385613813565b905083811015610cb95760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610902565b60008060008060008060008060006124098a612d10565b92509250925060008060006124278d868661242261232e565b612d52565b919f909e50909c50959a5093985091965092945050505050565b6000610cb983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506122f4565b601c546001600160a01b03166108fc61249d836002612351565b6040518115909202916000818181858888f193505050501580156124c5573d6000803e3d6000fd5b50601d546001600160a01b03166108fc6124e0836002612351565b6040518115909202916000818181858888f19350505050158015610e73573d6000803e3d6000fd5b600f541580156125185750601354155b1561251f57565b600f80546010556013805460145560009182905555565b60008261254557506000610a03565b60006125518385613791565b90508261255e858361382b565b14610cb95760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610902565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106125ea576125ea613657565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612668573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061268c919061384d565b8160018151811061269f5761269f613657565b60200260200101906001600160a01b031690816001600160a01b0316815250506126ea307f000000000000000000000000000000000000000000000000000000000000000084611d05565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac9479061273f90859060009086903090429060040161386a565b600060405180830381600087803b15801561275957600080fd5b505af11580156122ec573d6000803e3d6000fd5b612775612508565b611579338383611e2a565b600b805462ff0000191662010000179055600061279e826002612351565b905060006127ac8383612441565b9050476127b8836125b5565b60006127c44783612441565b905060006127e2606461188f6011548561253690919063ffffffff16565b90506000612800606461188f6012548661253690919063ffffffff16565b601c546040519192506001600160a01b03169083156108fc029084906000818181858888f1935050505015801561283b573d6000803e3d6000fd5b50601d546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015612876573d6000803e3d6000fd5b506128818183613813565b61288b90846137b0565b92506128978584612da2565b60408051878152602081018590529081018690527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15050600b805462ff0000191690555050505050565b600b54610100900460ff16612916576000546001600160a01b0385811691161461291657600080fd5b6001600160a01b03841660009081526008602052604090205460ff168061295557506001600160a01b03831660009081526008602052604090205460ff165b1561299b57600b5460ff1661299b5760405162461bcd60e51b815260206004820152600c60248201526b33b79030bbb0bc903137ba1760a11b6044820152606401610902565b806129ad576129a8612508565b6129f6565b436019546018546129be9190613813565b106129f65760006129d5606461188f856063612536565b905080156129e8576129e8853083612e81565b6129f281846137b0565b9250505b6001600160a01b03841660009081526007602052604090205460ff168015612a3757506001600160a01b03831660009081526007602052604090205460ff16155b15612a4c57612a47848484612f27565b612b4a565b6001600160a01b03841660009081526007602052604090205460ff16158015612a8d57506001600160a01b03831660009081526007602052604090205460ff165b15612a9d57612a4784848461304d565b6001600160a01b03841660009081526007602052604090205460ff16158015612adf57506001600160a01b03831660009081526007602052604090205460ff16155b15612aef57612a478484846130f6565b6001600160a01b03841660009081526007602052604090205460ff168015612b2f57506001600160a01b03831660009081526007602052604090205460ff165b15612b3f57612a4784848461313a565b612b4a8484846130f6565b80611cff57611cff601054600f55601454601355565b600d54600c546000918291825b600a54811015612cb2578260046000600a8481548110612b8f57612b8f613657565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612bfa57508160056000600a8481548110612bd357612bd3613657565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15612c1057600d54600c54945094505050509091565b612c5660046000600a8481548110612c2a57612c2a613657565b60009182526020808320909101546001600160a01b031683528201929092526040019020548490612441565b9250612c9e60056000600a8481548110612c7257612c72613657565b60009182526020808320909101546001600160a01b031683528201929092526040019020548390612441565b915080612caa81613683565b915050612b6d565b50600c54600d54612cc291612351565b821015612cd957600d54600c549350935050509091565b90939092509050565b60008183612d035760405162461bcd60e51b815260040161090291906132aa565b506000612325848661382b565b600080600080612d1f856131ad565b90506000612d2c866131c9565b90506000612d4482612d3e8986612441565b90612441565b979296509094509092505050565b6000808080612d618886612536565b90506000612d6f8887612536565b90506000612d7d8888612536565b90506000612d8f82612d3e8686612441565b939b939a50919850919650505050505050565b612dcd307f000000000000000000000000000000000000000000000000000000000000000084611d05565b601e5460405163f305d71960e01b81523060048201526024810184905260006044820181905260648201526001600160a01b0391821660848201524260a48201527f00000000000000000000000000000000000000000000000000000000000000009091169063f305d71990839060c40160606040518083038185885af1158015612e5c573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611a4991906138db565b6001600160a01b038316600090815260046020526040902054612ea49082612441565b6001600160a01b038085166000908152600460205260408082209390935590841681522054612ed39082612393565b6001600160a01b0380841660008181526004602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611e1d9085815260200190565b600080600080600080612f39876123f2565b6001600160a01b038f16600090815260056020526040902054959b50939950919750955093509150612f6b9088612441565b6001600160a01b038a16600090815260056020908152604080832093909355600490522054612f9a9087612441565b6001600160a01b03808b1660009081526004602052604080822093909355908a1681522054612fc99086612393565b6001600160a01b038916600090815260046020526040902055612feb816131e5565b612ff5848361326d565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161303a91815260200190565b60405180910390a3505050505050505050565b60008060008060008061305f876123f2565b6001600160a01b038f16600090815260046020526040902054959b509399509197509550935091506130919087612441565b6001600160a01b03808b16600090815260046020908152604080832094909455918b168152600590915220546130c79084612393565b6001600160a01b038916600090815260056020908152604080832093909355600490522054612fc99086612393565b600080600080600080613108876123f2565b6001600160a01b038f16600090815260046020526040902054959b50939950919750955093509150612f9a9087612441565b60008060008060008061314c876123f2565b6001600160a01b038f16600090815260056020526040902054959b5093995091975095509350915061317e9088612441565b6001600160a01b038a166000908152600560209081526040808320939093556004905220546130919087612441565b6000610a03606461188f600f548561253690919063ffffffff16565b6000610a03606461188f6013548561253690919063ffffffff16565b60006131ef61232e565b905060006131fd8383612536565b3060009081526004602052604090205490915061321a9082612393565b3060009081526004602090815260408083209390935560079052205460ff1615610a9a57306000908152600560205260409020546132589084612393565b30600090815260056020526040902055505050565b600d5461327a9083612441565b600d55600e5461328a9082612393565b600e555050565b6000602082840312156132a357600080fd5b5035919050565b600060208083528351808285015260005b818110156132d7578581018301518582016040015282016132bb565b818111156132e9576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b03811681146111c157600080fd5b803561331f816132ff565b919050565b6000806040838503121561333757600080fd5b8235613342816132ff565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b80151581146111c157600080fd5b803561331f81613366565b6000806040838503121561339257600080fd5b823567ffffffffffffffff808211156133aa57600080fd5b818501915085601f8301126133be57600080fd5b81356020828211156133d2576133d2613350565b8160051b604051601f19603f830116810181811086821117156133f7576133f7613350565b60405292835281830193508481018201928984111561341557600080fd5b948201945b8386101561343a5761342b86613314565b8552948201949382019361341a565b96506134499050878201613374565b9450505050509250929050565b60008060006060848603121561346b57600080fd5b8335613476816132ff565b92506020840135613486816132ff565b929592945050506040919091013590565b6000602082840312156134a957600080fd5b8135610cb9816132ff565b600080604083850312156134c757600080fd5b82356134d2816132ff565b915060208301356134e2816132ff565b809150509250929050565b6000806040838503121561350057600080fd5b8235915060208301356134e281613366565b60006020828403121561352457600080fd5b8135610cb981613366565b60008083601f84011261354157600080fd5b50813567ffffffffffffffff81111561355957600080fd5b6020830191508360208260051b850101111561357457600080fd5b9250929050565b6000806000806040858703121561359157600080fd5b843567ffffffffffffffff808211156135a957600080fd5b6135b58883890161352f565b909650945060208701359150808211156135ce57600080fd5b506135db8782880161352f565b95989497509550505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c9082168061363057607f821691505b6020821081141561365157634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006000198214156136975761369761366d565b5060010190565b600181815b808511156136d95781600019048211156136bf576136bf61366d565b808516156136cc57918102915b93841c93908002906136a3565b509250929050565b6000826136f057506001610a03565b816136fd57506000610a03565b8160018114613713576002811461371d57613739565b6001915050610a03565b60ff84111561372e5761372e61366d565b50506001821b610a03565b5060208310610133831016604e8410600b841016171561375c575081810a610a03565b613766838361369e565b806000190482111561377a5761377a61366d565b029392505050565b6000610cb960ff8416836136e1565b60008160001904831182151516156137ab576137ab61366d565b500290565b6000828210156137c2576137c261366d565b500390565b634e487b7160e01b600052603160045260246000fd5b6000602082840312156137ef57600080fd5b5051919050565b60006020828403121561380857600080fd5b8151610cb981613366565b600082198211156138265761382661366d565b500190565b60008261384857634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121561385f57600080fd5b8151610cb9816132ff565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156138ba5784516001600160a01b031683529383019391830191600101613895565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156138f057600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63658be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e045524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220629849fcbd4c1ec5761fc8e03cfec68109c2c8d9bd0f4e10aa45ca1a1e8ed85564736f6c634300080c00330000000000000000000000008d01c526ce09d2ba628c8cb56d7b392fe846b60700000000000000000000000086e0cc43749283a806a2841826fbb21110368265000000000000000000000000c7570e217e15ed850a1cbbfc5b4bc6fa43224e1c

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

0000000000000000000000008d01c526ce09d2ba628c8cb56d7b392fe846b60700000000000000000000000086e0cc43749283a806a2841826fbb21110368265000000000000000000000000c7570e217e15ed850a1cbbfc5b4bc6fa43224e1c

-----Decoded View---------------
Arg [0] : addr1 (address): 0x8d01c526Ce09d2Ba628C8cB56D7B392FE846B607
Arg [1] : addr2 (address): 0x86e0CC43749283A806a2841826FBb21110368265
Arg [2] : addr3 (address): 0xC7570E217e15ed850a1cbbfC5B4bc6fA43224e1c

-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 0000000000000000000000008d01c526ce09d2ba628c8cb56d7b392fe846b607
Arg [1] : 00000000000000000000000086e0cc43749283a806a2841826fbb21110368265
Arg [2] : 000000000000000000000000c7570e217e15ed850a1cbbfc5b4bc6fa43224e1c


Deployed ByteCode Sourcemap

13967:22958:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23596:164;;;;;;;;;;-1:-1:-1;23596:164:0;;;;;:::i;:::-;;:::i;:::-;;17070:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17982:161;;;;;;;;;;-1:-1:-1;17982:161:0;;;;;:::i;:::-;;:::i;:::-;;;1561:14:1;;1554:22;1536:41;;1524:2;1509:18;17982:161:0;1396:187:1;22566:214:0;;;;;;;;;;-1:-1:-1;22566:214:0;;;;;:::i;:::-;;:::i;19103:87::-;;;;;;;;;;-1:-1:-1;19172:10:0;;19103:87;;;3318:25:1;;;3306:2;3291:18;19103:87:0;3172:177:1;17347:95:0;;;;;;;;;;-1:-1:-1;17427:7:0;;17347:95;;18151:313;;;;;;;;;;-1:-1:-1;18151:313:0;;;;;:::i;:::-;;:::i;23350:234::-;;;;;;;;;;-1:-1:-1;23350:234:0;;;;;:::i;:::-;;:::i;24352:265::-;;;;;;;;;;-1:-1:-1;24352:265:0;;;;;:::i;:::-;;:::i;20823:253::-;;;;;;;;;;-1:-1:-1;20823:253:0;;;;;:::i;:::-;;:::i;17256:83::-;;;;;;;;;;-1:-1:-1;17322:9:0;;;;;;;17256:83;;4239:4:1;4227:17;;;4209:36;;4197:2;4182:18;17256:83:0;4067:184:1;21425:479:0;;;;;;;;;;-1:-1:-1;21425:479:0;;;;;:::i;:::-;;:::i;18472:218::-;;;;;;;;;;-1:-1:-1;18472:218:0;;;;;:::i;:::-;;:::i;24747:185::-;;;;;;;;;;-1:-1:-1;24747:185:0;;;;;:::i;:::-;;:::i;19994:377::-;;;;;;;;;;-1:-1:-1;19994:377:0;;;;;:::i;:::-;;:::i;20379:436::-;;;;;;;;;;-1:-1:-1;20379:436:0;;;;;:::i;:::-;;:::i;22994:106::-;;;;;;;;;;-1:-1:-1;22994:106:0;;;;;:::i;:::-;;:::i;24629:::-;;;;;;;;;;;;;:::i;21084:333::-;;;;;;;;;;-1:-1:-1;21084:333:0;;;;;:::i;:::-;;:::i;29512:123::-;;;;;;;;;;-1:-1:-1;29512:123:0;;;;;:::i;:::-;-1:-1:-1;;;;;29600:27:0;29576:4;29600:27;;;:18;:27;;;;;;;;;29512:123;25542:103;;;;;;;;;;-1:-1:-1;25542:103:0;;;;;:::i;:::-;;:::i;23108:234::-;;;;;;;;;;-1:-1:-1;23108:234:0;;;;;:::i;:::-;;:::i;25099:121::-;;;;;;;;;;-1:-1:-1;25099:121:0;;;;;:::i;:::-;-1:-1:-1;;;;;25191:21:0;25167:4;25191:21;;;:10;:21;;;;;;;;;25099:121;25935:153;;;;;;;;;;;;;:::i;17450:198::-;;;;;;;;;;-1:-1:-1;17450:198:0;;;;;:::i;:::-;;:::i;5558:148::-;;;;;;;;;;;;;:::i;24944:143::-;;;;;;;;;;-1:-1:-1;24944:143:0;;;;;:::i;:::-;;:::i;18975:120::-;;;;;;;;;;-1:-1:-1;18975:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;19067:20:0;19043:4;19067:20;;;:11;:20;;;;;;;;;18975:120;19202:193;;;;;;;;;;-1:-1:-1;19202:193:0;;;;;:::i;:::-;;:::i;5344:79::-;;;;;;;;;;-1:-1:-1;5382:7:0;5409:6;5344:79;;-1:-1:-1;;;;;5409:6:0;;;5628:51:1;;5616:2;5601:18;5344:79:0;5482:203:1;23772:194:0;;;;;;;;;;-1:-1:-1;23772:194:0;;;;;:::i;:::-;;:::i;17161:87::-;;;;;;;;;;;;;:::i;22792:194::-;;;;;;;;;;-1:-1:-1;22792:194:0;;;;;:::i;:::-;;:::i;18698:269::-;;;;;;;;;;-1:-1:-1;18698:269:0;;;;;:::i;:::-;;:::i;25232:123::-;;;;;;;;;;;;;:::i;6301:305::-;;;;;;;;;;;;;:::i;17656:167::-;;;;;;;;;;-1:-1:-1;17656:167:0;;;;;:::i;:::-;;:::i;23974:149::-;;;;;;;;;;-1:-1:-1;23974:149:0;;;;;:::i;:::-;;:::i;5966:89::-;;;;;;;;;;-1:-1:-1;6038:9:0;;5966:89;;25769:154;;;;;;;;;;;;;:::i;25363:171::-;;;;;;;;;;-1:-1:-1;25363:171:0;;;;;:::i;:::-;;:::i;19600:386::-;;;;;;;;;;-1:-1:-1;19600:386:0;;;;;:::i;:::-;;:::i;6063:226::-;;;;;;;;;;-1:-1:-1;6063:226:0;;;;;:::i;:::-;;:::i;17831:143::-;;;;;;;;;;-1:-1:-1;17831:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;17939:18:0;;;17912:7;17939:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;17831:143;25653:108;;;;;;;;;;-1:-1:-1;25653:108:0;;;;;:::i;:::-;;:::i;24134:206::-;;;;;;;;;;-1:-1:-1;24134:206:0;;;;;:::i;:::-;;:::i;5714:244::-;;;;;;;;;;-1:-1:-1;5714:244:0;;;;;:::i;:::-;;:::i;26096:160::-;;;;;;;;;;;;;:::i;23596:164::-;5471:6;;-1:-1:-1;;;;;5471:6:0;2413:10;5471:22;5463:67;;;;-1:-1:-1;;;5463:67:0;;;;;;;:::i;:::-;;;;;;;;;23687:2:::1;23678:6;:11;23670:55;;;::::0;-1:-1:-1;;;23670:55:0;;7796:2:1;23670:55:0::1;::::0;::::1;7778:21:1::0;7835:2;7815:18;;;7808:30;7874:33;7854:18;;;7847:61;7925:18;;23670:55:0::1;7594:355:1::0;23670:55:0::1;23736:7;:16:::0;23596:164::o;17070:83::-;17107:13;17140:5;17133:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17070:83;:::o;17982:161::-;18057:4;18074:39;2413:10;18097:7;18106:6;18074:8;:39::i;:::-;-1:-1:-1;18131:4:0;17982:161;;;;;:::o;22566:214::-;5471:6;;-1:-1:-1;;;;;5471:6:0;2413:10;5471:22;5463:67;;;;-1:-1:-1;;;5463:67:0;;;;;;;:::i;:::-;22668:6:::1;22663:110;22684:8;:15;22680:1;:19;22663:110;;;22755:6;22721:18;:31;22740:8;22749:1;22740:11;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;22721:31:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;22721:31:0;:40;;-1:-1:-1;;22721:40:0::1;::::0;::::1;;::::0;;;::::1;::::0;;22701:3;::::1;::::0;::::1;:::i;:::-;;;;22663:110;;;;22566:214:::0;;:::o;18151:313::-;18249:4;18266:36;18276:6;18284:9;18295:6;18266:9;:36::i;:::-;18313:121;18322:6;2413:10;18344:89;18382:6;18344:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;18344:19:0;;;;;;:11;:19;;;;;;;;2413:10;18344:33;;;;;;;;;;:37;:89::i;:::-;18313:8;:121::i;:::-;-1:-1:-1;18452:4:0;18151:313;;;;;:::o;23350:234::-;5471:6;;-1:-1:-1;;;;;5471:6:0;2413:10;5471:22;5463:67;;;;-1:-1:-1;;;5463:67:0;;;;;;;:::i;:::-;23448:15:::1;::::0;;-1:-1:-1;;;;;23448:15:0;;::::1;23467:5;23429:35:::0;;;:18:::1;:35;::::0;;;;;:43;;-1:-1:-1;;23429:43:0;;::::1;::::0;;;23483:40;;-1:-1:-1;;;;;;23483:40:0::1;::::0;;;::::1;::::0;;::::1;::::0;;;23534:35;;;;;:42;;;;::::1;-1:-1:-1::0;23534:42:0::1;::::0;;23350:234::o;24352:265::-;5471:6;;-1:-1:-1;;;;;5471:6:0;2413:10;5471:22;5463:67;;;;-1:-1:-1;;;5463:67:0;;;;;;;:::i;:::-;24488:9:::1;::::0;24483:15:::1;::::0;24488:9;;::::1;;;24483:2;:15;:::i;:::-;24476:22;::::0;:4:::1;:22;:::i;:::-;24453:19;:46;24445:101;;;::::0;-1:-1:-1;;;24445:101:0;;10501:2:1;24445:101:0::1;::::0;::::1;10483:21:1::0;10540:2;10520:18;;;10513:30;10579:34;10559:18;;;10552:62;-1:-1:-1;;;10630:18:1;;;10623:40;10680:19;;24445:101:0::1;10299:406:1::0;24445:101:0::1;24557:30;:52:::0;24352:265::o;20823:253::-;20889:7;20928;;20917;:18;;20909:73;;;;-1:-1:-1;;;20909:73:0;;10912:2:1;20909:73:0;;;10894:21:1;10951:2;10931:18;;;10924:30;10990:34;10970:18;;;10963:62;-1:-1:-1;;;11041:18:1;;;11034:40;11091:19;;20909:73:0;10710:406:1;20909:73:0;20993:19;21016:10;:8;:10::i;:::-;20993:33;-1:-1:-1;21044:24:0;:7;20993:33;21044:11;:24::i;:::-;21037:31;20823:253;-1:-1:-1;;;20823:253:0:o;21425:479::-;5471:6;;-1:-1:-1;;;;;5471:6:0;2413:10;5471:22;5463:67;;;;-1:-1:-1;;;5463:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21507:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;21499:60;;;::::0;-1:-1:-1;;;21499:60:0;;11323:2:1;21499:60:0::1;::::0;::::1;11305:21:1::0;11362:2;11342:18;;;11335:30;11401:29;11381:18;;;11374:57;11448:18;;21499:60:0::1;11121:351:1::0;21499:60:0::1;21575:9;21570:327;21594:9;:16:::0;21590:20;::::1;21570:327;;;21652:7;-1:-1:-1::0;;;;;21636:23:0::1;:9;21646:1;21636:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;21636:12:0::1;:23;21632:254;;;21695:9;21705:16:::0;;:20:::1;::::0;21724:1:::1;::::0;21705:20:::1;:::i;:::-;21695:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;21680:9:::1;:12:::0;;-1:-1:-1;;;;;21695:31:0;;::::1;::::0;21690:1;;21680:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;21680:46:0::1;-1:-1:-1::0;;;;;21680:46:0;;::::1;;::::0;;21745:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;21784:11:::1;:20:::0;;;;:28;;-1:-1:-1;;21784:28:0::1;::::0;;21831:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;21831:15:0;;;;;-1:-1:-1;;;;;;21831:15:0::1;::::0;;;;;21570:327:::1;21425:479:::0;:::o;21632:254::-:1;21612:3:::0;::::1;::::0;::::1;:::i;:::-;;;;21570:327;;;;21425:479:::0;:::o;18472:218::-;2413:10;18560:4;18609:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;18609:34:0;;;;;;;;;;18560:4;;18577:83;;18600:7;;18609:50;;18648:10;18609:38;:50::i;24747:185::-;5471:6;;-1:-1:-1;;;;;5471:6:0;2413:10;5471:22;5463:67;;;;-1:-1:-1;;;5463:67:0;;;;;;;:::i;:::-;24886:37:::1;::::0;-1:-1:-1;;;24886:37:0;;24917:4:::1;24886:37;::::0;::::1;5628:51:1::0;-1:-1:-1;;;;;24849:21:0;::::1;::::0;::::1;::::0;24871:13;;24849:21;;24886:22:::1;::::0;5601:18:1;;24886:37:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24849:75;::::0;-1:-1:-1;;;;;;24849:75:0::1;::::0;;;;;;-1:-1:-1;;;;;12120:32:1;;;24849:75:0::1;::::0;::::1;12102:51:1::0;12169:18;;;12162:34;12075:18;;24849:75:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;19994:377::-:0;2413:10;20046:14;20095:19;;;:11;:19;;;;;;;;20094:20;20086:77;;;;-1:-1:-1;;;20086:77:0;;12659:2:1;20086:77:0;;;12641:21:1;12698:2;12678:18;;;12671:30;12737:34;12717:18;;;12710:62;-1:-1:-1;;;12788:18:1;;;12781:42;12840:19;;20086:77:0;12457:408:1;20086:77:0;20175:15;20199:19;20210:7;20199:10;:19::i;:::-;-1:-1:-1;;;;;;;;;20247:15:0;;;;;;:7;:15;;;;;;20174:44;;-1:-1:-1;20247:28:0;;:15;-1:-1:-1;20174:44:0;20247:19;:28::i;:::-;-1:-1:-1;;;;;20229:15:0;;;;;;:7;:15;;;;;:46;20296:7;;:20;;20308:7;20296:11;:20::i;:::-;20286:7;:30;20340:10;;:23;;20355:7;20340:14;:23::i;:::-;20327:10;:36;-1:-1:-1;;;19994:377:0:o;20379:436::-;20469:7;20508;;20497;:18;;20489:62;;;;-1:-1:-1;;;20489:62:0;;13072:2:1;20489:62:0;;;13054:21:1;13111:2;13091:18;;;13084:30;13150:33;13130:18;;;13123:61;13201:18;;20489:62:0;12870:355:1;20489:62:0;20567:17;20562:246;;20602:15;20626:19;20637:7;20626:10;:19::i;:::-;-1:-1:-1;20601:44:0;;-1:-1:-1;20660:14:0;;-1:-1:-1;;;;;20660:14:0;20562:246;20709:23;20740:19;20751:7;20740:10;:19::i;:::-;-1:-1:-1;20707:52:0;;-1:-1:-1;20774:22:0;;-1:-1:-1;;;;;20774:22:0;22994:106;5471:6;;-1:-1:-1;;;;;5471:6:0;2413:10;5471:22;5463:67;;;;-1:-1:-1;;;5463:67:0;;;;;;;:::i;:::-;23067:19:::1;:25:::0;22994:106::o;24629:::-;5471:6;;-1:-1:-1;;;;;5471:6:0;2413:10;5471:22;5463:67;;;;-1:-1:-1;;;5463:67:0;;;;;;;:::i;:::-;24680:15:::1;::::0;:47:::1;::::0;-1:-1:-1;;;;;24680:15:0;;::::1;::::0;24705:21:::1;24680:47:::0;::::1;;;::::0;:15:::1;:47:::0;:15;:47;24705:21;24680:15;:47;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;24629:106::o:0;21084:333::-;5471:6;;-1:-1:-1;;;;;5471:6:0;2413:10;5471:22;5463:67;;;;-1:-1:-1;;;5463:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21167:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;21166:21;21158:61;;;::::0;-1:-1:-1;;;21158:61:0;;11323:2:1;21158:61:0::1;::::0;::::1;11305:21:1::0;11362:2;11342:18;;;11335:30;11401:29;11381:18;;;11374:57;11448:18;;21158:61:0::1;11121:351:1::0;21158:61:0::1;-1:-1:-1::0;;;;;21233:16:0;::::1;21252:1;21233:16:::0;;;:7:::1;:16;::::0;;;;;:20;21230:108:::1;;-1:-1:-1::0;;;;;21309:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;21289:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;21270:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;21230:108:::1;-1:-1:-1::0;;;;;21348:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;21348:27:0::1;21371:4;21348:27:::0;;::::1;::::0;;;21386:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;21386:23:0::1;::::0;;::::1;::::0;;21084:333::o;25542:103::-;5471:6;;-1:-1:-1;;;;;5471:6:0;2413:10;5471:22;5463:67;;;;-1:-1:-1;;;5463:67:0;;;;;;;:::i;:::-;25614:15:::1;:23:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;25614:23:0;;::::1;::::0;;;::::1;::::0;;25542:103::o;23108:234::-;5471:6;;-1:-1:-1;;;;;5471:6:0;2413:10;5471:22;5463:67;;;;-1:-1:-1;;;5463:67:0;;;;;;;:::i;:::-;23206:15:::1;::::0;;-1:-1:-1;;;;;23206:15:0;;::::1;23225:5;23187:35:::0;;;:18:::1;:35;::::0;;;;;:43;;-1:-1:-1;;23187:43:0;;::::1;::::0;;;23241:40;;-1:-1:-1;;;;;;23241:40:0::1;::::0;;;::::1;::::0;;::::1;::::0;;;23292:35;;;;;:42;;;;::::1;-1:-1:-1::0;23292:42:0::1;::::0;;23108:234::o;25935:153::-;5471:6;;-1:-1:-1;;;;;5471:6:0;2413:10;5471:22;5463:67;;;;-1:-1:-1;;;5463:67:0;;;;;;;:::i;:::-;26016:21:::1;26048:32;26016:21:::0;26048:12:::1;:32::i;17450:198::-:0;-1:-1:-1;;;;;17540:20:0;;17516:7;17540:20;;;:11;:20;;;;;;;;17536:49;;;-1:-1:-1;;;;;;17569:16:0;;;;;:7;:16;;;;;;;17450:198::o;17536:49::-;-1:-1:-1;;;;;17623:16:0;;;;;;:7;:16;;;;;;17603:37;;:19;:37::i;5558:148::-;5471:6;;-1:-1:-1;;;;;5471:6:0;2413:10;5471:22;5463:67;;;;-1:-1:-1;;;5463:67:0;;;;;;;:::i;:::-;5665:1:::1;5649:6:::0;;5628:40:::1;::::0;-1:-1:-1;;;;;5649:6:0;;::::1;::::0;-1:-1:-1;;;;;;;;;;;5628:40:0;5665:1;;5628:40:::1;5696:1;5679:19:::0;;-1:-1:-1;;;;;;5679:19:0::1;::::0;;5558:148::o;24944:143::-;5471:6;;-1:-1:-1;;;;;5471:6:0;2413:10;5471:22;5463:67;;;;-1:-1:-1;;;5463:67:0;;;;;;;:::i;:::-;25034:45:::1;::::0;-1:-1:-1;;;;;25034:22:0;::::1;::::0;25057:21:::1;25034:45:::0;::::1;;;::::0;::::1;::::0;;;25057:21;25034:22;:45;::::1;;;;;;;;;;;;;::::0;::::1;;;;19202:193:::0;5471:6;;-1:-1:-1;;;;;5471:6:0;2413:10;5471:22;5463:67;;;;-1:-1:-1;;;5463:67:0;;;;;;;:::i;:::-;19286:14:::1;:12;:14::i;:::-;19311:50;2413:10:::0;19335:9;19346:14:::1;:6:::0;19355:5:::1;19346:14;:::i;:::-;19311:9;:50::i;:::-;19372:15;29429::::0;;29419:7;:25;29471:21;;29455:13;:37;29375:125;23772:194;5471:6;;-1:-1:-1;;;;;5471:6:0;2413:10;5471:22;5463:67;;;;-1:-1:-1;;;5463:67:0;;;;;;;:::i;:::-;23881:2:::1;23866:12;:17;23858:61;;;::::0;-1:-1:-1;;;23858:61:0;;13432:2:1;23858:61:0::1;::::0;::::1;13414:21:1::0;13471:2;13451:18;;;13444:30;13510:33;13490:18;;;13483:61;13561:18;;23858:61:0::1;13230:355:1::0;23858:61:0::1;23930:13;:28:::0;23772:194::o;17161:87::-;17200:13;17233:7;17226:14;;;;;:::i;22792:194::-;5471:6;;-1:-1:-1;;;;;5471:6:0;2413:10;5471:22;5463:67;;;;-1:-1:-1;;;5463:67:0;;;;;;;:::i;:::-;22882:6:::1;22877:102;22898:8;:15;22894:1;:19;22877:102;;;22961:6;22935:10;:23;22946:8;22955:1;22946:11;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;22935:23:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;22935:23:0;:32;;-1:-1:-1;;22935:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;22915:3;::::1;::::0;::::1;:::i;:::-;;;;22877:102;;18698:269:::0;18791:4;18808:129;2413:10;18831:7;18840:96;18879:15;18840:96;;;;;;;;;;;;;;;;;2413:10;18840:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;18840:34:0;;;;;;;;;;;;:38;:96::i;25232:123::-;5471:6;;-1:-1:-1;;;;;5471:6:0;2413:10;5471:22;5463:67;;;;-1:-1:-1;;;5463:67:0;;;;;;;:::i;:::-;25288:8:::1;:15:::0;;-1:-1:-1;;25288:15:0::1;;;::::0;;25335:12:::1;25314:18;:33:::0;25232:123::o;6301:305::-;6353:14;;-1:-1:-1;;;;;6353:14:0;6371:10;6353:28;6345:76;;;;-1:-1:-1;;;6345:76:0;;13792:2:1;6345:76:0;;;13774:21:1;13831:2;13811:18;;;13804:30;13870:34;13850:18;;;13843:62;-1:-1:-1;;;13921:18:1;;;13914:33;13964:19;;6345:76:0;13590:399:1;6345:76:0;6458:9;;6440:15;:27;6432:72;;;;-1:-1:-1;;;6432:72:0;;14196:2:1;6432:72:0;;;14178:21:1;14235:2;14215:18;;;14208:30;14274:33;14254:18;;;14247:61;14325:18;;6432:72:0;13994:355:1;6432:72:0;6549:14;;;6541:6;;6520:44;;-1:-1:-1;;;;;6549:14:0;;;;6541:6;;;;-1:-1:-1;;;;;;;;;;;6520:44:0;;6584:14;;;6575:23;;-1:-1:-1;;;;;;6575:23:0;-1:-1:-1;;;;;6584:14:0;;;6575:23;;;;;;6301:305::o;17656:167::-;17734:4;17751:42;2413:10;17775:9;17786:6;17751:9;:42::i;23974:149::-;5471:6;;-1:-1:-1;;;;;5471:6:0;2413:10;5471:22;5463:67;;;;-1:-1:-1;;;5463:67:0;;;;;;;:::i;:::-;24078:37:::1;24109:5;24078:26;24090:13;24078:7;;:11;;:26;;;;:::i;:::-;:30:::0;::::1;:37::i;:::-;24061:14;:54:::0;-1:-1:-1;23974:149:0:o;25769:154::-;5471:6;;-1:-1:-1;;;;;5471:6:0;2413:10;5471:22;5463:67;;;;-1:-1:-1;;;5463:67:0;;;;;;;:::i;:::-;25821:23:::1;25847:24;25865:4;25847:9;:24::i;:::-;25821:50;;25882:33;25899:15;25882:16;:33::i;25363:171::-:0;5471:6;;-1:-1:-1;;;;;5471:6:0;2413:10;5471:22;5463:67;;;;-1:-1:-1;;;5463:67:0;;;;;;;:::i;:::-;25440:21:::1;:32:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;25440:32:0;;::::1;;::::0;;25488:38:::1;::::0;::::1;::::0;::::1;::::0;25464:8;1561:14:1;1554:22;1536:41;;1524:2;1509:18;;1396:187;25488:38:0::1;;;;;;;;25363:171:::0;:::o;19600:386::-;5471:6;;-1:-1:-1;;;;;5471:6:0;2413:10;5471:22;5463:67;;;;-1:-1:-1;;;5463:67:0;;;;;;;:::i;:::-;19712:16:::1;19751:35:::0;;::::1;19743:71;;;::::0;-1:-1:-1;;;19743:71:0;;14556:2:1;19743:71:0::1;::::0;::::1;14538:21:1::0;14595:2;14575:18;;;14568:30;14634:25;14614:18;;;14607:53;14677:18;;19743:71:0::1;14354:347:1::0;19743:71:0::1;19831:28:::0;;::::1;19825:154;;;19875:64;19891:10;;19902:8;19891:20;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;19913:7;;19921:8;19913:17;;;;;;;:::i;:::-;;;;;;;19933:5;19913:25;;;;:::i;:::-;19875:15;:64::i;:::-;19954:13;19966:1;19954:13:::0;::::1;:::i;:::-;;;19825:154;;;19701:285;19600:386:::0;;;;:::o;6063:226::-;5471:6;;-1:-1:-1;;;;;5471:6:0;2413:10;5471:22;5463:67;;;;-1:-1:-1;;;5463:67:0;;;;;;;:::i;:::-;6144:6:::1;::::0;;;6127:23;;-1:-1:-1;;;;;;6127:23:0;;::::1;-1:-1:-1::0;;;;;6144:6:0;::::1;6127:23;::::0;;;6161:19:::1;::::0;;6203:22:::1;6221:4:::0;6203:15:::1;:22;:::i;:::-;6191:9;:34:::0;6278:1:::1;6262:6:::0;;6241:40:::1;::::0;-1:-1:-1;;;;;6262:6:0;;::::1;::::0;-1:-1:-1;;;;;;;;;;;6241:40:0;6278:1;;6241:40:::1;6063:226:::0;:::o;25653:108::-;5471:6;;-1:-1:-1;;;;;5471:6:0;2413:10;5471:22;5463:67;;;;-1:-1:-1;;;5463:67:0;;;;;;;:::i;:::-;25727:17:::1;:26:::0;25653:108::o;24134:206::-;5471:6;;-1:-1:-1;;;;;5471:6:0;2413:10;5471:22;5463:67;;;;-1:-1:-1;;;5463:67:0;;;;;;;:::i;:::-;24246:9:::1;::::0;24241:15:::1;::::0;24246:9;;::::1;;;24241:2;:15;:::i;:::-;24234:22;::::0;:4:::1;:22;:::i;:::-;24219:11;:38;24211:84;;;::::0;-1:-1:-1;;;24211:84:0;;15041:2:1;24211:84:0::1;::::0;::::1;15023:21:1::0;15080:2;15060:18;;;15053:30;15119:34;15099:18;;;15092:62;-1:-1:-1;;;15170:18:1;;;15163:31;15211:19;;24211:84:0::1;14839:397:1::0;24211:84:0::1;24306:12;:26:::0;24134:206::o;5714:244::-;5471:6;;-1:-1:-1;;;;;5471:6:0;2413:10;5471:22;5463:67;;;;-1:-1:-1;;;5463:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;5803:22:0;::::1;5795:73;;;::::0;-1:-1:-1;;;5795:73:0;;15443:2:1;5795:73:0::1;::::0;::::1;15425:21:1::0;15482:2;15462:18;;;15455:30;15521:34;15501:18;;;15494:62;-1:-1:-1;;;15572:18:1;;;15565:36;15618:19;;5795:73:0::1;15241:402:1::0;5795:73:0::1;5905:6;::::0;;5884:38:::1;::::0;-1:-1:-1;;;;;5884:38:0;;::::1;::::0;5905:6;::::1;::::0;-1:-1:-1;;;;;;;;;;;5884:38:0;::::1;5933:6;:17:::0;;-1:-1:-1;;;;;;5933:17:0::1;-1:-1:-1::0;;;;;5933:17:0;;;::::1;::::0;;;::::1;::::0;;5714:244::o;26096:160::-;5471:6;;-1:-1:-1;;;;;5471:6:0;2413:10;5471:22;5463:67;;;;-1:-1:-1;;;5463:67:0;;;;;;;:::i;:::-;26190:58:::1;::::0;26154:12:::1;::::0;26198:10:::1;::::0;26222:21:::1;::::0;26154:12;26190:58;26154:12;26190:58;26222:21;26198:10;26190:58:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;26096:160:0:o;29643:337::-;-1:-1:-1;;;;;29736:19:0;;29728:68;;;;-1:-1:-1;;;29728:68:0;;16060:2:1;29728:68:0;;;16042:21:1;16099:2;16079:18;;;16072:30;16138:34;16118:18;;;16111:62;-1:-1:-1;;;16189:18:1;;;16182:34;16233:19;;29728:68:0;15858:400:1;29728:68:0;-1:-1:-1;;;;;29815:21:0;;29807:68;;;;-1:-1:-1;;;29807:68:0;;16465:2:1;29807:68:0;;;16447:21:1;16504:2;16484:18;;;16477:30;16543:34;16523:18;;;16516:62;-1:-1:-1;;;16594:18:1;;;16587:32;16636:19;;29807:68:0;16263:398:1;29807:68:0;-1:-1:-1;;;;;29888:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;29940:32;;3318:25:1;;;29940:32:0;;3291:18:1;29940:32:0;;;;;;;;29643:337;;;:::o;29988:1799::-;-1:-1:-1;;;;;30076:18:0;;30068:68;;;;-1:-1:-1;;;30068:68:0;;16868:2:1;30068:68:0;;;16850:21:1;16907:2;16887:18;;;16880:30;16946:34;16926:18;;;16919:62;-1:-1:-1;;;16997:18:1;;;16990:35;17042:19;;30068:68:0;16666:401:1;30068:68:0;-1:-1:-1;;;;;30155:16:0;;30147:64;;;;-1:-1:-1;;;30147:64:0;;17274:2:1;30147:64:0;;;17256:21:1;17313:2;17293:18;;;17286:30;17352:34;17332:18;;;17325:62;-1:-1:-1;;;17403:18:1;;;17396:33;17446:19;;30147:64:0;17072:399:1;30147:64:0;30239:1;30230:6;:10;30222:64;;;;-1:-1:-1;;;30222:64:0;;17678:2:1;30222:64:0;;;17660:21:1;17717:2;17697:18;;;17690:30;17756:34;17736:18;;;17729:62;-1:-1:-1;;;17807:18:1;;;17800:39;17856:19;;30222:64:0;17476:405:1;30222:64:0;30303:15;;;;;;;30299:387;;;30353:15;-1:-1:-1;;;;;30339:30:0;:2;-1:-1:-1;;;;;30339:30:0;;;:62;;;;;30387:13;-1:-1:-1;;;;;30373:28:0;:2;-1:-1:-1;;;;;30373:28:0;;;30339:62;30335:340;;;30452:16;30467:1;30452:12;:16;:::i;:::-;30439:9;30430:19;;;;:8;:19;;;;;;:38;:73;;;;-1:-1:-1;30487:16:0;30502:1;30487:12;:16;:::i;:::-;-1:-1:-1;;;;;30472:12:0;;;;;;:8;:12;;;;;;:31;30430:73;30422:138;;;;-1:-1:-1;;;30422:138:0;;18088:2:1;30422:138:0;;;18070:21:1;18127:2;18107:18;;;18100:30;18166:34;18146:18;;;18139:62;-1:-1:-1;;;18217:18:1;;;18210:50;18277:19;;30422:138:0;17886:416:1;30422:138:0;30588:9;30579:19;;;;:8;:19;;;;;;30601:12;30579:34;;;;-1:-1:-1;;;;;30632:12:0;;;;;;:27;30335:340;5382:7;5409:6;-1:-1:-1;;;;;30701:15:0;;;5409:6;;30701:15;;;;:32;;-1:-1:-1;5382:7:0;5409:6;-1:-1:-1;;;;;30720:13:0;;;5409:6;;30720:13;;30701:32;30698:139;;;30768:12;;30758:6;:22;;30750:75;;;;-1:-1:-1;;;30750:75:0;;18509:2:1;30750:75:0;;;18491:21:1;18548:2;18528:18;;;18521:30;18587:34;18567:18;;;18560:62;-1:-1:-1;;;18638:18:1;;;18631:38;18686:19;;30750:75:0;18307:404:1;30750:75:0;30849:28;30880:24;30898:4;30880:9;:24::i;:::-;30849:55;;30952:12;;30928:20;:36;30925:103;;-1:-1:-1;31004:12:0;;30925:103;31099:30;;31075:54;;;;;;;31144:40;;-1:-1:-1;31168:16:0;;;;;;;31167:17;31144:40;:65;;;;;31196:13;-1:-1:-1;;;;;31188:21:0;:4;-1:-1:-1;;;;;31188:21:0;;;31144:65;:90;;;;-1:-1:-1;31213:21:0;;;;;;;31144:90;31140:227;;;31274:30;;31251:53;;31319:36;31334:20;31319:14;:36::i;:::-;-1:-1:-1;;;;;31430:24:0;;31387:12;31430:24;;;:18;:24;;;;;;31402:4;;31430:24;;;:50;;-1:-1:-1;;;;;;31458:22:0;;;;;;:18;:22;;;;;;;;31430:50;31427:96;;;-1:-1:-1;31506:5:0;31427:96;31539:7;31535:186;;;31573:13;-1:-1:-1;;;;;31567:19:0;:2;-1:-1:-1;;;;;31567:19:0;;31563:147;;31641:14;;31624:13;31634:2;31624:9;:13::i;:::-;31615:22;;:6;:22;:::i;:::-;:40;;31607:87;;;;-1:-1:-1;;;31607:87:0;;18918:2:1;31607:87:0;;;18900:21:1;18957:2;18937:18;;;18930:30;18996:34;18976:18;;;18969:62;-1:-1:-1;;;19047:18:1;;;19040:32;19089:19;;31607:87:0;18716:398:1;31607:87:0;31741:38;31756:4;31761:2;31764:6;31771:7;31741:14;:38::i;:::-;30057:1730;;;29988:1799;;;:::o;1105:192::-;1191:7;1227:12;1219:6;;;;1211:29;;;;-1:-1:-1;;;1211:29:0;;;;;;;;:::i;:::-;-1:-1:-1;1251:9:0;1263:5;1267:1;1263;:5;:::i;:::-;1251:17;1105:192;-1:-1:-1;;;;;1105:192:0:o;27662:163::-;27703:7;27724:15;27741;27760:19;:17;:19::i;:::-;27723:56;;-1:-1:-1;27723:56:0;-1:-1:-1;27797:20:0;27723:56;;27797:11;:20::i;:::-;27790:27;;;;27662:163;:::o;1563:132::-;1621:7;1648:39;1652:1;1655;1648:39;;;;;;;;;;;;;;;;;:3;:39::i;772:181::-;830:7;;862:5;866:1;862;:5;:::i;:::-;850:17;;891:1;886;:6;;878:46;;;;-1:-1:-1;;;878:46:0;;19321:2:1;878:46:0;;;19303:21:1;19360:2;19340:18;;;19333:30;19399:29;19379:18;;;19372:57;19446:18;;878:46:0;19119:351:1;26460:419:0;26519:7;26528;26537;26546;26555;26564;26585:23;26610:12;26624:18;26646:20;26658:7;26646:11;:20::i;:::-;26584:82;;;;;;26678:15;26695:23;26720:12;26736:50;26748:7;26757:4;26763:10;26775;:8;:10::i;:::-;26736:11;:50::i;:::-;26677:109;;;;-1:-1:-1;26677:109:0;;-1:-1:-1;26837:15:0;;-1:-1:-1;26854:4:0;;-1:-1:-1;26860:10:0;;-1:-1:-1;26460:419:0;;-1:-1:-1;;;;;26460:419:0:o;961:136::-;1019:7;1046:43;1050:1;1053;1046:43;;;;;;;;;;;;;;;;;:3;:43::i;33364:156::-;33421:15;;-1:-1:-1;;;;;33421:15:0;:39;33446:13;:6;33457:1;33446:10;:13::i;:::-;33421:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33471:17:0;;-1:-1:-1;;;;;33471:17:0;:41;33498:13;:6;33509:1;33498:10;:13::i;:::-;33471:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29113:250;29159:7;;:12;:34;;;;-1:-1:-1;29175:13:0;;:18;29159:34;29156:46;;;29113:250::o;29156:46::-;29240:7;;;29222:15;:25;29282:13;;;29258:21;:37;-1:-1:-1;29316:11:0;;;;29338:17;29113:250::o;1305:::-;1363:7;1387:6;1383:47;;-1:-1:-1;1417:1:0;1410:8;;1383:47;1442:9;1454:5;1458:1;1454;:5;:::i;:::-;1442:17;-1:-1:-1;1487:1:0;1478:5;1482:1;1442:17;1478:5;:::i;:::-;:10;1470:56;;;;-1:-1:-1;;;1470:56:0;;19899:2:1;1470:56:0;;;19881:21:1;19938:2;19918:18;;;19911:30;19977:34;19957:18;;;19950:62;-1:-1:-1;;;20028:18:1;;;20021:31;20069:19;;1470:56:0;19697:397:1;32643:407:0;32733:16;;;32747:1;32733:16;;;;;;;;32709:21;;32733:16;;;;;;;;;;-1:-1:-1;32733:16:0;32709:40;;32778:4;32760;32765:1;32760:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;32760:23:0;;;-1:-1:-1;;;;;32760:23:0;;;;;32804:15;-1:-1:-1;;;;;32804:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32794:4;32799:1;32794:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;32794:32:0;;;-1:-1:-1;;;;;32794:32:0;;;;;32839:62;32856:4;32871:15;32889:11;32839:8;:62::i;:::-;32922:120;;-1:-1:-1;;;32922:120:0;;-1:-1:-1;;;;;32922:15:0;:66;;;;:120;;32989:11;;33002:1;;33005:4;;33019;;33026:15;;32922:120;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19407:181;19487:14;:12;:14::i;:::-;19512:42;2413:10;19536:9;19547:6;19512:9;:42::i;31795:840::-;16112:16;:23;;-1:-1:-1;;16112:23:0;;;;;;31895:27:::1;:20:::0;16112:16;31895:24:::1;:27::i;:::-;31880:42:::0;-1:-1:-1;31933:17:0::1;31953:30;:20:::0;31880:42;31953:24:::1;:30::i;:::-;31933:50:::0;-1:-1:-1;32029:21:0::1;32071:22;32088:4:::0;32071:16:::1;:22::i;:::-;32106:18;32127:41;:21;32153:14:::0;32127:25:::1;:41::i;:::-;32106:62;;32179:22;32204:44;32244:3;32204:35;32219:19;;32204:10;:14;;:35;;;;:::i;:44::-;32179:69;;32259:24;32286:46;32328:3;32286:37;32301:21;;32286:10;:14;;:37;;;;:::i;:46::-;32345:15;::::0;:40:::1;::::0;32259:73;;-1:-1:-1;;;;;;32345:15:0::1;::::0;:40;::::1;;;::::0;32370:14;;32345:15:::1;:40:::0;:15;:40;32370:14;32345:15;:40;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;32396:17:0::1;::::0;:44:::1;::::0;-1:-1:-1;;;;;32396:17:0;;::::1;::::0;:44;::::1;;;::::0;32423:16;;32396:17:::1;:44:::0;:17;:44;32423:16;32396:17;:44;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;32468:33:0::1;32485:16:::0;32468:14;:33:::1;:::i;:::-;32453:49;::::0;;::::1;:::i;:::-;;;32523:35;32536:9;32547:10;32523:12;:35::i;:::-;32584:43;::::0;;21542:25:1;;;21598:2;21583:18;;21576:34;;;21626:18;;;21619:34;;;32584:43:0::1;::::0;21530:2:1;21515:18;32584:43:0::1;;;;;;;-1:-1:-1::0;;16158:16:0;:24;;-1:-1:-1;;16158:24:0;;;-1:-1:-1;;;;;31795:840:0:o;33532:1430::-;33643:8;;;;;;;33639:67;;5382:7;5409:6;-1:-1:-1;;;;;33676:17:0;;;5409:6;;33676:17;33668:26;;;;;;-1:-1:-1;;;;;33729:18:0;;;;;;:10;:18;;;;;;;;;:43;;-1:-1:-1;;;;;;33751:21:0;;;;;;:10;:21;;;;;;;;33729:43;33726:111;;;33796:12;;;;33788:37;;;;-1:-1:-1;;;33788:37:0;;21866:2:1;33788:37:0;;;21848:21:1;21905:2;21885:18;;;21878:30;-1:-1:-1;;;21924:18:1;;;21917:42;21976:18;;33788:37:0;21664:336:1;33788:37:0;33861:7;33857:406;;33885:14;:12;:14::i;:::-;33857:406;;;33979:12;33958:17;;33937:18;;:38;;;;:::i;:::-;:54;33934:318;;34012:12;34027:23;34046:3;34027:14;:6;34038:2;34027:10;:14::i;:23::-;34012:38;-1:-1:-1;34086:8:0;;34083:107;;34119:51;34142:6;34158:4;34165;34119:22;:51::i;:::-;34222:14;34232:4;34222:14;;:::i;:::-;;;33993:259;33934:318;-1:-1:-1;;;;;34287:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;34311:22:0;;;;;;:11;:22;;;;;;;;34310:23;34287:46;34283:597;;;34350:48;34372:6;34380:9;34391:6;34350:21;:48::i;:::-;34283:597;;;-1:-1:-1;;;;;34421:19:0;;;;;;:11;:19;;;;;;;;34420:20;:46;;;;-1:-1:-1;;;;;;34444:22:0;;;;;;:11;:22;;;;;;;;34420:46;34416:464;;;34483:46;34503:6;34511:9;34522:6;34483:19;:46::i;34416:464::-;-1:-1:-1;;;;;34552:19:0;;;;;;:11;:19;;;;;;;;34551:20;:47;;;;-1:-1:-1;;;;;;34576:22:0;;;;;;:11;:22;;;;;;;;34575:23;34551:47;34547:333;;;34615:44;34633:6;34641:9;34652:6;34615:17;:44::i;34547:333::-;-1:-1:-1;;;;;34681:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;34704:22:0;;;;;;:11;:22;;;;;;;;34681:45;34677:203;;;34743:48;34765:6;34773:9;34784:6;34743:21;:48::i;34677:203::-;34824:44;34842:6;34850:9;34861:6;34824:17;:44::i;:::-;34904:7;34900:55;;34928:15;29429;;29419:7;:25;29471:21;;29455:13;:37;29375:125;27833:561;27930:7;;27966;;27883;;;;;27990:289;28014:9;:16;28010:20;;27990:289;;;28080:7;28056;:21;28064:9;28074:1;28064:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;28064:12:0;28056:21;;;;;;;;;;;;;:31;;:66;;;28115:7;28091;:21;28099:9;28109:1;28099:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;28099:12:0;28091:21;;;;;;;;;;;;;:31;28056:66;28052:97;;;28132:7;;28141;;28124:25;;;;;;;27833:561;;:::o;28052:97::-;28174:34;28186:7;:21;28194:9;28204:1;28194:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;28194:12:0;28186:21;;;;;;;;;;;;;28174:7;;:11;:34::i;:::-;28164:44;;28233:34;28245:7;:21;28253:9;28263:1;28253:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;28253:12:0;28245:21;;;;;;;;;;;;;28233:7;;:11;:34::i;:::-;28223:44;-1:-1:-1;28032:3:0;;;;:::i;:::-;;;;27990:289;;;-1:-1:-1;28315:7:0;;28303;;:20;;:11;:20::i;:::-;28293:7;:30;28289:61;;;28333:7;;28342;;28325:25;;;;;;27833:561;;:::o;28289:61::-;28369:7;;28378;;-1:-1:-1;27833:561:0;-1:-1:-1;27833:561:0:o;1703:278::-;1789:7;1824:12;1817:5;1809:28;;;;-1:-1:-1;;;1809:28:0;;;;;;;;:::i;:::-;-1:-1:-1;1848:9:0;1860:5;1864:1;1860;:5;:::i;26887:330::-;26947:7;26956;26965;26985:12;27000:24;27016:7;27000:15;:24::i;:::-;26985:39;;27035:18;27056:30;27078:7;27056:21;:30::i;:::-;27035:51;-1:-1:-1;27097:23:0;27123:33;27035:51;27123:17;:7;27135:4;27123:11;:17::i;:::-;:21;;:33::i;:::-;27097:59;27192:4;;-1:-1:-1;27198:10:0;;-1:-1:-1;26887:330:0;;-1:-1:-1;;;26887:330:0:o;27225:429::-;27340:7;;;;27396:24;:7;27408:11;27396;:24::i;:::-;27378:42;-1:-1:-1;27431:12:0;27446:21;:4;27455:11;27446:8;:21::i;:::-;27431:36;-1:-1:-1;27478:18:0;27499:27;:10;27514:11;27499:14;:27::i;:::-;27478:48;-1:-1:-1;27537:23:0;27563:33;27478:48;27563:17;:7;27575:4;27563:11;:17::i;:33::-;27615:7;;;;-1:-1:-1;27641:4:0;;-1:-1:-1;27225:429:0;;-1:-1:-1;;;;;;;27225:429:0:o;33058:290::-;33139:62;33156:4;33171:15;33189:11;33139:8;:62::i;:::-;33307:15;;33222:118;;-1:-1:-1;;;33222:118:0;;33281:4;33222:118;;;22354:34:1;22404:18;;;22397:34;;;33301:1:0;22447:18:1;;;22440:34;;;22490:18;;;22483:34;-1:-1:-1;;;;;33307:15:0;;;22533:19:1;;;22526:44;33324:15:0;22586:19:1;;;22579:35;33222:15:0;:31;;;;;;33261:9;;22288:19:1;;33222:118:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;35480:272::-;-1:-1:-1;;;;;35601:15:0;;;;;;:7;:15;;;;;;:28;;35621:7;35601:19;:28::i;:::-;-1:-1:-1;;;;;35583:15:0;;;;;;;:7;:15;;;;;;:46;;;;35661:18;;;;;;;:31;;35684:7;35661:22;:31::i;:::-;-1:-1:-1;;;;;35640:18:0;;;;;;;:7;:18;;;;;;;:52;;;;35708:36;;;;;;;;;;35736:7;3318:25:1;;3306:2;3291:18;;3172:177;36354:566:0;36457:15;36474:23;36499:12;36513:23;36538:12;36552:18;36574:19;36585:7;36574:10;:19::i;:::-;-1:-1:-1;;;;;36622:15:0;;;;;;:7;:15;;;;;;36456:137;;-1:-1:-1;36456:137:0;;-1:-1:-1;36456:137:0;;-1:-1:-1;36456:137:0;-1:-1:-1;36456:137:0;-1:-1:-1;36456:137:0;-1:-1:-1;36622:28:0;;36642:7;36622:19;:28::i;:::-;-1:-1:-1;;;;;36604:15:0;;;;;;:7;:15;;;;;;;;:46;;;;36679:7;:15;;;;:28;;36699:7;36679:19;:28::i;:::-;-1:-1:-1;;;;;36661:15:0;;;;;;;:7;:15;;;;;;:46;;;;36739:18;;;;;;;:39;;36762:15;36739:22;:39::i;:::-;-1:-1:-1;;;;;36718:18:0;;;;;;:7;:18;;;;;:60;36792:26;36807:10;36792:14;:26::i;:::-;36829:23;36841:4;36847;36829:11;:23::i;:::-;36885:9;-1:-1:-1;;;;;36868:44:0;36877:6;-1:-1:-1;;;;;36868:44:0;;36896:15;36868:44;;;;3318:25:1;;3306:2;3291:18;;3172:177;36868:44:0;;;;;;;;36445:475;;;;;;36354:566;;;:::o;35760:586::-;35861:15;35878:23;35903:12;35917:23;35942:12;35956:18;35978:19;35989:7;35978:10;:19::i;:::-;-1:-1:-1;;;;;36026:15:0;;;;;;:7;:15;;;;;;35860:137;;-1:-1:-1;35860:137:0;;-1:-1:-1;35860:137:0;;-1:-1:-1;35860:137:0;-1:-1:-1;35860:137:0;-1:-1:-1;35860:137:0;-1:-1:-1;36026:28:0;;35860:137;36026:19;:28::i;:::-;-1:-1:-1;;;;;36008:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;36086:18;;;;;:7;:18;;;;;:39;;36109:15;36086:22;:39::i;:::-;-1:-1:-1;;;;;36065:18:0;;;;;;:7;:18;;;;;;;;:60;;;;36157:7;:18;;;;:39;;36180:15;36157:22;:39::i;34970:502::-;35069:15;35086:23;35111:12;35125:23;35150:12;35164:18;35186:19;35197:7;35186:10;:19::i;:::-;-1:-1:-1;;;;;35234:15:0;;;;;;:7;:15;;;;;;35068:137;;-1:-1:-1;35068:137:0;;-1:-1:-1;35068:137:0;;-1:-1:-1;35068:137:0;-1:-1:-1;35068:137:0;-1:-1:-1;35068:137:0;-1:-1:-1;35234:28:0;;35068:137;35234:19;:28::i;21916:642::-;22019:15;22036:23;22061:12;22075:23;22100:12;22114:18;22136:19;22147:7;22136:10;:19::i;:::-;-1:-1:-1;;;;;22184:15:0;;;;;;:7;:15;;;;;;22018:137;;-1:-1:-1;22018:137:0;;-1:-1:-1;22018:137:0;;-1:-1:-1;22018:137:0;-1:-1:-1;22018:137:0;-1:-1:-1;22018:137:0;-1:-1:-1;22184:28:0;;22204:7;22184:19;:28::i;:::-;-1:-1:-1;;;;;22166:15:0;;;;;;:7;:15;;;;;;;;:46;;;;22241:7;:15;;;;:28;;22261:7;22241:19;:28::i;28773:154::-;28837:7;28864:55;28903:5;28864:20;28876:7;;28864;:11;;:20;;;;:::i;28935:166::-;29005:7;29032:61;29077:5;29032:26;29044:13;;29032:7;:11;;:26;;;;:::i;28406:355::-;28469:19;28492:10;:8;:10::i;:::-;28469:33;-1:-1:-1;28513:18:0;28534:27;:10;28469:33;28534:14;:27::i;:::-;28613:4;28597:22;;;;:7;:22;;;;;;28513:48;;-1:-1:-1;28597:38:0;;28513:48;28597:26;:38::i;:::-;28588:4;28572:22;;;;:7;:22;;;;;;;;:63;;;;28649:11;:26;;;;;;28646:107;;;28731:4;28715:22;;;;:7;:22;;;;;;:38;;28742:10;28715:26;:38::i;:::-;28706:4;28690:22;;;;:7;:22;;;;;:63;28458:303;;28406:355;:::o;26305:147::-;26383:7;;:17;;26395:4;26383:11;:17::i;:::-;26373:7;:27;26424:10;;:20;;26439:4;26424:14;:20::i;:::-;26411:10;:33;-1:-1:-1;;26305:147:0:o;14:180:1:-;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;-1:-1:-1;165:23:1;;14:180;-1:-1:-1;14:180:1:o;199:597::-;311:4;340:2;369;358:9;351:21;401:6;395:13;444:6;439:2;428:9;424:18;417:34;469:1;479:140;493:6;490:1;487:13;479:140;;;588:14;;;584:23;;578:30;554:17;;;573:2;550:26;543:66;508:10;;479:140;;;637:6;634:1;631:13;628:91;;;707:1;702:2;693:6;682:9;678:22;674:31;667:42;628:91;-1:-1:-1;780:2:1;759:15;-1:-1:-1;;755:29:1;740:45;;;;787:2;736:54;;199:597;-1:-1:-1;;;199:597:1:o;801:131::-;-1:-1:-1;;;;;876:31:1;;866:42;;856:70;;922:1;919;912:12;937:134;1005:20;;1034:31;1005:20;1034:31;:::i;:::-;937:134;;;:::o;1076:315::-;1144:6;1152;1205:2;1193:9;1184:7;1180:23;1176:32;1173:52;;;1221:1;1218;1211:12;1173:52;1260:9;1247:23;1279:31;1304:5;1279:31;:::i;:::-;1329:5;1381:2;1366:18;;;;1353:32;;-1:-1:-1;;;1076:315:1:o;1588:127::-;1649:10;1644:3;1640:20;1637:1;1630:31;1680:4;1677:1;1670:15;1704:4;1701:1;1694:15;1720:118;1806:5;1799:13;1792:21;1785:5;1782:32;1772:60;;1828:1;1825;1818:12;1843:128;1908:20;;1937:28;1908:20;1937:28;:::i;1976:1191::-;2066:6;2074;2127:2;2115:9;2106:7;2102:23;2098:32;2095:52;;;2143:1;2140;2133:12;2095:52;2183:9;2170:23;2212:18;2253:2;2245:6;2242:14;2239:34;;;2269:1;2266;2259:12;2239:34;2307:6;2296:9;2292:22;2282:32;;2352:7;2345:4;2341:2;2337:13;2333:27;2323:55;;2374:1;2371;2364:12;2323:55;2410:2;2397:16;2432:4;2455:2;2451;2448:10;2445:36;;;2461:18;;:::i;:::-;2507:2;2504:1;2500:10;2539:2;2533:9;2602:2;2598:7;2593:2;2589;2585:11;2581:25;2573:6;2569:38;2657:6;2645:10;2642:22;2637:2;2625:10;2622:18;2619:46;2616:72;;;2668:18;;:::i;:::-;2704:2;2697:22;2754:18;;;2788:15;;;;-1:-1:-1;2830:11:1;;;2826:20;;;2858:19;;;2855:39;;;2890:1;2887;2880:12;2855:39;2914:11;;;;2934:148;2950:6;2945:3;2942:15;2934:148;;;3016:23;3035:3;3016:23;:::i;:::-;3004:36;;2967:12;;;;3060;;;;2934:148;;;3101:6;-1:-1:-1;3126:35:1;;-1:-1:-1;3142:18:1;;;3126:35;:::i;:::-;3116:45;;;;;;1976:1191;;;;;:::o;3354:456::-;3431:6;3439;3447;3500:2;3488:9;3479:7;3475:23;3471:32;3468:52;;;3516:1;3513;3506:12;3468:52;3555:9;3542:23;3574:31;3599:5;3574:31;:::i;:::-;3624:5;-1:-1:-1;3681:2:1;3666:18;;3653:32;3694:33;3653:32;3694:33;:::i;:::-;3354:456;;3746:7;;-1:-1:-1;;;3800:2:1;3785:18;;;;3772:32;;3354:456::o;3815:247::-;3874:6;3927:2;3915:9;3906:7;3902:23;3898:32;3895:52;;;3943:1;3940;3933:12;3895:52;3982:9;3969:23;4001:31;4026:5;4001:31;:::i;4256:401::-;4337:6;4345;4398:2;4386:9;4377:7;4373:23;4369:32;4366:52;;;4414:1;4411;4404:12;4366:52;4453:9;4440:23;4472:31;4497:5;4472:31;:::i;:::-;4522:5;-1:-1:-1;4579:2:1;4564:18;;4551:32;4592:33;4551:32;4592:33;:::i;:::-;4644:7;4634:17;;;4256:401;;;;;:::o;4662:309::-;4727:6;4735;4788:2;4776:9;4767:7;4763:23;4759:32;4756:52;;;4804:1;4801;4794:12;4756:52;4840:9;4827:23;4817:33;;4900:2;4889:9;4885:18;4872:32;4913:28;4935:5;4913:28;:::i;4976:241::-;5032:6;5085:2;5073:9;5064:7;5060:23;5056:32;5053:52;;;5101:1;5098;5091:12;5053:52;5140:9;5127:23;5159:28;5181:5;5159:28;:::i;5690:367::-;5753:8;5763:6;5817:3;5810:4;5802:6;5798:17;5794:27;5784:55;;5835:1;5832;5825:12;5784:55;-1:-1:-1;5858:20:1;;5901:18;5890:30;;5887:50;;;5933:1;5930;5923:12;5887:50;5970:4;5962:6;5958:17;5946:29;;6030:3;6023:4;6013:6;6010:1;6006:14;5998:6;5994:27;5990:38;5987:47;5984:67;;;6047:1;6044;6037:12;5984:67;5690:367;;;;;:::o;6062:773::-;6184:6;6192;6200;6208;6261:2;6249:9;6240:7;6236:23;6232:32;6229:52;;;6277:1;6274;6267:12;6229:52;6317:9;6304:23;6346:18;6387:2;6379:6;6376:14;6373:34;;;6403:1;6400;6393:12;6373:34;6442:70;6504:7;6495:6;6484:9;6480:22;6442:70;:::i;:::-;6531:8;;-1:-1:-1;6416:96:1;-1:-1:-1;6619:2:1;6604:18;;6591:32;;-1:-1:-1;6635:16:1;;;6632:36;;;6664:1;6661;6654:12;6632:36;;6703:72;6767:7;6756:8;6745:9;6741:24;6703:72;:::i;:::-;6062:773;;;;-1:-1:-1;6794:8:1;-1:-1:-1;;;;6062:773:1:o;7233:356::-;7435:2;7417:21;;;7454:18;;;7447:30;7513:34;7508:2;7493:18;;7486:62;7580:2;7565:18;;7233:356::o;7954:380::-;8033:1;8029:12;;;;8076;;;8097:61;;8151:4;8143:6;8139:17;8129:27;;8097:61;8204:2;8196:6;8193:14;8173:18;8170:38;8167:161;;;8250:10;8245:3;8241:20;8238:1;8231:31;8285:4;8282:1;8275:15;8313:4;8310:1;8303:15;8167:161;;7954:380;;;:::o;8339:127::-;8400:10;8395:3;8391:20;8388:1;8381:31;8431:4;8428:1;8421:15;8455:4;8452:1;8445:15;8471:127;8532:10;8527:3;8523:20;8520:1;8513:31;8563:4;8560:1;8553:15;8587:4;8584:1;8577:15;8603:135;8642:3;-1:-1:-1;;8663:17:1;;8660:43;;;8683:18;;:::i;:::-;-1:-1:-1;8730:1:1;8719:13;;8603:135::o;8743:422::-;8832:1;8875:5;8832:1;8889:270;8910:7;8900:8;8897:21;8889:270;;;8969:4;8965:1;8961:6;8957:17;8951:4;8948:27;8945:53;;;8978:18;;:::i;:::-;9028:7;9018:8;9014:22;9011:55;;;9048:16;;;;9011:55;9127:22;;;;9087:15;;;;8889:270;;;8893:3;8743:422;;;;;:::o;9170:806::-;9219:5;9249:8;9239:80;;-1:-1:-1;9290:1:1;9304:5;;9239:80;9338:4;9328:76;;-1:-1:-1;9375:1:1;9389:5;;9328:76;9420:4;9438:1;9433:59;;;;9506:1;9501:130;;;;9413:218;;9433:59;9463:1;9454:10;;9477:5;;;9501:130;9538:3;9528:8;9525:17;9522:43;;;9545:18;;:::i;:::-;-1:-1:-1;;9601:1:1;9587:16;;9616:5;;9413:218;;9715:2;9705:8;9702:16;9696:3;9690:4;9687:13;9683:36;9677:2;9667:8;9664:16;9659:2;9653:4;9650:12;9646:35;9643:77;9640:159;;;-1:-1:-1;9752:19:1;;;9784:5;;9640:159;9831:34;9856:8;9850:4;9831:34;:::i;:::-;9901:6;9897:1;9893:6;9889:19;9880:7;9877:32;9874:58;;;9912:18;;:::i;:::-;9950:20;;9170:806;-1:-1:-1;;;9170:806:1:o;9981:140::-;10039:5;10068:47;10109:4;10099:8;10095:19;10089:4;10068:47;:::i;10126:168::-;10166:7;10232:1;10228;10224:6;10220:14;10217:1;10214:21;10209:1;10202:9;10195:17;10191:45;10188:71;;;10239:18;;:::i;:::-;-1:-1:-1;10279:9:1;;10126:168::o;11477:125::-;11517:4;11545:1;11542;11539:8;11536:34;;;11550:18;;:::i;:::-;-1:-1:-1;11587:9:1;;11477:125::o;11607:127::-;11668:10;11663:3;11659:20;11656:1;11649:31;11699:4;11696:1;11689:15;11723:4;11720:1;11713:15;11739:184;11809:6;11862:2;11850:9;11841:7;11837:23;11833:32;11830:52;;;11878:1;11875;11868:12;11830:52;-1:-1:-1;11901:16:1;;11739:184;-1:-1:-1;11739:184:1:o;12207:245::-;12274:6;12327:2;12315:9;12306:7;12302:23;12298:32;12295:52;;;12343:1;12340;12333:12;12295:52;12375:9;12369:16;12394:28;12416:5;12394:28;:::i;14706:128::-;14746:3;14777:1;14773:6;14770:1;14767:13;14764:39;;;14783:18;;:::i;:::-;-1:-1:-1;14819:9:1;;14706:128::o;19475:217::-;19515:1;19541;19531:132;;19585:10;19580:3;19576:20;19573:1;19566:31;19620:4;19617:1;19610:15;19648:4;19645:1;19638:15;19531:132;-1:-1:-1;19677:9:1;;19475:217::o;20099:251::-;20169:6;20222:2;20210:9;20201:7;20197:23;20193:32;20190:52;;;20238:1;20235;20228:12;20190:52;20270:9;20264:16;20289:31;20314:5;20289:31;:::i;20355:980::-;20617:4;20665:3;20654:9;20650:19;20696:6;20685:9;20678:25;20722:2;20760:6;20755:2;20744:9;20740:18;20733:34;20803:3;20798:2;20787:9;20783:18;20776:31;20827:6;20862;20856:13;20893:6;20885;20878:22;20931:3;20920:9;20916:19;20909:26;;20970:2;20962:6;20958:15;20944:29;;20991:1;21001:195;21015:6;21012:1;21009:13;21001:195;;;21080:13;;-1:-1:-1;;;;;21076:39:1;21064:52;;21171:15;;;;21136:12;;;;21112:1;21030:9;21001:195;;;-1:-1:-1;;;;;;;21252:32:1;;;;21247:2;21232:18;;21225:60;-1:-1:-1;;;21316:3:1;21301:19;21294:35;21213:3;20355:980;-1:-1:-1;;;20355:980:1:o;22625:306::-;22713:6;22721;22729;22782:2;22770:9;22761:7;22757:23;22753:32;22750:52;;;22798:1;22795;22788:12;22750:52;22827:9;22821:16;22811:26;;22877:2;22866:9;22862:18;22856:25;22846:35;;22921:2;22910:9;22906:18;22900:25;22890:35;;22625:306;;;;;:::o

Swarm Source

ipfs://629849fcbd4c1ec5761fc8e03cfec68109c2c8d9bd0f4e10aa45ca1a1e8ed855

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.