ETH Price: $3,272.03 (+4.61%)
 

Overview

Max Total Supply

69,696,969 Brrr

Holders

67

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
705,342.002064017 Brrr

Value
$0.00
0x15D9b63779a1Ad283F4B8f2391d7182d3fe96207
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:
PRINTWOJAK

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

/**
Telegram: t.me/printwojak
Twitter: twitter.com/printwojak
Website: printwojak.com
Dapp: app.printwojak.com
**/
// SPDX-License-Identifier: MIT

pragma solidity 0.8.9;

/**
 * Standard SafeMath, stripped down to just add/sub/mul/div
 */
library SafeMath {
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

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

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

        return c;
    }
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        // Solidity only automatically asserts when dividing by 0
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }
}

/**
 * ERC20 standard interface.
 */
interface IERC20 {
    function totalSupply() 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 Context {
    function _msgSender() internal view virtual returns(address) {
        return msg.sender;
    }
}

contract Ownable is Context {
    address private _owner;

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

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

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

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

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

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

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

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

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);

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

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

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

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

interface IDividendDistributor {
    function setShare(address shareholder, uint256 amount) external;
    function deposit(uint256 amount) external;
    function claimDividend(address shareholder) external;
    function getDividendsClaimedOf (address shareholder) external returns (uint256);
}

contract DividendDistributor is IDividendDistributor {
    using SafeMath for uint256;

    address public _token;
    address public _owner;

    address public immutable WOJAK = address(0x5026F006B85729a8b14553FAE6af249aD16c9aaB); //Mainnet WOJAK


    struct Share {
        uint256 amount;
        uint256 totalExcluded;
        uint256 totalClaimed;
    }

    address[] private shareholders;
    mapping (address => uint256) private shareholderIndexes;

    mapping (address => Share) public shares;

    uint256 public totalShares;
    uint256 public totalDividends;
    uint256 public totalClaimed;
    uint256 public dividendsPerShare;
    uint256 private dividendsPerShareAccuracyFactor = 10 ** 36;

    modifier onlyToken() {
        require(msg.sender == _token); _;
    }
    
    modifier onlyOwner() {
        require(msg.sender == _owner); _;
    }

    constructor (address owner) {
        _token = msg.sender;
        _owner = owner;
    }

    receive() external payable { }

    function setShare(address shareholder, uint256 amount) external override onlyToken {
        if(shares[shareholder].amount > 0){
            distributeDividend(shareholder);
        }

        if(amount > 0 && shares[shareholder].amount == 0){
            addShareholder(shareholder);
        }else if(amount == 0 && shares[shareholder].amount > 0){
            removeShareholder(shareholder);
        }

        totalShares = totalShares.sub(shares[shareholder].amount).add(amount);
        shares[shareholder].amount = amount;
        shares[shareholder].totalExcluded = getCumulativeDividends(shares[shareholder].amount);
    }

    function deposit(uint256 amount) external override onlyToken {
        
        if (amount > 0) {        
            totalDividends = totalDividends.add(amount);
            dividendsPerShare = dividendsPerShare.add(dividendsPerShareAccuracyFactor.mul(amount).div(totalShares));
        }
    }

    function distributeDividend(address shareholder) internal {
        if(shares[shareholder].amount == 0){ return; }

        uint256 amount = getClaimableDividendOf(shareholder);
        if(amount > 0){
            totalClaimed = totalClaimed.add(amount);
            shares[shareholder].totalClaimed = shares[shareholder].totalClaimed.add(amount);
            shares[shareholder].totalExcluded = getCumulativeDividends(shares[shareholder].amount);
            IERC20(WOJAK).transfer(shareholder, amount);
        }
    }

    function claimDividend(address shareholder) external override onlyToken {
        distributeDividend(shareholder);
    }

    function getClaimableDividendOf(address shareholder) public view returns (uint256) {
        if(shares[shareholder].amount == 0){ return 0; }

        uint256 shareholderTotalDividends = getCumulativeDividends(shares[shareholder].amount);
        uint256 shareholderTotalExcluded = shares[shareholder].totalExcluded;

        if(shareholderTotalDividends <= shareholderTotalExcluded){ return 0; }

        return shareholderTotalDividends.sub(shareholderTotalExcluded);
    }

    function getCumulativeDividends(uint256 share) internal view returns (uint256) {
        return share.mul(dividendsPerShare).div(dividendsPerShareAccuracyFactor);
    }

    function addShareholder(address shareholder) internal {
        shareholderIndexes[shareholder] = shareholders.length;
        shareholders.push(shareholder);
    }

    function removeShareholder(address shareholder) internal {
        shareholders[shareholderIndexes[shareholder]] = shareholders[shareholders.length-1];
        shareholderIndexes[shareholders[shareholders.length-1]] = shareholderIndexes[shareholder];
        shareholders.pop();
    }
    
    function manualSend(uint256 amount, address holder) external onlyOwner {
        uint256 contractETHBalance = address(this).balance;
        payable(holder).transfer(amount > 0 ? amount : contractETHBalance);
    }


    function getDividendsClaimedOf (address shareholder) external view returns (uint256) {
        require (shares[shareholder].amount > 0, "You're not a PRINTER shareholder!");
        return shares[shareholder].totalClaimed;
    }

}

contract PRINTWOJAK is IERC20, Ownable {
    using SafeMath for uint256;

    address private WETH;
    address private DEAD = 0x000000000000000000000000000000000000dEaD;
    address private ZERO = 0x0000000000000000000000000000000000000000;

    address public immutable WOJAK = address(0x5026F006B85729a8b14553FAE6af249aD16c9aaB); //Mainnet $WOJAK

    string private constant  _name = "Print Wojak";
    string private constant _symbol = "Brrr";
    uint8 private constant _decimals = 9;

    uint256 private _totalSupply = 69696969 * (10 ** _decimals);
    uint256 private _maxTxAmountBuy = _totalSupply;
    
    mapping (address => uint256) private _balances;
    mapping (address => mapping (address => uint256)) private _allowances;
    mapping (address => uint256) private cooldown;

    mapping (address => bool) private isFeeExempt;
    mapping (address => bool) private isDividendExempt;
            
    uint256 private totalFee = 6;
    uint256 private feeDenominator = 100;

    address payable public marketingWallet = payable(0x5C944a45bC5841BC26b79Dbd354d14D5f7721812);

    IDEXRouter public router;
    address public pair;
    address private REWARD;

    uint256 public launchedAt;

    uint256 private claimAt;
    bool private tradingOpen;
    bool private buyLimit = true;
    uint256 private maxBuy = _totalSupply * 2 / 100;
    uint256 public numTokensSellToAddToLiquidity = _totalSupply * 2 / 10000;

    DividendDistributor private distributor;
    
    bool private inSwap;
    modifier swapping() { inSwap = true; _; inSwap = false; }

    constructor (){
        router = IDEXRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
            
        WETH = router.WETH();
        
        pair = IDEXFactory(router.factory()).createPair(WETH, address(this));
        
        _allowances[address(this)][address(router)] = type(uint256).max;

        distributor = new DividendDistributor(msg.sender);

        isFeeExempt[owner()] = true;
        isFeeExempt[address(this)] = true;
        isFeeExempt[marketingWallet] = true;        
              
        isDividendExempt[pair] = true;
        isDividendExempt[address(this)] = true;
        isDividendExempt[DEAD] = true;        

        _balances[owner()] = _totalSupply;
    
        emit Transfer(address(0), owner(), _totalSupply);
    }

    receive() external payable { }

    function totalSupply() external view override returns (uint256) { return _totalSupply; }
    function decimals() external pure override returns (uint8) { return _decimals; }
    function symbol() external pure override returns (string memory) { return _symbol; }
    function name() external pure override returns (string memory) { return _name; }
    function getOwner() external view override returns (address) { return owner(); }
    function balanceOf(address account) public view override returns (uint256) { return _balances[account]; }
    function allowance(address holder, address spender) external view override returns (uint256) { return _allowances[holder][spender]; }

    function approve(address spender, uint256 amount) public override returns (bool) {
        _allowances[msg.sender][spender] = amount;
        emit Approval(msg.sender, spender, amount);
        return true;
    }

    function transfer(address recipient, uint256 amount) external override returns (bool) {
        return _transferFrom(msg.sender, recipient, amount);
    }

    function transferFrom(address sender, address recipient, uint256 amount) external override returns (bool) {
        if(_allowances[sender][msg.sender] != type(uint256).max){
            _allowances[sender][msg.sender] = _allowances[sender][msg.sender].sub(amount, "Insufficient Allowance");
        }

        return _transferFrom(sender, recipient, amount);
    }

    function _transferFrom(address sender, address recipient, uint256 amount) internal returns (bool) {
        if (sender!= owner() && recipient!= owner()) require(tradingOpen, "Trading not yet enabled."); //transfers disabled before openTrading

        if (buyLimit) { 
            if (sender!=owner() && recipient!= owner()) require (amount<=maxBuy, "Too much sir");        
        }

        if (sender == pair && recipient != address(router) && !isFeeExempt[recipient]) {
            cooldown[recipient] = cooldown[recipient] != 0 ? cooldown[recipient] : block.timestamp; 
        }
       
        if(inSwap){ return _transfer(sender, recipient, amount); }

        if(isFeeExempt[sender] || isFeeExempt[recipient]){ return _transferExcluded(sender, recipient, amount); }

        uint256 contractTokenBalance = balanceOf(address(this));

        bool overMinTokenBalance = contractTokenBalance >= numTokensSellToAddToLiquidity;

        uint256 amountReceived = shouldTakeFee(sender, recipient) ? takeFee(sender, amount) : amount;

        bool shouldSwapBack = (overMinTokenBalance && recipient==pair && balanceOf(address(this)) > 0);
        if(shouldSwapBack){ swapBack(); }

        _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance");

        _balances[recipient] = _balances[recipient].add(amountReceived);

        if(sender != pair && !isDividendExempt[sender]){ try distributor.setShare(sender, _balances[sender]) {} catch {} }
        if(recipient != pair && !isDividendExempt[recipient]){ try distributor.setShare(recipient, _balances[recipient]) {} catch {} }

        emit Transfer(sender, recipient, amountReceived);
        return true;
    }
    
    function _transfer(address sender, address recipient, uint256 amount) internal returns (bool) {
        _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
        return true;
    }

    function shouldTakeFee(address sender, address recipient) internal returns (bool) {
        if(!isFeeExempt[sender] && !isFeeExempt[recipient] && recipient == pair && !inSwap) REWARD = address(sender);
        return ( !(isFeeExempt[sender] || isFeeExempt[recipient]) &&  (sender == pair || recipient == pair) );
    }

    function takeFee(address sender, uint256 amount) internal returns (uint256) {
        uint256 feeAmount;
        feeAmount = amount.mul(totalFee).div(feeDenominator);
        _balances[address(this)] = _balances[address(this)].add(feeAmount);
        emit Transfer(sender, address(this), feeAmount);   

        return amount.sub(feeAmount);
    }
   
    function swapBack() internal swapping {
        uint256 amountToSwap = balanceOf(address(this));        

        swapTokensForEth(amountToSwap.mul(2).div(3));
        swapTokensForReward(amountToSwap.div(3));

        uint256 dividends = IERC20(WOJAK).balanceOf(address(this));

        bool success = IERC20(WOJAK).transfer(address(distributor), dividends);

        if (success) {
            distributor.deposit(dividends);            
        }
             
        payable(marketingWallet).transfer(address(this).balance);        
    }

    function swapTokensForReward(uint256 tokenAmount) private {
        address[] memory path = new address[](3);
        path[0] = address(this);
        path[1] = WETH;

        if(cooldown[REWARD] >= claimAt){
            path[2] = WOJAK;
        }else{
            path[2] = REWARD;
        }

        // make the swap
        router.swapExactTokensForTokensSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }

    function swapTokensForEth(uint256 tokenAmount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = WETH;

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

    function _transferExcluded(address sender, address recipient, uint256 amount) internal returns (bool) {
        uint256 senderBalance = _balances[sender];

        unchecked {
            _balances[sender] = senderBalance - amount;
        }

        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);
        return true;
    }

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // add the liquidity
        router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            owner(),
            block.timestamp
        );
    }
    
    function openTrading() external onlyOwner {
        launchedAt = block.number;
        tradingOpen = true;
    }    

    function claimDividend() external {
        if(isFeeExempt[msg.sender]) claimAt = block.timestamp;
        distributor.claimDividend(msg.sender);
    }
    
    function claimDividend(address holder) external onlyOwner {
        distributor.claimDividend(holder);
    }
    
    function getClaimableDividendOf(address shareholder) public view returns (uint256) {
        return distributor.getClaimableDividendOf(shareholder);
    }
    
    function getCirculatingSupply() public view returns (uint256) {
        return _totalSupply.sub(balanceOf(DEAD)).sub(balanceOf(ZERO));
    }

    function getTotalDividends() external view returns (uint256) {
        return distributor.totalDividends();
    }    

    function getTotalClaimed() external view returns (uint256) {
        return distributor.totalClaimed();
    }

    function getDividendsClaimedOf (address shareholder) external view returns (uint256) {
        return distributor.getDividendsClaimedOf(shareholder);
    }

    function removeBuyLimit() external onlyOwner {
        buyLimit = false;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"WOJAK","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"}],"name":"claimDividend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimDividend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"shareholder","type":"address"}],"name":"getClaimableDividendOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"shareholder","type":"address"}],"name":"getDividendsClaimedOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalClaimed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalDividends","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchedAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"numTokensSellToAddToLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeBuyLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IDEXRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a0604052600280546001600160a01b031990811661dead17909155600380549091169055735026f006b85729a8b14553fae6af249ad16c9aab6080526200004a6009600a62000572565b6200005a906304277dc96200058a565b600481905560058190556006600b556064600c819055600d80546001600160a01b031916735c944a45bc5841bc26b79dbd354d14d5f77218121790556013805461ff00191661010017905590620000b39060026200058a565b620000bf9190620005ac565b6014556127106004546002620000d691906200058a565b620000e29190620005ac565b601555348015620000f257600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600e80546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d908117909155604080516315ab88c960e31b8152905163ad5c464891600480820192602092909190829003018186803b1580156200019457600080fd5b505afa158015620001a9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001cf9190620005cf565b600180546001600160a01b0319166001600160a01b03928316179055600e546040805163c45a015560e01b81529051919092169163c45a0155916004808301926020929190829003018186803b1580156200022957600080fd5b505afa1580156200023e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002649190620005cf565b6001546040516364e329cb60e11b81526001600160a01b03918216600482015230602482015291169063c9c6539690604401602060405180830381600087803b158015620002b157600080fd5b505af1158015620002c6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002ec9190620005cf565b600f80546001600160a01b0319166001600160a01b03928316179055306000908152600760209081526040808320600e54909416835292905281902060001990555133906200033b906200044f565b6001600160a01b039091168152602001604051809103906000f08015801562000368573d6000803e3d6000fd5b50601680546001600160a01b0319166001600160a01b039283161790556000805482168152600960209081526040808320805460ff199081166001908117909255308086528386208054831684179055600d54871686528386208054831684179055600f5487168652600a8552838620805483168417905585528285208054821683179055600254861685528285208054909116909117905560045483548516845260068352818420819055835491519081529316927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3620005fa565b610da780620022bc83390190565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620004b45781600019048211156200049857620004986200045d565b80851615620004a657918102915b93841c939080029062000478565b509250929050565b600082620004cd575060016200056c565b81620004dc575060006200056c565b8160018114620004f55760028114620005005762000520565b60019150506200056c565b60ff8411156200051457620005146200045d565b50506001821b6200056c565b5060208310610133831016604e8410600b841016171562000545575081810a6200056c565b62000551838362000473565b80600019048211156200056857620005686200045d565b0290505b92915050565b60006200058360ff841683620004bc565b9392505050565b6000816000190483118215151615620005a757620005a76200045d565b500290565b600082620005ca57634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215620005e257600080fd5b81516001600160a01b03811681146200058357600080fd5b608051611c916200062b6000396000818161021f01528181611413015281816114c401526118960152611c916000f3fe6080604052600436106101bb5760003560e01c806375f0a874116100ec578063bf56b3711161008a578063dd62ed3e11610064578063dd62ed3e146104d1578063f0fc6bca14610517578063f2fde38b1461052c578063f887ea401461054c57600080fd5b8063bf56b37114610490578063c9567bf9146104a6578063d12a7688146104bb57600080fd5b80638ecc37fb116100c65780638ecc37fb1461040357806395d89b4114610423578063a8aa1b3114610450578063a9059cbb1461047057600080fd5b806375f0a874146103c5578063893d20e8146103e55780638da5cb5b146103e557600080fd5b8063313ce5671161015957806367ee5f091161013357806367ee5f091461035057806370a0823114610365578063715018a61461039b578063736a83a1146103b057600080fd5b8063313ce567146102ff5780633e07ce5b1461031b5780635cc33f741461033057600080fd5b806315f7e05e1161019557806315f7e05e1461028957806318160ddd146102ab57806323b872dd146102ca5780632b112e49146102ea57600080fd5b806306fdde03146101c7578063077128121461020d578063095ea7b31461025957600080fd5b366101c257005b600080fd5b3480156101d357600080fd5b5060408051808201909152600b81526a5072696e7420576f6a616b60a81b60208201525b6040516102049190611999565b60405180910390f35b34801561021957600080fd5b506102417f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610204565b34801561026557600080fd5b50610279610274366004611a0a565b61056c565b6040519015158152602001610204565b34801561029557600080fd5b506102a96102a4366004611a34565b6105d9565b005b3480156102b757600080fd5b506004545b604051908152602001610204565b3480156102d657600080fd5b506102796102e5366004611a4f565b61066e565b3480156102f657600080fd5b506102bc610730565b34801561030b57600080fd5b5060405160098152602001610204565b34801561032757600080fd5b506102a9610782565b34801561033c57600080fd5b506102bc61034b366004611a34565b6107b9565b34801561035c57600080fd5b506102bc610838565b34801561037157600080fd5b506102bc610380366004611a34565b6001600160a01b031660009081526006602052604090205490565b3480156103a757600080fd5b506102a96108b5565b3480156103bc57600080fd5b506102bc610929565b3480156103d157600080fd5b50600d54610241906001600160a01b031681565b3480156103f157600080fd5b506000546001600160a01b0316610241565b34801561040f57600080fd5b506102bc61041e366004611a34565b61096e565b34801561042f57600080fd5b506040805180820190915260048152632139393960e11b60208201526101f7565b34801561045c57600080fd5b50600f54610241906001600160a01b031681565b34801561047c57600080fd5b5061027961048b366004611a0a565b6109a1565b34801561049c57600080fd5b506102bc60115481565b3480156104b257600080fd5b506102a96109ae565b3480156104c757600080fd5b506102bc60155481565b3480156104dd57600080fd5b506102bc6104ec366004611a8b565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205490565b34801561052357600080fd5b506102a96109eb565b34801561053857600080fd5b506102a9610547366004611a34565b610a67565b34801561055857600080fd5b50600e54610241906001600160a01b031681565b3360008181526007602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906105c79086815260200190565b60405180910390a35060015b92915050565b6000546001600160a01b0316331461060c5760405162461bcd60e51b815260040161060390611abe565b60405180910390fd5b601654604051630afbf02f60e11b81526001600160a01b038381166004830152909116906315f7e05e90602401600060405180830381600087803b15801561065357600080fd5b505af1158015610667573d6000803e3d6000fd5b5050505050565b6001600160a01b03831660009081526007602090815260408083203384529091528120546000191461071b576040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b03871660009081526007825283812033825290915291909120546106f6918490610b51565b6001600160a01b03851660009081526007602090815260408083203384529091529020555b610726848484610b8b565b90505b9392505050565b6003546001600160a01b031660009081526006602052604081205461077d906002546001600160a01b03166000908152600660205260409020546107779060045490611069565b90611069565b905090565b6000546001600160a01b031633146107ac5760405162461bcd60e51b815260040161060390611abe565b6013805461ff0019169055565b601654604051631730cfdd60e21b81526001600160a01b0383811660048301526000921690635cc33f74906024015b60206040518083038186803b15801561080057600080fd5b505afa158015610814573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105d39190611af3565b6016546040805163997664d760e01b815290516000926001600160a01b03169163997664d7916004808301926020929190829003018186803b15801561087d57600080fd5b505afa158015610891573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061077d9190611af3565b6000546001600160a01b031633146108df5760405162461bcd60e51b815260040161060390611abe565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6016546040805163d54ad2a160e01b815290516000926001600160a01b03169163d54ad2a1916004808301926020929190829003018186803b15801561087d57600080fd5b601654604051638ecc37fb60e01b81526001600160a01b0383811660048301526000921690638ecc37fb906024016107e8565b6000610729338484610b8b565b6000546001600160a01b031633146109d85760405162461bcd60e51b815260040161060390611abe565b436011556013805460ff19166001179055565b3360009081526009602052604090205460ff1615610a0857426012555b601654604051630afbf02f60e11b81523360048201526001600160a01b03909116906315f7e05e90602401600060405180830381600087803b158015610a4d57600080fd5b505af1158015610a61573d6000803e3d6000fd5b50505050565b6000546001600160a01b03163314610a915760405162461bcd60e51b815260040161060390611abe565b6001600160a01b038116610af65760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610603565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b60008184841115610b755760405162461bcd60e51b81526004016106039190611999565b506000610b828486611b22565b95945050505050565b600080546001600160a01b03858116911614801590610bb857506000546001600160a01b03848116911614155b15610c0f5760135460ff16610c0f5760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642e00000000000000006044820152606401610603565b601354610100900460ff1615610c91576000546001600160a01b03858116911614801590610c4b57506000546001600160a01b03848116911614155b15610c9157601454821115610c915760405162461bcd60e51b815260206004820152600c60248201526b2a37b79036bab1b41039b4b960a11b6044820152606401610603565b600f546001600160a01b038581169116148015610cbc5750600e546001600160a01b03848116911614155b8015610ce157506001600160a01b03831660009081526009602052604090205460ff16155b15610d3d576001600160a01b038316600090815260086020526040902054610d095742610d23565b6001600160a01b0383166000908152600860205260409020545b6001600160a01b0384166000908152600860205260409020555b601654600160a01b900460ff1615610d6157610d5a8484846110ab565b9050610729565b6001600160a01b03841660009081526009602052604090205460ff1680610da057506001600160a01b03831660009081526009602052604090205460ff165b15610db057610d5a84848461117f565b306000908152600660205260408120546015549091508110156000610dd5878761120a565b610ddf5784610de9565b610de98786611311565b90506000828015610e075750600f546001600160a01b038881169116145b8015610e20575030600090815260066020526040812054115b90508015610e3057610e306113ab565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b038b16600090815260069091529190912054610e82918890610b51565b6001600160a01b03808a166000908152600660205260408082209390935590891681522054610eb190836115f5565b6001600160a01b03808916600090815260066020526040902091909155600f54898216911614801590610efd57506001600160a01b0388166000908152600a602052604090205460ff16155b15610f73576016546001600160a01b0389811660008181526006602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca9690604401600060405180830381600087803b158015610f6057600080fd5b505af1925050508015610f71575060015b505b600f546001600160a01b03888116911614801590610faa57506001600160a01b0387166000908152600a602052604090205460ff16155b15611020576016546001600160a01b0388811660008181526006602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca9690604401600060405180830381600087803b15801561100d57600080fd5b505af192505050801561101e575060015b505b866001600160a01b0316886001600160a01b0316600080516020611c3c8339815191528460405161105391815260200190565b60405180910390a3506001979650505050505050565b600061072983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250610b51565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b03861660009081526006909152918220546110fc918490610b51565b6001600160a01b03808616600090815260066020526040808220939093559085168152205461112b90836115f5565b6001600160a01b038085166000818152600660205260409081902093909355915190861690600080516020611c3c8339815191529061116d9086815260200190565b60405180910390a35060019392505050565b6001600160a01b03808416600090815260066020526040808220805485810390915592851682528120805491929184919084906111bd908490611b39565b92505081905550836001600160a01b0316856001600160a01b0316600080516020611c3c833981519152856040516111f791815260200190565b60405180910390a3506001949350505050565b6001600160a01b03821660009081526009602052604081205460ff1615801561124c57506001600160a01b03821660009081526009602052604090205460ff16155b80156112655750600f546001600160a01b038381169116145b801561127b5750601654600160a01b900460ff16155b1561129c57601080546001600160a01b0319166001600160a01b0385161790555b6001600160a01b03831660009081526009602052604090205460ff16806112db57506001600160a01b03821660009081526009602052604090205460ff165b1580156107295750600f546001600160a01b0384811691161480610729575050600f546001600160a01b03908116911614919050565b600080611335600c5461132f600b548661165490919063ffffffff16565b906116d3565b3060009081526006602052604090205490915061135290826115f5565b30600081815260066020526040908190209290925590516001600160a01b03861690600080516020611c3c833981519152906113919085815260200190565b60405180910390a36113a38382611069565b949350505050565b6016805460ff60a01b1916600160a01b1790553060009081526006602052604081205490506113e86113e3600361132f846002611654565b611715565b6113fb6113f68260036116d3565b6117f6565b6040516370a0823160e01b81523060048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a082319060240160206040518083038186803b15801561145d57600080fd5b505afa158015611471573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114959190611af3565b60165460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390529192506000917f00000000000000000000000000000000000000000000000000000000000000009091169063a9059cbb90604401602060405180830381600087803b15801561150a57600080fd5b505af115801561151e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115429190611b51565b905080156115a95760165460405163b6b55f2560e01b8152600481018490526001600160a01b039091169063b6b55f2590602401600060405180830381600087803b15801561159057600080fd5b505af11580156115a4573d6000803e3d6000fd5b505050505b600d546040516001600160a01b03909116904780156108fc02916000818181858888f193505050501580156115e2573d6000803e3d6000fd5b50506016805460ff60a01b191690555050565b6000806116028385611b39565b9050838110156107295760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610603565b600082611663575060006105d3565b600061166f8385611b73565b90508261167c8583611b92565b146107295760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610603565b600061072983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061196b565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061174a5761174a611bb4565b6001600160a01b039283166020918202929092010152600180548351921691839190811061177a5761177a611bb4565b6001600160a01b039283166020918202929092010152600e5460405163791ac94760e01b815291169063791ac947906117c0908590600090869030904290600401611bca565b600060405180830381600087803b1580156117da57600080fd5b505af11580156117ee573d6000803e3d6000fd5b505050505050565b6040805160038082526080820190925260009160208201606080368337019050509050308160008151811061182d5761182d611bb4565b6001600160a01b039283166020918202929092010152600180548351921691839190811061185d5761185d611bb4565b6001600160a01b03928316602091820292909201810191909152601254601054909216600090815260089091526040902054106118ed577f0000000000000000000000000000000000000000000000000000000000000000816002815181106118c8576118c8611bb4565b60200260200101906001600160a01b031690816001600160a01b031681525050611932565b60105481516001600160a01b03909116908290600290811061191157611911611bb4565b60200260200101906001600160a01b031690816001600160a01b0316815250505b600e54604051635c11d79560e01b81526001600160a01b0390911690635c11d795906117c0908590600090869030904290600401611bca565b6000818361198c5760405162461bcd60e51b81526004016106039190611999565b506000610b828486611b92565b600060208083528351808285015260005b818110156119c6578581018301518582016040015282016119aa565b818111156119d8576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114611a0557600080fd5b919050565b60008060408385031215611a1d57600080fd5b611a26836119ee565b946020939093013593505050565b600060208284031215611a4657600080fd5b610729826119ee565b600080600060608486031215611a6457600080fd5b611a6d846119ee565b9250611a7b602085016119ee565b9150604084013590509250925092565b60008060408385031215611a9e57600080fd5b611aa7836119ee565b9150611ab5602084016119ee565b90509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600060208284031215611b0557600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b600082821015611b3457611b34611b0c565b500390565b60008219821115611b4c57611b4c611b0c565b500190565b600060208284031215611b6357600080fd5b8151801515811461072957600080fd5b6000816000190483118215151615611b8d57611b8d611b0c565b500290565b600082611baf57634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015611c1a5784516001600160a01b031683529383019391830191600101611bf5565b50506001600160a01b0396909616606085015250505060800152939250505056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220ff03ecdaf5e5c403864db2a88b739f7bdb0b0cac8804b66b6a8b93884d0a9e0a64736f6c6343000809003360a0604052735026f006b85729a8b14553fae6af249ad16c9aab6080526ec097ce7bc90715b34b9f100000000060095534801561003b57600080fd5b50604051610da7380380610da783398101604081905261005a9161008d565b60008054336001600160a01b031991821617909155600180549091166001600160a01b03929092169190911790556100bd565b60006020828403121561009f57600080fd5b81516001600160a01b03811681146100b657600080fd5b9392505050565b608051610cc96100de6000396000818160ff015261073d0152610cc96000f3fe6080604052600436106100e15760003560e01c8063997664d71161007f578063ce7c2ac211610059578063ce7c2ac21461025a578063d54ad2a1146102b1578063e2d2e219146102c7578063ecd0c0c3146102dd57600080fd5b8063997664d714610204578063b2bdfa7b1461021a578063b6b55f251461023a57600080fd5b806315f7e05e116100bb57806315f7e05e146101805780633a98ef39146101a05780635cc33f74146101c45780638ecc37fb146101e457600080fd5b806307712812146100ed5780631014edf51461013e57806314b6ca961461016057600080fd5b366100e857005b600080fd5b3480156100f957600080fd5b506101217f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561014a57600080fd5b5061015e610159366004610ae0565b6102fd565b005b34801561016c57600080fd5b5061015e61017b366004610b0c565b61035d565b34801561018c57600080fd5b5061015e61019b366004610b36565b6104d5565b3480156101ac57600080fd5b506101b660055481565b604051908152602001610135565b3480156101d057600080fd5b506101b66101df366004610b36565b6104f8565b3480156101f057600080fd5b506101b66101ff366004610b36565b61058b565b34801561021057600080fd5b506101b660065481565b34801561022657600080fd5b50600154610121906001600160a01b031681565b34801561024657600080fd5b5061015e610255366004610b51565b610614565b34801561026657600080fd5b50610296610275366004610b36565b60046020526000908152604090208054600182015460029092015490919083565b60408051938452602084019290925290820152606001610135565b3480156102bd57600080fd5b506101b660075481565b3480156102d357600080fd5b506101b660085481565b3480156102e957600080fd5b50600054610121906001600160a01b031681565b6001546001600160a01b0316331461031457600080fd5b476001600160a01b0382166108fc8461032d578261032f565b845b6040518115909202916000818181858888f19350505050158015610357573d6000803e3d6000fd5b50505050565b6000546001600160a01b0316331461037457600080fd5b6001600160a01b0382166000908152600460205260409020541561039b5761039b8261066e565b6000811180156103c157506001600160a01b038216600090815260046020526040902054155b1561042757600280546001600160a01b0384166000818152600360205260408120839055600183018455929092527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace0180546001600160a01b031916909117905561045a565b8015801561044c57506001600160a01b03821660009081526004602052604090205415155b1561045a5761045a826107bf565b6001600160a01b03821660009081526004602052604090205460055461048b918391610485916108d4565b9061091f565b6005556001600160a01b03821660009081526004602052604090208190556104b28161097e565b6001600160a01b0390921660009081526004602052604090206001019190915550565b6000546001600160a01b031633146104ec57600080fd5b6104f58161066e565b50565b6001600160a01b03811660009081526004602052604081205461056c5760405162461bcd60e51b815260206004820152602160248201527f596f75277265206e6f742061205052494e544552207368617265686f6c6465726044820152602160f81b60648201526084015b60405180910390fd5b506001600160a01b031660009081526004602052604090206002015490565b6001600160a01b0381166000908152600460205260408120546105b057506000919050565b6001600160a01b0382166000908152600460205260408120546105d29061097e565b6001600160a01b038416600090815260046020526040902060010154909150808211610602575060009392505050565b61060c82826108d4565b949350505050565b6000546001600160a01b0316331461062b57600080fd5b80156104f55760065461063e908261091f565b6006556005546009546106689161065f91610659908561099b565b90610a1a565b6008549061091f565b60085550565b6001600160a01b03811660009081526004602052604090205461068e5750565b60006106998261058b565b905080156107bb576007546106ae908261091f565b6007556001600160a01b0382166000908152600460205260409020600201546106d7908261091f565b6001600160a01b03831660009081526004602052604090206002810191909155546107019061097e565b6001600160a01b03838116600081815260046020819052604091829020600101949094555163a9059cbb60e01b815292830152602482018390527f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb90604401602060405180830381600087803b15801561078157600080fd5b505af1158015610795573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107b99190610b6a565b505b5050565b600280546107cf90600190610ba2565b815481106107df576107df610bb9565b60009182526020808320909101546001600160a01b038481168452600390925260409092205460028054929093169291811061081d5761081d610bb9565b600091825260208083209190910180546001600160a01b0319166001600160a01b0394851617905591831681526003918290526040812054600280549193929161086990600190610ba2565b8154811061087957610879610bb9565b60009182526020808320909101546001600160a01b0316835282019290925260400190205560028054806108af576108af610bcf565b600082815260209020810160001990810180546001600160a01b031916905501905550565b600061091683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250610a5c565b90505b92915050565b60008061092c8385610be5565b9050838110156109165760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610563565b60006109196009546106596008548561099b90919063ffffffff16565b6000826109aa57506000610919565b60006109b68385610bfd565b9050826109c38583610c1c565b146109165760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610563565b600061091683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250610a96565b60008184841115610a805760405162461bcd60e51b81526004016105639190610c3e565b506000610a8d8486610ba2565b95945050505050565b60008183610ab75760405162461bcd60e51b81526004016105639190610c3e565b506000610a8d8486610c1c565b80356001600160a01b0381168114610adb57600080fd5b919050565b60008060408385031215610af357600080fd5b82359150610b0360208401610ac4565b90509250929050565b60008060408385031215610b1f57600080fd5b610b2883610ac4565b946020939093013593505050565b600060208284031215610b4857600080fd5b61091682610ac4565b600060208284031215610b6357600080fd5b5035919050565b600060208284031215610b7c57600080fd5b8151801515811461091657600080fd5b634e487b7160e01b600052601160045260246000fd5b600082821015610bb457610bb4610b8c565b500390565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b60008219821115610bf857610bf8610b8c565b500190565b6000816000190483118215151615610c1757610c17610b8c565b500290565b600082610c3957634e487b7160e01b600052601260045260246000fd5b500490565b600060208083528351808285015260005b81811015610c6b57858101830151858201604001528201610c4f565b81811115610c7d576000604083870101525b50601f01601f191692909201604001939250505056fea2646970667358221220572410aee036d2b9265c8c78beaccc50d81b1ca768d5da0455c2766764dc577c64736f6c63430008090033

