Contract 0x05ad1094eb6cde564d732196f6754ee464896031

Contract Overview

Balance:
413,775.795263468354503013 FTM

FTM Value:
$488,255.44 (@ $1.18/FTM)

Token:
Txn Hash Method
Block
From
To
Value [Txn Fee]
0xee20f93c11a0d605b1ed7070ba6bda287148a9e8025c322f21f49d6075368d67Cancel Order173683392021-09-20 14:22:3140 secs ago0xc4109f49343b8c0dfcde2e3b3ca5224f0af05df8 IN  0x05ad1094eb6cde564d732196f6754ee4648960310 FTM0.037046565847
0x4e27982038c81fd00e2d1bbe0450d7199f8a3f570c5f7212e5074ec8afb221f2Cancel Order173676352021-09-20 14:10:4712 mins ago0x4fd8a25472ead5990c58a7f3cc2a554d0bfc8e15 IN  0x05ad1094eb6cde564d732196f6754ee4648960310 FTM0.045323824291
0x3aabf44bf1faa7b7458205a3af35a752c1197f1a81e2cb81a163082910cc994eCancel Order173671592021-09-20 14:01:0522 mins ago0x15fd47744d29973ca1f2bad8ee07f54a550e6fd4 IN  0x05ad1094eb6cde564d732196f6754ee4648960310 FTM0.127858008739
0x91cad1ef5f04739dde0d9e47ea37fbb94d4cc9c452b9f07a05904b7376dc68c3Cancel Order173670542021-09-20 13:58:4324 mins ago0x121f1d799f8890a98e50c2e085d7ea5063703e8c IN  0x05ad1094eb6cde564d732196f6754ee4648960310 FTM0.11891337559
0x92d20eac3866e61eea4e6ee52aec1c3f18303310c68cdd0640d2e4d41cb07b1bCancel Order173668082021-09-20 13:53:5029 mins ago0xc8058b3869a2a9cf4292f4b8a555d7aabc7eea86 IN  0x05ad1094eb6cde564d732196f6754ee4648960310 FTM0.143766788796
0x85df8f05eeb898428032561573f00f397976a5610691f2def72c8c6f39824295Cancel Order173667712021-09-20 13:53:0730 mins ago0x45f3a125367bef61881d2edb44154449cb314f89 IN  0x05ad1094eb6cde564d732196f6754ee4648960310 FTM0.036807720398
0x49a84485b27fac0ceeb61993613bc118af214743ab5bd834f3ce9d4f54d3bd4cCancel Order173667632021-09-20 13:52:5830 mins ago0x45f3a125367bef61881d2edb44154449cb314f89 IN  0x05ad1094eb6cde564d732196f6754ee4648960310 FTM0.036905844326
0xdf9c54443a2e1386dd45656fb60d52ec5d9913540ac05b8c9a773587925f1569Cancel Order173667542021-09-20 13:52:4830 mins ago0x45f3a125367bef61881d2edb44154449cb314f89 IN  0x05ad1094eb6cde564d732196f6754ee4648960310 FTM0.036990743361
0x5eb6c5c34c2bba2183527fe4e6a52fa61089b11ffe697f28fb705a88e54515faCancel Order173667482021-09-20 13:52:4130 mins ago0x45f3a125367bef61881d2edb44154449cb314f89 IN  0x05ad1094eb6cde564d732196f6754ee4648960310 FTM0.036994110667
0x2f2be4704bc84dd370e936f94f677d39c3ef3e645d594d4f6d7998206ca3b4e9Deposit Eth173660872021-09-20 13:41:5141 mins ago0x93617280d57564241b4ad4f4e09e02968f3f2d76 IN  0x05ad1094eb6cde564d732196f6754ee464896031690 FTM0.039121303225
0xbeed83e44c9c52f3eb651f2a5cc363b38404167002870aa981a8a8ecf53047c9Cancel Order173656542021-09-20 13:34:1548 mins ago0x6eaa1ee583106253459039de63b47510f4ea0bd3 IN  0x05ad1094eb6cde564d732196f6754ee4648960310 FTM0.164442497659
0xc5dd5b6f190022ed9feccc6402b47cda0da6298ede532b35c31918da148e5185Cancel Order173656402021-09-20 13:34:0249 mins ago0x6eaa1ee583106253459039de63b47510f4ea0bd3 IN  0x05ad1094eb6cde564d732196f6754ee4648960310 FTM0.160707964651
0x28ecb0cd7730d5bdf31b5e7a610082f30849d40e6d052c5e58f4452388ed98f2Cancel Order173652602021-09-20 13:26:1356 mins ago0x9c95bfbc5d8e04b33659336e7db4ae6c6c56db70 IN  0x05ad1094eb6cde564d732196f6754ee4648960310 FTM0.117550938819
0x5ef6fd9648b10eac585b5a7b6b311aeae26c29061026347f7e84afe3ab07c37bDeposit Eth173652392021-09-20 13:25:5257 mins ago0xaefcbcad09d299e7292f810a38ccb067b46e32ed IN  0x05ad1094eb6cde564d732196f6754ee4648960312,650 FTM0.023975679728
0x9648f645e457eea1aab1ed5017e7c9ac8608355fdf1e9cc343d089548dca7152Cancel Order173649922021-09-20 13:21:291 hr 1 min ago0x9a648312af8b4f6989555d2b31105f24d9e4302d IN  0x05ad1094eb6cde564d732196f6754ee4648960310 FTM0.150245040976
0x15291ad7f6334985f90264f7aca307c36a85e8d4375c1af3125ac686b27b93c3Cancel Order173648052021-09-20 13:18:181 hr 4 mins ago0xc8058b3869a2a9cf4292f4b8a555d7aabc7eea86 IN  0x05ad1094eb6cde564d732196f6754ee4648960310 FTM0.123287729766
0x83dad303f6d7f926dd7b94dc1c523148edf3ce58040911c3971fdaee1a35ae65Cancel Order173647652021-09-20 13:17:311 hr 5 mins ago0xbf3a3b4469e7a1ac680768dfd9ee71ed6e3213ad IN  0x05ad1094eb6cde564d732196f6754ee4648960310 FTM0.065086838995
0xfbe0edc76f5f85faddbd07a571d2b03bf60d1565eca10f8a586d775f24eccda8Cancel Order173645792021-09-20 13:14:351 hr 8 mins ago0xefce38f31ebeb9637e85d3487595261fdf6ebeeb IN  0x05ad1094eb6cde564d732196f6754ee4648960310 FTM0.155074474697
0x83f97b007afc6cafef96e919e1b6d1a20274893fed01e40808844dddcb27c418Cancel Order173643902021-09-20 13:09:481 hr 13 mins ago0x9a648312af8b4f6989555d2b31105f24d9e4302d IN  0x05ad1094eb6cde564d732196f6754ee4648960310 FTM0.163251659236
0xa04a03df754c56e3620d0d0718e5b69188a218ed3326ada1a8e58459e5981934Cancel Order173643572021-09-20 13:09:121 hr 13 mins ago0xcd0f92a0e959b324effa38ddd43b74462bcaa95f IN  0x05ad1094eb6cde564d732196f6754ee4648960310 FTM0.148504114278
0x6b28e86400a2f81076ce10413967497e89fe97f3bdd86951844044d52bfa4273Cancel Order173642782021-09-20 13:07:321 hr 15 mins ago0x89c8121115955831056958861c6800f0298b820a IN  0x05ad1094eb6cde564d732196f6754ee4648960310 FTM0.190791762027
0x136b5d2cdc9150f57a8aa1151ffa308c3d2d089820fe177ecfaf0b1342aed60eCancel Order173642502021-09-20 13:06:581 hr 16 mins ago0xae1fa6dcb9fc88718ec6c10f334305e2182e9466 IN  0x05ad1094eb6cde564d732196f6754ee4648960310 FTM0.191509825862
0x58b9bc0d291497fba92b95c849e59dcdbb896e97594bda1ab11fcb490c35354aCancel Order173641092021-09-20 13:03:591 hr 19 mins ago0xb1c2ab40aeeae75ce81f242fa29492972d2d98ba IN  0x05ad1094eb6cde564d732196f6754ee4648960310 FTM0.166503104256
0xba01e8165112ca28c664a7e0818be918b28a6d99aedcdbf30b9636aa3443536aCancel Order173637572021-09-20 12:56:011 hr 27 mins ago0x45f3a125367bef61881d2edb44154449cb314f89 IN  0x05ad1094eb6cde564d732196f6754ee4648960310 FTM0.049199206929
0xc87ab8ab22e6974f5f131719d4762f5597bdccc4dc31d8995f858df52edda757Cancel Order173637552021-09-20 12:55:591 hr 27 mins ago0x45f3a125367bef61881d2edb44154449cb314f89 IN  0x05ad1094eb6cde564d732196f6754ee4648960310 FTM0.048627458246
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0xee20f93c11a0d605b1ed7070ba6bda287148a9e8025c322f21f49d6075368d67173683392021-09-20 14:22:3140 secs ago 0x05ad1094eb6cde564d732196f6754ee464896031  Contract Creation0 FTM
0x4e27982038c81fd00e2d1bbe0450d7199f8a3f570c5f7212e5074ec8afb221f2173676352021-09-20 14:10:4712 mins ago 0x05ad1094eb6cde564d732196f6754ee464896031  Contract Creation0 FTM
0x3aabf44bf1faa7b7458205a3af35a752c1197f1a81e2cb81a163082910cc994e173671592021-09-20 14:01:0522 mins ago 0x05ad1094eb6cde564d732196f6754ee464896031  Contract Creation0 FTM
0xffa94806f63a7aa2fb16d87c2f3c450150795632aa02b1cd515d7450bd474bf9173671092021-09-20 14:00:0723 mins ago 0x05ad1094eb6cde564d732196f6754ee464896031  Contract Creation0 FTM
0x91cad1ef5f04739dde0d9e47ea37fbb94d4cc9c452b9f07a05904b7376dc68c3173670542021-09-20 13:58:4324 mins ago 0x05ad1094eb6cde564d732196f6754ee464896031  Contract Creation0 FTM
0x92d20eac3866e61eea4e6ee52aec1c3f18303310c68cdd0640d2e4d41cb07b1b173668082021-09-20 13:53:5029 mins ago 0x05ad1094eb6cde564d732196f6754ee464896031  Contract Creation0 FTM
0x85df8f05eeb898428032561573f00f397976a5610691f2def72c8c6f39824295173667712021-09-20 13:53:0730 mins ago 0x05ad1094eb6cde564d732196f6754ee464896031  Contract Creation0 FTM
0x49a84485b27fac0ceeb61993613bc118af214743ab5bd834f3ce9d4f54d3bd4c173667632021-09-20 13:52:5830 mins ago 0x05ad1094eb6cde564d732196f6754ee464896031  Contract Creation0 FTM
0xdf9c54443a2e1386dd45656fb60d52ec5d9913540ac05b8c9a773587925f1569173667542021-09-20 13:52:4830 mins ago 0x05ad1094eb6cde564d732196f6754ee464896031  Contract Creation0 FTM
0x5eb6c5c34c2bba2183527fe4e6a52fa61089b11ffe697f28fb705a88e54515fa173667482021-09-20 13:52:4130 mins ago 0x05ad1094eb6cde564d732196f6754ee464896031  Contract Creation0 FTM
0x2f2be4704bc84dd370e936f94f677d39c3ef3e645d594d4f6d7998206ca3b4e9173660872021-09-20 13:41:5141 mins ago 0x93617280d57564241b4ad4f4e09e02968f3f2d76 0x05ad1094eb6cde564d732196f6754ee464896031690 FTM
0xbc2bf4ca19753fcd76d16aa34469fa7c0cd35917410a0ef49d1663064abb0be6173659922021-09-20 13:39:4143 mins ago 0x05ad1094eb6cde564d732196f6754ee464896031 0xf2253bf9a0bd002300cfe6f4e630d755669f6dca1 FTM
0xc5dd5b6f190022ed9feccc6402b47cda0da6298ede532b35c31918da148e5185173656402021-09-20 13:34:0249 mins ago 0x05ad1094eb6cde564d732196f6754ee4648960310x6eaa1ee583106253459039de63b47510f4ea0bd3200.258670821225132363 FTM
0x28ecb0cd7730d5bdf31b5e7a610082f30849d40e6d052c5e58f4452388ed98f2173652602021-09-20 13:26:1356 mins ago 0x05ad1094eb6cde564d732196f6754ee464896031  Contract Creation0 FTM
0x5ef6fd9648b10eac585b5a7b6b311aeae26c29061026347f7e84afe3ab07c37b173652392021-09-20 13:25:5257 mins ago 0xaefcbcad09d299e7292f810a38ccb067b46e32ed 0x05ad1094eb6cde564d732196f6754ee4648960312,650 FTM
0x9648f645e457eea1aab1ed5017e7c9ac8608355fdf1e9cc343d089548dca7152173649922021-09-20 13:21:291 hr 1 min ago 0x05ad1094eb6cde564d732196f6754ee464896031  Contract Creation0 FTM
0x15291ad7f6334985f90264f7aca307c36a85e8d4375c1af3125ac686b27b93c3173648052021-09-20 13:18:181 hr 4 mins ago 0x05ad1094eb6cde564d732196f6754ee464896031  Contract Creation0 FTM
0x83dad303f6d7f926dd7b94dc1c523148edf3ce58040911c3971fdaee1a35ae65173647652021-09-20 13:17:311 hr 5 mins ago 0x05ad1094eb6cde564d732196f6754ee464896031  Contract Creation0 FTM
0xfbe0edc76f5f85faddbd07a571d2b03bf60d1565eca10f8a586d775f24eccda8173645792021-09-20 13:14:351 hr 8 mins ago 0x05ad1094eb6cde564d732196f6754ee464896031  Contract Creation0 FTM
0x83f97b007afc6cafef96e919e1b6d1a20274893fed01e40808844dddcb27c418173643902021-09-20 13:09:481 hr 13 mins ago 0x05ad1094eb6cde564d732196f6754ee464896031  Contract Creation0 FTM
0xa04a03df754c56e3620d0d0718e5b69188a218ed3326ada1a8e58459e5981934173643572021-09-20 13:09:121 hr 13 mins ago 0x05ad1094eb6cde564d732196f6754ee464896031  Contract Creation0 FTM
0x6b28e86400a2f81076ce10413967497e89fe97f3bdd86951844044d52bfa4273173642782021-09-20 13:07:321 hr 15 mins ago 0x05ad1094eb6cde564d732196f6754ee464896031  Contract Creation0 FTM
0x136b5d2cdc9150f57a8aa1151ffa308c3d2d089820fe177ecfaf0b1342aed60e173642502021-09-20 13:06:581 hr 16 mins ago 0x05ad1094eb6cde564d732196f6754ee464896031  Contract Creation0 FTM
0x58b9bc0d291497fba92b95c849e59dcdbb896e97594bda1ab11fcb490c35354a173641092021-09-20 13:03:591 hr 19 mins ago 0x05ad1094eb6cde564d732196f6754ee4648960310xb1c2ab40aeeae75ce81f242fa29492972d2d98ba1 FTM
0x021dc6f2b8f2ac52ba1641b447058a508992383c9a4ae86c5ce21e472568b727173639412021-09-20 13:00:011 hr 23 mins ago 0x05ad1094eb6cde564d732196f6754ee464896031  Contract Creation0 FTM
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
GelatoPineCore

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, GNU GPLv3 license

