ETH Price: $2,916.95 (-3.74%)
Gas: 1 Gwei

Token

Frens (FRENS)
 

Overview

Max Total Supply

1,000,000,000,000 FRENS

Holders

345

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
0xpercs.eth
Balance
0.555374109443371454 FRENS

Value
$0.00
0x1D67954D8D1AC3a6cff9DB96cBABBE2522067EA9
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:
FrensCoin

Compiler Version
v0.8.20+commit.a1b79de6

Optimization Enabled:
Yes with 69420 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;

abstract contract Ownable {
    address private _owner;

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

    constructor() {
        _transferOwnership(msg.sender);
    }

    modifier onlyOwner() {
        _checkOwner();
        _;
    }

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

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

    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    function _checkOwner() internal view virtual {
        require(owner() == msg.sender, "Ownable: caller is not the owner");
    }

    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

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

interface IERC20Metadata is IERC20 {
    function symbol() external view returns (string memory);
    function name() external view returns (string memory);
    function decimals() external view returns (uint8);
}

contract ERC20 is IERC20, IERC20Metadata {
    mapping(address => mapping(address => uint256)) private _allowances;
    mapping(address => uint256) private _balances;
    string private _name;
    string private _symbol;
    uint256 private _totalSupply;

    constructor(string memory name_, string memory symbol_) {
        _symbol = symbol_;
        _name = name_;
    }

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

    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

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

    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }

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

    function transfer(address to, uint256 amount) public virtual override returns (bool) {
        address owner = msg.sender;
        _transfer(owner, to, amount);
        return true;
    }

    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        address owner = msg.sender;
        _approve(owner, spender, amount);
        return true;
    }

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

    function transferFrom(address from, address to, uint256 amount) public virtual override returns (bool) {
        address spender = msg.sender;
        _spendAllowance(from, spender, amount);
        _transfer(from, to, amount);
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        address owner = msg.sender;
        uint256 currentAllowance = allowance(owner, spender);
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(owner, spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        address owner = msg.sender;
        _approve(owner, spender, allowance(owner, spender) + addedValue);
        return true;
    }

    function _transfer(address from, address to, uint256 amount) internal virtual {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        uint256 fromBalance = _balances[from];
        require(fromBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[from] = fromBalance - amount;
            // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by
            // decrementing then incrementing.
            _balances[to] += amount;
        }

        emit Transfer(from, to, amount);
    }

    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _totalSupply += amount;
        unchecked {
            // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.
            _balances[account] += amount;
        }
        emit Transfer(address(0), account, amount);
    }

    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
            // Overflow not possible: amount <= accountBalance <= totalSupply.
            _totalSupply -= amount;
        }

        emit Transfer(account, address(0), amount);
    }

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

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

    function _spendAllowance(address owner, address spender, uint256 amount) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            require(currentAllowance >= amount, "ERC20: insufficient allowance");
            unchecked {
                _approve(owner, spender, currentAllowance - amount);
            }
        }
    }
}

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

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

interface IWETH is IERC20 {
    function deposit() external payable;
}

