Contract 0x61c960d0337f1efe46bc7b1110ba8c4e60dd2017

 
Txn Hash
Block
From
To
Value [Txn Fee]
0x46bb507883d6d934b928326554c78999fc1fca26855b83c2afb5e13f637281b394103092021-07-23 14:10:0610 hrs 8 mins ago0x20165fcc2e3ad87b69e63a6fdabf9c6025209547 IN  0x61c960d0337f1efe46bc7b1110ba8c4e60dd20170 BNB0.00022143
0x0f971be5d8ff35c184531367e05722f48d27fb25b99811ebd1ebb4ae9a571c7694101452021-07-23 14:01:3410 hrs 16 mins ago0x8c847b8f27cbbcdd4073db3d13bd6768aa66f7b7 IN  0x61c960d0337f1efe46bc7b1110ba8c4e60dd20170 BNB0.00022143
0xf79f9fba9b9312cbd5761c02b49bb9cdb4e716e99d447098532825e734f5e6ad94069562021-07-23 11:19:5412 hrs 58 mins ago0xa9c16743ae96b52bfd8f947428181194fc8070d4 IN  0x61c960d0337f1efe46bc7b1110ba8c4e60dd20170 BNB0.00022143
0xf3c35b83c360eabd161ed87b629085e4f76182ac21aa4c382b4dca447467b3c194023032021-07-23 7:26:4716 hrs 51 mins ago0x7a8ebb4c3bea368213a548b44ba664c27140adc3 IN  0x61c960d0337f1efe46bc7b1110ba8c4e60dd20170 BNB0.00022143
0x8e2e30881136f80e9c86d75bcc96f01179f26c96a7945cce009cb798a1617c4f93962182021-07-23 2:22:2421 hrs 55 mins ago0x70c6e88fdff369e8790e0ebbe43f0618420b5e3e IN  0x61c960d0337f1efe46bc7b1110ba8c4e60dd20170 BNB0.00018004
0xaf6241c4452b1e22e65880ff30dc3f6765ad94671e7e5a00d1c16f159759d2b393961722021-07-23 2:20:0621 hrs 58 mins ago0xc4273b52ef5d5bd80536eac7f83d8116af19e306 IN  0x61c960d0337f1efe46bc7b1110ba8c4e60dd20170 BNB0.000072255
0xa6a5c1ddf2ec937dd0cdd873a7be8b1cff6818a35881d4970865279f9905b8cb93961682021-07-23 2:19:5421 hrs 58 mins ago0xc4273b52ef5d5bd80536eac7f83d8116af19e306 IN  0x61c960d0337f1efe46bc7b1110ba8c4e60dd20170 BNB0.000072255
0x72155a1109d75c912cf60496b9ad6950dbc0c7cc65f38480db29c199cb8022e493938332021-07-23 0:23:0923 hrs 55 mins ago0x70c6e88fdff369e8790e0ebbe43f0618420b5e3e IN  0x61c960d0337f1efe46bc7b1110ba8c4e60dd20170 BNB0.00018004
0x49d25cffce17d02041f919bbf1c54e91a6e7c007ffbdfb6692b42e35fae2692793931762021-07-22 23:50:181 day 27 mins ago0xe7f5f178d3767bb005a8743d72121cdbefb44d86 IN  0x61c960d0337f1efe46bc7b1110ba8c4e60dd20170 BNB0.000265716
0x450ebc6931e50f03682140e3ea568c96f2d5cf92ef59519aecfcf9f68a5c3cd393836182021-07-22 15:51:571 day 8 hrs ago0xa9c16743ae96b52bfd8f947428181194fc8070d4 IN  0x61c960d0337f1efe46bc7b1110ba8c4e60dd20170 BNB0.00022143
0x25ee6f107cb93175aad63d0667b0cd97c7bbf3723768df48fa1e408131eedda993832162021-07-22 15:31:511 day 8 hrs ago0x70c6e88fdff369e8790e0ebbe43f0618420b5e3e IN  0x61c960d0337f1efe46bc7b1110ba8c4e60dd20170 BNB0.00022143
0xc89ea563e33b181d79781d9fdd2ecc28417ae346083ab54b687694eab33c002c93747722021-07-22 8:29:341 day 15 hrs ago0x25ed7aca11f2de20c16ce3e9bafcc07f4cd9c919 IN  0x61c960d0337f1efe46bc7b1110ba8c4e60dd20170 BNB0.00022143
0xc58bd280ad5b32f1dba919c4286ba3a6ed69206c23c7098d5164371a7f73c82793728752021-07-22 6:54:431 day 17 hrs ago0xf0cbf1b2d0888e744005f5d603a03a5c4adc31c3 IN  0x61c960d0337f1efe46bc7b1110ba8c4e60dd20170 BNB0.00022143
0x6243abf1b91deb450c3c6928f65a0b2ef3cac943f5236b41f7ddb8a2c483cb1d93714402021-07-22 5:42:581 day 18 hrs ago0x2362c3e5d7f014ab0655aa1dd44b3ac00c911abc IN  0x61c960d0337f1efe46bc7b1110ba8c4e60dd20170 BNB0.00022143
0x57e15b7d7c672a8f72507d8b47d9b059e1a5e1b7164d58fd3ceb0d29f9aef5c193493382021-07-21 11:17:132 days 13 hrs ago0xf6993523e1c7c22dd95a4451bc65b85d63dfa17d IN  0x61c960d0337f1efe46bc7b1110ba8c4e60dd20170 BNB0.00022143
0x90426d346c36a37e0d9e5b77f62c5e1dac52be7742df8d784a22c0d59c431b4d93487952021-07-21 10:50:042 days 13 hrs ago0x005eb9aaffdf0b512569ff53df8cf33b9976154b IN  0x61c960d0337f1efe46bc7b1110ba8c4e60dd20170 BNB0.00022143
0x9025db59f0cc94d7e1200b267fd8f9087baf8ba159e646235792b46b9f36b17293339622021-07-20 22:28:253 days 1 hr ago0xd25c2bd948e0df9a1d5022ec93f3a7dcae74e7c2 IN  0x61c960d0337f1efe46bc7b1110ba8c4e60dd20170 BNB0.00022143
0x93c33d0e5ea9c7f69b7eca43e700c48ce7df9800434b78a70976cfde71c4d6c793293102021-07-20 18:35:483 days 5 hrs ago0x749f328194df5c3e1d1dc0505425dae226e0ab32 IN  0x61c960d0337f1efe46bc7b1110ba8c4e60dd20170 BNB0.00022143
0x1d1e2ebd8520700de7a634a151c2f8f7a9d69e6838ff68ab6d3b96bba372ebf693242102021-07-20 14:20:483 days 9 hrs ago0xaeac8ab9c6bedbf38af6958fed002138c387a3df IN  0x61c960d0337f1efe46bc7b1110ba8c4e60dd20170 BNB0.00022143
0x52723280c2a56ce374b8c88aed0e69c89e5c0a112af1945e1ae46dc90e65b8ca93217552021-07-20 12:17:433 days 12 hrs ago0xaf02d4b72f0b0427b1dc6e29e32195b72dec0a1f IN  0x61c960d0337f1efe46bc7b1110ba8c4e60dd20170 BNB0.00022143
0x3a09f6dc2c820f92ae097427a784c55e71152c44f2571246854c98dc242d7fe393083872021-07-20 1:08:413 days 23 hrs ago0x5a4b07b69fdda260d76de9e045bc427d18784bf8 IN  0x61c960d0337f1efe46bc7b1110ba8c4e60dd20170 BNB0.00022143
0x296ec33ba8351a819c7c0576a6492839ceef300f3ffed620b4d6702fff59ce5193024662021-07-19 20:12:384 days 4 hrs ago0x01e406e443f25d6c8d9ffaf3286dc6563dcb0b5e IN  0x61c960d0337f1efe46bc7b1110ba8c4e60dd20170 BNB0.00022143
0xeebb731420dc6e95b46cd2ad9cdac435721d983a47fcc94a243050dc97b50e5992937532021-07-19 12:55:514 days 11 hrs ago0x98ff109df84ec81833f35432b831159b6db5f24b IN  0x61c960d0337f1efe46bc7b1110ba8c4e60dd20170 BNB0.00022143
0x43bc8765fc70eca0d79d42666a3146344e8c12dfeeae43b1808337a67610edf992901662021-07-19 9:56:304 days 14 hrs ago0x98ff109df84ec81833f35432b831159b6db5f24b IN  0x61c960d0337f1efe46bc7b1110ba8c4e60dd20170 BNB0.00022143
0x69fc18d824730081174e0617221c05783ceb4917025e5e97c406d6d20d6d0cf592866002021-07-19 6:58:124 days 17 hrs ago0x1da74cf6c996e592a9b86d2ad96350a9d6498f98 IN  0x61c960d0337f1efe46bc7b1110ba8c4e60dd20170 BNB0.00022143
[ Download CSV Export 
Latest 1 internal transaction
Parent Txn Hash Block From To Value
0xb1d232e0747eb3f5a3b52d9838366dd17d5ca2ea48ace39a0d48ff49eab7bf9677957612021-05-28 7:07:1556 days 17 hrs ago 0x7d2ce25c28334e40f37b2a068ec8d5a59f11ea54  Contract Creation0 BNB
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
PinkswapPair

Compiler Version
v0.5.16+commit.9c3226ce

Optimization Enabled:
Yes with 999999 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at BscScan.com on 2021-05-28
*/

// Dependency file: contracts/libraries/SafeMath.sol

// pragma solidity =0.5.16;

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

// Dependency file: contracts/interfaces/IPinkswapERC20.sol

// pragma solidity >=0.5.0;

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

// Dependency file: contracts/interfaces/IPinkswapCallee.sol

// pragma solidity >=0.5.0;

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

// Dependency file: contracts/interfaces/IPinkswapFactory.sol

// pragma solidity >=0.5.0;

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

// Dependency file: contracts/interfaces/IERC20.sol

// pragma solidity >=0.5.0;

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

// Dependency file: contracts/libraries/UQ112x112.sol

// pragma solidity =0.5.16;

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

// Dependency file: contracts/libraries/Math.sol

// pragma solidity =0.5.16;

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

// Dependency file: contracts/PinkswapERC20.sol

// pragma solidity =0.5.16;

// import './interfaces/IPinkswapERC20.sol';
// import './libraries/SafeMath.sol';

contract PinkswapERC20 is IPinkswapERC20 {
    using SafeMath for uint;

    string public constant name = 'Pinkswap LPs';
    string public constant symbol = 'Pink-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, 'Pinkswap: 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, 'Pinkswap: INVALID_SIGNATURE');
        _approve(owner, spender, value);
    }
}

