Contract 0x52438441073A33b6FcBc70fa3F3F334F2dA19906 1

Contract Overview

Phenix Finance: PHNX Token
Balance:
0 CRO

CRO Value:
$0.00

Token:
Txn Hash Method
Block
From
To
Value [Txn Fee]
0x05ce1e124f042dcff7a939c8383ac2319bd0c266589f3672f7a9f89ba350fc10Rebase And Sync76772352023-04-02 8:59:5723 mins ago0x5cdcc9059cfddcfe798b2f095532f45e8fd689f2 IN  Phenix Finance: PHNX Token0 CRO0.697908567289 4,999.989735706
0xecc5fbdc8a1806d1156f3e9050f8505a085328fc375138afaeafa8c8b8a00570Rebase And Sync76765972023-04-02 7:59:581 hr 23 mins ago0x5cdcc9059cfddcfe798b2f095532f45e8fd689f2 IN  Phenix Finance: PHNX Token0 CRO0.697908686846 4,999.990592241
0xe30ab405ee1587aa67beb7a33d24ae80b48cba97817327b4a8da239c02721d77Approve76763892023-04-02 7:40:251 hr 43 mins ago0x1f00273a325a0a0f953a38e83e78da4c7e03d503 IN  Phenix Finance: PHNX Token0 CRO0.241655 5,000
0xaa33d2b270b2dddd9b43c769d08074a7d5e3cb8da36d3454019c8b1353f7bb3cApprove76762582023-04-02 7:28:051 hr 55 mins ago0x6b81ff19a312fd55946dd4f229634a69ca73c8eb IN  Phenix Finance: PHNX Token0 CRO0.2323528603440
0x89e8756f8ab6c29e2914e044b7271b91034e2bf2459186b12b2202c97b34ba95Rebase And Sync76759592023-04-02 7:00:012 hrs 23 mins ago0x5cdcc9059cfddcfe798b2f095532f45e8fd689f2 IN  Phenix Finance: PHNX Token0 CRO0.697908631923 4,999.990198759
0x9e1c6e2fa6292928cb23fa0a8e9a58bd4a7bdf89c91bc0b2a8dc3fdc8917d032Approve76755322023-04-02 6:19:503 hrs 3 mins ago0xa6e641396ab845cb2ae0ae12058b5b00f277d3c8 IN  Phenix Finance: PHNX Token0 CRO0.125896791433 4,780.588245051
0x55587a921f5174eb2a2031dc17aeb501ec321afd7d3df03ab5f0b8cf3159fb99Rebase And Sync76753212023-04-02 6:00:003 hrs 23 mins ago0x5cdcc9059cfddcfe798b2f095532f45e8fd689f2 IN  Phenix Finance: PHNX Token0 CRO0.697908548794 4,999.989603207
0x9c423594ceed54dbc61d407d6ffe36fa8dc65416d83a02853a25a51871cd0fc3Rebase And Sync76746832023-04-02 4:59:584 hrs 23 mins ago0x5cdcc9059cfddcfe798b2f095532f45e8fd689f2 IN  Phenix Finance: PHNX Token0 CRO0.697908629776 4,999.990183379
0xc188bf38c6e9b70f894ddbcffea71a5cbac9f37534d375d93b42f98c43a15677Rebase And Sync76740452023-04-02 4:00:005 hrs 23 mins ago0x5cdcc9059cfddcfe798b2f095532f45e8fd689f2 IN  Phenix Finance: PHNX Token0 CRO0.697908679493 4,999.990539563
0xc3d6c25c5046b138fb37018565609780278dc22180f9ab9fe51cf32242e7bafaApprove76738192023-04-02 3:38:475 hrs 44 mins ago0x7cec8aa83432897407eb8f19b16c4eb39797e44c IN  Phenix Finance: PHNX Token0 CRO0.232431293227 4,780.667912282
0xa36ea4e0ca5392df4865846c27f6b1f7b801e429b4d00d8b1cb3f48ecd5d4366Approve76737862023-04-02 3:35:415 hrs 48 mins ago0xd77fbc17f4f000513b49dec0eb099ab734cb431f IN  Phenix Finance: PHNX Token0 CRO0.2323584467820
0x56b6834b914c79b6af75ffbfc78625089de0546141d02318536fc3bc7ff31d69Rebase And Sync76734072023-04-02 3:00:006 hrs 23 mins ago0x5cdcc9059cfddcfe798b2f095532f45e8fd689f2 IN  Phenix Finance: PHNX Token0 CRO0.616756318193 4,780.686134355
0x5dc271366cad9f969448b8f88d9e85058bf8d587328c194a69d8c2866cf237ddApprove76731462023-04-02 2:35:256 hrs 48 mins ago0x48840093180dffae6f55358f12273ef545e9f517 IN  Phenix Finance: PHNX Token0 CRO0.125899706004 4,780.698917944
0x65e22254fdba4a87dec0757d809947f0cd3849fe09022f382a3dc92857d7c5dcRebase And Sync76727702023-04-02 2:00:017 hrs 23 mins ago0x5cdcc9059cfddcfe798b2f095532f45e8fd689f2 IN  Phenix Finance: PHNX Token0 CRO0.697908644804 4,999.990291041
0x30bcf2d7b58c744b1fb23ea08f2dfb127aee1662049bacae70f2e88c005f8222Transfer76724662023-04-02 1:31:247 hrs 52 mins ago0x138eb835c615bba4981899ad8787f02a1294e7b7 IN  Phenix Finance: PHNX Token0 CRO0.4779230468260
0x46221f5ecef6ce4cabf0181dd1d9666de47f1dca56786aff579a74f9a97ee040Rebase And Sync76721322023-04-02 0:59:588 hrs 23 mins ago0x5cdcc9059cfddcfe798b2f095532f45e8fd689f2 IN  Phenix Finance: PHNX Token0 CRO0.667306097693 4,780.746068213
0xdf91805eb9f0d53f070d515f4822fb923db0837efe166386c8feca09922b70efApprove76719272023-04-02 0:40:408 hrs 43 mins ago0x1f69c0e0a818297f38793059568fcb20b20b0e36 IN  Phenix Finance: PHNX Token0 CRO0.232435532473 4,780.755105481
0xc1c207879703f65f5b5ca0ce68a44ac861c3b920a3023e3d66d51348feafff12Rebase And Sync76714942023-04-01 23:59:569 hrs 23 mins ago0x5cdcc9059cfddcfe798b2f095532f45e8fd689f2 IN  Phenix Finance: PHNX Token0 CRO0.667309157125 4,780.767986739
0x37397e00f9b60c6c3efa408dc04e22aadfa93d21218546b161c1bc167be52ea1Approve76709062023-04-01 23:04:3810 hrs 19 mins ago0x971541c1f8368957411980354ce966dd4a27e0e3 IN  Phenix Finance: PHNX Token0 CRO0.2323648954330
0x5b3c5e2231f28b37da1e1dfadf61a072146cd6ed92711fbcab3f239dbabbd13bRebase And Sync76708562023-04-01 22:59:5510 hrs 23 mins ago0x5cdcc9059cfddcfe798b2f095532f45e8fd689f2 IN  Phenix Finance: PHNX Token0 CRO0.697908686926 4,999.990592814
0x4f7997fbea69580d61639d6a1c5a5fb4f6137eafeb84b7c8d5d8e01cc80867fbRebase And Sync76702192023-04-01 21:59:5711 hrs 23 mins ago0x5cdcc9059cfddcfe798b2f095532f45e8fd689f2 IN  Phenix Finance: PHNX Token0 CRO0.667318229255 4,780.832981726
0x83d1925c30ed61f6291e043e4c437afb3e96b4b04b799bedef41a492178a85d2Transfer76700842023-04-01 21:47:1511 hrs 36 mins ago0x21d5a0f5dcf34426af464603ae679b0a1c257f32 IN  Phenix Finance: PHNX Token0 CRO0.4779340065650
0x923d7d4134e98b694630f6c8816b6ae8e9d47fb4cce6cd355018cd1327c33a08Transfer76696422023-04-01 21:05:3812 hrs 18 mins ago0x04e823d9c3b4e7cbe1e28081dabad4c0c7e09c82 IN  Phenix Finance: PHNX Token0 CRO0.276376749701 4,780.860241503
0xc709594d0687ca0d89c934af317f30f53f1c10b6f85aa83c75e01d2413662c2dRebase And Sync76695822023-04-01 20:59:5912 hrs 23 mins ago0x5cdcc9059cfddcfe798b2f095532f45e8fd689f2 IN  Phenix Finance: PHNX Token0 CRO0.66732234272 4,780.862451611
0x2a51f9605c6bd9db5b25b1c15e8792cab4b55f3d8410a62b5fa2846889d5800aApprove76689732023-04-01 20:02:3813 hrs 21 mins ago0xf8ff8f233138ed93dfc2c52efbb9c05717657091 IN  Phenix Finance: PHNX Token0 CRO0.2323692073420
[ Download CSV Export 

OVERVIEW

The Phenix Finance token at a base offers an extremely easy reward system via their token mechanism.

Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x6e65f100c03c9c8ba67f7ebc9db93146cd15ad9d09252def70a5270b51abaf8a67911772023-02-03 10:30:4957 days 22 hrs ago Phenix Finance: PHNX TokenPhenix Finance: Deployer1,008 CRO
0xa9a17b914212017491acb8365e4f6bea727fafdb41171dfefae4dd9bdfecd31e60860672022-12-19 6:07:51104 days 3 hrs ago Phenix Finance: PHNX TokenPhenix Finance: Deployer1,102.128863820965214676 CRO
0xa9a17b914212017491acb8365e4f6bea727fafdb41171dfefae4dd9bdfecd31e60860672022-12-19 6:07:51104 days 3 hrs ago Phenix Finance: PHNX Token Mad Meerkat Finance: Master Meerkat & Router500.96766537316600667 CRO
0xa9a17b914212017491acb8365e4f6bea727fafdb41171dfefae4dd9bdfecd31e60860672022-12-19 6:07:51104 days 3 hrs ago Mad Meerkat Finance: Master Meerkat & Router Phenix Finance: PHNX Token1,603.096529194131221346 CRO
0xf1871228d4d234c768ef859559baf1127d576e6d1daac2dfc95ef7823514617160829592022-12-19 1:15:18104 days 8 hrs ago Phenix Finance: PHNX TokenPhenix Finance: Deployer1,516.879456154077651671 CRO
0xf1871228d4d234c768ef859559baf1127d576e6d1daac2dfc95ef7823514617160829592022-12-19 1:15:18104 days 8 hrs ago Phenix Finance: PHNX Token Mad Meerkat Finance: Master Meerkat & Router689.490661888217114395 CRO
0xf1871228d4d234c768ef859559baf1127d576e6d1daac2dfc95ef7823514617160829592022-12-19 1:15:18104 days 8 hrs ago Mad Meerkat Finance: Master Meerkat & Router Phenix Finance: PHNX Token2,206.370118042294766066 CRO
0xe0df9deab790f37b21a87c0eb506381b0d8d9ad973557ca562143835bc797beb60807492022-12-18 21:47:12104 days 11 hrs ago Phenix Finance: PHNX TokenPhenix Finance: Deployer1,179.129351918467104641 CRO
0xe0df9deab790f37b21a87c0eb506381b0d8d9ad973557ca562143835bc797beb60807492022-12-18 21:47:12104 days 11 hrs ago Phenix Finance: PHNX Token Mad Meerkat Finance: Master Meerkat & Router535.967887235666865745 CRO
0xe0df9deab790f37b21a87c0eb506381b0d8d9ad973557ca562143835bc797beb60807492022-12-18 21:47:12104 days 11 hrs ago Mad Meerkat Finance: Master Meerkat & Router Phenix Finance: PHNX Token1,715.097239154133970386 CRO
0xd3d2b131af89a2644202a2fa2bbd3dbf603d3a66cb3f5d976ba955d371ca112560773142022-12-18 16:23:34104 days 17 hrs ago Phenix Finance: PHNX TokenPhenix Finance: Deployer1,482.942916232926469302 CRO
0xd3d2b131af89a2644202a2fa2bbd3dbf603d3a66cb3f5d976ba955d371ca112560773142022-12-18 16:23:34104 days 17 hrs ago Phenix Finance: PHNX Token Mad Meerkat Finance: Master Meerkat & Router674.064961924057486046 CRO
0xd3d2b131af89a2644202a2fa2bbd3dbf603d3a66cb3f5d976ba955d371ca112560773142022-12-18 16:23:34104 days 17 hrs ago Mad Meerkat Finance: Master Meerkat & Router Phenix Finance: PHNX Token2,157.007878156983955348 CRO
0x93decf448c7f4b684d16ee500316f0226f9499b04725f5d4b60438280701114560769892022-12-18 15:52:55104 days 17 hrs ago Phenix Finance: PHNX TokenPhenix Finance: Deployer1,357.736805165765499128 CRO
0x93decf448c7f4b684d16ee500316f0226f9499b04725f5d4b60438280701114560769892022-12-18 15:52:55104 days 17 hrs ago Phenix Finance: PHNX Token Mad Meerkat Finance: Master Meerkat & Router617.153093257166135966 CRO
0x93decf448c7f4b684d16ee500316f0226f9499b04725f5d4b60438280701114560769892022-12-18 15:52:55104 days 17 hrs ago Mad Meerkat Finance: Master Meerkat & Router Phenix Finance: PHNX Token1,974.889898422931635094 CRO
0xbafd335bbb116727259b842f1072fe7a594d3f1475aab95cbe98a6d86cfb123260768802022-12-18 15:42:38104 days 17 hrs ago Phenix Finance: PHNX TokenPhenix Finance: Deployer2,136.483867292889197176 CRO
0xbafd335bbb116727259b842f1072fe7a594d3f1475aab95cbe98a6d86cfb123260768802022-12-18 15:42:38104 days 17 hrs ago Phenix Finance: PHNX Token Mad Meerkat Finance: Master Meerkat & Router971.129030587676907806 CRO
0xbafd335bbb116727259b842f1072fe7a594d3f1475aab95cbe98a6d86cfb123260768802022-12-18 15:42:38104 days 17 hrs ago Mad Meerkat Finance: Master Meerkat & Router Phenix Finance: PHNX Token3,107.612897880566104982 CRO
0xe348bcf14e1682b27b9dc0fa6d30807dc3e8db015e130f5ba163aa17a24a573260753342022-12-18 13:17:04104 days 20 hrs ago Phenix Finance: PHNX TokenPhenix Finance: Deployer1,187.539878392236619311 CRO
0xe348bcf14e1682b27b9dc0fa6d30807dc3e8db015e130f5ba163aa17a24a573260753342022-12-18 13:17:04104 days 20 hrs ago Phenix Finance: PHNX Token Mad Meerkat Finance: Master Meerkat & Router539.790853814653008777 CRO
0xe348bcf14e1682b27b9dc0fa6d30807dc3e8db015e130f5ba163aa17a24a573260753342022-12-18 13:17:04104 days 20 hrs ago Mad Meerkat Finance: Master Meerkat & Router Phenix Finance: PHNX Token1,727.330732206889628088 CRO
0x380deb4f07d18e51579f0ecb4a99af2c415cfbda8d6dea4bec6ba50ee1abf84e60719822022-12-18 8:01:38105 days 1 hr ago Phenix Finance: PHNX TokenPhenix Finance: Deployer940.166598940960290856 CRO
0x380deb4f07d18e51579f0ecb4a99af2c415cfbda8d6dea4bec6ba50ee1abf84e60719822022-12-18 8:01:38105 days 1 hr ago Phenix Finance: PHNX Token Mad Meerkat Finance: Master Meerkat & Router427.34845406407285948 CRO
0x380deb4f07d18e51579f0ecb4a99af2c415cfbda8d6dea4bec6ba50ee1abf84e60719822022-12-18 8:01:38105 days 1 hr ago Mad Meerkat Finance: Master Meerkat & Router Phenix Finance: PHNX Token1,367.515053005033150336 CRO
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
PhenixFinance

Compiler Version
v0.7.6+commit.7338295f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at cronoscan.com on 2022-10-11
*/

// File: contracts/InterfaceLP.sol

pragma solidity ^0.7.4;


interface InterfaceLP {
    function sync() external;
}

// File: contracts/SafeMathInt.sol

pragma solidity ^0.7.4;


library SafeMathInt {
    int256 private constant MIN_INT256 = int256(1) << 255;
    int256 private constant MAX_INT256 = ~(int256(1) << 255);

    function mul(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a * b;

        require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256));
        require((b == 0) || (c / b == a));
        return c;
    }

    function div(int256 a, int256 b) internal pure returns (int256) {
        require(b != -1 || a != MIN_INT256);

        return a / b;
    }

    function sub(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a - b;
        require((b >= 0 && c <= a) || (b < 0 && c > a));
        return c;
    }

    function add(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a + b;
        require((b >= 0 && c >= a) || (b < 0 && c < a));
        return c;
    }

    function abs(int256 a) internal pure returns (int256) {
        require(a != MIN_INT256);
        return a < 0 ? -a : a;
    }
}

