Contract 0x925e58d63f460d9688d82b1cc647a42d000cd61e

Txn Hash Method
Block
From
To
Value [Txn Fee]
0xe0afef9066b9f6f06fac0622e9696586f4f041fbaf02614f34af27673520292dPause85810502021-09-26 6:17:2226 days 57 mins ago0x4cef0949500b265769791df8537a8da0e0532e5e IN  0x925e58d63f460d9688d82b1cc647a42d000cd61e0 HT0.00006730492.251
0x63e5c32c425b9ea1a7b63dd297f24e190118d8306d63836624448b69452a6545Earn85667412021-09-25 18:21:4626 days 12 hrs ago0x4cef0949500b265769791df8537a8da0e0532e5e IN  0x925e58d63f460d9688d82b1cc647a42d000cd61e0 HT0.0012929158742.251
0x212992c750595f62661eb43e35903468e0cf931fe69f6d6c47f0cf6a62bc6a42Earn85484982021-09-25 3:09:3627 days 4 hrs ago0x4cef0949500b265769791df8537a8da0e0532e5e IN  0x925e58d63f460d9688d82b1cc647a42d000cd61e0 HT0.0012929158742.251
0x7f48135d95afc59302ba73c82673631e44f4813fdac73783c3404ddfa5ba3b06Earn85484532021-09-25 3:07:2127 days 4 hrs ago0x4cef0949500b265769791df8537a8da0e0532e5e IN  0x925e58d63f460d9688d82b1cc647a42d000cd61e0 HT0.0012914144572.251
0x866ff4d39333cb34ddeffd2666f3d62edf2317f92539ef08b3fe9e6d406483abClaim Trade Mini...85473322021-09-25 2:11:1827 days 5 hrs ago0x4cef0949500b265769791df8537a8da0e0532e5e IN  0x925e58d63f460d9688d82b1cc647a42d000cd61e0 HT0.0011041042452.251
0xa8f07578b8a617230338d45b97c39141c0663f13b906389e93921c19ef9b0c5fEarn85472522021-09-25 2:07:1827 days 5 hrs ago0x4cef0949500b265769791df8537a8da0e0532e5e IN  0x925e58d63f460d9688d82b1cc647a42d000cd61e0 HT0.0021361112112.251
0xa5b40b10933fd017c60193bdb74d1b523268e69b753c37ad8c52e1f755efa0bcClaim Trade Mini...85461322021-09-25 1:11:1727 days 6 hrs ago0x4cef0949500b265769791df8537a8da0e0532e5e IN  0x925e58d63f460d9688d82b1cc647a42d000cd61e0 HT0.0011026028282.251
0x441ee75f6d69d21fa15b8f2ae7b663669a70cd3c21cc9ed035a0d0a3f911612fEarn85460532021-09-25 1:07:2027 days 6 hrs ago0x4cef0949500b265769791df8537a8da0e0532e5e IN  0x925e58d63f460d9688d82b1cc647a42d000cd61e0 HT0.0021361112112.251
0x665ac257bf3bd169b0c14e46ca2c993188519ad1653bce89f5de8ca8bbc08a63Claim Trade Mini...85449342021-09-25 0:11:2327 days 7 hrs ago0x4cef0949500b265769791df8537a8da0e0532e5e IN  0x925e58d63f460d9688d82b1cc647a42d000cd61e0 HT0.0011041042452.251
0x0838ee8a00cffd1e304624074c1896b9545d0769bc601d7a6829c622dba46598Earn85448542021-09-25 0:07:2327 days 7 hrs ago0x4cef0949500b265769791df8537a8da0e0532e5e IN  0x925e58d63f460d9688d82b1cc647a42d000cd61e0 HT0.0021346097942.251
0x9e02fa9c01ef1b4e1d44b8b5ba87d3751d90a375dba76e799ffe0ac214967febClaim Trade Mini...85437332021-09-24 23:11:2027 days 8 hrs ago0x4cef0949500b265769791df8537a8da0e0532e5e IN  0x925e58d63f460d9688d82b1cc647a42d000cd61e0 HT0.0011041042452.251
0x97473138299809ca20552f4a302e864661676f5582a8a9b8b1ac13bbf382913eEarn85436532021-09-24 23:07:2027 days 8 hrs ago0x4cef0949500b265769791df8537a8da0e0532e5e IN  0x925e58d63f460d9688d82b1cc647a42d000cd61e0 HT0.0021440639942.251
0x9d79c1c1da6f1ff8a3186955a41b7d043039f78287a3d8a05c972b1f6b09b11eClaim Trade Mini...84813412021-09-22 19:11:2029 days 12 hrs ago0x4cef0949500b265769791df8537a8da0e0532e5e IN  0x925e58d63f460d9688d82b1cc647a42d000cd61e0 HT0.0011041042452.251
0xabeed4f1708fb88443517680e096af2a87171d449d6e8ee00a21e980511c8867Earn84812612021-09-22 19:07:2029 days 12 hrs ago0x4cef0949500b265769791df8537a8da0e0532e5e IN  0x925e58d63f460d9688d82b1cc647a42d000cd61e0 HT0.0021558975012.251
0x5223170bf6d2bbd5f4f0e43271b810667fb2957181682b6b6aee4e7965cbf13cClaim Trade Mini...84801412021-09-22 18:11:2029 days 13 hrs ago0x4cef0949500b265769791df8537a8da0e0532e5e IN  0x925e58d63f460d9688d82b1cc647a42d000cd61e0 HT0.0011378692452.251
0x449ca9e352fe0bd13fedd93554ffaae90dd544ccae68ace71f01000c15f9e0faEarn84800612021-09-22 18:07:2029 days 13 hrs ago0x4cef0949500b265769791df8537a8da0e0532e5e IN  0x925e58d63f460d9688d82b1cc647a42d000cd61e0 HT0.002171449662.251
0xdf796761fe1fdbaa36c06cb3670e7c39ccf086dee1e913180368f69a685c183dClaim Trade Mini...84789412021-09-22 17:11:2029 days 14 hrs ago0x4cef0949500b265769791df8537a8da0e0532e5e IN  0x925e58d63f460d9688d82b1cc647a42d000cd61e0 HT0.0009979223242.251
0x78444cbfeefdb39d32057f37745519d9a3c7e27ab3812552613e7c52d26db259Earn84788612021-09-22 17:07:2029 days 14 hrs ago0x4cef0949500b265769791df8537a8da0e0532e5e IN  0x925e58d63f460d9688d82b1cc647a42d000cd61e0 HT0.0021802083012.251
0x6674c6b3c0f88586d30d3183205b5995283b3d7dd91af3406499171e6ba5c3b9Claim Trade Mini...84777402021-09-22 16:11:1729 days 15 hrs ago0x4cef0949500b265769791df8537a8da0e0532e5e IN  0x925e58d63f460d9688d82b1cc647a42d000cd61e0 HT0.0011041042452.251
0x0e9181e364fbc3304d2fa2d386e3bedba7c69adaa2cff88d8606d3451ab49903Earn84776612021-09-22 16:07:2029 days 15 hrs ago0x4cef0949500b265769791df8537a8da0e0532e5e IN  0x925e58d63f460d9688d82b1cc647a42d000cd61e0 HT0.0021802083012.251
0xf1cb3860b32fd350b4b0bae45ac598de706ca7f8a50715fa63869fc57bb4776aClaim Trade Mini...84765422021-09-22 15:11:2029 days 16 hrs ago0x4cef0949500b265769791df8537a8da0e0532e5e IN  0x925e58d63f460d9688d82b1cc647a42d000cd61e0 HT0.0011041042452.251
0x0995add2e0747dacaa16b6a607993276c6078660b98c6d0834c1f151b1838b3dEarn84764612021-09-22 15:07:1729 days 16 hrs ago0x4cef0949500b265769791df8537a8da0e0532e5e IN  0x925e58d63f460d9688d82b1cc647a42d000cd61e0 HT0.0021802083012.251
0x8202448248aee6397886a37752525853ac64bd157fbf29085c856d86e1dc087aClaim Trade Mini...84753412021-09-22 14:11:1729 days 17 hrs ago0x4cef0949500b265769791df8537a8da0e0532e5e IN  0x925e58d63f460d9688d82b1cc647a42d000cd61e0 HT0.0011026028282.251
0x908bafeef482286e63a02d4de2c930a0dddc77b68a62ab90a5c7169ce1cd68e1Earn84752612021-09-22 14:07:1529 days 17 hrs ago0x4cef0949500b265769791df8537a8da0e0532e5e IN  0x925e58d63f460d9688d82b1cc647a42d000cd61e0 HT0.0021802083012.251
0xcb8f49eaf854921e6a0fc56d98c163e97d8329f0e51ddae5031144825e31bfd9Claim Trade Mini...84741442021-09-22 13:11:2229 days 18 hrs ago0x4cef0949500b265769791df8537a8da0e0532e5e IN  0x925e58d63f460d9688d82b1cc647a42d000cd61e0 HT0.0011041042452.251
[ Download CSV Export 
Parent Txn Hash Block From To Value
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
StratX_MDEX

Compiler Version
v0.7.6+commit.7338295f

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity Standard Json-Input format)

File 1 of 10 : StratX_MDEX.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.7.0;

import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import "@openzeppelin/contracts/token/ERC20/SafeERC20.sol";
import "@openzeppelin/contracts/utils/Context.sol";
import "@openzeppelin/contracts/math/SafeMath.sol";
import "@openzeppelin/contracts/access/Ownable.sol";
import "@openzeppelin/contracts/utils/ReentrancyGuard.sol";
import "@openzeppelin/contracts/utils/Pausable.sol";
import "@openzeppelin/contracts/utils/EnumerableSet.sol";

interface IPancakeswapFarm {
    function poolLength() external view returns (uint256);

    function userInfo() external view returns (uint256);

    // Return reward multiplier over the given _from to _to block.
    function getMultiplier(uint256 _from, uint256 _to)
        external
        view
        returns (uint256);

    // View function to see pending CAKEs on frontend.
    function pendingCake(uint256 _pid, address _user)
        external
        view
        returns (uint256);

    // Deposit LP tokens to MasterChef for CAKE allocation.
    function deposit(uint256 _pid, uint256 _amount) external;

    // Withdraw LP tokens from MasterChef.
    function withdraw(uint256 _pid, uint256 _amount) external;

    // Stake CAKE tokens to MasterChef
    function enterStaking(uint256 _amount) external;

    // Withdraw CAKE tokens from STAKING.
    function leaveStaking(uint256 _amount) external;

    // Withdraw without caring about rewards. EMERGENCY ONLY.
    function emergencyWithdraw(uint256 _pid) external;
}

