Contract 0xA4aE46174d6CDB3107ab579De758809F864aee7C 7

Txn Hash Method
Block
From
To
Value [Txn Fee]
0x4755c24bd90d378c5768f95c3d84c3458edeb3d3abadd2c24390ba9b54b4aa89Convert314925202023-06-18 14:44:23108 days 12 hrs ago0x740d618e92484b6f142e49b3644b26cc370232be IN  0xa4ae46174d6cdb3107ab579de758809f864aee7c0 AVAX0.007316582 26
0xc8d98c829d48db82ce07efc70a464231e9c40b7a73baf230d6d9b5dc13bfb69bConvert257728502023-02-03 8:40:49243 days 18 hrs ago0x740d618e92484b6f142e49b3644b26cc370232be IN  0xa4ae46174d6cdb3107ab579de758809f864aee7c0 AVAX0.007316582 26
0x8ae51d176449690706c3918d033fcedb57d4d94cf09c01e967cd27f04fd1d7c5Convert231633582022-12-03 13:54:32305 days 13 hrs ago0x740d618e92484b6f142e49b3644b26cc370232be IN  0xa4ae46174d6cdb3107ab579de758809f864aee7c0 AVAX0.007296016 26
0xb4a3bc96b2956e6fd7683f4167d7b69894c0432f7c40aa984e88b94027ef191dConvert231630732022-12-03 13:44:47305 days 13 hrs ago0x740d618e92484b6f142e49b3644b26cc370232be IN  0xa4ae46174d6cdb3107ab579de758809f864aee7c0 AVAX0.007233668 26
0xa88e844208d1f9f6c48a267cd4295659c07aff8284e6926709a1a760b8814e99Convert175604002022-07-20 5:13:26441 days 22 hrs ago0x0a92a9feaaf31e136a5bb2cfa2deba3e61724c57 IN  0xa4ae46174d6cdb3107ab579de758809f864aee7c0 AVAX0.008275904 26
0xe0abaeace95ee40f30b5936e4cc15e4ea3723746715261001c97e48da4121a85Convert175601872022-07-20 5:06:20441 days 22 hrs ago0x0a92a9feaaf31e136a5bb2cfa2deba3e61724c57 IN  0xa4ae46174d6cdb3107ab579de758809f864aee7c0 AVAX0.008133892 26
0x525a3871256c56d6e9383b775848226bed23ebb6293a4c33675c85f3200d4fb3Convert175600082022-07-20 5:00:22441 days 22 hrs ago0x0a92a9feaaf31e136a5bb2cfa2deba3e61724c57 IN  0xa4ae46174d6cdb3107ab579de758809f864aee7c0 AVAX0.008241896 26
0xc9fc944d0f69b96842fcd527590b827f7b3e7838d3dc2491d42c96fb3971f7c5Convert175596392022-07-20 4:47:52441 days 22 hrs ago0x0a92a9feaaf31e136a5bb2cfa2deba3e61724c57 IN  0xa4ae46174d6cdb3107ab579de758809f864aee7c0 AVAX0.008156876 26
0xf4e60b70c32f368a8c946ad8558c3bb45bcf64c726eda52d77ce80d7d7cd3c6eConvert175593922022-07-20 4:39:21441 days 22 hrs ago0x0a92a9feaaf31e136a5bb2cfa2deba3e61724c57 IN  0xa4ae46174d6cdb3107ab579de758809f864aee7c0 AVAX0.008213556 26
0xa29cefb95aaec1e3f178135684c2994d2956175f0b793197f7b00440de90f13dConvert159007552022-06-11 18:53:25480 days 8 hrs ago0xc689c01752677e10b5452209f41e0e3d5fc7bf4a IN  0xa4ae46174d6cdb3107ab579de758809f864aee7c0 AVAX0.008253232 26
0xd58f34c9b4afe4465255e424bf0252a42db324e44b26a8c89f7522dece9c53c2Convert159003362022-06-11 18:39:18480 days 8 hrs ago0xc689c01752677e10b5452209f41e0e3d5fc7bf4a IN  0xa4ae46174d6cdb3107ab579de758809f864aee7c0 AVAX0.011027180315 38.646976022
0xa04fc3645de1fafc676d91df0bde57b007011c2aa7b46e36d15ebd75999064a4Convert113336822022-02-24 11:57:45587 days 15 hrs agoAlligator: Deployer IN  0xa4ae46174d6cdb3107ab579de758809f864aee7c0 AVAX0.008813366106 28.570207261
0xc8846825f79e0ede10ce3feb66f26a2d03e153db8343ec53f44ddcf6b4b7b142Convert113336762022-02-24 11:57:30587 days 15 hrs agoAlligator: Deployer IN  0xa4ae46174d6cdb3107ab579de758809f864aee7c0 AVAX0.008900195081 28.988880506
0x80703bc046d81fb2301b52342fe6b7aa56ddca5c6a6004ea420b9b0e8166727bConvert108456962022-02-13 0:33:46599 days 2 hrs agoAlligator: Deployer IN  0xa4ae46174d6cdb3107ab579de758809f864aee7c0 AVAX0.008384504748 27.367519179
0x001a1c681d8215d5d9ca8127f40684211283ca9833d8ff638b8a004a651fb15fConvert108321872022-02-12 17:05:58599 days 10 hrs agoAlligator: Deployer IN  0xa4ae46174d6cdb3107ab579de758809f864aee7c0 AVAX0.024315939611 78.992224891
0xfac8161c7e488d404d4d71c93202522a25037b78bd6071393872be82325a1f05Convert108321772022-02-12 17:05:39599 days 10 hrs agoAlligator: Deployer IN  0xa4ae46174d6cdb3107ab579de758809f864aee7c0 AVAX0.019092505466 78.293216435
0xd9d950d8fbc721d5c859485b81cd2c9a0259611276d203deefd53ca25e1fcb92Convert106005412022-02-07 9:24:37604 days 18 hrs agoAlligator: Deployer IN  0xa4ae46174d6cdb3107ab579de758809f864aee7c0 AVAX0.007804675 25
0x1786e1ed302f8cdc84013e90f8ccb70e994af401e49ca2793cc36413e343594aConvert102698792022-01-30 20:09:38612 days 7 hrs agoAlligator: Deployer IN  0xa4ae46174d6cdb3107ab579de758809f864aee7c0 AVAX0.006179475 25
0xbe64344711deea4e92a3493b918b137cc6940f46e290f56c9919bada7212a228Convert102697522022-01-30 20:05:23612 days 7 hrs agoAlligator: Deployer IN  0xa4ae46174d6cdb3107ab579de758809f864aee7c0 AVAX0.006348202111 25.682611027
0x00e2d2880edab62e8127b8b0adbcbd89d0be6fb180abb272c6b9f0238203726eConvert102697372022-01-30 20:04:55612 days 7 hrs agoAlligator: Deployer IN  0xa4ae46174d6cdb3107ab579de758809f864aee7c0 AVAX0.006280005802 25.420184753
0x883bd9ef4430949ce11d3cea953af1af1fd854aa03b450256ebbb6f5db580c66Convert102696122022-01-30 20:00:53612 days 7 hrs agoAlligator: Deployer IN  0xa4ae46174d6cdb3107ab579de758809f864aee7c0 AVAX0.007736319514 25.132036873
0x39e15ad0d0c58fd810a6e38b51546f67275785e2ba93327380abd1fa343d5033Convert102696062022-01-30 20:00:41612 days 7 hrs agoAlligator: Deployer IN  0xa4ae46174d6cdb3107ab579de758809f864aee7c0 AVAX0.007697250576 25.142171218
0x49f92331f6fe839306b3278ca2933854738585450fdaddc86acedd78ecc42b21Convert101358222022-01-27 18:48:22615 days 8 hrs agoAlligator: Deployer IN  0xa4ae46174d6cdb3107ab579de758809f864aee7c0 AVAX0.016649425606 54.79795021
0xfd192bdbdc9f2a6a0fff49a72df2f49385ed83455c3ec9b7a37562704942280dConvert98604952022-01-21 11:23:23621 days 16 hrs agoAlligator: Deployer IN  0xa4ae46174d6cdb3107ab579de758809f864aee7c0 AVAX0.007653725 25
0x6bd2fce70dc5d973d5a0055ceeae881627f9cf49b966ffe8bdfc95dcac0925baConvert96196942022-01-15 21:58:43627 days 5 hrs agoAlligator: Deployer IN  0xa4ae46174d6cdb3107ab579de758809f864aee7c0 AVAX0.007690225 25
[ Download CSV Export 
Parent Txn Hash Block From To Value
Index Block
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
AlligatorEnricher

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at snowtrace.io on 2021-12-27
*/

// File: contracts/libraries/SafeMath.sol

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

// a library for performing overflow-safe math,
// updated with awesomeness from of DappHub (https://github.com/dapphub/ds-math)
library SafeMath {
    function add(uint256 a, uint256 b) internal pure returns (uint256 c) {
        require((c = a + b) >= b, "SafeMath: Add Overflow");
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256 c) {
        require((c = a - b) <= a, "SafeMath: Underflow");
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256 c) {
        require(b == 0 || (c = a * b) / b == a, "SafeMath: Mul Overflow");
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256 c) {
        require(b > 0, "SafeMath: Div by Zero");
        c = a / b;
    }

    function to128(uint256 a) internal pure returns (uint128 c) {
        require(a <= uint128(-1), "SafeMath: uint128 Overflow");
        c = uint128(a);
    }
}

library SafeMath128 {
    function add(uint128 a, uint128 b) internal pure returns (uint128 c) {
        require((c = a + b) >= b, "SafeMath: Add Overflow");
    }

    function sub(uint128 a, uint128 b) internal pure returns (uint128 c) {
        require((c = a - b) <= a, "SafeMath: Underflow");
    }
}

// File: contracts/libraries/interfaces/IERC20.sol

pragma solidity 0.6.12;

interface IERC20 {
    function totalSupply() external view returns (uint256);

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

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

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

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

    // EIP 2612
    function permit(
        address owner,
        address spender,
        uint256 value,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external;
}

// File: contracts/libraries/SafeERC20.sol

pragma solidity 0.6.12;

library SafeERC20 {
    function safeSymbol(IERC20 token) internal view returns (string memory) {
        (bool success, bytes memory data) = address(token).staticcall(abi.encodeWithSelector(0x95d89b41));
        return success && data.length > 0 ? abi.decode(data, (string)) : "???";
    }

    function safeName(IERC20 token) internal view returns (string memory) {
        (bool success, bytes memory data) = address(token).staticcall(abi.encodeWithSelector(0x06fdde03));
        return success && data.length > 0 ? abi.decode(data, (string)) : "???";
    }

    function safeDecimals(IERC20 token) public view returns (uint8) {
        (bool success, bytes memory data) = address(token).staticcall(abi.encodeWithSelector(0x313ce567));
        return success && data.length == 32 ? abi.decode(data, (uint8)) : 18;
    }

    function safeTransfer(
        IERC20 token,
        address to,
        uint256 amount
    ) internal {
        (bool success, bytes memory data) = address(token).call(abi.encodeWithSelector(0xa9059cbb, to, amount));
        require(success && (data.length == 0 || abi.decode(data, (bool))), "SafeERC20: Transfer failed");
    }

    function safeTransferFrom(
        IERC20 token,
        address from,
        uint256 amount
    ) internal {
        (bool success, bytes memory data) = address(token).call(
            abi.encodeWithSelector(0x23b872dd, from, address(this), amount)
        );
        require(success && (data.length == 0 || abi.decode(data, (bool))), "SafeERC20: TransferFrom failed");
    }
}

// File: contracts/interfaces/IERC20Alligator.sol

pragma solidity >=0.5.0;

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

    function name() external view returns (string memory);

    function symbol() external view returns (string memory);

    function decimals() external view returns (uint8);

    function totalSupply() external view returns (uint256);

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

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

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

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

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

// File: contracts/operations/interfaces/IAlligatorPair.sol

pragma solidity >=0.5.0;

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

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

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

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

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

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

    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function PERMIT_TYPEHASH() external pure returns (bytes32);

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

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

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

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

    function mint(address to) external returns (uint256 liquidity);

    function burn(address to) external returns (uint256 amount0, uint256 amount1);

    function swap(
        uint256 amount0Out,
        uint256 amount1Out,
        address to,
        bytes calldata data
    ) external;

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

// File: contracts/operations/interfaces/IAlligatorFactory.sol

pragma solidity >=0.5.0;

interface IAlligatorFactory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint256);

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

    function migrator() external view returns (address);

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

    function allPairs(uint256) external view returns (address pair);

    function allPairsLength() external view returns (uint256);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;

    function setMigrator(address) external;
}

