ETH Price: $3,391.10 (+2.25%)

Contract

0x7eC01AF408c7cb2B3B12a972FC556ca67047511d
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Withdraw188156632023-12-18 21:51:35395 days ago1702936295IN
0x7eC01AF4...67047511d
0 ETH0.0142580771.17434822
Swap188156612023-12-18 21:51:11395 days ago1702936271IN
0x7eC01AF4...67047511d
0 ETH0.0037318974.3701392
Execute188156602023-12-18 21:50:59395 days ago1702936259IN
0x7eC01AF4...67047511d
0.1 ETH0.0102549371.28364015
Execute188156562023-12-18 21:50:11395 days ago1702936211IN
0x7eC01AF4...67047511d
0 ETH0.0161848470.66412823
Withdraw188156422023-12-18 21:47:23395 days ago1702936043IN
0x7eC01AF4...67047511d
0 ETH0.0164513175.66395612
Swap188156412023-12-18 21:47:11395 days ago1702936031IN
0x7eC01AF4...67047511d
0 ETH0.0038196876.11964022
Execute188156392023-12-18 21:46:47395 days ago1702936007IN
0x7eC01AF4...67047511d
0.1 ETH0.0115219880.09111146
Execute188156342023-12-18 21:45:35395 days ago1702935935IN
0x7eC01AF4...67047511d
0 ETH0.0176604775.52409466
Execute185415872023-11-10 12:36:47433 days ago1699619807IN
0x7eC01AF4...67047511d
0.005 ETH0.0051978735.59993559
Withdraw185413312023-11-10 11:44:59433 days ago1699616699IN
0x7eC01AF4...67047511d
0 ETH0.0025646230.15323332
Execute185412322023-11-10 11:25:11433 days ago1699615511IN
0x7eC01AF4...67047511d
0.05 ETH0.0049056133.59827241
Withdraw184200872023-10-24 12:21:59450 days ago1698150119IN
0x7eC01AF4...67047511d
0 ETH0.0038135923.98157265
Swap184200852023-10-24 12:21:35450 days ago1698150095IN
0x7eC01AF4...67047511d
0 ETH0.0011923123.76085635
Execute184200802023-10-24 12:20:35450 days ago1698150035IN
0x7eC01AF4...67047511d
0.001 ETH0.003253522.61563651
Execute184200712023-10-24 12:18:47450 days ago1698149927IN
0x7eC01AF4...67047511d
0 ETH0.0053233426.3135691
Withdraw184199552023-10-24 11:55:23450 days ago1698148523IN
0x7eC01AF4...67047511d
0 ETH0.0015244320.47573002
Withdraw184199402023-10-24 11:52:23450 days ago1698148343IN
0x7eC01AF4...67047511d
0 ETH0.0033408823.54026509
Swap184199372023-10-24 11:51:47450 days ago1698148307IN
0x7eC01AF4...67047511d
0 ETH0.0011631623.17994844
Execute184199332023-10-24 11:50:59450 days ago1698148259IN
0x7eC01AF4...67047511d
0.01 ETH0.0035104524.40169095
Execute184199232023-10-24 11:48:59450 days ago1698148139IN
0x7eC01AF4...67047511d
0 ETH0.004910824.27439733
Withdraw184199092023-10-24 11:46:11450 days ago1698147971IN
0x7eC01AF4...67047511d
0 ETH0.0025003925.21778294
Withdraw184198952023-10-24 11:43:23450 days ago1698147803IN
0x7eC01AF4...67047511d
0 ETH0.0037561123.62010391
Swap184198922023-10-24 11:42:47450 days ago1698147767IN
0x7eC01AF4...67047511d
0 ETH0.0011992423.89891814
Execute184198892023-10-24 11:42:11450 days ago1698147731IN
0x7eC01AF4...67047511d
0.001 ETH0.0034661224.09354742
Execute184198692023-10-24 11:38:11450 days ago1698147491IN
0x7eC01AF4...67047511d
0 ETH0.0044548221.51008853
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block
From
To
188156602023-12-18 21:50:59395 days ago1702936259
0x7eC01AF4...67047511d
0.1 ETH
188156392023-12-18 21:46:47395 days ago1702936007
0x7eC01AF4...67047511d
0.1 ETH
185415872023-11-10 12:36:47433 days ago1699619807
0x7eC01AF4...67047511d
0.005 ETH
185412322023-11-10 11:25:11433 days ago1699615511
0x7eC01AF4...67047511d
0.05 ETH
184200802023-10-24 12:20:35450 days ago1698150035
0x7eC01AF4...67047511d
0.001 ETH
184199332023-10-24 11:50:59450 days ago1698148259
0x7eC01AF4...67047511d
0.01 ETH
184198892023-10-24 11:42:11450 days ago1698147731
0x7eC01AF4...67047511d
0.001 ETH
184069842023-10-22 16:20:35452 days ago1697991635
0x7eC01AF4...67047511d
0.01 ETH
184069732023-10-22 16:18:23452 days ago1697991503
0x7eC01AF4...67047511d
0.01 ETH
184068932023-10-22 16:02:11452 days ago1697990531
0x7eC01AF4...67047511d
0.01 ETH
184027832023-10-22 2:13:11453 days ago1697940791
0x7eC01AF4...67047511d
0.01 ETH
184024752023-10-22 1:11:23453 days ago1697937083
0x7eC01AF4...67047511d
0.01 ETH
184018152023-10-21 22:58:47453 days ago1697929127
0x7eC01AF4...67047511d
0.01 ETH
183358142023-10-12 17:26:23462 days ago1697131583
0x7eC01AF4...67047511d
0.0999 ETH
183351052023-10-12 15:02:47462 days ago1697122967
0x7eC01AF4...67047511d
0.1111 ETH
183349152023-10-12 14:24:23462 days ago1697120663
0x7eC01AF4...67047511d
0.123 ETH
183234942023-10-11 0:00:59464 days ago1696982459
0x7eC01AF4...67047511d
0.12 ETH
183227982023-10-10 21:41:11464 days ago1696974071
0x7eC01AF4...67047511d
0.05 ETH
183227562023-10-10 21:32:35464 days ago1696973555
0x7eC01AF4...67047511d
0.05 ETH
183221052023-10-10 19:20:47464 days ago1696965647
0x7eC01AF4...67047511d
1.3 ETH
180069212023-08-27 15:33:59508 days ago1693150439
0x7eC01AF4...67047511d
0.0061 ETH
176875192023-07-13 22:22:47553 days ago1689286967
0x7eC01AF4...67047511d
0.279596 ETH
173499372023-05-27 10:56:59600 days ago1685185019
0x7eC01AF4...67047511d
0.192 ETH
173223562023-05-23 13:53:47604 days ago1684850027
0x7eC01AF4...67047511d
5.45 ETH
171792962023-05-03 9:25:47624 days ago1683105947
0x7eC01AF4...67047511d
0.01 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
GigaSwap

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion
File 1 of 13 : GigaSwap.sol
// SPDX-License-Identifier: BUSL-1.1
pragma solidity ^0.8.17;

import '../swapper/DealsController.sol';
import '../fee/FeeSettingsDecorator.sol';

contract GigaSwap is DealsController, FeeSettingsDecorator {
    constructor(address feeSettingsAddress)
        FeeSettingsDecorator(feeSettingsAddress)
    {}
}

File 2 of 13 : DealsController.sol
// SPDX-License-Identifier: BUSL-1.1
pragma solidity ^0.8.17;

import '../lib/factories/HasFactories.sol';
import './IDealsController.sol';
import './IDealPointsController.sol';
import './Deal.sol';
import './DealPointRef.sol';
import './DealPointData.sol';

