ETH Price: $2,523.62 (-0.03%)

Token

Morph Coin (MORC)
 

Overview

Max Total Supply

2,803,318,022.011429942208026015 MORC

Holders

113

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
1,819.019287344873800435 MORC

Value
$0.00
0xA4812dfA2443F7D90426892EeC780c04b6941dDb
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

Morph Finance is an experimental algorithmic stablecoin that balances inflationary growth and Defi product value.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
morphCoin

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: CC-BY-NC-SA-2.5
//@code0x2

pragma solidity ^0.6.12;

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

    function _msgData() internal view virtual returns (bytes memory) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

interface IFeeManager {
    function queryFee(address sender, address receiver, uint256 amount) external returns(address, uint256);
}

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

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

contract Ownable is Context {
    address private _owner;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor () internal {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

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

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

contract Operator is Context, Ownable {
    address private _operator;
    mapping (address => bool) private privileged;

    event OperatorTransferred(
        address indexed previousOperator,
        address indexed newOperator
    );

    constructor() internal {
        _operator = _msgSender();
        emit OperatorTransferred(address(0), _operator);
    }

    function operator() public view returns (address) {
        return _operator;
    }

    function setPrivileged(address _usr, bool _isPrivileged) public onlyOwner {
        privileged[_usr] = _isPrivileged;
    }

    modifier onlyOperator() {
        require(msg.sender == _operator || privileged[msg.sender] == true, 'operator: caller does not have permission');
        _;
    }

    function isOperator() public view returns (bool) {
        return _msgSender() == _operator;
    }

    function transferOperator(address newOperator_) public onlyOwner {
        _transferOperator(newOperator_);
    }

    function _transferOperator(address newOperator_) internal {
        require(
            newOperator_ != address(0),
            'operator: zero address given for new operator'
        );
        emit OperatorTransferred(address(0), newOperator_);
        _operator = newOperator_;
    }
}

library SafeMath {

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

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

        return c;
    }
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }

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

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

        return c;
    }
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

library Babylonian {
    function sqrt(uint256 y) internal pure returns (uint256 z) {
        if (y > 3) {
            z = y;
            uint256 x = y / 2 + 1;
            while (x < z) {
                z = x;
                x = (y / x + x) / 2;
            }
        } else if (y != 0) {
            z = 1;
        }
        // else z = 0
    }
}

library FixedPoint {
    // range: [0, 2**112 - 1]
    // resolution: 1 / 2**112
    struct uq112x112 {
        uint224 _x;
    }

    // range: [0, 2**144 - 1]
    // resolution: 1 / 2**112
    struct uq144x112 {
        uint256 _x;
    }

    uint8 private constant RESOLUTION = 112;
    uint256 private constant Q112 = uint256(1) << RESOLUTION;
    uint256 private constant Q224 = Q112 << RESOLUTION;

    // encode a uint112 as a UQ112x112
    function encode(uint112 x) internal pure returns (uq112x112 memory) {
        return uq112x112(uint224(x) << RESOLUTION);
    }

    // encodes a uint144 as a UQ144x112
    function encode144(uint144 x) internal pure returns (uq144x112 memory) {
        return uq144x112(uint256(x) << RESOLUTION);
    }

    // divide a UQ112x112 by a uint112, returning a UQ112x112
    function div(uq112x112 memory self, uint112 x)
        internal
        pure
        returns (uq112x112 memory)
    {
        require(x != 0, 'FixedPoint: DIV_BY_ZERO');
        return uq112x112(self._x / uint224(x));
    }

    // multiply a UQ112x112 by a uint, returning a UQ144x112
    // reverts on overflow
    function mul(uq112x112 memory self, uint256 y)
        internal
        pure
        returns (uq144x112 memory)
    {
        uint256 z;
        require(
            y == 0 || (z = uint256(self._x) * y) / y == uint256(self._x),
            'FixedPoint: MULTIPLICATION_OVERFLOW'
        );
        return uq144x112(z);
    }

    // returns a UQ112x112 which represents the ratio of the numerator to the denominator
    // equivalent to encode(numerator).div(denominator)
    function fraction(uint112 numerator, uint112 denominator)
        internal
        pure
        returns (uq112x112 memory)
    {
        require(denominator > 0, 'FixedPoint: DIV_BY_ZERO');
        return uq112x112((uint224(numerator) << RESOLUTION) / denominator);
    }

    // decode a UQ112x112 into a uint112 by truncating after the radix point
    function decode(uq112x112 memory self) internal pure returns (uint112) {
        return uint112(self._x >> RESOLUTION);
    }

    // decode a UQ144x112 into a uint144 by truncating after the radix point
    function decode144(uq144x112 memory self) internal pure returns (uint144) {
        return uint144(self._x >> RESOLUTION);
    }

    // take the reciprocal of a UQ112x112
    function reciprocal(uq112x112 memory self)
        internal
        pure
        returns (uq112x112 memory)
    {
        require(self._x != 0, 'FixedPoint: ZERO_RECIPROCAL');
        return uq112x112(uint224(Q224 / self._x));
    }

    // square root of a UQ112x112
    function sqrt(uq112x112 memory self)
        internal
        pure
        returns (uq112x112 memory)
    {
        return uq112x112(uint224(Babylonian.sqrt(uint256(self._x)) << 56));
    }
}

interface IUniswapV2Pair {
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
    event Transfer(address indexed from, address indexed to, uint256 value);

    function name() external pure returns (string memory);

    function symbol() external pure returns (string memory);

    function decimals() external pure returns (uint8);

    function totalSupply() external view returns (uint256);

    function balanceOf(address owner) external view returns (uint256);

    function allowance(address owner, address spender)
        external
        view
        returns (uint256);

    function approve(address spender, uint256 value) external returns (bool);

    function transfer(address to, uint256 value) external returns (bool);

    function transferFrom(
        address from,
        address to,
        uint256 value
    ) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function PERMIT_TYPEHASH() external pure returns (bytes32);

    function nonces(address owner) external view returns (uint256);