contract FrensCoin is ERC20, Ownable {

    // Cannot be unset. Useful for DEX pairs and CEX wallets.
    mapping (address => bool) isLimitExempt;

    uint256 public maxTxnAmount = type(uint256).max;
    uint256 public txnLimitDenominator = 10000;
    uint256 public txnLimitNumerator;

    // Cannot be set lower than 0.5% of supply
    uint256 public minTxnLimitNumerator = 50;

    uint256 public maxWalletAmount = type(uint256).max;
    uint256 public walletLimitDenominator = 10000;
    uint256 public walletLimitNumerator;

    // Cannot be set lower than 1% of supply
    uint256 public minWalletLimitNumerator = 100;

    bool public limitsEnabled;
    uint256 earliestBlock;

    bool public airdropComplete = false;
    bool public vestingFinished = false;

    mapping(address => uint256) public airdropAmount;
    uint256 public launchTime;
    uint256 public vestingPeriods = 30;
    uint256 public vestingPercent = 3;

    bool private inFeeLiquidation = false;
    bool public feesEnabled;
    uint256 public collectedFees;

    uint256 public buyFeeNumerator;
    uint256 public sellFeeNumerator;

    address public liquidationAMM;
    address public feeRecipient;
    address public weth;
    IRouter public router;

    receive() external payable {}

    constructor() Ownable() ERC20("Frens", "FRENS") {
        _mint(address(this), 10**12 * 10**18);
    }

    function setIsLimitExempt(address _contract) external onlyOwner {
        isLimitExempt[_contract] = true;
    }

    function setTxnLimit(uint256 numerator) external onlyOwner {
        require(numerator >= minTxnLimitNumerator);
        txnLimitNumerator = numerator;
        maxTxnAmount = totalSupply() * numerator  / txnLimitDenominator;
    }

    function setWalletLimit(uint256 numerator) external onlyOwner {
        require(numerator >= minWalletLimitNumerator);
        walletLimitNumerator = numerator;
        maxWalletAmount = totalSupply() * numerator / walletLimitDenominator;
    }

    function toggleLimits() external onlyOwner {
        limitsEnabled = !limitsEnabled;
    }

    function permanentlyDisableFees() external onlyOwner {
        require(!feesEnabled);
        feesEnabled = false;
    }

    function setFees(uint256 _buyFeeNumerator, uint256 _sellFeeNumerator) external onlyOwner {
        require(_buyFeeNumerator <= buyFeeNumerator && _sellFeeNumerator <= sellFeeNumerator);
        buyFeeNumerator = _buyFeeNumerator;
        sellFeeNumerator = _sellFeeNumerator;
    }

    function airdropTokens(address[] calldata holders, uint256[] calldata amounts) external onlyOwner {
        require(!airdropComplete);

        for (uint i=0; i<holders.length; i++) {
            super._transfer(address(this), holders[i], amounts[i]);
            airdropAmount[holders[i]] += amounts[i];
        }
    }

    function finalizeAirdrop() external onlyOwner {
        require(!airdropComplete);
        airdropComplete = true;
    }

    function _transfer(address from, address to, uint256 amount) internal override {
        if (amount == 0 || inFeeLiquidation) {
            super._transfer(from, to, amount);
            return;
        }

        if (limitsEnabled && from != address(this)) {
            // Enforce TXN limit
            require(amount <= maxTxnAmount, "Exceeded Max TXN Limit");

            // Enforce Wallet Limit
            if (!isLimitExempt[to]) {
                require(amount + balanceOf(to) <= maxWalletAmount, "Exceeded Max Wallet Limit");
            }

            // Enforce block delay
            require(block.number >= earliestBlock, "No trading before liquidity add cooldown");
        }

        // Sell
        if (to == liquidationAMM) {
            if (collectedFees > 0) {
                inFeeLiquidation = true;
                swapTokensForEth(collectedFees);
                collectedFees = 0;
                inFeeLiquidation = false;
            }

            if (feesEnabled) {
                uint256 feeAmount = amount * sellFeeNumerator / 100;
                amount = amount - feeAmount;
                super._transfer(from, address(this), feeAmount);
                collectedFees += feeAmount;
            }
        }

        // Buy
        if (from == liquidationAMM && feesEnabled) {
            uint256 feeAmount = amount * buyFeeNumerator / 100;
            amount = amount - feeAmount;
            super._transfer(from, address(this), feeAmount);
            collectedFees += feeAmount;
        }

        if (!vestingFinished) {
            uint256 airdroppedTokenAmount = airdropAmount[from];

            if (airdroppedTokenAmount > 0) {

                uint256 elapsedPeriods = (block.timestamp - launchTime) / 86400;

                if (elapsedPeriods < vestingPeriods) {
                    uint256 minimumBalance = airdroppedTokenAmount - (
                    // a number ranging from 0 to 100
                    elapsedPeriods * vestingPercent
                    * airdroppedTokenAmount
                    / 100
                    );
                    require(balanceOf(from) - amount >= minimumBalance);
                } else {
                    vestingFinished = true;
                }
            }
        }

        super._transfer(from, to, amount);
    }

    function launch(
        address _router,
        address AMM,
        address _weth,
        uint256 _delay,
        uint256 launchTokenAmount,
        address lpReceiver,
        address _feeRecipient,
        uint256 _buyFeeNumerator,
        uint256 _sellFeeNumerator,
        uint256 _maxTxnNumerator,
        uint256 _maxWalletNumerator
    ) external payable onlyOwner {
        require(launchTokenAmount <= balanceOf(address(this)));

        router = IRouter(_router);
        liquidationAMM = AMM;
        isLimitExempt[AMM] = true;
        weth = _weth;

        limitsEnabled = true;
        feesEnabled = true;

        buyFeeNumerator = _buyFeeNumerator;
        sellFeeNumerator = _sellFeeNumerator;

        txnLimitNumerator = _maxTxnNumerator;
        maxTxnAmount = totalSupply() * _maxTxnNumerator  / txnLimitDenominator;

        walletLimitNumerator = _maxWalletNumerator;
        maxWalletAmount = totalSupply() * _maxWalletNumerator / walletLimitDenominator;

        feeRecipient = _feeRecipient;
        launchTime = block.timestamp;

        // Token Reserves for Operations
        super._transfer(address(this), _feeRecipient, 11250000000000000000000000000);

        // Token Reserve for Centralized Exchanges
        super._transfer(address(this), _feeRecipient, 50000000000000000000000000000);

        // Deposit WETH for liquidity
        IWETH WETH = IWETH(_weth);
        WETH.deposit{value: msg.value}();

        // Transfer launchTokenAmount tokens to the pool
        super._transfer(address(this), AMM, launchTokenAmount);

        // Transfer initial liquidity into the AMM
        WETH.transfer(AMM, msg.value);

        // Mint LP tokens to the LP Receiver
        IPair(AMM).mint(lpReceiver);

        // Set the earliestBlock to annoy snipers.
        earliestBlock = block.number + _delay;
    }

    function swapTokensForEth(uint256 tokenAmount) internal {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = weth;
        _approve(address(this), address(router), tokenAmount);
        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            feeRecipient,
            block.timestamp
        );
    }
}

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":[{"internalType":"address","name":"","type":"address"}],"name":"airdropAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"airdropComplete","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"holders","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"airdropTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyFeeNumerator","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"collectedFees","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":[],"name":"feeRecipient","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feesEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"finalizeAirdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_router","type":"address"},{"internalType":"address","name":"AMM","type":"address"},{"internalType":"address","name":"_weth","type":"address"},{"internalType":"uint256","name":"_delay","type":"uint256"},{"internalType":"uint256","name":"launchTokenAmount","type":"uint256"},{"internalType":"address","name":"lpReceiver","type":"address"},{"internalType":"address","name":"_feeRecipient","type":"address"},{"internalType":"uint256","name":"_buyFeeNumerator","type":"uint256"},{"internalType":"uint256","name":"_sellFeeNumerator","type":"uint256"},{"internalType":"uint256","name":"_maxTxnNumerator","type":"uint256"},{"internalType":"uint256","name":"_maxWalletNumerator","type":"uint256"}],"name":"launch","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"launchTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidationAMM","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxnAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minTxnLimitNumerator","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minWalletLimitNumerator","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":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"permanentlyDisableFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellFeeNumerator","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buyFeeNumerator","type":"uint256"},{"internalType":"uint256","name":"_sellFeeNumerator","type":"uint256"}],"name":"setFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_contract","type":"address"}],"name":"setIsLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"numerator","type":"uint256"}],"name":"setTxnLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"numerator","type":"uint256"}],"name":"setWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"toggleLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","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":"txnLimitDenominator","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"txnLimitNumerator","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"vestingFinished","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"vestingPercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"vestingPeriods","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"walletLimitDenominator","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"walletLimitNumerator","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"weth","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040525f19600781905561271060088190556032600a55600b91909155600c556064600e556011805461ffff19169055601e60145560036015556016805460ff1916905534801562000051575f80fd5b50604051806040016040528060058152602001644672656e7360d81b815250604051806040016040528060058152602001644652454e5360d81b81525080600390816200009f919062000298565b506002620000ae838262000298565b505050620000c233620000e160201b60201c565b620000db306c0c9f2c9cd04674edea4000000062000132565b62000386565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6001600160a01b0382166200018d5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640160405180910390fd5b8060045f828254620001a0919062000360565b90915550506001600160a01b0382165f818152600160209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b634e487b7160e01b5f52604160045260245ffd5b600181811c908216806200022157607f821691505b6020821081036200024057634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111562000293575f81815260208120601f850160051c810160208610156200026e5750805b601f850160051c820191505b818110156200028f578281556001016200027a565b5050505b505050565b81516001600160401b03811115620002b457620002b4620001f8565b620002cc81620002c584546200020c565b8462000246565b602080601f83116001811462000302575f8415620002ea5750858301515b5f19600386901b1c1916600185901b1785556200028f565b5f85815260208120601f198616915b82811015620003325788860151825594840194600190910190840162000311565b50858210156200035057878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b808201808211156200038057634e487b7160e01b5f52601160045260245ffd5b92915050565b61229480620003945f395ff3fe6080604052600436106102f0575f3560e01c80638da5cb5b11610186578063cf46f24c116100dc578063eaa75b3111610087578063f74568cc11610062578063f74568cc1461082a578063f887ea4014610849578063fdc149ef14610875575f80fd5b8063eaa75b31146107d7578063f1d5f517146107ec578063f2fde38b1461080b575f80fd5b8063dd62ed3e116100b7578063dd62ed3e14610754578063e594310f146107a3578063ea04e43b146107c2575f80fd5b8063cf46f24c14610715578063d496aa561461072a578063dca69d211461073f575f80fd5b8063a64e4f8a1161013c578063ac38693e11610117578063ac38693e146106a9578063b530dc8c146106d5578063c6cbcfd914610700575f80fd5b8063a64e4f8a14610657578063a9059cbb14610675578063aa4bde2814610694575f80fd5b806391c8bb301161016c57806391c8bb301461060f57806395d89b4114610624578063a457c2d714610638575f80fd5b80638da5cb5b146105d05780639003adfe146105fa575f80fd5b8063395093511161024657806369663587116101f1578063715018a6116101cc578063715018a614610592578063790ca413146105a65780637b24ab32146105bb575f80fd5b80636966358714610519578063706f69371461053257806370a0823114610551575f80fd5b8063469048401161022157806346904840146104c45780635430cfa8146104f05780636334d61d14610504575f80fd5b8063395093511461043f5780633aeb6c711461045e5780633fc8cef314610473575f80fd5b806323b872dd116102a6578063341398ae11610281578063341398ae146103f55780633582ad2314610408578063388ac95b14610421575f80fd5b806323b872dd146103a7578063313ce567146103c657806332887360146103e1575f80fd5b80630b78f9c0116102d65780630b78f9c01461035457806314228b0b1461037557806318160ddd14610389575f80fd5b806306fdde03146102fb578063095ea7b314610325575f80fd5b366102f757005b5f80fd5b348015610306575f80fd5b5061030f61088a565b60405161031c9190611d84565b60405180910390f35b348015610330575f80fd5b5061034461033f366004611e15565b61091a565b604051901515815260200161031c565b34801561035f575f80fd5b5061037361036e366004611e3d565b610933565b005b348015610380575f80fd5b50610373610962565b348015610394575f80fd5b506004545b60405190815260200161031c565b3480156103b2575f80fd5b506103446103c1366004611e5d565b61099c565b3480156103d1575f80fd5b506040516012815260200161031c565b3480156103ec575f80fd5b506103736109bf565b610373610403366004611e96565b610a03565b348015610413575f80fd5b50600f546103449060ff1681565b34801561042c575f80fd5b5060115461034490610100900460ff1681565b34801561044a575f80fd5b50610344610459366004611e15565b610d76565b348015610469575f80fd5b5061039960155481565b34801561047e575f80fd5b50601c5461049f9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161031c565b3480156104cf575f80fd5b50601b5461049f9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156104fb575f80fd5b50610373610dbf565b34801561050f575f80fd5b50610399600a5481565b348015610524575f80fd5b506011546103449060ff1681565b34801561053d575f80fd5b5061037361054c366004611f79565b610e05565b34801561055c575f80fd5b5061039961056b366004611fe0565b73ffffffffffffffffffffffffffffffffffffffff165f9081526001602052604090205490565b34801561059d575f80fd5b50610373610f18565b3480156105b1575f80fd5b5061039960135481565b3480156105c6575f80fd5b5061039960185481565b3480156105db575f80fd5b5060055473ffffffffffffffffffffffffffffffffffffffff1661049f565b348015610605575f80fd5b5061039960175481565b34801561061a575f80fd5b5061039960085481565b34801561062f575f80fd5b5061030f610f2b565b348015610643575f80fd5b50610344610652366004611e15565b610f3a565b348015610662575f80fd5b5060165461034490610100900460ff1681565b348015610680575f80fd5b5061034461068f366004611e15565b61100d565b34801561069f575f80fd5b50610399600b5481565b3480156106b4575f80fd5b50601a5461049f9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156106e0575f80fd5b506103996106ef366004611fe0565b60126020525f908152604090205481565b34801561070b575f80fd5b50610399600d5481565b348015610720575f80fd5b5061039960075481565b348015610735575f80fd5b5061039960095481565b34801561074a575f80fd5b5061039960195481565b34801561075f575f80fd5b5061039961076e366004612000565b73ffffffffffffffffffffffffffffffffffffffff9182165f9081526020818152604080832093909416825291909152205490565b3480156107ae575f80fd5b506103736107bd366004611fe0565b61101a565b3480156107cd575f80fd5b50610399600c5481565b3480156107e2575f80fd5b50610399600e5481565b3480156107f7575f80fd5b50610373610806366004612031565b611070565b348015610816575f80fd5b50610373610825366004611fe0565b6110b2565b348015610835575f80fd5b50610373610844366004612031565b611169565b348015610854575f80fd5b50601d5461049f9073ffffffffffffffffffffffffffffffffffffffff1681565b348015610880575f80fd5b5061039960145481565b60606002805461089990612048565b80601f01602080910402602001604051908101604052809291908181526020018280546108c590612048565b80156109105780601f106108e757610100808354040283529160200191610910565b820191905f5260205f20905b8154815290600101906020018083116108f357829003601f168201915b5050505050905090565b5f336109278185856111ab565b60019150505b92915050565b61093b61135b565b601854821115801561094f57506019548111155b610957575f80fd5b601891909155601955565b61096a61135b565b600f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00811660ff90911615179055565b5f336109a98582856113f8565b6109b48585856114cc565b506001949350505050565b6109c761135b565b60115460ff16156109d6575f80fd5b601180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b610a0b61135b565b305f90815260016020526040902054871115610a25575f80fd5b601d805473ffffffffffffffffffffffffffffffffffffffff808e167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255601a80548d841690831681179091555f90815260066020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff009081166001908117909255601c8054948e169490931693909317909155600f8054909216179055601680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1661010017905560188490556019839055600982905560085482610b1760045490565b610b2191906120c6565b610b2b91906120dd565b600755600d819055600c5481610b4060045490565b610b4a91906120c6565b610b5491906120dd565b600b55601b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff871617905542601355610bb230866b2459c82a05e9a2ad32000000611962565b610bc930866ba18f07d736b90be550000000611962565b5f8990508073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0346040518263ffffffff1660e01b81526004015f604051808303818588803b158015610c13575f80fd5b505af1158015610c25573d5f803e3d5ffd5b5050505050610c35308c8a611962565b6040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8c8116600483015234602483015282169063a9059cbb906044016020604051808303815f875af1158015610ca6573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610cca9190612115565b506040517f6a62784200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301528c1690636a627842906024016020604051808303815f875af1158015610d36573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d5a9190612134565b50610d65894361214b565b601055505050505050505050505050565b335f8181526020818152604080832073ffffffffffffffffffffffffffffffffffffffff871684529091528120549091906109279082908690610dba90879061214b565b6111ab565b610dc761135b565b601654610100900460ff1615610ddb575f80fd5b601680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055565b610e0d61135b565b60115460ff1615610e1c575f80fd5b5f5b83811015610f1157610e6f30868684818110610e3c57610e3c61215e565b9050602002016020810190610e519190611fe0565b858585818110610e6357610e6361215e565b90506020020135611962565b828282818110610e8157610e8161215e565b9050602002013560125f878785818110610e9d57610e9d61215e565b9050602002016020810190610eb29190611fe0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254610ef9919061214b565b90915550819050610f098161218b565b915050610e1e565b5050505050565b610f2061135b565b610f295f611bd7565b565b60606003805461089990612048565b335f8181526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490919083811015611000576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f00000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6109b482868684036111ab565b5f336109278185856114cc565b61102261135b565b73ffffffffffffffffffffffffffffffffffffffff165f90815260066020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b61107861135b565b600e54811015611086575f80fd5b600d819055600c548161109860045490565b6110a291906120c6565b6110ac91906120dd565b600b5550565b6110ba61135b565b73ffffffffffffffffffffffffffffffffffffffff811661115d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610ff7565b61116681611bd7565b50565b61117161135b565b600a5481101561117f575f80fd5b60098190556008548161119160045490565b61119b91906120c6565b6111a591906120dd565b60075550565b73ffffffffffffffffffffffffffffffffffffffff831661124d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610ff7565b73ffffffffffffffffffffffffffffffffffffffff82166112f0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610ff7565b73ffffffffffffffffffffffffffffffffffffffff8381165f818152602081815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b3361137b60055473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1614610f29576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ff7565b73ffffffffffffffffffffffffffffffffffffffff8381165f90815260208181526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146114c657818110156114b9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610ff7565b6114c684848484036111ab565b50505050565b8015806114db575060165460ff165b156114f0576114eb838383611962565b505050565b600f5460ff168015611518575073ffffffffffffffffffffffffffffffffffffffff83163014155b156116e157600754811115611589576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4578636565646564204d61782054584e204c696d6974000000000000000000006044820152606401610ff7565b73ffffffffffffffffffffffffffffffffffffffff82165f9081526006602052604090205460ff1661164f57600b5473ffffffffffffffffffffffffffffffffffffffff83165f908152600160205260409020546115e7908361214b565b111561164f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f4578636565646564204d61782057616c6c6574204c696d6974000000000000006044820152606401610ff7565b6010544310156116e1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f4e6f2074726164696e67206265666f7265206c6971756964697479206164642060448201527f636f6f6c646f776e0000000000000000000000000000000000000000000000006064820152608401610ff7565b601a5473ffffffffffffffffffffffffffffffffffffffff908116908316036117cc576017541561177057601680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905560175461174390611c4d565b5f601755601680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b601654610100900460ff16156117cc575f60646019548361179191906120c6565b61179b91906120dd565b90506117a781836121c2565b91506117b4843083611962565b8060175f8282546117c5919061214b565b9091555050505b601a5473ffffffffffffffffffffffffffffffffffffffff84811691161480156117fd5750601654610100900460ff165b1561184e575f60646018548361181391906120c6565b61181d91906120dd565b905061182981836121c2565b9150611836843083611962565b8060175f828254611847919061214b565b9091555050505b601154610100900460ff1661195b5773ffffffffffffffffffffffffffffffffffffffff83165f908152601260205260409020548015611959575f620151806013544261189b91906121c2565b6118a591906120dd565b905060145481101561192a575f606483601554846118c391906120c6565b6118cd91906120c6565b6118d791906120dd565b6118e190846121c2565b905080846119108873ffffffffffffffffffffffffffffffffffffffff165f9081526001602052604090205490565b61191a91906121c2565b1015611924575f80fd5b50611957565b601180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b505b505b6114eb8383835b73ffffffffffffffffffffffffffffffffffffffff8316611a05576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610ff7565b73ffffffffffffffffffffffffffffffffffffffff8216611aa8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610ff7565b73ffffffffffffffffffffffffffffffffffffffff83165f9081526001602052604090205481811015611b5d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610ff7565b73ffffffffffffffffffffffffffffffffffffffff8085165f8181526001602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611bc99086815260200190565b60405180910390a350505050565b6005805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6040805160028082526060820183525f9260208301908036833701905050905030815f81518110611c8057611c8061215e565b73ffffffffffffffffffffffffffffffffffffffff9283166020918202929092010152601c54825191169082906001908110611cbe57611cbe61215e565b73ffffffffffffffffffffffffffffffffffffffff9283166020918202929092010152601d54611cf191309116846111ab565b601d54601b546040517f791ac94700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9283169263791ac94792611d539287925f92889291169042906004016121d5565b5f604051808303815f87803b158015611d6a575f80fd5b505af1158015611d7c573d5f803e3d5ffd5b505050505050565b5f6020808352835180828501525f5b81811015611daf57858101830151858201604001528201611d93565b505f6040828601015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8301168501019250505092915050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611e10575f80fd5b919050565b5f8060408385031215611e26575f80fd5b611e2f83611ded565b946020939093013593505050565b5f8060408385031215611e4e575f80fd5b50508035926020909101359150565b5f805f60608486031215611e6f575f80fd5b611e7884611ded565b9250611e8660208501611ded565b9150604084013590509250925092565b5f805f805f805f805f805f6101608c8e031215611eb1575f80fd5b611eba8c611ded565b9a50611ec860208d01611ded565b9950611ed660408d01611ded565b985060608c0135975060808c01359650611ef260a08d01611ded565b9550611f0060c08d01611ded565b945060e08c013593506101008c013592506101208c013591506101408c013590509295989b509295989b9093969950565b5f8083601f840112611f41575f80fd5b50813567ffffffffffffffff811115611f58575f80fd5b6020830191508360208260051b8501011115611f72575f80fd5b9250929050565b5f805f8060408587031215611f8c575f80fd5b843567ffffffffffffffff80821115611fa3575f80fd5b611faf88838901611f31565b90965094506020870135915080821115611fc7575f80fd5b50611fd487828801611f31565b95989497509550505050565b5f60208284031215611ff0575f80fd5b611ff982611ded565b9392505050565b5f8060408385031215612011575f80fd5b61201a83611ded565b915061202860208401611ded565b90509250929050565b5f60208284031215612041575f80fd5b5035919050565b600181811c9082168061205c57607f821691505b602082108103612093577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b808202811582820484141761092d5761092d612099565b5f82612110577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b5f60208284031215612125575f80fd5b81518015158114611ff9575f80fd5b5f60208284031215612144575f80fd5b5051919050565b8082018082111561092d5761092d612099565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036121bb576121bb612099565b5060010190565b8181038181111561092d5761092d612099565b5f60a082018783526020878185015260a0604085015281875180845260c08601915082890193505f5b8181101561223057845173ffffffffffffffffffffffffffffffffffffffff16835293830193918301916001016121fe565b505073ffffffffffffffffffffffffffffffffffffffff96909616606085015250505060800152939250505056fea2646970667358221220a71beb965d6dae15f5c5c225527fbdac247dae33cf85111e0d61c897d3aa443c64736f6c63430008140033