// Dependency file: contracts/interfaces/IPinkswapPair.sol

// pragma solidity >=0.5.0;

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

pragma solidity =0.5.16;

// import './interfaces/IPinkswapPair.sol';
// import './PinkswapERC20.sol';
// import './libraries/Math.sol';
// import './libraries/UQ112x112.sol';
// import './interfaces/IERC20.sol';
// import './interfaces/IPinkswapFactory.sol';
// import './interfaces/IPinkswapCallee.sol';

contract PinkswapPair is IPinkswapPair, PinkswapERC20 {
    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, 'Pinkswap: 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))), 'Pinkswap: 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, 'Pinkswap: 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), 'Pinkswap: OVERFLOW');
        uint32 blockTimestamp = uint32(block.timestamp % 2**32);
        uint32 timeElapsed = blockTimestamp - blockTimestampLast; // overflow is desired
        if (timeElapsed > 0 && _reserve0 != 0 && _reserve1 != 0) {
            // * never overflows, and + overflow is desired
            price0CumulativeLast += uint(UQ112x112.encode(_reserve1).uqdiv(_reserve0)) * timeElapsed;
            price1CumulativeLast += uint(UQ112x112.encode(_reserve0).uqdiv(_reserve1)) * timeElapsed;
        }
        reserve0 = uint112(balance0);
        reserve1 = uint112(balance1);
        blockTimestampLast = blockTimestamp;
        emit Sync(reserve0, reserve1);
    }

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

    // this low-level function should be called from a contract which performs // important safety checks
    function mint(address to) external lock returns (uint liquidity) {
        (uint112 _reserve0, uint112 _reserve1,) = getReserves(); // gas savings
        uint balance0 = 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, 'Pinkswap: 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, 'Pinkswap: 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, 'Pinkswap: INSUFFICIENT_OUTPUT_AMOUNT');
        (uint112 _reserve0, uint112 _reserve1,) = getReserves(); // gas savings
        require(amount0Out < _reserve0 && amount1Out < _reserve1, 'Pinkswap: 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, 'Pinkswap: 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) IPinkswapCallee(to).pinkswapCall(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, 'Pinkswap: INSUFFICIENT_INPUT_AMOUNT');
        { // scope for reserve{0,1}Adjusted, avoids stack too deep errors
        uint balance0Adjusted = balance0.mul(1000).sub(amount0In.mul(3));
        uint balance1Adjusted = balance1.mul(1000).sub(amount1In.mul(3));
        require(balance0Adjusted.mul(balance1Adjusted) >= uint(_reserve0).mul(_reserve1).mul(1000**2), 'Pinkswap: 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 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"}]

60806040526001600c5534801561001557600080fd5b506040514690806052612d158239604080519182900360520182208282018252600c83526b50696e6b73776170204c507360a01b6020938401528151808301835260018152603160f81b908401528151808401919091527f8484d07c2101c6c7126c568b7c67888666555fb504407198b8617f029121763e818301527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6606082015260808101949094523060a0808601919091528151808603909101815260c09094019052825192019190912060035550600580546001600160a01b03191633179055612c0e806101076000396000f3fe608060405234801561001057600080fd5b50600436106101b95760003560e01c80636a627842116100f9578063ba9a7a5611610097578063d21220a711610071578063d21220a7146105da578063d505accf146105e2578063dd62ed3e14610640578063fff6cae91461067b576101b9565b8063ba9a7a5614610597578063bc25cf771461059f578063c45a0155146105d2576101b9565b80637ecebe00116100d35780637ecebe00146104d757806389afcb441461050a57806395d89b4114610556578063a9059cbb1461055e576101b9565b80636a6278421461046957806370a082311461049c5780637464fc3d146104cf576101b9565b806323b872dd116101665780633644e515116101405780633644e51514610416578063485cc9551461041e5780635909c0d5146104595780635a3d549314610461576101b9565b806323b872dd146103ad57806330adf81f146103f0578063313ce567146103f8576101b9565b8063095ea7b311610197578063095ea7b3146103155780630dfe16811461036257806318160ddd14610393576101b9565b8063022c0d9f146101be57806306fdde03146102595780630902f1ac146102d6575b600080fd5b610257600480360360808110156101d457600080fd5b81359160208101359173ffffffffffffffffffffffffffffffffffffffff604083013516919081019060808101606082013564010000000081111561021857600080fd5b82018360208201111561022a57600080fd5b8035906020019184600183028401116401000000008311171561024c57600080fd5b509092509050610683565b005b610261610d6d565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561029b578181015183820152602001610283565b50505050905090810190601f1680156102c85780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102de610da6565b604080516dffffffffffffffffffffffffffff948516815292909316602083015263ffffffff168183015290519081900360600190f35b61034e6004803603604081101561032b57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610dfb565b604080519115158252519081900360200190f35b61036a610e12565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b61039b610e2e565b60408051918252519081900360200190f35b61034e600480360360608110156103c357600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060400135610e34565b61039b610f13565b610400610f37565b6040805160ff9092168252519081900360200190f35b61039b610f3c565b6102576004803603604081101561043457600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020013516610f42565b61039b61101b565b61039b611021565b61039b6004803603602081101561047f57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611027565b61039b600480360360208110156104b257600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166113e1565b61039b6113f3565b61039b600480360360208110156104ed57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166113f9565b61053d6004803603602081101561052057600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1661140b565b6040805192835260208301919091528051918290030190f35b6102616118a8565b61034e6004803603604081101561057457600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001356118e1565b61039b6118ee565b610257600480360360208110156105b557600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166118f4565b61036a611aea565b61036a611b06565b610257600480360360e08110156105f857600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c00135611b22565b61039b6004803603604081101561065657600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020013516611dee565b610257611e0b565b600c546001146106f457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f50696e6b737761703a204c4f434b454400000000000000000000000000000000604482015290519081900360640190fd5b6000600c55841515806107075750600084115b61075c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180612b936024913960400191505060405180910390fd5b600080610767610da6565b5091509150816dffffffffffffffffffffffffffff168710801561079a5750806dffffffffffffffffffffffffffff1686105b61080557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f50696e6b737761703a20494e53554646494349454e545f4c4951554944495459604482015290519081900360640190fd5b600654600754600091829173ffffffffffffffffffffffffffffffffffffffff91821691908116908916821480159061086a57508073ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff1614155b6108d557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f50696e6b737761703a20494e56414c49445f544f000000000000000000000000604482015290519081900360640190fd5b8a156108e6576108e6828a8d611ff1565b89156108f7576108f7818a8c611ff1565b86156109d9578873ffffffffffffffffffffffffffffffffffffffff16635ddd1198338d8d8c8c6040518663ffffffff1660e01b8152600401808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f8201169050808301925050509650505050505050600060405180830381600087803b1580156109c057600080fd5b505af11580156109d4573d6000803e3d6000fd5b505050505b604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905173ffffffffffffffffffffffffffffffffffffffff8416916370a08231916024808301926020929190829003018186803b158015610a4557600080fd5b505afa158015610a59573d6000803e3d6000fd5b505050506040513d6020811015610a6f57600080fd5b5051604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905191955073ffffffffffffffffffffffffffffffffffffffff8316916370a0823191602480820192602092909190829003018186803b158015610ae157600080fd5b505afa158015610af5573d6000803e3d6000fd5b505050506040513d6020811015610b0b57600080fd5b5051925060009150506dffffffffffffffffffffffffffff85168a90038311610b35576000610b4b565b89856dffffffffffffffffffffffffffff160383035b9050600089856dffffffffffffffffffffffffffff16038311610b6f576000610b85565b89856dffffffffffffffffffffffffffff160383035b90506000821180610b965750600081115b610beb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180612bb76023913960400191505060405180910390fd5b6000610c1f610c0184600363ffffffff6121fe16565b610c13876103e863ffffffff6121fe16565b9063ffffffff61228416565b90506000610c37610c0184600363ffffffff6121fe16565b9050610c6f620f4240610c636dffffffffffffffffffffffffffff8b8116908b1663ffffffff6121fe16565b9063ffffffff6121fe16565b610c7f838363ffffffff6121fe16565b1015610cec57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f50696e6b737761703a204b000000000000000000000000000000000000000000604482015290519081900360640190fd5b5050610cfa848488886122f6565b60408051838152602081018390528082018d9052606081018c9052905173ffffffffffffffffffffffffffffffffffffffff8b169133917fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d8229181900360800190a350506001600c55505050505050505050565b6040518060400160405280600c81526020017f50696e6b73776170204c5073000000000000000000000000000000000000000081525081565b6008546dffffffffffffffffffffffffffff808216926e0100000000000000000000000000008304909116917c0100000000000000000000000000000000000000000000000000000000900463ffffffff1690565b6000610e083384846125b2565b5060015b92915050565b60065473ffffffffffffffffffffffffffffffffffffffff1681565b60005481565b73ffffffffffffffffffffffffffffffffffffffff831660009081526002602090815260408083203384529091528120547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14610efe5773ffffffffffffffffffffffffffffffffffffffff84166000908152600260209081526040808320338452909152902054610ecc908363ffffffff61228416565b73ffffffffffffffffffffffffffffffffffffffff851660009081526002602090815260408083203384529091529020555b610f09848484612621565b5060019392505050565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b601281565b60035481565b60055473ffffffffffffffffffffffffffffffffffffffff163314610fc857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f50696e6b737761703a20464f5242494444454e00000000000000000000000000604482015290519081900360640190fd5b6006805473ffffffffffffffffffffffffffffffffffffffff9384167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161790915560078054929093169116179055565b60095481565b600a5481565b6000600c5460011461109a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f50696e6b737761703a204c4f434b454400000000000000000000000000000000604482015290519081900360640190fd5b6000600c819055806110aa610da6565b50600654604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905193955091935060009273ffffffffffffffffffffffffffffffffffffffff909116916370a08231916024808301926020929190829003018186803b15801561112457600080fd5b505afa158015611138573d6000803e3d6000fd5b505050506040513d602081101561114e57600080fd5b5051600754604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905192935060009273ffffffffffffffffffffffffffffffffffffffff909216916370a0823191602480820192602092909190829003018186803b1580156111c757600080fd5b505afa1580156111db573d6000803e3d6000fd5b505050506040513d60208110156111f157600080fd5b505190506000611217836dffffffffffffffffffffffffffff871663ffffffff61228416565b9050600061123b836dffffffffffffffffffffffffffff871663ffffffff61228416565b905060006112498787612702565b60005490915080611286576112726103e8610c1361126d878763ffffffff6121fe16565b61288e565b985061128160006103e86128e0565b6112e3565b6112e06dffffffffffffffffffffffffffff89166112aa868463ffffffff6121fe16565b816112b157fe5b046dffffffffffffffffffffffffffff89166112d3868563ffffffff6121fe16565b816112da57fe5b04612990565b98505b6000891161133c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526027815260200180612b456027913960400191505060405180910390fd5b6113468a8a6128e0565b61135286868a8a6122f6565b811561139457600854611390906dffffffffffffffffffffffffffff808216916e01000000000000000000000000000090041663ffffffff6121fe16565b600b555b6040805185815260208101859052815133927f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f928290030190a250506001600c5550949695505050505050565b60016020526000908152604090205481565b600b5481565b60046020526000908152604090205481565b600080600c5460011461147f57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f50696e6b737761703a204c4f434b454400000000000000000000000000000000604482015290519081900360640190fd5b6000600c8190558061148f610da6565b50600654600754604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905194965092945073ffffffffffffffffffffffffffffffffffffffff9182169391169160009184916370a08231916024808301926020929190829003018186803b15801561151157600080fd5b505afa158015611525573d6000803e3d6000fd5b505050506040513d602081101561153b57600080fd5b5051604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905191925060009173ffffffffffffffffffffffffffffffffffffffff8516916370a08231916024808301926020929190829003018186803b1580156115af57600080fd5b505afa1580156115c3573d6000803e3d6000fd5b505050506040513d60208110156115d957600080fd5b5051306000908152600160205260408120549192506115f88888612702565b6000549091508061160f848763ffffffff6121fe16565b8161161657fe5b049a508061162a848663ffffffff6121fe16565b8161163157fe5b04995060008b118015611644575060008a115b611699576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526027815260200180612b6c6027913960400191505060405180910390fd5b6116a330846129a8565b6116ae878d8d611ff1565b6116b9868d8c611ff1565b604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905173ffffffffffffffffffffffffffffffffffffffff8916916370a08231916024808301926020929190829003018186803b15801561172557600080fd5b505afa158015611739573d6000803e3d6000fd5b505050506040513d602081101561174f57600080fd5b5051604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905191965073ffffffffffffffffffffffffffffffffffffffff8816916370a0823191602480820192602092909190829003018186803b1580156117c157600080fd5b505afa1580156117d5573d6000803e3d6000fd5b505050506040513d60208110156117eb57600080fd5b505193506117fb85858b8b6122f6565b811561183d57600854611839906dffffffffffffffffffffffffffff808216916e01000000000000000000000000000090041663ffffffff6121fe16565b600b555b604080518c8152602081018c9052815173ffffffffffffffffffffffffffffffffffffffff8f169233927fdccd412f0b1252819cb1fd330b93224ca42612892bb3f4f789976e6d81936496929081900390910190a35050505050505050506001600c81905550915091565b6040518060400160405280600781526020017f50696e6b2d4c500000000000000000000000000000000000000000000000000081525081565b6000610e08338484612621565b6103e881565b600c5460011461196557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f50696e6b737761703a204c4f434b454400000000000000000000000000000000604482015290519081900360640190fd5b6000600c55600654600754600854604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905173ffffffffffffffffffffffffffffffffffffffff9485169490931692611a419285928792611a3c926dffffffffffffffffffffffffffff169185916370a0823191602480820192602092909190829003018186803b158015611a0457600080fd5b505afa158015611a18573d6000803e3d6000fd5b505050506040513d6020811015611a2e57600080fd5b50519063ffffffff61228416565b611ff1565b600854604080517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529051611ae09284928792611a3c926e01000000000000000000000000000090046dffffffffffffffffffffffffffff169173ffffffffffffffffffffffffffffffffffffffff8616916370a0823191602480820192602092909190829003018186803b158015611a0457600080fd5b50506001600c5550565b60055473ffffffffffffffffffffffffffffffffffffffff1681565b60075473ffffffffffffffffffffffffffffffffffffffff1681565b42841015611b9157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f50696e6b737761703a2045585049524544000000000000000000000000000000604482015290519081900360640190fd5b60035473ffffffffffffffffffffffffffffffffffffffff80891660008181526004602090815260408083208054600180820190925582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98186015280840196909652958d166060860152608085018c905260a085019590955260c08085018b90528151808603909101815260e0850182528051908301207f19010000000000000000000000000000000000000000000000000000000000006101008601526101028501969096526101228085019690965280518085039096018652610142840180825286519683019690962095839052610162840180825286905260ff89166101828501526101a284018890526101c28401879052519193926101e2808201937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081019281900390910190855afa158015611cf2573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811615801590611d6d57508873ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b611dd857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f50696e6b737761703a20494e56414c49445f5349474e41545552450000000000604482015290519081900360640190fd5b611de38989896125b2565b505050505050505050565b600260209081526000928352604080842090915290825290205481565b600c54600114611e7c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f50696e6b737761703a204c4f434b454400000000000000000000000000000000604482015290519081900360640190fd5b6000600c55600654604080517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529051611fea9273ffffffffffffffffffffffffffffffffffffffff16916370a08231916024808301926020929190829003018186803b158015611ef357600080fd5b505afa158015611f07573d6000803e3d6000fd5b505050506040513d6020811015611f1d57600080fd5b5051600754604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905173ffffffffffffffffffffffffffffffffffffffff909216916370a0823191602480820192602092909190829003018186803b158015611f9057600080fd5b505afa158015611fa4573d6000803e3d6000fd5b505050506040513d6020811015611fba57600080fd5b50516008546dffffffffffffffffffffffffffff808216916e0100000000000000000000000000009004166122f6565b6001600c55565b604080518082018252601981527f7472616e7366657228616464726573732c75696e743235362900000000000000602091820152815173ffffffffffffffffffffffffffffffffffffffff85811660248301526044808301869052845180840390910181526064909201845291810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001781529251815160009460609489169392918291908083835b602083106120f757805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016120ba565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114612159576040519150601f19603f3d011682016040523d82523d6000602084013e61215e565b606091505b509150915081801561218c57508051158061218c575080806020019051602081101561218957600080fd5b50515b6121f757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f50696e6b737761703a205452414e534645525f4641494c454400000000000000604482015290519081900360640190fd5b5050505050565b60008115806122195750508082028282828161221657fe5b04145b610e0c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f64732d6d6174682d6d756c2d6f766572666c6f77000000000000000000000000604482015290519081900360640190fd5b80820382811115610e0c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f64732d6d6174682d7375622d756e646572666c6f770000000000000000000000604482015290519081900360640190fd5b6dffffffffffffffffffffffffffff841180159061232257506dffffffffffffffffffffffffffff8311155b61238d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f50696e6b737761703a204f564552464c4f570000000000000000000000000000604482015290519081900360640190fd5b60085463ffffffff428116917c0100000000000000000000000000000000000000000000000000000000900481168203908116158015906123dd57506dffffffffffffffffffffffffffff841615155b80156123f857506dffffffffffffffffffffffffffff831615155b156124a8578063ffffffff1661243b8561241186612a6d565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff169063ffffffff612a9116565b600980547bffffffffffffffffffffffffffffffffffffffffffffffffffffffff929092169290920201905563ffffffff811661247b8461241187612a6d565b600a80547bffffffffffffffffffffffffffffffffffffffffffffffffffffffff92909216929092020190555b600880547fffffffffffffffffffffffffffffffffffff0000000000000000000000000000166dffffffffffffffffffffffffffff888116919091177fffffffff0000000000000000000000000000ffffffffffffffffffffffffffff166e0100000000000000000000000000008883168102919091177bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167c010000000000000000000000000000000000000000000000000000000063ffffffff871602179283905560408051848416815291909304909116602082015281517f1c411e9a96e071241c2f21f7726b17ae89e3cab4c78be50e062b03a9fffbbad1929181900390910190a1505050505050565b73ffffffffffffffffffffffffffffffffffffffff808416600081815260026020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260016020526040902054612657908263ffffffff61228416565b73ffffffffffffffffffffffffffffffffffffffff8085166000908152600160205260408082209390935590841681522054612699908263ffffffff612ad216565b73ffffffffffffffffffffffffffffffffffffffff80841660008181526001602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663017e7e586040518163ffffffff1660e01b815260040160206040518083038186803b15801561276d57600080fd5b505afa158015612781573d6000803e3d6000fd5b505050506040513d602081101561279757600080fd5b5051600b5473ffffffffffffffffffffffffffffffffffffffff821615801594509192509061287a5780156128755760006127ee61126d6dffffffffffffffffffffffffffff88811690881663ffffffff6121fe16565b905060006127fb8361288e565b90508082111561287257600061282961281a848463ffffffff61228416565b6000549063ffffffff6121fe16565b9050600061284e8361284286600563ffffffff6121fe16565b9063ffffffff612ad216565b9050600081838161285b57fe5b049050801561286e5761286e87826128e0565b5050505b50505b612886565b8015612886576000600b555b505092915050565b600060038211156128d1575080600160028204015b818110156128cb578091506002818285816128ba57fe5b0401816128c357fe5b0490506128a3565b506128db565b81156128db575060015b919050565b6000546128f3908263ffffffff612ad216565b600090815573ffffffffffffffffffffffffffffffffffffffff831681526001602052604090205461292b908263ffffffff612ad216565b73ffffffffffffffffffffffffffffffffffffffff831660008181526001602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b600081831061299f57816129a1565b825b9392505050565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600160205260409020546129de908263ffffffff61228416565b73ffffffffffffffffffffffffffffffffffffffff831660009081526001602052604081209190915554612a18908263ffffffff61228416565b600090815560408051838152905173ffffffffffffffffffffffffffffffffffffffff8516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef919081900360200190a35050565b6dffffffffffffffffffffffffffff166e0100000000000000000000000000000290565b60006dffffffffffffffffffffffffffff82167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff841681612aca57fe5b049392505050565b80820182811015610e0c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f64732d6d6174682d6164642d6f766572666c6f77000000000000000000000000604482015290519081900360640190fdfe50696e6b737761703a20494e53554646494349454e545f4c49515549444954595f4d494e54454450696e6b737761703a20494e53554646494349454e545f4c49515549444954595f4255524e454450696e6b737761703a20494e53554646494349454e545f4f55545055545f414d4f554e5450696e6b737761703a20494e53554646494349454e545f494e5055545f414d4f554e54a265627a7a72315820e105ce504be0f12cfbfd6c10f696539c60c8f5568642b5d241b080d11f3cc78764736f6c63430005100032454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c75696e7432353620636861696e49642c6164647265737320766572696679696e67436f6e747261637429

Deployed ByteCode Sourcemap

11547:9679:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11547:9679:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18751:1882;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;18751:1882:0;;;;;;;;;;;;;;;;;;;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;18751:1882:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;18751:1882: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;18751:1882:0;;-1:-1:-1;18751:1882:0;-1:-1:-1;18751:1882:0;:::i;:::-;;5348:44;;;:::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;5348:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12564:231;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7398:147;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;7398:147:0;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;11854:21;;;:::i;:::-;;;;;;;;;;;;;;;;;;;5489:24;;;:::i;:::-;;;;;;;;;;;;;;;;7700:301;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;7700:301:0;;;;;;;;;;;;;;;;;;:::i;5781:108::-;;;:::i;5447:35::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;5638:31;;;:::i;13623:209::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;13623:209:0;;;;;;;;;;;:::i;12205:32::-;;;:::i;12244:::-;;;:::i;15817:1239::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;15817:1239:0;;;;:::i;5520:41::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;5520:41:0;;;;:::i;12283:17::-;;;:::i;5896:38::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;5896:38:0;;;;:::i;17171:1465::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;17171:1465:0;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;5399:41;;;:::i;7553:139::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;7553:139:0;;;;;;;;;:::i;11675:46::-;;;:::i;20682:334::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;20682:334:0;;;;:::i;11825:22::-;;;:::i;11882:21::-;;;:::i;8009:672::-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;8009:672:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;5568:61::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;5568:61:0;;;;;;;;;;;:::i;21065:158::-;;;:::i;18751:1882::-;12456:8;;12468:1;12456:13;12448:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12512:1;12501:8;:12;18865:14;;;;:32;;;18896:1;18883:10;:14;18865:32;18857:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18950:17;18969;18991:13;:11;:13::i;:::-;18949:55;;;;;19051:9;19038:22;;:10;:22;:48;;;;;19077:9;19064:22;;:10;:22;19038:48;19030:93;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19268:6;;19303;;19136:13;;;;19268:6;;;;;19303;;;;19328:13;;;;;;;:30;;;19351:7;19345:13;;:2;:13;;;;19328:30;19320:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19398:14;;19394:58;;19414:38;19428:7;19437:2;19441:10;19414:13;:38::i;:::-;19501:14;;19497:58;;19517:38;19531:7;19540:2;19544:10;19517:13;:38::i;:::-;19604:15;;19600:95;;19637:2;19621:32;;;19654:10;19666;19678;19690:4;;19621:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;;19621:74:0;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19621:74:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19621:74:0;;;;19600:95;19717:40;;;;;;19751:4;19717:40;;;;;;:25;;;;;;:40;;;;;;;;;;;;;;:25;:40;;;5:2:-1;;;;30:1;27;20:12;5:2;19717:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19717:40:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;19717:40:0;19779;;;;;;19813:4;19779:40;;;;;;19717;;-1:-1:-1;19779:25:0;;;;;;:40;;;;;19717;;19779;;;;;;;;:25;:40;;;5:2:-1;;;;30:1;27;20:12;5:2;19779:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19779:40:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;19779:40:0;;-1:-1:-1;19841:14:0;;-1:-1:-1;;19869:22:0;;;;;;19858:33;;:75;;19932:1;19858:75;;;19918:10;19906:9;:22;;;19894:8;:35;19858:75;19841:92;;19944:14;19984:10;19972:9;:22;;;19961:8;:33;:75;;20035:1;19961:75;;;20021:10;20009:9;:22;;;19997:8;:35;19961:75;19944:92;;20067:1;20055:9;:13;:30;;;;20084:1;20072:9;:13;20055:30;20047:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20211:21;20235:40;20258:16;:9;20272:1;20258:16;:13;:16;:::i;:::-;20235:18;:8;20248:4;20235:18;:12;:18;:::i;:::-;:22;:40;:22;:40;:::i;:::-;20211:64;-1:-1:-1;20286:21:0;20310:40;20333:16;:9;20347:1;20333:16;:13;:16;:::i;20310:40::-;20286:64;-1:-1:-1;20411:43:0;20446:7;20411:30;;:15;;;;:30;;;:19;:30;:::i;:::-;:34;:43;:34;:43;:::i;:::-;20369:38;:16;20390;20369:38;:20;:38;:::i;:::-;:85;;20361:109;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12524:1;;20494:49;20502:8;20512;20522:9;20533;20494:7;:49::i;:::-;20559:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20564:10;;20559:66;;;;;;;;;-1:-1:-1;;12547:1:0;12536:8;:12;-1:-1:-1;;;;;;;;;18751:1882:0:o;5348:44::-;;;;;;;;;;;;;;;;;;;:::o;12564:231::-;12697:8;;;;;;;12728;;;;;;;12769:18;;;;;;12564:231::o;7398:147::-;7462:4;7479:36;7488:10;7500:7;7509:5;7479:8;:36::i;:::-;-1:-1:-1;7533:4:0;7398:147;;;;;:::o;11854:21::-;;;;;;:::o;5489:24::-;;;;:::o;7700:301::-;7799:15;;;7778:4;7799:15;;;:9;:15;;;;;;;;7815:10;7799:27;;;;;;;;7835:2;7799:39;7795:140;;7885:15;;;;;;;:9;:15;;;;;;;;7901:10;7885:27;;;;;;;;:38;;7917:5;7885:38;:31;:38;:::i;:::-;7855:15;;;;;;;:9;:15;;;;;;;;7871:10;7855:27;;;;;;;:68;7795:140;7945:26;7955:4;7961:2;7965:5;7945:9;:26::i;:::-;-1:-1:-1;7989:4:0;7700:301;;;;;:::o;5781:108::-;5823:66;5781:108;:::o;5447:35::-;5480:2;5447:35;:::o;5638:31::-;;;;:::o;13623:209::-;13719:7;;;;13705:10;:21;13697:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13781:6;:16;;;;;;;;;;;;;;13808:6;:16;;;;;;;;;;;13623:209::o;12205:32::-;;;;:::o;12244:::-;;;;:::o;15817:1239::-;15866:14;12456:8;;12468:1;12456:13;12448:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12512:1;12501:8;:12;;;12512:1;15935:13;:11;:13::i;:::-;-1:-1:-1;15997:6:0;;15990:39;;;;;;16023:4;15990:39;;;;;;15893:55;;-1:-1:-1;15893:55:0;;-1:-1:-1;15974:13:0;;15997:6;;;;;15990:24;;:39;;;;;;;;;;;;;;15997:6;15990:39;;;5:2:-1;;;;30:1;27;20:12;5:2;15990:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15990:39:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;15990:39:0;16063:6;;16056:39;;;;;;16089:4;16056:39;;;;;;15990;;-1:-1:-1;16040:13:0;;16063:6;;;;;16056:24;;:39;;;;;15990;;16056;;;;;;;;16063:6;16056:39;;;5:2:-1;;;;30:1;27;20:12;5:2;16056:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16056:39:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;16056:39:0;;-1:-1:-1;16106:12:0;16121:23;:8;:23;;;;:12;:23;:::i;:::-;16106:38;-1:-1:-1;16155:12:0;16170:23;:8;:23;;;;:12;:23;:::i;:::-;16155:38;;16206:10;16219:30;16228:9;16239;16219:8;:30::i;:::-;16260:17;16280:11;16206:43;;-1:-1:-1;16384:17:0;16380:352;;16430:54;11716:5;16430:31;16440:20;:7;16452;16440:20;:11;:20;:::i;:::-;16430:9;:31::i;:54::-;16418:66;;16498:36;16512:1;11716:5;16498;:36::i;:::-;16380:352;;;16634:86;16643:37;;;:25;:7;16655:12;16643:25;:11;:25;:::i;:::-;:37;;;;;;16682;;;:25;:7;16694:12;16682:25;:11;:25;:::i;:::-;:37;;;;;;16634:8;:86::i;:::-;16622:98;;16380:352;16762:1;16750:9;:13;16742:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16818:20;16824:2;16828:9;16818:5;:20::i;:::-;16851:49;16859:8;16869;16879:9;16890;16851:7;:49::i;:::-;16915:5;16911:47;;;16949:8;;16930:28;;16949:8;16935;;;;16949;;;;16930:28;:18;:28;:::i;:::-;16922:5;:36;16911:47;17014:34;;;;;;;;;;;;;;17019:10;;17014:34;;;;;;;;-1:-1:-1;;12547:1:0;12536:8;:12;-1:-1:-1;15817:1239:0;;;-1:-1:-1;;;;;;15817:1239:0:o;5520:41::-;;;;;;;;;;;;;:::o;12283:17::-;;;;:::o;5896:38::-;;;;;;;;;;;;;:::o;17171:1465::-;17220:12;17234;12456:8;;12468:1;12456:13;12448:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12512:1;12501:8;:12;;;12512:1;17301:13;:11;:13::i;:::-;-1:-1:-1;17358:6:0;;17439;;17518:40;;;;;;17552:4;17518:40;;;;;;17259:55;;-1:-1:-1;17259:55:0;;-1:-1:-1;17358:6:0;;;;;17439;;;17340:15;;17358:6;;17518:25;;:40;;;;;;;;;;;;;;17358:6;17518:40;;;5:2:-1;;;;30:1;27;20:12;5:2;17518:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17518:40:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;17518:40:0;17585;;;;;;17619:4;17585:40;;;;;;17518;;-1:-1:-1;17569:13:0;;17585:25;;;;;;:40;;;;;17518;;17585;;;;;;;:25;:40;;;5:2:-1;;;;30:1;27;20:12;5:2;17585:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17585:40:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;17585:40:0;17671:4;17636:14;17653:24;;;:9;17585:40;17653:24;;;;;17585:40;;-1:-1:-1;17703:30:0;17712:9;17723;17703:8;:30::i;:::-;17744:17;17764:11;17690:43;;-1:-1:-1;17764:11:0;17874:23;:9;17888:8;17874:23;:13;:23;:::i;:::-;:38;;;;;;;-1:-1:-1;18007:12:0;17981:23;:9;17995:8;17981:23;:13;:23;:::i;:::-;:38;;;;;;17971:48;;18096:1;18086:7;:11;:26;;;;;18111:1;18101:7;:11;18086:26;18078:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18167:31;18181:4;18188:9;18167:5;:31::i;:::-;18209:35;18223:7;18232:2;18236:7;18209:13;:35::i;:::-;18255;18269:7;18278:2;18282:7;18255:13;:35::i;:::-;18312:40;;;;;;18346:4;18312:40;;;;;;:25;;;;;;:40;;;;;;;;;;;;;;:25;:40;;;5:2:-1;;;;30:1;27;20:12;5:2;18312:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18312:40:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;18312:40:0;18374;;;;;;18408:4;18374:40;;;;;;18312;;-1:-1:-1;18374:25:0;;;;;;:40;;;;;18312;;18374;;;;;;;;:25;:40;;;5:2:-1;;;;30:1;27;20:12;5:2;18374:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18374:40:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;18374:40:0;;-1:-1:-1;18427:49:0;18435:8;18374:40;18455:9;18466;18427:7;:49::i;:::-;18491:5;18487:47;;;18525:8;;18506:28;;18525:8;18511;;;;18525;;;;18506:28;:18;:28;:::i;:::-;18498:5;:36;18487:47;18590:38;;;;;;;;;;;;;;;;;;18595:10;;18590:38;;;;;;;;;;;12524:1;;;;;;;;;12547;12536:8;:12;;;;17171:1465;;;:::o;5399:41::-;;;;;;;;;;;;;;;;;;;:::o;7553:139::-;7613:4;7630:32;7640:10;7652:2;7656:5;7630:9;:32::i;11675:46::-;11716:5;11675:46;:::o;20682:334::-;12456:8;;12468:1;12456:13;12448:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12512:1;12501:8;:12;20751:6;;20801;;20905:8;;20860:40;;;;;;20894:4;20860:40;;;;;;20751:6;;;;;20801;;;;20833:82;;20751:6;;20856:2;;20860:54;;20905:8;;;20751:6;;20860:25;;:40;;;;;;;;;;;;;;;20751:6;20860:40;;;5:2:-1;;;;30:1;27;20:12;5:2;20860:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;20860:40:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;20860:40:0;;:54;:44;:54;:::i;:::-;20833:13;:82::i;:::-;20998:8;;20953:40;;;;;;20987:4;20953:40;;;;;;20926:82;;20940:7;;20949:2;;20953:54;;20998:8;;;;;;20953:25;;;;;;:40;;;;;;;;;;;;;;;:25;:40;;;5:2:-1;;;;30:1;27;20:12;20926:82:0;-1:-1:-1;;12547:1:0;12536:8;:12;-1:-1:-1;20682:334:0:o;11825:22::-;;;;;;:::o;11882:21::-;;;;;;:::o;8009:672::-;8155:15;8143:8;:27;;8135:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8308:16;;8404:13;;;;8203:14;8404:13;;;:6;:13;;;;;;;;:15;;;;;;;;;8353:77;;5823:66;8353:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;8353:77:0;;;;;8343:88;;;;;;8244:202;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;8244:202:0;;;;;;8220:237;;;;;;;;;8495:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8203:14;;8404:15;8495:26;;;;;-1:-1:-1;8495:26:0;;;;;;;;;;8404:15;8495:26;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;8495:26:0;;;;;;-1:-1:-1;;8540:30:0;;;;;;;:59;;;8594:5;8574:25;;:16;:25;;;8540:59;8532:99;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8642:31;8651:5;8658:7;8667:5;8642:8;:31::i;:::-;8009:672;;;;;;;;;:::o;5568:61::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;21065:158::-;12456:8;;12468:1;12456:13;12448:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12512:1;12501:8;:12;21121:6;;21114:39;;;;;;21147:4;21114:39;;;;;;21106:109;;21121:6;;;21114:24;;:39;;;;;;;;;;;;;;21121:6;21114:39;;;5:2:-1;;;;30:1;27;20:12;5:2;21114:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21114:39:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;21114:39:0;21162:6;;21155:39;;;;;;21188:4;21155:39;;;;;;21162:6;;;;;21155:24;;:39;;;;;21114;;21155;;;;;;;;21162:6;21155:39;;;5:2:-1;;;;30:1;27;20:12;5:2;21155:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21155:39:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;21155:39:0;21196:8;;;;;;;21206;;;;21106:7;:109::i;:::-;12547:1;12536:8;:12;21065:158::o;12803:286::-;11780:34;;;;;;;;;;;;;;;;;12931:43;;12920:10;12931:43;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;12931:43:0;;;;;;25:18:-1;;;61:17;;12931:43:0;182:15:-1;12931:43:0;179:29:-1;160:49;;12920:55:0;;;;12885:12;;12899:17;;12920:10;;;12931:43;12920:55;;;25:18:-1;12920:55:0;;25:18:-1;36:153;66:2;61:3;58:11;36:153;;176:10;;164:23;;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;;;12920: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;;12884:91:0;;;;12994:7;:57;;;;-1:-1:-1;13006:11:0;;:16;;:44;;;13037:4;13026:24;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;13026:24:0;13006:44;12986:95;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12803:286;;;;;:::o;492:142::-;544:6;571;;;:30;;-1:-1:-1;;586:5:0;;;600:1;595;586:5;595:1;581:15;;;;;:20;571:30;563:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;355:129;439:5;;;434:16;;;;426:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13917:859;14029:23;;;;;;:50;;-1:-1:-1;14056:23:0;;;;14029:50;14021:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14217:18;;14144:23;:15;:23;;;14217:18;;;;;14200:35;;;14273:15;;;;;;:33;;-1:-1:-1;14292:14:0;;;;;14273:33;:51;;;;-1:-1:-1;14310:14:0;;;;;14273:51;14269:336;;;14479:11;14426:64;;14431:44;14465:9;14431:27;14448:9;14431:16;:27::i;:::-;:33;;;:44;:33;:44;:::i;:::-;14402:20;:88;;14426:50;;;;;:64;;;;14402:88;;;14529:64;;;14534:44;14568:9;14534:27;14551:9;14534:16;:27::i;:44::-;14505:20;:88;;14529:50;;;;;:64;;;;14505:88;;;14269:336;14615:8;:28;;;;;;;;;;;;14654;;;;;;;;;;;;14693:35;;;;;;;;;;;;14744:24;;;14749:8;;;14744:24;;14759:8;;;;;;;14744:24;;;;;;;;;;;;;;;;;13917:859;;;;;;:::o;6993:169::-;7074:16;;;;;;;;:9;:16;;;;;;;;:25;;;;;;;;;;;;;:33;;;7123:31;;;;;;;;;;;;;;;;;6993:169;;;:::o;7170:220::-;7264:15;;;;;;;:9;:15;;;;;;:26;;7284:5;7264:26;:19;:26;:::i;:::-;7246:15;;;;;;;;:9;:15;;;;;;:44;;;;7317:13;;;;;;;:24;;7335:5;7317:24;:17;:24;:::i;:::-;7301:13;;;;;;;;:9;:13;;;;;;;;;:40;;;;7357:25;;;;;;;7301:13;;7357:25;;;;;;;;;;;;;7170:220;;;:::o;14866:836::-;14939:10;14962:13;14995:7;;;;;;;;;;;14978:31;;;:33;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14978:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;14978:33:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;14978:33:0;15074:5;;15030:19;;;;;;;-1:-1:-1;14978:33:0;;-1:-1:-1;15074:5:0;15105:590;;15135:11;;15131:494;;15167:10;15180:41;15190:30;;:15;;;;:30;;;:19;:30;:::i;15180:41::-;15167:54;;15240:14;15257:17;15267:6;15257:9;:17::i;:::-;15240:34;;15305:9;15297:5;:17;15293:317;;;15339:14;15356:37;15372:20;:5;15382:9;15372:20;:9;:20;:::i;:::-;15356:11;;;:37;:15;:37;:::i;:::-;15339:54;-1:-1:-1;15416:16:0;15435:27;15452:9;15435:12;:5;15445:1;15435:12;:9;:12;:::i;:::-;:16;:27;:16;:27;:::i;:::-;15416:46;;15485:14;15514:11;15502:9;:23;;;;;;;-1:-1:-1;15552:13:0;;15548:42;;15567:23;15573:5;15580:9;15567:5;:23::i;:::-;15293:317;;;;15131:494;;;15105:590;;;15646:11;;15642:53;;15682:1;15674:5;:9;15642:53;14866:836;;;;;;:::o;4789:303::-;4834:6;4861:1;4857;:5;4853:232;;;-1:-1:-1;4883:1:0;4916;4912;4908:5;;:9;4932:92;4943:1;4939;:5;4932:92;;;4969:1;4965:5;;5007:1;5002;4998;4994;:5;;;;;;:9;4993:15;;;;;;4989:19;;4932:92;;;4853:232;;;;5045:6;;5041:44;;-1:-1:-1;5072:1:0;5041:44;4789:303;;;:::o;6567:201::-;6640:11;;:22;;6656:5;6640:22;:15;:22;:::i;:::-;6626:11;:36;;;6689:13;;;;;:9;:13;;;;;;:24;;6707:5;6689:24;:17;:24;:::i;:::-;6673:13;;;;;;;:9;:13;;;;;;;;:40;;;;6729:31;;;;;;;6673:13;;;;6729:31;;;;;;;;;;6567:201;;:::o;4575:96::-;4627:6;4654:1;4650;:5;:13;;4662:1;4650:13;;;4658:1;4650:13;4646:17;4575:96;-1:-1:-1;;;4575:96:0:o;6776:209::-;6855:15;;;;;;;:9;:15;;;;;;:26;;6875:5;6855:26;:19;:26;:::i;:::-;6837:15;;;;;;;:9;:15;;;;;:44;;;;6906:11;:22;;6922:5;6906:22;:15;:22;:::i;:::-;6892:11;:36;;;6944:33;;;;;;;;;;;;;;;;;;;;;;6776:209;;:::o;4111:120::-;4187:10;;4056:6;4187:17;;4111:120::o;4302:108::-;4362:9;4392:10;;;4388:14;;;4392:10;4388:14;;;;;;4302:108;-1:-1:-1;;;4302:108:0:o;219:128::-;303:5;;;298:16;;;;290:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Swarm Source

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