{
  "_format": "hh-sol-artifact-1",
  "contractName": "IDCAHubWithAccessControl",
  "sourceName": "contracts/DCAHubSwapper/ThirdPartyDCAHubSwapper.sol",
  "abi": [
    {
      "inputs": [],
      "name": "AmountTooBig",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "HighFee",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "HighPlatformFeeRatio",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "IntervalNotAllowed",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InvalidAllowedTokensInput",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InvalidFee",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InvalidPairs",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InvalidPosition",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InvalidToken",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InvalidTokens",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "LiquidityNotReturned",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "NoSwapsToExecute",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "PositionDoesNotMatchToken",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "UnallowedToken",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "UnauthorizedCaller",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ZeroAddress",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ZeroAmount",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ZeroSwaps",
      "type": "error"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "depositor",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "positionId",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "fromToken",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "toToken",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint32",
          "name": "swapInterval",
          "type": "uint32"
        },
        {
          "indexed": false,
          "internalType": "uint120",
          "name": "rate",
          "type": "uint120"
        },
        {
          "indexed": false,
          "internalType": "uint32",
          "name": "startingSwap",
          "type": "uint32"
        },
        {
          "indexed": false,
          "internalType": "uint32",
          "name": "lastSwap",
          "type": "uint32"
        },
        {
          "components": [
            {
              "internalType": "address",
              "name": "operator",
              "type": "address"
            },
            {
              "internalType": "enum IDCAPermissionManager.Permission[]",
              "name": "permissions",
              "type": "uint8[]"
            }
          ],
          "indexed": false,
          "internalType": "struct IDCAPermissionManager.PermissionSet[]",
          "name": "permissions",
          "type": "tuple[]"
        }
      ],
      "name": "Deposited",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "positionId",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "Miscellaneous",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "user",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "positionId",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint120",
          "name": "rate",
          "type": "uint120"
        },
        {
          "indexed": false,
          "internalType": "uint32",
          "name": "startingSwap",
          "type": "uint32"
        },
        {
          "indexed": false,
          "internalType": "uint32",
          "name": "lastSwap",
          "type": "uint32"
        }
      ],
      "name": "Modified",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "contract ITokenPriceOracle",
          "name": "oracle",
          "type": "address"
        }
      ],
      "name": "OracleSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint16",
          "name": "platformFeeRatio",
          "type": "uint16"
        }
      ],
      "name": "PlatformFeeRatioSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "previousAdminRole",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "newAdminRole",
          "type": "bytes32"
        }
      ],
      "name": "RoleAdminChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        }
      ],
      "name": "RoleGranted",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        }
      ],
      "name": "RoleRevoked",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint32",
          "name": "feeSet",
          "type": "uint32"
        }
      ],
      "name": "SwapFeeSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint32[]",
          "name": "swapIntervals",
          "type": "uint32[]"
        }
      ],
      "name": "SwapIntervalsAllowed",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint32[]",
          "name": "swapIntervals",
          "type": "uint32[]"
        }
      ],
      "name": "SwapIntervalsForbidden",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "rewardRecipient",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "callbackHandler",
          "type": "address"
        },
        {
          "components": [
            {
              "components": [
                {
                  "internalType": "address",
                  "name": "token",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "reward",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "toProvide",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "platformFee",
                  "type": "uint256"
                }
              ],
              "internalType": "struct IDCAHubSwapHandler.TokenInSwap[]",
              "name": "tokens",
              "type": "tuple[]"
            },
            {
              "components": [
                {
                  "internalType": "address",
                  "name": "tokenA",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "tokenB",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "totalAmountToSwapTokenA",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "totalAmountToSwapTokenB",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "ratioAToB",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "ratioBToA",
                  "type": "uint256"
                },
                {
                  "internalType": "bytes1",
                  "name": "intervalsInSwap",
                  "type": "bytes1"
                }
              ],
              "internalType": "struct IDCAHubSwapHandler.PairInSwap[]",
              "name": "pairs",
              "type": "tuple[]"
            }
          ],
          "indexed": false,
          "internalType": "struct IDCAHubSwapHandler.SwapInfo",
          "name": "swapInformation",
          "type": "tuple"
        },
        {
          "indexed": false,
          "internalType": "uint256[]",
          "name": "borrowed",
          "type": "uint256[]"
        },
        {
          "indexed": false,
          "internalType": "uint32",
          "name": "fee",
          "type": "uint32"
        }
      ],
      "name": "Swapped",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "user",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "recipientUnswapped",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "recipientSwapped",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "positionId",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "returnedUnswapped",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "returnedSwapped",
          "type": "uint256"
        }
      ],
      "name": "Terminated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address[]",
          "name": "tokens",
          "type": "address[]"
        },
        {
          "indexed": false,
          "internalType": "bool[]",
          "name": "allowed",
          "type": "bool[]"
        }
      ],
      "name": "TokensAllowedUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "withdrawer",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "positionId",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "Withdrew",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        },
        {
          "components": [
            {
              "internalType": "address",
              "name": "token",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "amount",
              "type": "uint256"
            }
          ],
          "indexed": false,
          "internalType": "struct IDCAHub.AmountOfToken[]",
          "name": "amounts",
          "type": "tuple[]"
        }
      ],
      "name": "WithdrewFromPlatform",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "withdrawer",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        },
        {
          "components": [
            {
              "internalType": "address",
              "name": "token",
              "type": "address"
            },
            {
              "internalType": "uint256[]",
              "name": "positionIds",
              "type": "uint256[]"
            }
          ],
          "indexed": false,
          "internalType": "struct IDCAHubPositionHandler.PositionSet[]",
          "name": "positions",
          "type": "tuple[]"
        },
        {
          "indexed": false,
          "internalType": "uint256[]",
          "name": "withdrew",
          "type": "uint256[]"
        }
      ],
      "name": "WithdrewMany",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "MAX_FEE",
      "outputs": [
        {
          "internalType": "uint32",
          "name": "maxFee",
          "type": "uint32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "MAX_PLATFORM_FEE_RATIO",
      "outputs": [
        {
          "internalType": "uint16",
          "name": "",
          "type": "uint16"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "tokenA",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "tokenB",
          "type": "address"
        },
        {
          "internalType": "bytes1",
          "name": "swapIntervalMask",
          "type": "bytes1"
        },
        {
          "internalType": "uint32",
          "name": "swapNumber",
          "type": "uint32"
        }
      ],
      "name": "accumRatio",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "accumRatioAToB",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "accumRatioBToA",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "tokenA",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "tokenB",
          "type": "address"
        }
      ],
      "name": "activeSwapIntervals",
      "outputs": [
        {
          "internalType": "bytes1",
          "name": "",
          "type": "bytes1"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32[]",
          "name": "swapIntervals",
          "type": "uint32[]"
        }
      ],
      "name": "addSwapIntervalsToAllowedList",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "allowedSwapIntervals",
      "outputs": [
        {
          "internalType": "bytes1",
          "name": "allowedSwapIntervals",
          "type": "bytes1"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        }
      ],
      "name": "allowedTokens",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "internalType": "uint32",
          "name": "amountOfSwaps",
          "type": "uint32"
        },
        {
          "internalType": "uint32",
          "name": "swapInterval",
          "type": "uint32"
        },
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "components": [
            {
              "internalType": "address",
              "name": "operator",
              "type": "address"
            },
            {
              "internalType": "enum IDCAPermissionManager.Permission[]",
              "name": "permissions",
              "type": "uint8[]"
            }
          ],
          "internalType": "struct IDCAPermissionManager.PermissionSet[]",
          "name": "permissions",
          "type": "tuple[]"
        }
      ],
      "name": "deposit",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "positionId",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "internalType": "uint32",
          "name": "amountOfSwaps",
          "type": "uint32"
        },
        {
          "internalType": "uint32",
          "name": "swapInterval",
          "type": "uint32"
        },
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "components": [
            {
              "internalType": "address",
              "name": "operator",
              "type": "address"
            },
            {
              "internalType": "enum IDCAPermissionManager.Permission[]",
              "name": "permissions",
              "type": "uint8[]"
            }
          ],
          "internalType": "struct IDCAPermissionManager.PermissionSet[]",
          "name": "permissions",
          "type": "tuple[]"
        },
        {
          "internalType": "bytes",
          "name": "miscellaneous",
          "type": "bytes"
        }
      ],
      "name": "deposit",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "positionId",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "tokens",
          "type": "address[]"
        },
        {
          "components": [
            {
              "internalType": "uint8",
              "name": "indexTokenA",
              "type": "uint8"
            },
            {
              "internalType": "uint8",
              "name": "indexTokenB",
              "type": "uint8"
            }
          ],
          "internalType": "struct IDCAHubSwapHandler.PairIndexes[]",
          "name": "pairs",
          "type": "tuple[]"
        },
        {
          "internalType": "bool",
          "name": "calculatePrivilegedAvailability",
          "type": "bool"
        },
        {
          "internalType": "bytes",
          "name": "oracleData",
          "type": "bytes"
        }
      ],
      "name": "getNextSwapInfo",
      "outputs": [
        {
          "components": [
            {
              "components": [
                {
                  "internalType": "address",
                  "name": "token",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "reward",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "toProvide",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "platformFee",
                  "type": "uint256"
                }
              ],
              "internalType": "struct IDCAHubSwapHandler.TokenInSwap[]",
              "name": "tokens",
              "type": "tuple[]"
            },
            {
              "components": [
                {
                  "internalType": "address",
                  "name": "tokenA",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "tokenB",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "totalAmountToSwapTokenA",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "totalAmountToSwapTokenB",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "ratioAToB",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "ratioBToA",
                  "type": "uint256"
                },
                {
                  "internalType": "bytes1",
                  "name": "intervalsInSwap",
                  "type": "bytes1"
                }
              ],
              "internalType": "struct IDCAHubSwapHandler.PairInSwap[]",
              "name": "pairs",
              "type": "tuple[]"
            }
          ],
          "internalType": "struct IDCAHubSwapHandler.SwapInfo",
          "name": "swapInformation",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        }
      ],
      "name": "getRoleAdmin",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "grantRole",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "hasRole",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "positionId",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "internalType": "uint32",
          "name": "newSwaps",
          "type": "uint32"
        }
      ],
      "name": "increasePosition",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "oracle",
      "outputs": [
        {
          "internalType": "contract ITokenPriceOracle",
          "name": "oracle",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "pause",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "paused",
      "outputs": [
        {
          "internalType": "bool",
          "name": "isPaused",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "permissionManager",
      "outputs": [
        {
          "internalType": "contract IDCAPermissionManager",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        }
      ],
      "name": "platformBalance",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "platformFeeRatio",
      "outputs": [
        {
          "internalType": "uint16",
          "name": "",
          "type": "uint16"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "positionId",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "internalType": "uint32",
          "name": "newSwaps",
          "type": "uint32"
        },
        {
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        }
      ],
      "name": "reducePosition",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32[]",
          "name": "swapIntervals",
          "type": "uint32[]"
        }
      ],
      "name": "removeSwapIntervalsFromAllowedList",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "renounceRole",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "revokeRole",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract ITokenPriceOracle",
          "name": "oracle",
          "type": "address"
        }
      ],
      "name": "setOracle",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint16",
          "name": "platformFeeRatio",
          "type": "uint16"
        }
      ],
      "name": "setPlatformFeeRatio",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "fee",
          "type": "uint32"
        }
      ],
      "name": "setSwapFee",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "tokens",
          "type": "address[]"
        },
        {
          "components": [
            {
              "internalType": "uint8",
              "name": "indexTokenA",
              "type": "uint8"
            },
            {
              "internalType": "uint8",
              "name": "indexTokenB",
              "type": "uint8"
            }
          ],
          "internalType": "struct IDCAHubSwapHandler.PairIndexes[]",
          "name": "pairsToSwap",
          "type": "tuple[]"
        },
        {
          "internalType": "address",
          "name": "rewardRecipient",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "callbackHandler",
          "type": "address"
        },
        {
          "internalType": "uint256[]",
          "name": "borrow",
          "type": "uint256[]"
        },
        {
          "internalType": "bytes",
          "name": "callbackData",
          "type": "bytes"
        },
        {
          "internalType": "bytes",
          "name": "oracleData",
          "type": "bytes"
        }
      ],
      "name": "swap",
      "outputs": [
        {
          "components": [
            {
              "components": [
                {
                  "internalType": "address",
                  "name": "token",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "reward",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "toProvide",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "platformFee",
                  "type": "uint256"
                }
              ],
              "internalType": "struct IDCAHubSwapHandler.TokenInSwap[]",
              "name": "tokens",
              "type": "tuple[]"
            },
            {
              "components": [
                {
                  "internalType": "address",
                  "name": "tokenA",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "tokenB",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "totalAmountToSwapTokenA",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "totalAmountToSwapTokenB",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "ratioAToB",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "ratioBToA",
                  "type": "uint256"
                },
                {
                  "internalType": "bytes1",
                  "name": "intervalsInSwap",
                  "type": "bytes1"
                }
              ],
              "internalType": "struct IDCAHubSwapHandler.PairInSwap[]",
              "name": "pairs",
              "type": "tuple[]"
            }
          ],
          "internalType": "struct IDCAHubSwapHandler.SwapInfo",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "tokenA",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "tokenB",
          "type": "address"
        },
        {
          "internalType": "bytes1",
          "name": "swapIntervalMask",
          "type": "bytes1"
        },
        {
          "internalType": "uint32",
          "name": "swapNumber",
          "type": "uint32"
        }
      ],
      "name": "swapAmountDelta",
      "outputs": [
        {
          "internalType": "uint128",
          "name": "swapDeltaAToB",
          "type": "uint128"
        },
        {
          "internalType": "uint128",
          "name": "swapDeltaBToA",
          "type": "uint128"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "tokenA",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "tokenB",
          "type": "address"
        },
        {
          "internalType": "bytes1",
          "name": "swapIntervalMask",
          "type": "bytes1"
        }
      ],
      "name": "swapData",
      "outputs": [
        {
          "internalType": "uint32",
          "name": "performedSwaps",
          "type": "uint32"
        },
        {
          "internalType": "uint224",
          "name": "nextAmountToSwapAToB",
          "type": "uint224"
        },
        {
          "internalType": "uint32",
          "name": "lastSwappedAt",
          "type": "uint32"
        },
        {
          "internalType": "uint224",
          "name": "nextAmountToSwapBToA",
          "type": "uint224"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "swapFee",
      "outputs": [
        {
          "internalType": "uint32",
          "name": "swapFee",
          "type": "uint32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "positionId",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "recipientUnswapped",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "recipientSwapped",
          "type": "address"
        }
      ],
      "name": "terminate",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "unswapped",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "swapped",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        }
      ],
      "name": "tokenMagnitude",
      "outputs": [
        {
          "internalType": "uint120",
          "name": "",
          "type": "uint120"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "totalCreatedPositions",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "unpause",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "positionId",
          "type": "uint256"
        }
      ],
      "name": "userPosition",
      "outputs": [
        {
          "components": [
            {
              "internalType": "contract IERC20Metadata",
              "name": "from",
              "type": "address"
            },
            {
              "internalType": "contract IERC20Metadata",
              "name": "to",
              "type": "address"
            },
            {
              "internalType": "uint32",
              "name": "swapInterval",
              "type": "uint32"
            },
            {
              "internalType": "uint32",
              "name": "swapsExecuted",
              "type": "uint32"
            },
            {
              "internalType": "uint256",
              "name": "swapped",
              "type": "uint256"
            },
            {
              "internalType": "uint32",
              "name": "swapsLeft",
              "type": "uint32"
            },
            {
              "internalType": "uint256",
              "name": "remaining",
              "type": "uint256"
            },
            {
              "internalType": "uint120",
              "name": "rate",
              "type": "uint120"
            }
          ],
          "internalType": "struct IDCAHubPositionHandler.UserPosition",
          "name": "position",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "token",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "amount",
              "type": "uint256"
            }
          ],
          "internalType": "struct IDCAHub.AmountOfToken[]",
          "name": "amounts",
          "type": "tuple[]"
        },
        {
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        }
      ],
      "name": "withdrawFromPlatformBalance",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "positionId",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        }
      ],
      "name": "withdrawSwapped",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "swapped",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "token",
              "type": "address"
            },
            {
              "internalType": "uint256[]",
              "name": "positionIds",
              "type": "uint256[]"
            }
          ],
          "internalType": "struct IDCAHubPositionHandler.PositionSet[]",
          "name": "positions",
          "type": "tuple[]"
        },
        {
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        }
      ],
      "name": "withdrawSwappedMany",
      "outputs": [
        {
          "internalType": "uint256[]",
          "name": "withdrawn",
          "type": "uint256[]"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x",
  "deployedBytecode": "0x",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
