Contract 0xe4fcada073f962aa514391ceffeed38d1c959cc9

 
 
Txn Hash Method
Block
From
To
Value [Txn Fee]
0x5d761ea64f3e5366782c3cc7d2277de22a0123c76c8eb75afc1c019b3d3bdce2Approve143792952022-01-15 6:02:022 days 19 hrs ago0xd893b26819bfaa054ece1e08d6c5b60da038c3d9 IN  0xe4fcada073f962aa514391ceffeed38d1c959cc90 BNB0.00022155
0x571b097b276c543452e5426ad106edb444ec9b4d5002162ab5eb6f55d9507108Approve140936502022-01-05 7:31:0712 days 18 hrs ago0x9bcf1d3051a7c80cc66a7e34d6b7af263a641163 IN  0xe4fcada073f962aa514391ceffeed38d1c959cc90 BNB0.00022155
0xc7581e6c86fbfb3d71c919afd16548ea7d725cd5b29a35c61ce6693d72b48460Approve140790172022-01-04 19:17:0213 days 6 hrs ago0x3fa55190b8b14781d73228c4c516e1bbfade1d84 IN  0xe4fcada073f962aa514391ceffeed38d1c959cc90 BNB0.00012363
0x9bc36e1e9bea953fcdfe734dfc1b07b43a72fa03ef7269b0f28b70d0615cf005Approve140790112022-01-04 19:16:4413 days 6 hrs ago0x3fa55190b8b14781d73228c4c516e1bbfade1d84 IN  0xe4fcada073f962aa514391ceffeed38d1c959cc90 BNB0.00012363
0xe0a793c763a128bef036599571184cfbef574ff8696ead0c018235c63fe4e2adApprove140786822022-01-04 19:00:1713 days 6 hrs ago0x3fa55190b8b14781d73228c4c516e1bbfade1d84 IN  0xe4fcada073f962aa514391ceffeed38d1c959cc90 BNB0.000072315
0x6186d64e475af658a9fd110a955c073d6a5690501d5e631683bc92509439c99dApprove140121332022-01-02 11:25:4415 days 14 hrs ago0xdec3f760b4fc6b69625d58543b4257a19783b046 IN  0xe4fcada073f962aa514391ceffeed38d1c959cc90 BNB0.00022155
0x5e943932633bdf358ff124c1804a6a3e1a2e781ff64a49e4c46043c835f5c096Approve139831312022-01-01 11:14:1016 days 14 hrs ago0x37d071ce64ec756315ea6e4e47adf84740b43703 IN  0xe4fcada073f962aa514391ceffeed38d1c959cc90 BNB0.00022155
0x71870c3fad2521a59e82a4d864fd409bde5be4716906dfa7a4e4c5027a5ec7c0Approve139831302022-01-01 11:14:0716 days 14 hrs ago0x2b2014fc3865e3a7a0711843aaf03c037ed4e173 IN  0xe4fcada073f962aa514391ceffeed38d1c959cc90 BNB0.00022155
0xf42f9a5650e1442210c278ed3e23a41f8328b8eb8b701db398d053374a9e20f2Approve139604312021-12-31 16:18:0817 days 9 hrs ago0x3daf1ac0f2a4e8a9b0e0f2bf0075ba6b18942ae5 IN  0xe4fcada073f962aa514391ceffeed38d1c959cc90 BNB0.00022017
0xb03c82e0cb37cc8f38ce6ac3e231da24630eca9c8951c9d817d3db03a95e0069Approve139135082021-12-30 1:10:0719 days 22 mins ago0x5f0ff52df8df2c5351c47b6711c33f36c5402909 IN  0xe4fcada073f962aa514391ceffeed38d1c959cc90 BNB0.00022155
0xb17f326d07e0c4962aebbd1d5008c303ab1b1f8fba1fcbd43ae1605d95647fe0Approve139070082021-12-29 19:45:0719 days 5 hrs ago0xf90680b2b83b69299db08173708dd84454fc77c8 IN  0xe4fcada073f962aa514391ceffeed38d1c959cc90 BNB0.000072315
0xfe273e30d40c466ce83a31a7629d1f517658764197b9a5ec9d7b5d65a3618cc6Approve138324692021-12-27 5:32:5621 days 19 hrs ago0xa114f803b8b16359b23216057d52f8b7443c3ba4 IN  0xe4fcada073f962aa514391ceffeed38d1c959cc90 BNB0.00022155
0x28d800ee407c93338a1b474611a4effe41e6c426973d69d1f45e6680d3a04f09Approve138103402021-12-26 11:04:0922 days 14 hrs ago0x7daaefc9eaa120eb7e1c46976daf3b35b8dc3257 IN  0xe4fcada073f962aa514391ceffeed38d1c959cc90 BNB0.00022155
0x437163679c1140f81ead67732a61f6ca236b4021c76a7e1a5fe82e9af79caf9fApprove137566672021-12-24 14:18:0424 days 11 hrs ago0xca234c6ee2fded0a68a7353475725eac94af2158 IN  0xe4fcada073f962aa514391ceffeed38d1c959cc90 BNB0.00022155
0xed8a12f0a894c2ef149db5e0779532dd1ac6e605085d1e99859e99614b48366aApprove136731012021-12-21 16:32:0627 days 9 hrs ago0xb218ad0a9a922cc7e94f553c633b93a6e841a9b9 IN  0xe4fcada073f962aa514391ceffeed38d1c959cc90 BNB0.00022155
0xbfcb82ad25faf7e69c4d6af0c3521ad7a841955961d43595c6dfecd300dc11b5Approve136390392021-12-20 11:33:3428 days 13 hrs ago0x27ebcc1821ef0d79fe2021192159eaa728167e94 IN  0xe4fcada073f962aa514391ceffeed38d1c959cc90 BNB0.00022155
0xb2d8118bcf78cb8f613ac0101ba977c6aef16667ab6399f14b5589279d810183Approve136386682021-12-20 11:15:0128 days 14 hrs ago0x27ebcc1821ef0d79fe2021192159eaa728167e94 IN  0xe4fcada073f962aa514391ceffeed38d1c959cc90 BNB0.00022155
0x081cc85e429b68498d4218f60af98537bf21666e270227294ee37c4945287d20Approve136365822021-12-20 9:30:4128 days 16 hrs ago0x37f85dd16d3a37b1ab60446e6cac0656082c402c IN  0xe4fcada073f962aa514391ceffeed38d1c959cc90 BNB0.00022155
0xc2b781e68a8e999b75e45e627588039f0eb923c5206c1ddc9e088a8fc427db06Approve136282992021-12-20 2:36:3128 days 22 hrs ago0xd66d8a251f40fd3afbbdfecf3d33a21306cb6073 IN  0xe4fcada073f962aa514391ceffeed38d1c959cc90 BNB0.000072315
0x7036cb109a5c802a5625d85a1a79bbf01701a40550149a6d3ff57374bbb153eeApprove135181472021-12-16 6:36:3332 days 18 hrs ago0xee764bbaf0b8d440de625db668e2b8f93d4101f2 IN  0xe4fcada073f962aa514391ceffeed38d1c959cc90 BNB0.00022155
0x7f85a46cc5cfebe4337aaa8b841915a8792c552ce9ab98a9c40867049d44a27eApprove134997252021-12-15 15:14:0033 days 10 hrs ago0x0994c46a1c95954688d4b23f9fe0911589ac7607 IN  0xe4fcada073f962aa514391ceffeed38d1c959cc90 BNB0.00022155
0xb6ea65a50e5a1e0abc73f93fb41bfac259f24787b061e4d4bfb263340090c3aaApprove134993542021-12-15 14:55:2533 days 10 hrs ago0xe064eeeac4451bcb94466f07672e81d6dc6d7bba IN  0xe4fcada073f962aa514391ceffeed38d1c959cc90 BNB0.00022155
0xe56c93bc92bf8a53da519f2a2d9e8db8112940f3267b17a3c852a01e14f30af6Approve134983922021-12-15 14:07:1633 days 11 hrs ago0x0994c46a1c95954688d4b23f9fe0911589ac7607 IN  0xe4fcada073f962aa514391ceffeed38d1c959cc90 BNB0.00022155
0xbb0bf11923c080b736659122504aef8941116f42ed07d458a90b1be3220fd92fApprove134981132021-12-15 13:53:1933 days 11 hrs ago0xd257f1668d762b1a1d94f9a300c95c7107987ae1 IN  0xe4fcada073f962aa514391ceffeed38d1c959cc90 BNB0.00022155
0x56cbf4995d031b670a2abb7b58819367df9a144225ad3fba4e14f47feb44d67dApprove134673522021-12-14 12:00:4134 days 13 hrs ago0xe40728ac7563ee9301b262a15cc786d60fd31f63 IN  0xe4fcada073f962aa514391ceffeed38d1c959cc90 BNB0.000072315
[ Download CSV Export 
Latest 1 internal transaction
Parent Txn Hash Block From To Value
0x8b833d7ab93be69dec143bc8fe0a9c1fd50ff8eb4d1330fe03463a96da765ef1122721252021-11-01 8:36:4177 days 16 hrs ago 0xc801c7980c8c7900bc898b1f38392b235ff64097  Contract Creation0 BNB
[ Download CSV Export 
Loading

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

Contract Name:
FoodcourtPair

Compiler Version
v0.5.16+commit.9c3226ce

Optimization Enabled:
Yes with 1000 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at BscScan.com on 2021-08-21
*/

// Why do I have to verify this shit, why can't the developers do this ffs

pragma solidity =0.5.16;


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

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

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

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure 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);

    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);

    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;

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

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);

    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;

    function initialize(address, address) external;
}

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

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure 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);

    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);

    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;
}

