S Price: $0.588691 (-0.84%)
    /

    Contract

    0xA8A462BF4347D0fB305070A7e2125362612d586e
    Transaction Hash
    Method
    Block
    Age
    From
    To
    Sell47419122025-01-20 23:02:422 days ago1737414162IN
    0xA8A462BF...2612d586e
    0 S0.0089518555
    Buy47418252025-01-20 23:01:542 days ago1737414114IN
    0xA8A462BF...2612d586e
    14,000 S0.0087508855
    Buy47418062025-01-20 23:01:432 days ago1737414103IN
    0xA8A462BF...2612d586e
    10 S0.0059988555
    Create47417352025-01-20 23:01:092 days ago1737414069IN
    0xA8A462BF...2612d586e
    10 S0.0538753655
    Sell47415002025-01-20 22:58:172 days ago1737413897IN
    0xA8A462BF...2612d586e
    0 S0.00926755
    Buy47414652025-01-20 22:57:492 days ago1737413869IN
    0xA8A462BF...2612d586e
    14,000 S0.0087849355
    Sell47414462025-01-20 22:57:352 days ago1737413855IN
    0xA8A462BF...2612d586e
    0 S0.0093095255
    Buy47414252025-01-20 22:57:142 days ago1737413834IN
    0xA8A462BF...2612d586e
    1 S0.0088190355
    Create47414082025-01-20 22:56:552 days ago1737413815IN
    0xA8A462BF...2612d586e
    10 S0.05387855
    Sell47412942025-01-20 22:55:282 days ago1737413728IN
    0xA8A462BF...2612d586e
    0 S0.0091992455
    Create47412642025-01-20 22:55:022 days ago1737413702IN
    0xA8A462BF...2612d586e
    10 S0.05387855
    Sell47409932025-01-20 22:51:342 days ago1737413494IN
    0xA8A462BF...2612d586e
    0 S0.009063555
    Buy47409692025-01-20 22:51:162 days ago1737413476IN
    0xA8A462BF...2612d586e
    14,000 S0.0088198555
    Sell47326442025-01-20 21:15:342 days ago1737407734IN
    0xA8A462BF...2612d586e
    0 S0.0090502555
    Buy47325992025-01-20 21:14:492 days ago1737407689IN
    0xA8A462BF...2612d586e
    1,000 S0.0088525255
    Buy47325702025-01-20 21:14:282 days ago1737407668IN
    0xA8A462BF...2612d586e
    12,000 S0.0088140255
    Sell47324602025-01-20 21:12:492 days ago1737407569IN
    0xA8A462BF...2612d586e
    0 S0.0089885955
    Buy47324132025-01-20 21:12:072 days ago1737407527IN
    0xA8A462BF...2612d586e
    1 S0.0088190355
    Create47323812025-01-20 21:11:482 days ago1737407508IN
    0xA8A462BF...2612d586e
    5 S0.0538970855
    Sell47322322025-01-20 21:10:002 days ago1737407400IN
    0xA8A462BF...2612d586e
    0 S0.0091277455
    Sell47320022025-01-20 21:07:522 days ago1737407272IN
    0xA8A462BF...2612d586e
    0 S0.0092753655
    Buy47319002025-01-20 21:06:472 days ago1737407207IN
    0xA8A462BF...2612d586e
    1 S0.0088860255
    Buy47315042025-01-20 21:02:282 days ago1737406948IN
    0xA8A462BF...2612d586e
    1 S0.0087743755
    Buy47314552025-01-20 21:01:462 days ago1737406906IN
    0xA8A462BF...2612d586e
    1 S0.0059988555
    Create47308652025-01-20 20:54:422 days ago1737406482IN
    0xA8A462BF...2612d586e
    1 S0.0539106755
    View all transactions

    Latest 25 internal transactions (View All)

    Parent Transaction Hash Block Age From To Amount
    47419122025-01-20 23:02:422 days ago1737414162
    0xA8A462BF...2612d586e
    13,741.00199999 S
    47419122025-01-20 23:02:422 days ago1737414162
    0xA8A462BF...2612d586e
    138.79799999 S
    47418252025-01-20 23:01:542 days ago1737414114
    0xA8A462BF...2612d586e
    140 S
    47418062025-01-20 23:01:432 days ago1737414103
    0xA8A462BF...2612d586e
    0.1 S
    47417352025-01-20 23:01:092 days ago1737414069
    0xA8A462BF...2612d586e
    0.1 S
    47417352025-01-20 23:01:092 days ago1737414069
    0xA8A462BF...2612d586e
    0 S
    47415002025-01-20 22:58:172 days ago1737413897
    0xA8A462BF...2612d586e
    13,731.79732952 S
    47415002025-01-20 22:58:172 days ago1737413897
    0xA8A462BF...2612d586e
    138.70502353 S
    47414652025-01-20 22:57:492 days ago1737413869
    0xA8A462BF...2612d586e
    140 S
    47414462025-01-20 22:57:352 days ago1737413855
    0xA8A462BF...2612d586e
    0.38377047 S
    47414462025-01-20 22:57:352 days ago1737413855
    0xA8A462BF...2612d586e
    0.00387646 S
    47414252025-01-20 22:57:142 days ago1737413834
    0xA8A462BF...2612d586e
    0.01 S
    47414082025-01-20 22:56:552 days ago1737413815
    0xA8A462BF...2612d586e
    0.1 S
    47414082025-01-20 22:56:552 days ago1737413815
    0xA8A462BF...2612d586e
    0 S
    47412942025-01-20 22:55:282 days ago1737413728
    0xA8A462BF...2612d586e
    9.80099999 S
    47412942025-01-20 22:55:282 days ago1737413728
    0xA8A462BF...2612d586e
    0.09899999 S
    47412642025-01-20 22:55:022 days ago1737413702
    0xA8A462BF...2612d586e
    0.1 S
    47412642025-01-20 22:55:022 days ago1737413702
    0xA8A462BF...2612d586e
    0 S
    47409932025-01-20 22:51:342 days ago1737413494
    0xA8A462BF...2612d586e
    13,722.38009999 S
    47409932025-01-20 22:51:342 days ago1737413494
    0xA8A462BF...2612d586e
    138.60989999 S
    47409692025-01-20 22:51:162 days ago1737413476
    0xA8A462BF...2612d586e
    140 S
    47326442025-01-20 21:15:342 days ago1737407734
    0xA8A462BF...2612d586e
    12,743.44707018 S
    47326442025-01-20 21:15:342 days ago1737407734
    0xA8A462BF...2612d586e
    128.72168757 S
    47325992025-01-20 21:14:492 days ago1737407689
    0xA8A462BF...2612d586e
    10 S
    47325702025-01-20 21:14:282 days ago1737407668
    0xA8A462BF...2612d586e
    120 S
    View All Internal Transactions
    Loading...
    Loading

    Contract Source Code Verified (Exact Match)

    Contract Name:
    SFUN

    Compiler Version
    v0.8.28+commit.7893614a

    Optimization Enabled:
    Yes with 200 runs

    Other Settings:
    cancun EvmVersion
    File 1 of 32 : SFUN.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    pragma solidity ^0.8.20;
    // ---------------------------------------------------------
    // Imports
    // ---------------------------------------------------------
    import {BancorBondingCurve} from "./bancor/BancorBondingCurve.sol";
    import {Token} from "./Token.sol";
    import "./utils/owner/Ownable.sol";
    import "@openzeppelin/contracts/utils/ReentrancyGuard.sol";
    import "@uniswap/v3-periphery/interfaces/INonfungiblePositionManager.sol";
    import "@uniswap/v3-periphery/interfaces/IPeripheryImmutableState.sol";
    import {TransferHelper} from "@uniswap/v3-periphery/libraries/TransferHelper.sol";
    import "@uniswap/v3-core/interfaces/IUniswapV3Factory.sol";
    import {IWETH9} from "@uniswap/v3-periphery/interfaces/external/IWETH9.sol";
    contract SFUN is Ownable, ReentrancyGuard {
    // ---------------------------------------------------------
    // Structs
    // ---------------------------------------------------------
    struct TokenInfo {
    Token token;
    uint256 tokenbalance; // tokens still in manager, not sold to users
    uint256 ethBalance; // ETH held by the bonding curve
    bool isListed; // Whether liquidity is already added
    address deployer; // The creator of the token
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 2 of 32 : BancorBondingCurve.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    // SPDX-License-Identifier: MIT
    pragma solidity ^0.8.20;
    import "./BancorFormula.sol";
    import "../prb-math/PRBMathSD59x18.sol";
    import "../prb-math/PRBMathUD60x18.sol";
    // based on https://medium.com/relevant-community/bonding-curves-in-depth-intuition-parametrization-d3905a681e0a
    contract BancorBondingCurve is BancorFormula {
    using PRBMathSD59x18 for int256;
    using PRBMathUD60x18 for uint256;
    uint256 public immutable slope;
    uint32 public immutable reserveRatio;
    // reserveRatio = connectorWeight, but is scaled by MAX_WEIGHT (1000000)
    // also note that unscaled reserveRatio = 1 / (n+1), so a reserveRatio 1000000 means n=0, reserveRatio=2000000 means n=1, and so on
    // slope (denoted as m in the article) is only relevant when supply = 0. When supply is non-zero, the price for minting k tokens can be fully
            determined by current balance and supply
    constructor(uint256 _slope, uint32 _reserveRatio) {
    slope = _slope;
    reserveRatio = _reserveRatio;
    }
    // buy function
    /**
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 3 of 32 : Token.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    pragma solidity ^0.8.0;
    import "./utils/token/ERC20.sol";
    import "./utils/owner/Ownable.sol";
    import "./utils/token/extensions/ERC20Burnable.sol";
    contract Token is ERC20, ERC20Burnable, Ownable {
    uint256 public constant TOTAL_SUPPLY = 1_000_000_000 * 10 ** 18;
    uint256 public constant TRADING_SUPPLY = 700_000_000 * 10 ** 18;
    uint256 public constant LP_SUPPLY = 300_000_000 * 10 ** 18;
    constructor(string memory name, string memory symbol) ERC20(name, symbol) {
    // Mint total supply to the contract itself
    _mint(address(this), TOTAL_SUPPLY);
    }
    function transferTradingSupply(address manager) external onlyOwner {
    // Transfer trading supply to the bonding curve manager
    _transfer(address(this), manager, TRADING_SUPPLY);
    }
    function transferLPSupply(address manager) external onlyOwner {
    // Transfer LP supply to the bonding curve manager
    _transfer(address(this), manager, LP_SUPPLY);
    }
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 4 of 32 : Ownable.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    // OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)
    pragma solidity ^0.8.0;
    import "../token/extensions/Context.sol";
    /**
    * @dev Contract module which provides a basic access control mechanism, where
    * there is an account (an owner) that can be granted exclusive access to
    * specific functions.
    *
    * By default, the owner account will be the one that deploys the contract. This
    * can later be changed with {transferOwnership}.
    *
    * This module is used through inheritance. It will make available the modifier
    * `onlyOwner`, which can be applied to your functions to restrict their use to
    * the owner.
    */
    abstract contract Ownable is Context {
    address private _owner;
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    /**
    * @dev Initializes the contract setting the deployer as the initial owner.
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 5 of 32 : ReentrancyGuard.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    // OpenZeppelin Contracts (last updated v5.1.0) (utils/ReentrancyGuard.sol)
    pragma solidity ^0.8.20;
    /**
    * @dev Contract module that helps prevent reentrant calls to a function.
    *
    * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
    * available, which can be applied to functions to make sure there are no nested
    * (reentrant) calls to them.
    *
    * Note that because there is a single `nonReentrant` guard, functions marked as
    * `nonReentrant` may not call one another. This can be worked around by making
    * those functions `private`, and then adding `external` `nonReentrant` entry
    * points to them.
    *
    * TIP: If EIP-1153 (transient storage) is available on the chain you're deploying at,
    * consider using {ReentrancyGuardTransient} instead.
    *
    * TIP: If you would like to learn more about reentrancy and alternative ways
    * to protect against it, check out our blog post
    * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
    */
    abstract contract ReentrancyGuard {
    // Booleans are more expensive than uint256 or any type that takes up a full
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 6 of 32 : INonfungiblePositionManager.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: GPL-2.0-or-later
    pragma solidity >=0.7.5;
    pragma abicoder v2;
    import '@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol';
    import '@openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol';
    import './IPoolInitializer.sol';
    import './IERC721Permit.sol';
    import './IPeripheryPayments.sol';
    import './IPeripheryImmutableState.sol';
    import '../libraries/PoolAddress.sol';
    /// @title Non-fungible token for positions
    /// @notice Wraps Uniswap V3 positions in a non-fungible token interface which allows for them to be transferred
    /// and authorized.
    interface INonfungiblePositionManager is
    IPoolInitializer,
    IPeripheryPayments,
    IPeripheryImmutableState,
    IERC721Metadata,
    IERC721Enumerable,
    IERC721Permit
    {
    /// @notice Emitted when liquidity is increased for a position NFT
    /// @dev Also emitted when a token is minted
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 7 of 32 : IPeripheryImmutableState.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    // SPDX-License-Identifier: GPL-2.0-or-later
    pragma solidity >=0.5.0;
    /// @title Immutable state
    /// @notice Functions that return immutable state of the router
    interface IPeripheryImmutableState {
    /// @return Returns the address of the Uniswap V3 factory
    function factory() external view returns (address);
    /// @return Returns the address of WETH9
    function WETH9() external view returns (address);
    }
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 8 of 32 : TransferHelper.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: GPL-2.0-or-later
    pragma solidity >=0.6.0;
    import '@openzeppelin/contracts/token/ERC20/IERC20.sol';
    library TransferHelper {
    /// @notice Transfers tokens from the targeted address to the given destination
    /// @notice Errors with 'STF' if transfer fails
    /// @param token The contract address of the token to be transferred
    /// @param from The originating address from which the tokens will be transferred
    /// @param to The destination address of the transfer
    /// @param value The amount to be transferred
    function safeTransferFrom(
    address token,
    address from,
    address to,
    uint256 value
    ) internal {
    (bool success, bytes memory data) =
    token.call(abi.encodeWithSelector(IERC20.transferFrom.selector, from, to, value));
    require(success && (data.length == 0 || abi.decode(data, (bool))), 'STF');
    }
    /// @notice Transfers tokens from msg.sender to a recipient
    /// @dev Errors with ST if transfer fails
    /// @param token The contract address of the token which will be transferred
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 9 of 32 : IUniswapV3Factory.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: GPL-2.0-or-later
    pragma solidity >=0.5.0;
    /// @title The interface for the Uniswap V3 Factory
    /// @notice The Uniswap V3 Factory facilitates creation of Uniswap V3 pools and control over the protocol fees
    interface IUniswapV3Factory {
    /// @notice Emitted when the owner of the factory is changed
    /// @param oldOwner The owner before the owner was changed
    /// @param newOwner The owner after the owner was changed
    event OwnerChanged(address indexed oldOwner, address indexed newOwner);
    /// @notice Emitted when a pool is created
    /// @param token0 The first token of the pool by address sort order
    /// @param token1 The second token of the pool by address sort order
    /// @param fee The fee collected upon every swap in the pool, denominated in hundredths of a bip
    /// @param tickSpacing The minimum number of ticks between initialized ticks
    /// @param pool The address of the created pool
    event PoolCreated(
    address indexed token0,
    address indexed token1,
    uint24 indexed fee,
    int24 tickSpacing,
    address pool
    );
    /// @notice Emitted when a new fee amount is enabled for pool creation via the factory
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 10 of 32 : IWETH9.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    // SPDX-License-Identifier: GPL-2.0-or-later
    pragma solidity >=0.7.6;
    import '@openzeppelin/contracts/token/ERC20/IERC20.sol';
    /// @title Interface for WETH9
    interface IWETH9 is IERC20 {
    /// @notice Deposit ether to get wrapped ether
    function deposit() external payable;
    /// @notice Withdraw wrapped ether to get ether
    function withdraw(uint256) external;
    }
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 11 of 32 : BancorFormula.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    pragma solidity ^0.8.20;
    import "./Power.sol";
    import "@openzeppelin/contracts/utils/math/Math.sol";
    /**
    * @title Bancor formula by Bancor
    * @dev Modified from the original by Slava Balasanov
    * https://github.com/bancorprotocol/contracts
    * Split Power.sol out from BancorFormula.sol and replace SafeMath formulas with zeppelin's SafeMath
    * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements;
    * and to You under the Apache License, Version 2.0. "
    */
    contract BancorFormula is Power {
    string public constant version = "0.3.1";
    uint32 public constant MAX_WEIGHT = 1000000;
    /**
    * @dev given a token supply, connector balance, weight and a deposit amount (in the connector token),
    * calculates the return for a given conversion (in the main token)
    *
    * Formula:
    * Return = _supply * ((1 + _depositAmount / _connectorBalance) ^ (_connectorWeight / 1000000) - 1)
    *
    * @param _supply token total supply
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 12 of 32 : PRBMathSD59x18.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: Unlicense
    pragma solidity >=0.8.4;
    import "./PRBMath.sol";
    /// @title PRBMathSD59x18
    /// @author Paul Razvan Berg
    /// @notice Smart contract library for advanced fixed-point math that works with int256 numbers considered to have 18
    /// trailing decimals. We call this number representation signed 59.18-decimal fixed-point, since the numbers can have
    /// a sign and there can be up to 59 digits in the integer part and up to 18 decimals in the fractional part. The numbers
    /// are bound by the minimum and the maximum values permitted by the Solidity type int256.
    library PRBMathSD59x18 {
    /// @dev log2(e) as a signed 59.18-decimal fixed-point number.
    int256 internal constant LOG2_E = 1_442695040888963407;
    /// @dev Half the SCALE number.
    int256 internal constant HALF_SCALE = 5e17;
    /// @dev The maximum value a signed 59.18-decimal fixed-point number can have.
    int256 internal constant MAX_SD59x18 =
    57896044618658097711785492504343953926634992332820282019728_792003956564819967;
    /// @dev The maximum whole value a signed 59.18-decimal fixed-point number can have.
    int256 internal constant MAX_WHOLE_SD59x18 =
    57896044618658097711785492504343953926634992332820282019728_000000000000000000;
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 13 of 32 : PRBMathUD60x18.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: Unlicense
    pragma solidity >=0.8.4;
    import "./PRBMath.sol";
    /// @title PRBMathUD60x18
    /// @author Paul Razvan Berg
    /// @notice Smart contract library for advanced fixed-point math that works with uint256 numbers considered to have 18
    /// trailing decimals. We call this number representation unsigned 60.18-decimal fixed-point, since there can be up to 60
    /// digits in the integer part and up to 18 decimals in the fractional part. The numbers are bound by the minimum and the
    /// maximum values permitted by the Solidity type uint256.
    library PRBMathUD60x18 {
    /// @dev Half the SCALE number.
    uint256 internal constant HALF_SCALE = 5e17;
    /// @dev log2(e) as an unsigned 60.18-decimal fixed-point number.
    uint256 internal constant LOG2_E = 1_442695040888963407;
    /// @dev The maximum value an unsigned 60.18-decimal fixed-point number can have.
    uint256 internal constant MAX_UD60x18 =
    115792089237316195423570985008687907853269984665640564039457_584007913129639935;
    /// @dev The maximum whole value an unsigned 60.18-decimal fixed-point number can have.
    uint256 internal constant MAX_WHOLE_UD60x18 =
    115792089237316195423570985008687907853269984665640564039457_000000000000000000;
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 14 of 32 : ERC20.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    // OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/ERC20.sol)
    pragma solidity ^0.8.0;
    import "./IERC20.sol";
    import "./extensions/IERC20Metadata.sol";
    import "./extensions/Context.sol";
    /**
    * @dev Implementation of the {IERC20} interface.
    *
    * This implementation is agnostic to the way tokens are created. This means
    * that a supply mechanism has to be added in a derived contract using {_mint}.
    * For a generic mechanism see {ERC20PresetMinterPauser}.
    *
    * TIP: For a detailed writeup see our guide
    * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How
    * to implement supply mechanisms].
    *
    * The default value of {decimals} is 18. To change this, you should override
    * this function so it returns a different value.
    *
    * We have followed general OpenZeppelin Contracts guidelines: functions revert
    * instead returning `false` on failure. This behavior is nonetheless
    * conventional and does not conflict with the expectations of ERC20
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 15 of 32 : ERC20Burnable.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/extensions/ERC20Burnable.sol)
    pragma solidity ^0.8.0;
    import "../ERC20.sol";
    import "./Context.sol";
    /**
    * @dev Extension of {ERC20} that allows token holders to destroy both their own
    * tokens and those that they have an allowance for, in a way that can be
    * recognized off-chain (via event analysis).
    */
    abstract contract ERC20Burnable is Context, ERC20 {
    /**
    * @dev Destroys `amount` tokens from the caller.
    *
    * See {ERC20-_burn}.
    */
    function burn(uint256 amount) public virtual {
    _burn(_msgSender(), amount);
    }
    /**
    * @dev Destroys `amount` tokens from `account`, deducting from the caller's
    * allowance.
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 16 of 32 : Context.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    // OpenZeppelin Contracts (last updated v4.9.4) (utils/Context.sol)
    pragma solidity ^0.8.0;
    /**
    * @dev Provides information about the current execution context, including the
    * sender of the transaction and its data. While these are generally available
    * via msg.sender and msg.data, they should not be accessed in such a direct
    * manner, since when dealing with meta-transactions the account sending and
    * paying for execution may not be the actual sender (as far as an application
    * is concerned).
    *
    * This contract is only required for intermediate, library-like contracts.
    */
    abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
    return msg.sender;
    }
    function _msgData() internal view virtual returns (bytes calldata) {
    return msg.data;
    }
    function _contextSuffixLength() internal view virtual returns (uint256) {
    return 0;
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 17 of 32 : IERC721Metadata.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    // OpenZeppelin Contracts (last updated v5.0.0) (token/ERC721/extensions/IERC721Metadata.sol)
    pragma solidity ^0.8.20;
    import {IERC721} from "../IERC721.sol";
    /**
    * @title ERC-721 Non-Fungible Token Standard, optional metadata extension
    * @dev See https://eips.ethereum.org/EIPS/eip-721
    */
    interface IERC721Metadata is IERC721 {
    /**
    * @dev Returns the token collection name.
    */
    function name() external view returns (string memory);
    /**
    * @dev Returns the token collection symbol.
    */
    function symbol() external view returns (string memory);
    /**
    * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.
    */
    function tokenURI(uint256 tokenId) external view returns (string memory);
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 18 of 32 : IERC721Enumerable.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    // OpenZeppelin Contracts (last updated v5.0.0) (token/ERC721/extensions/IERC721Enumerable.sol)
    pragma solidity ^0.8.20;
    import {IERC721} from "../IERC721.sol";
    /**
    * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension
    * @dev See https://eips.ethereum.org/EIPS/eip-721
    */
    interface IERC721Enumerable is IERC721 {
    /**
    * @dev Returns the total amount of tokens stored by the contract.
    */
    function totalSupply() external view returns (uint256);
    /**
    * @dev Returns a token ID owned by `owner` at a given `index` of its token list.
    * Use along with {balanceOf} to enumerate all of ``owner``'s tokens.
    */
    function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256);
    /**
    * @dev Returns a token ID at a given `index` of all the tokens stored by the contract.
    * Use along with {totalSupply} to enumerate all tokens.
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 19 of 32 : IPoolInitializer.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    // SPDX-License-Identifier: GPL-2.0-or-later
    pragma solidity >=0.7.5;
    pragma abicoder v2;
    /// @title Creates and initializes V3 Pools
    /// @notice Provides a method for creating and initializing a pool, if necessary, for bundling with other methods that
    /// require the pool to exist.
    interface IPoolInitializer {
    /// @notice Creates a new pool if it does not exist, then initializes if not initialized
    /// @dev This method can be bundled with others via IMulticall for the first action (e.g. mint) performed against a pool
    /// @param token0 The contract address of token0 of the pool
    /// @param token1 The contract address of token1 of the pool
    /// @param fee The fee amount of the v3 pool for the specified token pair
    /// @param sqrtPriceX96 The initial square root price of the pool as a Q64.96 value
    /// @return pool Returns the pool address based on the pair of tokens and fee, will return the newly created pool address if necessary
    function createAndInitializePoolIfNecessary(
    address token0,
    address token1,
    uint24 fee,
    uint160 sqrtPriceX96
    ) external payable returns (address pool);
    }
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 20 of 32 : IERC721Permit.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: GPL-2.0-or-later
    pragma solidity >=0.7.5;
    import '@openzeppelin/contracts/token/ERC721/IERC721.sol';
    /// @title ERC721 with permit
    /// @notice Extension to ERC721 that includes a permit function for signature based approvals
    interface IERC721Permit is IERC721 {
    /// @notice The permit typehash used in the permit signature
    /// @return The typehash for the permit
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    /// @notice The domain separator used in the permit signature
    /// @return The domain seperator used in encoding of permit signature
    function DOMAIN_SEPARATOR() external view returns (bytes32);
    /// @notice Approve of a specific token ID for spending by spender via signature
    /// @param spender The account that is being approved
    /// @param tokenId The ID of the token that is being approved for spending
    /// @param deadline The deadline timestamp by which the call must be mined for the approve to work
    /// @param v Must produce valid secp256k1 signature from the holder along with `r` and `s`
    /// @param r Must produce valid secp256k1 signature from the holder along with `v` and `s`
    /// @param s Must produce valid secp256k1 signature from the holder along with `r` and `v`
    function permit(
    address spender,
    uint256 tokenId,
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 21 of 32 : IPeripheryPayments.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: GPL-2.0-or-later
    pragma solidity >=0.7.5;
    /// @title Periphery Payments
    /// @notice Functions to ease deposits and withdrawals of ETH
    interface IPeripheryPayments {
    /// @notice Unwraps the contract's WETH9 balance and sends it to recipient as ETH.
    /// @dev The amountMinimum parameter prevents malicious contracts from stealing WETH9 from users.
    /// @param amountMinimum The minimum amount of WETH9 to unwrap
    /// @param recipient The address receiving ETH
    function unwrapWETH9(uint256 amountMinimum, address recipient) external payable;
    /// @notice Refunds any ETH balance held by this contract to the `msg.sender`
    /// @dev Useful for bundling with mint or increase liquidity that uses ether, or exact output swaps
    /// that use ether for the input amount
    function refundETH() external payable;
    /// @notice Transfers the full amount of a token held by this contract to recipient
    /// @dev The amountMinimum parameter prevents malicious contracts from stealing the token from users
    /// @param token The contract address of the token which will be transferred to `recipient`
    /// @param amountMinimum The minimum amount of token required for a transfer
    /// @param recipient The destination address of the token
    function sweepToken(
    address token,
    uint256 amountMinimum,
    address recipient
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 22 of 32 : PoolAddress.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: GPL-2.0-or-later
    pragma solidity >=0.5.0;
    /// @title Provides functions for deriving a pool address from the factory, tokens, and the fee
    library PoolAddress {
    bytes32 internal constant POOL_INIT_CODE_HASH = 0xe34f199b19b2b4f47f68442619d555527d244f78a3297ea89325f843f87b8b54;
    /// @notice The identifying key of the pool
    struct PoolKey {
    address token0;
    address token1;
    uint24 fee;
    }
    /// @notice Returns PoolKey: the ordered tokens with the matched fee levels
    /// @param tokenA The first token of a pool, unsorted
    /// @param tokenB The second token of a pool, unsorted
    /// @param fee The fee level of the pool
    /// @return Poolkey The pool details with ordered token0 and token1 assignments
    function getPoolKey(
    address tokenA,
    address tokenB,
    uint24 fee
    ) internal pure returns (PoolKey memory) {
    if (tokenA > tokenB) (tokenA, tokenB) = (tokenB, tokenA);
    return PoolKey({token0: tokenA, token1: tokenB, fee: fee});
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 23 of 32 : IERC20.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    // OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/IERC20.sol)
    pragma solidity ^0.8.20;
    /**
    * @dev Interface of the ERC-20 standard as defined in the ERC.
    */
    interface IERC20 {
    /**
    * @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);
    /**
    * @dev Returns the value of tokens in existence.
    */
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 24 of 32 : Power.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    pragma solidity ^0.8.20;
    // TODO: make this a library after constant uint256 array is supported
    /**
    * bancor formula by bancor
    * https://github.com/bancorprotocol/contracts
    * Modified from the original by Slava Balasanov
    * Split Power.sol out from BancorFormula.sol
    * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements;
    * and to You under the Apache License, Version 2.0. "
    */
    contract Power {
    uint256 private constant ONE = 1;
    uint32 private constant MAX_WEIGHT = 1000000;
    uint8 private constant MIN_PRECISION = 32;
    uint8 private constant MAX_PRECISION = 127;
    /**
    * The values below depend on MAX_PRECISION. If you choose to change it:
    * Apply the same change in file 'PrintIntScalingFactors.py', run it and paste the results below.
    */
    uint256 private constant FIXED_1 = 0x080000000000000000000000000000000;
    uint256 private constant FIXED_2 = 0x100000000000000000000000000000000;
    uint256 private constant MAX_NUM = 0x1ffffffffffffffffffffffffffffffff;
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 25 of 32 : Math.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    // OpenZeppelin Contracts (last updated v5.1.0) (utils/math/Math.sol)
    pragma solidity ^0.8.20;
    import {Panic} from "../Panic.sol";
    import {SafeCast} from "./SafeCast.sol";
    /**
    * @dev Standard math utilities missing in the Solidity language.
    */
    library Math {
    enum Rounding {
    Floor, // Toward negative infinity
    Ceil, // Toward positive infinity
    Trunc, // Toward zero
    Expand // Away from zero
    }
    /**
    * @dev Returns the addition of two unsigned integers, with an success flag (no overflow).
    */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool success, uint256 result) {
    unchecked {
    uint256 c = a + b;
    if (c < a) return (false, 0);
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 26 of 32 : PRBMath.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: Unlicense
    pragma solidity >=0.8.4;
    /// @notice Emitted when the result overflows uint256.
    error PRBMath__MulDivFixedPointOverflow(uint256 prod1);
    /// @notice Emitted when the result overflows uint256.
    error PRBMath__MulDivOverflow(uint256 prod1, uint256 denominator);
    /// @notice Emitted when one of the inputs is type(int256).min.
    error PRBMath__MulDivSignedInputTooSmall();
    /// @notice Emitted when the intermediary absolute result overflows int256.
    error PRBMath__MulDivSignedOverflow(uint256 rAbs);
    /// @notice Emitted when the input is MIN_SD59x18.
    error PRBMathSD59x18__AbsInputTooSmall();
    /// @notice Emitted when ceiling a number overflows SD59x18.
    error PRBMathSD59x18__CeilOverflow(int256 x);
    /// @notice Emitted when one of the inputs is MIN_SD59x18.
    error PRBMathSD59x18__DivInputTooSmall();
    /// @notice Emitted when one of the intermediary unsigned results overflows SD59x18.
    error PRBMathSD59x18__DivOverflow(uint256 rAbs);
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 27 of 32 : IERC20.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    // OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol)
    pragma solidity ^0.8.0;
    /**
    * @dev Interface of the ERC20 standard as defined in the EIP.
    */
    interface IERC20 {
    /**
    * @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);
    /**
    * @dev Returns the amount of tokens in existence.
    */
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 28 of 32 : IERC20Metadata.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    // OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)
    pragma solidity ^0.8.0;
    import "../IERC20.sol";
    /**
    * @dev Interface for the optional metadata functions from the ERC20 standard.
    *
    * _Available since v4.1._
    */
    interface IERC20Metadata is IERC20 {
    /**
    * @dev Returns the name of the token.
    */
    function name() external view returns (string memory);
    /**
    * @dev Returns the symbol of the token.
    */
    function symbol() external view returns (string memory);
    /**
    * @dev Returns the decimals places of the token.
    */
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 29 of 32 : IERC721.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    // OpenZeppelin Contracts (last updated v5.1.0) (token/ERC721/IERC721.sol)
    pragma solidity ^0.8.20;
    import {IERC165} from "../../utils/introspection/IERC165.sol";
    /**
    * @dev Required interface of an ERC-721 compliant contract.
    */
    interface IERC721 is IERC165 {
    /**
    * @dev Emitted when `tokenId` token is transferred from `from` to `to`.
    */
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);
    /**
    * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.
    */
    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);
    /**
    * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.
    */
    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 30 of 32 : Panic.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    // OpenZeppelin Contracts (last updated v5.1.0) (utils/Panic.sol)
    pragma solidity ^0.8.20;
    /**
    * @dev Helper library for emitting standardized panic codes.
    *
    * ```solidity
    * contract Example {
    * using Panic for uint256;
    *
    * // Use any of the declared internal constants
    * function foo() { Panic.GENERIC.panic(); }
    *
    * // Alternatively
    * function foo() { Panic.panic(Panic.GENERIC); }
    * }
    * ```
    *
    * Follows the list from https://github.com/ethereum/solidity/blob/v0.8.24/libsolutil/ErrorCodes.h[libsolutil].
    *
    * _Available since v5.1._
    */
    // slither-disable-next-line unused-state
    library Panic {
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 31 of 32 : SafeCast.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    // OpenZeppelin Contracts (last updated v5.1.0) (utils/math/SafeCast.sol)
    // This file was procedurally generated from scripts/generate/templates/SafeCast.js.
    pragma solidity ^0.8.20;
    /**
    * @dev Wrappers over Solidity's uintXX/intXX/bool casting operators with added overflow
    * checks.
    *
    * Downcasting from uint256/int256 in Solidity does not revert on overflow. This can
    * easily result in undesired exploitation or bugs, since developers usually
    * assume that overflows raise errors. `SafeCast` restores this intuition by
    * reverting the transaction when such an operation overflows.
    *
    * Using this library instead of the unchecked operations eliminates an entire
    * class of bugs, so it's recommended to use it always.
    */
    library SafeCast {
    /**
    * @dev Value doesn't fit in an uint of `bits` size.
    */
    error SafeCastOverflowedUintDowncast(uint8 bits, uint256 value);
    /**
    * @dev An int value doesn't fit in an uint of `bits` size.
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 32 of 32 : IERC165.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    // SPDX-License-Identifier: MIT
    // OpenZeppelin Contracts (last updated v5.1.0) (utils/introspection/IERC165.sol)
    pragma solidity ^0.8.20;
    /**
    * @dev Interface of the ERC-165 standard, as defined in the
    * https://eips.ethereum.org/EIPS/eip-165[ERC].
    *
    * Implementers can declare support of contract interfaces, which can then be
    * queried by others ({ERC165Checker}).
    *
    * For an implementation, see {ERC165}.
    */
    interface IERC165 {
    /**
    * @dev Returns true if this contract implements the interface defined by
    * `interfaceId`. See the corresponding
    * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section]
    * to learn more about how these ids are created.
    *
    * This function call must use less than 30 000 gas.
    */
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
    }
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    Settings
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    {
    "remappings": [
    "@uniswap/v3-core/=lib/v3-core/contracts/",
    "@uniswap/v3-periphery/=lib/v3-periphery/contracts/",
    "@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/",
    "erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/",
    "forge-std/=lib/forge-std/src/",
    "halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/",
    "openzeppelin-contracts/=lib/openzeppelin-contracts/",
    "v3-core/=lib/v3-core/",
    "v3-periphery/=lib/v3-periphery/contracts/"
    ],
    "optimizer": {
    "enabled": true,
    "runs": 200
    },
    "metadata": {
    "useLiteralContent": false,
    "bytecodeHash": "ipfs",
    "appendCBOR": true
    },
    "outputSelection": {
    "*": {
    "*": [
    "evm.bytecode",
    "evm.deployedBytecode",
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    Contract Security Audit

    Contract ABI

    [{"inputs":[{"internalType":"address","name":"_positionManager","type":"address"},{"internalType":"address","name":"_bancorFormula","type":"address"},{"internalType":"address payable","name":"_feeRecipient","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"FailedToSendEth","type":"error"},{"inputs":[],"name":"InsufficientPoolbalance","type":"error"},{"inputs":[],"name":"InvalidLpFeePercentage","type":"error"},{"inputs":[],"name":"InvalidRecipient","type":"error"},{"inputs":[],"name":"MaxPoolBalanceReached","type":"error"},{"inputs":[],"name":"ReentrancyGuardReentrantCall","type":"error"},{"inputs":[],"name":"TokenAlreadyListed","type":"error"},{"inputs":[],"name":"TokenDoesNotExist","type":"error"},{"inputs":[],"name":"TokenTransferFailed","type":"error"},{"inputs":[],"name":"ZeroEthSent","type":"error"},{"inputs":[],"name":"ZeroTokenAmount","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"ethAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"LiquidityAdded","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"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"tokenAddress","type":"address"},{"indexed":true,"internalType":"address","name":"creator","type":"address"},{"indexed":false,"internalType":"string","name":"name","type":"string"},{"indexed":false,"internalType":"string","name":"symbol","type":"string"}],"name":"TokenCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"buyer","type":"address"},{"indexed":false,"internalType":"uint256","name":"ethAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"TokensBought","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"seller","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethAmount","type":"uint256"}],"name":"TokensSold","type":"event"},{"inputs":[],"name":"POOL_FEE","outputs":[{"internalType":"uint24","name":"","type":"uint24"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"}],"name":"addLP","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"}],"name":"buy","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"ethAmount","type":"uint256"}],"name":"calculateCurvedBuyReturn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"calculateCurvedSellReturn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"}],"name":"create","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"}],"name":"getCurrentTokenPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"}],"name":"getTokenEthBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"positionManager","outputs":[{"internalType":"contract INonfungiblePositionManager","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"sell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_bancorFormula","type":"address"}],"name":"setBancorFormula","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_newRecipient","type":"address"}],"name":"setFeeRecipient","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxPoolBalance","type":"uint256"}],"name":"setMaxPoolBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newPositionManager","type":"address"}],"name":"setPositionManager","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"tokens","outputs":[{"internalType":"contract Token","name":"token","type":"address"},{"internalType":"uint256","name":"tokenbalance","type":"uint256"},{"internalType":"uint256","name":"ethBalance","type":"uint256"},{"internalType":"bool","name":"isListed","type":"bool"},{"internalType":"address","name":"deployer","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniFactory","outputs":[{"internalType":"contract IUniswapV3Factory","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"weth","outputs":[{"internalType":"contract IWETH9","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

    60a060405269032d26d12e980b60000060075561dead608052348015610023575f5ffd5b50604051613b35380380613b35833981016040819052610042916101fb565b61004b33610195565b60018055600380546001600160a01b038086166001600160a01b031992831681179093556002805486831690841617905560088054918516919092161790556040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa1580156100c3573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100e79190610245565b60055f6101000a8154816001600160a01b0302191690836001600160a01b03160217905550826001600160a01b0316634aa4a4fc6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610148573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061016c9190610245565b600480546001600160a01b0319166001600160a01b039290921691909117905550610267915050565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146101f8575f5ffd5b50565b5f5f5f6060848603121561020d575f5ffd5b8351610218816101e4565b6020850151909350610229816101e4565b604085015190925061023a816101e4565b809150509250925092565b5f60208284031215610255575f5ffd5b8151610260816101e4565b9392505050565b6080516138b961027c5f395f50506138b95ff3fe60806040526004361061011e575f3560e01c8063791b98bc1161009d578063ddf731f311610062578063ddf731f31461032f578063e48603391461034e578063e74b981b146103d9578063f088d547146103f8578063f2fde38b1461040b575f5ffd5b8063791b98bc1461028d5780638da5cb5b146102ac5780638e72b23f146102c8578063be33f6bd146102e7578063dd1b9c4a14610306575f5ffd5b80635760f2e3116100e35780635760f2e3146101fd5780636c197ff51461021c578063715018a61461023b57806376771d4b1461024f57806376f728d81461026e575f5ffd5b806309f72da314610129578063198e2b8a1461015b57806331f3efba146101705780633fc8cef31461018f57806341528e72146101c6575f5ffd5b3661012557005b5f5ffd5b348015610134575f5ffd5b506101486101433660046124e4565b61042a565b6040519081526020015b60405180910390f35b61016e610169366004612544565b6105aa565b005b34801561017b575f5ffd5b5061014861018a3660046125b0565b6107dc565b34801561019a575f5ffd5b506004546101ae906001600160a01b031681565b6040516001600160a01b039091168152602001610152565b3480156101d1575f5ffd5b506101486101e03660046124e4565b6001600160a01b03165f9081526006602052604090206002015490565b348015610208575f5ffd5b5061016e6102173660046124e4565b610989565b348015610227575f5ffd5b5061016e6102363660046125b0565b610ab4565b348015610246575f5ffd5b5061016e610e5c565b34801561025a575f5ffd5b506005546101ae906001600160a01b031681565b348015610279575f5ffd5b5061016e6102883660046125da565b610e6f565b348015610298575f5ffd5b506003546101ae906001600160a01b031681565b3480156102b7575f5ffd5b505f546001600160a01b03166101ae565b3480156102d3575f5ffd5b5061016e6102e23660046124e4565b610e7c565b3480156102f2575f5ffd5b506101486103013660046125b0565b610ea6565b348015610311575f5ffd5b5061031b61271081565b60405162ffffff9091168152602001610152565b34801561033a575f5ffd5b5061016e6103493660046124e4565b61103d565b348015610359575f5ffd5b506103a36103683660046124e4565b60066020525f908152604090208054600182015460028301546003909301546001600160a01b0392831693919260ff82169161010090041685565b604080516001600160a01b039687168152602081019590955284019290925215156060830152909116608082015260a001610152565b3480156103e4575f5ffd5b5061016e6103f33660046124e4565b6110c3565b61016e6104063660046124e4565b611114565b348015610416575f5ffd5b5061016e6104253660046124e4565b611636565b6001600160a01b038082165f90815260066020526040812080549192909116806104675760405163677510db60e11b815260040160405180910390fd5b600382015460ff161561048d57604051636f555ee160e11b815260040160405180910390fd5b5f826002015490505f836001015490505f81846001600160a01b0316634c0abcdb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104db573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104ff91906125f1565b610509919061261c565b9050805f0361051e57505f9695505050505050565b600254604051631a8ca49b60e21b81526004810185905260248101839052670de0b6b3a764000060448201525f916001600160a01b031690636a32926c90606401602060405180830381865afa15801561057a573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061059e91906125f1565b98975050505050505050565b6105b26116b1565b5f848484846040516105c3906124c3565b6105d09493929190612657565b604051809103905ff0801580156105e9573d5f5f3e3d5ffd5b506040805160a0810182526001600160a01b038381168083525f6020808501828152858701838152606087018481523360808901908152868652600690945293889020965187546001600160a01b0319169087161787559051600187015551600286015590516003909401805491516001600160a81b0319909216941515610100600160a81b03191694909417610100919093160291909117909155905163aa60b06b60e01b8152306004820152919250829163aa60b06b906024015f604051808303815f87803b1580156106bc575f5ffd5b505af11580156106ce573d5f5f3e3d5ffd5b50506040516370a0823160e01b81523060048201525f92506001600160a01b03851691506370a0823190602401602060405180830381865afa158015610716573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061073a91906125f1565b9050805f0361075c5760405163022e258160e11b815260040160405180910390fd5b6001600160a01b0382165f8181526006602052604090819020600101839055513391907fd5d05a8421149c74fd223cfc823befb883babf9bf0b0e4d6bf9c8fdb70e59bb4906107b2908b908b908b908b90612657565b60405180910390a334156107ca576107ca82346116db565b5050506107d660018055565b50505050565b6001600160a01b038083165f90815260066020526040812080549192909116806108195760405163677510db60e11b815260040160405180910390fd5b600382015460ff161561083f57604051636f555ee160e11b815260040160405180910390fd5b835f0361085f576040516382c4a8c960e01b815260040160405180910390fd5b5f826002015490505f836001015490505f81846001600160a01b0316634c0abcdb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108ad573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108d191906125f1565b6108db919061261c565b600254604051633696fd2560e11b81526004810186905260248101839052604481018a90529192505f916001600160a01b0390911690636d2dfa4a90606401602060405180830381865afa158015610935573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061095991906125f1565b90505f61096d82662386f26fc10000611ad0565b9050610979818361261c565b9750505050505050505b92915050565b610991611af5565b600380546001600160a01b0319166001600160a01b0383169081179091556040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa1580156109e8573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a0c9190612688565b60055f6101000a8154816001600160a01b0302191690836001600160a01b03160217905550806001600160a01b0316634aa4a4fc6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a6d573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a919190612688565b600480546001600160a01b0319166001600160a01b039290921691909117905550565b610abc6116b1565b6001600160a01b038083165f908152600660205260409020805490911680610af75760405163677510db60e11b815260040160405180910390fd5b600382015460ff1615610b1d57604051636f555ee160e11b815260040160405180910390fd5b825f03610b3d576040516382c4a8c960e01b815260040160405180910390fd5b5f826002015490505f836001015490505f81846001600160a01b0316634c0abcdb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b8b573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610baf91906125f1565b610bb9919061261c565b600254604051633696fd2560e11b81526004810186905260248101839052604481018990529192505f916001600160a01b0390911690636d2dfa4a90606401602060405180830381865afa158015610c13573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c3791906125f1565b90505f610c4b82662386f26fc10000611ad0565b90505f610c58828461261c565b905082861015610c7b5760405163f8ffc0af60e01b815260040160405180910390fd5b60028801805484900390556001880180548a0190558115610d09576008546040515f916001600160a01b03169084908381818185875af1925050503d805f8114610ce0576040519150601f19603f3d011682016040523d82523d5f602084013e610ce5565b606091505b5050905080610d0757604051633fa2a53d60e21b815260040160405180910390fd5b505b6040516323b872dd60e01b8152336004820152306024820152604481018a90526001600160a01b038816906323b872dd906064016020604051808303815f875af1158015610d59573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d7d91906126a3565b610d9a5760405163022e258160e11b815260040160405180910390fd5b6040515f90339083908381818185875af1925050503d805f8114610dd9576040519150601f19603f3d011682016040523d82523d5f602084013e610dde565b606091505b5050905080610e0057604051633fa2a53d60e21b815260040160405180910390fd5b604080518b81526020810184905233916001600160a01b038e16917f697c42d55a5e1fed3f464ec6f38b32546a0bd368dc8068b065c67566d73f3290910160405180910390a3505050505050505050610e5860018055565b5050565b610e64611af5565b610e6d5f611b4e565b565b610e77611af5565b600755565b610e84611af5565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038083165f9081526006602052604081208054919290911680610ee35760405163677510db60e11b815260040160405180910390fd5b600382015460ff1615610f0957604051636f555ee160e11b815260040160405180910390fd5b835f03610f2957604051631412d90760e31b815260040160405180910390fd5b60028201545f610f4086662386f26fc10000611ad0565b90505f610f4d828861261c565b90505f856001015490505f81866001600160a01b0316634c0abcdb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f95573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fb991906125f1565b610fc3919061261c565b6002546040516388dc874360e01b81526004810188905260248101839052604481018690529192506001600160a01b0316906388dc874390606401602060405180830381865afa158015611019573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061097991906125f1565b611045611af5565b61104d6116b1565b6001600160a01b038082165f90815260066020526040902080549091166110875760405163677510db60e11b815260040160405180910390fd5b600381015460ff16156110ad57604051636f555ee160e11b815260040160405180910390fd5b6110b682611b9d565b506110c060018055565b50565b6110cb611af5565b6001600160a01b0381166110f257604051634e46966960e11b815260040160405180910390fd5b600880546001600160a01b0319166001600160a01b0392909216919091179055565b61111c6116b1565b6001600160a01b038082165f9081526006602052604090208054909116806111575760405163677510db60e11b815260040160405180910390fd5b600382015460ff161561117d57604051636f555ee160e11b815260040160405180910390fd5b345f0361119d57604051631412d90760e31b815260040160405180910390fd5b60028201546007545f906064906111b59060636126c2565b6111bf91906126d9565b90505f8282116111cf575f6111d9565b6111d9838361261c565b9050805f036111fb5760405163261db8dd60e21b815260040160405180910390fd5b5f856001015490505f81866001600160a01b0316634c0abcdb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611241573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061126591906125f1565b61126f919061261c565b90505f61128b662386f26fc10000670de0b6b3a764000061261c565b90505f816112a186670de0b6b3a76400006126c2565b6112ab91906126d9565b90505f8134116112bb57346112bd565b815b90505f6112d182662386f26fc10000611ad0565b90505f6112de828461261c565b6002546040516388dc874360e01b8152600481018d905260248101899052604481018390529192505f916001600160a01b03909116906388dc874390606401602060405180830381865afa158015611338573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061135c91906125f1565b9050878111156114025750600254604051631a8ca49b60e21b8152600481018c9052602481018890526044810189905288916001600160a01b031690636a32926c90606401602060405180830381865afa1580156113bc573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113e091906125f1565b91506113f382662386f26fc10000611ad0565b92506113ff83836126f8565b93505b61140c828c6126f8565b60028e015560018d015461142190829061261c565b60018e0155821561149f576008546040515f916001600160a01b03169085908381818185875af1925050503d805f8114611476576040519150601f19603f3d011682016040523d82523d5f602084013e61147b565b606091505b505090508061149d57604051633fa2a53d60e21b815260040160405180910390fd5b505b60405163a9059cbb60e01b8152336004820152602481018290526001600160a01b038d169063a9059cbb906044016020604051808303815f875af11580156114e9573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061150d91906126a3565b61152a5760405163022e258160e11b815260040160405180910390fd5b5f843411611538575f611542565b611542853461261c565b905080156115b2576040515f90339083908381818185875af1925050503d805f8114611589576040519150601f19603f3d011682016040523d82523d5f602084013e61158e565b606091505b50509050806115b057604051633fa2a53d60e21b815260040160405180910390fd5b505b336001600160a01b03168f6001600160a01b03167fc244d500136edffae7025aaf7fbd7a07193ac544a1d0cc3132cf2a32452d340c8585604051611600929190918252602082015260400190565b60405180910390a36116118e612299565b1561161f5761161f8f611b9d565b50505050505050505050505050506110c060018055565b61163e611af5565b6001600160a01b0381166116a85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b6110c081611b4e565b6002600154036116d457604051633ee5aeb560e01b815260040160405180910390fd5b6002600155565b6001600160a01b038083165f9081526006602090815260408083208054600282015460018301548451634c0abcdb60e01b815294519397929092169590949193909284928792634c0abcdb92600480830193928290030181865afa158015611745573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061176991906125f1565b611773919061261c565b90505f61178787662386f26fc10000611ad0565b90505f611794828961261c565b6002546040516388dc874360e01b81526004810188905260248101869052604481018390529192505f916001600160a01b03909116906388dc874390606401602060405180830381865afa1580156117ee573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061181291906125f1565b9050848111156118ac5750600254604051631a8ca49b60e21b815260048101879052602481018590526044810186905285916001600160a01b031690636a32926c90606401602060405180830381865afa158015611872573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061189691906125f1565b91506118a982662386f26fc10000611ad0565b92505b81886002015f8282546118bf91906126f8565b9250508190555080886001015f8282546118d9919061261c565b90915550508215611957576008546040515f916001600160a01b03169085908381818185875af1925050503d805f811461192e576040519150601f19603f3d011682016040523d82523d5f602084013e611933565b606091505b505090508061195557604051633fa2a53d60e21b815260040160405180910390fd5b505b60405163a9059cbb60e01b8152336004820152602481018290526001600160a01b0388169063a9059cbb906044016020604051808303815f875af11580156119a1573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119c591906126a3565b6119e25760405163022e258160e11b815260040160405180910390fd5b5f6119ed84846126f8565b8a116119f9575f611a0d565b611a0384846126f8565b611a0d908b61261c565b90508015611a7d576040515f90339083908381818185875af1925050503d805f8114611a54576040519150601f19603f3d011682016040523d82523d5f602084013e611a59565b606091505b5050905080611a7b57604051633fa2a53d60e21b815260040160405180910390fd5b505b604080518481526020810184905233916001600160a01b038e16917fc244d500136edffae7025aaf7fbd7a07193ac544a1d0cc3132cf2a32452d340c910160405180910390a35050505050505050505050565b5f670de0b6b3a7640000611ae483856126c2565b611aee91906126d9565b9392505050565b5f546001600160a01b03163314610e6d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161169f565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b038082165f908152600660205260409020805460038201549192169060ff1615611be157604051636f555ee160e11b815260040160405180910390fd5b600282015468bdbc41e0348b3000008110611d0f57611c0968bdbc41e0348b3000008261261c565b60038401546040519192505f916101009091046001600160a01b031690685150ae84a8cdf00000908381818185875af1925050503d805f8114611c67576040519150601f19603f3d011682016040523d82523d5f602084013e611c6c565b606091505b5050905080611c8e57604051633fa2a53d60e21b815260040160405180910390fd5b6008546040515f916001600160a01b031690686c6b935b8bbd400000908381818185875af1925050503d805f8114611ce1576040519150601f19603f3d011682016040523d82523d5f602084013e611ce6565b606091505b5050905080611d0857604051633fa2a53d60e21b815260040160405180910390fd5b5050611d28565b60405163f8ffc0af60e01b815260040160405180910390fd5b6040516327b7784d60e11b81523060048201526001600160a01b03831690634f6ef09a906024015f604051808303815f87803b158015611d66575f5ffd5b505af1158015611d78573d5f5f3e3d5ffd5b505050505f8360010154836001600160a01b031663670171fd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611dbe573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611de291906125f1565b611dec91906126f8565b5f60018087018290556002870182905560038701805460ff191690911790556004805460408051630d0e30db60e41b815290519495506001600160a01b039091169363d0e30db09387938381019391929182900301818588803b158015611e51575f5ffd5b505af1158015611e63573d5f5f3e3d5ffd5b5050600454600354611e8694506001600160a01b039182169350169050846122d4565b600354611e9e9084906001600160a01b0316836122d4565b600480546040516370a0823160e01b8152309281019290925283916001600160a01b03909116906370a0823190602401602060405180830381865afa158015611ee9573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f0d91906125f1565b1015611f5b5760405162461bcd60e51b815260206004820152601960248201527f496e73756666696369656e7420574554482062616c616e636500000000000000604482015260640161169f565b6040516370a0823160e01b815230600482015281906001600160a01b038516906370a0823190602401602060405180830381865afa158015611f9f573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611fc391906125f1565b10156120115760405162461bcd60e51b815260206004820152601a60248201527f496e73756666696369656e7420746f6b656e2062616c616e6365000000000000604482015260640161169f565b600354600480546040516309f56ab160e11b81526001600160a01b0391821692810192909252878116602483015261271060448301526ca2940e609a4ffea220fb79e5b26064830152909116906313ead562906084016020604051808303815f875af1158015612083573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120a79190612688565b506040805161016081018252600480546001600160a01b039081168352888116602084015261271083850152620d899f196060840152620d89a0608084015260a0830186905260c083018590525f60e084018190526101008085018290526003808b015491909104831661012086015242610140860152549451634418b22b60e11b81529394909384938493929092169163883164569161214a9188910161270b565b6080604051808303815f875af1158015612166573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061218a91906127cf565b935093505092505f828761219e919061261c565b90505f6121ab838861261c565b9050811561222f576004546003546121d0916001600160a01b0390811691165f6122d4565b60048054604051632e1a7d4d60e01b81529182018490526001600160a01b031690632e1a7d4d906024015f604051808303815f87803b158015612211575f5ffd5b505af1158015612223573d5f5f3e3d5ffd5b5050505060028a018290555b8015612248576122408930836123cf565b60018a018190555b60408051858152602081018590526001600160a01b038d16917fac1d76749e5447b7b16f5ab61447e1bd502f3bb4807af3b28e620d1700a6ee45910160405180910390a25050505050505050505050565b5f5f606460075460636122ac91906126c2565b6122b691906126d9565b905082600101545f1480611aee575080836002015410159392505050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663095ea7b360e01b17905291515f9283929087169161232f919061281f565b5f604051808303815f865af19150503d805f8114612368576040519150601f19603f3d011682016040523d82523d5f602084013e61236d565b606091505b509150915081801561239757508051158061239757508080602001905181019061239791906126a3565b6123c85760405162461bcd60e51b8152602060048201526002602482015261534160f01b604482015260640161169f565b5050505050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b17905291515f9283929087169161242a919061281f565b5f604051808303815f865af19150503d805f8114612463576040519150601f19603f3d011682016040523d82523d5f602084013e612468565b606091505b509150915081801561249257508051158061249257508080602001905181019061249291906126a3565b6123c85760405162461bcd60e51b815260206004820152600260248201526114d560f21b604482015260640161169f565b61104e8061283683390190565b6001600160a01b03811681146110c0575f5ffd5b5f602082840312156124f4575f5ffd5b8135611aee816124d0565b5f5f83601f84011261250f575f5ffd5b50813567ffffffffffffffff811115612526575f5ffd5b60208301915083602082850101111561253d575f5ffd5b9250929050565b5f5f5f5f60408587031215612557575f5ffd5b843567ffffffffffffffff81111561256d575f5ffd5b612579878288016124ff565b909550935050602085013567ffffffffffffffff811115612598575f5ffd5b6125a4878288016124ff565b95989497509550505050565b5f5f604083850312156125c1575f5ffd5b82356125cc816124d0565b946020939093013593505050565b5f602082840312156125ea575f5ffd5b5035919050565b5f60208284031215612601575f5ffd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b8181038181111561098357610983612608565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b604081525f61266a60408301868861262f565b828103602084015261267d81858761262f565b979650505050505050565b5f60208284031215612698575f5ffd5b8151611aee816124d0565b5f602082840312156126b3575f5ffd5b81518015158114611aee575f5ffd5b808202811582820484141761098357610983612608565b5f826126f357634e487b7160e01b5f52601260045260245ffd5b500490565b8082018082111561098357610983612608565b81516001600160a01b031681526101608101602083015161273760208401826001600160a01b03169052565b50604083015161274e604084018262ffffff169052565b506060830151612763606084018260020b9052565b506080830151612778608084018260020b9052565b5060a083015160a083015260c083015160c083015260e083015160e08301526101008301516101008301526101208301516127bf6101208401826001600160a01b03169052565b5061014092830151919092015290565b5f5f5f5f608085870312156127e2575f5ffd5b845160208601519094506fffffffffffffffffffffffffffffffff81168114612809575f5ffd5b6040860151606090960151949790965092505050565b5f82518060208501845e5f92019182525091905056fe608060405234801561000f575f5ffd5b5060405161104e38038061104e83398101604081905261002e91610237565b8181600361003c838261031f565b506004610049828261031f565b50505061006261005d61007f60201b60201c565b610083565b610078306b033b2e3c9fd0803ce80000006100d4565b50506103fe565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6001600160a01b03821661012e5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640160405180910390fd5b8060025f82825461013f91906103d9565b90915550506001600160a01b0382165f81815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b505050565b634e487b7160e01b5f52604160045260245ffd5b5f82601f8301126101bd575f5ffd5b81516001600160401b038111156101d6576101d661019a565b604051601f8201601f19908116603f011681016001600160401b03811182821017156102045761020461019a565b60405281815283820160200185101561021b575f5ffd5b8160208501602083015e5f918101602001919091529392505050565b5f5f60408385031215610248575f5ffd5b82516001600160401b0381111561025d575f5ffd5b610269858286016101ae565b602085015190935090506001600160401b03811115610286575f5ffd5b610292858286016101ae565b9150509250929050565b600181811c908216806102b057607f821691505b6020821081036102ce57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111561019557805f5260205f20601f840160051c810160208510156102f95750805b601f840160051c820191505b81811015610318575f8155600101610305565b5050505050565b81516001600160401b038111156103385761033861019a565b61034c81610346845461029c565b846102d4565b6020601f82116001811461037e575f83156103675750848201515b5f19600385901b1c1916600184901b178455610318565b5f84815260208120601f198516915b828110156103ad578785015182556020948501946001909201910161038d565b50848210156103ca57868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b808201808211156103f857634e487b7160e01b5f52601160045260245ffd5b92915050565b610c438061040b5f395ff3fe608060405234801561000f575f5ffd5b5060043610610132575f3560e01c806370a08231116100b457806395d89b411161007957806395d89b411461027c578063a457c2d714610284578063a9059cbb14610297578063aa60b06b146102aa578063dd62ed3e146102bd578063f2fde38b146102d0575f5ffd5b806370a082311461020b578063715018a61461023357806379cc67901461023b5780638da5cb5b1461024e578063902d55a514610269575f5ffd5b806339509351116100fa57806339509351146101ab57806342966c68146101be5780634c0abcdb146101d35780634f6ef09a146101e6578063670171fd146101f9575f5ffd5b806306fdde0314610136578063095ea7b31461015457806318160ddd1461017757806323b872dd14610189578063313ce5671461019c575b5f5ffd5b61013e6102e3565b60405161014b9190610a9c565b60405180910390f35b610167610162366004610aec565b610373565b604051901515815260200161014b565b6002545b60405190815260200161014b565b610167610197366004610b14565b61038c565b6040516012815260200161014b565b6101676101b9366004610aec565b6103af565b6101d16101cc366004610b4e565b6103d0565b005b61017b6b024306c4097859c43c00000081565b6101d16101f4366004610b65565b6103dd565b61017b6af8277896582678ac00000081565b61017b610219366004610b65565b6001600160a01b03165f9081526020819052604090205490565b6101d16103fb565b6101d1610249366004610aec565b61040e565b6005546040516001600160a01b03909116815260200161014b565b61017b6b033b2e3c9fd0803ce800000081565b61013e61041c565b610167610292366004610aec565b61042b565b6101676102a5366004610aec565b6104aa565b6101d16102b8366004610b65565b6104b7565b61017b6102cb366004610b85565b6104d6565b6101d16102de366004610b65565b610500565b6060600380546102f290610bb6565b80601f016020809104026020016040519081016040528092919081815260200182805461031e90610bb6565b80156103695780601f1061034057610100808354040283529160200191610369565b820191905f5260205f20905b81548152906001019060200180831161034c57829003601f168201915b5050505050905090565b5f33610380818585610576565b60019150505b92915050565b5f3361039985828561069a565b6103a4858585610712565b506001949350505050565b5f336103808185856103c183836104d6565b6103cb9190610bee565b610576565b6103da33826108b4565b50565b6103e56109dc565b6103da30826af8277896582678ac000000610712565b6104036109dc565b61040c5f610a36565b565b6104188282610a87565b5050565b6060600480546102f290610bb6565b5f338161043882866104d6565b90508381101561049d5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084015b60405180910390fd5b6103a48286868403610576565b5f33610380818585610712565b6104bf6109dc565b6103da30826b024306c4097859c43c000000610712565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b6105086109dc565b6001600160a01b03811661056d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610494565b6103da81610a36565b6001600160a01b0383166105d85760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610494565b6001600160a01b0382166106395760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610494565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b5f6106a584846104d6565b90505f19811461070c57818110156106ff5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610494565b61070c8484848403610576565b50505050565b6001600160a01b0383166107765760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610494565b6001600160a01b0382166107d85760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610494565b6001600160a01b0383165f908152602081905260409020548181101561084f5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610494565b6001600160a01b038481165f81815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a361070c565b6001600160a01b0382166109145760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610494565b6001600160a01b0382165f90815260208190526040902054818110156109875760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610494565b6001600160a01b0383165f818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910161068d565b6005546001600160a01b0316331461040c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610494565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b610a9282338361069a565b61041882826108b4565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b80356001600160a01b0381168114610ae7575f5ffd5b919050565b5f5f60408385031215610afd575f5ffd5b610b0683610ad1565b946020939093013593505050565b5f5f5f60608486031215610b26575f5ffd5b610b2f84610ad1565b9250610b3d60208501610ad1565b929592945050506040919091013590565b5f60208284031215610b5e575f5ffd5b5035919050565b5f60208284031215610b75575f5ffd5b610b7e82610ad1565b9392505050565b5f5f60408385031215610b96575f5ffd5b610b9f83610ad1565b9150610bad60208401610ad1565b90509250929050565b600181811c90821680610bca57607f821691505b602082108103610be857634e487b7160e01b5f52602260045260245ffd5b50919050565b8082018082111561038657634e487b7160e01b5f52601160045260245ffdfea2646970667358221220fb937a04e79ffbdd252df5bc904c3a65d8caabf1b3fed81da74e6f7b40dd294f64736f6c634300081c0033a26469706673582212203d8344e6ab9f47c482f09a0edaaaff677a048deee524375d9488dc6bfcc5d99164736f6c634300081c003300000000000000000000000077dcc9b09c6ae94cdc726540735682a38e18d6900000000000000000000000006f12d27c70d354d1d1a52fcbf16cfc9b62b2e0290000000000000000000000003bea4a7aa36c9e966c9e403b9dc81871836b9a6e

    Deployed Bytecode

    0x60806040526004361061011e575f3560e01c8063791b98bc1161009d578063ddf731f311610062578063ddf731f31461032f578063e48603391461034e578063e74b981b146103d9578063f088d547146103f8578063f2fde38b1461040b575f5ffd5b8063791b98bc1461028d5780638da5cb5b146102ac5780638e72b23f146102c8578063be33f6bd146102e7578063dd1b9c4a14610306575f5ffd5b80635760f2e3116100e35780635760f2e3146101fd5780636c197ff51461021c578063715018a61461023b57806376771d4b1461024f57806376f728d81461026e575f5ffd5b806309f72da314610129578063198e2b8a1461015b57806331f3efba146101705780633fc8cef31461018f57806341528e72146101c6575f5ffd5b3661012557005b5f5ffd5b348015610134575f5ffd5b506101486101433660046124e4565b61042a565b6040519081526020015b60405180910390f35b61016e610169366004612544565b6105aa565b005b34801561017b575f5ffd5b5061014861018a3660046125b0565b6107dc565b34801561019a575f5ffd5b506004546101ae906001600160a01b031681565b6040516001600160a01b039091168152602001610152565b3480156101d1575f5ffd5b506101486101e03660046124e4565b6001600160a01b03165f9081526006602052604090206002015490565b348015610208575f5ffd5b5061016e6102173660046124e4565b610989565b348015610227575f5ffd5b5061016e6102363660046125b0565b610ab4565b348015610246575f5ffd5b5061016e610e5c565b34801561025a575f5ffd5b506005546101ae906001600160a01b031681565b348015610279575f5ffd5b5061016e6102883660046125da565b610e6f565b348015610298575f5ffd5b506003546101ae906001600160a01b031681565b3480156102b7575f5ffd5b505f546001600160a01b03166101ae565b3480156102d3575f5ffd5b5061016e6102e23660046124e4565b610e7c565b3480156102f2575f5ffd5b506101486103013660046125b0565b610ea6565b348015610311575f5ffd5b5061031b61271081565b60405162ffffff9091168152602001610152565b34801561033a575f5ffd5b5061016e6103493660046124e4565b61103d565b348015610359575f5ffd5b506103a36103683660046124e4565b60066020525f908152604090208054600182015460028301546003909301546001600160a01b0392831693919260ff82169161010090041685565b604080516001600160a01b039687168152602081019590955284019290925215156060830152909116608082015260a001610152565b3480156103e4575f5ffd5b5061016e6103f33660046124e4565b6110c3565b61016e6104063660046124e4565b611114565b348015610416575f5ffd5b5061016e6104253660046124e4565b611636565b6001600160a01b038082165f90815260066020526040812080549192909116806104675760405163677510db60e11b815260040160405180910390fd5b600382015460ff161561048d57604051636f555ee160e11b815260040160405180910390fd5b5f826002015490505f836001015490505f81846001600160a01b0316634c0abcdb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104db573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104ff91906125f1565b610509919061261c565b9050805f0361051e57505f9695505050505050565b600254604051631a8ca49b60e21b81526004810185905260248101839052670de0b6b3a764000060448201525f916001600160a01b031690636a32926c90606401602060405180830381865afa15801561057a573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061059e91906125f1565b98975050505050505050565b6105b26116b1565b5f848484846040516105c3906124c3565b6105d09493929190612657565b604051809103905ff0801580156105e9573d5f5f3e3d5ffd5b506040805160a0810182526001600160a01b038381168083525f6020808501828152858701838152606087018481523360808901908152868652600690945293889020965187546001600160a01b0319169087161787559051600187015551600286015590516003909401805491516001600160a81b0319909216941515610100600160a81b03191694909417610100919093160291909117909155905163aa60b06b60e01b8152306004820152919250829163aa60b06b906024015f604051808303815f87803b1580156106bc575f5ffd5b505af11580156106ce573d5f5f3e3d5ffd5b50506040516370a0823160e01b81523060048201525f92506001600160a01b03851691506370a0823190602401602060405180830381865afa158015610716573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061073a91906125f1565b9050805f0361075c5760405163022e258160e11b815260040160405180910390fd5b6001600160a01b0382165f8181526006602052604090819020600101839055513391907fd5d05a8421149c74fd223cfc823befb883babf9bf0b0e4d6bf9c8fdb70e59bb4906107b2908b908b908b908b90612657565b60405180910390a334156107ca576107ca82346116db565b5050506107d660018055565b50505050565b6001600160a01b038083165f90815260066020526040812080549192909116806108195760405163677510db60e11b815260040160405180910390fd5b600382015460ff161561083f57604051636f555ee160e11b815260040160405180910390fd5b835f0361085f576040516382c4a8c960e01b815260040160405180910390fd5b5f826002015490505f836001015490505f81846001600160a01b0316634c0abcdb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108ad573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108d191906125f1565b6108db919061261c565b600254604051633696fd2560e11b81526004810186905260248101839052604481018a90529192505f916001600160a01b0390911690636d2dfa4a90606401602060405180830381865afa158015610935573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061095991906125f1565b90505f61096d82662386f26fc10000611ad0565b9050610979818361261c565b9750505050505050505b92915050565b610991611af5565b600380546001600160a01b0319166001600160a01b0383169081179091556040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa1580156109e8573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a0c9190612688565b60055f6101000a8154816001600160a01b0302191690836001600160a01b03160217905550806001600160a01b0316634aa4a4fc6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a6d573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a919190612688565b600480546001600160a01b0319166001600160a01b039290921691909117905550565b610abc6116b1565b6001600160a01b038083165f908152600660205260409020805490911680610af75760405163677510db60e11b815260040160405180910390fd5b600382015460ff1615610b1d57604051636f555ee160e11b815260040160405180910390fd5b825f03610b3d576040516382c4a8c960e01b815260040160405180910390fd5b5f826002015490505f836001015490505f81846001600160a01b0316634c0abcdb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b8b573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610baf91906125f1565b610bb9919061261c565b600254604051633696fd2560e11b81526004810186905260248101839052604481018990529192505f916001600160a01b0390911690636d2dfa4a90606401602060405180830381865afa158015610c13573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c3791906125f1565b90505f610c4b82662386f26fc10000611ad0565b90505f610c58828461261c565b905082861015610c7b5760405163f8ffc0af60e01b815260040160405180910390fd5b60028801805484900390556001880180548a0190558115610d09576008546040515f916001600160a01b03169084908381818185875af1925050503d805f8114610ce0576040519150601f19603f3d011682016040523d82523d5f602084013e610ce5565b606091505b5050905080610d0757604051633fa2a53d60e21b815260040160405180910390fd5b505b6040516323b872dd60e01b8152336004820152306024820152604481018a90526001600160a01b038816906323b872dd906064016020604051808303815f875af1158015610d59573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d7d91906126a3565b610d9a5760405163022e258160e11b815260040160405180910390fd5b6040515f90339083908381818185875af1925050503d805f8114610dd9576040519150601f19603f3d011682016040523d82523d5f602084013e610dde565b606091505b5050905080610e0057604051633fa2a53d60e21b815260040160405180910390fd5b604080518b81526020810184905233916001600160a01b038e16917f697c42d55a5e1fed3f464ec6f38b32546a0bd368dc8068b065c67566d73f3290910160405180910390a3505050505050505050610e5860018055565b5050565b610e64611af5565b610e6d5f611b4e565b565b610e77611af5565b600755565b610e84611af5565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038083165f9081526006602052604081208054919290911680610ee35760405163677510db60e11b815260040160405180910390fd5b600382015460ff1615610f0957604051636f555ee160e11b815260040160405180910390fd5b835f03610f2957604051631412d90760e31b815260040160405180910390fd5b60028201545f610f4086662386f26fc10000611ad0565b90505f610f4d828861261c565b90505f856001015490505f81866001600160a01b0316634c0abcdb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f95573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fb991906125f1565b610fc3919061261c565b6002546040516388dc874360e01b81526004810188905260248101839052604481018690529192506001600160a01b0316906388dc874390606401602060405180830381865afa158015611019573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061097991906125f1565b611045611af5565b61104d6116b1565b6001600160a01b038082165f90815260066020526040902080549091166110875760405163677510db60e11b815260040160405180910390fd5b600381015460ff16156110ad57604051636f555ee160e11b815260040160405180910390fd5b6110b682611b9d565b506110c060018055565b50565b6110cb611af5565b6001600160a01b0381166110f257604051634e46966960e11b815260040160405180910390fd5b600880546001600160a01b0319166001600160a01b0392909216919091179055565b61111c6116b1565b6001600160a01b038082165f9081526006602052604090208054909116806111575760405163677510db60e11b815260040160405180910390fd5b600382015460ff161561117d57604051636f555ee160e11b815260040160405180910390fd5b345f0361119d57604051631412d90760e31b815260040160405180910390fd5b60028201546007545f906064906111b59060636126c2565b6111bf91906126d9565b90505f8282116111cf575f6111d9565b6111d9838361261c565b9050805f036111fb5760405163261db8dd60e21b815260040160405180910390fd5b5f856001015490505f81866001600160a01b0316634c0abcdb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611241573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061126591906125f1565b61126f919061261c565b90505f61128b662386f26fc10000670de0b6b3a764000061261c565b90505f816112a186670de0b6b3a76400006126c2565b6112ab91906126d9565b90505f8134116112bb57346112bd565b815b90505f6112d182662386f26fc10000611ad0565b90505f6112de828461261c565b6002546040516388dc874360e01b8152600481018d905260248101899052604481018390529192505f916001600160a01b03909116906388dc874390606401602060405180830381865afa158015611338573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061135c91906125f1565b9050878111156114025750600254604051631a8ca49b60e21b8152600481018c9052602481018890526044810189905288916001600160a01b031690636a32926c90606401602060405180830381865afa1580156113bc573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113e091906125f1565b91506113f382662386f26fc10000611ad0565b92506113ff83836126f8565b93505b61140c828c6126f8565b60028e015560018d015461142190829061261c565b60018e0155821561149f576008546040515f916001600160a01b03169085908381818185875af1925050503d805f8114611476576040519150601f19603f3d011682016040523d82523d5f602084013e61147b565b606091505b505090508061149d57604051633fa2a53d60e21b815260040160405180910390fd5b505b60405163a9059cbb60e01b8152336004820152602481018290526001600160a01b038d169063a9059cbb906044016020604051808303815f875af11580156114e9573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061150d91906126a3565b61152a5760405163022e258160e11b815260040160405180910390fd5b5f843411611538575f611542565b611542853461261c565b905080156115b2576040515f90339083908381818185875af1925050503d805f8114611589576040519150601f19603f3d011682016040523d82523d5f602084013e61158e565b606091505b50509050806115b057604051633fa2a53d60e21b815260040160405180910390fd5b505b336001600160a01b03168f6001600160a01b03167fc244d500136edffae7025aaf7fbd7a07193ac544a1d0cc3132cf2a32452d340c8585604051611600929190918252602082015260400190565b60405180910390a36116118e612299565b1561161f5761161f8f611b9d565b50505050505050505050505050506110c060018055565b61163e611af5565b6001600160a01b0381166116a85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b6110c081611b4e565b6002600154036116d457604051633ee5aeb560e01b815260040160405180910390fd5b6002600155565b6001600160a01b038083165f9081526006602090815260408083208054600282015460018301548451634c0abcdb60e01b815294519397929092169590949193909284928792634c0abcdb92600480830193928290030181865afa158015611745573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061176991906125f1565b611773919061261c565b90505f61178787662386f26fc10000611ad0565b90505f611794828961261c565b6002546040516388dc874360e01b81526004810188905260248101869052604481018390529192505f916001600160a01b03909116906388dc874390606401602060405180830381865afa1580156117ee573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061181291906125f1565b9050848111156118ac5750600254604051631a8ca49b60e21b815260048101879052602481018590526044810186905285916001600160a01b031690636a32926c90606401602060405180830381865afa158015611872573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061189691906125f1565b91506118a982662386f26fc10000611ad0565b92505b81886002015f8282546118bf91906126f8565b9250508190555080886001015f8282546118d9919061261c565b90915550508215611957576008546040515f916001600160a01b03169085908381818185875af1925050503d805f811461192e576040519150601f19603f3d011682016040523d82523d5f602084013e611933565b606091505b505090508061195557604051633fa2a53d60e21b815260040160405180910390fd5b505b60405163a9059cbb60e01b8152336004820152602481018290526001600160a01b0388169063a9059cbb906044016020604051808303815f875af11580156119a1573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119c591906126a3565b6119e25760405163022e258160e11b815260040160405180910390fd5b5f6119ed84846126f8565b8a116119f9575f611a0d565b611a0384846126f8565b611a0d908b61261c565b90508015611a7d576040515f90339083908381818185875af1925050503d805f8114611a54576040519150601f19603f3d011682016040523d82523d5f602084013e611a59565b606091505b5050905080611a7b57604051633fa2a53d60e21b815260040160405180910390fd5b505b604080518481526020810184905233916001600160a01b038e16917fc244d500136edffae7025aaf7fbd7a07193ac544a1d0cc3132cf2a32452d340c910160405180910390a35050505050505050505050565b5f670de0b6b3a7640000611ae483856126c2565b611aee91906126d9565b9392505050565b5f546001600160a01b03163314610e6d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161169f565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b038082165f908152600660205260409020805460038201549192169060ff1615611be157604051636f555ee160e11b815260040160405180910390fd5b600282015468bdbc41e0348b3000008110611d0f57611c0968bdbc41e0348b3000008261261c565b60038401546040519192505f916101009091046001600160a01b031690685150ae84a8cdf00000908381818185875af1925050503d805f8114611c67576040519150601f19603f3d011682016040523d82523d5f602084013e611c6c565b606091505b5050905080611c8e57604051633fa2a53d60e21b815260040160405180910390fd5b6008546040515f916001600160a01b031690686c6b935b8bbd400000908381818185875af1925050503d805f8114611ce1576040519150601f19603f3d011682016040523d82523d5f602084013e611ce6565b606091505b5050905080611d0857604051633fa2a53d60e21b815260040160405180910390fd5b5050611d28565b60405163f8ffc0af60e01b815260040160405180910390fd5b6040516327b7784d60e11b81523060048201526001600160a01b03831690634f6ef09a906024015f604051808303815f87803b158015611d66575f5ffd5b505af1158015611d78573d5f5f3e3d5ffd5b505050505f8360010154836001600160a01b031663670171fd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611dbe573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611de291906125f1565b611dec91906126f8565b5f60018087018290556002870182905560038701805460ff191690911790556004805460408051630d0e30db60e41b815290519495506001600160a01b039091169363d0e30db09387938381019391929182900301818588803b158015611e51575f5ffd5b505af1158015611e63573d5f5f3e3d5ffd5b5050600454600354611e8694506001600160a01b039182169350169050846122d4565b600354611e9e9084906001600160a01b0316836122d4565b600480546040516370a0823160e01b8152309281019290925283916001600160a01b03909116906370a0823190602401602060405180830381865afa158015611ee9573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f0d91906125f1565b1015611f5b5760405162461bcd60e51b815260206004820152601960248201527f496e73756666696369656e7420574554482062616c616e636500000000000000604482015260640161169f565b6040516370a0823160e01b815230600482015281906001600160a01b038516906370a0823190602401602060405180830381865afa158015611f9f573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611fc391906125f1565b10156120115760405162461bcd60e51b815260206004820152601a60248201527f496e73756666696369656e7420746f6b656e2062616c616e6365000000000000604482015260640161169f565b600354600480546040516309f56ab160e11b81526001600160a01b0391821692810192909252878116602483015261271060448301526ca2940e609a4ffea220fb79e5b26064830152909116906313ead562906084016020604051808303815f875af1158015612083573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120a79190612688565b506040805161016081018252600480546001600160a01b039081168352888116602084015261271083850152620d899f196060840152620d89a0608084015260a0830186905260c083018590525f60e084018190526101008085018290526003808b015491909104831661012086015242610140860152549451634418b22b60e11b81529394909384938493929092169163883164569161214a9188910161270b565b6080604051808303815f875af1158015612166573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061218a91906127cf565b935093505092505f828761219e919061261c565b90505f6121ab838861261c565b9050811561222f576004546003546121d0916001600160a01b0390811691165f6122d4565b60048054604051632e1a7d4d60e01b81529182018490526001600160a01b031690632e1a7d4d906024015f604051808303815f87803b158015612211575f5ffd5b505af1158015612223573d5f5f3e3d5ffd5b5050505060028a018290555b8015612248576122408930836123cf565b60018a018190555b60408051858152602081018590526001600160a01b038d16917fac1d76749e5447b7b16f5ab61447e1bd502f3bb4807af3b28e620d1700a6ee45910160405180910390a25050505050505050505050565b5f5f606460075460636122ac91906126c2565b6122b691906126d9565b905082600101545f1480611aee575080836002015410159392505050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663095ea7b360e01b17905291515f9283929087169161232f919061281f565b5f604051808303815f865af19150503d805f8114612368576040519150601f19603f3d011682016040523d82523d5f602084013e61236d565b606091505b509150915081801561239757508051158061239757508080602001905181019061239791906126a3565b6123c85760405162461bcd60e51b8152602060048201526002602482015261534160f01b604482015260640161169f565b5050505050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b17905291515f9283929087169161242a919061281f565b5f604051808303815f865af19150503d805f8114612463576040519150601f19603f3d011682016040523d82523d5f602084013e612468565b606091505b509150915081801561249257508051158061249257508080602001905181019061249291906126a3565b6123c85760405162461bcd60e51b815260206004820152600260248201526114d560f21b604482015260640161169f565b61104e8061283683390190565b6001600160a01b03811681146110c0575f5ffd5b5f602082840312156124f4575f5ffd5b8135611aee816124d0565b5f5f83601f84011261250f575f5ffd5b50813567ffffffffffffffff811115612526575f5ffd5b60208301915083602082850101111561253d575f5ffd5b9250929050565b5f5f5f5f60408587031215612557575f5ffd5b843567ffffffffffffffff81111561256d575f5ffd5b612579878288016124ff565b909550935050602085013567ffffffffffffffff811115612598575f5ffd5b6125a4878288016124ff565b95989497509550505050565b5f5f604083850312156125c1575f5ffd5b82356125cc816124d0565b946020939093013593505050565b5f602082840312156125ea575f5ffd5b5035919050565b5f60208284031215612601575f5ffd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b8181038181111561098357610983612608565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b604081525f61266a60408301868861262f565b828103602084015261267d81858761262f565b979650505050505050565b5f60208284031215612698575f5ffd5b8151611aee816124d0565b5f602082840312156126b3575f5ffd5b81518015158114611aee575f5ffd5b808202811582820484141761098357610983612608565b5f826126f357634e487b7160e01b5f52601260045260245ffd5b500490565b8082018082111561098357610983612608565b81516001600160a01b031681526101608101602083015161273760208401826001600160a01b03169052565b50604083015161274e604084018262ffffff169052565b506060830151612763606084018260020b9052565b506080830151612778608084018260020b9052565b5060a083015160a083015260c083015160c083015260e083015160e08301526101008301516101008301526101208301516127bf6101208401826001600160a01b03169052565b5061014092830151919092015290565b5f5f5f5f608085870312156127e2575f5ffd5b845160208601519094506fffffffffffffffffffffffffffffffff81168114612809575f5ffd5b6040860151606090960151949790965092505050565b5f82518060208501845e5f92019182525091905056fe608060405234801561000f575f5ffd5b5060405161104e38038061104e83398101604081905261002e91610237565b8181600361003c838261031f565b506004610049828261031f565b50505061006261005d61007f60201b60201c565b610083565b610078306b033b2e3c9fd0803ce80000006100d4565b50506103fe565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6001600160a01b03821661012e5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640160405180910390fd5b8060025f82825461013f91906103d9565b90915550506001600160a01b0382165f81815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b505050565b634e487b7160e01b5f52604160045260245ffd5b5f82601f8301126101bd575f5ffd5b81516001600160401b038111156101d6576101d661019a565b604051601f8201601f19908116603f011681016001600160401b03811182821017156102045761020461019a565b60405281815283820160200185101561021b575f5ffd5b8160208501602083015e5f918101602001919091529392505050565b5f5f60408385031215610248575f5ffd5b82516001600160401b0381111561025d575f5ffd5b610269858286016101ae565b602085015190935090506001600160401b03811115610286575f5ffd5b610292858286016101ae565b9150509250929050565b600181811c908216806102b057607f821691505b6020821081036102ce57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111561019557805f5260205f20601f840160051c810160208510156102f95750805b601f840160051c820191505b81811015610318575f8155600101610305565b5050505050565b81516001600160401b038111156103385761033861019a565b61034c81610346845461029c565b846102d4565b6020601f82116001811461037e575f83156103675750848201515b5f19600385901b1c1916600184901b178455610318565b5f84815260208120601f198516915b828110156103ad578785015182556020948501946001909201910161038d565b50848210156103ca57868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b808201808211156103f857634e487b7160e01b5f52601160045260245ffd5b92915050565b610c438061040b5f395ff3fe608060405234801561000f575f5ffd5b5060043610610132575f3560e01c806370a08231116100b457806395d89b411161007957806395d89b411461027c578063a457c2d714610284578063a9059cbb14610297578063aa60b06b146102aa578063dd62ed3e146102bd578063f2fde38b146102d0575f5ffd5b806370a082311461020b578063715018a61461023357806379cc67901461023b5780638da5cb5b1461024e578063902d55a514610269575f5ffd5b806339509351116100fa57806339509351146101ab57806342966c68146101be5780634c0abcdb146101d35780634f6ef09a146101e6578063670171fd146101f9575f5ffd5b806306fdde0314610136578063095ea7b31461015457806318160ddd1461017757806323b872dd14610189578063313ce5671461019c575b5f5ffd5b61013e6102e3565b60405161014b9190610a9c565b60405180910390f35b610167610162366004610aec565b610373565b604051901515815260200161014b565b6002545b60405190815260200161014b565b610167610197366004610b14565b61038c565b6040516012815260200161014b565b6101676101b9366004610aec565b6103af565b6101d16101cc366004610b4e565b6103d0565b005b61017b6b024306c4097859c43c00000081565b6101d16101f4366004610b65565b6103dd565b61017b6af8277896582678ac00000081565b61017b610219366004610b65565b6001600160a01b03165f9081526020819052604090205490565b6101d16103fb565b6101d1610249366004610aec565b61040e565b6005546040516001600160a01b03909116815260200161014b565b61017b6b033b2e3c9fd0803ce800000081565b61013e61041c565b610167610292366004610aec565b61042b565b6101676102a5366004610aec565b6104aa565b6101d16102b8366004610b65565b6104b7565b61017b6102cb366004610b85565b6104d6565b6101d16102de366004610b65565b610500565b6060600380546102f290610bb6565b80601f016020809104026020016040519081016040528092919081815260200182805461031e90610bb6565b80156103695780601f1061034057610100808354040283529160200191610369565b820191905f5260205f20905b81548152906001019060200180831161034c57829003601f168201915b5050505050905090565b5f33610380818585610576565b60019150505b92915050565b5f3361039985828561069a565b6103a4858585610712565b506001949350505050565b5f336103808185856103c183836104d6565b6103cb9190610bee565b610576565b6103da33826108b4565b50565b6103e56109dc565b6103da30826af8277896582678ac000000610712565b6104036109dc565b61040c5f610a36565b565b6104188282610a87565b5050565b6060600480546102f290610bb6565b5f338161043882866104d6565b90508381101561049d5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084015b60405180910390fd5b6103a48286868403610576565b5f33610380818585610712565b6104bf6109dc565b6103da30826b024306c4097859c43c000000610712565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b6105086109dc565b6001600160a01b03811661056d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610494565b6103da81610a36565b6001600160a01b0383166105d85760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610494565b6001600160a01b0382166106395760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610494565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b5f6106a584846104d6565b90505f19811461070c57818110156106ff5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610494565b61070c8484848403610576565b50505050565b6001600160a01b0383166107765760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610494565b6001600160a01b0382166107d85760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610494565b6001600160a01b0383165f908152602081905260409020548181101561084f5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610494565b6001600160a01b038481165f81815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a361070c565b6001600160a01b0382166109145760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610494565b6001600160a01b0382165f90815260208190526040902054818110156109875760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610494565b6001600160a01b0383165f818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910161068d565b6005546001600160a01b0316331461040c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610494565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b610a9282338361069a565b61041882826108b4565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b80356001600160a01b0381168114610ae7575f5ffd5b919050565b5f5f60408385031215610afd575f5ffd5b610b0683610ad1565b946020939093013593505050565b5f5f5f60608486031215610b26575f5ffd5b610b2f84610ad1565b9250610b3d60208501610ad1565b929592945050506040919091013590565b5f60208284031215610b5e575f5ffd5b5035919050565b5f60208284031215610b75575f5ffd5b610b7e82610ad1565b9392505050565b5f5f60408385031215610b96575f5ffd5b610b9f83610ad1565b9150610bad60208401610ad1565b90509250929050565b600181811c90821680610bca57607f821691505b602082108103610be857634e487b7160e01b5f52602260045260245ffd5b50919050565b8082018082111561038657634e487b7160e01b5f52601160045260245ffdfea2646970667358221220fb937a04e79ffbdd252df5bc904c3a65d8caabf1b3fed81da74e6f7b40dd294f64736f6c634300081c0033a26469706673582212203d8344e6ab9f47c482f09a0edaaaff677a048deee524375d9488dc6bfcc5d99164736f6c634300081c0033

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

    00000000000000000000000077dcc9b09c6ae94cdc726540735682a38e18d6900000000000000000000000006f12d27c70d354d1d1a52fcbf16cfc9b62b2e0290000000000000000000000003bea4a7aa36c9e966c9e403b9dc81871836b9a6e

    -----Decoded View---------------
    Arg [0] : _positionManager (address): 0x77DcC9b09C6Ae94CDC726540735682A38e18d690
    Arg [1] : _bancorFormula (address): 0x6F12d27C70d354d1D1a52FcBf16cfc9B62b2E029
    Arg [2] : _feeRecipient (address): 0x3bEA4a7AA36C9E966c9e403B9Dc81871836B9A6e

    -----Encoded View---------------
    3 Constructor Arguments found :
    Arg [0] : 00000000000000000000000077dcc9b09c6ae94cdc726540735682a38e18d690
    Arg [1] : 0000000000000000000000006f12d27c70d354d1d1a52fcbf16cfc9b62b2e029
    Arg [2] : 0000000000000000000000003bea4a7aa36c9e966c9e403b9dc81871836b9a6e


    Block Age Transaction Gas Used Reward
    view all blocks produced

    Block Age Uncle Number Difficulty Gas Used Reward
    View All Uncles
    Loading...
    Loading
    Loading...
    Loading

    Validator Index Block Age Amount
    View All Withdrawals

    Transaction Hash Block Age Value Eth2 PubKey Valid
    View All Deposits
    [ Download: CSV Export  ]
    [ Download: CSV Export  ]

    A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.