Contract 0xee23ce51ecf893481fe95cc5e7ec3cb0de1436db 1

 
 
Txn Hash
Method
Block
From
To
Value [Txn Fee]
0x4c73ab906365cdf56cbead0409d1b787e5cdd1f8e7d3a566daf9047b0ca8e9e9Deposit193248302021-09-20 21:30:30620 days 20 hrs ago0xa5e5860b34ac0c55884f2d0e9576d545e1c7dfd4 IN  0xee23ce51ecf893481fe95cc5e7ec3cb0de1436db0 MATIC0.004860750
0x88bd1aa0b9eecf697d5473db602d6af19eefd58a0479477df4cad8be0e7c0e4bManual Step Swap193248152021-09-20 21:30:00620 days 20 hrs ago0xa5e5860b34ac0c55884f2d0e9576d545e1c7dfd4 IN  0xee23ce51ecf893481fe95cc5e7ec3cb0de1436db0 MATIC0.0076444550
0xf48b32ceb58dcdfea871bc36aed2771c5a953eaf5944d6a91b5f9c1a43587be5Admin Withdraw183965652021-08-25 23:36:58646 days 18 hrs ago0xeb678812778b68a48001b4a9a4a04c4924c33598 IN  0xee23ce51ecf893481fe95cc5e7ec3cb0de1436db0 MATIC0.0001385248931.355310137
0xc0a89fb0a584ce89708de9031506442126c6f38d008fe477267f3972ea546d26Admin Withdraw183962772021-08-25 23:27:01646 days 18 hrs ago0xeb678812778b68a48001b4a9a4a04c4924c33598 IN  0xee23ce51ecf893481fe95cc5e7ec3cb0de1436db0 MATIC0.0002747210
0x3c248ba580b20626fe9c1a8c2ea6ae60ab68fc2b6bebaf6032d3a506696a3d98Oracle Step Swap183949272021-08-25 22:32:02646 days 19 hrs ago0xa5e5860b34ac0c55884f2d0e9576d545e1c7dfd4 IN  0xee23ce51ecf893481fe95cc5e7ec3cb0de1436db0 MATIC0.0039123620
0x26d77898ff528528831a528b7612b2ca2830939c4538de1e5a2bccf830ac82dfOracle Step Swap183948972021-08-25 22:30:02646 days 19 hrs ago0xa5e5860b34ac0c55884f2d0e9576d545e1c7dfd4 IN  0xee23ce51ecf893481fe95cc5e7ec3cb0de1436db0 MATIC0.00294718515
0xec1c2a8ec4e12ff6229658bbd271f1ec67603c9b5e1a2a3dd15c396160f3791dOracle Step Swap183947452021-08-25 22:23:58646 days 19 hrs ago0xa5e5860b34ac0c55884f2d0e9576d545e1c7dfd4 IN  0xee23ce51ecf893481fe95cc5e7ec3cb0de1436db0 MATIC0.0047342550
0x329d1d19de18131a8efc9269b4e6b9a2a05ea71f4810f51b0a95cf4b669bbf6dOracle Step Swap183947422021-08-25 22:23:46646 days 19 hrs ago0xa5e5860b34ac0c55884f2d0e9576d545e1c7dfd4 IN  0xee23ce51ecf893481fe95cc5e7ec3cb0de1436db0 MATIC0.00142027515
0xc636de02c83b725f68573a5d9aab428be5aada911da98147a301e92a592c7db2Oracle Step Swap183945982021-08-25 22:14:52646 days 19 hrs ago0xa5e5860b34ac0c55884f2d0e9576d545e1c7dfd4 IN  0xee23ce51ecf893481fe95cc5e7ec3cb0de1436db0 MATIC0.0007282026833.90413242
0x0f0e728bc1ce5226cd63793673b8ed22e5771383a396255e8c66a568d1004463Oracle Step Swap183945692021-08-25 22:13:54646 days 19 hrs ago0xa5e5860b34ac0c55884f2d0e9576d545e1c7dfd4 IN  0xee23ce51ecf893481fe95cc5e7ec3cb0de1436db0 MATIC0.00295864515
0x9065d220b6f464baab337ef9c197a9b8c8b39d07355d7082a03b92c375525dabOracle Step Swap183945072021-08-25 22:10:02646 days 19 hrs ago0xa5e5860b34ac0c55884f2d0e9576d545e1c7dfd4 IN  0xee23ce51ecf893481fe95cc5e7ec3cb0de1436db0 MATIC0.00346951515
0x68643c8f904c1c9070e8edb1efe69a0c9cce1444a0661dcc41fbcebcd5bb5addOracle Step Swap183944192021-08-25 22:06:10646 days 19 hrs ago0xa5e5860b34ac0c55884f2d0e9576d545e1c7dfd4 IN  0xee23ce51ecf893481fe95cc5e7ec3cb0de1436db0 MATIC0.00397858515
0x0b20ac6843bc44b78e98ddd7a8ebf770a15989702faad5609f8e6f4f63d300f5Oracle Step Swap183944052021-08-25 22:05:14646 days 19 hrs ago0xa5e5860b34ac0c55884f2d0e9576d545e1c7dfd4 IN  0xee23ce51ecf893481fe95cc5e7ec3cb0de1436db0 MATIC0.00308266515
0xeffea2bcb914cb60774ff33bc901aa443a0db9701590310d5981e62113e5d0b6Oracle Step Swap183943842021-08-25 22:03:50646 days 19 hrs ago0xa5e5860b34ac0c55884f2d0e9576d545e1c7dfd4 IN  0xee23ce51ecf893481fe95cc5e7ec3cb0de1436db0 MATIC0.00273682513
0xfa44f8646390772a2ef50d8c0e5abb9cb6380217d2caba89b2d6820266e567a3Oracle Step Swap183943742021-08-25 22:03:10646 days 19 hrs ago0xa5e5860b34ac0c55884f2d0e9576d545e1c7dfd4 IN  0xee23ce51ecf893481fe95cc5e7ec3cb0de1436db0 MATIC0.00269245911
0x099bcc4a48a1f8ec5430b1266da14f2cdb4efecb6d455362b645461d76bd078cOracle Step Swap183585012021-08-24 21:21:52647 days 20 hrs ago0xa5e5860b34ac0c55884f2d0e9576d545e1c7dfd4 IN  0xee23ce51ecf893481fe95cc5e7ec3cb0de1436db0 MATIC0.0006701400383.036140822
0xfcdc956aadad599fb3178bb679497b1a7410a91c3ace5aa787393e418dbf52a9Adjust Whitelist183579862021-08-24 21:01:40647 days 20 hrs ago0xeb678812778b68a48001b4a9a4a04c4924c33598 IN  0xee23ce51ecf893481fe95cc5e7ec3cb0de1436db0 MATIC0.0000768597031.611720001
0x7e7af6b23063722f638e9aeb5548fba47a8b6045b279085a756e091224705e30Transfer Ownersh...181347882021-08-18 21:49:45653 days 20 hrs ago0x3b4481baa2d1d841d7a19e10c570616a6f99a640 IN  0xee23ce51ecf893481fe95cc5e7ec3cb0de1436db0 MATIC0.0000286231
0x4e24021072ebaf78a4b892a7c6596917f7fcb8f209287435a1618fa71331d78e0x60806040181347572021-08-18 21:48:39653 days 20 hrs ago0x3b4481baa2d1d841d7a19e10c570616a6f99a640 IN  Create: FeeManager0 MATIC0.0020371671
[ Download CSV Export 
Parent Txn Hash Block From To Value
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
FeeManager

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at polygonscan.com on 2021-08-22
*/

// Sources flattened with hardhat v2.4.1 https://hardhat.org
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;
/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface OZ_IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}



