ETH Price: $3,356.73 (-0.95%)

Token

SATOSHI (SATS)
 

Overview

Max Total Supply

94.174985968105508687 SATS

Holders

234

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
teachmetolockinbro.eth
Balance
0.000000466192850944 SATS

Value
$0.00
0x9447bB342Ec6dE70FeE68b8CdBccF5dDA35c2004
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:
Satoshi

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

/*
 * Satoshi P2P e-cash paper
 *
 * Satoshi Nakamoto
 * [email protected]
 * www.bitcoin.org
 *
 * Abstract:
 *
 * A purely decentralized implementation of an Ethereum contract, inspired by 
 * Bitcoin's peer-to-peer electronic cash system, enables the direct transfer 
 * of tokens from one party to another without a third-party intermediary. 
 * Cryptographic methods provide part of the solution, but primary advantages 
 * are lost if a trusted authority is still needed to manage token supply and 
 * prevent over-spending.
 *
 * We propose a solution to the token supply management using a 
 * contract-level automated feature. The contract manages the token supply by 
 * calculating the rewards from a block and applying the "BlockReward" event, 
 * forming a record that cannot be altered without redoing the reward event. 
 * The reward event not only serves as evidence of the sequence of operations, 
 * but also as evidence of the largest pool of token holders. As long as a 
 * majority of token holders are not cooperating to disrupt the contract, 
 * they'll validate the longest chain of events and outpace potential adversaries.
 *
 * The contract itself requires minimal structure. Transactions are executed 
 * on a first-come-first-serve basis, and addresses can interact with the 
 * contract at will, accepting the outcome of the longest chain of events as 
 * proof of what happened in their absence. In addition, the contract 
 * periodically contributes tokens to the Satoshi Contribution, effectively 
 * removing them from the circulating supply. This contributes to the scarcity 
 * and potentially the value of the token over time, reflecting the spirit of 
 * Satoshi Nakamoto's vision in the context of an Ethereum contract.
 * 
 * https://twitter.com/0xSatoshiETH
*/

pragma solidity 0.8.19;

