ETH Price: $2,294.17 (+0.27%)
Gas: 1.23 Gwei

Token

Hackathon DAO (HACK3D)
 

Overview

Max Total Supply

1,000,000 HACK3D

Holders

61

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
0.05 HACK3D

Value
$0.00
0x5f8a5489cce9a41728ad78c93d0e93acb0e789cb
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
HackathonDAO

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

/**

https://t.me/HackathonNews
https://twitter.com/Hackathon_DAO

*/

// SPDX-License-Identifier: MIT

pragma solidity 0.8.18;


library SafeMath {
    function add(uint256 a, uint256 b) internal pure returns (uint256) {return a + b;}
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {return a - b;}
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {return a * b;}
    function div(uint256 a, uint256 b) internal pure returns (uint256) {return a / b;}
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {return a % b;}
    
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {uint256 c = a + b; if(c < a) return(false, 0); return(true, c);}}

    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {if(b > a) return(false, 0); return(true, a - b);}}

    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {if (a == 0) return(true, 0); uint256 c = a * b;
        if(c / a != b) return(false, 0); return(true, c);}}

    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {if(b == 0) return(false, 0); return(true, a / b);}}

    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {if(b == 0) return(false, 0); return(true, a % b);}}

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

    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked{require(b > 0, errorMessage); return a / b;}}

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

interface IERC20 {
    function totalSupply() external view returns (uint256);
    function circulatingSupply() external view returns (uint256);
    function decimals() external view returns (uint8);
    function symbol() external view returns (string memory);
    function name() external view returns (string memory);
    function getOwner() external view returns (address);
    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);}

abstract contract Ownable {
    address internal owner;
    constructor(address _owner) {owner = _owner;}
    modifier onlyOwner() {require(isOwner(msg.sender), "!OWNER"); _;}
    function isOwner(address account) public view returns (bool) {return account == owner;}
    function transferOwnership(address payable adr) public onlyOwner {owner = adr; emit OwnershipTransferred(adr);}
    event OwnershipTransferred(address owner);
}

interface stakeIntegration {
    function stakingWithdraw(address depositor, uint256 _amount) external;
    function stakingDeposit(address depositor, uint256 _amount) external;
}

interface tokenStaking {
    function deposit(uint256 amount) external;
    function withdraw(uint256 amount) external;
}

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

interface IRouter {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);

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