interface IPancakeRouter01 {
    function factory() external pure returns (address);

    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint256 amountADesired,
        uint256 amountBDesired,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    )
        external
        returns (
            uint256 amountA,
            uint256 amountB,
            uint256 liquidity
        );

    function addLiquidityETH(
        address token,
        uint256 amountTokenDesired,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    )
        external
        payable
        returns (
            uint256 amountToken,
            uint256 amountETH,
            uint256 liquidity
        );

    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountA, uint256 amountB);

    function removeLiquidityETH(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountToken, uint256 amountETH);

    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountA, uint256 amountB);

    function removeLiquidityETHWithPermit(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountToken, uint256 amountETH);

    function swapExactTokensForTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapTokensForExactTokens(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapExactETHForTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

    function swapTokensForExactETH(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapExactTokensForETH(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapETHForExactTokens(
        uint256 amountOut,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

    function quote(
        uint256 amountA,
        uint256 reserveA,
        uint256 reserveB
    ) external pure returns (uint256 amountB);

    function getAmountOut(
        uint256 amountIn,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountOut);

    function getAmountIn(
        uint256 amountOut,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountIn);

    function getAmountsOut(uint256 amountIn, address[] calldata path)
        external
        view
        returns (uint256[] memory amounts);

    function getAmountsIn(uint256 amountOut, address[] calldata path)
        external
        view
        returns (uint256[] memory amounts);
}

interface IPancakeRouter02 is IPancakeRouter01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountETH);

    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountETH);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;

    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable;

    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;
}

interface IMDEXSwapMining {
    function takerWithdraw() external;
}

interface IWBNB is IERC20 {
    function deposit() external payable;

    function withdraw(uint256 wad) external;
}

abstract contract StratX is Ownable, ReentrancyGuard, Pausable {
    // Maximises yields in pancakeswap

    using SafeMath for uint256;
    using SafeERC20 for IERC20;

    bool public isCAKEStaking; // only for staking CAKE using pancakeswap's native CAKE staking contract.
    bool public isAutoComp; // this vault is purely for staking. eg. WBNB-AUTO staking vault.

    address public farmContractAddress; // address of farm, eg, PCS, Thugs etc.
    uint256 public pid; // pid of pool in farmContractAddress
    address public wantAddress;
    address public token0Address;
    address public token1Address;
    address public earnedAddress;
    address public uniRouterAddress; // uniswap, pancakeswap etc

    address public wbnbAddress;
    address public autoFarmAddress;
    address public CMPAddress;
    address public govAddress; // timelock contract
    bool public onlyGov = true;

    uint256 public lastEarnBlock = 0;
    uint256 public wantLockedTotal = 0;
    uint256 public sharesTotal = 0;

    uint256 public controllerFee = 160; // 70;
    uint256 public constant controllerFeeMax = 10000; // 100 = 1%
    uint256 public constant controllerFeeUL = 500;

    uint256 public buyBackRate = 0; // 250;
    uint256 public constant buyBackRateMax = 10000; // 100 = 1%
    uint256 public constant buyBackRateUL = 800;
    address public buyBackAddress = 0x3b5F91311d4c6165236565987B348327027ae007;
    address public rewardsAddress;

    uint256 public entranceFeeFactor = 9990; // < 0.1% entrance fee - goes to pool + prevents front-running
    uint256 public constant entranceFeeFactorMax = 10000;
    uint256 public constant entranceFeeFactorLL = 9950; // 0.5% is the max entrance fee settable. LL = lowerlimit

    uint256 public withdrawFeeFactor = 10000; // 0.1% withdraw fee - goes to pool
    uint256 public constant withdrawFeeFactorMax = 10000;
    uint256 public constant withdrawFeeFactorLL = 9950; // 0.5% is the max withdraw fee settable. LL = lowerlimit

    uint256 public slippageFactor = 950; // 5% default slippage tolerance
    uint256 public constant slippageFactorUL = 995;

    address[] public earnedToCMPPath;
    address[] public earnedToToken0Path;
    address[] public earnedToToken1Path;
    address[] public token0ToEarnedPath;
    address[] public token1ToEarnedPath;
    address[] public earnedToWantPath;

    event SetSettings(
        uint256 _entranceFeeFactor,
        uint256 _withdrawFeeFactor,
        uint256 _controllerFee,
        uint256 _buyBackRate,
        uint256 _slippageFactor
    );

    event SetGov(address _govAddress);
    event SetOnlyGov(bool _onlyGov);
    event SetUniRouterAddress(address _uniRouterAddress);
    event SetBuyBackAddress(address _buyBackAddress);
    event SetRewardsAddress(address _rewardsAddress);

    modifier onlyAllowGov() {
        require(msg.sender == govAddress, "!gov");
        _;
    }

    // Receives new deposits from user
    function deposit(address _userAddress, uint256 _wantAmt)
        public
        virtual
        onlyOwner
        nonReentrant
        whenNotPaused
        returns (uint256)
    {
        IERC20(wantAddress).safeTransferFrom(
            address(msg.sender),
            address(this),
            _wantAmt
        );

        uint256 sharesAdded = _wantAmt;
        if (wantLockedTotal > 0 && sharesTotal > 0) {
            sharesAdded = _wantAmt
                .mul(sharesTotal)
                .mul(entranceFeeFactor)
                .div(wantLockedTotal)
                .div(entranceFeeFactorMax);
        }
        sharesTotal = sharesTotal.add(sharesAdded);

        if (isAutoComp) {
            _farm();
        } else {
            wantLockedTotal = wantLockedTotal.add(_wantAmt);
        }

        return sharesAdded;
    }

    function farm() public virtual nonReentrant {
        _farm();
    }

    function _farm() internal virtual {
        require(isAutoComp, "!isAutoComp");
        uint256 wantAmt = IERC20(wantAddress).balanceOf(address(this));
        wantLockedTotal = wantLockedTotal.add(wantAmt);
        IERC20(wantAddress).safeIncreaseAllowance(farmContractAddress, wantAmt);

        if (isCAKEStaking) {
            IPancakeswapFarm(farmContractAddress).enterStaking(wantAmt); // Just for CAKE staking, we dont use deposit()
        } else {
            IPancakeswapFarm(farmContractAddress).deposit(pid, wantAmt);
        }
    }

    function _unfarm(uint256 _wantAmt) internal virtual {
        if (isCAKEStaking) {
            IPancakeswapFarm(farmContractAddress).leaveStaking(_wantAmt); // Just for CAKE staking, we dont use withdraw()
        } else {
            IPancakeswapFarm(farmContractAddress).withdraw(pid, _wantAmt);
        }
    }

    function withdraw(address _userAddress, uint256 _wantAmt)
        public
        virtual
        onlyOwner
        nonReentrant
        returns (uint256)
    {
        require(_wantAmt > 0, "_wantAmt <= 0");

        uint256 sharesRemoved = _wantAmt.mul(sharesTotal).div(wantLockedTotal);
        if (sharesRemoved > sharesTotal) {
            sharesRemoved = sharesTotal;
        }
        sharesTotal = sharesTotal.sub(sharesRemoved);

        if (withdrawFeeFactor < withdrawFeeFactorMax) {
            _wantAmt = _wantAmt.mul(withdrawFeeFactor).div(
                withdrawFeeFactorMax
            );
        }

        if (isAutoComp) {
            _unfarm(_wantAmt);
        }

        uint256 wantAmt = IERC20(wantAddress).balanceOf(address(this));
        if (_wantAmt > wantAmt) {
            _wantAmt = wantAmt;
        }

        if (wantLockedTotal < _wantAmt) {
            _wantAmt = wantLockedTotal;
        }

        wantLockedTotal = wantLockedTotal.sub(_wantAmt);

        IERC20(wantAddress).safeTransfer(autoFarmAddress, _wantAmt);

        return sharesRemoved;
    }

    // 1. Harvest farm tokens
    // 2. Converts farm tokens into want tokens
    // 3. Deposits want tokens

    function earn() public virtual nonReentrant whenNotPaused {
        require(isAutoComp, "!isAutoComp");
        if (onlyGov) {
            require(msg.sender == govAddress, "!gov");
        }

        // Harvest farm tokens
        _unfarm(0);

        if (earnedAddress == wbnbAddress) {
            _wrapBNB();
        }

        // Converts farm tokens into want tokens
        uint256 earnedAmt = IERC20(earnedAddress).balanceOf(address(this));

        earnedAmt = distributeFees(earnedAmt);
        earnedAmt = buyBack(earnedAmt);

        if (isCAKEStaking) {
            lastEarnBlock = block.number;
            _farm();
            return;
        }

        IERC20(earnedAddress).safeApprove(uniRouterAddress, 0);
        IERC20(earnedAddress).safeIncreaseAllowance(
            uniRouterAddress,
            earnedAmt
        );

        // single coin
        if(token0Address == address(0x0) || token1Address == address(0x0)){
            // earned is the same as want, do nothing
            // earned is different from want, swap to want
            if(earnedAddress != wantAddress) {
                // otherwise need to conver the earned to want token
                _safeSwap(
                    uniRouterAddress,
                    earnedAmt,
                    slippageFactor,
                    earnedToWantPath,
                    address(this),
                    block.timestamp.add(600)
                );
            }

            lastEarnBlock = block.number;
            _farm();
            return;
        }

        // LP coin

        if (earnedAddress != token0Address) {
            // Swap half earned to token0
            _safeSwap(
                uniRouterAddress,
                earnedAmt.div(2),
                slippageFactor,
                earnedToToken0Path,
                address(this),
                block.timestamp.add(600)
            );
        }

        if (earnedAddress != token1Address) {
            // Swap half earned to token1
            _safeSwap(
                uniRouterAddress,
                earnedAmt.div(2),
                slippageFactor,
                earnedToToken1Path,
                address(this),
                block.timestamp.add(600)
            );
        }

        // Get want tokens, ie. add liquidity
        uint256 token0Amt = IERC20(token0Address).balanceOf(address(this));
        uint256 token1Amt = IERC20(token1Address).balanceOf(address(this));
        if (token0Amt > 0 && token1Amt > 0) {
            IERC20(token0Address).safeIncreaseAllowance(
                uniRouterAddress,
                token0Amt
            );
            IERC20(token1Address).safeIncreaseAllowance(
                uniRouterAddress,
                token1Amt
            );
            IPancakeRouter02(uniRouterAddress).addLiquidity(
                token0Address,
                token1Address,
                token0Amt,
                token1Amt,
                0,
                0,
                address(this),
                block.timestamp.add(600)
            );
        }

        lastEarnBlock = block.number;

        _farm();
    }

    function buyBack(uint256 _earnedAmt) internal virtual returns (uint256) {
        if (buyBackRate <= 0) {
            return _earnedAmt;
        }

        uint256 buyBackAmt = _earnedAmt.mul(buyBackRate).div(buyBackRateMax);

        if (earnedAddress == CMPAddress) {
            IERC20(earnedAddress).safeTransfer(buyBackAddress, buyBackAmt);
        } else {
            IERC20(earnedAddress).safeIncreaseAllowance(
                uniRouterAddress,
                buyBackAmt
            );

            _safeSwap(
                uniRouterAddress,
                buyBackAmt,
                slippageFactor,
                earnedToCMPPath,
                buyBackAddress,
                block.timestamp.add(600)
            );
        }

        return _earnedAmt.sub(buyBackAmt);
    }

    function distributeFees(uint256 _earnedAmt)
        internal
        virtual
        returns (uint256)
    {
        if (_earnedAmt > 0) {
            // Performance fee
            if (controllerFee > 0) {
                uint256 fee =
                    _earnedAmt.mul(controllerFee).div(controllerFeeMax);
                IERC20(earnedAddress).safeTransfer(rewardsAddress, fee);
                _earnedAmt = _earnedAmt.sub(fee);
            }
        }

        return _earnedAmt;
    }

    function convertDustToEarned() public virtual whenNotPaused {
        require(isAutoComp, "!isAutoComp");
        require(!isCAKEStaking, "isCAKEStaking");

        // Converts dust tokens into earned tokens, which will be reinvested on the next earn().

        // Converts token0 dust (if any) to earned tokens
        uint256 token0Amt = IERC20(token0Address).balanceOf(address(this));
        if (token0Address != earnedAddress && token0Amt > 0) {
            IERC20(token0Address).safeIncreaseAllowance(
                uniRouterAddress,
                token0Amt
            );

            // Swap all dust tokens to earned tokens
            _safeSwap(
                uniRouterAddress,
                token0Amt,
                slippageFactor,
                token0ToEarnedPath,
                address(this),
                block.timestamp.add(600)
            );
        }

        // Converts token1 dust (if any) to earned tokens
        uint256 token1Amt = IERC20(token1Address).balanceOf(address(this));
        if (token1Address != earnedAddress && token1Amt > 0) {
            IERC20(token1Address).safeIncreaseAllowance(
                uniRouterAddress,
                token1Amt
            );

            // Swap all dust tokens to earned tokens
            _safeSwap(
                uniRouterAddress,
                token1Amt,
                slippageFactor,
                token1ToEarnedPath,
                address(this),
                block.timestamp.add(600)
            );
        }
    }

    function pause() public virtual onlyAllowGov {
        _pause();
    }

    function unpause() public virtual onlyAllowGov {
        _unpause();
    }

    function setSettings(
        uint256 _entranceFeeFactor,
        uint256 _withdrawFeeFactor,
        uint256 _controllerFee,
        uint256 _buyBackRate,
        uint256 _slippageFactor
    ) public virtual onlyAllowGov {
        require(
            _entranceFeeFactor >= entranceFeeFactorLL,
            "_entranceFeeFactor too low"
        );
        require(
            _entranceFeeFactor <= entranceFeeFactorMax,
            "_entranceFeeFactor too high"
        );
        entranceFeeFactor = _entranceFeeFactor;

        require(
            _withdrawFeeFactor >= withdrawFeeFactorLL,
            "_withdrawFeeFactor too low"
        );
        require(
            _withdrawFeeFactor <= withdrawFeeFactorMax,
            "_withdrawFeeFactor too high"
        );
        withdrawFeeFactor = _withdrawFeeFactor;

        require(_controllerFee <= controllerFeeUL, "_controllerFee too high");
        controllerFee = _controllerFee;

        require(_buyBackRate <= buyBackRateUL, "_buyBackRate too high");
        buyBackRate = _buyBackRate;

        require(
            _slippageFactor <= slippageFactorUL,
            "_slippageFactor too high"
        );
        slippageFactor = _slippageFactor;

        emit SetSettings(
            _entranceFeeFactor,
            _withdrawFeeFactor,
            _controllerFee,
            _buyBackRate,
            _slippageFactor
        );
    }

    function setGov(address _govAddress) public virtual onlyAllowGov {
        govAddress = _govAddress;
        emit SetGov(_govAddress);
    }

    function setOnlyGov(bool _onlyGov) public virtual onlyAllowGov {
        onlyGov = _onlyGov;
        emit SetOnlyGov(_onlyGov);
    }

    function setUniRouterAddress(address _uniRouterAddress)
        public
        virtual
        onlyAllowGov
    {
        uniRouterAddress = _uniRouterAddress;
        emit SetUniRouterAddress(_uniRouterAddress);
    }

    function setBuyBackAddress(address _buyBackAddress)
        public
        virtual
        onlyAllowGov
    {
        buyBackAddress = _buyBackAddress;
        emit SetBuyBackAddress(_buyBackAddress);
    }

    function setRewardsAddress(address _rewardsAddress)
        public
        virtual
        onlyAllowGov
    {
        rewardsAddress = _rewardsAddress;
        emit SetRewardsAddress(_rewardsAddress);
    }

    function inCaseTokensGetStuck(
        address _token,
        uint256 _amount,
        address _to
    ) public virtual onlyAllowGov {
        require(_token != earnedAddress, "!safe");
        require(_token != wantAddress, "!safe");
        IERC20(_token).safeTransfer(_to, _amount);
    }

    function _wrapBNB() internal virtual {
        // BNB -> WBNB
        uint256 bnbBal = address(this).balance;
        if (bnbBal > 0) {
            IWBNB(wbnbAddress).deposit{value: bnbBal}(); // BNB -> WBNB
        }
    }

    function wrapBNB() public virtual onlyAllowGov {
        _wrapBNB();
    }

    function _safeSwap(
        address _uniRouterAddress,
        uint256 _amountIn,
        uint256 _slippageFactor,
        address[] memory _path,
        address _to,
        uint256 _deadline
    ) internal virtual {
        uint256[] memory amounts =
            IPancakeRouter02(_uniRouterAddress).getAmountsOut(_amountIn, _path);
        uint256 amountOut = amounts[amounts.length.sub(1)];

        IPancakeRouter02(_uniRouterAddress)
            .swapExactTokensForTokensSupportingFeeOnTransferTokens(
            _amountIn,
            amountOut.mul(_slippageFactor).div(1000),
            _path,
            _to,
            _deadline
        );
    }
}

