{
  "version": "0.1.0",
  "name": "dex",
  "constants": [
    {
      "name": "NAME_LEN",
      "type": "u64",
      "value": "16"
    },
    {
      "name": "MAX_OUTRIGHTS",
      "type": "u64",
      "value": "128"
    },
    {
      "name": "MAX_PRODUCTS",
      "type": "u64",
      "value": "256"
    },
    {
      "name": "HEALTH_BUFFER_LEN",
      "type": "u64",
      "value": "32"
    },
    {
      "name": "MAX_TRADER_POSITIONS",
      "type": "u64",
      "value": "16"
    },
    {
      "name": "MAX_OPEN_ORDERS_PER_POSITION",
      "type": "u64",
      "value": "256"
    },
    {
      "name": "MAX_OPEN_ORDERS",
      "type": "u64",
      "value": "1024"
    },
    {
      "name": "ANCHOR_DISCRIMINANT_LEN",
      "type": "u64",
      "value": "8"
    },
    {
      "name": "SENTINEL",
      "type": "u64",
      "value": "0"
    },
    {
      "name": "CALLBACK_INFO_LEN",
      "type": "u64",
      "value": "std :: mem :: size_of :: < CallBackInfo > () as u64"
    },
    {
      "name": "CALLBACK_ID_LEN",
      "type": "u64",
      "value": "32"
    },
    {
      "name": "MAX_COMBOS",
      "type": "u64",
      "value": "128"
    },
    {
      "name": "MAX_LEGS",
      "type": "u64",
      "value": "4"
    },
    {
      "name": "SLOTS_1_MIN",
      "type": "u64",
      "value": "150"
    },
    {
      "name": "SLOTS_5_MIN",
      "type": "u64",
      "value": "750"
    },
    {
      "name": "SLOTS_15_MIN",
      "type": "u64",
      "value": "2250"
    },
    {
      "name": "SLOTS_60_MIN",
      "type": "u64",
      "value": "9000"
    }
  ],
  "instructions": [
    {
      "name": "initializeMarketProductGroup",
      "accounts": [
        {
          "name": "authority",
          "isMut": false,
          "isSigner": true
        },
        {
          "name": "marketProductGroup",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "marketProductGroupVault",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "vaultMint",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "feeCollector",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "feeModelProgram",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "feeModelConfigurationAcct",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "riskModelConfigurationAcct",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "riskEngineProgram",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "sysvarRent",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "systemProgram",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "tokenProgram",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "feeOutputRegister",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "riskOutputRegister",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "stakingFeeCollector",
          "isMut": false,
          "isSigner": false
        }
      ],
      "args": [
        {
          "name": "params",
          "type": {
            "defined": "InitializeMarketProductGroupParams"
          }
        }
      ]
    },
    {
      "name": "updateMarketProductGroup",
      "accounts": [
        {
          "name": "authority",
          "isMut": true,
          "isSigner": true
        },
        {
          "name": "marketProductGroup",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "feeModelProgram",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "feeModelConfigurationAcct",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "feeOutputRegister",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "feeCollector",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "stakingFeeCollector",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "systemProgram",
          "isMut": false,
          "isSigner": false
        }
      ],
      "args": [
        {
          "name": "params",
          "type": {
            "defined": "UpdateMarketProductGroupParams"
          }
        }
      ]
    },
    {
      "name": "setAddressLookupTable",
      "accounts": [
        {
          "name": "authority",
          "isMut": true,
          "isSigner": true
        },
        {
          "name": "marketProductGroup",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "addressLookupTable",
          "isMut": false,
          "isSigner": false
        }
      ],
      "args": []
    },
    {
      "name": "initializeMarketProduct",
      "accounts": [
        {
          "name": "authority",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "marketProductGroup",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "product",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "orderbook",
          "isMut": false,
          "isSigner": false
        }
      ],
      "args": [
        {
          "name": "params",
          "type": {
            "defined": "InitializeMarketProductParams"
          }
        }
      ]
    },
    {
      "name": "changeOrderbook",
      "accounts": [
        {
          "name": "authority",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "marketProductGroup",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "product",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "oldOrderbook",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "oldEventQueue",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "oldBids",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "oldAsks",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "newOrderbook",
          "isMut": false,
          "isSigner": false
        }
      ],
      "args": []
    },
    {
      "name": "deactivateMarketProduct",
      "accounts": [
        {
          "name": "authority",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "marketProductGroup",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "product",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "aaobProgram",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "orderbook",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "marketSigner",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "eventQueue",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "bids",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "asks",
          "isMut": true,
          "isSigner": false
        }
      ],
      "args": []
    },
    {
      "name": "removeMarketProduct",
      "accounts": [
        {
          "name": "marketProductGroup",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "product",
          "isMut": false,
          "isSigner": false
        }
      ],
      "args": []
    },
    {
      "name": "removeMarketProductGroup",
      "accounts": [
        {
          "name": "authority",
          "isMut": false,
          "isSigner": true
        },
        {
          "name": "marketProductGroup",
          "isMut": true,
          "isSigner": false
        }
      ],
      "args": []
    },
    {
      "name": "lockCollateral",
      "accounts": [
        {
          "name": "user",
          "isMut": true,
          "isSigner": true
        },
        {
          "name": "traderRiskGroup",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "marketProductGroup",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "feeModelProgram",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "feeModelConfigurationAcct",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "feeOutputRegister",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "riskEngineProgram",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "riskModelConfigurationAcct",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "riskOutputRegister",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "riskAndFeeSigner",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "feeStateAcct",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "riskStateAcct",
          "isMut": true,
          "isSigner": false
        }
      ],
      "args": [
        {
          "name": "params",
          "type": {
            "defined": "LockCollateralParams"
          }
        }
      ]
    },
    {
      "name": "unlockCollateral",
      "accounts": [
        {
          "name": "user",
          "isMut": true,
          "isSigner": true
        },
        {
          "name": "traderRiskGroup",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "marketProductGroup",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "feeModelProgram",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "feeModelConfigurationAcct",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "feeOutputRegister",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "riskEngineProgram",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "riskModelConfigurationAcct",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "riskOutputRegister",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "riskAndFeeSigner",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "feeStateAcct",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "riskStateAcct",
          "isMut": true,
          "isSigner": false
        }
      ],
      "args": [
        {
          "name": "params",
          "type": {
            "defined": "LockCollateralParams"
          }
        }
      ]
    },
    {
      "name": "initializePrintTrade",
      "accounts": [
        {
          "name": "user",
          "isMut": true,
          "isSigner": true
        },
        {
          "name": "creator",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "counterparty",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "operator",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "marketProductGroup",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "printTrade",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "systemProgram",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "operatorOwner",
          "isMut": false,
          "isSigner": true
        },
        {
          "name": "seed",
          "isMut": false,
          "isSigner": false
        }
      ],
      "args": [
        {
          "name": "params",
          "type": {
            "defined": "InitializePrintTradeParams"
          }
        }
      ]
    },
    {
      "name": "initializePrintTradeExecutionOutput",
      "accounts": [
        {
          "name": "payer",
          "isMut": true,
          "isSigner": true
        },
        {
          "name": "executionOutput",
          "isMut": true,
          "isSigner": true
        },
        {
          "name": "systemProgram",
          "isMut": false,
          "isSigner": false
        }
      ],
      "args": []
    },
    {
      "name": "signPrintTrade",
      "accounts": [
        {
          "name": "user",
          "isMut": true,
          "isSigner": true
        },
        {
          "name": "creator",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "counterparty",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "operator",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "marketProductGroup",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "printTrade",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "systemProgram",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "feeModelProgram",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "feeModelConfigurationAcct",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "feeOutputRegister",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "riskEngineProgram",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "riskModelConfigurationAcct",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "riskOutputRegister",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "riskAndFeeSigner",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "creatorTraderFeeStateAcct",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "creatorTraderRiskStateAcct",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "counterpartyTraderFeeStateAcct",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "counterpartyTraderRiskStateAcct",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "seed",
          "isMut": false,
          "isSigner": false
        }
      ],
      "args": [
        {
          "name": "params",
          "type": {
            "defined": "SignPrintTradeParams"
          }
        }
      ]
    },
    {
      "name": "executePrintTrade",
      "accounts": [
        {
          "name": "op",
          "isMut": true,
          "isSigner": true
        },
        {
          "name": "creator",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "counterparty",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "operator",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "marketProductGroup",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "printTrade",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "systemProgram",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "feeModelProgram",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "feeModelConfigurationAcct",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "feeOutputRegister",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "riskEngineProgram",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "riskModelConfigurationAcct",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "riskOutputRegister",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "riskAndFeeSigner",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "creatorTraderFeeStateAcct",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "creatorTraderRiskStateAcct",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "counterpartyTraderFeeStateAcct",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "counterpartyTraderRiskStateAcct",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "seed",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "executionOutput",
          "isMut": true,
          "isSigner": false
        }
      ],
      "args": []
    },
    {
      "name": "cancelPrintTrade",
      "accounts": [
        {
          "name": "user",
          "isMut": true,
          "isSigner": true
        },
        {
          "name": "creator",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "counterparty",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "operator",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "marketProductGroup",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "printTrade",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "systemProgram",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "seed",
          "isMut": false,
          "isSigner": false
        }
      ],
      "args": []
    },
    {
      "name": "closePrintTrade",
      "accounts": [
        {
          "name": "op",
          "isMut": true,
          "isSigner": true
        },
        {
          "name": "creator",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "counterparty",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "operator",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "marketProductGroup",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "printTrade",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "systemProgram",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "seed",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "creatorWallet",
          "isMut": true,
          "isSigner": false
        }
      ],
      "args": []
    },
    {
      "name": "initializeTraderRiskGroup",
      "accounts": [
        {
          "name": "owner",
          "isMut": true,
          "isSigner": true
        },
        {
          "name": "traderRiskGroup",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "marketProductGroup",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "riskSigner",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "traderRiskStateAcct",
          "isMut": true,
          "isSigner": true
        },
        {
          "name": "traderFeeStateAcct",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "riskEngineProgram",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "feeModelConfigAcct",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "feeModelProgram",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "systemProgram",
          "isMut": false,
          "isSigner": false
        }
      ],
      "args": []
    },
    {
      "name": "closeTraderRiskGroup",
      "accounts": [
        {
          "name": "riskEngineProgram",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "riskSigner",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "owner",
          "isMut": true,
          "isSigner": true
        },
        {
          "name": "traderRiskGroup",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "marketProductGroup",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "traderRiskStateAcct",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "receiver",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "systemProgram",
          "isMut": false,
          "isSigner": false
        }
      ],
      "args": []
    },
    {
      "name": "newOrder",
      "accounts": [
        {
          "name": "user",
          "isMut": true,
          "isSigner": true
        },
        {
          "name": "traderRiskGroup",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "marketProductGroup",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "product",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "aaobProgram",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "orderbook",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "marketSigner",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "eventQueue",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "bids",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "asks",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "systemProgram",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "feeModelProgram",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "feeModelConfigurationAcct",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "traderFeeStateAcct",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "feeOutputRegister",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "riskEngineProgram",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "riskModelConfigurationAcct",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "riskOutputRegister",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "traderRiskStateAcct",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "riskAndFeeSigner",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "referrerTrg",
          "isMut": true,
          "isSigner": false,
          "docs": [
            "referrer_trg receives a programmatic percentage of taker fees",
            "sdks route this back to the user's trg",
            "frontends will want to route this to their own trg"
          ]
        }
      ],
      "args": [
        {
          "name": "params",
          "type": {
            "defined": "NewOrderParams"
          }
        }
      ]
    },
    {
      "name": "clearOpenOrders",
      "accounts": [
        {
          "name": "authority",
          "isMut": true,
          "isSigner": true
        },
        {
          "name": "marketProductGroup",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "traderRiskGroup",
          "isMut": true,
          "isSigner": false
        }
      ],
      "args": [
        {
          "name": "params",
          "type": {
            "defined": "ClearOpenOrdersParams"
          }
        }
      ]
    },
    {
      "name": "reinitializeTraderPositions",
      "accounts": [
        {
          "name": "authority",
          "isMut": true,
          "isSigner": true
        },
        {
          "name": "marketProductGroup",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "traderRiskGroup",
          "isMut": true,
          "isSigner": false
        }
      ],
      "args": []
    },
    {
      "name": "setNumRiskStateAccounts",
      "accounts": [
        {
          "name": "authority",
          "isMut": true,
          "isSigner": true
        },
        {
          "name": "marketProductGroup",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "product",
          "isMut": false,
          "isSigner": false
        }
      ],
      "args": [
        {
          "name": "params",
          "type": {
            "defined": "SetNumRiskStateAccountsParams"
          }
        }
      ]
    },
    {
      "name": "updateVarianceCache",
      "accounts": [
        {
          "name": "payer",
          "isMut": true,
          "isSigner": true
        },
        {
          "name": "traderRiskGroup",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "marketProductGroup",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "systemProgram",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "riskEngineProgram",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "riskModelConfigurationAcct",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "riskOutputRegister",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "traderRiskStateAcct",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "riskAndFeeSigner",
          "isMut": false,
          "isSigner": false
        }
      ],
      "args": []
    },
    {
      "name": "consumeOrderbookEvents",
      "accounts": [
        {
          "name": "aaobProgram",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "marketProductGroup",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "product",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "marketSigner",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "orderbook",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "eventQueue",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "rewardTarget",
          "isMut": true,
          "isSigner": true
        },
        {
          "name": "feeModelProgram",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "feeModelConfigurationAcct",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "feeOutputRegister",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "riskAndFeeSigner",
          "isMut": false,
          "isSigner": false
        }
      ],
      "args": [
        {
          "name": "params",
          "type": {
            "defined": "ConsumeOrderbookEventsParams"
          }
        }
      ]
    },
    {
      "name": "cancelOrder",
      "accounts": [
        {
          "name": "user",
          "isMut": false,
          "isSigner": true
        },
        {
          "name": "traderRiskGroup",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "marketProductGroup",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "product",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "aaobProgram",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "orderbook",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "marketSigner",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "eventQueue",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "bids",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "asks",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "riskEngineProgram",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "riskModelConfigurationAcct",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "riskOutputRegister",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "traderRiskStateAcct",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "riskSigner",
          "isMut": false,
          "isSigner": false
        }
      ],
      "args": [
        {
          "name": "params",
          "type": {
            "defined": "CancelOrderParams"
          }
        }
      ]
    },
    {
      "name": "depositFunds",
      "accounts": [
        {
          "name": "tokenProgram",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "user",
          "isMut": false,
          "isSigner": true
        },
        {
          "name": "userTokenAccount",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "traderRiskGroup",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "marketProductGroup",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "marketProductGroupVault",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "capitalLimits",
          "isMut": false,
          "isSigner": false
        }
      ],
      "args": [
        {
          "name": "params",
          "type": {
            "defined": "DepositFundsParams"
          }
        }
      ]
    },
    {
      "name": "withdrawFunds",
      "accounts": [
        {
          "name": "tokenProgram",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "user",
          "isMut": false,
          "isSigner": true
        },
        {
          "name": "userTokenAccount",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "traderRiskGroup",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "marketProductGroup",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "marketProductGroupVault",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "riskEngineProgram",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "riskModelConfigurationAcct",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "riskOutputRegister",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "traderRiskStateAcct",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "riskSigner",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "capitalLimits",
          "isMut": false,
          "isSigner": false
        }
      ],
      "args": [
        {
          "name": "params",
          "type": {
            "defined": "WithdrawFundsParams"
          }
        }
      ]
    },
    {
      "name": "updateProductFunding",
      "accounts": [
        {
          "name": "marketProductGroup",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "product",
          "isMut": false,
          "isSigner": true
        }
      ],
      "args": [
        {
          "name": "params",
          "type": {
            "defined": "UpdateProductFundingParams"
          }
        }
      ]
    },
    {
      "name": "updateProductMarkPriceConfig",
      "accounts": [
        {
          "name": "authority",
          "isMut": false,
          "isSigner": true
        },
        {
          "name": "marketProductGroup",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "product",
          "isMut": false,
          "isSigner": false
        }
      ],
      "args": [
        {
          "name": "params",
          "type": {
            "defined": "UpdateProductMarkPriceConfigParams"
          }
        }
      ]
    },
    {
      "name": "transferFullPosition",
      "accounts": [
        {
          "name": "liquidator",
          "isMut": false,
          "isSigner": true
        },
        {
          "name": "marketProductGroup",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "liquidateeRiskGroup",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "liquidatorRiskGroup",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "riskEngineProgram",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "riskModelConfigurationAcct",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "riskOutputRegister",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "liquidatorRiskStateAccountInfo",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "liquidateeRiskStateAccountInfo",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "riskSigner",
          "isMut": false,
          "isSigner": false
        }
      ],
      "args": []
    },
    {
      "name": "initializeCombo",
      "accounts": [
        {
          "name": "authority",
          "isMut": false,
          "isSigner": true
        },
        {
          "name": "marketProductGroup",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "orderbook",
          "isMut": false,
          "isSigner": false
        }
      ],
      "args": [
        {
          "name": "params",
          "type": {
            "defined": "InitializeComboParams"
          }
        }
      ]
    },
    {
      "name": "updateTraderFunding",
      "accounts": [
        {
          "name": "marketProductGroup",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "traderRiskGroup",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "riskEngineProgram",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "riskOutputRegister",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "traderRiskStateAccountInfo",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "riskModelConfigurationAcct",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "riskSigner",
          "isMut": false,
          "isSigner": false
        }
      ],
      "args": []
    },
    {
      "name": "clearExpiredOrderbook",
      "accounts": [
        {
          "name": "marketProductGroup",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "product",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "aaobProgram",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "orderbook",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "marketSigner",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "eventQueue",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "bids",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "asks",
          "isMut": true,
          "isSigner": false
        }
      ],
      "args": [
        {
          "name": "params",
          "type": {
            "defined": "ClearExpiredOrderbookParams"
          }
        }
      ]
    },
    {
      "name": "popEvents",
      "accounts": [
        {
          "name": "authority",
          "isMut": false,
          "isSigner": true
        },
        {
          "name": "marketProductGroup",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "product",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "aaobProgram",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "marketSigner",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "orderbook",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "eventQueue",
          "isMut": true,
          "isSigner": false
        }
      ],
      "args": [
        {
          "name": "params",
          "type": {
            "defined": "PopEventsParams"
          }
        }
      ]
    },
    {
      "name": "sweepFees",
      "accounts": [
        {
          "name": "marketProductGroup",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "feeCollector",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "stakingFeeCollector",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "marketProductGroupVault",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "feeCollectorTokenAccount",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "stakingFeeCollectorTokenAccount",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "tokenProgram",
          "isMut": false,
          "isSigner": false
        }
      ],
      "args": []
    },
    {
      "name": "chooseSuccessor",
      "accounts": [
        {
          "name": "marketProductGroup",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "authority",
          "isMut": false,
          "isSigner": true
        },
        {
          "name": "newAuthority",
          "isMut": false,
          "isSigner": false
        }
      ],
      "args": []
    },
    {
      "name": "claimAuthority",
      "accounts": [
        {
          "name": "marketProductGroup",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "newAuthority",
          "isMut": false,
          "isSigner": true
        }
      ],
      "args": []
    },
    {
      "name": "setupCapitalLimits",
      "accounts": [
        {
          "name": "authority",
          "isMut": true,
          "isSigner": true
        },
        {
          "name": "marketProductGroup",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "capitalLimitsState",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "systemProgram",
          "isMut": false,
          "isSigner": false
        }
      ],
      "args": []
    },
    {
      "name": "updateCapitalLimits",
      "accounts": [
        {
          "name": "authority",
          "isMut": true,
          "isSigner": true
        },
        {
          "name": "marketProductGroup",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "capitalLimitsState",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "systemProgram",
          "isMut": false,
          "isSigner": false
        }
      ],
      "args": [
        {
          "name": "params",
          "type": {
            "defined": "CapitalLimitsParams"
          }
        }
      ]
    },
    {
      "name": "updateTraderRiskGroup",
      "accounts": [
        {
          "name": "authority",
          "isMut": true,
          "isSigner": true
        },
        {
          "name": "marketProductGroup",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "traderRiskGroup",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "traderFeeStateAcct",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "systemProgram",
          "isMut": false,
          "isSigner": false
        }
      ],
      "args": []
    },
    {
      "name": "updateTraderRiskGroupOwner",
      "accounts": [
        {
          "name": "owner",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "traderRiskGroup",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "newOwner",
          "isMut": false,
          "isSigner": false
        }
      ],
      "args": []
    },
    {
      "name": "disableKillswitch",
      "accounts": [
        {
          "name": "authority",
          "isMut": false,
          "isSigner": true
        },
        {
          "name": "marketProductGroup",
          "isMut": true,
          "isSigner": false
        }
      ],
      "args": []
    },
    {
      "name": "enableKillswitch",
      "accounts": [
        {
          "name": "authority",
          "isMut": false,
          "isSigner": true
        },
        {
          "name": "marketProductGroup",
          "isMut": true,
          "isSigner": false
        }
      ],
      "args": []
    }
  ],
  "accounts": [
    {
      "name": "CapitalLimits",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "depositLimit",
            "type": {
              "defined": "Fractional"
            }
          },
          {
            "name": "withdrawalLimit",
            "type": {
              "defined": "Fractional"
            }
          },
          {
            "name": "marketProductGroup",
            "type": "publicKey"
          },
          {
            "name": "bump",
            "type": "u8"
          }
        ]
      }
    },
    {
      "name": "MarketProductGroup",
      "docs": [
        "The highest level organizational unit of the Dex.",
        "Market product groups exist independently of each other.",
        "i.e. each trader, product etc, corresponds to exactly one market product group."
      ],
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "tag",
            "type": {
              "defined": "AccountTag"
            }
          },
          {
            "name": "name",
            "type": {
              "array": [
                "u8",
                16
              ]
            }
          },
          {
            "name": "authority",
            "type": "publicKey"
          },
          {
            "name": "successor",
            "type": "publicKey"
          },
          {
            "name": "vaultMint",
            "type": "publicKey"
          },
          {
            "name": "collectedFees",
            "type": {
              "defined": "Fractional"
            }
          },
          {
            "name": "feeCollector",
            "type": "publicKey"
          },
          {
            "name": "decimals",
            "type": "u64"
          },
          {
            "name": "riskEngineProgramId",
            "type": "publicKey"
          },
          {
            "name": "feeModelProgramId",
            "type": "publicKey"
          },
          {
            "name": "feeModelConfigurationAcct",
            "type": "publicKey"
          },
          {
            "name": "riskModelConfigurationAcct",
            "type": "publicKey"
          },
          {
            "name": "activeFlagsProducts",
            "type": {
              "defined": "Bitset"
            }
          },
          {
            "name": "ewmaWindows",
            "type": {
              "array": [
                "u64",
                4
              ]
            }
          },
          {
            "name": "marketProducts",
            "type": {
              "defined": "ProductArray"
            }
          },
          {
            "name": "vaultBump",
            "type": "u16"
          },
          {
            "name": "riskAndFeeBump",
            "type": "u16"
          },
          {
            "name": "findFeesDiscriminantLen",
            "type": "u16"
          },
          {
            "name": "validateAccountDiscriminantLen",
            "type": "u16"
          },
          {
            "name": "findFeesDiscriminant",
            "type": {
              "array": [
                "u8",
                8
              ]
            }
          },
          {
            "name": "validateAccountHealthDiscriminant",
            "type": {
              "array": [
                "u8",
                8
              ]
            }
          },
          {
            "name": "validateAccountLiquidationDiscriminant",
            "type": {
              "array": [
                "u8",
                8
              ]
            }
          },
          {
            "name": "createRiskStateAccountDiscriminant",
            "type": {
              "array": [
                "u8",
                8
              ]
            }
          },
          {
            "name": "maxMakerFeeBps",
            "type": "i16"
          },
          {
            "name": "minMakerFeeBps",
            "type": "i16"
          },
          {
            "name": "maxTakerFeeBps",
            "type": "i16"
          },
          {
            "name": "minTakerFeeBps",
            "type": "i16"
          },
          {
            "name": "feeOutputRegister",
            "type": "publicKey"
          },
          {
            "name": "riskOutputRegister",
            "type": "publicKey"
          },
          {
            "name": "sequenceNumber",
            "type": "u128"
          },
          {
            "name": "stakingFeeCollector",
            "type": "publicKey"
          },
          {
            "name": "isKilled",
            "type": "bool"
          },
          {
            "name": "createFeeStateAccountDiscriminant",
            "type": {
              "array": [
                "u8",
                8
              ]
            }
          },
          {
            "name": "addressLookupTable",
            "type": "publicKey"
          },
          {
            "name": "closeRiskStateAccountDiscriminant",
            "type": {
              "array": [
                "u8",
                8
              ]
            }
          },
          {
            "name": "closeFeeStateAccountDiscriminant",
            "type": {
              "array": [
                "u8",
                8
              ]
            }
          }
        ]
      }
    },
    {
      "name": "ProductArray",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "array",
            "type": {
              "array": [
                {
                  "defined": "Product"
                },
                256
              ]
            }
          }
        ]
      }
    },
    {
      "name": "PrintTradeProduct",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "productKey",
            "type": "publicKey"
          },
          {
            "name": "size",
            "type": {
              "defined": "Fractional"
            }
          }
        ]
      }
    },
    {
      "name": "PrintTrade",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "isInitialized",
            "type": "bool"
          },
          {
            "name": "creator",
            "type": "publicKey"
          },
          {
            "name": "counterparty",
            "type": "publicKey"
          },
          {
            "name": "seed",
            "type": "publicKey"
          },
          {
            "name": "marketProductGroup",
            "type": "publicKey"
          },
          {
            "name": "numProducts",
            "type": {
              "array": [
                "u8",
                8
              ]
            }
          },
          {
            "name": "products",
            "type": {
              "array": [
                {
                  "defined": "PrintTradeProductIndex"
                },
                6
              ]
            }
          },
          {
            "name": "price",
            "type": {
              "defined": "Fractional"
            }
          },
          {
            "name": "side",
            "type": {
              "defined": "Side"
            }
          },
          {
            "name": "operator",
            "type": "publicKey"
          },
          {
            "name": "operatorCreatorFeeProportion",
            "type": {
              "defined": "Fractional"
            }
          },
          {
            "name": "operatorCounterpartyFeeProportion",
            "type": {
              "defined": "Fractional"
            }
          },
          {
            "name": "isSigned",
            "type": "bool"
          },
          {
            "name": "isCancelled",
            "type": {
              "defined": "CancelStatus"
            }
          },
          {
            "name": "bump",
            "type": "u8"
          }
        ]
      }
    },
    {
      "name": "RiskOutputRegister",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "riskEngineOutput",
            "type": {
              "defined": "HealthResult"
            }
          }
        ]
      }
    },
    {
      "name": "TraderRiskGroup",
      "docs": [
        "State account corresponding to a trader on a given market product group"
      ],
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "tag",
            "type": {
              "defined": "AccountTag"
            }
          },
          {
            "name": "marketProductGroup",
            "type": "publicKey"
          },
          {
            "name": "owner",
            "type": "publicKey"
          },
          {
            "name": "activeProducts",
            "type": {
              "array": [
                "u8",
                128
              ]
            }
          },
          {
            "name": "totalDeposited",
            "type": {
              "defined": "Fractional"
            }
          },
          {
            "name": "totalWithdrawn",
            "type": {
              "defined": "Fractional"
            }
          },
          {
            "name": "cashBalance",
            "type": {
              "defined": "Fractional"
            }
          },
          {
            "name": "pendingCashBalance",
            "type": {
              "defined": "Fractional"
            }
          },
          {
            "name": "pendingFees",
            "type": {
              "defined": "Fractional"
            }
          },
          {
            "name": "validUntil",
            "type": "u64"
          },
          {
            "name": "makerFeeBps",
            "type": "i32"
          },
          {
            "name": "takerFeeBps",
            "type": "i32"
          },
          {
            "name": "traderPositions",
            "type": {
              "array": [
                {
                  "defined": "TraderPosition"
                },
                16
              ]
            }
          },
          {
            "name": "riskStateAccount",
            "type": "publicKey"
          },
          {
            "name": "feeStateAccount",
            "type": "publicKey"
          },
          {
            "name": "clientOrderId",
            "type": "u128"
          },
          {
            "name": "openOrders",
            "type": {
              "defined": "OpenOrders"
            }
          },
          {
            "name": "lockedCollateral",
            "type": {
              "array": [
                {
                  "defined": "LockedCollateral"
                },
                16
              ]
            }
          },
          {
            "name": "notionalMakerVolume",
            "type": {
              "defined": "Fractional"
            }
          },
          {
            "name": "notionalTakerVolume",
            "type": {
              "defined": "Fractional"
            }
          },
          {
            "name": "referredTakersNotionalVolume",
            "type": {
              "defined": "Fractional"
            }
          },
          {
            "name": "referralFees",
            "docs": [
              "referral_fees is not necessarily REFERRER_FEES_PROPORTION * referred_takers_notional_volume,",
              "because combo volume has only collects 1/8th the fees as outright volume"
            ],
            "type": {
              "defined": "Fractional"
            }
          }
        ]
      }
    },
    {
      "name": "PrintTradeExecutionOutput",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "result",
            "type": {
              "defined": "PrintTradeExecutionResult"
            }
          }
        ]
      }
    },
    {
      "name": "CapitalLimitsParams",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "depositLimit",
            "type": {
              "defined": "Fractional"
            }
          },
          {
            "name": "withdrawalLimit",
            "type": {
              "defined": "Fractional"
            }
          }
        ]
      }
    }
  ],
  "types": [
    {
      "name": "LockedCollateralProductIndex",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "productIndex",
            "type": "u64"
          },
          {
            "name": "size",
            "type": {
              "defined": "Fractional"
            }
          }
        ]
      }
    },
    {
      "name": "PrintTradeProductIndex",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "productIndex",
            "type": "u64"
          },
          {
            "name": "size",
            "type": {
              "defined": "Fractional"
            }
          }
        ]
      }
    },
    {
      "name": "ProductArray",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "array",
            "type": {
              "array": [
                {
                  "defined": "Product"
                },
                256
              ]
            }
          }
        ]
      }
    },
    {
      "name": "Side",
      "type": {
        "kind": "enum",
        "variants": [
          {
            "name": "Bid"
          },
          {
            "name": "Ask"
          }
        ]
      }
    },
    {
      "name": "Params",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "quantity",
            "type": {
              "defined": "Fractional"
            }
          }
        ]
      }
    },
    {
      "name": "CallBackInfo",
      "docs": [
        "Buffer attached to aaob events to tie owner to events"
      ],
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "userAccount",
            "type": "publicKey"
          },
          {
            "name": "openOrdersIdx",
            "type": "u64"
          },
          {
            "name": "orderNonce",
            "type": "u128"
          },
          {
            "name": "clientOrderId",
            "type": "u64"
          }
        ]
      }
    },
    {
      "name": "TraderFees",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "validUntil",
            "type": "i64"
          },
          {
            "name": "makerFeeBps",
            "type": "i32"
          },
          {
            "name": "takerFeeBps",
            "type": "i32"
          }
        ]
      }
    },
    {
      "name": "TraderFeeParams",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "side",
            "type": {
              "defined": "Side"
            }
          },
          {
            "name": "isAggressor",
            "type": "bool"
          },
          {
            "name": "matchedQuoteQty",
            "type": {
              "defined": "Fractional"
            }
          },
          {
            "name": "matchedBaseQty",
            "type": {
              "defined": "Fractional"
            }
          },
          {
            "name": "product",
            "type": "publicKey"
          }
        ]
      }
    },
    {
      "name": "PriceEwma",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "ewmaBid",
            "type": {
              "array": [
                {
                  "defined": "Fractional"
                },
                4
              ]
            }
          },
          {
            "name": "ewmaAsk",
            "type": {
              "array": [
                {
                  "defined": "Fractional"
                },
                4
              ]
            }
          },
          {
            "name": "bid",
            "type": {
              "defined": "Fractional"
            }
          },
          {
            "name": "ask",
            "type": {
              "defined": "Fractional"
            }
          },
          {
            "name": "slot",
            "type": "u64"
          },
          {
            "name": "prevBid",
            "type": {
              "defined": "Fractional"
            }
          },
          {
            "name": "prevAsk",
            "type": {
              "defined": "Fractional"
            }
          }
        ]
      }
    },
    {
      "name": "OpenOrdersMetadata",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "askQtyInBook",
            "type": {
              "defined": "Fractional"
            }
          },
          {
            "name": "bidQtyInBook",
            "type": {
              "defined": "Fractional"
            }
          },
          {
            "name": "headIndex",
            "type": "u64"
          },
          {
            "name": "numOpenOrders",
            "type": "u64"
          }
        ]
      }
    },
    {
      "name": "OpenOrders",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "freeListHead",
            "type": "u64"
          },
          {
            "name": "totalOpenOrders",
            "type": "u64"
          },
          {
            "name": "products",
            "type": {
              "array": [
                {
                  "defined": "OpenOrdersMetadata"
                },
                256
              ]
            }
          },
          {
            "name": "orders",
            "type": {
              "array": [
                {
                  "defined": "OpenOrdersNode"
                },
                1024
              ]
            }
          }
        ]
      }
    },
    {
      "name": "OpenOrdersNode",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "id",
            "type": "u128"
          },
          {
            "name": "qty",
            "type": "u64"
          },
          {
            "name": "clientId",
            "type": "u64"
          },
          {
            "name": "prev",
            "type": "u64"
          },
          {
            "name": "next",
            "type": "u64"
          }
        ]
      }
    },
    {
      "name": "Outright",
      "docs": [
        "A market product corresponding to one underlying asset"
      ],
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "metadata",
            "type": {
              "defined": "ProductMetadata"
            }
          },
          {
            "name": "numRiskStateAccounts",
            "docs": [
              "num_risk_state_accounts is the number of risk state accounts that have an untidied entry related to this product.",
              "The DEX assumes that the attached risk engine will tidy (this likely means \"remove\")",
              "risk entries related to this product during the first risk check after removing a TraderPosition."
            ],
            "type": "u64"
          },
          {
            "name": "productStatus",
            "type": {
              "defined": "ProductStatus"
            }
          },
          {
            "name": "dust",
            "type": {
              "defined": "Fractional"
            }
          },
          {
            "name": "cumFundingPerShare",
            "type": {
              "defined": "Fractional"
            }
          },
          {
            "name": "cumSocialLossPerShare",
            "type": {
              "defined": "Fractional"
            }
          },
          {
            "name": "openLongInterest",
            "type": {
              "defined": "Fractional"
            }
          },
          {
            "name": "openShortInterest",
            "type": {
              "defined": "Fractional"
            }
          },
          {
            "name": "markPriceQualifyingCumValue",
            "type": {
              "defined": "Fractional"
            }
          },
          {
            "name": "markPriceMaxQualifyingWidth",
            "type": {
              "defined": "Fractional"
            }
          },
          {
            "name": "padding",
            "type": {
              "array": [
                "u64",
                10
              ]
            }
          }
        ]
      }
    },
    {
      "name": "ProductMetadata",
      "docs": [
        "Shared fields between Outright and Combo products"
      ],
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "bump",
            "type": "u64"
          },
          {
            "name": "productKey",
            "type": "publicKey"
          },
          {
            "name": "name",
            "type": {
              "array": [
                "u8",
                16
              ]
            }
          },
          {
            "name": "orderbook",
            "type": "publicKey"
          },
          {
            "name": "tickSize",
            "type": {
              "defined": "Fractional"
            }
          },
          {
            "name": "baseDecimals",
            "type": "u64"
          },
          {
            "name": "priceOffset",
            "type": {
              "defined": "Fractional"
            }
          },
          {
            "name": "notionalTradedVolume",
            "type": {
              "defined": "Fractional"
            }
          },
          {
            "name": "prices",
            "type": {
              "defined": "PriceEwma"
            }
          }
        ]
      }
    },
    {
      "name": "Combo",
      "docs": [
        "A market product with multiple legs that are each outrights"
      ],
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "metadata",
            "type": {
              "defined": "ProductMetadata"
            }
          },
          {
            "name": "numLegs",
            "type": "u64"
          },
          {
            "name": "legsArray",
            "type": {
              "array": [
                {
                  "defined": "Leg"
                },
                4
              ]
            }
          }
        ]
      }
    },
    {
      "name": "Leg",
      "docs": [
        "One part of a combo. Each leg corresponds to an outright with the ratio determining",
        "relative weighting"
      ],
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "productIndex",
            "type": "u64"
          },
          {
            "name": "productKey",
            "type": "publicKey"
          },
          {
            "name": "ratio",
            "type": "i64"
          }
        ]
      }
    },
    {
      "name": "HealthInfo",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "health",
            "type": {
              "defined": "HealthStatus"
            }
          },
          {
            "name": "action",
            "type": {
              "defined": "ActionStatus"
            }
          }
        ]
      }
    },
    {
      "name": "LiquidationInfo",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "health",
            "type": {
              "defined": "HealthStatus"
            }
          },
          {
            "name": "action",
            "type": {
              "defined": "ActionStatus"
            }
          },
          {
            "name": "totalSocialLoss",
            "type": {
              "defined": "Fractional"
            }
          },
          {
            "name": "liquidationPrice",
            "type": {
              "defined": "Fractional"
            }
          },
          {
            "name": "socialLosses",
            "type": {
              "array": [
                {
                  "defined": "SocialLoss"
                },
                16
              ]
            }
          }
        ]
      }
    },
    {
      "name": "SocialLoss",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "productIndex",
            "type": "u64"
          },
          {
            "name": "amount",
            "type": {
              "defined": "Fractional"
            }
          }
        ]
      }
    },
    {
      "name": "OrderInfo",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "totalOrderQty",
            "type": {
              "defined": "Fractional"
            }
          },
          {
            "name": "matchedOrderQty",
            "type": {
              "defined": "Fractional"
            }
          },
          {
            "name": "orderSide",
            "type": {
              "defined": "Side"
            }
          },
          {
            "name": "orderPrice",
            "type": {
              "defined": "Fractional"
            }
          },
          {
            "name": "isCombo",
            "type": "bool"
          },
          {
            "name": "productIndex",
            "type": "u64"
          },
          {
            "name": "operationType",
            "type": {
              "defined": "OperationType"
            }
          },
          {
            "name": "oldAskQtyInBook",
            "type": {
              "defined": "Fractional"
            }
          },
          {
            "name": "oldBidQtyInBook",
            "type": {
              "defined": "Fractional"
            }
          }
        ]
      }
    },
    {
      "name": "TraderPosition",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "tag",
            "type": {
              "defined": "AccountTag"
            }
          },
          {
            "name": "productKey",
            "type": "publicKey"
          },
          {
            "name": "position",
            "type": {
              "defined": "Fractional"
            }
          },
          {
            "name": "pendingPosition",
            "type": {
              "defined": "Fractional"
            }
          },
          {
            "name": "productIndex",
            "type": "u64"
          },
          {
            "name": "lastCumFundingSnapshot",
            "type": {
              "defined": "Fractional"
            }
          },
          {
            "name": "lastSocialLossSnapshot",
            "type": {
              "defined": "Fractional"
            }
          }
        ]
      }
    },
    {
      "name": "LockedCollateral",
      "docs": [
        "there is one LockedCollateral for each product; the array is in one-to-one mapping with trader_positions"
      ],
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "tag",
            "type": {
              "defined": "AccountTag"
            }
          },
          {
            "name": "askQty",
            "type": {
              "defined": "Fractional"
            }
          },
          {
            "name": "bidQty",
            "type": {
              "defined": "Fractional"
            }
          }
        ]
      }
    },
    {
      "name": "Bitset",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "inner",
            "type": {
              "array": [
                "u128",
                2
              ]
            }
          }
        ]
      }
    },
    {
      "name": "Fractional",
      "docs": [
        "Fractional Operations"
      ],
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "m",
            "type": "i64"
          },
          {
            "name": "exp",
            "type": "u64"
          }
        ]
      }
    },
    {
      "name": "InitializeMarketProductGroupParams",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "name",
            "type": {
              "array": [
                "u8",
                16
              ]
            }
          },
          {
            "name": "validateAccountDiscriminantLen",
            "type": "u64"
          },
          {
            "name": "findFeesDiscriminantLen",
            "type": "u64"
          },
          {
            "name": "validateAccountHealthDiscriminant",
            "type": {
              "array": [
                "u8",
                8
              ]
            }
          },
          {
            "name": "validateAccountLiquidationDiscriminant",
            "type": {
              "array": [
                "u8",
                8
              ]
            }
          },
          {
            "name": "createRiskStateAccountDiscriminant",
            "type": {
              "array": [
                "u8",
                8
              ]
            }
          },
          {
            "name": "createFeeStateAccountDiscriminant",
            "type": {
              "array": [
                "u8",
                8
              ]
            }
          },
          {
            "name": "closeRiskStateAccountDiscriminant",
            "type": {
              "array": [
                "u8",
                8
              ]
            }
          },
          {
            "name": "closeFeeStateAccountDiscriminant",
            "type": {
              "array": [
                "u8",
                8
              ]
            }
          },
          {
            "name": "findFeesDiscriminant",
            "type": {
              "array": [
                "u8",
                8
              ]
            }
          },
          {
            "name": "maxMakerFeeBps",
            "type": "i16"
          },
          {
            "name": "minMakerFeeBps",
            "type": "i16"
          },
          {
            "name": "maxTakerFeeBps",
            "type": "i16"
          },
          {
            "name": "minTakerFeeBps",
            "type": "i16"
          }
        ]
      }
    },
    {
      "name": "UpdateMarketProductGroupParams",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "findFeesDiscriminantLen",
            "type": "u16"
          },
          {
            "name": "findFeesDiscriminant",
            "type": {
              "array": [
                "u8",
                8
              ]
            }
          },
          {
            "name": "createFeeStateAccountDiscriminant",
            "type": {
              "array": [
                "u8",
                8
              ]
            }
          },
          {
            "name": "closeFeeStateAccountDiscriminant",
            "type": {
              "array": [
                "u8",
                8
              ]
            }
          },
          {
            "name": "closeRiskStateAccountDiscriminant",
            "type": {
              "array": [
                "u8",
                8
              ]
            }
          }
        ]
      }
    },
    {
      "name": "InitializePrintTradeParams",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "numProducts",
            "type": "u64"
          },
          {
            "name": "products",
            "type": {
              "array": [
                {
                  "defined": "PrintTradeProductIndex"
                },
                6
              ]
            }
          },
          {
            "name": "price",
            "type": {
              "defined": "Fractional"
            }
          },
          {
            "name": "side",
            "type": {
              "defined": "Side"
            }
          },
          {
            "name": "operatorCreatorFeeProportion",
            "type": {
              "defined": "Fractional"
            }
          },
          {
            "name": "operatorCounterpartyFeeProportion",
            "type": {
              "defined": "Fractional"
            }
          }
        ]
      }
    },
    {
      "name": "LockCollateralParams",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "numProducts",
            "type": "u64"
          },
          {
            "name": "products",
            "type": {
              "array": [
                {
                  "defined": "LockedCollateralProductIndex"
                },
                6
              ]
            }
          }
        ]
      }
    },
    {
      "name": "SignPrintTradeParams",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "numProducts",
            "type": "u64"
          },
          {
            "name": "products",
            "type": {
              "array": [
                {
                  "defined": "PrintTradeProductIndex"
                },
                6
              ]
            }
          },
          {
            "name": "price",
            "type": {
              "defined": "Fractional"
            }
          },
          {
            "name": "side",
            "type": {
              "defined": "Side"
            }
          },
          {
            "name": "operatorCreatorFeeProportion",
            "type": {
              "defined": "Fractional"
            }
          },
          {
            "name": "operatorCounterpartyFeeProportion",
            "type": {
              "defined": "Fractional"
            }
          }
        ]
      }
    },
    {
      "name": "InitializeMarketProductParams",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "name",
            "type": {
              "array": [
                "u8",
                16
              ]
            }
          },
          {
            "name": "tickSize",
            "type": {
              "defined": "Fractional"
            }
          },
          {
            "name": "baseDecimals",
            "type": "u64"
          },
          {
            "name": "priceOffset",
            "type": {
              "defined": "Fractional"
            }
          }
        ]
      }
    },
    {
      "name": "NewOrderParams",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "side",
            "docs": [
              "The order's side (Bid or Ask)"
            ],
            "type": {
              "defined": "Side"
            }
          },
          {
            "name": "maxBaseQty",
            "docs": [
              "The max quantity of base token to match and post"
            ],
            "type": {
              "defined": "Fractional"
            }
          },
          {
            "name": "orderType",
            "docs": [
              "The order type (supported types include Limit, FOK, IOC and PostOnly)"
            ],
            "type": {
              "defined": "OrderType"
            }
          },
          {
            "name": "matchLimit",
            "docs": [
              "The maximum number of orders to be matched against.",
              "Setting this number too high can sometimes lead to excessive resource consumption which can cause a failure."
            ],
            "type": "u64"
          },
          {
            "name": "limitPrice",
            "docs": [
              "The order's limit price in ticks"
            ],
            "type": {
              "defined": "Fractional"
            }
          },
          {
            "name": "referrerFeeBps",
            "docs": [
              "In addition to taker fees; routed to referrer_trg; can be zero",
              "Should be used like this: 3bps -> use the value Fractional{ m: 3, exp: 4 }",
              "Min: 0; Max: 100bps."
            ],
            "type": {
              "defined": "Fractional"
            }
          },
          {
            "name": "clientOrderId",
            "docs": [
              "Order id that can be specified by client. Can be arbitrary u64. Defaults to the value 0."
            ],
            "type": "u64"
          }
        ]
      }
    },
    {
      "name": "ClearOpenOrdersParams",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "productIndex",
            "type": "u64"
          }
        ]
      }
    },
    {
      "name": "SetNumRiskStateAccountsParams",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "numRiskStateAccounts",
            "type": "u64"
          }
        ]
      }
    },
    {
      "name": "ConsumeOrderbookEventsParams",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "maxIterations",
            "docs": [
              "The maximum number of events to consume"
            ],
            "type": "u64"
          }
        ]
      }
    },
    {
      "name": "CancelOrderParams",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "orderId",
            "docs": [
              "The order_id of the order to cancel. Redundancy is used here to avoid having to iterate over all",
              "open orders on chain. If order_id == 0, then client_order_id is used."
            ],
            "type": "u128"
          },
          {
            "name": "noErr",
            "docs": [
              "do not fail when order is not found"
            ],
            "type": "bool"
          },
          {
            "name": "clientOrderId",
            "docs": [
              "The client_order_id of the order to cancel. Used when order_id == 0."
            ],
            "type": "u64"
          }
        ]
      }
    },
    {
      "name": "DepositFundsParams",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "quantity",
            "type": {
              "defined": "Fractional"
            }
          }
        ]
      }
    },
    {
      "name": "WithdrawFundsParams",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "quantity",
            "type": {
              "defined": "Fractional"
            }
          }
        ]
      }
    },
    {
      "name": "UpdateProductFundingParams",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "amount",
            "type": {
              "defined": "Fractional"
            }
          },
          {
            "name": "newProductStatus",
            "type": {
              "defined": "ProductStatus"
            }
          }
        ]
      }
    },
    {
      "name": "UpdateProductMarkPriceConfigParams",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "markPriceQualifyingCumValue",
            "type": {
              "defined": "Fractional"
            }
          },
          {
            "name": "markPriceMaxQualifyingWidth",
            "type": {
              "defined": "Fractional"
            }
          }
        ]
      }
    },
    {
      "name": "InitializeComboParams",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "name",
            "type": {
              "array": [
                "u8",
                16
              ]
            }
          },
          {
            "name": "tickSize",
            "type": {
              "defined": "Fractional"
            }
          },
          {
            "name": "priceOffset",
            "type": {
              "defined": "Fractional"
            }
          },
          {
            "name": "baseDecimals",
            "type": "u64"
          },
          {
            "name": "ratios",
            "type": {
              "vec": "i8"
            }
          }
        ]
      }
    },
    {
      "name": "PopEventsParams",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "numEventsToPop",
            "type": "u64"
          }
        ]
      }
    },
    {
      "name": "ClearExpiredOrderbookParams",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "numOrdersToCancel",
            "type": "u8"
          }
        ]
      }
    },
    {
      "name": "DomainOrProgramError",
      "type": {
        "kind": "enum",
        "variants": [
          {
            "name": "DexErr",
            "fields": [
              {
                "defined": "DexError"
              }
            ]
          },
          {
            "name": "UtilErr",
            "fields": [
              {
                "defined": "UtilError"
              }
            ]
          },
          {
            "name": "ProgramErr",
            "fields": [
              {
                "name": "msg",
                "type": "string"
              }
            ]
          },
          {
            "name": "Other",
            "fields": [
              {
                "name": "code",
                "type": "u32"
              },
              {
                "name": "msg",
                "type": "string"
              }
            ]
          }
        ]
      }
    },
    {
      "name": "UtilError",
      "type": {
        "kind": "enum",
        "variants": [
          {
            "name": "AccountAlreadyInitialized"
          },
          {
            "name": "AccountUninitialized"
          },
          {
            "name": "DuplicateProductKey"
          },
          {
            "name": "PublicKeyMismatch"
          },
          {
            "name": "AssertionError"
          },
          {
            "name": "InvalidMintAuthority"
          },
          {
            "name": "IncorrectOwner"
          },
          {
            "name": "PublicKeysShouldBeUnique"
          },
          {
            "name": "NotRentExempt"
          },
          {
            "name": "NumericalOverflow"
          },
          {
            "name": "RoundError"
          },
          {
            "name": "DivisionbyZero"
          },
          {
            "name": "InvalidReturnValue"
          },
          {
            "name": "SqrtRootError"
          },
          {
            "name": "ZeroPriceError"
          },
          {
            "name": "ZeroQuantityError"
          },
          {
            "name": "SerializeError"
          },
          {
            "name": "DeserializeError"
          },
          {
            "name": "InvalidBitsetIndex"
          },
          {
            "name": "PushToFullBitvec"
          },
          {
            "name": "U8MaxNotAllowedInBitvec"
          }
        ]
      }
    },
    {
      "name": "DexError",
      "type": {
        "kind": "enum",
        "variants": [
          {
            "name": "ContractIsExpired"
          },
          {
            "name": "ContractIsNotExpired"
          },
          {
            "name": "InvalidSystemProgramAccount"
          },
          {
            "name": "InvalidAobProgramAccount"
          },
          {
            "name": "InvalidStateAccountOwner"
          },
          {
            "name": "InvalidOrderIndex"
          },
          {
            "name": "UserAccountFull"
          },
          {
            "name": "TransactionAborted"
          },
          {
            "name": "MissingUserAccount"
          },
          {
            "name": "OrderNotFound"
          },
          {
            "name": "NoOp"
          },
          {
            "name": "OutofFunds"
          },
          {
            "name": "UserAccountStillActive"
          },
          {
            "name": "MarketStillActive"
          },
          {
            "name": "InvalidMarketSignerAccount"
          },
          {
            "name": "InvalidOrderbookAccount"
          },
          {
            "name": "InvalidMarketAdminAccount"
          },
          {
            "name": "InvalidBaseVaultAccount"
          },
          {
            "name": "InvalidQuoteVaultAccount"
          },
          {
            "name": "FullMarketProductGroup"
          },
          {
            "name": "MissingMarketProduct"
          },
          {
            "name": "InvalidWithdrawalAmount"
          },
          {
            "name": "InvalidTakerTrader"
          },
          {
            "name": "FundsError"
          },
          {
            "name": "InactiveProductError"
          },
          {
            "name": "TooManyOpenOrdersError"
          },
          {
            "name": "NoMoreOpenOrdersError"
          },
          {
            "name": "NonZeroPriceTickExponentError"
          },
          {
            "name": "DuplicateProductNameError"
          },
          {
            "name": "InvalidRiskResponseError"
          },
          {
            "name": "InvalidAccountHealthError"
          },
          {
            "name": "OrderbookIsEmptyError"
          },
          {
            "name": "CombosNotRemoved"
          },
          {
            "name": "AccountNotLiquidable"
          },
          {
            "name": "FundingPrecisionError"
          },
          {
            "name": "ProductDecimalPrecisionError"
          },
          {
            "name": "ProductNotOutright"
          },
          {
            "name": "ProductNotCombo"
          },
          {
            "name": "InvalidSocialLossCalculation"
          },
          {
            "name": "ProductIndexMismatch"
          },
          {
            "name": "InvalidOrderID"
          },
          {
            "name": "InvalidBytesForZeroCopyDeserialization"
          },
          {
            "name": "IncorrectPrintTradeSize"
          },
          {
            "name": "IncorrectPrintTradePrice"
          },
          {
            "name": "IncorrectPrintTradeSide"
          },
          {
            "name": "IncorrectPrintTradeOperatorCreatorFees"
          },
          {
            "name": "IncorrectPrintTradeOperatorCounterpartyFees"
          },
          {
            "name": "InvalidPrintTradeOperatorFees"
          },
          {
            "name": "DepositLimitExceeded"
          },
          {
            "name": "WithdrawLimitExceeded"
          },
          {
            "name": "NegativeDepositLimit"
          },
          {
            "name": "NegativeWithdrawLimit"
          },
          {
            "name": "DepositDeniedInsufficientBalanceOnWhitelistAtaToken"
          },
          {
            "name": "DepositDeclinedUnfrozenWhitelistAtaToken"
          },
          {
            "name": "DepositDeclinedNonExistentWhitelistAtaTokenOnTraderRiskGroup"
          },
          {
            "name": "InvalidProductStatusInUpdateFunding"
          },
          {
            "name": "ContractIsNotExpiring"
          },
          {
            "name": "ContractHasNonZeroOpenInterest"
          },
          {
            "name": "ContractHasNonZeroOpenInterestOrRiskStateAccounts"
          },
          {
            "name": "ContractIsActive"
          },
          {
            "name": "FailedToGetOrderQuantity"
          },
          {
            "name": "SelfTradeBehaviorDecrementTakeIsDisallowed"
          },
          {
            "name": "PriceBandViolation"
          },
          {
            "name": "UnexpectedImbalancedOpenInterest"
          },
          {
            "name": "MaximumOpenInterestExceeded"
          },
          {
            "name": "MarketProductGroupKillswitchIsOn"
          },
          {
            "name": "InvalidFutureExpiry"
          },
          {
            "name": "MaxReferrerFeeBpsExceeded"
          },
          {
            "name": "PrintTradeOperatorDidNotSign"
          },
          {
            "name": "PrintTradeInvalidProductsLength"
          },
          {
            "name": "ContractIsNotActive"
          },
          {
            "name": "PrintTradeInvalidNumProducts"
          },
          {
            "name": "PrintTradeProductMismatch"
          },
          {
            "name": "InsufficientLockedCollateral"
          },
          {
            "name": "OracleNotWhitelisted"
          }
        ]
      }
    },
    {
      "name": "AccountTag",
      "type": {
        "kind": "enum",
        "variants": [
          {
            "name": "Uninitialized"
          },
          {
            "name": "MarketProductGroup"
          },
          {
            "name": "TraderRiskGroup"
          },
          {
            "name": "TraderPosition"
          },
          {
            "name": "MarketProductGroupWithCombos"
          },
          {
            "name": "ComboGroup"
          },
          {
            "name": "Combo"
          },
          {
            "name": "RiskProfile"
          },
          {
            "name": "LockedCollateral"
          }
        ]
      }
    },
    {
      "name": "ProductStatus",
      "type": {
        "kind": "enum",
        "variants": [
          {
            "name": "Uninitialized"
          },
          {
            "name": "Initialized"
          },
          {
            "name": "Expired"
          },
          {
            "name": "Expiring"
          }
        ]
      }
    },
    {
      "name": "OrderType",
      "type": {
        "kind": "enum",
        "variants": [
          {
            "name": "Limit"
          },
          {
            "name": "ImmediateOrCancel"
          },
          {
            "name": "FillOrKill"
          },
          {
            "name": "PostOnly"
          }
        ]
      }
    },
    {
      "name": "CancelStatus",
      "type": {
        "kind": "enum",
        "variants": [
          {
            "name": "Active"
          },
          {
            "name": "CreatorCancelled"
          },
          {
            "name": "CounterpartyCancelled"
          }
        ]
      }
    },
    {
      "name": "Product",
      "docs": [
        "Unify Outright and Combo"
      ],
      "type": {
        "kind": "enum",
        "variants": [
          {
            "name": "Outright",
            "fields": [
              {
                "name": "outright",
                "type": {
                  "defined": "Outright"
                }
              }
            ]
          },
          {
            "name": "Combo",
            "fields": [
              {
                "name": "combo",
                "type": {
                  "defined": "Combo"
                }
              }
            ]
          }
        ]
      }
    },
    {
      "name": "OperationType",
      "type": {
        "kind": "enum",
        "variants": [
          {
            "name": "NewOrder"
          },
          {
            "name": "CancelOrder"
          },
          {
            "name": "CheckHealth"
          },
          {
            "name": "PositionTransfer"
          },
          {
            "name": "ConsumeEvents"
          },
          {
            "name": "CheckWithdrawalHealth"
          },
          {
            "name": "LockCollateral"
          },
          {
            "name": "SignPrinTrade"
          }
        ]
      }
    },
    {
      "name": "HealthResult",
      "type": {
        "kind": "enum",
        "variants": [
          {
            "name": "Health",
            "fields": [
              {
                "name": "health_info",
                "type": {
                  "defined": "HealthInfo"
                }
              }
            ]
          },
          {
            "name": "Liquidation",
            "fields": [
              {
                "name": "liquidation_info",
                "type": {
                  "defined": "LiquidationInfo"
                }
              }
            ]
          }
        ]
      }
    },
    {
      "name": "HealthStatus",
      "type": {
        "kind": "enum",
        "variants": [
          {
            "name": "Healthy"
          },
          {
            "name": "Unhealthy"
          },
          {
            "name": "Liquidatable"
          },
          {
            "name": "NotLiquidatable"
          }
        ]
      }
    },
    {
      "name": "ActionStatus",
      "type": {
        "kind": "enum",
        "variants": [
          {
            "name": "Approved"
          },
          {
            "name": "NotApproved"
          }
        ]
      }
    },
    {
      "name": "PrintTradeExecutionResult",
      "type": {
        "kind": "enum",
        "variants": [
          {
            "name": "CounterpartyHasntSigned"
          },
          {
            "name": "CreatorCancelled"
          },
          {
            "name": "CounterpartyCancelled"
          },
          {
            "name": "CreatorNotEnoughLockedCollateral"
          },
          {
            "name": "CounterpartyNotEnoughLockedCollateral"
          },
          {
            "name": "Success"
          }
        ]
      }
    }
  ],
  "events": [
    {
      "name": "DexOrderSummary",
      "fields": [
        {
          "name": "postedOrderId",
          "type": {
            "option": "u128"
          },
          "index": false
        },
        {
          "name": "totalBaseQty",
          "type": "u64",
          "index": false
        },
        {
          "name": "totalQuoteQty",
          "type": "u64",
          "index": false
        },
        {
          "name": "totalBaseQtyPosted",
          "type": "u64",
          "index": false
        }
      ]
    }
  ]
}