ETH Price: $3,652.37 (+2.03%)
Gas: 6.12 Gwei

Token

Meowshi (MEOW)
 

Overview

Max Total Supply

4,229,193,385.539593238895165122 MEOW

Holders

396 (0.00%)

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
1-3-3-7.eth
Balance
1.1 MEOW

Value
$0.00
0xe76d4165967fb1ed8d5a56d5dea87e3bc8ecd3ac
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

A tool to help SushiSwap users stake their Sushi or xSushi into the BentoBox vault. This token is also given Snapshot voting weight on the sushigov.eth polling application and can be burned to claim combined yields from xSushi 'SushiBar' and BentoBox.

# Exchange Pair Price  24H Volume % Volume
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.

Contract Source Code Verified (Exact Match)

Contract Name:
Meowshi

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-06-01
*/

// SPDX-License-Identifier: UNLICENSED
// @title Meowshi (MEOW) 🐈 🍣 🍱
// @author Gatoshi Nyakamoto

pragma solidity 0.8.4;

/// @notice Interface for depositing into & withdrawing from BentoBox vault.
interface IERC20{} interface IBentoBoxBasic {
    function deposit( 
        IERC20 token_,
        address from,
        address to,
        uint256 amount,
        uint256 share
    ) external payable returns (uint256 amountOut, uint256 shareOut);

    function withdraw(
        IERC20 token_,
        address from,
        address to,
        uint256 amount,
        uint256 share
    ) external returns (uint256 amountOut, uint256 shareOut);
}

/// @notice Interface for depositing into & withdrawing from SushiBar.
interface ISushiBar { 
    function balanceOf(address account) external view returns (uint256);
    function enter(uint256 amount) external;
    function leave(uint256 share) external;
    function approve(address spender, uint256 amount) external returns (bool);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
}