Deployed Bytecode

0x6080604052600436106102f0575f3560e01c80638da5cb5b11610186578063cf46f24c116100dc578063eaa75b3111610087578063f74568cc11610062578063f74568cc1461082a578063f887ea4014610849578063fdc149ef14610875575f80fd5b8063eaa75b31146107d7578063f1d5f517146107ec578063f2fde38b1461080b575f80fd5b8063dd62ed3e116100b7578063dd62ed3e14610754578063e594310f146107a3578063ea04e43b146107c2575f80fd5b8063cf46f24c14610715578063d496aa561461072a578063dca69d211461073f575f80fd5b8063a64e4f8a1161013c578063ac38693e11610117578063ac38693e146106a9578063b530dc8c146106d5578063c6cbcfd914610700575f80fd5b8063a64e4f8a14610657578063a9059cbb14610675578063aa4bde2814610694575f80fd5b806391c8bb301161016c57806391c8bb301461060f57806395d89b4114610624578063a457c2d714610638575f80fd5b80638da5cb5b146105d05780639003adfe146105fa575f80fd5b8063395093511161024657806369663587116101f1578063715018a6116101cc578063715018a614610592578063790ca413146105a65780637b24ab32146105bb575f80fd5b80636966358714610519578063706f69371461053257806370a0823114610551575f80fd5b8063469048401161022157806346904840146104c45780635430cfa8146104f05780636334d61d14610504575f80fd5b8063395093511461043f5780633aeb6c711461045e5780633fc8cef314610473575f80fd5b806323b872dd116102a6578063341398ae11610281578063341398ae146103f55780633582ad2314610408578063388ac95b14610421575f80fd5b806323b872dd146103a7578063313ce567146103c657806332887360146103e1575f80fd5b80630b78f9c0116102d65780630b78f9c01461035457806314228b0b1461037557806318160ddd14610389575f80fd5b806306fdde03146102fb578063095ea7b314610325575f80fd5b366102f757005b5f80fd5b348015610306575f80fd5b5061030f61088a565b60405161031c9190611d84565b60405180910390f35b348015610330575f80fd5b5061034461033f366004611e15565b61091a565b604051901515815260200161031c565b34801561035f575f80fd5b5061037361036e366004611e3d565b610933565b005b348015610380575f80fd5b50610373610962565b348015610394575f80fd5b506004545b60405190815260200161031c565b3480156103b2575f80fd5b506103446103c1366004611e5d565b61099c565b3480156103d1575f80fd5b506040516012815260200161031c565b3480156103ec575f80fd5b506103736109bf565b610373610403366004611e96565b610a03565b348015610413575f80fd5b50600f546103449060ff1681565b34801561042c575f80fd5b5060115461034490610100900460ff1681565b34801561044a575f80fd5b50610344610459366004611e15565b610d76565b348015610469575f80fd5b5061039960155481565b34801561047e575f80fd5b50601c5461049f9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161031c565b3480156104cf575f80fd5b50601b5461049f9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156104fb575f80fd5b50610373610dbf565b34801561050f575f80fd5b50610399600a5481565b348015610524575f80fd5b506011546103449060ff1681565b34801561053d575f80fd5b5061037361054c366004611f79565b610e05565b34801561055c575f80fd5b5061039961056b366004611fe0565b73ffffffffffffffffffffffffffffffffffffffff165f9081526001602052604090205490565b34801561059d575f80fd5b50610373610f18565b3480156105b1575f80fd5b5061039960135481565b3480156105c6575f80fd5b5061039960185481565b3480156105db575f80fd5b5060055473ffffffffffffffffffffffffffffffffffffffff1661049f565b348015610605575f80fd5b5061039960175481565b34801561061a575f80fd5b5061039960085481565b34801561062f575f80fd5b5061030f610f2b565b348015610643575f80fd5b50610344610652366004611e15565b610f3a565b348015610662575f80fd5b5060165461034490610100900460ff1681565b348015610680575f80fd5b5061034461068f366004611e15565b61100d565b34801561069f575f80fd5b50610399600b5481565b3480156106b4575f80fd5b50601a5461049f9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156106e0575f80fd5b506103996106ef366004611fe0565b60126020525f908152604090205481565b34801561070b575f80fd5b50610399600d5481565b348015610720575f80fd5b5061039960075481565b348015610735575f80fd5b5061039960095481565b34801561074a575f80fd5b5061039960195481565b34801561075f575f80fd5b5061039961076e366004612000565b73ffffffffffffffffffffffffffffffffffffffff9182165f9081526020818152604080832093909416825291909152205490565b3480156107ae575f80fd5b506103736107bd366004611fe0565b61101a565b3480156107cd575f80fd5b50610399600c5481565b3480156107e2575f80fd5b50610399600e5481565b3480156107f7575f80fd5b50610373610806366004612031565b611070565b348015610816575f80fd5b50610373610825366004611fe0565b6110b2565b348015610835575f80fd5b50610373610844366004612031565b611169565b348015610854575f80fd5b50601d5461049f9073ffffffffffffffffffffffffffffffffffffffff1681565b348015610880575f80fd5b5061039960145481565b60606002805461089990612048565b80601f01602080910402602001604051908101604052809291908181526020018280546108c590612048565b80156109105780601f106108e757610100808354040283529160200191610910565b820191905f5260205f20905b8154815290600101906020018083116108f357829003601f168201915b5050505050905090565b5f336109278185856111ab565b60019150505b92915050565b61093b61135b565b601854821115801561094f57506019548111155b610957575f80fd5b601891909155601955565b61096a61135b565b600f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00811660ff90911615179055565b5f336109a98582856113f8565b6109b48585856114cc565b506001949350505050565b6109c761135b565b60115460ff16156109d6575f80fd5b601180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b610a0b61135b565b305f90815260016020526040902054871115610a25575f80fd5b601d805473ffffffffffffffffffffffffffffffffffffffff808e167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255601a80548d841690831681179091555f90815260066020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff009081166001908117909255601c8054948e169490931693909317909155600f8054909216179055601680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1661010017905560188490556019839055600982905560085482610b1760045490565b610b2191906120c6565b610b2b91906120dd565b600755600d819055600c5481610b4060045490565b610b4a91906120c6565b610b5491906120dd565b600b55601b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff871617905542601355610bb230866b2459c82a05e9a2ad32000000611962565b610bc930866ba18f07d736b90be550000000611962565b5f8990508073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0346040518263ffffffff1660e01b81526004015f604051808303818588803b158015610c13575f80fd5b505af1158015610c25573d5f803e3d5ffd5b5050505050610c35308c8a611962565b6040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8c8116600483015234602483015282169063a9059cbb906044016020604051808303815f875af1158015610ca6573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610cca9190612115565b506040517f6a62784200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301528c1690636a627842906024016020604051808303815f875af1158015610d36573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d5a9190612134565b50610d65894361214b565b601055505050505050505050505050565b335f8181526020818152604080832073ffffffffffffffffffffffffffffffffffffffff871684529091528120549091906109279082908690610dba90879061214b565b6111ab565b610dc761135b565b601654610100900460ff1615610ddb575f80fd5b601680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055565b610e0d61135b565b60115460ff1615610e1c575f80fd5b5f5b83811015610f1157610e6f30868684818110610e3c57610e3c61215e565b9050602002016020810190610e519190611fe0565b858585818110610e6357610e6361215e565b90506020020135611962565b828282818110610e8157610e8161215e565b9050602002013560125f878785818110610e9d57610e9d61215e565b9050602002016020810190610eb29190611fe0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254610ef9919061214b565b90915550819050610f098161218b565b915050610e1e565b5050505050565b610f2061135b565b610f295f611bd7565b565b60606003805461089990612048565b335f8181526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490919083811015611000576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f00000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6109b482868684036111ab565b5f336109278185856114cc565b61102261135b565b73ffffffffffffffffffffffffffffffffffffffff165f90815260066020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b61107861135b565b600e54811015611086575f80fd5b600d819055600c548161109860045490565b6110a291906120c6565b6110ac91906120dd565b600b5550565b6110ba61135b565b73ffffffffffffffffffffffffffffffffffffffff811661115d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610ff7565b61116681611bd7565b50565b61117161135b565b600a5481101561117f575f80fd5b60098190556008548161119160045490565b61119b91906120c6565b6111a591906120dd565b60075550565b73ffffffffffffffffffffffffffffffffffffffff831661124d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610ff7565b73ffffffffffffffffffffffffffffffffffffffff82166112f0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610ff7565b73ffffffffffffffffffffffffffffffffffffffff8381165f818152602081815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b3361137b60055473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1614610f29576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ff7565b73ffffffffffffffffffffffffffffffffffffffff8381165f90815260208181526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146114c657818110156114b9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610ff7565b6114c684848484036111ab565b50505050565b8015806114db575060165460ff165b156114f0576114eb838383611962565b505050565b600f5460ff168015611518575073ffffffffffffffffffffffffffffffffffffffff83163014155b156116e157600754811115611589576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4578636565646564204d61782054584e204c696d6974000000000000000000006044820152606401610ff7565b73ffffffffffffffffffffffffffffffffffffffff82165f9081526006602052604090205460ff1661164f57600b5473ffffffffffffffffffffffffffffffffffffffff83165f908152600160205260409020546115e7908361214b565b111561164f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f4578636565646564204d61782057616c6c6574204c696d6974000000000000006044820152606401610ff7565b6010544310156116e1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f4e6f2074726164696e67206265666f7265206c6971756964697479206164642060448201527f636f6f6c646f776e0000000000000000000000000000000000000000000000006064820152608401610ff7565b601a5473ffffffffffffffffffffffffffffffffffffffff908116908316036117cc576017541561177057601680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905560175461174390611c4d565b5f601755601680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b601654610100900460ff16156117cc575f60646019548361179191906120c6565b61179b91906120dd565b90506117a781836121c2565b91506117b4843083611962565b8060175f8282546117c5919061214b565b9091555050505b601a5473ffffffffffffffffffffffffffffffffffffffff84811691161480156117fd5750601654610100900460ff165b1561184e575f60646018548361181391906120c6565b61181d91906120dd565b905061182981836121c2565b9150611836843083611962565b8060175f828254611847919061214b565b9091555050505b601154610100900460ff1661195b5773ffffffffffffffffffffffffffffffffffffffff83165f908152601260205260409020548015611959575f620151806013544261189b91906121c2565b6118a591906120dd565b905060145481101561192a575f606483601554846118c391906120c6565b6118cd91906120c6565b6118d791906120dd565b6118e190846121c2565b905080846119108873ffffffffffffffffffffffffffffffffffffffff165f9081526001602052604090205490565b61191a91906121c2565b1015611924575f80fd5b50611957565b601180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b505b505b6114eb8383835b73ffffffffffffffffffffffffffffffffffffffff8316611a05576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610ff7565b73ffffffffffffffffffffffffffffffffffffffff8216611aa8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610ff7565b73ffffffffffffffffffffffffffffffffffffffff83165f9081526001602052604090205481811015611b5d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610ff7565b73ffffffffffffffffffffffffffffffffffffffff8085165f8181526001602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611bc99086815260200190565b60405180910390a350505050565b6005805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6040805160028082526060820183525f9260208301908036833701905050905030815f81518110611c8057611c8061215e565b73ffffffffffffffffffffffffffffffffffffffff9283166020918202929092010152601c54825191169082906001908110611cbe57611cbe61215e565b73ffffffffffffffffffffffffffffffffffffffff9283166020918202929092010152601d54611cf191309116846111ab565b601d54601b546040517f791ac94700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9283169263791ac94792611d539287925f92889291169042906004016121d5565b5f604051808303815f87803b158015611d6a575f80fd5b505af1158015611d7c573d5f803e3d5ffd5b505050505050565b5f6020808352835180828501525f5b81811015611daf57858101830151858201604001528201611d93565b505f6040828601015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8301168501019250505092915050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611e10575f80fd5b919050565b5f8060408385031215611e26575f80fd5b611e2f83611ded565b946020939093013593505050565b5f8060408385031215611e4e575f80fd5b50508035926020909101359150565b5f805f60608486031215611e6f575f80fd5b611e7884611ded565b9250611e8660208501611ded565b9150604084013590509250925092565b5f805f805f805f805f805f6101608c8e031215611eb1575f80fd5b611eba8c611ded565b9a50611ec860208d01611ded565b9950611ed660408d01611ded565b985060608c0135975060808c01359650611ef260a08d01611ded565b9550611f0060c08d01611ded565b945060e08c013593506101008c013592506101208c013591506101408c013590509295989b509295989b9093969950565b5f8083601f840112611f41575f80fd5b50813567ffffffffffffffff811115611f58575f80fd5b6020830191508360208260051b8501011115611f72575f80fd5b9250929050565b5f805f8060408587031215611f8c575f80fd5b843567ffffffffffffffff80821115611fa3575f80fd5b611faf88838901611f31565b90965094506020870135915080821115611fc7575f80fd5b50611fd487828801611f31565b95989497509550505050565b5f60208284031215611ff0575f80fd5b611ff982611ded565b9392505050565b5f8060408385031215612011575f80fd5b61201a83611ded565b915061202860208401611ded565b90509250929050565b5f60208284031215612041575f80fd5b5035919050565b600181811c9082168061205c57607f821691505b602082108103612093577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b808202811582820484141761092d5761092d612099565b5f82612110577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b5f60208284031215612125575f80fd5b81518015158114611ff9575f80fd5b5f60208284031215612144575f80fd5b5051919050565b8082018082111561092d5761092d612099565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036121bb576121bb612099565b5060010190565b8181038181111561092d5761092d612099565b5f60a082018783526020878185015260a0604085015281875180845260c08601915082890193505f5b8181101561223057845173ffffffffffffffffffffffffffffffffffffffff16835293830193918301916001016121fe565b505073ffffffffffffffffffffffffffffffffffffffff96909616606085015250505060800152939250505056fea2646970667358221220a71beb965d6dae15f5c5c225527fbdac247dae33cf85111e0d61c897d3aa443c64736f6c63430008140033