interface IPathOracle {
    /**
     * Assume claimFee uses msg.sender, and returns the amount of WETH sent to the caller
     */
    function appendPath(address token0, address token1) external;

    function stepPath(address from) external view returns(address to);
}



interface IPriceOracle {
    /**
     * Assume claimFee uses msg.sender, and returns the amount of WETH sent to the caller
     */

    struct oracle {
        uint[2] price0Cumulative;
        uint[2] price1Cumulative;
        uint32[2] timeStamp;
        uint8 index; // 0 or 1
    }

    function getPrice(address pairAddress) external returns (uint price0Average, uint price1Average, uint timeTillValid);

    function calculateMinAmount(address from, uint256 slippage, uint256 amount, address pairAddress) external returns (uint minAmount, uint timeTillValid);

    function getOracleTime(address pairAddress) external view returns(uint currentTimestamp, uint otherTimestamp);

    function priceValidStart() external view returns(uint);
    function priceValidEnd() external view returns(uint);
}


/*
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}


/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract 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() {
        _setOwner(_msgSender());
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual 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");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _setOwner(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _setOwner(newOwner);
    }

    function _setOwner(address newOwner) private {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}


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

    function feeToSetter() external view returns (address);
    function migrator() external view returns (address);
    function weth() external view returns (address);
    function wbtc() external view returns (address);
    function gfi() external view returns (address);
    function earningsManager() external view returns (address);
    function feeManager() external view returns (address);
    function dustPan() external view returns (address);
    function governor() external view returns (address);
    function priceOracle() external view returns (address);
    function pathOracle() external view returns (address);
    function router() external view returns (address);
    function paused() external view returns (bool);
    function slippage() external view returns (uint);


    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 setFeeToSetter(address) external;
    function setMigrator(address) external;
}


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 IUniswapV2Router02 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 iGovernance {
    /**
     * Assume claimFee uses msg.sender, and returns the amount of WETH sent to the caller
     */
    function delegateFee(address reciever) external returns (uint256);

    function claimFee() external returns (uint256);

    function tierLedger(address user, uint index) external returns(uint);

    function depositFee(uint256 amountWETH, uint256 amountWBTC) external;

    function Tiers(uint index) external returns(uint);
}








contract FeeManager is Ownable {
    address[] public tokenList;
    mapping(address => uint256) public tokenIndex;
    address public factory;
    mapping(address => bool) public whitelist;
    IUniswapV2Factory Factory;

    modifier onlyWhitelist() {
        require(whitelist[msg.sender], "Caller is not in whitelist!");
        _;
    }

    modifier onlyFactory() {
        require(msg.sender == factory, "Gravity Finance: FORBIDDEN");
        _;
    }

    /**
    * @dev emitted when owner changes the whitelist
    * @param _address the address that had its whitelist status changed
    * @param newBool the new state of the address
    **/
    event whiteListChanged(address _address, bool newBool);

    /**
    * @dev emitted when catalougeTokens is called by factory
    * @param token0 the first token address of the swap pair
    * @param token1 the second token address of the swap pair
    **/
    event addTokens(address token0, address token1);

    /**
    * @dev emitted when fees are deposited into governance contract
    * @param amountWETH the amount of wETH deposited into the governance contract
    * @param amountWBTC the amount of wBTC deposited into the governance contract
    **/
    event feeDeposited(uint amountWETH, uint amountWBTC);

    /** 
    * @dev emitted when the fee manager makes a swap
    * @param from the address of the token it swapped from
    * @param to the address of the token it swapped into
    **/
    event swapped(address from, address to);

    /** 
    * @dev emitted when owner calls adminWithdraw
    * @param asset the address of the asset that was moved out of the fee manager
    **/
    event AdminWithdrawCalled(address asset);

    constructor(address _factory) {
        tokenList.push(address(0)); //populate the 0 index with the zero address
        factory = _factory;
        Factory = IUniswapV2Factory(factory);
    }

    /**
    * @dev called by owner to change the privelages for an address
    * @param _address the address that you want its privelages changed
    * @param _bool the new privelage for that address
    **/
    function adjustWhitelist(address _address, bool _bool) external onlyOwner {
        whitelist[_address] = _bool;
        emit whiteListChanged(_address, _bool);
    }

    /**
    * @dev When swap pairs are created, add their tokens to the tokenList if not already in it
    * @param token0 the first token address of the swap pair
    * @param token1 the second token address of the swap pair
    **/
    function catalougeTokens(address token0, address token1) external onlyFactory{
        if (tokenIndex[token0] == 0) {
            tokenList.push(token0);
            tokenIndex[token0] = tokenList.length - 1;
        }

        if (tokenIndex[token1] == 0) {
            tokenList.push(token1);
            tokenIndex[token1] = tokenList.length - 1;
        }
        emit addTokens(token0, token1);
    }

    /** 
    * @dev used to deposit wETH and wBTC into governance contract
    **/
    function deposit() external onlyWhitelist {
        OZ_IERC20 weth = OZ_IERC20(Factory.weth());
        OZ_IERC20 wbtc = OZ_IERC20(Factory.wbtc());
        uint256 amountWETH = weth.balanceOf(address(this));
        uint256 amountWBTC = wbtc.balanceOf(address(this));
        weth.approve(Factory.governor(), amountWETH);
        wbtc.approve(Factory.governor(), amountWBTC);
        iGovernance(Factory.governor()).depositFee(amountWETH, amountWBTC);
        emit feeDeposited(amountWETH, amountWBTC);
    }

    /** 
    * @dev used to get the time window for when it is valid to call oracleStepSwap without reverting
    * @param asset the asset you want to convert into the next asset in the path
    * @return valid expiration the unix timestamp for when price will be valid, and for when it will expire
    **/
    function validTimeWindow(address asset) external returns(uint valid, uint expiration){
        IPriceOracle PriceOracle = IPriceOracle(Factory.priceOracle());
        address nextAsset = IPathOracle(Factory.pathOracle()).stepPath(asset);
        address pairAddress = Factory.getPair(asset, nextAsset);
        
        //Call get price
        PriceOracle.getPrice(pairAddress);

        (uint pairCurrentTime,) = PriceOracle.getOracleTime(pairAddress);
        
        expiration = pairCurrentTime + PriceOracle.priceValidEnd();
        valid = pairCurrentTime + PriceOracle.priceValidStart();
    }

    /** 
    * @dev allows whitelist addresses to swap assets using oracles
    * @param asset the address of the token you want to swap for the next asset in the PathOracle pathMap
    * @param half a bool indicating whether or not to only swap half of the amount of the asset
    **/
    function oracleStepSwap(address asset, bool half) external onlyWhitelist{
        uint tokenBal = OZ_IERC20(asset).balanceOf(address(this));
        if(half){
            tokenBal / 2;
        }
        address[] memory path = new address[](2);
        address nextAsset = IPathOracle(Factory.pathOracle()).stepPath(asset);
        address pairAddress = Factory.getPair(asset, nextAsset);
        (uint minAmount, uint timeTillValid) = IPriceOracle(Factory.priceOracle())
            .calculateMinAmount(asset, Factory.slippage(), tokenBal, pairAddress);
        require(timeTillValid == 0, "Price(s) not valid Call checkPrice()");
        OZ_IERC20(asset).approve(Factory.router(), tokenBal);
        path[0] = asset;
        path[1] = nextAsset;
        IUniswapV2Router02(Factory.router()).swapExactTokensForTokens(
            tokenBal,
            minAmount,
            path,
            address(this),
            block.timestamp
        );
        emit swapped(path[0], path[1]);
    }

    /** 
    * @dev allows whitelist addresses to swap assets by manually providing the minimum amount
    * @param asset the address of the token you want to swap for the next asset in the PathOracle pathMap
    * @param half a bool indicating whether or not to only swap half of the amount of the asset
    * @param minAmount the minimum amount of the other asset the swap exchange should return
    **/
    function manualStepSwap(address asset, bool half, uint minAmount) external onlyWhitelist{

        uint tokenBal = OZ_IERC20(asset).balanceOf(address(this));
        if(half){
            tokenBal / 2;
        }
        tokenBal = OZ_IERC20(asset).balanceOf(address(this));
        address[] memory path = new address[](2);
        address nextAsset = IPathOracle(Factory.pathOracle()).stepPath(asset);
        OZ_IERC20(asset).approve(Factory.router(), tokenBal);
        path[0] = asset;
        path[1] = nextAsset;
        IUniswapV2Router02(Factory.router()).swapExactTokensForTokens(
            tokenBal,
            minAmount,
            path,
            address(this),
            block.timestamp
        );
        emit swapped(path[0], path[1]);
    }

    /** 
    * @dev only called in case of emergency, allows owner to move fees out of fee manager
    * @param asset the address of the asset to move out of fee manager
    **/
    function adminWithdraw(address asset) external onlyOwner{
        OZ_IERC20 token = OZ_IERC20(asset);
        token.transfer(msg.sender, token.balanceOf(address(this)));
        emit AdminWithdrawCalled(asset);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_factory","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"asset","type":"address"}],"name":"AdminWithdrawCalled","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":false,"internalType":"address","name":"token0","type":"address"},{"indexed":false,"internalType":"address","name":"token1","type":"address"}],"name":"addTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountWETH","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountWBTC","type":"uint256"}],"name":"feeDeposited","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"address","name":"to","type":"address"}],"name":"swapped","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"},{"indexed":false,"internalType":"bool","name":"newBool","type":"bool"}],"name":"whiteListChanged","type":"event"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_bool","type":"bool"}],"name":"adjustWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"}],"name":"adminWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token0","type":"address"},{"internalType":"address","name":"token1","type":"address"}],"name":"catalougeTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"factory","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"bool","name":"half","type":"bool"},{"internalType":"uint256","name":"minAmount","type":"uint256"}],"name":"manualStepSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"bool","name":"half","type":"bool"}],"name":"oracleStepSwap","outputs":[],"stateMutability":"nonpayable","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":"address","name":"","type":"address"}],"name":"tokenIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokenList","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"}],"name":"validTimeWindow","outputs":[{"internalType":"uint256","name":"valid","type":"uint256"},{"internalType":"uint256","name":"expiration","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}]