contract StratX_MDEX is StratX {
    using SafeMath for uint256;
    using SafeERC20 for IERC20;

    address public MDXAddress;
    address public MDEXSwapMiningAddress;
    address[] public MDXToEarnedPath;

    constructor(
        address[] memory _addresses,
        uint256 _pid,
        bool _isCAKEStaking,
        bool _isAutoComp,
        address[] memory _earnedToCMPPath,
        address[] memory _earnedToToken0Path,
        address[] memory _earnedToToken1Path,
        address[] memory _token0ToEarnedPath,
        address[] memory _token1ToEarnedPath,
        address[] memory _earnedToWantPath,
        uint256 _controllerFee,
        uint256 _buyBackRate,
        uint256 _entranceFeeFactor,
        uint256 _withdrawFeeFactor,
        address[] memory _MDXToEarnedPath
    ) public {
        wbnbAddress = _addresses[0];
        govAddress = _addresses[1];
        autoFarmAddress = _addresses[2];
        CMPAddress = _addresses[3];

        wantAddress = _addresses[4];
        token0Address = _addresses[5];
        token1Address = _addresses[6];
        earnedAddress = _addresses[7];

        farmContractAddress = _addresses[8];
        pid = _pid;
        isCAKEStaking = _isCAKEStaking;
        isAutoComp = _isAutoComp;

        uniRouterAddress = _addresses[9];
        earnedToCMPPath = _earnedToCMPPath;
        earnedToToken0Path = _earnedToToken0Path;
        earnedToToken1Path = _earnedToToken1Path;
        token0ToEarnedPath = _token0ToEarnedPath;
        token1ToEarnedPath = _token1ToEarnedPath;
        earnedToWantPath = _earnedToWantPath;

        controllerFee = _controllerFee;
        rewardsAddress = _addresses[10];
        buyBackRate = _buyBackRate;
        buyBackAddress = _addresses[11];
        entranceFeeFactor = _entranceFeeFactor;
        withdrawFeeFactor = _withdrawFeeFactor;

        MDXAddress = _addresses[12];
        MDEXSwapMiningAddress = _addresses[13];
        MDXToEarnedPath = _MDXToEarnedPath;

        transferOwnership(autoFarmAddress);
    }

    // Claim trade mining rewards
    function claimTradeMiningReward() public {
        require(msg.sender == govAddress, "Not authorised");
        IMDEXSwapMining(MDEXSwapMiningAddress).takerWithdraw();
        _convertMDXToEarned();
    }

    function _convertMDXToEarned() internal {
        // Converts MDX (if any) to earned tokens
        uint256 MDXAmt = IERC20(MDXAddress).balanceOf(address(this));
        if (MDXAddress != earnedAddress && MDXAmt > 0) {
            IERC20(MDXAddress).safeIncreaseAllowance(uniRouterAddress, MDXAmt);
            // Swap all dust tokens to earned tokens
            _safeSwap(
                uniRouterAddress,
                MDXAmt,
                slippageFactor,
                MDXToEarnedPath,
                address(this),
                block.timestamp.add(600)
            );
        }
    }
}

File 2 of 10 : Ownable.sol
// SPDX-License-Identifier: MIT

pragma solidity >=0.6.0 <0.8.0;

import "../utils/Context.sol";
/**
 * @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 () internal {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), 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 {
        emit OwnershipTransferred(_owner, address(0));
        _owner = 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");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

File 3 of 10 : SafeMath.sol
// SPDX-License-Identifier: MIT

pragma solidity >=0.6.0 <0.8.0;

/**
 * @dev Wrappers over Solidity's arithmetic operations with added overflow
 * checks.
 *
 * Arithmetic operations in Solidity wrap on overflow. This can easily result
 * in bugs, because programmers usually assume that an overflow raises an
 * error, which is the standard behavior in high level programming languages.
 * `SafeMath` restores this intuition by reverting the transaction when an
 * operation overflows.
 *
 * Using this library instead of the unchecked operations eliminates an entire
 * class of bugs, so it's recommended to use it always.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        uint256 c = a + b;
        if (c < a) return (false, 0);
        return (true, c);
    }

    /**
     * @dev Returns the substraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        if (b > a) return (false, 0);
        return (true, a - b);
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, 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 (true, 0);
        uint256 c = a * b;
        if (c / a != b) return (false, 0);
        return (true, c);
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        if (b == 0) return (false, 0);
        return (true, a / b);
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        if (b == 0) return (false, 0);
        return (true, a % b);
    }

    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");
        return c;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b <= a, "SafeMath: subtraction overflow");
        return a - b;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) return 0;
        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");
        return c;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b > 0, "SafeMath: division by zero");
        return a / b;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b > 0, "SafeMath: modulo by zero");
        return a % b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        return a - b;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryDiv}.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        return a / b;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        return a % b;
    }
}

File 4 of 10 : IERC20.sol
// SPDX-License-Identifier: MIT

pragma solidity >=0.6.0 <0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface 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);
}

File 5 of 10 : SafeERC20.sol
// SPDX-License-Identifier: MIT

pragma solidity >=0.6.0 <0.8.0;

import "./IERC20.sol";
import "../../math/SafeMath.sol";
import "../../utils/Address.sol";

/**
 * @title SafeERC20
 * @dev Wrappers around ERC20 operations that throw on failure (when the token
 * contract returns false). Tokens that return no value (and instead revert or
 * throw on failure) are also supported, non-reverting calls are assumed to be
 * successful.
 * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,
 * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.
 */