// File: contracts/operations/BoringOwnable.sol

pragma solidity 0.6.12;

// Audit on 5-Jan-2021 by Keno and BoringCrypto
// Source: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/access/Ownable.sol + Claimable.sol
// Edited by BoringCrypto

contract BoringOwnableData {
    address public owner;
    address public pendingOwner;
}

contract BoringOwnable is BoringOwnableData {
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /// @notice `owner` defaults to msg.sender on construction.
    constructor() public {
        owner = msg.sender;
        emit OwnershipTransferred(address(0), msg.sender);
    }

    /// @notice Transfers ownership to `newOwner`. Either directly or claimable by the new pending owner.
    /// Can only be invoked by the current `owner`.
    /// @param newOwner Address of the new owner.
    /// @param direct True if `newOwner` should be set immediately. False if `newOwner` needs to use `claimOwnership`.
    /// @param renounce Allows the `newOwner` to be `address(0)` if `direct` and `renounce` is True.
    /// Has no effect otherwise.
    function transferOwnership(
        address newOwner,
        bool direct,
        bool renounce
    ) public onlyOwner {
        if (direct) {
            // Checks
            require(newOwner != address(0) || renounce, "Ownable: zero address");

            // Effects
            emit OwnershipTransferred(owner, newOwner);
            owner = newOwner;
            pendingOwner = address(0);
        } else {
            // Effects
            pendingOwner = newOwner;
        }
    }

    /// @notice Needs to be called by `pendingOwner` to claim ownership.
    function claimOwnership() public {
        address _pendingOwner = pendingOwner;

        // Checks
        require(msg.sender == _pendingOwner, "Ownable: caller != pending owner");

        // Effects
        emit OwnershipTransferred(owner, _pendingOwner);
        owner = _pendingOwner;
        pendingOwner = address(0);
    }

    /// @notice Only allows the `owner` to execute the function.
    modifier onlyOwner() {
        require(msg.sender == owner, "Ownable: caller is not the owner");
        _;
    }
}