60806040523480156200001157600080fd5b506040516200235e3803806200235e8339810160408190526200003491620000fa565b6200003f33620000aa565b6001805480820182556000919091527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180546001600160a01b0319908116909155600380546001600160a01b0393909316928216831790556005805490911690911790556200012a565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156200010c578081fd5b81516001600160a01b038116811462000123578182fd5b9392505050565b612224806200013a6000396000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c80639dcd0b211161008c578063c45a015511610066578063c45a01551461020b578063d0e30db01461021e578063db7b20b414610226578063f2fde38b1461023957600080fd5b80639dcd0b21146101d25780639ead7222146101e5578063a28835b6146101f857600080fd5b806355ef4863116100c857806355ef48631461015f578063715018a6146101725780638da5cb5b1461017a5780639b19251a1461019f57600080fd5b8063284e5956146100ef578063332e2c5a1461011c578063427f91a614610131575b600080fd5b6101026100fd366004611e34565b61024c565b604080519283526020830191909152015b60405180910390f35b61012f61012a366004611eab565b61066a565b005b61015161013f366004611e34565b60026020526000908152604090205481565b604051908152602001610113565b61012f61016d366004611ed8565b610e27565b61012f6113bd565b6000546001600160a01b03165b6040516001600160a01b039091168152602001610113565b6101c26101ad366004611e34565b60046020526000908152604090205460ff1681565b6040519015158152602001610113565b61012f6101e0366004611eab565b6113f3565b6101876101f3366004611ff4565b611481565b61012f610206366004611e34565b6114ab565b600354610187906001600160a01b031681565b61012f611610565b61012f610234366004611e73565b611b97565b61012f610247366004611e34565b611d49565b6000806000600560009054906101000a90046001600160a01b03166001600160a01b0316632630c12f6040518163ffffffff1660e01b815260040160206040518083038186803b15801561029f57600080fd5b505afa1580156102b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102d79190611e57565b90506000600560009054906101000a90046001600160a01b03166001600160a01b0316639a1fbb9a6040518163ffffffff1660e01b815260040160206040518083038186803b15801561032957600080fd5b505afa15801561033d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103619190611e57565b60405163d24416c760e01b81526001600160a01b038781166004830152919091169063d24416c79060240160206040518083038186803b1580156103a457600080fd5b505afa1580156103b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103dc9190611e57565b60055460405163e6a4390560e01b81526001600160a01b03888116600483015280841660248301529293506000929091169063e6a439059060440160206040518083038186803b15801561042f57600080fd5b505afa158015610443573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104679190611e57565b6040516341976e0960e01b81526001600160a01b038083166004830152919250908416906341976e0990602401606060405180830381600087803b1580156104ae57600080fd5b505af11580156104c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104e69190612047565b5050604051638078f62960e01b81526001600160a01b03838116600483015260009250851690638078f62990602401604080518083038186803b15801561052c57600080fd5b505afa158015610540573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105649190612024565b509050836001600160a01b03166311828b516040518163ffffffff1660e01b815260040160206040518083038186803b1580156105a057600080fd5b505afa1580156105b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105d8919061200c565b6105e29082612150565b9450836001600160a01b0316636b6f6fee6040518163ffffffff1660e01b815260040160206040518083038186803b15801561061d57600080fd5b505afa158015610631573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610655919061200c565b61065f9082612150565b955050505050915091565b3360009081526004602052604090205460ff166106a25760405162461bcd60e51b815260040161069990612074565b60405180910390fd5b6040516370a0823160e01b81523060048201526000906001600160a01b038416906370a082319060240160206040518083038186803b1580156106e457600080fd5b505afa1580156106f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061071c919061200c565b905081156107315761072f600282612168565b505b6040805160028082526060820183526000926020830190803683370190505090506000600560009054906101000a90046001600160a01b03166001600160a01b0316639a1fbb9a6040518163ffffffff1660e01b815260040160206040518083038186803b1580156107a257600080fd5b505afa1580156107b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107da9190611e57565b60405163d24416c760e01b81526001600160a01b038781166004830152919091169063d24416c79060240160206040518083038186803b15801561081d57600080fd5b505afa158015610831573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108559190611e57565b60055460405163e6a4390560e01b81526001600160a01b03888116600483015280841660248301529293506000929091169063e6a439059060440160206040518083038186803b1580156108a857600080fd5b505afa1580156108bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108e09190611e57565b9050600080600560009054906101000a90046001600160a01b03166001600160a01b0316632630c12f6040518163ffffffff1660e01b815260040160206040518083038186803b15801561093357600080fd5b505afa158015610947573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061096b9190611e57565b6001600160a01b031663648f95c989600560009054906101000a90046001600160a01b03166001600160a01b0316633e032a3b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156109c857600080fd5b505afa1580156109dc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a00919061200c565b6040516001600160e01b031960e085901b1681526001600160a01b0392831660048201526024810191909152604481018a905290861660648201526084016040805180830381600087803b158015610a5757600080fd5b505af1158015610a6b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a8f9190612024565b9150915080600014610aef5760405162461bcd60e51b8152602060048201526024808201527f5072696365287329206e6f742076616c69642043616c6c20636865636b5072696044820152636365282960e01b6064820152608401610699565b876001600160a01b031663095ea7b3600560009054906101000a90046001600160a01b03166001600160a01b031663f887ea406040518163ffffffff1660e01b815260040160206040518083038186803b158015610b4c57600080fd5b505afa158015610b60573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b849190611e57565b6040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260248101899052604401602060405180830381600087803b158015610bcc57600080fd5b505af1158015610be0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c049190611fd8565b508785600081518110610c2757634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b0316815250508385600181518110610c6957634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152600554604080516303e21fa960e61b81529051919093169263f887ea40926004808301939192829003018186803b158015610cbd57600080fd5b505afa158015610cd1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cf59190611e57565b6001600160a01b03166338ed173987848830426040518663ffffffff1660e01b8152600401610d289594939291906120e0565b600060405180830381600087803b158015610d4257600080fd5b505af1158015610d56573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610d7e9190810190611f18565b507fd7fc5826d12536a38e1c06f82a9664a96c81a81be8271126591dbde0e53ec58e85600081518110610dc157634e487b7160e01b600052603260045260246000fd5b602002602001015186600181518110610dea57634e487b7160e01b600052603260045260246000fd5b6020026020010151604051610e159291906001600160a01b0392831681529116602082015260400190565b60405180910390a15050505050505050565b3360009081526004602052604090205460ff16610e565760405162461bcd60e51b815260040161069990612074565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a082319060240160206040518083038186803b158015610e9857600080fd5b505afa158015610eac573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ed0919061200c565b90508215610ee557610ee3600282612168565b505b6040516370a0823160e01b81523060048201526001600160a01b038516906370a082319060240160206040518083038186803b158015610f2457600080fd5b505afa158015610f38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f5c919061200c565b60408051600280825260608201835292935060009290916020830190803683370190505090506000600560009054906101000a90046001600160a01b03166001600160a01b0316639a1fbb9a6040518163ffffffff1660e01b815260040160206040518083038186803b158015610fd257600080fd5b505afa158015610fe6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061100a9190611e57565b60405163d24416c760e01b81526001600160a01b038881166004830152919091169063d24416c79060240160206040518083038186803b15801561104d57600080fd5b505afa158015611061573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110859190611e57565b9050856001600160a01b031663095ea7b3600560009054906101000a90046001600160a01b03166001600160a01b031663f887ea406040518163ffffffff1660e01b815260040160206040518083038186803b1580156110e457600080fd5b505afa1580156110f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061111c9190611e57565b6040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260248101869052604401602060405180830381600087803b15801561116457600080fd5b505af1158015611178573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061119c9190611fd8565b5085826000815181106111bf57634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b031681525050808260018151811061120157634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152600554604080516303e21fa960e61b81529051919093169263f887ea40926004808301939192829003018186803b15801561125557600080fd5b505afa158015611269573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061128d9190611e57565b6001600160a01b03166338ed173984868530426040518663ffffffff1660e01b81526004016112c09594939291906120e0565b600060405180830381600087803b1580156112da57600080fd5b505af11580156112ee573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526113169190810190611f18565b507fd7fc5826d12536a38e1c06f82a9664a96c81a81be8271126591dbde0e53ec58e8260008151811061135957634e487b7160e01b600052603260045260246000fd5b60200260200101518360018151811061138257634e487b7160e01b600052603260045260246000fd5b60200260200101516040516113ad9291906001600160a01b0392831681529116602082015260400190565b60405180910390a1505050505050565b6000546001600160a01b031633146113e75760405162461bcd60e51b8152600401610699906120ab565b6113f16000611de4565b565b6000546001600160a01b0316331461141d5760405162461bcd60e51b8152600401610699906120ab565b6001600160a01b038216600081815260046020908152604091829020805460ff19168515159081179091558251938452908301527f9989cec740a9d888e73e94915eaa95e03f36dbca99da0eefb704f816015676ff91015b60405180910390a15050565b6001818154811061149157600080fd5b6000918252602090912001546001600160a01b0316905081565b6000546001600160a01b031633146114d55760405162461bcd60e51b8152600401610699906120ab565b6040516370a0823160e01b815230600482015281906001600160a01b0382169063a9059cbb90339083906370a082319060240160206040518083038186803b15801561152057600080fd5b505afa158015611534573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611558919061200c565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381600087803b15801561159e57600080fd5b505af11580156115b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115d69190611fd8565b506040516001600160a01b03831681527fb8282cbd4a600f1b0f88446a049d804f900d5a544feb17e9e46bdf8d459cc5b790602001611475565b3360009081526004602052604090205460ff1661163f5760405162461bcd60e51b815260040161069990612074565b60055460408051633fc8cef360e01b815290516000926001600160a01b031691633fc8cef3916004808301926020929190829003018186803b15801561168457600080fd5b505afa158015611698573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116bc9190611e57565b90506000600560009054906101000a90046001600160a01b03166001600160a01b0316633cdc53896040518163ffffffff1660e01b815260040160206040518083038186803b15801561170e57600080fd5b505afa158015611722573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117469190611e57565b6040516370a0823160e01b81523060048201529091506000906001600160a01b038416906370a082319060240160206040518083038186803b15801561178b57600080fd5b505afa15801561179f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117c3919061200c565b6040516370a0823160e01b81523060048201529091506000906001600160a01b038416906370a082319060240160206040518083038186803b15801561180857600080fd5b505afa15801561181c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611840919061200c565b9050836001600160a01b031663095ea7b3600560009054906101000a90046001600160a01b03166001600160a01b0316630c340a246040518163ffffffff1660e01b815260040160206040518083038186803b15801561189f57600080fd5b505afa1580156118b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118d79190611e57565b6040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260248101859052604401602060405180830381600087803b15801561191f57600080fd5b505af1158015611933573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119579190611fd8565b50826001600160a01b031663095ea7b3600560009054906101000a90046001600160a01b03166001600160a01b0316630c340a246040518163ffffffff1660e01b815260040160206040518083038186803b1580156119b557600080fd5b505afa1580156119c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119ed9190611e57565b6040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260248101849052604401602060405180830381600087803b158015611a3557600080fd5b505af1158015611a49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a6d9190611fd8565b50600560009054906101000a90046001600160a01b03166001600160a01b0316630c340a246040518163ffffffff1660e01b815260040160206040518083038186803b158015611abc57600080fd5b505afa158015611ad0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611af49190611e57565b604051633da48ef960e11b815260048101849052602481018390526001600160a01b039190911690637b491df290604401600060405180830381600087803b158015611b3f57600080fd5b505af1158015611b53573d6000803e3d6000fd5b505060408051858152602081018590527f71380e930a101b465250009479eba5da69bb373410dbfe2568326e16149926cb935001905060405180910390a150505050565b6003546001600160a01b03163314611bf15760405162461bcd60e51b815260206004820152601a60248201527f477261766974792046696e616e63653a20464f5242494444454e0000000000006044820152606401610699565b6001600160a01b038216600090815260026020526040902054611c7d5760018054808201825560008290527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180546001600160a01b0319166001600160a01b0385161790558054611c639190612188565b6001600160a01b0383166000908152600260205260409020555b6001600160a01b038116600090815260026020526040902054611d095760018054808201825560008290527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180546001600160a01b0319166001600160a01b0384161790558054611cef9190612188565b6001600160a01b0382166000908152600260205260409020555b604080516001600160a01b038085168252831660208201527f960f9899b9051031e5056939973b0cb6be5124f33af3a7b45813bcb5164e58819101611475565b6000546001600160a01b03163314611d735760405162461bcd60e51b8152600401610699906120ab565b6001600160a01b038116611dd85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610699565b611de181611de4565b50565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600060208284031215611e45578081fd5b8135611e50816121cb565b9392505050565b600060208284031215611e68578081fd5b8151611e50816121cb565b60008060408385031215611e85578081fd5b8235611e90816121cb565b91506020830135611ea0816121cb565b809150509250929050565b60008060408385031215611ebd578182fd5b8235611ec8816121cb565b91506020830135611ea0816121e0565b600080600060608486031215611eec578081fd5b8335611ef7816121cb565b92506020840135611f07816121e0565b929592945050506040919091013590565b60006020808385031215611f2a578182fd5b825167ffffffffffffffff80821115611f41578384fd5b818501915085601f830112611f54578384fd5b815181811115611f6657611f666121b5565b8060051b604051601f19603f83011681018181108582111715611f8b57611f8b6121b5565b604052828152858101935084860182860187018a1015611fa9578788fd5b8795505b83861015611fcb578051855260019590950194938601938601611fad565b5098975050505050505050565b600060208284031215611fe9578081fd5b8151611e50816121e0565b600060208284031215612005578081fd5b5035919050565b60006020828403121561201d578081fd5b5051919050565b60008060408385031215612036578182fd5b505080516020909101519092909150565b60008060006060848603121561205b578283fd5b8351925060208401519150604084015190509250925092565b6020808252601b908201527f43616c6c6572206973206e6f7420696e2077686974656c697374210000000000604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600060a082018783526020878185015260a0604085015281875180845260c0860191508289019350845b8181101561212f5784516001600160a01b03168352938301939183019160010161210a565b50506001600160a01b03969096166060850152505050608001529392505050565b600082198211156121635761216361219f565b500190565b60008261218357634e487b7160e01b81526012600452602481fd5b500490565b60008282101561219a5761219a61219f565b500390565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114611de157600080fd5b8015158114611de157600080fdfea26469706673582212200d6b6f46f153cb192091c2b56469708106d577a04d454aa616c420a6e7e7781164736f6c634300080400330000000000000000000000003ed75aff4094d2aaa38fafca64ef1c152ec1cf20

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