    function permit(
        address owner,
        address spender,
        uint256 value,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external;

    event Mint(address indexed sender, uint256 amount0, uint256 amount1);
    event Burn(
        address indexed sender,
        uint256 amount0,
        uint256 amount1,
        address indexed to
    );
    event Swap(
        address indexed sender,
        uint256 amount0In,
        uint256 amount1In,
        uint256 amount0Out,
        uint256 amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

    function factory() external view returns (address);

    function token0() external view returns (address);

    function token1() external view returns (address);

    function getReserves()
        external
        view
        returns (
            uint112 reserve0,
            uint112 reserve1,
            uint32 blockTimestampLast
        );

    function price0CumulativeLast() external view returns (uint256);

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

    function mint(address to) external returns (uint256 liquidity);

    function burn(address to)
        external
        returns (uint256 amount0, uint256 amount1);

    function swap(
        uint256 amount0Out,
        uint256 amount1Out,
        address to,
        bytes calldata data
    ) external;

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

library UniswapV2Library {
    using SafeMath for uint256;

    // returns sorted token addresses, used to handle return values from pairs sorted in this order
    function sortTokens(address tokenA, address tokenB)
        internal
        pure
        returns (address token0, address token1)
    {
        require(tokenA != tokenB, 'UniswapV2Library: IDENTICAL_ADDRESSES');
        (token0, token1) = tokenA < tokenB
            ? (tokenA, tokenB)
            : (tokenB, tokenA);
        require(token0 != address(0), 'UniswapV2Library: ZERO_ADDRESS');
    }

    // calculates the CREATE2 address for a pair without making any external calls
    function pairFor(
        address factory,
        address tokenA,
        address tokenB
    ) internal pure returns (address pair) {
        (address token0, address token1) = sortTokens(tokenA, tokenB);
        pair = address(
            uint256(
                keccak256(
                    abi.encodePacked(
                        hex'ff',
                        factory,
                        keccak256(abi.encodePacked(token0, token1)),
                        hex'96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f' // init code hash
                    )
                )
            )
        );
    }

    // fetches and sorts the reserves for a pair
    function getReserves(
        address factory,
        address tokenA,
        address tokenB
    ) internal view returns (uint256 reserveA, uint256 reserveB) {
        (address token0, ) = sortTokens(tokenA, tokenB);
        (uint256 reserve0, uint256 reserve1, ) = IUniswapV2Pair(
            pairFor(factory, tokenA, tokenB)
        )
            .getReserves();
        (reserveA, reserveB) = tokenA == token0
            ? (reserve0, reserve1)
            : (reserve1, reserve0);
    }

    // given some amount of an asset and pair reserves, returns an equivalent amount of the other asset
    function quote(
        uint256 amountA,
        uint256 reserveA,
        uint256 reserveB
    ) internal pure returns (uint256 amountB) {
        require(amountA > 0, 'UniswapV2Library: INSUFFICIENT_AMOUNT');
        require(
            reserveA > 0 && reserveB > 0,
            'UniswapV2Library: INSUFFICIENT_LIQUIDITY'
        );
        amountB = amountA.mul(reserveB) / reserveA;
    }

    // given an input amount of an asset and pair reserves, returns the maximum output amount of the other asset
    function getAmountOut(
        uint256 amountIn,
        uint256 reserveIn,
        uint256 reserveOut
    ) internal pure returns (uint256 amountOut) {
        require(amountIn > 0, 'UniswapV2Library: INSUFFICIENT_INPUT_AMOUNT');
        require(
            reserveIn > 0 && reserveOut > 0,
            'UniswapV2Library: INSUFFICIENT_LIQUIDITY'
        );
        uint256 amountInWithFee = amountIn.mul(997);
        uint256 numerator = amountInWithFee.mul(reserveOut);
        uint256 denominator = reserveIn.mul(1000).add(amountInWithFee);
        amountOut = numerator / denominator;
    }

    // given an output amount of an asset and pair reserves, returns a required input amount of the other asset
    function getAmountIn(
        uint256 amountOut,
        uint256 reserveIn,
        uint256 reserveOut
    ) internal pure returns (uint256 amountIn) {
        require(amountOut > 0, 'UniswapV2Library: INSUFFICIENT_OUTPUT_AMOUNT');
        require(
            reserveIn > 0 && reserveOut > 0,
            'UniswapV2Library: INSUFFICIENT_LIQUIDITY'
        );
        uint256 numerator = reserveIn.mul(amountOut).mul(1000);
        uint256 denominator = reserveOut.sub(amountOut).mul(997);
        amountIn = (numerator / denominator).add(1);
    }

    // performs chained getAmountOut calculations on any number of pairs
    function getAmountsOut(
        address factory,
        uint256 amountIn,
        address[] memory path
    ) internal view returns (uint256[] memory amounts) {
        require(path.length >= 2, 'UniswapV2Library: INVALID_PATH');
        amounts = new uint256[](path.length);
        amounts[0] = amountIn;
        for (uint256 i; i < path.length - 1; i++) {
            (uint256 reserveIn, uint256 reserveOut) = getReserves(
                factory,
                path[i],
                path[i + 1]
            );
            amounts[i + 1] = getAmountOut(amounts[i], reserveIn, reserveOut);
        }
    }

    // performs chained getAmountIn calculations on any number of pairs
    function getAmountsIn(
        address factory,
        uint256 amountOut,
        address[] memory path
    ) internal view returns (uint256[] memory amounts) {
        require(path.length >= 2, 'UniswapV2Library: INVALID_PATH');
        amounts = new uint256[](path.length);
        amounts[amounts.length - 1] = amountOut;
        for (uint256 i = path.length - 1; i > 0; i--) {
            (uint256 reserveIn, uint256 reserveOut) = getReserves(
                factory,
                path[i - 1],
                path[i]
            );
            amounts[i - 1] = getAmountIn(amounts[i], reserveIn, reserveOut);
        }
    }
}

library UniswapV2OracleLibrary {
    using FixedPoint for *;

    // helper function that returns the current block timestamp within the range of uint32, i.e. [0, 2**32 - 1]
    function currentBlockTimestamp() internal view returns (uint32) {
        return uint32(block.timestamp % 2**32);
    }

    // produces the cumulative price using counterfactuals to save gas and avoid a call to sync.
    function currentCumulativePrices(address pair)
        internal
        view
        returns (
            uint256 price0Cumulative,
            uint256 price1Cumulative,
            uint32 blockTimestamp
        )
    {
        blockTimestamp = currentBlockTimestamp();
        price0Cumulative = IUniswapV2Pair(pair).price0CumulativeLast();
        price1Cumulative = IUniswapV2Pair(pair).price1CumulativeLast();

        // if time has elapsed since the last update on the pair, mock the accumulated price values
        (
            uint112 reserve0,
            uint112 reserve1,
            uint32 blockTimestampLast
        ) = IUniswapV2Pair(pair).getReserves();
        if (blockTimestampLast != blockTimestamp) {
            // subtraction overflow is desired
            uint32 timeElapsed = blockTimestamp - blockTimestampLast;
            // addition overflow is desired
            // counterfactual
            price0Cumulative +=
                uint256(FixedPoint.fraction(reserve1, reserve0)._x) *
                timeElapsed;
            // counterfactual
            price1Cumulative +=
                uint256(FixedPoint.fraction(reserve0, reserve1)._x) *
                timeElapsed;
        }
    }
}

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

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);

    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}

interface IUniswapRouter is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);

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

interface IUniswapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);

    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);
    function migrator() external view returns (address);

    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function allPairs(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);

    function createPair(address tokenA, address tokenB) external returns (address pair);

    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
    function setMigrator(address) external;
}