/// @notice Meowshi takes SUSHI/xSUSHI to mint governing MEOW tokens that can be burned to claim SUSHI/xSUSHI from BENTO with yields.
//  ៱˳_˳៱   ∫
contract Meowshi {
    IBentoBoxBasic constant bento = IBentoBoxBasic(0xF5BCE5077908a1b7370B9ae04AdC565EBd643966); // BENTO vault contract (multinet)
    ISushiBar constant sushiToken = ISushiBar(0x6B3595068778DD592e39A122f4f5a5cF09C90fE2); // SUSHI token contract (mainnet)
    address constant sushiBar = 0x8798249c2E607446EfB7Ad49eC89dD1865Ff4272; // xSUSHI token contract for staking SUSHI (mainnet)
    string constant public name = "Meowshi";
    string constant public symbol = "MEOW";
    uint8 constant public decimals = 18;
    uint256 constant multiplier = 100_000; // 1 xSUSHI BENTO share = 100,000 MEOW
    uint256 public totalSupply;
    
    /// @notice owner -> spender -> allowance mapping.
    mapping(address => mapping(address => uint256)) public allowance;
    /// @notice owner -> balance mapping.
    mapping(address => uint256) public balanceOf;
    /// @notice owner -> nonce mapping used in {permit}.
    mapping(address => uint256) public nonces;
    /// @notice A record of each account's delegate.
    mapping(address => address) public delegates;
    /// @notice A record of votes checkpoints for each account, by index.
    mapping(address => mapping(uint32 => Checkpoint)) public checkpoints;
    /// @notice The number of checkpoints for each account.
    mapping(address => uint32) public numCheckpoints;
    /// @notice The ERC-712 typehash for this contract's domain.
    bytes32 constant DOMAIN_TYPEHASH = keccak256("EIP712Domain(string name,uint256 chainId,address verifyingContract)");
    /// @notice The ERC-712 typehash for the delegation struct used by the contract.
    bytes32 constant DELEGATION_TYPEHASH = keccak256("Delegation(address delegatee,uint256 nonce,uint256 expiry)");
    /// @notice The ERC-712 typehash for the permit struct used by the contract.
    bytes32 constant PERMIT_TYPEHASH = keccak256("Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)");
    /// @notice Events that are emitted when an ERC-20 approval or transfer occurs. 
    event Approval(address indexed owner, address indexed spender, uint256 amount);
    event Transfer(address indexed from, address indexed to, uint256 amount);
    /// @notice An event that's emitted when an account changes its delegate.
    event DelegateChanged(address indexed delegator, address indexed fromDelegate, address indexed toDelegate);
    /// @notice An event that's emitted when a delegate account's vote balance changes.
    event DelegateVotesChanged(address indexed delegate, uint256 previousBalance, uint256 newBalance);
    
    /// @notice A checkpoint for marking number of votes from a given block.
    struct Checkpoint {
        uint32 fromBlock;
        uint256 votes;
    }
    
    constructor() {
        sushiToken.approve(sushiBar, type(uint256).max); // max {approve} xSUSHI to draw SUSHI from this contract
        ISushiBar(sushiBar).approve(address(bento), type(uint256).max); // max {approve} BENTO to draw xSUSHI from this contract
    }

    /*************
    MEOW FUNCTIONS
    *************/
    // **** xSUSHI
    /// @notice Enter Meowshi. Deposit xSUSHI `amount`. Mint MEOW for `to`.
    function meow(address to, uint256 amount) external returns (uint256 shares) {
        ISushiBar(sushiBar).transferFrom(msg.sender, address(bento), amount); // forward to BENTO for skim
        (, shares) = bento.deposit(IERC20(sushiBar), address(bento), address(this), amount, 0);
        meowMint(to, shares * multiplier);
    }

    /// @notice Leave Meowshi. Burn MEOW `amount`. Claim xSUSHI for `to`.
    function unmeow(address to, uint256 amount) external returns (uint256 amountOut) {
        meowBurn(amount);
        unchecked {(amountOut, ) = bento.withdraw(IERC20(sushiBar), address(this), to, 0, amount / multiplier);}
    }
    
    // **** SUSHI
    /// @notice Enter Meowshi. Deposit SUSHI `amount`. Mint MEOW for `to`.
    function meowSushi(address to, uint256 amount) external returns (uint256 shares) {
        sushiToken.transferFrom(msg.sender, address(this), amount);
        ISushiBar(sushiBar).enter(amount);
        (, shares) = bento.deposit(IERC20(sushiBar), address(this), address(this), ISushiBar(sushiBar).balanceOf(address(this)), 0);
        meowMint(to, shares * multiplier);
    }

    /// @notice Leave Meowshi. Burn MEOW `amount`. Claim SUSHI for `to`.
    function unmeowSushi(address to, uint256 amount) external returns (uint256 amountOut) {
        meowBurn(amount);
        unchecked {(amountOut, ) = bento.withdraw(IERC20(sushiBar), address(this), address(this), 0, amount / multiplier);}
        ISushiBar(sushiBar).leave(amountOut);
        sushiToken.transfer(to, sushiToken.balanceOf(address(this))); 
    }

    // **** SUPPLY MGMT
    /// @notice Internal mint function for *meow*.
    function meowMint(address to, uint256 amount) private {
        balanceOf[to] += amount;
        totalSupply += amount;
        _moveDelegates(address(0), delegates[to], amount);
        emit Transfer(address(0), to, amount);
    }
    
    /// @notice Internal burn function for *unmeow*.
    function meowBurn(uint256 amount) private {
        balanceOf[msg.sender] -= amount;
        unchecked {totalSupply -= amount;}
        _moveDelegates(delegates[msg.sender], address(0), amount);
        emit Transfer(msg.sender, address(0), amount);
    }
    
    /**************
    TOKEN FUNCTIONS
    **************/
    /// @notice Approves `amount` from msg.sender to be spent by `spender`.
    /// @param spender Address of the party that can draw tokens from msg.sender's account.
    /// @param amount The maximum collective `amount` that `spender` can draw.
    /// @return (bool) Returns 'true' if succeeded.
    function approve(address spender, uint256 amount) external returns (bool) {
        allowance[msg.sender][spender] = amount;
        emit Approval(msg.sender, spender, amount);
        return true;
    }

    /// @notice Triggers an approval from owner to spends.
    /// @param owner The address to approve from.
    /// @param spender The address to be approved.
    /// @param amount The number of tokens that are approved (2^256-1 means infinite).
    /// @param deadline The time at which to expire the signature.
    /// @param v The recovery byte of the signature.
    /// @param r Half of the ECDSA signature pair.
    /// @param s Half of the ECDSA signature pair.
    function permit(address owner, address spender, uint256 amount, uint deadline, uint8 v, bytes32 r, bytes32 s) external {
        bytes32 domainSeparator = keccak256(abi.encode(DOMAIN_TYPEHASH, keccak256(bytes(name)), getChainId(), address(this)));
        unchecked {bytes32 structHash = keccak256(abi.encode(PERMIT_TYPEHASH, owner, spender, amount, nonces[owner]++, deadline));
        bytes32 digest = keccak256(abi.encodePacked("\x19\x01", domainSeparator, structHash));
        address signatory = ecrecover(digest, v, r, s); 
        require(signatory != address(0), 'Meowshi::permit: invalid signature');
        require(signatory == owner, 'Meowshi::permit: unauthorized');}
        require(block.timestamp <= deadline, 'Meowshi::permit: signature expired');
        allowance[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }
    
    /// @notice Transfers `amount` tokens from `msg.sender` to `to`.
    /// @param to The address to move tokens `to`.
    /// @param amount The token `amount` to move.
    /// @return (bool) Returns 'true' if succeeded.
    function transfer(address to, uint256 amount) external returns (bool) {
        balanceOf[msg.sender] -= amount; 
        unchecked {balanceOf[to] += amount;}
        _moveDelegates(delegates[msg.sender], delegates[to], amount);
        emit Transfer(msg.sender, to, amount);
        return true;
    }

    /// @notice Transfers `amount` tokens from `from` to `to`. Caller needs approval from `from`.
    /// @param from Address to draw tokens `from`.
    /// @param to The address to move tokens `to`.
    /// @param amount The token `amount` to move.
    /// @return (bool) Returns 'true' if succeeded.
    function transferFrom(address from, address to, uint256 amount) external returns (bool) {
        if (allowance[from][msg.sender] != type(uint256).max) {
            allowance[from][msg.sender] -= amount;
        }
        balanceOf[from] -= amount;
        unchecked {balanceOf[to] += amount;}
        _moveDelegates(delegates[from], delegates[to], amount);
        emit Transfer(from, to, amount);
        return true;
    }
    
    /*******************
    DELEGATION FUNCTIONS
    *******************/
    /// @notice Delegate votes from `msg.sender` to `delegatee`.
    /// @param delegatee The address to delegate votes to.
    function delegate(address delegatee) external {
        return _delegate(msg.sender, delegatee);
    }

    /// @notice Delegates votes from signatory to `delegatee`.
    /// @param delegatee The address to delegate votes to.
    /// @param nonce The contract state required to match the signature.
    /// @param expiry The time at which to expire the signature.
    /// @param v The recovery byte of the signature.
    /// @param r Half of the ECDSA signature pair.
    /// @param s Half of the ECDSA signature pair.
    function delegateBySig(address delegatee, uint256 nonce, uint256 expiry, uint8 v, bytes32 r, bytes32 s) external {
        bytes32 domainSeparator = keccak256(abi.encode(DOMAIN_TYPEHASH, keccak256(bytes(name)), getChainId(), address(this)));
        bytes32 structHash = keccak256(abi.encode(DELEGATION_TYPEHASH, delegatee, nonce, expiry));
        bytes32 digest = keccak256(abi.encodePacked("\x19\x01", domainSeparator, structHash));
        address signatory = ecrecover(digest, v, r, s);
        require(signatory != address(0), 'Meowshi::delegateBySig: invalid signature');
        unchecked {require(nonce == nonces[signatory]++, 'Meowshi::delegateBySig: invalid nonce');}
        require(block.timestamp <= expiry, 'Meowshi::delegateBySig: signature expired');
        return _delegate(signatory, delegatee);
    }
    
    /***************
    GETTER FUNCTIONS
    ***************/
    /// @notice Get current chain. 
    function getChainId() private view returns (uint256) {
        uint256 chainId;
        assembly {chainId := chainid()}
        return chainId;
    }

    /// @notice Gets the current votes balance for `account`.
    /// @param account The address to get votes balance.
    /// @return The number of current votes for `account`.
    function getCurrentVotes(address account) external view returns (uint256) {
        unchecked {uint32 nCheckpoints = numCheckpoints[account];
        return nCheckpoints > 0 ? checkpoints[account][nCheckpoints - 1].votes : 0;}
    }

    /// @notice Determine the prior number of votes for an `account` as of a block number.
    /// @dev Block number must be a finalized block or else this function will revert to prevent misinformation.
    /// @param account The address of the `account` to check.
    /// @param blockNumber The block number to get the vote balance at.
    /// @return The number of votes the `account` had as of the given block.
    function getPriorVotes(address account, uint256 blockNumber) external view returns (uint256) {
        require(blockNumber < block.number, 'Meowshi::getPriorVotes: not yet determined');
        uint32 nCheckpoints = numCheckpoints[account];
        if (nCheckpoints == 0) {return 0;}
        unchecked {
        // @dev First check most recent balance.
        if (checkpoints[account][nCheckpoints - 1].fromBlock <= blockNumber) {return checkpoints[account][nCheckpoints - 1].votes;}
        // @dev Next check implicit zero balance.
        if (checkpoints[account][0].fromBlock > blockNumber) {return 0;}
        uint32 lower = 0;
        uint32 upper = nCheckpoints - 1;
        while (upper > lower) {
            uint32 center = upper - (upper - lower) / 2; // avoiding overflow
            Checkpoint memory cp = checkpoints[account][center];
            if (cp.fromBlock == blockNumber) {
                return cp.votes;
            } else if (cp.fromBlock < blockNumber) {
                lower = center;
            } else {upper = center - 1;}}
        return checkpoints[account][lower].votes;}
    }
    
    /***************
    HELPER FUNCTIONS
    ***************/
    function _delegate(address delegator, address delegatee) private {
        address currentDelegate = delegates[delegator]; 
        uint256 delegatorBalance = balanceOf[delegator];
        delegates[delegator] = delegatee;
        emit DelegateChanged(delegator, currentDelegate, delegatee);
        _moveDelegates(currentDelegate, delegatee, delegatorBalance);
    }

    function _moveDelegates(address srcRep, address dstRep, uint256 amount) private {
        unchecked {
        if (srcRep != dstRep && amount > 0) {
            if (srcRep != address(0)) {
                uint32 srcRepNum = numCheckpoints[srcRep];
                uint256 srcRepOld = srcRepNum > 0 ? checkpoints[srcRep][srcRepNum - 1].votes : 0;
                uint256 srcRepNew = srcRepOld - amount;
                _writeCheckpoint(srcRep, srcRepNum, srcRepOld, srcRepNew);
            }
            if (dstRep != address(0)) {
                uint32 dstRepNum = numCheckpoints[dstRep];
                uint256 dstRepOld = dstRepNum > 0 ? checkpoints[dstRep][dstRepNum - 1].votes : 0;
                uint256 dstRepNew = dstRepOld + amount;
                _writeCheckpoint(dstRep, dstRepNum, dstRepOld, dstRepNew);
            }
        }}
    }
    
    function _writeCheckpoint(address delegatee, uint32 nCheckpoints, uint256 oldVotes, uint256 newVotes) private {
        uint32 blockNumber = safe32(block.number);
        unchecked {
        if (nCheckpoints > 0 && checkpoints[delegatee][nCheckpoints - 1].fromBlock == blockNumber) {
            checkpoints[delegatee][nCheckpoints - 1].votes = newVotes;
        } else {
            checkpoints[delegatee][nCheckpoints] = Checkpoint(blockNumber, newVotes);
            numCheckpoints[delegatee] = nCheckpoints + 1;
        }}
        emit DelegateVotesChanged(delegatee, oldVotes, newVotes);
    }
    
    /// @notice Enables calling multiple methods in a single call to this contract.
    function multicall(bytes[] calldata data) external returns (bytes[] memory results) {
        results = new bytes[](data.length);
        unchecked {
        for (uint256 i = 0; i < data.length; i++) {
            (bool success, bytes memory result) = address(this).delegatecall(data[i]);
            if (!success) {
                if (result.length < 68) revert();
                assembly {result := add(result, 0x04)}
                revert(abi.decode(result, (string)));
            }
            results[i] = result;
        }}
    }
    
    function safe32(uint256 n) private pure returns (uint32) {
        require(n < 2**32, 'Meowshi::_writeCheckpoint: block number exceeds 32 bits'); return uint32(n);}
}

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":"amount","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"delegator","type":"address"},{"indexed":true,"internalType":"address","name":"fromDelegate","type":"address"},{"indexed":true,"internalType":"address","name":"toDelegate","type":"address"}],"name":"DelegateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"delegate","type":"address"},{"indexed":false,"internalType":"uint256","name":"previousBalance","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newBalance","type":"uint256"}],"name":"DelegateVotesChanged","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":"amount","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","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":"","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint32","name":"","type":"uint32"}],"name":"checkpoints","outputs":[{"internalType":"uint32","name":"fromBlock","type":"uint32"},{"internalType":"uint256","name":"votes","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"delegatee","type":"address"}],"name":"delegate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"delegatee","type":"address"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"uint256","name":"expiry","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"delegateBySig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"delegates","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getCurrentVotes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"blockNumber","type":"uint256"}],"name":"getPriorVotes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"meow","outputs":[{"internalType":"uint256","name":"shares","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"meowSushi","outputs":[{"internalType":"uint256","name":"shares","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes[]","name":"data","type":"bytes[]"}],"name":"multicall","outputs":[{"internalType":"bytes[]","name":"results","type":"bytes[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"numCheckpoints","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"permit","outputs":[],"stateMutability":"nonpayable","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":"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":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"unmeow","outputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"unmeowSushi","outputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"}],"stateMutability":"nonpayable","type":"function"}]

60806040523480156200001157600080fd5b5060405163095ea7b360e01b8152738798249c2e607446efb7ad49ec89dd1865ff427260048201526000196024820152736b3595068778dd592e39a122f4f5a5cf09c90fe29063095ea7b390604401602060405180830381600087803b1580156200007b57600080fd5b505af115801562000090573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000b6919062000162565b5060405163095ea7b360e01b815273f5bce5077908a1b7370b9ae04adc565ebd64396660048201526000196024820152738798249c2e607446efb7ad49ec89dd1865ff42729063095ea7b390604401602060405180830381600087803b1580156200012057600080fd5b505af115801562000135573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200015b919062000162565b506200018b565b60006020828403121562000174578081fd5b8151801515811462000184578182fd5b9392505050565b6120a4806200019b6000396000f3fe608060405234801561001057600080fd5b506004361061014d5760003560e01c806370a08231116100c3578063b4b5ea571161007c578063b4b5ea5714610368578063c3cda5201461037b578063d505accf1461038e578063dd62ed3e146103a1578063e6ff41eb146103cc578063f1127ed8146103df57600080fd5b806370a08231146102bf578063782d6fe1146102df5780637ecebe00146102f257806395d89b4114610312578063a9059cbb14610335578063ac9650d81461034857600080fd5b8063313ce56711610115578063313ce567146101ee5780633c0adb6814610208578063587cde1e1461021b5780635c19a95c1461025c578063642ed500146102715780636fcfff451461028457600080fd5b806306fdde0314610152578063095ea7b31461018e57806318160ddd146101b15780631b04a34f146101c857806323b872dd146101db575b600080fd5b610178604051806040016040528060078152602001664d656f7773686960c81b81525081565b6040516101859190611f49565b60405180910390f35b6101a161019c366004611c46565b610436565b6040519015158152602001610185565b6101ba60005481565b604051908152602001610185565b6101ba6101d6366004611c46565b6104a3565b6101a16101e9366004611ba2565b610560565b6101f6601281565b60405160ff9091168152602001610185565b6101ba610216366004611c46565b61067c565b610244610229366004611b56565b6004602052600090815260409020546001600160a01b031681565b6040516001600160a01b039091168152602001610185565b61026f61026a366004611b56565b6108a7565b005b6101ba61027f366004611c46565b6108b4565b6102aa610292366004611b56565b60066020526000908152604090205463ffffffff1681565b60405163ffffffff9091168152602001610185565b6101ba6102cd366004611b56565b60026020526000908152604090205481565b6101ba6102ed366004611c46565b610ae3565b6101ba610300366004611b56565b60036020526000908152604090205481565b610178604051806040016040528060048152602001634d454f5760e01b81525081565b6101a1610343366004611c46565b610d0f565b61035b610356366004611d04565b610da3565b6040516101859190611eb4565b6101ba610376366004611b56565b610f13565b61026f610389366004611c6f565b610f77565b61026f61039c366004611bdd565b611264565b6101ba6103af366004611b70565b600160209081526000928352604080842090915290825290205481565b6101ba6103da366004611c46565b61159e565b61041a6103ed366004611cc6565b60056020908152600092835260408084209091529082529020805460019091015463ffffffff9091169082565b6040805163ffffffff9093168352602083019190915201610185565b3360008181526001602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906104919086815260200190565b60405180910390a35060015b92915050565b60006104ae8261169a565b60405163097da6d360e41b815273f5bce5077908a1b7370b9ae04adc565ebd643966906397da6d309061050790738798249c2e607446efb7ad49ec89dd1865ff42729030908890600090620186a08a0490600401611f15565b6040805180830381600087803b15801561052057600080fd5b505af1158015610534573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105589190611e55565b509392505050565b6001600160a01b0383166000908152600160209081526040808320338452909152812054600019146105c5576001600160a01b0384166000908152600160209081526040808320338452909152812080548492906105bf908490611fdf565b90915550505b6001600160a01b038416600090815260026020526040812080548492906105ed908490611fdf565b90915550506001600160a01b038084166000818152600260209081526040808320805488019055888516835260049091528082205492825290205461063792918216911684611713565b826001600160a01b0316846001600160a01b031660008051602061204f8339815191528460405161066a91815260200190565b60405180910390a35060019392505050565b6040516323b872dd60e01b815233600482015230602482015260448101829052600090736b3595068778dd592e39a122f4f5a5cf09c90fe2906323b872dd90606401602060405180830381600087803b1580156106d857600080fd5b505af11580156106ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107109190611d74565b50604051632967cf8360e21b815260048101839052738798249c2e607446efb7ad49ec89dd1865ff42729063a59f3e0c90602401600060405180830381600087803b15801561075e57600080fd5b505af1158015610772573d6000803e3d6000fd5b50506040516370a0823160e01b8152306004820181905273f5bce5077908a1b7370b9ae04adc565ebd64396693506302b9446c9250738798249c2e607446efb7ad49ec89dd1865ff427291819083906370a082319060240160206040518083038186803b1580156107e257600080fd5b505afa1580156107f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061081a9190611e3d565b60006040518663ffffffff1660e01b815260040161083c959493929190611f15565b6040805180830381600087803b15801561085557600080fd5b505af1158015610869573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061088d9190611e55565b915061049d9050836108a2620186a084611fc0565b61183f565b6108b133826118dc565b50565b60006108bf8261169a565b60405163097da6d360e41b815273f5bce5077908a1b7370b9ae04adc565ebd643966906397da6d309061091890738798249c2e607446efb7ad49ec89dd1865ff42729030908190600090620186a08a0490600401611f15565b6040805180830381600087803b15801561093157600080fd5b505af1158015610945573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109699190611e55565b506040516367dfd4c960e01b815260048101829052909150738798249c2e607446efb7ad49ec89dd1865ff4272906367dfd4c990602401600060405180830381600087803b1580156109ba57600080fd5b505af11580156109ce573d6000803e3d6000fd5b50506040516370a0823160e01b8152306004820152736b3595068778dd592e39a122f4f5a5cf09c90fe2925063a9059cbb9150859083906370a082319060240160206040518083038186803b158015610a2657600080fd5b505afa158015610a3a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a5e9190611e3d565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381600087803b158015610aa457600080fd5b505af1158015610ab8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610adc9190611d74565b5092915050565b6000438210610b4c5760405162461bcd60e51b815260206004820152602a60248201527f4d656f777368693a3a6765745072696f72566f7465733a206e6f74207965742060448201526919195d195c9b5a5b995960b21b60648201526084015b60405180910390fd5b6001600160a01b03831660009081526006602052604090205463ffffffff1680610b7a57600091505061049d565b6001600160a01b038416600090815260056020908152604080832063ffffffff600019860181168552925290912054168310610be9576001600160a01b03841660009081526005602090815260408083206000199490940163ffffffff1683529290522060010154905061049d565b6001600160a01b038416600090815260056020908152604080832083805290915290205463ffffffff16831015610c2457600091505061049d565b600060001982015b8163ffffffff168163ffffffff161115610cd8576000600263ffffffff848403166001600160a01b038916600090815260056020908152604080832094909304860363ffffffff8181168452948252918390208351808501909452805490941680845260019094015490830152925090871415610cb35760200151945061049d9350505050565b805163ffffffff16871115610cca57819350610cd1565b6001820392505b5050610c2c565b506001600160a01b038516600090815260056020908152604080832063ffffffff9094168352929052206001015491505092915050565b33600090815260026020526040812080548391908390610d30908490611fdf565b90915550506001600160a01b038084166000818152600260209081526040808320805488019055338352600490915280822054928252902054610d7892918216911684611713565b6040518281526001600160a01b03841690339060008051602061204f83398151915290602001610491565b60608167ffffffffffffffff811115610dcc57634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015610dff57816020015b6060815260200190600190039081610dea5790505b50905060005b82811015610adc5760008030868685818110610e3157634e487b7160e01b600052603260045260246000fd5b9050602002810190610e439190611f5c565b604051610e51929190611ea4565b600060405180830381855af49150503d8060008114610e8c576040519150601f19603f3d011682016040523d82523d6000602084013e610e91565b606091505b509150915081610edd57604481511015610eaa57600080fd5b60048101905080806020019051810190610ec49190611d94565b60405162461bcd60e51b8152600401610b439190611f49565b80848481518110610efe57634e487b7160e01b600052603260045260246000fd5b60209081029190910101525050600101610e05565b6001600160a01b03811660009081526006602052604081205463ffffffff1680610f3e576000610f70565b6001600160a01b038316600090815260056020908152604080832063ffffffff60001986011684529091529020600101545b9392505050565b60408051808201825260078152664d656f7773686960c81b60209182015281517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866818301527fb2519001d922cc8f01da040a1ebf40356f395758595af77f4a075390db7ffeeb81840152466060820152306080808301919091528351808303909101815260a0820184528051908301207fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf60c08301526001600160a01b038a1660e083015261010082018990526101208083018990528451808403909101815261014083019094528351939092019290922061190160f01b6101608401526101628301829052610182830181905290916000906101a20160408051601f198184030181528282528051602091820120600080855291840180845281905260ff8a169284019290925260608301889052608083018790529092509060019060a0016020604051602081039080840390855afa1580156110f9573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661116e5760405162461bcd60e51b815260206004820152602960248201527f4d656f777368693a3a64656c656761746542795369673a20696e76616c6964206044820152687369676e617475726560b81b6064820152608401610b43565b6001600160a01b038116600090815260036020526040902080546001810190915589146111eb5760405162461bcd60e51b815260206004820152602560248201527f4d656f777368693a3a64656c656761746542795369673a20696e76616c6964206044820152646e6f6e636560d81b6064820152608401610b43565b8742111561124d5760405162461bcd60e51b815260206004820152602960248201527f4d656f777368693a3a64656c656761746542795369673a207369676e617475726044820152681948195e1c1a5c995960ba1b6064820152608401610b43565b611257818b6118dc565b505050505b505050505050565b60408051808201825260078152664d656f7773686960c81b60209182015281517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866818301527fb2519001d922cc8f01da040a1ebf40356f395758595af77f4a075390db7ffeeb81840152466060820152306080808301919091528351808303909101815260a0820184528051908301206001600160a01b038b81166000818152600386528681208054600181019091557f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c960c087015260e0860192909252918c1661010085015261012084018b90526101408401526101608084018a90528551808503909101815261018084019095528451949093019390932061190160f01b6101a08301526101a282018490526101c2820181905291906101e20160408051601f198184030181528282528051602091820120600080855291840180845281905260ff8a169284019290925260608301889052608083018790529092509060019060a0016020604051602081039080840390855afa15801561140b573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166114795760405162461bcd60e51b815260206004820152602260248201527f4d656f777368693a3a7065726d69743a20696e76616c6964207369676e617475604482015261726560f01b6064820152608401610b43565b8a6001600160a01b0316816001600160a01b0316146114da5760405162461bcd60e51b815260206004820152601d60248201527f4d656f777368693a3a7065726d69743a20756e617574686f72697a65640000006044820152606401610b43565b505050844211156115385760405162461bcd60e51b815260206004820152602260248201527f4d656f777368693a3a7065726d69743a207369676e6174757265206578706972604482015261195960f21b6064820152608401610b43565b6001600160a01b038881166000818152600160209081526040808320948c16808452948252918290208a905590518981527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a35050505050505050565b6040516323b872dd60e01b815233600482015273f5bce5077908a1b7370b9ae04adc565ebd643966602482015260448101829052600090738798249c2e607446efb7ad49ec89dd1865ff4272906323b872dd90606401602060405180830381600087803b15801561160e57600080fd5b505af1158015611622573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116469190611d74565b5060405162ae511b60e21b815273f5bce5077908a1b7370b9ae04adc565ebd643966906302b9446c9061083c90738798249c2e607446efb7ad49ec89dd1865ff427290849030908890600090600401611f15565b33600090815260026020526040812080548392906116b9908490611fdf565b9091555050600080548290038155338152600460205260408120546116ea916001600160a01b039091169083611713565b604051818152600090339060008051602061204f8339815191529060200160405180910390a350565b816001600160a01b0316836001600160a01b0316141580156117355750600081115b1561183a576001600160a01b038316156117bc576001600160a01b03831660009081526006602052604081205463ffffffff1690816117755760006117a7565b6001600160a01b038516600090815260056020908152604080832063ffffffff60001987011684529091529020600101545b90508281036117b88684848461195c565b5050505b6001600160a01b0382161561183a576001600160a01b03821660009081526006602052604081205463ffffffff1690816117f7576000611829565b6001600160a01b038416600090815260056020908152604080832063ffffffff60001987011684529091529020600101545b905082810161125c8584848461195c565b505050565b6001600160a01b03821660009081526002602052604081208054839290611867908490611fa8565b925050819055508060008082825461187f9190611fa8565b90915550506001600160a01b038083166000908152600460205260408120546118a9921683611713565b6040518181526001600160a01b0383169060009060008051602061204f8339815191529060200160405180910390a35050565b6001600160a01b03808316600081815260046020818152604080842080546002845282862054949093528787166001600160a01b03198416811790915590519190951694919391928592917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a4611956828483611713565b50505050565b600061196743611aa9565b905060008463ffffffff161180156119b057506001600160a01b038516600090815260056020908152604080832063ffffffff6000198901811685529252909120548282169116145b156119ed576001600160a01b038516600090815260056020908152604080832063ffffffff60001989011684529091529020600101829055611a5e565b60408051808201825263ffffffff808416825260208083018681526001600160a01b038a166000818152600584528681208b8616825284528681209551865490861663ffffffff19918216178755925160019687015590815260069092529390208054928801909116919092161790555b60408051848152602081018490526001600160a01b038716917fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724910160405180910390a25050505050565b60006401000000008210611b255760405162461bcd60e51b815260206004820152603760248201527f4d656f777368693a3a5f7772697465436865636b706f696e743a20626c6f636b60448201527f206e756d626572206578636565647320333220626974730000000000000000006064820152608401610b43565b5090565b80356001600160a01b0381168114611b4057600080fd5b919050565b803560ff81168114611b4057600080fd5b600060208284031215611b67578081fd5b610f7082611b29565b60008060408385031215611b82578081fd5b611b8b83611b29565b9150611b9960208401611b29565b90509250929050565b600080600060608486031215611bb6578081fd5b611bbf84611b29565b9250611bcd60208501611b29565b9150604084013590509250925092565b600080600080600080600060e0888a031215611bf7578283fd5b611c0088611b29565b9650611c0e60208901611b29565b95506040880135945060608801359350611c2a60808901611b45565b925060a0880135915060c0880135905092959891949750929550565b60008060408385031215611c58578182fd5b611c6183611b29565b946020939093013593505050565b60008060008060008060c08789031215611c87578182fd5b611c9087611b29565b95506020870135945060408701359350611cac60608801611b45565b92506080870135915060a087013590509295509295509295565b60008060408385031215611cd8578182fd5b611ce183611b29565b9150602083013563ffffffff81168114611cf9578182fd5b809150509250929050565b60008060208385031215611d16578182fd5b823567ffffffffffffffff80821115611d2d578384fd5b818501915085601f830112611d40578384fd5b813581811115611d4e578485fd5b8660208260051b8501011115611d62578485fd5b60209290920196919550909350505050565b600060208284031215611d85578081fd5b81518015158114610f70578182fd5b600060208284031215611da5578081fd5b815167ffffffffffffffff80821115611dbc578283fd5b818401915084601f830112611dcf578283fd5b815181811115611de157611de1612038565b604051601f8201601f19908116603f01168101908382118183101715611e0957611e09612038565b81604052828152876020848701011115611e21578586fd5b611e32836020830160208801611ff6565b979650505050505050565b600060208284031215611e4e578081fd5b5051919050565b60008060408385031215611e67578182fd5b505080516020909101519092909150565b60008151808452611e90816020860160208601611ff6565b601f01601f19169290920160200192915050565b8183823760009101908152919050565b6000602080830181845280855180835260408601915060408160051b8701019250838701855b82811015611f0857603f19888603018452611ef6858351611e78565b94509285019290850190600101611eda565b5092979650505050505050565b6001600160a01b03958616815293851660208501529190931660408301526060820192909252608081019190915260a00190565b602081526000610f706020830184611e78565b6000808335601e19843603018112611f72578283fd5b83018035915067ffffffffffffffff821115611f8c578283fd5b602001915036819003821315611fa157600080fd5b9250929050565b60008219821115611fbb57611fbb612022565b500190565b6000816000190483118215151615611fda57611fda612022565b500290565b600082821015611ff157611ff1612022565b500390565b60005b83811015612011578181015183820152602001611ff9565b838111156119565750506000910152565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fdfeddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa264697066735822122035b0fe5adbdae498498519145e816863e43ce263ac09956b745a7b88ea999a1f64736f6c63430008040033

Deployed Bytecode

0x608060405234801561001057600080fd5b506004361061014d5760003560e01c806370a08231116100c3578063b4b5ea571161007c578063b4b5ea5714610368578063c3cda5201461037b578063d505accf1461038e578063dd62ed3e146103a1578063e6ff41eb146103cc578063f1127ed8146103df57600080fd5b806370a08231146102bf578063782d6fe1146102df5780637ecebe00146102f257806395d89b4114610312578063a9059cbb14610335578063ac9650d81461034857600080fd5b8063313ce56711610115578063313ce567146101ee5780633c0adb6814610208578063587cde1e1461021b5780635c19a95c1461025c578063642ed500146102715780636fcfff451461028457600080fd5b806306fdde0314610152578063095ea7b31461018e57806318160ddd146101b15780631b04a34f146101c857806323b872dd146101db575b600080fd5b610178604051806040016040528060078152602001664d656f7773686960c81b81525081565b6040516101859190611f49565b60405180910390f35b6101a161019c366004611c46565b610436565b6040519015158152602001610185565b6101ba60005481565b604051908152602001610185565b6101ba6101d6366004611c46565b6104a3565b6101a16101e9366004611ba2565b610560565b6101f6601281565b60405160ff9091168152602001610185565b6101ba610216366004611c46565b61067c565b610244610229366004611b56565b6004602052600090815260409020546001600160a01b031681565b6040516001600160a01b039091168152602001610185565b61026f61026a366004611b56565b6108a7565b005b6101ba61027f366004611c46565b6108b4565b6102aa610292366004611b56565b60066020526000908152604090205463ffffffff1681565b60405163ffffffff9091168152602001610185565b6101ba6102cd366004611b56565b60026020526000908152604090205481565b6101ba6102ed366004611c46565b610ae3565b6101ba610300366004611b56565b60036020526000908152604090205481565b610178604051806040016040528060048152602001634d454f5760e01b81525081565b6101a1610343366004611c46565b610d0f565b61035b610356366004611d04565b610da3565b6040516101859190611eb4565b6101ba610376366004611b56565b610f13565b61026f610389366004611c6f565b610f77565b61026f61039c366004611bdd565b611264565b6101ba6103af366004611b70565b600160209081526000928352604080842090915290825290205481565b6101ba6103da366004611c46565b61159e565b61041a6103ed366004611cc6565b60056020908152600092835260408084209091529082529020805460019091015463ffffffff9091169082565b6040805163ffffffff9093168352602083019190915201610185565b3360008181526001602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906104919086815260200190565b60405180910390a35060015b92915050565b60006104ae8261169a565b60405163097da6d360e41b815273f5bce5077908a1b7370b9ae04adc565ebd643966906397da6d309061050790738798249c2e607446efb7ad49ec89dd1865ff42729030908890600090620186a08a0490600401611f15565b6040805180830381600087803b15801561052057600080fd5b505af1158015610534573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105589190611e55565b509392505050565b6001600160a01b0383166000908152600160209081526040808320338452909152812054600019146105c5576001600160a01b0384166000908152600160209081526040808320338452909152812080548492906105bf908490611fdf565b90915550505b6001600160a01b038416600090815260026020526040812080548492906105ed908490611fdf565b90915550506001600160a01b038084166000818152600260209081526040808320805488019055888516835260049091528082205492825290205461063792918216911684611713565b826001600160a01b0316846001600160a01b031660008051602061204f8339815191528460405161066a91815260200190565b60405180910390a35060019392505050565b6040516323b872dd60e01b815233600482015230602482015260448101829052600090736b3595068778dd592e39a122f4f5a5cf09c90fe2906323b872dd90606401602060405180830381600087803b1580156106d857600080fd5b505af11580156106ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107109190611d74565b50604051632967cf8360e21b815260048101839052738798249c2e607446efb7ad49ec89dd1865ff42729063a59f3e0c90602401600060405180830381600087803b15801561075e57600080fd5b505af1158015610772573d6000803e3d6000fd5b50506040516370a0823160e01b8152306004820181905273f5bce5077908a1b7370b9ae04adc565ebd64396693506302b9446c9250738798249c2e607446efb7ad49ec89dd1865ff427291819083906370a082319060240160206040518083038186803b1580156107e257600080fd5b505afa1580156107f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061081a9190611e3d565b60006040518663ffffffff1660e01b815260040161083c959493929190611f15565b6040805180830381600087803b15801561085557600080fd5b505af1158015610869573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061088d9190611e55565b915061049d9050836108a2620186a084611fc0565b61183f565b6108b133826118dc565b50565b60006108bf8261169a565b60405163097da6d360e41b815273f5bce5077908a1b7370b9ae04adc565ebd643966906397da6d309061091890738798249c2e607446efb7ad49ec89dd1865ff42729030908190600090620186a08a0490600401611f15565b6040805180830381600087803b15801561093157600080fd5b505af1158015610945573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109699190611e55565b506040516367dfd4c960e01b815260048101829052909150738798249c2e607446efb7ad49ec89dd1865ff4272906367dfd4c990602401600060405180830381600087803b1580156109ba57600080fd5b505af11580156109ce573d6000803e3d6000fd5b50506040516370a0823160e01b8152306004820152736b3595068778dd592e39a122f4f5a5cf09c90fe2925063a9059cbb9150859083906370a082319060240160206040518083038186803b158015610a2657600080fd5b505afa158015610a3a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a5e9190611e3d565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381600087803b158015610aa457600080fd5b505af1158015610ab8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610adc9190611d74565b5092915050565b6000438210610b4c5760405162461bcd60e51b815260206004820152602a60248201527f4d656f777368693a3a6765745072696f72566f7465733a206e6f74207965742060448201526919195d195c9b5a5b995960b21b60648201526084015b60405180910390fd5b6001600160a01b03831660009081526006602052604090205463ffffffff1680610b7a57600091505061049d565b6001600160a01b038416600090815260056020908152604080832063ffffffff600019860181168552925290912054168310610be9576001600160a01b03841660009081526005602090815260408083206000199490940163ffffffff1683529290522060010154905061049d565b6001600160a01b038416600090815260056020908152604080832083805290915290205463ffffffff16831015610c2457600091505061049d565b600060001982015b8163ffffffff168163ffffffff161115610cd8576000600263ffffffff848403166001600160a01b038916600090815260056020908152604080832094909304860363ffffffff8181168452948252918390208351808501909452805490941680845260019094015490830152925090871415610cb35760200151945061049d9350505050565b805163ffffffff16871115610cca57819350610cd1565b6001820392505b5050610c2c565b506001600160a01b038516600090815260056020908152604080832063ffffffff9094168352929052206001015491505092915050565b33600090815260026020526040812080548391908390610d30908490611fdf565b90915550506001600160a01b038084166000818152600260209081526040808320805488019055338352600490915280822054928252902054610d7892918216911684611713565b6040518281526001600160a01b03841690339060008051602061204f83398151915290602001610491565b60608167ffffffffffffffff811115610dcc57634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015610dff57816020015b6060815260200190600190039081610dea5790505b50905060005b82811015610adc5760008030868685818110610e3157634e487b7160e01b600052603260045260246000fd5b9050602002810190610e439190611f5c565b604051610e51929190611ea4565b600060405180830381855af49150503d8060008114610e8c576040519150601f19603f3d011682016040523d82523d6000602084013e610e91565b606091505b509150915081610edd57604481511015610eaa57600080fd5b60048101905080806020019051810190610ec49190611d94565b60405162461bcd60e51b8152600401610b439190611f49565b80848481518110610efe57634e487b7160e01b600052603260045260246000fd5b60209081029190910101525050600101610e05565b6001600160a01b03811660009081526006602052604081205463ffffffff1680610f3e576000610f70565b6001600160a01b038316600090815260056020908152604080832063ffffffff60001986011684529091529020600101545b9392505050565b60408051808201825260078152664d656f7773686960c81b60209182015281517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866818301527fb2519001d922cc8f01da040a1ebf40356f395758595af77f4a075390db7ffeeb81840152466060820152306080808301919091528351808303909101815260a0820184528051908301207fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf60c08301526001600160a01b038a1660e083015261010082018990526101208083018990528451808403909101815261014083019094528351939092019290922061190160f01b6101608401526101628301829052610182830181905290916000906101a20160408051601f198184030181528282528051602091820120600080855291840180845281905260ff8a169284019290925260608301889052608083018790529092509060019060a0016020604051602081039080840390855afa1580156110f9573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661116e5760405162461bcd60e51b815260206004820152602960248201527f4d656f777368693a3a64656c656761746542795369673a20696e76616c6964206044820152687369676e617475726560b81b6064820152608401610b43565b6001600160a01b038116600090815260036020526040902080546001810190915589146111eb5760405162461bcd60e51b815260206004820152602560248201527f4d656f777368693a3a64656c656761746542795369673a20696e76616c6964206044820152646e6f6e636560d81b6064820152608401610b43565b8742111561124d5760405162461bcd60e51b815260206004820152602960248201527f4d656f777368693a3a64656c656761746542795369673a207369676e617475726044820152681948195e1c1a5c995960ba1b6064820152608401610b43565b611257818b6118dc565b505050505b505050505050565b60408051808201825260078152664d656f7773686960c81b60209182015281517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866818301527fb2519001d922cc8f01da040a1ebf40356f395758595af77f4a075390db7ffeeb81840152466060820152306080808301919091528351808303909101815260a0820184528051908301206001600160a01b038b81166000818152600386528681208054600181019091557f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c960c087015260e0860192909252918c1661010085015261012084018b90526101408401526101608084018a90528551808503909101815261018084019095528451949093019390932061190160f01b6101a08301526101a282018490526101c2820181905291906101e20160408051601f198184030181528282528051602091820120600080855291840180845281905260ff8a169284019290925260608301889052608083018790529092509060019060a0016020604051602081039080840390855afa15801561140b573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166114795760405162461bcd60e51b815260206004820152602260248201527f4d656f777368693a3a7065726d69743a20696e76616c6964207369676e617475604482015261726560f01b6064820152608401610b43565b8a6001600160a01b0316816001600160a01b0316146114da5760405162461bcd60e51b815260206004820152601d60248201527f4d656f777368693a3a7065726d69743a20756e617574686f72697a65640000006044820152606401610b43565b505050844211156115385760405162461bcd60e51b815260206004820152602260248201527f4d656f777368693a3a7065726d69743a207369676e6174757265206578706972604482015261195960f21b6064820152608401610b43565b6001600160a01b038881166000818152600160209081526040808320948c16808452948252918290208a905590518981527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a35050505050505050565b6040516323b872dd60e01b815233600482015273f5bce5077908a1b7370b9ae04adc565ebd643966602482015260448101829052600090738798249c2e607446efb7ad49ec89dd1865ff4272906323b872dd90606401602060405180830381600087803b15801561160e57600080fd5b505af1158015611622573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116469190611d74565b5060405162ae511b60e21b815273f5bce5077908a1b7370b9ae04adc565ebd643966906302b9446c9061083c90738798249c2e607446efb7ad49ec89dd1865ff427290849030908890600090600401611f15565b33600090815260026020526040812080548392906116b9908490611fdf565b9091555050600080548290038155338152600460205260408120546116ea916001600160a01b039091169083611713565b604051818152600090339060008051602061204f8339815191529060200160405180910390a350565b816001600160a01b0316836001600160a01b0316141580156117355750600081115b1561183a576001600160a01b038316156117bc576001600160a01b03831660009081526006602052604081205463ffffffff1690816117755760006117a7565b6001600160a01b038516600090815260056020908152604080832063ffffffff60001987011684529091529020600101545b90508281036117b88684848461195c565b5050505b6001600160a01b0382161561183a576001600160a01b03821660009081526006602052604081205463ffffffff1690816117f7576000611829565b6001600160a01b038416600090815260056020908152604080832063ffffffff60001987011684529091529020600101545b905082810161125c8584848461195c565b505050565b6001600160a01b03821660009081526002602052604081208054839290611867908490611fa8565b925050819055508060008082825461187f9190611fa8565b90915550506001600160a01b038083166000908152600460205260408120546118a9921683611713565b6040518181526001600160a01b0383169060009060008051602061204f8339815191529060200160405180910390a35050565b6001600160a01b03808316600081815260046020818152604080842080546002845282862054949093528787166001600160a01b03198416811790915590519190951694919391928592917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a4611956828483611713565b50505050565b600061196743611aa9565b905060008463ffffffff161180156119b057506001600160a01b038516600090815260056020908152604080832063ffffffff6000198901811685529252909120548282169116145b156119ed576001600160a01b038516600090815260056020908152604080832063ffffffff60001989011684529091529020600101829055611a5e565b60408051808201825263ffffffff808416825260208083018681526001600160a01b038a166000818152600584528681208b8616825284528681209551865490861663ffffffff19918216178755925160019687015590815260069092529390208054928801909116919092161790555b60408051848152602081018490526001600160a01b038716917fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724910160405180910390a25050505050565b60006401000000008210611b255760405162461bcd60e51b815260206004820152603760248201527f4d656f777368693a3a5f7772697465436865636b706f696e743a20626c6f636b60448201527f206e756d626572206578636565647320333220626974730000000000000000006064820152608401610b43565b5090565b80356001600160a01b0381168114611b4057600080fd5b919050565b803560ff81168114611b4057600080fd5b600060208284031215611b67578081fd5b610f7082611b29565b60008060408385031215611b82578081fd5b611b8b83611b29565b9150611b9960208401611b29565b90509250929050565b600080600060608486031215611bb6578081fd5b611bbf84611b29565b9250611bcd60208501611b29565b9150604084013590509250925092565b600080600080600080600060e0888a031215611bf7578283fd5b611c0088611b29565b9650611c0e60208901611b29565b95506040880135945060608801359350611c2a60808901611b45565b925060a0880135915060c0880135905092959891949750929550565b60008060408385031215611c58578182fd5b611c6183611b29565b946020939093013593505050565b60008060008060008060c08789031215611c87578182fd5b611c9087611b29565b95506020870135945060408701359350611cac60608801611b45565b92506080870135915060a087013590509295509295509295565b60008060408385031215611cd8578182fd5b611ce183611b29565b9150602083013563ffffffff81168114611cf9578182fd5b809150509250929050565b60008060208385031215611d16578182fd5b823567ffffffffffffffff80821115611d2d578384fd5b818501915085601f830112611d40578384fd5b813581811115611d4e578485fd5b8660208260051b8501011115611d62578485fd5b60209290920196919550909350505050565b600060208284031215611d85578081fd5b81518015158114610f70578182fd5b600060208284031215611da5578081fd5b815167ffffffffffffffff80821115611dbc578283fd5b818401915084601f830112611dcf578283fd5b815181811115611de157611de1612038565b604051601f8201601f19908116603f01168101908382118183101715611e0957611e09612038565b81604052828152876020848701011115611e21578586fd5b611e32836020830160208801611ff6565b979650505050505050565b600060208284031215611e4e578081fd5b5051919050565b60008060408385031215611e67578182fd5b505080516020909101519092909150565b60008151808452611e90816020860160208601611ff6565b601f01601f19169290920160200192915050565b8183823760009101908152919050565b6000602080830181845280855180835260408601915060408160051b8701019250838701855b82811015611f0857603f19888603018452611ef6858351611e78565b94509285019290850190600101611eda565b5092979650505050505050565b6001600160a01b03958616815293851660208501529190931660408301526060820192909252608081019190915260a00190565b602081526000610f706020830184611e78565b6000808335601e19843603018112611f72578283fd5b83018035915067ffffffffffffffff821115611f8c578283fd5b602001915036819003821315611fa157600080fd5b9250929050565b60008219821115611fbb57611fbb612022565b500190565b6000816000190483118215151615611fda57611fda612022565b500290565b600082821015611ff157611ff1612022565b500390565b60005b83811015612011578181015183820152602001611ff9565b838111156119565750506000910152565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fdfeddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa264697066735822122035b0fe5adbdae498498519145e816863e43ce263ac09956b745a7b88ea999a1f64736f6c63430008040033

Deployed Bytecode Sourcemap

1375:15284:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1787:39;;;;;;;;;;;;;;;-1:-1:-1;;;1787:39:0;;;;;;;;;;;;:::i;:::-;;;;;;;;7195:207;;;;;;:::i;:::-;;:::i;:::-;;;8131:14:1;;8124:22;8106:41;;8094:2;8079:18;7195:207:0;8061:92:1;2003:26:0;;;;;;;;;14702:25:1;;;14690:2;14675:18;2003:26:0;14657:76:1;5006:230:0;;;;;;:::i;:::-;;:::i;9620:435::-;;;;;;:::i;:::-;;:::i;1878:35::-;;1911:2;1878:35;;;;;15628:4:1;15616:17;;;15598:36;;15586:2;15571:18;1878:35:0;15553:87:1;5343:380:0;;;;;;:::i;:::-;;:::i;2423:44::-;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;2423:44:0;;;;;;-1:-1:-1;;;;;6455:32:1;;;6437:51;;6425:2;6410:18;2423:44:0;6392:102:1;10271:104:0;;;;;;:::i;:::-;;:::i;:::-;;5805:365;;;;;;:::i;:::-;;:::i;2685:48::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;15165:10:1;15153:23;;;15135:42;;15123:2;15108:18;2685:48:0;15090:93:1;2212:44:0;;;;;;:::i;:::-;;;;;;;;;;;;;;12755:1133;;;;;;:::i;:::-;;:::i;2321:41::-;;;;;;:::i;:::-;;;;;;;;;;;;;;1833:38;;;;;;;;;;;;;;;-1:-1:-1;;;1833:38:0;;;;;8997:308;;;;;;:::i;:::-;;:::i;15928:551::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;12092:235::-;;;;;;:::i;:::-;;:::i;10805:830::-;;;;;;:::i;:::-;;:::i;7887:872::-;;;;;;:::i;:::-;;:::i;2098:64::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;4590:333;;;;;;:::i;:::-;;:::i;2549:68::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15390:10:1;15378:23;;;15360:42;;15433:2;15418:18;;15411:34;;;;15333:18;2549:68:0;15315:136:1;7195:207:0;7290:10;7263:4;7280:21;;;:9;:21;;;;;;;;-1:-1:-1;;;;;7280:30:0;;;;;;;;;;:39;;;7335:37;7263:4;;7280:30;;7335:37;;;;7313:6;14702:25:1;;14690:2;14675:18;;14657:76;7335:37:0;;;;;;;;-1:-1:-1;7390:4:0;7195:207;;;;;:::o;5006:230::-;5068:17;5098:16;5107:6;5098:8;:16::i;:::-;5152:75;;-1:-1:-1;;;5152:75:0;;1446:42;;5152:14;;:75;;1685:42;;5193:4;;5200:2;;5204:1;;1950:7;5207:19;;;5152:75;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;5136:91:0;5006:230;-1:-1:-1;;;5006:230:0:o;9620:435::-;-1:-1:-1;;;;;9723:15:0;;9702:4;9723:15;;;:9;:15;;;;;;;;9739:10;9723:27;;;;;;;;-1:-1:-1;;9723:48:0;9719:118;;-1:-1:-1;;;;;9788:15:0;;;;;;:9;:15;;;;;;;;9804:10;9788:27;;;;;;;:37;;9819:6;;9788:15;:37;;9819:6;;9788:37;:::i;:::-;;;;-1:-1:-1;;9719:118:0;-1:-1:-1;;;;;9847:15:0;;;;;;:9;:15;;;;;:25;;9866:6;;9847:15;:25;;9866:6;;9847:25;:::i;:::-;;;;-1:-1:-1;;;;;;;9894:13:0;;;;;;;:9;:13;;;;;;;;:23;;;;;;9944:15;;;;;:9;:15;;;;;;;9961:13;;;;;;9929:54;;9944:15;;;;9961:13;9911:6;9929:14;:54::i;:::-;10014:2;-1:-1:-1;;;;;9999:26:0;10008:4;-1:-1:-1;;;;;9999:26:0;-1:-1:-1;;;;;;;;;;;10018:6:0;9999:26;;;;14702:25:1;;14690:2;14675:18;;14657:76;9999:26:0;;;;;;;;-1:-1:-1;10043:4:0;9620:435;;;;;:::o;5343:380::-;5435:58;;-1:-1:-1;;;5435:58:0;;5459:10;5435:58;;;6739:34:1;5479:4:0;6789:18:1;;;6782:43;6841:18;;;6834:34;;;5408:14:0;;1573:42;;5435:23;;6674:18:1;;5435:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;5504:33:0;;-1:-1:-1;;;5504:33:0;;;;;14702:25:1;;;1685:42:0;;5504:25;;14675:18:1;;5504:33:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;5623:44:0;;-1:-1:-1;;;5623:44:0;;5601:4;5623:44;;;6437:51:1;;;1446:42:0;;-1:-1:-1;5561:13:0;;-1:-1:-1;1685:42:0;;5601:4;;1685:42;;5623:29;;6410:18:1;;5623:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5669:1;5561:110;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5548:123;-1:-1:-1;5682:33:0;;-1:-1:-1;5691:2:0;5695:19;1950:7;5548:123;5695:19;:::i;:::-;5682:8;:33::i;10271:104::-;10335:32;10345:10;10357:9;10335;:32::i;:::-;10271:104;:::o;5805:365::-;5872:17;5902:16;5911:6;5902:8;:16::i;:::-;5956:86;;-1:-1:-1;;;5956:86:0;;1446:42;;5956:14;;:86;;1685:42;;5997:4;;;;6019:1;;1950:7;6022:19;;;5956:86;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;6054:36:0;;-1:-1:-1;;;6054:36:0;;;;;14702:25:1;;;5940:102:0;;-1:-1:-1;1685:42:0;;6054:25;;14675:18:1;;6054:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;6125:35:0;;-1:-1:-1;;;6125:35:0;;6154:4;6125:35;;;6437:51:1;1573:42:0;;-1:-1:-1;6101:19:0;;-1:-1:-1;6121:2:0;;1573:42;;6125:20;;6410:18:1;;6125:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6101:60;;-1:-1:-1;;;;;;6101:60:0;;;;;;;-1:-1:-1;;;;;7071:32:1;;;6101:60:0;;;7053:51:1;7120:18;;;7113:34;7026:18;;6101:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;5805:365;;;;:::o;12755:1133::-;12839:7;12881:12;12867:11;:26;12859:81;;;;-1:-1:-1;;;12859:81:0;;12360:2:1;12859:81:0;;;12342:21:1;12399:2;12379:18;;;12372:30;12438:34;12418:18;;;12411:62;-1:-1:-1;;;12489:18:1;;;12482:40;12539:19;;12859:81:0;;;;;;;;;-1:-1:-1;;;;;12973:23:0;;12951:19;12973:23;;;:14;:23;;;;;;;;13011:17;13007:34;;13038:1;13031:8;;;;;13007:34;-1:-1:-1;;;;;13126:20:0;;;;;;:11;:20;;;;;;;;:38;-1:-1:-1;;13147:16:0;;13126:38;;;;;;;;;:48;;:63;-1:-1:-1;13122:123:0;;-1:-1:-1;;;;;13199:20:0;;;;;;:11;:20;;;;;;;;-1:-1:-1;;13220:16:0;;;;13199:38;;;;;;;;13235:1;13199:44;;;-1:-1:-1;13192:51:0;;13122:123;-1:-1:-1;;;;;13310:20:0;;;;;;:11;:20;;;;;;;;:23;;;;;;;;:33;:23;:33;:47;-1:-1:-1;13306:64:0;;;13367:1;13360:8;;;;;13306:64;13380:12;-1:-1:-1;;13422:16:0;;13449:380;13464:5;13456:13;;:5;:13;;;13449:380;;;13486:13;13528:1;13510:19;13511:13;;;13510:19;-1:-1:-1;;;;;13588:20:0;;13565;13588;;;:11;:20;;;;;;;;13510:19;;;;13502:27;;13588:28;;;;;;;;;;;;;13565:51;;;;;;;;;;;;;;;;;;;;;;;;;13502:27;-1:-1:-1;13565:51:0;13635:27;;13631:197;;;13690:8;;;;-1:-1:-1;13683:15:0;;-1:-1:-1;;;;13683:15:0;13631:197;13724:12;;:26;;;-1:-1:-1;13720:108:0;;;13779:6;13771:14;;13720:108;;;13825:1;13816:6;:10;13808:18;;13720:108;13449:380;;;;;-1:-1:-1;;;;;;13846:20:0;;;;;;:11;:20;;;;;;;;:27;;;;;;;;;;:33;;;;-1:-1:-1;;12755:1133:0;;;;:::o;8997:308::-;9088:10;9061:4;9078:21;;;:9;:21;;;;;:31;;9103:6;;9078:21;9061:4;;9078:31;;9103:6;;9078:31;:::i;:::-;;;;-1:-1:-1;;;;;;;9132:13:0;;;;;;;:9;:13;;;;;;;;:23;;;;;;9192:10;9182:21;;:9;:21;;;;;;;9205:13;;;;;;9167:60;;9182:21;;;;9205:13;9149:6;9167:14;:60::i;:::-;9243:32;;14702:25:1;;;-1:-1:-1;;;;;9243:32:0;;;9252:10;;-1:-1:-1;;;;;;;;;;;9243:32:0;14690:2:1;14675:18;9243:32:0;14657:76:1;15928:551:0;15988:22;16045:4;16033:24;;;;;;-1:-1:-1;;;16033:24:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16023:34;;16094:9;16089:382;16109:15;;;16089:382;;;16147:12;;16192:4;16211;;16216:1;16211:7;;;;;-1:-1:-1;;;16211:7:0;;;;;;;;;;;;;;;;;;;;:::i;:::-;16184:35;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16146:73;;;;16239:7;16234:192;;16287:2;16271:6;:13;:18;16267:32;;;16291:8;;;16267:32;16350:4;16342:6;16338:17;16328:27;;16392:6;16381:28;;;;;;;;;;;;:::i;:::-;16374:36;;-1:-1:-1;;;16374:36:0;;;;;;;;:::i;16234:192::-;16453:6;16440:7;16448:1;16440:10;;;;;;-1:-1:-1;;;16440:10:0;;;;;;;;;;;;;;;;;;:19;-1:-1:-1;;16126:3:0;;16089:382;;12092:235;-1:-1:-1;;;;;12210:23:0;;12157:7;12210:23;;;:14;:23;;;;;;;;12251:16;:67;;12317:1;12251:67;;;-1:-1:-1;;;;;12270:20:0;;;;;;:11;:20;;;;;;;;:38;-1:-1:-1;;12291:16:0;;12270:38;;;;;;;;12306:1;12270:44;;12251:67;12244:74;12092:235;-1:-1:-1;;;12092:235:0:o;10805:830::-;11009:4;;;;;;;;;;;-1:-1:-1;;;11009:4:0;;;;;10965:80;;2841;10965;;;9407:25:1;10993:22:0;9448:18:1;;;9441:34;11861:9:0;9491:18:1;;;9484:34;11039:4:0;9534:18:1;;;;9527:60;;;;10965:80:0;;;;;;;;;;9379:19:1;;;10965:80:0;;10955:91;;;;;;3053:71;11088:57;;;8985:25:1;-1:-1:-1;;;;;9046:32:1;;9026:18;;;9019:60;9095:18;;;9088:34;;;9138:18;;;;9131:34;;;11088:57:0;;;;;;;;;;8957:19:1;;;11088:57:0;;;11078:68;;;;;;;;;;-1:-1:-1;;;11184:57:0;;;6152:27:1;6195:11;;;6188:27;;;6231:12;;;6224:28;;;10955:91:0;;-1:-1:-1;;6268:12:1;;11184:57:0;;;-1:-1:-1;;11184:57:0;;;;;;;;;11174:68;;11184:57;11174:68;;;;11253:17;11273:26;;;;;;;;;9825:25:1;;;9898:4;9886:17;;9866:18;;;9859:45;;;;9920:18;;;9913:34;;;9963:18;;;9956:34;;;11174:68:0;;-1:-1:-1;11253:17:0;11273:26;;9797:19:1;;11273:26:0;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;11273:26:0;;-1:-1:-1;;11273:26:0;;;-1:-1:-1;;;;;;;11318:23:0;;11310:77;;;;-1:-1:-1;;;11310:77:0;;13938:2:1;11310:77:0;;;13920:21:1;13977:2;13957:18;;;13950:30;14016:34;13996:18;;;13989:62;-1:-1:-1;;;14067:18:1;;;14060:39;14116:19;;11310:77:0;13910:231:1;11310:77:0;-1:-1:-1;;;;;11426:17:0;;;;;;:6;:17;;;;;:19;;;;;;;;11417:28;;11409:78;;;;-1:-1:-1;;;11409:78:0;;13532:2:1;11409:78:0;;;13514:21:1;13571:2;13551:18;;;13544:30;13610:34;13590:18;;;13583:62;-1:-1:-1;;;13661:18:1;;;13654:35;13706:19;;11409:78:0;13504:227:1;11409:78:0;11526:6;11507:15;:25;;11499:79;;;;-1:-1:-1;;;11499:79:0;;14348:2:1;11499:79:0;;;14330:21:1;14387:2;14367:18;;;14360:30;14426:34;14406:18;;;14399:62;-1:-1:-1;;;14477:18:1;;;14470:39;14526:19;;11499:79:0;14320:231:1;11499:79:0;11596:31;11606:9;11617;11596;:31::i;:::-;11589:38;;;;10805:830;;;;;;;:::o;7887:872::-;8097:4;;;;;;;;;;;-1:-1:-1;;;8097:4:0;;;;;8053:80;;2841;8053;;;9407:25:1;8081:22:0;9448:18:1;;;9441:34;11861:9:0;9491:18:1;;;9484:34;8127:4:0;9534:18:1;;;;9527:60;;;;8053:80:0;;;;;;;;;;9379:19:1;;;8053:80:0;;8043:91;;;;;;-1:-1:-1;;;;;8239:13:0;;;-1:-1:-1;8239:13:0;;;:6;:13;;;;;:15;;;;;;;;3248:95;8187:78;;;8445:25:1;8524:18;;;8517:43;;;;8596:15;;;8576:18;;;8569:43;8628:18;;;8621:34;;;8671:19;;;8664:35;8715:19;;;;8708:35;;;8187:78:0;;;;;;;;;;8417:19:1;;;8187:78:0;;;8177:89;;;;;;;;;;-1:-1:-1;;;8304:57:0;;;6152:27:1;6195:11;;;6188:27;;;6231:12;;;6224:28;;;8177:89:0;-1:-1:-1;6268:12:1;;8304:57:0;;;-1:-1:-1;;8304:57:0;;;;;;;;;8294:68;;8304:57;8294:68;;;;8373:17;8393:26;;;;;;;;;9825:25:1;;;9898:4;9886:17;;9866:18;;;9859:45;;;;9920:18;;;9913:34;;;9963:18;;;9956:34;;;8294:68:0;;-1:-1:-1;8373:17:0;8393:26;;9797:19:1;;8393:26:0;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;8393:26:0;;-1:-1:-1;;8393:26:0;;;-1:-1:-1;;;;;;;8439:23:0;;8431:70;;;;-1:-1:-1;;;8431:70:0;;12771:2:1;8431:70:0;;;12753:21:1;12810:2;12790:18;;;12783:30;12849:34;12829:18;;;12822:62;-1:-1:-1;;;12900:18:1;;;12893:32;12942:19;;8431:70:0;12743:224:1;8431:70:0;8533:5;-1:-1:-1;;;;;8520:18:0;:9;-1:-1:-1;;;;;8520:18:0;;8512:60;;;;-1:-1:-1;;;8512:60:0;;13174:2:1;8512:60:0;;;13156:21:1;13213:2;13193:18;;;13186:30;13252:31;13232:18;;;13225:59;13301:18;;8512:60:0;13146:179:1;8512:60:0;7887:872;;;8611:8;8592:15;:27;;8584:74;;;;-1:-1:-1;;;8584:74:0;;11533:2:1;8584:74:0;;;11515:21:1;11572:2;11552:18;;;11545:30;11611:34;11591:18;;;11584:62;-1:-1:-1;;;11662:18:1;;;11655:32;11704:19;;8584:74:0;11505:224:1;8584:74:0;-1:-1:-1;;;;;8669:16:0;;;;;;;:9;:16;;;;;;;;:25;;;;;;;;;;;;;:34;;;8719:32;;14702:25:1;;;8719:32:0;;14675:18:1;8719:32:0;;;;;;;7887:872;;;;;;;;:::o;4590:333::-;4677:68;;-1:-1:-1;;;4677:68:0;;4710:10;4677:68;;;6739:34:1;1446:42:0;6789:18:1;;;6782:43;6841:18;;;6834:34;;;4650:14:0;;1685:42;;4677:32;;6674:18:1;;4677:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;4798:73:0;;-1:-1:-1;;;4798:73:0;;1446:42;;4798:13;;:73;;1685:42;;1446;;4854:4;;4861:6;;4869:1;;4798:73;;;:::i;6557:260::-;6620:10;6610:21;;;;:9;:21;;;;;:31;;6635:6;;6610:21;:31;;6635:6;;6610:31;:::i;:::-;;;;-1:-1:-1;;6663:11:0;:21;;;;;;;6721:10;6711:21;;:9;:21;;;;;;6696:57;;-1:-1:-1;;;;;6711:21:0;;;;6663;6696:14;:57::i;:::-;6769:40;;14702:25:1;;;6798:1:0;;6778:10;;-1:-1:-1;;;;;;;;;;;6769:40:0;14690:2:1;14675:18;6769:40:0;;;;;;;6557:260;:::o;14347:864::-;14473:6;-1:-1:-1;;;;;14463:16:0;:6;-1:-1:-1;;;;;14463:16:0;;;:30;;;;;14492:1;14483:6;:10;14463:30;14459:744;;;-1:-1:-1;;;;;14514:20:0;;;14510:334;;-1:-1:-1;;;;;14574:22:0;;14555:16;14574:22;;;:14;:22;;;;;;;;;14635:13;:60;;14694:1;14635:60;;;-1:-1:-1;;;;;14651:19:0;;;;;;:11;:19;;;;;;;;:34;-1:-1:-1;;14671:13:0;;14651:34;;;;;;;;14683:1;14651:40;;14635:60;14615:80;-1:-1:-1;14734:18:0;;;14771:57;14788:6;14796:9;14615:80;14734:18;14771:16;:57::i;:::-;14510:334;;;;-1:-1:-1;;;;;14862:20:0;;;14858:334;;-1:-1:-1;;;;;14922:22:0;;14903:16;14922:22;;;:14;:22;;;;;;;;;14983:13;:60;;15042:1;14983:60;;;-1:-1:-1;;;;;14999:19:0;;;;;;:11;:19;;;;;;;;:34;-1:-1:-1;;15019:13:0;;14999:34;;;;;;;;15031:1;14999:40;;14983:60;14963:80;-1:-1:-1;15082:18:0;;;15119:57;15136:6;15144:9;14963:80;15082:18;15119:16;:57::i;14858:334::-;14347:864;;;:::o;6255:236::-;-1:-1:-1;;;;;6320:13:0;;;;;;:9;:13;;;;;:23;;6337:6;;6320:13;:23;;6337:6;;6320:23;:::i;:::-;;;;;;;;6369:6;6354:11;;:21;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;6413:13:0;;;6409:1;6413:13;;;:9;:13;;;;;;6386:49;;6413:13;6428:6;6386:14;:49::i;:::-;6451:32;;14702:25:1;;;-1:-1:-1;;;;;6451:32:0;;;6468:1;;-1:-1:-1;;;;;;;;;;;6451:32:0;14690:2:1;14675:18;6451:32:0;;;;;;;6255:236;;:::o;13966:373::-;-1:-1:-1;;;;;14068:20:0;;;14042:23;14068:20;;;:9;:20;;;;;;;;;;14127:9;:20;;;;;;14158;;;;:32;;;-1:-1:-1;;;;;;14158:32:0;;;;;;;14206:54;;14068:20;;;;;14127;;14158:32;;14068:20;;;14206:54;;14042:23;14206:54;14271:60;14286:15;14303:9;14314:16;14271:14;:60::i;:::-;13966:373;;;;:::o;15223:608::-;15344:18;15365:20;15372:12;15365:6;:20::i;:::-;15344:41;;15436:1;15421:12;:16;;;:85;;;;-1:-1:-1;;;;;;15441:22:0;;;;;;:11;:22;;;;;;;;:65;-1:-1:-1;;15464:16:0;;15441:40;;;;;;;;;:50;:65;;;:50;;:65;15421:85;15417:339;;;-1:-1:-1;;;;;15523:22:0;;;;;;:11;:22;;;;;;;;:40;-1:-1:-1;;15546:16:0;;15523:40;;;;;;;;15561:1;15523:46;:57;;;15417:339;;;15652:33;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;15613:22:0;;-1:-1:-1;15613:22:0;;;:11;:22;;;;;:36;;;;;;;;;;:72;;;;;;;-1:-1:-1;;15613:72:0;;;;;;;;;;;;;15700:25;;;:14;:25;;;;;;:44;;15728:16;;;15700:44;;;;;;;;;;15417:339;15772:51;;;14912:25:1;;;14968:2;14953:18;;14946:34;;;-1:-1:-1;;;;;15772:51:0;;;;;14885:18:1;15772:51:0;;;;;;;15223:608;;;;;:::o;16491:165::-;16540:6;16571:5;16567:1;:9;16559:77;;;;-1:-1:-1;;;16559:77:0;;11936:2:1;16559:77:0;;;11918:21:1;11975:2;11955:18;;;11948:30;12014:34;11994:18;;;11987:62;12085:25;12065:18;;;12058:53;12128:19;;16559:77:0;11908:245:1;16559:77:0;-1:-1:-1;16652:1:0;16491:165::o;14:173:1:-;82:20;;-1:-1:-1;;;;;131:31:1;;121:42;;111:2;;177:1;174;167:12;111:2;63:124;;;:::o;192:156::-;258:20;;318:4;307:16;;297:27;;287:2;;338:1;335;328:12;353:196;412:6;465:2;453:9;444:7;440:23;436:32;433:2;;;486:6;478;471:22;433:2;514:29;533:9;514:29;:::i;554:270::-;622:6;630;683:2;671:9;662:7;658:23;654:32;651:2;;;704:6;696;689:22;651:2;732:29;751:9;732:29;:::i;:::-;722:39;;780:38;814:2;803:9;799:18;780:38;:::i;:::-;770:48;;641:183;;;;;:::o;829:338::-;906:6;914;922;975:2;963:9;954:7;950:23;946:32;943:2;;;996:6;988;981:22;943:2;1024:29;1043:9;1024:29;:::i;:::-;1014:39;;1072:38;1106:2;1095:9;1091:18;1072:38;:::i;:::-;1062:48;;1157:2;1146:9;1142:18;1129:32;1119:42;;933:234;;;;;:::o;1172:616::-;1283:6;1291;1299;1307;1315;1323;1331;1384:3;1372:9;1363:7;1359:23;1355:33;1352:2;;;1406:6;1398;1391:22;1352:2;1434:29;1453:9;1434:29;:::i;:::-;1424:39;;1482:38;1516:2;1505:9;1501:18;1482:38;:::i;:::-;1472:48;;1567:2;1556:9;1552:18;1539:32;1529:42;;1618:2;1607:9;1603:18;1590:32;1580:42;;1641:37;1673:3;1662:9;1658:19;1641:37;:::i;:::-;1631:47;;1725:3;1714:9;1710:19;1697:33;1687:43;;1777:3;1766:9;1762:19;1749:33;1739:43;;1342:446;;;;;;;;;;:::o;1793:264::-;1861:6;1869;1922:2;1910:9;1901:7;1897:23;1893:32;1890:2;;;1943:6;1935;1928:22;1890:2;1971:29;1990:9;1971:29;:::i;:::-;1961:39;2047:2;2032:18;;;;2019:32;;-1:-1:-1;;;1880:177:1:o;2062:541::-;2164:6;2172;2180;2188;2196;2204;2257:3;2245:9;2236:7;2232:23;2228:33;2225:2;;;2279:6;2271;2264:22;2225:2;2307:29;2326:9;2307:29;:::i;:::-;2297:39;;2383:2;2372:9;2368:18;2355:32;2345:42;;2434:2;2423:9;2419:18;2406:32;2396:42;;2457:36;2489:2;2478:9;2474:18;2457:36;:::i;:::-;2447:46;;2540:3;2529:9;2525:19;2512:33;2502:43;;2592:3;2581:9;2577:19;2564:33;2554:43;;2215:388;;;;;;;;:::o;2608:370::-;2675:6;2683;2736:2;2724:9;2715:7;2711:23;2707:32;2704:2;;;2757:6;2749;2742:22;2704:2;2785:29;2804:9;2785:29;:::i;:::-;2775:39;;2864:2;2853:9;2849:18;2836:32;2908:10;2901:5;2897:22;2890:5;2887:33;2877:2;;2939:6;2931;2924:22;2877:2;2967:5;2957:15;;;2694:284;;;;;:::o;2983:676::-;3080:6;3088;3141:2;3129:9;3120:7;3116:23;3112:32;3109:2;;;3162:6;3154;3147:22;3109:2;3207:9;3194:23;3236:18;3277:2;3269:6;3266:14;3263:2;;;3298:6;3290;3283:22;3263:2;3341:6;3330:9;3326:22;3316:32;;3386:7;3379:4;3375:2;3371:13;3367:27;3357:2;;3413:6;3405;3398:22;3357:2;3458;3445:16;3484:2;3476:6;3473:14;3470:2;;;3505:6;3497;3490:22;3470:2;3563:7;3558:2;3548:6;3545:1;3541:14;3537:2;3533:23;3529:32;3526:45;3523:2;;;3589:6;3581;3574:22;3523:2;3625;3617:11;;;;;3647:6;;-1:-1:-1;3099:560:1;;-1:-1:-1;;;;3099:560:1:o;3664:297::-;3731:6;3784:2;3772:9;3763:7;3759:23;3755:32;3752:2;;;3805:6;3797;3790:22;3752:2;3842:9;3836:16;3895:5;3888:13;3881:21;3874:5;3871:32;3861:2;;3922:6;3914;3907:22;3966:924;4046:6;4099:2;4087:9;4078:7;4074:23;4070:32;4067:2;;;4120:6;4112;4105:22;4067:2;4158:9;4152:16;4187:18;4228:2;4220:6;4217:14;4214:2;;;4249:6;4241;4234:22;4214:2;4292:6;4281:9;4277:22;4267:32;;4337:7;4330:4;4326:2;4322:13;4318:27;4308:2;;4364:6;4356;4349:22;4308:2;4398;4392:9;4420:2;4416;4413:10;4410:2;;;4426:18;;:::i;:::-;4501:2;4495:9;4469:2;4555:13;;-1:-1:-1;;4551:22:1;;;4575:2;4547:31;4543:40;4531:53;;;4599:18;;;4619:22;;;4596:46;4593:2;;;4645:18;;:::i;:::-;4685:10;4681:2;4674:22;4720:2;4712:6;4705:18;4760:7;4755:2;4750;4746;4742:11;4738:20;4735:33;4732:2;;;4786:6;4778;4771:22;4732:2;4804:55;4856:2;4851;4843:6;4839:15;4834:2;4830;4826:11;4804:55;:::i;:::-;4878:6;4057:833;-1:-1:-1;;;;;;;4057:833:1:o;4895:194::-;4965:6;5018:2;5006:9;4997:7;4993:23;4989:32;4986:2;;;5039:6;5031;5024:22;4986:2;-1:-1:-1;5067:16:1;;4976:113;-1:-1:-1;4976:113:1:o;5094:255::-;5173:6;5181;5234:2;5222:9;5213:7;5209:23;5205:32;5202:2;;;5255:6;5247;5240:22;5202:2;-1:-1:-1;;5283:16:1;;5339:2;5324:18;;;5318:25;5283:16;;5318:25;;-1:-1:-1;5192:157:1:o;5354:257::-;5395:3;5433:5;5427:12;5460:6;5455:3;5448:19;5476:63;5532:6;5525:4;5520:3;5516:14;5509:4;5502:5;5498:16;5476:63;:::i;:::-;5593:2;5572:15;-1:-1:-1;;5568:29:1;5559:39;;;;5600:4;5555:50;;5403:208;-1:-1:-1;;5403:208:1:o;5616:273::-;5799:6;5791;5786:3;5773:33;5755:3;5825:16;;5850:15;;;5825:16;5763:126;-1:-1:-1;5763:126:1:o;7158:803::-;7318:4;7347:2;7387;7376:9;7372:18;7417:2;7406:9;7399:21;7440:6;7475;7469:13;7506:6;7498;7491:22;7544:2;7533:9;7529:18;7522:25;;7606:2;7596:6;7593:1;7589:14;7578:9;7574:30;7570:39;7556:53;;7644:2;7636:6;7632:15;7665:4;7678:254;7692:6;7689:1;7686:13;7678:254;;;7785:2;7781:7;7769:9;7761:6;7757:22;7753:36;7748:3;7741:49;7813:39;7845:6;7836;7830:13;7813:39;:::i;:::-;7803:49;-1:-1:-1;7910:12:1;;;;7875:15;;;;7714:1;7707:9;7678:254;;;-1:-1:-1;7949:6:1;;7327:634;-1:-1:-1;;;;;;;7327:634:1:o;10001:548::-;-1:-1:-1;;;;;10336:15:1;;;10318:34;;10388:15;;;10383:2;10368:18;;10361:43;10440:15;;;;10435:2;10420:18;;10413:43;10487:2;10472:18;;10465:34;;;;10530:3;10515:19;;10508:35;;;;10267:3;10252:19;;10234:315::o;11107:219::-;11256:2;11245:9;11238:21;11219:4;11276:44;11316:2;11305:9;11301:18;11293:6;11276:44;:::i;15645:533::-;15722:4;15728:6;15788:11;15775:25;15882:2;15878:7;15867:8;15851:14;15847:29;15843:43;15823:18;15819:68;15809:2;;15904:4;15898;15891:18;15809:2;15934:33;;15986:20;;;-1:-1:-1;16029:18:1;16018:30;;16015:2;;;16064:4;16058;16051:18;16015:2;16100:4;16088:17;;-1:-1:-1;16131:14:1;16127:27;;;16117:38;;16114:2;;;16168:1;16165;16158:12;16114:2;15739:439;;;;;:::o;16183:128::-;16223:3;16254:1;16250:6;16247:1;16244:13;16241:2;;;16260:18;;:::i;:::-;-1:-1:-1;16296:9:1;;16231:80::o;16316:168::-;16356:7;16422:1;16418;16414:6;16410:14;16407:1;16404:21;16399:1;16392:9;16385:17;16381:45;16378:2;;;16429:18;;:::i;:::-;-1:-1:-1;16469:9:1;;16368:116::o;16489:125::-;16529:4;16557:1;16554;16551:8;16548:2;;;16562:18;;:::i;:::-;-1:-1:-1;16599:9:1;;16538:76::o;16619:258::-;16691:1;16701:113;16715:6;16712:1;16709:13;16701:113;;;16791:11;;;16785:18;16772:11;;;16765:39;16737:2;16730:10;16701:113;;;16832:6;16829:1;16826:13;16823:2;;;-1:-1:-1;;16867:1:1;16849:16;;16842:27;16672:205::o;16882:127::-;16943:10;16938:3;16934:20;16931:1;16924:31;16974:4;16971:1;16964:15;16998:4;16995:1;16988:15;17014:127;17075:10;17070:3;17066:20;17063:1;17056:31;17106:4;17103:1;17096:15;17130:4;17127:1;17120:15

Swarm Source

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