contract HackathonDAO is IERC20, tokenStaking, Ownable {
    using SafeMath for uint256;
    string private constant _name = 'Hackathon DAO';
    string private constant _symbol = 'HACK3D';
    uint8 private constant _decimals = 9;
    uint256 private _totalSupply = 1000000 * (10 ** _decimals);
    uint256 public _maxTxAmount = ( _totalSupply * 100 ) / 10000;
    uint256 public _maxSellAmount = ( _totalSupply * 100 ) / 10000;
    uint256 public _maxWalletToken = ( _totalSupply * 100 ) / 10000;
    mapping (address => uint256) _balances;
    mapping (address => mapping (address => uint256)) private _allowances;
    struct UserStats{bool whitelist; bool isBot; bool feeExempt;}
    mapping(address => UserStats) private isFeeExempt;
    IRouter router;
    address public pair;
    uint256 private liquidityFee = 100;
    uint256 private marketingFee = 300;
    uint256 private developmentFee = 100;
    uint256 private stakingFee = 0;
    uint256 private tokenFee = 0;
    uint256 private totalFee = 500;
    uint256 private sellFee = 500;
    uint256 private transferFee = 0;
    uint256 private denominator = 10000;
    bool private swapEnabled = true;
    bool private whitelistAllowed = false;
    bool private tradingAllowed = false;
    mapping(address => uint256) private lastTransferTimestamp;
    bool public transferDelayEnabled = false;
    uint256 private swapTimes;
    bool private swapping;
    bool private liquidityAdd;
    modifier liquidityCreation {liquidityAdd = true; _; liquidityAdd = false;}
    uint256 private swapAmount = 1;
    uint256 private swapThreshold = ( _totalSupply * 250 ) / 100000;
    uint256 private minTokenAmount = ( _totalSupply * 10 ) / 100000;
    modifier lockTheSwap {swapping = true; _; swapping = false;}
    mapping(address => uint256) public amountStaked;
    uint256 public totalStaked;
    stakeIntegration internal stakingContract;
    
    address internal constant DEAD = 0x000000000000000000000000000000000000dEaD;
    address internal development_receiver = 0xFE46c20c69Bcd095814e5eaA043ee0be9C2Ba6Da; 
    address internal marketing_receiver = 0xDCBeba84bf1cFF6C984AdDaB20F135393144ebe8;
    address internal liquidity_receiver = 0xFE46c20c69Bcd095814e5eaA043ee0be9C2Ba6Da;
    address internal staking_receiver = 0xFE46c20c69Bcd095814e5eaA043ee0be9C2Ba6Da;
    address internal token_receiver = 0x000000000000000000000000000000000000dEaD;
    
    event Deposit(address indexed account, uint256 indexed amount, uint256 indexed timestamp);
    event Withdraw(address indexed account, uint256 indexed amount, uint256 indexed timestamp);
    event SetStakingAddress(address indexed stakingAddress, uint256 indexed timestamp);
    event SetisBot(address indexed account, bool indexed isBot, uint256 indexed timestamp);
    event TradingEnabled(address indexed account, uint256 indexed timestamp);
    event isWhitelisted(address indexed account, bool indexed isWhitelisted, uint256 indexed timestamp);
    event ExcludeFromFees(address indexed account, bool indexed isExcluded, uint256 indexed timestamp);
    event SetDividendExempt(address indexed account, bool indexed isExempt, uint256 indexed timestamp);
    event Launch(uint256 indexed whitelistTime, bool indexed whitelistAllowed, uint256 indexed timestamp);
    event SetInternalAddresses(address indexed marketing, address indexed liquidity, address indexed development, uint256 timestamp);
    event SetSwapBackSettings(uint256 indexed swapAmount, uint256 indexed swapThreshold, uint256 indexed swapMinAmount, uint256 timestamp);
    event SetDistributionCriteria(uint256 indexed minPeriod, uint256 indexed minDistribution, uint256 indexed distributorGas, uint256 timestamp);
    event SetParameters(uint256 indexed maxTxAmount, uint256 indexed maxWalletToken, uint256 indexed maxTransfer, uint256 timestamp);
    event SetStructure(uint256 indexed total, uint256 indexed sell, uint256 transfer, uint256 indexed timestamp);
    event CreateLiquidity(uint256 indexed tokenAmount, uint256 indexed ETHAmount, address indexed wallet, uint256 timestamp);

    constructor() Ownable(msg.sender) {
        IRouter _router = IRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        address _pair = IFactory(_router.factory()).createPair(address(this), _router.WETH());
        router = _router;
        pair = _pair;
        isFeeExempt[address(this)].whitelist = true;
        isFeeExempt[msg.sender].whitelist = true;
        isFeeExempt[address(this)].feeExempt = true;
        isFeeExempt[liquidity_receiver].feeExempt = true;
        isFeeExempt[marketing_receiver].feeExempt = true;
        isFeeExempt[development_receiver].feeExempt = true;
        isFeeExempt[address(DEAD)].feeExempt = true;
        isFeeExempt[msg.sender].feeExempt = true;
        _balances[msg.sender] = _totalSupply;
        emit Transfer(address(0), msg.sender, _totalSupply);
    }

    receive() external payable {}
    function name() public pure returns (string memory) {return _name;}
    function symbol() public pure returns (string memory) {return _symbol;}
    function decimals() public pure returns (uint8) {return _decimals;}
    function getOwner() external view override returns (address) { return owner; }
    function totalSupply() public view override returns (uint256) {return _totalSupply;}
    function balanceOf(address account) public view override returns (uint256) {return _balances[account];}
    function transfer(address recipient, uint256 amount) public override returns (bool) {_transfer(msg.sender, 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(msg.sender, spender, amount);return true;}
    function availableBalance(address wallet) public view returns (uint256) {return _balances[wallet].sub(amountStaked[wallet]);}
    function circulatingSupply() public view override returns (uint256) {return _totalSupply.sub(balanceOf(DEAD)).sub(balanceOf(address(0)));}

    function preTxCheck(address sender, address recipient, uint256 amount) internal view {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");
        require(amount <= balanceOf(sender),"ERC20: below available balance threshold");
    }

    function _transfer(address sender, address recipient, uint256 amount) private {
        preTxCheck(sender, recipient, amount);
        checkTradingAllowed(sender, recipient);
        checkTxLimit(sender, recipient, amount);
        checkMaxWallet(sender, recipient, amount);
        checkTradeDelay(sender, recipient);
        swapbackCounters(sender, recipient);
        swapBack(sender, recipient, amount);
        _balances[sender] = _balances[sender].sub(amount);
        uint256 amountReceived = shouldTakeFee(sender, recipient) ? takeFee(sender, recipient, amount) : amount;
        _balances[recipient] = _balances[recipient].add(amountReceived);
        emit Transfer(sender, recipient, amountReceived);
    }

    function deposit(uint256 amount) override external {
        require(amount <= _balances[msg.sender].sub(amountStaked[msg.sender]), "ERC20: Cannot stake more than available balance");
        stakingContract.stakingDeposit(msg.sender, amount);
        amountStaked[msg.sender] = amountStaked[msg.sender].add(amount);
        totalStaked = totalStaked.add(amount);
        emit Deposit(msg.sender, amount, block.timestamp);
    }

    function withdraw(uint256 amount) override external {
        require(amount <= amountStaked[msg.sender], "ERC20: Cannot unstake more than amount staked");
        stakingContract.stakingWithdraw(msg.sender, amount);
        amountStaked[msg.sender] = amountStaked[msg.sender].sub(amount);
        totalStaked = totalStaked.sub(amount);
        emit Withdraw(msg.sender, amount, block.timestamp);
    }

    uint256 internal launchTime; uint256 internal whitelistTime;
    function startWhitelistTrading(uint256 _whitelistTime, bool _whitelistAllowed) external onlyOwner {
        require(!whitelistAllowed, "ERC20: whitelist period already enabled");
        tradingAllowed = true; launchTime = block.timestamp; 
        whitelistTime = _whitelistTime; whitelistAllowed = _whitelistAllowed;
        emit Launch(_whitelistTime, _whitelistAllowed, block.timestamp);
    }

    function setisWhitelist(address[] calldata addresses, bool _bool) external onlyOwner {
        for(uint i=0; i < addresses.length; i++){isFeeExempt[addresses[i]].whitelist = _bool;
        emit isWhitelisted(addresses[i], _bool, block.timestamp);}
    }

    function setStakingAddress(address _staking) external onlyOwner {
        stakingContract = stakeIntegration(_staking); isFeeExempt[_staking].feeExempt = true;
        emit SetStakingAddress(_staking, block.timestamp);
    }

    function setStructure(uint256 _liquidity, uint256 _marketing, uint256 _token, uint256 _development, uint256 _staking, uint256 _total, uint256 _sell, uint256 _trans) external onlyOwner {
        liquidityFee = _liquidity; marketingFee = _marketing; tokenFee = _token; stakingFee = _staking;
        developmentFee = _development; totalFee = _total; sellFee = _sell; transferFee = _trans;
        require(totalFee <= denominator.div(5) && sellFee <= denominator.div(5) && transferFee <= denominator.div(5), "ERC20: fees cannot be more than 20%");
        emit SetStructure(_total, _sell, _trans, block.timestamp);
    }

    function setisBot(address _address, bool _enabled) external onlyOwner {
        require(_address != address(pair) && _address != address(router) && _address != address(this) && _address != address(DEAD), "ERC20: ineligible address");
        isFeeExempt[_address].isBot = _enabled;
        emit SetisBot(_address, _enabled, block.timestamp);
    }

    function setParameters(uint256 _buy, uint256 _trans, uint256 _wallet) external onlyOwner {
        uint256 newTx = (totalSupply() * _buy) / 10000; uint256 newTransfer = (totalSupply() * _trans) / 10000;
        uint256 newWallet = (totalSupply() * _wallet) / 10000; uint256 limit = totalSupply().mul(5).div(1000);
        require(newTx >= limit && newTransfer >= limit && newWallet >= limit, "ERC20: max TXs and max Wallet cannot be less than .5%");
        _maxTxAmount = newTx; _maxSellAmount = newTransfer; _maxWalletToken = newWallet;
        emit SetParameters(newTx, newWallet, newTransfer, block.timestamp);
    }

    function setTransferDelay(bool enabled) external onlyOwner {
        transferDelayEnabled = enabled;
    }

    function checkTradingAllowed(address sender, address recipient) internal {
        if(launchTime.add(whitelistTime) < block.timestamp){whitelistAllowed = false;}
        if(!isFeeExempt[sender].feeExempt && !isFeeExempt[recipient].feeExempt && !whitelistAllowed){require(tradingAllowed, "ERC20: Trading is not allowed");}
        if(whitelistAllowed && tradingAllowed){require(!whitelistIneligible(sender, recipient), "ERC20: Whitelist Period");}
    }
    
    function whitelistIneligible(address sender, address recipient) internal view returns (bool) {
        return !isFeeExempt[sender].whitelist && !isFeeExempt[recipient].whitelist && !isFeeExempt[sender].feeExempt && !isFeeExempt[recipient].feeExempt;
    }

    function checkMaxWallet(address sender, address recipient, uint256 amount) internal view {
        if(!isFeeExempt[sender].feeExempt && !isFeeExempt[recipient].feeExempt && recipient != address(pair) && recipient != address(DEAD)){
            require((_balances[recipient].add(amount)) <= _maxWalletToken, "ERC20: exceeds maximum wallet amount.");}
    }

    function checkTradeDelay(address sender, address recipient) internal {
        if(transferDelayEnabled && !isFeeExempt[sender].feeExempt && !isFeeExempt[recipient].feeExempt && recipient != address(pair) &&
            recipient != address(DEAD) && recipient != address(router)){
                require(lastTransferTimestamp[tx.origin] < block.number, "ERC20: Transfer Delay enabled. Only one purchase per block allowed.");
                    lastTransferTimestamp[tx.origin] = block.number;}
    }

    function swapbackCounters(address sender, address recipient) internal {
        if(recipient == pair && !isFeeExempt[sender].feeExempt && !liquidityAdd){swapTimes += uint256(1);}
    }

    function checkTxLimit(address sender, address recipient, uint256 amount) internal view {
        if(amountStaked[sender] > uint256(0)){require((amount.add(amountStaked[sender])) <= _balances[sender], "ERC20: exceeds maximum allowed not currently staked.");}
        if(sender != pair){require(amount <= _maxSellAmount || isFeeExempt[sender].feeExempt || isFeeExempt[recipient].feeExempt, "ERC20: tx limit exceeded");}
        require(amount <= _maxTxAmount || isFeeExempt[sender].feeExempt || isFeeExempt[recipient].feeExempt, "ERC20: tx limit exceeded");
    }

    function swapAndLiquify(uint256 tokens) private lockTheSwap {
        uint256 _denominator = (liquidityFee.add(1).add(marketingFee).add(developmentFee).add(stakingFee)).mul(2);
        uint256 tokensToAddLiquidityWith = tokens.mul(liquidityFee).div(_denominator);
        uint256 toSwap = tokens.sub(tokensToAddLiquidityWith);
        uint256 initialBalance = address(this).balance;
        swapTokensForETH(toSwap);
        uint256 deltaBalance = address(this).balance.sub(initialBalance);
        uint256 unitBalance= deltaBalance.div(_denominator.sub(liquidityFee));
        uint256 ETHToAddLiquidityWith = unitBalance.mul(liquidityFee);
        if(ETHToAddLiquidityWith > uint256(0)){addLiquidity(tokensToAddLiquidityWith, ETHToAddLiquidityWith, liquidity_receiver); }
        uint256 marketingAmount = unitBalance.mul(2).mul(marketingFee);
        if(marketingAmount > 0){payable(marketing_receiver).transfer(marketingAmount);}
        uint256 stakingAmount = unitBalance.mul(2).mul(stakingFee);
        if(stakingAmount > 0){payable(staking_receiver).transfer(stakingAmount);}
        if(address(this).balance > uint256(0)){payable(development_receiver).transfer(address(this).balance);}
    }

    function addLiquidity(uint256 tokenAmount, uint256 ETHAmount, address receiver) private {
        _approve(address(this), address(router), tokenAmount);
        router.addLiquidityETH{value: ETHAmount}(
            address(this),
            tokenAmount,
            0,
            0,
            address(receiver),
            block.timestamp);
    }

    function swapTokensForETH(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = router.WETH();
        _approve(address(this), address(router), tokenAmount);
        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp);
    }

    function shouldSwapBack(address sender, address recipient, uint256 amount) internal view returns (bool) {
        bool aboveMin = amount >= minTokenAmount;
        bool aboveThreshold = balanceOf(address(this)) >= swapThreshold;
        return !swapping && swapEnabled && tradingAllowed && aboveMin && !isFeeExempt[sender].feeExempt 
            && recipient == pair && swapTimes >= swapAmount && aboveThreshold && !liquidityAdd;
    }

    function swapBack(address sender, address recipient, uint256 amount) internal {
        if(shouldSwapBack(sender, recipient, amount)){swapAndLiquify(swapThreshold); swapTimes = uint256(0);}
    }
    
    function startTrading() external onlyOwner {
        tradingAllowed = true;
        emit TradingEnabled(msg.sender, block.timestamp);
    }

    function setInternalAddresses(address _marketing, address _liquidity, address _development, address _staking, address _token) external onlyOwner {
        marketing_receiver = _marketing; liquidity_receiver = _liquidity; development_receiver = _development; staking_receiver = _staking; token_receiver = _token;
        isFeeExempt[_marketing].feeExempt = true; isFeeExempt[_liquidity].feeExempt = true; isFeeExempt[_staking].feeExempt = true; isFeeExempt[_token].feeExempt = true;
        emit SetInternalAddresses(_marketing, _liquidity, _development, block.timestamp);
    }

    function setisExempt(address _address, bool _enabled) external onlyOwner {
        isFeeExempt[_address].feeExempt = _enabled;
        emit ExcludeFromFees(_address, _enabled, block.timestamp);
    }

    function rescueERC20(address _address, uint256 _amount) external {
        IERC20(_address).transfer(development_receiver, _amount);
    }

    function setSwapbackSettings(uint256 _swapAmount, uint256 _swapThreshold, uint256 _minTokenAmount) external onlyOwner {
        swapAmount = _swapAmount; swapThreshold = _swapThreshold; minTokenAmount = _minTokenAmount;
        emit SetSwapBackSettings(_swapAmount, _swapThreshold, _minTokenAmount, block.timestamp);  
    }

    function createLiquidity(uint256 tokenAmount) payable public liquidityCreation {
        _approve(msg.sender, address(this), tokenAmount);
        _approve(msg.sender, address(router), tokenAmount);
        _transfer(msg.sender, address(this), tokenAmount);
        _approve(address(this), address(router), tokenAmount);
        addLiquidity(tokenAmount, msg.value, msg.sender);
        emit CreateLiquidity(tokenAmount, msg.value, msg.sender, block.timestamp);
    }

    function shouldTakeFee(address sender, address recipient) internal view returns (bool) {
        return !isFeeExempt[sender].feeExempt && !isFeeExempt[recipient].feeExempt;
    }

    function getTotalFee(address sender, address recipient) internal view returns (uint256) {
        if(isFeeExempt[sender].isBot || isFeeExempt[recipient].isBot){return denominator.sub(uint256(100));}
        if(recipient == pair){return sellFee;}
        if(sender == pair){return totalFee;}
        return transferFee;
    }

    function takeFee(address sender, address recipient, uint256 amount) internal returns (uint256) {
        if(getTotalFee(sender, recipient) > 0 && !liquidityAdd){
        uint256 feeAmount = amount.div(denominator).mul(getTotalFee(sender, recipient));
        _balances[address(this)] = _balances[address(this)].add(feeAmount);
        emit Transfer(sender, address(this), feeAmount);
        if(tokenFee > uint256(0)){_transfer(address(this), address(token_receiver), amount.div(denominator).mul(tokenFee));}
        return amount.sub(feeAmount);} return amount;
    }

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

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

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"tokenAmount","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"ETHAmount","type":"uint256"},{"indexed":true,"internalType":"address","name":"wallet","type":"address"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"CreateLiquidity","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"bool","name":"isExcluded","type":"bool"},{"indexed":true,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"whitelistTime","type":"uint256"},{"indexed":true,"internalType":"bool","name":"whitelistAllowed","type":"bool"},{"indexed":true,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"Launch","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"owner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"minPeriod","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"minDistribution","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"distributorGas","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"SetDistributionCriteria","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"bool","name":"isExempt","type":"bool"},{"indexed":true,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"SetDividendExempt","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"marketing","type":"address"},{"indexed":true,"internalType":"address","name":"liquidity","type":"address"},{"indexed":true,"internalType":"address","name":"development","type":"address"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"SetInternalAddresses","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"maxTxAmount","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"maxWalletToken","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"maxTransfer","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"SetParameters","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"stakingAddress","type":"address"},{"indexed":true,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"SetStakingAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"total","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"sell","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"transfer","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"SetStructure","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"swapAmount","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"swapThreshold","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"swapMinAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"SetSwapBackSettings","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"bool","name":"isBot","type":"bool"},{"indexed":true,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"SetisBot","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"TradingEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"Withdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"bool","name":"isWhitelisted","type":"bool"},{"indexed":true,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"isWhitelisted","type":"event"},{"inputs":[],"name":"_maxSellAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"amountStaked","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"availableBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"circulatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"createLiquidity","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"rescueERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketing","type":"address"},{"internalType":"address","name":"_liquidity","type":"address"},{"internalType":"address","name":"_development","type":"address"},{"internalType":"address","name":"_staking","type":"address"},{"internalType":"address","name":"_token","type":"address"}],"name":"setInternalAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buy","type":"uint256"},{"internalType":"uint256","name":"_trans","type":"uint256"},{"internalType":"uint256","name":"_wallet","type":"uint256"}],"name":"setParameters","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_staking","type":"address"}],"name":"setStakingAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidity","type":"uint256"},{"internalType":"uint256","name":"_marketing","type":"uint256"},{"internalType":"uint256","name":"_token","type":"uint256"},{"internalType":"uint256","name":"_development","type":"uint256"},{"internalType":"uint256","name":"_staking","type":"uint256"},{"internalType":"uint256","name":"_total","type":"uint256"},{"internalType":"uint256","name":"_sell","type":"uint256"},{"internalType":"uint256","name":"_trans","type":"uint256"}],"name":"setStructure","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_swapAmount","type":"uint256"},{"internalType":"uint256","name":"_swapThreshold","type":"uint256"},{"internalType":"uint256","name":"_minTokenAmount","type":"uint256"}],"name":"setSwapbackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setTransferDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setisBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setisExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"bool","name":"_bool","type":"bool"}],"name":"setisWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_whitelistTime","type":"uint256"},{"internalType":"bool","name":"_whitelistAllowed","type":"bool"}],"name":"startWhitelistTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalStaked","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":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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 payable","name":"adr","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052620000126009600a62000551565b6200002190620f424062000569565b600155612710600154606462000038919062000569565b62000044919062000583565b60025561271060015460646200005b919062000569565b62000067919062000583565b60035561271060015460646200007e919062000569565b6200008a919062000583565b6004556064600a81905561012c600b55600c556000600d819055600e8190556101f4600f8190556010556011556127106012556013805462ffffff191660019081179091556015805460ff19169055601881905554620186a090620000f19060fa62000569565b620000fd919062000583565b601955620186a0600154600a62000115919062000569565b62000121919062000583565b601a55601e80546001600160a01b031990811673fe46c20c69bcd095814e5eaa043ee0be9c2ba6da908117909255601f8054821673dcbeba84bf1cff6c984addab20f135393144ebe8179055602080548216831790556021805482169092179091556022805490911661dead1790553480156200019d57600080fd5b50600080546001600160a01b031916331781556040805163c45a015560e01b81529051737a250d5630b4cf539739df2c5dacb4c659f2488d9291839163c45a0155916004808201926020929091908290030181865afa15801562000205573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200022b9190620005a6565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000279573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200029f9190620005a6565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015620002ed573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003139190620005a6565b600880546001600160a01b03199081166001600160a01b038681169190911790925560098054909116838316179055306000908152600760209081526040808320805460ff19908116600190811783553380875284872080549093168217835583546201000062ff00001991821681179095558654891688528588208054821686179055601f54891688528588208054821686179055601e54909816875284872080548916851790557fb0c2646e02af70b79e3fe9277b98373379f54150e4e26b2b5650139f7a75a65d80548916851790558087528254909716909217905554600583528184208190559051908152939450919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050620005d1565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620004935781600019048211156200047757620004776200043c565b808516156200048557918102915b93841c939080029062000457565b509250929050565b600082620004ac575060016200054b565b81620004bb575060006200054b565b8160018114620004d45760028114620004df57620004ff565b60019150506200054b565b60ff841115620004f357620004f36200043c565b50506001821b6200054b565b5060208310610133831016604e8410600b841016171562000524575081810a6200054b565b62000530838362000452565b80600019048211156200054757620005476200043c565b0290505b92915050565b60006200056260ff8416836200049b565b9392505050565b80820281158282048414176200054b576200054b6200043c565b600082620005a157634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215620005b957600080fd5b81516001600160a01b03811681146200056257600080fd5b612ca080620005e16000396000f3fe6080604052600436106102135760003560e01c806386975cfe11610118578063a9059cbb116100a0578063e2d6f94c1161006f578063e2d6f94c1461064f578063e94dd17c1461066f578063ef40a6701461068f578063f2fde38b146106bc578063f4e0d9ac146106dc57600080fd5b8063a9059cbb146105af578063b6b55f25146105cf578063c876d0b9146105ef578063dd62ed3e1461060957600080fd5b80639358928b116100e75780639358928b1461050b57806395d89b41146105205780639fb05d371461054f578063a0821be31461056f578063a8aa1b311461058f57600080fd5b806386975cfe14610479578063893d20e8146104995780638c41180e146104cb5780638cd4426d146104eb57600080fd5b806348ff2b8b1161019b57806378026a221161016a57806378026a221461040e57806378109e54146104215780637cca52fe146104375780637d1db4a51461044d578063817b1cd21461046357600080fd5b806348ff2b8b1461037857806355c2535e1461039857806370a08231146103b857806377c325d6146103ee57600080fd5b8063293230b8116101e2578063293230b8146102d65780632e1a7d4d146102ed5780632f54bf6e1461030d578063313ce5671461033c57806334c5d2ce1461035857600080fd5b806306fdde031461021f578063095ea7b31461026757806318160ddd1461029757806323b872dd146102b657600080fd5b3661021a57005b600080fd5b34801561022b57600080fd5b5060408051808201909152600d81526c4861636b6174686f6e2044414f60981b60208201525b60405161025e919061276d565b60405180910390f35b34801561027357600080fd5b506102876102823660046127d3565b6106fc565b604051901515815260200161025e565b3480156102a357600080fd5b506001545b60405190815260200161025e565b3480156102c257600080fd5b506102876102d13660046127ff565b610713565b3480156102e257600080fd5b506102eb61077d565b005b3480156102f957600080fd5b506102eb610308366004612840565b6107f0565b34801561031957600080fd5b50610287610328366004612859565b6000546001600160a01b0391821691161490565b34801561034857600080fd5b506040516009815260200161025e565b34801561036457600080fd5b506102eb610373366004612876565b610936565b34801561038457600080fd5b506102eb6103933660046128b0565b610aca565b3480156103a457600080fd5b506102eb6103b33660046128e9565b610b53565b3480156103c457600080fd5b506102a86103d3366004612859565b6001600160a01b031660009081526005602052604090205490565b3480156103fa57600080fd5b506102eb61040936600461296f565b610c54565b6102eb61041c366004612840565b610c91565b34801561042d57600080fd5b506102a860045481565b34801561044357600080fd5b506102a860035481565b34801561045957600080fd5b506102a860025481565b34801561046f57600080fd5b506102a8601c5481565b34801561048557600080fd5b506102eb61049436600461298c565b610d44565b3480156104a557600080fd5b506000546001600160a01b03165b6040516001600160a01b03909116815260200161025e565b3480156104d757600080fd5b506102eb6104e63660046128b0565b610e30565b3480156104f757600080fd5b506102eb6105063660046127d3565b610f5b565b34801561051757600080fd5b506102a8610fd7565b34801561052c57600080fd5b50604080518082019091526006815265121050d2ccd160d21b6020820152610251565b34801561055b57600080fd5b506102eb61056a3660046129b1565b611048565b34801561057b57600080fd5b506102a861058a366004612859565b611158565b34801561059b57600080fd5b506009546104b3906001600160a01b031681565b3480156105bb57600080fd5b506102876105ca3660046127d3565b611185565b3480156105db57600080fd5b506102eb6105ea366004612840565b611192565b3480156105fb57600080fd5b506015546102879060ff1681565b34801561061557600080fd5b506102a8610624366004612a22565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205490565b34801561065b57600080fd5b506102eb61066a366004612a50565b6112ef565b34801561067b57600080fd5b506102eb61068a366004612876565b611428565b34801561069b57600080fd5b506102a86106aa366004612859565b601b6020526000908152604090205481565b3480156106c857600080fd5b506102eb6106d7366004612859565b61149f565b3480156106e857600080fd5b506102eb6106f7366004612859565b61151d565b60006107093384846115ae565b5060015b92915050565b60006107208484846116d2565b610772843361076d85604051806060016040528060288152602001612c43602891396001600160a01b038a1660009081526006602090815260408083203384529091529020549190611802565b6115ae565b5060015b9392505050565b6000546001600160a01b031633146107b05760405162461bcd60e51b81526004016107a790612aa5565b60405180910390fd5b6013805462ff0000191662010000179055604051429033907f340c369ced7c3a65b67543c4f1e839173c42d01b38931b0c01b18c89a1d1ba4b90600090a3565b336000908152601b60205260409020548111156108655760405162461bcd60e51b815260206004820152602d60248201527f45524332303a2043616e6e6f7420756e7374616b65206d6f7265207468616e2060448201526c185b5bdd5b9d081cdd185ad959609a1b60648201526084016107a7565b601d5460405163d8a9bf2960e01b8152336004820152602481018390526001600160a01b039091169063d8a9bf2990604401600060405180830381600087803b1580156108b157600080fd5b505af11580156108c5573d6000803e3d6000fd5b5050336000908152601b60205260409020546108e4925090508261182e565b336000908152601b6020526040902055601c54610901908261182e565b601c556040514290829033907ff279e6a1f5e320cca91135676d9cb6e44ca8a08c0b88342bcdb1144f6511b56890600090a450565b6000546001600160a01b031633146109605760405162461bcd60e51b81526004016107a790612aa5565b60006127108461096f60015490565b6109799190612adb565b6109839190612af2565b905060006127108461099460015490565b61099e9190612adb565b6109a89190612af2565b90506000612710846109b960015490565b6109c39190612adb565b6109cd9190612af2565b905060006109f16103e86109eb60056109e560015490565b9061183a565b90611846565b9050808410158015610a035750808310155b8015610a0f5750808210155b610a795760405162461bcd60e51b815260206004820152603560248201527f45524332303a206d61782054587320616e64206d61782057616c6c65742063616044820152746e6e6f74206265206c657373207468616e202e352560581b60648201526084016107a7565b6002849055600383905560048290556040514281528390839086907fbd5acdd9cd7346c04cee822893f228a65a948bc41357408255ab8f36c446349f9060200160405180910390a450505050505050565b6000546001600160a01b03163314610af45760405162461bcd60e51b81526004016107a790612aa5565b6001600160a01b038216600081815260076020526040808220805462ff0000191662010000861515908102919091179091559051429391927ff61420caae4661cdd9554a2c8b6c89fc9f30f94abccb1da76abb2ec99783821191a45050565b6000546001600160a01b03163314610b7d5760405162461bcd60e51b81526004016107a790612aa5565b60005b82811015610c4e578160076000868685818110610b9f57610b9f612b14565b9050602002016020810190610bb49190612859565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905542821515858584818110610bf257610bf2612b14565b9050602002016020810190610c079190612859565b6001600160a01b03167f06fc074ca2e419a387dc375c9b7c443ad8795d2ba416fa17bb4691ea4ba86ed560405160405180910390a480610c4681612b2a565b915050610b80565b50505050565b6000546001600160a01b03163314610c7e5760405162461bcd60e51b81526004016107a790612aa5565b6015805460ff1916911515919091179055565b6017805461ff001916610100179055610cab3330836115ae565b600854610cc39033906001600160a01b0316836115ae565b610cce3330836116d2565b600854610ce69030906001600160a01b0316836115ae565b610cf1813433611852565b336001600160a01b031634827f89d4d2ecc95200a080f69cea2131862ff53c70739a5db9ab0373fcdd09da746d42604051610d2e91815260200190565b60405180910390a4506017805461ff0019169055565b6000546001600160a01b03163314610d6e5760405162461bcd60e51b81526004016107a790612aa5565b601354610100900460ff1615610dd65760405162461bcd60e51b815260206004820152602760248201527f45524332303a2077686974656c69737420706572696f6420616c726561647920604482015266195b98589b195960ca1b60648201526084016107a7565b601380544260238190556024859055831515610100810262ffff001990931692909217620100001790925560405184907f0ce4d0131af8e20b17ec4635aadf58b43531a126375fbecb229e0ef13c761c5790600090a45050565b6000546001600160a01b03163314610e5a5760405162461bcd60e51b81526004016107a790612aa5565b6009546001600160a01b03838116911614801590610e8657506008546001600160a01b03838116911614155b8015610e9b57506001600160a01b0382163014155b8015610eb257506001600160a01b03821661dead14155b610efe5760405162461bcd60e51b815260206004820152601960248201527f45524332303a20696e656c696769626c6520616464726573730000000000000060448201526064016107a7565b6001600160a01b038216600081815260076020526040808220805461ff001916610100861515908102919091179091559051429391927fd1c5980b68c66e201f3a2b571fb898fa61a65a2c74c60690855730f86165d00d91a45050565b601e5460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390529083169063a9059cbb906044016020604051808303816000875af1158015610fae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fd29190612b43565b505050565b60056020527f05b8ccbb9d4d8fb16ea74ce3c29a41f1b461fbdaff4714a0d9a8eb05499746bc5461dead60009081527f7d509c07f0d4edcc2dd1b53aae68677132eb562dcba78e36381b63ccaf66e6ba54600154919261104392909161103d919061182e565b9061182e565b905090565b6000546001600160a01b031633146110725760405162461bcd60e51b81526004016107a790612aa5565b601f80546001600160a01b03199081166001600160a01b038881169182179093556020805483168885169081178255601e8054851689871690811790915560218054861689881690811790915560228054909616968816968717909555600084815260078452604080822080546201000062ff00001991821681179092558584528284208054821683179055978352818320805489168217905597825290819020805490961690961790945593514281529293927f358f3926f41536f5fa6926b5b6945502e5fdfb85b1876c473d06606ed0fae9ca910160405180910390a45050505050565b6001600160a01b0381166000908152601b6020908152604080832054600590925282205461070d9161182e565b60006107093384846116d2565b336000908152601b60209081526040808320546005909252909120546111b79161182e565b81111561121e5760405162461bcd60e51b815260206004820152602f60248201527f45524332303a2043616e6e6f74207374616b65206d6f7265207468616e20617660448201526e61696c61626c652062616c616e636560881b60648201526084016107a7565b601d5460405163773a0f0960e01b8152336004820152602481018390526001600160a01b039091169063773a0f0990604401600060405180830381600087803b15801561126a57600080fd5b505af115801561127e573d6000803e3d6000fd5b5050336000908152601b602052604090205461129d9250905082611905565b336000908152601b6020526040902055601c546112ba9082611905565b601c556040514290829033907f90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a1590600090a450565b6000546001600160a01b031633146113195760405162461bcd60e51b81526004016107a790612aa5565b600a889055600b879055600e869055600d849055600c859055600f8390556010829055601181905560125461134f906005611846565b600f541115801561136f5750601254611369906005611846565b60105411155b801561138a5750601254611384906005611846565b60115411155b6113e25760405162461bcd60e51b815260206004820152602360248201527f45524332303a20666565732063616e6e6f74206265206d6f7265207468616e2060448201526232302560e81b60648201526084016107a7565b4282847fdddb43af0ad29e5d9d3cb393fd94e8f11ac2c069da19545bac6ee6baf3ddc9898460405161141691815260200190565b60405180910390a45050505050505050565b6000546001600160a01b031633146114525760405162461bcd60e51b81526004016107a790612aa5565b60188390556019829055601a8190556040514281528190839085907f3af591b474e55c209cfbc3da369b6762366e3015997314ac10bd5c3198d26fb39060200160405180910390a4505050565b6000546001600160a01b031633146114c95760405162461bcd60e51b81526004016107a790612aa5565b600080546001600160a01b0319166001600160a01b0383169081179091556040519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861639060200160405180910390a150565b6000546001600160a01b031633146115475760405162461bcd60e51b81526004016107a790612aa5565b601d80546001600160a01b0383166001600160a01b03199091168117909155600081815260076020526040808220805462ff0000191662010000179055514292917f23481943b6ef3dff645af874fbb24781bf224a02312f9cb308880e03e0a9ddee91a350565b6001600160a01b0383166116105760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016107a7565b6001600160a01b0382166116715760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016107a7565b6001600160a01b0383811660008181526006602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6116dd838383611911565b6116e78383611a50565b6116f2838383611bb8565b6116fd838383611dc4565b6117078383611eca565b611711838361201c565b61171c83838361208d565b6001600160a01b03831660009081526005602052604090205461173f908261182e565b6001600160a01b03841660009081526005602052604081209190915561176584846120b2565b61176f578161177a565b61177a848484612104565b6001600160a01b0384166000908152600560205260409020549091506117a09082611905565b6001600160a01b0380851660008181526005602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906117f49085815260200190565b60405180910390a350505050565b600081848411156118265760405162461bcd60e51b81526004016107a7919061276d565b505050900390565b60006107768284612b60565b60006107768284612adb565b60006107768284612af2565b60085461186a9030906001600160a01b0316856115ae565b60085460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0383811660848301524260a48301529091169063f305d71990849060c40160606040518083038185885af11580156118d8573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906118fd9190612b73565b505050505050565b60006107768284612ba1565b6001600160a01b0383166119755760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016107a7565b6001600160a01b0382166119d75760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016107a7565b6001600160a01b038316600090815260056020526040902054811115610fd25760405162461bcd60e51b815260206004820152602860248201527f45524332303a2062656c6f7720617661696c61626c652062616c616e636520746044820152671a1c995cda1bdb1960c21b60648201526084016107a7565b42611a6860245460235461190590919063ffffffff16565b1015611a7a576013805461ff00191690555b6001600160a01b03821660009081526007602052604090205462010000900460ff16158015611ac857506001600160a01b03811660009081526007602052604090205462010000900460ff16155b8015611adc5750601354610100900460ff16155b15611b395760135462010000900460ff16611b395760405162461bcd60e51b815260206004820152601d60248201527f45524332303a2054726164696e67206973206e6f7420616c6c6f77656400000060448201526064016107a7565b601354610100900460ff168015611b58575060135462010000900460ff165b15611bb457611b67828261220f565b15611bb45760405162461bcd60e51b815260206004820152601760248201527f45524332303a2057686974656c69737420506572696f6400000000000000000060448201526064016107a7565b5050565b6001600160a01b0383166000908152601b602052604090205415611c71576001600160a01b038316600090815260056020908152604080832054601b90925290912054611c06908390611905565b1115611c715760405162461bcd60e51b815260206004820152603460248201527f45524332303a2065786365656473206d6178696d756d20616c6c6f776564206e60448201527337ba1031bab93932b73a363c9039ba30b5b2b21760611b60648201526084016107a7565b6009546001600160a01b03848116911614611d255760035481111580611cb557506001600160a01b03831660009081526007602052604090205462010000900460ff165b80611cde57506001600160a01b03821660009081526007602052604090205462010000900460ff165b611d255760405162461bcd60e51b8152602060048201526018602482015277115490cc8c0e881d1e081b1a5b5a5d08195e18d95959195960421b60448201526064016107a7565b60025481111580611d5457506001600160a01b03831660009081526007602052604090205462010000900460ff165b80611d7d57506001600160a01b03821660009081526007602052604090205462010000900460ff165b610fd25760405162461bcd60e51b8152602060048201526018602482015277115490cc8c0e881d1e081b1a5b5a5d08195e18d95959195960421b60448201526064016107a7565b6001600160a01b03831660009081526007602052604090205462010000900460ff16158015611e1257506001600160a01b03821660009081526007602052604090205462010000900460ff16155b8015611e2c57506009546001600160a01b03838116911614155b8015611e4357506001600160a01b03821661dead14155b15610fd2576004546001600160a01b038316600090815260056020526040902054611e6e9083611905565b1115610fd25760405162461bcd60e51b815260206004820152602560248201527f45524332303a2065786365656473206d6178696d756d2077616c6c657420616d60448201526437bab73a1760d91b60648201526084016107a7565b60155460ff168015611efb57506001600160a01b03821660009081526007602052604090205462010000900460ff16155b8015611f2657506001600160a01b03811660009081526007602052604090205462010000900460ff16155b8015611f4057506009546001600160a01b03828116911614155b8015611f5757506001600160a01b03811661dead14155b8015611f7157506008546001600160a01b03828116911614155b15611bb4573260009081526014602052604090205443116120065760405162461bcd60e51b815260206004820152604360248201527f45524332303a205472616e736665722044656c617920656e61626c65642e204f60448201527f6e6c79206f6e652070757263686173652070657220626c6f636b20616c6c6f7760648201526232b21760e91b608482015260a4016107a7565b3260009081526014602052604090204390555050565b6009546001600160a01b03828116911614801561205857506001600160a01b03821660009081526007602052604090205462010000900460ff16155b801561206c5750601754610100900460ff16155b15611bb4576001601660008282546120849190612ba1565b90915550505050565b6120988383836122ab565b15610fd2576120a8601954612377565b6000601655505050565b6001600160a01b03821660009081526007602052604081205462010000900460ff161580156107765750506001600160a01b031660009081526007602052604090205462010000900460ff1615919050565b6000806121118585612570565b1180156121265750601754610100900460ff16155b1561220857600061214861213a8686612570565b6012546109e5908690611846565b306000908152600560205260409020549091506121659082611905565b30600081815260056020526040908190209290925590516001600160a01b038716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906121b69085815260200190565b60405180910390a3600e54156121f657602254600e546012546121f69230926001600160a01b03909116916121f191906109e5908990611846565b6116d2565b612200838261182e565b915050610776565b5092915050565b6001600160a01b03821660009081526007602052604081205460ff1615801561225157506001600160a01b03821660009081526007602052604090205460ff16155b801561227c57506001600160a01b03831660009081526007602052604090205462010000900460ff16155b80156107765750506001600160a01b031660009081526007602052604090205462010000900460ff1615919050565b601a546019543060009081526005602052604081205460175491938510159211159060ff161580156122df575060135460ff165b80156122f3575060135462010000900460ff165b80156122fc5750815b801561232757506001600160a01b03861660009081526007602052604090205462010000900460ff16155b801561234057506009546001600160a01b038681169116145b8015612350575060185460165410155b80156123595750805b801561236d5750601754610100900460ff16155b9695505050505050565b6001601760006101000a81548160ff02191690831515021790555060006123c760026109e5600d546123c1600c546123c1600b546123c16001600a5461190590919063ffffffff16565b90611905565b905060006123e4826109eb600a548661183a90919063ffffffff16565b905060006123f2848361182e565b9050476123fe8261261b565b600061240a478361182e565b9050600061242d612426600a548861182e90919063ffffffff16565b8390611846565b90506000612446600a548361183a90919063ffffffff16565b905080156124675760205461246790879083906001600160a01b0316611852565b600b5460009061247c906109e585600261183a565b905080156124c057601f546040516001600160a01b039091169082156108fc029083906000818181858888f193505050501580156124be573d6000803e3d6000fd5b505b600d546000906124d5906109e586600261183a565b90508015612519576021546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015612517573d6000803e3d6000fd5b505b471561255a57601e546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015612558573d6000803e3d6000fd5b505b50506017805460ff191690555050505050505050565b6001600160a01b038216600090815260076020526040812054610100900460ff16806125b957506001600160a01b038216600090815260076020526040902054610100900460ff165b156125d3576012546125cc90606461182e565b905061070d565b6009546001600160a01b03908116908316036125f2575060105461070d565b6009546001600160a01b03908116908416036126115750600f5461070d565b5060115492915050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061265057612650612b14565b6001600160a01b03928316602091820292909201810191909152600854604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156126a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126cd9190612bb4565b816001815181106126e0576126e0612b14565b6001600160a01b03928316602091820292909201015260085461270691309116846115ae565b60085460405163791ac94760e01b81526001600160a01b039091169063791ac9479061273f908590600090869030904290600401612bd1565b600060405180830381600087803b15801561275957600080fd5b505af11580156118fd573d6000803e3d6000fd5b600060208083528351808285015260005b8181101561279a5785810183015185820160400152820161277e565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146127d057600080fd5b50565b600080604083850312156127e657600080fd5b82356127f1816127bb565b946020939093013593505050565b60008060006060848603121561281457600080fd5b833561281f816127bb565b9250602084013561282f816127bb565b929592945050506040919091013590565b60006020828403121561285257600080fd5b5035919050565b60006020828403121561286b57600080fd5b8135610776816127bb565b60008060006060848603121561288b57600080fd5b505081359360208301359350604090920135919050565b80151581146127d057600080fd5b600080604083850312156128c357600080fd5b82356128ce816127bb565b915060208301356128de816128a2565b809150509250929050565b6000806000604084860312156128fe57600080fd5b833567ffffffffffffffff8082111561291657600080fd5b818601915086601f83011261292a57600080fd5b81358181111561293957600080fd5b8760208260051b850101111561294e57600080fd5b60209283019550935050840135612964816128a2565b809150509250925092565b60006020828403121561298157600080fd5b8135610776816128a2565b6000806040838503121561299f57600080fd5b8235915060208301356128de816128a2565b600080600080600060a086880312156129c957600080fd5b85356129d4816127bb565b945060208601356129e4816127bb565b935060408601356129f4816127bb565b92506060860135612a04816127bb565b91506080860135612a14816127bb565b809150509295509295909350565b60008060408385031215612a3557600080fd5b8235612a40816127bb565b915060208301356128de816127bb565b600080600080600080600080610100898b031215612a6d57600080fd5b505086359860208801359850604088013597606081013597506080810135965060a0810135955060c0810135945060e0013592509050565b60208082526006908201526510a7aba722a960d11b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141761070d5761070d612ac5565b600082612b0f57634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b600060018201612b3c57612b3c612ac5565b5060010190565b600060208284031215612b5557600080fd5b8151610776816128a2565b8181038181111561070d5761070d612ac5565b600080600060608486031215612b8857600080fd5b8351925060208401519150604084015190509250925092565b8082018082111561070d5761070d612ac5565b600060208284031215612bc657600080fd5b8151610776816127bb565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612c215784516001600160a01b031683529383019391830191600101612bfc565b50506001600160a01b0396909616606085015250505060800152939250505056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a264697066735822122085a857d29c9a4363f1111e983983938f5476e22f44805a54ff3cf6ccab60193764736f6c63430008120033

Deployed Bytecode

0x6080604052600436106102135760003560e01c806386975cfe11610118578063a9059cbb116100a0578063e2d6f94c1161006f578063e2d6f94c1461064f578063e94dd17c1461066f578063ef40a6701461068f578063f2fde38b146106bc578063f4e0d9ac146106dc57600080fd5b8063a9059cbb146105af578063b6b55f25146105cf578063c876d0b9146105ef578063dd62ed3e1461060957600080fd5b80639358928b116100e75780639358928b1461050b57806395d89b41146105205780639fb05d371461054f578063a0821be31461056f578063a8aa1b311461058f57600080fd5b806386975cfe14610479578063893d20e8146104995780638c41180e146104cb5780638cd4426d146104eb57600080fd5b806348ff2b8b1161019b57806378026a221161016a57806378026a221461040e57806378109e54146104215780637cca52fe146104375780637d1db4a51461044d578063817b1cd21461046357600080fd5b806348ff2b8b1461037857806355c2535e1461039857806370a08231146103b857806377c325d6146103ee57600080fd5b8063293230b8116101e2578063293230b8146102d65780632e1a7d4d146102ed5780632f54bf6e1461030d578063313ce5671461033c57806334c5d2ce1461035857600080fd5b806306fdde031461021f578063095ea7b31461026757806318160ddd1461029757806323b872dd146102b657600080fd5b3661021a57005b600080fd5b34801561022b57600080fd5b5060408051808201909152600d81526c4861636b6174686f6e2044414f60981b60208201525b60405161025e919061276d565b60405180910390f35b34801561027357600080fd5b506102876102823660046127d3565b6106fc565b604051901515815260200161025e565b3480156102a357600080fd5b506001545b60405190815260200161025e565b3480156102c257600080fd5b506102876102d13660046127ff565b610713565b3480156102e257600080fd5b506102eb61077d565b005b3480156102f957600080fd5b506102eb610308366004612840565b6107f0565b34801561031957600080fd5b50610287610328366004612859565b6000546001600160a01b0391821691161490565b34801561034857600080fd5b506040516009815260200161025e565b34801561036457600080fd5b506102eb610373366004612876565b610936565b34801561038457600080fd5b506102eb6103933660046128b0565b610aca565b3480156103a457600080fd5b506102eb6103b33660046128e9565b610b53565b3480156103c457600080fd5b506102a86103d3366004612859565b6001600160a01b031660009081526005602052604090205490565b3480156103fa57600080fd5b506102eb61040936600461296f565b610c54565b6102eb61041c366004612840565b610c91565b34801561042d57600080fd5b506102a860045481565b34801561044357600080fd5b506102a860035481565b34801561045957600080fd5b506102a860025481565b34801561046f57600080fd5b506102a8601c5481565b34801561048557600080fd5b506102eb61049436600461298c565b610d44565b3480156104a557600080fd5b506000546001600160a01b03165b6040516001600160a01b03909116815260200161025e565b3480156104d757600080fd5b506102eb6104e63660046128b0565b610e30565b3480156104f757600080fd5b506102eb6105063660046127d3565b610f5b565b34801561051757600080fd5b506102a8610fd7565b34801561052c57600080fd5b50604080518082019091526006815265121050d2ccd160d21b6020820152610251565b34801561055b57600080fd5b506102eb61056a3660046129b1565b611048565b34801561057b57600080fd5b506102a861058a366004612859565b611158565b34801561059b57600080fd5b506009546104b3906001600160a01b031681565b3480156105bb57600080fd5b506102876105ca3660046127d3565b611185565b3480156105db57600080fd5b506102eb6105ea366004612840565b611192565b3480156105fb57600080fd5b506015546102879060ff1681565b34801561061557600080fd5b506102a8610624366004612a22565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205490565b34801561065b57600080fd5b506102eb61066a366004612a50565b6112ef565b34801561067b57600080fd5b506102eb61068a366004612876565b611428565b34801561069b57600080fd5b506102a86106aa366004612859565b601b6020526000908152604090205481565b3480156106c857600080fd5b506102eb6106d7366004612859565b61149f565b3480156106e857600080fd5b506102eb6106f7366004612859565b61151d565b60006107093384846115ae565b5060015b92915050565b60006107208484846116d2565b610772843361076d85604051806060016040528060288152602001612c43602891396001600160a01b038a1660009081526006602090815260408083203384529091529020549190611802565b6115ae565b5060015b9392505050565b6000546001600160a01b031633146107b05760405162461bcd60e51b81526004016107a790612aa5565b60405180910390fd5b6013805462ff0000191662010000179055604051429033907f340c369ced7c3a65b67543c4f1e839173c42d01b38931b0c01b18c89a1d1ba4b90600090a3565b336000908152601b60205260409020548111156108655760405162461bcd60e51b815260206004820152602d60248201527f45524332303a2043616e6e6f7420756e7374616b65206d6f7265207468616e2060448201526c185b5bdd5b9d081cdd185ad959609a1b60648201526084016107a7565b601d5460405163d8a9bf2960e01b8152336004820152602481018390526001600160a01b039091169063d8a9bf2990604401600060405180830381600087803b1580156108b157600080fd5b505af11580156108c5573d6000803e3d6000fd5b5050336000908152601b60205260409020546108e4925090508261182e565b336000908152601b6020526040902055601c54610901908261182e565b601c556040514290829033907ff279e6a1f5e320cca91135676d9cb6e44ca8a08c0b88342bcdb1144f6511b56890600090a450565b6000546001600160a01b031633146109605760405162461bcd60e51b81526004016107a790612aa5565b60006127108461096f60015490565b6109799190612adb565b6109839190612af2565b905060006127108461099460015490565b61099e9190612adb565b6109a89190612af2565b90506000612710846109b960015490565b6109c39190612adb565b6109cd9190612af2565b905060006109f16103e86109eb60056109e560015490565b9061183a565b90611846565b9050808410158015610a035750808310155b8015610a0f5750808210155b610a795760405162461bcd60e51b815260206004820152603560248201527f45524332303a206d61782054587320616e64206d61782057616c6c65742063616044820152746e6e6f74206265206c657373207468616e202e352560581b60648201526084016107a7565b6002849055600383905560048290556040514281528390839086907fbd5acdd9cd7346c04cee822893f228a65a948bc41357408255ab8f36c446349f9060200160405180910390a450505050505050565b6000546001600160a01b03163314610af45760405162461bcd60e51b81526004016107a790612aa5565b6001600160a01b038216600081815260076020526040808220805462ff0000191662010000861515908102919091179091559051429391927ff61420caae4661cdd9554a2c8b6c89fc9f30f94abccb1da76abb2ec99783821191a45050565b6000546001600160a01b03163314610b7d5760405162461bcd60e51b81526004016107a790612aa5565b60005b82811015610c4e578160076000868685818110610b9f57610b9f612b14565b9050602002016020810190610bb49190612859565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905542821515858584818110610bf257610bf2612b14565b9050602002016020810190610c079190612859565b6001600160a01b03167f06fc074ca2e419a387dc375c9b7c443ad8795d2ba416fa17bb4691ea4ba86ed560405160405180910390a480610c4681612b2a565b915050610b80565b50505050565b6000546001600160a01b03163314610c7e5760405162461bcd60e51b81526004016107a790612aa5565b6015805460ff1916911515919091179055565b6017805461ff001916610100179055610cab3330836115ae565b600854610cc39033906001600160a01b0316836115ae565b610cce3330836116d2565b600854610ce69030906001600160a01b0316836115ae565b610cf1813433611852565b336001600160a01b031634827f89d4d2ecc95200a080f69cea2131862ff53c70739a5db9ab0373fcdd09da746d42604051610d2e91815260200190565b60405180910390a4506017805461ff0019169055565b6000546001600160a01b03163314610d6e5760405162461bcd60e51b81526004016107a790612aa5565b601354610100900460ff1615610dd65760405162461bcd60e51b815260206004820152602760248201527f45524332303a2077686974656c69737420706572696f6420616c726561647920604482015266195b98589b195960ca1b60648201526084016107a7565b601380544260238190556024859055831515610100810262ffff001990931692909217620100001790925560405184907f0ce4d0131af8e20b17ec4635aadf58b43531a126375fbecb229e0ef13c761c5790600090a45050565b6000546001600160a01b03163314610e5a5760405162461bcd60e51b81526004016107a790612aa5565b6009546001600160a01b03838116911614801590610e8657506008546001600160a01b03838116911614155b8015610e9b57506001600160a01b0382163014155b8015610eb257506001600160a01b03821661dead14155b610efe5760405162461bcd60e51b815260206004820152601960248201527f45524332303a20696e656c696769626c6520616464726573730000000000000060448201526064016107a7565b6001600160a01b038216600081815260076020526040808220805461ff001916610100861515908102919091179091559051429391927fd1c5980b68c66e201f3a2b571fb898fa61a65a2c74c60690855730f86165d00d91a45050565b601e5460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390529083169063a9059cbb906044016020604051808303816000875af1158015610fae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fd29190612b43565b505050565b60056020527f05b8ccbb9d4d8fb16ea74ce3c29a41f1b461fbdaff4714a0d9a8eb05499746bc5461dead60009081527f7d509c07f0d4edcc2dd1b53aae68677132eb562dcba78e36381b63ccaf66e6ba54600154919261104392909161103d919061182e565b9061182e565b905090565b6000546001600160a01b031633146110725760405162461bcd60e51b81526004016107a790612aa5565b601f80546001600160a01b03199081166001600160a01b038881169182179093556020805483168885169081178255601e8054851689871690811790915560218054861689881690811790915560228054909616968816968717909555600084815260078452604080822080546201000062ff00001991821681179092558584528284208054821683179055978352818320805489168217905597825290819020805490961690961790945593514281529293927f358f3926f41536f5fa6926b5b6945502e5fdfb85b1876c473d06606ed0fae9ca910160405180910390a45050505050565b6001600160a01b0381166000908152601b6020908152604080832054600590925282205461070d9161182e565b60006107093384846116d2565b336000908152601b60209081526040808320546005909252909120546111b79161182e565b81111561121e5760405162461bcd60e51b815260206004820152602f60248201527f45524332303a2043616e6e6f74207374616b65206d6f7265207468616e20617660448201526e61696c61626c652062616c616e636560881b60648201526084016107a7565b601d5460405163773a0f0960e01b8152336004820152602481018390526001600160a01b039091169063773a0f0990604401600060405180830381600087803b15801561126a57600080fd5b505af115801561127e573d6000803e3d6000fd5b5050336000908152601b602052604090205461129d9250905082611905565b336000908152601b6020526040902055601c546112ba9082611905565b601c556040514290829033907f90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a1590600090a450565b6000546001600160a01b031633146113195760405162461bcd60e51b81526004016107a790612aa5565b600a889055600b879055600e869055600d849055600c859055600f8390556010829055601181905560125461134f906005611846565b600f541115801561136f5750601254611369906005611846565b60105411155b801561138a5750601254611384906005611846565b60115411155b6113e25760405162461bcd60e51b815260206004820152602360248201527f45524332303a20666565732063616e6e6f74206265206d6f7265207468616e2060448201526232302560e81b60648201526084016107a7565b4282847fdddb43af0ad29e5d9d3cb393fd94e8f11ac2c069da19545bac6ee6baf3ddc9898460405161141691815260200190565b60405180910390a45050505050505050565b6000546001600160a01b031633146114525760405162461bcd60e51b81526004016107a790612aa5565b60188390556019829055601a8190556040514281528190839085907f3af591b474e55c209cfbc3da369b6762366e3015997314ac10bd5c3198d26fb39060200160405180910390a4505050565b6000546001600160a01b031633146114c95760405162461bcd60e51b81526004016107a790612aa5565b600080546001600160a01b0319166001600160a01b0383169081179091556040519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861639060200160405180910390a150565b6000546001600160a01b031633146115475760405162461bcd60e51b81526004016107a790612aa5565b601d80546001600160a01b0383166001600160a01b03199091168117909155600081815260076020526040808220805462ff0000191662010000179055514292917f23481943b6ef3dff645af874fbb24781bf224a02312f9cb308880e03e0a9ddee91a350565b6001600160a01b0383166116105760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016107a7565b6001600160a01b0382166116715760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016107a7565b6001600160a01b0383811660008181526006602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6116dd838383611911565b6116e78383611a50565b6116f2838383611bb8565b6116fd838383611dc4565b6117078383611eca565b611711838361201c565b61171c83838361208d565b6001600160a01b03831660009081526005602052604090205461173f908261182e565b6001600160a01b03841660009081526005602052604081209190915561176584846120b2565b61176f578161177a565b61177a848484612104565b6001600160a01b0384166000908152600560205260409020549091506117a09082611905565b6001600160a01b0380851660008181526005602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906117f49085815260200190565b60405180910390a350505050565b600081848411156118265760405162461bcd60e51b81526004016107a7919061276d565b505050900390565b60006107768284612b60565b60006107768284612adb565b60006107768284612af2565b60085461186a9030906001600160a01b0316856115ae565b60085460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0383811660848301524260a48301529091169063f305d71990849060c40160606040518083038185885af11580156118d8573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906118fd9190612b73565b505050505050565b60006107768284612ba1565b6001600160a01b0383166119755760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016107a7565b6001600160a01b0382166119d75760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016107a7565b6001600160a01b038316600090815260056020526040902054811115610fd25760405162461bcd60e51b815260206004820152602860248201527f45524332303a2062656c6f7720617661696c61626c652062616c616e636520746044820152671a1c995cda1bdb1960c21b60648201526084016107a7565b42611a6860245460235461190590919063ffffffff16565b1015611a7a576013805461ff00191690555b6001600160a01b03821660009081526007602052604090205462010000900460ff16158015611ac857506001600160a01b03811660009081526007602052604090205462010000900460ff16155b8015611adc5750601354610100900460ff16155b15611b395760135462010000900460ff16611b395760405162461bcd60e51b815260206004820152601d60248201527f45524332303a2054726164696e67206973206e6f7420616c6c6f77656400000060448201526064016107a7565b601354610100900460ff168015611b58575060135462010000900460ff165b15611bb457611b67828261220f565b15611bb45760405162461bcd60e51b815260206004820152601760248201527f45524332303a2057686974656c69737420506572696f6400000000000000000060448201526064016107a7565b5050565b6001600160a01b0383166000908152601b602052604090205415611c71576001600160a01b038316600090815260056020908152604080832054601b90925290912054611c06908390611905565b1115611c715760405162461bcd60e51b815260206004820152603460248201527f45524332303a2065786365656473206d6178696d756d20616c6c6f776564206e60448201527337ba1031bab93932b73a363c9039ba30b5b2b21760611b60648201526084016107a7565b6009546001600160a01b03848116911614611d255760035481111580611cb557506001600160a01b03831660009081526007602052604090205462010000900460ff165b80611cde57506001600160a01b03821660009081526007602052604090205462010000900460ff165b611d255760405162461bcd60e51b8152602060048201526018602482015277115490cc8c0e881d1e081b1a5b5a5d08195e18d95959195960421b60448201526064016107a7565b60025481111580611d5457506001600160a01b03831660009081526007602052604090205462010000900460ff165b80611d7d57506001600160a01b03821660009081526007602052604090205462010000900460ff165b610fd25760405162461bcd60e51b8152602060048201526018602482015277115490cc8c0e881d1e081b1a5b5a5d08195e18d95959195960421b60448201526064016107a7565b6001600160a01b03831660009081526007602052604090205462010000900460ff16158015611e1257506001600160a01b03821660009081526007602052604090205462010000900460ff16155b8015611e2c57506009546001600160a01b03838116911614155b8015611e4357506001600160a01b03821661dead14155b15610fd2576004546001600160a01b038316600090815260056020526040902054611e6e9083611905565b1115610fd25760405162461bcd60e51b815260206004820152602560248201527f45524332303a2065786365656473206d6178696d756d2077616c6c657420616d60448201526437bab73a1760d91b60648201526084016107a7565b60155460ff168015611efb57506001600160a01b03821660009081526007602052604090205462010000900460ff16155b8015611f2657506001600160a01b03811660009081526007602052604090205462010000900460ff16155b8015611f4057506009546001600160a01b03828116911614155b8015611f5757506001600160a01b03811661dead14155b8015611f7157506008546001600160a01b03828116911614155b15611bb4573260009081526014602052604090205443116120065760405162461bcd60e51b815260206004820152604360248201527f45524332303a205472616e736665722044656c617920656e61626c65642e204f60448201527f6e6c79206f6e652070757263686173652070657220626c6f636b20616c6c6f7760648201526232b21760e91b608482015260a4016107a7565b3260009081526014602052604090204390555050565b6009546001600160a01b03828116911614801561205857506001600160a01b03821660009081526007602052604090205462010000900460ff16155b801561206c5750601754610100900460ff16155b15611bb4576001601660008282546120849190612ba1565b90915550505050565b6120988383836122ab565b15610fd2576120a8601954612377565b6000601655505050565b6001600160a01b03821660009081526007602052604081205462010000900460ff161580156107765750506001600160a01b031660009081526007602052604090205462010000900460ff1615919050565b6000806121118585612570565b1180156121265750601754610100900460ff16155b1561220857600061214861213a8686612570565b6012546109e5908690611846565b306000908152600560205260409020549091506121659082611905565b30600081815260056020526040908190209290925590516001600160a01b038716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906121b69085815260200190565b60405180910390a3600e54156121f657602254600e546012546121f69230926001600160a01b03909116916121f191906109e5908990611846565b6116d2565b612200838261182e565b915050610776565b5092915050565b6001600160a01b03821660009081526007602052604081205460ff1615801561225157506001600160a01b03821660009081526007602052604090205460ff16155b801561227c57506001600160a01b03831660009081526007602052604090205462010000900460ff16155b80156107765750506001600160a01b031660009081526007602052604090205462010000900460ff1615919050565b601a546019543060009081526005602052604081205460175491938510159211159060ff161580156122df575060135460ff165b80156122f3575060135462010000900460ff165b80156122fc5750815b801561232757506001600160a01b03861660009081526007602052604090205462010000900460ff16155b801561234057506009546001600160a01b038681169116145b8015612350575060185460165410155b80156123595750805b801561236d5750601754610100900460ff16155b9695505050505050565b6001601760006101000a81548160ff02191690831515021790555060006123c760026109e5600d546123c1600c546123c1600b546123c16001600a5461190590919063ffffffff16565b90611905565b905060006123e4826109eb600a548661183a90919063ffffffff16565b905060006123f2848361182e565b9050476123fe8261261b565b600061240a478361182e565b9050600061242d612426600a548861182e90919063ffffffff16565b8390611846565b90506000612446600a548361183a90919063ffffffff16565b905080156124675760205461246790879083906001600160a01b0316611852565b600b5460009061247c906109e585600261183a565b905080156124c057601f546040516001600160a01b039091169082156108fc029083906000818181858888f193505050501580156124be573d6000803e3d6000fd5b505b600d546000906124d5906109e586600261183a565b90508015612519576021546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015612517573d6000803e3d6000fd5b505b471561255a57601e546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015612558573d6000803e3d6000fd5b505b50506017805460ff191690555050505050505050565b6001600160a01b038216600090815260076020526040812054610100900460ff16806125b957506001600160a01b038216600090815260076020526040902054610100900460ff165b156125d3576012546125cc90606461182e565b905061070d565b6009546001600160a01b03908116908316036125f2575060105461070d565b6009546001600160a01b03908116908416036126115750600f5461070d565b5060115492915050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061265057612650612b14565b6001600160a01b03928316602091820292909201810191909152600854604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156126a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126cd9190612bb4565b816001815181106126e0576126e0612b14565b6001600160a01b03928316602091820292909201015260085461270691309116846115ae565b60085460405163791ac94760e01b81526001600160a01b039091169063791ac9479061273f908590600090869030904290600401612bd1565b600060405180830381600087803b15801561275957600080fd5b505af11580156118fd573d6000803e3d6000fd5b600060208083528351808285015260005b8181101561279a5785810183015185820160400152820161277e565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146127d057600080fd5b50565b600080604083850312156127e657600080fd5b82356127f1816127bb565b946020939093013593505050565b60008060006060848603121561281457600080fd5b833561281f816127bb565b9250602084013561282f816127bb565b929592945050506040919091013590565b60006020828403121561285257600080fd5b5035919050565b60006020828403121561286b57600080fd5b8135610776816127bb565b60008060006060848603121561288b57600080fd5b505081359360208301359350604090920135919050565b80151581146127d057600080fd5b600080604083850312156128c357600080fd5b82356128ce816127bb565b915060208301356128de816128a2565b809150509250929050565b6000806000604084860312156128fe57600080fd5b833567ffffffffffffffff8082111561291657600080fd5b818601915086601f83011261292a57600080fd5b81358181111561293957600080fd5b8760208260051b850101111561294e57600080fd5b60209283019550935050840135612964816128a2565b809150509250925092565b60006020828403121561298157600080fd5b8135610776816128a2565b6000806040838503121561299f57600080fd5b8235915060208301356128de816128a2565b600080600080600060a086880312156129c957600080fd5b85356129d4816127bb565b945060208601356129e4816127bb565b935060408601356129f4816127bb565b92506060860135612a04816127bb565b91506080860135612a14816127bb565b809150509295509295909350565b60008060408385031215612a3557600080fd5b8235612a40816127bb565b915060208301356128de816127bb565b600080600080600080600080610100898b031215612a6d57600080fd5b505086359860208801359850604088013597606081013597506080810135965060a0810135955060c0810135945060e0013592509050565b60208082526006908201526510a7aba722a960d11b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141761070d5761070d612ac5565b600082612b0f57634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b600060018201612b3c57612b3c612ac5565b5060010190565b600060208284031215612b5557600080fd5b8151610776816128a2565b8181038181111561070d5761070d612ac5565b600080600060608486031215612b8857600080fd5b8351925060208401519150604084015190509250925092565b8082018082111561070d5761070d612ac5565b600060208284031215612bc657600080fd5b8151610776816127bb565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612c215784516001600160a01b031683529383019391830191600101612bfc565b50506001600160a01b0396909616606085015250505060800152939250505056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a264697066735822122085a857d29c9a4363f1111e983983938f5476e22f44805a54ff3cf6ccab60193764736f6c63430008120033