// File: contracts/SafeMath.sol

pragma solidity ^0.7.4;


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

        return c;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }

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

        return c;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;

        return c;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b != 0);
        return a % b;
    }
}

// File: contracts/Ownable.sol

pragma solidity ^0.7.4;


contract Ownable {
    address private _owner;

    event OwnershipRenounced(address indexed previousOwner);

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

    constructor() {
        _owner = msg.sender;
    }

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

    modifier onlyOwner() {
        require(isOwner());
        _;
    }

    function isOwner() public view returns (bool) {
        return msg.sender == _owner;
    }

    function renounceOwnership() public onlyOwner {
        emit OwnershipRenounced(_owner);
        _owner = address(0);
    }

    function transferOwnership(address newOwner) public onlyOwner {
        _transferOwnership(newOwner);
    }

    function _transferOwnership(address newOwner) internal {
        require(newOwner != address(0));
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

// File: contracts/IVVSRouter01.sol

pragma solidity ^0.7.4;


interface IVVSRouter01 {
    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);
}

// File: contracts/IVVSRouter.sol

pragma solidity ^0.7.4;



interface IVVSRouter is IVVSRouter01 {
    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;
}

// File: contracts/IVVSFactory.sol

pragma solidity ^0.7.4;


interface IVVSFactory {
    event PairCreated(
        address indexed token0,
        address indexed token1,
        address pair,
        uint256
    );

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

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

    function allPairs(uint256) external view returns (address pair);

    function allPairsLength() external view returns (uint256);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

// File: contracts/IERC20.sol

pragma solidity ^0.7.4;


interface IERC20 {
    function totalSupply() external view returns (uint256);

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

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

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

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

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

    event Transfer(address indexed from, address indexed to, uint256 value);

    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
}

// File: contracts/ERC20Detailed.sol

pragma solidity ^0.7.4;



abstract contract ERC20Detailed is IERC20 {
    string private _name;
    string private _symbol;
    uint8 private _decimals;

    constructor(
        string memory name,
        string memory symbol,
        uint8 decimals
    ) {
        _name = name;
        _symbol = symbol;
        _decimals = decimals;
    }

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

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

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

// File: contracts/Phenix.sol

pragma solidity ^0.7.4;










contract PhenixFinance is ERC20Detailed, Ownable {
    using SafeMath for uint256;
    using SafeMathInt for int256;

    event Rebase(uint256 indexed totalSupply);

    address[] public pairAddresses;
    address public liquidityReceiver;
    address public phenixFundReserveReceiver;
    bool public initialDistributionFinished;

    mapping(address => bool) _allowTransfer;
    mapping(address => bool) _isFeeExempt;

    uint256 private constant FXP_BASE = 1000000;
    uint256 private constant DECIMALS = 18;
    uint256 private constant MAX_UINT256 = ~uint256(0);
    address private constant DEAD = 0x000000000000000000000000000000000000dEaD;
    address private constant ZERO = 0x0000000000000000000000000000000000000000;
    uint256 private constant REBASE_INTERVAL = 86400;
    uint256 private constant INITIAL_FRAGMENTS_SUPPLY =
        300 * 10**6 * 10**DECIMALS;

    uint256 public liquidityFee = 2;
    uint256 public phenixVaultFee = 8;
    uint256 public sellFee = 15;
    uint256 public totalFee = liquidityFee.add(phenixVaultFee);
    uint256 public feeDenominator = 100;

    uint256 public lastRebaseTimestamp = block.timestamp;
    uint256 public lastRebaseDelta = 0;
    uint256 public rebasePercentDelta = (18 * FXP_BASE) / 1000;

    bool public rebaseRX3Enabled = true;
    uint256 public rebaseRX3Multiplier = FXP_BASE;
    uint256 public rebaseMaxRX3Multiplier = FXP_BASE + FXP_BASE / 2;
    uint256 public rebaseRX3MultiplierStep = (1 * FXP_BASE) / 1000;

    IVVSRouter public router;
    bool public swapEnabled = true;
    uint256 private gonSwapThreshold = (TOTAL_GONS * 10) / 10000;
    bool inSwap;

    uint256 private constant TOTAL_GONS =
        MAX_UINT256 - (MAX_UINT256 % INITIAL_FRAGMENTS_SUPPLY);
    uint256 private constant MAX_SUPPLY = ~uint128(0);
    uint256 private _totalSupply;
    uint256 private _gonsPerFragment;
    mapping(address => uint256) private _gonBalances;
    mapping(address => mapping(address => uint256)) private _allowedFragments;
    mapping(address => bool) public taxableAddress;
    mapping(address => bool) public authorizedRebaseAddress;

    constructor() ERC20Detailed("Phenix Finance", "PHNX", uint8(DECIMALS)) {
        router = IVVSRouter(0x145677FC4d9b8F19B5D56d1820c48e0443049a30);

        address _pairAddress = address(
            IVVSFactory(router.factory()).createPair(
                router.WETH(),
                address(this)
            )
        );

        liquidityReceiver = address(msg.sender);
        phenixFundReserveReceiver = address(msg.sender);

        _allowedFragments[address(this)][address(router)] = uint256(-1);

        _totalSupply = INITIAL_FRAGMENTS_SUPPLY;
        _gonBalances[address(msg.sender)] = TOTAL_GONS;
        _gonsPerFragment = TOTAL_GONS.div(_totalSupply);

        _isFeeExempt[address(phenixFundReserveReceiver)] = true;
        _isFeeExempt[address(this)] = true;
        _isFeeExempt[address(msg.sender)] = true;

        taxableAddress[_pairAddress] = true;
        pairAddresses.push(_pairAddress);
        authorizedRebaseAddress[address(msg.sender)] = true;

        emit Transfer(address(0x0), address(msg.sender), _totalSupply);
    }

    /**
     * @dev Swapping switch used to mitigate any calculation
     * issues during swapBack.
     */
    modifier noReentrancy() {
        inSwap = true;
        _;
        inSwap = false;
    }

    modifier initialDistributionLock() {
        require(
            initialDistributionFinished ||
                isOwner() ||
                _allowTransfer[msg.sender],
            "Initial distirbution not finalized."
        );
        _;
    }

    modifier validRecipient(address to) {
        require(to != address(0x0));
        _;
    }

    /**
     * @dev Returns the delta of the next rebase.
     * @return next rebase delta as uint256 value.
     */
    function getNextRebase(uint256 _timestamp) public view returns (uint256) {
        uint256 rebaseTimestampDelta = _timestamp - lastRebaseTimestamp;

        uint256 nextScaledRebaseIntervalPercentage = rebaseTimestampDelta
            .mul(FXP_BASE)
            .div(REBASE_INTERVAL);

        uint256 nextRebaseDelta = _totalSupply
            .mul(rebasePercentDelta)
            .div(FXP_BASE)
            .mul(nextScaledRebaseIntervalPercentage)
            .div(FXP_BASE);

        if (rebaseRX3Enabled == true) {
            nextRebaseDelta = nextRebaseDelta
                .mul(
                    rebaseRX3Multiplier < rebaseMaxRX3Multiplier
                        ? rebaseRX3Multiplier
                        : rebaseMaxRX3Multiplier
                )
                .div(FXP_BASE);
        }

        return nextRebaseDelta;
    }

    /**
     * @dev Rebases total token supply based on the getNextRebase()
     * return result. Rebase is capped when MAX_SUPPLY is reached.
     */
    function _rebase() internal {
        uint256 supplyDelta = getNextRebase(block.timestamp);
        _totalSupply = _totalSupply.add(uint256(supplyDelta));

        if (_totalSupply > MAX_SUPPLY) {
            _totalSupply = MAX_SUPPLY;
        }

        _gonsPerFragment = TOTAL_GONS.div(_totalSupply);

        lastRebaseDelta = supplyDelta;
        lastRebaseTimestamp = block.timestamp;
        rebaseRX3Multiplier = FXP_BASE;

        emit Rebase(_totalSupply);
    }

    /**
     * @dev Executes the internal _rebase() function and then
     * performs the sync() call on all applicable pairAddresses
     */
    function rebaseAndSync() external {
        require(
            authorizedRebaseAddress[msg.sender] == true,
            "Not authroized to execute rebase"
        );

        _rebase();

        for (uint256 i = 0; i < pairAddresses.length; i++) {
            if (taxableAddress[pairAddresses[i]] == true) {
                InterfaceLP(pairAddresses[i]).sync();
            }
        }
    }

    /**
     * @dev Sets the last rebase time to the current block
     * timestamp as means to reset the value.
     */
    function resetLastRebaseTimestamp() external {
        require(
            authorizedRebaseAddress[msg.sender] == true,
            "Not authroized to execute this function."
        );

        lastRebaseTimestamp = block.timestamp;
    }

    /**
     * @dev Returns total token supply. Overrides ERC-20
     * totalSupply() function to return elastic supply.
     */
    function totalSupply() external view override returns (uint256) {
        return _totalSupply;
    }

    /**
     * @dev Transfers amount tokens to an address.
     * @param to Receiver of the transfered tokens.
     * @param value Amount of tokens that are received.
     * @return true
     */
    function transfer(address to, uint256 value)
        external
        override
        validRecipient(to)
        initialDistributionLock
        returns (bool)
    {
        _transferFrom(msg.sender, to, value);
        return true;
    }

    /**
     * @dev Adds LP contract address and removes
     * fees from the given address. Added pair contract tested
     * sync() before adding to see if it is a pair address.
     * Addition will fail if sync() fails.
     * @param _address Update LP contract address.
     */
    function addLPAddress(address _address) external onlyOwner {
        InterfaceLP(_address).sync();

        for (uint256 i = 0; i < pairAddresses.length; i++) {
            require(pairAddresses[i] != _address, "Pair address already added");
        }

        pairAddresses.push(_address);
        taxableAddress[_address] = true;
    }

    /**
     * @dev Returns array of all LP Addresses
     * @return address[] Array of LP Addresses.
     **/
    function getLPAddresses() external view returns (address[] memory) {
        return pairAddresses;
    }

    /**
     * @dev Updates given address' taxable status.
     * @param _address Subject address of taxable state adjustment.
     * @param _status State if address should be taxed.
     */
    function setTaxableAddress(address _address, bool _status)
        external
        onlyOwner
    {
        taxableAddress[_address] = _status;
    }

    /**
     * @dev Updates given address' Authorized Rebase status.
     * @param _address Subject address of Authorized Rebase state adjustment.
     * @param _status State if address should be allowed call rebaseAndSync().
     */
    function setAuthorizedRebaseAddress(address _address, bool _status)
        external
        onlyOwner
    {
        authorizedRebaseAddress[_address] = _status;
    }

    /**
     * @dev Returns spender alloance of an owner address.
     * Overides ERC-20 allowance(address, address) function
     * to return allowed fragments.
     * @param owner Owner address of tokens.
     * @param spender Spender address of tokens.
     * @return uint256 Amount of allowed tokens for the spender to use.
     */
    function allowance(address owner, address spender)
        external
        view
        override
        returns (uint256)
    {
        return _allowedFragments[owner][spender];
    }

    /**
     * @dev Returns balance of given address. Overrides
     * ERC-20 balanceOf(address) to provide balance based
     * on holder gons and gonsPerFragment.
     * @param who Balance of address.
     * @return uint256 value of address balance.
     */
    function balanceOf(address who) external view override returns (uint256) {
        return _gonBalances[who].div(_gonsPerFragment);
    }

    /**
     * @dev Performs basic token transfer. Used as
     * internal function in _transferFrom(address,
     * address, uint256) function.
     * @param from sender address of transfer.
     * @param to receiver adddress of transfer.
     * @param amount amount of tokens for receiver.
     * @return true.
     */
    function _basicTransfer(
        address from,
        address to,
        uint256 amount
    ) internal returns (bool) {
        uint256 gonAmount = amount.mul(_gonsPerFragment);
        _gonBalances[from] = _gonBalances[from].sub(gonAmount);
        _gonBalances[to] = _gonBalances[to].add(gonAmount);
        return true;
    }

    /**
     * @dev Transfers token from sender address
     * to receiver address. Performs token supply
     * rebase provided it is acceptable. Executes
     * _baseTransfer(address, address, uint256) if
     * swap is in progress.
     * @param sender sender address of transfer.
     * @param to receiver adddress of transfer.
     * @param amount amount of tokens for receiver.
     * @return true.
     */
    function _transferFrom(
        address sender,
        address to,
        uint256 amount
    ) internal returns (bool) {
        if (inSwap) {
            return _basicTransfer(sender, to, amount);
        }

        uint256 gonAmount = amount.mul(_gonsPerFragment);

        if (_shouldSwapBack()) {
            _swapBack();
        }

        if (rebaseRX3Enabled == true) {
            rebaseRX3Multiplier = rebaseRX3Multiplier.add(
                rebaseRX3MultiplierStep
            );
        }

        _gonBalances[sender] = _gonBalances[sender].sub(gonAmount);

        uint256 gonAmountReceived = _shouldTakeFee(sender, to)
            ? _takeFee(sender, to, gonAmount)
            : gonAmount;
        _gonBalances[to] = _gonBalances[to].add(gonAmountReceived);

        emit Transfer(sender, to, gonAmountReceived.div(_gonsPerFragment));

        return true;
    }

    /**
     * @dev Transfers token from sender address
     * to receiver address. Overrides ERC-20
     * transferFrom(address, address, uint256) to
     * check value of allowed fragments that sender
     * can access from the owner (from address).
     * @param from sender address of transfer.
     * @param to receiver adddress of transfer.
     * @param value amount of tokens for receiver.
     * @return true.
     */
    function transferFrom(
        address from,
        address to,
        uint256 value
    ) external override validRecipient(to) returns (bool) {
        if (_allowedFragments[from][msg.sender] != uint256(-1)) {
            _allowedFragments[from][msg.sender] = _allowedFragments[from][
                msg.sender
            ].sub(value, "Insufficient Allowance");
        }

        _transferFrom(from, to, value);
        return true;
    }

    /**
     * @dev Executes fee allocations and distributes tokens
     * to contract address, phenix vault receiver address, and
     * liquidity receiver address.
     */
    function _swapBack() internal noReentrancy {
        uint256 contractTokenBalance = _gonBalances[address(this)].div(
            _gonsPerFragment
        );
        uint256 amountToLiquify = contractTokenBalance
            .mul(liquidityFee)
            .div(totalFee)
            .div(2);
        uint256 amountToSwap = contractTokenBalance.sub(amountToLiquify);

        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = router.WETH();

        uint256 balanceBefore = address(this).balance;

        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            amountToSwap,
            0,
            path,
            address(this),
            block.timestamp
        );

        uint256 amountETH = address(this).balance.sub(balanceBefore);
        uint256 totalETHFee = totalFee.sub(liquidityFee.div(2));

        uint256 amountETHLiquidity = amountETH
            .mul(liquidityFee)
            .div(totalETHFee)
            .div(2);

        if (amountToLiquify > 0) {
            router.addLiquidityETH{value: amountETHLiquidity}(
                address(this),
                amountToLiquify,
                0,
                0,
                liquidityReceiver,
                block.timestamp
            );
        }

        (bool success, ) = payable(phenixFundReserveReceiver).call{
            value: address(this).balance
        }("");
    }

    /**
     * @dev Calculates swap fee and returns new allocation
     * of swap based on swap conditions. Calculate is based
     * on liquidity fee and phenix vault fee. Sell fee will also
     * be taken into consideration if receiver is pair address.
     * @return uint256 gonAmount that is transfered in the swap.
     */
    function _takeFee(
        address sender,
        address to,
        uint256 gonAmount
    ) internal returns (uint256) {
        uint256 _totalFee = totalFee;
        if (taxableAddress[to] == true) _totalFee = _totalFee.add(sellFee);

        uint256 feeAmount = gonAmount.mul(_totalFee).div(feeDenominator);

        _gonBalances[address(this)] = _gonBalances[address(this)].add(
            feeAmount
        );
        emit Transfer(sender, address(this), feeAmount.div(_gonsPerFragment));

        return gonAmount.sub(feeAmount);
    }

    /**
     * @dev Decreases spender allowance of sender address.
     * @param spender Spender address.
     * @param subtractedValue Amount to reduce spender allowance by.
     * @return bool
     */
    function decreaseAllowance(address spender, uint256 subtractedValue)
        external
        initialDistributionLock
        returns (bool)
    {
        uint256 oldValue = _allowedFragments[msg.sender][spender];
        if (subtractedValue >= oldValue) {
            _allowedFragments[msg.sender][spender] = 0;
        } else {
            _allowedFragments[msg.sender][spender] = oldValue.sub(
                subtractedValue
            );
        }
        emit Approval(
            msg.sender,
            spender,
            _allowedFragments[msg.sender][spender]
        );
        return true;
    }

    /**
     * @dev Updates router address
     * @param _address address to set for the dex router
     */
    function updateRouter(address _address) external onlyOwner {
        require(address(router) != _address, "Router address already set");
        router = IVVSRouter(_address);
    }

    /**
     * @dev Increases spender allowance of sender address.
     * @param spender Spender address.
     * @param addedValue Amount to increase spender allowance by.
     * @return bool
     */
    function increaseAllowance(address spender, uint256 addedValue)
        external
        initialDistributionLock
        returns (bool)
    {
        _allowedFragments[msg.sender][spender] = _allowedFragments[msg.sender][
            spender
        ].add(addedValue);
        emit Approval(
            msg.sender,
            spender,
            _allowedFragments[msg.sender][spender]
        );
        return true;
    }

    /**
     * @dev Approves spender address to use sender tokens.
     * @param spender Spender address.
     * @param value Amount of tokens spender can access.
     * @return bool
     */
    function approve(address spender, uint256 value)
        external
        override
        initialDistributionLock
        returns (bool)
    {
        _allowedFragments[msg.sender][spender] = value;
        emit Approval(msg.sender, spender, value);
        return true;
    }

    /**
     * @dev Checks if given address is exempt from swap fees.
     * @param _addr Address to check current exemption status.
     * @return bool
     */
    function checkFeeExempt(address _addr) external view returns (bool) {
        return _isFeeExempt[_addr];
    }

    /**
     * @dev Unlocks tokens and sets initialDistributedFinished
     * to true. Only callable from owner address.
     */
    function setInitialDistributionFinished() external onlyOwner {
        initialDistributionFinished = true;
    }

    /**
     * @dev Enables transfers for a specific address.
     * Only callable from owner address.
     * @param _addr Address to enable transfers.
     */
    function enableTransfer(address _addr) external onlyOwner {
        _allowTransfer[_addr] = true;
    }

    /**
     * @dev Sets given address to have exceptions from
     * swap fees. Only callable from owner address.
     * @param _addr Address to set fee exemptions.
     */
    function setFeeExempt(address _addr) external onlyOwner {
        _isFeeExempt[_addr] = true;
    }

    /**
     * @dev Checks if a sender (from) and receiver
     * (to) need swap fees applied in transfer. Used
     * in _transferFrom(address, address, uint256) internal
     * function. Should only apply when user is interacting with
     * the pair (to or from)
     * @param from Sender address of swap
     * @param to Receiver address of swap.
     * @return bool True if fees apply on transfer.
     */
    function _shouldTakeFee(address from, address to)
        internal
        view
        returns (bool)
    {
        return
            (taxableAddress[from] || taxableAddress[to]) &&
            (!_isFeeExempt[from] && !_isFeeExempt[to]);
    }

    /**
     * @dev Updates swap back settings.
     * @param _enabled bool value to determine of swap back is enabled.
     * @param _num uint256 value for the swap back threshhold
     * @param _denom uint256 value used for the threshold deminator
     */
    function setSwapBackSettings(
        bool _enabled,
        uint256 _num,
        uint256 _denom
    ) external onlyOwner {
        swapEnabled = _enabled;
        gonSwapThreshold = TOTAL_GONS.div(_denom).mul(_num);
    }

    /**
     * @dev Updates RX3 Rebase settings.
     * @param _enabled bool value to determine of RX3 Protocol is enabled.
     * @param _rebaseMaxRX3Multiplier uint256 value for the max RX3 Multiplier
     * @param _rebaseRX3MultiplierStep uint256 value used for the RX3 Multiplier Step
     */
    function setRX3Settings(
        bool _enabled,
        uint256 _rebaseMaxRX3Multiplier,
        uint256 _rebaseRX3MultiplierStep
    ) external onlyOwner {
        rebaseRX3Enabled = _enabled;
        rebaseMaxRX3Multiplier = _rebaseMaxRX3Multiplier;
        rebaseRX3MultiplierStep = _rebaseRX3MultiplierStep;
    }

    /**
     * @dev Configures Rebase settings. Sets
     * RebasePercentDelta, and Accuracy.
     * @param _percentage value of rebase percent delta based on a daily interval (18)
     * @param _accuracy defines the value of the rebase delta percentage demoninator (1000)
     */
    function setRebaseSettings(uint256 _percentage, uint256 _accuracy)
        external
        onlyOwner
    {
        rebasePercentDelta = (_percentage * FXP_BASE) / _accuracy;
    }

    /**
     * @dev Check whether the a swap back can be performed.
     * @return bool, true if swapBack is allowed to execute.
     */
    function _shouldSwapBack() internal view returns (bool) {
        return
            taxableAddress[msg.sender] == false &&
            !inSwap &&
            swapEnabled &&
            _gonBalances[address(this)] >= gonSwapThreshold;
    }

    /**
     * @dev Returns current circulating token supply
     * @return uint256, value of total circulating supply.
     */
    function getCirculatingSupply() public view returns (uint256) {
        return
            (TOTAL_GONS.sub(_gonBalances[DEAD]).sub(_gonBalances[ZERO])).div(
                _gonsPerFragment
            );
    }

    function isNotInSwap() external view returns (bool) {
        return !inSwap;
    }

    function checkSwapThreshold() external view returns (uint256) {
        return gonSwapThreshold.div(_gonsPerFragment);
    }

    function setFeeReceivers(
        address _liquidityReceiver,
        address _phenixFundReserveReceiver
    ) external onlyOwner {
        liquidityReceiver = _liquidityReceiver;
        phenixFundReserveReceiver = _phenixFundReserveReceiver;
    }

    function setFees(
        uint256 _liquidityFee,
        uint256 _phenixVaultFee,
        uint256 _sellFee,
        uint256 _feeDenominator
    ) external onlyOwner {
        liquidityFee = _liquidityFee;
        phenixVaultFee = _phenixVaultFee;
        sellFee = _sellFee;
        totalFee = liquidityFee.add(phenixVaultFee);
        feeDenominator = _feeDenominator;
        require(totalFee < feeDenominator / 4);
    }

    function emergencyRecoverETH() external onlyOwner {
        require(address(this).balance > 0, "No ETH to recover.");
        (bool success, ) = address(msg.sender).call{
            value: address(this).balance
        }("");
        require(success, "Failed to recover ETH.");
    }

    function emergencyRecoverToken(address _tokenAddress) external onlyOwner {
        require(
            IERC20(_tokenAddress).balanceOf(address(this)) > 0,
            "No tokens to recover."
        );
        IERC20(_tokenAddress).transfer(
            msg.sender,
            IERC20(_tokenAddress).balanceOf(address(this))
        );
    }

    receive() external payable {}
}

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"}],"name":"OwnershipRenounced","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"totalSupply","type":"uint256"}],"name":"Rebase","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"addLPAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"authorizedRebaseAddress","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"who","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"checkFeeExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"checkSwapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"emergencyRecoverETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddress","type":"address"}],"name":"emergencyRecoverToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"enableTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feeDenominator","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLPAddresses","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_timestamp","type":"uint256"}],"name":"getNextRebase","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"initialDistributionFinished","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isNotInSwap","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastRebaseDelta","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastRebaseTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"pairAddresses","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"phenixFundReserveReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"phenixVaultFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rebaseAndSync","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rebaseMaxRX3Multiplier","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rebasePercentDelta","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rebaseRX3Enabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rebaseRX3Multiplier","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rebaseRX3MultiplierStep","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"resetLastRebaseTimestamp","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IVVSRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_status","type":"bool"}],"name":"setAuthorizedRebaseAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"setFeeExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_liquidityReceiver","type":"address"},{"internalType":"address","name":"_phenixFundReserveReceiver","type":"address"}],"name":"setFeeReceivers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_phenixVaultFee","type":"uint256"},{"internalType":"uint256","name":"_sellFee","type":"uint256"},{"internalType":"uint256","name":"_feeDenominator","type":"uint256"}],"name":"setFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setInitialDistributionFinished","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"},{"internalType":"uint256","name":"_rebaseMaxRX3Multiplier","type":"uint256"},{"internalType":"uint256","name":"_rebaseRX3MultiplierStep","type":"uint256"}],"name":"setRX3Settings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_percentage","type":"uint256"},{"internalType":"uint256","name":"_accuracy","type":"uint256"}],"name":"setRebaseSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"},{"internalType":"uint256","name":"_num","type":"uint256"},{"internalType":"uint256","name":"_denom","type":"uint256"}],"name":"setSwapBackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_status","type":"bool"}],"name":"setTaxableAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"taxableAddress","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"updateRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405260026008556008600955600f600a55620000316009546008546200045460201b62001e6e1790919060201c565b600b556064600c5542600d556000600e55614650600f556010805460ff19166001179055620f42406011556216e3606012556103e86013556014805460ff60a01b1916600160a01b1790557e068db8bac710cb295e9e1b089a027525460aa64c2f60beb15a6764b6a2339c601555348015620000ac57600080fd5b50604080518082018252600e81526d5068656e69782046696e616e636560901b6020808301918252835180850190945260048452630a0909cb60e31b908401528151919291601291620001039160009190620005a7565b50815162000119906001906020850190620005a7565b506002805460ff191660ff9290921691909117610100600160a81b031916610100330217905550506014805473145677fc4d9b8f19b5d56d1820c48e0443049a306001600160a01b031990911617908190556040805163c45a015560e01b815290516000926001600160a01b03169163c45a0155916004808301926020929190829003018186803b158015620001ae57600080fd5b505afa158015620001c3573d6000803e3d6000fd5b505050506040513d6020811015620001da57600080fd5b5051601454604080516315ab88c960e31b815290516001600160a01b039384169363c9c6539693169163ad5c4648916004808301926020929190829003018186803b1580156200022957600080fd5b505afa1580156200023e573d6000803e3d6000fd5b505050506040513d60208110156200025557600080fd5b5051604080516001600160e01b031960e085901b1681526001600160a01b0390921660048301523060248301525160448083019260209291908290030181600087803b158015620002a557600080fd5b505af1158015620002ba573d6000803e3d6000fd5b505050506040513d6020811015620002d157600080fd5b505160048054336001600160a01b031991821681179092556005805490911682179055306000908152601a602090815260408083206014546001600160a01b03168452825280832060001990556af8277896582678ac0000006017908155938352601982529091206a87b0b4d075b8302fffffff19908190559154929350620003649290620004b6811b62001ecf17901c565b6018556005546001600160a01b0390811660009081526007602090815260408083208054600160ff1991821681179092553085528285208054821683179055338086528386208054831684179055958716808652601b85528386208054831684179055600380548085019091557fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b0180546001600160a01b0319169091179055858552601c845282852080549091169091179055601754815190815290517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929181900390910190a35062000653565b600082820183811015620004af576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b6000620004af83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506200050060201b60201c565b60008183620005905760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015620005545781810151838201526020016200053a565b50505050905090810190601f168015620005825780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385816200059d57fe5b0495945050505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282620005df57600085556200062a565b82601f10620005fa57805160ff19168380011785556200062a565b828001600101855582156200062a579182015b828111156200062a5782518255916020019190600101906200060d565b50620006389291506200063c565b5090565b5b808211156200063857600081556001016200063d565b61298280620006636000396000f3fe60806040526004361061037a5760003560e01c8063784d20b1116101d1578063b065406911610102578063d1fce264116100a0578063dd62ed3e1161006f578063dd62ed3e14610bd9578063f2fde38b14610c14578063f887ea4014610c47578063fff4348114610c5c57610381565b8063d1fce26414610b2b578063d439979014610b40578063d5938aac14610b73578063d780d4dc14610ba657610381565b8063bdb938e2116100dc578063bdb938e214610a70578063c851cc3214610aab578063c939a4f614610ade578063d088935814610af357610381565b8063b065406914610a1c578063b86a2fd714610a31578063bd94c8dd14610a4657610381565b806399e3b3bd1161016f578063a8688e2a11610149578063a8688e2a14610986578063a9059cbb146109b9578063a92558d0146109f2578063ab92c3f214610a0757610381565b806399e3b3bd146108fd578063a457c2d714610912578063a4b45c001461094b57610381565b80638da5cb5b116101ab5780638da5cb5b146108a95780638f32d59b146108be57806395d89b41146108d357806398118cb4146108e857610381565b8063784d20b11461083157806383b4ac681461086457806389e9616e1461087957610381565b80632d517fdc116102ab578063530ddf64116102495780636fcba377116102235780636fcba3771461077a57806370a08231146107b6578063715018a6146107e9578063749796a5146107fe57610381565b8063530ddf641461073b5780636d351d1a146107505780636ddd17131461076557610381565b8063395093511161028557806339509351146106735780634513e7d0146106ac5780634bfed05c146106c15780634c50855d146106d657610381565b80632d517fdc146105fb578063313ce567146106105780633751ed741461063b57610381565b806323b872dd116103185780632b112e49116102f25780632b112e49146105a75780632b14ca56146105bc5780632b28af1b146105d15780632be6937d146105e657610381565b806323b872dd146104f8578063264d26dd1461053b5780632abf77f51461056c57610381565b8063180b0d7e11610354578063180b0d7e1461049257806318160ddd146104b9578063186e2d77146104ce5780631df4ccfc146104e357610381565b806306fdde031461038657806307f594a314610410578063095ea7b31461044557610381565b3661038157005b600080fd5b34801561039257600080fd5b5061039b610c86565b6040805160208082528351818301528351919283929083019185019080838360005b838110156103d55781810151838201526020016103bd565b50505050905090810190601f1680156104025780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561041c57600080fd5b506104436004803603602081101561043357600080fd5b50356001600160a01b0316610d1c565b005b34801561045157600080fd5b5061047e6004803603604081101561046857600080fd5b506001600160a01b038135169060200135610ef9565b604080519115158252519081900360200190f35b34801561049e57600080fd5b506104a7610fd4565b60408051918252519081900360200190f35b3480156104c557600080fd5b506104a7610fda565b3480156104da57600080fd5b50610443610fe0565b3480156104ef57600080fd5b506104a76110d4565b34801561050457600080fd5b5061047e6004803603606081101561051b57600080fd5b506001600160a01b038135811691602081013590911690604001356110da565b34801561054757600080fd5b506105506111b4565b604080516001600160a01b039092168252519081900360200190f35b34801561057857600080fd5b506104436004803603604081101561058f57600080fd5b506001600160a01b03813516906020013515156111c3565b3480156105b357600080fd5b506104a76111ff565b3480156105c857600080fd5b506104a7611288565b3480156105dd57600080fd5b506104a761128e565b3480156105f257600080fd5b50610443611294565b34801561060757600080fd5b506104a76112ba565b34801561061c57600080fd5b506106256112c0565b6040805160ff9092168252519081900360200190f35b34801561064757600080fd5b506104436004803603606081101561065e57600080fd5b508035151590602081013590604001356112c9565b34801561067f57600080fd5b5061047e6004803603604081101561069657600080fd5b506001600160a01b0381351690602001356112f4565b3480156106b857600080fd5b506104436113fa565b3480156106cd57600080fd5b506104a7611453565b3480156106e257600080fd5b506106eb611459565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561072757818101518382015260200161070f565b505050509050019250505060405180910390f35b34801561074757600080fd5b506104436114ba565b34801561075c57600080fd5b506104a76115f4565b34801561077157600080fd5b5061047e61160d565b34801561078657600080fd5b506104436004803603608081101561079d57600080fd5b508035906020810135906040810135906060013561161d565b3480156107c257600080fd5b506104a7600480360360208110156107d957600080fd5b50356001600160a01b0316611666565b3480156107f557600080fd5b5061044361168e565b34801561080a57600080fd5b506104436004803603602081101561082157600080fd5b50356001600160a01b03166116ee565b34801561083d57600080fd5b5061047e6004803603602081101561085457600080fd5b50356001600160a01b0316611723565b34801561087057600080fd5b5061047e611738565b34801561088557600080fd5b506104436004803603604081101561089c57600080fd5b5080359060200135611742565b3480156108b557600080fd5b50610550611769565b3480156108ca57600080fd5b5061047e61177d565b3480156108df57600080fd5b5061039b611793565b3480156108f457600080fd5b506104a76117f3565b34801561090957600080fd5b506105506117f9565b34801561091e57600080fd5b5061047e6004803603604081101561093557600080fd5b506001600160a01b038135169060200135611808565b34801561095757600080fd5b506104436004803603604081101561096e57600080fd5b506001600160a01b0381358116916020013516611964565b34801561099257600080fd5b50610443600480360360208110156109a957600080fd5b50356001600160a01b03166119a3565b3480156109c557600080fd5b5061047e600480360360408110156109dc57600080fd5b506001600160a01b038135169060200135611b03565b3480156109fe57600080fd5b506104a7611b9f565b348015610a1357600080fd5b506104a7611ba5565b348015610a2857600080fd5b506104a7611bab565b348015610a3d57600080fd5b506104a7611bb1565b348015610a5257600080fd5b506104a760048036036020811015610a6957600080fd5b5035611bb7565b348015610a7c57600080fd5b5061044360048036036040811015610a9357600080fd5b506001600160a01b0381351690602001351515611c4d565b348015610ab757600080fd5b5061044360048036036020811015610ace57600080fd5b50356001600160a01b0316611c89565b348015610aea57600080fd5b5061047e611d1f565b348015610aff57600080fd5b5061044360048036036060811015610b1657600080fd5b50803515159060208101359060400135611d28565b348015610b3757600080fd5b5061047e611d78565b348015610b4c57600080fd5b5061047e60048036036020811015610b6357600080fd5b50356001600160a01b0316611d88565b348015610b7f57600080fd5b5061044360048036036020811015610b9657600080fd5b50356001600160a01b0316611da6565b348015610bb257600080fd5b5061047e60048036036020811015610bc957600080fd5b50356001600160a01b0316611ddb565b348015610be557600080fd5b506104a760048036036040811015610bfc57600080fd5b506001600160a01b0381358116916020013516611df0565b348015610c2057600080fd5b5061044360048036036020811015610c3757600080fd5b50356001600160a01b0316611e1b565b348015610c5357600080fd5b50610550611e35565b348015610c6857600080fd5b5061055060048036036020811015610c7f57600080fd5b5035611e44565b60008054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610d125780601f10610ce757610100808354040283529160200191610d12565b820191906000526020600020905b815481529060010190602001808311610cf557829003601f168201915b5050505050905090565b610d2461177d565b610d2d57600080fd5b6000816001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015610d7c57600080fd5b505afa158015610d90573d6000803e3d6000fd5b505050506040513d6020811015610da657600080fd5b505111610df2576040805162461bcd60e51b81526020600482015260156024820152742737903a37b5b2b739903a37903932b1b7bb32b91760591b604482015290519081900360640190fd5b806001600160a01b031663a9059cbb33836001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015610e4f57600080fd5b505afa158015610e63573d6000803e3d6000fd5b505050506040513d6020811015610e7957600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b03909316600484015260248301919091525160448083019260209291908290030181600087803b158015610eca57600080fd5b505af1158015610ede573d6000803e3d6000fd5b505050506040513d6020811015610ef457600080fd5b505050565b600554600090600160a01b900460ff1680610f175750610f1761177d565b80610f3157503360009081526006602052604090205460ff165b610f6c5760405162461bcd60e51b81526004018080602001828103825260238152602001806129026023913960400191505060405180910390fd5b336000818152601a602090815260408083206001600160a01b03881680855290835292819020869055805186815290519293927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a35060015b92915050565b600c5481565b60175490565b610fe861177d565b610ff157600080fd5b6000471161103b576040805162461bcd60e51b815260206004820152601260248201527127379022aa24103a37903932b1b7bb32b91760711b604482015290519081900360640190fd5b604051600090339047908381818185875af1925050503d806000811461107d576040519150601f19603f3d011682016040523d82523d6000602084013e611082565b606091505b50509050806110d1576040805162461bcd60e51b81526020600482015260166024820152752330b4b632b2103a37903932b1b7bb32b91022aa241760511b604482015290519081900360640190fd5b50565b600b5481565b6000826001600160a01b0381166110f057600080fd5b6001600160a01b0385166000908152601a602090815260408083203384529091529020546000191461119d576040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b0388166000908152601a82528381203382529091529190912054611178918590611f11565b6001600160a01b0386166000908152601a602090815260408083203384529091529020555b6111a8858585611fa8565b50600195945050505050565b6004546001600160a01b031681565b6111cb61177d565b6111d457600080fd5b6001600160a01b03919091166000908152601c60205260409020805460ff1916911515919091179055565b60185460196020527fd2ac945fcc0096878c763e37d6929b78378c1a2defabde8ba7ee5ed1d6e7a5b25461dead60009081527fc73b1d6eda13a615b81c31830292dbbbf5fbb07f472982e223002bd83d5c3dc454909261128392909161127d9190611277906a87b0b4d075b8302fffffff199061210b565b9061210b565b90611ecf565b905090565b600a5481565b600e5481565b61129c61177d565b6112a557600080fd5b6005805460ff60a01b1916600160a01b179055565b60115481565b60025460ff1690565b6112d161177d565b6112da57600080fd5b6010805460ff191693151593909317909255601255601355565b600554600090600160a01b900460ff1680611312575061131261177d565b8061132c57503360009081526006602052604090205460ff165b6113675760405162461bcd60e51b81526004018080602001828103825260238152602001806129026023913960400191505060405180910390fd5b336000908152601a602090815260408083206001600160a01b03871684529091529020546113959083611e6e565b336000818152601a602090815260408083206001600160a01b0389168085529083529281902085905580519485525191937f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929081900390910190a350600192915050565b336000908152601c602052604090205460ff16151560011461144d5760405162461bcd60e51b81526004018080602001828103825260288152602001806129256028913960400191505060405180910390fd5b42600d55565b600f5481565b60606003805480602002602001604051908101604052809291908181526020018280548015610d1257602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611493575050505050905090565b336000908152601c602052604090205460ff161515600114611523576040805162461bcd60e51b815260206004820181905260248201527f4e6f742061757468726f697a656420746f206578656375746520726562617365604482015290519081900360640190fd5b61152b61214d565b60005b6003548110156110d157601b60006003838154811061154957fe5b60009182526020808320909101546001600160a01b0316835282019290925260400190205460ff161515600114156115ec576003818154811061158857fe5b60009182526020822001546040805160016209351760e01b0319815290516001600160a01b039092169263fff6cae99260048084019382900301818387803b1580156115d357600080fd5b505af11580156115e7573d6000803e3d6000fd5b505050505b60010161152e565b6000611283601854601554611ecf90919063ffffffff16565b601454600160a01b900460ff1681565b61162561177d565b61162e57600080fd5b60088490556009839055600a8290556116478484611e6e565b600b55600c81905560048104600b541061166057600080fd5b50505050565b6018546001600160a01b0382166000908152601960205260408120549091610fce9190611ecf565b61169661177d565b61169f57600080fd5b6002546040516101009091046001600160a01b0316907ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482090600090a260028054610100600160a81b0319169055565b6116f661177d565b6116ff57600080fd5b6001600160a01b03166000908152600760205260409020805460ff19166001179055565b601c6020526000908152604090205460ff1681565b60165460ff161590565b61174a61177d565b61175357600080fd5b80620f424083028161176157fe5b04600f555050565b60025461010090046001600160a01b031690565b60025461010090046001600160a01b0316331490565b60018054604080516020601f60026000196101008789161502019095169490940493840181900481028201810190925282815260609390929091830182828015610d125780601f10610ce757610100808354040283529160200191610d12565b60085481565b6005546001600160a01b031681565b600554600090600160a01b900460ff1680611826575061182661177d565b8061184057503360009081526006602052604090205460ff165b61187b5760405162461bcd60e51b81526004018080602001828103825260238152602001806129026023913960400191505060405180910390fd5b336000908152601a602090815260408083206001600160a01b03871684529091529020548083106118cf57336000908152601a602090815260408083206001600160a01b03881684529091528120556118fe565b6118d9818461210b565b336000908152601a602090815260408083206001600160a01b03891684529091529020555b336000818152601a602090815260408083206001600160a01b0389168085529083529281902054815190815290519293927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a35060019392505050565b61196c61177d565b61197557600080fd5b600480546001600160a01b039384166001600160a01b03199182161790915560058054929093169116179055565b6119ab61177d565b6119b457600080fd5b806001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156119ef57600080fd5b505af1158015611a03573d6000803e3d6000fd5b5050505060005b600354811015611a9b57816001600160a01b031660038281548110611a2b57fe5b6000918252602090912001546001600160a01b03161415611a93576040805162461bcd60e51b815260206004820152601a60248201527f50616972206164647265737320616c7265616479206164646564000000000000604482015290519081900360640190fd5b600101611a0a565b506003805460018181019092557fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b0180546001600160a01b039093166001600160a01b0319909316831790556000918252601b6020526040909120805460ff19169091179055565b6000826001600160a01b038116611b1957600080fd5b600554600160a01b900460ff1680611b345750611b3461177d565b80611b4e57503360009081526006602052604090205460ff165b611b895760405162461bcd60e51b81526004018080602001828103825260238152602001806129026023913960400191505060405180910390fd5b611b94338585611fa8565b506001949350505050565b60135481565b60125481565b60095481565b600d5481565b600d54600090820381611bd46201518061127d84620f42406121e4565b90506000611c07620f424061127d84611c01620f424061127d600f546017546121e490919063ffffffff16565b906121e4565b60105490915060ff16151560011415611c4557611c42620f424061127d60125460115410611c3757601254611c3b565b6011545b84906121e4565b90505b949350505050565b611c5561177d565b611c5e57600080fd5b6001600160a01b03919091166000908152601b60205260409020805460ff1916911515919091179055565b611c9161177d565b611c9a57600080fd5b6014546001600160a01b0382811691161415611cfd576040805162461bcd60e51b815260206004820152601a60248201527f526f75746572206164647265737320616c726561647920736574000000000000604482015290519081900360640190fd5b601480546001600160a01b0319166001600160a01b0392909216919091179055565b60105460ff1681565b611d3061177d565b611d3957600080fd5b6014805460ff60a01b1916600160a01b85151502179055611d7082611c01836af8277896582678ac0000006000195b061990611ecf565b601555505050565b600554600160a01b900460ff1681565b6001600160a01b031660009081526007602052604090205460ff1690565b611dae61177d565b611db757600080fd5b6001600160a01b03166000908152600660205260409020805460ff19166001179055565b601b6020526000908152604090205460ff1681565b6001600160a01b039182166000908152601a6020908152604080832093909416825291909152205490565b611e2361177d565b611e2c57600080fd5b6110d18161223d565b6014546001600160a01b031681565b60038181548110611e5457600080fd5b6000918252602090912001546001600160a01b0316905081565b600082820183811015611ec8576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b6000611ec883836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506122b7565b60008184841115611fa05760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611f65578181015183820152602001611f4d565b50505050905090810190601f168015611f925780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b60165460009060ff1615611fc857611fc184848461231c565b9050611ec8565b6000611fdf601854846121e490919063ffffffff16565b9050611fe96123ae565b15611ff657611ff6612406565b60105460ff161515600114156120195760135460115461201591611e6e565b6011555b6001600160a01b03851660009081526019602052604090205461203c908261210b565b6001600160a01b0386166000908152601960205260408120919091556120628686612773565b61206c5781612077565b6120778686846127ff565b6001600160a01b03861660009081526019602052604090205490915061209d9082611e6e565b6001600160a01b03808716600081815260196020526040902092909255601854908816907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906120ee908590611ecf565b60408051918252519081900360200190a350600195945050505050565b6000611ec883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611f11565b600061215842611bb7565b6017549091506121689082611e6e565b60178190556001600160801b031015612187576001600160801b036017555b6017546121a2906af8277896582678ac000000600019611d68565b601855600e81905542600d55620f42406011556017546040517fafae32ce2847c13a56ab802c034c27d3c19f1d61be48c424c5df134145cd44d090600090a250565b6000826121f357506000610fce565b8282028284828161220057fe5b0414611ec85760405162461bcd60e51b81526004018080602001828103825260218152602001806128e16021913960400191505060405180910390fd5b6001600160a01b03811661225057600080fd5b6002546040516001600160a01b0380841692610100900416907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600280546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b600081836123065760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315611f65578181015183820152602001611f4d565b50600083858161231257fe5b0495945050505050565b600080612334601854846121e490919063ffffffff16565b6001600160a01b03861660009081526019602052604090205490915061235a908261210b565b6001600160a01b0380871660009081526019602052604080822093909355908616815220546123899082611e6e565b6001600160a01b03851660009081526019602052604090205550600190509392505050565b336000908152601b602052604081205460ff161580156123d1575060165460ff16155b80156123e65750601454600160a01b900460ff165b801561128357505060155430600090815260196020526040902054101590565b6016805460ff191660011790556018543060009081526019602052604081205490916124329190611ecf565b90506000612456600261127d600b5461127d600854876121e490919063ffffffff16565b90506000612464838361210b565b6040805160028082526060820183529293506000929091602083019080368337019050509050308160008151811061249857fe5b6001600160a01b03928316602091820292909201810191909152601454604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b1580156124ec57600080fd5b505afa158015612500573d6000803e3d6000fd5b505050506040513d602081101561251657600080fd5b505181518290600190811061252757fe5b6001600160a01b0392831660209182029290920181019190915260145460405163791ac94760e01b8152600481018681526000602483018190523060648401819052426084850181905260a060448601908152895160a487015289514799979097169763791ac947978c9795968c9690939260c49091019187820191028083838b5b838110156125c15781810151838201526020016125a9565b505050509050019650505050505050600060405180830381600087803b1580156125ea57600080fd5b505af11580156125fe573d6000803e3d6000fd5b505050506000612617824761210b90919063ffffffff16565b9050600061263d6126346002600854611ecf90919063ffffffff16565b600b549061210b565b9050600061265f600261127d8461127d600854886121e490919063ffffffff16565b9050861561270957601454600480546040805163f305d71960e01b81523093810193909352602483018b905260006044840181905260648401526001600160a01b0391821660848401524260a48401525192169163f305d71991849160c480830192606092919082900301818588803b1580156126db57600080fd5b505af11580156126ef573d6000803e3d6000fd5b50505050506040513d606081101561270657600080fd5b50505b6005546040516000916001600160a01b03169047908381818185875af1925050503d8060008114612756576040519150601f19603f3d011682016040523d82523d6000602084013e61275b565b606091505b50506016805460ff1916905550505050505050505050565b6001600160a01b0382166000908152601b602052604081205460ff16806127b257506001600160a01b0382166000908152601b602052604090205460ff165b8015611ec857506001600160a01b03831660009081526007602052604090205460ff16158015611ec85750506001600160a01b031660009081526007602052604090205460ff1615919050565b600b546001600160a01b0383166000908152601b602052604081205490919060ff1615156001141561283c57600a54612839908290611e6e565b90505b600c546000906128509061127d86856121e4565b3060009081526019602052604090205490915061286d9082611e6e565b306000818152601960205260409020919091556018546001600160a01b038816907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906128bb908590611ecf565b60408051918252519081900360200190a36128d6848261210b565b969550505050505056fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77496e697469616c20646973746972627574696f6e206e6f742066696e616c697a65642e4e6f742061757468726f697a656420746f206578656375746520746869732066756e6374696f6e2ea2646970667358221220cfa5b583fae8087fd05d9fbb5b60f35867f6610e4ab8b6455287b79474eb04b164736f6c63430007060033

