{"version":3,"file":"createPrintTradeRfq.mjs","sources":["../../../../../src/plugins/rfqModule/operations/createPrintTradeRfq.ts"],"sourcesContent":["import {\n  createCreateRfqInstruction,\n  createValidateRfqByPrintTradeProviderInstruction,\n} from '@convergence-rfq/rfq';\nimport { Keypair, PublicKey, Transaction } from '@solana/web3.js';\nimport * as anchor from '@coral-xyz/anchor';\n\nimport { BN } from 'bn.js';\nimport { SendAndConfirmTransactionResponse } from '../../rpcModule';\nimport {\n  assertPrintTradeRfq,\n  FixedSize,\n  PrintTradeRfq,\n  toSolitaFixedSize,\n} from '../models';\nimport {\n  calculateExpectedLegsHash,\n  calculateExpectedLegsSize,\n  legsToBaseAssetAccounts,\n} from '../helpers';\nimport {\n  TransactionBuilder,\n  TransactionBuilderOptions,\n} from '../../../utils/TransactionBuilder';\nimport {\n  makeConfirmOptionsFinalizedOnMainnet,\n  Operation,\n  OperationHandler,\n  OperationScope,\n  useOperation,\n  Signer,\n} from '../../../types';\nimport { Convergence } from '../../../Convergence';\nimport { OrderType, toSolitaOrderType } from '../models/OrderType';\nimport { finalizeRfqConstructionBuilder } from './finalizeRfqConstruction';\nimport {\n  PrintTrade,\n  serializePrintTradeAsSolitaLeg,\n  printTradeToSolitaLeg,\n  printTradetoSolitaQuote,\n  prependWithProviderProgram,\n} from '@/plugins/printTradeModule';\nimport { createWhitelistBuilder } from '@/plugins/whitelistModule';\n\nconst Key = 'CreatePrintTradeRfqOperation' as const;\n\nexport const createPrintTradeRfqOperation =\n  useOperation<CreatePrintTradeRfqOperation>(Key);\n\n/**\n * @group Operations\n * @category Types\n */\nexport type CreatePrintTradeRfqOperation = Operation<\n  typeof Key,\n  CreatePrintTradeRfqInput,\n  CreatePrintTradeRfqOutput\n>;\n\n/**\n * @group Operations\n * @category Inputs\n */\nexport type CreatePrintTradeRfqInput = {\n  /**\n   * The taker of the Rfq to create.\n   *\n   * @defaultValue `convergence.identity().publicKey`\n   */\n  taker?: Signer;\n\n  printTrade: PrintTrade;\n\n  /** The type of order. */\n  orderType: OrderType;\n\n  /**\n   * The type of the Rfq, specifying whether we fix the number of\n   * base assets to be exchanged, the number of quote assets,\n   * or neither.\n   */\n  fixedSize: FixedSize;\n\n  /**\n   * Active window (in seconds).\n   */\n  activeWindow: number;\n\n  /**\n   * Settling window (in seconds).\n   */\n  settlingWindow: number;\n\n  /** Optional counterparties PubkeyList to create a whitelist. */\n  counterParties?: PublicKey[];\n};\n\n/**\n * @group Operations\n * @category Outputs\n */\nexport type CreatePrintTradeRfqOutput = {\n  /** The blockchain response from sending and confirming the transaction. */\n  response: SendAndConfirmTransactionResponse;\n\n  /** The newly created Rfq. */\n  rfq: PrintTradeRfq;\n};\n\n/**\n * @group Operations\n * @category Handlers\n */\nexport const createPrintTradeRfqOperationHandler: OperationHandler<CreatePrintTradeRfqOperation> =\n  {\n    handle: async (\n      operation: CreatePrintTradeRfqOperation,\n      convergence: Convergence,\n      scope: OperationScope\n    ) => {\n      const {\n        taker = convergence.identity(),\n        orderType,\n        printTrade,\n        fixedSize,\n        activeWindow,\n        settlingWindow,\n        counterParties = [],\n      } = operation.input;\n      const recentTimestamp = new BN(Math.floor(Date.now() / 1_000));\n      const serializedLegs = printTrade\n        .getLegs()\n        .map((leg) => serializePrintTradeAsSolitaLeg(leg));\n      const expectedLegsHash = calculateExpectedLegsHash(serializedLegs);\n      let createWhitelistTxBuilder: TransactionBuilder | null = null;\n      let whitelistAccount = null;\n      if (counterParties.length > 0) {\n        whitelistAccount = Keypair.generate();\n        createWhitelistTxBuilder = await createWhitelistBuilder(\n          convergence,\n          {\n            creator: taker.publicKey,\n            whitelist: counterParties,\n            whitelistKeypair: whitelistAccount,\n          },\n          scope\n        );\n      }\n      const rfqPda = convergence\n        .rfqs()\n        .pdas()\n        .rfq({\n          taker: taker.publicKey,\n          legsHash: Buffer.from(expectedLegsHash),\n          printTradeProvider: printTrade.getPrintTradeProviderProgramId(),\n          orderType,\n          quoteAsset: printTradetoSolitaQuote(printTrade.getQuote()),\n          fixedSize,\n          activeWindow,\n          settlingWindow,\n          recentTimestamp,\n        });\n\n      const createPrintTradeRfqBuilder =\n        await createPrintTradeFullFlowRfqBuilder(\n          convergence,\n          {\n            ...operation.input,\n            rfq: rfqPda,\n            fixedSize,\n            activeWindow,\n            settlingWindow,\n            expectedLegsHash,\n            recentTimestamp,\n            whitelistAccount: whitelistAccount\n              ? whitelistAccount.publicKey\n              : null,\n          },\n          scope\n        );\n      scope.throwIfCanceled();\n\n      const confirmOptions = makeConfirmOptionsFinalizedOnMainnet(\n        convergence,\n        scope.confirmOptions\n      );\n      const txs: Transaction[] = [];\n      const lastValidBlockHeight = await convergence.rpc().getLatestBlockhash();\n\n      if (whitelistAccount && createWhitelistTxBuilder) {\n        const createWhitelistTx =\n          createWhitelistTxBuilder.toTransaction(lastValidBlockHeight);\n        txs.push(createWhitelistTx);\n      }\n      txs.push(createPrintTradeRfqBuilder.toTransaction(lastValidBlockHeight));\n\n      const signedTxs = await convergence.identity().signAllTransactions(txs);\n      if (whitelistAccount) {\n        if (signedTxs.length === 2) {\n          const whitelistkeypairSignedCreateWhitelistTx = await convergence\n            .rpc()\n            .signTransaction(signedTxs[0], [whitelistAccount as Signer]);\n          signedTxs[0] = whitelistkeypairSignedCreateWhitelistTx;\n        }\n      }\n      let response: SendAndConfirmTransactionResponse;\n      switch (signedTxs.length) {\n        case 1:\n          response = await convergence\n            .rpc()\n            .serializeAndSendTransaction(\n              signedTxs[0],\n              lastValidBlockHeight,\n              confirmOptions\n            );\n          break;\n        case 2:\n          await convergence\n            .rpc()\n            .serializeAndSendTransaction(\n              signedTxs[0],\n              lastValidBlockHeight,\n              confirmOptions\n            );\n          response = await convergence\n            .rpc()\n            .serializeAndSendTransaction(\n              signedTxs[1],\n              lastValidBlockHeight,\n              confirmOptions\n            );\n          break;\n        default:\n          throw new Error('Unexpected number of transactions');\n      }\n\n      scope.throwIfCanceled();\n\n      const rfq = await convergence\n        .rfqs()\n        .findRfqByAddress({ address: rfqPda });\n      assertPrintTradeRfq(rfq);\n\n      return { response, rfq };\n    },\n  };\n\n/**\n * @group Transaction Builders\n * @category Inputs\n */\nexport type CreatePrintTradeRfqBuilderParams = CreatePrintTradeRfqInput & {\n  rfq: PublicKey;\n\n  expectedLegsHash: Uint8Array;\n\n  recentTimestamp: anchor.BN;\n\n  whitelistAccount: PublicKey | null;\n};\n\nexport const createPrintTradeFullFlowRfqBuilder = async (\n  convergence: Convergence,\n  params: CreatePrintTradeRfqBuilderParams,\n  options: TransactionBuilderOptions = {}\n): Promise<TransactionBuilder> => {\n  const { payer = convergence.rpc().getDefaultFeePayer() } = options;\n  const { rfq, printTrade } = params;\n\n  const createRfqBuilder = await createPrintTradeRfqBuilder(\n    convergence,\n    params,\n    options\n  );\n  const validatePrintTradeBuilder =\n    await validateRfqByPrintTradeProviderBuilder(convergence, params, options);\n  const finalizeRfqConstruction = await finalizeRfqConstructionBuilder(\n    convergence,\n    { ...params, legs: printTrade.getLegs() },\n    options\n  );\n\n  return TransactionBuilder.make()\n    .setContext({\n      rfq,\n    })\n    .setFeePayer(payer)\n    .add(createRfqBuilder, validatePrintTradeBuilder, finalizeRfqConstruction);\n};\n\n/**\n * Creates a new Rfq.\n *\n * ```ts\n * const transactionBuilder = await convergence\n *   .rfqs()\n *   .builders()\n *   .create({});\n * ```\n *\n * @group Transaction Builders\n * @category Constructors\n */\nexport const createPrintTradeRfqBuilder = async (\n  convergence: Convergence,\n  params: CreatePrintTradeRfqBuilderParams,\n  options: TransactionBuilderOptions = {}\n): Promise<TransactionBuilder> => {\n  const { programs, payer = convergence.rpc().getDefaultFeePayer() } = options;\n\n  const {\n    taker = convergence.identity(),\n    printTrade,\n    rfq,\n    orderType,\n    fixedSize,\n    activeWindow,\n    settlingWindow,\n    recentTimestamp,\n    expectedLegsHash,\n    whitelistAccount,\n  } = params;\n\n  const legs = printTrade.getLegs();\n  const solitaLegs = legs.map((leg) => printTradeToSolitaLeg(leg));\n  const quote = printTrade.getQuote();\n  const serializedLegs = legs.map((leg) => serializePrintTradeAsSolitaLeg(leg));\n  const expectedLegsSize = calculateExpectedLegsSize(serializedLegs);\n\n  const systemProgram = convergence.programs().getSystem(programs);\n  const rfqProgram = convergence.programs().getRfq(programs);\n\n  const baseAssetAccounts = legsToBaseAssetAccounts(convergence, solitaLegs);\n  let whitelistAccountToPass = rfqProgram.address;\n  if (whitelistAccount) {\n    whitelistAccountToPass = whitelistAccount;\n  }\n  return TransactionBuilder.make()\n    .setFeePayer(payer)\n    .setContext({\n      rfq,\n    })\n    .add({\n      instruction: createCreateRfqInstruction(\n        {\n          taker: taker.publicKey,\n          protocol: convergence.protocol().pdas().protocol(),\n          rfq,\n          systemProgram: systemProgram.address,\n          whitelist: whitelistAccountToPass,\n          anchorRemainingAccounts: [...baseAssetAccounts],\n        },\n        {\n          printTradeProvider: printTrade.getPrintTradeProviderProgramId(),\n          expectedLegsSize,\n          expectedLegsHash: Array.from(expectedLegsHash),\n          legs: solitaLegs,\n          orderType: toSolitaOrderType(orderType),\n          quoteAsset: printTradetoSolitaQuote(quote),\n          fixedSize: toSolitaFixedSize(fixedSize, quote.getDecimals()),\n          activeWindow,\n          settlingWindow,\n          recentTimestamp,\n        },\n        rfqProgram.address\n      ),\n      signers: [taker],\n      key: 'createRfq',\n    });\n};\n\nexport const validateRfqByPrintTradeProviderBuilder = async (\n  convergence: Convergence,\n  params: CreatePrintTradeRfqBuilderParams,\n  options: TransactionBuilderOptions = {}\n): Promise<TransactionBuilder> => {\n  const { programs, payer = convergence.rpc().getDefaultFeePayer() } = options;\n\n  const { taker = convergence.identity(), printTrade, rfq } = params;\n\n  const rfqProgram = convergence.programs().getRfq(programs);\n\n  const validationAccounts = prependWithProviderProgram(\n    printTrade,\n    await printTrade.getValidationAccounts()\n  );\n\n  return TransactionBuilder.make()\n    .setFeePayer(payer)\n    .setContext({\n      rfq,\n    })\n    .add({\n      instruction: createValidateRfqByPrintTradeProviderInstruction(\n        {\n          taker: taker.publicKey,\n          protocol: convergence.protocol().pdas().protocol(),\n          rfq,\n          anchorRemainingAccounts: validationAccounts,\n        },\n        rfqProgram.address\n      ),\n      signers: [taker],\n      key: 'validateRfqByPrintTradeProvider',\n    });\n};\n"],"names":["Key","createPrintTradeRfqOperation","useOperation","createPrintTradeRfqOperationHandler","handle","_handle","_asyncToGenerator","_regeneratorRuntime","mark","_callee","operation","convergence","scope","_operation$input","_operation$input$take","taker","orderType","printTrade","fixedSize","activeWindow","settlingWindow","_operation$input$coun","counterParties","recentTimestamp","serializedLegs","expectedLegsHash","createWhitelistTxBuilder","whitelistAccount","rfqPda","createPrintTradeRfqBuilder","confirmOptions","txs","lastValidBlockHeight","createWhitelistTx","signedTxs","whitelistkeypairSignedCreateWhitelistTx","response","rfq","wrap","_callee$","_context","prev","next","input","identity","BN","Math","floor","Date","now","getLegs","map","leg","serializePrintTradeAsSolitaLeg","calculateExpectedLegsHash","length","Keypair","generate","createWhitelistBuilder","creator","publicKey","whitelist","whitelistKeypair","sent","rfqs","pdas","legsHash","Buffer","from","printTradeProvider","getPrintTradeProviderProgramId","quoteAsset","printTradetoSolitaQuote","getQuote","createPrintTradeFullFlowRfqBuilder","_objectSpread","throwIfCanceled","makeConfirmOptionsFinalizedOnMainnet","rpc","getLatestBlockhash","toTransaction","push","signAllTransactions","signTransaction","t0","serializeAndSendTransaction","abrupt","Error","findRfqByAddress","address","assertPrintTradeRfq","stop","_x","_x2","_x3","apply","arguments","_ref","_callee2","params","options","_options$payer","payer","createRfqBuilder","validatePrintTradeBuilder","finalizeRfqConstruction","_args2","_callee2$","_context2","undefined","getDefaultFeePayer","validateRfqByPrintTradeProviderBuilder","finalizeRfqConstructionBuilder","legs","TransactionBuilder","make","setContext","setFeePayer","add","_x4","_x5","_ref2","_callee3","programs","_options$payer2","_params$taker","solitaLegs","quote","expectedLegsSize","systemProgram","rfqProgram","baseAssetAccounts","whitelistAccountToPass","_args3","_callee3$","_context3","printTradeToSolitaLeg","calculateExpectedLegsSize","getSystem","getRfq","legsToBaseAssetAccounts","instruction","createCreateRfqInstruction","protocol","anchorRemainingAccounts","_toConsumableArray","Array","toSolitaOrderType","toSolitaFixedSize","getDecimals","signers","key","_x6","_x7","_ref3","_callee4","_options$payer3","_params$taker2","validationAccounts","_args4","_callee4$","_context4","prependWithProviderProgram","t1","getValidationAccounts","t2","createValidateRfqByPrintTradeProviderInstruction","_x8","_x9"],"mappings":";;;;;;;;;;;;;;AA4CA,IAAMA,GAAG,GAAG,8BAAuC,CAAA;IAEtCC,4BAA4B,GACvCC,YAAY,CAA+BF,GAAG,EAAC;;AAEjD;AACA;AACA;AACA;;AAOA;AACA;AACA;AACA;;AAmCA;AACA;AACA;AACA;;AASA;AACA;AACA;AACA;AACO,IAAMG,mCAAmF,GAC9F;EACEC,MAAM,EAAA,YAAA;AAAA,IAAA,IAAAC,OAAA,GAAAC,iBAAA,eAAAC,mBAAA,EAAAC,CAAAA,IAAA,CAAE,SAAAC,OACNC,CAAAA,SAAuC,EACvCC,WAAwB,EACxBC,KAAqB,EAAA;MAAA,IAAAC,gBAAA,EAAAC,qBAAA,EAAAC,KAAA,EAAAC,SAAA,EAAAC,UAAA,EAAAC,SAAA,EAAAC,YAAA,EAAAC,cAAA,EAAAC,qBAAA,EAAAC,cAAA,EAAAC,eAAA,EAAAC,cAAA,EAAAC,gBAAA,EAAAC,wBAAA,EAAAC,gBAAA,EAAAC,MAAA,EAAAC,0BAAA,EAAAC,cAAA,EAAAC,GAAA,EAAAC,oBAAA,EAAAC,iBAAA,EAAAC,SAAA,EAAAC,uCAAA,EAAAC,QAAA,EAAAC,GAAA,CAAA;AAAA,MAAA,OAAA9B,mBAAA,EAAA,CAAA+B,IAAA,CAAA,SAAAC,SAAAC,QAAA,EAAA;AAAA,QAAA,OAAA,CAAA,EAAA,QAAAA,QAAA,CAAAC,IAAA,GAAAD,QAAA,CAAAE,IAAA;AAAA,UAAA,KAAA,CAAA;AAAA7B,YAAAA,gBAAA,GAUjBH,SAAS,CAACiC,KAAK,EAAA7B,qBAAA,GAAAD,gBAAA,CAPjBE,KAAK,EAALA,KAAK,GAAAD,qBAAA,KAAA,KAAA,CAAA,GAAGH,WAAW,CAACiC,QAAQ,EAAE,GAAA9B,qBAAA,EAC9BE,SAAS,GAAAH,gBAAA,CAATG,SAAS,EACTC,UAAU,GAAAJ,gBAAA,CAAVI,UAAU,EACVC,SAAS,GAAAL,gBAAA,CAATK,SAAS,EACTC,YAAY,GAAAN,gBAAA,CAAZM,YAAY,EACZC,cAAc,GAAAP,gBAAA,CAAdO,cAAc,EAAAC,qBAAA,GAAAR,gBAAA,CACdS,cAAc,EAAdA,cAAc,GAAAD,qBAAA,KAAG,KAAA,CAAA,GAAA,EAAE,GAAAA,qBAAA,CAAA;AAEfE,YAAAA,eAAe,GAAG,IAAIsB,EAAE,CAACC,IAAI,CAACC,KAAK,CAACC,IAAI,CAACC,GAAG,EAAE,GAAG,IAAK,CAAC,CAAC,CAAA;YACxDzB,cAAc,GAAGP,UAAU,CAC9BiC,OAAO,EAAE,CACTC,GAAG,CAAC,UAACC,GAAG,EAAA;cAAA,OAAKC,8BAA8B,CAACD,GAAG,CAAC,CAAA;aAAC,CAAA,CAAA;AAC9C3B,YAAAA,gBAAgB,GAAG6B,yBAAyB,CAAC9B,cAAc,CAAC,CAAA;AAC9DE,YAAAA,wBAAmD,GAAG,IAAI,CAAA;AAC1DC,YAAAA,gBAAgB,GAAG,IAAI,CAAA;AAAA,YAAA,IAAA,EACvBL,cAAc,CAACiC,MAAM,GAAG,CAAC,CAAA,EAAA;AAAAf,cAAAA,QAAA,CAAAE,IAAA,GAAA,EAAA,CAAA;AAAA,cAAA,MAAA;AAAA,aAAA;AAC3Bf,YAAAA,gBAAgB,GAAG6B,OAAO,CAACC,QAAQ,EAAE,CAAA;AAACjB,YAAAA,QAAA,CAAAE,IAAA,GAAA,EAAA,CAAA;YAAA,OACLgB,sBAAsB,CACrD/C,WAAW,EACX;cACEgD,OAAO,EAAE5C,KAAK,CAAC6C,SAAS;AACxBC,cAAAA,SAAS,EAAEvC,cAAc;AACzBwC,cAAAA,gBAAgB,EAAEnC,gBAAAA;aACnB,EACDf,KACF,CAAC,CAAA;AAAA,UAAA,KAAA,EAAA;YARDc,wBAAwB,GAAAc,QAAA,CAAAuB,IAAA,CAAA;AAAA,UAAA,KAAA,EAAA;AAUpBnC,YAAAA,MAAM,GAAGjB,WAAW,CACvBqD,IAAI,EAAE,CACNC,IAAI,EAAE,CACN5B,GAAG,CAAC;cACHtB,KAAK,EAAEA,KAAK,CAAC6C,SAAS;AACtBM,cAAAA,QAAQ,EAAEC,MAAM,CAACC,IAAI,CAAC3C,gBAAgB,CAAC;AACvC4C,cAAAA,kBAAkB,EAAEpD,UAAU,CAACqD,8BAA8B,EAAE;AAC/DtD,cAAAA,SAAS,EAATA,SAAS;cACTuD,UAAU,EAAEC,uBAAuB,CAACvD,UAAU,CAACwD,QAAQ,EAAE,CAAC;AAC1DvD,cAAAA,SAAS,EAATA,SAAS;AACTC,cAAAA,YAAY,EAAZA,YAAY;AACZC,cAAAA,cAAc,EAAdA,cAAc;AACdG,cAAAA,eAAe,EAAfA,eAAAA;AACF,aAAC,CAAC,CAAA;AAAAiB,YAAAA,QAAA,CAAAE,IAAA,GAAA,EAAA,CAAA;YAAA,OAGIgC,kCAAkC,CACtC/D,WAAW,EAAAgE,cAAA,CAAAA,cAAA,CAAA,EAAA,EAENjE,SAAS,CAACiC,KAAK,CAAA,EAAA,EAAA,EAAA;AAClBN,cAAAA,GAAG,EAAET,MAAM;AACXV,cAAAA,SAAS,EAATA,SAAS;AACTC,cAAAA,YAAY,EAAZA,YAAY;AACZC,cAAAA,cAAc,EAAdA,cAAc;AACdK,cAAAA,gBAAgB,EAAhBA,gBAAgB;AAChBF,cAAAA,eAAe,EAAfA,eAAe;AACfI,cAAAA,gBAAgB,EAAEA,gBAAgB,GAC9BA,gBAAgB,CAACiC,SAAS,GAC1B,IAAA;AAAI,aAAA,CAAA,EAEVhD,KACF,CAAC,CAAA;AAAA,UAAA,KAAA,EAAA;YAhBGiB,0BAA0B,GAAAW,QAAA,CAAAuB,IAAA,CAAA;YAiBhCnD,KAAK,CAACgE,eAAe,EAAE,CAAA;YAEjB9C,cAAc,GAAG+C,oCAAoC,CACzDlE,WAAW,EACXC,KAAK,CAACkB,cACR,CAAC,CAAA;AACKC,YAAAA,GAAkB,GAAG,EAAE,CAAA;AAAAS,YAAAA,QAAA,CAAAE,IAAA,GAAA,EAAA,CAAA;YAAA,OACM/B,WAAW,CAACmE,GAAG,EAAE,CAACC,kBAAkB,EAAE,CAAA;AAAA,UAAA,KAAA,EAAA;YAAnE/C,oBAAoB,GAAAQ,QAAA,CAAAuB,IAAA,CAAA;YAE1B,IAAIpC,gBAAgB,IAAID,wBAAwB,EAAE;AAC1CO,cAAAA,iBAAiB,GACrBP,wBAAwB,CAACsD,aAAa,CAAChD,oBAAoB,CAAC,CAAA;AAC9DD,cAAAA,GAAG,CAACkD,IAAI,CAAChD,iBAAiB,CAAC,CAAA;AAC7B,aAAA;YACAF,GAAG,CAACkD,IAAI,CAACpD,0BAA0B,CAACmD,aAAa,CAAChD,oBAAoB,CAAC,CAAC,CAAA;AAACQ,YAAAA,QAAA,CAAAE,IAAA,GAAA,EAAA,CAAA;YAAA,OAEjD/B,WAAW,CAACiC,QAAQ,EAAE,CAACsC,mBAAmB,CAACnD,GAAG,CAAC,CAAA;AAAA,UAAA,KAAA,EAAA;YAAjEG,SAAS,GAAAM,QAAA,CAAAuB,IAAA,CAAA;AAAA,YAAA,IAAA,CACXpC,gBAAgB,EAAA;AAAAa,cAAAA,QAAA,CAAAE,IAAA,GAAA,EAAA,CAAA;AAAA,cAAA,MAAA;AAAA,aAAA;AAAA,YAAA,IAAA,EACdR,SAAS,CAACqB,MAAM,KAAK,CAAC,CAAA,EAAA;AAAAf,cAAAA,QAAA,CAAAE,IAAA,GAAA,EAAA,CAAA;AAAA,cAAA,MAAA;AAAA,aAAA;AAAAF,YAAAA,QAAA,CAAAE,IAAA,GAAA,EAAA,CAAA;AAAA,YAAA,OAC8B/B,WAAW,CAC9DmE,GAAG,EAAE,CACLK,eAAe,CAACjD,SAAS,CAAC,CAAC,CAAC,EAAE,CAACP,gBAAgB,CAAW,CAAC,CAAA;AAAA,UAAA,KAAA,EAAA;YAFxDQ,uCAAuC,GAAAK,QAAA,CAAAuB,IAAA,CAAA;AAG7C7B,YAAAA,SAAS,CAAC,CAAC,CAAC,GAAGC,uCAAuC,CAAA;AAAC,UAAA,KAAA,EAAA;AAAAK,YAAAA,QAAA,CAAA4C,EAAA,GAInDlD,SAAS,CAACqB,MAAM,CAAA;AAAAf,YAAAA,QAAA,CAAAE,IAAA,GAAAF,QAAA,CAAA4C,EAAA,KACjB,CAAC,GAAA5C,EAAAA,GAAAA,QAAA,CAAA4C,EAAA,KASD,CAAC,GAAA,EAAA,GAAA,EAAA,CAAA;AAAA,YAAA,MAAA;AAAA,UAAA,KAAA,EAAA;AAAA5C,YAAAA,QAAA,CAAAE,IAAA,GAAA,EAAA,CAAA;AAAA,YAAA,OARa/B,WAAW,CACzBmE,GAAG,EAAE,CACLO,2BAA2B,CAC1BnD,SAAS,CAAC,CAAC,CAAC,EACZF,oBAAoB,EACpBF,cACF,CAAC,CAAA;AAAA,UAAA,KAAA,EAAA;YANHM,QAAQ,GAAAI,QAAA,CAAAuB,IAAA,CAAA;YAAA,OAAAvB,QAAA,CAAA8C,MAAA,CAAA,OAAA,EAAA,EAAA,CAAA,CAAA;AAAA,UAAA,KAAA,EAAA;AAAA9C,YAAAA,QAAA,CAAAE,IAAA,GAAA,EAAA,CAAA;AAAA,YAAA,OASF/B,WAAW,CACdmE,GAAG,EAAE,CACLO,2BAA2B,CAC1BnD,SAAS,CAAC,CAAC,CAAC,EACZF,oBAAoB,EACpBF,cACF,CAAC,CAAA;AAAA,UAAA,KAAA,EAAA;AAAAU,YAAAA,QAAA,CAAAE,IAAA,GAAA,EAAA,CAAA;AAAA,YAAA,OACc/B,WAAW,CACzBmE,GAAG,EAAE,CACLO,2BAA2B,CAC1BnD,SAAS,CAAC,CAAC,CAAC,EACZF,oBAAoB,EACpBF,cACF,CAAC,CAAA;AAAA,UAAA,KAAA,EAAA;YANHM,QAAQ,GAAAI,QAAA,CAAAuB,IAAA,CAAA;YAAA,OAAAvB,QAAA,CAAA8C,MAAA,CAAA,OAAA,EAAA,EAAA,CAAA,CAAA;AAAA,UAAA,KAAA,EAAA;AAAA,YAAA,MASF,IAAIC,KAAK,CAAC,mCAAmC,CAAC,CAAA;AAAA,UAAA,KAAA,EAAA;YAGxD3E,KAAK,CAACgE,eAAe,EAAE,CAAA;AAACpC,YAAAA,QAAA,CAAAE,IAAA,GAAA,EAAA,CAAA;AAAA,YAAA,OAEN/B,WAAW,CAC1BqD,IAAI,EAAE,CACNwB,gBAAgB,CAAC;AAAEC,cAAAA,OAAO,EAAE7D,MAAAA;AAAO,aAAC,CAAC,CAAA;AAAA,UAAA,KAAA,EAAA;YAFlCS,GAAG,GAAAG,QAAA,CAAAuB,IAAA,CAAA;YAGT2B,mBAAmB,CAACrD,GAAG,CAAC,CAAA;YAAC,OAAAG,QAAA,CAAA8C,MAAA,CAElB,QAAA,EAAA;AAAElD,cAAAA,QAAQ,EAARA,QAAQ;AAAEC,cAAAA,GAAG,EAAHA,GAAAA;aAAK,CAAA,CAAA;AAAA,UAAA,KAAA,EAAA,CAAA;AAAA,UAAA,KAAA,KAAA;YAAA,OAAAG,QAAA,CAAAmD,IAAA,EAAA,CAAA;AAAA,SAAA;AAAA,OAAA,EAAAlF,OAAA,CAAA,CAAA;KACzB,CAAA,CAAA,CAAA;AAAA,IAAA,SAAAL,MAAAwF,CAAAA,EAAA,EAAAC,GAAA,EAAAC,GAAA,EAAA;AAAA,MAAA,OAAAzF,OAAA,CAAA0F,KAAA,CAAA,IAAA,EAAAC,SAAA,CAAA,CAAA;AAAA,KAAA;AAAA,IAAA,OAAA5F,MAAA,CAAA;AAAA,GAAA,EAAA;AACH,EAAC;;AAEH;AACA;AACA;AACA;;IAWasE,kCAAkC,gBAAA,YAAA;AAAA,EAAA,IAAAuB,IAAA,GAAA3F,iBAAA,eAAAC,mBAAA,EAAA,CAAAC,IAAA,CAAG,SAAA0F,QAAAA,CAChDvF,WAAwB,EACxBwF,MAAwC,EAAA;AAAA,IAAA,IAAAC,OAAA;MAAAC,cAAA;MAAAC,KAAA;MAAAjE,GAAA;MAAApB,UAAA;MAAAsF,gBAAA;MAAAC,yBAAA;MAAAC,uBAAA;AAAAC,MAAAA,MAAA,GAAAV,SAAA,CAAA;AAAA,IAAA,OAAAzF,mBAAA,EAAA,CAAA+B,IAAA,CAAA,SAAAqE,UAAAC,SAAA,EAAA;AAAA,MAAA,OAAA,CAAA,EAAA,QAAAA,SAAA,CAAAnE,IAAA,GAAAmE,SAAA,CAAAlE,IAAA;AAAA,QAAA,KAAA,CAAA;AACxC0D,UAAAA,OAAkC,GAAAM,MAAA,CAAAnD,MAAA,GAAAmD,CAAAA,IAAAA,MAAA,CAAAG,CAAAA,CAAAA,KAAAA,SAAA,GAAAH,MAAA,CAAG,CAAA,CAAA,GAAA,EAAE,CAAA;AAAAL,UAAAA,cAAA,GAEoBD,OAAO,CAA1DE,KAAK,EAALA,KAAK,GAAAD,cAAA,KAAA,KAAA,CAAA,GAAG1F,WAAW,CAACmE,GAAG,EAAE,CAACgC,kBAAkB,EAAE,GAAAT,cAAA,CAAA;UAC9ChE,GAAG,GAAiB8D,MAAM,CAA1B9D,GAAG,EAAEpB,UAAU,GAAKkF,MAAM,CAArBlF,UAAU,CAAA;AAAA2F,UAAAA,SAAA,CAAAlE,IAAA,GAAA,CAAA,CAAA;AAAA,UAAA,OAEQb,0BAA0B,CACvDlB,WAAW,EACXwF,MAAM,EACNC,OACF,CAAC,CAAA;AAAA,QAAA,KAAA,CAAA;UAJKG,gBAAgB,GAAAK,SAAA,CAAA7C,IAAA,CAAA;AAAA6C,UAAAA,SAAA,CAAAlE,IAAA,GAAA,CAAA,CAAA;AAAA,UAAA,OAMdqE,sCAAsC,CAACpG,WAAW,EAAEwF,MAAM,EAAEC,OAAO,CAAC,CAAA;AAAA,QAAA,KAAA,CAAA;UADtEI,yBAAyB,GAAAI,SAAA,CAAA7C,IAAA,CAAA;AAAA6C,UAAAA,SAAA,CAAAlE,IAAA,GAAA,EAAA,CAAA;UAAA,OAEOsE,8BAA8B,CAClErG,WAAW,EAAAgE,cAAA,CAAAA,cAAA,KACNwB,MAAM,CAAA,EAAA,EAAA,EAAA;AAAEc,YAAAA,IAAI,EAAEhG,UAAU,CAACiC,OAAO,EAAC;AAAC,WAAA,CAAA,EACvCkD,OACF,CAAC,CAAA;AAAA,QAAA,KAAA,EAAA;UAJKK,uBAAuB,GAAAG,SAAA,CAAA7C,IAAA,CAAA;UAAA,OAAA6C,SAAA,CAAAtB,MAAA,CAMtB4B,QAAAA,EAAAA,kBAAkB,CAACC,IAAI,EAAE,CAC7BC,UAAU,CAAC;AACV/E,YAAAA,GAAG,EAAHA,GAAAA;AACF,WAAC,CAAC,CACDgF,WAAW,CAACf,KAAK,CAAC,CAClBgB,GAAG,CAACf,gBAAgB,EAAEC,yBAAyB,EAAEC,uBAAuB,CAAC,CAAA,CAAA;AAAA,QAAA,KAAA,EAAA,CAAA;AAAA,QAAA,KAAA,KAAA;UAAA,OAAAG,SAAA,CAAAjB,IAAA,EAAA,CAAA;AAAA,OAAA;AAAA,KAAA,EAAAO,QAAA,CAAA,CAAA;GAC7E,CAAA,CAAA,CAAA;AAAA,EAAA,OAAA,SA3BYxB,kCAAkCA,CAAA6C,GAAA,EAAAC,GAAA,EAAA;AAAA,IAAA,OAAAvB,IAAA,CAAAF,KAAA,CAAA,IAAA,EAAAC,SAAA,CAAA,CAAA;AAAA,GAAA,CAAA;AAAA,CA2B9C,GAAA;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACanE,0BAA0B,gBAAA,YAAA;AAAA,EAAA,IAAA4F,KAAA,GAAAnH,iBAAA,eAAAC,mBAAA,EAAA,CAAAC,IAAA,CAAG,SAAAkH,QAAAA,CACxC/G,WAAwB,EACxBwF,MAAwC,EAAA;AAAA,IAAA,IAAAC,OAAA;MAAAuB,QAAA;MAAAC,eAAA;MAAAtB,KAAA;MAAAuB,aAAA;MAAA9G,KAAA;MAAAE,UAAA;MAAAoB,GAAA;MAAArB,SAAA;MAAAE,SAAA;MAAAC,YAAA;MAAAC,cAAA;MAAAG,eAAA;MAAAE,gBAAA;MAAAE,gBAAA;MAAAsF,IAAA;MAAAa,UAAA;MAAAC,KAAA;MAAAvG,cAAA;MAAAwG,gBAAA;MAAAC,aAAA;MAAAC,UAAA;MAAAC,iBAAA;MAAAC,sBAAA;AAAAC,MAAAA,MAAA,GAAArC,SAAA,CAAA;AAAA,IAAA,OAAAzF,mBAAA,EAAA,CAAA+B,IAAA,CAAA,SAAAgG,UAAAC,SAAA,EAAA;AAAA,MAAA,OAAA,CAAA,EAAA,QAAAA,SAAA,CAAA9F,IAAA,GAAA8F,SAAA,CAAA7F,IAAA;AAAA,QAAA,KAAA,CAAA;AACxC0D,UAAAA,OAAkC,GAAAiC,MAAA,CAAA9E,MAAA,GAAA8E,CAAAA,IAAAA,MAAA,CAAAxB,CAAAA,CAAAA,KAAAA,SAAA,GAAAwB,MAAA,CAAG,CAAA,CAAA,GAAA,EAAE,CAAA;UAE/BV,QAAQ,GAAqDvB,OAAO,CAApEuB,QAAQ,EAAAC,eAAA,GAAqDxB,OAAO,CAA1DE,KAAK,EAALA,KAAK,GAAAsB,eAAA,KAAA,KAAA,CAAA,GAAGjH,WAAW,CAACmE,GAAG,EAAE,CAACgC,kBAAkB,EAAE,GAAAc,eAAA,CAAA;AAAAC,UAAAA,aAAA,GAa5D1B,MAAM,CAVRpF,KAAK,EAALA,KAAK,GAAA8G,aAAA,KAAA,KAAA,CAAA,GAAGlH,WAAW,CAACiC,QAAQ,EAAE,GAAAiF,aAAA,EAC9B5G,UAAU,GASRkF,MAAM,CATRlF,UAAU,EACVoB,GAAG,GAQD8D,MAAM,CARR9D,GAAG,EACHrB,SAAS,GAOPmF,MAAM,CAPRnF,SAAS,EACTE,SAAS,GAMPiF,MAAM,CANRjF,SAAS,EACTC,YAAY,GAKVgF,MAAM,CALRhF,YAAY,EACZC,cAAc,GAIZ+E,MAAM,CAJR/E,cAAc,EACdG,eAAe,GAGb4E,MAAM,CAHR5E,eAAe,EACfE,gBAAgB,GAEd0E,MAAM,CAFR1E,gBAAgB,EAChBE,gBAAgB,GACdwE,MAAM,CADRxE,gBAAgB,CAAA;AAGZsF,UAAAA,IAAI,GAAGhG,UAAU,CAACiC,OAAO,EAAE,CAAA;AAC3B4E,UAAAA,UAAU,GAAGb,IAAI,CAAC9D,GAAG,CAAC,UAACC,GAAG,EAAA;YAAA,OAAKoF,qBAAqB,CAACpF,GAAG,CAAC,CAAA;WAAC,CAAA,CAAA;AAC1D2E,UAAAA,KAAK,GAAG9G,UAAU,CAACwD,QAAQ,EAAE,CAAA;AAC7BjD,UAAAA,cAAc,GAAGyF,IAAI,CAAC9D,GAAG,CAAC,UAACC,GAAG,EAAA;YAAA,OAAKC,8BAA8B,CAACD,GAAG,CAAC,CAAA;WAAC,CAAA,CAAA;AACvE4E,UAAAA,gBAAgB,GAAGS,yBAAyB,CAACjH,cAAc,CAAC,CAAA;UAE5DyG,aAAa,GAAGtH,WAAW,CAACgH,QAAQ,EAAE,CAACe,SAAS,CAACf,QAAQ,CAAC,CAAA;UAC1DO,UAAU,GAAGvH,WAAW,CAACgH,QAAQ,EAAE,CAACgB,MAAM,CAAChB,QAAQ,CAAC,CAAA;AAEpDQ,UAAAA,iBAAiB,GAAGS,uBAAuB,CAACjI,WAAW,EAAEmH,UAAU,CAAC,CAAA;UACtEM,sBAAsB,GAAGF,UAAU,CAACzC,OAAO,CAAA;AAC/C,UAAA,IAAI9D,gBAAgB,EAAE;AACpByG,YAAAA,sBAAsB,GAAGzG,gBAAgB,CAAA;AAC3C,WAAA;AAAC,UAAA,OAAA4G,SAAA,CAAAjD,MAAA,CACM4B,QAAAA,EAAAA,kBAAkB,CAACC,IAAI,EAAE,CAC7BE,WAAW,CAACf,KAAK,CAAC,CAClBc,UAAU,CAAC;AACV/E,YAAAA,GAAG,EAAHA,GAAAA;WACD,CAAC,CACDiF,GAAG,CAAC;YACHuB,WAAW,EAAEC,0BAA0B,CACrC;cACE/H,KAAK,EAAEA,KAAK,CAAC6C,SAAS;AACtBmF,cAAAA,QAAQ,EAAEpI,WAAW,CAACoI,QAAQ,EAAE,CAAC9E,IAAI,EAAE,CAAC8E,QAAQ,EAAE;AAClD1G,cAAAA,GAAG,EAAHA,GAAG;cACH4F,aAAa,EAAEA,aAAa,CAACxC,OAAO;AACpC5B,cAAAA,SAAS,EAAEuE,sBAAsB;cACjCY,uBAAuB,EAAAC,kBAAA,CAAMd,iBAAiB,CAAA;AAChD,aAAC,EACD;AACE9D,cAAAA,kBAAkB,EAAEpD,UAAU,CAACqD,8BAA8B,EAAE;AAC/D0D,cAAAA,gBAAgB,EAAhBA,gBAAgB;AAChBvG,cAAAA,gBAAgB,EAAEyH,KAAK,CAAC9E,IAAI,CAAC3C,gBAAgB,CAAC;AAC9CwF,cAAAA,IAAI,EAAEa,UAAU;AAChB9G,cAAAA,SAAS,EAAEmI,iBAAiB,CAACnI,SAAS,CAAC;AACvCuD,cAAAA,UAAU,EAAEC,uBAAuB,CAACuD,KAAK,CAAC;cAC1C7G,SAAS,EAAEkI,iBAAiB,CAAClI,SAAS,EAAE6G,KAAK,CAACsB,WAAW,EAAE,CAAC;AAC5DlI,cAAAA,YAAY,EAAZA,YAAY;AACZC,cAAAA,cAAc,EAAdA,cAAc;AACdG,cAAAA,eAAe,EAAfA,eAAAA;AACF,aAAC,EACD2G,UAAU,CAACzC,OACb,CAAC;YACD6D,OAAO,EAAE,CAACvI,KAAK,CAAC;AAChBwI,YAAAA,GAAG,EAAE,WAAA;AACP,WAAC,CAAC,CAAA,CAAA;AAAA,QAAA,KAAA,EAAA,CAAA;AAAA,QAAA,KAAA,KAAA;UAAA,OAAAhB,SAAA,CAAA5C,IAAA,EAAA,CAAA;AAAA,OAAA;AAAA,KAAA,EAAA+B,QAAA,CAAA,CAAA;GACL,CAAA,CAAA,CAAA;AAAA,EAAA,OAAA,SAlEY7F,0BAA0BA,CAAA2H,GAAA,EAAAC,GAAA,EAAA;AAAA,IAAA,OAAAhC,KAAA,CAAA1B,KAAA,CAAA,IAAA,EAAAC,SAAA,CAAA,CAAA;AAAA,GAAA,CAAA;AAAA,CAkEtC,GAAA;IAEYe,sCAAsC,gBAAA,YAAA;AAAA,EAAA,IAAA2C,KAAA,GAAApJ,iBAAA,eAAAC,mBAAA,EAAA,CAAAC,IAAA,CAAG,SAAAmJ,QAAAA,CACpDhJ,WAAwB,EACxBwF,MAAwC,EAAA;AAAA,IAAA,IAAAC,OAAA;MAAAuB,QAAA;MAAAiC,eAAA;MAAAtD,KAAA;MAAAuD,cAAA;MAAA9I,KAAA;MAAAE,UAAA;MAAAoB,GAAA;MAAA6F,UAAA;MAAA4B,kBAAA;AAAAC,MAAAA,MAAA,GAAA/D,SAAA,CAAA;AAAA,IAAA,OAAAzF,mBAAA,EAAA,CAAA+B,IAAA,CAAA,SAAA0H,UAAAC,SAAA,EAAA;AAAA,MAAA,OAAA,CAAA,EAAA,QAAAA,SAAA,CAAAxH,IAAA,GAAAwH,SAAA,CAAAvH,IAAA;AAAA,QAAA,KAAA,CAAA;AACxC0D,UAAAA,OAAkC,GAAA2D,MAAA,CAAAxG,MAAA,GAAAwG,CAAAA,IAAAA,MAAA,CAAAlD,CAAAA,CAAAA,KAAAA,SAAA,GAAAkD,MAAA,CAAG,CAAA,CAAA,GAAA,EAAE,CAAA;UAE/BpC,QAAQ,GAAqDvB,OAAO,CAApEuB,QAAQ,EAAAiC,eAAA,GAAqDxD,OAAO,CAA1DE,KAAK,EAALA,KAAK,GAAAsD,eAAA,KAAA,KAAA,CAAA,GAAGjJ,WAAW,CAACmE,GAAG,EAAE,CAACgC,kBAAkB,EAAE,GAAA8C,eAAA,CAAA;UAAAC,cAAA,GAEJ1D,MAAM,CAA1DpF,KAAK,EAALA,KAAK,GAAA8I,cAAA,KAAA,KAAA,CAAA,GAAGlJ,WAAW,CAACiC,QAAQ,EAAE,GAAAiH,cAAA,EAAE5I,UAAU,GAAUkF,MAAM,CAA1BlF,UAAU,EAAEoB,GAAG,GAAK8D,MAAM,CAAd9D,GAAG,CAAA;UAEjD6F,UAAU,GAAGvH,WAAW,CAACgH,QAAQ,EAAE,CAACgB,MAAM,CAAChB,QAAQ,CAAC,CAAA;UAAAsC,SAAA,CAAA7E,EAAA,GAE/B8E,0BAA0B,CAAA;UAAAD,SAAA,CAAAE,EAAA,GACnDlJ,UAAU,CAAA;AAAAgJ,UAAAA,SAAA,CAAAvH,IAAA,GAAA,CAAA,CAAA;AAAA,UAAA,OACJzB,UAAU,CAACmJ,qBAAqB,EAAE,CAAA;AAAA,QAAA,KAAA,CAAA;AAAAH,UAAAA,SAAA,CAAAI,EAAA,GAAAJ,SAAA,CAAAlG,IAAA,CAAA;UAFpC+F,kBAAkB,GAAA,IAAAG,SAAA,CAAA7E,EAAA,EAAA6E,SAAA,CAAAE,EAAA,EAAAF,SAAA,CAAAI,EAAA,CAAA,CAAA;AAAA,UAAA,OAAAJ,SAAA,CAAA3E,MAAA,CAKjB4B,QAAAA,EAAAA,kBAAkB,CAACC,IAAI,EAAE,CAC7BE,WAAW,CAACf,KAAK,CAAC,CAClBc,UAAU,CAAC;AACV/E,YAAAA,GAAG,EAAHA,GAAAA;WACD,CAAC,CACDiF,GAAG,CAAC;YACHuB,WAAW,EAAEyB,gDAAgD,CAC3D;cACEvJ,KAAK,EAAEA,KAAK,CAAC6C,SAAS;AACtBmF,cAAAA,QAAQ,EAAEpI,WAAW,CAACoI,QAAQ,EAAE,CAAC9E,IAAI,EAAE,CAAC8E,QAAQ,EAAE;AAClD1G,cAAAA,GAAG,EAAHA,GAAG;AACH2G,cAAAA,uBAAuB,EAAEc,kBAAAA;AAC3B,aAAC,EACD5B,UAAU,CAACzC,OACb,CAAC;YACD6D,OAAO,EAAE,CAACvI,KAAK,CAAC;AAChBwI,YAAAA,GAAG,EAAE,iCAAA;AACP,WAAC,CAAC,CAAA,CAAA;AAAA,QAAA,KAAA,EAAA,CAAA;AAAA,QAAA,KAAA,KAAA;UAAA,OAAAU,SAAA,CAAAtE,IAAA,EAAA,CAAA;AAAA,OAAA;AAAA,KAAA,EAAAgE,QAAA,CAAA,CAAA;GACL,CAAA,CAAA,CAAA;AAAA,EAAA,OAAA,SAlCY5C,sCAAsCA,CAAAwD,GAAA,EAAAC,GAAA,EAAA;AAAA,IAAA,OAAAd,KAAA,CAAA3D,KAAA,CAAA,IAAA,EAAAC,SAAA,CAAA,CAAA;AAAA,GAAA,CAAA;AAAA,CAkClD;;;;"}