library SafeERC20 {
    using SafeMath for uint256;
    using Address for address;

    function safeTransfer(IERC20 token, address to, uint256 value) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
    }

    function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
    }

    /**
     * @dev Deprecated. This function has issues similar to the ones found in
     * {IERC20-approve}, and its usage is discouraged.
     *
     * Whenever possible, use {safeIncreaseAllowance} and
     * {safeDecreaseAllowance} instead.
     */
    function safeApprove(IERC20 token, address spender, uint256 value) internal {
        // safeApprove should only be called when setting an initial allowance,
        // or when resetting it to zero. To increase and decrease it, use
        // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'
        // solhint-disable-next-line max-line-length
        require((value == 0) || (token.allowance(address(this), spender) == 0),
            "SafeERC20: approve from non-zero to non-zero allowance"
        );
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
    }

    function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal {
        uint256 newAllowance = token.allowance(address(this), spender).add(value);
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
    }

    function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal {
        uint256 newAllowance = token.allowance(address(this), spender).sub(value, "SafeERC20: decreased allowance below zero");
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
    }

    /**
     * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement
     * on the return value: the return value is optional (but if data is returned, it must not be false).
     * @param token The token targeted by the call.
     * @param data The call data (encoded using abi.encode or one of its variants).
     */
    function _callOptionalReturn(IERC20 token, bytes memory data) private {
        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since
        // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that
        // the target address contains contract code and also asserts for success in the low-level call.

        bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed");
        if (returndata.length > 0) { // Return data is optional
            // solhint-disable-next-line max-line-length
            require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
        }
    }
}

File 6 of 10 : Address.sol
// SPDX-License-Identifier: MIT