Contract Source Code (Solidity Multiple files format)

File 1 of 2: GelatoPineCore.sol
// SPDX-License-Identifier: GPL-3.0

//
// Original work by Pine.Finance
//  - https://github.com/pine-finance
//
// Authors:
//  - Ignacio Mazzara <@nachomazzara>
//  - Agustin Aguilar <@agusx1211>

// solhint-disable-next-line
pragma solidity 0.6.12;

import {PineCore, IModule, IERC20} from "./PineCore.sol";

contract GelatoPineCore is PineCore {
    // solhint-disable-next-line var-name-mixedcase
    address public immutable GELATO;

    constructor(address _gelato) public {
        GELATO = _gelato;
    }

    modifier onlyGelato {
        require(GELATO == msg.sender, "GelatoPineCore: onlyGelato");
        _;
    }

    function executeOrder(
        IModule _module,
        IERC20 _inputToken,
        address payable _owner,
        bytes calldata _data,
        bytes calldata _signature,
        bytes calldata _auxData
    ) public override onlyGelato {
        super.executeOrder(
            _module,
            _inputToken,
            _owner,
            _data,
            _signature,
            _auxData
        );
    }
}

File 2 of 2: PineCore.sol
/**
 *Submitted for verification at Etherscan.io on 2020-08-30
 */

/**
 *Submitted for verification at Etherscan.io on 2020-08-30
 */

// SPDX-License-Identifier: GPL-3.0
//
// Original work by Pine.Finance
//  - https://github.com/pine-finance
//
// Authors:
//  - Ignacio Mazzara <@nachomazzara>
//  - Agustin Aguilar <@agusx1211>