interface IERC20 {
    function totalSupply() external view returns (uint256);
    function balanceOf(address who) external view returns (uint256);
    function allowance(address owner, address spender) external view returns (uint256);
    function transfer(address to, uint256 value) external returns (bool);
    function approve(address spender, uint256 value) external returns (bool);
    function transferFrom(address from, address to, uint256 value) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

interface InterfaceLP {
    function sync() external;
    function mint(address to) external returns (uint liquidity);
}

abstract contract ERC20Detailed is IERC20 {
    string private _name;
    string private _symbol;
    uint8 private _decimals;

    constructor(
        string memory _tokenName,
        string memory _tokenSymbol,
        uint8 _tokenDecimals
    ) {
        _name = _tokenName;
        _symbol = _tokenSymbol;
        _decimals = _tokenDecimals;
    }

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

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

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

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

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

contract Ownable {
    address private _owner;

    event OwnershipRenounced(address indexed previousOwner);

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

    constructor() {
        _owner = msg.sender;
    }

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

    modifier onlyOwner() {
        require(msg.sender == _owner, "Not owner");
        _;
    }

    function renounceOwnership() public onlyOwner {
        emit OwnershipRenounced(_owner);
        _owner = address(0);
    }

    function transferOwnership(address newOwner) public onlyOwner {
        _transferOwnership(newOwner);
    }

    function _transferOwnership(address newOwner) internal {
        require(newOwner != address(0));
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

interface IWETH {
    function deposit() external payable;
}

contract Satoshi is ERC20Detailed, Ownable {

    uint256 public halvingRateNumerator = 810101010;
    uint256 public halvingRateDenominator = 100000000000;

    uint256 public blockRewardInterval = 2 hours;
    uint256 public nextBlockReward;
    bool public autoBlockReward = true;

    uint256 public maxTxnAmount;
    uint256 public maxWallet;

    uint256 public percentForSatoshi = 50;
    bool public satoshiEnabled = true;
    uint256 public satoshiFrequency = 2 hours;
    uint256 public nextSatoshi;

    uint256 private constant DECIMALS = 18;
    uint256 private constant INITIAL_COINS_SUPPLY = 21_000_000 * 10**DECIMALS;
    uint256 private constant TOTAL_UNITS = type(uint256).max - (type(uint256).max % INITIAL_COINS_SUPPLY);
    uint256 private constant MIN_SUPPLY = 21 * 10**DECIMALS;

    event BlockReward(uint256 indexed time, uint256 totalSupply);
    event RemovedLimits();
    event SatoshiContribution(uint256 indexed amount);

    IWETH public immutable weth;

    IDEXRouter public immutable router;
    address public immutable pair;
    
    bool public limitsInEffect = true;
    bool public lpAdded = false;
    
    uint256 private _totalSupply;
    uint256 private _unitsPerCoin;

    mapping(address => uint256) private _unitBalances;
    mapping(address => mapping(address => uint256)) private _allowedCoins;

    modifier validRecipient(address to) {
        require(to != address(0x0));
        _;
    }

    constructor() ERC20Detailed(block.chainid==1 ? "SATOSHI" : "SAT", block.chainid==1 ? "SATS" : "SAT", 18) {
        address dexAddress;
        if(block.chainid == 1){
            dexAddress = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
        } else if(block.chainid == 5){
            dexAddress = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
        } else if (block.chainid == 97){
            dexAddress = 0xD99D1c33F9fC3444f8101754aBC46c52416550D1;
        } else {
            revert("Chain not configured");
        }

        router = IDEXRouter(dexAddress);

        _totalSupply = INITIAL_COINS_SUPPLY;
        _unitBalances[address(this)] = TOTAL_UNITS;
        _unitsPerCoin = TOTAL_UNITS/(_totalSupply);

        maxTxnAmount = _totalSupply * 1 / 100;
        maxWallet = _totalSupply * 1 / 100;

        weth = IWETH(router.WETH());
        pair = IDEXFactory(router.factory()).createPair(address(this), router.WETH());

        emit Transfer(address(0x0), address(this), balanceOf(address(this)));
    }

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

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

    function allowance(address owner_, address spender) external view override returns (uint256){
        return _allowedCoins[owner_][spender];
    }

    function balanceOf(address who) public view override returns (uint256) {
        return _unitBalances[who]/(_unitsPerCoin);
    }

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

    function approve(address spender, uint256 coins) public override returns (bool) {
        _allowedCoins[_msgSender()][spender] = coins;
        emit Approval(_msgSender(), spender, coins);
        return true;
    }

    function transferFrom(address sender, address recipient, uint256 amount) public override validRecipient(recipient) returns (bool) {
        require(amount <= _allowedCoins[sender][_msgSender()], "Transfer amount exceeds allowance");
        _allowedCoins[sender][_msgSender()] = _allowedCoins[sender][_msgSender()]-amount;
        _transferFrom(sender, recipient, amount);
        return true;
    }

    function _transferFrom(address sender, address recipient, uint256 amount) internal {
        if(limitsInEffect){
            if (sender == pair || recipient == pair){
                require(amount <= maxTxnAmount, "Max Transaction Amount Exceeded");
            }
            if (recipient != pair){
                require(balanceOf(recipient) + amount <= maxWallet, "Max Wallet Amount Exceeded");
            }
        }

        if(recipient == pair){
            if(autoBlockReward && shouldReward()){
                blockReward();
            }
            if (shouldReward()) {
                autoSatoshi();
            }
        }

        uint256 unitAmount = amount*(_unitsPerCoin);

        _unitBalances[sender] = _unitBalances[sender]-(unitAmount);
        _unitBalances[recipient] = _unitBalances[recipient]+(unitAmount);

        emit Transfer(sender, recipient, unitAmount/(_unitsPerCoin));
    }

        function decreaseAllowance(address spender, uint256 subtractedValue) external returns (bool){
        uint256 oldValue = _allowedCoins[_msgSender()][spender];
        if (subtractedValue >= oldValue) {
            _allowedCoins[_msgSender()][spender] = 0;
        } else {
            _allowedCoins[_msgSender()][spender] = oldValue - subtractedValue;
        }
        emit Approval(_msgSender(), spender, _allowedCoins[_msgSender()][spender]);
        return true;
    }

    function increaseAllowance(address spender, uint256 addedValue) external returns (bool){
        _allowedCoins[_msgSender()][spender] = _allowedCoins[_msgSender()][spender] + addedValue;
        emit Approval(_msgSender(), spender, _allowedCoins[_msgSender()][spender]);
        return true;
    }

    function getSupplyDeltaOnNextBlockReward() external view returns (uint256){
        return (_totalSupply*halvingRateNumerator)/halvingRateDenominator;
    }

    function shouldReward() public view returns (bool) {
        return nextBlockReward <= block.timestamp;
    }

    function lpSync() internal {
        InterfaceLP _pair = InterfaceLP(pair);
        _pair.sync();
    }

    function blockReward() private returns (uint256) {
        uint256 time = block.timestamp;

        uint256 supplyDelta = (_totalSupply*halvingRateNumerator)/halvingRateDenominator;

        nextBlockReward += blockRewardInterval;

        if (supplyDelta == 0) {
            emit BlockReward(time, _totalSupply);
            return _totalSupply;
        }

        _totalSupply = _totalSupply - supplyDelta;

        if (_totalSupply < MIN_SUPPLY) {
            _totalSupply = MIN_SUPPLY;
            autoBlockReward = false;
        }

        _unitsPerCoin = TOTAL_UNITS / _totalSupply;

        lpSync();

        emit BlockReward(time, _totalSupply);
        return _totalSupply;
    }

    function manualBlockReward() external onlyOwner {
        require(shouldReward(), "Not yet time for block reward");
        blockReward();
    }

    function autoSatoshi() internal {
        nextSatoshi = block.timestamp + satoshiFrequency;

        uint256 liquidityPairBalance = balanceOf(pair);

        uint256 amountToContribute = liquidityPairBalance * percentForSatoshi / 10000;

        if (amountToContribute > 0) {
            uint256 unitAmountToContribute = amountToContribute * _unitsPerCoin;
            _unitBalances[pair] -= unitAmountToContribute;
            _unitBalances[address(0xdead)] += unitAmountToContribute;
            emit Transfer(pair, address(0xdead), amountToContribute);
        }

        InterfaceLP _pair = InterfaceLP(pair);
        _pair.sync();
        emit SatoshiContribution(amountToContribute);
    }

    function manualSatoshi() external onlyOwner {
        require(shouldReward(), "Must wait for cooldown to finish");

        nextSatoshi = block.timestamp + satoshiFrequency;

        uint256 liquidityPairBalance = balanceOf(pair);

        uint256 amountToContribute = liquidityPairBalance * percentForSatoshi / 10000;

        if (amountToContribute > 0) {
            uint256 unitAmountToContribute = amountToContribute * _unitsPerCoin;
            _unitBalances[pair] -= unitAmountToContribute;
            _unitBalances[address(0xdead)] += unitAmountToContribute;
            emit Transfer(pair, address(0xdead), amountToContribute);
        }

        InterfaceLP _pair = InterfaceLP(pair);
        _pair.sync();
        emit SatoshiContribution(amountToContribute);
    }

    function genesisBlock(address[] calldata _to) external payable onlyOwner {
        require(!lpAdded, "LP already added");
        require(address(this).balance > 0 && balanceOf(address(this)) > 0);

        uint256 totalDistribution = (_to.length * (INITIAL_COINS_SUPPLY * 3 / 1000));
        uint256 toDistribute = INITIAL_COINS_SUPPLY * 3 / 1000 * _unitsPerCoin;

        require(balanceOf(address(this)) >= totalDistribution, "Insufficient balance to distribute");

        for (uint256 i = 0; i < _to.length; i++) {
            _unitBalances[_to[i]] += (toDistribute);
        }

        weth.deposit{value: address(this).balance}();

        uint lpBalance = (_unitBalances[address(this)] - (totalDistribution * _unitsPerCoin));
        _unitBalances[pair] += lpBalance;
        _unitBalances[address(this)] = 0;
        emit Transfer(address(this), pair, _unitBalances[pair] / _unitsPerCoin);

        IERC20(address(weth)).transfer(address(pair), IERC20(address(weth)).balanceOf(address(this)));

        InterfaceLP(pair).mint(owner());
        lpAdded = true;

        nextBlockReward = block.timestamp + blockRewardInterval;
        nextSatoshi = block.timestamp + satoshiFrequency;

        //The NY Times 4/07/2023 Israel Launches Biggest Air Attack on West Bank in Nearly Two Decades
    }

}

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":"time","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalSupply","type":"uint256"}],"name":"BlockReward","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"}],"name":"OwnershipRenounced","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[],"name":"RemovedLimits","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"SatoshiContribution","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner_","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"coins","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"autoBlockReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"who","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"blockRewardInterval","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_to","type":"address[]"}],"name":"genesisBlock","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"getSupplyDeltaOnNextBlockReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"halvingRateDenominator","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"halvingRateNumerator","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpAdded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualBlockReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualSatoshi","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxTxnAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nextBlockReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nextSatoshi","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"percentForSatoshi","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"satoshiEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"satoshiFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"shouldReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"weth","outputs":[{"internalType":"contract IWETH","name":"","type":"address"}],"stateMutability":"view","type":"function"}]

60e0604052633049291260035564174876e800600455611c20600581905560078054600160ff1991821681179092556032600a55600b805490911682179055600c91909155600e805461ffff191690911790553480156200005f57600080fd5b50466001146200008b576040518060400160405280600381526020016214d05560ea1b815250620000ac565b604051806040016040528060078152602001665341544f53484960c81b8152505b46600114620000d7576040518060400160405280600381526020016214d05560ea1b815250620000f5565b604051806040016040528060048152602001635341545360e01b8152505b60126000620001058482620005fa565b506001620001148382620005fa565b506002805460ff929092166001600160a81b0319909216919091176101003302179055506000905046600103620001615750737a250d5630b4cf539739df2c5dacb4c659f2488d620001f7565b46600503620001865750737a250d5630b4cf539739df2c5dacb4c659f2488d620001f7565b46606103620001ab575073d99d1c33f9fc3444f8101754abc46c52416550d1620001f7565b60405162461bcd60e51b815260206004820152601460248201527f436861696e206e6f7420636f6e66696775726564000000000000000000000000604482015260640160405180910390fd5b6001600160a01b03811660a052620002126012600a620007d9565b62000222906301406f40620007ee565b600f55620002336012600a620007d9565b62000243906301406f40620007ee565b62000251906000196200081e565b6200025f9060001962000835565b30600090815260116020526040902055600f54620002806012600a620007d9565b62000290906301406f40620007ee565b6200029e906000196200081e565b620002ac9060001962000835565b620002b891906200084b565b601055600f54606490620002ce906001620007ee565b620002da91906200084b565b600855600f54606490620002f0906001620007ee565b620002fc91906200084b565b60098190555060a0516001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000343573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000369919062000862565b6001600160a01b03166080816001600160a01b03168152505060a0516001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620003c3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003e9919062000862565b6001600160a01b031663c9c653963060a0516001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000439573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200045f919062000862565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015620004ad573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004d3919062000862565b6001600160a01b031660c0523060007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6200050e8362000526565b60405190815260200160405180910390a3506200088d565b6010546001600160a01b03821660009081526011602052604081205490916200054f916200084b565b92915050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200058057607f821691505b602082108103620005a157634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620005f557600081815260208120601f850160051c81016020861015620005d05750805b601f850160051c820191505b81811015620005f157828155600101620005dc565b5050505b505050565b81516001600160401b0381111562000616576200061662000555565b6200062e816200062784546200056b565b84620005a7565b602080601f8311600181146200066657600084156200064d5750858301515b600019600386901b1c1916600185901b178555620005f1565b600085815260208120601f198616915b82811015620006975788860151825594840194600190910190840162000676565b5085821015620006b65787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b600181815b808511156200071d578160001904821115620007015762000701620006c6565b808516156200070f57918102915b93841c9390800290620006e1565b509250929050565b60008262000736575060016200054f565b8162000745575060006200054f565b81600181146200075e5760028114620007695762000789565b60019150506200054f565b60ff8411156200077d576200077d620006c6565b50506001821b6200054f565b5060208310610133831016604e8410600b8410161715620007ae575081810a6200054f565b620007ba8383620006dc565b8060001904821115620007d157620007d1620006c6565b029392505050565b6000620007e7838362000725565b9392505050565b80820281158282048414176200054f576200054f620006c6565b634e487b7160e01b600052601260045260246000fd5b60008262000830576200083062000808565b500690565b818103818111156200054f576200054f620006c6565b6000826200085d576200085d62000808565b500490565b6000602082840312156200087557600080fd5b81516001600160a01b0381168114620007e757600080fd5b60805160a05160c051611cb162000926600039600081816104e301528181610ccc01528181610d2c01528181610de201528181610ec001528181611161015281816111c601528181611265015281816112b9015281816113a2015281816113dd0152818161146a0152818161150801526118220152600061061301526000818161032501528181610c260152610db10152611cb16000f3fe6080604052600436106102045760003560e01c80637dc7278f11610118578063af8deddb116100a0578063dd62ed3e1161006f578063dd62ed3e14610586578063e9500015146105cc578063f2fde38b146105e1578063f887ea4014610601578063f8b45b051461063557600080fd5b8063af8deddb14610525578063bd334d8114610544578063c3083bf81461055a578063cf46f24c1461057057600080fd5b806395d89b41116100e757806395d89b4114610482578063a457c2d714610497578063a58c9382146104b7578063a8aa1b31146104d1578063a9059cbb1461050557600080fd5b80637dc7278f1461041c57806381285a0e146104325780638a9e98c41461044c5780638da5cb5b1461045f57600080fd5b80633fc8cef31161019b5780636519b5a91161016a5780636519b5a9146103a557806370a08231146103bb578063715018a6146103db57806374fd41a5146103f05780637af2c4221461040657600080fd5b80633fc8cef31461031357806344b0c73f1461035f5780634a62bb65146103765780635e7dd5361461039057600080fd5b806321395349116101d7578063213953491461029957806323b872dd146102b1578063313ce567146102d157806339509351146102f357600080fd5b806306fdde0314610209578063095ea7b31461023457806318160ddd1461026457806318d954ef14610283575b600080fd5b34801561021557600080fd5b5061021e61064b565b60405161022b9190611899565b60405180910390f35b34801561024057600080fd5b5061025461024f366004611903565b6106dd565b604051901515815260200161022b565b34801561027057600080fd5b50600f545b60405190815260200161022b565b34801561028f57600080fd5b50610275600c5481565b3480156102a557600080fd5b50600654421015610254565b3480156102bd57600080fd5b506102546102cc36600461192d565b610746565b3480156102dd57600080fd5b5060025460405160ff909116815260200161022b565b3480156102ff57600080fd5b5061025461030e366004611903565b610847565b34801561031f57600080fd5b506103477f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161022b565b34801561036b57600080fd5b506103746108cd565b005b34801561038257600080fd5b50600e546102549060ff1681565b34801561039c57600080fd5b50610275610959565b3480156103b157600080fd5b5061027560035481565b3480156103c757600080fd5b506102756103d6366004611969565b61097d565b3480156103e757600080fd5b506103746109a4565b3480156103fc57600080fd5b5061027560045481565b34801561041257600080fd5b5061027560065481565b34801561042857600080fd5b50610275600a5481565b34801561043e57600080fd5b506007546102549060ff1681565b61037461045a36600461198b565b610a22565b34801561046b57600080fd5b5060025461010090046001600160a01b0316610347565b34801561048e57600080fd5b5061021e610fa6565b3480156104a357600080fd5b506102546104b2366004611903565b610fb5565b3480156104c357600080fd5b50600b546102549060ff1681565b3480156104dd57600080fd5b506103477f000000000000000000000000000000000000000000000000000000000000000081565b34801561051157600080fd5b50610254610520366004611903565b61109e565b34801561053157600080fd5b50600e5461025490610100900460ff1681565b34801561055057600080fd5b5061027560055481565b34801561056657600080fd5b50610275600d5481565b34801561057c57600080fd5b5061027560085481565b34801561059257600080fd5b506102756105a1366004611a00565b6001600160a01b03918216600090815260126020908152604080832093909416825291909152205490565b3480156105d857600080fd5b506103746110c9565b3480156105ed57600080fd5b506103746105fc366004611969565b61135d565b34801561060d57600080fd5b506103477f000000000000000000000000000000000000000000000000000000000000000081565b34801561064157600080fd5b5061027560095481565b60606000805461065a90611a33565b80601f016020809104026020016040519081016040528092919081815260200182805461068690611a33565b80156106d35780601f106106a8576101008083540402835291602001916106d3565b820191906000526020600020905b8154815290600101906020018083116106b657829003601f168201915b5050505050905090565b3360008181526012602090815260408083206001600160a01b03871680855290835281842086905590518581529293909290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a35060015b92915050565b6000826001600160a01b03811661075c57600080fd5b6001600160a01b03851660009081526012602090815260408083203384529091529020548311156107de5760405162461bcd60e51b815260206004820152602160248201527f5472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636044820152606560f81b60648201526084015b60405180910390fd5b6001600160a01b038516600090815260126020908152604080832033845290915290205461080d908490611a83565b6001600160a01b038616600090815260126020908152604080832033845290915290205561083c858585611395565b506001949350505050565b3360009081526012602090815260408083206001600160a01b0386168452909152812054610876908390611a96565b3360008181526012602090815260408083206001600160a01b038916808552908352928190208590555193845290927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259101610734565b60025461010090046001600160a01b031633146108fc5760405162461bcd60e51b81526004016107d590611aa9565b60065442101561094e5760405162461bcd60e51b815260206004820152601d60248201527f4e6f74207965742074696d6520666f7220626c6f636b2072657761726400000060448201526064016107d5565b610956611641565b50565b6000600454600354600f5461096e9190611acc565b6109789190611af9565b905090565b6010546001600160a01b038216600090815260116020526040812054909161074091611af9565b60025461010090046001600160a01b031633146109d35760405162461bcd60e51b81526004016107d590611aa9565b6002546040516101009091046001600160a01b0316907ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482090600090a260028054610100600160a81b0319169055565b60025461010090046001600160a01b03163314610a515760405162461bcd60e51b81526004016107d590611aa9565b600e54610100900460ff1615610a9c5760405162461bcd60e51b815260206004820152601060248201526f131408185b1c9958591e48185919195960821b60448201526064016107d5565b600047118015610ab457506000610ab23061097d565b115b610abd57600080fd5b60006103e8610ace6012600a611bf1565b610adc906301406f40611acc565b610ae7906003611acc565b610af19190611af9565b610afb9083611acc565b905060006010546103e86012600a610b139190611bf1565b610b21906301406f40611acc565b610b2c906003611acc565b610b369190611af9565b610b409190611acc565b905081610b4c3061097d565b1015610ba55760405162461bcd60e51b815260206004820152602260248201527f496e73756666696369656e742062616c616e636520746f206469737472696275604482015261746560f01b60648201526084016107d5565b60005b83811015610c23578160116000878785818110610bc757610bc7611bfd565b9050602002016020810190610bdc9190611969565b6001600160a01b03166001600160a01b031681526020019081526020016000206000828254610c0b9190611a96565b90915550819050610c1b81611c13565b915050610ba8565b507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0476040518263ffffffff1660e01b81526004016000604051808303818588803b158015610c7f57600080fd5b505af1158015610c93573d6000803e3d6000fd5b5050505050600060105483610ca89190611acc565b30600090815260116020526040902054610cc29190611a83565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016600090815260116020526040812080549293508392909190610d0f908490611a96565b9091555050306000818152601160205260408082208290556010547f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031680845291909220549092917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91610d8b9190611af9565b60405190815260200160405180910390a36040516370a0823160e01b81523060048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063a9059cbb907f00000000000000000000000000000000000000000000000000000000000000009083906370a0823190602401602060405180830381865afa158015610e2a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e4e9190611c2c565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015610e99573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ebd9190611c45565b507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636a627842610f056002546001600160a01b036101009091041690565b6040516001600160e01b031960e084901b1681526001600160a01b0390911660048201526024016020604051808303816000875af1158015610f4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f6f9190611c2c565b50600e805461ff001916610100179055600554610f8c9042611a96565b600655600c54610f9c9042611a96565b600d555050505050565b60606001805461065a90611a33565b3360009081526012602090815260408083206001600160a01b0386168452909152812054808310611009573360009081526012602090815260408083206001600160a01b0388168452909152812055611038565b6110138382611a83565b3360009081526012602090815260408083206001600160a01b03891684529091529020555b3360008181526012602090815260408083206001600160a01b0389168085529083529281902054815190815290519293927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a35060019392505050565b6000826001600160a01b0381166110b457600080fd5b6110bf338585611395565b5060019392505050565b60025461010090046001600160a01b031633146110f85760405162461bcd60e51b81526004016107d590611aa9565b60065442101561114a5760405162461bcd60e51b815260206004820181905260248201527f4d757374207761697420666f7220636f6f6c646f776e20746f2066696e69736860448201526064016107d5565b600c546111579042611a96565b600d5560006111857f000000000000000000000000000000000000000000000000000000000000000061097d565b90506000612710600a548361119a9190611acc565b6111a49190611af9565b905080156112b5576000601054826111bc9190611acc565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016600090815260116020526040812080549293508392909190611209908490611a83565b909155505061dead600090815260116020527f97847ee99463795296047093514439c3127772df3715e628aa85601cf8541716805483929061124c908490611a96565b909155505060405182815261dead906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505b60007f00000000000000000000000000000000000000000000000000000000000000009050806001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561131557600080fd5b505af1158015611329573d6000803e3d6000fd5b50506040518492507f1685c550ad58388ebb3da9b30d9eec840c8645b16dc2005eee26e1c189eb2a829150600090a2505050565b60025461010090046001600160a01b0316331461138c5760405162461bcd60e51b81526004016107d590611aa9565b610956816117a4565b600e5460ff1615611506577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b0316148061141157507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316145b15611468576008548111156114685760405162461bcd60e51b815260206004820152601f60248201527f4d6178205472616e73616374696f6e20416d6f756e742045786365656465640060448201526064016107d5565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161461150657600954816114ae8461097d565b6114b89190611a96565b11156115065760405162461bcd60e51b815260206004820152601a60248201527f4d61782057616c6c657420416d6f756e7420457863656564656400000000000060448201526064016107d5565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316036115735760075460ff16801561155357506006544210155b1561156257611560611641565b505b60065442106115735761157361114a565b6000601054826115839190611acc565b6001600160a01b0385166000908152601160205260409020549091506115aa908290611a83565b6001600160a01b0380861660009081526011602052604080822093909355908516815220546115da908290611a96565b6001600160a01b03808516600081815260116020526040902092909255601054908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9061162a9085611af9565b60405190815260200160405180910390a350505050565b6000804290506000600454600354600f5461165c9190611acc565b6116669190611af9565b90506005546006600082825461167c9190611a96565b909155505060008190036116d057817f5e5cbad37ad18afa5c7996238fadfdb52098750278bd00aac82ab54a4a49cb36600f546040516116be91815260200190565b60405180910390a2600f549250505090565b80600f546116de9190611a83565b600f556116ed6012600a611bf1565b6116f8906015611acc565b600f5410156117265761170d6012600a611bf1565b611718906015611acc565b600f556007805460ff191690555b600f546117356012600a611bf1565b611743906301406f40611acc565b61174f90600019611c67565b61175b90600019611a83565b6117659190611af9565b60105561177061181e565b817f5e5cbad37ad18afa5c7996238fadfdb52098750278bd00aac82ab54a4a49cb36600f546040516116be91815260200190565b6001600160a01b0381166117b757600080fd5b6002546040516001600160a01b0380841692610100900416907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600280546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b60007f00000000000000000000000000000000000000000000000000000000000000009050806001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561187e57600080fd5b505af1158015611892573d6000803e3d6000fd5b5050505050565b600060208083528351808285015260005b818110156118c6578581018301518582016040015282016118aa565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b03811681146118fe57600080fd5b919050565b6000806040838503121561191657600080fd5b61191f836118e7565b946020939093013593505050565b60008060006060848603121561194257600080fd5b61194b846118e7565b9250611959602085016118e7565b9150604084013590509250925092565b60006020828403121561197b57600080fd5b611984826118e7565b9392505050565b6000806020838503121561199e57600080fd5b823567ffffffffffffffff808211156119b657600080fd5b818501915085601f8301126119ca57600080fd5b8135818111156119d957600080fd5b8660208260051b85010111156119ee57600080fd5b60209290920196919550909350505050565b60008060408385031215611a1357600080fd5b611a1c836118e7565b9150611a2a602084016118e7565b90509250929050565b600181811c90821680611a4757607f821691505b602082108103611a6757634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561074057610740611a6d565b8082018082111561074057610740611a6d565b6020808252600990820152682737ba1037bbb732b960b91b604082015260600190565b808202811582820484141761074057610740611a6d565b634e487b7160e01b600052601260045260246000fd5b600082611b0857611b08611ae3565b500490565b600181815b80851115611b48578160001904821115611b2e57611b2e611a6d565b80851615611b3b57918102915b93841c9390800290611b12565b509250929050565b600082611b5f57506001610740565b81611b6c57506000610740565b8160018114611b825760028114611b8c57611ba8565b6001915050610740565b60ff841115611b9d57611b9d611a6d565b50506001821b610740565b5060208310610133831016604e8410600b8410161715611bcb575081810a610740565b611bd58383611b0d565b8060001904821115611be957611be9611a6d565b029392505050565b60006119848383611b50565b634e487b7160e01b600052603260045260246000fd5b600060018201611c2557611c25611a6d565b5060010190565b600060208284031215611c3e57600080fd5b5051919050565b600060208284031215611c5757600080fd5b8151801515811461198457600080fd5b600082611c7657611c76611ae3565b50069056fea2646970667358221220f90f7e258f74fc0e76e452eaec74e94b99ddc3fb54f58f9738db819b7b274de764736f6c63430008130033

Deployed Bytecode

0x6080604052600436106102045760003560e01c80637dc7278f11610118578063af8deddb116100a0578063dd62ed3e1161006f578063dd62ed3e14610586578063e9500015146105cc578063f2fde38b146105e1578063f887ea4014610601578063f8b45b051461063557600080fd5b8063af8deddb14610525578063bd334d8114610544578063c3083bf81461055a578063cf46f24c1461057057600080fd5b806395d89b41116100e757806395d89b4114610482578063a457c2d714610497578063a58c9382146104b7578063a8aa1b31146104d1578063a9059cbb1461050557600080fd5b80637dc7278f1461041c57806381285a0e146104325780638a9e98c41461044c5780638da5cb5b1461045f57600080fd5b80633fc8cef31161019b5780636519b5a91161016a5780636519b5a9146103a557806370a08231146103bb578063715018a6146103db57806374fd41a5146103f05780637af2c4221461040657600080fd5b80633fc8cef31461031357806344b0c73f1461035f5780634a62bb65146103765780635e7dd5361461039057600080fd5b806321395349116101d7578063213953491461029957806323b872dd146102b1578063313ce567146102d157806339509351146102f357600080fd5b806306fdde0314610209578063095ea7b31461023457806318160ddd1461026457806318d954ef14610283575b600080fd5b34801561021557600080fd5b5061021e61064b565b60405161022b9190611899565b60405180910390f35b34801561024057600080fd5b5061025461024f366004611903565b6106dd565b604051901515815260200161022b565b34801561027057600080fd5b50600f545b60405190815260200161022b565b34801561028f57600080fd5b50610275600c5481565b3480156102a557600080fd5b50600654421015610254565b3480156102bd57600080fd5b506102546102cc36600461192d565b610746565b3480156102dd57600080fd5b5060025460405160ff909116815260200161022b565b3480156102ff57600080fd5b5061025461030e366004611903565b610847565b34801561031f57600080fd5b506103477f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281565b6040516001600160a01b03909116815260200161022b565b34801561036b57600080fd5b506103746108cd565b005b34801561038257600080fd5b50600e546102549060ff1681565b34801561039c57600080fd5b50610275610959565b3480156103b157600080fd5b5061027560035481565b3480156103c757600080fd5b506102756103d6366004611969565b61097d565b3480156103e757600080fd5b506103746109a4565b3480156103fc57600080fd5b5061027560045481565b34801561041257600080fd5b5061027560065481565b34801561042857600080fd5b50610275600a5481565b34801561043e57600080fd5b506007546102549060ff1681565b61037461045a36600461198b565b610a22565b34801561046b57600080fd5b5060025461010090046001600160a01b0316610347565b34801561048e57600080fd5b5061021e610fa6565b3480156104a357600080fd5b506102546104b2366004611903565b610fb5565b3480156104c357600080fd5b50600b546102549060ff1681565b3480156104dd57600080fd5b506103477f0000000000000000000000005b431e0f7fe1a38b040712bf5d47922a50f43ebd81565b34801561051157600080fd5b50610254610520366004611903565b61109e565b34801561053157600080fd5b50600e5461025490610100900460ff1681565b34801561055057600080fd5b5061027560055481565b34801561056657600080fd5b50610275600d5481565b34801561057c57600080fd5b5061027560085481565b34801561059257600080fd5b506102756105a1366004611a00565b6001600160a01b03918216600090815260126020908152604080832093909416825291909152205490565b3480156105d857600080fd5b506103746110c9565b3480156105ed57600080fd5b506103746105fc366004611969565b61135d565b34801561060d57600080fd5b506103477f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b34801561064157600080fd5b5061027560095481565b60606000805461065a90611a33565b80601f016020809104026020016040519081016040528092919081815260200182805461068690611a33565b80156106d35780601f106106a8576101008083540402835291602001916106d3565b820191906000526020600020905b8154815290600101906020018083116106b657829003601f168201915b5050505050905090565b3360008181526012602090815260408083206001600160a01b03871680855290835281842086905590518581529293909290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a35060015b92915050565b6000826001600160a01b03811661075c57600080fd5b6001600160a01b03851660009081526012602090815260408083203384529091529020548311156107de5760405162461bcd60e51b815260206004820152602160248201527f5472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636044820152606560f81b60648201526084015b60405180910390fd5b6001600160a01b038516600090815260126020908152604080832033845290915290205461080d908490611a83565b6001600160a01b038616600090815260126020908152604080832033845290915290205561083c858585611395565b506001949350505050565b3360009081526012602090815260408083206001600160a01b0386168452909152812054610876908390611a96565b3360008181526012602090815260408083206001600160a01b038916808552908352928190208590555193845290927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259101610734565b60025461010090046001600160a01b031633146108fc5760405162461bcd60e51b81526004016107d590611aa9565b60065442101561094e5760405162461bcd60e51b815260206004820152601d60248201527f4e6f74207965742074696d6520666f7220626c6f636b2072657761726400000060448201526064016107d5565b610956611641565b50565b6000600454600354600f5461096e9190611acc565b6109789190611af9565b905090565b6010546001600160a01b038216600090815260116020526040812054909161074091611af9565b60025461010090046001600160a01b031633146109d35760405162461bcd60e51b81526004016107d590611aa9565b6002546040516101009091046001600160a01b0316907ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482090600090a260028054610100600160a81b0319169055565b60025461010090046001600160a01b03163314610a515760405162461bcd60e51b81526004016107d590611aa9565b600e54610100900460ff1615610a9c5760405162461bcd60e51b815260206004820152601060248201526f131408185b1c9958591e48185919195960821b60448201526064016107d5565b600047118015610ab457506000610ab23061097d565b115b610abd57600080fd5b60006103e8610ace6012600a611bf1565b610adc906301406f40611acc565b610ae7906003611acc565b610af19190611af9565b610afb9083611acc565b905060006010546103e86012600a610b139190611bf1565b610b21906301406f40611acc565b610b2c906003611acc565b610b369190611af9565b610b409190611acc565b905081610b4c3061097d565b1015610ba55760405162461bcd60e51b815260206004820152602260248201527f496e73756666696369656e742062616c616e636520746f206469737472696275604482015261746560f01b60648201526084016107d5565b60005b83811015610c23578160116000878785818110610bc757610bc7611bfd565b9050602002016020810190610bdc9190611969565b6001600160a01b03166001600160a01b031681526020019081526020016000206000828254610c0b9190611a96565b90915550819050610c1b81611c13565b915050610ba8565b507f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b031663d0e30db0476040518263ffffffff1660e01b81526004016000604051808303818588803b158015610c7f57600080fd5b505af1158015610c93573d6000803e3d6000fd5b5050505050600060105483610ca89190611acc565b30600090815260116020526040902054610cc29190611a83565b6001600160a01b037f0000000000000000000000005b431e0f7fe1a38b040712bf5d47922a50f43ebd16600090815260116020526040812080549293508392909190610d0f908490611a96565b9091555050306000818152601160205260408082208290556010547f0000000000000000000000005b431e0f7fe1a38b040712bf5d47922a50f43ebd6001600160a01b031680845291909220549092917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91610d8b9190611af9565b60405190815260200160405180910390a36040516370a0823160e01b81523060048201527f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b03169063a9059cbb907f0000000000000000000000005b431e0f7fe1a38b040712bf5d47922a50f43ebd9083906370a0823190602401602060405180830381865afa158015610e2a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e4e9190611c2c565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015610e99573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ebd9190611c45565b507f0000000000000000000000005b431e0f7fe1a38b040712bf5d47922a50f43ebd6001600160a01b0316636a627842610f056002546001600160a01b036101009091041690565b6040516001600160e01b031960e084901b1681526001600160a01b0390911660048201526024016020604051808303816000875af1158015610f4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f6f9190611c2c565b50600e805461ff001916610100179055600554610f8c9042611a96565b600655600c54610f9c9042611a96565b600d555050505050565b60606001805461065a90611a33565b3360009081526012602090815260408083206001600160a01b0386168452909152812054808310611009573360009081526012602090815260408083206001600160a01b0388168452909152812055611038565b6110138382611a83565b3360009081526012602090815260408083206001600160a01b03891684529091529020555b3360008181526012602090815260408083206001600160a01b0389168085529083529281902054815190815290519293927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a35060019392505050565b6000826001600160a01b0381166110b457600080fd5b6110bf338585611395565b5060019392505050565b60025461010090046001600160a01b031633146110f85760405162461bcd60e51b81526004016107d590611aa9565b60065442101561114a5760405162461bcd60e51b815260206004820181905260248201527f4d757374207761697420666f7220636f6f6c646f776e20746f2066696e69736860448201526064016107d5565b600c546111579042611a96565b600d5560006111857f0000000000000000000000005b431e0f7fe1a38b040712bf5d47922a50f43ebd61097d565b90506000612710600a548361119a9190611acc565b6111a49190611af9565b905080156112b5576000601054826111bc9190611acc565b6001600160a01b037f0000000000000000000000005b431e0f7fe1a38b040712bf5d47922a50f43ebd16600090815260116020526040812080549293508392909190611209908490611a83565b909155505061dead600090815260116020527f97847ee99463795296047093514439c3127772df3715e628aa85601cf8541716805483929061124c908490611a96565b909155505060405182815261dead906001600160a01b037f0000000000000000000000005b431e0f7fe1a38b040712bf5d47922a50f43ebd16907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505b60007f0000000000000000000000005b431e0f7fe1a38b040712bf5d47922a50f43ebd9050806001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561131557600080fd5b505af1158015611329573d6000803e3d6000fd5b50506040518492507f1685c550ad58388ebb3da9b30d9eec840c8645b16dc2005eee26e1c189eb2a829150600090a2505050565b60025461010090046001600160a01b0316331461138c5760405162461bcd60e51b81526004016107d590611aa9565b610956816117a4565b600e5460ff1615611506577f0000000000000000000000005b431e0f7fe1a38b040712bf5d47922a50f43ebd6001600160a01b0316836001600160a01b0316148061141157507f0000000000000000000000005b431e0f7fe1a38b040712bf5d47922a50f43ebd6001600160a01b0316826001600160a01b0316145b15611468576008548111156114685760405162461bcd60e51b815260206004820152601f60248201527f4d6178205472616e73616374696f6e20416d6f756e742045786365656465640060448201526064016107d5565b7f0000000000000000000000005b431e0f7fe1a38b040712bf5d47922a50f43ebd6001600160a01b0316826001600160a01b03161461150657600954816114ae8461097d565b6114b89190611a96565b11156115065760405162461bcd60e51b815260206004820152601a60248201527f4d61782057616c6c657420416d6f756e7420457863656564656400000000000060448201526064016107d5565b7f0000000000000000000000005b431e0f7fe1a38b040712bf5d47922a50f43ebd6001600160a01b0316826001600160a01b0316036115735760075460ff16801561155357506006544210155b1561156257611560611641565b505b60065442106115735761157361114a565b6000601054826115839190611acc565b6001600160a01b0385166000908152601160205260409020549091506115aa908290611a83565b6001600160a01b0380861660009081526011602052604080822093909355908516815220546115da908290611a96565b6001600160a01b03808516600081815260116020526040902092909255601054908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9061162a9085611af9565b60405190815260200160405180910390a350505050565b6000804290506000600454600354600f5461165c9190611acc565b6116669190611af9565b90506005546006600082825461167c9190611a96565b909155505060008190036116d057817f5e5cbad37ad18afa5c7996238fadfdb52098750278bd00aac82ab54a4a49cb36600f546040516116be91815260200190565b60405180910390a2600f549250505090565b80600f546116de9190611a83565b600f556116ed6012600a611bf1565b6116f8906015611acc565b600f5410156117265761170d6012600a611bf1565b611718906015611acc565b600f556007805460ff191690555b600f546117356012600a611bf1565b611743906301406f40611acc565b61174f90600019611c67565b61175b90600019611a83565b6117659190611af9565b60105561177061181e565b817f5e5cbad37ad18afa5c7996238fadfdb52098750278bd00aac82ab54a4a49cb36600f546040516116be91815260200190565b6001600160a01b0381166117b757600080fd5b6002546040516001600160a01b0380841692610100900416907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600280546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b60007f0000000000000000000000005b431e0f7fe1a38b040712bf5d47922a50f43ebd9050806001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561187e57600080fd5b505af1158015611892573d6000803e3d6000fd5b5050505050565b600060208083528351808285015260005b818110156118c6578581018301518582016040015282016118aa565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b03811681146118fe57600080fd5b919050565b6000806040838503121561191657600080fd5b61191f836118e7565b946020939093013593505050565b60008060006060848603121561194257600080fd5b61194b846118e7565b9250611959602085016118e7565b9150604084013590509250925092565b60006020828403121561197b57600080fd5b611984826118e7565b9392505050565b6000806020838503121561199e57600080fd5b823567ffffffffffffffff808211156119b657600080fd5b818501915085601f8301126119ca57600080fd5b8135818111156119d957600080fd5b8660208260051b85010111156119ee57600080fd5b60209290920196919550909350505050565b60008060408385031215611a1357600080fd5b611a1c836118e7565b9150611a2a602084016118e7565b90509250929050565b600181811c90821680611a4757607f821691505b602082108103611a6757634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561074057610740611a6d565b8082018082111561074057610740611a6d565b6020808252600990820152682737ba1037bbb732b960b91b604082015260600190565b808202811582820484141761074057610740611a6d565b634e487b7160e01b600052601260045260246000fd5b600082611b0857611b08611ae3565b500490565b600181815b80851115611b48578160001904821115611b2e57611b2e611a6d565b80851615611b3b57918102915b93841c9390800290611b12565b509250929050565b600082611b5f57506001610740565b81611b6c57506000610740565b8160018114611b825760028114611b8c57611ba8565b6001915050610740565b60ff841115611b9d57611b9d611a6d565b50506001821b610740565b5060208310610133831016604e8410600b8410161715611bcb575081810a610740565b611bd58383611b0d565b8060001904821115611be957611be9611a6d565b029392505050565b60006119848383611b50565b634e487b7160e01b600052603260045260246000fd5b600060018201611c2557611c25611a6d565b5060010190565b600060208284031215611c3e57600080fd5b5051919050565b600060208284031215611c5757600080fd5b8151801515811461198457600080fd5b600082611c7657611c76611ae3565b50069056fea2646970667358221220f90f7e258f74fc0e76e452eaec74e94b99ddc3fb54f58f9738db819b7b274de764736f6c63430008130033

Deployed Bytecode Sourcemap

4563:9791:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3021:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7829:219;;;;;;;;;;-1:-1:-1;7829:219:0;;;;;:::i;:::-;;:::i;:::-;;;1169:14:1;;1162:22;1144:41;;1132:2;1117:18;7829:219:0;1004:187:1;7219:102:0;;;;;;;;;;-1:-1:-1;7301:12:0;;7219:102;;;1342:25:1;;;1330:2;1315:18;7219:102:0;1196:177:1;5012:41:0;;;;;;;;;;;;;;;;10383:111;;;;;;;;;;-1:-1:-1;10452:15:0;;10471;-1:-1:-1;10452:34:0;10383:111;;8056:404;;;;;;;;;;-1:-1:-1;8056:404:0;;;;;:::i;:::-;;:::i;3207:83::-;;;;;;;;;;-1:-1:-1;3273:9:0;;3207:83;;3273:9;;;;1853:36:1;;1841:2;1826:18;3207:83:0;1711:184:1;9908:301:0;;;;;;;;;;-1:-1:-1;9908:301:0;;;;;:::i;:::-;;:::i;5545:27::-;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2077:32:1;;;2059:51;;2047:2;2032:18;5545:27:0;1900:216:1;11339:147:0;;;;;;;;;;;;;:::i;:::-;;5664:33;;;;;;;;;;-1:-1:-1;5664:33:0;;;;;;;;10217:158;;;;;;;;;;;;;:::i;4615:47::-;;;;;;;;;;;;;;;;7485:131;;;;;;;;;;-1:-1:-1;7485:131:0;;;;;:::i;:::-;;:::i;4052:126::-;;;;;;;;;;;;;:::i;4669:52::-;;;;;;;;;;;;;;;;4781:30;;;;;;;;;;;;;;;;4928:37;;;;;;;;;;;;;;;;4818:34;;;;;;;;;;-1:-1:-1;4818:34:0;;;;;;;;13018:1331;;;;;;:::i;:::-;;:::i;3863:79::-;;;;;;;;;;-1:-1:-1;3928:6:0;;;;;-1:-1:-1;;;;;3928:6:0;3863:79;;3112:87;;;;;;;;;;;;;:::i;9419:481::-;;;;;;;;;;-1:-1:-1;9419:481:0;;;;;:::i;:::-;;:::i;4972:33::-;;;;;;;;;;-1:-1:-1;4972:33:0;;;;;;;;5622:29;;;;;;;;;;;;;;;7624:197;;;;;;;;;;-1:-1:-1;7624:197:0;;;;;:::i;:::-;;:::i;5704:27::-;;;;;;;;;;-1:-1:-1;5704:27:0;;;;;;;;;;;4730:44;;;;;;;;;;;;;;;;5060:26;;;;;;;;;;;;;;;;4861:27;;;;;;;;;;;;;;;;7329:148;;;;;;;;;;-1:-1:-1;7329:148:0;;;;;:::i;:::-;-1:-1:-1;;;;;7439:21:0;;;7413:7;7439:21;;;:13;:21;;;;;;;;:30;;;;;;;;;;;;;7329:148;12214:796;;;;;;;;;;;;;:::i;4186:109::-;;;;;;;;;;-1:-1:-1;4186:109:0;;;;;:::i;:::-;;:::i;5581:34::-;;;;;;;;;;;;;;;4895:24;;;;;;;;;;;;;;;;3021:83;3058:13;3091:5;3084:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3021:83;:::o;7829:219::-;7192:10;7903:4;7920:27;;;:13;:27;;;;;;;;-1:-1:-1;;;;;7920:36:0;;;;;;;;;;;:44;;;7980:38;;1342:25:1;;;7903:4:0;;7920:36;;7192:10;;7980:38;;1315:18:1;7980:38:0;;;;;;;;-1:-1:-1;8036:4:0;7829:219;;;;;:::o;8056:404::-;8180:4;8160:9;-1:-1:-1;;;;;6006:18:0;;5998:27;;;;;;-1:-1:-1;;;;;8215:21:0;::::1;;::::0;;;:13:::1;:21;::::0;;;;;;;7192:10;8215:35;;;;;;;;8205:45;::::1;;8197:91;;;::::0;-1:-1:-1;;;8197:91:0;;4218:2:1;8197:91:0::1;::::0;::::1;4200:21:1::0;4257:2;4237:18;;;4230:30;4296:34;4276:18;;;4269:62;-1:-1:-1;;;4347:18:1;;;4340:31;4388:19;;8197:91:0::1;;;;;;;;;-1:-1:-1::0;;;;;8337:21:0;::::1;;::::0;;;:13:::1;:21;::::0;;;;;;;7192:10;8337:35;;;;;;;;:42:::1;::::0;8373:6;;8337:42:::1;:::i;:::-;-1:-1:-1::0;;;;;8299:21:0;::::1;;::::0;;;:13:::1;:21;::::0;;;;;;;7192:10;8299:35;;;;;;;:80;8390:40:::1;8299:21:::0;8412:9;8423:6;8390:13:::1;:40::i;:::-;-1:-1:-1::0;8448:4:0::1;::::0;8056:404;-1:-1:-1;;;;8056:404:0:o;9908:301::-;7192:10;9990:4;10045:27;;;:13;:27;;;;;;;;-1:-1:-1;;;;;10045:36:0;;;;;;;;;;:49;;10084:10;;10045:49;:::i;:::-;7192:10;10006:27;;;;:13;:27;;;;;;;;-1:-1:-1;;;;;10006:36:0;;;;;;;;;;;;:88;;;10110:69;1342:25:1;;;10006:36:0;;10110:69;;1315:18:1;10110:69:0;1196:177:1;11339:147:0;4004:6;;;;;-1:-1:-1;;;;;4004:6:0;3990:10;:20;3982:42;;;;-1:-1:-1;;;3982:42:0;;;;;;;:::i;:::-;10452:15;;10471;-1:-1:-1;10452:34:0;11398:56:::1;;;::::0;-1:-1:-1;;;11398:56:0;;5352:2:1;11398:56:0::1;::::0;::::1;5334:21:1::0;5391:2;5371:18;;;5364:30;5430:31;5410:18;;;5403:59;5479:18;;11398:56:0::1;5150:353:1::0;11398:56:0::1;11465:13;:11;:13::i;:::-;;11339:147::o:0;10217:158::-;10283:7;10345:22;;10323:20;;10310:12;;:33;;;;:::i;:::-;10309:58;;;;:::i;:::-;10302:65;;10217:158;:::o;7485:131::-;7594:13;;-1:-1:-1;;;;;7574:18:0;;7547:7;7574:18;;;:13;:18;;;;;;7547:7;;7574:34;;;:::i;4052:126::-;4004:6;;;;;-1:-1:-1;;;;;4004:6:0;3990:10;:20;3982:42;;;;-1:-1:-1;;;3982:42:0;;;;;;;:::i;:::-;4133:6:::1;::::0;4114:26:::1;::::0;4133:6:::1;::::0;;::::1;-1:-1:-1::0;;;;;4133:6:0::1;::::0;4114:26:::1;::::0;;;::::1;4151:6;:19:::0;;-1:-1:-1;;;;;;4151:19:0::1;::::0;;4052:126::o;13018:1331::-;4004:6;;;;;-1:-1:-1;;;;;4004:6:0;3990:10;:20;3982:42;;;;-1:-1:-1;;;3982:42:0;;;;;;;:::i;:::-;13111:7:::1;::::0;::::1;::::0;::::1;;;13110:8;13102:37;;;::::0;-1:-1:-1;;;13102:37:0;;6140:2:1;13102:37:0::1;::::0;::::1;6122:21:1::0;6179:2;6159:18;;;6152:30;-1:-1:-1;;;6198:18:1;;;6191:46;6254:18;;13102:37:0::1;5938:340:1::0;13102:37:0::1;13182:1;13158:21;:25;:57;;;;;13214:1;13187:24;13205:4;13187:9;:24::i;:::-;:28;13158:57;13150:66;;;::::0;::::1;;13229:25;13299:4;5201:12;5131:2;5201;:12;:::i;:::-;5188:25;::::0;:10:::1;:25;:::i;:::-;13272:24;::::0;13295:1:::1;13272:24;:::i;:::-;:31;;;;:::i;:::-;13258:46;::::0;:3;:46:::1;:::i;:::-;13229:76;;13316:20;13373:13;;13366:4;5131:2;5201;:12;;;;:::i;:::-;5188:25;::::0;:10:::1;:25;:::i;:::-;13339:24;::::0;13362:1:::1;13339:24;:::i;:::-;:31;;;;:::i;:::-;:47;;;;:::i;:::-;13316:70;;13435:17;13407:24;13425:4;13407:9;:24::i;:::-;:45;;13399:92;;;::::0;-1:-1:-1;;;13399:92:0;;7859:2:1;13399:92:0::1;::::0;::::1;7841:21:1::0;7898:2;7878:18;;;7871:30;7937:34;7917:18;;;7910:62;-1:-1:-1;;;7988:18:1;;;7981:32;8030:19;;13399:92:0::1;7657:398:1::0;13399:92:0::1;13509:9;13504:107;13524:14:::0;;::::1;13504:107;;;13586:12;13560:13;:21;13574:3;;13578:1;13574:6;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;13560:21:0::1;-1:-1:-1::0;;;;;13560:21:0::1;;;;;;;;;;;;;:39;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;13540:3:0;;-1:-1:-1;13540:3:0::1;::::0;::::1;:::i;:::-;;;;13504:107;;;;13623:4;-1:-1:-1::0;;;;;13623:12:0::1;;13643:21;13623:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;13680:14;13750:13;;13730:17;:33;;;;:::i;:::-;13720:4;13698:28;::::0;;;:13:::1;:28;::::0;;;;;:66:::1;::::0;;::::1;:::i;:::-;-1:-1:-1::0;;;;;13790:4:0::1;13776:19;;::::0;;;:13:::1;:19;::::0;;;;:32;;13680:85;;-1:-1:-1;13680:85:0;;13776:19;;;:32:::1;::::0;13680:85;;13776:32:::1;:::i;:::-;::::0;;;-1:-1:-1;;13841:4:0::1;13850:1;13819:28:::0;;;:13:::1;:28;::::0;;;;;:32;;;13919:13:::1;::::0;13891:4:::1;-1:-1:-1::0;;;;;13867:66:0::1;13897:19:::0;;;;;;;;13867:66;;13841:4;13867:66:::1;::::0;13897:35:::1;::::0;13919:13;13897:35:::1;:::i;:::-;13867:66;::::0;1342:25:1;;;1330:2;1315:18;13867:66:0::1;;;;;;;13992:46;::::0;-1:-1:-1;;;13992:46:0;;14032:4:::1;13992:46;::::0;::::1;2059:51:1::0;13961:4:0::1;-1:-1:-1::0;;;;;13946:30:0::1;::::0;::::1;::::0;13985:4:::1;::::0;13946:30;;13992:31:::1;::::0;2032:18:1;;13992:46:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13946:93;::::0;-1:-1:-1;;;;;;13946:93:0::1;::::0;;;;;;-1:-1:-1;;;;;8713:32:1;;;13946:93:0::1;::::0;::::1;8695:51:1::0;8762:18;;;8755:34;8668:18;;13946:93:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;14064:4;-1:-1:-1::0;;;;;14052:22:0::1;;14075:7;3928:6:::0;;-1:-1:-1;;;;;3928:6:0;;;;;;3863:79;14075:7:::1;14052:31;::::0;-1:-1:-1;;;;;;14052:31:0::1;::::0;;;;;;-1:-1:-1;;;;;2077:32:1;;;14052:31:0::1;::::0;::::1;2059:51:1::0;2032:18;;14052:31:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;14094:7:0::1;:14:::0;;-1:-1:-1;;14094:14:0::1;;;::::0;;14157:19:::1;::::0;14139:37:::1;::::0;:15:::1;:37;:::i;:::-;14121:15;:55:::0;14219:16:::1;::::0;14201:34:::1;::::0;:15:::1;:34;:::i;:::-;14187:11;:48:::0;-1:-1:-1;;;;;13018:1331:0:o;3112:87::-;3151:13;3184:7;3177:14;;;;;:::i;9419:481::-;7192:10;9506:4;9541:27;;;:13;:27;;;;;;;;-1:-1:-1;;;;;9541:36:0;;;;;;;;;;9592:27;;;9588:198;;7192:10;9675:1;9636:27;;;:13;:27;;;;;;;;-1:-1:-1;;;;;9636:36:0;;;;;;;;;:40;9588:198;;;9748:26;9759:15;9748:8;:26;:::i;:::-;7192:10;9709:27;;;;:13;:27;;;;;;;;-1:-1:-1;;;;;9709:36:0;;;;;;;;;:65;9588:198;7192:10;9833:27;;;;:13;:27;;;;;;;;-1:-1:-1;;;;;9801:69:0;;9833:36;;;;;;;;;;;9801:69;;1342:25:1;;;9801:69:0;;;;7192:10;9801:69;;;;;;;;;;;-1:-1:-1;9888:4:0;;9419:481;-1:-1:-1;;;9419:481:0:o;7624:197::-;7728:4;7708:9;-1:-1:-1;;;;;6006:18:0;;5998:27;;;;;;7745:46:::1;7192:10:::0;7773:9:::1;7784:6;7745:13;:46::i;:::-;-1:-1:-1::0;7809:4:0::1;::::0;7624:197;-1:-1:-1;;;7624:197:0:o;12214:796::-;4004:6;;;;;-1:-1:-1;;;;;4004:6:0;3990:10;:20;3982:42;;;;-1:-1:-1;;;3982:42:0;;;;;;;:::i;:::-;10452:15;;10471;-1:-1:-1;10452:34:0;12269:59:::1;;;::::0;-1:-1:-1;;;12269:59:0;;9284:2:1;12269:59:0::1;::::0;::::1;9266:21:1::0;;;9303:18;;;9296:30;9362:34;9342:18;;;9335:62;9414:18;;12269:59:0::1;9082:356:1::0;12269:59:0::1;12373:16;::::0;12355:34:::1;::::0;:15:::1;:34;:::i;:::-;12341:11;:48:::0;12402:28:::1;12433:15;12443:4;12433:9;:15::i;:::-;12402:46;;12461:26;12533:5;12513:17;;12490:20;:40;;;;:::i;:::-;:48;;;;:::i;:::-;12461:77:::0;-1:-1:-1;12555:22:0;;12551:324:::1;;12594:30;12648:13;;12627:18;:34;;;;:::i;:::-;-1:-1:-1::0;;;;;12690:4:0::1;12676:19;;::::0;;;:13:::1;:19;::::0;;;;:45;;12594:67;;-1:-1:-1;12594:67:0;;12676:19;;;:45:::1;::::0;12594:67;;12676:45:::1;:::i;:::-;::::0;;;-1:-1:-1;;12758:6:0::1;12736:30;::::0;;;:13:::1;:30;::::0;;:56;;12770:22;;12736:30;:56:::1;::::0;12770:22;;12736:56:::1;:::i;:::-;::::0;;;-1:-1:-1;;12812:51:0::1;::::0;1342:25:1;;;12835:6:0::1;::::0;-1:-1:-1;;;;;12821:4:0::1;12812:51;::::0;::::1;::::0;1330:2:1;1315:18;12812:51:0::1;;;;;;;12579:296;12551:324;12887:17;12919:4;12887:37;;12935:5;-1:-1:-1::0;;;;;12935:10:0::1;;:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;12963:39:0::1;::::0;12983:18;;-1:-1:-1;12963:39:0::1;::::0;-1:-1:-1;12963:39:0;;::::1;12258:752;;;12214:796::o:0;4186:109::-;4004:6;;;;;-1:-1:-1;;;;;4004:6:0;3990:10;:20;3982:42;;;;-1:-1:-1;;;3982:42:0;;;;;;;:::i;:::-;4259:28:::1;4278:8;4259:18;:28::i;8468:939::-:0;8565:14;;;;8562:337;;;8609:4;-1:-1:-1;;;;;8599:14:0;:6;-1:-1:-1;;;;;8599:14:0;;:35;;;;8630:4;-1:-1:-1;;;;;8617:17:0;:9;-1:-1:-1;;;;;8617:17:0;;8599:35;8595:141;;;8672:12;;8662:6;:22;;8654:66;;;;-1:-1:-1;;;8654:66:0;;9645:2:1;8654:66:0;;;9627:21:1;9684:2;9664:18;;;9657:30;9723:33;9703:18;;;9696:61;9774:18;;8654:66:0;9443:355:1;8654:66:0;8767:4;-1:-1:-1;;;;;8754:17:0;:9;-1:-1:-1;;;;;8754:17:0;;8750:138;;8832:9;;8822:6;8799:20;8809:9;8799;:20::i;:::-;:29;;;;:::i;:::-;:42;;8791:81;;;;-1:-1:-1;;;8791:81:0;;10005:2:1;8791:81:0;;;9987:21:1;10044:2;10024:18;;;10017:30;10083:28;10063:18;;;10056:56;10129:18;;8791:81:0;9803:350:1;8791:81:0;8927:4;-1:-1:-1;;;;;8914:17:0;:9;-1:-1:-1;;;;;8914:17:0;;8911:214;;8950:15;;;;:33;;;;-1:-1:-1;10452:15:0;;10471;-1:-1:-1;10452:34:0;8969:14;8947:85;;;9003:13;:11;:13::i;:::-;;8947:85;10452:15;;10471;-1:-1:-1;9046:68:0;;9085:13;:11;:13::i;:::-;9137:18;9166:13;;9158:6;:22;;;;:::i;:::-;-1:-1:-1;;;;;9217:21:0;;;;;;:13;:21;;;;;;9137:43;;-1:-1:-1;9217:34:0;;9137:43;;9217:34;:::i;:::-;-1:-1:-1;;;;;9193:21:0;;;;;;;:13;:21;;;;;;:58;;;;9289:24;;;;;;;:37;;9315:10;;9289:37;:::i;:::-;-1:-1:-1;;;;;9262:24:0;;;;;;;:13;:24;;;;;:64;;;;9384:13;;9344:55;;;;;;9372:26;;:10;:26;:::i;:::-;9344:55;;1342:25:1;;;1330:2;1315:18;9344:55:0;;;;;;;8551:856;8468:939;;;:::o;10616:715::-;10656:7;10676:12;10691:15;10676:30;;10719:19;10777:22;;10755:20;;10742:12;;:33;;;;:::i;:::-;10741:58;;;;:::i;:::-;10719:80;;10831:19;;10812:15;;:38;;;;;;;:::i;:::-;;;;-1:-1:-1;;10882:1:0;10867:16;;;10863:119;;10917:4;10905:31;10923:12;;10905:31;;;;1342:25:1;;1330:2;1315:18;;1196:177;10905:31:0;;;;;;;;10958:12;;10951:19;;;;10616:715;:::o;10863:119::-;11024:11;11009:12;;:26;;;;:::i;:::-;10994:12;:41;5371:12;5131:2;5371;:12;:::i;:::-;5366:17;;:2;:17;:::i;:::-;11052:12;;:25;11048:121;;;5371:12;5131:2;5371;:12;:::i;:::-;5366:17;;:2;:17;:::i;:::-;11094:12;:25;11134:15;:23;;-1:-1:-1;;11134:23:0;;;11048:121;11211:12;;5201;5131:2;5201;:12;:::i;:::-;5188:25;;:10;:25;:::i;:::-;5280:40;;-1:-1:-1;;5280:40:0;:::i;:::-;5259:62;;-1:-1:-1;;5259:62:0;:::i;:::-;11197:26;;;;:::i;:::-;11181:13;:42;11236:8;:6;:8::i;:::-;11274:4;11262:31;11280:12;;11262:31;;;;1342:25:1;;1330:2;1315:18;;1196:177;4303:187:0;-1:-1:-1;;;;;4377:22:0;;4369:31;;;;;;4437:6;;4416:38;;-1:-1:-1;;;;;4416:38:0;;;;4437:6;;;;;4416:38;;;;;4465:6;:17;;-1:-1:-1;;;;;4465:17:0;;;;;-1:-1:-1;;;;;;4465:17:0;;;;;;;;;4303:187::o;10502:106::-;10540:17;10572:4;10540:37;;10588:5;-1:-1:-1;;;;;10588:10:0;;:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10529:79;10502:106::o;14:548:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;567:173::-;635:20;;-1:-1:-1;;;;;684:31:1;;674:42;;664:70;;730:1;727;720:12;664:70;567:173;;;:::o;745:254::-;813:6;821;874:2;862:9;853:7;849:23;845:32;842:52;;;890:1;887;880:12;842:52;913:29;932:9;913:29;:::i;:::-;903:39;989:2;974:18;;;;961:32;;-1:-1:-1;;;745:254:1:o;1378:328::-;1455:6;1463;1471;1524:2;1512:9;1503:7;1499:23;1495:32;1492:52;;;1540:1;1537;1530:12;1492:52;1563:29;1582:9;1563:29;:::i;:::-;1553:39;;1611:38;1645:2;1634:9;1630:18;1611:38;:::i;:::-;1601:48;;1696:2;1685:9;1681:18;1668:32;1658:42;;1378:328;;;;;:::o;2121:186::-;2180:6;2233:2;2221:9;2212:7;2208:23;2204:32;2201:52;;;2249:1;2246;2239:12;2201:52;2272:29;2291:9;2272:29;:::i;:::-;2262:39;2121:186;-1:-1:-1;;;2121:186:1:o;2312:615::-;2398:6;2406;2459:2;2447:9;2438:7;2434:23;2430:32;2427:52;;;2475:1;2472;2465:12;2427:52;2515:9;2502:23;2544:18;2585:2;2577:6;2574:14;2571:34;;;2601:1;2598;2591:12;2571:34;2639:6;2628:9;2624:22;2614:32;;2684:7;2677:4;2673:2;2669:13;2665:27;2655:55;;2706:1;2703;2696:12;2655:55;2746:2;2733:16;2772:2;2764:6;2761:14;2758:34;;;2788:1;2785;2778:12;2758:34;2841:7;2836:2;2826:6;2823:1;2819:14;2815:2;2811:23;2807:32;2804:45;2801:65;;;2862:1;2859;2852:12;2801:65;2893:2;2885:11;;;;;2915:6;;-1:-1:-1;2312:615:1;;-1:-1:-1;;;;2312:615:1:o;3140:260::-;3208:6;3216;3269:2;3257:9;3248:7;3244:23;3240:32;3237:52;;;3285:1;3282;3275:12;3237:52;3308:29;3327:9;3308:29;:::i;:::-;3298:39;;3356:38;3390:2;3379:9;3375:18;3356:38;:::i;:::-;3346:48;;3140:260;;;;;:::o;3631:380::-;3710:1;3706:12;;;;3753;;;3774:61;;3828:4;3820:6;3816:17;3806:27;;3774:61;3881:2;3873:6;3870:14;3850:18;3847:38;3844:161;;3927:10;3922:3;3918:20;3915:1;3908:31;3962:4;3959:1;3952:15;3990:4;3987:1;3980:15;3844:161;;3631:380;;;:::o;4418:127::-;4479:10;4474:3;4470:20;4467:1;4460:31;4510:4;4507:1;4500:15;4534:4;4531:1;4524:15;4550:128;4617:9;;;4638:11;;;4635:37;;;4652:18;;:::i;4683:125::-;4748:9;;;4769:10;;;4766:36;;;4782:18;;:::i;4813:332::-;5015:2;4997:21;;;5054:1;5034:18;;;5027:29;-1:-1:-1;;;5087:2:1;5072:18;;5065:39;5136:2;5121:18;;4813:332::o;5508:168::-;5581:9;;;5612;;5629:15;;;5623:22;;5609:37;5599:71;;5650:18;;:::i;5681:127::-;5742:10;5737:3;5733:20;5730:1;5723:31;5773:4;5770:1;5763:15;5797:4;5794:1;5787:15;5813:120;5853:1;5879;5869:35;;5884:18;;:::i;:::-;-1:-1:-1;5918:9:1;;5813:120::o;6283:422::-;6372:1;6415:5;6372:1;6429:270;6450:7;6440:8;6437:21;6429:270;;;6509:4;6505:1;6501:6;6497:17;6491:4;6488:27;6485:53;;;6518:18;;:::i;:::-;6568:7;6558:8;6554:22;6551:55;;;6588:16;;;;6551:55;6667:22;;;;6627:15;;;;6429:270;;;6433:3;6283:422;;;;;:::o;6710:806::-;6759:5;6789:8;6779:80;;-1:-1:-1;6830:1:1;6844:5;;6779:80;6878:4;6868:76;;-1:-1:-1;6915:1:1;6929:5;;6868:76;6960:4;6978:1;6973:59;;;;7046:1;7041:130;;;;6953:218;;6973:59;7003:1;6994:10;;7017:5;;;7041:130;7078:3;7068:8;7065:17;7062:43;;;7085:18;;:::i;:::-;-1:-1:-1;;7141:1:1;7127:16;;7156:5;;6953:218;;7255:2;7245:8;7242:16;7236:3;7230:4;7227:13;7223:36;7217:2;7207:8;7204:16;7199:2;7193:4;7190:12;7186:35;7183:77;7180:159;;;-1:-1:-1;7292:19:1;;;7324:5;;7180:159;7371:34;7396:8;7390:4;7371:34;:::i;:::-;7441:6;7437:1;7433:6;7429:19;7420:7;7417:32;7414:58;;;7452:18;;:::i;:::-;7490:20;;6710:806;-1:-1:-1;;;6710:806:1:o;7521:131::-;7581:5;7610:36;7637:8;7631:4;7610:36;:::i;8060:127::-;8121:10;8116:3;8112:20;8109:1;8102:31;8152:4;8149:1;8142:15;8176:4;8173:1;8166:15;8192:135;8231:3;8252:17;;;8249:43;;8272:18;;:::i;:::-;-1:-1:-1;8319:1:1;8308:13;;8192:135::o;8332:184::-;8402:6;8455:2;8443:9;8434:7;8430:23;8426:32;8423:52;;;8471:1;8468;8461:12;8423:52;-1:-1:-1;8494:16:1;;8332:184;-1:-1:-1;8332:184:1:o;8800:277::-;8867:6;8920:2;8908:9;8899:7;8895:23;8891:32;8888:52;;;8936:1;8933;8926:12;8888:52;8968:9;8962:16;9021:5;9014:13;9007:21;9000:5;8997:32;8987:60;;9043:1;9040;9033:12;10158:112;10190:1;10216;10206:35;;10221:18;;:::i;:::-;-1:-1:-1;10255:9:1;;10158:112::o

Swarm Source

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