pragma solidity >=0.6.2 <0.8.0;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on 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;
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    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");
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain`call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
      return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    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");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    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");
        require(isContract(target), "Address: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{ value: value }(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.staticcall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {
        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);
            }
        }
    }
}

File 7 of 10 : Context.sol
// SPDX-License-Identifier: MIT

pragma solidity >=0.6.0 <0.8.0;

/*
 * @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 GSN 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 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;
    }
}

File 8 of 10 : EnumerableSet.sol
// SPDX-License-Identifier: MIT

pragma solidity >=0.6.0 <0.8.0;

/**
 * @dev Library for managing
 * https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive
 * types.
 *
 * Sets have the following properties:
 *
 * - Elements are added, removed, and checked for existence in constant time
 * (O(1)).
 * - Elements are enumerated in O(n). No guarantees are made on the ordering.
 *
 * ```
 * contract Example {
 *     // Add the library methods
 *     using EnumerableSet for EnumerableSet.AddressSet;
 *
 *     // Declare a set state variable
 *     EnumerableSet.AddressSet private mySet;
 * }
 * ```
 *
 * As of v3.3.0, sets of type `bytes32` (`Bytes32Set`), `address` (`AddressSet`)
 * and `uint256` (`UintSet`) are supported.
 */
library EnumerableSet {
    // To implement this library for multiple types with as little code
    // repetition as possible, we write it in terms of a generic Set type with
    // bytes32 values.
    // The Set implementation uses private functions, and user-facing
    // implementations (such as AddressSet) are just wrappers around the
    // underlying Set.
    // This means that we can only create new EnumerableSets for types that fit
    // in bytes32.

    struct Set {
        // Storage of set values
        bytes32[] _values;

        // Position of the value in the `values` array, plus 1 because index 0
        // means a value is not in the set.
        mapping (bytes32 => uint256) _indexes;
    }

    /**
     * @dev Add a value to a set. O(1).
     *
     * Returns true if the value was added to the set, that is if it was not
     * already present.
     */
    function _add(Set storage set, bytes32 value) private returns (bool) {
        if (!_contains(set, value)) {
            set._values.push(value);
            // The value is stored at length-1, but we add 1 to all indexes
            // and use 0 as a sentinel value
            set._indexes[value] = set._values.length;
            return true;
        } else {
            return false;
        }
    }

    /**
     * @dev Removes a value from a set. O(1).
     *
     * Returns true if the value was removed from the set, that is if it was
     * present.
     */
    function _remove(Set storage set, bytes32 value) private returns (bool) {
        // We read and store the value's index to prevent multiple reads from the same storage slot
        uint256 valueIndex = set._indexes[value];

        if (valueIndex != 0) { // Equivalent to contains(set, value)
            // To delete an element from the _values array in O(1), we swap the element to delete with the last one in
            // the array, and then remove the last element (sometimes called as 'swap and pop').
            // This modifies the order of the array, as noted in {at}.

            uint256 toDeleteIndex = valueIndex - 1;
            uint256 lastIndex = set._values.length - 1;

            // When the value to delete is the last one, the swap operation is unnecessary. However, since this occurs
            // so rarely, we still do the swap anyway to avoid the gas cost of adding an 'if' statement.

            bytes32 lastvalue = set._values[lastIndex];

            // Move the last value to the index where the value to delete is
            set._values[toDeleteIndex] = lastvalue;
            // Update the index for the moved value
            set._indexes[lastvalue] = toDeleteIndex + 1; // All indexes are 1-based

            // Delete the slot where the moved value was stored
            set._values.pop();

            // Delete the index for the deleted slot
            delete set._indexes[value];

            return true;
        } else {
            return false;
        }
    }

    /**
     * @dev Returns true if the value is in the set. O(1).
     */
    function _contains(Set storage set, bytes32 value) private view returns (bool) {
        return set._indexes[value] != 0;
    }

    /**
     * @dev Returns the number of values on the set. O(1).
     */
    function _length(Set storage set) private view returns (uint256) {
        return set._values.length;
    }

   /**
    * @dev Returns the value stored at position `index` in the set. O(1).
    *
    * Note that there are no guarantees on the ordering of values inside the
    * array, and it may change when more values are added or removed.
    *
    * Requirements:
    *
    * - `index` must be strictly less than {length}.
    */
    function _at(Set storage set, uint256 index) private view returns (bytes32) {
        require(set._values.length > index, "EnumerableSet: index out of bounds");
        return set._values[index];
    }

    // Bytes32Set

    struct Bytes32Set {
        Set _inner;
    }

    /**
     * @dev Add a value to a set. O(1).
     *
     * Returns true if the value was added to the set, that is if it was not
     * already present.
     */
    function add(Bytes32Set storage set, bytes32 value) internal returns (bool) {
        return _add(set._inner, value);
    }

    /**
     * @dev Removes a value from a set. O(1).
     *
     * Returns true if the value was removed from the set, that is if it was
     * present.
     */
    function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) {
        return _remove(set._inner, value);
    }

    /**
     * @dev Returns true if the value is in the set. O(1).
     */
    function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) {
        return _contains(set._inner, value);
    }

    /**
     * @dev Returns the number of values in the set. O(1).
     */
    function length(Bytes32Set storage set) internal view returns (uint256) {
        return _length(set._inner);
    }

   /**
    * @dev Returns the value stored at position `index` in the set. O(1).
    *
    * Note that there are no guarantees on the ordering of values inside the
    * array, and it may change when more values are added or removed.
    *
    * Requirements:
    *
    * - `index` must be strictly less than {length}.
    */
    function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) {
        return _at(set._inner, index);
    }

    // AddressSet

    struct AddressSet {
        Set _inner;
    }

    /**
     * @dev Add a value to a set. O(1).
     *
     * Returns true if the value was added to the set, that is if it was not
     * already present.
     */
    function add(AddressSet storage set, address value) internal returns (bool) {
        return _add(set._inner, bytes32(uint256(uint160(value))));
    }

    /**
     * @dev Removes a value from a set. O(1).
     *
     * Returns true if the value was removed from the set, that is if it was
     * present.
     */
    function remove(AddressSet storage set, address value) internal returns (bool) {
        return _remove(set._inner, bytes32(uint256(uint160(value))));
    }

    /**
     * @dev Returns true if the value is in the set. O(1).
     */
    function contains(AddressSet storage set, address value) internal view returns (bool) {
        return _contains(set._inner, bytes32(uint256(uint160(value))));
    }

    /**
     * @dev Returns the number of values in the set. O(1).
     */
    function length(AddressSet storage set) internal view returns (uint256) {
        return _length(set._inner);
    }

   /**
    * @dev Returns the value stored at position `index` in the set. O(1).
    *
    * Note that there are no guarantees on the ordering of values inside the
    * array, and it may change when more values are added or removed.
    *
    * Requirements:
    *
    * - `index` must be strictly less than {length}.
    */
    function at(AddressSet storage set, uint256 index) internal view returns (address) {
        return address(uint160(uint256(_at(set._inner, index))));
    }


    // UintSet

    struct UintSet {
        Set _inner;
    }

    /**
     * @dev Add a value to a set. O(1).
     *
     * Returns true if the value was added to the set, that is if it was not
     * already present.
     */
    function add(UintSet storage set, uint256 value) internal returns (bool) {
        return _add(set._inner, bytes32(value));
    }

    /**
     * @dev Removes a value from a set. O(1).
     *
     * Returns true if the value was removed from the set, that is if it was
     * present.
     */
    function remove(UintSet storage set, uint256 value) internal returns (bool) {
        return _remove(set._inner, bytes32(value));
    }

    /**
     * @dev Returns true if the value is in the set. O(1).
     */
    function contains(UintSet storage set, uint256 value) internal view returns (bool) {
        return _contains(set._inner, bytes32(value));
    }

    /**
     * @dev Returns the number of values on the set. O(1).
     */
    function length(UintSet storage set) internal view returns (uint256) {
        return _length(set._inner);
    }

   /**
    * @dev Returns the value stored at position `index` in the set. O(1).
    *
    * Note that there are no guarantees on the ordering of values inside the
    * array, and it may change when more values are added or removed.
    *
    * Requirements:
    *
    * - `index` must be strictly less than {length}.
    */
    function at(UintSet storage set, uint256 index) internal view returns (uint256) {
        return uint256(_at(set._inner, index));
    }
}

File 9 of 10 : Pausable.sol
// SPDX-License-Identifier: MIT

pragma solidity >=0.6.0 <0.8.0;

import "./Context.sol";

/**
 * @dev Contract module which allows children to implement an emergency stop
 * mechanism that can be triggered by an authorized account.
 *
 * This module is used through inheritance. It will make available the
 * modifiers `whenNotPaused` and `whenPaused`, which can be applied to
 * the functions of your contract. Note that they will not be pausable by
 * simply including this module, only once the modifiers are put in place.
 */
abstract contract Pausable is Context {
    /**
     * @dev Emitted when the pause is triggered by `account`.
     */
    event Paused(address account);

    /**
     * @dev Emitted when the pause is lifted by `account`.
     */
    event Unpaused(address account);

    bool private _paused;

    /**
     * @dev Initializes the contract in unpaused state.
     */
    constructor () internal {
        _paused = false;
    }

    /**
     * @dev Returns true if the contract is paused, and false otherwise.
     */
    function paused() public view virtual returns (bool) {
        return _paused;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is not paused.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    modifier whenNotPaused() {
        require(!paused(), "Pausable: paused");
        _;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is paused.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    modifier whenPaused() {
        require(paused(), "Pausable: not paused");
        _;
    }

    /**
     * @dev Triggers stopped state.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    function _pause() internal virtual whenNotPaused {
        _paused = true;
        emit Paused(_msgSender());
    }

    /**
     * @dev Returns to normal state.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    function _unpause() internal virtual whenPaused {
        _paused = false;
        emit Unpaused(_msgSender());
    }
}

File 10 of 10 : ReentrancyGuard.sol
// SPDX-License-Identifier: MIT

pragma solidity >=0.6.0 <0.8.0;

/**
 * @dev Contract module that helps prevent reentrant calls to a function.
 *
 * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
 * available, which can be applied to functions to make sure there are no nested
 * (reentrant) calls to them.
 *
 * Note that because there is a single `nonReentrant` guard, functions marked as
 * `nonReentrant` may not call one another. This can be worked around by making
 * those functions `private`, and then adding `external` `nonReentrant` entry
 * points to them.
 *
 * TIP: If you would like to learn more about reentrancy and alternative ways
 * to protect against it, check out our blog post
 * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
 */
abstract contract ReentrancyGuard {
    // Booleans are more expensive than uint256 or any type that takes up a full
    // word because each write operation emits an extra SLOAD to first read the
    // slot's contents, replace the bits taken up by the boolean, and then write
    // back. This is the compiler's defense against contract upgrades and
    // pointer aliasing, and it cannot be disabled.

    // The values being non-zero value makes deployment a bit more expensive,
    // but in exchange the refund on every call to nonReentrant will be lower in
    // amount. Since refunds are capped to a percentage of the total
    // transaction's gas, it is best to keep them low in cases like this one, to
    // increase the likelihood of the full refund coming into effect.
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor () internal {
        _status = _NOT_ENTERED;
    }

    /**
     * @dev Prevents a contract from calling itself, directly or indirectly.
     * Calling a `nonReentrant` function from another `nonReentrant`
     * function is not supported. It is possible to prevent this from happening
     * by making the `nonReentrant` function external, and make it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        // On the first call to nonReentrant, _notEntered will be true
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

        // Any calls to nonReentrant after this point will fail
        _status = _ENTERED;

        _;

        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        _status = _NOT_ENTERED;
    }
}

Settings
{
  "remappings": [],
  "optimizer": {
    "enabled": false,
    "runs": 200
  },
  "evmVersion": "istanbul",
  "libraries": {},
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "abi"
      ]
    }
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address[]","name":"_addresses","type":"address[]"},{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"bool","name":"_isCAKEStaking","type":"bool"},{"internalType":"bool","name":"_isAutoComp","type":"bool"},{"internalType":"address[]","name":"_earnedToCMPPath","type":"address[]"},{"internalType":"address[]","name":"_earnedToToken0Path","type":"address[]"},{"internalType":"address[]","name":"_earnedToToken1Path","type":"address[]"},{"internalType":"address[]","name":"_token0ToEarnedPath","type":"address[]"},{"internalType":"address[]","name":"_token1ToEarnedPath","type":"address[]"},{"internalType":"address[]","name":"_earnedToWantPath","type":"address[]"},{"internalType":"uint256","name":"_controllerFee","type":"uint256"},{"internalType":"uint256","name":"_buyBackRate","type":"uint256"},{"internalType":"uint256","name":"_entranceFeeFactor","type":"uint256"},{"internalType":"uint256","name":"_withdrawFeeFactor","type":"uint256"},{"internalType":"address[]","name":"_MDXToEarnedPath","type":"address[]"}],"stateMutability":"nonpayable","type":"constructor"},{"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":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_buyBackAddress","type":"address"}],"name":"SetBuyBackAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_govAddress","type":"address"}],"name":"SetGov","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"_onlyGov","type":"bool"}],"name":"SetOnlyGov","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_rewardsAddress","type":"address"}],"name":"SetRewardsAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_entranceFeeFactor","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_withdrawFeeFactor","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_controllerFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_buyBackRate","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_slippageFactor","type":"uint256"}],"name":"SetSettings","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_uniRouterAddress","type":"address"}],"name":"SetUniRouterAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[],"name":"CMPAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MDEXSwapMiningAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MDXAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"MDXToEarnedPath","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"autoFarmAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBackAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBackRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBackRateMax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBackRateUL","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimTradeMiningReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"controllerFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"controllerFeeMax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"controllerFeeUL","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"convertDustToEarned","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_userAddress","type":"address"},{"internalType":"uint256","name":"_wantAmt","type":"uint256"}],"name":"deposit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"earn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"earnedAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"earnedToCMPPath","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"earnedToToken0Path","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"earnedToToken1Path","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"earnedToWantPath","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"entranceFeeFactor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"entranceFeeFactorLL","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"entranceFeeFactorMax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"farm","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"farmContractAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"govAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address","name":"_to","type":"address"}],"name":"inCaseTokensGetStuck","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"isAutoComp","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isCAKEStaking","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastEarnBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"onlyGov","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pid","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardsAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_buyBackAddress","type":"address"}],"name":"setBuyBackAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_govAddress","type":"address"}],"name":"setGov","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_onlyGov","type":"bool"}],"name":"setOnlyGov","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_rewardsAddress","type":"address"}],"name":"setRewardsAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_entranceFeeFactor","type":"uint256"},{"internalType":"uint256","name":"_withdrawFeeFactor","type":"uint256"},{"internalType":"uint256","name":"_controllerFee","type":"uint256"},{"internalType":"uint256","name":"_buyBackRate","type":"uint256"},{"internalType":"uint256","name":"_slippageFactor","type":"uint256"}],"name":"setSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_uniRouterAddress","type":"address"}],"name":"setUniRouterAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sharesTotal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"slippageFactor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"slippageFactorUL","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"token0Address","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"token0ToEarnedPath","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"token1Address","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"token1ToEarnedPath","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":[],"name":"uniRouterAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"wantAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"wantLockedTotal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"wbnbAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_userAddress","type":"address"},{"internalType":"uint256","name":"_wantAmt","type":"uint256"}],"name":"withdraw","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawFeeFactor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawFeeFactorLL","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawFeeFactorMax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"wrapBNB","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526001600c60146101000a81548160ff0219169083151502179055506000600d556000600e556000600f5560a06010556000601155733b5f91311d4c6165236565987b348327027ae007601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506127066014556127106015556103b6601655348015620000ac57600080fd5b5060405162006e7b38038062006e7b83398181016040526101e0811015620000d357600080fd5b8101908080516040519392919084640100000000821115620000f457600080fd5b838201915060208201858111156200010b57600080fd5b82518660208202830111640100000000821117156200012957600080fd5b8083526020830192505050908051906020019060200280838360005b838110156200016257808201518184015260208101905062000145565b5050505090500160405260200180519060200190929190805190602001909291908051906020019092919080516040519392919084640100000000821115620001aa57600080fd5b83820191506020820185811115620001c157600080fd5b8251866020820283011164010000000082111715620001df57600080fd5b8083526020830192505050908051906020019060200280838360005b8381101562000218578082015181840152602081019050620001fb565b50505050905001604052602001805160405193929190846401000000008211156200024257600080fd5b838201915060208201858111156200025957600080fd5b82518660208202830111640100000000821117156200027757600080fd5b8083526020830192505050908051906020019060200280838360005b83811015620002b057808201518184015260208101905062000293565b5050505090500160405260200180516040519392919084640100000000821115620002da57600080fd5b83820191506020820185811115620002f157600080fd5b82518660208202830111640100000000821117156200030f57600080fd5b8083526020830192505050908051906020019060200280838360005b83811015620003485780820151818401526020810190506200032b565b50505050905001604052602001805160405193929190846401000000008211156200037257600080fd5b838201915060208201858111156200038957600080fd5b8251866020820283011164010000000082111715620003a757600080fd5b8083526020830192505050908051906020019060200280838360005b83811015620003e0578082015181840152602081019050620003c3565b50505050905001604052602001805160405193929190846401000000008211156200040a57600080fd5b838201915060208201858111156200042157600080fd5b82518660208202830111640100000000821117156200043f57600080fd5b8083526020830192505050908051906020019060200280838360005b83811015620004785780820151818401526020810190506200045b565b5050505090500160405260200180516040519392919084640100000000821115620004a257600080fd5b83820191506020820185811115620004b957600080fd5b8251866020820283011164010000000082111715620004d757600080fd5b8083526020830192505050908051906020019060200280838360005b8381101562000510578082015181840152602081019050620004f3565b5050505090500160405260200180519060200190929190805190602001909291908051906020019092919080519060200190929190805160405193929190846401000000008211156200056257600080fd5b838201915060208201858111156200057957600080fd5b82518660208202830111640100000000821117156200059757600080fd5b8083526020830192505050908051906020019060200280838360005b83811015620005d0578082015181840152602081019050620005b3565b505050509050016040525050506000620005ef62000cb060201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350600180819055506000600260006101000a81548160ff0219169083151502179055508e600081518110620006bd57fe5b6020026020010151600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508e6001815181106200071357fe5b6020026020010151600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508e6002815181106200076957fe5b6020026020010151600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508e600381518110620007bf57fe5b6020026020010151600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508e6004815181106200081557fe5b6020026020010151600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508e6005815181106200086b57fe5b6020026020010151600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508e600681518110620008c157fe5b6020026020010151600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508e6007815181106200091757fe5b6020026020010151600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508e6008815181106200096d57fe5b6020026020010151600260036101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508d6003819055508c600260016101000a81548160ff0219169083151502179055508b6002806101000a81548160ff0219169083151502179055508e600981518110620009fd57fe5b6020026020010151600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508a6017908051906020019062000a5d92919062000ee6565b50896018908051906020019062000a7692919062000ee6565b50886019908051906020019062000a8f92919062000ee6565b5087601a908051906020019062000aa892919062000ee6565b5086601b908051906020019062000ac192919062000ee6565b5085601c908051906020019062000ada92919062000ee6565b50846010819055508e600a8151811062000af057fe5b6020026020010151601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550836011819055508e600b8151811062000b4d57fe5b6020026020010151601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082601481905550816015819055508e600c8151811062000bb157fe5b6020026020010151601d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508e600d8151811062000c0757fe5b6020026020010151601e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601f908051906020019062000c6792919062000ee6565b5062000c9b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1662000cb860201b60201c565b50505050505050505050505050505062000f94565b600033905090565b62000cc862000cb060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000cee62000ebd60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000d78576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141562000e00576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602681526020018062006e556026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b82805482825590600052602060002090810192821562000f62579160200282015b8281111562000f615782518260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509160200191906001019062000f07565b5b50905062000f71919062000f75565b5090565b5b8082111562000f9057600081600090555060010162000f76565b5090565b615eb18062000fa46000396000f3fe608060405234801561001057600080fd5b50600436106103b85760003560e01c8063846d9e17116101f4578063c11c2e921161011a578063e7198474116100ad578063f2fde38b1161007c578063f2fde38b14610e31578063f3fef3a314610e75578063fa97484114610ed7578063ffbd3b1f14610f0b576103b8565b8063e719847414610d8d578063e7a0367914610dc1578063ee50dc3414610df5578063f106845414610e13576103b8565b8063d389800f116100e9578063d389800f14610d25578063d5b0916314610d2f578063d7cb416f14610d39578063e5dd455a14610d6d576103b8565b8063c11c2e9214610c61578063c302a4d014610c6b578063c8e3d18b14610c89578063cfad57a214610ce1576103b8565b80639566ed3211610192578063b3545c0111610161578063b3545c0114610b99578063b74cd24214610bb7578063b77050e714610bd5578063c0973eed14610c2d576103b8565b80639566ed3214610a9557806396e9aff814610ac95780639fc33a9f14610b21578063ad740f8c14610b55576103b8565b8063866b2018116101ce578063866b2018146109cb5780638906758d146109e95780638da5cb5b14610a2d578063922aeadc14610a61576103b8565b8063846d9e171461093757806384fa32ac1461095757806385f02dd6146109ad576103b8565b806344a3955e116102e457806367057b6c11610277578063715018a611610246578063715018a6146108bb578063783478ad146108c55780637ff36fbe146108f95780638456cb591461092d576103b8565b806367057b6c146107dd57806367206d40146107fb57806368f5416214610869578063693a090b14610887576103b8565b8063521b2836116102b3578063521b28361461073b5780635c975abb146107455780635da79d631461076557806363fe3e3a146107a9576103b8565b806344a3955e1461066957806346008a071461068757806347e7ef24146106bb5780634d9f7bb21461071d576103b8565b8063178a8d071161035c57806336e9332d1161032b57806336e9332d146105df57806338946a8c146105e95780633f4ba83a1461064157806342da4eb31461064b576103b8565b8063178a8d07146105175780631806b98014610535578063212e0add146105695780632717eff3146105c1576103b8565b80630b6bb30b116103985780630b6bb30b1461048b5780630daef321146104bb5780630fa4e01e146104db5780631334903f146104f9576103b8565b80627a2ae3146103bd57806298cc1614610415578063061c7d481461046d575b600080fd5b6103e9600480360360208110156103d357600080fd5b8101908080359060200190929190505050610f29565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6104416004803603602081101561042b57600080fd5b8101908080359060200190929190505050610f68565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610475610fa7565b6040518082815260200191505060405180910390f35b6104b9600480360360208110156104a157600080fd5b81019080803515159060200190929190505050610fad565b005b6104c36110c6565b60405180821515815260200191505060405180910390f35b6104e36110d9565b6040518082815260200191505060405180910390f35b6105016110df565b6040518082815260200191505060405180910390f35b61051f6110e5565b6040518082815260200191505060405180910390f35b61053d6110eb565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6105956004803603602081101561057f57600080fd5b8101908080359060200190929190505050611111565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6105c9611150565b6040518082815260200191505060405180910390f35b6105e7611156565b005b610615600480360360208110156105ff57600080fd5b81019080803590602001909291905050506111e8565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610649611227565b005b6106536112f4565b6040518082815260200191505060405180910390f35b6106716112fa565b6040518082815260200191505060405180910390f35b61068f611300565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610707600480360360408110156106d157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611326565b6040518082815260200191505060405180910390f35b6107256115fc565b6040518082815260200191505060405180910390f35b610743611602565b005b61074d611751565b60405180821515815260200191505060405180910390f35b6107a76004803603602081101561077b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611768565b005b6107b16118bc565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6107e56118e2565b6040518082815260200191505060405180910390f35b6108676004803603606081101561081157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506118e8565b005b610871611b63565b6040518082815260200191505060405180910390f35b61088f611b69565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6108c3611b8f565b005b6108cd611cfc565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610901611d22565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610935611d48565b005b61093f611e15565b60405180821515815260200191505060405180910390f35b6109ab600480360360a081101561096d57600080fd5b810190808035906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190929190505050611e28565b005b6109b56122b4565b6040518082815260200191505060405180910390f35b6109d36122ba565b6040518082815260200191505060405180910390f35b610a2b600480360360208110156109ff57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506122c0565b005b610a35612414565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610a6961243d565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610a9d612463565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610af560048036036020811015610adf57600080fd5b8101908080359060200190929190505050612489565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610b296124c8565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610b9760048036036020811015610b6b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506124ee565b005b610ba1612642565b6040518082815260200191505060405180910390f35b610bbf612648565b6040518082815260200191505060405180910390f35b610c0160048036036020811015610beb57600080fd5b810190808035906020019092919050505061264e565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610c3561268d565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610c696126b3565b005b610c73612d47565b6040518082815260200191505060405180910390f35b610cb560048036036020811015610c9f57600080fd5b8101908080359060200190929190505050612d4d565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610d2360048036036020811015610cf757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612d8c565b005b610d2d612ee0565b005b610d37613c98565b005b610d41613d65565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610d75613d8b565b60405180821515815260200191505060405180910390f35b610d95613d9c565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610dc9613dc2565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610dfd613de8565b6040518082815260200191505060405180910390f35b610e1b613dee565b6040518082815260200191505060405180910390f35b610e7360048036036020811015610e4757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613df4565b005b610ec160048036036040811015610e8b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050613fe6565b6040518082815260200191505060405180910390f35b610edf6143bb565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610f136143e1565b6040518082815260200191505060405180910390f35b601b8181548110610f3957600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601f8181548110610f7857600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6101f481565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611070576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260048152602001807f21676f760000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b80600c60146101000a81548160ff0219169083151502179055507f125177ac7b8930dac1e59c2b30b1b6b9191b30af40cf6bbb5d20fec4d44be60f8160405180821515815260200191505060405180910390a150565b600c60149054906101000a900460ff1681565b600d5481565b60145481565b60115481565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6017818154811061112157600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61271081565b600260015414156111cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b60026001819055506111df6143e7565b60018081905550565b601c81815481106111f857600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146112ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260048152602001807f21676f760000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6112f26146fb565b565b600e5481565b600f5481565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006113306147e6565b73ffffffffffffffffffffffffffffffffffffffff1661134e612414565b73ffffffffffffffffffffffffffffffffffffffff16146113d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60026001541415611450576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b6002600181905550611460611751565b156114d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5061757361626c653a207061757365640000000000000000000000000000000081525060200191505060405180910390fd5b611522333084600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166147ee909392919063ffffffff16565b60008290506000600e5411801561153b57506000600f54115b1561159457611591612710611583600e54611575601454611567600f548a6148af90919063ffffffff16565b6148af90919063ffffffff16565b61493590919063ffffffff16565b61493590919063ffffffff16565b90505b6115a981600f546149be90919063ffffffff16565b600f8190555060028054906101000a900460ff16156115cf576115ca6143e7565b6115eb565b6115e483600e546149be90919063ffffffff16565b600e819055505b809150506001808190555092915050565b61271081565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146116c5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f4e6f7420617574686f726973656400000000000000000000000000000000000081525060200191505060405180910390fd5b601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b872dd0e6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561172f57600080fd5b505af1158015611743573d6000803e3d6000fd5b5050505061174f614a46565b565b6000600260009054906101000a900460ff16905090565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461182b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260048152602001807f21676f760000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f384f1dcb79da4071839c471d7c81884a43fb946a527f3661fdee5904adc8f65781604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a150565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61271081565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146119ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260048152602001807f21676f760000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611a6f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f217361666500000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611b33576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f217361666500000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b611b5e81838573ffffffffffffffffffffffffffffffffffffffff16614cd29092919063ffffffff16565b505050565b60155481565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611b976147e6565b73ffffffffffffffffffffffffffffffffffffffff16611bb5612414565b73ffffffffffffffffffffffffffffffffffffffff1614611c3e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611e0b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260048152602001807f21676f760000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b611e13614d74565b565b600260019054906101000a900460ff1681565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611eeb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260048152602001807f21676f760000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6126de851015611f63576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f5f656e7472616e6365466565466163746f7220746f6f206c6f7700000000000081525060200191505060405180910390fd5b612710851115611fdb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f5f656e7472616e6365466565466163746f7220746f6f2068696768000000000081525060200191505060405180910390fd5b846014819055506126de84101561205a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f5f7769746864726177466565466163746f7220746f6f206c6f7700000000000081525060200191505060405180910390fd5b6127108411156120d2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f5f7769746864726177466565466163746f7220746f6f2068696768000000000081525060200191505060405180910390fd5b836015819055506101f4831115612151576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f5f636f6e74726f6c6c657246656520746f6f206869676800000000000000000081525060200191505060405180910390fd5b826010819055506103208211156121d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f5f6275794261636b5261746520746f6f2068696768000000000000000000000081525060200191505060405180910390fd5b816011819055506103e381111561224f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f5f736c697070616765466163746f7220746f6f2068696768000000000000000081525060200191505060405180910390fd5b806016819055507fc67e0b149a57a70fa44a531a46c2c6d8e0b242fa12f459f250012c3a5987d29a8585858585604051808681526020018581526020018481526020018381526020018281526020019550505050505060405180910390a15050505050565b60105481565b6126de81565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612383576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260048152602001807f21676f760000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b80601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fa69f1931be99336e049905baa11d21ed44204d7686e46b4344404d80d47c298881604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a150565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6019818154811061249957600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600260039054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146125b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260048152602001807f21676f760000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b80601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f200c92aaea275302bf641e37f7a5dda63f445f08f4fc74a5cde7fd643f609e0981604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a150565b61032081565b6103e381565b601a818154811061265e57600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6126bb611751565b1561272e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5061757361626c653a207061757365640000000000000000000000000000000081525060200191505060405180910390fd5b60028054906101000a900460ff166127ae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f2169734175746f436f6d7000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600260019054906101000a900460ff1615612831576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f697343414b455374616b696e670000000000000000000000000000000000000081525060200191505060405180910390fd5b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156128bc57600080fd5b505afa1580156128d0573d6000803e3d6000fd5b505050506040513d60208110156128e657600080fd5b81019080805190602001909291905050509050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141580156129795750600081115b15612aba576129ed600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16614e609092919063ffffffff16565b612ab9600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682601654601a805480602002602001604051908101604052809291908181526020018280548015612a9957602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311612a4f575b505050505030612ab4610258426149be90919063ffffffff16565b614fd9565b5b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015612b4557600080fd5b505afa158015612b59573d6000803e3d6000fd5b505050506040513d6020811015612b6f57600080fd5b81019080805190602001909291905050509050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614158015612c025750600081115b15612d4357612c76600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16614e609092919063ffffffff16565b612d42600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682601654601b805480602002602001604051908101604052809291908181526020018280548015612d2257602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311612cd8575b505050505030612d3d610258426149be90919063ffffffff16565b614fd9565b5b5050565b6126de81565b60188181548110612d5d57600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612e4f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260048152602001807f21676f760000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b80600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f91a8c1cc2d4a3bb60738481947a00cbb9899c822916694cf8bb1d68172fdcd5481604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a150565b60026001541415612f59576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b6002600181905550612f69611751565b15612fdc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5061757361626c653a207061757365640000000000000000000000000000000081525060200191505060405180910390fd5b60028054906101000a900460ff1661305c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f2169734175746f436f6d7000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600c60149054906101000a900460ff161561313557600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614613134576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260048152602001807f21676f760000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b5b61313f600061528a565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156131c0576131bf6153cc565b5b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561324b57600080fd5b505afa15801561325f573d6000803e3d6000fd5b505050506040513d602081101561327557600080fd5b8101908080519060200190929190505050905061329181615461565b905061329c81615532565b9050600260019054906101000a900460ff16156132c85743600d819055506132c26143e7565b50613c8f565b613338600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166157d89092919063ffffffff16565b6133a7600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16614e609092919063ffffffff16565b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614806134525750600073ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b156135b057600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461359b5761359a600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682601654601c80548060200260200160405190810160405280929190818152602001828054801561357a57602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311613530575b505050505030613595610258426149be90919063ffffffff16565b614fd9565b5b43600d819055506135aa6143e7565b50613c8f565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461370757613706600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661366160028461493590919063ffffffff16565b60165460188054806020026020016040519081016040528092919081815260200182805480156136e657602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001906001019080831161369c575b505050505030613701610258426149be90919063ffffffff16565b614fd9565b5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461385e5761385d600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166137b860028461493590919063ffffffff16565b601654601980548060200260200160405190810160405280929190818152602001828054801561383d57602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190600101908083116137f3575b505050505030613858610258426149be90919063ffffffff16565b614fd9565b5b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156138e957600080fd5b505afa1580156138fd573d6000803e3d6000fd5b505050506040513d602081101561391357600080fd5b810190808051906020019092919050505090506000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156139b157600080fd5b505afa1580156139c5573d6000803e3d6000fd5b505050506040513d60208110156139db57600080fd5b810190808051906020019092919050505090506000821180156139fe5750600081115b15613c7c57613a72600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16614e609092919063ffffffff16565b613ae1600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16614e609092919063ffffffff16565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e8e33700600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16858560008030613b80610258426149be90919063ffffffff16565b6040518963ffffffff1660e01b8152600401808973ffffffffffffffffffffffffffffffffffffffff1681526020018873ffffffffffffffffffffffffffffffffffffffff1681526020018781526020018681526020018581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200198505050505050505050606060405180830381600087803b158015613c2957600080fd5b505af1158015613c3d573d6000803e3d6000fd5b505050506040513d6060811015613c5357600080fd5b810190808051906020019092919080519060200190929190805190602001909291905050505050505b43600d81905550613c8b6143e7565b5050505b60018081905550565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614613d5b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260048152602001807f21676f760000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b613d636153cc565b565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60028054906101000a900460ff1681565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61271081565b60035481565b613dfc6147e6565b73ffffffffffffffffffffffffffffffffffffffff16613e1a612414565b73ffffffffffffffffffffffffffffffffffffffff1614613ea3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415613f29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180615daf6026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000613ff06147e6565b73ffffffffffffffffffffffffffffffffffffffff1661400e612414565b73ffffffffffffffffffffffffffffffffffffffff1614614097576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60026001541415614110576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b60026001819055506000821161418e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f5f77616e74416d74203c3d20300000000000000000000000000000000000000081525060200191505060405180910390fd5b60006141b9600e546141ab600f54866148af90919063ffffffff16565b61493590919063ffffffff16565b9050600f548111156141cb57600f5490505b6141e081600f5461599d90919063ffffffff16565b600f81905550612710601554101561421e5761421b61271061420d601554866148af90919063ffffffff16565b61493590919063ffffffff16565b92505b60028054906101000a900460ff161561423b5761423a8361528a565b5b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156142c657600080fd5b505afa1580156142da573d6000803e3d6000fd5b505050506040513d60208110156142f057600080fd5b810190808051906020019092919050505090508084111561430f578093505b83600e54101561431f57600e5493505b61433484600e5461599d90919063ffffffff16565b600e819055506143a9600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1685600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16614cd29092919063ffffffff16565b81925050506001808190555092915050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60165481565b60028054906101000a900460ff16614467576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f2169734175746f436f6d7000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156144f257600080fd5b505afa158015614506573d6000803e3d6000fd5b505050506040513d602081101561451c57600080fd5b8101908080519060200190929190505050905061454481600e546149be90919063ffffffff16565b600e819055506145b9600260039054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16614e609092919063ffffffff16565b600260019054906101000a900460ff161561466057600260039054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166341441d3b826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561464357600080fd5b505af1158015614657573d6000803e3d6000fd5b505050506146f8565b600260039054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e2bbb158600354836040518363ffffffff1660e01b81526004018083815260200182815260200192505050600060405180830381600087803b1580156146df57600080fd5b505af11580156146f3573d6000803e3d6000fd5b505050505b50565b614703611751565b614775576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f5061757361626c653a206e6f742070617573656400000000000000000000000081525060200191505060405180910390fd5b6000600260006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6147b96147e6565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1565b600033905090565b6148a9846323b872dd60e01b858585604051602401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050615a20565b50505050565b6000808314156148c2576000905061492f565b60008284029050828482816148d357fe5b041461492a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180615dfb6021913960400191505060405180910390fd5b809150505b92915050565b60008082116149ac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525060200191505060405180910390fd5b8183816149b557fe5b04905092915050565b600080828401905083811015614a3c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b6000601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015614ad157600080fd5b505afa158015614ae5573d6000803e3d6000fd5b505050506040513d6020811015614afb57600080fd5b81019080805190602001909291905050509050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614158015614b8e5750600081115b15614ccf57614c02600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16614e609092919063ffffffff16565b614cce600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682601654601f805480602002602001604051908101604052809291908181526020018280548015614cae57602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311614c64575b505050505030614cc9610258426149be90919063ffffffff16565b614fd9565b5b50565b614d6f8363a9059cbb60e01b8484604051602401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050615a20565b505050565b614d7c611751565b15614def576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5061757361626c653a207061757365640000000000000000000000000000000081525060200191505060405180910390fd5b6001600260006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258614e336147e6565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1565b6000614f34828573ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e30876040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1681526020019250505060206040518083038186803b158015614eeb57600080fd5b505afa158015614eff573d6000803e3d6000fd5b505050506040513d6020811015614f1557600080fd5b81019080805190602001909291905050506149be90919063ffffffff16565b9050614fd38463095ea7b360e01b8584604051602401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050615a20565b50505050565b60008673ffffffffffffffffffffffffffffffffffffffff1663d06ca61f87866040518363ffffffff1660e01b81526004018083815260200180602001828103825283818151815260200191508051906020019060200280838360005b83811015615051578082015181840152602081019050615036565b50505050905001935050505060006040518083038186803b15801561507557600080fd5b505afa158015615089573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525060208110156150b357600080fd5b81019080805160405193929190846401000000008211156150d357600080fd5b838201915060208201858111156150e957600080fd5b825186602082028301116401000000008211171561510657600080fd5b8083526020830192505050908051906020019060200280838360005b8381101561513d578082015181840152602081019050615122565b5050505090500160405250505090506000816151646001845161599d90919063ffffffff16565b8151811061516e57fe5b602002602001015190508773ffffffffffffffffffffffffffffffffffffffff16635c11d795886151bc6103e86151ae8b876148af90919063ffffffff16565b61493590919063ffffffff16565b8888886040518663ffffffff1660e01b815260040180868152602001858152602001806020018473ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b8381101561523f578082015181840152602081019050615224565b505050509050019650505050505050600060405180830381600087803b15801561526857600080fd5b505af115801561527c573d6000803e3d6000fd5b505050505050505050505050565b600260019054906101000a900460ff161561533157600260039054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631058d281826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561531457600080fd5b505af1158015615328573d6000803e3d6000fd5b505050506153c9565b600260039054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663441a3e70600354836040518363ffffffff1660e01b81526004018083815260200182815260200192505050600060405180830381600087803b1580156153b057600080fd5b505af11580156153c4573d6000803e3d6000fd5b505050505b50565b6000479050600081111561545e57600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561544457600080fd5b505af1158015615458573d6000803e3d6000fd5b50505050505b50565b60008082111561552a57600060105411156155295760006154a1612710615493601054866148af90919063ffffffff16565b61493590919063ffffffff16565b9050615512601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16614cd29092919063ffffffff16565b615525818461599d90919063ffffffff16565b9250505b5b819050919050565b60008060115411615545578190506157d3565b6000615570612710615562601154866148af90919063ffffffff16565b61493590919063ffffffff16565b9050600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561565e57615659601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16614cd29092919063ffffffff16565b6157bc565b6156cd600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16614e609092919063ffffffff16565b6157bb600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682601654601780548060200260200160405190810160405280929190818152602001828054801561577957602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001906001019080831161572f575b5050505050601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166157b6610258426149be90919063ffffffff16565b614fd9565b5b6157cf818461599d90919063ffffffff16565b9150505b919050565b60008114806158a6575060008373ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e30856040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1681526020019250505060206040518083038186803b15801561586957600080fd5b505afa15801561587d573d6000803e3d6000fd5b505050506040513d602081101561589357600080fd5b8101908080519060200190929190505050145b6158fb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526036815260200180615e466036913960400191505060405180910390fd5b6159988363095ea7b360e01b8484604051602401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050615a20565b505050565b600082821115615a15576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525060200191505060405180910390fd5b818303905092915050565b6000615a82826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16615b0f9092919063ffffffff16565b9050600081511115615b0a57808060200190516020811015615aa357600080fd5b8101908080519060200190929190505050615b09576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180615e1c602a913960400191505060405180910390fd5b5b505050565b6060615b1e8484600085615b27565b90509392505050565b606082471015615b82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180615dd56026913960400191505060405180910390fd5b615b8b85615ccf565b615bfd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000081525060200191505060405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040518082805190602001908083835b60208310615c4c5780518252602082019150602081019050602083039250615c29565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114615cae576040519150601f19603f3d011682016040523d82523d6000602084013e615cb3565b606091505b5091509150615cc3828286615ce2565b92505050949350505050565b600080823b905060008111915050919050565b60608315615cf257829050615da7565b600083511115615d055782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015615d6c578082015181840152602081019050615d51565b50505050905090810190601f168015615d995780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b939250505056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f775361666545524332303a204552433230206f7065726174696f6e20646964206e6f7420737563636565645361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f20746f206e6f6e2d7a65726f20616c6c6f77616e6365a2646970667358221220a3cef968eacc4e534eadddf3e93fc0640d16b38257e08a6caaef7b1edb0e327e64736f6c634300070600334f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737300000000000000000000000000000000000000000000000000000000000001e000000000000000000000000000000000000000000000000000000000000000090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000003c0000000000000000000000000000000000000000000000000000000000000044000000000000000000000000000000000000000000000000000000000000004c0000000000000000000000000000000000000000000000000000000000000054000000000000000000000000000000000000000000000000000000000000005c0000000000000000000000000000000000000000000000000000000000000064000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000270600000000000000000000000000000000000000000000000000000000000027100000000000000000000000000000000000000000000000000000000000000660000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000005545153ccfca01fbd7dd11c0b23ba694d9509a6f0000000000000000000000004cef0949500b265769791df8537a8da0e0532e5e0000000000000000000000005975020157e66b3767e1e2eac7e5f225e4849c2f000000000000000000000000681472b80d6e5c4fc27760a9b92e77d7eea996790000000000000000000000008e5a5186c282252c1298c9e3ffb3f944416108f70000000000000000000000000298c2b32eae4da002a15f36fdf7615bea3da04700000000000000000000000098fc3b60ed4a504f588342a53746405e355f934700000000000000000000000098fc3b60ed4a504f588342a53746405e355f934700000000000000000000000023159f45db93729d03a54ff9965f91764b91ec4c000000000000000000000000ed7d5f38c79115ca12fe6c0041abb22f0a06c3000000000000000000000000004cef0949500b265769791df8537a8da0e0532e5e000000000000000000000000903acc2e7e7f1271b0eada50279f07d73d7a5a8000000000000000000000000025d2e80cb6b86881fd7e07dd263fb79f4abe033c0000000000000000000000007373c42502874c88954bdd6d50b53061f018422e000000000000000000000000000000000000000000000000000000000000000300000000000000000000000098fc3b60ed4a504f588342a53746405e355f93470000000000000000000000005545153ccfca01fbd7dd11c0b23ba694d9509a6f000000000000000000000000681472b80d6e5c4fc27760a9b92e77d7eea99679000000000000000000000000000000000000000000000000000000000000000300000000000000000000000098fc3b60ed4a504f588342a53746405e355f93470000000000000000000000005545153ccfca01fbd7dd11c0b23ba694d9509a6f0000000000000000000000000298c2b32eae4da002a15f36fdf7615bea3da047000000000000000000000000000000000000000000000000000000000000000300000000000000000000000098fc3b60ed4a504f588342a53746405e355f93470000000000000000000000005545153ccfca01fbd7dd11c0b23ba694d9509a6f00000000000000000000000098fc3b60ed4a504f588342a53746405e355f934700000000000000000000000000000000000000000000000000000000000000030000000000000000000000000298c2b32eae4da002a15f36fdf7615bea3da0470000000000000000000000005545153ccfca01fbd7dd11c0b23ba694d9509a6f00000000000000000000000098fc3b60ed4a504f588342a53746405e355f9347000000000000000000000000000000000000000000000000000000000000000300000000000000000000000098fc3b60ed4a504f588342a53746405e355f93470000000000000000000000005545153ccfca01fbd7dd11c0b23ba694d9509a6f00000000000000000000000098fc3b60ed4a504f588342a53746405e355f93470000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000300000000000000000000000025d2e80cb6b86881fd7e07dd263fb79f4abe033c0000000000000000000000005545153ccfca01fbd7dd11c0b23ba694d9509a6f00000000000000000000000098fc3b60ed4a504f588342a53746405e355f9347

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

00000000000000000000000000000000000000000000000000000000000001e000000000000000000000000000000000000000000000000000000000000000090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000003c0000000000000000000000000000000000000000000000000000000000000044000000000000000000000000000000000000000000000000000000000000004c0000000000000000000000000000000000000000000000000000000000000054000000000000000000000000000000000000000000000000000000000000005c0000000000000000000000000000000000000000000000000000000000000064000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000270600000000000000000000000000000000000000000000000000000000000027100000000000000000000000000000000000000000000000000000000000000660000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000005545153ccfca01fbd7dd11c0b23ba694d9509a6f0000000000000000000000004cef0949500b265769791df8537a8da0e0532e5e0000000000000000000000005975020157e66b3767e1e2eac7e5f225e4849c2f000000000000000000000000681472b80d6e5c4fc27760a9b92e77d7eea996790000000000000000000000008e5a5186c282252c1298c9e3ffb3f944416108f70000000000000000000000000298c2b32eae4da002a15f36fdf7615bea3da04700000000000000000000000098fc3b60ed4a504f588342a53746405e355f934700000000000000000000000098fc3b60ed4a504f588342a53746405e355f934700000000000000000000000023159f45db93729d03a54ff9965f91764b91ec4c000000000000000000000000ed7d5f38c79115ca12fe6c0041abb22f0a06c3000000000000000000000000004cef0949500b265769791df8537a8da0e0532e5e000000000000000000000000903acc2e7e7f1271b0eada50279f07d73d7a5a8000000000000000000000000025d2e80cb6b86881fd7e07dd263fb79f4abe033c0000000000000000000000007373c42502874c88954bdd6d50b53061f018422e000000000000000000000000000000000000000000000000000000000000000300000000000000000000000098fc3b60ed4a504f588342a53746405e355f93470000000000000000000000005545153ccfca01fbd7dd11c0b23ba694d9509a6f000000000000000000000000681472b80d6e5c4fc27760a9b92e77d7eea99679000000000000000000000000000000000000000000000000000000000000000300000000000000000000000098fc3b60ed4a504f588342a53746405e355f93470000000000000000000000005545153ccfca01fbd7dd11c0b23ba694d9509a6f0000000000000000000000000298c2b32eae4da002a15f36fdf7615bea3da047000000000000000000000000000000000000000000000000000000000000000300000000000000000000000098fc3b60ed4a504f588342a53746405e355f93470000000000000000000000005545153ccfca01fbd7dd11c0b23ba694d9509a6f00000000000000000000000098fc3b60ed4a504f588342a53746405e355f934700000000000000000000000000000000000000000000000000000000000000030000000000000000000000000298c2b32eae4da002a15f36fdf7615bea3da0470000000000000000000000005545153ccfca01fbd7dd11c0b23ba694d9509a6f00000000000000000000000098fc3b60ed4a504f588342a53746405e355f9347000000000000000000000000000000000000000000000000000000000000000300000000000000000000000098fc3b60ed4a504f588342a53746405e355f93470000000000000000000000005545153ccfca01fbd7dd11c0b23ba694d9509a6f00000000000000000000000098fc3b60ed4a504f588342a53746405e355f93470000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000300000000000000000000000025d2e80cb6b86881fd7e07dd263fb79f4abe033c0000000000000000000000005545153ccfca01fbd7dd11c0b23ba694d9509a6f00000000000000000000000098fc3b60ed4a504f588342a53746405e355f9347

-----Decoded View---------------
Arg [0] : _addresses (address[]): 0x5545153ccfca01fbd7dd11c0b23ba694d9509a6f,0x4cef0949500b265769791df8537a8da0e0532e5e,0x5975020157e66b3767e1e2eac7e5f225e4849c2f,0x681472b80d6e5c4fc27760a9b92e77d7eea99679,0x8e5a5186c282252c1298c9e3ffb3f944416108f7,0x0298c2b32eae4da002a15f36fdf7615bea3da047,0x98fc3b60ed4a504f588342a53746405e355f9347,0x98fc3b60ed4a504f588342a53746405e355f9347,0x23159f45db93729d03a54ff9965f91764b91ec4c,0xed7d5f38c79115ca12fe6c0041abb22f0a06c300,0x4cef0949500b265769791df8537a8da0e0532e5e,0x903acc2e7e7f1271b0eada50279f07d73d7a5a80,0x25d2e80cb6b86881fd7e07dd263fb79f4abe033c,0x7373c42502874c88954bdd6d50b53061f018422e
Arg [1] : _pid (uint256): 9
Arg [2] : _isCAKEStaking (bool): False
Arg [3] : _isAutoComp (bool): True
Arg [4] : _earnedToCMPPath (address[]): 0x98fc3b60ed4a504f588342a53746405e355f9347,0x5545153ccfca01fbd7dd11c0b23ba694d9509a6f,0x681472b80d6e5c4fc27760a9b92e77d7eea99679
Arg [5] : _earnedToToken0Path (address[]): 0x98fc3b60ed4a504f588342a53746405e355f9347,0x5545153ccfca01fbd7dd11c0b23ba694d9509a6f,0x0298c2b32eae4da002a15f36fdf7615bea3da047
Arg [6] : _earnedToToken1Path (address[]): 0x98fc3b60ed4a504f588342a53746405e355f9347,0x5545153ccfca01fbd7dd11c0b23ba694d9509a6f,0x98fc3b60ed4a504f588342a53746405e355f9347
Arg [7] : _token0ToEarnedPath (address[]): 0x0298c2b32eae4da002a15f36fdf7615bea3da047,0x5545153ccfca01fbd7dd11c0b23ba694d9509a6f,0x98fc3b60ed4a504f588342a53746405e355f9347
Arg [8] : _token1ToEarnedPath (address[]): 0x98fc3b60ed4a504f588342a53746405e355f9347,0x5545153ccfca01fbd7dd11c0b23ba694d9509a6f,0x98fc3b60ed4a504f588342a53746405e355f9347

-----Encoded View---------------
55 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000000000000000000000001e0
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000009
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [4] : 00000000000000000000000000000000000000000000000000000000000003c0
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000440
Arg [6] : 00000000000000000000000000000000000000000000000000000000000004c0
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000540
Arg [8] : 00000000000000000000000000000000000000000000000000000000000005c0
Arg [9] : 0000000000000000000000000000000000000000000000000000000000000640
Arg [10] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [11] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [12] : 0000000000000000000000000000000000000000000000000000000000002706
Arg [13] : 0000000000000000000000000000000000000000000000000000000000002710
Arg [14] : 0000000000000000000000000000000000000000000000000000000000000660
Arg [15] : 000000000000000000000000000000000000000000000000000000000000000e
Arg [16] : 0000000000000000000000005545153ccfca01fbd7dd11c0b23ba694d9509a6f
Arg [17] : 0000000000000000000000004cef0949500b265769791df8537a8da0e0532e5e
Arg [18] : 0000000000000000000000005975020157e66b3767e1e2eac7e5f225e4849c2f
Arg [19] : 000000000000000000000000681472b80d6e5c4fc27760a9b92e77d7eea99679
Arg [20] : 0000000000000000000000008e5a5186c282252c1298c9e3ffb3f944416108f7
Arg [21] : 0000000000000000000000000298c2b32eae4da002a15f36fdf7615bea3da047
Arg [22] : 00000000000000000000000098fc3b60ed4a504f588342a53746405e355f9347
Arg [23] : 00000000000000000000000098fc3b60ed4a504f588342a53746405e355f9347
Arg [24] : 00000000000000000000000023159f45db93729d03a54ff9965f91764b91ec4c
Arg [25] : 000000000000000000000000ed7d5f38c79115ca12fe6c0041abb22f0a06c300
Arg [26] : 0000000000000000000000004cef0949500b265769791df8537a8da0e0532e5e
Arg [27] : 000000000000000000000000903acc2e7e7f1271b0eada50279f07d73d7a5a80
Arg [28] : 00000000000000000000000025d2e80cb6b86881fd7e07dd263fb79f4abe033c
Arg [29] : 0000000000000000000000007373c42502874c88954bdd6d50b53061f018422e
Arg [30] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [31] : 00000000000000000000000098fc3b60ed4a504f588342a53746405e355f9347
Arg [32] : 0000000000000000000000005545153ccfca01fbd7dd11c0b23ba694d9509a6f
Arg [33] : 000000000000000000000000681472b80d6e5c4fc27760a9b92e77d7eea99679
Arg [34] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [35] : 00000000000000000000000098fc3b60ed4a504f588342a53746405e355f9347
Arg [36] : 0000000000000000000000005545153ccfca01fbd7dd11c0b23ba694d9509a6f
Arg [37] : 0000000000000000000000000298c2b32eae4da002a15f36fdf7615bea3da047
Arg [38] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [39] : 00000000000000000000000098fc3b60ed4a504f588342a53746405e355f9347
Arg [40] : 0000000000000000000000005545153ccfca01fbd7dd11c0b23ba694d9509a6f
Arg [41] : 00000000000000000000000098fc3b60ed4a504f588342a53746405e355f9347
Arg [42] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [43] : 0000000000000000000000000298c2b32eae4da002a15f36fdf7615bea3da047
Arg [44] : 0000000000000000000000005545153ccfca01fbd7dd11c0b23ba694d9509a6f
Arg [45] : 00000000000000000000000098fc3b60ed4a504f588342a53746405e355f9347
Arg [46] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [47] : 00000000000000000000000098fc3b60ed4a504f588342a53746405e355f9347
Arg [48] : 0000000000000000000000005545153ccfca01fbd7dd11c0b23ba694d9509a6f
Arg [49] : 00000000000000000000000098fc3b60ed4a504f588342a53746405e355f9347
Arg [50] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [51] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [52] : 00000000000000000000000025d2e80cb6b86881fd7e07dd263fb79f4abe033c
Arg [53] : 0000000000000000000000005545153ccfca01fbd7dd11c0b23ba694d9509a6f
Arg [54] : 00000000000000000000000098fc3b60ed4a504f588342a53746405e355f9347


Block Transaction Gas Used Reward
Age Block Fee Address Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading