Contract 0xfe1b71bdaee495dca331d28f5779e87bd32fbe53 1

Txn Hash Method
Block
From
To
Value [Txn Fee]
0x23fbbc5dcebecd376c69056119ec2a0e9fc95e2834edb0555d5e084b860348ebApprove33198172023-01-02 12:36:3035 days 3 hrs ago0xbce7ef477c31e2f39f0b5a55dc6f39a7302739c2 IN  0xfe1b71bdaee495dca331d28f5779e87bd32fbe530 MOVR0.00002836
0x326fab02df5763a0c4e7f168fdc20bfc7ce364be05c9ca4ff99843d2ff16aa63Approve33084552022-12-31 21:45:2436 days 18 hrs ago0x09f363f75a3b37a4555e18e40b9e906e02ce0a2a IN  0xfe1b71bdaee495dca331d28f5779e87bd32fbe530 MOVR0.0000659
0xaf19fa41e5e8bde0d2d8c16aad4f33641b930d86531ef8a6d69f1fe4b4b6ec43Approve30659302022-11-26 0:44:4272 days 15 hrs ago0x9bdbdb4a8f7f816c87a67f5281484ed902c6b942 IN  0xfe1b71bdaee495dca331d28f5779e87bd32fbe530 MOVR0.0000632372
0xf002ef7ee5d9e68f1ac3989c669272b27a15f7a0f0a39714ec76d295996af5ceApprove30644452022-11-25 19:31:2472 days 21 hrs ago0x9bdbdb4a8f7f816c87a67f5281484ed902c6b942 IN  0xfe1b71bdaee495dca331d28f5779e87bd32fbe530 MOVR0.0000629876
0x0dbb6f90e5ea845fc3b185096084cb8c2c5bc39f424c7d9f6997051bbd82fe99Approve28552922022-10-26 11:00:42103 days 5 hrs ago0x0de4d1b2405af886921be91ec8232a906df753cc IN  0xfe1b71bdaee495dca331d28f5779e87bd32fbe530 MOVR0.0000612576
0xd5f09ee2a64d7ebe087f91ae0c53319033b29c432223d6e6a8575597dcb4587bApprove28552812022-10-26 10:58:30103 days 5 hrs ago0x0de4d1b2405af886921be91ec8232a906df753cc IN  0xfe1b71bdaee495dca331d28f5779e87bd32fbe530 MOVR0.0000612576
0x5f2e5aaffadda838474e207e81d372ef9e71d35a47e108ce3f759e27ba9ef0c0Approve28438582022-10-24 19:31:36104 days 21 hrs agoSolarbeam: Deployer IN  0xfe1b71bdaee495dca331d28f5779e87bd32fbe530 MOVR0.00048644
0x7abee871078adfe9202d7241972b7c50f4742718edbc386f9fde48c0bffd9c50Approve26088992022-09-20 23:21:06138 days 17 hrs agoSolarbeam: Deployer IN  0xfe1b71bdaee495dca331d28f5779e87bd32fbe530 MOVR0.00048644
0x62c5f321c199bb0b5b583cbd3e58049a76091eea2ca7fd9894bf582fef5dc48cApprove26087412022-09-20 22:47:18138 days 17 hrs agoSolarbeam: Deployer IN  0xfe1b71bdaee495dca331d28f5779e87bd32fbe530 MOVR0.00048632
0xf229cef6027f8a66e9448cab366e2d504c363401031c4615a4a120e9876cffe7Approve21466352022-07-05 9:47:00216 days 6 hrs ago0x7ff1944fd366638667ebf8d3b79ce9089b621596 IN  0xfe1b71bdaee495dca331d28f5779e87bd32fbe530 MOVR0.000022688
0xe85685d9eff31ef37034625ec1cc59c51066f88daf4e0961c3c45e1896ec2ec1Approve19113132022-05-28 3:31:30254 days 13 hrs ago0x429b673ee7ab1392d53842e3539acdd6140b624c IN  0xfe1b71bdaee495dca331d28f5779e87bd32fbe530 MOVR0.00005672
0x7248a50d0038005de28ff78b8594736e6fe70e5c05ba0323b8d0efee4fc6ed41Approve19112932022-05-28 3:27:06254 days 13 hrs ago0x429b673ee7ab1392d53842e3539acdd6140b624c IN  0xfe1b71bdaee495dca331d28f5779e87bd32fbe530 MOVR0.0000566975
0x7d5914c328ea9386f766fa8daf847fb11b2ae9e4556eeae4074de07e98e20994Approve19112652022-05-28 3:21:00254 days 13 hrs ago0x429b673ee7ab1392d53842e3539acdd6140b624c IN  0xfe1b71bdaee495dca331d28f5779e87bd32fbe530 MOVR0.00005672
0xd9eb735faf0ab3c673aad02c610651c7248d2273cf2427495430a353f07a307eApprove17538482022-04-27 22:59:12284 days 17 hrs ago0x00085d4fee6c953d00f4456fb407b6974435eb07 IN  0xfe1b71bdaee495dca331d28f5779e87bd32fbe530 MOVR0.00009664
0x3a62fef0b0cb872d26dd46d70c2ef6f0510820869e6f2249814921d1be27f664Approve17380312022-04-23 16:43:06288 days 23 hrs ago0x6602c14106dd52106c5b71919720a7117bc7a8c5 IN  0xfe1b71bdaee495dca331d28f5779e87bd32fbe530 MOVR0.000170254
0xa0f28bd0f766a189561630d539607e15625a746c4907a57eb64fecaabf6aa8e9Approve16558612022-03-30 13:40:24313 days 2 hrs ago0x6591c5468df6c039601b10f1434115266d4b785b IN  0xfe1b71bdaee495dca331d28f5779e87bd32fbe530 MOVR0.00012092
0x5f93f5ea65dfccf2cdbde9d3b367f229ae9d94d24f461ce641a0f17ab38ac653Approve16434022022-03-26 22:58:06316 days 17 hrs ago0x3a88b3f4495cb7d4e3b87bfa6cdc8dfb2103a173 IN  0xfe1b71bdaee495dca331d28f5779e87bd32fbe530 MOVR0.000097264
0x20e432a46f3c265b103b783bb424081d0ec4264d17cebb17d4510bd11ce91f5dApprove15362382022-02-28 6:09:42343 days 10 hrs ago0xc29fb3c38b1d49073bab1cea31321f03436b024c IN  0xfe1b71bdaee495dca331d28f5779e87bd32fbe530 MOVR0.00012161
0x8d18776224e4369c0cc7626d329b99c361f93955bdc239d6b9804ace721f3cdeApprove14767492022-02-12 22:44:00358 days 17 hrs ago0x63de652a02f0c1b3e8416ba4e6d767ef1d4b3922 IN  0xfe1b71bdaee495dca331d28f5779e87bd32fbe530 MOVR0.000022688
0x6143ed9d620e753a728c4383ed0b483b2d77357949a1ad73212be8a6fc6a9717Approve14767482022-02-12 22:43:48358 days 17 hrs ago0x63de652a02f0c1b3e8416ba4e6d767ef1d4b3922 IN  0xfe1b71bdaee495dca331d28f5779e87bd32fbe530 MOVR0.000022688
0x4852bc865bae584f04f4977a527c3d544a7cc7f5fa6f7baa74f1e85d3a62af08Approve14516432022-02-07 6:21:00364 days 10 hrs ago0x6632820918c7c1ce46841aedaa4d8deea8d34d8e IN  0xfe1b71bdaee495dca331d28f5779e87bd32fbe530 MOVR0.000024244
0xf38232b546ca3a6f0849db79b7be6141754e1d637e713d91a3dee4165dad1d5cApprove14485562022-02-06 17:00:54364 days 23 hrs ago0xfb28256a226fc981da841489e1c448e00a7e5e98 IN  0xfe1b71bdaee495dca331d28f5779e87bd32fbe530 MOVR0.000045244
0x91fa57fc090aefad7d9e95333e527651c8754abe2822398d653a43a4dedc7395Approve14470632022-02-06 10:24:42365 days 6 hrs ago0x8c5355a45e9f8993592b667c79befdd12c91eb44 IN  0xfe1b71bdaee495dca331d28f5779e87bd32fbe530 MOVR0.000015396
0x36e600ae6307dc531d84d8be3e32aea67dd1e7a230f6969a23ff2107ecc6f016Approve14383312022-02-04 22:06:24366 days 18 hrs ago0xecca36cf62eba840be9a18f77a241a888d6586a2 IN  0xfe1b71bdaee495dca331d28f5779e87bd32fbe530 MOVR0.000002595
0xf32125175e249d29f16795d66b6ee02b6c7d8c03f8feb559d9e2c6091520f201Approve14315142022-02-03 21:23:01367 days 19 hrs ago0xd545219982a238ecbc6a9de175c738935c3ddc8f IN  0xfe1b71bdaee495dca331d28f5779e87bd32fbe530 MOVR0.000045244
[ Download CSV Export 
Latest 1 internal transaction
Parent Txn Hash Block From To Value
0xe18f26df84a2322c1e2d9938294c9dfd38bfb23af006080d9702d7386ddfde4c4636262021-09-04 18:21:12519 days 22 hrs ago Solarbeam: Solar Factory  Contract Creation0 MOVR
[ Download CSV Export 
Loading

Similar Match Source Code
Note: This contract matches the deployed ByteCode of the Source Code for Contract 0x9f9a7a3f8F56AFB1a2059daE1E978165816cea44

Contract Name:
SolarPair

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
Yes with 999999 runs

Other Settings:
default evmVersion, GNU GPLv3 license

Contract Source Code (Solidity)

/**
 *Submitted for verification at moonriver.moonscan.io on 2021-10-28
*/

// Sources flattened with hardhat v2.6.0 https://hardhat.org

// File contracts/uniswapv2/libraries/SafeMath.sol

// SPDX-License-Identifier: GPL-3.0
pragma solidity =0.6.12;

// a library for performing overflow-safe math, courtesy of DappHub (https://github.com/dapphub/ds-math)

library SafeMathSolar {
    function add(uint x, uint y) internal pure returns (uint z) {
        require((z = x + y) >= x, 'ds-math-add-overflow');
    }

    function sub(uint x, uint y) internal pure returns (uint z) {
        require((z = x - y) <= x, 'ds-math-sub-underflow');
    }

    function mul(uint x, uint y) internal pure returns (uint z) {
        require(y == 0 || (z = x * y) / y == x, 'ds-math-mul-overflow');
    }
}

contract SolarERC20 {
    using SafeMathSolar for uint;

    string public constant name = 'SolarBeam LP Token';
    string public constant symbol = 'SLP';
    uint8 public constant decimals = 18;
    uint  public totalSupply;
    mapping(address => uint) public balanceOf;
    mapping(address => mapping(address => uint)) public allowance;

    bytes32 public DOMAIN_SEPARATOR;
    // keccak256("Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)");
    bytes32 public constant PERMIT_TYPEHASH = 0x6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9;
    mapping(address => uint) public nonces;

    address private _trustedForwarder; // remember to change before deploying

    // Control support for EIP-2771 Meta Transactions
    bool public metaTxnsEnabled = false;

    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);
    event MetaTxnsEnabled(address indexed caller);
    event MetaTxnsDisabled(address indexed caller);

    constructor() public {
        uint chainId;
        assembly {
            chainId := chainid()
        }
        DOMAIN_SEPARATOR = keccak256(
            abi.encode(
                keccak256('EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)'),
                keccak256(bytes(name)),
                keccak256(bytes('1')),
                chainId,
                address(this)
            )
        );
    }

    function isTrustedForwarder(address forwarder) public view returns (bool) {
        return metaTxnsEnabled && forwarder == _trustedForwarder;
    }

    function _msgSender() internal view returns (address sender) {
        if (isTrustedForwarder(msg.sender)) {
            // The assembly code is more direct than the Solidity version using `abi.decode`.
            assembly {
                sender := shr(96, calldataload(sub(calldatasize(), 20)))
            }
        } else {
            return msg.sender;
        }
    }

    function _msgData() internal view returns (bytes calldata) {
        if (isTrustedForwarder(msg.sender)) {
            return msg.data[:msg.data.length - 20];
        } else {
            return msg.data;
        }
    }

    function _mint(address to, uint value) internal {
        totalSupply = totalSupply.add(value);
        balanceOf[to] = balanceOf[to].add(value);
        emit Transfer(address(0), to, value);
    }

    function _burn(address from, uint value) internal {
        balanceOf[from] = balanceOf[from].sub(value);
        totalSupply = totalSupply.sub(value);
        emit Transfer(from, address(0), value);
    }

    function _approve(address owner, address spender, uint value) private {
        allowance[owner][spender] = value;
        emit Approval(owner, spender, value);
    }

    function _transfer(address from, address to, uint value) private {
        balanceOf[from] = balanceOf[from].sub(value);
        balanceOf[to] = balanceOf[to].add(value);
        emit Transfer(from, to, value);
    }

    function approve(address spender, uint value) external returns (bool) {
        _approve(_msgSender(), spender, value);
        return true;
    }

    function transfer(address to, uint value) external returns (bool) {
        _transfer(_msgSender(), to, value);
        return true;
    }

    function transferFrom(address from, address to, uint value) external returns (bool) {
        if (allowance[from][_msgSender()] != uint(-1)) {
            allowance[from][_msgSender()] = allowance[from][_msgSender()].sub(value);
        }
        _transfer(from, to, value);
        return true;
    }

    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external {
        require(deadline >= block.timestamp, 'SolarBeam: EXPIRED');
        bytes32 digest = keccak256(
            abi.encodePacked(
                '\x19\x01',
                DOMAIN_SEPARATOR,
                keccak256(abi.encode(PERMIT_TYPEHASH, owner, spender, value, nonces[owner]++, deadline))
            )
        );
        address recoveredAddress = ecrecover(digest, v, r, s);
        require(recoveredAddress != address(0) && recoveredAddress == owner, 'SolarBeam: INVALID_SIGNATURE');
        _approve(owner, spender, value);
    }
}


// a library for performing various math operations

library Math {
    function min(uint x, uint y) internal pure returns (uint z) {
        z = x < y ? x : y;
    }

    // babylonian method (https://en.wikipedia.org/wiki/Methods_of_computing_square_roots#Babylonian_method)
    function sqrt(uint y) internal pure returns (uint z) {
        if (y > 3) {
            z = y;
            uint x = y / 2 + 1;
            while (x < z) {
                z = x;
                x = (y / x + x) / 2;
            }
        } else if (y != 0) {
            z = 1;
        }
    }
}


// a library for handling binary fixed point numbers (https://en.wikipedia.org/wiki/Q_(number_format))

// range: [0, 2**112 - 1]
// resolution: 1 / 2**112

library UQ112x112 {
    uint224 constant Q112 = 2**112;

    // encode a uint112 as a UQ112x112
    function encode(uint112 y) internal pure returns (uint224 z) {
        z = uint224(y) * Q112; // never overflows
    }

    // divide a UQ112x112 by a uint112, returning a UQ112x112
    function uqdiv(uint224 x, uint112 y) internal pure returns (uint224 z) {
        z = x / uint224(y);
    }
}


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

    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);
}


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

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

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

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

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