abstract contract DealsController is IDealsController, HasFactories {
    mapping(uint256 => Deal) internal _deals; // deal headers by id
    mapping(uint256 => mapping(uint256 => DealPointRef)) internal _dealPoints; // controllers for each deal point
    uint256 internal _dealsCount;
    uint256 internal _totalDealPointsCount;
    uint256 constant dealPointsLimit = 20;

    modifier onlyEditDealState(uint256 dealId) {
        require(_deals[dealId].state == 1, 'deal is not in edit state');
        _;
    }

    modifier onlyExecutionDealState(uint256 dealId) {
        require(_deals[dealId].state == 2, 'deal is not in execution state');
        _;
    }

    function getTotalDealPointsCount() external view returns (uint256) {
        return _totalDealPointsCount;
    }

    function createDeal(address owner1, address owner2)
        external
        onlyFactory
        returns (uint256)
    {
        // create a deal
        Deal memory dealHeader = Deal(
            1, // editing
            owner1, // 1 owner
            owner2, // 2 owner
            0
        );
        ++_dealsCount;
        _deals[_dealsCount] = dealHeader;
        emit NewDeal(_dealsCount, owner1);

        return _dealsCount;
    }

    function addDealPoint(
        uint256 dealId,
        address dealPointsController,
        uint256 newPointId
    ) external onlyFactory onlyEditDealState(dealId) {
        Deal storage deal = _deals[dealId];
        require(deal.state == 1, 'only for editing deal state');
        _dealPoints[dealId][deal.pointsCount] = DealPointRef(
            dealPointsController,
            newPointId
        );
        ++deal.pointsCount;
        require(
            deal.pointsCount <= dealPointsLimit,
            'deal points count exceeds of limit'
        );
        ++_totalDealPointsCount;
    }

    function getDealHeader(uint256 dealId) external view returns (Deal memory) {
        Deal memory header = _deals[dealId];
        require(header.state > 0, 'deal is not exists');
        return header;
    }

    /// @dev returns a deal, if there is no such deal, it gives an error
    function getDeal(uint256 dealId)
        external
        view
        override
        returns (Deal memory, DealPointData[] memory)
    {
        Deal memory deal = _deals[dealId];
        DealPointData[] memory points = new DealPointData[](deal.pointsCount);
        for (uint256 i = 0; i < deal.pointsCount; ++i) {
            points[i] = this.getDealPoint(dealId, i);
        }
        return (deal, points);
    }

    /// @dev if true, then the transaction is completed and it can be swapped
    function isExecuted(uint256 dealId) external view returns (bool) {
        // get the count of deal points
        Deal memory deal = _deals[dealId];
        if (deal.pointsCount == 0) return false;
        // take the deal points
        mapping(uint256 => DealPointRef) storage points = _dealPoints[dealId];
        // checking all deal points
        for (uint256 i = 0; i < deal.pointsCount; ++i) {
            DealPointRef memory pointRef = points[i];
            if (
                !IDealPointsController(payable(pointRef.controller)).isExecuted(
                    pointRef.id
                )
            ) return false;
        }
        return true;
    }

    function swap(uint256 dealId) external onlyExecutionDealState(dealId) {
        // take the amount of points
        Deal storage deal = _deals[dealId];
        require(deal.pointsCount > 0, 'deal has no points');
        // check all points to be executed
        mapping(uint256 => DealPointRef) storage points = _dealPoints[dealId];
        for (uint256 i = 0; i < deal.pointsCount; ++i) {
            DealPointRef memory pointRef = points[i];
            require(
                IDealPointsController(payable(pointRef.controller)).isExecuted(
                    pointRef.id
                ),
                'there are not executed deal points'
            );
        }
        // set header as swapped
        deal.state = 3; // deal is now swapped
        // emit event
        emit Swap(dealId);
    }

    function isSwapped(uint256 dealId) external view returns (bool) {
        return _deals[dealId].state == 3;
    }

    function withdraw(uint256 dealId) external payable {
        // take a deal
        Deal storage deal = _deals[dealId];
        require(deal.state > 0, 'deal id is not exists');
        require(deal.pointsCount > 0, 'deal has no points');
        // user restriction
        require(
            msg.sender == deal.owner1 || msg.sender == deal.owner2,
            'only for deal member'
        );
        // withdraw all the details
        uint256 dif = msg.value;
        mapping(uint256 => DealPointRef) storage points = _dealPoints[dealId];
        for (uint256 i = 0; i < deal.pointsCount; ++i) {
            DealPointRef memory pointRef = points[i];
            IDealPointsController controller = IDealPointsController(
                payable(pointRef.controller)
            );
            if (controller.owner(pointRef.id) == msg.sender) {
                if (deal.state == 3 && controller.feeIsEthOnWithdraw()) {
                    uint256 v = controller.fee(pointRef.id);
                    controller.withdraw{ value: v }(pointRef.id);
                    dif -= v;
                } else {
                    controller.withdraw(pointRef.id);
                }
            }
        }

        if (dif > 0) {
            (bool sent, ) = payable(msg.sender).call{ value: dif }('');
            require(sent, 'sent ether error: ether is not sent');
        }

        // emit deal not executed (if not swapped)
        if (deal.state != 3) emit Execute(dealId, msg.sender, false);

        // emit event
        emit OnWithdraw(dealId, msg.sender);
    }

    function feeEthOnWithdraw(uint256 dealId, uint256 ownerNumber)
        external
        view
        returns (uint256)
    {
        uint256 fee;
        Deal storage deal = _deals[dealId];
        mapping(uint256 => DealPointRef) storage points = _dealPoints[dealId];
        for (uint256 i = 0; i < deal.pointsCount; ++i) {
            DealPointRef memory pointRef = points[i];
            IDealPointsController controller = IDealPointsController(
                payable(pointRef.controller)
            );
            if (ownerNumber == 1) {
                if (controller.owner(pointRef.id) == deal.owner1) {
                    if (controller.feeIsEthOnWithdraw())
                        fee += controller.fee(pointRef.id);
                }
            } else if (ownerNumber == 2) {
                if (controller.owner(pointRef.id) == deal.owner2) {
                    if (controller.feeIsEthOnWithdraw())
                        fee += controller.fee(pointRef.id);
                }
            }
        }
        return fee;
    }

    function getDealPoint(uint256 dealId, uint256 pointIndex)
        external
        view
        returns (DealPointData memory)
    {
        DealPointRef storage ref = _dealPoints[dealId][pointIndex];
        IDealPointsController controller = IDealPointsController(
            payable(ref.controller)
        );
        return
            DealPointData(
                ref.controller,
                ref.id,
                controller.dealPointTypeId(),
                dealId,
                controller.from(ref.id),
                controller.to(ref.id),
                controller.owner(ref.id),
                controller.value(ref.id),
                controller.balance(ref.id),
                controller.fee(ref.id),
                controller.tokenAddress(ref.id),
                controller.isSwapped(ref.id),
                controller.isExecuted(ref.id)
            );
    }

    function getDealPointsCount(uint256 dealId)
        external
        view
        returns (uint256)
    {
        return _deals[dealId].pointsCount;
    }

    /// @dev returns all deal points
    /// @param dealId deal id
    function getDealPoints(uint256 dealId)
        external
        view
        returns (DealPointRef[] memory)
    {
        Deal memory deal = _deals[dealId];
        DealPointRef[] memory res = new DealPointRef[](deal.pointsCount);
        for (uint256 i = 0; i < deal.pointsCount; ++i)
            res[i] = _dealPoints[dealId][i];
        return res;
    }

    function stopDealEditing(uint256 dealId)
        external
        onlyFactory
        onlyEditDealState(dealId)
    {
        _deals[dealId].state = 2;
    }

    function execute(uint256 dealId) external payable {
        // if it is openswap - set owner
        Deal storage deal = _deals[dealId];
        require(deal.state == 2, 'only executing state');
        bool isOpenSwapNotOwner;
        if (deal.owner2 == address(0) && msg.sender != deal.owner1) {
            deal.owner2 = msg.sender;
            isOpenSwapNotOwner = true;
        }

        // take the amount of points
        require(deal.pointsCount > 0, 'deal has no points');
        // check all points to be executed
        uint256 dif = msg.value;
        mapping(uint256 => DealPointRef) storage points = _dealPoints[dealId];
        for (uint256 i = 0; i < deal.pointsCount; ++i) {
            DealPointRef memory pointRef = points[i];
            IDealPointsController controller = IDealPointsController(
                payable(pointRef.controller)
            );
            address from = controller.from(pointRef.id);
            if (
                controller.to(pointRef.id) == address(0) && isOpenSwapNotOwner
            ) {
                controller.setTo(pointRef.id, msg.sender);
                continue;
            }
            if (
                from == msg.sender || (from == address(0) && isOpenSwapNotOwner)
            ) {
                uint256 v = controller.executeEtherValue(pointRef.id);
                controller.execute{ value: v }(pointRef.id, msg.sender);
                dif -= v;
            }
        }

        if (dif > 0) {
            (bool sent, ) = payable(msg.sender).call{ value: dif }('');
            require(sent, 'sent ether error: ether is not sent');
        }

        // emit event
        emit Execute(dealId, msg.sender, true);
    }

    function executeEtherValue(uint256 dealId, uint256 ownerNumber)
        external
        view
        returns (uint256)
    {
        uint256 value;
        Deal storage deal = _deals[dealId];
        mapping(uint256 => DealPointRef) storage points = _dealPoints[dealId];
        for (uint256 i = 0; i < deal.pointsCount; ++i) {
            DealPointRef memory pointRef = points[i];
            IDealPointsController controller = IDealPointsController(
                payable(pointRef.controller)
            );
            if (ownerNumber == 1) {
                if (controller.owner(pointRef.id) == deal.owner1) {
                    value += controller.executeEtherValue(pointRef.id);
                }
            } else if (ownerNumber == 2) {
                if (controller.owner(pointRef.id) == deal.owner2) {
                    value += controller.executeEtherValue(pointRef.id);
                }
            }
        }
        return value;
    }
}

File 3 of 13 : FeeSettingsDecorator.sol
// SPDX-License-Identifier: BUSL-1.1
pragma solidity ^0.8.17;

import './IFeeSettings.sol';

contract FeeSettingsDecorator is IFeeSettings {
    IFeeSettings public immutable feeSettings;

    constructor(address feeSettingsAddress) {
        feeSettings = IFeeSettings(feeSettingsAddress);
    }

    function feeAddress() external virtual returns (address) {
        return feeSettings.feeAddress();
    }

    function feePercent() external virtual returns (uint256) {
        return feeSettings.feePercent();
    }

    function feeDecimals() external view returns(uint256){
        return feeSettings.feeDecimals();
    }

    function feeEth() external virtual returns (uint256) {
        return feeSettings.feeEth();
    }
}

File 4 of 13 : HasFactories.sol
// SPDX-License-Identifier: BUSL-1.1
pragma solidity ^0.8.17;

import '../ownable/Ownable.sol';
import './IHasFactories.sol';