Deployed Bytecode Sourcemap

7366:7771:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2385:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3156:199;;;;;;;;;;-1:-1:-1;3156:199:0;;;;;:::i;:::-;;:::i;:::-;;;1251:14:1;;1244:22;1226:41;;1214:2;1199:18;3156:199:0;1086:187:1;9648:285:0;;;;;;;;;;-1:-1:-1;9648:285:0;;;;;:::i;:::-;;:::i;:::-;;9417:92;;;;;;;;;;;;;:::i;2841:108::-;;;;;;;;;;-1:-1:-1;2929:12:0;;2841:108;;;1677:25:1;;;1665:2;1650:18;2841:108:0;1531:177:1;3522:259:0;;;;;;;;;;-1:-1:-1;3522:259:0;;;;;:::i;:::-;;:::i;2493:93::-;;;;;;;;;;-1:-1:-1;2493:93:0;;2576:2;2188:36:1;;2176:2;2161:18;2493:93:0;2046:184:1;10276:123:0;;;;;;;;;;;;;:::i;12793:1898::-;;;;;;:::i;:::-;;:::i;8016:25::-;;;;;;;;;;-1:-1:-1;8016:25:0;;;;;;;;8120:35;;;;;;;;;;-1:-1:-1;8120:35:0;;;;;;;;;;;4231:236;;;;;;;;;;-1:-1:-1;4231:236:0;;;;;:::i;:::-;;:::i;8292:33::-;;;;;;;;;;;;;;;;8592:19;;;;;;;;;;-1:-1:-1;8592:19:0;;;;;;;;;;;3316:42:1;3304:55;;;3286:74;;3274:2;3259:18;8592:19:0;3140:226:1;8558:27:0;;;;;;;;;;-1:-1:-1;8558:27:0;;;;;;;;9517:123;;;;;;;;;;;;;:::i;7715:40::-;;;;;;;;;;;;;;;;8078:35;;;;;;;;;;-1:-1:-1;8078:35:0;;;;;;;;9941:327;;;;;;;;;;-1:-1:-1;9941:327:0;;;;;:::i;:::-;;:::i;2706:127::-;;;;;;;;;;-1:-1:-1;2706:127:0;;;;;:::i;:::-;2807:18;;2780:7;2807:18;;;:9;:18;;;;;;;2706:127;665:103;;;;;;;;;;;;;:::i;8219:25::-;;;;;;;;;;;;;;;;8445:30;;;;;;;;;;;;;;;;361:87;;;;;;;;;;-1:-1:-1;434:6:0;;;;361:87;;8408:28;;;;;;;;;;;;;;;;7577:42;;;;;;;;;;;;;;;;2594:104;;;;;;;;;;;;;:::i;3789:434::-;;;;;;;;;;-1:-1:-1;3789:434:0;;;;;:::i;:::-;;:::i;8378:23::-;;;;;;;;;;-1:-1:-1;8378:23:0;;;;;;;;;;;2957:191;;;;;;;;;;-1:-1:-1;2957:191:0;;;;;:::i;:::-;;:::i;7764:50::-;;;;;;;;;;;;;;;;8522:29;;;;;;;;;;-1:-1:-1;8522:29:0;;;;;;;;8164:48;;;;;;;;;;-1:-1:-1;8164:48:0;;;;;:::i;:::-;;;;;;;;;;;;;;7873:35;;;;;;;;;;;;;;;;7523:47;;;;;;;;;;;;;;;;7626:32;;;;;;;;;;;;;;;;8482:31;;;;;;;;;;;;;;;;3363:151;;;;;;;;;;-1:-1:-1;3363:151:0;;;;;:::i;:::-;3479:18;;;;3452:7;3479:18;;;;;;;;;;;:27;;;;;;;;;;;;;3363:151;8797:114;;;;;;;;;;-1:-1:-1;8797:114:0;;;;;:::i;:::-;;:::i;7821:45::-;;;;;;;;;;;;;;;;7963:44;;;;;;;;;;;;;;;;9161:248;;;;;;;;;;-1:-1:-1;9161:248:0;;;;;:::i;:::-;;:::i;456:201::-;;;;;;;;;;-1:-1:-1;456:201:0;;;;;:::i;:::-;;:::i;8919:234::-;;;;;;;;;;-1:-1:-1;8919:234:0;;;;;:::i;:::-;;:::i;8618:21::-;;;;;;;;;;-1:-1:-1;8618:21:0;;;;;;;;8251:34;;;;;;;;;;;;;;;;2385:100;2439:13;2472:5;2465:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2385:100;:::o;3156:199::-;3239:4;3272:10;3293:32;3272:10;3309:7;3318:6;3293:8;:32::i;:::-;3343:4;3336:11;;;3156:199;;;;;:::o;9648:285::-;320:13;:11;:13::i;:::-;9776:15:::1;;9756:16;:35;;:76;;;;;9816:16;;9795:17;:37;;9756:76;9748:85;;;::::0;::::1;;9844:15;:34:::0;;;;9889:16:::1;:36:::0;9648:285::o;9417:92::-;320:13;:11;:13::i;:::-;9488::::1;::::0;;9471:30;;::::1;9488:13;::::0;;::::1;9487:14;9471:30;::::0;;9417:92::o;3522:259::-;3619:4;3654:10;3675:38;3691:4;3654:10;3706:6;3675:15;:38::i;:::-;3724:27;3734:4;3740:2;3744:6;3724:9;:27::i;:::-;-1:-1:-1;3769:4:0;;3522:259;-1:-1:-1;;;;3522:259:0:o;10276:123::-;320:13;:11;:13::i;:::-;10342:15:::1;::::0;::::1;;10341:16;10333:25;;;::::0;::::1;;10369:15;:22:::0;;;::::1;10387:4;10369:22;::::0;;10276:123::o;12793:1898::-;320:13;:11;:13::i;:::-;13239:4:::1;2780:7:::0;2807:18;;;:9;:18;;;;;;13200:17:::1;:45;;13192:54;;;::::0;::::1;;13259:6;:25:::0;;::::1;::::0;;::::1;::::0;;;::::1;;::::0;;;13295:14:::1;:20:::0;;;;::::1;::::0;;::::1;::::0;::::1;::::0;;;13259:6:::1;13326:18:::0;;;:13:::1;:18;::::0;;;;:25;;;;;::::1;13259::::0;13326;;::::1;::::0;;;13362:4:::1;:12:::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;;13387:13:::1;:20:::0;;;;::::1;;::::0;;13418:11:::1;:18:::0;;;::::1;13259:25;13418:18;::::0;;13449:15:::1;:34:::0;;;13494:16:::1;:36:::0;;;13543:17:::1;:36:::0;;;13641:19:::1;::::0;13563:16;13605:13:::1;2929:12:::0;;;2841:108;13605:13:::1;:32;;;;:::i;:::-;:55;;;;:::i;:::-;13590:12;:70:::0;13673:20:::1;:42:::0;;;13782:22:::1;::::0;13696:19;13744:13:::1;2929:12:::0;;;2841:108;13744:13:::1;:35;;;;:::i;:::-;:60;;;;:::i;:::-;13726:15;:78:::0;13817:12:::1;:28:::0;;;::::1;;::::0;::::1;;::::0;;13869:15:::1;13856:10;:28:::0;13939:76:::1;13963:4;13817:28:::0;13985:29:::1;13939:15;:76::i;:::-;14080;14104:4;14111:13;14126:29;14080:15;:76::i;:::-;14208:10;14227:5;14208:25;;14244:4;:12;;;14264:9;14244:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;14347:54;14371:4;14378:3;14383:17;14347:15;:54::i;:::-;14466:29;::::0;;;;:13:::1;6683:55:1::0;;;14466:29:0::1;::::0;::::1;6665:74:1::0;14485:9:0::1;6755:18:1::0;;;6748:34;14466:13:0;::::1;::::0;::::1;::::0;6638:18:1;;14466:29:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;14554:27:0::1;::::0;;;;:15:::1;3304:55:1::0;;;14554:27:0::1;::::0;::::1;3286:74:1::0;14554:15:0;::::1;::::0;::::1;::::0;3259:18:1;;14554:27:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;14662:21:0::1;14677:6:::0;14662:12:::1;:21;:::i;:::-;14646:13;:37:::0;-1:-1:-1;;;;;;;;;;;;12793:1898:0:o;4231:236::-;4352:10;4319:4;3479:18;;;;;;;;;;;;:27;;;;;;;;;;4319:4;;4352:10;4373:64;;4352:10;;3479:27;;4398:38;;4426:10;;4398:38;:::i;:::-;4373:8;:64::i;9517:123::-;320:13;:11;:13::i;:::-;9590:11:::1;::::0;::::1;::::0;::::1;;;9589:12;9581:21;;;::::0;::::1;;9613:11;:19:::0;;;::::1;::::0;;9517:123::o;9941:327::-;320:13;:11;:13::i;:::-;10059:15:::1;::::0;::::1;;10058:16;10050:25;;;::::0;::::1;;10093:6;10088:173;10103:16:::0;;::::1;10088:173;;;10141:54;10165:4;10172:7;;10180:1;10172:10;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;10184:7;;10192:1;10184:10;;;;;;;:::i;:::-;;;;;;;10141:15;:54::i;:::-;10239:7;;10247:1;10239:10;;;;;;;:::i;:::-;;;;;;;10210:13;:25;10224:7;;10232:1;10224:10;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;10210:25;;;;;;;;;;;;;;;;:39;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;10121:3:0;;-1:-1:-1;10121:3:0::1;::::0;::::1;:::i;:::-;;;;10088:173;;;;9941:327:::0;;;;:::o;665:103::-;320:13;:11;:13::i;:::-;730:30:::1;757:1;730:18;:30::i;:::-;665:103::o:0;2594:104::-;2650:13;2683:7;2676:14;;;;;:::i;3789:434::-;3915:10;3882:4;3479:18;;;;;;;;;;;;:27;;;;;;;;;;3882:4;;3915:10;4027:15;4007:16;:35;;3999:85;;;;;;;7985:2:1;3999:85:0;;;7967:21:1;8024:2;8004:18;;;7997:30;8063:34;8043:18;;;8036:62;8134:7;8114:18;;;8107:35;8159:19;;3999:85:0;;;;;;;;;4120:60;4129:5;4136:7;4164:15;4145:16;:34;4120:8;:60::i;2957:191::-;3036:4;3069:10;3090:28;3069:10;3107:2;3111:6;3090:9;:28::i;8797:114::-;320:13;:11;:13::i;:::-;8872:24:::1;;;::::0;;;:13:::1;:24;::::0;;;;:31;;;::::1;8899:4;8872:31;::::0;;8797:114::o;9161:248::-;320:13;:11;:13::i;:::-;9255:23:::1;;9242:9;:36;;9234:45;;;::::0;::::1;;9290:20;:32:::0;;;9379:22:::1;::::0;9313:9;9351:13:::1;2929:12:::0;;;2841:108;9351:13:::1;:25;;;;:::i;:::-;:50;;;;:::i;:::-;9333:15;:68:::0;-1:-1:-1;9161:248:0:o;456:201::-;320:13;:11;:13::i;:::-;545:22:::1;::::0;::::1;537:73;;;::::0;::::1;::::0;;8391:2:1;537:73:0::1;::::0;::::1;8373:21:1::0;8430:2;8410:18;;;8403:30;8469:34;8449:18;;;8442:62;8540:8;8520:18;;;8513:36;8566:19;;537:73:0::1;8189:402:1::0;537:73:0::1;621:28;640:8;621:18;:28::i;:::-;456:201:::0;:::o;8919:234::-;320:13;:11;:13::i;:::-;9010:20:::1;;8997:9;:33;;8989:42;;;::::0;::::1;;9042:17;:29:::0;;;9126:19:::1;::::0;9062:9;9097:13:::1;2929:12:::0;;;2841:108;9097:13:::1;:25;;;;:::i;:::-;:48;;;;:::i;:::-;9082:12;:63:::0;-1:-1:-1;8919:234:0:o;6181:346::-;6283:19;;;6275:68;;;;;;;8798:2:1;6275:68:0;;;8780:21:1;8837:2;8817:18;;;8810:30;8876:34;8856:18;;;8849:62;8947:6;8927:18;;;8920:34;8971:19;;6275:68:0;8596:400:1;6275:68:0;6362:21;;;6354:68;;;;;;;9203:2:1;6354:68:0;;;9185:21:1;9242:2;9222:18;;;9215:30;9281:34;9261:18;;;9254:62;9352:4;9332:18;;;9325:32;9374:19;;6354:68:0;9001:398:1;6354:68:0;6435:18;;;;:11;:18;;;;;;;;;;;:27;;;;;;;;;;;;;:36;;;6487:32;;1677:25:1;;;6487:32:0;;1650:18:1;6487:32:0;;;;;;;6181:346;;;:::o;776:130::-;851:10;840:7;434:6;;;;;361:87;840:7;:21;;;832:66;;;;;;;9606:2:1;832:66:0;;;9588:21:1;;;9625:18;;;9618:30;9684:34;9664:18;;;9657:62;9736:18;;832:66:0;9404:356:1;6535:419:0;3479:18;;;;6636:24;3479:18;;;;;;;;;;;:27;;;;;;;;;;6723:17;6703:37;;6699:248;;6785:6;6765:16;:26;;6757:68;;;;;;;9967:2:1;6757:68:0;;;9949:21:1;10006:2;9986:18;;;9979:30;10045:31;10025:18;;;10018:59;10094:18;;6757:68:0;9765:353:1;6757:68:0;6869:51;6878:5;6885:7;6913:6;6894:16;:25;6869:8;:51::i;:::-;6625:329;6535:419;;;:::o;10407:2378::-;10501:11;;;:31;;-1:-1:-1;10516:16:0;;;;10501:31;10497:118;;;10549:33;10565:4;10571:2;10575:6;10549:15;:33::i;:::-;10407:2378;;;:::o;10497:118::-;10631:13;;;;:38;;;;-1:-1:-1;10648:21:0;;;10664:4;10648:21;;10631:38;10627:488;;;10738:12;;10728:6;:22;;10720:57;;;;;;;10325:2:1;10720:57:0;;;10307:21:1;10364:2;10344:18;;;10337:30;10403:24;10383:18;;;10376:52;10445:18;;10720:57:0;10123:346:1;10720:57:0;10836:17;;;;;;;:13;:17;;;;;;;;10831:138;;10908:15;;2807:18;;;2780:7;2807:18;;;:9;:18;;;;;;10882:22;;:6;:22;:::i;:::-;:41;;10874:79;;;;;;;10676:2:1;10874:79:0;;;10658:21:1;10715:2;10695:18;;;10688:30;10754:27;10734:18;;;10727:55;10799:18;;10874:79:0;10474:349:1;10874:79:0;11045:13;;11029:12;:29;;11021:82;;;;;;;11030:2:1;11021:82:0;;;11012:21:1;11069:2;11049:18;;;11042:30;11108:34;11088:18;;;11081:62;11179:10;11159:18;;;11152:38;11207:19;;11021:82:0;10828:404:1;11021:82:0;11154:14;;;;;;11148:20;;;;11144:538;;11189:13;;:17;11185:210;;11227:16;:23;;;;11246:4;11227:23;;;11286:13;;11269:31;;:16;:31::i;:::-;11335:1;11319:13;:17;11355:16;:24;;;;;;11185:210;11415:11;;;;;;;11411:260;;;11447:17;11495:3;11476:16;;11467:6;:25;;;;:::i;:::-;:31;;;;:::i;:::-;11447:51;-1:-1:-1;11526:18:0;11447:51;11526:6;:18;:::i;:::-;11517:27;;11563:47;11579:4;11593;11600:9;11563:15;:47::i;:::-;11646:9;11629:13;;:26;;;;;;;:::i;:::-;;;;-1:-1:-1;;;11411:260:0;11722:14;;;11714:22;;;11722:14;;11714:22;:37;;;;-1:-1:-1;11740:11:0;;;;;;;11714:37;11710:265;;;11768:17;11815:3;11797:15;;11788:6;:24;;;;:::i;:::-;:30;;;;:::i;:::-;11768:50;-1:-1:-1;11842:18:0;11768:50;11842:6;:18;:::i;:::-;11833:27;;11875:47;11891:4;11905;11912:9;11875:15;:47::i;:::-;11954:9;11937:13;;:26;;;;;;;:::i;:::-;;;;-1:-1:-1;;;11710:265:0;11992:15;;;;;;;11987:745;;12056:19;;;12024:29;12056:19;;;:13;:19;;;;;;12096:25;;12092:629;;12144:22;12202:5;12188:10;;12170:15;:28;;;;:::i;:::-;12169:38;;;;:::i;:::-;12144:63;;12249:14;;12232;:31;12228:478;;;12288:22;12515:3;12470:21;12432:14;;12415;:31;;;;:::i;:::-;:76;;;;:::i;:::-;:103;;;;:::i;:::-;12313:228;;:21;:228;:::i;:::-;12288:253;;12600:14;12590:6;12572:15;12582:4;2807:18;;2780:7;2807:18;;;:9;:18;;;;;;;2706:127;12572:15;:24;;;;:::i;:::-;:42;;12564:51;;;;;;12265:370;12228:478;;;12664:15;:22;;;;;;;;12228:478;12123:598;12092:629;12009:723;11987:745;12744:33;12760:4;12766:2;12770:6;4475:705;4572:18;;;4564:68;;;;;;;11572:2:1;4564:68:0;;;11554:21:1;11611:2;11591:18;;;11584:30;11650:34;11630:18;;;11623:62;11721:7;11701:18;;;11694:35;11746:19;;4564:68:0;11370:401:1;4564:68:0;4651:16;;;4643:64;;;;;;;11978:2:1;4643:64:0;;;11960:21:1;12017:2;11997:18;;;11990:30;12056:34;12036:18;;;12029:62;12127:5;12107:18;;;12100:33;12150:19;;4643:64:0;11776:399:1;4643:64:0;4742:15;;;4720:19;4742:15;;;:9;:15;;;;;;4776:21;;;;4768:72;;;;;;;12382:2:1;4768:72:0;;;12364:21:1;12421:2;12401:18;;;12394:30;12460:34;12440:18;;;12433:62;12531:8;12511:18;;;12504:36;12557:19;;4768:72:0;12180:402:1;4768:72:0;4876:15;;;;;;;;:9;:15;;;;;;4894:20;;;4876:38;;5094:13;;;;;;;;;;:23;;;;;;5146:26;;;;;;4908:6;1677:25:1;;1665:2;1650:18;;1531:177;5146:26:0;;;;;;;;4553:627;4475:705;;;:::o;914:191::-;1007:6;;;;1024:17;;;;;;;;;;;1057:40;;1007:6;;;1024:17;1007:6;;1057:40;;988:16;;1057:40;977:128;914:191;:::o;14699:435::-;14790:16;;;14804:1;14790:16;;;;;;;;14766:21;;14790:16;;;;;;;;;;-1:-1:-1;14790:16:0;14766:40;;14835:4;14817;14822:1;14817:7;;;;;;;;:::i;:::-;:23;;;;:7;;;;;;;;;:23;14861:4;;14851:7;;14861:4;;;14851;;14861;;14851:7;;;;;;:::i;:::-;:14;;;;:7;;;;;;;;;:14;14908:6;;14876:53;;14893:4;;14908:6;14917:11;14876:8;:53::i;:::-;14940:6;;15073:12;;14940:186;;;;;:6;;;;;:57;;:186;;15012:11;;14940:6;;15054:4;;15073:12;;;15100:15;;14940:186;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14755:379;14699:435;:::o;14:607: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;612:2;542:66;537:2;529:6;525:15;521:88;510:9;506:104;502:113;494:121;;;;14:607;;;;:::o;626:196::-;694:20;;754:42;743:54;;733:65;;723:93;;812:1;809;802:12;723:93;626:196;;;:::o;827:254::-;895:6;903;956:2;944:9;935:7;931:23;927:32;924:52;;;972:1;969;962:12;924:52;995:29;1014:9;995:29;:::i;:::-;985:39;1071:2;1056:18;;;;1043:32;;-1:-1:-1;;;827:254:1:o;1278:248::-;1346:6;1354;1407:2;1395:9;1386:7;1382:23;1378:32;1375:52;;;1423:1;1420;1413:12;1375:52;-1:-1:-1;;1446:23:1;;;1516:2;1501:18;;;1488:32;;-1:-1:-1;1278:248:1:o;1713:328::-;1790:6;1798;1806;1859:2;1847:9;1838:7;1834:23;1830:32;1827:52;;;1875:1;1872;1865:12;1827:52;1898:29;1917:9;1898:29;:::i;:::-;1888:39;;1946:38;1980:2;1969:9;1965:18;1946:38;:::i;:::-;1936:48;;2031:2;2020:9;2016:18;2003:32;1993:42;;1713:328;;;;;:::o;2235:900::-;2384:6;2392;2400;2408;2416;2424;2432;2440;2448;2456;2464:7;2518:3;2506:9;2497:7;2493:23;2489:33;2486:53;;;2535:1;2532;2525:12;2486:53;2558:29;2577:9;2558:29;:::i;:::-;2548:39;;2606:38;2640:2;2629:9;2625:18;2606:38;:::i;:::-;2596:48;;2663:38;2697:2;2686:9;2682:18;2663:38;:::i;:::-;2653:48;;2748:2;2737:9;2733:18;2720:32;2710:42;;2799:3;2788:9;2784:19;2771:33;2761:43;;2823:39;2857:3;2846:9;2842:19;2823:39;:::i;:::-;2813:49;;2881:39;2915:3;2904:9;2900:19;2881:39;:::i;:::-;2871:49;;2967:3;2956:9;2952:19;2939:33;2929:43;;3019:3;3008:9;3004:19;2991:33;2981:43;;3071:3;3060:9;3056:19;3043:33;3033:43;;3124:3;3113:9;3109:19;3096:33;3085:44;;2235:900;;;;;;;;;;;;;;:::o;3371:367::-;3434:8;3444:6;3498:3;3491:4;3483:6;3479:17;3475:27;3465:55;;3516:1;3513;3506:12;3465:55;-1:-1:-1;3539:20:1;;3582:18;3571:30;;3568:50;;;3614:1;3611;3604:12;3568:50;3651:4;3643:6;3639:17;3627:29;;3711:3;3704:4;3694:6;3691:1;3687:14;3679:6;3675:27;3671:38;3668:47;3665:67;;;3728:1;3725;3718:12;3665:67;3371:367;;;;;:::o;3743:773::-;3865:6;3873;3881;3889;3942:2;3930:9;3921:7;3917:23;3913:32;3910:52;;;3958:1;3955;3948:12;3910:52;3998:9;3985:23;4027:18;4068:2;4060:6;4057:14;4054:34;;;4084:1;4081;4074:12;4054:34;4123:70;4185:7;4176:6;4165:9;4161:22;4123:70;:::i;:::-;4212:8;;-1:-1:-1;4097:96:1;-1:-1:-1;4300:2:1;4285:18;;4272:32;;-1:-1:-1;4316:16:1;;;4313:36;;;4345:1;4342;4335:12;4313:36;;4384:72;4448:7;4437:8;4426:9;4422:24;4384:72;:::i;:::-;3743:773;;;;-1:-1:-1;4475:8:1;-1:-1:-1;;;;3743:773:1:o;4521:186::-;4580:6;4633:2;4621:9;4612:7;4608:23;4604:32;4601:52;;;4649:1;4646;4639:12;4601:52;4672:29;4691:9;4672:29;:::i;:::-;4662:39;4521:186;-1:-1:-1;;;4521:186:1:o;4712:260::-;4780:6;4788;4841:2;4829:9;4820:7;4816:23;4812:32;4809:52;;;4857:1;4854;4847:12;4809:52;4880:29;4899:9;4880:29;:::i;:::-;4870:39;;4928:38;4962:2;4951:9;4947:18;4928:38;:::i;:::-;4918:48;;4712:260;;;;;:::o;4977:180::-;5036:6;5089:2;5077:9;5068:7;5064:23;5060:32;5057:52;;;5105:1;5102;5095:12;5057:52;-1:-1:-1;5128:23:1;;4977:180;-1:-1:-1;4977:180:1:o;5408:437::-;5487:1;5483:12;;;;5530;;;5551:61;;5605:4;5597:6;5593:17;5583:27;;5551:61;5658:2;5650:6;5647:14;5627:18;5624:38;5621:218;;5695:77;5692:1;5685:88;5796:4;5793:1;5786:15;5824:4;5821:1;5814:15;5621:218;;5408:437;;;:::o;5850:184::-;5902:77;5899:1;5892:88;5999:4;5996:1;5989:15;6023:4;6020:1;6013:15;6039:168;6112:9;;;6143;;6160:15;;;6154:22;;6140:37;6130:71;;6181:18;;:::i;6212:274::-;6252:1;6278;6268:189;;6313:77;6310:1;6303:88;6414:4;6411:1;6404:15;6442:4;6439:1;6432:15;6268:189;-1:-1:-1;6471:9:1;;6212:274::o;6793:277::-;6860:6;6913:2;6901:9;6892:7;6888:23;6884:32;6881:52;;;6929:1;6926;6919:12;6881:52;6961:9;6955:16;7014:5;7007:13;7000:21;6993:5;6990:32;6980:60;;7036:1;7033;7026:12;7075:184;7145:6;7198:2;7186:9;7177:7;7173:23;7169:32;7166:52;;;7214:1;7211;7204:12;7166:52;-1:-1:-1;7237:16:1;;7075:184;-1:-1:-1;7075:184:1:o;7264:125::-;7329:9;;;7350:10;;;7347:36;;;7363:18;;:::i;7394:184::-;7446:77;7443:1;7436:88;7543:4;7540:1;7533:15;7567:4;7564:1;7557:15;7583:195;7622:3;7653:66;7646:5;7643:77;7640:103;;7723:18;;:::i;:::-;-1:-1:-1;7770:1:1;7759:13;;7583:195::o;11237:128::-;11304:9;;;11325:11;;;11322:37;;;11339:18;;:::i;12776:1026::-;13038:4;13086:3;13075:9;13071:19;13117:6;13106:9;13099:25;13143:2;13181:6;13176:2;13165:9;13161:18;13154:34;13224:3;13219:2;13208:9;13204:18;13197:31;13248:6;13283;13277:13;13314:6;13306;13299:22;13352:3;13341:9;13337:19;13330:26;;13391:2;13383:6;13379:15;13365:29;;13412:1;13422:218;13436:6;13433:1;13430:13;13422:218;;;13501:13;;13516:42;13497:62;13485:75;;13615:15;;;;13580:12;;;;13458:1;13451:9;13422:218;;;-1:-1:-1;;13708:42:1;13696:55;;;;13691:2;13676:18;;13669:83;-1:-1:-1;;;13783:3:1;13768:19;13761:35;13657:3;12776:1026;-1:-1:-1;;;12776:1026:1:o

Swarm Source

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