// File: contracts/AlligatorEnricher.sol

// P1 - P3: OK
pragma solidity 0.6.12;

// This contract "enriches" the AlligatorMoneybags contract by transferring a portion
// of the trading fees in the form of GTR tokens.

// T1 - T4: OK
contract AlligatorEnricher is BoringOwnable {
    using SafeMath for uint256;
    using SafeERC20 for IERC20;

    /* ========== CONSTANT VARIABLES ========== */

    IAlligatorFactory public immutable factory;
    address public immutable alligatorMoneybags;
    address private immutable gtr;
    address private immutable wavax;

    mapping(address => address) internal _bridges;

    event LogBridgeSet(address indexed token, address indexed bridge);

    event LogConvert(
        address indexed server,
        address indexed token0,
        address indexed token1,
        uint256 amount0,
        uint256 amount1,
        uint256 amountGTR
    );

    /* ========== CONSTRUCTOR ========== */

    constructor(
        address _factory,
        address _alligatorMoneybags,
        address _gtr,
        address _wavax
    ) public {
        factory = IAlligatorFactory(_factory);
        alligatorMoneybags = _alligatorMoneybags;
        gtr = _gtr;
        wavax = _wavax;
    }

    /* ========== External Functions ========== */

    // F3: _convert is separate to save gas by only checking the 'onlyEOA' modifier once in case of convertMultiple
    // F6: There is an exploit to add lots of GTR to alligatorMoneybags, run convert, then remove the GTR again.
    //     As the size of AlligatorMoneybags has grown, this requires large amounts of funds and isn't super profitable anymore
    //     The onlyEOA modifier prevents this being done with a flash loan.
    function convert(address token0, address token1) external onlyEOA {
        _convert(token0, token1);
    }

    function convertMultiple(address[] calldata token0, address[] calldata token1) external onlyEOA {
        // TODO: This can be optimized a fair bit, but this is safer and simpler for now
        uint256 len = token0.length;
        for (uint256 i = 0; i < len; i++) {
            _convert(token0[i], token1[i]);
        }
    }

    /* ========== Modifiers ========== */

    // It's not a fool proof solution, but it prevents flash loans, so here it's ok to use tx.origin
    modifier onlyEOA() {
        // Try to make flash-loan exploit harder to do by only allowing externally owned addresses.
        require(msg.sender == tx.origin, "AlligatorEnricher: must use EOA");
        _;
    }

    /* ========== Public Functions ========== */

    function bridgeFor(address token) public view returns (address bridge) {
        bridge = _bridges[token];
        if (bridge == address(0)) {
            bridge = wavax;
        }
    }

    /* ========== Internal Functions ========== */

    function _convert(address token0, address token1) internal {
        // Interactions
        // S1 - S4: OK
        IAlligatorPair pair = IAlligatorPair(factory.getPair(token0, token1));
        require(address(pair) != address(0), "AlligatorEnricher: Invalid pair");
        // balanceOf: S1 - S4: OK
        // transfer: X1 - X5: OK
        IERC20(address(pair)).safeTransfer(address(pair), pair.balanceOf(address(this)));

        // X1 - X5: OK
        // We don't take amount0 and amount1 from here, as it won't take into account reflect tokens.
        pair.burn(address(this));

        // We get the amount0 and amount1 by their respective balance of the AlligatorEnricher.
        uint256 amount0 = IERC20(token0).balanceOf(address(this));
        uint256 amount1 = IERC20(token1).balanceOf(address(this));

        emit LogConvert(msg.sender, token0, token1, amount0, amount1, _convertStep(token0, token1, amount0, amount1));
    }

    function _convertStep(
        address token0,
        address token1,
        uint256 amount0,
        uint256 amount1
    ) internal returns (uint256 gtrOut) {
        // Interactions
        if (token0 == token1) {
            uint256 amount = amount0.add(amount1);
            if (token0 == gtr) {
                IERC20(gtr).safeTransfer(alligatorMoneybags, amount);
                gtrOut = amount;
            } else if (token0 == wavax) {
                gtrOut = _toGTR(wavax, amount);
            } else {
                address bridge = bridgeFor(token0);
                amount = _swap(token0, bridge, amount, address(this));
                gtrOut = _convertStep(bridge, bridge, amount, 0);
            }
        } else if (token0 == gtr) {
            // eg. GTR - AVAX
            IERC20(gtr).safeTransfer(alligatorMoneybags, amount0);
            gtrOut = _toGTR(token1, amount1).add(amount0);
        } else if (token1 == gtr) {
            // eg. USDT - GTR
            IERC20(gtr).safeTransfer(alligatorMoneybags, amount1);
            gtrOut = _toGTR(token0, amount0).add(amount1);
        } else if (token0 == wavax) {
            // eg. AVAX - USDC
            gtrOut = _toGTR(wavax, _swap(token1, wavax, amount1, address(this)).add(amount0));
        } else if (token1 == wavax) {
            // eg. USDT - AVAX
            gtrOut = _toGTR(wavax, _swap(token0, wavax, amount0, address(this)).add(amount1));
        } else {
            // eg. MIC - USDT
            address bridge0 = bridgeFor(token0);
            address bridge1 = bridgeFor(token1);
            if (bridge0 == token1) {
                // eg. MIC - USDT - and bridgeFor(MIC) = USDT
                gtrOut = _convertStep(bridge0, token1, _swap(token0, bridge0, amount0, address(this)), amount1);
            } else if (bridge1 == token0) {
                // eg. WBTC - DSD - and bridgeFor(DSD) = WBTC
                gtrOut = _convertStep(token0, bridge1, amount0, _swap(token1, bridge1, amount1, address(this)));
            } else {
                gtrOut = _convertStep(
                    bridge0,
                    bridge1, // eg. USDT - DSD - and bridgeFor(DSD) = WBTC
                    _swap(token0, bridge0, amount0, address(this)),
                    _swap(token1, bridge1, amount1, address(this))
                );
            }
        }
    }

    function _swap(
        address fromToken,
        address toToken,
        uint256 amountIn,
        address to
    ) internal returns (uint256 realAmountOut) {
        // Checks
        // X1 - X5: OK
        IAlligatorPair pair = IAlligatorPair(factory.getPair(fromToken, toToken));
        require(address(pair) != address(0), "AlligatorEnricher: Cannot convert");

        // Interactions
        // X1 - X5: OK
        (uint256 reserve0, uint256 reserve1, ) = pair.getReserves();

        IERC20(fromToken).safeTransfer(address(pair), amountIn);

        // Added in case fromToken is a reflect token.
        if (fromToken == pair.token0()) {
            amountIn = IERC20(fromToken).balanceOf(address(pair)) - reserve0;
        } else {
            amountIn = IERC20(fromToken).balanceOf(address(pair)) - reserve1;
        }

        uint256 balanceBefore = IERC20(toToken).balanceOf(to);

        uint256 amountInWithFee = amountIn.mul(997);
        if (fromToken == pair.token0()) {
            uint256 amountOut = amountInWithFee.mul(reserve1) / reserve0.mul(1000).add(amountInWithFee);
            pair.swap(0, amountOut, to, new bytes(0));
            // TODO: Add maximum slippage?
        } else {
            uint256 amountOut = amountInWithFee.mul(reserve0) / reserve1.mul(1000).add(amountInWithFee);
            pair.swap(amountOut, 0, to, new bytes(0));
            // TODO: Add maximum slippage?
        }

        realAmountOut = IERC20(toToken).balanceOf(to) - balanceBefore;
    }

    function _toGTR(address token, uint256 amountIn) internal returns (uint256 amountOut) {
        // X1 - X5: OK
        amountOut = _swap(token, gtr, amountIn, alligatorMoneybags);
    }

    /* ========== RESTRICTED FUNCTIONS ========== */

    function setBridge(address token, address bridge) external onlyOwner {
        // Checks
        require(token != gtr && token != wavax && token != bridge, "AlligatorEnricher: Invalid bridge");

        // Effects
        _bridges[token] = bridge;
        emit LogBridgeSet(token, bridge);
    }
}