contract HasFactories is Ownable, IHasFactories {
    mapping(address => bool) internal _factories; // factories

    modifier onlyFactory() {
        require(_isFactory(msg.sender), 'only for factories');
        _;
    }

    function isFactory(address addr) external view returns (bool) {
        return _isFactory(addr);
    }

    function _isFactory(address addr) internal view returns (bool) {
        if (addr == address(this)) return true;
        return _factories[addr];
    }

    function addFactory(address factory) external onlyOwner {
        _factories[factory] = true;
    }

    function removeFactory(address factory) external onlyOwner {
        _factories[factory] = false;
    }

    function setFactories(address[] calldata addresses, bool isFactory_)
        external
        onlyOwner
    {
        uint256 len = addresses.length;
        for (uint256 i = 0; i < len; ++i) {
            _factories[addresses[i]] = isFactory_;
        }
    }
}

File 5 of 13 : IDealsController.sol
// SPDX-License-Identifier: BUSL-1.1
pragma solidity ^0.8.17;

import '../fee/IFeeSettings.sol';
import '../lib/factories/IHasFactories.sol';
import './Deal.sol';
import './DealPointData.sol';

interface IDealsController is IFeeSettings, IHasFactories {
    /// @dev new deal created
    /// deals are creates by factories by one transaction, therefore another events, such as deal point adding is no need
    event NewDeal(uint256 indexed dealId, address indexed creator);
    /// @dev the deal is swapped
    event Swap(uint256 indexed dealId);
    /// @dev the deal is executed by account
    event Execute(uint256 indexed dealId, address account, bool executed);
    /// @dev the deal withdraw
    event OnWithdraw(uint256 indexed dealId, address indexed account);

    /// @dev swap the deal
    function swap(uint256 dealId) external;

    /// @dev if true, than deal is swapped
    function isSwapped(uint256 dealId) external view returns (bool);

    /// @dev total deal points count
    function getTotalDealPointsCount() external view returns (uint256);

    /// @dev creates the deal.
    /// Only for factories.
    /// @param owner1 - first owner (creator)
    /// @param owner2 - second owner of deal. If zero than deal is open for any account
    /// @return id of new deal
    function createDeal(address owner1, address owner2)
        external
        returns (uint256);

    /// @dev returns all deal information
    function getDeal(uint256 dealId)
        external
        view
        returns (Deal memory, DealPointData[] memory);

    /// @dev returns the deals header information (without points)
    function getDealHeader(uint256 dealId) external view returns (Deal memory);

    /// @dev adds the deal point to deal.
    /// only for factories
    /// @param dealId deal id
    function addDealPoint(
        uint256 dealId,
        address dealPointsController,
        uint256 newPointId
    ) external;

    /// @dev returns deal point by its index in deal
    function getDealPoint(uint256 dealId, uint256 pointIndex)
        external
        view
        returns (DealPointData memory);

    /// @dev returns deal points count for the deal
    function getDealPointsCount(uint256 dealId) external view returns (uint256);

    /// @dev returns true, if all deal points is executed, and can be made swap, if not swapped already
    function isExecuted(uint256 dealId) external view returns (bool);

    /// @dev makes withdraw from all deal points of deal, where caller is owner
    function withdraw(uint256 dealId) external payable;

    /// @dev stops all editing for deal
    /// only for factories
    function stopDealEditing(uint256 dealId) external;

    /// @dev executes all points of the deal
    function execute(uint256 dealId) external payable;

    /// @dev the execute ether value for owner with number
    function executeEtherValue(uint256 dealId, uint256 ownerNumber) external view returns(uint256);

    /// @dev returns fee in ether on withdraw for owner number
    function feeEthOnWithdraw(uint256 dealId, uint256 ownerNumber)
        external
        view
        returns (uint256);
}

File 6 of 13 : IDealPointsController.sol
// SPDX-License-Identifier: BUSL-1.1
pragma solidity ^0.8.17;

interface IDealPointsController {
    receive() external payable;

    /// @dev returns type id of dealpoints
    /// 1 - eth
    /// 2 - erc20
    /// 3 erc721 item
    /// 4 erc721 count
    function dealPointTypeId() external pure returns (uint256);

    /// @dev returns deal id for deal point or 0 if point is not exists in this controller
    function dealId(uint256 pointId) external view returns (uint256);

    /// @dev token contract address, that need to be transferred or zero
    function tokenAddress(uint256 pointId) external view returns (address);

    /// @dev from
    /// zero address - for open swap
    function from(uint256 pointId) external view returns (address);

    /// @dev to
    function to(uint256 pointId) external view returns (address);

    /// @dev sets to account for point
    /// only DealsController and only once
    function setTo(uint256 pointId, address account) external;

    /// @dev asset value (count or nft id), needs to execute deal point
    function value(uint256 pointId) external view returns (uint256);

    /// @dev balance of the deal point
    function balance(uint256 pointId) external view returns (uint256);

    /// @dev deal point fee. In ether or token. Only if withdraw after deal is swapped
    function fee(uint256 pointId) external view returns (uint256);

    /// @dev if true, than fee is ether, that sends on withdraw after swapped
    function feeIsEthOnWithdraw() external pure returns (bool);

    /// @dev current owner of deal point
    /// zero address - for open deals, before execution
    function owner(uint256 pointId) external view returns (address);

    /// @dev deals controller
    function dealsController() external view returns (address);

    /// @dev if true, than deal is swapped
    function isSwapped(uint256 pointId) external view returns (bool);

    /// @dev if true, than point is executed and can be swaped
    function isExecuted(uint256 pointId) external view returns (bool);

    /// @dev executes the point, by using address
    /// if already executed than nothing happens
    function execute(uint256 pointId, address addr) external payable;

    /// @dev the execute ether value for owner with number
    function executeEtherValue(uint256 pointId) external view returns(uint256);

    /// @dev withdraw the asset from deal point
    /// only deals controller
    function withdraw(uint256 pointId) external payable;
}

File 7 of 13 : Deal.sol
// SPDX-License-Identifier: BUSL-1.1
pragma solidity ^0.8.17;

import './DealPointRef.sol';

struct Deal {
    uint256 state; // 0 - not exists, 1-editing 2-execution 3-swaped
    address owner1; // owner 1 - creator
    address owner2; // owner 2 - second part if zero than it is open deal
    uint256 pointsCount;
}

File 8 of 13 : DealPointRef.sol
// SPDX-License-Identifier: BUSL-1.1
pragma solidity ^0.8.17;

struct DealPointRef {
    /// @dev controller of deal point
    address controller;
    /// @dev id of the deal point
    uint256 id;
}

File 9 of 13 : DealPointData.sol
// SPDX-License-Identifier: BUSL-1.1
pragma solidity ^0.8.17;

struct DealPointData {
    address controller;
    uint256 id;
    /// @dev deal point id
    /// 1 - eth
    /// 2 - erc20
    /// 3 erc721 item
    /// 4 erc721 count
    uint256 dealPointTypeId;
    uint256 dealId;
    address from;
    address to;
    address owner;
    uint256 value;
    uint256 balance;
    uint256 fee;
    address tokenAddress;
    bool isSwapped;
    bool isExecuted;
}

File 10 of 13 : Ownable.sol
// SPDX-License-Identifier: BUSL-1.1
pragma solidity ^0.8.17;

import './IOwnable.sol';

contract Ownable is IOwnable {
    address _owner;

    constructor() {
        _owner = msg.sender;
    }

    modifier onlyOwner() {
        require(_owner == msg.sender, 'caller is not the owner');
        _;
    }

    function owner() external virtual view returns (address) {
        return _owner;
    }

    function transferOwnership(address newOwner) external override onlyOwner {
        _owner = newOwner;
    }
}

File 11 of 13 : IHasFactories.sol
// SPDX-License-Identifier: BUSL-1.1
pragma solidity ^0.8.17;

import '../ownable/IOwnable.sol';

interface IHasFactories is IOwnable {
    /// @dev returns true, if addres is factory
    function isFactory(address addr) external view returns (bool);

    /// @dev mark address as factory (only owner)
    function addFactory(address factory) external;

    /// @dev mark address as not factory (only owner)
    function removeFactory(address factory) external;

    /// @dev mark addresses as factory or not (only owner)
    function setFactories(address[] calldata addresses, bool isFactory_)
        external;
}

File 12 of 13 : IOwnable.sol
// SPDX-License-Identifier: BUSL-1.1
pragma solidity ^0.8.17;

interface IOwnable {
    function owner() external view returns (address);

    function transferOwnership(address newOwner) external;
}

File 13 of 13 : IFeeSettings.sol
// SPDX-License-Identifier: BUSL-1.1
pragma solidity ^0.8.17;

interface IFeeSettings {
    function feeAddress() external returns (address); // address to pay fee

    function feePercent() external returns (uint256); // fee in 1/decimals for deviding values

    function feeDecimals() external view returns(uint256); // fee decimals

    function feeEth() external returns (uint256); // fee value for not dividing deal points
}