Deployed ByteCode Sourcemap

11923:23291:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11569:83;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34823:351;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34823:351:0;-1:-1:-1;;;;;34823:351:0;;:::i;:::-;;29140:286;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;29140:286:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;13004:35;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;18488:102;;;;;;;;;;;;;:::i;34525:290::-;;;;;;;;;;;;;:::i;12939:58::-;;;;;;;;;;;;;:::i;24118:457::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;24118:457:0;;;;;;;;;;;;;;;;;:::i;12136:32::-;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;12136:32:0;;;;;;;;;;;;;;20524:172;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;20524:172:0;;;;;;;;;;:::i;33369:215::-;;;;;;;;;;;;;:::i;12905:27::-;;;;;;;;;;;;;:::i;13107:34::-;;;;;;;;;;;;;:::i;29854:114::-;;;;;;;;;;;;;:::i;13257:45::-;;;;;;;;;;;;;:::i;11755:83::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;32029:325;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32029:325:0;;;;;;;;;;;;;;:::i;28496:439::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;28496:439:0;;;;;;;;:::i;18100:247::-;;;;;;;;;;;;;:::i;13148:58::-;;;;;;;;;;;;;:::i;19813:106::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17561:406;;;;;;;;;;;;;:::i;33685:126::-;;;;;;;;;;;;;:::i;13481:30::-;;;;;;;;;;;;;:::i;34082:435::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34082:435:0;;;;;;;;;;;;;;;;;:::i;21515:138::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21515:138:0;-1:-1:-1;;;;;21515:138:0;;:::i;3290:126::-;;;;;;;;;;;;;:::i;30433:101::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30433:101:0;-1:-1:-1;;;;;30433:101:0;;:::i;14031:55::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;14031:55:0;-1:-1:-1;;;;;14031:55:0;;:::i;33592:85::-;;;;;;;;;;;;;:::i;32649:185::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32649:185:0;;;;;;;:::i;3025:79::-;;;;;;;;;;;;;:::i;3190:92::-;;;;;;;;;;;;;:::i;11660:87::-;;;;;;;;;;;;;:::i;12827:31::-;;;;;;;;;;;;;:::i;12175:40::-;;;;;;;;;;;;;:::i;27349:629::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;27349:629:0;;;;;;;;:::i;33819:255::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;33819:255:0;;;;;;;;;;:::i;19344:346::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;19344:346:0;-1:-1:-1;;;;;19344:346:0;;:::i;18799:248::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;18799:248:0;;;;;;;;:::i;13379:62::-;;;;;;;;;;;;;:::i;13309:63::-;;;;;;;;;;;;;:::i;12865:33::-;;;;;;;;;;;;;:::i;13048:52::-;;;;;;;;;;;;;:::i;15888:869::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;15888:869:0;;:::i;20123:154::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;20123:154:0;;;;;;;;;;:::i;28098:184::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28098:184:0;-1:-1:-1;;;;;28098:184:0;;:::i;13215:35::-;;;;;;;;;;;;;:::i;31488:230::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31488:230:0;;;;;;;;;;;;;;:::i;12222:39::-;;;;;;;;;;;;;:::i;29600:113::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29600:113:0;-1:-1:-1;;;;;29600:113:0;;:::i;30141:105::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30141:105:0;-1:-1:-1;;;;;30141:105:0;;:::i;13978:46::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13978:46:0;-1:-1:-1;;;;;13978:46:0;;:::i;21048:192::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;21048:192:0;;;;;;;;;;:::i;3424:109::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3424:109:0;-1:-1:-1;;;;;3424:109:0;;:::i;13450:24::-;;;;;;;;;;;;;:::i;12099:30::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12099:30:0;;:::i;11569:83::-;11639:5;11632:12;;;;;;;;-1:-1:-1;;11632:12:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11606:13;;11632:12;;11639:5;;11632:12;;11639:5;11632:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11569:83;:::o;34823:351::-;3152:9;:7;:9::i;:::-;3144:18;;;;;;34978:1:::1;34936:13;-1:-1:-1::0;;;;;34929:31:0::1;;34969:4;34929:46;;;;;;;;;;;;;-1:-1:-1::0;;;;;34929:46:0::1;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;34929:46:0;:50:::1;34907:121;;;::::0;;-1:-1:-1;;;34907:121:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;34907:121:0;;;;;;;;;;;;;::::1;;35046:13;-1:-1:-1::0;;;;;35039:30:0::1;;35084:10;35116:13;-1:-1:-1::0;;;;;35109:31:0::1;;35149:4;35109:46;;;;;;;;;;;;;-1:-1:-1::0;;;;;35109:46:0::1;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;35109:46:0;35039:127:::1;::::0;;-1:-1:-1;;;;;;35039:127:0::1;::::0;;;;;;-1:-1:-1;;;;;35039:127:0;;::::1;;::::0;::::1;::::0;;;;;;;;;;;;;;35109:46:::1;::::0;35039:127;;;;;;;-1:-1:-1;35039:127:0;;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;;;34823:351:0:o;29140:286::-;15470:27;;29276:4;;-1:-1:-1;;;15470:27:0;;;;;:57;;;15518:9;:7;:9::i;:::-;15470:104;;;-1:-1:-1;15563:10:0;15548:26;;;;:14;:26;;;;;;;;15470:104;15448:189;;;;-1:-1:-1;;;15448:189:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29316:10:::1;29298:29;::::0;;;:17:::1;:29;::::0;;;;;;;-1:-1:-1;;;;;29298:38:0;::::1;::::0;;;;;;;;;;:46;;;29360:36;;;;;;;29298:38;;29316:10;29360:36:::1;::::0;;;;;;;;;::::1;-1:-1:-1::0;29414:4:0::1;15648:1;29140:286:::0;;;;:::o;13004:35::-;;;;:::o;18488:102::-;18570:12;;18488:102;:::o;34525:290::-;3152:9;:7;:9::i;:::-;3144:18;;;;;;34618:1:::1;34594:21;:25;34586:56;;;::::0;;-1:-1:-1;;;34586:56:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;34586:56:0;;;;;;;;;;;;;::::1;;34672:82;::::0;34654:12:::1;::::0;34680:10:::1;::::0;34718:21:::1;::::0;34654:12;34672:82;34654:12;34672:82;34718:21;34680:10;34672:82:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34653:101;;;34773:7;34765:42;;;::::0;;-1:-1:-1;;;34765:42:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;34765:42:0;;;;;;;;;;;;;::::1;;3173:1;34525:290::o:0;12939:58::-;;;;:::o;24118:457::-;24261:4;24248:2;-1:-1:-1;;;;;15720:18:0;;15712:27;;;;;;-1:-1:-1;;;;;24282:23:0;::::1;;::::0;;;:17:::1;:23;::::0;;;;;;;24306:10:::1;24282:35:::0;;;;;;;;-1:-1:-1;;24282:50:0::1;24278:225;;24387:104;::::0;;;;::::1;::::0;;::::1;::::0;;-1:-1:-1;;;24387:104:0::1;::::0;;::::1;::::0;;;;-1:-1:-1;;;;;24387:23:0;::::1;-1:-1:-1::0;24387:23:0;;;:17:::1;:23:::0;;;;;24429:10:::1;24387:67:::0;;;;;;;;;;:104:::1;::::0;24459:5;;24387:71:::1;:104::i;:::-;-1:-1:-1::0;;;;;24349:23:0;::::1;;::::0;;;:17:::1;:23;::::0;;;;;;;24373:10:::1;24349:35:::0;;;;;;;:142;24278:225:::1;24515:30;24529:4;24535:2;24539:5;24515:13;:30::i;:::-;-1:-1:-1::0;24563:4:0::1;::::0;24118:457;-1:-1:-1;;;;;24118:457:0:o;12136:32::-;;;-1:-1:-1;;;;;12136:32:0;;:::o;20524:172::-;3152:9;:7;:9::i;:::-;3144:18;;;;;;-1:-1:-1;;;;;20645:33:0;;;::::1;;::::0;;;:23:::1;:33;::::0;;;;:43;;-1:-1:-1;;20645:43:0::1;::::0;::::1;;::::0;;;::::1;::::0;;20524:172::o;33369:215::-;33545:16;;33502:12;:18;;;;12546:42;33422:7;33478:18;;;;;33422:7;;33462:114;;33545:16;;33463:58;;33502:18;33463:34;;-1:-1:-1;;13652:54:0;33463:14;:34::i;:::-;:38;;:58::i;:::-;33462:64;;:114::i;:::-;33442:134;;33369:215;:::o;12905:27::-;;;;:::o;13107:34::-;;;;:::o;29854:114::-;3152:9;:7;:9::i;:::-;3144:18;;;;;;29926:27:::1;:34:::0;;-1:-1:-1;;;;29926:34:0::1;-1:-1:-1::0;;;29926:34:0::1;::::0;;29854:114::o;13257:45::-;;;;:::o;11755:83::-;11821:9;;;;11755:83;:::o;32029:325::-;3152:9;:7;:9::i;:::-;3144:18;;;;;;32199:16:::1;:27:::0;;-1:-1:-1;;32199:27:0::1;::::0;::::1;;::::0;;;::::1;::::0;;;32237:22:::1;:48:::0;32296:23:::1;:50:::0;32029:325::o;28496:439::-;15470:27;;28629:4;;-1:-1:-1;;;15470:27:0;;;;;:57;;;15518:9;:7;:9::i;:::-;15470:104;;;-1:-1:-1;15563:10:0;15548:26;;;;:14;:26;;;;;;;;15470:104;15448:189;;;;-1:-1:-1;;;15448:189:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28710:10:::1;28692:29;::::0;;;:17:::1;:29;::::0;;;;;;;-1:-1:-1;;;;;28692:62:0;::::1;::::0;;;;;;;;:78:::1;::::0;28759:10;28692:66:::1;:78::i;:::-;28669:10;28651:29;::::0;;;:17:::1;:29;::::0;;;;;;;-1:-1:-1;;;;;28651:38:0;::::1;::::0;;;;;;;;;;:119;;;28786;;;;;;28651:38;;28786:119:::1;::::0;;;;;;;;;::::1;-1:-1:-1::0;28923:4:0::1;28496:439:::0;;;;:::o;18100:247::-;18202:10;18178:35;;;;:23;:35;;;;;;;;:43;;:35;:43;18156:133;;;;-1:-1:-1;;;18156:133:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18324:15;18302:19;:37;18100:247::o;13148:58::-;;;;:::o;19813:106::-;19862:16;19898:13;19891:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;19891:20:0;;;;;;;;;;;;;;;;;;;;;;19813:106;:::o;17561:406::-;17652:10;17628:35;;;;:23;:35;;;;;;;;:43;;:35;:43;17606:125;;;;;-1:-1:-1;;;17606:125:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17744:9;:7;:9::i;:::-;17771;17766:194;17790:13;:20;17786:24;;17766:194;;;17836:14;:32;17851:13;17865:1;17851:16;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;17851:16:0;17836:32;;;;;;;;;;;;;;;:40;;17851:16;17836:40;17832:117;;;17909:13;17923:1;17909:16;;;;;;;;;;;;;;;;;17897:36;;;-1:-1:-1;;;;;;17897:36:0;;;;-1:-1:-1;;;;;17909:16:0;;;;17897:34;;:36;;;;;;;;;;17909:16;;17897:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17832:117;17812:3;;17766:194;;33685:126;33738:7;33765:38;33786:16;;33765;;:20;;:38;;;;:::i;13481:30::-;;;-1:-1:-1;;;13481:30:0;;;;;:::o;34082:435::-;3152:9;:7;:9::i;:::-;3144:18;;;;;;34263:12:::1;:28:::0;;;34302:14:::1;:32:::0;;;34345:7:::1;:18:::0;;;34385:32:::1;34278:13:::0;34319:15;34385:16:::1;:32::i;:::-;34374:8;:43:::0;34428:14:::1;:32:::0;;;34507:1:::1;34445:15:::0;34490:18:::1;34479:8;;:29;34471:38;;;::::0;::::1;;34082:435:::0;;;;:::o;21515:138::-;21628:16;;-1:-1:-1;;;;;21606:17:0;;21579:7;21606:17;;;:12;:17;;;;;;21579:7;;21606:39;;:17;:21;:39::i;3290:126::-;3152:9;:7;:9::i;:::-;3144:18;;;;;;3371:6:::1;::::0;3352:26:::1;::::0;3371:6:::1;::::0;;::::1;-1:-1:-1::0;;;;;3371:6:0::1;::::0;3352:26:::1;::::0;;;::::1;3389:6;:19:::0;;-1:-1:-1;;;;;;3389:19:0::1;::::0;;3290:126::o;30433:101::-;3152:9;:7;:9::i;:::-;3144:18;;;;;;-1:-1:-1;;;;;30500:19:0::1;;::::0;;;:12:::1;:19;::::0;;;;:26;;-1:-1:-1;;30500:26:0::1;30522:4;30500:26;::::0;;30433:101::o;14031:55::-;;;;;;;;;;;;;;;:::o;33592:85::-;33663:6;;;;33662:7;33592:85;:::o;32649:185::-;3152:9;:7;:9::i;:::-;3144:18;;;;;;32817:9:::1;12398:7;32791:11;:22;32790:36;;;;;;32769:18;:57:::0;-1:-1:-1;;32649:185:0:o;3025:79::-;3090:6;;;;;-1:-1:-1;;;;;3090:6:0;;3025:79::o;3190:92::-;3268:6;;;;;-1:-1:-1;;;;;3268:6:0;3254:10;:20;;3190:92::o;11660:87::-;11732:7;11725:14;;;;;;;;-1:-1:-1;;11725:14:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11699:13;;11725:14;;11732:7;;11725:14;;11732:7;11725:14;;;;;;;;;;;;;;;;;;;;;;;;12827:31;;;;:::o;12175:40::-;;;-1:-1:-1;;;;;12175:40:0;;:::o;27349:629::-;15470:27;;27487:4;;-1:-1:-1;;;15470:27:0;;;;;:57;;;15518:9;:7;:9::i;:::-;15470:104;;;-1:-1:-1;15563:10:0;15548:26;;;;:14;:26;;;;;;;;15470:104;15448:189;;;;-1:-1:-1;;;15448:189:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27546:10:::1;27509:16;27528:29:::0;;;:17:::1;:29;::::0;;;;;;;-1:-1:-1;;;;;27528:38:0;::::1;::::0;;;;;;;;27581:27;;::::1;27577:237;;27643:10;27666:1;27625:29:::0;;;:17:::1;:29;::::0;;;;;;;-1:-1:-1;;;;;27625:38:0;::::1;::::0;;;;;;;:42;27577:237:::1;;;27741:61;:8:::0;27772:15;27741:12:::1;:61::i;:::-;27718:10;27700:29;::::0;;;:17:::1;:29;::::0;;;;;;;-1:-1:-1;;;;;27700:38:0;::::1;::::0;;;;;;;:102;27577:237:::1;27852:10;27899:29;::::0;;;:17:::1;:29;::::0;;;;;;;-1:-1:-1;;;;;27829:119:0;::::1;27899:38:::0;;;;;;;;;;;27829:119;;;;;;;;;27852:10;27829:119:::1;::::0;;;;;;;;;::::1;-1:-1:-1::0;27966:4:0::1;::::0;27349:629;-1:-1:-1;;;27349:629:0:o;33819:255::-;3152:9;:7;:9::i;:::-;3144:18;;;;;;33963:17:::1;:38:::0;;-1:-1:-1;;;;;33963:38:0;;::::1;-1:-1:-1::0;;;;;;33963:38:0;;::::1;;::::0;;;34012:25:::1;:54:::0;;;;;::::1;::::0;::::1;;::::0;;33819:255::o;19344:346::-;3152:9;:7;:9::i;:::-;3144:18;;;;;;19426:8:::1;-1:-1:-1::0;;;;;19414:26:0::1;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;19460:9;19455:145;19479:13;:20:::0;19475:24;::::1;19455:145;;;19549:8;-1:-1:-1::0;;;;;19529:28:0::1;:13;19543:1;19529:16;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;19529:16:0::1;:28;;19521:67;;;::::0;;-1:-1:-1;;;19521:67:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;19501:3;;19455:145;;;-1:-1:-1::0;19612:13:0::1;:28:::0;;::::1;::::0;;::::1;::::0;;;;::::1;::::0;;-1:-1:-1;;;;;19612:28:0;;::::1;-1:-1:-1::0;;;;;;19612:28:0;;::::1;::::0;::::1;::::0;;-1:-1:-1;19651:24:0;;;:14:::1;19612:28;19651:24:::0;;;;;:31;;-1:-1:-1;;19651:31:0::1;::::0;;::::1;::::0;;19344:346::o;18799:248::-;18959:4;18904:2;-1:-1:-1;;;;;15720:18:0;;15712:27;;;;;;15470::::1;::::0;-1:-1:-1;;;15470:27:0;::::1;;;::::0;:57:::1;;;15518:9;:7;:9::i;:::-;15470:104;;;-1:-1:-1::0;15563:10:0::1;15548:26;::::0;;;:14:::1;:26;::::0;;;;;::::1;;15470:104;15448:189;;;;-1:-1:-1::0;;;15448:189:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18981:36:::2;18995:10;19007:2;19011:5;18981:13;:36::i;:::-;-1:-1:-1::0;19035:4:0::2;::::0;18799:248;-1:-1:-1;;;;18799:248:0:o;13379:62::-;;;;:::o;13309:63::-;;;;:::o;12865:33::-;;;;:::o;13048:52::-;;;;:::o;15888:869::-;16016:19;;15952:7;;16003:32;;15952:7;16093:83;12719:5;16093:48;16003:32;12398:7;16093:38;:48::i;:83::-;16048:128;;16189:23;16215:160;12398:7;16215:132;16312:34;16215:78;12398:7;16215:50;16246:18;;16215:12;;:30;;:50;;;;:::i;:78::-;:96;;:132::i;:160::-;16392:16;;16189:186;;-1:-1:-1;16392:16:0;;:24;;:16;:24;16388:327;;;16451:252;12398:7;16451:220;16533:22;;16511:19;;:44;:141;;16630:22;;16511:141;;;16583:19;;16511:141;16451:15;;:37;:220::i;:252::-;16433:270;;16388:327;16734:15;15888:869;-1:-1:-1;;;;15888:869:0:o;20123:154::-;3152:9;:7;:9::i;:::-;3144:18;;;;;;-1:-1:-1;;;;;20235:24:0;;;::::1;;::::0;;;:14:::1;:24;::::0;;;;:34;;-1:-1:-1;;20235:34:0::1;::::0;::::1;;::::0;;;::::1;::::0;;20123:154::o;28098:184::-;3152:9;:7;:9::i;:::-;3144:18;;;;;;28184:6:::1;::::0;-1:-1:-1;;;;;28176:27:0;;::::1;28184:6:::0;::::1;28176:27;;28168:66;;;::::0;;-1:-1:-1;;;28168:66:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;28245:6;:29:::0;;-1:-1:-1;;;;;;28245:29:0::1;-1:-1:-1::0;;;;;28245:29:0;;;::::1;::::0;;;::::1;::::0;;28098:184::o;13215:35::-;;;;;;:::o;31488:230::-;3152:9;:7;:9::i;:::-;3144:18;;;;;;31626:11:::1;:22:::0;;-1:-1:-1;;;;31626:22:0::1;-1:-1:-1::0;;;31626:22:0;::::1;;;;::::0;;31678:32:::1;31705:4:::0;31678:22:::1;31693:6:::0;12792:26;-1:-1:-1;;13667:38:0::1;;13652:54:::0;;31678:14:::1;:22::i;:32::-;31659:16;:51:::0;-1:-1:-1;;;31488:230:0:o;12222:39::-;;;-1:-1:-1;;;12222:39:0;;;;;:::o;29600:113::-;-1:-1:-1;;;;;29686:19:0;29662:4;29686:19;;;:12;:19;;;;;;;;;29600:113::o;30141:105::-;3152:9;:7;:9::i;:::-;3144:18;;;;;;-1:-1:-1;;;;;30210:21:0::1;;::::0;;;:14:::1;:21;::::0;;;;:28;;-1:-1:-1;;30210:28:0::1;30234:4;30210:28;::::0;;30141:105::o;13978:46::-;;;;;;;;;;;;;;;:::o;21048:192::-;-1:-1:-1;;;;;21199:24:0;;;21167:7;21199:24;;;:17;:24;;;;;;;;:33;;;;;;;;;;;;;21048:192::o;3424:109::-;3152:9;:7;:9::i;:::-;3144:18;;;;;;3497:28:::1;3516:8;3497:18;:28::i;13450:24::-:0;;;-1:-1:-1;;;;;13450:24:0;;:::o;12099:30::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12099:30:0;;-1:-1:-1;12099:30:0;:::o;1337:181::-;1395:7;1427:5;;;1451:6;;;;1443:46;;;;;-1:-1:-1;;;1443:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;1509:1;1337:181;-1:-1:-1;;;1337:181:0:o;2162:132::-;2220:7;2247:39;2251:1;2254;2247:39;;;;;;;;;;;;;;;;;:3;:39::i;1670:226::-;1790:7;1826:12;1818:6;;;;1810:29;;;;-1:-1:-1;;;1810:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1862:5:0;;;1670:226::o;22762:910::-;22902:6;;22881:4;;22902:6;;22898:80;;;22932:34;22947:6;22955:2;22959:6;22932:14;:34::i;:::-;22925:41;;;;22898:80;22990:17;23010:28;23021:16;;23010:6;:10;;:28;;;;:::i;:::-;22990:48;;23055:17;:15;:17::i;:::-;23051:61;;;23089:11;:9;:11::i;:::-;23128:16;;;;:24;;:16;:24;23124:159;;;23233:23;;23191:19;;:80;;:23;:80::i;:::-;23169:19;:102;23124:159;-1:-1:-1;;;;;23318:20:0;;;;;;:12;:20;;;;;;:35;;23343:9;23318:24;:35::i;:::-;-1:-1:-1;;;;;23295:20:0;;;;;;:12;:20;;;;;:58;;;;23394:26;23308:6;23417:2;23394:14;:26::i;:::-;:98;;23483:9;23394:98;;;23436:31;23445:6;23453:2;23457:9;23436:8;:31::i;:::-;-1:-1:-1;;;;;23522:16:0;;;;;;:12;:16;;;;;;23366:126;;-1:-1:-1;23522:39:0;;23366:126;23522:20;:39::i;:::-;-1:-1:-1;;;;;23503:16:0;;;;;;;:12;:16;;;;;:58;;;;23622:16;;23579:61;;;;;;23600:39;;:17;;:21;:39::i;:::-;23579:61;;;;;;;;;;;;;;;-1:-1:-1;23660:4:0;;22762:910;-1:-1:-1;;;;;22762:910:0:o;1526:136::-;1584:7;1611:43;1615:1;1618;1611:43;;;;;;;;;;;;;;;;;:3;:43::i;16920:487::-;16959:19;16981:30;16995:15;16981:13;:30::i;:::-;17037:12;;16959:52;;-1:-1:-1;17037:38:0;;16959:52;17037:16;:38::i;:::-;17022:12;:53;;;-1:-1:-1;;;;;;17088:83:0;;;-1:-1:-1;;;;;17134:12:0;:25;17088:83;17217:12;;17202:28;;12792:26;-1:-1:-1;;13667:38:0;;17202:28;17183:16;:47;17243:15;:29;;;17305:15;17283:19;:37;12398:7;17331:19;:30;17386:12;;17379:20;;;;-1:-1:-1;;17379:20:0;16920:487;:::o;1904:250::-;1962:7;1986:6;1982:47;;-1:-1:-1;2016:1:0;2009:8;;1982:47;2053:5;;;2057:1;2053;:5;:1;2077:5;;;;;:10;2069:56;;;;-1:-1:-1;;;2069:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3541:187;-1:-1:-1;;;;;3615:22:0;;3607:31;;;;;;3675:6;;3654:38;;-1:-1:-1;;;;;3654:38:0;;;;3675:6;;;;;3654:38;;;;;3703:6;:17;;-1:-1:-1;;;;;3703:17:0;;;;;-1:-1:-1;;;;;;3703:17:0;;;;;;;;;3541:187::o;2302:225::-;2422:7;2457:12;2450:5;2442:28;;;;-1:-1:-1;;;2442:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2481:9;2497:1;2493;:5;;;;;;;2302:225;-1:-1:-1;;;;;2302:225:0:o;21991:339::-;22109:4;22126:17;22146:28;22157:16;;22146:6;:10;;:28;;;;:::i;:::-;-1:-1:-1;;;;;22206:18:0;;;;;;:12;:18;;;;;;22126:48;;-1:-1:-1;22206:33:0;;22126:48;22206:22;:33::i;:::-;-1:-1:-1;;;;;22185:18:0;;;;;;;:12;:18;;;;;;:54;;;;22269:16;;;;;;;:31;;22290:9;22269:20;:31::i;:::-;-1:-1:-1;;;;;22250:16:0;;;;;;:12;:16;;;;;:50;-1:-1:-1;22318:4:0;;-1:-1:-1;21991:339:0;;;;;:::o;32983:246::-;33085:10;33033:4;33070:26;;;:14;:26;;;;;;;;:35;;;:59;;-1:-1:-1;33123:6:0;;;;33122:7;33070:59;:87;;;;-1:-1:-1;33146:11:0;;-1:-1:-1;;;33146:11:0;;;;33070:87;:151;;;;-1:-1:-1;;33205:16:0;;33195:4;33174:27;;;;:12;:27;;;;;;:47;;;32983:246::o;24762:1466::-;15336:6;:13;;-1:-1:-1;;15336:13:0;15345:4;15336:13;;;24893:16:::1;::::0;24868:4:::1;15336:6:::0;24847:27;;;:12:::1;:27;::::0;;;;;15336:6;;24847:73:::1;::::0;:27;:31:::1;:73::i;:::-;24816:104;;24931:23;24957:101;25056:1;24957:80;25028:8;;24957:52;24996:12;;24957:20;:38;;:52;;;;:::i;:101::-;24931:127:::0;-1:-1:-1;25069:20:0::1;25092:41;:20:::0;24931:127;25092:24:::1;:41::i;:::-;25170:16;::::0;;25184:1:::1;25170:16:::0;;;;;::::1;::::0;;25069:64;;-1:-1:-1;25146:21:0::1;::::0;25170:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;25170:16:0::1;25146:40;;25215:4;25197;25202:1;25197:7;;;;;;;;-1:-1:-1::0;;;;;25197:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;25241:6:::1;::::0;:13:::1;::::0;;-1:-1:-1;;;25241:13:0;;;;:6;;;::::1;::::0;:11:::1;::::0;:13:::1;::::0;;::::1;::::0;25197:7;;25241:13;;;;;:6;:13;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;25241:13:0;25231:7;;:4;;25236:1:::1;::::0;25231:7;::::1;;;;;-1:-1:-1::0;;;;;25231:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;25325:6:::1;::::0;:188:::1;::::0;-1:-1:-1;;;25325:188:0;;::::1;::::0;::::1;::::0;;;25267:21:::1;25325:188:::0;;;;;;25467:4:::1;25325:188:::0;;;;;;25487:15:::1;25325:188:::0;;;;;;;;;;;;;;;;;;;;;25291:21:::1;::::0;25325:6;;;::::1;::::0;:57:::1;::::0;25397:12;;25267:21;;25440:4;;25325:188;;;;;;;;;;::::1;::::0;::::1;::::0;;;25267:21;25325:188:::1;;;;;;;::::0;;::::1;::::0;;;::::1;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;25526:17;25546:40;25572:13;25546:21;:25;;:40;;;;:::i;:::-;25526:60;;25597:19;25619:33;25632:19;25649:1;25632:12;;:16;;:19;;;;:::i;:::-;25619:8;::::0;;:12:::1;:33::i;:::-;25597:55;;25665:26;25694:93;25785:1;25694:72;25754:11;25694:41;25722:12;;25694:9;:27;;:41;;;;:::i;:93::-;25665:122:::0;-1:-1:-1;25804:19:0;;25800:292:::1;;25840:6;::::0;26014:17:::1;::::0;;25840:240:::1;::::0;;-1:-1:-1;;;25840:240:0;;25916:4:::1;25840:240:::0;;::::1;::::0;;;;;;;;;;:6:::1;:240:::0;;;;;;;;;;-1:-1:-1;;;;;26014:17:0;;::::1;25840:240:::0;;;;26050:15:::1;25840:240:::0;;;;;:6;::::1;::::0;:22:::1;::::0;25870:18;;25840:240;;;;;::::1;::::0;;;;;;;;25870:18;25840:6;:240;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;;25800:292:0::1;26131:25;::::0;26123:97:::1;::::0;26105:12:::1;::::0;-1:-1:-1;;;;;26131:25:0::1;::::0;26184:21:::1;::::0;26105:12;26123:97;26105:12;26123:97;26184:21;26131:25;26123:97:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;15372:6:0;:14;;-1:-1:-1;;15372:14:0;;;-1:-1:-1;;;;;;;;;;24762:1466:0:o;30963:253::-;-1:-1:-1;;;;;31106:20:0;;31063:4;31106:20;;;:14;:20;;;;;;;;;:42;;-1:-1:-1;;;;;;31130:18:0;;;;;;:14;:18;;;;;;;;31106:42;31105:103;;;;-1:-1:-1;;;;;;31168:18:0;;;;;;:12;:18;;;;;;;;31167:19;:40;;;;-1:-1:-1;;;;;;;31191:16:0;;;;;:12;:16;;;;;;;;31190:17;;30963:253;-1:-1:-1;30963:253:0:o;26572:560::-;26729:8;;-1:-1:-1;;;;;26752:18:0;;26689:7;26752:18;;;:14;:18;;;;;;26689:7;;26729:8;26752:18;;:26;;:18;:26;26748:66;;;26806:7;;26792:22;;:9;;:13;:22::i;:::-;26780:34;;26748:66;26876:14;;26827:17;;26847:44;;:24;:9;26861;26847:13;:24::i;:44::-;26955:4;26934:27;;;;:12;:27;;;;;;26827:64;;-1:-1:-1;26934:66:0;;26827:64;26934:31;:66::i;:::-;26925:4;26904:27;;;;:12;:27;;;;;:96;;;;27062:16;;-1:-1:-1;;;;;27016:64:0;;;;;27048:31;;:9;;:13;:31::i;:::-;27016:64;;;;;;;;;;;;;;;27100:24;:9;27114;27100:13;:24::i;:::-;27093:31;26572:560;-1:-1:-1;;;;;;26572:560:0:o

Swarm Source

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