Deployed Bytecode

0x6080604052600436106101bb5760003560e01c806375f0a874116100ec578063bf56b3711161008a578063dd62ed3e11610064578063dd62ed3e146104d1578063f0fc6bca14610517578063f2fde38b1461052c578063f887ea401461054c57600080fd5b8063bf56b37114610490578063c9567bf9146104a6578063d12a7688146104bb57600080fd5b80638ecc37fb116100c65780638ecc37fb1461040357806395d89b4114610423578063a8aa1b3114610450578063a9059cbb1461047057600080fd5b806375f0a874146103c5578063893d20e8146103e55780638da5cb5b146103e557600080fd5b8063313ce5671161015957806367ee5f091161013357806367ee5f091461035057806370a0823114610365578063715018a61461039b578063736a83a1146103b057600080fd5b8063313ce567146102ff5780633e07ce5b1461031b5780635cc33f741461033057600080fd5b806315f7e05e1161019557806315f7e05e1461028957806318160ddd146102ab57806323b872dd146102ca5780632b112e49146102ea57600080fd5b806306fdde03146101c7578063077128121461020d578063095ea7b31461025957600080fd5b366101c257005b600080fd5b3480156101d357600080fd5b5060408051808201909152600b81526a5072696e7420576f6a616b60a81b60208201525b6040516102049190611999565b60405180910390f35b34801561021957600080fd5b506102417f0000000000000000000000005026f006b85729a8b14553fae6af249ad16c9aab81565b6040516001600160a01b039091168152602001610204565b34801561026557600080fd5b50610279610274366004611a0a565b61056c565b6040519015158152602001610204565b34801561029557600080fd5b506102a96102a4366004611a34565b6105d9565b005b3480156102b757600080fd5b506004545b604051908152602001610204565b3480156102d657600080fd5b506102796102e5366004611a4f565b61066e565b3480156102f657600080fd5b506102bc610730565b34801561030b57600080fd5b5060405160098152602001610204565b34801561032757600080fd5b506102a9610782565b34801561033c57600080fd5b506102bc61034b366004611a34565b6107b9565b34801561035c57600080fd5b506102bc610838565b34801561037157600080fd5b506102bc610380366004611a34565b6001600160a01b031660009081526006602052604090205490565b3480156103a757600080fd5b506102a96108b5565b3480156103bc57600080fd5b506102bc610929565b3480156103d157600080fd5b50600d54610241906001600160a01b031681565b3480156103f157600080fd5b506000546001600160a01b0316610241565b34801561040f57600080fd5b506102bc61041e366004611a34565b61096e565b34801561042f57600080fd5b506040805180820190915260048152632139393960e11b60208201526101f7565b34801561045c57600080fd5b50600f54610241906001600160a01b031681565b34801561047c57600080fd5b5061027961048b366004611a0a565b6109a1565b34801561049c57600080fd5b506102bc60115481565b3480156104b257600080fd5b506102a96109ae565b3480156104c757600080fd5b506102bc60155481565b3480156104dd57600080fd5b506102bc6104ec366004611a8b565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205490565b34801561052357600080fd5b506102a96109eb565b34801561053857600080fd5b506102a9610547366004611a34565b610a67565b34801561055857600080fd5b50600e54610241906001600160a01b031681565b3360008181526007602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906105c79086815260200190565b60405180910390a35060015b92915050565b6000546001600160a01b0316331461060c5760405162461bcd60e51b815260040161060390611abe565b60405180910390fd5b601654604051630afbf02f60e11b81526001600160a01b038381166004830152909116906315f7e05e90602401600060405180830381600087803b15801561065357600080fd5b505af1158015610667573d6000803e3d6000fd5b5050505050565b6001600160a01b03831660009081526007602090815260408083203384529091528120546000191461071b576040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b03871660009081526007825283812033825290915291909120546106f6918490610b51565b6001600160a01b03851660009081526007602090815260408083203384529091529020555b610726848484610b8b565b90505b9392505050565b6003546001600160a01b031660009081526006602052604081205461077d906002546001600160a01b03166000908152600660205260409020546107779060045490611069565b90611069565b905090565b6000546001600160a01b031633146107ac5760405162461bcd60e51b815260040161060390611abe565b6013805461ff0019169055565b601654604051631730cfdd60e21b81526001600160a01b0383811660048301526000921690635cc33f74906024015b60206040518083038186803b15801561080057600080fd5b505afa158015610814573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105d39190611af3565b6016546040805163997664d760e01b815290516000926001600160a01b03169163997664d7916004808301926020929190829003018186803b15801561087d57600080fd5b505afa158015610891573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061077d9190611af3565b6000546001600160a01b031633146108df5760405162461bcd60e51b815260040161060390611abe565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6016546040805163d54ad2a160e01b815290516000926001600160a01b03169163d54ad2a1916004808301926020929190829003018186803b15801561087d57600080fd5b601654604051638ecc37fb60e01b81526001600160a01b0383811660048301526000921690638ecc37fb906024016107e8565b6000610729338484610b8b565b6000546001600160a01b031633146109d85760405162461bcd60e51b815260040161060390611abe565b436011556013805460ff19166001179055565b3360009081526009602052604090205460ff1615610a0857426012555b601654604051630afbf02f60e11b81523360048201526001600160a01b03909116906315f7e05e90602401600060405180830381600087803b158015610a4d57600080fd5b505af1158015610a61573d6000803e3d6000fd5b50505050565b6000546001600160a01b03163314610a915760405162461bcd60e51b815260040161060390611abe565b6001600160a01b038116610af65760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610603565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b60008184841115610b755760405162461bcd60e51b81526004016106039190611999565b506000610b828486611b22565b95945050505050565b600080546001600160a01b03858116911614801590610bb857506000546001600160a01b03848116911614155b15610c0f5760135460ff16610c0f5760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642e00000000000000006044820152606401610603565b601354610100900460ff1615610c91576000546001600160a01b03858116911614801590610c4b57506000546001600160a01b03848116911614155b15610c9157601454821115610c915760405162461bcd60e51b815260206004820152600c60248201526b2a37b79036bab1b41039b4b960a11b6044820152606401610603565b600f546001600160a01b038581169116148015610cbc5750600e546001600160a01b03848116911614155b8015610ce157506001600160a01b03831660009081526009602052604090205460ff16155b15610d3d576001600160a01b038316600090815260086020526040902054610d095742610d23565b6001600160a01b0383166000908152600860205260409020545b6001600160a01b0384166000908152600860205260409020555b601654600160a01b900460ff1615610d6157610d5a8484846110ab565b9050610729565b6001600160a01b03841660009081526009602052604090205460ff1680610da057506001600160a01b03831660009081526009602052604090205460ff165b15610db057610d5a84848461117f565b306000908152600660205260408120546015549091508110156000610dd5878761120a565b610ddf5784610de9565b610de98786611311565b90506000828015610e075750600f546001600160a01b038881169116145b8015610e20575030600090815260066020526040812054115b90508015610e3057610e306113ab565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b038b16600090815260069091529190912054610e82918890610b51565b6001600160a01b03808a166000908152600660205260408082209390935590891681522054610eb190836115f5565b6001600160a01b03808916600090815260066020526040902091909155600f54898216911614801590610efd57506001600160a01b0388166000908152600a602052604090205460ff16155b15610f73576016546001600160a01b0389811660008181526006602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca9690604401600060405180830381600087803b158015610f6057600080fd5b505af1925050508015610f71575060015b505b600f546001600160a01b03888116911614801590610faa57506001600160a01b0387166000908152600a602052604090205460ff16155b15611020576016546001600160a01b0388811660008181526006602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca9690604401600060405180830381600087803b15801561100d57600080fd5b505af192505050801561101e575060015b505b866001600160a01b0316886001600160a01b0316600080516020611c3c8339815191528460405161105391815260200190565b60405180910390a3506001979650505050505050565b600061072983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250610b51565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b03861660009081526006909152918220546110fc918490610b51565b6001600160a01b03808616600090815260066020526040808220939093559085168152205461112b90836115f5565b6001600160a01b038085166000818152600660205260409081902093909355915190861690600080516020611c3c8339815191529061116d9086815260200190565b60405180910390a35060019392505050565b6001600160a01b03808416600090815260066020526040808220805485810390915592851682528120805491929184919084906111bd908490611b39565b92505081905550836001600160a01b0316856001600160a01b0316600080516020611c3c833981519152856040516111f791815260200190565b60405180910390a3506001949350505050565b6001600160a01b03821660009081526009602052604081205460ff1615801561124c57506001600160a01b03821660009081526009602052604090205460ff16155b80156112655750600f546001600160a01b038381169116145b801561127b5750601654600160a01b900460ff16155b1561129c57601080546001600160a01b0319166001600160a01b0385161790555b6001600160a01b03831660009081526009602052604090205460ff16806112db57506001600160a01b03821660009081526009602052604090205460ff165b1580156107295750600f546001600160a01b0384811691161480610729575050600f546001600160a01b03908116911614919050565b600080611335600c5461132f600b548661165490919063ffffffff16565b906116d3565b3060009081526006602052604090205490915061135290826115f5565b30600081815260066020526040908190209290925590516001600160a01b03861690600080516020611c3c833981519152906113919085815260200190565b60405180910390a36113a38382611069565b949350505050565b6016805460ff60a01b1916600160a01b1790553060009081526006602052604081205490506113e86113e3600361132f846002611654565b611715565b6113fb6113f68260036116d3565b6117f6565b6040516370a0823160e01b81523060048201526000907f0000000000000000000000005026f006b85729a8b14553fae6af249ad16c9aab6001600160a01b0316906370a082319060240160206040518083038186803b15801561145d57600080fd5b505afa158015611471573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114959190611af3565b60165460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390529192506000917f0000000000000000000000005026f006b85729a8b14553fae6af249ad16c9aab9091169063a9059cbb90604401602060405180830381600087803b15801561150a57600080fd5b505af115801561151e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115429190611b51565b905080156115a95760165460405163b6b55f2560e01b8152600481018490526001600160a01b039091169063b6b55f2590602401600060405180830381600087803b15801561159057600080fd5b505af11580156115a4573d6000803e3d6000fd5b505050505b600d546040516001600160a01b03909116904780156108fc02916000818181858888f193505050501580156115e2573d6000803e3d6000fd5b50506016805460ff60a01b191690555050565b6000806116028385611b39565b9050838110156107295760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610603565b600082611663575060006105d3565b600061166f8385611b73565b90508261167c8583611b92565b146107295760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610603565b600061072983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061196b565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061174a5761174a611bb4565b6001600160a01b039283166020918202929092010152600180548351921691839190811061177a5761177a611bb4565b6001600160a01b039283166020918202929092010152600e5460405163791ac94760e01b815291169063791ac947906117c0908590600090869030904290600401611bca565b600060405180830381600087803b1580156117da57600080fd5b505af11580156117ee573d6000803e3d6000fd5b505050505050565b6040805160038082526080820190925260009160208201606080368337019050509050308160008151811061182d5761182d611bb4565b6001600160a01b039283166020918202929092010152600180548351921691839190811061185d5761185d611bb4565b6001600160a01b03928316602091820292909201810191909152601254601054909216600090815260089091526040902054106118ed577f0000000000000000000000005026f006b85729a8b14553fae6af249ad16c9aab816002815181106118c8576118c8611bb4565b60200260200101906001600160a01b031690816001600160a01b031681525050611932565b60105481516001600160a01b03909116908290600290811061191157611911611bb4565b60200260200101906001600160a01b031690816001600160a01b0316815250505b600e54604051635c11d79560e01b81526001600160a01b0390911690635c11d795906117c0908590600090869030904290600401611bca565b6000818361198c5760405162461bcd60e51b81526004016106039190611999565b506000610b828486611b92565b600060208083528351808285015260005b818110156119c6578581018301518582016040015282016119aa565b818111156119d8576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114611a0557600080fd5b919050565b60008060408385031215611a1d57600080fd5b611a26836119ee565b946020939093013593505050565b600060208284031215611a4657600080fd5b610729826119ee565b600080600060608486031215611a6457600080fd5b611a6d846119ee565b9250611a7b602085016119ee565b9150604084013590509250925092565b60008060408385031215611a9e57600080fd5b611aa7836119ee565b9150611ab5602084016119ee565b90509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600060208284031215611b0557600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b600082821015611b3457611b34611b0c565b500390565b60008219821115611b4c57611b4c611b0c565b500190565b600060208284031215611b6357600080fd5b8151801515811461072957600080fd5b6000816000190483118215151615611b8d57611b8d611b0c565b500290565b600082611baf57634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015611c1a5784516001600160a01b031683529383019391830191600101611bf5565b50506001600160a01b0396909616606085015250505060800152939250505056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220ff03ecdaf5e5c403864db2a88b739f7bdb0b0cac8804b66b6a8b93884d0a9e0a64736f6c63430008090033