Deployed Bytecode Sourcemap

4543:19615:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9550:67;;;;;;;;;;-1:-1:-1;9610:5:0;;;;;;;;;;;;-1:-1:-1;;;9610:5:0;;;;9550:67;;;;;;;:::i;:::-;;;;;;;;10334:133;;;;;;;;;;-1:-1:-1;10334:133:0;;;;;:::i;:::-;;:::i;:::-;;;1188:14:1;;1181:22;1163:41;;1151:2;1136:18;10334:133:0;1023:187:1;9857:84:0;;;;;;;;;;-1:-1:-1;9927:12:0;;9857:84;;;1361:25:1;;;1349:2;1334:18;9857:84:0;1215:177:1;23503:309:0;;;;;;;;;;-1:-1:-1;23503:309:0;;;;;:::i;:::-;;:::i;20481:142::-;;;;;;;;;;;;;:::i;:::-;;12283:408;;;;;;;;;;-1:-1:-1;12283:408:0;;;;;:::i;:::-;;:::i;3135:87::-;;;;;;;;;;-1:-1:-1;3135:87:0;;;;;:::i;:::-;3190:4;3215:5;-1:-1:-1;;;;;3204:16:0;;;3215:5;;3204:16;;3135:87;9700:67;;;;;;;;;;-1:-1:-1;9700:67:0;;4776:1;2437:36:1;;2425:2;2410:18;9700:67:0;2295:184:1;14663:626:0;;;;;;;;;;-1:-1:-1;14663:626:0;;;;;:::i;:::-;;:::i;21220:202::-;;;;;;;;;;-1:-1:-1;21220:202:0;;;;;:::i;:::-;;:::i;13175:256::-;;;;;;;;;;-1:-1:-1;13175:256:0;;;;;:::i;:::-;;:::i;9947:103::-;;;;;;;;;;-1:-1:-1;9947:103:0;;;;;:::i;:::-;-1:-1:-1;;;;;10030:18:0;10013:7;10030:18;;;:9;:18;;;;;;;9947:103;15297:108;;;;;;;;;;-1:-1:-1;15297:108:0;;;;;:::i;:::-;;:::i;21913:474::-;;;;;;:::i;:::-;;:::i;4985:63::-;;;;;;;;;;;;;;;;4916:62;;;;;;;;;;;;;;;;4849:60;;;;;;;;;;;;;;;;6400:26;;;;;;;;;;;;;;;;12765:402;;;;;;;;;;-1:-1:-1;12765:402:0;;;;;:::i;:::-;;:::i;9773:78::-;;;;;;;;;;-1:-1:-1;9825:7:0;9843:5;-1:-1:-1;;;;;9843:5:0;9773:78;;;-1:-1:-1;;;;;4794:32:1;;;4776:51;;4764:2;4749:18;9773:78:0;4630:203:1;14304:351:0;;;;;;;;;;-1:-1:-1;14304:351:0;;;;;:::i;:::-;;:::i;21430:140::-;;;;;;;;;;-1:-1:-1;21430:140:0;;;;;:::i;:::-;;:::i;10604:138::-;;;;;;;;;;;;;:::i;9623:71::-;;;;;;;;;;-1:-1:-1;9685:7:0;;;;;;;;;;;;-1:-1:-1;;;9685:7:0;;;;9623:71;;20631:581;;;;;;;;;;-1:-1:-1;20631:581:0;;;;;:::i;:::-;;:::i;10473:125::-;;;;;;;;;;-1:-1:-1;10473:125:0;;;;;:::i;:::-;;:::i;5320:19::-;;;;;;;;;;-1:-1:-1;5320:19:0;;;;-1:-1:-1;;;;;5320:19:0;;;10056:139;;;;;;;;;;-1:-1:-1;10056:139:0;;;;;:::i;:::-;;:::i;11841:434::-;;;;;;;;;;-1:-1:-1;11841:434:0;;;;;:::i;:::-;;:::i;5884:40::-;;;;;;;;;;-1:-1:-1;5884:40:0;;;;;;;;10201:127;;;;;;;;;;-1:-1:-1;10201:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;10299:18:0;;;10282:7;10299:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;10201:127;13674:622;;;;;;;;;;-1:-1:-1;13674:622:0;;;;;:::i;:::-;;:::i;21578:327::-;;;;;;;;;;-1:-1:-1;21578:327:0;;;;;:::i;:::-;;:::i;6346:47::-;;;;;;;;;;-1:-1:-1;6346:47:0;;;;;:::i;:::-;;;;;;;;;;;;;;3228:111;;;;;;;;;;-1:-1:-1;3228:111:0;;;;;:::i;:::-;;:::i;13439:227::-;;;;;;;;;;-1:-1:-1;13439:227:0;;;;;:::i;:::-;;:::i;10334:133::-;10409:4;10416:37;10425:10;10437:7;10446:6;10416:8;:37::i;:::-;-1:-1:-1;10461:4:0;10334:133;;;;;:::o;23503:309::-;23601:4;23618:36;23628:6;23636:9;23647:6;23618:9;:36::i;:::-;23665:117;23674:6;23682:10;23694:87;23730:6;23694:87;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;23694:19:0;;;;;;:11;:19;;;;;;;;23714:10;23694:31;;;;;;;;;:87;:35;:87::i;:::-;23665:8;:117::i;:::-;-1:-1:-1;23800:4:0;23503:309;;;;;;:::o;20481:142::-;3190:4;3215:5;-1:-1:-1;;;;;3215:5:0;3102:10;3204:16;3086:38;;;;-1:-1:-1;;;3086:38:0;;;;;;;:::i;:::-;;;;;;;;;20535:14:::1;:21:::0;;-1:-1:-1;;20535:21:0::1;::::0;::::1;::::0;;20572:43:::1;::::0;20599:15:::1;::::0;20587:10:::1;::::0;20572:43:::1;::::0;20535:21;;20572:43:::1;20481:142::o:0;12283:408::-;12377:10;12364:24;;;;:12;:24;;;;;;12354:34;;;12346:92;;;;-1:-1:-1;;;12346:92:0;;7511:2:1;12346:92:0;;;7493:21:1;7550:2;7530:18;;;7523:30;7589:34;7569:18;;;7562:62;-1:-1:-1;;;7640:18:1;;;7633:43;7693:19;;12346:92:0;7309:409:1;12346:92:0;12449:15;;:51;;-1:-1:-1;;;12449:51:0;;12481:10;12449:51;;;7897::1;7964:18;;;7957:34;;;-1:-1:-1;;;;;12449:15:0;;;;:31;;7870:18:1;;12449:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;12551:10:0;12538:24;;;;:12;:24;;;;;;:36;;-1:-1:-1;12538:24:0;-1:-1:-1;12567:6:0;12538:28;:36::i;:::-;12524:10;12511:24;;;;:12;:24;;;;;:63;12599:11;;:23;;12615:6;12599:15;:23::i;:::-;12585:11;:37;12638:45;;12667:15;;12659:6;;12647:10;;12638:45;;;;;12283:408;:::o;14663:626::-;3190:4;3215:5;-1:-1:-1;;;;;3215:5:0;3102:10;3204:16;3086:38;;;;-1:-1:-1;;;3086:38:0;;;;;;;:::i;:::-;14763:13:::1;14804:5;14796:4;14780:13;9927:12:::0;;;9857:84;14780:13:::1;:20;;;;:::i;:::-;14779:30;;;;:::i;:::-;14763:46;;14811:19;14860:5;14850:6;14834:13;9927:12:::0;;;9857:84;14834:13:::1;:22;;;;:::i;:::-;14833:32;;;;:::i;:::-;14811:54;;14876:17;14924:5;14913:7;14897:13;9927:12:::0;;;9857:84;14897:13:::1;:23;;;;:::i;:::-;14896:33;;;;:::i;:::-;14876:53;;14931:13;14947:30;14972:4;14947:20;14965:1;14947:13;9927:12:::0;;;9857:84;14947:13:::1;:17:::0;::::1;:20::i;:::-;:24:::0;::::1;:30::i;:::-;14931:46;;15005:5;14996;:14;;:38;;;;;15029:5;15014:11;:20;;14996:38;:60;;;;;15051:5;15038:9;:18;;14996:60;14988:126;;;::::0;-1:-1:-1;;;14988:126:0;;8731:2:1;14988:126:0::1;::::0;::::1;8713:21:1::0;8770:2;8750:18;;;8743:30;8809:34;8789:18;;;8782:62;-1:-1:-1;;;8860:18:1;;;8853:51;8921:19;;14988:126:0::1;8529:417:1::0;14988:126:0::1;15125:12;:20:::0;;;15147:14:::1;:28:::0;;;15177:15:::1;:27:::0;;;15220:61:::1;::::0;15265:15:::1;1361:25:1::0;;15147:28:0;;15177:27;;15125:20;;15220:61:::1;::::0;1349:2:1;1334:18;15220:61:0::1;;;;;;;14752:537;;;;14663:626:::0;;;:::o;21220:202::-;3190:4;3215:5;-1:-1:-1;;;;;3215:5:0;3102:10;3204:16;3086:38;;;;-1:-1:-1;;;3086:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21304:21:0;::::1;;::::0;;;:11:::1;:21;::::0;;;;;:42;;-1:-1:-1;;21304:42:0::1;::::0;;::::1;;::::0;;::::1;::::0;;;::::1;::::0;;;21362:52;;21398:15:::1;::::0;21304:42;;21362:52:::1;::::0;::::1;21220:202:::0;;:::o;13175:256::-;3190:4;3215:5;-1:-1:-1;;;;;3215:5:0;3102:10;3204:16;3086:38;;;;-1:-1:-1;;;3086:38:0;;;;;;;:::i;:::-;13275:6:::1;13271:153;13285:20:::0;;::::1;13271:153;;;13350:5;13312:11;:25;13324:9;;13334:1;13324:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;13312:25:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;13312:25:0;:43;;-1:-1:-1;;13312:43:0::1;::::0;::::1;;::::0;;;::::1;::::0;;13406:15:::1;13371:51:::0;::::1;;13385:9:::0;;13395:1;13385:12;;::::1;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;13371:51:0::1;;;;;;;;;;;13307:3:::0;::::1;::::0;::::1;:::i;:::-;;;;13271:153;;;;13175:256:::0;;;:::o;15297:108::-;3190:4;3215:5;-1:-1:-1;;;;;3215:5:0;3102:10;3204:16;3086:38;;;;-1:-1:-1;;;3086:38:0;;;;;;;:::i;:::-;15367:20:::1;:30:::0;;-1:-1:-1;;15367:30:0::1;::::0;::::1;;::::0;;;::::1;::::0;;15297:108::o;21913:474::-;6051:12;:19;;-1:-1:-1;;6051:19:0;;;;;22003:48:::1;22012:10;22032:4;22039:11:::0;22003:8:::1;:48::i;:::-;22091:6;::::0;22062:50:::1;::::0;22071:10:::1;::::0;-1:-1:-1;;;;;22091:6:0::1;22100:11:::0;22062:8:::1;:50::i;:::-;22123:49;22133:10;22153:4;22160:11;22123:9;:49::i;:::-;22215:6;::::0;22183:53:::1;::::0;22200:4:::1;::::0;-1:-1:-1;;;;;22215:6:0::1;22224:11:::0;22183:8:::1;:53::i;:::-;22247:48;22260:11;22273:9;22284:10;22247:12;:48::i;:::-;22351:10;-1:-1:-1::0;;;;;22311:68:0::1;22340:9;22327:11;22311:68;22363:15;22311:68;;;;1361:25:1::0;;1349:2;1334:18;;1215:177;22311:68:0::1;;;;;;;;-1:-1:-1::0;6075:12:0;:20;;-1:-1:-1;;6075:20:0;;;21913:474::o;12765:402::-;3190:4;3215:5;-1:-1:-1;;;;;3215:5:0;3102:10;3204:16;3086:38;;;;-1:-1:-1;;;3086:38:0;;;;;;;:::i;:::-;12883:16:::1;::::0;::::1;::::0;::::1;;;12882:17;12874:69;;;::::0;-1:-1:-1;;;12874:69:0;;9425:2:1;12874:69:0::1;::::0;::::1;9407:21:1::0;9464:2;9444:18;;;9437:30;9503:34;9483:18;;;9476:62;-1:-1:-1;;;9554:18:1;;;9547:37;9601:19;;12874:69:0::1;9223:403:1::0;12874:69:0::1;12954:14;:21:::0;;12990:15:::1;12977:10;:28:::0;;;13017:13:::1;:30:::0;;;13049:36;::::1;;12954:21;13049:36:::0;::::1;-1:-1:-1::0;;13049:36:0;;;;;;;12954:21;13049:36;;;;13101:58:::1;::::0;13033:14;;13101:58:::1;::::0;12954:21;;13101:58:::1;12765:402:::0;;:::o;14304:351::-;3190:4;3215:5;-1:-1:-1;;;;;3215:5:0;3102:10;3204:16;3086:38;;;;-1:-1:-1;;;3086:38:0;;;;;;;:::i;:::-;14413:4:::1;::::0;-1:-1:-1;;;;;14393:25:0;;::::1;14413:4:::0;::::1;14393:25;::::0;::::1;::::0;:56:::1;;-1:-1:-1::0;14442:6:0::1;::::0;-1:-1:-1;;;;;14422:27:0;;::::1;14442:6:::0;::::1;14422:27;;14393:56;:85;;;;-1:-1:-1::0;;;;;;14453:25:0;::::1;14473:4;14453:25;;14393:85;:114;;;;-1:-1:-1::0;;;;;;14482:25:0;::::1;6520:42;14482:25;;14393:114;14385:152;;;::::0;-1:-1:-1;;;14385:152:0;;9833:2:1;14385:152:0::1;::::0;::::1;9815:21:1::0;9872:2;9852:18;;;9845:30;9911:27;9891:18;;;9884:55;9956:18;;14385:152:0::1;9631:349:1::0;14385:152:0::1;-1:-1:-1::0;;;;;14548:21:0;::::1;;::::0;;;:11:::1;:21;::::0;;;;;:38;;-1:-1:-1;;14548:38:0::1;;::::0;::::1;;::::0;;::::1;::::0;;;::::1;::::0;;;14602:45;;14631:15:::1;::::0;14548:38;;14602:45:::1;::::0;::::1;14304:351:::0;;:::o;21430:140::-;21532:20;;21506:56;;-1:-1:-1;;;21506:56:0;;-1:-1:-1;;;;;21532:20:0;;;21506:56;;;7897:51:1;7964:18;;;7957:34;;;21506:25:0;;;;;;7870:18:1;;21506:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;21430:140;;:::o;10604:138::-;10030:9;:18;;;;6520:42;10663:7;10030:18;;;;;10680:12;;10663:7;;10680:60;;10030:18;;10680:33;;:12;:16;:33::i;:::-;:37;;:60::i;:::-;10673:67;;10604:138;:::o;20631:581::-;3190:4;3215:5;-1:-1:-1;;;;;3215:5:0;3102:10;3204:16;3086:38;;;;-1:-1:-1;;;3086:38:0;;;;;;;:::i;:::-;20787:18:::1;:31:::0;;-1:-1:-1;;;;;;20787:31:0;;::::1;-1:-1:-1::0;;;;;20787:31:0;;::::1;::::0;;::::1;::::0;;;20820:18:::1;:31:::0;;;::::1;::::0;;::::1;::::0;;::::1;::::0;;20853:20:::1;:35:::0;;;::::1;::::0;;::::1;::::0;;::::1;::::0;;;20890:16:::1;:27:::0;;;::::1;::::0;;::::1;::::0;;::::1;::::0;;;20919:14:::1;:23:::0;;;;::::1;::::0;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;20953:23:0;;;:11:::1;:23:::0;;;;;;:40;;;-1:-1:-1;;20953:40:0;;::::1;::::0;::::1;::::0;;;20995:23;;;;;;:40;;;::::1;::::0;::::1;::::0;;21037:21;;;;;;:38;;;::::1;::::0;::::1;::::0;;21077:19;;;;;;;:36;;;;::::1;::::0;;::::1;::::0;;;21129:75;;21188:15:::1;1361:25:1::0;;20853:35:0;;20820:31;21129:75:::1;::::0;1334:18:1;21129:75:0::1;;;;;;;20631:581:::0;;;;;:::o;10473:125::-;-1:-1:-1;;;;;10575:20:0;;10536:7;10575:20;;;:12;:20;;;;;;;;;10553:9;:17;;;;;;:43;;:21;:43::i;10056:139::-;10134:4;10141:40;10151:10;10163:9;10174:6;10141:9;:40::i;11841:434::-;11960:10;11947:24;;;;:12;:24;;;;;;;;;11921:9;:21;;;;;;;:51;;:25;:51::i;:::-;11911:6;:61;;11903:121;;;;-1:-1:-1;;;11903:121:0;;10437:2:1;11903:121:0;;;10419:21:1;10476:2;10456:18;;;10449:30;10515:34;10495:18;;;10488:62;-1:-1:-1;;;10566:18:1;;;10559:45;10621:19;;11903:121:0;10235:411:1;11903:121:0;12035:15;;:50;;-1:-1:-1;;;12035:50:0;;12066:10;12035:50;;;7897:51:1;7964:18;;;7957:34;;;-1:-1:-1;;;;;12035:15:0;;;;:30;;7870:18:1;;12035:50:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;12136:10:0;12123:24;;;;:12;:24;;;;;;:36;;-1:-1:-1;12123:24:0;-1:-1:-1;12152:6:0;12123:28;:36::i;:::-;12109:10;12096:24;;;;:12;:24;;;;;:63;12184:11;;:23;;12200:6;12184:15;:23::i;:::-;12170:11;:37;12223:44;;12251:15;;12243:6;;12231:10;;12223:44;;;;;11841:434;:::o;13674:622::-;3190:4;3215:5;-1:-1:-1;;;;;3215:5:0;3102:10;3204:16;3086:38;;;;-1:-1:-1;;;3086:38:0;;;;;;;:::i;:::-;13869:12:::1;:25:::0;;;13896:12:::1;:25:::0;;;13923:8:::1;:17:::0;;;13942:10:::1;:21:::0;;;13974:14:::1;:29:::0;;;14005:8:::1;:17:::0;;;14024:7:::1;:15:::0;;;14041:11:::1;:20:::0;;;14092:11:::1;::::0;:18:::1;::::0;14108:1:::1;14092:15;:18::i;:::-;14080:8;;:30;;:63;;;;-1:-1:-1::0;14125:11:0::1;::::0;:18:::1;::::0;14141:1:::1;14125:15;:18::i;:::-;14114:7;;:29;;14080:63;:100;;;;-1:-1:-1::0;14162:11:0::1;::::0;:18:::1;::::0;14178:1:::1;14162:15;:18::i;:::-;14147:11;;:33;;14080:100;14072:148;;;::::0;-1:-1:-1;;;14072:148:0;;10853:2:1;14072:148:0::1;::::0;::::1;10835:21:1::0;10892:2;10872:18;;;10865:30;10931:34;10911:18;;;10904:62;-1:-1:-1;;;10982:18:1;;;10975:33;11025:19;;14072:148:0::1;10651:399:1::0;14072:148:0::1;14272:15;14257:5;14249:6;14236:52;14264:6;14236:52;;;;1361:25:1::0;;1349:2;1334:18;;1215:177;14236:52:0::1;;;;;;;;13674:622:::0;;;;;;;;:::o;21578:327::-;3190:4;3215:5;-1:-1:-1;;;;;3215:5:0;3102:10;3204:16;3086:38;;;;-1:-1:-1;;;3086:38:0;;;;;;;:::i;:::-;21707:10:::1;:24:::0;;;21733:13:::1;:30:::0;;;21765:14:::1;:32:::0;;;21813:82:::1;::::0;21879:15:::1;1361:25:1::0;;21765:32:0;;21733:30;;21707:24;;21813:82:::1;::::0;1349:2:1;1334:18;21813:82:0::1;;;;;;;21578:327:::0;;;:::o;3228:111::-;3190:4;3215:5;-1:-1:-1;;;;;3215:5:0;3102:10;3204:16;3086:38;;;;-1:-1:-1;;;3086:38:0;;;;;;;:::i;:::-;3294:5:::1;:11:::0;;-1:-1:-1;;;;;;3294:11:0::1;-1:-1:-1::0;;;;;3294:11:0;::::1;::::0;;::::1;::::0;;;3312:25:::1;::::0;4776:51:1;;;3312:25:0::1;::::0;4764:2:1;4749:18;3312:25:0::1;;;;;;;3228:111:::0;:::o;13439:227::-;3190:4;3215:5;-1:-1:-1;;;;;3215:5:0;3102:10;3204:16;3086:38;;;;-1:-1:-1;;;3086:38:0;;;;;;;:::i;:::-;13514:15:::1;:44:::0;;-1:-1:-1;;;;;13514:44:0;::::1;-1:-1:-1::0;;;;;;13514:44:0;;::::1;::::0;::::1;::::0;;;:15:::1;13560:21:::0;;;:11:::1;:21;::::0;;;;;:38;;-1:-1:-1;;13560:38:0::1;::::0;::::1;::::0;;13614:44;13642:15:::1;::::0;13514:44;13614::::1;::::0;::::1;13439:227:::0;:::o;23820:335::-;-1:-1:-1;;;;;23913:19:0;;23905:68;;;;-1:-1:-1;;;23905:68:0;;11473:2:1;23905:68:0;;;11455:21:1;11512:2;11492:18;;;11485:30;11551:34;11531:18;;;11524:62;-1:-1:-1;;;11602:18:1;;;11595:34;11646:19;;23905:68:0;11271:400:1;23905:68:0;-1:-1:-1;;;;;23992:21:0;;23984:68;;;;-1:-1:-1;;;23984:68:0;;11878:2:1;23984:68:0;;;11860:21:1;11917:2;11897:18;;;11890:30;11956:34;11936:18;;;11929:62;-1:-1:-1;;;12007:18:1;;;12000:32;12049:19;;23984:68:0;11676:398:1;23984:68:0;-1:-1:-1;;;;;24063:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;24115:32;;1361:25:1;;;24115:32:0;;1334:18:1;24115:32:0;;;;;;;23820:335;;;:::o;11104:729::-;11193:37;11204:6;11212:9;11223:6;11193:10;:37::i;:::-;11241:38;11261:6;11269:9;11241:19;:38::i;:::-;11290:39;11303:6;11311:9;11322:6;11290:12;:39::i;:::-;11340:41;11355:6;11363:9;11374:6;11340:14;:41::i;:::-;11392:34;11408:6;11416:9;11392:15;:34::i;:::-;11437:35;11454:6;11462:9;11437:16;:35::i;:::-;11483;11492:6;11500:9;11511:6;11483:8;:35::i;:::-;-1:-1:-1;;;;;11549:17:0;;;;;;:9;:17;;;;;;:29;;11571:6;11549:21;:29::i;:::-;-1:-1:-1;;;;;11529:17:0;;;;;;:9;:17;;;;;:49;;;;11614:32;11539:6;11636:9;11614:13;:32::i;:::-;:78;;11686:6;11614:78;;;11649:34;11657:6;11665:9;11676:6;11649:7;:34::i;:::-;-1:-1:-1;;;;;11726:20:0;;;;;;:9;:20;;;;;;11589:103;;-1:-1:-1;11726:40:0;;11589:103;11726:24;:40::i;:::-;-1:-1:-1;;;;;11703:20:0;;;;;;;:9;:20;;;;;;;:63;;;;11782:43;;;;;;;;;;11810:14;1361:25:1;;1349:2;1334:18;;1215:177;11782:43:0;;;;;;;;11182:651;11104:729;;;:::o;1467:162::-;1553:7;1599:12;1591:6;;;;1583:29;;;;-1:-1:-1;;;1583:29:0;;;;;;;;:::i;:::-;-1:-1:-1;;;1621:5:0;;;1467:162::o;254:82::-;312:7;329:5;333:1;329;:5;:::i;342:82::-;400:7;417:5;421:1;417;:5;:::i;430:82::-;488:7;505:5;509:1;505;:5;:::i;19014:360::-;19145:6;;19113:53;;19130:4;;-1:-1:-1;;;;;19145:6:0;19154:11;19113:8;:53::i;:::-;19177:6;;:189;;-1:-1:-1;;;19177:189:0;;19240:4;19177:189;;;12553:34:1;12603:18;;;12596:34;;;19177:6:0;12646:18:1;;;12639:34;;;12689:18;;;12682:34;-1:-1:-1;;;;;12753:15:1;;;12732:19;;;12725:44;19350:15:0;12785:19:1;;;12778:35;19177:6:0;;;;:22;;19207:9;;12487:19:1;;19177:189:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;19014:360;;;:::o;166:82::-;224:7;241:5;245:1;241;:5;:::i;10750:346::-;-1:-1:-1;;;;;10854:20:0;;10846:70;;;;-1:-1:-1;;;10846:70:0;;13467:2:1;10846:70:0;;;13449:21:1;13506:2;13486:18;;;13479:30;13545:34;13525:18;;;13518:62;-1:-1:-1;;;13596:18:1;;;13589:35;13641:19;;10846:70:0;13265:401:1;10846:70:0;-1:-1:-1;;;;;10935:23:0;;10927:71;;;;-1:-1:-1;;;10927:71:0;;13873:2:1;10927:71:0;;;13855:21:1;13912:2;13892:18;;;13885:30;13951:34;13931:18;;;13924:62;-1:-1:-1;;;14002:18:1;;;13995:33;14045:19;;10927:71:0;13671:399:1;10927:71:0;-1:-1:-1;;;;;10030:18:0;;10013:7;10030:18;;;:9;:18;;;;;;11017:6;:27;;11009:79;;;;-1:-1:-1;;;11009:79:0;;14277:2:1;11009:79:0;;;14259:21:1;14316:2;14296:18;;;14289:30;14355:34;14335:18;;;14328:62;-1:-1:-1;;;14406:18:1;;;14399:38;14454:19;;11009:79:0;14075:404:1;15413:456:0;15532:15;15500:29;15515:13;;15500:10;;:14;;:29;;;;:::i;:::-;:47;15497:78;;;15549:16;:24;;-1:-1:-1;;15549:24:0;;;15497:78;-1:-1:-1;;;;;15589:19:0;;;;;;:11;:19;;;;;:29;;;;;;15588:30;:67;;;;-1:-1:-1;;;;;;15623:22:0;;;;;;:11;:22;;;;;:32;;;;;;15622:33;15588:67;:88;;;;-1:-1:-1;15660:16:0;;;;;;;15659:17;15588:88;15585:151;;;15686:14;;;;;;;15678:56;;;;-1:-1:-1;;;15678:56:0;;14686:2:1;15678:56:0;;;14668:21:1;14725:2;14705:18;;;14698:30;14764:31;14744:18;;;14737:59;14813:18;;15678:56:0;14484:353:1;15678:56:0;15749:16;;;;;;;:34;;;;-1:-1:-1;15769:14:0;;;;;;;15749:34;15746:116;;;15794:38;15814:6;15822:9;15794:19;:38::i;:::-;15793:39;15785:75;;;;-1:-1:-1;;;15785:75:0;;15044:2:1;15785:75:0;;;15026:21:1;15083:2;15063:18;;;15056:30;15122:25;15102:18;;;15095:53;15165:18;;15785:75:0;14842:347:1;15785:75:0;15413:456;;:::o;17219:565::-;-1:-1:-1;;;;;17320:20:0;;17351:1;17320:20;;;:12;:20;;;;;;:33;17317:160;;-1:-1:-1;;;;;17401:17:0;;;;;;:9;:17;;;;;;;;;17375:12;:20;;;;;;;17364:32;;:6;;:10;:32::i;:::-;17363:55;;17355:120;;;;-1:-1:-1;;;17355:120:0;;15396:2:1;17355:120:0;;;15378:21:1;15435:2;15415:18;;;15408:30;15474:34;15454:18;;;15447:62;-1:-1:-1;;;15525:18:1;;;15518:50;15585:19;;17355:120:0;15194:416:1;17355:120:0;17500:4;;-1:-1:-1;;;;;17490:14:0;;;17500:4;;17490:14;17487:151;;17524:14;;17514:6;:24;;:57;;;-1:-1:-1;;;;;;17542:19:0;;;;;;:11;:19;;;;;:29;;;;;;17514:57;:93;;;-1:-1:-1;;;;;;17575:22:0;;;;;;:11;:22;;;;;:32;;;;;;17514:93;17506:130;;;;-1:-1:-1;;;17506:130:0;;15817:2:1;17506:130:0;;;15799:21:1;15856:2;15836:18;;;15829:30;-1:-1:-1;;;15875:18:1;;;15868:54;15939:18;;17506:130:0;15615:348:1;17506:130:0;17666:12;;17656:6;:22;;:55;;;-1:-1:-1;;;;;;17682:19:0;;;;;;:11;:19;;;;;:29;;;;;;17656:55;:91;;;-1:-1:-1;;;;;;17715:22:0;;;;;;:11;:22;;;;;:32;;;;;;17656:91;17648:128;;;;-1:-1:-1;;;17648:128:0;;15817:2:1;17648:128:0;;;15799:21:1;15856:2;15836:18;;;15829:30;-1:-1:-1;;;15875:18:1;;;15868:54;15939:18;;17648:128:0;15615:348:1;16146:358:0;-1:-1:-1;;;;;16250:19:0;;;;;;:11;:19;;;;;:29;;;;;;16249:30;:67;;;;-1:-1:-1;;;;;;16284:22:0;;;;;;:11;:22;;;;;:32;;;;;;16283:33;16249:67;:97;;;;-1:-1:-1;16341:4:0;;-1:-1:-1;;;;;16320:26:0;;;16341:4;;16320:26;;16249:97;:127;;;;-1:-1:-1;;;;;;16350:26:0;;6520:42;16350:26;;16249:127;16246:251;;;16438:15;;-1:-1:-1;;;;;16401:20:0;;;;;;:9;:20;;;;;;:32;;16426:6;16401:24;:32::i;:::-;16400:53;;16392:103;;;;-1:-1:-1;;;16392:103:0;;16170:2:1;16392:103:0;;;16152:21:1;16209:2;16189:18;;;16182:30;16248:34;16228:18;;;16221:62;-1:-1:-1;;;16299:18:1;;;16292:35;16344:19;;16392:103:0;15968:401:1;16512:505:0;16595:20;;;;:54;;;;-1:-1:-1;;;;;;16620:19:0;;;;;;:11;:19;;;;;:29;;;;;;16619:30;16595:54;:91;;;;-1:-1:-1;;;;;;16654:22:0;;;;;;:11;:22;;;;;:32;;;;;;16653:33;16595:91;:121;;;;-1:-1:-1;16711:4:0;;-1:-1:-1;;;;;16690:26:0;;;16711:4;;16690:26;;16595:121;:164;;;;-1:-1:-1;;;;;;16733:26:0;;6520:42;16733:26;;16595:164;:196;;;;-1:-1:-1;16784:6:0;;-1:-1:-1;;;;;16763:28:0;;;16784:6;;16763:28;;16595:196;16592:418;;;16841:9;16819:32;;;;:21;:32;;;;;;16854:12;-1:-1:-1;16811:127:0;;;;-1:-1:-1;;;16811:127:0;;16576:2:1;16811:127:0;;;16558:21:1;16615:2;16595:18;;;16588:30;16654:34;16634:18;;;16627:62;16725:34;16705:18;;;16698:62;-1:-1:-1;;;16776:19:1;;;16769:34;16820:19;;16811:127:0;16374:471:1;16811:127:0;16983:9;16961:32;;;;:21;:32;;;;;16996:12;16961:47;;16512:505;;:::o;17025:186::-;17122:4;;-1:-1:-1;;;;;17109:17:0;;;17122:4;;17109:17;:51;;;;-1:-1:-1;;;;;;17131:19:0;;;;;;:11;:19;;;;;:29;;;;;;17130:30;17109:51;:68;;;;-1:-1:-1;17165:12:0;;;;;;;17164:13;17109:68;17106:98;;;17200:1;17179:9;;:23;;;;;;;:::i;:::-;;;;-1:-1:-1;;17025:186:0;;:::o;20272:197::-;20364:41;20379:6;20387:9;20398:6;20364:14;:41::i;:::-;20361:101;;;20407:29;20422:13;;20407:14;:29::i;:::-;20458:1;20438:9;:22;20272:197;;;:::o;22395:180::-;-1:-1:-1;;;;;22501:19:0;;22476:4;22501:19;;;:11;:19;;;;;:29;;;;;;22500:30;:67;;;;-1:-1:-1;;;;;;;22535:22:0;;;;;:11;:22;;;;;:32;;;;;;22534:33;;22395:180;-1:-1:-1;22395:180:0:o;22920:575::-;23006:7;23062:1;23029:30;23041:6;23049:9;23029:11;:30::i;:::-;:34;:51;;;;-1:-1:-1;23068:12:0;;;;;;;23067:13;23029:51;23026:447;;;23092:17;23112:59;23140:30;23152:6;23160:9;23140:11;:30::i;:::-;23123:11;;23112:23;;:6;;:10;:23::i;:59::-;23227:4;23209:24;;;;:9;:24;;;;;;23092:79;;-1:-1:-1;23209:39:0;;23092:79;23209:28;:39::i;:::-;23200:4;23182:24;;;;:9;:24;;;;;;;:66;;;;23264:42;;-1:-1:-1;;;;;23264:42:0;;;;;;;23296:9;1361:25:1;;1349:2;1334:18;;1215:177;23264:42:0;;;;;;;;23320:8;;:21;23317:116;;23376:14;;23421:8;;23404:11;;23343:88;;23361:4;;-1:-1:-1;;;;;23376:14:0;;;;23393:37;;23421:8;23393:23;;:6;;:10;:23::i;:37::-;23343:9;:88::i;:::-;23450:21;:6;23461:9;23450:10;:21::i;:::-;23443:28;;;;;23026:447;-1:-1:-1;23481:6:0;22920:575;-1:-1:-1;;22920:575:0:o;15881:257::-;-1:-1:-1;;;;;15993:19:0;;15968:4;15993:19;;;:11;:19;;;;;:29;;;15992:30;:67;;;;-1:-1:-1;;;;;;16027:22:0;;;;;;:11;:22;;;;;:32;;;16026:33;15992:67;:101;;;;-1:-1:-1;;;;;;16064:19:0;;;;;;:11;:19;;;;;:29;;;;;;16063:30;15992:101;:138;;;;-1:-1:-1;;;;;;;16098:22:0;;;;;:11;:22;;;;;:32;;;;;;16097:33;;15881:257;-1:-1:-1;15881:257:0:o;19824:440::-;19965:14;;20040:13;;20030:4;19922;10030:18;;;:9;:18;;;;;;20072:8;;19922:4;;19955:24;;;;-1:-1:-1;20012:41:0;;20072:8;;20071:9;:24;;;;-1:-1:-1;20084:11:0;;;;20071:24;:42;;;;-1:-1:-1;20099:14:0;;;;;;;20071:42;:54;;;;;20117:8;20071:54;:88;;;;-1:-1:-1;;;;;;20130:19:0;;;;;;:11;:19;;;;;:29;;;;;;20129:30;20071:88;:123;;;;-1:-1:-1;20190:4:0;;-1:-1:-1;;;;;20177:17:0;;;20190:4;;20177:17;20071:123;:150;;;;;20211:10;;20198:9;;:23;;20071:150;:168;;;;;20225:14;20071:168;:185;;;;-1:-1:-1;20244:12:0;;;;;;;20243:13;20071:185;20064:192;19824:440;-1:-1:-1;;;;;;19824:440:0:o;17792:1214::-;6313:4;6302:8;;:15;;;;;;;;;;;;;;;;;;17863:20:::1;17886:82;17966:1;17887:73;17949:10;;17887:57;17929:14;;17887:37;17911:12;;17887:19;17904:1;17887:12;;:16;;:19;;;;:::i;:::-;:23:::0;::::1;:37::i;17886:82::-;17863:105;;17979:32;18014:42;18043:12;18014:24;18025:12;;18014:6;:10;;:24;;;;:::i;:42::-;17979:77:::0;-1:-1:-1;18067:14:0::1;18084:36;:6:::0;17979:77;18084:10:::1;:36::i;:::-;18067:53:::0;-1:-1:-1;18156:21:0::1;18188:24;18067:53:::0;18188:16:::1;:24::i;:::-;18223:20;18246:41;:21;18272:14:::0;18246:25:::1;:41::i;:::-;18223:64;;18298:19;18319:48;18336:30;18353:12;;18336;:16;;:30;;;;:::i;:::-;18319:12:::0;;:16:::1;:48::i;:::-;18298:69;;18378:29;18410;18426:12;;18410:11;:15;;:29;;;;:::i;:::-;18378:61:::0;-1:-1:-1;18453:34:0;;18450:123:::1;;18551:18;::::0;18489:81:::1;::::0;18502:24;;18528:21;;-1:-1:-1;;;;;18551:18:0::1;18489:12;:81::i;:::-;18632:12;::::0;18583:23:::1;::::0;18609:36:::1;::::0;:18:::1;:11:::0;18625:1:::1;18609:15;:18::i;:36::-;18583:62:::0;-1:-1:-1;18659:19:0;;18656:79:::1;;18688:18;::::0;18680:53:::1;::::0;-1:-1:-1;;;;;18688:18:0;;::::1;::::0;18680:53;::::1;;;::::0;18717:15;;18688:18:::1;18680:53:::0;18688:18;18680:53;18717:15;18688:18;18680:53;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;18656:79;18792:10;::::0;18745:21:::1;::::0;18769:34:::1;::::0;:18:::1;:11:::0;18785:1:::1;18769:15;:18::i;:34::-;18745:58:::0;-1:-1:-1;18817:17:0;;18814:73:::1;;18844:16;::::0;18836:49:::1;::::0;-1:-1:-1;;;;;18844:16:0;;::::1;::::0;18836:49;::::1;;;::::0;18871:13;;18844:16:::1;18836:49:::0;18844:16;18836:49;18871:13;18844:16;18836:49;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;18814:73;18900:21;:34:::0;18897:102:::1;;18944:20;::::0;18936:61:::1;::::0;-1:-1:-1;;;;;18944:20:0;;::::1;::::0;18975:21:::1;18936:61:::0;::::1;;;::::0;18944:20:::1;18936:61:::0;18944:20;18936:61;18975:21;18944:20;18936:61;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;18897:102;-1:-1:-1::0;;6322:8:0;:16;;-1:-1:-1;;6322:16:0;;;-1:-1:-1;;;;;;;;17792:1214:0:o;22583:329::-;-1:-1:-1;;;;;22685:19:0;;22662:7;22685:19;;;:11;:19;;;;;:25;;;;;;;:57;;-1:-1:-1;;;;;;22714:22:0;;;;;;:11;:22;;;;;:28;;;;;;22685:57;22682:100;;;22751:11;;:29;;22775:3;22751:15;:29::i;:::-;22744:36;;;;22682:100;22808:4;;-1:-1:-1;;;;;22808:4:0;;;22795:17;;;;22792:38;;-1:-1:-1;22821:7:0;;22814:14;;22792:38;22853:4;;-1:-1:-1;;;;;22853:4:0;;;22843:14;;;;22840:36;;-1:-1:-1;22866:8:0;;22859:15;;22840:36;-1:-1:-1;22893:11:0;;22583:329;;;;:::o;19382:434::-;19472:16;;;19486:1;19472:16;;;;;;;;19448:21;;19472:16;;;;;;;;;;-1:-1:-1;19472:16:0;19448:40;;19517:4;19499;19504:1;19499:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;19499:23:0;;;:7;;;;;;;;;;:23;;;;19543:6;;:13;;;-1:-1:-1;;;19543:13:0;;;;:6;;;;;:11;;:13;;;;;19499:7;;19543:13;;;;;:6;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19533:4;19538:1;19533:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;19533:23:0;;;:7;;;;;;;;;:23;19599:6;;19567:53;;19584:4;;19599:6;19608:11;19567:8;:53::i;:::-;19631:6;;:177;;-1:-1:-1;;;19631:177:0;;-1:-1:-1;;;;;19631:6:0;;;;:57;;:177;;19703:11;;19631:6;;19745:4;;19772;;19792:15;;19631:177;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14:548:1;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;567:131::-;-1:-1:-1;;;;;642:31:1;;632:42;;622:70;;688:1;685;678:12;622:70;567:131;:::o;703:315::-;771:6;779;832:2;820:9;811:7;807:23;803:32;800:52;;;848:1;845;838:12;800:52;887:9;874:23;906:31;931:5;906:31;:::i;:::-;956:5;1008:2;993:18;;;;980:32;;-1:-1:-1;;;703:315:1:o;1397:456::-;1474:6;1482;1490;1543:2;1531:9;1522:7;1518:23;1514:32;1511:52;;;1559:1;1556;1549:12;1511:52;1598:9;1585:23;1617:31;1642:5;1617:31;:::i;:::-;1667:5;-1:-1:-1;1724:2:1;1709:18;;1696:32;1737:33;1696:32;1737:33;:::i;:::-;1397:456;;1789:7;;-1:-1:-1;;;1843:2:1;1828:18;;;;1815:32;;1397:456::o;1858:180::-;1917:6;1970:2;1958:9;1949:7;1945:23;1941:32;1938:52;;;1986:1;1983;1976:12;1938:52;-1:-1:-1;2009:23:1;;1858:180;-1:-1:-1;1858:180:1:o;2043:247::-;2102:6;2155:2;2143:9;2134:7;2130:23;2126:32;2123:52;;;2171:1;2168;2161:12;2123:52;2210:9;2197:23;2229:31;2254:5;2229:31;:::i;2484:316::-;2561:6;2569;2577;2630:2;2618:9;2609:7;2605:23;2601:32;2598:52;;;2646:1;2643;2636:12;2598:52;-1:-1:-1;;2669:23:1;;;2739:2;2724:18;;2711:32;;-1:-1:-1;2790:2:1;2775:18;;;2762:32;;2484:316;-1:-1:-1;2484:316:1:o;2805:118::-;2891:5;2884:13;2877:21;2870:5;2867:32;2857:60;;2913:1;2910;2903:12;2928:382;2993:6;3001;3054:2;3042:9;3033:7;3029:23;3025:32;3022:52;;;3070:1;3067;3060:12;3022:52;3109:9;3096:23;3128:31;3153:5;3128:31;:::i;:::-;3178:5;-1:-1:-1;3235:2:1;3220:18;;3207:32;3248:30;3207:32;3248:30;:::i;:::-;3297:7;3287:17;;;2928:382;;;;;:::o;3315:750::-;3407:6;3415;3423;3476:2;3464:9;3455:7;3451:23;3447:32;3444:52;;;3492:1;3489;3482:12;3444:52;3532:9;3519:23;3561:18;3602:2;3594:6;3591:14;3588:34;;;3618:1;3615;3608:12;3588:34;3656:6;3645:9;3641:22;3631:32;;3701:7;3694:4;3690:2;3686:13;3682:27;3672:55;;3723:1;3720;3713:12;3672:55;3763:2;3750:16;3789:2;3781:6;3778:14;3775:34;;;3805:1;3802;3795:12;3775:34;3860:7;3853:4;3843:6;3840:1;3836:14;3832:2;3828:23;3824:34;3821:47;3818:67;;;3881:1;3878;3871:12;3818:67;3912:4;3904:13;;;;-1:-1:-1;3936:6:1;-1:-1:-1;;3977:20:1;;3964:34;4007:28;3964:34;4007:28;:::i;:::-;4054:5;4044:15;;;3315:750;;;;;:::o;4070:241::-;4126:6;4179:2;4167:9;4158:7;4154:23;4150:32;4147:52;;;4195:1;4192;4185:12;4147:52;4234:9;4221:23;4253:28;4275:5;4253:28;:::i;4316:309::-;4381:6;4389;4442:2;4430:9;4421:7;4417:23;4413:32;4410:52;;;4458:1;4455;4448:12;4410:52;4494:9;4481:23;4471:33;;4554:2;4543:9;4539:18;4526:32;4567:28;4589:5;4567:28;:::i;4838:813::-;4933:6;4941;4949;4957;4965;5018:3;5006:9;4997:7;4993:23;4989:33;4986:53;;;5035:1;5032;5025:12;4986:53;5074:9;5061:23;5093:31;5118:5;5093:31;:::i;:::-;5143:5;-1:-1:-1;5200:2:1;5185:18;;5172:32;5213:33;5172:32;5213:33;:::i;:::-;5265:7;-1:-1:-1;5324:2:1;5309:18;;5296:32;5337:33;5296:32;5337:33;:::i;:::-;5389:7;-1:-1:-1;5448:2:1;5433:18;;5420:32;5461:33;5420:32;5461:33;:::i;:::-;5513:7;-1:-1:-1;5572:3:1;5557:19;;5544:33;5586;5544;5586;:::i;:::-;5638:7;5628:17;;;4838:813;;;;;;;;:::o;5656:388::-;5724:6;5732;5785:2;5773:9;5764:7;5760:23;5756:32;5753:52;;;5801:1;5798;5791:12;5753:52;5840:9;5827:23;5859:31;5884:5;5859:31;:::i;:::-;5909:5;-1:-1:-1;5966:2:1;5951:18;;5938:32;5979:33;5938:32;5979:33;:::i;6049:661::-;6171:6;6179;6187;6195;6203;6211;6219;6227;6280:3;6268:9;6259:7;6255:23;6251:33;6248:53;;;6297:1;6294;6287:12;6248:53;-1:-1:-1;;6320:23:1;;;6390:2;6375:18;;6362:32;;-1:-1:-1;6441:2:1;6426:18;;6413:32;;6492:2;6477:18;;6464:32;;-1:-1:-1;6543:3:1;6528:19;;6515:33;;-1:-1:-1;6595:3:1;6580:19;;6567:33;;-1:-1:-1;6647:3:1;6632:19;;6619:33;;-1:-1:-1;6699:3:1;6684:19;6671:33;;-1:-1:-1;6049:661:1;-1:-1:-1;6049:661:1:o;6975:329::-;7177:2;7159:21;;;7216:1;7196:18;;;7189:29;-1:-1:-1;;;7249:2:1;7234:18;;7227:36;7295:2;7280:18;;6975:329::o;8002:127::-;8063:10;8058:3;8054:20;8051:1;8044:31;8094:4;8091:1;8084:15;8118:4;8115:1;8108:15;8134:168;8207:9;;;8238;;8255:15;;;8249:22;;8235:37;8225:71;;8276:18;;:::i;8307:217::-;8347:1;8373;8363:132;;8417:10;8412:3;8408:20;8405:1;8398:31;8452:4;8449:1;8442:15;8480:4;8477:1;8470:15;8363:132;-1:-1:-1;8509:9:1;;8307:217::o;8951:127::-;9012:10;9007:3;9003:20;9000:1;8993:31;9043:4;9040:1;9033:15;9067:4;9064:1;9057:15;9083:135;9122:3;9143:17;;;9140:43;;9163:18;;:::i;:::-;-1:-1:-1;9210:1:1;9199:13;;9083:135::o;9985:245::-;10052:6;10105:2;10093:9;10084:7;10080:23;10076:32;10073:52;;;10121:1;10118;10111:12;10073:52;10153:9;10147:16;10172:28;10194:5;10172:28;:::i;12079:128::-;12146:9;;;12167:11;;;12164:37;;;12181:18;;:::i;12824:306::-;12912:6;12920;12928;12981:2;12969:9;12960:7;12956:23;12952:32;12949:52;;;12997:1;12994;12987:12;12949:52;13026:9;13020:16;13010:26;;13076:2;13065:9;13061:18;13055:25;13045:35;;13120:2;13109:9;13105:18;13099:25;13089:35;;12824:306;;;;;:::o;13135:125::-;13200:9;;;13221:10;;;13218:36;;;13234:18;;:::i;16982:251::-;17052:6;17105:2;17093:9;17084:7;17080:23;17076:32;17073:52;;;17121:1;17118;17111:12;17073:52;17153:9;17147:16;17172:31;17197:5;17172:31;:::i;17238:980::-;17500:4;17548:3;17537:9;17533:19;17579:6;17568:9;17561:25;17605:2;17643:6;17638:2;17627:9;17623:18;17616:34;17686:3;17681:2;17670:9;17666:18;17659:31;17710:6;17745;17739:13;17776:6;17768;17761:22;17814:3;17803:9;17799:19;17792:26;;17853:2;17845:6;17841:15;17827:29;;17874:1;17884:195;17898:6;17895:1;17892:13;17884:195;;;17963:13;;-1:-1:-1;;;;;17959:39:1;17947:52;;18054:15;;;;18019:12;;;;17995:1;17913:9;17884:195;;;-1:-1:-1;;;;;;;18135:32:1;;;;18130:2;18115:18;;18108:60;-1:-1:-1;;;18199:3:1;18184:19;18177:35;18096:3;17238:980;-1:-1:-1;;;17238:980:1:o

Swarm Source

ipfs://85a857d29c9a4363f1111e983983938f5476e22f44805a54ff3cf6ccab601937
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.