// a library for performing overflow-safe math, courtesy of DappHub (https://github.com/dapphub/ds-math)
library SafeMath {
    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 FoodcourtERC20 is IFoodcourtERC20 {
    using SafeMath for uint;

    string public constant name = 'Foodcourt LPs';
    string public constant symbol = 'Foodcourt-LP';
    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;

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

    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 _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(msg.sender, spender, value);
        return true;
    }

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

    function transferFrom(address from, address to, uint value) external returns (bool) {
        if (allowance[from][msg.sender] != uint(-1)) {
            allowance[from][msg.sender] = allowance[from][msg.sender].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, 'Foodcourt: 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, 'Foodcourt: 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 IERC20 {
    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 IFoodcourtCallee {
    function foodcourtCall(address sender, uint amount0, uint amount1, bytes calldata data) external;
}

contract FoodcourtPair is IFoodcourtPair, FoodcourtERC20 {
    using SafeMath  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

    uint private unlocked = 1;
    modifier lock() {
        require(unlocked == 1, 'Foodcourt: 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))), 'Foodcourt: 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, 'Foodcourt: 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), 'Foodcourt: 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 8/25 of the growth in sqrt(k)
    function _mintFee(uint112 _reserve0, uint112 _reserve1) private returns (bool feeOn) {
        address feeTo = IFoodcourtFactory(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)).mul(8);
                    uint denominator = rootK.mul(17).add(rootKLast.mul(8));
                    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 = IERC20(token0).balanceOf(address(this));
        uint balance1 = IERC20(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) {
            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, 'Foodcourt: 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(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 (uint amount0, uint amount1) {
        (uint112 _reserve0, uint112 _reserve1,) = getReserves(); // gas savings
        address _token0 = token0;                                // gas savings
        address _token1 = token1;                                // gas savings
        uint balance0 = IERC20(_token0).balanceOf(address(this));
        uint balance1 = IERC20(_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, 'Foodcourt: 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 = uint(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(uint amount0Out, uint amount1Out, address to, bytes calldata data) external lock {
        require(amount0Out > 0 || amount1Out > 0, 'Foodcourt: INSUFFICIENT_OUTPUT_AMOUNT');
        (uint112 _reserve0, uint112 _reserve1,) = getReserves(); // gas savings
        require(amount0Out < _reserve0 && amount1Out < _reserve1, 'Foodcourt: INSUFFICIENT_LIQUIDITY');

        uint balance0;
        uint balance1;
        { // scope for _token{0,1}, avoids stack too deep errors
        address _token0 = token0;
        address _token1 = token1;
        require(to != _token0 && to != _token1, 'Foodcourt: 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) IFoodcourtCallee(to).foodcourtCall(msg.sender, amount0Out, amount1Out, data);
        balance0 = IERC20(_token0).balanceOf(address(this));
        balance1 = IERC20(_token1).balanceOf(address(this));
        }
        uint amount0In = balance0 > _reserve0 - amount0Out ? balance0 - (_reserve0 - amount0Out) : 0;
        uint amount1In = balance1 > _reserve1 - amount1Out ? balance1 - (_reserve1 - amount1Out) : 0;
        require(amount0In > 0 || amount1In > 0, 'Foodcourt: INSUFFICIENT_INPUT_AMOUNT');
        { // scope for reserve{0,1}Adjusted, avoids stack too deep errors
        uint balance0Adjusted = (balance0.mul(10000).sub(amount0In.mul(25)));
        uint balance1Adjusted = (balance1.mul(10000).sub(amount1In.mul(25)));
        require(balance0Adjusted.mul(balance1Adjusted) >= uint(_reserve0).mul(_reserve1).mul(10000**2), 'Foodcourt: 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 FoodcourtFactory is IFoodcourtFactory {
    bytes32 public constant INIT_CODE_PAIR_HASH = keccak256(abi.encodePacked(type(FoodcourtPair).creationCode));

    address public feeTo;
    address public feeToSetter;

    mapping(address => mapping(address => address)) public getPair;
    address[] public allPairs;

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

    constructor(address _feeToSetter) public {
        feeToSetter = _feeToSetter;
    }

    function allPairsLength() external view returns (uint) {
        return allPairs.length;
    }

    function createPair(address tokenA, address tokenB) external returns (address pair) {
        require(tokenA != tokenB, 'Foodcourt: IDENTICAL_ADDRESSES');
        (address token0, address token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA);
        require(token0 != address(0), 'Foodcourt: ZERO_ADDRESS');
        require(getPair[token0][token1] == address(0), 'Foodcourt: PAIR_EXISTS'); // single check is sufficient
        bytes memory bytecode = type(FoodcourtPair).creationCode;
        bytes32 salt = keccak256(abi.encodePacked(token0, token1));
        assembly {
            pair := create2(0, add(bytecode, 32), mload(bytecode), salt)
        }
        IFoodcourtPair(pair).initialize(token0, token1);
        getPair[token0][token1] = pair;
        getPair[token1][token0] = pair; // populate mapping in the reverse direction
        allPairs.push(pair);
        emit PairCreated(token0, token1, pair, allPairs.length);
    }

    function setFeeTo(address _feeTo) external {
        require(msg.sender == feeToSetter, 'Foodcourt: FORBIDDEN');
        feeTo = _feeTo;
    }

    function setFeeToSetter(address _feeToSetter) external {
        require(msg.sender == feeToSetter, 'Foodcourt: FORBIDDEN');
        feeToSetter = _feeToSetter;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"payable":false,"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"},{"constant":true,"inputs":[],"name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"MINIMUM_LIQUIDITY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"PERMIT_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"burn","outputs":[{"internalType":"uint256","name":"amount0","type":"uint256"},{"internalType":"uint256","name":"amount1","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"factory","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getReserves","outputs":[{"internalType":"uint112","name":"_reserve0","type":"uint112"},{"internalType":"uint112","name":"_reserve1","type":"uint112"},{"internalType":"uint32","name":"_blockTimestampLast","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_token0","type":"address"},{"internalType":"address","name":"_token1","type":"address"}],"name":"initialize","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"kLast","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"mint","outputs":[{"internalType":"uint256","name":"liquidity","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"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":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"price0CumulativeLast","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"price1CumulativeLast","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"skim","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"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":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"sync","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"token0","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"token1","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"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"}],"payable":false,"stateMutability":"nonpayable","type":"function"}]

60806040526001600c5534801561001557600080fd5b5060405146908060526124848239604080519182900360520182208282018252600d83526c466f6f64636f757274204c507360981b6020938401528151808301835260018152603160f81b908401528151808401919091527febb29d302c3e07e8ca4111e2a9fbcdb8b94b805788db96dd1d72eb4f42a354d6818301527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6606082015260808101949094523060a0808601919091528151808603909101815260c09094019052825192019190912060035550600580546001600160a01b0319163317905561237c806101086000396000f3fe608060405234801561001057600080fd5b50600436106101b95760003560e01c80636a627842116100f9578063ba9a7a5611610097578063d21220a711610071578063d21220a714610544578063d505accf1461054c578063dd62ed3e1461059d578063fff6cae9146105cb576101b9565b8063ba9a7a561461050e578063bc25cf7714610516578063c45a01551461053c576101b9565b80637ecebe00116100d35780637ecebe001461047557806389afcb441461049b57806395d89b41146104da578063a9059cbb146104e2576101b9565b80636a6278421461042157806370a08231146104475780637464fc3d1461046d576101b9565b806323b872dd116101665780633644e515116101405780633644e515146103db578063485cc955146103e35780635909c0d5146104115780635a3d549314610419576101b9565b806323b872dd1461037f57806330adf81f146103b5578063313ce567146103bd576101b9565b8063095ea7b311610197578063095ea7b3146103015780630dfe16811461034157806318160ddd14610365576101b9565b8063022c0d9f146101be57806306fdde031461024c5780630902f1ac146102c9575b600080fd5b61024a600480360360808110156101d457600080fd5b8135916020810135916001600160a01b03604083013516919081019060808101606082013564010000000081111561020b57600080fd5b82018360208201111561021d57600080fd5b8035906020019184600183028401116401000000008311171561023f57600080fd5b5090925090506105d3565b005b610254610b28565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561028e578181015183820152602001610276565b50505050905090810190601f1680156102bb5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102d1610b61565b604080516001600160701b03948516815292909316602083015263ffffffff168183015290519081900360600190f35b61032d6004803603604081101561031757600080fd5b506001600160a01b038135169060200135610b8b565b604080519115158252519081900360200190f35b610349610ba2565b604080516001600160a01b039092168252519081900360200190f35b61036d610bb1565b60408051918252519081900360200190f35b61032d6004803603606081101561039557600080fd5b506001600160a01b03813581169160208101359091169060400135610bb7565b61036d610c51565b6103c5610c75565b6040805160ff9092168252519081900360200190f35b61036d610c7a565b61024a600480360360408110156103f957600080fd5b506001600160a01b0381358116916020013516610c80565b61036d610d25565b61036d610d2b565b61036d6004803603602081101561043757600080fd5b50356001600160a01b0316610d31565b61036d6004803603602081101561045d57600080fd5b50356001600160a01b0316611031565b61036d611043565b61036d6004803603602081101561048b57600080fd5b50356001600160a01b0316611049565b6104c1600480360360208110156104b157600080fd5b50356001600160a01b031661105b565b6040805192835260208301919091528051918290030190f35b610254611401565b61032d600480360360408110156104f857600080fd5b506001600160a01b03813516906020013561143a565b61036d611447565b61024a6004803603602081101561052c57600080fd5b50356001600160a01b031661144d565b6103496115b8565b6103496115c7565b61024a600480360360e081101561056257600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c001356115d6565b61036d600480360360408110156105b357600080fd5b506001600160a01b03813581169160200135166117fe565b61024a61181b565b600c5460011461061e576040805162461bcd60e51b8152602060048201526011602482015270119bdbd918dbdd5c9d0e881313d0d2d151607a1b604482015290519081900360640190fd5b6000600c55841515806106315750600084115b61066c5760405162461bcd60e51b81526004018080602001828103825260258152602001806122fb6025913960400191505060405180910390fd5b600080610677610b61565b5091509150816001600160701b03168710801561069c5750806001600160701b031686105b6106d75760405162461bcd60e51b81526004018080602001828103825260218152602001806122da6021913960400191505060405180910390fd5b60065460075460009182916001600160a01b039182169190811690891682148015906107155750806001600160a01b0316896001600160a01b031614155b610766576040805162461bcd60e51b815260206004820152601560248201527f466f6f64636f7572743a20494e56414c49445f544f0000000000000000000000604482015290519081900360640190fd5b8a1561077757610777828a8d61197d565b891561078857610788818a8c61197d565b861561084357886001600160a01b031663fc4d9749338d8d8c8c6040518663ffffffff1660e01b815260040180866001600160a01b03166001600160a01b03168152602001858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f8201169050808301925050509650505050505050600060405180830381600087803b15801561082a57600080fd5b505af115801561083e573d6000803e3d6000fd5b505050505b604080516370a0823160e01b815230600482015290516001600160a01b038416916370a08231916024808301926020929190829003018186803b15801561088957600080fd5b505afa15801561089d573d6000803e3d6000fd5b505050506040513d60208110156108b357600080fd5b5051604080516370a0823160e01b815230600482015290519195506001600160a01b038316916370a0823191602480820192602092909190829003018186803b1580156108ff57600080fd5b505afa158015610913573d6000803e3d6000fd5b505050506040513d602081101561092957600080fd5b5051925060009150506001600160701b0385168a9003831161094c57600061095b565b89856001600160701b03160383035b9050600089856001600160701b0316038311610978576000610987565b89856001600160701b03160383035b905060008211806109985750600081115b6109d35760405162461bcd60e51b81526004018080602001828103825260248152602001806122b66024913960400191505060405180910390fd5b6000610a076109e984601963ffffffff611b3016565b6109fb8761271063ffffffff611b3016565b9063ffffffff611b9c16565b90506000610a1f6109e984601963ffffffff611b3016565b9050610a516305f5e100610a456001600160701b038b8116908b1663ffffffff611b3016565b9063ffffffff611b3016565b610a61838363ffffffff611b3016565b1015610ab4576040805162461bcd60e51b815260206004820152600c60248201527f466f6f64636f7572743a204b0000000000000000000000000000000000000000604482015290519081900360640190fd5b5050610ac284848888611bf4565b60408051838152602081018390528082018d9052606081018c905290516001600160a01b038b169133917fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d8229181900360800190a350506001600c55505050505050505050565b6040518060400160405280600d81526020017f466f6f64636f757274204c50730000000000000000000000000000000000000081525081565b6008546001600160701b0380821692600160701b830490911691600160e01b900463ffffffff1690565b6000610b98338484611dd1565b5060015b92915050565b6006546001600160a01b031681565b60005481565b6001600160a01b038316600090815260026020908152604080832033845290915281205460001914610c3c576001600160a01b0384166000908152600260209081526040808320338452909152902054610c17908363ffffffff611b9c16565b6001600160a01b03851660009081526002602090815260408083203384529091529020555b610c47848484611e33565b5060019392505050565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b601281565b60035481565b6005546001600160a01b03163314610cdf576040805162461bcd60e51b815260206004820152601460248201527f466f6f64636f7572743a20464f5242494444454e000000000000000000000000604482015290519081900360640190fd5b600680546001600160a01b039384167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161790915560078054929093169116179055565b60095481565b600a5481565b6000600c54600114610d7e576040805162461bcd60e51b8152602060048201526011602482015270119bdbd918dbdd5c9d0e881313d0d2d151607a1b604482015290519081900360640190fd5b6000600c81905580610d8e610b61565b50600654604080516370a0823160e01b815230600482015290519395509193506000926001600160a01b03909116916370a08231916024808301926020929190829003018186803b158015610de257600080fd5b505afa158015610df6573d6000803e3d6000fd5b505050506040513d6020811015610e0c57600080fd5b5051600754604080516370a0823160e01b815230600482015290519293506000926001600160a01b03909216916370a0823191602480820192602092909190829003018186803b158015610e5f57600080fd5b505afa158015610e73573d6000803e3d6000fd5b505050506040513d6020811015610e8957600080fd5b505190506000610ea8836001600160701b03871663ffffffff611b9c16565b90506000610ec5836001600160701b03871663ffffffff611b9c16565b90506000610ed38787611eed565b60005490915080610f1057610efc6103e86109fb610ef7878763ffffffff611b3016565b612060565b9850610f0b60006103e86120b2565b610f5f565b610f5c6001600160701b038916610f2d868463ffffffff611b3016565b81610f3457fe5b046001600160701b038916610f4f868563ffffffff611b3016565b81610f5657fe5b04612148565b98505b60008911610f9e5760405162461bcd60e51b81526004018080602001828103825260288152602001806123206028913960400191505060405180910390fd5b610fa88a8a6120b2565b610fb486868a8a611bf4565b8115610fe457600854610fe0906001600160701b0380821691600160701b90041663ffffffff611b3016565b600b555b6040805185815260208101859052815133927f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f928290030190a250506001600c5550949695505050505050565b60016020526000908152604090205481565b600b5481565b60046020526000908152604090205481565b600080600c546001146110a9576040805162461bcd60e51b8152602060048201526011602482015270119bdbd918dbdd5c9d0e881313d0d2d151607a1b604482015290519081900360640190fd5b6000600c819055806110b9610b61565b50600654600754604080516370a0823160e01b815230600482015290519496509294506001600160a01b039182169391169160009184916370a08231916024808301926020929190829003018186803b15801561111557600080fd5b505afa158015611129573d6000803e3d6000fd5b505050506040513d602081101561113f57600080fd5b5051604080516370a0823160e01b815230600482015290519192506000916001600160a01b038516916370a08231916024808301926020929190829003018186803b15801561118d57600080fd5b505afa1580156111a1573d6000803e3d6000fd5b505050506040513d60208110156111b757600080fd5b5051306000908152600160205260408120549192506111d68888611eed565b600054909150806111ed848763ffffffff611b3016565b816111f457fe5b049a5080611208848663ffffffff611b3016565b8161120f57fe5b04995060008b118015611222575060008a115b61125d5760405162461bcd60e51b815260040180806020018281038252602881526020018061228e6028913960400191505060405180910390fd5b6112673084612160565b611272878d8d61197d565b61127d868d8c61197d565b604080516370a0823160e01b815230600482015290516001600160a01b038916916370a08231916024808301926020929190829003018186803b1580156112c357600080fd5b505afa1580156112d7573d6000803e3d6000fd5b505050506040513d60208110156112ed57600080fd5b5051604080516370a0823160e01b815230600482015290519196506001600160a01b038816916370a0823191602480820192602092909190829003018186803b15801561133957600080fd5b505afa15801561134d573d6000803e3d6000fd5b505050506040513d602081101561136357600080fd5b5051935061137385858b8b611bf4565b81156113a35760085461139f906001600160701b0380821691600160701b90041663ffffffff611b3016565b600b555b604080518c8152602081018c905281516001600160a01b038f169233927fdccd412f0b1252819cb1fd330b93224ca42612892bb3f4f789976e6d81936496929081900390910190a35050505050505050506001600c81905550915091565b6040518060400160405280600c81526020017f466f6f64636f7572742d4c50000000000000000000000000000000000000000081525081565b6000610b98338484611e33565b6103e881565b600c54600114611498576040805162461bcd60e51b8152602060048201526011602482015270119bdbd918dbdd5c9d0e881313d0d2d151607a1b604482015290519081900360640190fd5b6000600c55600654600754600854604080516370a0823160e01b815230600482015290516001600160a01b0394851694909316926115479285928792611542926001600160701b03169185916370a0823191602480820192602092909190829003018186803b15801561150a57600080fd5b505afa15801561151e573d6000803e3d6000fd5b505050506040513d602081101561153457600080fd5b50519063ffffffff611b9c16565b61197d565b600854604080516370a0823160e01b815230600482015290516115ae928492879261154292600160701b90046001600160701b0316916001600160a01b038616916370a0823191602480820192602092909190829003018186803b15801561150a57600080fd5b50506001600c5550565b6005546001600160a01b031681565b6007546001600160a01b031681565b4284101561162b576040805162461bcd60e51b815260206004820152601260248201527f466f6f64636f7572743a20455850495245440000000000000000000000000000604482015290519081900360640190fd5b6003546001600160a01b0380891660008181526004602090815260408083208054600180820190925582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98186015280840196909652958d166060860152608085018c905260a085019590955260c08085018b90528151808603909101815260e0850182528051908301207f19010000000000000000000000000000000000000000000000000000000000006101008601526101028501969096526101228085019690965280518085039096018652610142840180825286519683019690962095839052610162840180825286905260ff89166101828501526101a284018890526101c28401879052519193926101e280820193601f1981019281900390910190855afa158015611761573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906117975750886001600160a01b0316816001600160a01b0316145b6117e8576040805162461bcd60e51b815260206004820152601c60248201527f466f6f64636f7572743a20494e56414c49445f5349474e415455524500000000604482015290519081900360640190fd5b6117f3898989611dd1565b505050505050505050565b600260209081526000928352604080842090915290825290205481565b600c54600114611866576040805162461bcd60e51b8152602060048201526011602482015270119bdbd918dbdd5c9d0e881313d0d2d151607a1b604482015290519081900360640190fd5b6000600c55600654604080516370a0823160e01b81523060048201529051611976926001600160a01b0316916370a08231916024808301926020929190829003018186803b1580156118b757600080fd5b505afa1580156118cb573d6000803e3d6000fd5b505050506040513d60208110156118e157600080fd5b5051600754604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b15801561192e57600080fd5b505afa158015611942573d6000803e3d6000fd5b505050506040513d602081101561195857600080fd5b50516008546001600160701b0380821691600160701b900416611bf4565b6001600c55565b604080518082018252601981527f7472616e7366657228616464726573732c75696e74323536290000000000000060209182015281516001600160a01b0385811660248301526044808301869052845180840390910181526064909201845291810180516001600160e01b03167fa9059cbb000000000000000000000000000000000000000000000000000000001781529251815160009460609489169392918291908083835b60208310611a435780518252601f199092019160209182019101611a24565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114611aa5576040519150601f19603f3d011682016040523d82523d6000602084013e611aaa565b606091505b5091509150818015611ad8575080511580611ad85750808060200190516020811015611ad557600080fd5b50515b611b29576040805162461bcd60e51b815260206004820152601a60248201527f466f6f64636f7572743a205452414e534645525f4641494c4544000000000000604482015290519081900360640190fd5b5050505050565b6000811580611b4b57505080820282828281611b4857fe5b04145b610b9c576040805162461bcd60e51b815260206004820152601460248201527f64732d6d6174682d6d756c2d6f766572666c6f77000000000000000000000000604482015290519081900360640190fd5b80820382811115610b9c576040805162461bcd60e51b815260206004820152601560248201527f64732d6d6174682d7375622d756e646572666c6f770000000000000000000000604482015290519081900360640190fd5b6001600160701b038411801590611c1257506001600160701b038311155b611c63576040805162461bcd60e51b815260206004820152601360248201527f466f6f64636f7572743a204f564552464c4f5700000000000000000000000000604482015290519081900360640190fd5b60085463ffffffff42811691600160e01b90048116820390811615801590611c9357506001600160701b03841615155b8015611ca757506001600160701b03831615155b15611d18578063ffffffff16611cd585611cc0866121fe565b6001600160e01b03169063ffffffff61221016565b600980546001600160e01b03929092169290920201905563ffffffff8116611d0084611cc0876121fe565b600a80546001600160e01b0392909216929092020190555b600880546dffffffffffffffffffffffffffff19166001600160701b03888116919091177fffffffff0000000000000000000000000000ffffffffffffffffffffffffffff16600160701b8883168102919091176001600160e01b0316600160e01b63ffffffff871602179283905560408051848416815291909304909116602082015281517f1c411e9a96e071241c2f21f7726b17ae89e3cab4c78be50e062b03a9fffbbad1929181900390910190a1505050505050565b6001600160a01b03808416600081815260026020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b038316600090815260016020526040902054611e5c908263ffffffff611b9c16565b6001600160a01b038085166000908152600160205260408082209390935590841681522054611e91908263ffffffff61223516565b6001600160a01b0380841660008181526001602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b600080600560009054906101000a90046001600160a01b03166001600160a01b031663017e7e586040518163ffffffff1660e01b815260040160206040518083038186803b158015611f3e57600080fd5b505afa158015611f52573d6000803e3d6000fd5b505050506040513d6020811015611f6857600080fd5b5051600b546001600160a01b03821615801594509192509061204c578015612047576000611fab610ef76001600160701b0388811690881663ffffffff611b3016565b90506000611fb883612060565b905080821115612044576000611feb6008610a45611fdc868663ffffffff611b9c16565b6000549063ffffffff611b3016565b9050600061202061200384600863ffffffff611b3016565b61201486601163ffffffff611b3016565b9063ffffffff61223516565b9050600081838161202d57fe5b04905080156120405761204087826120b2565b5050505b50505b612058565b8015612058576000600b555b505092915050565b600060038211156120a3575080600160028204015b8181101561209d5780915060028182858161208c57fe5b04018161209557fe5b049050612075565b506120ad565b81156120ad575060015b919050565b6000546120c5908263ffffffff61223516565b60009081556001600160a01b0383168152600160205260409020546120f0908263ffffffff61223516565b6001600160a01b03831660008181526001602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b60008183106121575781612159565b825b9392505050565b6001600160a01b038216600090815260016020526040902054612189908263ffffffff611b9c16565b6001600160a01b038316600090815260016020526040812091909155546121b6908263ffffffff611b9c16565b60009081556040805183815290516001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef919081900360200190a35050565b6001600160701b0316600160701b0290565b60006001600160701b0382166001600160e01b0384168161222d57fe5b049392505050565b80820182811015610b9c576040805162461bcd60e51b815260206004820152601460248201527f64732d6d6174682d6164642d6f766572666c6f77000000000000000000000000604482015290519081900360640190fdfe466f6f64636f7572743a20494e53554646494349454e545f4c49515549444954595f4255524e4544466f6f64636f7572743a20494e53554646494349454e545f494e5055545f414d4f554e54466f6f64636f7572743a20494e53554646494349454e545f4c4951554944495459466f6f64636f7572743a20494e53554646494349454e545f4f55545055545f414d4f554e54466f6f64636f7572743a20494e53554646494349454e545f4c49515549444954595f4d494e544544a265627a7a723158200f7b86720707d538cf13c7f469bae88986db1ac9bc63473574ed5a876ecf6b7764736f6c63430005100032454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c75696e7432353620636861696e49642c6164647265737320766572696679696e67436f6e747261637429

Deployed ByteCode Sourcemap

10454:9710:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10454:9710:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17673:1898;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;17673:1898:0;;;;;;;;;;;;-1:-1:-1;;;;;17673:1898:0;;;;;;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;17673:1898:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;17673:1898:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;-1:-1;17673:1898:0;;-1:-1:-1;17673:1898:0;-1:-1:-1;17673:1898:0;:::i;:::-;;4989:45;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;4989:45:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11475:231;;;:::i;:::-;;;;-1:-1:-1;;;;;11475:231:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7045:147;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;7045:147:0;;-1:-1:-1;;;;;7045:147:0;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;10764:21;;;:::i;:::-;;;;-1:-1:-1;;;;;10764:21:0;;;;;;;;;;;;;;5136:24;;;:::i;:::-;;;;;;;;;;;;;;;;7347:301;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;7347:301:0;;;;;;;;;;;;;;;;;:::i;5428:108::-;;;:::i;5094:35::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;5285:31;;;:::i;12535:210::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;12535:210:0;;;;;;;;;;:::i;11115:32::-;;;:::i;11154:::-;;;:::i;14743:1240::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;14743:1240:0;-1:-1:-1;;;;;14743:1240:0;;:::i;5167:41::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;5167:41:0;-1:-1:-1;;;;;5167:41:0;;:::i;11193:17::-;;;:::i;5543:38::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;5543:38:0;-1:-1:-1;;;;;5543:38:0;;:::i;16095:1466::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;16095:1466:0;-1:-1:-1;;;;;16095:1466:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;5041:46;;;:::i;7200:139::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;7200:139:0;;-1:-1:-1;;;;;7200:139:0;;;;;;:::i;10585:46::-;;;:::i;19620:334::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;19620:334:0;-1:-1:-1;;;;;19620:334:0;;:::i;10735:22::-;;;:::i;10792:21::-;;;:::i;7656:674::-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;;7656:674:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7656:674:0;;;;;;;;:::i;5215:61::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;5215:61:0;;;;;;;;;;:::i;20003:158::-;;;:::i;17673:1898::-;11366:8;;11378:1;11366:13;11358:43;;;;;-1:-1:-1;;;11358:43:0;;;;;;;;;;;;-1:-1:-1;;;11358:43:0;;;;;;;;;;;;;;;11423:1;11412:8;:12;17787:14;;;;:32;;;17818:1;17805:10;:14;17787:32;17779:82;;;;-1:-1:-1;;;17779:82:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17873:17;17892;17914:13;:11;:13::i;:::-;-1:-1:-1;17872:55:0;;-1:-1:-1;17872:55:0;-1:-1:-1;;;;;;17961:22:0;;;;:48;;;;-1:-1:-1;;;;;;17987:22:0;;;;17961:48;17953:94;;;;-1:-1:-1;;;17953:94:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18192:6;;18227;;18060:13;;;;-1:-1:-1;;;;;18192:6:0;;;;18227;;;;18252:13;;;;;;;:30;;-1:-1:-1;;;;;;18269:13:0;;;;;;;;18252:30;18244:64;;;;;-1:-1:-1;;;18244:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;18323:14;;18319:58;;18339:38;18353:7;18362:2;18366:10;18339:13;:38::i;:::-;18426:14;;18422:58;;18442:38;18456:7;18465:2;18469:10;18442:13;:38::i;:::-;18529:15;;18525:97;;18563:2;-1:-1:-1;;;;;18546:34:0;;18581:10;18593;18605;18617:4;;18546:76;;;;;;;;;;;;;-1:-1:-1;;;;;18546:76:0;-1:-1:-1;;;;;18546:76:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;18546:76:0;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18546:76:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18546:76:0;;;;18525:97;18644:40;;;-1:-1:-1;;;18644:40:0;;18678:4;18644:40;;;;;;-1:-1:-1;;;;;18644:25:0;;;-1:-1:-1;;18644:40:0;;;;;;;;;;;;;;:25;:40;;;5:2:-1;;;;30:1;27;20:12;5:2;18644:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18644:40:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;18644:40:0;18706;;;-1:-1:-1;;;18706:40:0;;18740:4;18706:40;;;;;;18644;;-1:-1:-1;;;;;;18706:25:0;;;-1:-1:-1;;18706:40:0;;;;;18644;;18706;;;;;;;;:25;:40;;;5:2:-1;;;;30:1;27;20:12;5:2;18706:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18706:40:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;18706:40:0;;-1:-1:-1;18768:14:0;;-1:-1:-1;;;;;;;18796:22:0;;;;;18785:33;;:75;;18859:1;18785:75;;;-1:-1:-1;;;;;18833:22:0;;;;;18821:35;;18785:75;18768:92;-1:-1:-1;18871:14:0;-1:-1:-1;;;;;18899:22:0;;;;;18888:33;;:75;;18962:1;18888:75;;;-1:-1:-1;;;;;18936:22:0;;;;;18924:35;;18888:75;18871:92;;18994:1;18982:9;:13;:30;;;;19011:1;18999:9;:13;18982:30;18974:79;;;;-1:-1:-1;;;18974:79:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19139:21;19164:42;19188:17;:9;19202:2;19188:17;:13;:17;:::i;:::-;19164:19;:8;19177:5;19164:19;:12;:19;:::i;:::-;:23;:42;:23;:42;:::i;:::-;19139:68;-1:-1:-1;19218:21:0;19243:42;19267:17;:9;19281:2;19267:17;:13;:17;:::i;19243:42::-;19218:68;-1:-1:-1;19347:44:0;19382:8;19347:30;-1:-1:-1;;;;;19347:15:0;;;;:30;;:19;:30::i;:::-;:34;:44;:34;:44;:::i;:::-;19305:38;:16;19326;19305:38;:20;:38;:::i;:::-;:86;;19297:111;;;;;-1:-1:-1;;;19297:111:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;11435:1;;19432:49;19440:8;19450;19460:9;19471;19432:7;:49::i;:::-;19497:66;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;19497:66:0;;;19502:10;;19497:66;;;;;;;;;-1:-1:-1;;11458:1:0;11447:8;:12;-1:-1:-1;;;;;;;;;17673:1898:0:o;4989:45::-;;;;;;;;;;;;;;;;;;;:::o;11475:231::-;11608:8;;-1:-1:-1;;;;;11608:8:0;;;;-1:-1:-1;;;11639:8:0;;;;;;-1:-1:-1;;;11680:18:0;;;;;11475:231::o;7045:147::-;7109:4;7126:36;7135:10;7147:7;7156:5;7126:8;:36::i;:::-;-1:-1:-1;7180:4:0;7045:147;;;;;:::o;10764:21::-;;;-1:-1:-1;;;;;10764:21:0;;:::o;5136:24::-;;;;:::o;7347:301::-;-1:-1:-1;;;;;7446:15:0;;7425:4;7446:15;;;:9;:15;;;;;;;;7462:10;7446:27;;;;;;;;-1:-1:-1;;7446:39:0;7442:140;;-1:-1:-1;;;;;7532:15:0;;;;;;:9;:15;;;;;;;;7548:10;7532:27;;;;;;;;:38;;7564:5;7532:31;:38::i;:::-;-1:-1:-1;;;;;7502:15:0;;;;;;:9;:15;;;;;;;;7518:10;7502:27;;;;;;;:68;7442:140;7592:26;7602:4;7608:2;7612:5;7592:9;:26::i;:::-;-1:-1:-1;7636:4:0;7347:301;;;;;:::o;5428:108::-;5470:66;5428:108;:::o;5094:35::-;5127:2;5094:35;:::o;5285:31::-;;;;:::o;12535:210::-;12631:7;;-1:-1:-1;;;;;12631:7:0;12617:10;:21;12609:54;;;;;-1:-1:-1;;;12609:54:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;12694:6;:16;;-1:-1:-1;;;;;12694:16:0;;;;;;;;;;;12721:6;:16;;;;;;;;;;;12535:210::o;11115:32::-;;;;:::o;11154:::-;;;;:::o;14743:1240::-;14792:14;11366:8;;11378:1;11366:13;11358:43;;;;;-1:-1:-1;;;11358:43:0;;;;;;;;;;;;-1:-1:-1;;;11358:43:0;;;;;;;;;;;;;;;11423:1;11412:8;:12;;;11423:1;14861:13;:11;:13::i;:::-;-1:-1:-1;14923:6:0;;14916:39;;;-1:-1:-1;;;14916:39:0;;14949:4;14916:39;;;;;;14819:55;;-1:-1:-1;14819:55:0;;-1:-1:-1;;;;;;;;14923:6:0;;;;-1:-1:-1;;14916:39:0;;;;;;;;;;;;;;14923:6;14916:39;;;5:2:-1;;;;30:1;27;20:12;5:2;14916:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;14916:39:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;14916:39:0;14989:6;;14982:39;;;-1:-1:-1;;;14982:39:0;;15015:4;14982:39;;;;;;14916;;-1:-1:-1;;;;;;;;14989:6:0;;;;-1:-1:-1;;14982:39:0;;;;;14916;;14982;;;;;;;;14989:6;14982:39;;;5:2:-1;;;;30:1;27;20:12;5:2;14982:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;14982:39:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;14982:39:0;;-1:-1:-1;15032:12:0;15047:23;:8;-1:-1:-1;;;;;15047:23:0;;:12;:23::i;:::-;15032:38;-1:-1:-1;15081:12:0;15096:23;:8;-1:-1:-1;;;;;15096:23:0;;:12;:23::i;:::-;15081:38;;15132:10;15145:30;15154:9;15165;15145:8;:30::i;:::-;15186:17;15206:11;15132:43;;-1:-1:-1;15310:17:0;15306:352;;15356:54;10626:5;15356:31;15366:20;:7;15378;15366:20;:11;:20;:::i;:::-;15356:9;:31::i;:54::-;15344:66;;15424:36;15438:1;10626:5;15424;:36::i;:::-;15306:352;;;15560:86;-1:-1:-1;;;;;15569:37:0;;:25;:7;15581:12;15569:11;:25::i;:::-;:37;;;;;;-1:-1:-1;;;;;15608:37:0;;:25;:7;15620:12;15608:11;:25::i;:::-;:37;;;;;;15560:8;:86::i;:::-;15548:98;;15306:352;15688:1;15676:9;:13;15668:66;;;;-1:-1:-1;;;15668:66:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15745:20;15751:2;15755:9;15745:5;:20::i;:::-;15778:49;15786:8;15796;15806:9;15817;15778:7;:49::i;:::-;15842:5;15838:47;;;15876:8;;15857:28;;-1:-1:-1;;;;;15862:8:0;;;;-1:-1:-1;;;15876:8:0;;;15857:18;:28::i;:::-;15849:5;:36;15838:47;15941:34;;;;;;;;;;;;;;15946:10;;15941:34;;;;;;;;-1:-1:-1;;11458:1:0;11447:8;:12;-1:-1:-1;14743:1240:0;;;-1:-1:-1;;;;;;14743:1240:0:o;5167:41::-;;;;;;;;;;;;;:::o;11193:17::-;;;;:::o;5543:38::-;;;;;;;;;;;;;:::o;16095:1466::-;16144:12;16158;11366:8;;11378:1;11366:13;11358:43;;;;;-1:-1:-1;;;11358:43:0;;;;;;;;;;;;-1:-1:-1;;;11358:43:0;;;;;;;;;;;;;;;11423:1;11412:8;:12;;;11423:1;16225:13;:11;:13::i;:::-;-1:-1:-1;16282:6:0;;16363;;16442:40;;;-1:-1:-1;;;16442:40:0;;16476:4;16442:40;;;;;;16183:55;;-1:-1:-1;16183:55:0;;-1:-1:-1;;;;;;16282:6:0;;;;16363;;;-1:-1:-1;;16282:6:0;;-1:-1:-1;;16442:40:0;;;;;;;;;;;;;;16282:6;16442:40;;;5:2:-1;;;;30:1;27;20:12;5:2;16442:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16442:40:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;16442:40:0;16509;;;-1:-1:-1;;;16509:40:0;;16543:4;16509:40;;;;;;16442;;-1:-1:-1;;;;;;;;16509:25:0;;;-1:-1:-1;;16509:40:0;;;;;16442;;16509;;;;;;;:25;:40;;;5:2:-1;;;;30:1;27;20:12;5:2;16509:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16509:40:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;16509:40:0;16595:4;16560:14;16577:24;;;:9;16509:40;16577:24;;;;;16509:40;;-1:-1:-1;16627:30:0;16636:9;16647;16627:8;:30::i;:::-;16668:17;16688:11;16614:43;;-1:-1:-1;16688:11:0;16798:23;:9;16812:8;16798:23;:13;:23;:::i;:::-;:38;;;;;;;-1:-1:-1;16931:12:0;16905:23;:9;16919:8;16905:23;:13;:23;:::i;:::-;:38;;;;;;16895:48;;17020:1;17010:7;:11;:26;;;;;17035:1;17025:7;:11;17010:26;17002:79;;;;-1:-1:-1;;;17002:79:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17092:31;17106:4;17113:9;17092:5;:31::i;:::-;17134:35;17148:7;17157:2;17161:7;17134:13;:35::i;:::-;17180;17194:7;17203:2;17207:7;17180:13;:35::i;:::-;17237:40;;;-1:-1:-1;;;17237:40:0;;17271:4;17237:40;;;;;;-1:-1:-1;;;;;17237:25:0;;;-1:-1:-1;;17237:40:0;;;;;;;;;;;;;;:25;:40;;;5:2:-1;;;;30:1;27;20:12;5:2;17237:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17237:40:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;17237:40:0;17299;;;-1:-1:-1;;;17299:40:0;;17333:4;17299:40;;;;;;17237;;-1:-1:-1;;;;;;17299:25:0;;;-1:-1:-1;;17299:40:0;;;;;17237;;17299;;;;;;;;:25;:40;;;5:2:-1;;;;30:1;27;20:12;5:2;17299:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17299:40:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;17299:40:0;;-1:-1:-1;17352:49:0;17360:8;17299:40;17380:9;17391;17352:7;:49::i;:::-;17416:5;17412:47;;;17450:8;;17431:28;;-1:-1:-1;;;;;17436:8:0;;;;-1:-1:-1;;;17450:8:0;;;17431:18;:28::i;:::-;17423:5;:36;17412:47;17515:38;;;;;;;;;;;;;;-1:-1:-1;;;;;17515:38:0;;;17520:10;;17515:38;;;;;;;;;;;11435:1;;;;;;;;;11458;11447:8;:12;;;;16095:1466;;;:::o;5041:46::-;;;;;;;;;;;;;;;;;;;:::o;7200:139::-;7260:4;7277:32;7287:10;7299:2;7303:5;7277:9;:32::i;10585:46::-;10626:5;10585:46;:::o;19620:334::-;11366:8;;11378:1;11366:13;11358:43;;;;;-1:-1:-1;;;11358:43:0;;;;;;;;;;;;-1:-1:-1;;;11358:43:0;;;;;;;;;;;;;;;11423:1;11412:8;:12;19689:6;;19739;;19843:8;;19798:40;;;-1:-1:-1;;;19798:40:0;;19832:4;19798:40;;;;;;-1:-1:-1;;;;;19689:6:0;;;;19739;;;;19771:82;;19689:6;;19794:2;;19798:54;;-1:-1:-1;;;;;19843:8:0;;19689:6;;-1:-1:-1;;19798:40:0;;;;;;;;;;;;;;;19689:6;19798:40;;;5:2:-1;;;;30:1;27;20:12;5:2;19798:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19798:40:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;19798:40:0;;:54;:44;:54;:::i;:::-;19771:13;:82::i;:::-;19936:8;;19891:40;;;-1:-1:-1;;;19891:40:0;;19925:4;19891:40;;;;;;19864:82;;19878:7;;19887:2;;19891:54;;-1:-1:-1;;;19936:8:0;;-1:-1:-1;;;;;19936:8:0;;-1:-1:-1;;;;;19891:25:0;;;-1:-1:-1;;19891:40:0;;;;;;;;;;;;;;;:25;:40;;;5:2:-1;;;;30:1;27;20:12;19864:82:0;-1:-1:-1;;11458:1:0;11447:8;:12;-1:-1:-1;19620:334:0:o;10735:22::-;;;-1:-1:-1;;;;;10735:22:0;;:::o;10792:21::-;;;-1:-1:-1;;;;;10792:21:0;;:::o;7656:674::-;7802:15;7790:8;:27;;7782:58;;;;;-1:-1:-1;;;7782:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;7956:16;;-1:-1:-1;;;;;8052:13:0;;;7851:14;8052:13;;;:6;:13;;;;;;;;:15;;-1:-1:-1;8052:15:0;;;;;;8001:77;;5470:66;8001:77;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8001:77:0;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;8001:77:0;;;;;7991:88;;;;;;7892:202;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;7892:202:0;;;;;;7868:237;;;;;;;;;8143:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7851:14;;-1:-1:-1;8143:26:0;;;;;-1:-1:-1;;8143:26:0;;;;;;;;;;-1:-1:-1;8143:26:0;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;8143:26:0;;-1:-1:-1;;8143:26:0;;;-1:-1:-1;;;;;;;8188:30:0;;;;;;:59;;-1:-1:-1;;;;;;8222:25:0;;;;;;;8188:59;8180:100;;;;;-1:-1:-1;;;8180:100:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;8291:31;8300:5;8307:7;8316:5;8291:8;:31::i;:::-;7656:674;;;;;;;;;:::o;5215:61::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;20003:158::-;11366:8;;11378:1;11366:13;11358:43;;;;;-1:-1:-1;;;11358:43:0;;;;;;;;;;;;-1:-1:-1;;;11358:43:0;;;;;;;;;;;;;;;11423:1;11412:8;:12;20059:6;;20052:39;;;-1:-1:-1;;;20052:39:0;;20085:4;20052:39;;;;;;20044:109;;-1:-1:-1;;;;;20059:6:0;;-1:-1:-1;;20052:39:0;;;;;;;;;;;;;;20059:6;20052:39;;;5:2:-1;;;;30:1;27;20:12;5:2;20052:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;20052:39:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;20052:39:0;20100:6;;20093:39;;;-1:-1:-1;;;20093:39:0;;20126:4;20093:39;;;;;;-1:-1:-1;;;;;20100:6:0;;;;-1:-1:-1;;20093:39:0;;;;;20052;;20093;;;;;;;;20100:6;20093:39;;;5:2:-1;;;;30:1;27;20:12;5:2;20093:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;20093:39:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;20093:39:0;20134:8;;-1:-1:-1;;;;;20134:8:0;;;;-1:-1:-1;;;20144:8:0;;;20044:7;:109::i;:::-;11458:1;11447:8;:12;20003:158::o;11714:287::-;10690:34;;;;;;;;;;;;;;;;;11842:43;;-1:-1:-1;;;;;11842:43:0;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;11842:43:0;;;;;;25:18:-1;;;61:17;;-1:-1;;;;;182:15;11842:43:0;179:29:-1;160:49;;11831:55:0;;;;-1:-1:-1;;11810:17:0;;11831:10;;;11842:43;11831:55;;;25:18:-1;11831:55:0;;25:18:-1;36:153;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;11831:55:0;;;;;;;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;11795:91:0;;;;11905:7;:57;;;;-1:-1:-1;11917:11:0;;:16;;:44;;;11948:4;11937:24;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;11937:24:0;11917:44;11897:96;;;;;-1:-1:-1;;;11897:96:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;11714:287;;;;;:::o;4758:142::-;4810:6;4837;;;:30;;-1:-1:-1;;4852:5:0;;;4866:1;4861;4852:5;4861:1;4847:15;;;;;:20;4837:30;4829:63;;;;;-1:-1:-1;;;4829:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;4621:129;4705:5;;;4700:16;;;;4692:50;;;;;-1:-1:-1;;;4692:50:0;;;;;;;;;;;;;;;;;;;;;;;;;;;12830:860;-1:-1:-1;;;;;12942:23:0;;;;;:50;;-1:-1:-1;;;;;;12969:23:0;;;12942:50;12934:82;;;;;-1:-1:-1;;;12934:82:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;13131:18;;13058:23;:15;:23;;;-1:-1:-1;;;13131:18:0;;;;13114:35;;;13187:15;;;;;;:33;;-1:-1:-1;;;;;;13206:14:0;;;;13187:33;:51;;;;-1:-1:-1;;;;;;13224:14:0;;;;13187:51;13183:336;;;13393:11;13340:64;;13345:44;13379:9;13345:27;13362:9;13345:16;:27::i;:::-;-1:-1:-1;;;;;13345:33:0;;;:44::i;:::-;13316:20;:88;;-1:-1:-1;;;;;13340:50:0;;;;:64;;;;13316:88;;;13443:64;;;13448:44;13482:9;13448:27;13465:9;13448:16;:27::i;:44::-;13419:20;:88;;-1:-1:-1;;;;;13443:50:0;;;;:64;;;;13419:88;;;13183:336;13529:8;:28;;-1:-1:-1;;13529:28:0;-1:-1:-1;;;;;13529:28:0;;;;;;;13568;;-1:-1:-1;;;13568:28:0;;;;;;;;;-1:-1:-1;;;;;13607:35:0;-1:-1:-1;;;13607:35:0;;;;;;;;;13658:24;;;13663:8;;;13658:24;;13673:8;;;;;;;13658:24;;;;;;;;;;;;;;;;;12830:860;;;;;;:::o;6640:169::-;-1:-1:-1;;;;;6721:16:0;;;;;;;:9;:16;;;;;;;;:25;;;;;;;;;;;;;:33;;;6770:31;;;;;;;;;;;;;;;;;6640:169;;;:::o;6817:220::-;-1:-1:-1;;;;;6911:15:0;;;;;;-1:-1:-1;6911:15:0;;;;;;:26;;6931:5;6911:19;:26::i;:::-;-1:-1:-1;;;;;6893:15:0;;;;;;;-1:-1:-1;6893:15:0;;;;;;:44;;;;6964:13;;;;;;;:24;;6982:5;6964:17;:24::i;:::-;-1:-1:-1;;;;;6948:13:0;;;;;;;-1:-1:-1;6948:13:0;;;;;;;;;:40;;;;7004:25;;;;;;;6948:13;;7004:25;;;;;;;;;;;;;6817:220;;;:::o;13779:852::-;13909:7;;13891:34;;;;;;;;13852:10;;;;-1:-1:-1;;;;;13909:7:0;;;;13891:32;;:34;;;;;;;;;;;;;;;13909:7;13891:34;;;5:2:-1;;;;30:1;27;20:12;5:2;13891:34:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;13891:34:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;13891:34:0;13988:5;;-1:-1:-1;;;;;13944:19:0;;;;;;-1:-1:-1;13891:34:0;;-1:-1:-1;13988:5:0;14019:605;;14049:11;;14045:509;;14081:10;14094:41;14104:30;-1:-1:-1;;;;;14104:15:0;;;;:30;;:19;:30::i;14094:41::-;14081:54;;14154:14;14171:17;14181:6;14171:9;:17::i;:::-;14154:34;;14219:9;14211:5;:17;14207:332;;;14253:14;14270:44;14312:1;14270:37;14286:20;:5;14296:9;14286:20;:9;:20;:::i;:::-;14270:11;;;:37;:15;:37;:::i;:44::-;14253:61;-1:-1:-1;14337:16:0;14356:35;14374:16;:9;14388:1;14374:16;:13;:16;:::i;:::-;14356:13;:5;14366:2;14356:13;:9;:13;:::i;:::-;:17;:35;:17;:35;:::i;:::-;14337:54;;14414:14;14443:11;14431:9;:23;;;;;;;-1:-1:-1;14481:13:0;;14477:42;;14496:23;14502:5;14509:9;14496:5;:23::i;:::-;14207:332;;;;14045:509;;;14019:605;;;14575:11;;14571:53;;14611:1;14603:5;:9;14571:53;13779:852;;;;;;:::o;8624:303::-;8669:6;8696:1;8692;:5;8688:232;;;-1:-1:-1;8718:1:0;8751;8747;8743:5;;:9;8767:92;8778:1;8774;:5;8767:92;;;8804:1;8800:5;;8842:1;8837;8833;8829;:5;;;;;;:9;8828:15;;;;;;8824:19;;8767:92;;;8688:232;;;;8880:6;;8876:44;;-1:-1:-1;8907:1:0;8876:44;8624:303;;;:::o;6214:201::-;6287:11;;:22;;6303:5;6287:22;:15;:22;:::i;:::-;6273:11;:36;;;-1:-1:-1;;;;;6336:13:0;;;;-1:-1:-1;6336:13:0;;;;;;:24;;6354:5;6336:17;:24::i;:::-;-1:-1:-1;;;;;6320:13:0;;;;;;-1:-1:-1;6320:13:0;;;;;;;;:40;;;;6376:31;;;;;;;6320:13;;;;6376:31;;;;;;;;;;6214:201;;:::o;8410:96::-;8462:6;8489:1;8485;:5;:13;;8497:1;8485:13;;;8493:1;8485:13;8481:17;8410:96;-1:-1:-1;;;8410:96:0:o;6423:209::-;-1:-1:-1;;;;;6502:15:0;;;;;;-1:-1:-1;6502:15:0;;;;;;:26;;6522:5;6502:19;:26::i;:::-;-1:-1:-1;;;;;6484:15:0;;;;;;-1:-1:-1;6484:15:0;;;;;:44;;;;6553:11;:22;;6569:5;6553:15;:22::i;:::-;6539:11;:36;;;6591:33;;;;;;;;-1:-1:-1;;;;;6591:33:0;;;;;;;;;;;;;6423:209;;:::o;9196:120::-;-1:-1:-1;;;;;9272:10:0;-1:-1:-1;;;9272:17:0;;9196:120::o;9387:108::-;9447:9;-1:-1:-1;;;;;9477:10:0;;-1:-1:-1;;;;;9473:14:0;;9477:10;9473:14;;;;;;9387:108;-1:-1:-1;;;9387:108:0:o;4485:128::-;4569:5;;;4564:16;;;;4556:49;;;;;-1:-1:-1;;;4556:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;

Swarm Source

bzzr://0f7b86720707d538cf13c7f469bae88986db1ac9bc63473574ed5a876ecf6b77
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.