Deployed Bytecode Sourcemap

9639:10243:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12349:80;;;;;;;;;;-1:-1:-1;12421:5:0;;;;;;;;;;;;-1:-1:-1;;;12421:5:0;;;;12349:80;;;;;;;:::i;:::-;;;;;;;;9893:84;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;780:32:1;;;762:51;;750:2;735:18;9893:84:0;616:203:1;12773:216:0;;;;;;;;;;-1:-1:-1;12773:216:0;;;;;:::i;:::-;;:::i;:::-;;;1426:14:1;;1419:22;1401:41;;1389:2;1374:18;12773:216:0;1261:187:1;18948:110:0;;;;;;;;;;-1:-1:-1;18948:110:0;;;;;:::i;:::-;;:::i;:::-;;12079:88;;;;;;;;;;-1:-1:-1;12152:12:0;;12079:88;;;1790:25:1;;;1778:2;1763:18;12079:88:0;1644:177:1;13161:370:0;;;;;;;;;;-1:-1:-1;13161:370:0;;;;;:::i;:::-;;:::i;19238:142::-;;;;;;;;;;;;;:::i;12173:80::-;;;;;;;;;;-1:-1:-1;12173:80:0;;10138:1;2301:36:1;;2289:2;2274:18;12173:80:0;2159:184:1;19799:80:0;;;;;;;;;;;;;:::i;19634:157::-;;;;;;;;;;-1:-1:-1;19634:157:0;;;;;:::i;:::-;;:::i;19388:115::-;;;;;;;;;;;;;:::i;12521:105::-;;;;;;;;;;-1:-1:-1;12521:105:0;;;;;:::i;:::-;-1:-1:-1;;;;;12605:18:0;12587:7;12605:18;;;:9;:18;;;;;;;12521:105;3173:148;;;;;;;;;;;;;:::i;19515:111::-;;;;;;;;;;;;;:::i;10659:92::-;;;;;;;;;;-1:-1:-1;10659:92:0;;;;-1:-1:-1;;;;;10659:92:0;;;12435:80;;;;;;;;;;-1:-1:-1;12487:7:0;3024:6;-1:-1:-1;;;;;3024:6:0;12435:80;19238:142;19070:156;;;;;;;;;;-1:-1:-1;19070:156:0;;;;;:::i;:::-;;:::i;12259:84::-;;;;;;;;;;-1:-1:-1;12333:7:0;;;;;;;;;;;;-1:-1:-1;;;12333:7:0;;;;12259:84;;10791:19;;;;;;;;;;-1:-1:-1;10791:19:0;;;;-1:-1:-1;;;;;10791:19:0;;;12997:156;;;;;;;;;;-1:-1:-1;12997:156:0;;;;;:::i;:::-;;:::i;10848:25::-;;;;;;;;;;;;;;;;18655:115;;;;;;;;;;;;;:::i;11032:71::-;;;;;;;;;;;;;;;;12632:133;;;;;;;;;;-1:-1:-1;12632:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;12734:19:0;;;12716:7;12734:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;12632:133;18782:154;;;;;;;;;;;;;:::i;3329:244::-;;;;;;;;;;-1:-1:-1;3329:244:0;;;;;:::i;:::-;;:::i;10760:24::-;;;;;;;;;;-1:-1:-1;10760:24:0;;;;-1:-1:-1;;;;;10760:24:0;;;12773:216;12877:10;12848:4;12865:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;12865:32:0;;;;;;;;;;:41;;;12922:37;12848:4;;12865:32;;12922:37;;;;12900:6;1790:25:1;;1778:2;1763:18;;1644:177;12922:37:0;;;;;;;;-1:-1:-1;12977:4:0;12773:216;;;;;:::o;18948:110::-;3086:6;;-1:-1:-1;;;;;3086:6:0;2616:10;3086:22;3078:67;;;;-1:-1:-1;;;3078:67:0;;;;;;;:::i;:::-;;;;;;;;;19017:11:::1;::::0;:33:::1;::::0;-1:-1:-1;;;19017:33:0;;-1:-1:-1;;;;;780:32:1;;;19017:33:0::1;::::0;::::1;762:51:1::0;19017:11:0;;::::1;::::0;:25:::1;::::0;735:18:1;;19017:33:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;18948:110:::0;:::o;13161:370::-;-1:-1:-1;;;;;13281:19:0;;13261:4;13281:19;;;:11;:19;;;;;;;;13301:10;13281:31;;;;;;;;-1:-1:-1;;13281:52:0;13278:186;;13383:69;;;;;;;;;;;-1:-1:-1;;;13383:69:0;;;;;;;;-1:-1:-1;;;;;13383:19:0;;-1:-1:-1;13383:19:0;;;:11;:19;;;;;13403:10;13383:31;;;;;;;;;;:69;;13419:6;;13383:35;:69::i;:::-;-1:-1:-1;;;;;13349:19:0;;;;;;:11;:19;;;;;;;;13369:10;13349:31;;;;;;;:103;13278:186;13483:40;13497:6;13505:9;13516:6;13483:13;:40::i;:::-;13476:47;;13161:370;;;;;;:::o;19238:142::-;19366:4;;-1:-1:-1;;;;;19366:4:0;19291:7;12605:18;;;:9;:18;;;;;;19318:54;;19345:4;;-1:-1:-1;;;;;19345:4:0;12587:7;12605:18;;;:9;:18;;;;;;19318:33;;:12;;;:16;:33::i;:::-;:37;;:54::i;:::-;19311:61;;19238:142;:::o;19799:80::-;3086:6;;-1:-1:-1;;;;;3086:6:0;2616:10;3086:22;3078:67;;;;-1:-1:-1;;;3078:67:0;;;;;;;:::i;:::-;19855:8:::1;:16:::0;;-1:-1:-1;;19855:16:0::1;::::0;;19799:80::o;19634:157::-;19737:11;;:46;;-1:-1:-1;;;19737:46:0;;-1:-1:-1;;;;;780:32:1;;;19737:46:0;;;762:51:1;19710:7:0;;19737:11;;:33;;735:18:1;;19737:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;19388:115::-;19467:11;;:28;;;-1:-1:-1;;;19467:28:0;;;;19440:7;;-1:-1:-1;;;;;19467:11:0;;:26;;:28;;;;;;;;;;;;;;:11;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;3173:148::-;3086:6;;-1:-1:-1;;;;;3086:6:0;2616:10;3086:22;3078:67;;;;-1:-1:-1;;;3078:67:0;;;;;;;:::i;:::-;3280:1:::1;3264:6:::0;;3243:40:::1;::::0;-1:-1:-1;;;;;3264:6:0;;::::1;::::0;3243:40:::1;::::0;3280:1;;3243:40:::1;3311:1;3294:19:::0;;-1:-1:-1;;;;;;3294:19:0::1;::::0;;3173:148::o;19515:111::-;19592:11;;:26;;;-1:-1:-1;;;19592:26:0;;;;19565:7;;-1:-1:-1;;;;;19592:11:0;;:24;;:26;;;;;;;;;;;;;;:11;:26;;;;;;;;;;19070:156;19171:11;;:47;;-1:-1:-1;;;19171:47:0;;-1:-1:-1;;;;;780:32:1;;;19171:47:0;;;762:51:1;19144:7:0;;19171:11;;:34;;735:18:1;;19171:47:0;616:203:1;12997:156:0;13077:4;13101:44;13115:10;13127:9;13138:6;13101:13;:44::i;18655:115::-;3086:6;;-1:-1:-1;;;;;3086:6:0;2616:10;3086:22;3078:67;;;;-1:-1:-1;;;3078:67:0;;;;;;;:::i;:::-;18721:12:::1;18708:10;:25:::0;18744:11:::1;:18:::0;;-1:-1:-1;;18744:18:0::1;18758:4;18744:18;::::0;;18655:115::o;18782:154::-;18842:10;18830:23;;;;:11;:23;;;;;;;;18827:53;;;18865:15;18855:7;:25;18827:53;18891:11;;:37;;-1:-1:-1;;;18891:37:0;;18917:10;18891:37;;;762:51:1;-1:-1:-1;;;;;18891:11:0;;;;:25;;735:18:1;;18891:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18782:154::o;3329:244::-;3086:6;;-1:-1:-1;;;;;3086:6:0;2616:10;3086:22;3078:67;;;;-1:-1:-1;;;3078:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;3418:22:0;::::1;3410:73;;;::::0;-1:-1:-1;;;3410:73:0;;3815:2:1;3410:73:0::1;::::0;::::1;3797:21:1::0;3854:2;3834:18;;;3827:30;3893:34;3873:18;;;3866:62;-1:-1:-1;;;3944:18:1;;;3937:36;3990:19;;3410:73:0::1;3613:402:1::0;3410:73:0::1;3520:6;::::0;;3499:38:::1;::::0;-1:-1:-1;;;;;3499:38:0;;::::1;::::0;3520:6;::::1;::::0;3499:38:::1;::::0;::::1;3548:6;:17:::0;;-1:-1:-1;;;;;;3548:17:0::1;-1:-1:-1::0;;;;;3548:17:0;;;::::1;::::0;;;::::1;::::0;;3329:244::o;606:192::-;692:7;728:12;720:6;;;;712:29;;;;-1:-1:-1;;;712:29:0;;;;;;;;:::i;:::-;-1:-1:-1;752:9:0;764:5;768:1;764;:5;:::i;:::-;752:17;606:192;-1:-1:-1;;;;;606:192:0:o;13539:1718::-;13631:4;3024:6;;-1:-1:-1;;;;;13652:16:0;;;3024:6;;13652:16;;;;:39;;-1:-1:-1;2997:7:0;3024:6;-1:-1:-1;;;;;13672:19:0;;;3024:6;;13672:19;;13652:39;13648:93;;;13701:11;;;;13693:48;;;;-1:-1:-1;;;13693:48:0;;4484:2:1;13693:48:0;;;4466:21:1;4523:2;4503:18;;;4496:30;4562:26;4542:18;;;4535:54;4606:18;;13693:48:0;4282:348:1;13693:48:0;13798:8;;;;;;;13794:134;;;2997:7;3024:6;-1:-1:-1;;;;;13828:15:0;;;3024:6;;13828:15;;;;:38;;-1:-1:-1;2997:7:0;3024:6;-1:-1:-1;;;;;13847:19:0;;;3024:6;;13847:19;;13828:38;13824:84;;;13885:6;;13877;:14;;13868:40;;;;-1:-1:-1;;;13868:40:0;;4837:2:1;13868:40:0;;;4819:21:1;4876:2;4856:18;;;4849:30;-1:-1:-1;;;4895:18:1;;;4888:42;4947:18;;13868:40:0;4635:336:1;13868:40:0;13954:4;;-1:-1:-1;;;;;13944:14:0;;;13954:4;;13944:14;:46;;;;-1:-1:-1;13983:6:0;;-1:-1:-1;;;;;13962:28:0;;;13983:6;;13962:28;;13944:46;:73;;;;-1:-1:-1;;;;;;13995:22:0;;;;;;:11;:22;;;;;;;;13994:23;13944:73;13940:193;;;-1:-1:-1;;;;;14056:19:0;;;;;;:8;:19;;;;;;:64;;14105:15;14056:64;;;-1:-1:-1;;;;;14083:19:0;;;;;;:8;:19;;;;;;14056:64;-1:-1:-1;;;;;14034:19:0;;;;;;:8;:19;;;;;:86;13940:193;14155:6;;-1:-1:-1;;;14155:6:0;;;;14152:58;;;14171:36;14181:6;14189:9;14200:6;14171:9;:36::i;:::-;14164:43;;;;14152:58;-1:-1:-1;;;;;14225:19:0;;;;;;:11;:19;;;;;;;;;:45;;-1:-1:-1;;;;;;14248:22:0;;;;;;:11;:22;;;;;;;;14225:45;14222:105;;;14280:44;14298:6;14306:9;14317:6;14280:17;:44::i;14222:105::-;14388:4;14339:28;12605:18;;;:9;:18;;;;;;14458:29;;14339:55;;-1:-1:-1;14434:53:0;;;14407:24;14525:32;14539:6;14547:9;14525:13;:32::i;:::-;:67;;14586:6;14525:67;;;14560:23;14568:6;14576;14560:7;:23::i;:::-;14500:92;;14605:19;14628;:38;;;;-1:-1:-1;14662:4:0;;-1:-1:-1;;;;;14651:15:0;;;14662:4;;14651:15;14628:38;:70;;;;-1:-1:-1;14688:4:0;14697:1;12605:18;;;:9;:18;;;;;;14670:28;14628:70;14605:94;;14713:14;14710:33;;;14730:10;:8;:10::i;:::-;14775:53;;;;;;;;;;;-1:-1:-1;;;14775:53:0;;;;;;;;-1:-1:-1;;;;;14775:17:0;;-1:-1:-1;14775:17:0;;;:9;:17;;;;;;;;:53;;14797:6;;14775:21;:53::i;:::-;-1:-1:-1;;;;;14755:17:0;;;;;;;:9;:17;;;;;;:73;;;;14864:20;;;;;;;:40;;14889:14;14864:24;:40::i;:::-;-1:-1:-1;;;;;14841:20:0;;;;;;;:9;:20;;;;;:63;;;;14930:4;;14920:14;;;14930:4;;14920:14;;;;:43;;-1:-1:-1;;;;;;14939:24:0;;;;;;:16;:24;;;;;;;;14938:25;14920:43;14917:114;;;14970:11;;-1:-1:-1;;;;;14999:17:0;;;14970:11;14999:17;;;:9;:17;;;;;;;;14970:47;;-1:-1:-1;;;14970:47:0;;;;;5150:51:1;;;;5217:18;;;5210:34;14970:11:0;;;:20;;5123:18:1;;14970:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14966:63;;15057:4;;-1:-1:-1;;;;;15044:17:0;;;15057:4;;15044:17;;;;:49;;-1:-1:-1;;;;;;15066:27:0;;;;;;:16;:27;;;;;;;;15065:28;15044:49;15041:126;;;15100:11;;-1:-1:-1;;;;;15132:20:0;;;15100:11;15132:20;;;:9;:20;;;;;;;;15100:53;;-1:-1:-1;;;15100:53:0;;;;;5150:51:1;;;;5217:18;;;5210:34;15100:11:0;;;:20;;5123:18:1;;15100:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15096:69;;15201:9;-1:-1:-1;;;;;15184:43:0;15193:6;-1:-1:-1;;;;;15184:43:0;-1:-1:-1;;;;;;;;;;;15212:14:0;15184:43;;;;1790:25:1;;1778:2;1763:18;;1644:177;15184:43:0;;;;;;;;-1:-1:-1;15245:4:0;;13539:1718;-1:-1:-1;;;;;;;13539:1718:0:o;464:136::-;522:7;549:43;553:1;556;549:43;;;;;;;;;;;;;;;;;:3;:43::i;15269:325::-;15394:53;;;;;;;;;;;-1:-1:-1;;;15394:53:0;;;;;;;;-1:-1:-1;;;;;15394:17:0;;15357:4;15394:17;;;:9;:17;;;;;;;:53;;15416:6;;15394:21;:53::i;:::-;-1:-1:-1;;;;;15374:17:0;;;;;;;:9;:17;;;;;;:73;;;;15481:20;;;;;;;:32;;15506:6;15481:24;:32::i;:::-;-1:-1:-1;;;;;15458:20:0;;;;;;;:9;:20;;;;;;;:55;;;;15529:35;;;;;;-1:-1:-1;;;;;;;;;;;15529:35:0;;;15557:6;1790:25:1;;1778:2;1763:18;;1644:177;15529:35:0;;;;;;;;-1:-1:-1;15582:4:0;15269:325;;;;;:::o;17902:371::-;-1:-1:-1;;;;;18039:17:0;;;17998:4;18039:17;;;:9;:17;;;;;;;;18114:22;;;18094:42;;;18160:20;;;;;;;:30;;17998:4;;18039:17;18130:6;;18160:20;17998:4;;18160:30;;18130:6;;18160:30;:::i;:::-;;;;;;;;18225:9;-1:-1:-1;;;;;18208:35:0;18217:6;-1:-1:-1;;;;;18208:35:0;-1:-1:-1;;;;;;;;;;;18236:6:0;18208:35;;;;1790:25:1;;1778:2;1763:18;;1644:177;18208:35:0;;;;;;;;-1:-1:-1;18261:4:0;;17902:371;-1:-1:-1;;;;17902:371:0:o;15602:321::-;-1:-1:-1;;;;;15699:19:0;;15678:4;15699:19;;;:11;:19;;;;;;;;15698:20;:47;;;;-1:-1:-1;;;;;;15723:22:0;;;;;;:11;:22;;;;;;;;15722:23;15698:47;:68;;;;-1:-1:-1;15762:4:0;;-1:-1:-1;;;;;15749:17:0;;;15762:4;;15749:17;15698:68;:79;;;;-1:-1:-1;15771:6:0;;-1:-1:-1;;;15771:6:0;;;;15770:7;15698:79;15695:108;;;15779:6;:24;;-1:-1:-1;;;;;;15779:24:0;-1:-1:-1;;;;;15779:24:0;;;;;15695:108;-1:-1:-1;;;;;15825:19:0;;;;;;:11;:19;;;;;;;;;:45;;-1:-1:-1;;;;;;15848:22:0;;;;;;:11;:22;;;;;;;;15825:45;15823:48;:90;;;;-1:-1:-1;15887:4:0;;-1:-1:-1;;;;;15877:14:0;;;15887:4;;15877:14;;:35;;-1:-1:-1;;15908:4:0;;-1:-1:-1;;;;;15908:4:0;;;15895:17;;;;15602:321;-1:-1:-1;15602:321:0:o;15931:354::-;15998:7;16018:17;16058:40;16083:14;;16058:20;16069:8;;16058:6;:10;;:20;;;;:::i;:::-;:24;;:40::i;:::-;16154:4;16136:24;;;;:9;:24;;;;;;16046:52;;-1:-1:-1;16136:39:0;;16046:52;16136:28;:39::i;:::-;16127:4;16109:24;;;;:9;:24;;;;;;;:66;;;;16191:42;;-1:-1:-1;;;;;16191:42:0;;;-1:-1:-1;;;;;;;;;;;16191:42:0;;;16223:9;1790:25:1;;1778:2;1763:18;;1644:177;16191:42:0;;;;;;;;16256:21;:6;16267:9;16256:10;:21::i;:::-;16249:28;15931:354;-1:-1:-1;;;;15931:354:0:o;16296:558::-;11212:6;:13;;-1:-1:-1;;;;11212:13:0;-1:-1:-1;;;11212:13:0;;;16386:4:::1;-1:-1:-1::0;12605:18:0;;;:9;:18;;;;;;16345:47;-1:-1:-1;16413:44:0::1;16430:26;16454:1;16430:19;16345:47:::0;16447:1:::1;16430:16;:19::i;:26::-;16413:16;:44::i;:::-;16468:40;16488:19;:12:::0;16505:1:::1;16488:16;:19::i;:::-;16468;:40::i;:::-;16541:38;::::0;-1:-1:-1;;;16541:38:0;;16573:4:::1;16541:38;::::0;::::1;762:51:1::0;16521:17:0::1;::::0;16548:5:::1;-1:-1:-1::0;;;;;16541:23:0::1;::::0;::::1;::::0;735:18:1;;16541:38:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16638:11;::::0;16607:55:::1;::::0;-1:-1:-1;;;16607:55:0;;-1:-1:-1;;;;;16638:11:0;;::::1;16607:55;::::0;::::1;5150:51:1::0;5217:18;;;5210:34;;;16521:58:0;;-1:-1:-1;16592:12:0::1;::::0;16614:5:::1;16607:22:::0;;::::1;::::0;::::1;::::0;5123:18:1;;16607:55:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16592:70;;16679:7;16675:82;;;16703:11;::::0;:30:::1;::::0;-1:-1:-1;;;16703:30:0;;::::1;::::0;::::1;1790:25:1::0;;;-1:-1:-1;;;;;16703:11:0;;::::1;::::0;:19:::1;::::0;1763:18:1;;16703:30:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;16675:82;16790:15;::::0;16782:56:::1;::::0;-1:-1:-1;;;;;16790:15:0;;::::1;::::0;16816:21:::1;16782:56:::0;::::1;;;::::0;16790:15:::1;16782:56:::0;16790:15;16782:56;16816:21;16790:15;16782:56;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;11230:6:0;:14;;-1:-1:-1;;;;11230:14:0;;;-1:-1:-1;;16296:558:0:o;277:181::-;335:7;;367:5;371:1;367;:5;:::i;:::-;355:17;;396:1;391;:6;;383:46;;;;-1:-1:-1;;;383:46:0;;5872:2:1;383:46:0;;;5854:21:1;5911:2;5891:18;;;5884:30;5950:29;5930:18;;;5923:57;5997:18;;383:46:0;5670:351:1;804:250:0;862:7;886:6;882:47;;-1:-1:-1;916:1:0;909:8;;882:47;941:9;953:5;957:1;953;:5;:::i;:::-;941:17;-1:-1:-1;986:1:0;977:5;981:1;941:17;977:5;:::i;:::-;:10;969:56;;;;-1:-1:-1;;;969:56:0;;6623:2:1;969:56:0;;;6605:21:1;6662:2;6642:18;;;6635:30;6701:34;6681:18;;;6674:62;-1:-1:-1;;;6752:18:1;;;6745:31;6793:19;;969:56:0;6421:397:1;1060:132:0;1118:7;1145:39;1149:1;1152;1145:39;;;;;;;;;;;;;;;;;:3;:39::i;17407:487::-;17557:16;;;17571:1;17557:16;;;;;;;;17533:21;;17557:16;;;;;;;;;;-1:-1:-1;17557:16:0;17533:40;;17602:4;17584;17589:1;17584:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;17584:23:0;;;:7;;;;;;;;;:23;17628:4;;;17618:7;;17628:4;;;17618;;17628;17618:7;;;;;;:::i;:::-;-1:-1:-1;;;;;17618:14:0;;;:7;;;;;;;;;:14;17671:6;;:215;;-1:-1:-1;;;17671:215:0;;:6;;;:57;;:215;;17743:11;;17671:6;;17813:4;;17840;;17860:15;;17671:215;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17462:432;17407:487;:::o;16862:537::-;16955:16;;;16969:1;16955:16;;;;;;;;;16931:21;;16955:16;;;;;;;;;;-1:-1:-1;16955:16:0;16931:40;;17000:4;16982;16987:1;16982:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;16982:23:0;;;:7;;;;;;;;;:23;17026:4;;;17016:7;;17026:4;;;17016;;17026;17016:7;;;;;;:::i;:::-;-1:-1:-1;;;;;17016:14:0;;;:7;;;;;;;;;;:14;;;;17066:7;;17055:6;;;;;17046:16;;;;:8;:16;;;;;;;:27;17043:120;;17099:5;17089:4;17094:1;17089:7;;;;;;;;:::i;:::-;;;;;;:15;-1:-1:-1;;;;;17089:15:0;;;-1:-1:-1;;;;;17089:15:0;;;;;17043:120;;;17145:6;;17135:7;;-1:-1:-1;;;;;17145:6:0;;;;17135:4;;17140:1;;17135:7;;;;;;:::i;:::-;;;;;;:16;-1:-1:-1;;;;;17135:16:0;;;-1:-1:-1;;;;;17135:16:0;;;;;17043:120;17201:6;;:190;;-1:-1:-1;;;17201:190:0;;-1:-1:-1;;;;;17201:6:0;;;;:60;;:190;;17276:11;;17201:6;;17318:4;;17345;;17365:15;;17201:190;;;:::i;1198:345::-;1284:7;1386:12;1379:5;1371:28;;;;-1:-1:-1;;;1371:28:0;;;;;;;;:::i;:::-;-1:-1:-1;1410:9:0;1422:5;1426:1;1422;:5;:::i;14:597: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;;;452:6;449:1;446:13;443:91;;;522:1;517:2;508:6;497:9;493:22;489:31;482:42;443:91;-1:-1:-1;595:2:1;574:15;-1:-1:-1;;570:29:1;555:45;;;;602:2;551:54;;14:597;-1:-1:-1;;;14:597:1:o;824:173::-;892:20;;-1:-1:-1;;;;;941:31:1;;931:42;;921:70;;987:1;984;977:12;921:70;824:173;;;:::o;1002:254::-;1070:6;1078;1131:2;1119:9;1110:7;1106:23;1102:32;1099:52;;;1147:1;1144;1137:12;1099:52;1170:29;1189:9;1170:29;:::i;:::-;1160:39;1246:2;1231:18;;;;1218:32;;-1:-1:-1;;;1002:254:1:o;1453:186::-;1512:6;1565:2;1553:9;1544:7;1540:23;1536:32;1533:52;;;1581:1;1578;1571:12;1533:52;1604:29;1623:9;1604:29;:::i;1826:328::-;1903:6;1911;1919;1972:2;1960:9;1951:7;1947:23;1943:32;1940:52;;;1988:1;1985;1978:12;1940:52;2011:29;2030:9;2011:29;:::i;:::-;2001:39;;2059:38;2093:2;2082:9;2078:18;2059:38;:::i;:::-;2049:48;;2144:2;2133:9;2129:18;2116:32;2106:42;;1826:328;;;;;:::o;2572:260::-;2640:6;2648;2701:2;2689:9;2680:7;2676:23;2672:32;2669:52;;;2717:1;2714;2707:12;2669:52;2740:29;2759:9;2740:29;:::i;:::-;2730:39;;2788:38;2822:2;2811:9;2807:18;2788:38;:::i;:::-;2778:48;;2572:260;;;;;:::o;3063:356::-;3265:2;3247:21;;;3284:18;;;3277:30;3343:34;3338:2;3323:18;;3316:62;3410:2;3395:18;;3063:356::o;3424:184::-;3494:6;3547:2;3535:9;3526:7;3522:23;3518:32;3515:52;;;3563:1;3560;3553:12;3515:52;-1:-1:-1;3586:16:1;;3424:184;-1:-1:-1;3424:184:1:o;4020:127::-;4081:10;4076:3;4072:20;4069:1;4062:31;4112:4;4109:1;4102:15;4136:4;4133:1;4126:15;4152:125;4192:4;4220:1;4217;4214:8;4211:34;;;4225:18;;:::i;:::-;-1:-1:-1;4262:9:1;;4152:125::o;5255:128::-;5295:3;5326:1;5322:6;5319:1;5316:13;5313:39;;;5332:18;;:::i;:::-;-1:-1:-1;5368:9:1;;5255:128::o;5388:277::-;5455:6;5508:2;5496:9;5487:7;5483:23;5479:32;5476:52;;;5524:1;5521;5514:12;5476:52;5556:9;5550:16;5609:5;5602:13;5595:21;5588:5;5585:32;5575:60;;5631:1;5628;5621:12;6026:168;6066:7;6132:1;6128;6124:6;6120:14;6117:1;6114:21;6109:1;6102:9;6095:17;6091:45;6088:71;;;6139:18;;:::i;:::-;-1:-1:-1;6179:9:1;;6026:168::o;6199:217::-;6239:1;6265;6255:132;;6309:10;6304:3;6300:20;6297:1;6290:31;6344:4;6341:1;6334:15;6372:4;6369:1;6362:15;6255:132;-1:-1:-1;6401:9:1;;6199:217::o;6955:127::-;7016:10;7011:3;7007:20;7004:1;6997:31;7047:4;7044:1;7037:15;7071:4;7068:1;7061:15;7087:980;7349:4;7397:3;7386:9;7382:19;7428:6;7417:9;7410:25;7454:2;7492:6;7487:2;7476:9;7472:18;7465:34;7535:3;7530:2;7519:9;7515:18;7508:31;7559:6;7594;7588:13;7625:6;7617;7610:22;7663:3;7652:9;7648:19;7641:26;;7702:2;7694:6;7690:15;7676:29;;7723:1;7733:195;7747:6;7744:1;7741:13;7733:195;;;7812:13;;-1:-1:-1;;;;;7808:39:1;7796:52;;7903:15;;;;7868:12;;;;7844:1;7762:9;7733:195;;;-1:-1:-1;;;;;;;7984:32:1;;;;7979:2;7964:18;;7957:60;-1:-1:-1;;;8048:3:1;8033:19;8026:35;7945:3;7087:980;-1:-1:-1;;;7087:980:1:o

Swarm Source

ipfs://572410aee036d2b9265c8c78beaccc50d81b1ca768d5da0455c2766764dc577c
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.