interface ISolarCallee {
    function uniswapV2Call(address sender, uint amount0, uint amount1, bytes calldata data) external;
}

interface IMigrator {
    // Return the desired amount of liquidity token that the migrator wants.
    function desiredLiquidity() external view returns (uint256);
}

contract SolarPair is SolarERC20 {
    using SafeMathSolar for uint;
    using UQ112x112 for uint224;

    uint public constant MINIMUM_LIQUIDITY = 10**3;
    bytes4 private constant SELECTOR = bytes4(keccak256(bytes('transfer(address,uint256)')));

    address public factory;
    address public token0;
    address public token1;

    uint112 private reserve0;           // uses single storage slot, accessible via getReserves
    uint112 private reserve1;           // uses single storage slot, accessible via getReserves
    uint32  private blockTimestampLast; // uses single storage slot, accessible via getReserves

    uint public price0CumulativeLast;
    uint public price1CumulativeLast;
    uint public kLast; // reserve0 * reserve1, as of immediately after the most recent liquidity event

    struct SwapVariables {
        uint112 _reserve0;
        uint112 _reserve1;
        uint balance0;
        uint balance1;
        uint amount0In;
        uint amount1In;
        uint fee;
    }

    uint private unlocked = 1;
    modifier lock() {
        require(unlocked == 1, 'SolarBeam: LOCKED');
        unlocked = 0;
        _;
        unlocked = 1;
    }

    function getReserves() public view returns (uint112 _reserve0, uint112 _reserve1, uint32 _blockTimestampLast) {
        _reserve0 = reserve0;
        _reserve1 = reserve1;
        _blockTimestampLast = blockTimestampLast;
    }

    function _safeTransfer(address token, address to, uint value) private {
        (bool success, bytes memory data) = token.call(abi.encodeWithSelector(SELECTOR, to, value));
        require(success && (data.length == 0 || abi.decode(data, (bool))), 'SolarBeam: TRANSFER_FAILED');
    }

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

    constructor() public {
        factory = msg.sender;
    }

    // called once by the factory at time of deployment
    function initialize(address _token0, address _token1) external {
        require(msg.sender == factory, 'SolarBeam: FORBIDDEN'); // sufficient check
        token0 = _token0;
        token1 = _token1;
    }

    // update reserves and, on the first call per block, price accumulators
    function _update(uint balance0, uint balance1, uint112 _reserve0, uint112 _reserve1) private {
        require(balance0 <= uint112(-1) && balance1 <= uint112(-1), 'SolarBeam: OVERFLOW');
        uint32 blockTimestamp = uint32(block.timestamp % 2**32);
        uint32 timeElapsed = blockTimestamp - blockTimestampLast; // overflow is desired
        if (timeElapsed > 0 && _reserve0 != 0 && _reserve1 != 0) {
            // * never overflows, and + overflow is desired
            price0CumulativeLast += uint(UQ112x112.encode(_reserve1).uqdiv(_reserve0)) * timeElapsed;
            price1CumulativeLast += uint(UQ112x112.encode(_reserve0).uqdiv(_reserve1)) * timeElapsed;
        }
        reserve0 = uint112(balance0);
        reserve1 = uint112(balance1);
        blockTimestampLast = blockTimestamp;
        emit Sync(reserve0, reserve1);
    }

    // if fee is on, mint liquidity equivalent to 1/6th of the growth in sqrt(k)
    function _mintFee(uint112 _reserve0, uint112 _reserve1) private returns (bool feeOn) {
        address feeTo = ISolarFactory(factory).feeTo();
        feeOn = feeTo != address(0);
        uint _kLast = kLast; // gas savings
        if (feeOn) {
            if (_kLast != 0) {
                uint rootK = Math.sqrt(uint(_reserve0).mul(_reserve1));
                uint rootKLast = Math.sqrt(_kLast);
                if (rootK > rootKLast) {
                    uint numerator = totalSupply.mul(rootK.sub(rootKLast));
                    uint denominator = rootK.mul(5).add(rootKLast);
                    uint liquidity = numerator / denominator;
                    if (liquidity > 0) _mint(feeTo, liquidity);
                }
            }
        } else if (_kLast != 0) {
            kLast = 0;
        }
    }

    // this low-level function should be called from a contract which performs important safety checks
    function mint(address to) external lock returns (uint liquidity) {
        (uint112 _reserve0, uint112 _reserve1,) = getReserves(); // gas savings
        uint balance0 = IERC20Solar(token0).balanceOf(address(this));
        uint balance1 = IERC20Solar(token1).balanceOf(address(this));
        uint amount0 = balance0.sub(_reserve0);
        uint amount1 = balance1.sub(_reserve1);

        bool feeOn = _mintFee(_reserve0, _reserve1);
        uint _totalSupply = totalSupply; // gas savings, must be defined here since totalSupply can update in _mintFee
        if (_totalSupply == 0) {
            address migrator = ISolarFactory(factory).migrator();
            if (_msgSender() == migrator) {
                liquidity = IMigrator(migrator).desiredLiquidity();
                require(liquidity > 0 && liquidity != uint256(-1), "Bad desired liquidity");
            } else {
                require(migrator == address(0), "Must not have migrator");
                liquidity = Math.sqrt(amount0.mul(amount1)).sub(MINIMUM_LIQUIDITY);
                _mint(address(0), MINIMUM_LIQUIDITY); // permanently lock the first MINIMUM_LIQUIDITY tokens
            }
        } else {
            liquidity = Math.min(amount0.mul(_totalSupply) / _reserve0, amount1.mul(_totalSupply) / _reserve1);
        }
        require(liquidity > 0, 'SolarBeam: INSUFFICIENT_LIQUIDITY_MINTED');
        _mint(to, liquidity);

        _update(balance0, balance1, _reserve0, _reserve1);
        if (feeOn) kLast = uint(reserve0).mul(reserve1); // reserve0 and reserve1 are up-to-date
        emit Mint(_msgSender(), amount0, amount1);
    }

    // this low-level function should be called from a contract which performs important safety checks
    function burn(address to) external lock returns (uint amount0, uint amount1) {
        (uint112 _reserve0, uint112 _reserve1,) = getReserves(); // gas savings
        address _token0 = token0;                                // gas savings
        address _token1 = token1;                                // gas savings
        uint balance0 = IERC20Solar(_token0).balanceOf(address(this));
        uint balance1 = IERC20Solar(_token1).balanceOf(address(this));
        uint liquidity = balanceOf[address(this)];

        bool feeOn = _mintFee(_reserve0, _reserve1);
        uint _totalSupply = totalSupply; // gas savings, must be defined here since totalSupply can update in _mintFee
        amount0 = liquidity.mul(balance0) / _totalSupply; // using balances ensures pro-rata distribution
        amount1 = liquidity.mul(balance1) / _totalSupply; // using balances ensures pro-rata distribution
        require(amount0 > 0 && amount1 > 0, 'SolarBeam: INSUFFICIENT_LIQUIDITY_BURNED');
        _burn(address(this), liquidity);
        _safeTransfer(_token0, to, amount0);
        _safeTransfer(_token1, to, amount1);
        balance0 = IERC20Solar(_token0).balanceOf(address(this));
        balance1 = IERC20Solar(_token1).balanceOf(address(this));

        _update(balance0, balance1, _reserve0, _reserve1);
        if (feeOn) kLast = uint(reserve0).mul(reserve1); // reserve0 and reserve1 are up-to-date
        emit Burn(_msgSender(), amount0, amount1, to);
    }

    // this low-level function should be called from a contract which performs important safety checks
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external lock {
        require(amount0Out > 0 || amount1Out > 0, 'SolarBeam: INSUFFICIENT_OUTPUT_AMOUNT');
        SwapVariables memory vars = SwapVariables(0, 0, 0, 0, 0, 0, 0);
        (vars._reserve0, vars._reserve1,) = getReserves(); // gas savings
        require(amount0Out < vars._reserve0 && amount1Out < vars._reserve1, 'SolarBeam: INSUFFICIENT_LIQUIDITY');

        vars.fee = 25;

        { // scope for _token{0,1}, avoids stack too deep errors
            address _token0 = token0;
            address _token1 = token1;
            require(to != _token0 && to != _token1, 'SolarBeam: INVALID_TO');
            if (amount0Out > 0) _safeTransfer(_token0, to, amount0Out); // optimistically transfer tokens
            if (amount1Out > 0) _safeTransfer(_token1, to, amount1Out); // optimistically transfer tokens
            if (data.length > 0) ISolarCallee(to).uniswapV2Call(_msgSender(), amount0Out, amount1Out, data);
            vars.balance0 = IERC20Solar(_token0).balanceOf(address(this));
            vars.balance1 = IERC20Solar(_token1).balanceOf(address(this));
        }
        vars.amount0In = vars.balance0 > vars._reserve0 - amount0Out ? vars.balance0 - (vars._reserve0 - amount0Out) : 0;
        vars.amount1In = vars.balance1 > vars._reserve1 - amount1Out ? vars.balance1 - (vars._reserve1 - amount1Out) : 0;
        require(vars.amount0In > 0 || vars.amount1In > 0, 'SolarBeam: INSUFFICIENT_INPUT_AMOUNT');
        { // scope for reserve{0,1}Adjusted, avoids stack too deep errors
            uint balance0Adjusted = vars.balance0.mul(10000).sub(vars.amount0In.mul(vars.fee));
            uint balance1Adjusted = vars.balance1.mul(10000).sub(vars.amount1In.mul(vars.fee));
            require(balance0Adjusted.mul(balance1Adjusted) >= uint(vars._reserve0).mul(vars._reserve1).mul(10000**2), 'SolarBeam: K');
        }

        _update(vars.balance0, vars.balance1, vars._reserve0, vars._reserve1);
        emit Swap(_msgSender(), vars.amount0In, vars.amount1In, amount0Out, amount1Out, to);
    }

    // force balances to match reserves
    function skim(address to) external lock {
        address _token0 = token0; // gas savings
        address _token1 = token1; // gas savings
        _safeTransfer(_token0, to, IERC20Solar(_token0).balanceOf(address(this)).sub(reserve0));
        _safeTransfer(_token1, to, IERC20Solar(_token1).balanceOf(address(this)).sub(reserve1));
    }

    // force reserves to match balances
    function sync() external lock {
        _update(IERC20Solar(token0).balanceOf(address(this)), IERC20Solar(token1).balanceOf(address(this)), reserve0, reserve1);
    }

    function disableMetaTxns() external {
        require(_msgSender() == factory, 'SolarBeam: FORBIDDEN');
        require(metaTxnsEnabled, "SolarBeam: META_TXNS_ALREADY_DISABLED");

        metaTxnsEnabled = false;

        emit MetaTxnsDisabled(_msgSender());
    }

    function enableMetaTxns() external {
        require(_msgSender() == factory, 'SolarBeam: FORBIDDEN');
        require(!metaTxnsEnabled, "SolarBeam: META_TXNS_ALREADY_ENABLED");

        metaTxnsEnabled = true;

        emit MetaTxnsEnabled(_msgSender());
    }
}

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":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount0","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount1","type":"uint256"},{"indexed":true,"internalType":"address","name":"to","type":"address"}],"name":"Burn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"caller","type":"address"}],"name":"MetaTxnsDisabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"caller","type":"address"}],"name":"MetaTxnsEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount0","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount1","type":"uint256"}],"name":"Mint","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount0In","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount1In","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount0Out","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount1Out","type":"uint256"},{"indexed":true,"internalType":"address","name":"to","type":"address"}],"name":"Swap","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint112","name":"reserve0","type":"uint112"},{"indexed":false,"internalType":"uint112","name":"reserve1","type":"uint112"}],"name":"Sync","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":[],"name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MINIMUM_LIQUIDITY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PERMIT_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"burn","outputs":[{"internalType":"uint256","name":"amount0","type":"uint256"},{"internalType":"uint256","name":"amount1","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableMetaTxns","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableMetaTxns","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"factory","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getReserves","outputs":[{"internalType":"uint112","name":"_reserve0","type":"uint112"},{"internalType":"uint112","name":"_reserve1","type":"uint112"},{"internalType":"uint32","name":"_blockTimestampLast","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token0","type":"address"},{"internalType":"address","name":"_token1","type":"address"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"forwarder","type":"address"}],"name":"isTrustedForwarder","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"kLast","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"metaTxnsEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"mint","outputs":[{"internalType":"uint256","name":"liquidity","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"permit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"price0CumulativeLast","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price1CumulativeLast","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"skim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount0Out","type":"uint256"},{"internalType":"uint256","name":"amount1Out","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"swap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sync","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"token0","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"token1","outputs":[{"internalType":"address","name":"","type":"address"}],"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"}]

60806040526005805460ff60a01b191690556001600d5534801561002257600080fd5b50604080518082018252601281527129b7b630b92132b0b6902628102a37b5b2b760711b6020918201528151808301835260018152603160f81b9082015281517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818301527fb4fdaf01ee326634338de6f91bba9d1d19adcd068a294d0ed0b956eedce7081e818401527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a0808301919091528351808303909101815260c09091019092528151910120600355600680546001600160a01b031916331790556134ba8061011d6000396000f3fe608060405234801561001057600080fd5b50600436106101e55760003560e01c80635a3d54931161010f578063a9059cbb116100a2578063d21220a711610071578063d21220a714610651578063d505accf14610659578063dd62ed3e146106b7578063fff6cae9146106f2576101e5565b8063a9059cbb146105d5578063ba9a7a561461060e578063bc25cf7714610616578063c45a015514610649576101e5565b80637ecebe00116100de5780637ecebe001461054657806389afcb441461057957806395d89b41146105c5578063a8c95dc0146105cd576101e5565b80635a3d5493146104d05780636a627842146104d857806370a082311461050b5780637464fc3d1461053e576101e5565b806323b872dd11610187578063485cc95511610156578063485cc95514610452578063572b6c051461048d578063578bb42d146104c05780635909c0d5146104c8576101e5565b806323b872dd146103e157806330adf81f14610424578063313ce5671461042c5780633644e5151461044a576101e5565b80630902f1ac116101c35780630902f1ac1461030a578063095ea7b3146103495780630dfe16811461039657806318160ddd146103c7576101e5565b8063022c0d9f146101ea57806306fdde03146102855780630838364014610302575b600080fd5b6102836004803603608081101561020057600080fd5b81359160208101359173ffffffffffffffffffffffffffffffffffffffff604083013516919081019060808101606082013564010000000081111561024457600080fd5b82018360208201111561025657600080fd5b8035906020019184600183028401116401000000008311171561027857600080fd5b5090925090506106fa565b005b61028d610ebe565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102c75781810151838201526020016102af565b50505050905090810190601f1680156102f45780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610283610ef7565b610312611081565b604080516dffffffffffffffffffffffffffff948516815292909316602083015263ffffffff168183015290519081900360600190f35b6103826004803603604081101561035f57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001356110d6565b604080519115158252519081900360200190f35b61039e6110f4565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b6103cf611110565b60408051918252519081900360200190f35b610382600480360360608110156103f757600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060400135611116565b6103cf611272565b610434611296565b6040805160ff9092168252519081900360200190f35b6103cf61129b565b6102836004803603604081101561046857600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160200135166112a1565b610382600480360360208110156104a357600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1661137a565b6102836113c9565b6103cf61156b565b6103cf611571565b6103cf600480360360208110156104ee57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611577565b6103cf6004803603602081101561052157600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611b9b565b6103cf611bad565b6103cf6004803603602081101561055c57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611bb3565b6105ac6004803603602081101561058f57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611bc5565b6040805192835260208301919091528051918290030190f35b61028d61206f565b6103826120a8565b610382600480360360408110156105eb57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001356120c9565b6103cf6120dd565b6102836004803603602081101561062c57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166120e3565b61039e6122d0565b61039e6122ec565b610283600480360360e081101561066f57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c00135612308565b6103cf600480360360408110156106cd57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160200135166125d4565b6102836125f1565b600d5460011461076b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f536f6c61724265616d3a204c4f434b4544000000000000000000000000000000604482015290519081900360640190fd5b6000600d558415158061077e5750600084115b6107d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806133826025913960400191505060405180910390fd5b6107db613324565b6040518060e0016040528060006dffffffffffffffffffffffffffff16815260200160006dffffffffffffffffffffffffffff168152602001600081526020016000815260200160008152602001600081526020016000815250905061083f611081565b506dffffffffffffffffffffffffffff9081166020840152168082528610801561087c575080602001516dffffffffffffffffffffffffffff1685105b6108d1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061343c6021913960400191505060405180910390fd5b601960c082015260075460085473ffffffffffffffffffffffffffffffffffffffff91821691908116908616821480159061093857508073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614155b6109a357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f536f6c61724265616d3a20494e56414c49445f544f0000000000000000000000604482015290519081900360640190fd5b87156109b4576109b482878a6127d7565b86156109c5576109c58187896127d7565b8315610a98578573ffffffffffffffffffffffffffffffffffffffff166310d1e85c6109ef6129e4565b8a8a89896040518663ffffffff1660e01b8152600401808673ffffffffffffffffffffffffffffffffffffffff168152602001858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f8201169050808301925050509650505050505050600060405180830381600087803b158015610a7f57600080fd5b505af1158015610a93573d6000803e3d6000fd5b505050505b604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905173ffffffffffffffffffffffffffffffffffffffff8416916370a08231916024808301926020929190829003018186803b158015610b0457600080fd5b505afa158015610b18573d6000803e3d6000fd5b505050506040513d6020811015610b2e57600080fd5b505160408085019190915280517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905173ffffffffffffffffffffffffffffffffffffffff8316916370a08231916024808301926020929190829003018186803b158015610ba357600080fd5b505afa158015610bb7573d6000803e3d6000fd5b505050506040513d6020811015610bcd57600080fd5b505160608401525050805160408201516dffffffffffffffffffffffffffff90911687900310610bfe576000610c1c565b8581600001516dffffffffffffffffffffffffffff16038160400151035b8160800181815250508481602001516dffffffffffffffffffffffffffff1603816060015111610c4d576000610c6b565b8481602001516dffffffffffffffffffffffffffff16038160600151035b60a08201526080810151151580610c86575060008160a00151115b610cdb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806134186024913960400191505060405180910390fd5b6000610d12610cfb8360c001518460800151612a2790919063ffffffff16565b6040840151610d0c90612710612a27565b90612aad565b90506000610d45610d348460c001518560a00151612a2790919063ffffffff16565b6060850151610d0c90612710612a27565b9050610d906305f5e100610d8a85602001516dffffffffffffffffffffffffffff1686600001516dffffffffffffffffffffffffffff16612a2790919063ffffffff16565b90612a27565b610d9a8383612a27565b1015610e0757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f536f6c61724265616d3a204b0000000000000000000000000000000000000000604482015290519081900360640190fd5b5050610e258160400151826060015183600001518460200151612b1f565b8373ffffffffffffffffffffffffffffffffffffffff16610e446129e4565b73ffffffffffffffffffffffffffffffffffffffff167fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d82283608001518460a001518a8a6040518085815260200184815260200183815260200182815260200194505050505060405180910390a350506001600d5550505050565b6040518060400160405280601281526020017f536f6c61724265616d204c5020546f6b656e000000000000000000000000000081525081565b60065473ffffffffffffffffffffffffffffffffffffffff16610f186129e4565b73ffffffffffffffffffffffffffffffffffffffff1614610f9a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f536f6c61724265616d3a20464f5242494444454e000000000000000000000000604482015290519081900360640190fd5b60055474010000000000000000000000000000000000000000900460ff1661100d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806133cb6025913960400191505060405180910390fd5b600580547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16905561103d6129e4565b73ffffffffffffffffffffffffffffffffffffffff167f096be170ccc67847e55535e7d8334b2afedd95805baedc160005addb9144745060405160405180910390a2565b6009546dffffffffffffffffffffffffffff808216926e0100000000000000000000000000008304909116917c0100000000000000000000000000000000000000000000000000000000900463ffffffff1690565b60006110ea6110e36129e4565b8484612dd5565b5060015b92915050565b60075473ffffffffffffffffffffffffffffffffffffffff1681565b60005481565b73ffffffffffffffffffffffffffffffffffffffff831660009081526002602052604081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90826111666129e4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541461125d5773ffffffffffffffffffffffffffffffffffffffff84166000908152600260205260408120611207918491906111da6129e4565b73ffffffffffffffffffffffffffffffffffffffff16815260208101919091526040016000205490612aad565b73ffffffffffffffffffffffffffffffffffffffff85166000908152600260205260408120906112356129e4565b73ffffffffffffffffffffffffffffffffffffffff1681526020810191909152604001600020555b611268848484612e44565b5060019392505050565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b601281565b60035481565b60065473ffffffffffffffffffffffffffffffffffffffff16331461132757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f536f6c61724265616d3a20464f5242494444454e000000000000000000000000604482015290519081900360640190fd5b6007805473ffffffffffffffffffffffffffffffffffffffff9384167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161790915560088054929093169116179055565b60055460009074010000000000000000000000000000000000000000900460ff1680156113c1575060055473ffffffffffffffffffffffffffffffffffffffff8381169116145b90505b919050565b60065473ffffffffffffffffffffffffffffffffffffffff166113ea6129e4565b73ffffffffffffffffffffffffffffffffffffffff161461146c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f536f6c61724265616d3a20464f5242494444454e000000000000000000000000604482015290519081900360640190fd5b60055474010000000000000000000000000000000000000000900460ff16156114e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806133a76024913960400191505060405180910390fd5b600580547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001790556115276129e4565b73ffffffffffffffffffffffffffffffffffffffff167f92e4c08d47b71e8dc051232b8e475ec296489a67a4ba5cca88ff20fb6ac499e660405160405180910390a2565b600a5481565b600b5481565b6000600d546001146115ea57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f536f6c61724265616d3a204c4f434b4544000000000000000000000000000000604482015290519081900360640190fd5b6000600d819055806115fa611081565b50600754604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905193955091935060009273ffffffffffffffffffffffffffffffffffffffff909116916370a08231916024808301926020929190829003018186803b15801561167457600080fd5b505afa158015611688573d6000803e3d6000fd5b505050506040513d602081101561169e57600080fd5b5051600854604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905192935060009273ffffffffffffffffffffffffffffffffffffffff909216916370a0823191602480820192602092909190829003018186803b15801561171757600080fd5b505afa15801561172b573d6000803e3d6000fd5b505050506040513d602081101561174157600080fd5b505190506000611761836dffffffffffffffffffffffffffff8716612aad565b9050600061177f836dffffffffffffffffffffffffffff8716612aad565b9050600061178d8787612f19565b60005490915080611a2f57600654604080517f7cd07e47000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691637cd07e47916004808301926020929190829003018186803b15801561180357600080fd5b505afa158015611817573d6000803e3d6000fd5b505050506040513d602081101561182d57600080fd5b5051905073ffffffffffffffffffffffffffffffffffffffff81166118506129e4565b73ffffffffffffffffffffffffffffffffffffffff16141561197f578073ffffffffffffffffffffffffffffffffffffffff166340dc0e376040518163ffffffff1660e01b815260040160206040518083038186803b1580156118b257600080fd5b505afa1580156118c6573d6000803e3d6000fd5b505050506040513d60208110156118dc57600080fd5b50519950891580159061190f57507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8a14155b61197a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4261642064657369726564206c69717569646974790000000000000000000000604482015290519081900360640190fd5b611a29565b73ffffffffffffffffffffffffffffffffffffffff811615611a0257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d757374206e6f742068617665206d69677261746f7200000000000000000000604482015290519081900360640190fd5b611a1a6103e8610d0c611a158888612a27565b613087565b9950611a2960006103e86130d8565b50611a80565b611a7d6dffffffffffffffffffffffffffff8916611a4d8684612a27565b81611a5457fe5b046dffffffffffffffffffffffffffff8916611a708685612a27565b81611a7757fe5b0461317c565b98505b60008911611ad9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602881526020018061345d6028913960400191505060405180910390fd5b611ae38a8a6130d8565b611aef86868a8a612b1f565b8115611b2b57600954611b27906dffffffffffffffffffffffffffff808216916e010000000000000000000000000000900416612a27565b600c555b611b336129e4565b73ffffffffffffffffffffffffffffffffffffffff167f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f8585604051808381526020018281526020019250505060405180910390a250506001600d5550949695505050505050565b60016020526000908152604090205481565b600c5481565b60046020526000908152604090205481565b600080600d54600114611c3957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f536f6c61724265616d3a204c4f434b4544000000000000000000000000000000604482015290519081900360640190fd5b6000600d81905580611c49611081565b50600754600854604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905194965092945073ffffffffffffffffffffffffffffffffffffffff9182169391169160009184916370a08231916024808301926020929190829003018186803b158015611ccb57600080fd5b505afa158015611cdf573d6000803e3d6000fd5b505050506040513d6020811015611cf557600080fd5b5051604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905191925060009173ffffffffffffffffffffffffffffffffffffffff8516916370a08231916024808301926020929190829003018186803b158015611d6957600080fd5b505afa158015611d7d573d6000803e3d6000fd5b505050506040513d6020811015611d9357600080fd5b505130600090815260016020526040812054919250611db28888612f19565b60005490915080611dc38487612a27565b81611dca57fe5b049a5080611dd88486612a27565b81611ddf57fe5b04995060008b118015611df2575060008a115b611e47576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001806133f06028913960400191505060405180910390fd5b611e513084613194565b611e5c878d8d6127d7565b611e67868d8c6127d7565b604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905173ffffffffffffffffffffffffffffffffffffffff8916916370a08231916024808301926020929190829003018186803b158015611ed357600080fd5b505afa158015611ee7573d6000803e3d6000fd5b505050506040513d6020811015611efd57600080fd5b5051604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905191965073ffffffffffffffffffffffffffffffffffffffff8816916370a0823191602480820192602092909190829003018186803b158015611f6f57600080fd5b505afa158015611f83573d6000803e3d6000fd5b505050506040513d6020811015611f9957600080fd5b50519350611fa985858b8b612b1f565b8115611fe557600954611fe1906dffffffffffffffffffffffffffff808216916e010000000000000000000000000000900416612a27565b600c555b8b73ffffffffffffffffffffffffffffffffffffffff166120046129e4565b73ffffffffffffffffffffffffffffffffffffffff167fdccd412f0b1252819cb1fd330b93224ca42612892bb3f4f789976e6d819364968d8d604051808381526020018281526020019250505060405180910390a35050505050505050506001600d81905550915091565b6040518060400160405280600381526020017f534c50000000000000000000000000000000000000000000000000000000000081525081565b60055474010000000000000000000000000000000000000000900460ff1681565b60006110ea6120d66129e4565b8484612e44565b6103e881565b600d5460011461215457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f536f6c61724265616d3a204c4f434b4544000000000000000000000000000000604482015290519081900360640190fd5b6000600d55600754600854600954604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905173ffffffffffffffffffffffffffffffffffffffff948516949093169261222a9285928792612225926dffffffffffffffffffffffffffff169185916370a0823191602480820192602092909190829003018186803b1580156121f357600080fd5b505afa158015612207573d6000803e3d6000fd5b505050506040513d602081101561221d57600080fd5b505190612aad565b6127d7565b6122c681846122256009600e9054906101000a90046dffffffffffffffffffffffffffff166dffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156121f357600080fd5b50506001600d5550565b60065473ffffffffffffffffffffffffffffffffffffffff1681565b60085473ffffffffffffffffffffffffffffffffffffffff1681565b4284101561237757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f536f6c61724265616d3a20455850495245440000000000000000000000000000604482015290519081900360640190fd5b60035473ffffffffffffffffffffffffffffffffffffffff80891660008181526004602090815260408083208054600180820190925582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98186015280840196909652958d166060860152608085018c905260a085019590955260c08085018b90528151808603909101815260e0850182528051908301207f19010000000000000000000000000000000000000000000000000000000000006101008601526101028501969096526101228085019690965280518085039096018652610142840180825286519683019690962095839052610162840180825286905260ff89166101828501526101a284018890526101c28401879052519193926101e2808201937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081019281900390910190855afa1580156124d8573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81161580159061255357508873ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b6125be57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f536f6c61724265616d3a20494e56414c49445f5349474e415455524500000000604482015290519081900360640190fd5b6125c9898989612dd5565b505050505050505050565b600260209081526000928352604080842090915290825290205481565b600d5460011461266257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f536f6c61724265616d3a204c4f434b4544000000000000000000000000000000604482015290519081900360640190fd5b6000600d55600754604080517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015290516127d09273ffffffffffffffffffffffffffffffffffffffff16916370a08231916024808301926020929190829003018186803b1580156126d957600080fd5b505afa1580156126ed573d6000803e3d6000fd5b505050506040513d602081101561270357600080fd5b5051600854604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905173ffffffffffffffffffffffffffffffffffffffff909216916370a0823191602480820192602092909190829003018186803b15801561277657600080fd5b505afa15801561278a573d6000803e3d6000fd5b505050506040513d60208110156127a057600080fd5b50516009546dffffffffffffffffffffffffffff808216916e010000000000000000000000000000900416612b1f565b6001600d55565b604080518082018252601981527f7472616e7366657228616464726573732c75696e743235362900000000000000602091820152815173ffffffffffffffffffffffffffffffffffffffff85811660248301526044808301869052845180840390910181526064909201845291810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001781529251815160009460609489169392918291908083835b602083106128dd57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016128a0565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811461293f576040519150601f19603f3d011682016040523d82523d6000602084013e612944565b606091505b5091509150818015612972575080511580612972575080806020019051602081101561296f57600080fd5b50515b6129dd57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f536f6c61724265616d3a205452414e534645525f4641494c4544000000000000604482015290519081900360640190fd5b5050505050565b60006129ef3361137a565b15612a2157507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec36013560601c612a24565b50335b90565b6000811580612a4257505080820282828281612a3f57fe5b04145b6110ee57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f64732d6d6174682d6d756c2d6f766572666c6f77000000000000000000000000604482015290519081900360640190fd5b808203828111156110ee57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f64732d6d6174682d7375622d756e646572666c6f770000000000000000000000604482015290519081900360640190fd5b6dffffffffffffffffffffffffffff8411801590612b4b57506dffffffffffffffffffffffffffff8311155b612bb657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f536f6c61724265616d3a204f564552464c4f5700000000000000000000000000604482015290519081900360640190fd5b60095463ffffffff428116917c010000000000000000000000000000000000000000000000000000000090048116820390811615801590612c0657506dffffffffffffffffffffffffffff841615155b8015612c2157506dffffffffffffffffffffffffffff831615155b15612ccb578063ffffffff16612c5e85612c3a8661324d565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1690613271565b600a80547bffffffffffffffffffffffffffffffffffffffffffffffffffffffff929092169290920201905563ffffffff8116612c9e84612c3a8761324d565b600b80547bffffffffffffffffffffffffffffffffffffffffffffffffffffffff92909216929092020190555b600980547fffffffffffffffffffffffffffffffffffff0000000000000000000000000000166dffffffffffffffffffffffffffff888116919091177fffffffff0000000000000000000000000000ffffffffffffffffffffffffffff166e0100000000000000000000000000008883168102919091177bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167c010000000000000000000000000000000000000000000000000000000063ffffffff871602179283905560408051848416815291909304909116602082015281517f1c411e9a96e071241c2f21f7726b17ae89e3cab4c78be50e062b03a9fffbbad1929181900390910190a1505050505050565b73ffffffffffffffffffffffffffffffffffffffff808416600081815260026020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260016020526040902054612e749082612aad565b73ffffffffffffffffffffffffffffffffffffffff8085166000908152600160205260408082209390935590841681522054612eb090826132b2565b73ffffffffffffffffffffffffffffffffffffffff80841660008181526001602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b600080600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663017e7e586040518163ffffffff1660e01b815260040160206040518083038186803b158015612f8457600080fd5b505afa158015612f98573d6000803e3d6000fd5b505050506040513d6020811015612fae57600080fd5b5051600c5473ffffffffffffffffffffffffffffffffffffffff821615801594509192509061307357801561306e576000612fff611a156dffffffffffffffffffffffffffff888116908816612a27565b9050600061300c83613087565b90508082111561306b57600061302e6130258484612aad565b60005490612a27565b9050600061304783613041866005612a27565b906132b2565b9050600081838161305457fe5b04905080156130675761306787826130d8565b5050505b50505b61307f565b801561307f576000600c555b505092915050565b600060038211156130ca575080600160028204015b818110156130c4578091506002818285816130b357fe5b0401816130bc57fe5b04905061309c565b506113c4565b81156113c457506001919050565b6000546130e590826132b2565b600090815573ffffffffffffffffffffffffffffffffffffffff831681526001602052604090205461311790826132b2565b73ffffffffffffffffffffffffffffffffffffffff831660008181526001602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b600081831061318b578161318d565b825b9392505050565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600160205260409020546131c49082612aad565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260016020526040812091909155546131f89082612aad565b600090815560408051838152905173ffffffffffffffffffffffffffffffffffffffff8516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef919081900360200190a35050565b6dffffffffffffffffffffffffffff166e0100000000000000000000000000000290565b60006dffffffffffffffffffffffffffff82167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8416816132aa57fe5b049392505050565b808201828110156110ee57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f64732d6d6174682d6164642d6f766572666c6f77000000000000000000000000604482015290519081900360640190fd5b6040518060e0016040528060006dffffffffffffffffffffffffffff16815260200160006dffffffffffffffffffffffffffff1681526020016000815260200160008152602001600081526020016000815260200160008152509056fe536f6c61724265616d3a20494e53554646494349454e545f4f55545055545f414d4f554e54536f6c61724265616d3a204d4554415f54584e535f414c52454144595f454e41424c4544536f6c61724265616d3a204d4554415f54584e535f414c52454144595f44495341424c4544536f6c61724265616d3a20494e53554646494349454e545f4c49515549444954595f4255524e4544536f6c61724265616d3a20494e53554646494349454e545f494e5055545f414d4f554e54536f6c61724265616d3a20494e53554646494349454e545f4c4951554944495459536f6c61724265616d3a20494e53554646494349454e545f4c49515549444954595f4d494e544544a26469706673582212205633bf08894a1555127933b66a917832a7a574d5267493968d4fc119070f54e764736f6c634300060c0033

Deployed ByteCode Sourcemap

8388:11125:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16210:2135;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16210:2135:0;;-1:-1:-1;16210:2135:0;-1:-1:-1;16210:2135:0;:::i;:::-;;806:50;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18963:271;;;:::i;9599:231::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3929:149;;;;;;;;;;;;;;;;-1:-1:-1;3929:149:0;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;8678:21;;;:::i;:::-;;;;;;;;;;;;;;;;;;;949:24;;;:::i;:::-;;;;;;;;;;;;;;;;4235:307;;;;;;;;;;;;;;;;-1:-1:-1;4235:307:0;;;;;;;;;;;;;;;;;;:::i;1241:108::-;;;:::i;907:35::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1098:31;;;:::i;10659:210::-;;;;;;;;;;;;;;;;-1:-1:-1;10659:210:0;;;;;;;;;;;:::i;2314:149::-;;;;;;;;;;;;;;;;-1:-1:-1;2314:149:0;;;;:::i;19242:268::-;;;:::i;9029:32::-;;;:::i;9068:::-;;;:::i;12849:1649::-;;;;;;;;;;;;;;;;-1:-1:-1;12849:1649:0;;;;:::i;980:41::-;;;;;;;;;;;;;;;;-1:-1:-1;980:41:0;;;;:::i;9107:17::-;;;:::i;1356:38::-;;;;;;;;;;;;;;;;-1:-1:-1;1356:38:0;;;;:::i;14610:1488::-;;;;;;;;;;;;;;;;-1:-1:-1;14610:1488:0;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;863:37;;;:::i;1539:35::-;;;:::i;4086:141::-;;;;;;;;;;;;;;;;-1:-1:-1;4086:141:0;;;;;;;;;:::i;8499:46::-;;;:::i;18394:344::-;;;;;;;;;;;;;;;;-1:-1:-1;18394:344:0;;;;:::i;8649:22::-;;;:::i;8706:21::-;;;:::i;4550:674::-;;;;;;;;;;;;;;;;-1:-1:-1;4550:674:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;1028:61::-;;;;;;;;;;;;;;;;-1:-1:-1;1028:61:0;;;;;;;;;;;:::i;18787:168::-;;;:::i;16210:2135::-;9490:8;;9502:1;9490:13;9482:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9547:1;9536:8;:12;16324:14;;;;:32:::1;;;16355:1;16342:10;:14;16324:32;16316:82;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16409:25;;:::i;:::-;16437:34;;;;;;;;16451:1;16437:34;;;;;;16454:1;16437:34;;;;;;16457:1;16437:34;;;;16460:1;16437:34;;;;16463:1;16437:34;;;;16466:1;16437:34;;;;16469:1;16437:34;;::::0;16409:62:::1;;16518:13;:11;:13::i;:::-;-1:-1:-1::0;16482:49:0::1;::::0;;::::1;16499:14;::::0;::::1;16482:49:::0;::::1;::::0;;;16565:27;::::1;:58:::0;::::1;;;;16609:4;:14;;;16596:27;;:10;:27;16565:58;16557:104;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16685:2;16674:8;::::0;::::1;:13:::0;16788:6:::1;::::0;16827::::1;::::0;16788::::1;::::0;;::::1;::::0;16827;;::::1;::::0;16856:13;::::1;::::0;::::1;::::0;::::1;::::0;:30:::1;;;16879:7;16873:13;;:2;:13;;;;16856:30;16848:64;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;16931:14:::0;;16927:58:::1;;16947:38;16961:7;16970:2;16974:10;16947:13;:38::i;:::-;17038:14:::0;;17034:58:::1;;17054:38;17068:7;17077:2;17081:10;17054:13;:38::i;:::-;17145:15:::0;;17141:95:::1;;17175:2;17162:30;;;17193:12;:10;:12::i;:::-;17207:10;17219;17231:4;;17162:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;17141:95;17267:45;::::0;;;;;17306:4:::1;17267:45;::::0;::::1;::::0;;;:30:::1;::::0;::::1;::::0;::::1;::::0;:45;;;;;::::1;::::0;;;;;;;;:30;:45;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;17267:45:0;17251:13:::1;::::0;;::::1;:61:::0;;;;17343:45;;;;;17382:4:::1;17343:45;::::0;::::1;::::0;;;:30:::1;::::0;::::1;::::0;::::1;::::0;:45;;;;;17267::::1;::::0;17343;;;;;;;:30;:45;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;17343:45:0;17327:13:::1;::::0;::::1;:61:::0;-1:-1:-1;;17443:14:0;;17427:13:::1;::::0;::::1;::::0;17443:27:::1;::::0;;::::1;::::0;;::::1;-1:-1:-1::0;17427:95:0::1;;17521:1;17427:95;;;17507:10;17490:4;:14;;;:27;;;17473:4;:13;;;:45;17427:95;17410:4;:14;;:112;;;::::0;::::1;17583:10;17566:4;:14;;;:27;;;17550:4;:13;;;:43;:95;;17644:1;17550:95;;;17630:10;17613:4;:14;;;:27;;;17596:4;:13;;;:45;17550:95;17533:14;::::0;::::1;:112:::0;17664:14:::1;::::0;::::1;::::0;:18;;;:40:::1;;;17703:1;17686:4;:14;;;:18;17664:40;17656:89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17835:21;17859:58;17888:28;17907:4;:8;;;17888:4;:14;;;:18;;:28;;;;:::i;:::-;17859:13;::::0;::::1;::::0;:24:::1;::::0;17877:5:::1;17859:17;:24::i;:::-;:28:::0;::::1;:58::i;:::-;17835:82;;17932:21;17956:58;17985:28;18004:4;:8;;;17985:4;:14;;;:18;;:28;;;;:::i;:::-;17956:13;::::0;::::1;::::0;:24:::1;::::0;17974:5:::1;17956:17;:24::i;:58::-;17932:82;;18079:54;18124:8;18079:40;18104:4;:14;;;18079:40;;18084:4;:14;;;18079:20;;:24;;:40;;;;:::i;:::-;:44:::0;::::1;:54::i;:::-;18037:38;:16:::0;18058;18037:20:::1;:38::i;:::-;:96;;18029:121;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;9559:1;;18174:69;18182:4;:13;;;18197:4;:13;;;18212:4;:14;;;18228:4;:14;;;18174:7;:69::i;:::-;18334:2;18259:78;;18264:12;:10;:12::i;:::-;18259:78;;;18278:4;:14;;;18294:4;:14;;;18310:10;18322;18259:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;9582:1:0;9571:8;:12;-1:-1:-1;;;;16210:2135:0:o;806:50::-;;;;;;;;;;;;;;;;;;;:::o;18963:271::-;19034:7;;;;19018:12;:10;:12::i;:::-;:23;;;19010:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19085:15;;;;;;;19077:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19155:15;:23;;;;;;19213:12;:10;:12::i;:::-;19196:30;;;;;;;;;;;;18963:271::o;9599:231::-;9732:8;;;;;;;9763;;;;;;;9804:18;;;;;;9599:231::o;3929:149::-;3993:4;4010:38;4019:12;:10;:12::i;:::-;4033:7;4042:5;4010:8;:38::i;:::-;-1:-1:-1;4066:4:0;3929:149;;;;;:::o;8678:21::-;;;;;;:::o;949:24::-;;;;:::o;4235:307::-;4334:15;;;4313:4;4334:15;;;:9;:15;;;;;4372:2;;4313:4;4350:12;:10;:12::i;:::-;4334:29;;;;;;;;;;;;;;;;:41;4330:146;;4424:15;;;;;;;:9;:15;;;;;:40;;4458:5;;4424:15;4440:12;:10;:12::i;:::-;4424:29;;;;;;;;;;;;;-1:-1:-1;4424:29:0;;;:33;:40::i;:::-;4392:15;;;;;;;:9;:15;;;;;;4408:12;:10;:12::i;:::-;4392:29;;;;;;;;;;;;;-1:-1:-1;4392:29:0;:72;4330:146;4486:26;4496:4;4502:2;4506:5;4486:9;:26::i;:::-;-1:-1:-1;4530:4:0;4235:307;;;;;:::o;1241:108::-;1283:66;1241:108;:::o;907:35::-;940:2;907:35;:::o;1098:31::-;;;;:::o;10659:210::-;10755:7;;;;10741:10;:21;10733:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10818:6;:16;;;;;;;;;;;;;;10845:6;:16;;;;;;;;;;;10659:210::o;2314:149::-;2406:15;;2382:4;;2406:15;;;;;:49;;;;-1:-1:-1;2438:17:0;;;2425:30;;;2438:17;;2425:30;2406:49;2399:56;;2314:149;;;;:::o;19242:268::-;19312:7;;;;19296:12;:10;:12::i;:::-;:23;;;19288:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19364:15;;;;;;;19363:16;19355:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19433:15;:22;;;;;;;;19489:12;:10;:12::i;:::-;19473:29;;;;;;;;;;;;19242:268::o;9029:32::-;;;;:::o;9068:::-;;;;:::o;12849:1649::-;12898:14;9490:8;;9502:1;9490:13;9482:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9547:1;9536:8;:12;;;9547:1;12967:13:::1;:11;:13::i;:::-;-1:-1:-1::0;13034:6:0::1;::::0;13022:44:::1;::::0;;;;;13060:4:::1;13022:44;::::0;::::1;::::0;;;12925:55;;-1:-1:-1;12925:55:0;;-1:-1:-1;13006:13:0::1;::::0;13034:6:::1;::::0;;::::1;::::0;13022:29:::1;::::0;:44;;;;;::::1;::::0;;;;;;;;13034:6;13022:44;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;13022:44:0;13105:6:::1;::::0;13093:44:::1;::::0;;;;;13131:4:::1;13093:44;::::0;::::1;::::0;;;13022;;-1:-1:-1;13077:13:0::1;::::0;13105:6:::1;::::0;;::::1;::::0;13093:29:::1;::::0;:44;;;;;13022::::1;::::0;13093;;;;;;;;13105:6;13093:44;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;13093:44:0;;-1:-1:-1;13148:12:0::1;13163:23;:8:::0;:23:::1;::::0;::::1;:12;:23::i;:::-;13148:38:::0;-1:-1:-1;13197:12:0::1;13212:23;:8:::0;:23:::1;::::0;::::1;:12;:23::i;:::-;13197:38;;13248:10;13261:30;13270:9;13281;13261:8;:30::i;:::-;13302:17;13322:11:::0;13248:43;;-1:-1:-1;13426:17:0;13422:749:::1;;13493:7;::::0;13479:33:::1;::::0;;;;;;;13460:16:::1;::::0;13493:7:::1;;::::0;13479:31:::1;::::0;:33:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;13493:7;13479:33;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;13479:33:0;;-1:-1:-1;13531:24:0::1;::::0;::::1;:12;:10;:12::i;:::-;:24;;;13527:502;;;13598:8;13588:36;;;:38;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;13588:38:0;;-1:-1:-1;13653:13:0;;;;;:41:::1;;;13691:2;13670:9;:24;;13653:41;13645:75;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;13527:502;;;13769:22;::::0;::::1;::::0;13761:57:::1;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;13849:54;8540:5;13849:31;13859:20;:7:::0;13871;13859:11:::1;:20::i;:::-;13849:9;:31::i;:54::-;13837:66;;13922:36;13936:1;8540:5;13922;:36::i;:::-;13422:749;;;;14073:86;14082:37;::::0;::::1;:25;:7:::0;14094:12;14082:11:::1;:25::i;:::-;:37;;;;;;14121;::::0;::::1;:25;:7:::0;14133:12;14121:11:::1;:25::i;:::-;:37;;;;;;14073:8;:86::i;:::-;14061:98;;13422:749;14201:1;14189:9;:13;14181:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14258:20;14264:2;14268:9;14258:5;:20::i;:::-;14291:49;14299:8;14309;14319:9;14330;14291:7;:49::i;:::-;14355:5;14351:47;;;14389:8;::::0;14370:28:::1;::::0;14389:8:::1;14375::::0;;::::1;::::0;14389;;::::1;;14370:18;:28::i;:::-;14362:5;:36:::0;14351:47:::1;14459:12;:10;:12::i;:::-;14454:36;;;14473:7;14482;14454:36;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;9582:1:0;9571:8;:12;-1:-1:-1;12849:1649:0;;;-1:-1:-1;;;;;;12849:1649:0:o;980:41::-;;;;;;;;;;;;;:::o;9107:17::-;;;;:::o;1356:38::-;;;;;;;;;;;;;:::o;14610:1488::-;14659:12;14673;9490:8;;9502:1;9490:13;9482:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9547:1;9536:8;:12;;;9547:1;14740:13:::1;:11;:13::i;:::-;-1:-1:-1::0;14797:6:0::1;::::0;14878::::1;::::0;14957:45:::1;::::0;;;;;14996:4:::1;14957:45;::::0;::::1;::::0;;;14698:55;;-1:-1:-1;14698:55:0;;-1:-1:-1;14797:6:0::1;::::0;;::::1;::::0;14878;::::1;::::0;14779:15:::1;::::0;14797:6;;14957:30:::1;::::0;:45;;;;;::::1;::::0;;;;;;;;14797:6;14957:45;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;14957:45:0;15029::::1;::::0;;;;;15068:4:::1;15029:45;::::0;::::1;::::0;;;14957;;-1:-1:-1;15013:13:0::1;::::0;15029:30:::1;::::0;::::1;::::0;::::1;::::0;:45;;;;;14957::::1;::::0;15029;;;;;;;:30;:45;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;15029:45:0;15120:4:::1;15085:14;15102:24:::0;;;:9:::1;15029:45;15102:24:::0;;;;;15029:45;;-1:-1:-1;15152:30:0::1;15161:9:::0;15172;15152:8:::1;:30::i;:::-;15193:17;15213:11:::0;15139:43;;-1:-1:-1;15213:11:0;15323:23:::1;:9:::0;15337:8;15323:13:::1;:23::i;:::-;:38;;;;;;::::0;-1:-1:-1;15456:12:0;15430:23:::1;:9:::0;15444:8;15430:13:::1;:23::i;:::-;:38;;;;;;15420:48;;15545:1;15535:7;:11;:26;;;;;15560:1;15550:7;:11;15535:26;15527:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15617:31;15631:4;15638:9;15617:5;:31::i;:::-;15659:35;15673:7;15682:2;15686:7;15659:13;:35::i;:::-;15705;15719:7;15728:2;15732:7;15705:13;:35::i;:::-;15762:45;::::0;;;;;15801:4:::1;15762:45;::::0;::::1;::::0;;;:30:::1;::::0;::::1;::::0;::::1;::::0;:45;;;;;::::1;::::0;;;;;;;;:30;:45;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;15762:45:0;15829::::1;::::0;;;;;15868:4:::1;15829:45;::::0;::::1;::::0;;;15762;;-1:-1:-1;15829:30:0::1;::::0;::::1;::::0;::::1;::::0;:45;;;;;15762::::1;::::0;15829;;;;;;;;:30;:45;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;15829:45:0;;-1:-1:-1;15887:49:0::1;15895:8:::0;15829:45;15915:9;15926;15887:7:::1;:49::i;:::-;15951:5;15947:47;;;15985:8;::::0;15966:28:::1;::::0;15985:8:::1;15971::::0;;::::1;::::0;15985;;::::1;;15966:18;:28::i;:::-;15958:5;:36:::0;15947:47:::1;16087:2;16050:40;;16055:12;:10;:12::i;:::-;16050:40;;;16069:7;16078;16050:40;;;;;;;;;;;;;;;;;;;;;;;;9559:1;;;;;;;;;9582::::0;9571:8;:12;;;;14610:1488;;;:::o;863:37::-;;;;;;;;;;;;;;;;;;;:::o;1539:35::-;;;;;;;;;:::o;4086:141::-;4146:4;4163:34;4173:12;:10;:12::i;:::-;4187:2;4191:5;4163:9;:34::i;8499:46::-;8540:5;8499:46;:::o;18394:344::-;9490:8;;9502:1;9490:13;9482:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9547:1;9536:8;:12;18463:6:::1;::::0;18513::::1;::::0;18622:8:::1;::::0;18572:45:::1;::::0;;;;;18611:4:::1;18572:45;::::0;::::1;::::0;;;18463:6:::1;::::0;;::::1;::::0;18513;;::::1;::::0;18545:87:::1;::::0;18463:6;;18568:2;;18572:59:::1;::::0;18622:8:::1;;::::0;18463:6;;18572:30:::1;::::0;:45;;;;;::::1;::::0;;;;;;;;;18463:6;18572:45;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;18572:45:0;;:49:::1;:59::i;:::-;18545:13;:87::i;:::-;18643;18657:7;18666:2;18670:59;18720:8;;;;;;;;;;;18670:59;;18682:7;18670:30;;;18709:4;18670:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;18643:87;-1:-1:-1::0;;9582:1:0;9571:8;:12;-1:-1:-1;18394:344:0:o;8649:22::-;;;;;;:::o;8706:21::-;;;;;;:::o;4550:674::-;4696:15;4684:8;:27;;4676:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4850:16;;4946:13;;;;4745:14;4946:13;;;:6;:13;;;;;;;;:15;;;;;;;;;4895:77;;1283:66;4895:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4885:88;;;;;;4786:202;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4762:237;;;;;;;;;5037:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4745:14;;4946:15;5037:26;;;;;-1:-1:-1;5037:26:0;;;;;;;;;;4946:15;5037:26;;;;;;;;;;;;;;;-1:-1:-1;;5037:26:0;;;;;;-1:-1:-1;;5082:30:0;;;;;;;:59;;;5136:5;5116:25;;:16;:25;;;5082:59;5074:100;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5185:31;5194:5;5201:7;5210:5;5185:8;:31::i;:::-;4550:674;;;;;;;;;:::o;1028:61::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;18787:168::-;9490:8;;9502:1;9490:13;9482:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9547:1;9536:8;:12;18848:6:::1;::::0;18836:44:::1;::::0;;;;;18874:4:::1;18836:44;::::0;::::1;::::0;;;18828:119:::1;::::0;18848:6:::1;;::::0;18836:29:::1;::::0;:44;;;;;::::1;::::0;;;;;;;;18848:6;18836:44;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;18836:44:0;18894:6:::1;::::0;18882:44:::1;::::0;;;;;18920:4:::1;18882:44;::::0;::::1;::::0;;;18894:6:::1;::::0;;::::1;::::0;18882:29:::1;::::0;:44;;;;;18836::::1;::::0;18882;;;;;;;;18894:6;18882:44;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;18882:44:0;18928:8:::1;::::0;::::1;::::0;;::::1;::::0;18938;;::::1;;18828:7;:119::i;:::-;9582:1:::0;9571:8;:12;18787:168::o;9838:287::-;8604:34;;;;;;;;;;;;;;;;;9966:43;;9955:10;9966:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9955:55;;;;9920:12;;9934:17;;9955:10;;;9966:43;9955:55;;;9966:43;9955:55;;9966:43;9955:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9919:91;;;;10029:7;:57;;;;-1:-1:-1;10041:11:0;;:16;;:44;;;10072:4;10061:24;;;;;;;;;;;;;;;-1:-1:-1;10061:24:0;10041:44;10021:96;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9838:287;;;;;:::o;2471:385::-;2516:14;2547:30;2566:10;2547:18;:30::i;:::-;2543:306;;;-1:-1:-1;2748:23:0;2752:14;2748:23;2735:37;2731:2;2727:46;2698:90;;;-1:-1:-1;2827:10:0;2543:306;2471:385;:::o;593:142::-;645:6;672;;;:30;;-1:-1:-1;;687:5:0;;;701:1;696;687:5;696:1;682:15;;;;;:20;672:30;664:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;456:129;540:5;;;535:16;;;;527:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10954:860;11066:23;;;;;;:50;;-1:-1:-1;11093:23:0;;;;11066:50;11058:82;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11255:18;;11182:23;:15;:23;;;11255:18;;;;;11238:35;;;11311:15;;;;;;:33;;-1:-1:-1;11330:14:0;;;;;11311:33;:51;;;;-1:-1:-1;11348:14:0;;;;;11311:51;11307:336;;;11517:11;11464:64;;11469:44;11503:9;11469:27;11486:9;11469:16;:27::i;:::-;:33;;;;:44::i;:::-;11440:20;:88;;11464:50;;;;;:64;;;;11440:88;;;11567:64;;;11572:44;11606:9;11572:27;11589:9;11572:16;:27::i;:44::-;11543:20;:88;;11567:50;;;;;:64;;;;11543:88;;;11307:336;11653:8;:28;;;;;;;;;;;;11692;;;;;;;;;;;;11731:35;;;;;;;;;;;;11782:24;;;11787:8;;;11782:24;;11797:8;;;;;;;11782:24;;;;;;;;;;;;;;;;;10954:860;;;;;;:::o;3524:169::-;3605:16;;;;;;;;:9;:16;;;;;;;;:25;;;;;;;;;;;;;:33;;;3654:31;;;;;;;;;;;;;;;;;3524:169;;;:::o;3701:220::-;3795:15;;;;;;;:9;:15;;;;;;:26;;3815:5;3795:19;:26::i;:::-;3777:15;;;;;;;;:9;:15;;;;;;:44;;;;3848:13;;;;;;;:24;;3866:5;3848:17;:24::i;:::-;3832:13;;;;;;;;:9;:13;;;;;;;;;:40;;;;3888:25;;;;;;;3832:13;;3888:25;;;;;;;;;;;;;3701:220;;;:::o;11904:833::-;11977:10;12000:13;12030:7;;;;;;;;;;;12016:28;;;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12016:30:0;12109:5;;12065:19;;;;;;;-1:-1:-1;12016:30:0;;-1:-1:-1;12109:5:0;12140:590;;12170:11;;12166:494;;12202:10;12215:41;12225:30;;:15;;;;:30;;:19;:30::i;12215:41::-;12202:54;;12275:14;12292:17;12302:6;12292:9;:17::i;:::-;12275:34;;12340:9;12332:5;:17;12328:317;;;12374:14;12391:37;12407:20;:5;12417:9;12407;:20::i;:::-;12391:11;;;:15;:37::i;:::-;12374:54;-1:-1:-1;12451:16:0;12470:27;12487:9;12470:12;:5;12480:1;12470:9;:12::i;:::-;:16;;:27::i;:::-;12451:46;;12520:14;12549:11;12537:9;:23;;;;;;;-1:-1:-1;12587:13:0;;12583:42;;12602:23;12608:5;12615:9;12602:5;:23::i;:::-;12328:317;;;;12166:494;;;12140:590;;;12681:11;;12677:53;;12717:1;12709:5;:9;12677:53;11904:833;;;;;;:::o;5522:303::-;5567:6;5594:1;5590;:5;5586:232;;;-1:-1:-1;5616:1:0;5649;5645;5641:5;;:9;5665:92;5676:1;5672;:5;5665:92;;;5702:1;5698:5;;5740:1;5735;5731;5727;:5;;;;;;:9;5726:15;;;;;;5722:19;;5665:92;;;5586:232;;;;5778:6;;5774:44;;-1:-1:-1;5805:1:0;5522:303;;;:::o;3098:201::-;3171:11;;:22;;3187:5;3171:15;:22::i;:::-;3157:11;:36;;;3220:13;;;;;:9;:13;;;;;;:24;;3238:5;3220:17;:24::i;:::-;3204:13;;;;;;;:9;:13;;;;;;;;:40;;;;3260:31;;;;;;;3204:13;;;;3260:31;;;;;;;;;;3098:201;;:::o;5308:96::-;5360:6;5387:1;5383;:5;:13;;5395:1;5383:13;;;5391:1;5383:13;5379:17;5308:96;-1:-1:-1;;;5308:96:0:o;3307:209::-;3386:15;;;;;;;:9;:15;;;;;;:26;;3406:5;3386:19;:26::i;:::-;3368:15;;;;;;;:9;:15;;;;;:44;;;;3437:11;:22;;3453:5;3437:15;:22::i;:::-;3423:11;:36;;;3475:33;;;;;;;;;;;;;;;;;;;;;;3307:209;;:::o;6100:120::-;6176:10;;6045:6;6176:17;;6100:120::o;6291:108::-;6351:9;6381:10;;;6377:14;;;6381:10;6377:14;;;;;;6291:108;-1:-1:-1;;;6291:108:0:o;320:128::-;404:5;;;399:16;;;;391:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o

Swarm Source

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