library Address {
    function isContract(address account) internal view returns (bool) {
        // This method relies in extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        // solhint-disable-next-line no-inline-assembly
        assembly { size := extcodesize(account) }
        return size > 0;
    }
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
      return functionCall(target, data, "Address: low-level call failed");
    }
    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return _functionCallWithValue(target, data, 0, errorMessage);
    }
    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }
    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        return _functionCallWithValue(target, data, value, errorMessage);
    }

    function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {
        require(isContract(target), "Address: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

interface IOptimizer {
    function allocateSeigniorage(uint256 amount) external;
    function allocateFee(uint256 amount) external;
}

contract LimitedERC20 is Context, IERC20Standard {
    using SafeMath for uint256;
    using Address for address;
    address public feeManager;

    mapping (address => uint256) private _balances;

    mapping (address => mapping (address => uint256)) private _allowances;

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;
    uint8 private _decimals;

    uint256 internal burnShare = 75;

    constructor (string memory name, string memory symbol, address _feeManager) public {
        _name = name;
        _symbol = symbol;
        _decimals = 18;
        feeManager = _feeManager;
    }

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

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

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

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

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

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

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

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

    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }

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

        (address feeReceiver, uint256 feeAmount) = IFeeManager(feeManager).queryFee(sender, recipient, amount);
        _balances[sender] = _balances[sender].sub(amount, 'ERC20: transfer amount exceeds balance');

        if(feeAmount > 0) {
            uint256 burnAmount = feeAmount.mul(burnShare).div(100);
            _balances[feeReceiver] = _balances[feeReceiver].add(feeAmount.sub(burnAmount));
            IOptimizer(feeReceiver).allocateFee(feeAmount.sub(burnAmount));
            emit Transfer(sender, feeReceiver, feeAmount.sub(burnAmount));
            _burn(sender, burnAmount);
        }

        amount = amount.sub(feeAmount);
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
    }

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

        _totalSupply = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(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");

        _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance");
        _totalSupply = _totalSupply.sub(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 _setupDecimals(uint8 decimals_) internal {
        _decimals = decimals_;
    }

    function _setFeeManager(address _fmg) internal {
        feeManager = _fmg;
    }

    function _setBurnShare(uint256 _toBurn) internal {
        burnShare = _toBurn;
    }
}

abstract contract ERC20Burnable is Context, LimitedERC20 {
    /**
     * @dev Destroys `amount` tokens from the caller.
     *
     * See {ERC20-_burn}.
     */
    function burn(uint256 amount) public virtual {
        _burn(_msgSender(), amount);
    }

    /**
     * @dev Destroys `amount` tokens from `account`, deducting from the caller's
     * allowance.
     *
     * See {ERC20-_burn} and {ERC20-allowance}.
     *
     * Requirements:
     *
     * - the caller must have allowance for ``accounts``'s tokens of at least
     * `amount`.
     */
    function burnFrom(address account, uint256 amount) public virtual {
        _burn(account, amount);
    }
}

contract morphCoin is ERC20Burnable, Operator {

    constructor(address _feeManager) public LimitedERC20('Morph Coin', 'MORC', _feeManager) {
    }

    function mint(address recipient_, uint256 amount_)
        public
        onlyOperator
        returns (bool)
    {
        uint256 balanceBefore = balanceOf(recipient_);
        _mint(recipient_, amount_);
        uint256 balanceAfter = balanceOf(recipient_);

        return balanceAfter > balanceBefore;
    }

    function burn(uint256 amount) public override onlyOperator {
        super.burn(amount);
    }

    function burnFrom(address account, uint256 amount)
        public
        override
        onlyOperator
    {
        super.burnFrom(account, amount);
    }

    function setFeeManager(address _feeManager) public onlyOwner {
        _setFeeManager(_feeManager);
    }

    function setBurnShare(uint256 _toBurn) public onlyOwner {
        _setBurnShare(_toBurn);
    }

    // Fallback rescue

    receive() external payable{
        payable(owner()).transfer(msg.value);
    }

    function rescueToken(IERC20 _token) public {
        _token.transfer(owner(), _token.balanceOf(address(this)));
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_feeManager","type":"address"}],"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":"previousOperator","type":"address"},{"indexed":true,"internalType":"address","name":"newOperator","type":"address"}],"name":"OperatorTransferred","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":"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":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnFrom","outputs":[],"stateMutability":"nonpayable","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":"feeManager","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"isOperator","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient_","type":"address"},{"internalType":"uint256","name":"amount_","type":"uint256"}],"name":"mint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"operator","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"_token","type":"address"}],"name":"rescueToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_toBurn","type":"uint256"}],"name":"setBurnShare","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_feeManager","type":"address"}],"name":"setFeeManager","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_usr","type":"address"},{"internalType":"bool","name":"_isPrivileged","type":"bool"}],"name":"setPrivileged","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":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOperator_","type":"address"}],"name":"transferOperator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052604b6007553480156200001657600080fd5b5060405162001cbe38038062001cbe833981810160405260208110156200003c57600080fd5b5051604080518082018252600a81526926b7b938341021b7b4b760b11b602082810191825283518085019094526004808552634d4f524360e01b918501919091528251929392859262000090929162000192565b508151620000a690600590602085019062000192565b506006805460ff19166012179055600080546001600160a01b039092166001600160a01b03199092169190911781559150620000e390506200018e565b600880546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506200013b6200018e565b600980546001600160a01b0319166001600160a01b0392831617908190556040519116906000907f74da04524d50c64947f5dd5381ef1a4dca5cba8ed1d816243f9e48aa0b5617ed908290a3506200022e565b3390565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620001d557805160ff191683800117855562000205565b8280016001018555821562000205579182015b8281111562000205578251825591602001919060010190620001e8565b506200021392915062000217565b5090565b5b8082111562000213576000815560010162000218565b611a80806200023e6000396000f3fe60806040526004361061016a5760003560e01c8063570ca735116100d157806396cf4feb1161008a578063d0fb020311610064578063d0fb0203146105e7578063dd62ed3e146105fc578063e15a56c814610637578063f2fde38b14610672576101b2565b806396cf4feb1461054b578063a457c2d714610575578063a9059cbb146105ae576101b2565b8063570ca7351461046f57806370a08231146104a0578063715018a6146104d357806379cc6790146104e85780638da5cb5b1461052157806395d89b4114610536576101b2565b80633950935111610123578063395093511461035857806340c10f191461039157806342966c68146103ca5780634456eda2146103f45780634460d3cf14610409578063472d35b91461043c576101b2565b806306fdde03146101b7578063095ea7b31461024157806318160ddd1461028e57806323b872dd146102b557806329605e77146102f8578063313ce5671461032d576101b2565b366101b2576101776106a5565b6001600160a01b03166108fc349081150290604051600060405180830381858888f193505050501580156101af573d6000803e3d6000fd5b50005b600080fd5b3480156101c357600080fd5b506101cc6106b4565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102065781810151838201526020016101ee565b50505050905090810190601f1680156102335780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561024d57600080fd5b5061027a6004803603604081101561026457600080fd5b506001600160a01b03813516906020013561074a565b604080519115158252519081900360200190f35b34801561029a57600080fd5b506102a3610768565b60408051918252519081900360200190f35b3480156102c157600080fd5b5061027a600480360360608110156102d857600080fd5b506001600160a01b0381358116916020810135909116906040013561076e565b34801561030457600080fd5b5061032b6004803603602081101561031b57600080fd5b50356001600160a01b03166107f5565b005b34801561033957600080fd5b50610342610859565b6040805160ff9092168252519081900360200190f35b34801561036457600080fd5b5061027a6004803603604081101561037b57600080fd5b506001600160a01b038135169060200135610862565b34801561039d57600080fd5b5061027a600480360360408110156103b457600080fd5b506001600160a01b0381351690602001356108b0565b3480156103d657600080fd5b5061032b600480360360208110156103ed57600080fd5b5035610949565b34801561040057600080fd5b5061027a6109ba565b34801561041557600080fd5b5061032b6004803603602081101561042c57600080fd5b50356001600160a01b03166109e0565b34801561044857600080fd5b5061032b6004803603602081101561045f57600080fd5b50356001600160a01b0316610ad2565b34801561047b57600080fd5b50610484610b33565b604080516001600160a01b039092168252519081900360200190f35b3480156104ac57600080fd5b506102a3600480360360208110156104c357600080fd5b50356001600160a01b0316610b42565b3480156104df57600080fd5b5061032b610b5d565b3480156104f457600080fd5b5061032b6004803603604081101561050b57600080fd5b506001600160a01b038135169060200135610bff565b34801561052d57600080fd5b506104846106a5565b34801561054257600080fd5b506101cc610c75565b34801561055757600080fd5b5061032b6004803603602081101561056e57600080fd5b5035610cd6565b34801561058157600080fd5b5061027a6004803603604081101561059857600080fd5b506001600160a01b038135169060200135610d37565b3480156105ba57600080fd5b5061027a600480360360408110156105d157600080fd5b506001600160a01b038135169060200135610d9f565b3480156105f357600080fd5b50610484610db3565b34801561060857600080fd5b506102a36004803603604081101561061f57600080fd5b506001600160a01b0381358116916020013516610dc2565b34801561064357600080fd5b5061032b6004803603604081101561065a57600080fd5b506001600160a01b0381351690602001351515610ded565b34801561067e57600080fd5b5061032b6004803603602081101561069557600080fd5b50356001600160a01b0316610e70565b6008546001600160a01b031690565b60048054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156107405780601f1061071557610100808354040283529160200191610740565b820191906000526020600020905b81548152906001019060200180831161072357829003601f168201915b5050505050905090565b600061075e610757610f69565b8484610f6d565b5060015b92915050565b60035490565b600061077b848484611059565b6107eb84610787610f69565b6107e685604051806060016040528060288152602001611954602891396001600160a01b038a166000908152600260205260408120906107c5610f69565b6001600160a01b03168152602081019190915260400160002054919061135e565b610f6d565b5060019392505050565b6107fd610f69565b6008546001600160a01b0390811691161461084d576040805162461bcd60e51b8152602060048201819052602482015260008051602061197c833981519152604482015290519081900360640190fd5b610856816113f5565b50565b60065460ff1690565b600061075e61086f610f69565b846107e68560026000610880610f69565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490611492565b6009546000906001600160a01b03163314806108e05750336000908152600a602052604090205460ff1615156001145b61091b5760405162461bcd60e51b81526004018080602001828103825260298152602001806118b76029913960400191505060405180910390fd5b600061092684610b42565b905061093284846114f3565b600061093d85610b42565b91909111949350505050565b6009546001600160a01b03163314806109765750336000908152600a602052604090205460ff1615156001145b6109b15760405162461bcd60e51b81526004018080602001828103825260298152602001806118b76029913960400191505060405180910390fd5b610856816115c7565b6009546000906001600160a01b03166109d1610f69565b6001600160a01b031614905090565b806001600160a01b031663a9059cbb6109f76106a5565b604080516370a0823160e01b815230600482015290516001600160a01b038616916370a08231916024808301926020929190829003018186803b158015610a3d57600080fd5b505afa158015610a51573d6000803e3d6000fd5b505050506040513d6020811015610a6757600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b039093166004840152602483019190915251604480830192600092919082900301818387803b158015610ab757600080fd5b505af1158015610acb573d6000803e3d6000fd5b5050505050565b610ada610f69565b6008546001600160a01b03908116911614610b2a576040805162461bcd60e51b8152602060048201819052602482015260008051602061197c833981519152604482015290519081900360640190fd5b610856816115d8565b6009546001600160a01b031690565b6001600160a01b031660009081526001602052604090205490565b610b65610f69565b6008546001600160a01b03908116911614610bb5576040805162461bcd60e51b8152602060048201819052602482015260008051602061197c833981519152604482015290519081900360640190fd5b6008546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600880546001600160a01b0319169055565b6009546001600160a01b0316331480610c2c5750336000908152600a602052604090205460ff1615156001145b610c675760405162461bcd60e51b81526004018080602001828103825260298152602001806118b76029913960400191505060405180910390fd5b610c7182826115fa565b5050565b60058054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156107405780601f1061071557610100808354040283529160200191610740565b610cde610f69565b6008546001600160a01b03908116911614610d2e576040805162461bcd60e51b8152602060048201819052602482015260008051602061197c833981519152604482015290519081900360640190fd5b61085681611604565b600061075e610d44610f69565b846107e685604051806060016040528060258152602001611a266025913960026000610d6e610f69565b6001600160a01b03908116825260208083019390935260409182016000908120918d1681529252902054919061135e565b600061075e610dac610f69565b8484611059565b6000546001600160a01b031681565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b610df5610f69565b6008546001600160a01b03908116911614610e45576040805162461bcd60e51b8152602060048201819052602482015260008051602061197c833981519152604482015290519081900360640190fd5b6001600160a01b03919091166000908152600a60205260409020805460ff1916911515919091179055565b610e78610f69565b6008546001600160a01b03908116911614610ec8576040805162461bcd60e51b8152602060048201819052602482015260008051602061197c833981519152604482015290519081900360640190fd5b6001600160a01b038116610f0d5760405162461bcd60e51b815260040180806020018281038252602681526020018061186f6026913960400191505060405180910390fd5b6008546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600880546001600160a01b0319166001600160a01b0392909216919091179055565b3390565b6001600160a01b038316610fb25760405162461bcd60e51b8152600401808060200182810382526024815260200180611a026024913960400191505060405180910390fd5b6001600160a01b038216610ff75760405162461bcd60e51b81526004018080602001828103825260228152602001806118956022913960400191505060405180910390fd5b6001600160a01b03808416600081815260026020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b03831661109e5760405162461bcd60e51b81526004018080602001828103825260258152602001806119dd6025913960400191505060405180910390fd5b6001600160a01b0382166110e35760405162461bcd60e51b815260040180806020018281038252602381526020018061182a6023913960400191505060405180910390fd5b60008054604080516354895ec160e01b81526001600160a01b0387811660048301528681166024830152604482018690528251859491909116926354895ec1926064808201939182900301818787803b15801561113f57600080fd5b505af1158015611153573d6000803e3d6000fd5b505050506040513d604081101561116957600080fd5b508051602091820151604080516060810190915260268082529295509093506111b6928692906118e0908301396001600160a01b038816600090815260016020526040902054919061135e565b6001600160a01b03861660009081526001602052604090205580156112e25760006111f760646111f16007548561160990919063ffffffff16565b90611662565b905061122561120683836116a4565b6001600160a01b03851660009081526001602052604090205490611492565b6001600160a01b0384166000818152600160205260409020919091556381596ec661125084846116a4565b6040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561128657600080fd5b505af115801561129a573d6000803e3d6000fd5b5050506001600160a01b038481169150871660008051602061199c8339815191526112c585856116a4565b60408051918252519081900360200190a36112e086826116e6565b505b6112ec83826116a4565b6001600160a01b0385166000908152600160205260409020549093506113129084611492565b6001600160a01b03808616600081815260016020908152604091829020949094558051878152905191939289169260008051602061199c83398151915292918290030190a35050505050565b600081848411156113ed5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156113b257818101518382015260200161139a565b50505050905090810190601f1680156113df5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6001600160a01b03811661143a5760405162461bcd60e51b815260040180806020018281038252602d815260200180611906602d913960400191505060405180910390fd5b6040516001600160a01b038216906000907f74da04524d50c64947f5dd5381ef1a4dca5cba8ed1d816243f9e48aa0b5617ed908290a3600980546001600160a01b0319166001600160a01b0392909216919091179055565b6000828201838110156114ec576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b6001600160a01b03821661154e576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b60035461155b9082611492565b6003556001600160a01b0382166000908152600160205260409020546115819082611492565b6001600160a01b038316600081815260016020908152604080832094909455835185815293519293919260008051602061199c8339815191529281900390910190a35050565b6108566115d2610f69565b826116e6565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b610c7182826116e6565b600755565b60008261161857506000610762565b8282028284828161162557fe5b04146114ec5760405162461bcd60e51b81526004018080602001828103825260218152602001806119336021913960400191505060405180910390fd5b60006114ec83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506117c4565b60006114ec83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061135e565b6001600160a01b03821661172b5760405162461bcd60e51b81526004018080602001828103825260218152602001806119bc6021913960400191505060405180910390fd5b6117688160405180606001604052806022815260200161184d602291396001600160a01b038516600090815260016020526040902054919061135e565b6001600160a01b03831660009081526001602052604090205560035461178e90826116a4565b6003556040805182815290516000916001600160a01b0385169160008051602061199c8339815191529181900360200190a35050565b600081836118135760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156113b257818101518382015260200161139a565b50600083858161181f57fe5b049594505050505056fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e63654f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f20616464726573736f70657261746f723a2063616c6c657220646f6573206e6f742068617665207065726d697373696f6e45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e63656f70657261746f723a207a65726f206164647265737320676976656e20666f72206e6577206f70657261746f72536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63654f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef45524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212209f5e2b2d0f9e110247ee69f7300c5f515dfc492345d0f37479464bc8df39afd664736f6c634300060c0033000000000000000000000000dac9a58030cc9afbafafd4c79226a764de027b48

Deployed Bytecode

0x60806040526004361061016a5760003560e01c8063570ca735116100d157806396cf4feb1161008a578063d0fb020311610064578063d0fb0203146105e7578063dd62ed3e146105fc578063e15a56c814610637578063f2fde38b14610672576101b2565b806396cf4feb1461054b578063a457c2d714610575578063a9059cbb146105ae576101b2565b8063570ca7351461046f57806370a08231146104a0578063715018a6146104d357806379cc6790146104e85780638da5cb5b1461052157806395d89b4114610536576101b2565b80633950935111610123578063395093511461035857806340c10f191461039157806342966c68146103ca5780634456eda2146103f45780634460d3cf14610409578063472d35b91461043c576101b2565b806306fdde03146101b7578063095ea7b31461024157806318160ddd1461028e57806323b872dd146102b557806329605e77146102f8578063313ce5671461032d576101b2565b366101b2576101776106a5565b6001600160a01b03166108fc349081150290604051600060405180830381858888f193505050501580156101af573d6000803e3d6000fd5b50005b600080fd5b3480156101c357600080fd5b506101cc6106b4565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102065781810151838201526020016101ee565b50505050905090810190601f1680156102335780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561024d57600080fd5b5061027a6004803603604081101561026457600080fd5b506001600160a01b03813516906020013561074a565b604080519115158252519081900360200190f35b34801561029a57600080fd5b506102a3610768565b60408051918252519081900360200190f35b3480156102c157600080fd5b5061027a600480360360608110156102d857600080fd5b506001600160a01b0381358116916020810135909116906040013561076e565b34801561030457600080fd5b5061032b6004803603602081101561031b57600080fd5b50356001600160a01b03166107f5565b005b34801561033957600080fd5b50610342610859565b6040805160ff9092168252519081900360200190f35b34801561036457600080fd5b5061027a6004803603604081101561037b57600080fd5b506001600160a01b038135169060200135610862565b34801561039d57600080fd5b5061027a600480360360408110156103b457600080fd5b506001600160a01b0381351690602001356108b0565b3480156103d657600080fd5b5061032b600480360360208110156103ed57600080fd5b5035610949565b34801561040057600080fd5b5061027a6109ba565b34801561041557600080fd5b5061032b6004803603602081101561042c57600080fd5b50356001600160a01b03166109e0565b34801561044857600080fd5b5061032b6004803603602081101561045f57600080fd5b50356001600160a01b0316610ad2565b34801561047b57600080fd5b50610484610b33565b604080516001600160a01b039092168252519081900360200190f35b3480156104ac57600080fd5b506102a3600480360360208110156104c357600080fd5b50356001600160a01b0316610b42565b3480156104df57600080fd5b5061032b610b5d565b3480156104f457600080fd5b5061032b6004803603604081101561050b57600080fd5b506001600160a01b038135169060200135610bff565b34801561052d57600080fd5b506104846106a5565b34801561054257600080fd5b506101cc610c75565b34801561055757600080fd5b5061032b6004803603602081101561056e57600080fd5b5035610cd6565b34801561058157600080fd5b5061027a6004803603604081101561059857600080fd5b506001600160a01b038135169060200135610d37565b3480156105ba57600080fd5b5061027a600480360360408110156105d157600080fd5b506001600160a01b038135169060200135610d9f565b3480156105f357600080fd5b50610484610db3565b34801561060857600080fd5b506102a36004803603604081101561061f57600080fd5b506001600160a01b0381358116916020013516610dc2565b34801561064357600080fd5b5061032b6004803603604081101561065a57600080fd5b506001600160a01b0381351690602001351515610ded565b34801561067e57600080fd5b5061032b6004803603602081101561069557600080fd5b50356001600160a01b0316610e70565b6008546001600160a01b031690565b60048054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156107405780601f1061071557610100808354040283529160200191610740565b820191906000526020600020905b81548152906001019060200180831161072357829003601f168201915b5050505050905090565b600061075e610757610f69565b8484610f6d565b5060015b92915050565b60035490565b600061077b848484611059565b6107eb84610787610f69565b6107e685604051806060016040528060288152602001611954602891396001600160a01b038a166000908152600260205260408120906107c5610f69565b6001600160a01b03168152602081019190915260400160002054919061135e565b610f6d565b5060019392505050565b6107fd610f69565b6008546001600160a01b0390811691161461084d576040805162461bcd60e51b8152602060048201819052602482015260008051602061197c833981519152604482015290519081900360640190fd5b610856816113f5565b50565b60065460ff1690565b600061075e61086f610f69565b846107e68560026000610880610f69565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490611492565b6009546000906001600160a01b03163314806108e05750336000908152600a602052604090205460ff1615156001145b61091b5760405162461bcd60e51b81526004018080602001828103825260298152602001806118b76029913960400191505060405180910390fd5b600061092684610b42565b905061093284846114f3565b600061093d85610b42565b91909111949350505050565b6009546001600160a01b03163314806109765750336000908152600a602052604090205460ff1615156001145b6109b15760405162461bcd60e51b81526004018080602001828103825260298152602001806118b76029913960400191505060405180910390fd5b610856816115c7565b6009546000906001600160a01b03166109d1610f69565b6001600160a01b031614905090565b806001600160a01b031663a9059cbb6109f76106a5565b604080516370a0823160e01b815230600482015290516001600160a01b038616916370a08231916024808301926020929190829003018186803b158015610a3d57600080fd5b505afa158015610a51573d6000803e3d6000fd5b505050506040513d6020811015610a6757600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b039093166004840152602483019190915251604480830192600092919082900301818387803b158015610ab757600080fd5b505af1158015610acb573d6000803e3d6000fd5b5050505050565b610ada610f69565b6008546001600160a01b03908116911614610b2a576040805162461bcd60e51b8152602060048201819052602482015260008051602061197c833981519152604482015290519081900360640190fd5b610856816115d8565b6009546001600160a01b031690565b6001600160a01b031660009081526001602052604090205490565b610b65610f69565b6008546001600160a01b03908116911614610bb5576040805162461bcd60e51b8152602060048201819052602482015260008051602061197c833981519152604482015290519081900360640190fd5b6008546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600880546001600160a01b0319169055565b6009546001600160a01b0316331480610c2c5750336000908152600a602052604090205460ff1615156001145b610c675760405162461bcd60e51b81526004018080602001828103825260298152602001806118b76029913960400191505060405180910390fd5b610c7182826115fa565b5050565b60058054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156107405780601f1061071557610100808354040283529160200191610740565b610cde610f69565b6008546001600160a01b03908116911614610d2e576040805162461bcd60e51b8152602060048201819052602482015260008051602061197c833981519152604482015290519081900360640190fd5b61085681611604565b600061075e610d44610f69565b846107e685604051806060016040528060258152602001611a266025913960026000610d6e610f69565b6001600160a01b03908116825260208083019390935260409182016000908120918d1681529252902054919061135e565b600061075e610dac610f69565b8484611059565b6000546001600160a01b031681565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b610df5610f69565b6008546001600160a01b03908116911614610e45576040805162461bcd60e51b8152602060048201819052602482015260008051602061197c833981519152604482015290519081900360640190fd5b6001600160a01b03919091166000908152600a60205260409020805460ff1916911515919091179055565b610e78610f69565b6008546001600160a01b03908116911614610ec8576040805162461bcd60e51b8152602060048201819052602482015260008051602061197c833981519152604482015290519081900360640190fd5b6001600160a01b038116610f0d5760405162461bcd60e51b815260040180806020018281038252602681526020018061186f6026913960400191505060405180910390fd5b6008546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600880546001600160a01b0319166001600160a01b0392909216919091179055565b3390565b6001600160a01b038316610fb25760405162461bcd60e51b8152600401808060200182810382526024815260200180611a026024913960400191505060405180910390fd5b6001600160a01b038216610ff75760405162461bcd60e51b81526004018080602001828103825260228152602001806118956022913960400191505060405180910390fd5b6001600160a01b03808416600081815260026020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b03831661109e5760405162461bcd60e51b81526004018080602001828103825260258152602001806119dd6025913960400191505060405180910390fd5b6001600160a01b0382166110e35760405162461bcd60e51b815260040180806020018281038252602381526020018061182a6023913960400191505060405180910390fd5b60008054604080516354895ec160e01b81526001600160a01b0387811660048301528681166024830152604482018690528251859491909116926354895ec1926064808201939182900301818787803b15801561113f57600080fd5b505af1158015611153573d6000803e3d6000fd5b505050506040513d604081101561116957600080fd5b508051602091820151604080516060810190915260268082529295509093506111b6928692906118e0908301396001600160a01b038816600090815260016020526040902054919061135e565b6001600160a01b03861660009081526001602052604090205580156112e25760006111f760646111f16007548561160990919063ffffffff16565b90611662565b905061122561120683836116a4565b6001600160a01b03851660009081526001602052604090205490611492565b6001600160a01b0384166000818152600160205260409020919091556381596ec661125084846116a4565b6040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561128657600080fd5b505af115801561129a573d6000803e3d6000fd5b5050506001600160a01b038481169150871660008051602061199c8339815191526112c585856116a4565b60408051918252519081900360200190a36112e086826116e6565b505b6112ec83826116a4565b6001600160a01b0385166000908152600160205260409020549093506113129084611492565b6001600160a01b03808616600081815260016020908152604091829020949094558051878152905191939289169260008051602061199c83398151915292918290030190a35050505050565b600081848411156113ed5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156113b257818101518382015260200161139a565b50505050905090810190601f1680156113df5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6001600160a01b03811661143a5760405162461bcd60e51b815260040180806020018281038252602d815260200180611906602d913960400191505060405180910390fd5b6040516001600160a01b038216906000907f74da04524d50c64947f5dd5381ef1a4dca5cba8ed1d816243f9e48aa0b5617ed908290a3600980546001600160a01b0319166001600160a01b0392909216919091179055565b6000828201838110156114ec576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b6001600160a01b03821661154e576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b60035461155b9082611492565b6003556001600160a01b0382166000908152600160205260409020546115819082611492565b6001600160a01b038316600081815260016020908152604080832094909455835185815293519293919260008051602061199c8339815191529281900390910190a35050565b6108566115d2610f69565b826116e6565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b610c7182826116e6565b600755565b60008261161857506000610762565b8282028284828161162557fe5b04146114ec5760405162461bcd60e51b81526004018080602001828103825260218152602001806119336021913960400191505060405180910390fd5b60006114ec83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506117c4565b60006114ec83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061135e565b6001600160a01b03821661172b5760405162461bcd60e51b81526004018080602001828103825260218152602001806119bc6021913960400191505060405180910390fd5b6117688160405180606001604052806022815260200161184d602291396001600160a01b038516600090815260016020526040902054919061135e565b6001600160a01b03831660009081526001602052604090205560035461178e90826116a4565b6003556040805182815290516000916001600160a01b0385169160008051602061199c8339815191529181900360200190a35050565b600081836118135760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156113b257818101518382015260200161139a565b50600083858161181f57fe5b049594505050505056fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e63654f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f20616464726573736f70657261746f723a2063616c6c657220646f6573206e6f742068617665207065726d697373696f6e45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e63656f70657261746f723a207a65726f206164647265737320676976656e20666f72206e6577206f70657261746f72536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63654f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef45524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212209f5e2b2d0f9e110247ee69f7300c5f515dfc492345d0f37479464bc8df39afd664736f6c634300060c0033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000dac9a58030cc9afbafafd4c79226a764de027b48

-----Decoded View---------------
Arg [0] : _feeManager (address): 0xdac9A58030cC9AfbaFaFd4C79226A764dE027b48

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000dac9a58030cc9afbafafd4c79226a764de027b48


Deployed Bytecode Sourcemap

33451:1220:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34505:7;:5;:7::i;:::-;-1:-1:-1;;;;;34497:25:0;:36;34523:9;34497:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33451:1220;;;;;28529:83;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29383:169;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;29383:169:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;28806:100;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;29558:321;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;29558:321:0;;;;;;;;;;;;;;;;;:::i;4029:115::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4029:115:0;-1:-1:-1;;;;;4029:115:0;;:::i;:::-;;28715:83;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;29887:218;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;29887:218:0;;;;;;;;:::i;33610:322::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;33610:322:0;;;;;;;;:::i;33940:96::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33940:96:0;;:::i;3921:100::-;;;;;;;;;;;;;:::i;34549:119::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34549:119:0;-1:-1:-1;;;;;34549:119:0;;:::i;34214:107::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34214:107:0;-1:-1:-1;;;;;34214:107:0;;:::i;3521:85::-;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;3521:85:0;;;;;;;;;;;;;;28914:119;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28914:119:0;-1:-1:-1;;;;;28914:119:0;;:::i;2730:148::-;;;;;;;;;;;;;:::i;34044:162::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;34044:162:0;;;;;;;;:::i;2431:79::-;;;;;;;;;;;;;:::i;28620:87::-;;;;;;;;;;;;;:::i;34329:97::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34329:97:0;;:::i;30113:269::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;30113:269:0;;;;;;;;:::i;29041:175::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;29041:175:0;;;;;;;;:::i;27988:25::-;;;;;;;;;;;;;:::i;29224:151::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;29224:151:0;;;;;;;;;;:::i;3614:125::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;3614:125:0;;;;;;;;;;:::i;2886:244::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2886:244:0;-1:-1:-1;;;;;2886:244:0;;:::i;2431:79::-;2496:6;;-1:-1:-1;;;;;2496:6:0;2431:79;:::o;28529:83::-;28599:5;28592:12;;;;;;;;-1:-1:-1;;28592:12:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28566:13;;28592:12;;28599:5;;28592:12;;28599:5;28592:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28529:83;:::o;29383:169::-;29466:4;29483:39;29492:12;:10;:12::i;:::-;29506:7;29515:6;29483:8;:39::i;:::-;-1:-1:-1;29540:4:0;29383:169;;;;;:::o;28806:100::-;28886:12;;28806:100;:::o;29558:321::-;29664:4;29681:36;29691:6;29699:9;29710:6;29681:9;:36::i;:::-;29728:121;29737:6;29745:12;:10;:12::i;:::-;29759:89;29797:6;29759:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;29759:19:0;;;;;;:11;:19;;;;;;29779:12;:10;:12::i;:::-;-1:-1:-1;;;;;29759:33:0;;;;;;;;;;;;-1:-1:-1;29759:33:0;;;:89;:37;:89::i;:::-;29728:8;:121::i;:::-;-1:-1:-1;29867:4:0;29558:321;;;;;:::o;4029:115::-;2653:12;:10;:12::i;:::-;2643:6;;-1:-1:-1;;;;;2643:6:0;;;:22;;;2635:67;;;;;-1:-1:-1;;;2635:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2635:67:0;;;;;;;;;;;;;;;4105:31:::1;4123:12;4105:17;:31::i;:::-;4029:115:::0;:::o;28715:83::-;28781:9;;;;28715:83;:::o;29887:218::-;29975:4;29992:83;30001:12;:10;:12::i;:::-;30015:7;30024:50;30063:10;30024:11;:25;30036:12;:10;:12::i;:::-;-1:-1:-1;;;;;30024:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;30024:25:0;;;:34;;;;;;;;;;;:38;:50::i;33610:322::-;3804:9;;33717:4;;-1:-1:-1;;;;;3804:9:0;3790:10;:23;;:57;;-1:-1:-1;3828:10:0;3817:22;;;;:10;:22;;;;;;;;:30;;:22;:30;3790:57;3782:111;;;;-1:-1:-1;;;3782:111:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33739:21:::1;33763;33773:10;33763:9;:21::i;:::-;33739:45;;33795:26;33801:10;33813:7;33795:5;:26::i;:::-;33832:20;33855:21;33865:10;33855:9;:21::i;:::-;33896:28:::0;;;::::1;::::0;33610:322;-1:-1:-1;;;;33610:322:0:o;33940:96::-;3804:9;;-1:-1:-1;;;;;3804:9:0;3790:10;:23;;:57;;-1:-1:-1;3828:10:0;3817:22;;;;:10;:22;;;;;;;;:30;;:22;:30;3790:57;3782:111;;;;-1:-1:-1;;;3782:111:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34010:18:::1;34021:6;34010:10;:18::i;3921:100::-:0;4004:9;;3964:4;;-1:-1:-1;;;;;4004:9:0;3988:12;:10;:12::i;:::-;-1:-1:-1;;;;;3988:25:0;;3981:32;;3921:100;:::o;34549:119::-;34603:6;-1:-1:-1;;;;;34603:15:0;;34619:7;:5;:7::i;:::-;34628:31;;;-1:-1:-1;;;34628:31:0;;34653:4;34628:31;;;;;;-1:-1:-1;;;;;34628:16:0;;;;;:31;;;;;;;;;;;;;;:16;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34628:31:0;34603:57;;;-1:-1:-1;;;;;;34603:57:0;;;;;;;-1:-1:-1;;;;;34603:57:0;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;34603:57:0;;;;;;;-1:-1:-1;34603:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34549:119;:::o;34214:107::-;2653:12;:10;:12::i;:::-;2643:6;;-1:-1:-1;;;;;2643:6:0;;;:22;;;2635:67;;;;;-1:-1:-1;;;2635:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2635:67:0;;;;;;;;;;;;;;;34286:27:::1;34301:11;34286:14;:27::i;3521:85::-:0;3589:9;;-1:-1:-1;;;;;3589:9:0;3521:85;:::o;28914:119::-;-1:-1:-1;;;;;29007:18:0;28980:7;29007:18;;;:9;:18;;;;;;;28914:119::o;2730:148::-;2653:12;:10;:12::i;:::-;2643:6;;-1:-1:-1;;;;;2643:6:0;;;:22;;;2635:67;;;;;-1:-1:-1;;;2635:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2635:67:0;;;;;;;;;;;;;;;2821:6:::1;::::0;2800:40:::1;::::0;2837:1:::1;::::0;-1:-1:-1;;;;;2821:6:0::1;::::0;2800:40:::1;::::0;2837:1;;2800:40:::1;2851:6;:19:::0;;-1:-1:-1;;;;;;2851:19:0::1;::::0;;2730:148::o;34044:162::-;3804:9;;-1:-1:-1;;;;;3804:9:0;3790:10;:23;;:57;;-1:-1:-1;3828:10:0;3817:22;;;;:10;:22;;;;;;;;:30;;:22;:30;3790:57;3782:111;;;;-1:-1:-1;;;3782:111:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34167:31:::1;34182:7;34191:6;34167:14;:31::i;:::-;34044:162:::0;;:::o;28620:87::-;28692:7;28685:14;;;;;;;;-1:-1:-1;;28685:14:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28659:13;;28685:14;;28692:7;;28685:14;;28692:7;28685:14;;;;;;;;;;;;;;;;;;;;;;;;34329:97;2653:12;:10;:12::i;:::-;2643:6;;-1:-1:-1;;;;;2643:6:0;;;:22;;;2635:67;;;;;-1:-1:-1;;;2635:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2635:67:0;;;;;;;;;;;;;;;34396:22:::1;34410:7;34396:13;:22::i;30113:269::-:0;30206:4;30223:129;30232:12;:10;:12::i;:::-;30246:7;30255:96;30294:15;30255:96;;;;;;;;;;;;;;;;;:11;:25;30267:12;:10;:12::i;:::-;-1:-1:-1;;;;;30255:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;30255:25:0;;;:34;;;;;;;;;;;:96;:38;:96::i;29041:175::-;29127:4;29144:42;29154:12;:10;:12::i;:::-;29168:9;29179:6;29144:9;:42::i;27988:25::-;;;-1:-1:-1;;;;;27988:25:0;;:::o;29224:151::-;-1:-1:-1;;;;;29340:18:0;;;29313:7;29340:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;29224:151::o;3614:125::-;2653:12;:10;:12::i;:::-;2643:6;;-1:-1:-1;;;;;2643:6:0;;;:22;;;2635:67;;;;;-1:-1:-1;;;2635:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2635:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;3699:16:0;;;::::1;;::::0;;;:10:::1;:16;::::0;;;;:32;;-1:-1:-1;;3699:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;3614:125::o;2886:244::-;2653:12;:10;:12::i;:::-;2643:6;;-1:-1:-1;;;;;2643:6:0;;;:22;;;2635:67;;;;;-1:-1:-1;;;2635:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2635:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;2975:22:0;::::1;2967:73;;;;-1:-1:-1::0;;;2967:73:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3077:6;::::0;3056:38:::1;::::0;-1:-1:-1;;;;;3056:38:0;;::::1;::::0;3077:6:::1;::::0;3056:38:::1;::::0;3077:6:::1;::::0;3056:38:::1;3105:6;:17:::0;;-1:-1:-1;;;;;;3105:17:0::1;-1:-1:-1::0;;;;;3105:17:0;;;::::1;::::0;;;::::1;::::0;;2886:244::o;120:106::-;208:10;120:106;:::o;32118:346::-;-1:-1:-1;;;;;32220:19:0;;32212:68;;;;-1:-1:-1;;;32212:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;32299:21:0;;32291:68;;;;-1:-1:-1;;;32291:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;32372:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;32424:32;;;;;;;;;;;;;;;;;32118:346;;;:::o;30390:1032::-;-1:-1:-1;;;;;30496:20:0;;30488:70;;;;-1:-1:-1;;;30488:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;30577:23:0;;30569:71;;;;-1:-1:-1;;;30569:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30654:19;30708:10;;30696:59;;;-1:-1:-1;;;30696:59:0;;-1:-1:-1;;;;;30696:59:0;;;;;;;;;;;;;;;;;;;;;;30654:19;;30708:10;;;;;30696:32;;:59;;;;;;;;;;;30654:19;30708:10;30696:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30696:59:0;;;;;;;;30786:71;;;;;;;;;;;;30696:59;;-1:-1:-1;30696:59:0;;-1:-1:-1;30786:71:0;;30808:6;;30786:71;;;;;;-1:-1:-1;;;;;30786:17:0;;;;;;:9;:17;;;;;;;:71;:21;:71::i;:::-;-1:-1:-1;;;;;30766:17:0;;;;;;:9;:17;;;;;:91;30873:13;;30870:385;;30903:18;30924:33;30953:3;30924:24;30938:9;;30924;:13;;:24;;;;:::i;:::-;:28;;:33::i;:::-;30903:54;-1:-1:-1;30997:53:0;31024:25;:9;30903:54;31024:13;:25::i;:::-;-1:-1:-1;;;;;30997:22:0;;;;;;:9;:22;;;;;;;:26;:53::i;:::-;-1:-1:-1;;;;;30972:22:0;;;;;;:9;:22;;;;;:78;;;;31065:35;31101:25;:9;31115:10;31101:13;:25::i;:::-;31065:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;31147:56:0;;;;-1:-1:-1;31147:56:0;;-1:-1:-1;;;;;;;;;;;31177:25:0;:9;31191:10;31177:13;:25::i;:::-;31147:56;;;;;;;;;;;;;;;31218:25;31224:6;31232:10;31218:5;:25::i;:::-;30870:385;;31276:21;:6;31287:9;31276:10;:21::i;:::-;-1:-1:-1;;;;;31331:20:0;;;;;;:9;:20;;;;;;31267:30;;-1:-1:-1;31331:32:0;;31267:30;31331:24;:32::i;:::-;-1:-1:-1;;;;;31308:20:0;;;;;;;:9;:20;;;;;;;;;:55;;;;31379:35;;;;;;;31308:20;;31379:35;;;;-1:-1:-1;;;;;;;;;;;31379:35:0;;;;;;;;30390:1032;;;;;:::o;4808:192::-;4894:7;4930:12;4922:6;;;;4914:29;;;;-1:-1:-1;;;4914:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;4966:5:0;;;4808:192::o;4152:294::-;-1:-1:-1;;;;;4243:26:0;;4221:121;;;;-1:-1:-1;;;4221:121:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4358:45;;-1:-1:-1;;;;;4358:45:0;;;4386:1;;4358:45;;4386:1;;4358:45;4414:9;:24;;-1:-1:-1;;;;;;4414:24:0;-1:-1:-1;;;;;4414:24:0;;;;;;;;;;4152:294::o;4479:181::-;4537:7;4569:5;;;4593:6;;;;4585:46;;;;;-1:-1:-1;;;4585:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;4651:1;4479:181;-1:-1:-1;;;4479:181:0:o;31430:316::-;-1:-1:-1;;;;;31514:21:0;;31506:65;;;;;-1:-1:-1;;;31506:65:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;31599:12;;:24;;31616:6;31599:16;:24::i;:::-;31584:12;:39;-1:-1:-1;;;;;31655:18:0;;;;;;:9;:18;;;;;;:30;;31678:6;31655:22;:30::i;:::-;-1:-1:-1;;;;;31634:18:0;;;;;;:9;:18;;;;;;;;:51;;;;31701:37;;;;;;;31634:18;;;;-1:-1:-1;;;;;;;;;;;31701:37:0;;;;;;;;;31430:316;;:::o;32927:91::-;32983:27;32989:12;:10;:12::i;:::-;33003:6;32983:5;:27::i;32570:83::-;32628:10;:17;;-1:-1:-1;;;;;;32628:17:0;-1:-1:-1;;;;;32628:17:0;;;;;;;;;;32570:83::o;33337:107::-;33414:22;33420:7;33429:6;33414:5;:22::i;32661:87::-;32721:9;:19;32661:87::o;5006:471::-;5064:7;5309:6;5305:47;;-1:-1:-1;5339:1:0;5332:8;;5305:47;5376:5;;;5380:1;5376;:5;:1;5400:5;;;;;:10;5392:56;;;;-1:-1:-1;;;5392:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5483:132;5541:7;5568:39;5572:1;5575;5568:39;;;;;;;;;;;;;;;;;:3;:39::i;4666:136::-;4724:7;4751:43;4755:1;4758;4751:43;;;;;;;;;;;;;;;;;:3;:43::i;31754:356::-;-1:-1:-1;;;;;31838:21:0;;31830:67;;;;-1:-1:-1;;;31830:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31931:68;31954:6;31931:68;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;31931:18:0;;;;;;:9;:18;;;;;;;:68;:22;:68::i;:::-;-1:-1:-1;;;;;31910:18:0;;;;;;:9;:18;;;;;:89;32025:12;;:24;;32042:6;32025:16;:24::i;:::-;32010:12;:39;32065:37;;;;;;;;32091:1;;-1:-1:-1;;;;;32065:37:0;;;-1:-1:-1;;;;;;;;;;;32065:37:0;;;;;;;;31754:356;;:::o;5621:278::-;5707:7;5742:12;5735:5;5727:28;;;;-1:-1:-1;;;5727:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5766:9;5782:1;5778;:5;;;;;;;5621:278;-1:-1:-1;;;;;5621:278:0:o

Swarm Source

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