Contract ABI

[{"inputs":[{"internalType":"address","name":"_factory","type":"address"},{"internalType":"address","name":"_alligatorMoneybags","type":"address"},{"internalType":"address","name":"_gtr","type":"address"},{"internalType":"address","name":"_wavax","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"bridge","type":"address"}],"name":"LogBridgeSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"server","type":"address"},{"indexed":true,"internalType":"address","name":"token0","type":"address"},{"indexed":true,"internalType":"address","name":"token1","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount0","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount1","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountGTR","type":"uint256"}],"name":"LogConvert","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[],"name":"alligatorMoneybags","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"bridgeFor","outputs":[{"internalType":"address","name":"bridge","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token0","type":"address"},{"internalType":"address","name":"token1","type":"address"}],"name":"convert","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"token0","type":"address[]"},{"internalType":"address[]","name":"token1","type":"address[]"}],"name":"convertMultiple","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"factory","outputs":[{"internalType":"contract IAlligatorFactory","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"bridge","type":"address"}],"name":"setBridge","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"},{"internalType":"bool","name":"direct","type":"bool"},{"internalType":"bool","name":"renounce","type":"bool"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]

61010060405234801561001157600080fd5b50604051611abb380380611abb8339818101604052608081101561003457600080fd5b5080516020820151604080840151606090940151600080546001600160a01b0319163390811782559251949593949192917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a36001600160601b0319606094851b811660805292841b831660a05290831b821660c05290911b1660e05260805160601c60a05160601c60c05160601c60e05160601c611958610163600039806105ca52806106d25280610d355280610d725280610f175280610f545280610f7d5280610faa5280610fe7528061101052508061058d5280610c9f5280610ce45280610dd25280610e175280610e7b5280610ec0528061114352508061077f5280610d065280610e395280610ee2528061116552508061075b52806107b4528061119552506119586000f3fe608060405234801561001057600080fd5b506004361061009e5760003560e01c8063a761a93911610066578063a761a939146101f7578063bd1b820c1461021d578063c45a01551461024b578063c5064a8b14610253578063e30c39781461025b5761009e565b8063078dfbe7146100a3578063303e6aa4146100db5780634e71e0c81461019d5780638da5cb5b146101a55780639d22ae8c146101c9575b600080fd5b6100d9600480360360608110156100b957600080fd5b506001600160a01b03813516906020810135151590604001351515610263565b005b6100d9600480360360408110156100f157600080fd5b81019060208101813564010000000081111561010c57600080fd5b82018360208201111561011e57600080fd5b8035906020019184602083028401116401000000008311171561014057600080fd5b91939092909160208101903564010000000081111561015e57600080fd5b82018360208201111561017057600080fd5b8035906020019184602083028401116401000000008311171561019257600080fd5b5090925090506103ab565b6100d961045b565b6101ad61051d565b604080516001600160a01b039092168252519081900360200190f35b6100d9600480360360408110156101df57600080fd5b506001600160a01b038135811691602001351661052c565b6101ad6004803603602081101561020d57600080fd5b50356001600160a01b03166106af565b6100d96004803603604081101561023357600080fd5b506001600160a01b03813581169160200135166106f7565b6101ad610759565b6101ad61077d565b6101ad6107a1565b6000546001600160a01b031633146102c2576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b811561038a576001600160a01b0383161515806102dc5750805b610325576040805162461bcd60e51b81526020600482015260156024820152744f776e61626c653a207a65726f206164647265737360581b604482015290519081900360640190fd5b600080546040516001600160a01b03808716939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0385166001600160a01b0319918216179091556001805490911690556103a6565b600180546001600160a01b0319166001600160a01b0385161790555b505050565b3332146103ff576040805162461bcd60e51b815260206004820152601f60248201527f416c6c696761746f72456e7269636865723a206d7573742075736520454f4100604482015290519081900360640190fd5b8260005b818110156104535761044b86868381811061041a57fe5b905060200201356001600160a01b031685858481811061043657fe5b905060200201356001600160a01b03166107b0565b600101610403565b505050505050565b6001546001600160a01b03163381146104bb576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c657220213d2070656e64696e67206f776e6572604482015290519081900360640190fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b039092166001600160a01b0319928316179055600180549091169055565b6000546001600160a01b031681565b6000546001600160a01b0316331461058b576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316141580156105ff57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b801561061d5750806001600160a01b0316826001600160a01b031614155b6106585760405162461bcd60e51b81526004018080602001828103825260218152602001806118e16021913960400191505060405180910390fd5b6001600160a01b0382811660008181526002602052604080822080546001600160a01b0319169486169485179055517f2e103aa707acc565f9a1547341914802b2bfe977fd79c595209f248ae4b006139190a35050565b6001600160a01b0380821660009081526002602052604090205416806106f257507f00000000000000000000000000000000000000000000000000000000000000005b919050565b33321461074b576040805162461bcd60e51b815260206004820152601f60248201527f416c6c696761746f72456e7269636865723a206d7573742075736520454f4100604482015290519081900360640190fd5b61075582826107b0565b5050565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b6001546001600160a01b031681565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e6a4390584846040518363ffffffff1660e01b815260040180836001600160a01b03168152602001826001600160a01b031681526020019250505060206040518083038186803b15801561083057600080fd5b505afa158015610844573d6000803e3d6000fd5b505050506040513d602081101561085a57600080fd5b505190506001600160a01b0381166108b9576040805162461bcd60e51b815260206004820152601f60248201527f416c6c696761746f72456e7269636865723a20496e76616c6964207061697200604482015290519081900360640190fd5b61094781826001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561090a57600080fd5b505afa15801561091e573d6000803e3d6000fd5b505050506040513d602081101561093457600080fd5b50516001600160a01b0384169190610b09565b6040805163226bf2d160e21b815230600482015281516001600160a01b038416926389afcb4492602480820193918290030181600087803b15801561098b57600080fd5b505af115801561099f573d6000803e3d6000fd5b505050506040513d60408110156109b557600080fd5b5050604080516370a0823160e01b815230600482015290516000916001600160a01b038616916370a0823191602480820192602092909190829003018186803b158015610a0157600080fd5b505afa158015610a15573d6000803e3d6000fd5b505050506040513d6020811015610a2b57600080fd5b5051604080516370a0823160e01b815230600482015290519192506000916001600160a01b038616916370a08231916024808301926020929190829003018186803b158015610a7957600080fd5b505afa158015610a8d573d6000803e3d6000fd5b505050506040513d6020811015610aa357600080fd5b505190506001600160a01b03808516908616337fd06b1d7ed79b664d17472c6f6997b929f1abe463ccccb4e5b6a0038f2f730c158585610ae58b8b8484610c73565b60408051938452602084019290925282820152519081900360600190a45050505050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b178152925182516000946060949389169392918291908083835b60208310610b865780518252601f199092019160209182019101610b67565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114610be8576040519150601f19603f3d011682016040523d82523d6000602084013e610bed565b606091505b5091509150818015610c1b575080511580610c1b5750808060200190516020811015610c1857600080fd5b50515b610c6c576040805162461bcd60e51b815260206004820152601a60248201527f5361666545524332303a205472616e73666572206661696c6564000000000000604482015290519081900360640190fd5b5050505050565b6000836001600160a01b0316856001600160a01b03161415610dd0576000610c9b84846110e4565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316866001600160a01b03161415610d3357610d2b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000167f000000000000000000000000000000000000000000000000000000000000000083610b09565b809150610dca565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316866001600160a01b03161415610d9e57610d977f00000000000000000000000000000000000000000000000000000000000000008261113b565b9150610dca565b6000610da9876106af565b9050610db787828430611190565b9150610dc68182846000610c73565b9250505b506110dc565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b03161415610e7957610e5e6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000167f000000000000000000000000000000000000000000000000000000000000000085610b09565b610e7283610e6c868561113b565b906110e4565b90506110dc565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b03161415610f1557610f076001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000167f000000000000000000000000000000000000000000000000000000000000000084610b09565b610e7282610e6c878661113b565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b03161415610fa857610e727f0000000000000000000000000000000000000000000000000000000000000000610fa385610e6c887f00000000000000000000000000000000000000000000000000000000000000008830611190565b61113b565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b0316141561103657610e727f0000000000000000000000000000000000000000000000000000000000000000610fa384610e6c897f00000000000000000000000000000000000000000000000000000000000000008930611190565b6000611041866106af565b9050600061104e866106af565b9050856001600160a01b0316826001600160a01b0316141561108857611081828761107b8a868a30611190565b87610c73565b92506110d9565b866001600160a01b0316816001600160a01b031614156110b9576110818782876110b48a868a30611190565b610c73565b6110d682826110ca8a868a30611190565b6110b48a868a30611190565b92505b50505b949350505050565b81810181811015611135576040805162461bcd60e51b8152602060048201526016602482015275536166654d6174683a20416464204f766572666c6f7760501b604482015290519081900360640190fd5b92915050565b6000611189837f0000000000000000000000000000000000000000000000000000000000000000847f0000000000000000000000000000000000000000000000000000000000000000611190565b9392505050565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e6a4390587876040518363ffffffff1660e01b815260040180836001600160a01b03168152602001826001600160a01b031681526020019250505060206040518083038186803b15801561121157600080fd5b505afa158015611225573d6000803e3d6000fd5b505050506040513d602081101561123b57600080fd5b505190506001600160a01b0381166112845760405162461bcd60e51b81526004018080602001828103825260218152602001806119026021913960400191505060405180910390fd5b600080826001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b1580156112c057600080fd5b505afa1580156112d4573d6000803e3d6000fd5b505050506040513d60608110156112ea57600080fd5b5080516020909101516dffffffffffffffffffffffffffff918216935016905061131e6001600160a01b0389168488610b09565b826001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b15801561135757600080fd5b505afa15801561136b573d6000803e3d6000fd5b505050506040513d602081101561138157600080fd5b50516001600160a01b03898116911614156114185781886001600160a01b03166370a08231856040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156113e457600080fd5b505afa1580156113f8573d6000803e3d6000fd5b505050506040513d602081101561140e57600080fd5b5051039550611496565b80886001600160a01b03166370a08231856040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561146657600080fd5b505afa15801561147a573d6000803e3d6000fd5b505050506040513d602081101561149057600080fd5b50510395505b6000876001600160a01b03166370a08231876040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156114e557600080fd5b505afa1580156114f9573d6000803e3d6000fd5b505050506040513d602081101561150f57600080fd5b505190506000611521886103e561187b565b9050846001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b15801561155c57600080fd5b505afa158015611570573d6000803e3d6000fd5b505050506040513d602081101561158657600080fd5b50516001600160a01b038b8116911614156116d45760006115ad82610e6c876103e861187b565b6115b7838661187b565b816115be57fe5b0490506001600160a01b03861663022c0d9f6000838b826040519080825280601f01601f1916602001820160405280156115ff576020820181803683370190505b506040518563ffffffff1660e01b815260040180858152602001848152602001836001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561166757818101518382015260200161164f565b50505050905090810190601f1680156116945780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b1580156116b657600080fd5b505af11580156116ca573d6000803e3d6000fd5b50505050506117f2565b60006116e682610e6c866103e861187b565b6116f0838761187b565b816116f757fe5b604080516000808252602082019092529290910492506001600160a01b0388169163022c0d9f9184918c906040518563ffffffff1660e01b815260040180858152602001848152602001836001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b83811015611789578181015183820152602001611771565b50505050905090810190601f1680156117b65780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b1580156117d857600080fd5b505af11580156117ec573d6000803e3d6000fd5b50505050505b81896001600160a01b03166370a08231896040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561184057600080fd5b505afa158015611854573d6000803e3d6000fd5b505050506040513d602081101561186a57600080fd5b5051039a9950505050505050505050565b60008115806118965750508082028282828161189357fe5b04145b611135576040805162461bcd60e51b8152602060048201526016602482015275536166654d6174683a204d756c204f766572666c6f7760501b604482015290519081900360640190fdfe416c6c696761746f72456e7269636865723a20496e76616c696420627269646765416c6c696761746f72456e7269636865723a2043616e6e6f7420636f6e76657274a2646970667358221220a58b9f90202bcbe1599a3c630f8c73a864c352bc2bbb5f461fca4d477f780b1c64736f6c634300060c0033000000000000000000000000d9362aa8e0405c93299c573036e7fb4ec3be124000000000000000000000000032a948f018870548bed7e888cd97a257b700d4c600000000000000000000000043c812ba28cb061b1be7514145a15c9e18a27342000000000000000000000000b31f66aa3c1e785363f0875a1b74e27b85fd66c7

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000d9362aa8e0405c93299c573036e7fb4ec3be124000000000000000000000000032a948f018870548bed7e888cd97a257b700d4c600000000000000000000000043c812ba28cb061b1be7514145a15c9e18a27342000000000000000000000000b31f66aa3c1e785363f0875a1b74e27b85fd66c7

-----Decoded View---------------
Arg [0] : _factory (address): 0xd9362aa8e0405c93299c573036e7fb4ec3be1240
Arg [1] : _alligatorMoneybags (address): 0x32a948f018870548bed7e888cd97a257b700d4c6
Arg [2] : _gtr (address): 0x43c812ba28cb061b1be7514145a15c9e18a27342
Arg [3] : _wavax (address): 0xb31f66aa3c1e785363f0875a1b74e27b85fd66c7

-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 000000000000000000000000d9362aa8e0405c93299c573036e7fb4ec3be1240
Arg [1] : 00000000000000000000000032a948f018870548bed7e888cd97a257b700d4c6
Arg [2] : 00000000000000000000000043c812ba28cb061b1be7514145a15c9e18a27342
Arg [3] : 000000000000000000000000b31f66aa3c1e785363f0875a1b74e27b85fd66c7


Deployed ByteCode Sourcemap

11081:8148:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9713:506;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;9713:506:0;;;;;;;;;;;;;;;;;:::i;:::-;;12723:333;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12723:333:0;;-1:-1:-1;12723:333:0;-1:-1:-1;12723:333:0;:::i;10301:340::-;;;:::i;8850:20::-;;;:::i;:::-;;;;-1:-1:-1;;;;;8850:20:0;;;;;;;;;;;;;;18924:302;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;18924:302:0;;;;;;;;;;:::i;13489:191::-;;;;;;;;;;;;;;;;-1:-1:-1;13489:191:0;-1:-1:-1;;;;;13489:191:0;;:::i;12606:109::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;12606:109:0;;;;;;;;;;:::i;11254:42::-;;;:::i;11303:43::-;;;:::i;8877:27::-;;;:::i;9713:506::-;10769:5;;-1:-1:-1;;;;;10769:5:0;10755:10;:19;10747:64;;;;;-1:-1:-1;;;10747:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9852:6:::1;9848:364;;;-1:-1:-1::0;;;;;9906:22:0;::::1;::::0;::::1;::::0;:34:::1;;;9932:8;9906:34;9898:68;;;::::0;;-1:-1:-1;;;9898:68:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;9898:68:0;;;;;;;;;;;;;::::1;;10033:5;::::0;;10012:37:::1;::::0;-1:-1:-1;;;;;10012:37:0;;::::1;::::0;10033:5;::::1;::::0;10012:37:::1;::::0;::::1;10064:5;:16:::0;;-1:-1:-1;;;;;10064:16:0;::::1;-1:-1:-1::0;;;;;;10064:16:0;;::::1;;::::0;;;;10095:25;;;;::::1;::::0;;9848:364:::1;;;10177:12;:23:::0;;-1:-1:-1;;;;;;10177:23:0::1;-1:-1:-1::0;;;;;10177:23:0;::::1;;::::0;;9848:364:::1;9713:506:::0;;;:::o;12723:333::-;13350:10;13364:9;13350:23;13342:67;;;;;-1:-1:-1;;;13342:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;12934:6;12920:11:::1;12958:91;12982:3;12978:1;:7;12958:91;;;13007:30;13016:6;;13023:1;13016:9;;;;;;;;;;;;;-1:-1:-1::0;;;;;13016:9:0::1;13027:6;;13034:1;13027:9;;;;;;;;;;;;;-1:-1:-1::0;;;;;13027:9:0::1;13007:8;:30::i;:::-;12987:3;;12958:91;;;;13420:1;12723:333:::0;;;;:::o;10301:340::-;10369:12;;-1:-1:-1;;;;;10369:12:0;10421:10;:27;;10413:72;;;;;-1:-1:-1;;;10413:72:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10544:5;;;10523:42;;-1:-1:-1;;;;;10523:42:0;;;;10544:5;;;10523:42;;;10576:5;:21;;-1:-1:-1;;;;;10576:21:0;;;-1:-1:-1;;;;;;10576:21:0;;;;;;;10608:25;;;;;;;10301:340::o;8850:20::-;;;-1:-1:-1;;;;;8850:20:0;;:::o;18924:302::-;10769:5;;-1:-1:-1;;;;;10769:5:0;10755:10;:19;10747:64;;;;;-1:-1:-1;;;10747:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19040:3:::1;-1:-1:-1::0;;;;;19031:12:0::1;:5;-1:-1:-1::0;;;;;19031:12:0::1;;;:30;;;;;19056:5;-1:-1:-1::0;;;;;19047:14:0::1;:5;-1:-1:-1::0;;;;;19047:14:0::1;;;19031:30;:49;;;;;19074:6;-1:-1:-1::0;;;;;19065:15:0::1;:5;-1:-1:-1::0;;;;;19065:15:0::1;;;19031:49;19023:95;;;;-1:-1:-1::0;;;19023:95:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;19151:15:0;;::::1;;::::0;;;:8:::1;:15;::::0;;;;;:24;;-1:-1:-1;;;;;;19151:24:0::1;::::0;;::::1;::::0;;::::1;::::0;;19191:27;::::1;::::0;19151:15;19191:27:::1;18924:302:::0;;:::o;13489:191::-;-1:-1:-1;;;;;13580:15:0;;;13544:14;13580:15;;;:8;:15;;;;;;;13610:20;13606:67;;-1:-1:-1;13656:5:0;13606:67;13489:191;;;:::o;12606:109::-;13350:10;13364:9;13350:23;13342:67;;;;;-1:-1:-1;;;13342:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;12683:24:::1;12692:6;12700;12683:8;:24::i;:::-;12606:109:::0;;:::o;11254:42::-;;;:::o;11303:43::-;;;:::o;8877:27::-;;;-1:-1:-1;;;;;8877:27:0;;:::o;13742:959::-;13861:19;13898:7;-1:-1:-1;;;;;13898:15:0;;13914:6;13922;13898:31;;;;;;;;;;;;;-1:-1:-1;;;;;13898:31:0;;;;;;-1:-1:-1;;;;;13898:31:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13898:31:0;;-1:-1:-1;;;;;;13949:27:0;;13941:71;;;;;-1:-1:-1;;;13941:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;14092:80;14135:4;14142;-1:-1:-1;;;;;14142:14:0;;14165:4;14142:29;;;;;;;;;;;;;-1:-1:-1;;;;;14142:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;14142:29:0;-1:-1:-1;;;;;14092:34:0;;;:80;:34;:80::i;:::-;14312:24;;;-1:-1:-1;;;14312:24:0;;14330:4;14312:24;;;;;;-1:-1:-1;;;;;14312:9:0;;;;;:24;;;;;;;;;;;-1:-1:-1;14312:9:0;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;14312:24:0;14464:39;;-1:-1:-1;;;14464:39:0;;14497:4;14464:39;;;;;;14446:15;;-1:-1:-1;;;;;14464:24:0;;;;;:39;;;;;14312:24;;14464:39;;;;;;;;:24;:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;14464:39:0;14532;;;-1:-1:-1;;;14532:39:0;;14565:4;14532:39;;;;;;14464;;-1:-1:-1;14514:15:0;;-1:-1:-1;;;;;14532:24:0;;;;;:39;;;;;14464;;14532;;;;;;;:24;:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;14532:39:0;;-1:-1:-1;;;;;;14589:104:0;;;;;;14600:10;14589:104;14628:7;14532:39;14646:46;14612:6;14620;14628:7;14532:39;14646:12;:46::i;:::-;14589:104;;;;;;;;;;;;;;;;;;;;;;;;;;13742:959;;;;;:::o;3063:336::-;3237:46;;;-1:-1:-1;;;;;3237:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3237:46:0;-1:-1:-1;;;3237:46:0;;;3217:67;;;;3182:12;;3196:17;;3217:19;;;;3237:46;3217:67;;;3237:46;3217:67;;3237:46;3217:67;;;;;;;;;;-1:-1:-1;;3217:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3181:103;;;;3303:7;:57;;;;-1:-1:-1;3315:11:0;;:16;;:44;;;3346:4;3335:24;;;;;;;;;;;;;;;-1:-1:-1;3335:24:0;3315:44;3295:96;;;;;-1:-1:-1;;;3295:96:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;3063:336;;;;;:::o;14709:2406::-;14858:14;14924:6;-1:-1:-1;;;;;14914:16:0;:6;-1:-1:-1;;;;;14914:16:0;;14910:2198;;;14947:14;14964:20;:7;14976;14964:11;:20::i;:::-;14947:37;;15013:3;-1:-1:-1;;;;;15003:13:0;:6;-1:-1:-1;;;;;15003:13:0;;14999:446;;;15037:52;-1:-1:-1;;;;;15044:3:0;15037:24;15062:18;15082:6;15037:24;:52::i;:::-;15117:6;15108:15;;14999:446;;;15159:5;-1:-1:-1;;;;;15149:15:0;:6;-1:-1:-1;;;;;15149:15:0;;15145:300;;;15194:21;15201:5;15208:6;15194;:21::i;:::-;15185:30;;15145:300;;;15256:14;15273:17;15283:6;15273:9;:17::i;:::-;15256:34;;15318:44;15324:6;15332;15340;15356:4;15318:5;:44::i;:::-;15309:53;;15390:39;15403:6;15411;15419;15427:1;15390:12;:39::i;:::-;15381:48;;15145:300;;14910:2198;;;;15476:3;-1:-1:-1;;;;;15466:13:0;:6;-1:-1:-1;;;;;15466:13:0;;15462:1646;;;15527:53;-1:-1:-1;;;;;15534:3:0;15527:24;15552:18;15572:7;15527:24;:53::i;:::-;15604:36;15632:7;15604:23;15611:6;15619:7;15604:6;:23::i;:::-;:27;;:36::i;:::-;15595:45;;15462:1646;;;15672:3;-1:-1:-1;;;;;15662:13:0;:6;-1:-1:-1;;;;;15662:13:0;;15658:1450;;;15723:53;-1:-1:-1;;;;;15730:3:0;15723:24;15748:18;15768:7;15723:24;:53::i;:::-;15800:36;15828:7;15800:23;15807:6;15815:7;15800:6;:23::i;15658:1450::-;15868:5;-1:-1:-1;;;;;15858:15:0;:6;-1:-1:-1;;;;;15858:15:0;;15854:1254;;;15931:72;15938:5;15945:57;15994:7;15945:44;15951:6;15959:5;15966:7;15983:4;15945:5;:44::i;:57::-;15931:6;:72::i;15854:1254::-;16035:5;-1:-1:-1;;;;;16025:15:0;:6;-1:-1:-1;;;;;16025:15:0;;16021:1087;;;16098:72;16105:5;16112:57;16161:7;16112:44;16118:6;16126:5;16133:7;16150:4;16112:5;:44::i;16021:1087::-;16234:15;16252:17;16262:6;16252:9;:17::i;:::-;16234:35;;16284:15;16302:17;16312:6;16302:9;:17::i;:::-;16284:35;;16349:6;-1:-1:-1;;;;;16338:17:0;:7;-1:-1:-1;;;;;16338:17:0;;16334:763;;;16448:86;16461:7;16470:6;16478:46;16484:6;16492:7;16501;16518:4;16478:5;:46::i;:::-;16526:7;16448:12;:86::i;:::-;16439:95;;16334:763;;;16571:6;-1:-1:-1;;;;;16560:17:0;:7;-1:-1:-1;;;;;16560:17:0;;16556:541;;;16670:86;16683:6;16691:7;16700;16709:46;16715:6;16723:7;16732;16749:4;16709:5;:46::i;:::-;16670:12;:86::i;16556:541::-;16806:275;16841:7;16871;16947:46;16953:6;16961:7;16970;16987:4;16947:5;:46::i;:::-;17016;17022:6;17030:7;17039;17056:4;17016:5;:46::i;16806:275::-;16797:284;;16556:541;16021:1087;;;14709:2406;;;;;;:::o;260:139::-;353:5;;;348:16;;;;340:51;;;;;-1:-1:-1;;;340:51:0;;;;;;;;;;;;-1:-1:-1;;;340:51:0;;;;;;;;;;;;;;;260:139;;;;:::o;18672:188::-;18739:17;18805:47;18811:5;18818:3;18823:8;18833:18;18805:5;:47::i;:::-;18793:59;18672:188;-1:-1:-1;;;18672:188:0:o;17123:1541::-;17265:21;17342:19;17379:7;-1:-1:-1;;;;;17379:15:0;;17395:9;17406:7;17379:35;;;;;;;;;;;;;-1:-1:-1;;;;;17379:35:0;;;;;;-1:-1:-1;;;;;17379:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17379:35:0;;-1:-1:-1;;;;;;17434:27:0;;17426:73;;;;-1:-1:-1;;;17426:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17562:16;17580;17602:4;-1:-1:-1;;;;;17602:16:0;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17602:18:0;;;;;;;17561:59;;;;;-1:-1:-1;17561:59:0;;-1:-1:-1;17633:55:0;-1:-1:-1;;;;;17633:30:0;;17672:4;17679:8;17633:30;:55::i;:::-;17774:4;-1:-1:-1;;;;;17774:11:0;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17774:13:0;-1:-1:-1;;;;;17761:26:0;;;;;;17757:220;;;17860:8;17822:9;-1:-1:-1;;;;;17815:27:0;;17851:4;17815:42;;;;;;;;;;;;;-1:-1:-1;;;;;17815:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17815:42:0;:53;;-1:-1:-1;17757:220:0;;;17957:8;17919:9;-1:-1:-1;;;;;17912:27:0;;17948:4;17912:42;;;;;;;;;;;;;-1:-1:-1;;;;;17912:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17912:42:0;:53;;-1:-1:-1;17757:220:0;17989:21;18020:7;-1:-1:-1;;;;;18013:25:0;;18039:2;18013:29;;;;;;;;;;;;;-1:-1:-1;;;;;18013:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18013:29:0;;-1:-1:-1;18055:23:0;18081:17;:8;18094:3;18081:12;:17::i;:::-;18055:43;;18126:4;-1:-1:-1;;;;;18126:11:0;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18126:13:0;-1:-1:-1;;;;;18113:26:0;;;;;;18109:474;;;18156:17;18208:39;18231:15;18208:18;:8;18221:4;18208:12;:18::i;:39::-;18176:29;:15;18196:8;18176:19;:29::i;:::-;:71;;;;;;;-1:-1:-1;;;;;;18262:9:0;;;18272:1;18176:71;18286:2;18272:1;18290:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18290:12:0;;18262:41;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;18262:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18109:474;;;;18380:17;18432:39;18455:15;18432:18;:8;18445:4;18432:12;:18::i;:39::-;18400:29;:15;18420:8;18400:19;:29::i;:::-;:71;;;;;18514:12;;;18507:1;18514:12;;;;;;;;;18400:71;;;;;-1:-1:-1;;;;;;18486:9:0;;;;;18400:71;;18510:2;;18486:41;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;18486:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18109:474;;18643:13;18618:7;-1:-1:-1;;;;;18611:25:0;;18637:2;18611:29;;;;;;;;;;;;;-1:-1:-1;;;;;18611:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18611:29:0;:45;;17123:1541;-1:-1:-1;;;;;;;;;;17123:1541:0:o;551:153::-;609:9;639:6;;;:30;;-1:-1:-1;;654:5:0;;;668:1;663;654:5;663:1;649:15;;;;;:20;639:30;631:65;;;;;-1:-1:-1;;;631:65:0;;;;;;;;;;;;-1:-1:-1;;;631:65:0;;;;;;;;;;;;;

Swarm Source

ipfs://a58b9f90202bcbe1599a3c630f8c73a864c352bc2bbb5f461fca4d477f780b1c
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.