Settings
{
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "libraries": {}
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"feeSettingsAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"dealId","type":"uint256"},{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"executed","type":"bool"}],"name":"Execute","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"dealId","type":"uint256"},{"indexed":true,"internalType":"address","name":"creator","type":"address"}],"name":"NewDeal","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"dealId","type":"uint256"},{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"OnWithdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"dealId","type":"uint256"}],"name":"Swap","type":"event"},{"inputs":[{"internalType":"uint256","name":"dealId","type":"uint256"},{"internalType":"address","name":"dealPointsController","type":"address"},{"internalType":"uint256","name":"newPointId","type":"uint256"}],"name":"addDealPoint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"factory","type":"address"}],"name":"addFactory","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner1","type":"address"},{"internalType":"address","name":"owner2","type":"address"}],"name":"createDeal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"dealId","type":"uint256"}],"name":"execute","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"dealId","type":"uint256"},{"internalType":"uint256","name":"ownerNumber","type":"uint256"}],"name":"executeEtherValue","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feeDecimals","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeEth","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"dealId","type":"uint256"},{"internalType":"uint256","name":"ownerNumber","type":"uint256"}],"name":"feeEthOnWithdraw","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feePercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feeSettings","outputs":[{"internalType":"contract IFeeSettings","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"dealId","type":"uint256"}],"name":"getDeal","outputs":[{"components":[{"internalType":"uint256","name":"state","type":"uint256"},{"internalType":"address","name":"owner1","type":"address"},{"internalType":"address","name":"owner2","type":"address"},{"internalType":"uint256","name":"pointsCount","type":"uint256"}],"internalType":"struct Deal","name":"","type":"tuple"},{"components":[{"internalType":"address","name":"controller","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"dealPointTypeId","type":"uint256"},{"internalType":"uint256","name":"dealId","type":"uint256"},{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"fee","type":"uint256"},{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"bool","name":"isSwapped","type":"bool"},{"internalType":"bool","name":"isExecuted","type":"bool"}],"internalType":"struct DealPointData[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"dealId","type":"uint256"}],"name":"getDealHeader","outputs":[{"components":[{"internalType":"uint256","name":"state","type":"uint256"},{"internalType":"address","name":"owner1","type":"address"},{"internalType":"address","name":"owner2","type":"address"},{"internalType":"uint256","name":"pointsCount","type":"uint256"}],"internalType":"struct Deal","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"dealId","type":"uint256"},{"internalType":"uint256","name":"pointIndex","type":"uint256"}],"name":"getDealPoint","outputs":[{"components":[{"internalType":"address","name":"controller","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"dealPointTypeId","type":"uint256"},{"internalType":"uint256","name":"dealId","type":"uint256"},{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"fee","type":"uint256"},{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"bool","name":"isSwapped","type":"bool"},{"internalType":"bool","name":"isExecuted","type":"bool"}],"internalType":"struct DealPointData","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"dealId","type":"uint256"}],"name":"getDealPoints","outputs":[{"components":[{"internalType":"address","name":"controller","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"internalType":"struct DealPointRef[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"dealId","type":"uint256"}],"name":"getDealPointsCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalDealPointsCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"dealId","type":"uint256"}],"name":"isExecuted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"isFactory","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"dealId","type":"uint256"}],"name":"isSwapped","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"factory","type":"address"}],"name":"removeFactory","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"bool","name":"isFactory_","type":"bool"}],"name":"setFactories","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"dealId","type":"uint256"}],"name":"stopDealEditing","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"dealId","type":"uint256"}],"name":"swap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"dealId","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]

60a06040523480156200001157600080fd5b5060405162002e1438038062002e14833981016040819052620000349162000058565b600080546001600160a01b031916331790556001600160a01b03166080526200008a565b6000602082840312156200006b57600080fd5b81516001600160a01b03811681146200008357600080fd5b9392505050565b608051612d52620000c26000396000818161020a01528181610ac701528181610b9d01528181610e7f01526117ae0152612d526000f3fe60806040526004361061019c5760003560e01c80638fd32a29116100ec578063cc0f17861161008a578063d85df95011610064578063d85df950146104e1578063f2fde38b14610501578063fbac196714610521578063fe0d94c11461054157600080fd5b8063cc0f17861461046f578063d55290d214610484578063d6f05b54146104b157600080fd5b8063b91d9e23116100c6578063b91d9e23146103ea578063c0bffb621461040a578063c755998d1461043a578063c7b0f9541461045a57600080fd5b80638fd32a291461037d57806394b918de146103aa57806396685699146103ca57600080fd5b80634b37c73f1161015957806376a6bf521161013357806376a6bf52146102fc5780637fd6f15c1461031c57806382fd5bac146103315780638da5cb5b1461035f57600080fd5b80634b37c73f1461028c5780635e9dc44c146102ac5780636642c0c7146102cf57600080fd5b806308a8ce1f146101a15780630f04ba67146101c35780631c6603ba146101f857806329ce1ec5146102445780632e1a7d4d146102645780634127535814610277575b600080fd5b3480156101ad57600080fd5b506101c16101bc366004612700565b610554565b005b3480156101cf57600080fd5b506101e36101de36600461279b565b6105fe565b60405190151581526020015b60405180910390f35b34801561020457600080fd5b5061022c7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016101ef565b34801561025057600080fd5b506101c161025f36600461279b565b61060f565b6101c16102723660046127bf565b610660565b34801561028357600080fd5b5061022c610ac3565b34801561029857600080fd5b506101c16102a736600461279b565b610b4e565b3480156102b857600080fd5b506102c1610b99565b6040519081526020016101ef565b3480156102db57600080fd5b506102ef6102ea3660046127bf565b610c1f565b6040516101ef91906127d8565b34801561030857600080fd5b506101e36103173660046127bf565b610d4a565b34801561032857600080fd5b506102c1610e7b565b34801561033d57600080fd5b5061035161034c3660046127bf565b610edd565b6040516101ef9291906128fb565b34801561036b57600080fd5b506000546001600160a01b031661022c565b34801561038957600080fd5b5061039d6103983660046127bf565b611036565b6040516101ef9190612971565b3480156103b657600080fd5b506101c16103c53660046127bf565b6110ce565b3480156103d657600080fd5b506101c16103e53660046127bf565b6112a8565b3480156103f657600080fd5b506102c16104053660046129ad565b61133e565b34801561041657600080fd5b506101e36104253660046127bf565b60009081526002602052604090205460031490565b34801561044657600080fd5b506102c16104553660046129e6565b61144a565b34801561046657600080fd5b506005546102c1565b34801561047b57600080fd5b506102c16117aa565b34801561049057600080fd5b506104a461049f3660046129e6565b61180a565b6040516101ef9190612a08565b3480156104bd57600080fd5b506102c16104cc3660046127bf565b60009081526002602052604090206003015490565b3480156104ed57600080fd5b506101c16104fc366004612a17565b611d24565b34801561050d57600080fd5b506101c161051c36600461279b565b611ee8565b34801561052d57600080fd5b506102c161053c3660046129e6565b611f34565b6101c161054f3660046127bf565b6121bb565b6000546001600160a01b031633146105875760405162461bcd60e51b815260040161057e90612a4f565b60405180910390fd5b8160005b818110156105f75782600160008787858181106105aa576105aa612a86565b90506020020160208101906105bf919061279b565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790556105f081612ab2565b905061058b565b5050505050565b600061060982612610565b92915050565b6000546001600160a01b031633146106395760405162461bcd60e51b815260040161057e90612a4f565b6001600160a01b03166000908152600160208190526040909120805460ff19169091179055565b600081815260026020526040902080546106b45760405162461bcd60e51b81526020600482015260156024820152746465616c206964206973206e6f742065786973747360581b604482015260640161057e565b60008160030154116106d85760405162461bcd60e51b815260040161057e90612acb565b60018101546001600160a01b03163314806106ff575060028101546001600160a01b031633145b6107425760405162461bcd60e51b815260206004820152601460248201527337b7363c903337b9103232b0b61036b2b6b132b960611b604482015260640161057e565b600082815260036020526040812034915b83600301548110156109da57600081815260208381526040918290208251808401845281546001600160a01b03168082526001909201549281018390529251635091e19f60e11b81526004810192909252903390829063a123c33e90602401602060405180830381865afa1580156107cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107f39190612b07565b6001600160a01b0316036109c7578554600314801561086f5750806001600160a01b0316630f10dd696040518163ffffffff1660e01b8152600401602060405180830381865afa15801561084b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061086f9190612b2f565b1561096657602082015160405163039b37ab60e41b81526000916001600160a01b038416916339b37ab0916108aa9160040190815260200190565b602060405180830381865afa1580156108c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108eb9190612b4c565b9050816001600160a01b0316632e1a7d4d8285602001516040518363ffffffff1660e01b815260040161092091815260200190565b6000604051808303818588803b15801561093957600080fd5b505af115801561094d573d6000803e3d6000fd5b5050505050808661095e9190612b65565b9550506109c7565b6020820151604051632e1a7d4d60e01b815260048101919091526001600160a01b03821690632e1a7d4d90602401600060405180830381600087803b1580156109ae57600080fd5b505af11580156109c2573d6000803e3d6000fd5b505050505b5050806109d390612ab2565b9050610753565b508115610a4b57604051600090339084908381818185875af1925050503d8060008114610a23576040519150601f19603f3d011682016040523d82523d6000602084013e610a28565b606091505b5050905080610a495760405162461bcd60e51b815260040161057e90612b78565b505b8254600314610a9057604080513381526000602082015285917fe1bebd63dac2b6a13df786d357c7ea99338d29e95b8103e4313ec33430f199ee910160405180910390a25b604051339085907f3427e9fc4a0bff3bb4138bd96dc004b9aa0abb6f87ca8f93363c510da6c7392390600090a350505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663412753586040518163ffffffff1660e01b81526004016020604051808303816000875af1158015610b25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b499190612b07565b905090565b6000546001600160a01b03163314610b785760405162461bcd60e51b815260040161057e90612a4f565b6001600160a01b03166000908152600160205260409020805460ff19169055565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635e9dc44c6040518163ffffffff1660e01b81526004016020604051808303816000875af1158015610bfb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b499190612b4c565b600081815260026020818152604080842081516080810183528154815260018201546001600160a01b03908116948201949094529381015490921690830152600301546060828101829052929067ffffffffffffffff811115610c8457610c84612bbb565b604051908082528060200260200182016040528015610cc957816020015b6040805180820190915260008082526020820152815260200190600190039081610ca25790505b50905060005b8260600151811015610d42576000858152600360209081526040808320848452825291829020825180840190935280546001600160a01b0316835260010154908201528251839083908110610d2657610d26612a86565b602002602001018190525080610d3b90612ab2565b9050610ccf565b509392505050565b600081815260026020818152604080842081516080810183528154815260018201546001600160a01b0390811694820194909452938101549092169083015260030154606082018190528203610da35750600092915050565b6000838152600360205260408120905b8260600151811015610e7057600081815260208381526040918290208251808401845281546001600160a01b03168082526001909201549281018390529251633b535fa960e11b81526004810192909252906376a6bf5290602401602060405180830381865afa158015610e2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e4f9190612b2f565b610e5f5750600095945050505050565b50610e6981612ab2565b9050610db3565b506001949350505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316637fd6f15c6040518163ffffffff1660e01b81526004016020604051808303816000875af1158015610bfb573d6000803e3d6000fd5b610ee5612649565b600082815260026020818152604080842081516080810183528154815260018201546001600160a01b03908116948201949094529381015490921690830152600301546060828101829052929067ffffffffffffffff811115610f4a57610f4a612bbb565b604051908082528060200260200182016040528015610f8357816020015b610f70612683565b815260200190600190039081610f685790505b50905060005b826060015181101561102b57604051636aa9486960e11b81526004810187905260248101829052309063d55290d2906044016101a060405180830381865afa158015610fd9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ffd9190612c09565b82828151811061100f5761100f612a86565b60200260200101819052508061102490612ab2565b9050610f89565b509094909350915050565b61103e612649565b6000828152600260208181526040928390208351608081018552815480825260018301546001600160a01b0390811694830194909452938201549092169382019390935260039092015460608301526106095760405162461bcd60e51b81526020600482015260126024820152716465616c206973206e6f742065786973747360701b604482015260640161057e565b60008181526002602081905260409091205482911461112f5760405162461bcd60e51b815260206004820152601e60248201527f6465616c206973206e6f7420696e20657865637574696f6e2073746174650000604482015260640161057e565b6000828152600260205260409020600381015461115e5760405162461bcd60e51b815260040161057e90612acb565b6000838152600360205260408120905b826003015481101561127257600081815260208381526040918290208251808401845281546001600160a01b03168082526001909201549281018390529251633b535fa960e11b81526004810192909252906376a6bf5290602401602060405180830381865afa1580156111e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061120a9190612b2f565b6112615760405162461bcd60e51b815260206004820152602260248201527f746865726520617265206e6f74206578656375746564206465616c20706f696e604482015261747360f01b606482015260840161057e565b5061126b81612ab2565b905061116e565b506003825560405184907f89f1d38d98c13362767fbcc2b0e375c1c3c4429b4648ea2a99839d962779b5d190600090a250505050565b6112b133612610565b6112cd5760405162461bcd60e51b815260040161057e90612cdd565b60008181526002602052604090205481906001146113295760405162461bcd60e51b81526020600482015260196024820152786465616c206973206e6f7420696e206564697420737461746560381b604482015260640161057e565b50600090815260026020819052604090912055565b600061134933612610565b6113655760405162461bcd60e51b815260040161057e90612cdd565b6000604051806080016040528060018152602001856001600160a01b03168152602001846001600160a01b03168152602001600081525090506004600081546113ad90612ab2565b9091555060048054600090815260026020818152604080842086518155918601516001830180546001600160a01b03199081166001600160a01b03938416179091558783015194840180549091169482169490941790935560608601516003909201919091559254925190871692917f4d4e9c36309efab2af26919cf8142564da8c0478e860e295568d100d8c301ce091a3505060045492915050565b600082815260026020908152604080832060039092528220829190825b826003015481101561179f5760008181526020838152604091829020825180840190935280546001600160a01b03168084526001918201549284019290925288900361161b5760018501546020830151604051635091e19f60e11b815260048101919091526001600160a01b039182169183169063a123c33e90602401602060405180830381865afa158015611501573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115259190612b07565b6001600160a01b03160361161657806001600160a01b0316630f10dd696040518163ffffffff1660e01b8152600401602060405180830381865afa158015611571573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115959190612b2f565b1561161657602082015160405163039b37ab60e41b815260048101919091526001600160a01b038216906339b37ab090602401602060405180830381865afa1580156115e5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116099190612b4c565b6116139087612d09565b95505b61178c565b8760020361178c5760028501546020830151604051635091e19f60e11b815260048101919091526001600160a01b039182169183169063a123c33e90602401602060405180830381865afa158015611677573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061169b9190612b07565b6001600160a01b03160361178c57806001600160a01b0316630f10dd696040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061170b9190612b2f565b1561178c57602082015160405163039b37ab60e41b815260048101919091526001600160a01b038216906339b37ab090602401602060405180830381865afa15801561175b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061177f9190612b4c565b6117899087612d09565b95505b50508061179890612ab2565b9050611467565b509195945050505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663cc0f17866040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bfb573d6000803e3d6000fd5b611812612683565b6000838152600360209081526040808320858452825291829020805483516101a0810185526001600160a01b039091168082526001830154828501528451632e71b65360e21b8152855193959194929391840192859263b9c6d94c9260048082019392918290030181865afa15801561188f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118b39190612b4c565b8152602001868152602001826001600160a01b0316631335791485600101546040518263ffffffff1660e01b81526004016118f091815260200190565b602060405180830381865afa15801561190d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119319190612b07565b6001600160a01b03168152602001826001600160a01b031663e887841e85600101546040518263ffffffff1660e01b815260040161197191815260200190565b602060405180830381865afa15801561198e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119b29190612b07565b6001600160a01b03168152602001826001600160a01b031663a123c33e85600101546040518263ffffffff1660e01b81526004016119f291815260200190565b602060405180830381865afa158015611a0f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a339190612b07565b6001600160a01b03168152602001826001600160a01b031663c5a46ee685600101546040518263ffffffff1660e01b8152600401611a7391815260200190565b602060405180830381865afa158015611a90573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ab49190612b4c565b8152602001826001600160a01b03166347bb89f085600101546040518263ffffffff1660e01b8152600401611aeb91815260200190565b602060405180830381865afa158015611b08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b2c9190612b4c565b8152602001826001600160a01b03166339b37ab085600101546040518263ffffffff1660e01b8152600401611b6391815260200190565b602060405180830381865afa158015611b80573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ba49190612b4c565b8152602001826001600160a01b0316639e6b26ba85600101546040518263ffffffff1660e01b8152600401611bdb91815260200190565b602060405180830381865afa158015611bf8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c1c9190612b07565b6001600160a01b03168152602001826001600160a01b031663c0bffb6285600101546040518263ffffffff1660e01b8152600401611c5c91815260200190565b602060405180830381865afa158015611c79573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c9d9190612b2f565b15158152602001826001600160a01b03166376a6bf5285600101546040518263ffffffff1660e01b8152600401611cd691815260200190565b602060405180830381865afa158015611cf3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d179190612b2f565b1515905295945050505050565b611d2d33612610565b611d495760405162461bcd60e51b815260040161057e90612cdd565b6000838152600260205260409020548390600114611da55760405162461bcd60e51b81526020600482015260196024820152786465616c206973206e6f7420696e206564697420737461746560381b604482015260640161057e565b60008481526002602052604090208054600114611e045760405162461bcd60e51b815260206004820152601b60248201527f6f6e6c7920666f722065646974696e67206465616c2073746174650000000000604482015260640161057e565b6040805180820182526001600160a01b038681168252602080830187815260008a81526003808452868220908801805483529352948520935184546001600160a01b031916931692909217835590516001909201919091558054909190611e6a90612ab2565b90915550600381015460141015611ece5760405162461bcd60e51b815260206004820152602260248201527f6465616c20706f696e747320636f756e742065786365656473206f66206c696d6044820152611a5d60f21b606482015260840161057e565b600560008154611edd90612ab2565b909155505050505050565b6000546001600160a01b03163314611f125760405162461bcd60e51b815260040161057e90612a4f565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b600082815260026020908152604080832060039092528220829190825b826003015481101561179f5760008181526020838152604091829020825180840190935280546001600160a01b03168084526001918201549284019290925288900361209e5760018501546020830151604051635091e19f60e11b815260048101919091526001600160a01b039182169183169063a123c33e90602401602060405180830381865afa158015611feb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061200f9190612b07565b6001600160a01b0316036120995760208201516040516338329a4160e01b815260048101919091526001600160a01b038216906338329a4190602401602060405180830381865afa158015612068573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061208c9190612b4c565b6120969087612d09565b95505b6121a8565b876002036121a85760028501546020830151604051635091e19f60e11b815260048101919091526001600160a01b039182169183169063a123c33e90602401602060405180830381865afa1580156120fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061211e9190612b07565b6001600160a01b0316036121a85760208201516040516338329a4160e01b815260048101919091526001600160a01b038216906338329a4190602401602060405180830381865afa158015612177573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061219b9190612b4c565b6121a59087612d09565b95505b5050806121b490612ab2565b9050611f51565b600081815260026020819052604090912080549091146122145760405162461bcd60e51b81526020600482015260146024820152736f6e6c7920657865637574696e6720737461746560601b604482015260640161057e565b60028101546000906001600160a01b031615801561223f575060018201546001600160a01b03163314155b1561225c57506002810180546001600160a01b0319163317905560015b60008260030154116122805760405162461bcd60e51b815260040161057e90612acb565b600083815260036020526040812034915b846003015481101561255d576000818152602083815260408083208151808301835281546001600160a01b031680825260019092015493810184905291516304cd5e4560e21b81526004810193909352909290918290631335791490602401602060405180830381865afa15801561230d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123319190612b07565b6020840151604051637443c20f60e11b815260048101919091529091506000906001600160a01b0384169063e887841e90602401602060405180830381865afa158015612382573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123a69190612b07565b6001600160a01b03161480156123b95750865b1561242c57602083015160405163e3ab470d60e01b815260048101919091523360248201526001600160a01b0383169063e3ab470d90604401600060405180830381600087803b15801561240c57600080fd5b505af1158015612420573d6000803e3d6000fd5b5050505050505061254d565b6001600160a01b03811633148061245257506001600160a01b0381161580156124525750865b156125495760208301516040516338329a4160e01b81526000916001600160a01b038516916338329a419161248d9160040190815260200190565b602060405180830381865afa1580156124aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124ce9190612b4c565b6020850151604051630c032dc360e41b815260048101919091523360248201529091506001600160a01b0384169063c032dc309083906044016000604051808303818588803b15801561252057600080fd5b505af1158015612534573d6000803e3d6000fd5b505050505080876125459190612b65565b9650505b5050505b61255681612ab2565b9050612291565b5081156125ce57604051600090339084908381818185875af1925050503d80600081146125a6576040519150601f19603f3d011682016040523d82523d6000602084013e6125ab565b606091505b50509050806125cc5760405162461bcd60e51b815260040161057e90612b78565b505b604080513381526001602082015286917fe1bebd63dac2b6a13df786d357c7ea99338d29e95b8103e4313ec33430f199ee910160405180910390a25050505050565b6000306001600160a01b0383160361262a57506001919050565b506001600160a01b031660009081526001602052604090205460ff1690565b60405180608001604052806000815260200160006001600160a01b0316815260200160006001600160a01b03168152602001600081525090565b604080516101a081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101829052610160810182905261018081019190915290565b80151581146126fd57600080fd5b50565b60008060006040848603121561271557600080fd5b833567ffffffffffffffff8082111561272d57600080fd5b818601915086601f83011261274157600080fd5b81358181111561275057600080fd5b8760208260051b850101111561276557600080fd5b6020928301955093505084013561277b816126ef565b809150509250925092565b6001600160a01b03811681146126fd57600080fd5b6000602082840312156127ad57600080fd5b81356127b881612786565b9392505050565b6000602082840312156127d157600080fd5b5035919050565b602080825282518282018190526000919060409081850190868401855b8281101561282357815180516001600160a01b031685528601518685015292840192908501906001016127f5565b5091979650505050505050565b80516001600160a01b03168252602081015160208301526040810151604083015260608101516060830152608081015161287560808401826001600160a01b03169052565b5060a081015161289060a08401826001600160a01b03169052565b5060c08101516128ab60c08401826001600160a01b03169052565b5060e0818101519083015261010080820151908301526101208082015190830152610140808201516001600160a01b03169083015261016080820151151590830152610180908101511515910152565b825181526020808401516001600160a01b0390811682840152604080860151909116908301526060808501519083015260a06080830181905283519083018190526000919060c0840190858301845b828110156128235761295d848351612830565b6101a093909301929084019060010161294a565b815181526020808301516001600160a01b0390811691830191909152604080840151909116908201526060808301519082015260808101610609565b600080604083850312156129c057600080fd5b82356129cb81612786565b915060208301356129db81612786565b809150509250929050565b600080604083850312156129f957600080fd5b50508035926020909101359150565b6101a081016106098284612830565b600080600060608486031215612a2c57600080fd5b833592506020840135612a3e81612786565b929592945050506040919091013590565b60208082526017908201527f63616c6c6572206973206e6f7420746865206f776e6572000000000000000000604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201612ac457612ac4612a9c565b5060010190565b6020808252601290820152716465616c20686173206e6f20706f696e747360701b604082015260600190565b8051612b0281612786565b919050565b600060208284031215612b1957600080fd5b81516127b881612786565b8051612b02816126ef565b600060208284031215612b4157600080fd5b81516127b8816126ef565b600060208284031215612b5e57600080fd5b5051919050565b8181038181111561060957610609612a9c565b60208082526023908201527f73656e74206574686572206572726f723a206574686572206973206e6f742073604082015262195b9d60ea1b606082015260800190565b634e487b7160e01b600052604160045260246000fd5b6040516101a0810167ffffffffffffffff81118282101715612c0357634e487b7160e01b600052604160045260246000fd5b60405290565b60006101a08284031215612c1c57600080fd5b612c24612bd1565b612c2d83612af7565b8152602083015160208201526040830151604082015260608301516060820152612c5960808401612af7565b6080820152612c6a60a08401612af7565b60a0820152612c7b60c08401612af7565b60c082015260e0838101519082015261010080840151908201526101208084015190820152610140612cae818501612af7565b90820152610160612cc0848201612b24565b90820152610180612cd2848201612b24565b908201529392505050565b6020808252601290820152716f6e6c7920666f7220666163746f7269657360701b604082015260600190565b8082018082111561060957610609612a9c56fea26469706673582212200cf7a0df330382332bc8f596c6e4fdeedb4a40d0f62df5eff4e4983148852b4a64736f6c6343000811003300000000000000000000000037510211032c82e6ffe134768aaad360e8b9c71d

Deployed Bytecode

0x60806040526004361061019c5760003560e01c80638fd32a29116100ec578063cc0f17861161008a578063d85df95011610064578063d85df950146104e1578063f2fde38b14610501578063fbac196714610521578063fe0d94c11461054157600080fd5b8063cc0f17861461046f578063d55290d214610484578063d6f05b54146104b157600080fd5b8063b91d9e23116100c6578063b91d9e23146103ea578063c0bffb621461040a578063c755998d1461043a578063c7b0f9541461045a57600080fd5b80638fd32a291461037d57806394b918de146103aa57806396685699146103ca57600080fd5b80634b37c73f1161015957806376a6bf521161013357806376a6bf52146102fc5780637fd6f15c1461031c57806382fd5bac146103315780638da5cb5b1461035f57600080fd5b80634b37c73f1461028c5780635e9dc44c146102ac5780636642c0c7146102cf57600080fd5b806308a8ce1f146101a15780630f04ba67146101c35780631c6603ba146101f857806329ce1ec5146102445780632e1a7d4d146102645780634127535814610277575b600080fd5b3480156101ad57600080fd5b506101c16101bc366004612700565b610554565b005b3480156101cf57600080fd5b506101e36101de36600461279b565b6105fe565b60405190151581526020015b60405180910390f35b34801561020457600080fd5b5061022c7f00000000000000000000000037510211032c82e6ffe134768aaad360e8b9c71d81565b6040516001600160a01b0390911681526020016101ef565b34801561025057600080fd5b506101c161025f36600461279b565b61060f565b6101c16102723660046127bf565b610660565b34801561028357600080fd5b5061022c610ac3565b34801561029857600080fd5b506101c16102a736600461279b565b610b4e565b3480156102b857600080fd5b506102c1610b99565b6040519081526020016101ef565b3480156102db57600080fd5b506102ef6102ea3660046127bf565b610c1f565b6040516101ef91906127d8565b34801561030857600080fd5b506101e36103173660046127bf565b610d4a565b34801561032857600080fd5b506102c1610e7b565b34801561033d57600080fd5b5061035161034c3660046127bf565b610edd565b6040516101ef9291906128fb565b34801561036b57600080fd5b506000546001600160a01b031661022c565b34801561038957600080fd5b5061039d6103983660046127bf565b611036565b6040516101ef9190612971565b3480156103b657600080fd5b506101c16103c53660046127bf565b6110ce565b3480156103d657600080fd5b506101c16103e53660046127bf565b6112a8565b3480156103f657600080fd5b506102c16104053660046129ad565b61133e565b34801561041657600080fd5b506101e36104253660046127bf565b60009081526002602052604090205460031490565b34801561044657600080fd5b506102c16104553660046129e6565b61144a565b34801561046657600080fd5b506005546102c1565b34801561047b57600080fd5b506102c16117aa565b34801561049057600080fd5b506104a461049f3660046129e6565b61180a565b6040516101ef9190612a08565b3480156104bd57600080fd5b506102c16104cc3660046127bf565b60009081526002602052604090206003015490565b3480156104ed57600080fd5b506101c16104fc366004612a17565b611d24565b34801561050d57600080fd5b506101c161051c36600461279b565b611ee8565b34801561052d57600080fd5b506102c161053c3660046129e6565b611f34565b6101c161054f3660046127bf565b6121bb565b6000546001600160a01b031633146105875760405162461bcd60e51b815260040161057e90612a4f565b60405180910390fd5b8160005b818110156105f75782600160008787858181106105aa576105aa612a86565b90506020020160208101906105bf919061279b565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790556105f081612ab2565b905061058b565b5050505050565b600061060982612610565b92915050565b6000546001600160a01b031633146106395760405162461bcd60e51b815260040161057e90612a4f565b6001600160a01b03166000908152600160208190526040909120805460ff19169091179055565b600081815260026020526040902080546106b45760405162461bcd60e51b81526020600482015260156024820152746465616c206964206973206e6f742065786973747360581b604482015260640161057e565b60008160030154116106d85760405162461bcd60e51b815260040161057e90612acb565b60018101546001600160a01b03163314806106ff575060028101546001600160a01b031633145b6107425760405162461bcd60e51b815260206004820152601460248201527337b7363c903337b9103232b0b61036b2b6b132b960611b604482015260640161057e565b600082815260036020526040812034915b83600301548110156109da57600081815260208381526040918290208251808401845281546001600160a01b03168082526001909201549281018390529251635091e19f60e11b81526004810192909252903390829063a123c33e90602401602060405180830381865afa1580156107cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107f39190612b07565b6001600160a01b0316036109c7578554600314801561086f5750806001600160a01b0316630f10dd696040518163ffffffff1660e01b8152600401602060405180830381865afa15801561084b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061086f9190612b2f565b1561096657602082015160405163039b37ab60e41b81526000916001600160a01b038416916339b37ab0916108aa9160040190815260200190565b602060405180830381865afa1580156108c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108eb9190612b4c565b9050816001600160a01b0316632e1a7d4d8285602001516040518363ffffffff1660e01b815260040161092091815260200190565b6000604051808303818588803b15801561093957600080fd5b505af115801561094d573d6000803e3d6000fd5b5050505050808661095e9190612b65565b9550506109c7565b6020820151604051632e1a7d4d60e01b815260048101919091526001600160a01b03821690632e1a7d4d90602401600060405180830381600087803b1580156109ae57600080fd5b505af11580156109c2573d6000803e3d6000fd5b505050505b5050806109d390612ab2565b9050610753565b508115610a4b57604051600090339084908381818185875af1925050503d8060008114610a23576040519150601f19603f3d011682016040523d82523d6000602084013e610a28565b606091505b5050905080610a495760405162461bcd60e51b815260040161057e90612b78565b505b8254600314610a9057604080513381526000602082015285917fe1bebd63dac2b6a13df786d357c7ea99338d29e95b8103e4313ec33430f199ee910160405180910390a25b604051339085907f3427e9fc4a0bff3bb4138bd96dc004b9aa0abb6f87ca8f93363c510da6c7392390600090a350505050565b60007f00000000000000000000000037510211032c82e6ffe134768aaad360e8b9c71d6001600160a01b031663412753586040518163ffffffff1660e01b81526004016020604051808303816000875af1158015610b25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b499190612b07565b905090565b6000546001600160a01b03163314610b785760405162461bcd60e51b815260040161057e90612a4f565b6001600160a01b03166000908152600160205260409020805460ff19169055565b60007f00000000000000000000000037510211032c82e6ffe134768aaad360e8b9c71d6001600160a01b0316635e9dc44c6040518163ffffffff1660e01b81526004016020604051808303816000875af1158015610bfb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b499190612b4c565b600081815260026020818152604080842081516080810183528154815260018201546001600160a01b03908116948201949094529381015490921690830152600301546060828101829052929067ffffffffffffffff811115610c8457610c84612bbb565b604051908082528060200260200182016040528015610cc957816020015b6040805180820190915260008082526020820152815260200190600190039081610ca25790505b50905060005b8260600151811015610d42576000858152600360209081526040808320848452825291829020825180840190935280546001600160a01b0316835260010154908201528251839083908110610d2657610d26612a86565b602002602001018190525080610d3b90612ab2565b9050610ccf565b509392505050565b600081815260026020818152604080842081516080810183528154815260018201546001600160a01b0390811694820194909452938101549092169083015260030154606082018190528203610da35750600092915050565b6000838152600360205260408120905b8260600151811015610e7057600081815260208381526040918290208251808401845281546001600160a01b03168082526001909201549281018390529251633b535fa960e11b81526004810192909252906376a6bf5290602401602060405180830381865afa158015610e2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e4f9190612b2f565b610e5f5750600095945050505050565b50610e6981612ab2565b9050610db3565b506001949350505050565b60007f00000000000000000000000037510211032c82e6ffe134768aaad360e8b9c71d6001600160a01b0316637fd6f15c6040518163ffffffff1660e01b81526004016020604051808303816000875af1158015610bfb573d6000803e3d6000fd5b610ee5612649565b600082815260026020818152604080842081516080810183528154815260018201546001600160a01b03908116948201949094529381015490921690830152600301546060828101829052929067ffffffffffffffff811115610f4a57610f4a612bbb565b604051908082528060200260200182016040528015610f8357816020015b610f70612683565b815260200190600190039081610f685790505b50905060005b826060015181101561102b57604051636aa9486960e11b81526004810187905260248101829052309063d55290d2906044016101a060405180830381865afa158015610fd9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ffd9190612c09565b82828151811061100f5761100f612a86565b60200260200101819052508061102490612ab2565b9050610f89565b509094909350915050565b61103e612649565b6000828152600260208181526040928390208351608081018552815480825260018301546001600160a01b0390811694830194909452938201549092169382019390935260039092015460608301526106095760405162461bcd60e51b81526020600482015260126024820152716465616c206973206e6f742065786973747360701b604482015260640161057e565b60008181526002602081905260409091205482911461112f5760405162461bcd60e51b815260206004820152601e60248201527f6465616c206973206e6f7420696e20657865637574696f6e2073746174650000604482015260640161057e565b6000828152600260205260409020600381015461115e5760405162461bcd60e51b815260040161057e90612acb565b6000838152600360205260408120905b826003015481101561127257600081815260208381526040918290208251808401845281546001600160a01b03168082526001909201549281018390529251633b535fa960e11b81526004810192909252906376a6bf5290602401602060405180830381865afa1580156111e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061120a9190612b2f565b6112615760405162461bcd60e51b815260206004820152602260248201527f746865726520617265206e6f74206578656375746564206465616c20706f696e604482015261747360f01b606482015260840161057e565b5061126b81612ab2565b905061116e565b506003825560405184907f89f1d38d98c13362767fbcc2b0e375c1c3c4429b4648ea2a99839d962779b5d190600090a250505050565b6112b133612610565b6112cd5760405162461bcd60e51b815260040161057e90612cdd565b60008181526002602052604090205481906001146113295760405162461bcd60e51b81526020600482015260196024820152786465616c206973206e6f7420696e206564697420737461746560381b604482015260640161057e565b50600090815260026020819052604090912055565b600061134933612610565b6113655760405162461bcd60e51b815260040161057e90612cdd565b6000604051806080016040528060018152602001856001600160a01b03168152602001846001600160a01b03168152602001600081525090506004600081546113ad90612ab2565b9091555060048054600090815260026020818152604080842086518155918601516001830180546001600160a01b03199081166001600160a01b03938416179091558783015194840180549091169482169490941790935560608601516003909201919091559254925190871692917f4d4e9c36309efab2af26919cf8142564da8c0478e860e295568d100d8c301ce091a3505060045492915050565b600082815260026020908152604080832060039092528220829190825b826003015481101561179f5760008181526020838152604091829020825180840190935280546001600160a01b03168084526001918201549284019290925288900361161b5760018501546020830151604051635091e19f60e11b815260048101919091526001600160a01b039182169183169063a123c33e90602401602060405180830381865afa158015611501573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115259190612b07565b6001600160a01b03160361161657806001600160a01b0316630f10dd696040518163ffffffff1660e01b8152600401602060405180830381865afa158015611571573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115959190612b2f565b1561161657602082015160405163039b37ab60e41b815260048101919091526001600160a01b038216906339b37ab090602401602060405180830381865afa1580156115e5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116099190612b4c565b6116139087612d09565b95505b61178c565b8760020361178c5760028501546020830151604051635091e19f60e11b815260048101919091526001600160a01b039182169183169063a123c33e90602401602060405180830381865afa158015611677573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061169b9190612b07565b6001600160a01b03160361178c57806001600160a01b0316630f10dd696040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061170b9190612b2f565b1561178c57602082015160405163039b37ab60e41b815260048101919091526001600160a01b038216906339b37ab090602401602060405180830381865afa15801561175b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061177f9190612b4c565b6117899087612d09565b95505b50508061179890612ab2565b9050611467565b509195945050505050565b60007f00000000000000000000000037510211032c82e6ffe134768aaad360e8b9c71d6001600160a01b031663cc0f17866040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bfb573d6000803e3d6000fd5b611812612683565b6000838152600360209081526040808320858452825291829020805483516101a0810185526001600160a01b039091168082526001830154828501528451632e71b65360e21b8152855193959194929391840192859263b9c6d94c9260048082019392918290030181865afa15801561188f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118b39190612b4c565b8152602001868152602001826001600160a01b0316631335791485600101546040518263ffffffff1660e01b81526004016118f091815260200190565b602060405180830381865afa15801561190d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119319190612b07565b6001600160a01b03168152602001826001600160a01b031663e887841e85600101546040518263ffffffff1660e01b815260040161197191815260200190565b602060405180830381865afa15801561198e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119b29190612b07565b6001600160a01b03168152602001826001600160a01b031663a123c33e85600101546040518263ffffffff1660e01b81526004016119f291815260200190565b602060405180830381865afa158015611a0f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a339190612b07565b6001600160a01b03168152602001826001600160a01b031663c5a46ee685600101546040518263ffffffff1660e01b8152600401611a7391815260200190565b602060405180830381865afa158015611a90573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ab49190612b4c565b8152602001826001600160a01b03166347bb89f085600101546040518263ffffffff1660e01b8152600401611aeb91815260200190565b602060405180830381865afa158015611b08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b2c9190612b4c565b8152602001826001600160a01b03166339b37ab085600101546040518263ffffffff1660e01b8152600401611b6391815260200190565b602060405180830381865afa158015611b80573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ba49190612b4c565b8152602001826001600160a01b0316639e6b26ba85600101546040518263ffffffff1660e01b8152600401611bdb91815260200190565b602060405180830381865afa158015611bf8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c1c9190612b07565b6001600160a01b03168152602001826001600160a01b031663c0bffb6285600101546040518263ffffffff1660e01b8152600401611c5c91815260200190565b602060405180830381865afa158015611c79573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c9d9190612b2f565b15158152602001826001600160a01b03166376a6bf5285600101546040518263ffffffff1660e01b8152600401611cd691815260200190565b602060405180830381865afa158015611cf3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d179190612b2f565b1515905295945050505050565b611d2d33612610565b611d495760405162461bcd60e51b815260040161057e90612cdd565b6000838152600260205260409020548390600114611da55760405162461bcd60e51b81526020600482015260196024820152786465616c206973206e6f7420696e206564697420737461746560381b604482015260640161057e565b60008481526002602052604090208054600114611e045760405162461bcd60e51b815260206004820152601b60248201527f6f6e6c7920666f722065646974696e67206465616c2073746174650000000000604482015260640161057e565b6040805180820182526001600160a01b038681168252602080830187815260008a81526003808452868220908801805483529352948520935184546001600160a01b031916931692909217835590516001909201919091558054909190611e6a90612ab2565b90915550600381015460141015611ece5760405162461bcd60e51b815260206004820152602260248201527f6465616c20706f696e747320636f756e742065786365656473206f66206c696d6044820152611a5d60f21b606482015260840161057e565b600560008154611edd90612ab2565b909155505050505050565b6000546001600160a01b03163314611f125760405162461bcd60e51b815260040161057e90612a4f565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b600082815260026020908152604080832060039092528220829190825b826003015481101561179f5760008181526020838152604091829020825180840190935280546001600160a01b03168084526001918201549284019290925288900361209e5760018501546020830151604051635091e19f60e11b815260048101919091526001600160a01b039182169183169063a123c33e90602401602060405180830381865afa158015611feb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061200f9190612b07565b6001600160a01b0316036120995760208201516040516338329a4160e01b815260048101919091526001600160a01b038216906338329a4190602401602060405180830381865afa158015612068573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061208c9190612b4c565b6120969087612d09565b95505b6121a8565b876002036121a85760028501546020830151604051635091e19f60e11b815260048101919091526001600160a01b039182169183169063a123c33e90602401602060405180830381865afa1580156120fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061211e9190612b07565b6001600160a01b0316036121a85760208201516040516338329a4160e01b815260048101919091526001600160a01b038216906338329a4190602401602060405180830381865afa158015612177573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061219b9190612b4c565b6121a59087612d09565b95505b5050806121b490612ab2565b9050611f51565b600081815260026020819052604090912080549091146122145760405162461bcd60e51b81526020600482015260146024820152736f6e6c7920657865637574696e6720737461746560601b604482015260640161057e565b60028101546000906001600160a01b031615801561223f575060018201546001600160a01b03163314155b1561225c57506002810180546001600160a01b0319163317905560015b60008260030154116122805760405162461bcd60e51b815260040161057e90612acb565b600083815260036020526040812034915b846003015481101561255d576000818152602083815260408083208151808301835281546001600160a01b031680825260019092015493810184905291516304cd5e4560e21b81526004810193909352909290918290631335791490602401602060405180830381865afa15801561230d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123319190612b07565b6020840151604051637443c20f60e11b815260048101919091529091506000906001600160a01b0384169063e887841e90602401602060405180830381865afa158015612382573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123a69190612b07565b6001600160a01b03161480156123b95750865b1561242c57602083015160405163e3ab470d60e01b815260048101919091523360248201526001600160a01b0383169063e3ab470d90604401600060405180830381600087803b15801561240c57600080fd5b505af1158015612420573d6000803e3d6000fd5b5050505050505061254d565b6001600160a01b03811633148061245257506001600160a01b0381161580156124525750865b156125495760208301516040516338329a4160e01b81526000916001600160a01b038516916338329a419161248d9160040190815260200190565b602060405180830381865afa1580156124aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124ce9190612b4c565b6020850151604051630c032dc360e41b815260048101919091523360248201529091506001600160a01b0384169063c032dc309083906044016000604051808303818588803b15801561252057600080fd5b505af1158015612534573d6000803e3d6000fd5b505050505080876125459190612b65565b9650505b5050505b61255681612ab2565b9050612291565b5081156125ce57604051600090339084908381818185875af1925050503d80600081146125a6576040519150601f19603f3d011682016040523d82523d6000602084013e6125ab565b606091505b50509050806125cc5760405162461bcd60e51b815260040161057e90612b78565b505b604080513381526001602082015286917fe1bebd63dac2b6a13df786d357c7ea99338d29e95b8103e4313ec33430f199ee910160405180910390a25050505050565b6000306001600160a01b0383160361262a57506001919050565b506001600160a01b031660009081526001602052604090205460ff1690565b60405180608001604052806000815260200160006001600160a01b0316815260200160006001600160a01b03168152602001600081525090565b604080516101a081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101829052610160810182905261018081019190915290565b80151581146126fd57600080fd5b50565b60008060006040848603121561271557600080fd5b833567ffffffffffffffff8082111561272d57600080fd5b818601915086601f83011261274157600080fd5b81358181111561275057600080fd5b8760208260051b850101111561276557600080fd5b6020928301955093505084013561277b816126ef565b809150509250925092565b6001600160a01b03811681146126fd57600080fd5b6000602082840312156127ad57600080fd5b81356127b881612786565b9392505050565b6000602082840312156127d157600080fd5b5035919050565b602080825282518282018190526000919060409081850190868401855b8281101561282357815180516001600160a01b031685528601518685015292840192908501906001016127f5565b5091979650505050505050565b80516001600160a01b03168252602081015160208301526040810151604083015260608101516060830152608081015161287560808401826001600160a01b03169052565b5060a081015161289060a08401826001600160a01b03169052565b5060c08101516128ab60c08401826001600160a01b03169052565b5060e0818101519083015261010080820151908301526101208082015190830152610140808201516001600160a01b03169083015261016080820151151590830152610180908101511515910152565b825181526020808401516001600160a01b0390811682840152604080860151909116908301526060808501519083015260a06080830181905283519083018190526000919060c0840190858301845b828110156128235761295d848351612830565b6101a093909301929084019060010161294a565b815181526020808301516001600160a01b0390811691830191909152604080840151909116908201526060808301519082015260808101610609565b600080604083850312156129c057600080fd5b82356129cb81612786565b915060208301356129db81612786565b809150509250929050565b600080604083850312156129f957600080fd5b50508035926020909101359150565b6101a081016106098284612830565b600080600060608486031215612a2c57600080fd5b833592506020840135612a3e81612786565b929592945050506040919091013590565b60208082526017908201527f63616c6c6572206973206e6f7420746865206f776e6572000000000000000000604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201612ac457612ac4612a9c565b5060010190565b6020808252601290820152716465616c20686173206e6f20706f696e747360701b604082015260600190565b8051612b0281612786565b919050565b600060208284031215612b1957600080fd5b81516127b881612786565b8051612b02816126ef565b600060208284031215612b4157600080fd5b81516127b8816126ef565b600060208284031215612b5e57600080fd5b5051919050565b8181038181111561060957610609612a9c565b60208082526023908201527f73656e74206574686572206572726f723a206574686572206973206e6f742073604082015262195b9d60ea1b606082015260800190565b634e487b7160e01b600052604160045260246000fd5b6040516101a0810167ffffffffffffffff81118282101715612c0357634e487b7160e01b600052604160045260246000fd5b60405290565b60006101a08284031215612c1c57600080fd5b612c24612bd1565b612c2d83612af7565b8152602083015160208201526040830151604082015260608301516060820152612c5960808401612af7565b6080820152612c6a60a08401612af7565b60a0820152612c7b60c08401612af7565b60c082015260e0838101519082015261010080840151908201526101208084015190820152610140612cae818501612af7565b90820152610160612cc0848201612b24565b90820152610180612cd2848201612b24565b908201529392505050565b6020808252601290820152716f6e6c7920666f7220666163746f7269657360701b604082015260600190565b8082018082111561060957610609612a9c56fea26469706673582212200cf7a0df330382332bc8f596c6e4fdeedb4a40d0f62df5eff4e4983148852b4a64736f6c63430008110033

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

00000000000000000000000037510211032c82e6ffe134768aaad360e8b9c71d

-----Decoded View---------------
Arg [0] : feeSettingsAddress (address): 0x37510211032c82E6fFe134768AAad360e8B9C71D

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 00000000000000000000000037510211032c82e6ffe134768aaad360e8b9c71d


Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ 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.