//
//
//                                                /
//                                                @,
//                                               /&&
//                                              &&%%&/
//                                            &%%%%&%%,..
//                                         */%&,*&&&&&&%%&*
//                                           /&%%%%%%%#.
//                                    ./%&%%%&#/%%%%&#&%%%&#(*.
//                                         .%%%%%%%&&%&/ ..,...
//                                       .*,%%%%%%%%%&&%%%%(
//                                     ,&&%%%&&*%%%%%%%%.*(#%&/
//                                  ./,(*,*,#%%%%%%%%%%%%%%%(,
//                                 ,(%%%%%%%%%%%%&%%%%%%%%%#&&%%%#/(*
//                                     *#%%%%%%%&%%%&%%#%%%%%%(
//                              .(####%%&%&#*&%%##%%%%%%%%%%%#.,,
//                                      ,&%%%%%###%%%%%%%%%%%%#&&.
//                             ..,(&%%%%%%%%%%%%%%%%%%&&%%%%#%&&%&%%%%&&#,
//                           ,##//%((#*/#%%%%%%%%%%%%%%%%%%%%%&(.
//                                  (%%%%%%%%%%%%%%%%%%%#%%%%%%%%%&&&&#(*,
//                                   ./%%%%&%%%%#%&%%%%%%##%%&&&&%%(*,
//                                #%%%%%%&&%%%#%%%%%%%%%%%%%%%&#,*&&#.
//                            /%##%(%&/ #%%%%%%%%%%%%%%%%%%%%%%%%%&%%%.
//                                 *&%%%%&%%%%%%%%#%%%%%%%%%%%%%%%%%&%%%#%#%%,
//                        .*(#&%%%%%%%%&&%%%%%%%%%%#%%%%%%%%%%%%%%%(,
//                    ./#%%%%%%%%%%%%%%%%%%%%%%%#%&%#%%%%%%%%%%%%%%%%%%%%&%%%#####(.
//                          .,,*#%%%%%%%%%%%%%##%%&&%#%%%%%%%%&&%%%%%%(&*#&**/(*
//                        .,(&%%%%%#((%%%%%%#%%%%%%%%%#%%%%%%%&&&&&%%%%&%*
//                         ,,,,,..*&%%%%%%%%%%%%%%%%%%%%%%%&%%%%%%%%%#/*.
//                           ,#&%%%%%%%%%%%%%%%%%%%%%%%%&%%%%%%%%%%%%%%%%%%/,
//           .     .,*(#%%%%%%%%%&&&&%%%%%%&&&%%%%%%%%%&&%##%%%%%#,(%%%%%%%%%%%(((*
//             ,/((%%%%%#%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%#%%%%%%%&#  . . ...
//                      .,.,,**(%%%%%%%%&%##%%%%%%%%%%%%%%%%%%###%%%%%%%%%&*
//                       ,%&%%%%%&&%%%%%%%#%%%%%%%%%%%%%%%%%%&%%%%##%%%%%%%%%%%%%%%%&&#.
//              .(&&&%%%%%%&#&&%&%%%%%%%##%%%%&&%%%#%%%%%%&%%%%%%&&%%%%&&&/*(,(#(,,.
//                         ..&%%%%%%#%#%%%%%%%%%%%##%%%%%%%&%%%%%%%%%%%%%%%%&&(.
//                      ,%%%%%%%%%##%%%&%%%%%%%%&%%#%%&&%%%%&%%%%%%&%%%%%&(#%%%#,
//              ./%&%%%%%%%%%%%%%%%%%%%%%%%%%&&&%%%##%%%%%%%%%%%%%&&&%%%%%%%%&#.//*/,..
//      ,#%%%%%%%%%%%%%%%%%%&&%%%%%&&&&%%%%%&&&%%%%%#%%%%#%%%%%%%%%%%%%%%%%%%%%%%%%%&&(,..
//            ,#* ,&&&%,.,*(%%%%%%%%%&%%%%&&&%%%%%&%%%%#%%%%##%%%%%%%&&%%%%%%%%%%%#%%%%%%%%&%(*.
//          .,,/((#%&%#%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%&&&&&%#%%%%%%%%%%%%%%%%%#%%%%%%%((*
// *,//**,...,/#%%%%%%%%%%%&&&&%%%%%%%%%%%%%#%%%%%%&&&%%%%&&&&%%%#%%#%%%%%%%%%%%%%%%#*.       .,(#%&@*
//  .*%%(*(%%%%%%%%%%&&&&&&&&%%%%%%%&&%%%%%%%%%%%%%&&&%%%%%%%%%##%%%%%%%%%%%%%%%%%%%%%%%%%%%&%%%/..
//      .,/%&%%%%%%@#(&%&%%%%%%%%%#&&%%##%#%%%#%%%%&&&%%%%%%%%###%%%%%&&&%%%%%%%%%%%%%%%%&(//%%/
//          ,..     .(%%%%##%%%#%%%%%%#%%%%%##%%%%%&&&&%%%%%%%#&%#%%%%%%&&&%%%%%##//  ,,.
//            .,(%#%%##%%%#%%%#%%%#%%*,.*%%%%%%%%%&.,/&%%%%%%% #&%%#%%%%%&%(&%((%&&&(*
//                        ,/#/(%%,    ,&%%#%/.//         %*&(%#    .(,(%%%.

pragma solidity 0.6.12;

/**
 * @dev Wrappers over Solidity's arithmetic operations with added overflow
 * checks.
 *
 * Arithmetic operations in Solidity wrap on overflow. This can easily result
 * in bugs, because programmers usually assume that an overflow raises an
 * error, which is the standard behavior in high level programming languages.
 * `SafeMath` restores this intuition by reverting the transaction when 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 SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     * - Subtraction cannot overflow.
     */
    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     * - The divisor cannot be zero.
     */
    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts with custom message when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     * - The divisor cannot be zero.
     */
    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

// File: contracts/libs/ECDSA.sol

/**
 * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.
 *
 * These functions can be used to verify that a message was signed by the holder
 * of the private keys of a given address.
 */
library ECDSA {
    /**
     * @dev Returns the address that signed a hashed message (`hash`) with
     * `signature`. This address can then be used for verification purposes.
     *
     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:
     * this function rejects them by requiring the `s` value to be in the lower
     * half order, and the `v` value to be either 27 or 28.
     *
     * IMPORTANT: `hash` _must_ be the result of a hash operation for the
     * verification to be secure: it is possible to craft signatures that
     * recover to arbitrary addresses for non-hashed data. A safe way to ensure
     * this is by receiving a hash of the original message (which may otherwise
     * be too long), and then calling {toEthSignedMessageHash} on it.
     */
    function recover(bytes32 hash, bytes memory signature)
        internal
        pure
        returns (address)
    {
        // Check the signature length
        if (signature.length != 65) {
            revert("ECDSA: invalid signature length");
        }

        // Divide the signature in r, s and v variables
        bytes32 r;
        bytes32 s;
        uint8 v;

        // ecrecover takes the signature parameters, and the only way to get them
        // currently is to use assembly.
        // solhint-disable-next-line no-inline-assembly
        assembly {
            r := mload(add(signature, 0x20))
            s := mload(add(signature, 0x40))
            v := byte(0, mload(add(signature, 0x60)))
        }

        // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature
        // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines
        // the valid range for s in (281): 0 < s < secp256k1n ÷ 2 + 1, and for v in (282): v ∈ {27, 28}. Most
        // signatures from current libraries generate a unique signature with an s-value in the lower half order.
        //
        // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value
        // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or
        // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept
        // these malleable signatures as well.
        if (
            uint256(s) >
            0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0
        ) {
            revert("ECDSA: invalid signature 's' value");
        }

        if (v != 27 && v != 28) {
            revert("ECDSA: invalid signature 'v' value");
        }

        // If the signature is valid (and not malleable), return the signer address
        address signer = ecrecover(hash, v, r, s);
        require(signer != address(0), "ECDSA: invalid signature");

        return signer;
    }

    /**
     * @dev Returns an Ethereum Signed Message, created from a `hash`. This
     * replicates the behavior of the
     * https://github.com/ethereum/wiki/wiki/JSON-RPC#eth_sign[`eth_sign`]
     * JSON-RPC method.
     *
     * See {recover}.
     */
    function toEthSignedMessageHash(bytes32 hash)
        internal
        pure
        returns (bytes32)
    {
        // 32 is the length in bytes of hash,
        // enforced by the type signature above
        return
            keccak256(
                abi.encodePacked("\x19Ethereum Signed Message:\n32", hash)
            );
    }
}

// File: contracts/interfaces/IERC20.sol

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

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

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

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

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

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

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

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

// File: contracts/libs/Fabric.sol

/**
 * @title Fabric
 * @dev Create deterministics vaults.
 *
 * Original work by Pine.Finance
 * - https://github.com/pine-finance
 *
 * Authors:
 * - Agustin Aguilar <agusx1211>
 * - Ignacio Mazzara <nachomazzara>
 */
library Fabric {
    /*Vault bytecode

        def _fallback() payable:
            call cd[56] with:
                funct call.data[0 len 4]
                gas cd[56] wei
                args call.data[4 len 64]
            selfdestruct(tx.origin)

        // Constructor bytecode
        0x6012600081600A8239f3

        0x60 12 - PUSH1 12           // Size of the contract to return
        0x60 00 - PUSH1 00           // Memory offset to return stored code
        0x81    - DUP2  12           // Size of code to copy
        0x60 0a - PUSH1 0A           // Start of the code to copy
        0x82    - DUP3  00           // Dest memory for code copy
        0x39    - CODECOPY 00 0A 12  // Code copy to memory
        0xf3    - RETURN 00 12       // Return code to store

        // Deployed contract bytecode
        0x60008060448082803781806038355AF132FF

        0x60 00 - PUSH1 00                    // Size for the call output
        0x80    - DUP1  00                    // Offset for the call output
        0x60 44 - PUSH1 44                    // Size for the call input
        0x80    - DUP1  44                    // Size for copying calldata to memory
        0x82    - DUP3  00                    // Offset for calldata copy
        0x80    - DUP1  00                    // Offset for destination of calldata copy
        0x37    - CALLDATACOPY 00 00 44       // Execute calldata copy, is going to be used for next call
        0x81    - DUP2  00                    // Offset for call input
        0x80    - DUP1  00                    // Amount of ETH to send during call
        0x60 38 - PUSH1 38                    // calldata pointer to load value into stack
        0x35    - CALLDATALOAD 38 (A)         // Load value (A), address to call
        0x5a    - GAS                         // Remaining gas
        0xf1    - CALL (A) (A) 00 00 44 00 00 // Execute call to address (A) with calldata mem[0:64]
        0x32    - ORIGIN (B)                  // Dest funds for selfdestruct
        0xff    - SELFDESTRUCT (B)            // selfdestruct contract, end of execution
    */
    bytes public constant code =
        hex"6012600081600A8239F360008060448082803781806038355AF132FF";
    bytes32 public constant vaultCodeHash =
        bytes32(
            0xfa3da1081bc86587310fce8f3a5309785fc567b9b20875900cb289302d6bfa97
        );

    /**
     * @dev Get a deterministics vault.
     */
    function getVault(bytes32 _key) internal view returns (address) {
        return
            address(
                uint256(
                    keccak256(
                        abi.encodePacked(
                            bytes1(0xff),
                            address(this),
                            _key,
                            vaultCodeHash
                        )
                    )
                )
            );
    }

    /**
     * @dev Create deterministic vault.
     */
    function executeVault(
        bytes32 _key,
        IERC20 _token,
        address _to
    ) internal returns (uint256 value) {
        address addr;
        bytes memory slotcode = code;

        /* solium-disable-next-line */
        assembly {
            // Create the contract arguments for the constructor
            addr := create2(0, add(slotcode, 0x20), mload(slotcode), _key)
        }

        value = _token.balanceOf(addr);
        /* solium-disable-next-line */
        (bool success, ) =
            addr.call(
                abi.encodePacked(
                    abi.encodeWithSelector(
                        _token.transfer.selector,
                        _to,
                        value
                    ),
                    address(_token)
                )
            );

        require(success, "Error pulling tokens");
    }
}