0000000000000000000000003ed75aff4094d2aaa38fafca64ef1c152ec1cf20

-----Decoded View---------------
Arg [0] : _factory (address): 0x3ed75aff4094d2aaa38fafca64ef1c152ec1cf20

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000003ed75aff4094d2aaa38fafca64ef1c152ec1cf20


Deployed ByteCode Sourcemap

13608:7480:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17543:614;;;;;;:::i;:::-;;:::i;:::-;;;;8177:25:1;;;8233:2;8218:18;;8211:34;;;;8150:18;17543:614:0;;;;;;;;18456:1015;;;;;;:::i;:::-;;:::i;:::-;;13679:45;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;7967:25:1;;;7955:2;7940:18;13679:45:0;7922:76:1;19891:784:0;;;;;;:::i;:::-;;:::i;6270:94::-;;;:::i;5619:87::-;5665:7;5692:6;-1:-1:-1;;;;;5692:6:0;5619:87;;;-1:-1:-1;;;;;4372:32:1;;;4354:51;;4342:2;4327:18;5619:87:0;4309:102:1;13760:41:0;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;5910:14:1;;5903:22;5885:41;;5873:2;5858:18;13760:41:0;5840:92:1;15780:169:0;;;;;;:::i;:::-;;:::i;13646:26::-;;;;;;:::i;:::-;;:::i;20865:220::-;;;;;;:::i;:::-;;:::i;13731:22::-;;;;;-1:-1:-1;;;;;13731:22:0;;;16706:517;;;:::i;16196:416::-;;;;;;:::i;:::-;;:::i;6519:192::-;;;;;;:::i;:::-;;:::i;17543:614::-;17600:10;17612:15;17639:24;17679:7;;;;;;;;;-1:-1:-1;;;;;17679:7:0;-1:-1:-1;;;;;17679:19:0;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17639:62;;17712:17;17744:7;;;;;;;;;-1:-1:-1;;;;;17744:7:0;-1:-1:-1;;;;;17744:18:0;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17732:49;;-1:-1:-1;;;17732:49:0;;-1:-1:-1;;;;;4372:32:1;;;17732:49:0;;;4354:51:1;17732:42:0;;;;;;;4327:18:1;;17732:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17814:7;;:33;;-1:-1:-1;;;17814:33:0;;-1:-1:-1;;;;;4646:15:1;;;17814:33:0;;;4628:34:1;4698:15;;;4678:18;;;4671:43;17712:69:0;;-1:-1:-1;17792:19:0;;17814:7;;;;:15;;4563:18:1;;17814:33:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17894;;-1:-1:-1;;;17894:33:0;;-1:-1:-1;;;;;4372:32:1;;;17894:33:0;;;4354:51:1;17792:55:0;;-1:-1:-1;17894:20:0;;;;;;4327:18:1;;17894:33:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;17966:38:0;;-1:-1:-1;;;17966:38:0;;-1:-1:-1;;;;;4372:32:1;;;17966:38:0;;;4354:51:1;17941:20:0;;-1:-1:-1;17966:25:0;;;;;4327:18:1;;17966:38:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17940:64;;;18056:11;-1:-1:-1;;;;;18056:25:0;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18038:45;;:15;:45;:::i;:::-;18025:58;;18120:11;-1:-1:-1;;;;;18120:27:0;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18102:47;;:15;:47;:::i;:::-;18094:55;;17543:614;;;;;;;:::o;18456:1015::-;13896:10;13886:21;;;;:9;:21;;;;;;;;13878:61;;;;-1:-1:-1;;;13878:61:0;;;;;;;:::i;:::-;;;;;;;;;18555:41:::1;::::0;-1:-1:-1;;;18555:41:0;;18590:4:::1;18555:41;::::0;::::1;4354:51:1::0;18539:13:0::1;::::0;-1:-1:-1;;;;;18555:26:0;::::1;::::0;::::1;::::0;4327:18:1;;18555:41:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18539:57;;18610:4;18607:47;;;18630:12;18641:1;18630:8:::0;:12:::1;:::i;:::-;;18607:47;18688:16;::::0;;18702:1:::1;18688:16:::0;;;;;::::1;::::0;;18664:21:::1;::::0;18688:16:::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;18688:16:0::1;18664:40;;18715:17;18747:7;;;;;;;;;-1:-1:-1::0;;;;;18747:7:0::1;-1:-1:-1::0;;;;;18747:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18735:49;::::0;-1:-1:-1;;;18735:49:0;;-1:-1:-1;;;;;4372:32:1;;;18735:49:0::1;::::0;::::1;4354:51:1::0;18735:42:0;;;::::1;::::0;::::1;::::0;4327:18:1;;18735:49:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18817:7;::::0;:33:::1;::::0;-1:-1:-1;;;18817:33:0;;-1:-1:-1;;;;;4646:15:1;;;18817:33:0::1;::::0;::::1;4628:34:1::0;4698:15;;;4678:18;;;4671:43;18715:69:0;;-1:-1:-1;18795:19:0::1;::::0;18817:7;;::::1;::::0;:15:::1;::::0;4563:18:1;;18817:33:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18795:55;;18862:14;18878:18:::0;18913:7:::1;;;;;;;;;-1:-1:-1::0;;;;;18913:7:0::1;-1:-1:-1::0;;;;;18913:19:0::1;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;18900:68:0::1;;18969:5;18976:7;;;;;;;;;-1:-1:-1::0;;;;;18976:7:0::1;-1:-1:-1::0;;;;;18976:16:0::1;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18900:118;::::0;-1:-1:-1;;;;;;18900:118:0::1;::::0;;;;;;-1:-1:-1;;;;;5580:15:1;;;18900:118:0::1;::::0;::::1;5562:34:1::0;5612:18;;;5605:34;;;;5655:18;;;5648:34;;;5718:15;;;5698:18;;;5691:43;5496:19;;18900:118:0::1;::::0;::::1;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18861:157;;;;19037:13;19054:1;19037:18;19029:67;;;::::0;-1:-1:-1;;;19029:67:0;;6546:2:1;19029:67:0::1;::::0;::::1;6528:21:1::0;6585:2;6565:18;;;6558:30;6624:34;6604:18;;;6597:62;-1:-1:-1;;;6675:18:1;;;6668:34;6719:19;;19029:67:0::1;6518:226:1::0;19029:67:0::1;19117:5;-1:-1:-1::0;;;;;19107:24:0::1;;19132:7;;;;;;;;;-1:-1:-1::0;;;;;19132:7:0::1;-1:-1:-1::0;;;;;19132:14:0::1;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19107:52;::::0;-1:-1:-1;;;;;;19107:52:0::1;::::0;;;;;;-1:-1:-1;;;;;5206:32:1;;;19107:52:0::1;::::0;::::1;5188:51:1::0;5255:18;;;5248:34;;;5161:18;;19107:52:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;19180:5;19170:4;19175:1;19170:7;;;;;;-1:-1:-1::0;;;19170:7:0::1;;;;;;;;;;;;;;:15;-1:-1:-1::0;;;;;19170:15:0::1;;;-1:-1:-1::0;;;;;19170:15:0::1;;;::::0;::::1;19206:9;19196:4;19201:1;19196:7;;;;;;-1:-1:-1::0;;;19196:7:0::1;;;;;;;;;-1:-1:-1::0;;;;;19196:19:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:19;;;;19245:7:::1;::::0;:16:::1;::::0;;-1:-1:-1;;;19245:16:0;;;;:7;;;::::1;::::0;:14:::1;::::0;:16:::1;::::0;;::::1;::::0;19196:7;;19245:16;;;;;:7;:16;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;19226:61:0::1;;19302:8;19325:9;19349:4;19376;19396:15;19226:196;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;::::0;;::::1;-1:-1:-1::0;;19226:196:0::1;::::0;::::1;;::::0;::::1;::::0;;;::::1;::::0;::::1;:::i;:::-;;19438:25;19446:4;19451:1;19446:7;;;;;;-1:-1:-1::0;;;19446:7:0::1;;;;;;;;;;;;;;;19455:4;19460:1;19455:7;;;;;;-1:-1:-1::0;;;19455:7:0::1;;;;;;;;;;;;;;;19438:25;;;;;;-1:-1:-1::0;;;;;4646:15:1;;;4628:34;;4698:15;;4693:2;4678:18;;4671:43;4578:2;4563:18;;4545:175;19438:25:0::1;;;;;;;;13950:1;;;;;;18456:1015:::0;;:::o;19891:784::-;13896:10;13886:21;;;;:9;:21;;;;;;;;13878:61;;;;-1:-1:-1;;;13878:61:0;;;;;;;:::i;:::-;20008:41:::1;::::0;-1:-1:-1;;;20008:41:0;;20043:4:::1;20008:41;::::0;::::1;4354:51:1::0;19992:13:0::1;::::0;-1:-1:-1;;;;;20008:26:0;::::1;::::0;::::1;::::0;4327:18:1;;20008:41:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19992:57;;20063:4;20060:47;;;20083:12;20094:1;20083:8:::0;:12:::1;:::i;:::-;;20060:47;20128:41;::::0;-1:-1:-1;;;20128:41:0;;20163:4:::1;20128:41;::::0;::::1;4354:51:1::0;-1:-1:-1;;;;;20128:26:0;::::1;::::0;::::1;::::0;4327:18:1;;20128:41:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20204:16;::::0;;20218:1:::1;20204:16:::0;;;;;::::1;::::0;;20117:52;;-1:-1:-1;20180:21:0::1;::::0;20204:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;20204:16:0::1;20180:40;;20231:17;20263:7;;;;;;;;;-1:-1:-1::0;;;;;20263:7:0::1;-1:-1:-1::0;;;;;20263:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20251:49;::::0;-1:-1:-1;;;20251:49:0;;-1:-1:-1;;;;;4372:32:1;;;20251:49:0::1;::::0;::::1;4354:51:1::0;20251:42:0;;;::::1;::::0;::::1;::::0;4327:18:1;;20251:49:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20231:69;;20321:5;-1:-1:-1::0;;;;;20311:24:0::1;;20336:7;;;;;;;;;-1:-1:-1::0;;;;;20336:7:0::1;-1:-1:-1::0;;;;;20336:14:0::1;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20311:52;::::0;-1:-1:-1;;;;;;20311:52:0::1;::::0;;;;;;-1:-1:-1;;;;;5206:32:1;;;20311:52:0::1;::::0;::::1;5188:51:1::0;5255:18;;;5248:34;;;5161:18;;20311:52:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;20384:5;20374:4;20379:1;20374:7;;;;;;-1:-1:-1::0;;;20374:7:0::1;;;;;;;;;;;;;;:15;-1:-1:-1::0;;;;;20374:15:0::1;;;-1:-1:-1::0;;;;;20374:15:0::1;;;::::0;::::1;20410:9;20400:4;20405:1;20400:7;;;;;;-1:-1:-1::0;;;20400:7:0::1;;;;;;;;;-1:-1:-1::0;;;;;20400:19:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:19;;;;20449:7:::1;::::0;:16:::1;::::0;;-1:-1:-1;;;20449:16:0;;;;:7;;;::::1;::::0;:14:::1;::::0;:16:::1;::::0;;::::1;::::0;20400:7;;20449:16;;;;;:7;:16;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;20430:61:0::1;;20506:8;20529:9;20553:4;20580;20600:15;20430:196;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;::::0;;::::1;-1:-1:-1::0;;20430:196:0::1;::::0;::::1;;::::0;::::1;::::0;;;::::1;::::0;::::1;:::i;:::-;;20642:25;20650:4;20655:1;20650:7;;;;;;-1:-1:-1::0;;;20650:7:0::1;;;;;;;;;;;;;;;20659:4;20664:1;20659:7;;;;;;-1:-1:-1::0;;;20659:7:0::1;;;;;;;;;;;;;;;20642:25;;;;;;-1:-1:-1::0;;;;;4646:15:1;;;4628:34;;4698:15;;4693:2;4678:18;;4671:43;4578:2;4563:18;;4545:175;20642:25:0::1;;;;;;;;13950:1;;;19891:784:::0;;;:::o;6270:94::-;5665:7;5692:6;-1:-1:-1;;;;;5692:6:0;4573:10;5839:23;5831:68;;;;-1:-1:-1;;;5831:68:0;;;;;;;:::i;:::-;6335:21:::1;6353:1;6335:9;:21::i;:::-;6270:94::o:0;15780:169::-;5665:7;5692:6;-1:-1:-1;;;;;5692:6:0;4573:10;5839:23;5831:68;;;;-1:-1:-1;;;5831:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;15865:19:0;::::1;;::::0;;;:9:::1;:19;::::0;;;;;;;;:27;;-1:-1:-1;;15865:27:0::1;::::0;::::1;;::::0;;::::1;::::0;;;15908:33;;4893:51:1;;;4960:18;;;4953:50;15908:33:0::1;::::0;4866:18:1;15908:33:0::1;;;;;;;;15780:169:::0;;:::o;13646:26::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;13646:26:0;;-1:-1:-1;13646:26:0;:::o;20865:220::-;5665:7;5692:6;-1:-1:-1;;;;;5692:6:0;4573:10;5839:23;5831:68;;;;-1:-1:-1;;;5831:68:0;;;;;;;:::i;:::-;21004:30:::1;::::0;-1:-1:-1;;;21004:30:0;;21028:4:::1;21004:30;::::0;::::1;4354:51:1::0;20960:5:0;;-1:-1:-1;;;;;20977:14:0;::::1;::::0;::::1;::::0;20992:10:::1;::::0;20977:14;;21004:15:::1;::::0;4327:18:1;;21004:30:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20977:58;::::0;-1:-1:-1;;;;;;20977:58:0::1;::::0;;;;;;-1:-1:-1;;;;;5206:32:1;;;20977:58:0::1;::::0;::::1;5188:51:1::0;5255:18;;;5248:34;5161:18;;20977:58:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;21051:26:0::1;::::0;-1:-1:-1;;;;;4372:32:1;;4354:51;;21051:26:0::1;::::0;4342:2:1;4327:18;21051:26:0::1;4309:102:1::0;16706:517:0;13896:10;13886:21;;;;:9;:21;;;;;;;;13878:61;;;;-1:-1:-1;;;13878:61:0;;;;;;;:::i;:::-;16786:7:::1;::::0;:14:::1;::::0;;-1:-1:-1;;;16786:14:0;;;;16759::::1;::::0;-1:-1:-1;;;;;16786:7:0::1;::::0;:12:::1;::::0;:14:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;:7;:14;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16759:42;;16812:14;16839:7;;;;;;;;;-1:-1:-1::0;;;;;16839:7:0::1;-1:-1:-1::0;;;;;16839:12:0::1;;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16886:29;::::0;-1:-1:-1;;;16886:29:0;;16909:4:::1;16886:29;::::0;::::1;4354:51:1::0;16812:42:0;;-1:-1:-1;16865:18:0::1;::::0;-1:-1:-1;;;;;16886:14:0;::::1;::::0;::::1;::::0;4327:18:1;;16886:29:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16947;::::0;-1:-1:-1;;;16947:29:0;;16970:4:::1;16947:29;::::0;::::1;4354:51:1::0;16865:50:0;;-1:-1:-1;16926:18:0::1;::::0;-1:-1:-1;;;;;16947:14:0;::::1;::::0;::::1;::::0;4327:18:1;;16947:29:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16926:50;;16987:4;-1:-1:-1::0;;;;;16987:12:0::1;;17000:7;;;;;;;;;-1:-1:-1::0;;;;;17000:7:0::1;-1:-1:-1::0;;;;;17000:16:0::1;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16987:44;::::0;-1:-1:-1;;;;;;16987:44:0::1;::::0;;;;;;-1:-1:-1;;;;;5206:32:1;;;16987:44:0::1;::::0;::::1;5188:51:1::0;5255:18;;;5248:34;;;5161:18;;16987:44:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;17042:4;-1:-1:-1::0;;;;;17042:12:0::1;;17055:7;;;;;;;;;-1:-1:-1::0;;;;;17055:7:0::1;-1:-1:-1::0;;;;;17055:16:0::1;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17042:44;::::0;-1:-1:-1;;;;;;17042:44:0::1;::::0;;;;;;-1:-1:-1;;;;;5206:32:1;;;17042:44:0::1;::::0;::::1;5188:51:1::0;5255:18;;;5248:34;;;5161:18;;17042:44:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;17109:7;;;;;;;;;-1:-1:-1::0;;;;;17109:7:0::1;-1:-1:-1::0;;;;;17109:16:0::1;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17097:66;::::0;-1:-1:-1;;;17097:66:0;;::::1;::::0;::::1;8177:25:1::0;;;8218:18;;;8211:34;;;-1:-1:-1;;;;;17097:42:0;;;::::1;::::0;::::1;::::0;8150:18:1;;17097:66:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;17179:36:0::1;::::0;;8177:25:1;;;8233:2;8218:18;;8211:34;;;17179:36:0::1;::::0;-1:-1:-1;8150:18:1;;-1:-1:-1;17179:36:0::1;;;;;;;13950:1;;;;16706:517::o:0;16196:416::-;14023:7;;-1:-1:-1;;;;;14023:7:0;14009:10;:21;14001:60;;;;-1:-1:-1;;;14001:60:0;;7668:2:1;14001:60:0;;;7650:21:1;7707:2;7687:18;;;7680:30;7746:28;7726:18;;;7719:56;7792:18;;14001:60:0;7640:176:1;14001:60:0;-1:-1:-1;;;;;16288:18:0;::::1;;::::0;;;:10:::1;:18;::::0;;;;;16284:134:::1;;16328:9;:22:::0;;;;::::1;::::0;;-1:-1:-1;16328:22:0;;;;::::1;::::0;;-1:-1:-1;;;;;;16328:22:0::1;-1:-1:-1::0;;;;;16328:22:0;::::1;;::::0;;16386:16;;:20:::1;::::0;16328:9;16386:20:::1;:::i;:::-;-1:-1:-1::0;;;;;16365:18:0;::::1;;::::0;;;:10:::1;:18;::::0;;;;:41;16284:134:::1;-1:-1:-1::0;;;;;16434:18:0;::::1;;::::0;;;:10:::1;:18;::::0;;;;;16430:134:::1;;16474:9;:22:::0;;;;::::1;::::0;;-1:-1:-1;16474:22:0;;;;::::1;::::0;;-1:-1:-1;;;;;;16474:22:0::1;-1:-1:-1::0;;;;;16474:22:0;::::1;;::::0;;16532:16;;:20:::1;::::0;16474:9;16532:20:::1;:::i;:::-;-1:-1:-1::0;;;;;16511:18:0;::::1;;::::0;;;:10:::1;:18;::::0;;;;:41;16430:134:::1;16579:25;::::0;;-1:-1:-1;;;;;4646:15:1;;;4628:34;;4698:15;;4693:2;4678:18;;4671:43;16579:25:0::1;::::0;4563:18:1;16579:25:0::1;4545:175:1::0;6519:192:0;5665:7;5692:6;-1:-1:-1;;;;;5692:6:0;4573:10;5839:23;5831:68;;;;-1:-1:-1;;;5831:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6608:22:0;::::1;6600:73;;;::::0;-1:-1:-1;;;6600:73:0;;6139:2:1;6600:73:0::1;::::0;::::1;6121:21:1::0;6178:2;6158:18;;;6151:30;6217:34;6197:18;;;6190:62;-1:-1:-1;;;6268:18:1;;;6261:36;6314:19;;6600:73:0::1;6111:228:1::0;6600:73:0::1;6684:19;6694:8;6684:9;:19::i;:::-;6519:192:::0;:::o;6719:173::-;6775:16;6794:6;;-1:-1:-1;;;;;6811:17:0;;;-1:-1:-1;;;;;;6811:17:0;;;;;;6844:40;;6794:6;;;;;;;6844:40;;6775:16;6844:40;6719:173;;:::o;14:257:1:-;73:6;126:2;114:9;105:7;101:23;97:32;94:2;;;147:6;139;132:22;94:2;191:9;178:23;210:31;235:5;210:31;:::i;:::-;260:5;84:187;-1:-1:-1;;;84:187:1:o;276:261::-;346:6;399:2;387:9;378:7;374:23;370:32;367:2;;;420:6;412;405:22;367:2;457:9;451:16;476:31;501:5;476:31;:::i;542:398::-;610:6;618;671:2;659:9;650:7;646:23;642:32;639:2;;;692:6;684;677:22;639:2;736:9;723:23;755:31;780:5;755:31;:::i;:::-;805:5;-1:-1:-1;862:2:1;847:18;;834:32;875:33;834:32;875:33;:::i;:::-;927:7;917:17;;;629:311;;;;;:::o;945:392::-;1010:6;1018;1071:2;1059:9;1050:7;1046:23;1042:32;1039:2;;;1092:6;1084;1077:22;1039:2;1136:9;1123:23;1155:31;1180:5;1155:31;:::i;:::-;1205:5;-1:-1:-1;1262:2:1;1247:18;;1234:32;1275:30;1234:32;1275:30;:::i;1342:460::-;1416:6;1424;1432;1485:2;1473:9;1464:7;1460:23;1456:32;1453:2;;;1506:6;1498;1491:22;1453:2;1550:9;1537:23;1569:31;1594:5;1569:31;:::i;:::-;1619:5;-1:-1:-1;1676:2:1;1661:18;;1648:32;1689:30;1648:32;1689:30;:::i;:::-;1443:359;;1738:7;;-1:-1:-1;;;1792:2:1;1777:18;;;;1764:32;;1443:359::o;1807:1161::-;1902:6;1933:2;1976;1964:9;1955:7;1951:23;1947:32;1944:2;;;1997:6;1989;1982:22;1944:2;2035:9;2029:16;2064:18;2105:2;2097:6;2094:14;2091:2;;;2126:6;2118;2111:22;2091:2;2169:6;2158:9;2154:22;2144:32;;2214:7;2207:4;2203:2;2199:13;2195:27;2185:2;;2241:6;2233;2226:22;2185:2;2275;2269:9;2297:2;2293;2290:10;2287:2;;;2303:18;;:::i;:::-;2349:2;2346:1;2342:10;2381:2;2375:9;2444:2;2440:7;2435:2;2431;2427:11;2423:25;2415:6;2411:38;2499:6;2487:10;2484:22;2479:2;2467:10;2464:18;2461:46;2458:2;;;2510:18;;:::i;:::-;2546:2;2539:22;2596:18;;;2630:15;;;;-1:-1:-1;2665:11:1;;;2695;;;2691:20;;2688:33;-1:-1:-1;2685:2:1;;;2739:6;2731;2724:22;2685:2;2766:6;2757:15;;2781:156;2795:2;2792:1;2789:9;2781:156;;;2852:10;;2840:23;;2813:1;2806:9;;;;;2883:12;;;;2915;;2781:156;;;-1:-1:-1;2956:6:1;1913:1055;-1:-1:-1;;;;;;;;1913:1055:1:o;2973:255::-;3040:6;3093:2;3081:9;3072:7;3068:23;3064:32;3061:2;;;3114:6;3106;3099:22;3061:2;3151:9;3145:16;3170:28;3192:5;3170:28;:::i;3233:190::-;3292:6;3345:2;3333:9;3324:7;3320:23;3316:32;3313:2;;;3366:6;3358;3351:22;3313:2;-1:-1:-1;3394:23:1;;3303:120;-1:-1:-1;3303:120:1:o;3428:194::-;3498:6;3551:2;3539:9;3530:7;3526:23;3522:32;3519:2;;;3572:6;3564;3557:22;3519:2;-1:-1:-1;3600:16:1;;3509:113;-1:-1:-1;3509:113:1:o;3627:255::-;3706:6;3714;3767:2;3755:9;3746:7;3742:23;3738:32;3735:2;;;3788:6;3780;3773:22;3735:2;-1:-1:-1;;3816:16:1;;3872:2;3857:18;;;3851:25;3816:16;;3851:25;;-1:-1:-1;3725:157:1:o;3887:316::-;3975:6;3983;3991;4044:2;4032:9;4023:7;4019:23;4015:32;4012:2;;;4065:6;4057;4050:22;4012:2;4099:9;4093:16;4083:26;;4149:2;4138:9;4134:18;4128:25;4118:35;;4193:2;4182:9;4178:18;4172:25;4162:35;;4002:201;;;;;:::o;6749:351::-;6951:2;6933:21;;;6990:2;6970:18;;;6963:30;7029:29;7024:2;7009:18;;7002:57;7091:2;7076:18;;6923:177::o;7105:356::-;7307:2;7289:21;;;7326:18;;;7319:30;7385:34;7380:2;7365:18;;7358:62;7452:2;7437:18;;7279:182::o;8256:975::-;8510:4;8558:3;8547:9;8543:19;8589:6;8578:9;8571:25;8615:2;8653:6;8648:2;8637:9;8633:18;8626:34;8696:3;8691:2;8680:9;8676:18;8669:31;8720:6;8755;8749:13;8786:6;8778;8771:22;8824:3;8813:9;8809:19;8802:26;;8863:2;8855:6;8851:15;8837:29;;8884:4;8897:195;8911:6;8908:1;8905:13;8897:195;;;8976:13;;-1:-1:-1;;;;;8972:39:1;8960:52;;9067:15;;;;9032:12;;;;9008:1;8926:9;8897:195;;;-1:-1:-1;;;;;;;9148:32:1;;;;9143:2;9128:18;;9121:60;-1:-1:-1;;;9212:3:1;9197:19;9190:35;9109:3;8519:712;-1:-1:-1;;;8519:712:1:o;9236:128::-;9276:3;9307:1;9303:6;9300:1;9297:13;9294:2;;;9313:18;;:::i;:::-;-1:-1:-1;9349:9:1;;9284:80::o;9369:217::-;9409:1;9435;9425:2;;-1:-1:-1;;;9460:31:1;;9514:4;9511:1;9504:15;9542:4;9467:1;9532:15;9425:2;-1:-1:-1;9571:9:1;;9415:171::o;9591:125::-;9631:4;9659:1;9656;9653:8;9650:2;;;9664:18;;:::i;:::-;-1:-1:-1;9701:9:1;;9640:76::o;9721:127::-;9782:10;9777:3;9773:20;9770:1;9763:31;9813:4;9810:1;9803:15;9837:4;9834:1;9827:15;9853:127;9914:10;9909:3;9905:20;9902:1;9895:31;9945:4;9942:1;9935:15;9969:4;9966:1;9959:15;9985:131;-1:-1:-1;;;;;10060:31:1;;10050:42;;10040:2;;10106:1;10103;10096:12;10121:118;10207:5;10200:13;10193:21;10186:5;10183:32;10173:2;;10229:1;10226;10219:12

Swarm Source

ipfs://0d6b6f46f153cb192091c2b56469708106d577a04d454aa616c420a6e7e77811
Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.