Contract 0x79C1B4Ee613F29a8c0aae563Ef445317D99a6906

Txn Hash Method
Block
From
To
Value [Txn Fee]
0x0936abf704d8cf0296e020e4f89e8b4de5009ac774ec708a5cc2d09c6a36ecb1Approve98458652022-01-21 3:12:04116 days 12 hrs ago0x8200964b61c82c4307407ad761234d1ec3658a09 IN  0x79c1b4ee613f29a8c0aae563ef445317d99a69060 AVAX0.000653375 25
0x2c68dcb3ad486c461bd84cad577981743c4f38fefed4ce7c0f1fcc979aadb6e2Approve98458232022-01-21 3:10:50116 days 12 hrs ago0x8200964b61c82c4307407ad761234d1ec3658a09 IN  0x79c1b4ee613f29a8c0aae563ef445317d99a69060 AVAX0.000653675 25
0x053c55336a3bd1c5c088836c0d2357510335563cbcdc7f2ffcb5394155734aa4Approve98458082022-01-21 3:10:22116 days 12 hrs ago0x8200964b61c82c4307407ad761234d1ec3658a09 IN  0x79c1b4ee613f29a8c0aae563ef445317d99a69060 AVAX0.000723675 25
0x5be4d31e6c6a55b974db50848def55ac309fea594a7f2031853f477f6cfd80edApprove80112482021-12-09 12:14:52159 days 3 hrs ago0xac9be1372ab5fc54cdf4dd2afe7a678e94706e82 IN  0x79c1b4ee613f29a8c0aae563ef445317d99a69060 AVAX0.000781569 27
0xf3f013c676fd539843813f3118d644b60ae879f95af39c9727f8af59754f6cefApprove41889432021-09-11 23:16:18247 days 16 hrs ago0x657ada09b1095a1f022695b02116cdf77580deda IN  0x79c1b4ee613f29a8c0aae563ef445317d99a69060 AVAX0.006802545 235
0x452670c0276179a87c1aebd3a08458ac1a10df6617116447f33a12fdcd9a5a92Approve30797752021-08-19 12:23:52271 days 3 hrs ago0xd2ecd6c235c4c30d2c669c8eff4186cd1f6f8832 IN  0x79c1b4ee613f29a8c0aae563ef445317d99a69060 AVAX0.010446975
0x06d6d090cabbdaf32c5ab72d100abcef4101c20e031a7f24abeea46a17a4baf7Approve30664102021-08-19 4:19:31271 days 11 hrs ago0x7f0c4ad77f1915508ee6430902f34e188f9acc5e IN  0x79c1b4ee613f29a8c0aae563ef445317d99a69060 AVAX0.010444275
0xa6b55c4166ff97689ddcdf84997dba99c7d29e526cdacdde1458c3968dad4ed8Approve30663412021-08-19 4:15:18271 days 11 hrs ago0x7f0c4ad77f1915508ee6430902f34e188f9acc5e IN  0x79c1b4ee613f29a8c0aae563ef445317d99a69060 AVAX0.010446975
0xc35d08224967370bcc97c70446839c037f6d44f88957432cc56e13963b7556c0Approve30590472021-08-18 21:53:53271 days 17 hrs ago0x7547f6c452f8964835339a685dbb5935aac7ffc7 IN  0x79c1b4ee613f29a8c0aae563ef445317d99a69060 AVAX0.010446975
0x5038060e93ec0003955472ff919d1b32935c76441e9142cea0a1f801f8bcb82dApprove30546872021-08-18 18:33:50271 days 20 hrs ago0x657ada09b1095a1f022695b02116cdf77580deda IN  0x79c1b4ee613f29a8c0aae563ef445317d99a69060 AVAX0.010446975
0xa33fb6072b9799e9e92eb7c357f8e07199a621a86d02cb8f1b57a826981a99ebApprove30527042021-08-18 17:11:43271 days 22 hrs ago0x2118d7c85466ae00f11abfdceef3134997edbbab IN  0x79c1b4ee613f29a8c0aae563ef445317d99a69060 AVAX0.010446975
0xf23df2129fd868e543d5038653b2306231df35b34fb9dd184afe0715e8a36286Approve30525172021-08-18 17:02:54271 days 22 hrs ago0x80d60696bf0ae8f49f9449e6f0cc55547cf414fe IN  0x79c1b4ee613f29a8c0aae563ef445317d99a69060 AVAX0.010446975
0x52bdfd464e83d9952a9259d298438da4f1115560b10b6e9b32f3620930e28ed4Approve23699562021-06-18 8:16:34333 days 7 hrs ago0xc017e984e4f5c4fa86dc482c0fc78721ce586c07 IN  0x79c1b4ee613f29a8c0aae563ef445317d99a69060 AVAX0.010446975
0xe54f02670ef3039b544e9d97965e230a9e2f0445a68aa2f64dc6122ad66440aaTransfer22304492021-06-06 8:28:23345 days 6 hrs ago0xcdee5108413e80af6c84bdd3ab0d328a3d63dda4 IN  0x79c1b4ee613f29a8c0aae563ef445317d99a69060 AVAX0.01160415
0x19793129b8365e2148bb3d77a76cb6efc261d5decf5c2db4aa5c3342662c32d6Approve21172892021-05-29 8:07:41353 days 7 hrs ago0x82e8936b187d83fd6eb2b7dab5b19556e9deff1c IN  0x79c1b4ee613f29a8c0aae563ef445317d99a69060 AVAX0.010444275
0x5fc0efeb2e14dd0f68aa4b770e84a698cb717c5ebb7a5fd1863e9f07839362e3Approve19493372021-05-20 20:21:26361 days 19 hrs ago0xc0b36d3f37cc6030e9768bd49bbcfebb6c711cd4 IN  0x79c1b4ee613f29a8c0aae563ef445317d99a69060 AVAX0.010446975
0x382b6483dce4a5b5822656cde7a69cb90b7a00e6dc00bbbd7f938c5e638d950cApprove18861552021-05-18 18:42:26363 days 20 hrs ago0x9be97aa18a4c7692e24361a17033edb0ede8546f IN  0x79c1b4ee613f29a8c0aae563ef445317d99a69060 AVAX0.010446975
0x6f8a7c70fe6d01e4ba58ae7f06f1d3b1341a11cd858559aaf602de08b7b4057dApprove18772492021-05-18 11:04:32364 days 4 hrs ago0x7fe978f80ed1830367db86adefe305e58777b602 IN  0x79c1b4ee613f29a8c0aae563ef445317d99a69060 AVAX0.010444275
0x515a40000f6681287cbca47418e5164d61e13647d9cb8a0c4a6e82791f88c34eApprove18693462021-05-18 3:11:02364 days 12 hrs ago0xc73df1e68fc203f6e4b6270240d6f82a850e8d38 IN  0x79c1b4ee613f29a8c0aae563ef445317d99a69060 AVAX0.010446975
0xb063d22106bbdf4c896d5867498d9f14539d8cdc710fef0a430104a3f03384deApprove18553812021-05-17 15:18:52365 days 7 mins ago0x7fe978f80ed1830367db86adefe305e58777b602 IN  0x79c1b4ee613f29a8c0aae563ef445317d99a69060 AVAX0.010446975
0xe476812f0bbc613596c8972ebb11f37567fcf7e1fd0ad9079836919c03c3d5a9Approve15591202021-05-07 14:44:41375 days 42 mins ago0x03957f4d15c816bad5e337a183bda4ffc6f4367f IN  0x79c1b4ee613f29a8c0aae563ef445317d99a69060 AVAX0.009974475
0x404e44565b94f30c13f757d13c77e0d997b0fd49016849fba6dc51cc2c9c70cdApprove14325542021-05-03 11:32:07379 days 3 hrs ago0xfa3ff5201c97c54dd34ee8f21643c28b4de74807 IN  0x79c1b4ee613f29a8c0aae563ef445317d99a69060 AVAX0.009974475
0xb18ad14a3b9a272c1e17a30c92d9aeef66670791c82d9e9f661895c234fb6be3Approve14185372021-05-02 22:26:04379 days 17 hrs ago0x90625ffe7a8759e218c3945fea8ac28fabbfa970 IN  0x79c1b4ee613f29a8c0aae563ef445317d99a69060 AVAX0.009974475
0xd990e9a3aab89164bd843e8a87bd5c960507bbfbb9bb190a88b4c05d07c61416Approve13254702021-04-30 8:22:45382 days 7 hrs ago0xa6f1c49bfbd1545bb52f92ab9de774688ea12f00 IN  0x79c1b4ee613f29a8c0aae563ef445317d99a69060 AVAX0.009974475
0x222ae17bb65686f6097f30572e09aa96f06f9426e595c39d1fb54cba16b09409Approve13077992021-04-29 14:05:58383 days 1 hr ago0x160fc6c831205a149499f31444829f2bcb686bd0 IN  0x79c1b4ee613f29a8c0aae563ef445317d99a69060 AVAX0.009971775
[ Download CSV Export 
Latest 1 internal transaction
Parent Txn Hash Block From To Value
0x080b99cadbcb74202108deddb6de20182335be388c7edf337c379a1d987608949507672021-04-04 17:09:56407 days 22 hrs ago 0x4fe4d8b01a56706bc6cad26e8c59d0c7169976b3  Contract Creation0 AVAX
[ Download CSV Export 
Loading

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

Contract Name:
OlivePair

Compiler Version
v0.5.16+commit.9c3226ce

Optimization Enabled:
Yes with 50 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at snowtrace.io on 2021-11-25
*/

// SPDX-License-Identifier: MIT
// File: @openzeppelin-2/contracts/token/ERC20/IERC20.sol

pragma solidity ^0.5.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP. Does not include
 * the optional functions; to access them see {ERC20Detailed}.
 */
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

// File: contracts/farms/olive/swap/IOliveCallee.sol

pragma solidity = 0.5.16;

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

// File: contracts/farms/olive/swap/IOliveFactory.sol

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

// File: contracts/farms/olive/swap/IOlivePair.sol

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

// File: contracts/farms/olive/swap/IOliveERC20.sol

pragma solidity = 0.5.16;

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

// File: contracts/farms/olive/swap/SafeMath.sol

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

// File: contracts/farms/olive/swap/OliveERC20.sol

pragma solidity = 0.5.16;



contract OliveERC20 is IOliveERC20 {
    using SafeMath for uint;

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

// File: contracts/farms/olive/swap/Math.sol

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

// File: contracts/farms/olive/swap/UQ112x112.sol

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

// File: contracts/farms/olive/swap/OlivePair.sol

pragma solidity = 0.5.16;








contract OlivePair is IOlivePair, OliveERC20 {
    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, 'Olive: 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))), 'Olive: 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, 'Olive: 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), 'Olive: 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 = IOliveFactory(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(3).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, 'Olive: 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, 'Olive: 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, 'Olive: INSUFFICIENT_OUTPUT_AMOUNT');
        (uint112 _reserve0, uint112 _reserve1,) = getReserves(); // gas savings
        require(amount0Out < _reserve0 && amount1Out < _reserve1, 'Olive: 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, 'Olive: 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) IOliveCallee(to).oliveCall(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, 'Olive: INSUFFICIENT_INPUT_AMOUNT');
        { // scope for reserve{0,1}Adjusted, avoids stack too deep errors
            uint balance0Adjusted = balance0.mul(1000).sub(amount0In.mul(2));
            uint balance1Adjusted = balance1.mul(1000).sub(amount1In.mul(2));
            require(balance0Adjusted.mul(balance1Adjusted) >= uint(_reserve0).mul(_reserve1).mul(1000**2), 'Olive: 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"}]

60806040526001600c5534801561001557600080fd5b5060405146908060526122b3823960408051918290036052018220828201825260098352684f6c697665204c507360b81b6020938401528151808301835260018152603160f81b908401528151808401919091527feb6b95fccbc7cce6f0e8bd81723e94b34dd89df658afc29e3b4fb06d63d2eabb818301527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6606082015260808101949094523060a0808601919091528151808603909101815260c09094019052825192019190912060035550600580546001600160a01b031916331790556121af806101046000396000f3fe608060405234801561001057600080fd5b50600436106101595760003560e01c80636a627842116100c95780636a627842146103bf57806370a08231146103e55780637464fc3d1461040b5780637ecebe001461041357806389afcb441461043957806395d89b4114610478578063a9059cbb14610480578063ba9a7a56146104ac578063bc25cf77146104b4578063c45a0155146104da578063d21220a7146104e2578063d505accf146104ea578063dd62ed3e1461053b578063fff6cae91461056957610159565b8063022c0d9f1461015e57806306fdde03146101ea5780630902f1ac14610267578063095ea7b31461029f5780630dfe1681146102df57806318160ddd1461030357806323b872dd1461031d57806330adf81f14610353578063313ce5671461035b5780633644e51514610379578063485cc955146103815780635909c0d5146103af5780635a3d5493146103b7575b600080fd5b6101e86004803603608081101561017457600080fd5b8135916020810135916001600160a01b036040830135169190810190608081016060820135600160201b8111156101aa57600080fd5b8201836020820111156101bc57600080fd5b803590602001918460018302840111600160201b831117156101dd57600080fd5b509092509050610571565b005b6101f2610acc565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561022c578181015183820152602001610214565b50505050905090810190601f1680156102595780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61026f610af1565b604080516001600160701b03948516815292909316602083015263ffffffff168183015290519081900360600190f35b6102cb600480360360408110156102b557600080fd5b506001600160a01b038135169060200135610b1b565b604080519115158252519081900360200190f35b6102e7610b32565b604080516001600160a01b039092168252519081900360200190f35b61030b610b41565b60408051918252519081900360200190f35b6102cb6004803603606081101561033357600080fd5b506001600160a01b03813581169160208101359091169060400135610b47565b61030b610be1565b610363610c05565b6040805160ff9092168252519081900360200190f35b61030b610c0a565b6101e86004803603604081101561039757600080fd5b506001600160a01b0381358116916020013516610c10565b61030b610c90565b61030b610c96565b61030b600480360360208110156103d557600080fd5b50356001600160a01b0316610c9c565b61030b600480360360208110156103fb57600080fd5b50356001600160a01b0316610f98565b61030b610faa565b61030b6004803603602081101561042957600080fd5b50356001600160a01b0316610fb0565b61045f6004803603602081101561044f57600080fd5b50356001600160a01b0316610fc2565b6040805192835260208301919091528051918290030190f35b6101f2611364565b6102cb6004803603604081101561049657600080fd5b506001600160a01b038135169060200135611388565b61030b611395565b6101e8600480360360208110156104ca57600080fd5b50356001600160a01b031661139b565b6102e7611502565b6102e7611511565b6101e8600480360360e081101561050057600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c00135611520565b61030b6004803603604081101561055157600080fd5b506001600160a01b0381358116916020013516611719565b6101e8611736565b600c546001146105b8576040805162461bcd60e51b815260206004820152600d60248201526c13db1a5d994e881313d0d2d151609a1b604482015290519081900360640190fd5b6000600c55841515806105cb5750600084115b6106065760405162461bcd60e51b81526004018080602001828103825260218152602001806120f26021913960400191505060405180910390fd5b600080610611610af1565b5091509150816001600160701b0316871080156106365750806001600160701b031686105b610687576040805162461bcd60e51b815260206004820152601d60248201527f4f6c6976653a20494e53554646494349454e545f4c4951554944495459000000604482015290519081900360640190fd5b60065460075460009182916001600160a01b039182169190811690891682148015906106c55750806001600160a01b0316896001600160a01b031614155b61070a576040805162461bcd60e51b81526020600482015260116024820152704f6c6976653a20494e56414c49445f544f60781b604482015290519081900360640190fd5b8a1561071b5761071b828a8d611894565b891561072c5761072c818a8c611894565b86156107e757886001600160a01b031663791b35d9338d8d8c8c6040518663ffffffff1660e01b815260040180866001600160a01b03166001600160a01b03168152602001858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f8201169050808301925050509650505050505050600060405180830381600087803b1580156107ce57600080fd5b505af11580156107e2573d6000803e3d6000fd5b505050505b604080516370a0823160e01b815230600482015290516001600160a01b038416916370a08231916024808301926020929190829003018186803b15801561082d57600080fd5b505afa158015610841573d6000803e3d6000fd5b505050506040513d602081101561085757600080fd5b5051604080516370a0823160e01b815230600482015290519195506001600160a01b038316916370a0823191602480820192602092909190829003018186803b1580156108a357600080fd5b505afa1580156108b7573d6000803e3d6000fd5b505050506040513d60208110156108cd57600080fd5b5051925060009150506001600160701b0385168a900383116108f05760006108ff565b89856001600160701b03160383035b9050600089856001600160701b031603831161091c57600061092b565b89856001600160701b03160383035b9050600082118061093c5750600081115b61098d576040805162461bcd60e51b815260206004820181905260248201527f4f6c6976653a20494e53554646494349454e545f494e5055545f414d4f554e54604482015290519081900360640190fd5b60006109c16109a384600263ffffffff611a2316565b6109b5876103e863ffffffff611a2316565b9063ffffffff611a8616565b905060006109d96109a384600263ffffffff611a2316565b9050610a0a620f42406109fe6001600160701b038b8116908b1663ffffffff611a2316565b9063ffffffff611a2316565b610a1a838363ffffffff611a2316565b1015610a58576040805162461bcd60e51b81526020600482015260086024820152674f6c6976653a204b60c01b604482015290519081900360640190fd5b5050610a6684848888611ad6565b60408051838152602081018390528082018d9052606081018c905290516001600160a01b038b169133917fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d8229181900360800190a350506001600c55505050505050505050565b604051806040016040528060098152602001684f6c697665204c507360b81b81525081565b6008546001600160701b0380821692600160701b830490911691600160e01b900463ffffffff1690565b6000610b28338484611c89565b5060015b92915050565b6006546001600160a01b031681565b60005481565b6001600160a01b038316600090815260026020908152604080832033845290915281205460001914610bcc576001600160a01b0384166000908152600260209081526040808320338452909152902054610ba7908363ffffffff611a8616565b6001600160a01b03851660009081526002602090815260408083203384529091529020555b610bd7848484611ceb565b5060019392505050565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b601281565b60035481565b6005546001600160a01b03163314610c62576040805162461bcd60e51b815260206004820152601060248201526f27b634bb329d102327a92124a22222a760811b604482015290519081900360640190fd5b600680546001600160a01b039384166001600160a01b03199182161790915560078054929093169116179055565b60095481565b600a5481565b6000600c54600114610ce5576040805162461bcd60e51b815260206004820152600d60248201526c13db1a5d994e881313d0d2d151609a1b604482015290519081900360640190fd5b6000600c81905580610cf5610af1565b50600654604080516370a0823160e01b815230600482015290519395509193506000926001600160a01b03909116916370a08231916024808301926020929190829003018186803b158015610d4957600080fd5b505afa158015610d5d573d6000803e3d6000fd5b505050506040513d6020811015610d7357600080fd5b5051600754604080516370a0823160e01b815230600482015290519293506000926001600160a01b03909216916370a0823191602480820192602092909190829003018186803b158015610dc657600080fd5b505afa158015610dda573d6000803e3d6000fd5b505050506040513d6020811015610df057600080fd5b505190506000610e0f836001600160701b03871663ffffffff611a8616565b90506000610e2c836001600160701b03871663ffffffff611a8616565b90506000610e3a8787611d93565b60005490915080610e7757610e636103e86109b5610e5e878763ffffffff611a2316565b611ef1565b9850610e7260006103e8611f43565b610ec6565b610ec36001600160701b038916610e94868463ffffffff611a2316565b81610e9b57fe5b046001600160701b038916610eb6868563ffffffff611a2316565b81610ebd57fe5b04611fc7565b98505b60008911610f055760405162461bcd60e51b81526004018080602001828103825260248152602001806121136024913960400191505060405180910390fd5b610f0f8a8a611f43565b610f1b86868a8a611ad6565b8115610f4b57600854610f47906001600160701b0380821691600160701b90041663ffffffff611a2316565b600b555b6040805185815260208101859052815133927f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f928290030190a250506001600c5550949695505050505050565b60016020526000908152604090205481565b600b5481565b60046020526000908152604090205481565b600080600c5460011461100c576040805162461bcd60e51b815260206004820152600d60248201526c13db1a5d994e881313d0d2d151609a1b604482015290519081900360640190fd5b6000600c8190558061101c610af1565b50600654600754604080516370a0823160e01b815230600482015290519496509294506001600160a01b039182169391169160009184916370a08231916024808301926020929190829003018186803b15801561107857600080fd5b505afa15801561108c573d6000803e3d6000fd5b505050506040513d60208110156110a257600080fd5b5051604080516370a0823160e01b815230600482015290519192506000916001600160a01b038516916370a08231916024808301926020929190829003018186803b1580156110f057600080fd5b505afa158015611104573d6000803e3d6000fd5b505050506040513d602081101561111a57600080fd5b5051306000908152600160205260408120549192506111398888611d93565b60005490915080611150848763ffffffff611a2316565b8161115757fe5b049a508061116b848663ffffffff611a2316565b8161117257fe5b04995060008b118015611185575060008a115b6111c05760405162461bcd60e51b81526004018080602001828103825260248152602001806121576024913960400191505060405180910390fd5b6111ca3084611fdf565b6111d5878d8d611894565b6111e0868d8c611894565b604080516370a0823160e01b815230600482015290516001600160a01b038916916370a08231916024808301926020929190829003018186803b15801561122657600080fd5b505afa15801561123a573d6000803e3d6000fd5b505050506040513d602081101561125057600080fd5b5051604080516370a0823160e01b815230600482015290519196506001600160a01b038816916370a0823191602480820192602092909190829003018186803b15801561129c57600080fd5b505afa1580156112b0573d6000803e3d6000fd5b505050506040513d60208110156112c657600080fd5b505193506112d685858b8b611ad6565b811561130657600854611302906001600160701b0380821691600160701b90041663ffffffff611a2316565b600b555b604080518c8152602081018c905281516001600160a01b038f169233927fdccd412f0b1252819cb1fd330b93224ca42612892bb3f4f789976e6d81936496929081900390910190a35050505050505050506001600c81905550915091565b6040518060400160405280600881526020016704f6c6976652d4c560c41b81525081565b6000610b28338484611ceb565b6103e881565b600c546001146113e2576040805162461bcd60e51b815260206004820152600d60248201526c13db1a5d994e881313d0d2d151609a1b604482015290519081900360640190fd5b6000600c55600654600754600854604080516370a0823160e01b815230600482015290516001600160a01b039485169490931692611491928592879261148c926001600160701b03169185916370a0823191602480820192602092909190829003018186803b15801561145457600080fd5b505afa158015611468573d6000803e3d6000fd5b505050506040513d602081101561147e57600080fd5b50519063ffffffff611a8616565b611894565b600854604080516370a0823160e01b815230600482015290516114f8928492879261148c92600160701b90046001600160701b0316916001600160a01b038616916370a0823191602480820192602092909190829003018186803b15801561145457600080fd5b50506001600c5550565b6005546001600160a01b031681565b6007546001600160a01b031681565b42841015611566576040805162461bcd60e51b815260206004820152600e60248201526d13db1a5d994e881156141254915160921b604482015290519081900360640190fd5b6003546001600160a01b0380891660008181526004602090815260408083208054600180820190925582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98186015280840196909652958d166060860152608085018c905260a085019590955260c08085018b90528151808603909101815260e08501825280519083012061190160f01b6101008601526101028501969096526101228085019690965280518085039096018652610142840180825286519683019690962095839052610162840180825286905260ff89166101828501526101a284018890526101c28401879052519193926101e280820193601f1981019281900390910190855afa158015611681573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906116b75750886001600160a01b0316816001600160a01b0316145b611703576040805162461bcd60e51b81526020600482015260186024820152774f6c6976653a20494e56414c49445f5349474e415455524560401b604482015290519081900360640190fd5b61170e898989611c89565b505050505050505050565b600260209081526000928352604080842090915290825290205481565b600c5460011461177d576040805162461bcd60e51b815260206004820152600d60248201526c13db1a5d994e881313d0d2d151609a1b604482015290519081900360640190fd5b6000600c55600654604080516370a0823160e01b8152306004820152905161188d926001600160a01b0316916370a08231916024808301926020929190829003018186803b1580156117ce57600080fd5b505afa1580156117e2573d6000803e3d6000fd5b505050506040513d60208110156117f857600080fd5b5051600754604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b15801561184557600080fd5b505afa158015611859573d6000803e3d6000fd5b505050506040513d602081101561186f57600080fd5b50516008546001600160701b0380821691600160701b900416611ad6565b6001600c55565b60408051808201825260198152787472616e7366657228616464726573732c75696e743235362960381b60209182015281516001600160a01b0385811660248301526044808301869052845180840390910181526064909201845291810180516001600160e01b031663a9059cbb60e01b1781529251815160009460609489169392918291908083835b6020831061193d5780518252601f19909201916020918201910161191e565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811461199f576040519150601f19603f3d011682016040523d82523d6000602084013e6119a4565b606091505b50915091508180156119d25750805115806119d257508080602001905160208110156119cf57600080fd5b50515b611a1c576040805162461bcd60e51b815260206004820152601660248201527513db1a5d994e881514905394d1915497d1905253115160521b604482015290519081900360640190fd5b5050505050565b6000811580611a3e57505080820282828281611a3b57fe5b04145b610b2c576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b80820382811115610b2c576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b6001600160701b038411801590611af457506001600160701b038311155b611b37576040805162461bcd60e51b815260206004820152600f60248201526e4f6c6976653a204f564552464c4f5760881b604482015290519081900360640190fd5b60085463ffffffff42811691600160e01b90048116820390811615801590611b6757506001600160701b03841615155b8015611b7b57506001600160701b03831615155b15611bec578063ffffffff16611ba985611b948661206b565b6001600160e01b03169063ffffffff61207d16565b600980546001600160e01b03929092169290920201905563ffffffff8116611bd484611b948761206b565b600a80546001600160e01b0392909216929092020190555b600880546001600160701b0319166001600160701b0388811691909117600160701b600160e01b031916600160701b8883168102919091176001600160e01b0316600160e01b63ffffffff871602179283905560408051848416815291909304909116602082015281517f1c411e9a96e071241c2f21f7726b17ae89e3cab4c78be50e062b03a9fffbbad1929181900390910190a1505050505050565b6001600160a01b03808416600081815260026020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b038316600090815260016020526040902054611d14908263ffffffff611a8616565b6001600160a01b038085166000908152600160205260408082209390935590841681522054611d49908263ffffffff6120a216565b6001600160a01b03808416600081815260016020908152604091829020949094558051858152905191939287169260008051602061213783398151915292918290030190a3505050565b600080600560009054906101000a90046001600160a01b03166001600160a01b031663017e7e586040518163ffffffff1660e01b815260040160206040518083038186803b158015611de457600080fd5b505afa158015611df8573d6000803e3d6000fd5b505050506040513d6020811015611e0e57600080fd5b5051600b546001600160a01b038216158015945091925090611edd578015611ed8576000611e51610e5e6001600160701b0388811690881663ffffffff611a2316565b90506000611e5e83611ef1565b905080821115611ed5576000611e8c611e7d848463ffffffff611a8616565b6000549063ffffffff611a2316565b90506000611eb183611ea586600363ffffffff611a2316565b9063ffffffff6120a216565b90506000818381611ebe57fe5b0490508015611ed157611ed18782611f43565b5050505b50505b611ee9565b8015611ee9576000600b555b505092915050565b60006003821115611f34575080600160028204015b81811015611f2e57809150600281828581611f1d57fe5b040181611f2657fe5b049050611f06565b50611f3e565b8115611f3e575060015b919050565b600054611f56908263ffffffff6120a216565b60009081556001600160a01b038316815260016020526040902054611f81908263ffffffff6120a216565b6001600160a01b03831660008181526001602090815260408083209490945583518581529351929391926000805160206121378339815191529281900390910190a35050565b6000818310611fd65781611fd8565b825b9392505050565b6001600160a01b038216600090815260016020526040902054612008908263ffffffff611a8616565b6001600160a01b03831660009081526001602052604081209190915554612035908263ffffffff611a8616565b60009081556040805183815290516001600160a01b03851691600080516020612137833981519152919081900360200190a35050565b6001600160701b0316600160701b0290565b60006001600160701b0382166001600160e01b0384168161209a57fe5b049392505050565b80820182811015610b2c576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fdfe4f6c6976653a20494e53554646494349454e545f4f55545055545f414d4f554e544f6c6976653a20494e53554646494349454e545f4c49515549444954595f4d494e544544ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef4f6c6976653a20494e53554646494349454e545f4c49515549444954595f4255524e4544a265627a7a72315820b01116e61df7cdf4496ee7560ead2376f3cb1f6cfe5717ac5fcf6bfbae15e15264736f6c63430005100032454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c75696e7432353620636861696e49642c6164647265737320766572696679696e67436f6e747261637429

Deployed ByteCode Sourcemap

12968:9664:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12968:9664:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20134:1905;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;20134:1905:0;;;;;;;;-1:-1:-1;;;;;20134:1905:0;;;;;;;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;20134:1905:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;20134:1905:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;-1:-1;20134:1905:0;;-1:-1:-1;20134:1905:0;-1:-1:-1;20134:1905:0;:::i;:::-;;8327:41;;;:::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;8327:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13973:231;;;:::i;:::-;;;;-1:-1:-1;;;;;13973:231:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10375:147;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;10375:147:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;13266:21;;;:::i;:::-;;;;-1:-1:-1;;;;;13266:21:0;;;;;;;;;;;;;;8466:24;;;:::i;:::-;;;;;;;;;;;;;;;;10677:301;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;10677:301:0;;;;;;;;;;;;;;;;;:::i;8758:108::-;;;:::i;8424:35::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;8615:31;;;:::i;15029:206::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;15029:206:0;;;;;;;;;;:::i;13617:32::-;;;:::i;13656:::-;;;:::i;17211:1237::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;17211:1237:0;-1:-1:-1;;;;;17211:1237:0;;:::i;8497:41::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;8497:41:0;-1:-1:-1;;;;;8497:41:0;;:::i;13695:17::-;;;:::i;8873:38::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;8873:38:0;-1:-1:-1;;;;;8873:38:0;;:::i;18560:1462::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;18560:1462:0;-1:-1:-1;;;;;18560:1462:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;8375:42;;;:::i;10530:139::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;10530:139:0;;;;;;;;:::i;13087:46::-;;;:::i;22088:334::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;22088:334:0;-1:-1:-1;;;;;22088:334:0;;:::i;13237:22::-;;;:::i;13294:21::-;;;:::i;10986:666::-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;;10986:666:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;8545:61::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;8545:61:0;;;;;;;;;;:::i;22471:158::-;;;:::i;20134:1905::-;13868:8;;13880:1;13868:13;13860:39;;;;;-1:-1:-1;;;13860:39:0;;;;;;;;;;;;-1:-1:-1;;;13860:39:0;;;;;;;;;;;;;;;13921:1;13910:8;:12;20248:14;;;;:32;;;20279:1;20266:10;:14;20248:32;20240:78;;;;-1:-1:-1;;;20240:78:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20330:17;20349;20371:13;:11;:13::i;:::-;20329:55;;;;;20431:9;-1:-1:-1;;;;;20418:22:0;:10;:22;:48;;;;;20457:9;-1:-1:-1;;;;;20444:22:0;:10;:22;20418:48;20410:90;;;;;-1:-1:-1;;;20410:90:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;20649:6;;20688;;20513:13;;;;-1:-1:-1;;;;;20649:6:0;;;;20688;;;;20717:13;;;;;;;:30;;;20740:7;-1:-1:-1;;;;;20734:13:0;:2;-1:-1:-1;;;;;20734:13:0;;;20717:30;20709:60;;;;;-1:-1:-1;;;20709:60:0;;;;;;;;;;;;-1:-1:-1;;;20709:60:0;;;;;;;;;;;;;;;20788:14;;20784:58;;20804:38;20818:7;20827:2;20831:10;20804:13;:38::i;:::-;20895:14;;20891:58;;20911:38;20925:7;20934:2;20938:10;20911:13;:38::i;:::-;21002:15;;20998:89;;21032:2;-1:-1:-1;;;;;21019:26:0;;21046:10;21058;21070;21082:4;;21019:68;;;;;;;;;;;;;-1:-1:-1;;;;;21019:68:0;-1:-1:-1;;;;;21019:68: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;;21019:68:0;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;21019:68:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21019:68:0;;;;20998:89;21113:40;;;-1:-1:-1;;;21113:40:0;;21147:4;21113:40;;;;;;-1:-1:-1;;;;;21113:25:0;;;;;:40;;;;;;;;;;;;;;:25;:40;;;5:2:-1;;;;30:1;27;20:12;5:2;21113:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21113:40:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;21113:40:0;21179;;;-1:-1:-1;;;21179:40:0;;21213:4;21179:40;;;;;;21113;;-1:-1:-1;;;;;;21179:25:0;;;;;:40;;;;;21113;;21179;;;;;;;;:25;:40;;;5:2:-1;;;;30:1;27;20:12;5:2;21179:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21179:40:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;21179:40:0;;-1:-1:-1;21241:14:0;;-1:-1:-1;;;;;;;21269:22:0;;;;;21258:33;;:75;;21332:1;21258:75;;;21318:10;21306:9;-1:-1:-1;;;;;21306:22:0;;21294:8;:35;21258:75;21241:92;;21344:14;21384:10;21372:9;-1:-1:-1;;;;;21372:22:0;;21361:8;:33;:75;;21435:1;21361:75;;;21421:10;21409:9;-1:-1:-1;;;;;21409:22:0;;21397:8;:35;21361:75;21344:92;;21467:1;21455:9;:13;:30;;;;21484:1;21472:9;:13;21455:30;21447:75;;;;;-1:-1:-1;;;21447:75:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21612:21;21636:40;21659:16;:9;21673:1;21659:16;:13;:16;:::i;:::-;21636:18;:8;21649:4;21636:18;:12;:18;:::i;:::-;:22;:40;:22;:40;:::i;:::-;21612:64;-1:-1:-1;21691:21:0;21715:40;21738:16;:9;21752:1;21738:16;:13;:16;:::i;21715:40::-;21691:64;-1:-1:-1;21820:43:0;21855:7;21820:30;-1:-1:-1;;;;;21820:15:0;;;;:30;;;:19;:30;:::i;:::-;:34;:43;:34;:43;:::i;:::-;21778:38;:16;21799;21778:38;:20;:38;:::i;:::-;:85;;21770:106;;;;;-1:-1:-1;;;21770:106:0;;;;;;;;;;;;-1:-1:-1;;;21770:106:0;;;;;;;;;;;;;;;13933:1;;21900:49;21908:8;21918;21928:9;21939;21900:7;:49::i;:::-;21965:66;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;21965:66:0;;;21970:10;;21965:66;;;;;;;;;-1:-1:-1;;13956:1:0;13945:8;:12;-1:-1:-1;;;;;;;;;20134:1905:0:o;8327:41::-;;;;;;;;;;;;;;-1:-1:-1;;;8327:41:0;;;;:::o;13973:231::-;14106:8;;-1:-1:-1;;;;;14106:8:0;;;;-1:-1:-1;;;14137:8:0;;;;;;-1:-1:-1;;;14178:18:0;;;;;13973:231::o;10375:147::-;10439:4;10456:36;10465:10;10477:7;10486:5;10456:8;:36::i;:::-;-1:-1:-1;10510:4:0;10375:147;;;;;:::o;13266:21::-;;;-1:-1:-1;;;;;13266:21:0;;:::o;8466:24::-;;;;:::o;10677:301::-;-1:-1:-1;;;;;10776:15:0;;10755:4;10776:15;;;:9;:15;;;;;;;;10792:10;10776:27;;;;;;;;-1:-1:-1;;10776:39:0;10772:140;;-1:-1:-1;;;;;10862:15:0;;;;;;:9;:15;;;;;;;;10878:10;10862:27;;;;;;;;:38;;10894:5;10862:38;:31;:38;:::i;:::-;-1:-1:-1;;;;;10832:15:0;;;;;;:9;:15;;;;;;;;10848:10;10832:27;;;;;;;:68;10772:140;10922:26;10932:4;10938:2;10942:5;10922:9;:26::i;:::-;-1:-1:-1;10966:4:0;10677:301;;;;;:::o;8758:108::-;8800:66;8758:108;:::o;8424:35::-;8457:2;8424:35;:::o;8615:31::-;;;;:::o;15029:206::-;15125:7;;-1:-1:-1;;;;;15125:7:0;15111:10;:21;15103:50;;;;;-1:-1:-1;;;15103:50:0;;;;;;;;;;;;-1:-1:-1;;;15103:50:0;;;;;;;;;;;;;;;15184:6;:16;;-1:-1:-1;;;;;15184:16:0;;;-1:-1:-1;;;;;;15184:16:0;;;;;;;15211:6;:16;;;;;;;;;;;15029:206::o;13617:32::-;;;;:::o;13656:::-;;;;:::o;17211:1237::-;17260:14;13868:8;;13880:1;13868:13;13860:39;;;;;-1:-1:-1;;;13860:39:0;;;;;;;;;;;;-1:-1:-1;;;13860:39:0;;;;;;;;;;;;;;;13921:1;13910:8;:12;;;13921:1;17329:13;:11;:13::i;:::-;-1:-1:-1;17391:6:0;;17384:39;;;-1:-1:-1;;;17384:39:0;;17417:4;17384:39;;;;;;17287:55;;-1:-1:-1;17287:55:0;;-1:-1:-1;17368:13:0;;-1:-1:-1;;;;;17391:6:0;;;;17384:24;;:39;;;;;;;;;;;;;;17391:6;17384:39;;;5:2:-1;;;;30:1;27;20:12;5:2;17384:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17384:39:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;17384:39:0;17457:6;;17450:39;;;-1:-1:-1;;;17450:39:0;;17483:4;17450:39;;;;;;17384;;-1:-1:-1;17434:13:0;;-1:-1:-1;;;;;17457:6:0;;;;17450:24;;:39;;;;;17384;;17450;;;;;;;;17457:6;17450:39;;;5:2:-1;;;;30:1;27;20:12;5:2;17450:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17450:39:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;17450:39:0;;-1:-1:-1;17500:12:0;17515:23;:8;-1:-1:-1;;;;;17515:23:0;;;:12;:23;:::i;:::-;17500:38;-1:-1:-1;17549:12:0;17564:23;:8;-1:-1:-1;;;;;17564:23:0;;;:12;:23;:::i;:::-;17549:38;;17600:10;17613:30;17622:9;17633;17613:8;:30::i;:::-;17654:17;17674:11;17600:43;;-1:-1:-1;17778:17:0;17774:353;;17824:54;13128:5;17824:31;17834:20;:7;17846;17834:20;:11;:20;:::i;:::-;17824:9;:31::i;:54::-;17812:66;;17893:36;17907:1;13128:5;17893;:36::i;:::-;17774:353;;;18029:86;-1:-1:-1;;;;;18038:37:0;;:25;:7;18050:12;18038:25;:11;:25;:::i;:::-;:37;;;;;;-1:-1:-1;;;;;18077:37:0;;:25;:7;18089:12;18077:25;:11;:25;:::i;:::-;:37;;;;;;18029:8;:86::i;:::-;18017:98;;17774:353;18157:1;18145:9;:13;18137:62;;;;-1:-1:-1;;;18137:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18210:20;18216:2;18220:9;18210:5;:20::i;:::-;18243:49;18251:8;18261;18271:9;18282;18243:7;:49::i;:::-;18307:5;18303:47;;;18341:8;;18322:28;;-1:-1:-1;;;;;18327:8:0;;;;-1:-1:-1;;;18341:8:0;;;18322:28;:18;:28;:::i;:::-;18314:5;:36;18303:47;18406:34;;;;;;;;;;;;;;18411:10;;18406:34;;;;;;;;-1:-1:-1;;13956:1:0;13945:8;:12;-1:-1:-1;17211:1237:0;;;-1:-1:-1;;;;;;17211:1237:0:o;8497:41::-;;;;;;;;;;;;;:::o;13695:17::-;;;;:::o;8873:38::-;;;;;;;;;;;;;:::o;18560:1462::-;18609:12;18623;13868:8;;13880:1;13868:13;13860:39;;;;;-1:-1:-1;;;13860:39:0;;;;;;;;;;;;-1:-1:-1;;;13860:39:0;;;;;;;;;;;;;;;13921:1;13910:8;:12;;;13921:1;18690:13;:11;:13::i;:::-;-1:-1:-1;18747:6:0;;18828;;18907:40;;;-1:-1:-1;;;18907:40:0;;18941:4;18907:40;;;;;;18648:55;;-1:-1:-1;18648:55:0;;-1:-1:-1;;;;;;18747:6:0;;;;18828;;;18729:15;;18747:6;;18907:25;;:40;;;;;;;;;;;;;;18747:6;18907:40;;;5:2:-1;;;;30:1;27;20:12;5:2;18907:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18907:40:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;18907:40:0;18974;;;-1:-1:-1;;;18974:40:0;;19008:4;18974:40;;;;;;18907;;-1:-1:-1;18958:13:0;;-1:-1:-1;;;;;18974:25:0;;;;;:40;;;;;18907;;18974;;;;;;;:25;:40;;;5:2:-1;;;;30:1;27;20:12;5:2;18974:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18974:40:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;18974:40:0;19060:4;19025:14;19042:24;;;:9;18974:40;19042:24;;;;;18974:40;;-1:-1:-1;19092:30:0;19101:9;19112;19092:8;:30::i;:::-;19133:17;19153:11;19079:43;;-1:-1:-1;19153:11:0;19263:23;:9;19277:8;19263:23;:13;:23;:::i;:::-;:38;;;;;;;-1:-1:-1;19396:12:0;19370:23;:9;19384:8;19370:23;:13;:23;:::i;:::-;:38;;;;;;19360:48;;19485:1;19475:7;:11;:26;;;;;19500:1;19490:7;:11;19475:26;19467:75;;;;-1:-1:-1;;;19467:75:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19553:31;19567:4;19574:9;19553:5;:31::i;:::-;19595:35;19609:7;19618:2;19622:7;19595:13;:35::i;:::-;19641;19655:7;19664:2;19668:7;19641:13;:35::i;:::-;19698:40;;;-1:-1:-1;;;19698:40:0;;19732:4;19698:40;;;;;;-1:-1:-1;;;;;19698:25:0;;;;;:40;;;;;;;;;;;;;;:25;:40;;;5:2:-1;;;;30:1;27;20:12;5:2;19698:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19698:40:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;19698:40:0;19760;;;-1:-1:-1;;;19760:40:0;;19794:4;19760:40;;;;;;19698;;-1:-1:-1;;;;;;19760:25:0;;;;;:40;;;;;19698;;19760;;;;;;;;:25;:40;;;5:2:-1;;;;30:1;27;20:12;5:2;19760:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19760:40:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;19760:40:0;;-1:-1:-1;19813:49:0;19821:8;19760:40;19841:9;19852;19813:7;:49::i;:::-;19877:5;19873:47;;;19911:8;;19892:28;;-1:-1:-1;;;;;19897:8:0;;;;-1:-1:-1;;;19911:8:0;;;19892:28;:18;:28;:::i;:::-;19884:5;:36;19873:47;19976:38;;;;;;;;;;;;;;-1:-1:-1;;;;;19976:38:0;;;19981:10;;19976:38;;;;;;;;;;;13933:1;;;;;;;;;13956;13945:8;:12;;;;18560:1462;;;:::o;8375:42::-;;;;;;;;;;;;;;-1:-1:-1;;;8375:42:0;;;;:::o;10530:139::-;10590:4;10607:32;10617:10;10629:2;10633:5;10607:9;:32::i;13087:46::-;13128:5;13087:46;:::o;22088:334::-;13868:8;;13880:1;13868:13;13860:39;;;;;-1:-1:-1;;;13860:39:0;;;;;;;;;;;;-1:-1:-1;;;13860:39:0;;;;;;;;;;;;;;;13921:1;13910:8;:12;22157:6;;22207;;22311:8;;22266:40;;;-1:-1:-1;;;22266:40:0;;22300:4;22266:40;;;;;;-1:-1:-1;;;;;22157:6:0;;;;22207;;;;22239:82;;22157:6;;22262:2;;22266:54;;-1:-1:-1;;;;;22311:8:0;;22157:6;;22266:25;;:40;;;;;;;;;;;;;;;22157:6;22266:40;;;5:2:-1;;;;30:1;27;20:12;5:2;22266:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22266:40:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;22266:40:0;;:54;:44;:54;:::i;:::-;22239:13;:82::i;:::-;22404:8;;22359:40;;;-1:-1:-1;;;22359:40:0;;22393:4;22359:40;;;;;;22332:82;;22346:7;;22355:2;;22359:54;;-1:-1:-1;;;22404:8:0;;-1:-1:-1;;;;;22404:8:0;;-1:-1:-1;;;;;22359:25:0;;;;;:40;;;;;;;;;;;;;;;:25;:40;;;5:2:-1;;;;30:1;27;20:12;22332:82:0;-1:-1:-1;;13956:1:0;13945:8;:12;-1:-1:-1;22088:334:0:o;13237:22::-;;;-1:-1:-1;;;;;13237:22:0;;:::o;13294:21::-;;;-1:-1:-1;;;;;13294:21:0;;:::o;10986:666::-;11132:15;11120:8;:27;;11112:54;;;;;-1:-1:-1;;;11112:54:0;;;;;;;;;;;;-1:-1:-1;;;11112:54:0;;;;;;;;;;;;;;;11282:16;;-1:-1:-1;;;;;11378:13:0;;;11177:14;11378:13;;;:6;:13;;;;;;;;:15;;;;;;;;;11327:77;;8800:66;11327:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;11327:77:0;;;;;11317:88;;;;;;-1:-1:-1;;;11218:202:0;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;11218:202:0;;;;;;11194:237;;;;;;;;;11469:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11177:14;;11378:15;11469:26;;;;;-1:-1:-1;;11469:26:0;;;;;;;;;;11378:15;11469:26;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;11469:26:0;;-1:-1:-1;;11469:26:0;;;-1:-1:-1;;;;;;;11514:30:0;;;;;;:59;;;11568:5;-1:-1:-1;;;;;11548:25:0;:16;-1:-1:-1;;;;;11548:25:0;;11514:59;11506:96;;;;;-1:-1:-1;;;11506:96:0;;;;;;;;;;;;-1:-1:-1;;;11506:96:0;;;;;;;;;;;;;;;11613:31;11622:5;11629:7;11638:5;11613:8;:31::i;:::-;10986:666;;;;;;;;;:::o;8545:61::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;22471:158::-;13868:8;;13880:1;13868:13;13860:39;;;;;-1:-1:-1;;;13860:39:0;;;;;;;;;;;;-1:-1:-1;;;13860:39:0;;;;;;;;;;;;;;;13921:1;13910:8;:12;22527:6;;22520:39;;;-1:-1:-1;;;22520:39:0;;22553:4;22520:39;;;;;;22512:109;;-1:-1:-1;;;;;22527:6:0;;22520:24;;:39;;;;;;;;;;;;;;22527:6;22520:39;;;5:2:-1;;;;30:1;27;20:12;5:2;22520:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22520:39:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;22520:39:0;22568:6;;22561:39;;;-1:-1:-1;;;22561:39:0;;22594:4;22561:39;;;;;;-1:-1:-1;;;;;22568:6:0;;;;22561:24;;:39;;;;;22520;;22561;;;;;;;;22568:6;22561:39;;;5:2:-1;;;;30:1;27;20:12;5:2;22561:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22561:39:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;22561:39:0;22602:8;;-1:-1:-1;;;;;22602:8:0;;;;-1:-1:-1;;;22612:8:0;;;22512:7;:109::i;:::-;13956:1;13945:8;:12;22471:158::o;14212:283::-;13192:34;;;;;;;;;;;-1:-1:-1;;;13192:34:0;;;;;14340:43;;-1:-1:-1;;;;;14340:43:0;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;14340:43:0;;;;;;25:18:-1;;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;14329:55:0;;;;14294:12;;14308:17;;14329:10;;;14340:43;14329:55;;;25:18:-1;14329: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;;;14329: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;;14293:91:0;;;;14403:7;:57;;;;-1:-1:-1;14415:11:0;;:16;;:44;;;14446:4;14435:24;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;14435:24:0;14415:44;14395:92;;;;;-1:-1:-1;;;14395:92:0;;;;;;;;;;;;-1:-1:-1;;;14395:92:0;;;;;;;;;;;;;;;14212:283;;;;;:::o;8017:142::-;8069:6;8096;;;:30;;-1:-1:-1;;8111:5:0;;;8125:1;8120;8111:5;8120:1;8106:15;;;;;:20;8096:30;8088:63;;;;;-1:-1:-1;;;8088:63:0;;;;;;;;;;;;-1:-1:-1;;;8088:63:0;;;;;;;;;;;;;;7880:129;7964:5;;;7959:16;;;;7951:50;;;;;-1:-1:-1;;;7951:50:0;;;;;;;;;;;;-1:-1:-1;;;7951:50:0;;;;;;;;;;;;;;15320:856;-1:-1:-1;;;;;15432:23:0;;;;;:50;;-1:-1:-1;;;;;;15459:23:0;;;15432:50;15424:78;;;;;-1:-1:-1;;;15424:78:0;;;;;;;;;;;;-1:-1:-1;;;15424:78:0;;;;;;;;;;;;;;;15617:18;;15544:23;:15;:23;;;-1:-1:-1;;;15617:18:0;;;;15600:35;;;15673:15;;;;;;:33;;-1:-1:-1;;;;;;15692:14:0;;;;15673:33;:51;;;;-1:-1:-1;;;;;;15710:14:0;;;;15673:51;15669:336;;;15879:11;15826:64;;15831:44;15865:9;15831:27;15848:9;15831:16;:27::i;:::-;-1:-1:-1;;;;;15831:33:0;;:44;:33;:44;:::i;:::-;15802:20;:88;;-1:-1:-1;;;;;15826:50:0;;;;:64;;;;15802:88;;;15929:64;;;15934:44;15968:9;15934:27;15951:9;15934:16;:27::i;:44::-;15905:20;:88;;-1:-1:-1;;;;;15929:50:0;;;;:64;;;;15905:88;;;15669:336;16015:8;:28;;-1:-1:-1;;;;;;16015:28:0;-1:-1:-1;;;;;16015:28:0;;;;;;;-1:-1:-1;;;;;;;;16054:28:0;-1:-1:-1;;;16054:28:0;;;;;;;;;-1:-1:-1;;;;;16093:35:0;-1:-1:-1;;;16093:35:0;;;;;;;;;16144:24;;;16149:8;;;16144:24;;16159:8;;;;;;;16144:24;;;;;;;;;;;;;;;;;15320:856;;;;;;:::o;9970:169::-;-1:-1:-1;;;;;10051:16:0;;;;;;;:9;:16;;;;;;;;:25;;;;;;;;;;;;;:33;;;10100:31;;;;;;;;;;;;;;;;;9970:169;;;:::o;10147:220::-;-1:-1:-1;;;;;10241:15:0;;;;;;:9;:15;;;;;;:26;;10261:5;10241:26;:19;:26;:::i;:::-;-1:-1:-1;;;;;10223:15:0;;;;;;;:9;:15;;;;;;:44;;;;10294:13;;;;;;;:24;;10312:5;10294:24;:17;:24;:::i;:::-;-1:-1:-1;;;;;10278:13:0;;;;;;;:9;:13;;;;;;;;;:40;;;;10334:25;;;;;;;10278:13;;10334:25;;;;-1:-1:-1;;;;;;;;;;;10334:25:0;;;;;;;;10147:220;;;:::o;16266:833::-;16339:10;16362:13;16392:7;;;;;;;;;-1:-1:-1;;;;;16392:7:0;-1:-1:-1;;;;;16378:28:0;;:30;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16378:30:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16378:30:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;16378:30:0;16471:5;;-1:-1:-1;;;;;16427:19:0;;;;;;-1:-1:-1;16378:30:0;;-1:-1:-1;16471:5:0;16502:590;;16532:11;;16528:494;;16564:10;16577:41;16587:30;-1:-1:-1;;;;;16587:15:0;;;;:30;;;:19;:30;:::i;16577:41::-;16564:54;;16637:14;16654:17;16664:6;16654:9;:17::i;:::-;16637:34;;16702:9;16694:5;:17;16690:317;;;16736:14;16753:37;16769:20;:5;16779:9;16769:20;:9;:20;:::i;:::-;16753:11;;;:37;:15;:37;:::i;:::-;16736:54;-1:-1:-1;16813:16:0;16832:27;16849:9;16832:12;:5;16842:1;16832:12;:9;:12;:::i;:::-;:16;:27;:16;:27;:::i;:::-;16813:46;;16882:14;16911:11;16899:9;:23;;;;;;;-1:-1:-1;16949:13:0;;16945:42;;16964:23;16970:5;16977:9;16964:5;:23::i;:::-;16690:317;;;;16528:494;;;16502:590;;;17043:11;;17039:53;;17079:1;17071:5;:9;17039:53;16266:833;;;;;;:::o;11941:303::-;11986:6;12013:1;12009;:5;12005:232;;;-1:-1:-1;12035:1:0;12068;12064;12060:5;;:9;12084:92;12095:1;12091;:5;12084:92;;;12121:1;12117:5;;12159:1;12154;12150;12146;:5;;;;;;:9;12145:15;;;;;;12141:19;;12084:92;;;12005:232;;;;12197:6;;12193:44;;-1:-1:-1;12224:1:0;12193:44;11941:303;;;:::o;9544:201::-;9617:11;;:22;;9633:5;9617:22;:15;:22;:::i;:::-;9603:11;:36;;;-1:-1:-1;;;;;9666:13:0;;;;:9;:13;;;;;;:24;;9684:5;9666:24;:17;:24;:::i;:::-;-1:-1:-1;;;;;9650:13:0;;;;;;:9;:13;;;;;;;;:40;;;;9706:31;;;;;;;9650:13;;;;-1:-1:-1;;;;;;;;;;;9706:31:0;;;;;;;;;9544:201;;:::o;11727:96::-;11779:6;11806:1;11802;:5;:13;;11814:1;11802:13;;;11810:1;11802:13;11798:17;11727:96;-1:-1:-1;;;11727:96:0:o;9753:209::-;-1:-1:-1;;;;;9832:15:0;;;;;;:9;:15;;;;;;:26;;9852:5;9832:26;:19;:26;:::i;:::-;-1:-1:-1;;;;;9814:15:0;;;;;;:9;:15;;;;;:44;;;;9883:11;:22;;9899:5;9883:22;:15;:22;:::i;:::-;9869:11;:36;;;9921:33;;;;;;;;-1:-1:-1;;;;;9921:33:0;;;-1:-1:-1;;;;;;;;;;;9921:33:0;;;;;;;;;9753:209;;:::o;12566:120::-;-1:-1:-1;;;;;12642:10:0;-1:-1:-1;;;12642:17:0;;12566:120::o;12757:108::-;12817:9;-1:-1:-1;;;;;12847:10:0;;-1:-1:-1;;;;;12843:14:0;;12847:10;12843:14;;;;;;12757:108;-1:-1:-1;;;12757:108:0:o;7744:128::-;7828:5;;;7823:16;;;;7815:49;;;;;-1:-1:-1;;;7815:49:0;;;;;;;;;;;;-1:-1:-1;;;7815:49:0;;;;;;;;;;;;;

Swarm Source

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