// File: contracts/interfaces/IModule.sol

/**
 * Original work by Pine.Finance
 * - https://github.com/pine-finance
 *
 * Authors:
 * - Ignacio Mazzara <nachomazzara>
 * - Agustin Aguilar <agusx1211>
 */
interface IModule {
    /// @notice receive ETH
    receive() external payable;

    /**
     * @notice Executes an order
     * @param _inputToken - Address of the input token
     * @param _inputAmount - uint256 of the input token amount (order amount)
     * @param _owner - Address of the order's owner
     * @param _data - Bytes of the order's data
     * @param _auxData - Bytes of the auxiliar data used for the handlers to execute the order
     * @return bought - amount of output token bought
     */
    function execute(
        IERC20 _inputToken,
        uint256 _inputAmount,
        address payable _owner,
        bytes calldata _data,
        bytes calldata _auxData
    ) external returns (uint256 bought);

    /**
     * @notice Check whether an order can be executed or not
     * @param _inputToken - Address of the input token
     * @param _inputAmount - uint256 of the input token amount (order amount)
     * @param _data - Bytes of the order's data
     * @param _auxData - Bytes of the auxiliar data used for the handlers to execute the order
     * @return bool - whether the order can be executed or not
     */
    function canExecute(
        IERC20 _inputToken,
        uint256 _inputAmount,
        bytes calldata _data,
        bytes calldata _auxData
    ) external view returns (bool);
}

// File: contracts/commons/Order.sol

contract Order {
    address public constant ETH_ADDRESS =
        address(0x00eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee);
}

// File: contracts/PineCore.sol

/**
 * Original work by Pine.Finance
 * - https://github.com/pine-finance
 *
 * Authors:
 * - Ignacio Mazzara <nachomazzara>
 * - Agustin Aguilar <agusx1211>
 */
