Contract 0xc585346cd04633e44af7fb0c2cef9bc2c6b38a87

 
Txn Hash Method
Block
From
To
Value [Txn Fee]
0x1525be244db7a73476263d0b10a977860d2d84d00c057e36e6a7bd63e52cff3dApprove586383372023-03-29 12:05:2717 hrs 57 mins ago0xc7cc9325262d657e6481cfab81543e430d660c4e IN  0xc585346cd04633e44af7fb0c2cef9bc2c6b38a870 FTM0.000908876714
0x3aae04c0136ebdc4ca989ddf65493cea76ee93bb8ca48a51cd91b2ffdbe0ffc1Approve586383182023-03-29 12:05:0317 hrs 57 mins ago0xc7cc9325262d657e6481cfab81543e430d660c4e IN  0xc585346cd04633e44af7fb0c2cef9bc2c6b38a870 FTM0.001485675004
0xf657d66f9a2bd3dcb7f7492fae8f7e0e23bf9b74307f666925cd34fc64ea1a36Approve575345942023-03-13 21:19:4316 days 8 hrs ago0x21f07c0826454badcf1641b6ed1e774f8dc63477 IN  0xc585346cd04633e44af7fb0c2cef9bc2c6b38a870 FTM0.002851585577
0xb08e4c52a315d744c1191db6c46c284de0288576fad8ab83b6cdb1d35915b8e4Approve575344162023-03-13 21:15:5216 days 8 hrs ago0x21f07c0826454badcf1641b6ed1e774f8dc63477 IN  0xc585346cd04633e44af7fb0c2cef9bc2c6b38a870 FTM0.004192244263
0xc785c014c8d3c95e24eaf690808a1d3eca784fcdedf8ed77b3555c03c857b70bApprove575326772023-03-13 20:42:5916 days 9 hrs ago0x21f07c0826454badcf1641b6ed1e774f8dc63477 IN  0xc585346cd04633e44af7fb0c2cef9bc2c6b38a870 FTM0.002856662233
0xb9c9f1448837099d382c3dd5fe91094d6ad47a50e41db16ee803021e9b9092abApprove573584012023-03-11 2:33:5819 days 3 hrs ago0x73a3f23f7f13de6f7f1e0cbe26bad345f96d000e IN  0xc585346cd04633e44af7fb0c2cef9bc2c6b38a870 FTM0.026930477119
0x1194376d7c5a1d38fd3b0154e5a7829273bb130257a64eaa0c93a5d2ef6d984dApprove571926622023-03-08 16:14:4821 days 13 hrs ago0x885aa2c8f00a2a18f72cc93387ab572b4ff9012d IN  0xc585346cd04633e44af7fb0c2cef9bc2c6b38a870 FTM0.003007332914
0x88ff29404a8d99829ae2e76db512c24e24bd7ddc18c9190944c47cb12381f2ecApprove571926382023-03-08 16:14:1821 days 13 hrs ago0x885aa2c8f00a2a18f72cc93387ab572b4ff9012d IN  0xc585346cd04633e44af7fb0c2cef9bc2c6b38a870 FTM0.001707792659
0x6eec7c45b890b0d2f9d5bc563075527b51ea501afad838cf7b2cd4e9cc55c15bApprove571925092023-03-08 16:11:3621 days 13 hrs ago0x885aa2c8f00a2a18f72cc93387ab572b4ff9012d IN  0xc585346cd04633e44af7fb0c2cef9bc2c6b38a870 FTM0.001700360359
0xae29bb8b9ec5efe1854c32d6871e13a6954221f12e6ecff8babbdeaffa4edce4Approve571924652023-03-08 16:10:4421 days 13 hrs ago0x885aa2c8f00a2a18f72cc93387ab572b4ff9012d IN  0xc585346cd04633e44af7fb0c2cef9bc2c6b38a870 FTM0.003017651529
0x62800ab70e9b1182dced52c98410d2de411ee5918da909bea3aa04d1850ae05aApprove571148132023-03-07 10:34:5922 days 19 hrs ago0xee07d2f96be056bbb822ad1e0564717755d7adc6 IN  0xc585346cd04633e44af7fb0c2cef9bc2c6b38a870 FTM0.001573559296
0xc4ada762f54da6eda4a8d5152b09f847e5dd9eb3866f9590ad4189591829ae66Approve571108822023-03-07 9:10:2522 days 20 hrs ago0xee1ad7f7e23710a9652fb1cf801fb3ba752a9179 IN  0xc585346cd04633e44af7fb0c2cef9bc2c6b38a870 FTM0.001285197164
0x8b0b0218f5e0ac8ddd371f8d966c6e41f9e4d36157901fd0812a5b976d4fd50cApprove570796102023-03-06 19:20:3923 days 10 hrs ago0x548c2ff7a08903a668a5403a3e58f019b4bd7af4 IN  0xc585346cd04633e44af7fb0c2cef9bc2c6b38a870 FTM0.001541735594
0x9c6d773d7621dc0fa063c9f946625e74b700ca1c2bd7ac2864695fff3ca3d3d4Approve570621302023-03-06 14:02:0923 days 16 hrs ago0xc109c45330576048b35686275372e8a84daed552 IN  0xc585346cd04633e44af7fb0c2cef9bc2c6b38a870 FTM0.001212564
0xf2d7a322186e823d69fb318b247d43e39d27ea1bbcc210fc7aa2d07814bf647cApprove570079372023-03-05 17:17:5524 days 12 hrs ago0x2bef58dd90890669b5e7c7c143ecc92eb9b04581 IN  0xc585346cd04633e44af7fb0c2cef9bc2c6b38a870 FTM0.001656594514
0x53f56223bdde03a455bb56699ac46ef3e615fd94a1a8c3d6d9eb16c42d7375deApprove570036412023-03-05 15:08:2724 days 14 hrs ago0x21f07c0826454badcf1641b6ed1e774f8dc63477 IN  0xc585346cd04633e44af7fb0c2cef9bc2c6b38a870 FTM0.001574055169
0xe93d61bf95124949b3b8796182cead52896860d2cbb19c265e1468bfb1abbbd1Approve569354982023-03-04 15:12:0325 days 14 hrs ago0xa8bf3ac4f567384f2f44b4e7c6d11b7664749f35 IN  0xc585346cd04633e44af7fb0c2cef9bc2c6b38a870 FTM0.003831464465
0x56a3e6f3daad0fe28c06fb7c0b55ffebadef04afb2b6343db76ec28bfc66b033Approve568734552023-03-03 17:28:2126 days 12 hrs ago0x1d3cc42befaf666fa4abe9707a8aacf356bb5db1 IN  0xc585346cd04633e44af7fb0c2cef9bc2c6b38a870 FTM0.00291346
0x709a6ca763f25467ccf2e34c656c51c1b87eaf11e27840313ef163db64de1349Approve568729132023-03-03 17:17:3126 days 12 hrs ago0x1d3cc42befaf666fa4abe9707a8aacf356bb5db1 IN  0xc585346cd04633e44af7fb0c2cef9bc2c6b38a870 FTM0.00291346
0xcb2e271d4f2181b570d794a373d661e343a7bb61bed3cfa97b636285192366e4Approve568723962023-03-03 17:04:2826 days 12 hrs ago0x1d3cc42befaf666fa4abe9707a8aacf356bb5db1 IN  0xc585346cd04633e44af7fb0c2cef9bc2c6b38a870 FTM0.00291346
0x6bd52dab67805576b94898689ff68a55688be787e0c702747a1e89625cb5350cApprove568710512023-03-03 16:34:1626 days 13 hrs ago0x1d3cc42befaf666fa4abe9707a8aacf356bb5db1 IN  0xc585346cd04633e44af7fb0c2cef9bc2c6b38a870 FTM0.00510246
0x441c93a2845bd38482ba532ca01b0d75a8c6a55d7d688e9a2ec23a8e74d1cc6fApprove568472272023-03-03 8:09:5426 days 21 hrs ago0x5d1bc9f9749f83a0289881f6782ef1a106a2b345 IN  0xc585346cd04633e44af7fb0c2cef9bc2c6b38a870 FTM0.00510246
0x809e9b99021e2fc6114834e1333fc162320b2d6b35705c8f3d2b3f3e6e0ce432Approve568140512023-03-02 20:17:5727 days 9 hrs ago0xa8bf3ac4f567384f2f44b4e7c6d11b7664749f35 IN  0xc585346cd04633e44af7fb0c2cef9bc2c6b38a870 FTM0.001492219196
0x87eac4683631de36d5b57d3478a8ba71347346553c6d706c1d119280f3f750b5Approve567578162023-03-01 23:39:2828 days 6 hrs ago0xf0dd1699cf40db6c6faf158c4991899f88627b89 IN  0xc585346cd04633e44af7fb0c2cef9bc2c6b38a870 FTM0.001755261115
0xad41d38b02fc446a452049a6a8d9ffca84348cbf8ba7adcebe2b654c433414faApprove566769972023-02-28 15:52:4929 days 14 hrs ago0x348fc03de3ce93b271e0c71ebcdc467596328e28 IN  0xc585346cd04633e44af7fb0c2cef9bc2c6b38a870 FTM0.001732744949
[ Download CSV Export 
Latest 1 internal transaction
Parent Txn Hash Block From To Value
0x8708929d74787d2fad242d734b24affd3b111575758a813b01cfa89374f6e4c8299203472022-02-03 22:22:38419 days 7 hrs ago WigoSwap: Factory  Contract Creation0 FTM
[ Download CSV Export 
Loading

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

Contract Name:
WigoswapPair

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
Yes with 999999 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at FtmScan.com on 2022-02-09
*/

// SPDX-License-Identifier: MIT
pragma solidity 0.6.12;

interface IWigoswapCallee {
    function wigoswapCall(
        address sender,
        uint256 amount0,
        uint256 amount1,
        bytes calldata data
    ) external;
}

interface IERC20 {
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
    event Transfer(address indexed from, address indexed to, uint256 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 (uint256);

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

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

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

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

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

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

library SafeMath {
    function add(uint256 x, uint256 y) internal pure returns (uint256 z) {
        require((z = x + y) >= x, "ds-math-add-overflow");
    }

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

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

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);
    }
}

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

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

contract WigoswapERC20 {
    using SafeMath for uint256;

    string public constant name = "Wigo LPs";
    string public constant symbol = "Wigo-LP";
    uint8 public constant decimals = 18;
    uint256 public totalSupply;
    mapping(address => uint256) public balanceOf;
    mapping(address => mapping(address => uint256)) 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 => uint256) public nonces;

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

    constructor() public {
        uint256 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 _mint(address to, uint256 value) internal {
        totalSupply = totalSupply.add(value);
        balanceOf[to] = balanceOf[to].add(value);
        emit Transfer(address(0), to, value);
    }

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

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

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

    function approve(address spender, uint256 value) external returns (bool) {
        _approve(msg.sender, spender, value);
        return true;
    }

    function transfer(address to, uint256 value) external returns (bool) {
        _transfer(msg.sender, to, value);
        return true;
    }

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

    function permit(
        address owner,
        address spender,
        uint256 value,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external {
        require(deadline >= block.timestamp, "Wigoswap: 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,
            "Wigoswap: INVALID_SIGNATURE"
        );
        _approve(owner, spender, value);
    }
}

contract WigoswapPair is WigoswapERC20 {
    using SafeMath for uint256;
    using UQ112x112 for uint224;

    uint256 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

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

    uint256 private unlocked = 1;
    modifier lock() {
        require(unlocked == 1, "Wigoswap: 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,
        uint256 value
    ) private {
        (bool success, bytes memory data) = token.call(
            abi.encodeWithSelector(SELECTOR, to, value)
        );
        require(
            success && (data.length == 0 || abi.decode(data, (bool))),
            "Wigoswap: TRANSFER_FAILED"
        );
    }

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

    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, "Wigoswap: FORBIDDEN"); // sufficient check
        token0 = _token0;
        token1 = _token1;
    }

    // update reserves and, on the first call per block, price accumulators
    function _update(
        uint256 balance0,
        uint256 balance1,
        uint112 _reserve0,
        uint112 _reserve1
    ) private {
        require(
            balance0 <= uint112(-1) && balance1 <= uint112(-1),
            "Wigoswap: 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 +=
                uint256(UQ112x112.encode(_reserve1).uqdiv(_reserve0)) *
                timeElapsed;
            price1CumulativeLast +=
                uint256(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/19 of the growth in sqrt(k)
    function _mintFee(uint112 _reserve0, uint112 _reserve1)
        private
        returns (bool feeOn)
    {
        address feeTo = IWigoswapFactory(factory).feeTo();
        feeOn = feeTo != address(0);
        uint256 _kLast = kLast; // gas savings
        if (feeOn) {
            if (_kLast != 0) {
                uint256 rootK = Math.sqrt(uint256(_reserve0).mul(_reserve1));
                uint256 rootKLast = Math.sqrt(_kLast);
                if (rootK > rootKLast) {
                    uint256 numerator = totalSupply.mul(rootK.sub(rootKLast));
                    uint256 denominator = rootK.mul(18).add(rootKLast);
                    uint256 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 (uint256 liquidity) {
        (uint112 _reserve0, uint112 _reserve1, ) = getReserves(); // gas savings
        uint256 balance0 = IERC20(token0).balanceOf(address(this));
        uint256 balance1 = IERC20(token1).balanceOf(address(this));
        uint256 amount0 = balance0.sub(_reserve0);
        uint256 amount1 = balance1.sub(_reserve1);

        bool feeOn = _mintFee(_reserve0, _reserve1);
        uint256 _totalSupply = totalSupply; // gas savings, must be defined here since totalSupply can update in _mintFee
        if (_totalSupply == 0) {
            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, "Wigoswap: INSUFFICIENT_LIQUIDITY_MINTED");
        _mint(to, liquidity);

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

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

        bool feeOn = _mintFee(_reserve0, _reserve1);
        uint256 _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,
            "Wigoswap: INSUFFICIENT_LIQUIDITY_BURNED"
        );
        _burn(address(this), liquidity);
        _safeTransfer(_token0, to, amount0);
        _safeTransfer(_token1, to, amount1);
        balance0 = IERC20(_token0).balanceOf(address(this));
        balance1 = IERC20(_token1).balanceOf(address(this));

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

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

        uint256 balance0;
        uint256 balance1;
        {
            // scope for _token{0,1}, avoids stack too deep errors
            address _token0 = token0;
            address _token1 = token1;
            require(to != _token0 && to != _token1, "Wigoswap: 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)
                IWigoswapCallee(to).wigoswapCall(
                    msg.sender,
                    amount0Out,
                    amount1Out,
                    data
                );
            balance0 = IERC20(_token0).balanceOf(address(this));
            balance1 = IERC20(_token1).balanceOf(address(this));
        }
        uint256 amount0In = balance0 > _reserve0 - amount0Out
            ? balance0 - (_reserve0 - amount0Out)
            : 0;
        uint256 amount1In = balance1 > _reserve1 - amount1Out
            ? balance1 - (_reserve1 - amount1Out)
            : 0;
        require(
            amount0In > 0 || amount1In > 0,
            "Wigoswap: INSUFFICIENT_INPUT_AMOUNT"
        );
        {
            // scope for reserve{0,1}Adjusted, avoids stack too deep errors
            uint256 balance0Adjusted = balance0.mul(10000).sub(
                amount0In.mul(19)
            );
            uint256 balance1Adjusted = balance1.mul(10000).sub(
                amount1In.mul(19)
            );
            require(
                balance0Adjusted.mul(balance1Adjusted) >=
                    uint256(_reserve0).mul(_reserve1).mul(10000**2),
                "Wigoswap: K"
            );
        }

        _update(balance0, balance1, _reserve0, _reserve1);
        emit Swap(msg.sender, amount0In, 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,
            IERC20(_token0).balanceOf(address(this)).sub(reserve0)
        );
        _safeTransfer(
            _token1,
            to,
            IERC20(_token1).balanceOf(address(this)).sub(reserve1)
        );
    }

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

Contract Security Audit

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":"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":"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":[],"name":"kLast","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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"}]

60806040526001600c5534801561001557600080fd5b5060408051808201825260088152675769676f204c507360c01b6020918201528151808301835260018152603160f81b9082015281517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818301527f7469c90d2e4594c31e4d0a08bd15c2bef57993dfe37840f3c72adc9d6b54abfc818401527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a0808301919091528351808303909101815260c09091019092528151910120600355600580546001600160a01b03191633179055612b43806101066000396000f3fe608060405234801561001057600080fd5b50600436106101b95760003560e01c80636a627842116100f9578063ba9a7a5611610097578063d21220a711610071578063d21220a7146105da578063d505accf146105e2578063dd62ed3e14610640578063fff6cae91461067b576101b9565b8063ba9a7a5614610597578063bc25cf771461059f578063c45a0155146105d2576101b9565b80637ecebe00116100d35780637ecebe00146104d757806389afcb441461050a57806395d89b4114610556578063a9059cbb1461055e576101b9565b80636a6278421461046957806370a082311461049c5780637464fc3d146104cf576101b9565b806323b872dd116101665780633644e515116101405780633644e51514610416578063485cc9551461041e5780635909c0d5146104595780635a3d549314610461576101b9565b806323b872dd146103ad57806330adf81f146103f0578063313ce567146103f8576101b9565b8063095ea7b311610197578063095ea7b3146103155780630dfe16811461036257806318160ddd14610393576101b9565b8063022c0d9f146101be57806306fdde03146102595780630902f1ac146102d6575b600080fd5b610257600480360360808110156101d457600080fd5b81359160208101359173ffffffffffffffffffffffffffffffffffffffff604083013516919081019060808101606082013564010000000081111561021857600080fd5b82018360208201111561022a57600080fd5b8035906020019184600183028401116401000000008311171561024c57600080fd5b509092509050610683565b005b610261610d2e565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561029b578181015183820152602001610283565b50505050905090810190601f1680156102c85780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102de610d67565b604080516dffffffffffffffffffffffffffff948516815292909316602083015263ffffffff168183015290519081900360600190f35b61034e6004803603604081101561032b57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610dbc565b604080519115158252519081900360200190f35b61036a610dd3565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b61039b610def565b60408051918252519081900360200190f35b61034e600480360360608110156103c357600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060400135610df5565b61039b610ece565b610400610ef2565b6040805160ff9092168252519081900360200190f35b61039b610ef7565b6102576004803603604081101561043457600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020013516610efd565b61039b610fd6565b61039b610fdc565b61039b6004803603602081101561047f57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610fe2565b61039b600480360360208110156104b257600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611378565b61039b61138a565b61039b600480360360208110156104ed57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611390565b61053d6004803603602081101561052057600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166113a2565b6040805192835260208301919091528051918290030190f35b61026161182d565b61034e6004803603604081101561057457600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135611866565b61039b611873565b610257600480360360208110156105b557600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611879565b61036a611a66565b61036a611a82565b610257600480360360e08110156105f857600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c00135611a9e565b61039b6004803603604081101561065657600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020013516611d6a565b610257611d87565b600c546001146106f457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5769676f737761703a204c4f434b454400000000000000000000000000000000604482015290519081900360640190fd5b6000600c55841515806107075750600084115b61075c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180612ac76024913960400191505060405180910390fd5b600080610767610d67565b5091509150816dffffffffffffffffffffffffffff168710801561079a5750806dffffffffffffffffffffffffffff1686105b61080557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f5769676f737761703a20494e53554646494349454e545f4c4951554944495459604482015290519081900360640190fd5b600654600754600091829173ffffffffffffffffffffffffffffffffffffffff91821691908116908916821480159061086a57508073ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff1614155b6108d557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5769676f737761703a20494e56414c49445f544f000000000000000000000000604482015290519081900360640190fd5b8a156108e6576108e6828a8d611f6d565b89156108f7576108f7818a8c611f6d565b86156109c3578873ffffffffffffffffffffffffffffffffffffffff1663d4f9a2ee338d8d8c8c6040518663ffffffff1660e01b8152600401808673ffffffffffffffffffffffffffffffffffffffff168152602001858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f8201169050808301925050509650505050505050600060405180830381600087803b1580156109aa57600080fd5b505af11580156109be573d6000803e3d6000fd5b505050505b604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905173ffffffffffffffffffffffffffffffffffffffff8416916370a08231916024808301926020929190829003018186803b158015610a2f57600080fd5b505afa158015610a43573d6000803e3d6000fd5b505050506040513d6020811015610a5957600080fd5b5051604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905191955073ffffffffffffffffffffffffffffffffffffffff8316916370a0823191602480820192602092909190829003018186803b158015610acb57600080fd5b505afa158015610adf573d6000803e3d6000fd5b505050506040513d6020811015610af557600080fd5b5051925060009150506dffffffffffffffffffffffffffff85168a90038311610b1f576000610b35565b89856dffffffffffffffffffffffffffff160383035b9050600089856dffffffffffffffffffffffffffff16038311610b59576000610b6f565b89856dffffffffffffffffffffffffffff160383035b90506000821180610b805750600081115b610bd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180612aeb6023913960400191505060405180910390fd5b6000610bf7610be584601361217a565b610bf18761271061217a565b90612200565b90506000610c09610be584601361217a565b9050610c366305f5e100610c306dffffffffffffffffffffffffffff8b8116908b1661217a565b9061217a565b610c40838361217a565b1015610cad57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f5769676f737761703a204b000000000000000000000000000000000000000000604482015290519081900360640190fd5b5050610cbb84848888612272565b60408051838152602081018390528082018d9052606081018c9052905173ffffffffffffffffffffffffffffffffffffffff8b169133917fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d8229181900360800190a350506001600c55505050505050505050565b6040518060400160405280600881526020017f5769676f204c507300000000000000000000000000000000000000000000000081525081565b6008546dffffffffffffffffffffffffffff808216926e0100000000000000000000000000008304909116917c0100000000000000000000000000000000000000000000000000000000900463ffffffff1690565b6000610dc9338484612528565b5060015b92915050565b60065473ffffffffffffffffffffffffffffffffffffffff1681565b60005481565b73ffffffffffffffffffffffffffffffffffffffff831660009081526002602090815260408083203384529091528120547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14610eb95773ffffffffffffffffffffffffffffffffffffffff84166000908152600260209081526040808320338452909152902054610e879083612200565b73ffffffffffffffffffffffffffffffffffffffff851660009081526002602090815260408083203384529091529020555b610ec4848484612597565b5060019392505050565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b601281565b60035481565b60055473ffffffffffffffffffffffffffffffffffffffff163314610f8357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f5769676f737761703a20464f5242494444454e00000000000000000000000000604482015290519081900360640190fd5b6006805473ffffffffffffffffffffffffffffffffffffffff9384167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161790915560078054929093169116179055565b60095481565b600a5481565b6000600c5460011461105557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5769676f737761703a204c4f434b454400000000000000000000000000000000604482015290519081900360640190fd5b6000600c81905580611065610d67565b50600654604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905193955091935060009273ffffffffffffffffffffffffffffffffffffffff909116916370a08231916024808301926020929190829003018186803b1580156110df57600080fd5b505afa1580156110f3573d6000803e3d6000fd5b505050506040513d602081101561110957600080fd5b5051600754604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905192935060009273ffffffffffffffffffffffffffffffffffffffff909216916370a0823191602480820192602092909190829003018186803b15801561118257600080fd5b505afa158015611196573d6000803e3d6000fd5b505050506040513d60208110156111ac57600080fd5b5051905060006111cc836dffffffffffffffffffffffffffff8716612200565b905060006111ea836dffffffffffffffffffffffffffff8716612200565b905060006111f8878761266c565b6000549091508061122f5761121b6103e8610bf1611216878761217a565b6127da565b985061122a60006103e861282c565b611280565b61127d6dffffffffffffffffffffffffffff891661124d868461217a565b8161125457fe5b046dffffffffffffffffffffffffffff8916611270868561217a565b8161127757fe5b046128d0565b98505b600089116112d9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526027815260200180612a796027913960400191505060405180910390fd5b6112e38a8a61282c565b6112ef86868a8a612272565b811561132b57600854611327906dffffffffffffffffffffffffffff808216916e01000000000000000000000000000090041661217a565b600b555b6040805185815260208101859052815133927f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f928290030190a250506001600c5550949695505050505050565b60016020526000908152604090205481565b600b5481565b60046020526000908152604090205481565b600080600c5460011461141657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5769676f737761703a204c4f434b454400000000000000000000000000000000604482015290519081900360640190fd5b6000600c81905580611426610d67565b50600654600754604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905194965092945073ffffffffffffffffffffffffffffffffffffffff9182169391169160009184916370a08231916024808301926020929190829003018186803b1580156114a857600080fd5b505afa1580156114bc573d6000803e3d6000fd5b505050506040513d60208110156114d257600080fd5b5051604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905191925060009173ffffffffffffffffffffffffffffffffffffffff8516916370a08231916024808301926020929190829003018186803b15801561154657600080fd5b505afa15801561155a573d6000803e3d6000fd5b505050506040513d602081101561157057600080fd5b50513060009081526001602052604081205491925061158f888861266c565b600054909150806115a0848761217a565b816115a757fe5b049a50806115b5848661217a565b816115bc57fe5b04995060008b1180156115cf575060008a115b611624576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526027815260200180612aa06027913960400191505060405180910390fd5b61162e30846128e8565b611639878d8d611f6d565b611644868d8c611f6d565b604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905173ffffffffffffffffffffffffffffffffffffffff8916916370a08231916024808301926020929190829003018186803b1580156116b057600080fd5b505afa1580156116c4573d6000803e3d6000fd5b505050506040513d60208110156116da57600080fd5b5051604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905191965073ffffffffffffffffffffffffffffffffffffffff8816916370a0823191602480820192602092909190829003018186803b15801561174c57600080fd5b505afa158015611760573d6000803e3d6000fd5b505050506040513d602081101561177657600080fd5b5051935061178685858b8b612272565b81156117c2576008546117be906dffffffffffffffffffffffffffff808216916e01000000000000000000000000000090041661217a565b600b555b604080518c8152602081018c9052815173ffffffffffffffffffffffffffffffffffffffff8f169233927fdccd412f0b1252819cb1fd330b93224ca42612892bb3f4f789976e6d81936496929081900390910190a35050505050505050506001600c81905550915091565b6040518060400160405280600781526020017f5769676f2d4c500000000000000000000000000000000000000000000000000081525081565b6000610dc9338484612597565b6103e881565b600c546001146118ea57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5769676f737761703a204c4f434b454400000000000000000000000000000000604482015290519081900360640190fd5b6000600c55600654600754600854604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905173ffffffffffffffffffffffffffffffffffffffff94851694909316926119c092859287926119bb926dffffffffffffffffffffffffffff169185916370a0823191602480820192602092909190829003018186803b15801561198957600080fd5b505afa15801561199d573d6000803e3d6000fd5b505050506040513d60208110156119b357600080fd5b505190612200565b611f6d565b611a5c81846119bb6008600e9054906101000a90046dffffffffffffffffffffffffffff166dffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561198957600080fd5b50506001600c5550565b60055473ffffffffffffffffffffffffffffffffffffffff1681565b60075473ffffffffffffffffffffffffffffffffffffffff1681565b42841015611b0d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f5769676f737761703a2045585049524544000000000000000000000000000000604482015290519081900360640190fd5b60035473ffffffffffffffffffffffffffffffffffffffff80891660008181526004602090815260408083208054600180820190925582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98186015280840196909652958d166060860152608085018c905260a085019590955260c08085018b90528151808603909101815260e0850182528051908301207f19010000000000000000000000000000000000000000000000000000000000006101008601526101028501969096526101228085019690965280518085039096018652610142840180825286519683019690962095839052610162840180825286905260ff89166101828501526101a284018890526101c28401879052519193926101e2808201937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081019281900390910190855afa158015611c6e573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811615801590611ce957508873ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b611d5457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f5769676f737761703a20494e56414c49445f5349474e41545552450000000000604482015290519081900360640190fd5b611d5f898989612528565b505050505050505050565b600260209081526000928352604080842090915290825290205481565b600c54600114611df857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5769676f737761703a204c4f434b454400000000000000000000000000000000604482015290519081900360640190fd5b6000600c55600654604080517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529051611f669273ffffffffffffffffffffffffffffffffffffffff16916370a08231916024808301926020929190829003018186803b158015611e6f57600080fd5b505afa158015611e83573d6000803e3d6000fd5b505050506040513d6020811015611e9957600080fd5b5051600754604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905173ffffffffffffffffffffffffffffffffffffffff909216916370a0823191602480820192602092909190829003018186803b158015611f0c57600080fd5b505afa158015611f20573d6000803e3d6000fd5b505050506040513d6020811015611f3657600080fd5b50516008546dffffffffffffffffffffffffffff808216916e010000000000000000000000000000900416612272565b6001600c55565b604080518082018252601981527f7472616e7366657228616464726573732c75696e743235362900000000000000602091820152815173ffffffffffffffffffffffffffffffffffffffff85811660248301526044808301869052845180840390910181526064909201845291810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001781529251815160009460609489169392918291908083835b6020831061207357805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101612036565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146120d5576040519150601f19603f3d011682016040523d82523d6000602084013e6120da565b606091505b5091509150818015612108575080511580612108575080806020019051602081101561210557600080fd5b50515b61217357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f5769676f737761703a205452414e534645525f4641494c454400000000000000604482015290519081900360640190fd5b5050505050565b60008115806121955750508082028282828161219257fe5b04145b610dcd57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f64732d6d6174682d6d756c2d6f766572666c6f77000000000000000000000000604482015290519081900360640190fd5b80820382811115610dcd57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f64732d6d6174682d7375622d756e646572666c6f770000000000000000000000604482015290519081900360640190fd5b6dffffffffffffffffffffffffffff841180159061229e57506dffffffffffffffffffffffffffff8311155b61230957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f5769676f737761703a204f564552464c4f570000000000000000000000000000604482015290519081900360640190fd5b60085463ffffffff428116917c01000000000000000000000000000000000000000000000000000000009004811682039081161580159061235957506dffffffffffffffffffffffffffff841615155b801561237457506dffffffffffffffffffffffffffff831615155b1561241e578063ffffffff166123b18561238d866129a1565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16906129c5565b600980547bffffffffffffffffffffffffffffffffffffffffffffffffffffffff929092169290920201905563ffffffff81166123f18461238d876129a1565b600a80547bffffffffffffffffffffffffffffffffffffffffffffffffffffffff92909216929092020190555b600880547fffffffffffffffffffffffffffffffffffff0000000000000000000000000000166dffffffffffffffffffffffffffff888116919091177fffffffff0000000000000000000000000000ffffffffffffffffffffffffffff166e0100000000000000000000000000008883168102919091177bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167c010000000000000000000000000000000000000000000000000000000063ffffffff871602179283905560408051848416815291909304909116602082015281517f1c411e9a96e071241c2f21f7726b17ae89e3cab4c78be50e062b03a9fffbbad1929181900390910190a1505050505050565b73ffffffffffffffffffffffffffffffffffffffff808416600081815260026020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600160205260409020546125c79082612200565b73ffffffffffffffffffffffffffffffffffffffff80851660009081526001602052604080822093909355908416815220546126039082612a06565b73ffffffffffffffffffffffffffffffffffffffff80841660008181526001602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663017e7e586040518163ffffffff1660e01b815260040160206040518083038186803b1580156126d757600080fd5b505afa1580156126eb573d6000803e3d6000fd5b505050506040513d602081101561270157600080fd5b5051600b5473ffffffffffffffffffffffffffffffffffffffff82161580159450919250906127c65780156127c15760006127526112166dffffffffffffffffffffffffffff88811690881661217a565b9050600061275f836127da565b9050808211156127be5760006127816127788484612200565b6000549061217a565b9050600061279a8361279486601261217a565b90612a06565b905060008183816127a757fe5b04905080156127ba576127ba878261282c565b5050505b50505b6127d2565b80156127d2576000600b555b505092915050565b6000600382111561281d575080600160028204015b818110156128175780915060028182858161280657fe5b04018161280f57fe5b0490506127ef565b50612827565b8115612827575060015b919050565b6000546128399082612a06565b600090815573ffffffffffffffffffffffffffffffffffffffff831681526001602052604090205461286b9082612a06565b73ffffffffffffffffffffffffffffffffffffffff831660008181526001602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b60008183106128df57816128e1565b825b9392505050565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600160205260409020546129189082612200565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600160205260408120919091555461294c9082612200565b600090815560408051838152905173ffffffffffffffffffffffffffffffffffffffff8516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef919081900360200190a35050565b6dffffffffffffffffffffffffffff166e0100000000000000000000000000000290565b60006dffffffffffffffffffffffffffff82167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8416816129fe57fe5b049392505050565b80820182811015610dcd57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f64732d6d6174682d6164642d6f766572666c6f77000000000000000000000000604482015290519081900360640190fdfe5769676f737761703a20494e53554646494349454e545f4c49515549444954595f4d494e5445445769676f737761703a20494e53554646494349454e545f4c49515549444954595f4255524e45445769676f737761703a20494e53554646494349454e545f4f55545055545f414d4f554e545769676f737761703a20494e53554646494349454e545f494e5055545f414d4f554e54a2646970667358221220600c651fd4f492a228ea51fa309fd5eeda5590fd81e0d47f427a766a1852bd8864736f6c634300060c0033

Deployed ByteCode Sourcemap

7383:10938:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15120:2445;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;15120:2445:0;;-1:-1:-1;15120:2445:0;-1:-1:-1;15120:2445:0;:::i;:::-;;3458:40;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8390:313;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5689:150;;;;;;;;;;;;;;;;-1:-1:-1;5689:150:0;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;7689:21;;;:::i;:::-;;;;;;;;;;;;;;;;;;;3595:26;;;:::i;:::-;;;;;;;;;;;;;;;;5997:373;;;;;;;;;;;;;;;;-1:-1:-1;5997:373:0;;;;;;;;;;;;;;;;;;:::i;3895:117::-;;;:::i;3553:35::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;3752:31;;;:::i;9696:209::-;;;;;;;;;;;;;;;;-1:-1:-1;9696:209:0;;;;;;;;;;;:::i;8019:35::-;;;:::i;8061:::-;;;:::i;12091:1311::-;;;;;;;;;;;;;;;;-1:-1:-1;12091:1311:0;;;;:::i;3628:44::-;;;;;;;;;;;;;;;;-1:-1:-1;3628:44:0;;;;:::i;8103:20::-;;;:::i;4019:41::-;;;;;;;;;;;;;;;;-1:-1:-1;4019:41:0;;;;:::i;13514:1494::-;;;;;;;;;;;;;;;;-1:-1:-1;13514:1494:0;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;3505:41;;;:::i;5847:142::-;;;;;;;;;;;;;;;;-1:-1:-1;5847:142:0;;;;;;;;;:::i;7498:49::-;;;:::i;17614:434::-;;;;;;;;;;;;;;;;-1:-1:-1;17614:434:0;;;;:::i;7660:22::-;;;:::i;7717:21::-;;;:::i;6378:998::-;;;;;;;;;;;;;;;;-1:-1:-1;6378:998:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;3679:64::-;;;;;;;;;;;;;;;;-1:-1:-1;3679:64:0;;;;;;;;;;;:::i;18097:221::-;;;:::i;15120:2445::-;8282:8;;8294:1;8282:13;8274:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8338:1;8327:8;:12;15297:14;;;;:32:::1;;;15328:1;15315:10;:14;15297:32;15275:118;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15405:17;15424::::0;15447:13:::1;:11;:13::i;:::-;15404:56;;;;;15521:9;15508:22;;:10;:22;:48;;;;;15547:9;15534:22;;:10;:22;15508:48;15486:130;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;;;;;;;::::1;::::0;;;;;;;;;;;;;::::1;;15784:6;::::0;15823::::1;::::0;15629:16:::1;::::0;;;15784:6:::1;::::0;;::::1;::::0;15823;;::::1;::::0;15852:13;::::1;::::0;::::1;::::0;::::1;::::0;:30:::1;;;15875:7;15869:13;;:2;:13;;;;15852:30;15844:63;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;15926:14:::0;;15922:58:::1;;15942:38;15956:7;15965:2;15969:10;15942:13;:38::i;:::-;16033:14:::0;;16029:58:::1;;16049:38;16063:7;16072:2;16076:10;16049:13;:38::i;:::-;16140:15:::0;;16136:215:::1;;16190:2;16174:32;;;16229:10;16262;16295;16328:4;;16174:177;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;16136:215;16377:40;::::0;;;;;16411:4:::1;16377:40;::::0;::::1;::::0;;;:25:::1;::::0;::::1;::::0;::::1;::::0;:40;;;;;::::1;::::0;;;;;;;;:25;:40;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;16377:40:0;16443::::1;::::0;;;;;16477:4:::1;16443:40;::::0;::::1;::::0;;;16377;;-1:-1:-1;16443:25:0::1;::::0;::::1;::::0;::::1;::::0;:40;;;;;16377::::1;::::0;16443;;;;;;;;:25;:40;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;16443:40:0;;-1:-1:-1;16505:17:0::1;::::0;-1:-1:-1;;16536:22:0::1;::::0;::::1;::::0;;::::1;16525:33:::0;::::1;:101;;16625:1;16525:101;;;16598:10;16586:9;:22;;;16574:8;:35;16525:101;16505:121;;16637:17;16680:10;16668:9;:22;;;16657:8;:33;:101;;16757:1;16657:101;;;16730:10;16718:9;:22;;;16706:8;:35;16657:101;16637:121;;16803:1;16791:9;:13;:30;;;;16820:1;16808:9;:13;16791:30;16769:115;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16987:24;17014:74;17056:17;:9:::0;17070:2:::1;17056:13;:17::i;:::-;17014:19;:8:::0;17027:5:::1;17014:12;:19::i;:::-;:23:::0;::::1;:74::i;:::-;16987:101:::0;-1:-1:-1;17103:24:0::1;17130:74;17172:17;:9:::0;17186:2:::1;17172:13;:17::i;17130:74::-;17103:101:::0;-1:-1:-1;17308:47:0::1;17346:8;17308:33;;:18:::0;;::::1;::::0;:33;::::1;:22;:33::i;:::-;:37:::0;::::1;:47::i;:::-;17245:38;:16:::0;17266;17245:20:::1;:38::i;:::-;:110;;17219:183;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;8350:1;;17426:49;17434:8;17444;17454:9;17465;17426:7;:49::i;:::-;17491:66;::::0;;;;;::::1;::::0;::::1;::::0;;;;;;;;;;;;;;;;;::::1;::::0;::::1;::::0;17496:10:::1;::::0;17491:66:::1;::::0;;;;;;;::::1;-1:-1:-1::0;;8373:1:0;8362:8;:12;-1:-1:-1;;;;;;;;;15120:2445:0:o;3458:40::-;;;;;;;;;;;;;;;;;;;:::o;8390:313::-;8605:8;;;;;;;8636;;;;;;;8677:18;;;;;;8390:313::o;5689:150::-;5756:4;5773:36;5782:10;5794:7;5803:5;5773:8;:36::i;:::-;-1:-1:-1;5827:4:0;5689:150;;;;;:::o;7689:21::-;;;;;;:::o;3595:26::-;;;;:::o;5997:373::-;6133:15;;;6112:4;6133:15;;;:9;:15;;;;;;;;6149:10;6133:27;;;;;;;;6172:2;6133:42;6129:175;;6222:15;;;;;;;:9;:15;;;;;;;;6238:10;6222:27;;;;;;;;:70;;6272:5;6222:31;:70::i;:::-;6192:15;;;;;;;:9;:15;;;;;;;;6208:10;6192:27;;;;;;;:100;6129:175;6314:26;6324:4;6330:2;6334:5;6314:9;:26::i;:::-;-1:-1:-1;6358:4:0;5997:373;;;;;:::o;3895:117::-;3946:66;3895:117;:::o;3553:35::-;3586:2;3553:35;:::o;3752:31::-;;;;:::o;9696:209::-;9792:7;;;;9778:10;:21;9770:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9854:6;:16;;;;;;;;;;;;;;9881:6;:16;;;;;;;;;;;9696:209::o;8019:35::-;;;;:::o;8061:::-;;;;:::o;12091:1311::-;12140:17;8282:8;;8294:1;8282:13;8274:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8338:1;8327:8;:12;;;8338:1;12213:13:::1;:11;:13::i;:::-;-1:-1:-1::0;12278:6:0::1;::::0;12271:39:::1;::::0;;;;;12304:4:::1;12271:39;::::0;::::1;::::0;;;12170:56;;-1:-1:-1;12170:56:0;;-1:-1:-1;12252:16:0::1;::::0;12278:6:::1;::::0;;::::1;::::0;12271:24:::1;::::0;:39;;;;;::::1;::::0;;;;;;;;12278:6;12271:39;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;12271:39:0;12347:6:::1;::::0;12340:39:::1;::::0;;;;;12373:4:::1;12340:39;::::0;::::1;::::0;;;12271;;-1:-1:-1;12321:16:0::1;::::0;12347:6:::1;::::0;;::::1;::::0;12340:24:::1;::::0;:39;;;;;12271::::1;::::0;12340;;;;;;;;12347:6;12340:39;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;12340:39:0;;-1:-1:-1;12390:15:0::1;12408:23;:8:::0;:23:::1;::::0;::::1;:12;:23::i;:::-;12390:41:::0;-1:-1:-1;12442:15:0::1;12460:23;:8:::0;:23:::1;::::0;::::1;:12;:23::i;:::-;12442:41;;12496:10;12509:30;12518:9;12529;12509:8;:30::i;:::-;12550:20;12573:11:::0;12496:43;;-1:-1:-1;12677:17:0;12673:402:::1;;12723:54;7542:5;12723:31;12733:20;:7:::0;12745;12733:11:::1;:20::i;:::-;12723:9;:31::i;:54::-;12711:66;;12792:36;12806:1;7542:5;12792;:36::i;:::-;12673:402;;;12928:135;12955:37;::::0;::::1;:25;:7:::0;12967:12;12955:11:::1;:25::i;:::-;:37;;;;;;13011;::::0;::::1;:25;:7:::0;13023:12;13011:11:::1;:25::i;:::-;:37;;;;;;12928:8;:135::i;:::-;12916:147;;12673:402;13105:1;13093:9;:13;13085:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13161:20;13167:2;13171:9;13161:5;:20::i;:::-;13194:49;13202:8;13212;13222:9;13233;13194:7;:49::i;:::-;13258:5;13254:50;;;13295:8;::::0;13273:31:::1;::::0;13295:8:::1;13281::::0;;::::1;::::0;13295;;::::1;;13273:21;:31::i;:::-;13265:5;:39:::0;13254:50:::1;13360:34;::::0;;;;;::::1;::::0;::::1;::::0;;;;;13365:10:::1;::::0;13360:34:::1;::::0;;;;;;::::1;-1:-1:-1::0;;8373:1:0;8362:8;:12;-1:-1:-1;12091:1311:0;;;-1:-1:-1;;;;;;12091:1311:0:o;3628:44::-;;;;;;;;;;;;;:::o;8103:20::-;;;;:::o;4019:41::-;;;;;;;;;;;;;:::o;13514:1494::-;13590:15;13607;8282:8;;8294:1;8282:13;8274:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8338:1;8327:8;:12;;;8338:1;13683:13:::1;:11;:13::i;:::-;-1:-1:-1::0;13740:6:0::1;::::0;13790::::1;::::0;13841:40:::1;::::0;;;;;13875:4:::1;13841:40;::::0;::::1;::::0;;;13640:56;;-1:-1:-1;13640:56:0;;-1:-1:-1;13740:6:0::1;::::0;;::::1;::::0;13790;::::1;::::0;13722:15:::1;::::0;13740:6;;13841:25:::1;::::0;:40;;;;;::::1;::::0;;;;;;;;13740:6;13841:40;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;13841:40:0;13911::::1;::::0;;;;;13945:4:::1;13911:40;::::0;::::1;::::0;;;13841;;-1:-1:-1;13892:16:0::1;::::0;13911:25:::1;::::0;::::1;::::0;::::1;::::0;:40;;;;;13841::::1;::::0;13911;;;;;;;:25;:40;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;13911:40:0;14000:4:::1;13962:17;13982:24:::0;;;:9:::1;13911:40;13982:24:::0;;;;;13911:40;;-1:-1:-1;14032:30:0::1;14041:9:::0;14052;14032:8:::1;:30::i;:::-;14073:20;14096:11:::0;14019:43;;-1:-1:-1;14096:11:0;14206:23:::1;:9:::0;14220:8;14206:13:::1;:23::i;:::-;:38;;;;;;::::0;-1:-1:-1;14339:12:0;14313:23:::1;:9:::0;14327:8;14313:13:::1;:23::i;:::-;:38;;;;;;14303:48;;14442:1;14432:7;:11;:26;;;;;14457:1;14447:7;:11;14432:26;14410:115;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14536:31;14550:4;14557:9;14536:5;:31::i;:::-;14578:35;14592:7;14601:2;14605:7;14578:13;:35::i;:::-;14624;14638:7;14647:2;14651:7;14624:13;:35::i;:::-;14681:40;::::0;;;;;14715:4:::1;14681:40;::::0;::::1;::::0;;;:25:::1;::::0;::::1;::::0;::::1;::::0;:40;;;;;::::1;::::0;;;;;;;;:25;:40;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;14681:40:0;14743::::1;::::0;;;;;14777:4:::1;14743:40;::::0;::::1;::::0;;;14681;;-1:-1:-1;14743:25:0::1;::::0;::::1;::::0;::::1;::::0;:40;;;;;14681::::1;::::0;14743;;;;;;;;:25;:40;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;14743:40:0;;-1:-1:-1;14796:49:0::1;14804:8:::0;14743:40;14824:9;14835;14796:7:::1;:49::i;:::-;14860:5;14856:50;;;14897:8;::::0;14875:31:::1;::::0;14897:8:::1;14883::::0;;::::1;::::0;14897;;::::1;;14875:21;:31::i;:::-;14867:5;:39:::0;14856:50:::1;14962:38;::::0;;;;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;::::1;::::0;14967:10:::1;::::0;14962:38:::1;::::0;;;;;;;;;::::1;8350:1;;;;;;;;;8373::::0;8362:8;:12;;;;13514:1494;;;:::o;3505:41::-;;;;;;;;;;;;;;;;;;;:::o;5847:142::-;5910:4;5927:32;5937:10;5949:2;5953:5;5927:9;:32::i;7498:49::-;7542:5;7498:49;:::o;17614:434::-;8282:8;;8294:1;8282:13;8274:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8338:1;8327:8;:12;17683:6:::1;::::0;17733::::1;::::0;17877:8:::1;::::0;17832:40:::1;::::0;;;;;17866:4:::1;17832:40;::::0;::::1;::::0;;;17683:6:::1;::::0;;::::1;::::0;17733;;::::1;::::0;17765:132:::1;::::0;17683:6;;17815:2;;17832:54:::1;::::0;17877:8:::1;;::::0;17683:6;;17832:25:::1;::::0;:40;;;;;::::1;::::0;;;;;;;;;17683:6;17832:40;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;17832:40:0;;:44:::1;:54::i;:::-;17765:13;:132::i;:::-;17908;17936:7;17958:2;17975:54;18020:8;;;;;;;;;;;17975:54;;17982:7;17975:25;;;18009:4;17975:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;17908:132;-1:-1:-1::0;;8373:1:0;8362:8;:12;-1:-1:-1;17614:434:0:o;7660:22::-;;;;;;:::o;7717:21::-;;;;;;:::o;6378:998::-;6600:15;6588:8;:27;;6580:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6753:16;;6997:13;;;;6648:14;6997:13;;;:6;:13;;;;;;;;:15;;;;;;;;;6820:250;;3946:66;6820:250;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6788:301;;;;;;6689:415;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6665:450;;;;;;;;;7153:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6648:14;;6997:15;7153:26;;;;;-1:-1:-1;7153:26:0;;;;;;;;;;6997:15;7153:26;;;;;;;;;;;;;;;-1:-1:-1;;7153:26:0;;;;;;-1:-1:-1;;7212:30:0;;;;;;;:59;;;7266:5;7246:25;;:16;:25;;;7212:59;7190:136;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7337:31;7346:5;7353:7;7362:5;7337:8;:31::i;:::-;6378:998;;;;;;;;;:::o;3679:64::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;18097:221::-;8282:8;;8294:1;8282:13;8274:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8338:1;8327:8;:12;18167:6:::1;::::0;18160:39:::1;::::0;;;;;18193:4:::1;18160:39;::::0;::::1;::::0;;;18138:172:::1;::::0;18167:6:::1;;::::0;18160:24:::1;::::0;:39;;;;;::::1;::::0;;;;;;;;18167:6;18160:39;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;18160:39:0;18221:6:::1;::::0;18214:39:::1;::::0;;;;;18247:4:::1;18214:39;::::0;::::1;::::0;;;18221:6:::1;::::0;;::::1;::::0;18214:24:::1;::::0;:39;;;;;18160::::1;::::0;18214;;;;;;;;18221:6;18214:39;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;18214:39:0;18268:8:::1;::::0;::::1;::::0;;::::1;::::0;18291;;::::1;;18138:7;:172::i;:::-;8373:1:::0;8362:8;:12;18097:221::o;8711:384::-;7615:34;;;;;;;;;;;;;;;;;8890:43;;8865:10;8890:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8865:79;;;;8830:12;;8844:17;;8865:10;;;8890:43;8865:79;;;8890:43;8865:79;;8890:43;8865:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8829:115;;;;8977:7;:57;;;;-1:-1:-1;8989:11:0;;:16;;:44;;;9020:4;9009:24;;;;;;;;;;;;;;;-1:-1:-1;9009:24:0;8989:44;8955:132;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8711:384;;;;;:::o;2263:151::-;2321:9;2351:6;;;:30;;-1:-1:-1;;2366:5:0;;;2380:1;2375;2366:5;2375:1;2361:15;;;;;:20;2351:30;2343:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2117:138;2210:5;;;2205:16;;;;2197:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9990:1019;10165:23;;;;;;:50;;-1:-1:-1;10192:23:0;;;;10165:50;10143:118;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10376:18;;10303:23;:15;:23;;;10376:18;;;;;10359:35;;;10432:15;;;;;;:33;;-1:-1:-1;10451:14:0;;;;;10432:33;:51;;;;-1:-1:-1;10469:14:0;;;;;10432:51;10428:410;;;10675:11;10602:84;;10610:44;10644:9;10610:27;10627:9;10610:16;:27::i;:::-;:33;;;;:44::i;:::-;10561:20;:125;;10602:53;;;;;:84;;;;10561:125;;;10742:84;;;10750:44;10784:9;10750:27;10767:9;10750:16;:27::i;:44::-;10701:20;:125;;10742:53;;;;;:84;;;;10701:125;;;10428:410;10848:8;:28;;;;;;;;;;;;10887;;;;;;;;;;;;10926:35;;;;;;;;;;;;10977:24;;;10982:8;;;10977:24;;10992:8;;;;;;;10977:24;;;;;;;;;;;;;;;;;9990:1019;;;;;;:::o;5210:206::-;5328:16;;;;;;;;:9;:16;;;;;;;;:25;;;;;;;;;;;;;:33;;;5377:31;;;;;;;;;;;;;;;;;5210:206;;;:::o;5424:257::-;5555:15;;;;;;;:9;:15;;;;;;:26;;5575:5;5555:19;:26::i;:::-;5537:15;;;;;;;;:9;:15;;;;;;:44;;;;5608:13;;;;;;;:24;;5626:5;5608:17;:24::i;:::-;5592:13;;;;;;;;:9;:13;;;;;;;;;:40;;;;5648:25;;;;;;;5592:13;;5648:25;;;;;;;;;;;;;5424:257;;;:::o;11098:881::-;11189:10;11217:13;11250:7;;;;;;;;;;;11233:31;;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11233:33:0;11332:5;;11285:19;;;;;;;-1:-1:-1;11233:33:0;;-1:-1:-1;11332:5:0;11363:609;;11393:11;;11389:513;;11425:13;11441:44;11451:33;;:18;;;;:33;;:22;:33::i;11441:44::-;11425:60;;11504:17;11524;11534:6;11524:9;:17::i;:::-;11504:37;;11572:9;11564:5;:17;11560:327;;;11606:17;11626:37;11642:20;:5;11652:9;11642;:20::i;:::-;11626:11;;;:15;:37::i;:::-;11606:57;-1:-1:-1;11686:19:0;11708:28;11726:9;11708:13;:5;11718:2;11708:9;:13::i;:::-;:17;;:28::i;:::-;11686:50;;11759:17;11791:11;11779:9;:23;;;;;;;-1:-1:-1;11829:13:0;;11825:42;;11844:23;11850:5;11857:9;11844:5;:23::i;:::-;11560:327;;;;11389:513;;;11363:609;;;11923:11;;11919:53;;11959:1;11951:5;:9;11919:53;11098:881;;;;;;:::o;3074:312::-;3122:9;3152:1;3148;:5;3144:235;;;-1:-1:-1;3174:1:0;3210;3206;3202:5;;:9;3226:92;3237:1;3233;:5;3226:92;;;3263:1;3259:5;;3301:1;3296;3292;3288;:5;;;;;;:9;3287:15;;;;;;3283:19;;3226:92;;;3144:235;;;;3339:6;;3335:44;;-1:-1:-1;3366:1:0;3335:44;3074:312;;;:::o;4778:204::-;4854:11;;:22;;4870:5;4854:15;:22::i;:::-;4840:11;:36;;;4903:13;;;;;:9;:13;;;;;;:24;;4921:5;4903:17;:24::i;:::-;4887:13;;;;;;;:9;:13;;;;;;;;:40;;;;4943:31;;;;;;;4887:13;;;;4943:31;;;;;;;;;;4778:204;;:::o;2851:105::-;2909:9;2939:1;2935;:5;:13;;2947:1;2935:13;;;2943:1;2935:13;2931:17;2851:105;-1:-1:-1;;;2851:105:0:o;4990:212::-;5072:15;;;;;;;:9;:15;;;;;;:26;;5092:5;5072:19;:26::i;:::-;5054:15;;;;;;;:9;:15;;;;;:44;;;;5123:11;:22;;5139:5;5123:15;:22::i;:::-;5109:11;:36;;;5161:33;;;;;;;;;;;;;;;;;;;;;;4990:212;;:::o;2525:120::-;2601:10;;2470:6;2601:17;;2525:120::o;2716:108::-;2776:9;2806:10;;;2802:14;;;2806:10;2802:14;;;;;;2716:108;-1:-1:-1;;;2716:108:0:o;1972:137::-;2065:5;;;2060:16;;;;2052:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Swarm Source

ipfs://600c651fd4f492a228ea51fa309fd5eeda5590fd81e0d47f427a766a1852bd88
Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Validator ID :
0 FTM

Amount Staked
0

Amount Delegated
0

Staking Total
0

Staking Start Epoch
0

Staking Start Time
0

Proof of Importance
0

Origination Score
0

Validation Score
0

Active
0

Online
0

Downtime
0 s
Address Amount claimed Rewards Created On Epoch Created On
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.