abstract contract PineCore is Order {
    using SafeMath for uint256;
    using Fabric for bytes32;

    // ETH orders
    mapping(bytes32 => uint256) public ethDeposits;

    // Events
    event DepositETH(
        bytes32 indexed _key,
        address indexed _caller,
        uint256 _amount,
        bytes _data
    );

    event OrderExecuted(
        bytes32 indexed _key,
        address _inputToken,
        address _owner,
        address _witness,
        bytes _data,
        bytes _auxData,
        uint256 _amount,
        uint256 _bought
    );

    event OrderCancelled(
        bytes32 indexed _key,
        address _inputToken,
        address _owner,
        address _witness,
        bytes _data,
        uint256 _amount
    );

    /**
     * @dev Prevent users to send Ether directly to this contract
     */
    receive() external payable {
        require(
            msg.sender != tx.origin,
            "PineCore#receive: NO_SEND_ETH_PLEASE"
        );
    }

    /**
     * @notice Create an ETH to token order
     * @param _data - Bytes of an ETH to token order. See `encodeEthOrder` for more info
     */
    function depositEth(bytes calldata _data) external payable {
        require(msg.value > 0, "PineCore#depositEth: VALUE_IS_0");

        (
            address module,
            address inputToken,
            address payable owner,
            address witness,
            bytes memory data,

        ) = decodeOrder(_data);

        require(
            inputToken == ETH_ADDRESS,
            "PineCore#depositEth: WRONG_INPUT_TOKEN"
        );

        bytes32 key =
            keyOf(
                IModule(uint160(module)),
                IERC20(inputToken),
                owner,
                witness,
                data
            );

        ethDeposits[key] = ethDeposits[key].add(msg.value);
        emit DepositETH(key, msg.sender, msg.value, _data);
    }

    /**
     * @notice Cancel order
     * @dev The params should be the same used for the order creation
     * @param _module - Address of the module to use for the order execution
     * @param _inputToken - Address of the input token
     * @param _owner - Address of the order's owner
     * @param _witness - Address of the witness
     * @param _data - Bytes of the order's data
     */
    function cancelOrder(
        IModule _module,
        IERC20 _inputToken,
        address payable _owner,
        address _witness,
        bytes calldata _data
    ) external {
        require(msg.sender == _owner, "PineCore#cancelOrder: INVALID_OWNER");
        bytes32 key = keyOf(_module, _inputToken, _owner, _witness, _data);

        uint256 amount = _pullOrder(_inputToken, key, msg.sender);

        emit OrderCancelled(
            key,
            address(_inputToken),
            _owner,
            _witness,
            _data,
            amount
        );
    }

    /**
     * @notice Get the calldata needed to create a token to token/ETH order
     * @dev Returns the input data that the user needs to use to create the order
     * The _secret is used to prevent a front-running at the order execution
     * The _amount is used as the param `_value` for the ERC20 `transfer` function
     * @param _module - Address of the module to use for the order execution
     * @param _inputToken - Address of the input token
     * @param _owner - Address of the order's owner
     * @param _witness - Address of the witness
     * @param _data - Bytes of the order's data
     * @param _secret - Private key of the _witness
     * @param _amount - uint256 of the order amount
     * @return bytes - input data to send the transaction
     */
    function encodeTokenOrder(
        IModule _module,
        IERC20 _inputToken,
        address payable _owner,
        address _witness,
        bytes calldata _data,
        bytes32 _secret,
        uint256 _amount
    ) external view returns (bytes memory) {
        return
            abi.encodeWithSelector(
                _inputToken.transfer.selector,
                vaultOfOrder(_module, _inputToken, _owner, _witness, _data),
                _amount,
                abi.encode(
                    _module,
                    _inputToken,
                    _owner,
                    _witness,
                    _data,
                    _secret
                )
            );
    }

    /**
     * @notice Get the calldata needed to create a ETH to token order
     * @dev Returns the input data that the user needs to use to create the order
     * The _secret is used to prevent a front-running at the order execution
     * @param _module - Address of the module to use for the order execution
     * @param _inputToken - Address of the input token
     * @param _owner - Address of the order's owner
     * @param _witness - Address of the witness
     * @param _data - Bytes of the order's data
     * @param _secret -  Private key of the _witness
     * @return bytes - input data to send the transaction
     */
    function encodeEthOrder(
        address _module,
        address _inputToken,
        address payable _owner,
        address _witness,
        bytes calldata _data,
        bytes32 _secret
    ) external pure returns (bytes memory) {
        return
            abi.encode(_module, _inputToken, _owner, _witness, _data, _secret);
    }

    /**
     * @notice Get order's properties
     * @param _data - Bytes of the order
     * @return module - Address of the module to use for the order execution
     * @return inputToken - Address of the input token
     * @return owner - Address of the order's owner
     * @return witness - Address of the witness
     * @return data - Bytes of the order's data
     * @return secret -  Private key of the _witness
     */
    function decodeOrder(bytes memory _data)
        public
        pure
        returns (
            address module,
            address inputToken,
            address payable owner,
            address witness,
            bytes memory data,
            bytes32 secret
        )
    {
        (module, inputToken, owner, witness, data, secret) = abi.decode(
            _data,
            (address, address, address, address, bytes, bytes32)
        );
    }

    /**
     * @notice Get the vault's address of a token to token/ETH order
     * @param _module - Address of the module to use for the order execution
     * @param _inputToken - Address of the input token
     * @param _owner - Address of the order's owner
     * @param _witness - Address of the witness
     * @param _data - Bytes of the order's data
     * @return address - The address of the vault
     */
    function vaultOfOrder(
        IModule _module,
        IERC20 _inputToken,
        address payable _owner,
        address _witness,
        bytes memory _data
    ) public view returns (address) {
        return keyOf(_module, _inputToken, _owner, _witness, _data).getVault();
    }

    /**
     * @notice Executes an order
     * @dev The sender should use the _secret to sign its own address
     * to prevent front-runnings
     * @param _module - Address of the module to use for the order execution
     * @param _inputToken - Address of the input token
     * @param _owner - Address of the order's owner
     * @param _data - Bytes of the order's data
     * @param _signature - Signature to calculate the witness
     * @param _auxData - Bytes of the auxiliar data used for the handlers to execute the order
     */
    function executeOrder(
        IModule _module,
        IERC20 _inputToken,
        address payable _owner,
        bytes calldata _data,
        bytes calldata _signature,
        bytes calldata _auxData
    ) public virtual {
        // Calculate witness using signature
        address witness =
            ECDSA.recover(keccak256(abi.encodePacked(msg.sender)), _signature);

        bytes32 key = keyOf(_module, _inputToken, _owner, witness, _data);

        // Pull amount
        uint256 amount = _pullOrder(_inputToken, key, address(_module));
        require(amount > 0, "PineCore#executeOrder: INVALID_ORDER");

        uint256 bought =
            _module.execute(_inputToken, amount, _owner, _data, _auxData);

        emit OrderExecuted(
            key,
            address(_inputToken),
            _owner,
            witness,
            _data,
            _auxData,
            amount,
            bought
        );
    }

    /**
     * @notice Check whether an order exists or not
     * @dev Check the balance of the order
     * @param _module - Address of the module to use for the order execution
     * @param _inputToken - Address of the input token
     * @param _owner - Address of the order's owner
     * @param _witness - Address of the witness
     * @param _data - Bytes of the order's data
     * @return bool - whether the order exists or not
     */
    function existOrder(
        IModule _module,
        IERC20 _inputToken,
        address payable _owner,
        address _witness,
        bytes calldata _data
    ) external view returns (bool) {
        bytes32 key = keyOf(_module, _inputToken, _owner, _witness, _data);

        if (address(_inputToken) == ETH_ADDRESS) {
            return ethDeposits[key] != 0;
        } else {
            return _inputToken.balanceOf(key.getVault()) != 0;
        }
    }

    /**
     * @notice Check whether an order can be executed or not
     * @param _module - Address of the module to use for the order execution
     * @param _inputToken - Address of the input token
     * @param _owner - Address of the order's owner
     * @param _witness - Address of the witness
     * @param _data - Bytes of the order's data
     * @param _auxData - Bytes of the auxiliar data used for the handlers to execute the order
     * @return bool - whether the order can be executed or not
     */
    function canExecuteOrder(
        IModule _module,
        IERC20 _inputToken,
        address payable _owner,
        address _witness,
        bytes calldata _data,
        bytes calldata _auxData
    ) external view returns (bool) {
        bytes32 key = keyOf(_module, _inputToken, _owner, _witness, _data);

        // Pull amount
        uint256 amount;
        if (address(_inputToken) == ETH_ADDRESS) {
            amount = ethDeposits[key];
        } else {
            amount = _inputToken.balanceOf(key.getVault());
        }

        return _module.canExecute(_inputToken, amount, _data, _auxData);
    }

    /**
     * @notice Transfer the order amount to a recipient.
     * @dev For an ETH order, the ETH will be transferred from this contract
     * For a token order, its vault will be executed transferring the amount of tokens to
     * the recipient
     * @param _inputToken - Address of the input token
     * @param _key - Order's key
     * @param _to - Address of the recipient
     * @return amount - amount transferred
     */
    function _pullOrder(
        IERC20 _inputToken,
        bytes32 _key,
        address payable _to
    ) private returns (uint256 amount) {
        if (address(_inputToken) == ETH_ADDRESS) {
            amount = ethDeposits[_key];
            ethDeposits[_key] = 0;
            (bool success, ) = _to.call{value: amount}("");
            require(success, "PineCore#_pullOrder: PULL_ETHER_FAILED");
        } else {
            amount = _key.executeVault(_inputToken, _to);
        }
    }

    /**
     * @notice Get the order's key
     * @param _module - Address of the module to use for the order execution
     * @param _inputToken - Address of the input token
     * @param _owner - Address of the order's owner
     * @param _witness - Address of the witness
     * @param _data - Bytes of the order's data
     * @return bytes32 - order's key
     */
    function keyOf(
        IModule _module,
        IERC20 _inputToken,
        address payable _owner,
        address _witness,
        bytes memory _data
    ) public pure returns (bytes32) {
        return
            keccak256(
                abi.encode(_module, _inputToken, _owner, _witness, _data)
            );
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_gelato","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"_key","type":"bytes32"},{"indexed":true,"internalType":"address","name":"_caller","type":"address"},{"indexed":false,"internalType":"uint256","name":"_amount","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"_data","type":"bytes"}],"name":"DepositETH","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"_key","type":"bytes32"},{"indexed":false,"internalType":"address","name":"_inputToken","type":"address"},{"indexed":false,"internalType":"address","name":"_owner","type":"address"},{"indexed":false,"internalType":"address","name":"_witness","type":"address"},{"indexed":false,"internalType":"bytes","name":"_data","type":"bytes"},{"indexed":false,"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"OrderCancelled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"_key","type":"bytes32"},{"indexed":false,"internalType":"address","name":"_inputToken","type":"address"},{"indexed":false,"internalType":"address","name":"_owner","type":"address"},{"indexed":false,"internalType":"address","name":"_witness","type":"address"},{"indexed":false,"internalType":"bytes","name":"_data","type":"bytes"},{"indexed":false,"internalType":"bytes","name":"_auxData","type":"bytes"},{"indexed":false,"internalType":"uint256","name":"_amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_bought","type":"uint256"}],"name":"OrderExecuted","type":"event"},{"inputs":[],"name":"ETH_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"GELATO","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IModule","name":"_module","type":"address"},{"internalType":"contract IERC20","name":"_inputToken","type":"address"},{"internalType":"address payable","name":"_owner","type":"address"},{"internalType":"address","name":"_witness","type":"address"},{"internalType":"bytes","name":"_data","type":"bytes"},{"internalType":"bytes","name":"_auxData","type":"bytes"}],"name":"canExecuteOrder","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IModule","name":"_module","type":"address"},{"internalType":"contract IERC20","name":"_inputToken","type":"address"},{"internalType":"address payable","name":"_owner","type":"address"},{"internalType":"address","name":"_witness","type":"address"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"cancelOrder","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"decodeOrder","outputs":[{"internalType":"address","name":"module","type":"address"},{"internalType":"address","name":"inputToken","type":"address"},{"internalType":"address payable","name":"owner","type":"address"},{"internalType":"address","name":"witness","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"bytes32","name":"secret","type":"bytes32"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"depositEth","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_module","type":"address"},{"internalType":"address","name":"_inputToken","type":"address"},{"internalType":"address payable","name":"_owner","type":"address"},{"internalType":"address","name":"_witness","type":"address"},{"internalType":"bytes","name":"_data","type":"bytes"},{"internalType":"bytes32","name":"_secret","type":"bytes32"}],"name":"encodeEthOrder","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"contract IModule","name":"_module","type":"address"},{"internalType":"contract IERC20","name":"_inputToken","type":"address"},{"internalType":"address payable","name":"_owner","type":"address"},{"internalType":"address","name":"_witness","type":"address"},{"internalType":"bytes","name":"_data","type":"bytes"},{"internalType":"bytes32","name":"_secret","type":"bytes32"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"encodeTokenOrder","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"ethDeposits","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IModule","name":"_module","type":"address"},{"internalType":"contract IERC20","name":"_inputToken","type":"address"},{"internalType":"address payable","name":"_owner","type":"address"},{"internalType":"bytes","name":"_data","type":"bytes"},{"internalType":"bytes","name":"_signature","type":"bytes"},{"internalType":"bytes","name":"_auxData","type":"bytes"}],"name":"executeOrder","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IModule","name":"_module","type":"address"},{"internalType":"contract IERC20","name":"_inputToken","type":"address"},{"internalType":"address payable","name":"_owner","type":"address"},{"internalType":"address","name":"_witness","type":"address"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"existOrder","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IModule","name":"_module","type":"address"},{"internalType":"contract IERC20","name":"_inputToken","type":"address"},{"internalType":"address payable","name":"_owner","type":"address"},{"internalType":"address","name":"_witness","type":"address"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"keyOf","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"contract IModule","name":"_module","type":"address"},{"internalType":"contract IERC20","name":"_inputToken","type":"address"},{"internalType":"address payable","name":"_owner","type":"address"},{"internalType":"address","name":"_witness","type":"address"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"vaultOfOrder","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a060405234801561001057600080fd5b506040516120443803806120448339818101604052602081101561003357600080fd5b5051606081901b6001600160601b0319166080526001600160a01b0316611fd861006c600039806113ce528061158a5250611fd86000f3fe6080604052600436106100c55760003560e01c8063b4c075471161007f578063e55060c511610059578063e55060c51461084e578063e8ecb1301461098a578063ebd9c39c14610a2d578063eff557a714610a575761010b565b8063b4c0754714610534578063d6fc0263146106a4578063d7665a48146107ab5761010b565b806286f48f146101105780630d7cf2ad1461020557806313a76c4c146102f05780632bd470d31461035e57806345d0508b14610476578063a734f06e1461051f5761010b565b3661010b57333214156101095760405162461bcd60e51b8152600401808060200182810382526024815260200180611f7f6024913960400191505060405180910390fd5b005b600080fd5b34801561011c57600080fd5b506101e9600480360360a081101561013357600080fd5b6001600160a01b03823581169260208101358216926040820135831692606083013516919081019060a081016080820135600160201b81111561017557600080fd5b82018360208201111561018757600080fd5b803590602001918460018302840111600160201b831117156101a857600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610a6c945050505050565b604080516001600160a01b039092168252519081900360200190f35b34801561021157600080fd5b506102de600480360360a081101561022857600080fd5b6001600160a01b03823581169260208101358216926040820135831692606083013516919081019060a081016080820135600160201b81111561026a57600080fd5b82018360208201111561027c57600080fd5b803590602001918460018302840111600160201b8311171561029d57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610a8d945050505050565b60408051918252519081900360200190f35b6101096004803603602081101561030657600080fd5b810190602081018135600160201b81111561032057600080fd5b82018360208201111561033257600080fd5b803590602001918460018302840111600160201b8311171561035357600080fd5b509092509050610b67565b34801561036a57600080fd5b50610401600480360360c081101561038157600080fd5b6001600160a01b03823581169260208101358216926040820135831692606083013516919081019060a081016080820135600160201b8111156103c357600080fd5b8201836020820111156103d557600080fd5b803590602001918460018302840111600160201b831117156103f657600080fd5b919350915035610d24565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561043b578181015183820152602001610423565b50505050905090810190601f1680156104685780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561048257600080fd5b50610401600480360360e081101561049957600080fd5b6001600160a01b03823581169260208101358216926040820135831692606083013516919081019060a081016080820135600160201b8111156104db57600080fd5b8201836020820111156104ed57600080fd5b803590602001918460018302840111600160201b8311171561050e57600080fd5b919350915080359060200135610dc9565b34801561052b57600080fd5b506101e9610f78565b34801561054057600080fd5b506105e56004803603602081101561055757600080fd5b810190602081018135600160201b81111561057157600080fd5b82018360208201111561058357600080fd5b803590602001918460018302840111600160201b831117156105a457600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610f90945050505050565b60405180876001600160a01b03168152602001866001600160a01b03168152602001856001600160a01b03168152602001846001600160a01b0316815260200180602001838152602001828103825284818151815260200191508051906020019080838360005b8381101561066457818101518382015260200161064c565b50505050905090810190601f1680156106915780820380516001836020036101000a031916815260200191505b5097505050505050505060405180910390f35b3480156106b057600080fd5b50610797600480360360c08110156106c757600080fd5b6001600160a01b03823581169260208101358216926040820135831692606083013516919081019060a081016080820135600160201b81111561070957600080fd5b82018360208201111561071b57600080fd5b803590602001918460018302840111600160201b8311171561073c57600080fd5b919390929091602081019035600160201b81111561075957600080fd5b82018360208201111561076b57600080fd5b803590602001918460018302840111600160201b8311171561078c57600080fd5b509092509050611091565b604080519115158252519081900360200190f35b3480156107b757600080fd5b50610109600480360360a08110156107ce57600080fd5b6001600160a01b03823581169260208101358216926040820135831692606083013516919081019060a081016080820135600160201b81111561081057600080fd5b82018360208201111561082257600080fd5b803590602001918460018302840111600160201b8311171561084357600080fd5b509092509050611289565b34801561085a57600080fd5b50610109600480360360c081101561087157600080fd5b6001600160a01b0382358116926020810135821692604082013590921691810190608081016060820135600160201b8111156108ac57600080fd5b8201836020820111156108be57600080fd5b803590602001918460018302840111600160201b831117156108df57600080fd5b919390929091602081019035600160201b8111156108fc57600080fd5b82018360208201111561090e57600080fd5b803590602001918460018302840111600160201b8311171561092f57600080fd5b919390929091602081019035600160201b81111561094c57600080fd5b82018360208201111561095e57600080fd5b803590602001918460018302840111600160201b8311171561097f57600080fd5b5090925090506113cc565b34801561099657600080fd5b50610797600480360360a08110156109ad57600080fd5b6001600160a01b03823581169260208101358216926040820135831692606083013516919081019060a081016080820135600160201b8111156109ef57600080fd5b820183602082011115610a0157600080fd5b803590602001918460018302840111600160201b83111715610a2257600080fd5b509092509050611465565b348015610a3957600080fd5b506102de60048036036020811015610a5057600080fd5b5035611576565b348015610a6357600080fd5b506101e9611588565b6000610a83610a7e8787878787610a8d565b6115ac565b9695505050505050565b6000858585858560405160200180866001600160a01b03168152602001856001600160a01b03168152602001846001600160a01b03168152602001836001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610b10578181015183820152602001610af8565b50505050905090810190601f168015610b3d5780820380516001836020036101000a031916815260200191505b50965050505050505060405160208183030381529060405280519060200120905095945050505050565b60003411610bbc576040805162461bcd60e51b815260206004820152601f60248201527f50696e65436f7265236465706f7369744574683a2056414c55455f49535f3000604482015290519081900360640190fd5b6000806000806060610c0387878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610f9092505050565b509450945094509450945073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6001600160a01b0316846001600160a01b031614610c725760405162461bcd60e51b8152600401808060200182810382526026815260200180611eee6026913960400191505060405180910390fd5b6000610c818686868686610a8d565b600081815260208190526040902054909150610c9d9034611617565b60008281526020818152604091829020929092558051348082529281018281529181018a9052339284927f294738b98bcebacf616fd72532d3d8d8d229807bf03b68b25681bfbbdb3d3fe5928d918d919060608201848480828437600083820152604051601f909101601f1916909201829003965090945050505050a35050505050505050565b60608787878787878760405160200180886001600160a01b03168152602001876001600160a01b03168152602001866001600160a01b03168152602001856001600160a01b0316815260200180602001838152602001828103825285858281815260200192508082843760008382015260408051601f909201601f19908116909401828103909401825292909252509950505050505050505050979650505050505050565b606063a9059cbb60e01b610e168a8a8a8a8a8a8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610a6c92505050565b838b8b8b8b8b8b8b60405160200180886001600160a01b03168152602001876001600160a01b03168152602001866001600160a01b03168152602001856001600160a01b03168152602001806020018381526020018281038252858582818152602001925080828437600081840152601f19601f8201169050808301925050509850505050505050505060405160208183030381529060405260405160240180846001600160a01b0316815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610f04578181015183820152602001610eec565b50505050905090810190601f168015610f315780820380516001836020036101000a031916815260200191505b5060408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990981697909717909652509394505050505098975050505050505050565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee81565b600080600080606060008680602001905160c0811015610faf57600080fd5b8151602083015160408085015160608601516080870180519351959794969295919491939282019284600160201b821115610fe957600080fd5b908301906020820185811115610ffe57600080fd5b8251600160201b81118282018810171561101757600080fd5b82525081516020918201929091019080838360005b8381101561104457818101518382015260200161102c565b50505050905090810190601f1680156110715780820380516001836020036101000a031916815260200191505b5060405260200151969e959d50939b509199509750929550909350505050565b6000806110d78a8a8a8a8a8a8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610a8d92505050565b905060006001600160a01b038a1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14156111155750600081815260208190526040902054611199565b896001600160a01b03166370a0823161112d846115ac565b6040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561116a57600080fd5b505afa15801561117e573d6000803e3d6000fd5b505050506040513d602081101561119457600080fd5b505190505b8a6001600160a01b031663fd516dab8b838a8a8a8a6040518763ffffffff1660e01b815260040180876001600160a01b0316815260200186815260200180602001806020018381038352878782818152602001925080828437600083820152601f01601f191690910184810383528581526020019050858580828437600081840152601f19601f8201169050808301925050509850505050505050505060206040518083038186803b15801561124e57600080fd5b505afa158015611262573d6000803e3d6000fd5b505050506040513d602081101561127857600080fd5b50519b9a5050505050505050505050565b336001600160a01b038516146112d05760405162461bcd60e51b8152600401808060200182810382526023815260200180611f3a6023913960400191505060405180910390fd5b60006113158787878787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610a8d92505050565b90506000611324878333611678565b9050817f2063eea53914d2615730712acb14000b23d3e8ae6ab97b9beff35f05b7bba15188888888888760405180876001600160a01b03168152602001866001600160a01b03168152602001856001600160a01b03168152602001806020018381526020018281038252858582818152602001925080828437600083820152604051601f909101601f1916909201829003995090975050505050505050a25050505050505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163314611449576040805162461bcd60e51b815260206004820152601a60248201527f47656c61746f50696e65436f72653a206f6e6c7947656c61746f000000000000604482015290519081900360640190fd5b61145a89898989898989898961175d565b505050505050505050565b6000806114ab8888888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610a8d92505050565b90506001600160a01b03871673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14156114ea5760009081526020819052604090205415159050610a83565b866001600160a01b03166370a08231611502836115ac565b6040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561153f57600080fd5b505afa158015611553573d6000803e3d6000fd5b505050506040513d602081101561156957600080fd5b505115159150610a839050565b60006020819052908152604090205481565b7f000000000000000000000000000000000000000000000000000000000000000081565b604080516001600160f81b03196020808301919091523060601b602183015260358201939093527ffa3da1081bc86587310fce8f3a5309785fc567b9b20875900cb289302d6bfa97605580830191909152825180830390910181526075909101909152805191012090565b600082820183811015611671576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b60006001600160a01b03841673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141561174a575060008281526020819052604080822080549083905590519091906001600160a01b0384169083908381818185875af1925050503d80600081146116ff576040519150601f19603f3d011682016040523d82523d6000602084013e611704565b606091505b50509050806117445760405162461bcd60e51b8152600401808060200182810382526026815260200180611f146026913960400191505060405180910390fd5b50611671565b611755838584611a4e565b949350505050565b60006117d13360405160200180826001600160a01b031660601b81526014019150506040516020818303038152906040528051906020012086868080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611cc692505050565b905060006118188b8b8b858c8c8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610a8d92505050565b905060006118278b838e611678565b9050600081116118685760405162461bcd60e51b8152600401808060200182810382526024815260200180611ea86024913960400191505060405180910390fd5b60008c6001600160a01b031663e7ed35e38d848e8e8e8c8c6040518863ffffffff1660e01b815260040180886001600160a01b03168152602001878152602001866001600160a01b0316815260200180602001806020018381038352878782818152602001925080828437600083820152601f01601f191690910184810383528581526020019050858580828437600081840152601f19601f8201169050808301925050509950505050505050505050602060405180830381600087803b15801561193257600080fd5b505af1158015611946573d6000803e3d6000fd5b505050506040513d602081101561195c57600080fd5b81019080805190602001909291905050509050827f56afc5839271b796eaa6426e31b9ad823d483abb96183586e52970a9602b39058d8d878e8e8c8c8a8a604051808a6001600160a01b03168152602001896001600160a01b03168152602001886001600160a01b0316815260200180602001806020018581526020018481526020018381038352898982818152602001925080828437600083820152601f01601f191690910184810383528781526020019050878780828437600083820152604051601f909101601f19169092018290039d50909b505050505050505050505050a250505050505050505050505050565b60008060606040518060400160405280601c81526020017f6012600081600a8239f360008060448082803781806038355af132ff000000008152509050858151602083016000f59150846001600160a01b03166370a08231836040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015611ae457600080fd5b505afa158015611af8573d6000803e3d6000fd5b505050506040513d6020811015611b0e57600080fd5b5051604080516001600160a01b03878116602483015260448083018590528351808403909101815260649092018352602082810180516001600160e01b031663a9059cbb60e01b17815293518351959850600095928816948b93919092019182918083835b60208310611b925780518252601f199092019160209182019101611b73565b6001836020036101000a038019825116818451168082178552505050505050905001826001600160a01b031660601b8152601401925050506040516020818303038152906040526040518082805190602001908083835b60208310611c085780518252601f199092019160209182019101611be9565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114611c6a576040519150601f19603f3d011682016040523d82523d6000602084013e611c6f565b606091505b5050905080611cbc576040805162461bcd60e51b81526020600482015260146024820152734572726f722070756c6c696e6720746f6b656e7360601b604482015290519081900360640190fd5b5050509392505050565b60008151604114611d1e576040805162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015290519081900360640190fd5b60208201516040830151606084015160001a7f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0821115611d8f5760405162461bcd60e51b8152600401808060200182810382526022815260200180611ecc6022913960400191505060405180910390fd5b8060ff16601b14158015611da757508060ff16601c14155b15611de35760405162461bcd60e51b8152600401808060200182810382526022815260200180611f5d6022913960400191505060405180910390fd5b600060018783868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015611e3f573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116610a83576040805162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015290519081900360640190fdfe50696e65436f726523657865637574654f726465723a20494e56414c49445f4f5244455245434453413a20696e76616c6964207369676e6174757265202773272076616c756550696e65436f7265236465706f7369744574683a2057524f4e475f494e5055545f544f4b454e50696e65436f7265235f70756c6c4f726465723a2050554c4c5f45544845525f4641494c454450696e65436f72652363616e63656c4f726465723a20494e56414c49445f4f574e455245434453413a20696e76616c6964207369676e6174757265202776272076616c756550696e65436f726523726563656976653a204e4f5f53454e445f4554485f504c45415345a264697066735822122039c94aae189c78d2bbe1139a3c9dcaf0c37268b05ac68626127e715bf1466ab564736f6c634300060c0033000000000000000000000000eba27a2301975ff5bf7864b99f55a4f7a457ed10

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

000000000000000000000000eba27a2301975ff5bf7864b99f55a4f7a457ed10

-----Decoded View---------------
Arg [0] : _gelato (address): 0xeba27a2301975ff5bf7864b99f55a4f7a457ed10

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000eba27a2301975ff5bf7864b99f55a4f7a457ed10


Deployed ByteCode Sourcemap

313:736:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22457:10:1;22471:9;22457:23;;22436:106;;;;-1:-1:-1;;;22436:106:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;313:736:0;;;;;28236:284:1;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;28236:284:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;28236:284:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;28236:284:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28236:284:1;;-1:-1:-1;28236:284:1;;-1:-1:-1;;;;;28236:284:1:i;:::-;;;;-1:-1:-1;;;;;28236:284:1;;;;;;;;;;;;;;33362:324;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;33362:324:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;33362:324:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;33362:324:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33362:324:1;;-1:-1:-1;33362:324:1;;-1:-1:-1;;;;;33362:324:1:i;:::-;;;;;;;;;;;;;;;;22704:778;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;22704:778:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;22704:778:1;;;;;;;;;;-1:-1:-1;22704:778:1;;-1:-1:-1;22704:778:1;-1:-1:-1;22704:778:1;:::i;26587:336::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;26587:336:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;26587:336:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;26587:336:1;;;;;;;;;;;;-1:-1:-1;26587:336:1;-1:-1:-1;26587:336:1;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25242:703;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;25242:703:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;25242:703:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;25242:703:1;;;;;;;;;;;;-1:-1:-1;25242:703:1;-1:-1:-1;25242:703:1;;;;;;;:::i;21266:99::-;;;;;;;;;;;;;:::i;27357:458::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;27357:458:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;27357:458:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27357:458:1;;-1:-1:-1;27357:458:1;;-1:-1:-1;;;;;27357:458:1:i;:::-;;;;;-1:-1:-1;;;;;27357:458:1;;;;;;-1:-1:-1;;;;;27357:458:1;;;;;;-1:-1:-1;;;;;27357:458:1;;;;;;-1:-1:-1;;;;;27357:458:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31441:616;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;31441:616:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;31441:616:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;31441:616:1;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;31441:616:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;31441:616:1;;;;;;;;;;-1:-1:-1;31441:616:1;;-1:-1:-1;31441:616:1;-1:-1:-1;31441:616:1;:::i;:::-;;;;;;;;;;;;;;;;;;23882:578;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;23882:578:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;23882:578:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;23882:578:1;;;;;;;;;;-1:-1:-1;23882:578:1;;-1:-1:-1;23882:578:1;-1:-1:-1;23882:578:1;:::i;633:414:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;633:414:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;633:414:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;633:414:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;633:414:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;633:414:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;633:414:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;633:414:0;;;;;;;;;;-1:-1:-1;633:414:0;;-1:-1:-1;633:414:0;-1:-1:-1;633:414:0;:::i;30457:463:1:-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;30457:463:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;30457:463:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;30457:463:1;;;;;;;;;;-1:-1:-1;30457:463:1;;-1:-1:-1;30457:463:1;-1:-1:-1;30457:463:1;:::i;21688:46::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21688:46:1;;:::i;407:31:0:-;;;;;;;;;;;;;:::i;28236:284:1:-;28424:7;28450:63;:52;28456:7;28465:11;28478:6;28486:8;28496:5;28450;:52::i;:::-;:61;:63::i;:::-;28443:70;28236:284;-1:-1:-1;;;;;;28236:284:1:o;33362:324::-;33543:7;33619;33628:11;33641:6;33649:8;33659:5;33608:57;;;;;;-1:-1:-1;;;;;33608:57:1;;;;;;-1:-1:-1;;;;;33608:57:1;;;;;;-1:-1:-1;;;;;33608:57:1;;;;;;-1:-1:-1;;;;;33608:57:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33581:98;;;;;;33562:117;;33362:324;;;;;;;:::o;22704:778::-;22793:1;22781:9;:13;22773:57;;;;;-1:-1:-1;;;22773:57:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;22855:14;22883:18;22915:21;22950:15;22979:17;23011:18;23023:5;;23011:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23011:11:1;;-1:-1:-1;;;23011:18:1:i;:::-;22841:188;;;;;;;;;;;21320:44;-1:-1:-1;;;;;23061:25:1;:10;-1:-1:-1;;;;;23061:25:1;;23040:110;;;;-1:-1:-1;;;23040:110:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23161:11;23187:167;23226:6;23259:10;23288:5;23311:7;23336:4;23187:5;:167::i;:::-;23384:11;:16;;;;;;;;;;;23161:193;;-1:-1:-1;23384:31:1;;23405:9;23384:20;:31::i;:::-;23365:11;:16;;;;;;;;;;;;:50;;;;23430:45;;23458:9;23430:45;;;;;;;;;;;;;;;23446:10;;23377:3;;23430:45;;23469:5;;;;23430:45;;;;23469:5;;;;23430:45;;;;;;;;;;;;;-1:-1:-1;;23430:45:1;;;;;;;;-1:-1:-1;23430:45:1;;-1:-1:-1;;;;;23430:45:1;22704:778;;;;;;;;:::o;26587:336::-;26807:12;26861:7;26870:11;26883:6;26891:8;26901:5;;26908:7;26850:66;;;;;;-1:-1:-1;;;;;26850:66:1;;;;;;-1:-1:-1;;;;;26850:66:1;;;;;;-1:-1:-1;;;;;26850:66:1;;;;;;-1:-1:-1;;;;;26850:66:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;26850:66:1;;;;;;;;;;;;;;;;;;-1:-1:-1;26850:66:1;-1:-1:-1;;;;;;;;;;26587:336:1;;;;;;;;;:::o;25242:703::-;25488:12;25571:29;;;25618:59;25631:7;25640:11;25653:6;25661:8;25671:5;;25618:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25618:12:1;;-1:-1:-1;;;25618:59:1:i;:::-;25695:7;25752;25781:11;25814:6;25842:8;25872:5;;25899:7;25720:204;;;;;;-1:-1:-1;;;;;25720:204:1;;;;;;-1:-1:-1;;;;;25720:204:1;;;;;;-1:-1:-1;;;;;25720:204:1;;;;;;-1:-1:-1;;;;;25720:204:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25531:407;;;;;;-1:-1:-1;;;;;25531:407:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25531:407:1;;;-1:-1:-1;;25531:407:1;;;;;;;;;;;;;;-1:-1:-1;;;;;25531:407:1;-1:-1:-1;;;;;;25531:407:1;;;;;;;;;;-1:-1:-1;25531:407:1;;-1:-1:-1;;;;;25242:703:1;;;;;;;;;;:::o;21266:99::-;21320:44;21266:99;:::o;27357:458::-;27456:14;27484:18;27516:21;27551:15;27580:17;27611:14;27727:5;27703:105;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;27703:105:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;27703:105:1;;;;;;-1:-1:-1;27703:105:1;;;;;;;;;;-1:-1:-1;27703:105:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27703:105:1;;;;;27650:158;;;;-1:-1:-1;27650:158:1;;-1:-1:-1;27650:158:1;;-1:-1:-1;27650:158:1;-1:-1:-1;27703:105:1;;-1:-1:-1;27357:458:1;;-1:-1:-1;;;;27357:458:1:o;31441:616::-;31669:4;31685:11;31699:52;31705:7;31714:11;31727:6;31735:8;31745:5;;31699:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31699:5:1;;-1:-1:-1;;;31699:52:1:i;:::-;31685:66;-1:-1:-1;31785:14:1;-1:-1:-1;;;;;31813:35:1;;21320:44;31813:35;31809:168;;;-1:-1:-1;31873:11:1;:16;;;;;;;;;;;31809:168;;;31929:11;-1:-1:-1;;;;;31929:21:1;;31951:14;:3;:12;:14::i;:::-;31929:37;;;;;;;;;;;;;-1:-1:-1;;;;;31929:37:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31929:37:1;;-1:-1:-1;31809:168:1;31994:7;-1:-1:-1;;;;;31994:18:1;;32013:11;32026:6;32034:5;;32041:8;;31994:56;;;;;;;;;;;;;-1:-1:-1;;;;;31994:56:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;31994:56:1;;;;;;;;;;;;;;;-1:-1:-1;31994:56:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31994:56:1;;31441:616;-1:-1:-1;;;;;;;;;;;31441:616:1:o;23882:578::-;24077:10;-1:-1:-1;;;;;24077:20:1;;;24069:68;;;;-1:-1:-1;;;24069:68:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24147:11;24161:52;24167:7;24176:11;24189:6;24197:8;24207:5;;24161:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24161:5:1;;-1:-1:-1;;;24161:52:1:i;:::-;24147:66;;24224:14;24241:40;24252:11;24265:3;24270:10;24241;:40::i;:::-;24224:57;;24325:3;24297:156;24350:11;24376:6;24396:8;24418:5;;24437:6;24297:156;;;;-1:-1:-1;;;;;24297:156:1;;;;;;-1:-1:-1;;;;;24297:156:1;;;;;;-1:-1:-1;;;;;24297:156:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;24297:156:1;;;;;;;;-1:-1:-1;24297:156:1;;-1:-1:-1;;;;;;;;24297:156:1;23882:578;;;;;;;;:::o;633:414:0:-;558:6;-1:-1:-1;;;;;558:20:0;568:10;558:20;550:59;;;;;-1:-1:-1;;;550:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;881:159:::1;913:7;934:11;959:6;979:5;;998:10;;1022:8;;881:18;:159::i;:::-;633:414:::0;;;;;;;;;:::o;30457:463:1:-;30647:4;30663:11;30677:52;30683:7;30692:11;30705:6;30713:8;30723:5;;30677:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30677:5:1;;-1:-1:-1;;;30677:52:1:i;:::-;30663:66;-1:-1:-1;;;;;;30744:35:1;;21320:44;30744:35;30740:174;;;30802:11;:16;;;;;;;;;;;:21;;;-1:-1:-1;30795:28:1;;30740:174;30861:11;-1:-1:-1;;;;;30861:21:1;;30883:14;:3;:12;:14::i;:::-;30861:37;;;;;;;;;;;;;-1:-1:-1;;;;;30861:37:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30861:37:1;:42;;;-1:-1:-1;30854:49:1;;-1:-1:-1;30854:49:1;21688:46;;;;;;;;;;;;;;:::o;407:31:0:-;;;:::o;18298:447:1:-;18480:204;;;-1:-1:-1;;;;;;18480:204:1;;;;;;;;18576:4;18480:204;;;;;;;;;;;;;18159:66;18480:204;;;;;;;;;;;;;;;;;;;;;;;;;18445:261;;;;;;18298:447::o;4618:176::-;4676:7;4707:5;;;4730:6;;;;4722:46;;;;;-1:-1:-1;;;4722:46:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;4786:1;4618:176;-1:-1:-1;;;4618:176:1:o;32500:488::-;32622:14;-1:-1:-1;;;;;32652:35:1;;21320:44;32652:35;32648:334;;;-1:-1:-1;32712:11:1;:17;;;;;;;;;;;;;32743:21;;;;32797:27;;32712:17;;:11;-1:-1:-1;;;;;32797:8:1;;;32712:17;;:11;32797:27;32712:11;32797:27;32712:17;32797:8;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32778:46;;;32846:7;32838:58;;;;-1:-1:-1;;;32838:58:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32648:334;;;;32936:35;:4;32954:11;32967:3;32936:17;:35::i;:::-;32927:44;32500:488;-1:-1:-1;;;;32500:488:1:o;29067:939::-;29348:15;29378:66;29419:10;29402:28;;;;;;-1:-1:-1;;;;;29402:28:1;;;;;;;;;;;;;;;;;;;;;;29392:39;;;;;;29433:10;;29378:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29378:13:1;;-1:-1:-1;;;29378:66:1:i;:::-;29348:96;;29455:11;29469:51;29475:7;29484:11;29497:6;29505:7;29514:5;;29469:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29469:5:1;;-1:-1:-1;;;29469:51:1:i;:::-;29455:65;;29554:14;29571:46;29582:11;29595:3;29608:7;29571:10;:46::i;:::-;29554:63;;29644:1;29635:6;:10;29627:59;;;;-1:-1:-1;;;29627:59:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29697:14;29726:7;-1:-1:-1;;;;;29726:15:1;;29742:11;29755:6;29763;29771:5;;29778:8;;29726:61;;;;;;;;;;;;;-1:-1:-1;;;;;29726:61:1;;;;;;;;;;;-1:-1:-1;;;;;29726:61:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;29726:61:1;;;;;;;;;;;;;;;-1:-1:-1;29726:61:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29697:90;;29830:3;29803:196;29855:11;29881:6;29901:7;29922:5;;29941:8;;29963:6;29983;29803:196;;;;-1:-1:-1;;;;;29803:196:1;;;;;;-1:-1:-1;;;;;29803:196:1;;;;;;-1:-1:-1;;;;;29803:196:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;29803:196:1;;;;;;;;;;;;;;;-1:-1:-1;29803:196:1;;;;;;;;;;;;;;;;;-1:-1:-1;;29803:196:1;;;;;;;;-1:-1:-1;29803:196:1;;-1:-1:-1;;;;;;;;;;;;29803:196:1;29067:939;;;;;;;;;;;;;:::o;18807:863::-;18919:13;18944:12;18966:21;18990:4;;;;;;;;;;;;;;;;;18966:28;;19189:4;19178:8;19172:15;19165:4;19155:8;19151:19;19148:1;19140:54;19132:62;;19222:6;-1:-1:-1;;;;;19222:16:1;;19239:4;19222:22;;;;;;;;;;;;;-1:-1:-1;;;;;19222:22:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;19222:22:1;19389:154;;;-1:-1:-1;;;;;19389:154:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19222:22;19389:154;;;;;-1:-1:-1;;;;;19389:154:1;-1:-1:-1;;;19389:154:1;;;19351:247;;;;19222:22;;-1:-1:-1;19294:12:1;;19324:9;;;;19573:6;;19351:247;;;;;;;;;19389:154;19351:247;;;;;;;;;;-1:-1:-1;;19351:247:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;19351:247:1;;;;;;;;;;;;;;;;;;;;;;;19324:288;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;19324:288:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19293:319;;;19631:7;19623:40;;;;;-1:-1:-1;;;19623:40:1;;;;;;;;;;;;-1:-1:-1;;;19623:40:1;;;;;;;;;;;;;;;18807:863;;;;;;;;:::o;10028:2130::-;10130:7;10195:9;:16;10215:2;10195:22;10191:94;;10233:41;;;-1:-1:-1;;;10233:41:1;;;;;;;;;;;;;;;;;;;;;;;;;;;10191:94;10635:4;10620:20;;10614:27;10680:4;10665:20;;10659:27;10733:4;10718:20;;10712:27;10351:9;10704:36;11676:66;11651:91;;11634:188;;;11767:44;;-1:-1:-1;;;11767:44:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11634:188;11836:1;:7;;11841:2;11836:7;;:18;;;;;11847:1;:7;;11852:2;11847:7;;11836:18;11832:93;;;11870:44;;-1:-1:-1;;;11870:44:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11832:93;12019:14;12036:24;12046:4;12052:1;12055;12058;12036:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;12036:24:1;;-1:-1:-1;;12036:24:1;;;-1:-1:-1;;;;;;;12078:20:1;;12070:57;;;;;-1:-1:-1;;;12070:57:1;;;;;;;;;;;;;;;;;;;;;;;;;;

Swarm Source

ipfs://39c94aae189c78d2bbe1139a3c9dcaf0c37268b05ac68626127e715bf1466ab5
Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Validator ID :
0 FTM

Amount Staked
0

Amount Delegated
0

Staking Total
0

Staking Start Epoch
0

Staking Start Time
0

Proof of Importance
0

Origination Score
0

Validation Score
0

Active
0

Online
0

Downtime
0 s
Address Amount claimed Rewards Created On Epoch Created On
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.