@whetstone-research/doppler-sdk 1.0.19 → 1.0.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (35) hide show
  1. package/dist/chunk-BESE77DM.js +3840 -0
  2. package/dist/chunk-BESE77DM.js.map +1 -0
  3. package/dist/chunk-KJ6W44WF.cjs +4089 -0
  4. package/dist/chunk-KJ6W44WF.cjs.map +1 -0
  5. package/dist/{chunk-AKLS6T3R.cjs → chunk-Y6TJIH33.cjs} +36 -24
  6. package/dist/chunk-Y6TJIH33.cjs.map +1 -0
  7. package/dist/{chunk-6TOPYGOG.js → chunk-ZUJKBFXW.js} +35 -24
  8. package/dist/chunk-ZUJKBFXW.js.map +1 -0
  9. package/dist/{oracle-7PmpwwPx.d.ts → oracle-D1wPWydZ.d.cts} +1 -33
  10. package/dist/{oracle-7PmpwwPx.d.cts → oracle-D1wPWydZ.d.ts} +1 -33
  11. package/dist/{pda-PZRHQJMK.cjs → pda-A4PIAS5Y.cjs} +20 -16
  12. package/dist/pda-A4PIAS5Y.cjs.map +1 -0
  13. package/dist/{pda-N6ULJYLG.js → pda-JVAD45XJ.js} +3 -3
  14. package/dist/pda-JVAD45XJ.js.map +1 -0
  15. package/dist/solana/index.cjs +427 -3253
  16. package/dist/solana/index.cjs.map +1 -1
  17. package/dist/solana/index.d.cts +211 -213
  18. package/dist/solana/index.d.ts +211 -213
  19. package/dist/solana/index.js +105 -2931
  20. package/dist/solana/index.js.map +1 -1
  21. package/dist/solana/react/index.cjs +53 -85
  22. package/dist/solana/react/index.cjs.map +1 -1
  23. package/dist/solana/react/index.d.cts +7 -1
  24. package/dist/solana/react/index.d.ts +7 -1
  25. package/dist/solana/react/index.js +15 -47
  26. package/dist/solana/react/index.js.map +1 -1
  27. package/package.json +1 -1
  28. package/dist/chunk-6TOPYGOG.js.map +0 -1
  29. package/dist/chunk-AKLS6T3R.cjs.map +0 -1
  30. package/dist/chunk-C2D7CIXP.js +0 -977
  31. package/dist/chunk-C2D7CIXP.js.map +0 -1
  32. package/dist/chunk-GUGN3EYX.cjs +0 -1069
  33. package/dist/chunk-GUGN3EYX.cjs.map +0 -1
  34. package/dist/pda-N6ULJYLG.js.map +0 -1
  35. package/dist/pda-PZRHQJMK.cjs.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/solana/core/codecs.ts","../src/solana/core/math.ts","../src/solana/generated/cpmm/instructions/closePosition.ts","../src/solana/generated/cpmm/instructions/collectFees.ts","../src/solana/generated/cpmm/instructions/collectProtocolFees.ts","../src/solana/generated/cpmm/instructions/createPosition.ts","../src/solana/generated/cpmm/instructions/initializeConfig.ts","../src/solana/generated/cpmm/instructions/initializeOracle.ts","../src/solana/generated/cpmm/instructions/initializePool.ts","../src/solana/generated/cpmm/instructions/oracleConsult.ts","../src/solana/generated/cpmm/instructions/oracleUpdate.ts","../src/solana/generated/cpmm/instructions/pause.ts","../src/solana/generated/cpmm/instructions/previewSwapExactIn.ts","../src/solana/generated/cpmm/instructions/redeemProtocolShares.ts","../src/solana/generated/cpmm/instructions/removeLiquidity.ts","../src/solana/generated/cpmm/instructions/setFees.ts","../src/solana/generated/cpmm/instructions/setHook.ts","../src/solana/generated/cpmm/instructions/swapExactIn.ts","../src/solana/generated/cpmm/instructions/transferAdmin.ts","../src/solana/generated/cpmm/instructions/unpause.ts","../src/solana/generated/cpmm/instructions/updateConfig.ts","../src/solana/generated/cpmm/instructions/withdrawVaultExcess.ts","../src/solana/generated/cpmm/programs/cpmm.ts","../src/solana/generated/cpmm/instructions/addLiquidity.ts","../src/solana/client/pool.ts","../src/solana/client/position.ts","../src/solana/client/oracle.ts"],"names":["sharesOut","fixEncoderSize","getBytesEncoder","transformEncoder","getStructEncoder","getStructDecoder","fixDecoderSize","getBytesDecoder","combineCodec","getU64Encoder","getU64Decoder","getAddressEncoder","getAccountMetaFactory","SolanaError","SOLANA_ERROR__PROGRAM_CLIENTS__INSUFFICIENT_ACCOUNT_METAS","getProgramDerivedAddress","getAddressFromResolvedInstructionAccount","getU16Encoder","getBooleanEncoder","getArrayEncoder","getAddressDecoder","getU16Decoder","getBooleanDecoder","getArrayDecoder","getU128Encoder","getU32Encoder","getU128Decoder","getU32Decoder","getU8Encoder","getU8Decoder","bytesToBase64","base64ToBytes"],"mappings":";;;;AAoDA,IAAM,eAAe,eAAA,EAAgB;AACrC,IAAM,YAAY,eAAA,EAAgB;AAClC,IAAM,UAAU,UAAA,EAAW;AAC3B,IAAM,WAAW,WAAA,EAAY;AAC7B,IAAM,WAAW,WAAA,EAAY;AAC7B,IAAM,WAAW,WAAA,EAAY;AAC7B,IAAM,YAAY,YAAA,EAAa;AAC/B,IAAM,SAAA,GAA2B,cAAA;AAAA,EAC/B,aAAA,CAAc,QAAA,EAAU,EAAE,IAAA,EAAM,GAAG,CAAA;AAAA,EACnC,CAAC,KAAA,KAAU;AACT,IAAA,IAAI,QAAQ,EAAA,EAAI;AACd,MAAA,MAAM,IAAI,MAAM,yBAAyB,CAAA;AAAA,IAC3C;AACA,IAAA,IAAI,KAAA,IAAS,SAAS,EAAA,EAAI;AACxB,MAAA,MAAM,IAAI,MAAM,eAAe,CAAA;AAAA,IACjC;AACA,IAAA,MAAM,IAAA,GAAA,CAAQ,MAAM,GAAA,IAAO,EAAA;AAC3B,IAAA,OAAO;AAAA,MACL,KAAA,GAAQ,IAAA;AAAA,MACP,SAAS,GAAA,GAAO,IAAA;AAAA,MAChB,SAAS,IAAA,GAAQ,IAAA;AAAA,MACjB,SAAS,IAAA,GAAQ;AAAA,KACpB;AAAA,EACF,CAAA;AAAA,EACA,CAAC,KAAA,KAAU;AACT,IAAA,IAAI,GAAA,GAAM,EAAA;AACV,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,CAAA,EAAG,KAAK,CAAA,EAAG;AAC7B,MAAA,GAAA,IAAO,KAAA,CAAM,CAAC,CAAA,IAAM,GAAA,GAAM,OAAO,CAAC,CAAA;AAAA,IACpC;AACA,IAAA,OAAO,GAAA;AAAA,EACT;AACF,CAAA;AAEA,IAAM,kBAAA,GAAqB,cAAA;AAAA,EACzB,YAAA,CAAa,aAAA,EAAc,EAAG,CAAC,CAAA;AAAA,EAC/B,CAAC,KAAA,KAAsB,KAAA;AAAA,EACvB,CAAC,KAAA,KAAU,IAAI,UAAA,CAAW,KAAK;AACjC,CAAA;AAMO,IAAM,mBAAuC,cAAA,CAAe;AAAA,EACjE,CAAC,aAAa,QAAQ,CAAA;AAAA,EACtB,CAAC,oBAAoB,SAAS,CAAA;AAAA,EAC9B,CAAC,oBAAoB,SAAS;AAChC,CAAC;AAEM,IAAM,qBAAuC,cAAA,CAAe;AAAA,EACjE,CAAC,SAAS,YAAY,CAAA;AAAA,EACtB,CAAC,UAAU,SAAS,CAAA;AAAA,EACpB,CAAC,oBAAoB,OAAO,CAAA;AAAA,EAC5B,CAAC,iBAAiB,aAAA,CAAc,YAAA,EAAc,EAAE,IAAA,EAAM,kBAAA,EAAoB,CAAC,CAAA;AAAA,EAC3E,CAAC,iBAAiB,QAAQ,CAAA;AAAA,EAC1B,CAAC,kBAAkB,QAAQ,CAAA;AAAA,EAC3B,CAAC,sBAAsB,SAAS,CAAA;AAAA,EAChC,CAAC,kBAAkB,QAAQ,CAAA;AAAA,EAC3B,CAAC,WAAW,OAAO,CAAA;AAAA,EACnB,CAAC,YAAY,kBAAkB;AACjC,CAAC;AAEM,IAAM,gBAA6B,cAAA,CAAe;AAAA,EACvD,CAAC,UAAU,YAAY,CAAA;AAAA,EACvB,CAAC,cAAc,YAAY,CAAA;AAAA,EAC3B,CAAC,cAAc,YAAY,CAAA;AAAA,EAC3B,CAAC,UAAU,YAAY,CAAA;AAAA,EACvB,CAAC,UAAU,YAAY,CAAA;AAAA,EACvB,CAAC,aAAa,YAAY,CAAA;AAAA,EAC1B,CAAC,QAAQ,OAAO,CAAA;AAAA,EAChB,CAAC,YAAY,QAAQ,CAAA;AAAA,EACrB,CAAC,YAAY,QAAQ,CAAA;AAAA,EACrB,CAAC,eAAe,SAAS,CAAA;AAAA,EACzB,CAAC,cAAc,QAAQ,CAAA;AAAA,EACvB,CAAC,eAAe,QAAQ,CAAA;AAAA,EACxB,CAAC,uBAAuB,SAAS,CAAA;AAAA,EACjC,CAAC,uBAAuB,SAAS,CAAA;AAAA,EACjC,CAAC,kBAAkB,QAAQ,CAAA;AAAA,EAC3B,CAAC,kBAAkB,QAAQ,CAAA;AAAA,EAC3B,CAAC,eAAe,YAAY,CAAA;AAAA,EAC5B,CAAC,aAAa,QAAQ,CAAA;AAAA,EACtB,CAAC,8BAA8B,OAAO,CAAA;AAAA,EACtC,CAAC,SAAS,SAAS,CAAA;AAAA,EACnB,CAAC,uBAAuB,YAAY,CAAA;AAAA,EACpC,CAAC,UAAU,OAAO,CAAA;AAAA,EAClB,CAAC,WAAW,OAAO,CAAA;AAAA,EACnB,CAAC,YAAY,kBAAkB;AACjC,CAAC;AAEM,IAAM,oBAAqC,cAAA,CAAe;AAAA,EAC/D,CAAC,QAAQ,YAAY,CAAA;AAAA,EACrB,CAAC,SAAS,YAAY,CAAA;AAAA,EACtB,CAAC,cAAc,QAAQ,CAAA;AAAA,EACvB,CAAC,UAAU,SAAS,CAAA;AAAA,EACpB,CAAC,qBAAqB,SAAS,CAAA;AAAA,EAC/B,CAAC,qBAAqB,SAAS,CAAA;AAAA,EAC/B,CAAC,YAAY,QAAQ,CAAA;AAAA,EACrB,CAAC,YAAY,QAAQ,CAAA;AAAA,EACrB,CAAC,WAAW,OAAO,CAAA;AAAA,EACnB,CAAC,YAAY,kBAAkB;AACjC,CAAC;AAEM,IAAM,uBAA2C,cAAA,CAAe;AAAA,EACrE,CAAC,QAAQ,YAAY,CAAA;AAAA,EACrB,CAAC,eAAe,SAAS,CAAA;AAAA,EACzB,CAAC,0BAA0B,SAAS,CAAA;AAAA,EACpC,CAAC,YAAY,QAAQ,CAAA;AAAA,EACrB,CAAC,kBAAkB,SAAS,CAAA;AAAA,EAC5B,CAAC,kBAAkB,SAAS,CAAA;AAAA,EAC5B,CAAC,iBAAiB,SAAS,CAAA;AAAA,EAC3B,CAAC,iBAAiB,SAAS,CAAA;AAAA,EAC3B,CAAC,oBAAoB,SAAS,CAAA;AAAA,EAC9B,CAAC,oBAAoB,SAAS,CAAA;AAAA,EAC9B,CAAC,iBAAiB,QAAQ,CAAA;AAAA,EAC1B,CAAC,4BAA4B,QAAQ,CAAA;AAAA,EACrC,CAAC,0BAA0B,QAAQ,CAAA;AAAA,EACnC,CAAC,oBAAoB,QAAQ,CAAA;AAAA,EAC7B;AAAA,IACE,cAAA;AAAA,IACA,aAAA,CAAc,gBAAA,EAAkB,EAAE,IAAA,EAAM,yBAAyB;AAAA,GACnE;AAAA,EACA,CAAC,WAAW,OAAO,CAAA;AAAA,EACnB,CAAC,YAAY,kBAAkB;AACjC,CAAC;AAED,IAAM,gBAAA,GAAmB,uBAAuB,kBAAA,EAAoB;AAAA,EAClE,kBAAA,CAAmB,uBAAuB,SAAS;AACrD,CAAC,CAAA;AACD,IAAM,WAAA,GAAc,uBAAuB,aAAA,EAAe;AAAA,EACxD,kBAAA,CAAmB,uBAAuB,IAAI;AAChD,CAAC,CAAA;AACD,IAAM,eAAA,GAAkB,uBAAuB,iBAAA,EAAmB;AAAA,EAChE,kBAAA,CAAmB,uBAAuB,QAAQ;AACpD,CAAC,CAAA;AACD,IAAM,kBAAA,GAAqB,uBAAuB,oBAAA,EAAsB;AAAA,EACtE,kBAAA,CAAmB,uBAAuB,WAAW;AACvD,CAAC,CAAA;AAKM,SAAS,gBAAgB,IAAA,EAAqC;AACnE,EAAA,OAAO,gBAAA,CAAiB,OAAO,IAAI,CAAA;AACrC;AAKO,SAAS,WAAW,IAAA,EAAgC;AACzD,EAAA,OAAO,WAAA,CAAY,OAAO,IAAI,CAAA;AAChC;AAKO,SAAS,eAAe,IAAA,EAAoC;AACjE,EAAA,OAAO,eAAA,CAAgB,OAAO,IAAI,CAAA;AACpC;AAKO,SAAS,kBAAkB,IAAA,EAAuC;AACvE,EAAA,OAAO,kBAAA,CAAmB,OAAO,IAAI,CAAA;AACvC;AASO,SAAS,qBAAA,CACd,aAAA,EACA,KAAA,EACA,IAAA,EACY;AACZ,EAAA,MAAM,eAAe,MAAM;AACzB,IAAA,IAAI,CAAC,KAAA,EAAO;AACV,MAAA,OAAO,IAAI,UAAA,EAAW;AAAA,IACxB;AACA,IAAA,IAAI,SAAS,MAAA,EAAW;AACtB,MAAA,MAAM,IAAI,MAAM,kDAAkD,CAAA;AAAA,IACpE;AACA,IAAA,OAAO,IAAI,UAAA,CAAW,KAAA,CAAM,MAAA,CAAO,IAAI,CAAC,CAAA;AAAA,EAC1C,CAAA,GAAG;AAEH,EAAA,OAAO,UAAA,CAAW,CAAC,aAAA,EAAe,WAAW,CAAC,CAAA;AAChD;AAIO,IAAM,uBAAuB,cAAA,CAAe;AAAA,EACjD,CAAC,YAAY,QAAQ,CAAA;AAAA,EACrB,CAAC,gBAAgB,QAAQ,CAAA;AAAA,EACzB,CAAC,kBAAkB,OAAO,CAAA;AAAA,EAC1B,CAAC,gBAAgB,SAAS;AAC5B,CAAC;AAED,IAAM,kCAEF,cAAA,CAAe;AAAA,EACjB,CAAC,cAAc,QAAQ,CAAA;AAAA,EACvB,CAAC,cAAc,QAAQ,CAAA;AAAA,EACvB,CAAC,gBAAgB,SAAS,CAAA;AAAA,EAC1B,CAAC,gBAAgB,SAAS;AAC5B,CAAC,CAAA;AAEM,IAAM,qBAAA,GACX,cAAA;AAAA,EACE,+BAAA;AAAA,EACA,CAAC,KAAA,MAAuC;AAAA,IACtC,GAAG,KAAA;AAAA,IACH,YAAA,EAAc,MAAM,YAAA,IAAgB;AAAA,GACtC,CAAA;AAAA,EACA,CAAC,KAAA,KAAU;AACb;AAEK,IAAM,2BACX,cAAA,CAAe;AAAA,EACb,CAAC,YAAY,SAAS,CAAA;AAAA,EACtB,CAAC,iBAAiB,QAAQ,CAAA;AAAA,EAC1B,CAAC,iBAAiB,QAAQ,CAAA;AAAA,EAC1B,CAAC,gBAAgB,SAAS;AAC5B,CAAC;AAEI,IAAM,uBAA+C,cAAA,CAAe;AAAA,EACzE,CAAC,QAAQ,QAAQ,CAAA;AAAA,EACjB,CAAC,QAAQ,QAAQ;AACnB,CAAC;AAEM,IAAM,+BACX,cAAA,CAAe;AAAA,EACb,CAAC,QAAQ,QAAQ,CAAA;AAAA,EACjB,CAAC,QAAQ,QAAQ;AACnB,CAAC;AAEI,IAAM,0BACX,cAAA,CAAe,CAAC,CAAC,YAAA,EAAc,QAAQ,CAAC,CAAC;AAEpC,IAAM,4BACX,cAAA,CAAe;AAAA,EACb,CAAC,SAAS,YAAY,CAAA;AAAA,EACtB,CAAC,iBAAiB,QAAQ,CAAA;AAAA,EAC1B,CAAC,kBAAkB,QAAQ,CAAA;AAAA,EAC3B,CAAC,sBAAsB,SAAS,CAAA;AAAA,EAChC,CAAC,kBAAkB,QAAQ,CAAA;AAAA,EAC3B,CAAC,iBAAiB,aAAA,CAAc,YAAA,EAAc,EAAE,IAAA,EAAM,QAAA,EAAU,CAAC;AACnE,CAAC;AAEI,IAAM,0BACX,cAAA,CAAe;AAAA,EACb,CAAC,SAAS,YAAY,CAAA;AAAA,EACtB,CAAC,SAAS,YAAY,CAAA;AAAA,EACtB,CAAC,qBAAqB,QAAQ,CAAA;AAAA,EAC9B,CAAC,sBAAsB,QAAQ,CAAA;AAAA,EAC/B,CAAC,8BAA8B,OAAO,CAAA;AAAA,EACtC,CAAC,eAAe,YAAY,CAAA;AAAA,EAC5B,CAAC,aAAa,QAAQ;AACxB,CAAC;AAEI,IAAM,4BACX,cAAA,CAAe;AAAA,EACb,CAAC,0BAA0B,SAAS,CAAA;AAAA,EACpC,CAAC,0BAA0B,QAAQ,CAAA;AAAA,EACnC,CAAC,mBAAmB,QAAQ;AAC9B,CAAC;AAEI,IAAM,mBAAuC,cAAA,CAAe;AAAA,EACjE,CAAC,eAAe,YAAY,CAAA;AAAA,EAC5B,CAAC,aAAa,QAAQ;AACxB,CAAC;AAEM,IAAM,mBAAuC,cAAA,CAAe;AAAA,EACjE,CAAC,cAAc,QAAQ,CAAA;AAAA,EACvB,CAAC,eAAe,QAAQ;AAC1B,CAAC;AAEM,IAAM,yBAAmD,cAAA,CAAe;AAAA,EAC7E,CAAC,YAAY,YAAY;AAC3B,CAAC;AAEM,IAAM,yBAAmD,cAAA,CAAe;AAAA,EAC7E,CAAC,iBAAiB,QAAQ;AAC5B,CAAC;AAGM,SAAS,sBAAsB,IAAA,EAAmC;AACvE,EAAA,OAAO,IAAI,UAAA,CAAW,oBAAA,CAAqB,MAAA,CAAO,IAAI,CAAC,CAAA;AACzD;AAGO,SAAS,uBACd,IAAA,EACY;AACZ,EAAA,OAAO,IAAI,UAAA,CAAW,qBAAA,CAAsB,MAAA,CAAO,IAAI,CAAC,CAAA;AAC1D;AAGO,SAAS,0BACd,IAAA,EACY;AACZ,EAAA,OAAO,IAAI,UAAA,CAAW,wBAAA,CAAyB,MAAA,CAAO,IAAI,CAAC,CAAA;AAC7D;AAGO,SAAS,sBAAsB,IAAA,EAAmC;AACvE,EAAA,OAAO,IAAI,UAAA,CAAW,oBAAA,CAAqB,MAAA,CAAO,IAAI,CAAC,CAAA;AACzD;AAGO,SAAS,8BACd,IAAA,EACY;AACZ,EAAA,OAAO,IAAI,UAAA,CAAW,4BAAA,CAA6B,MAAA,CAAO,IAAI,CAAC,CAAA;AACjE;AAGO,SAAS,yBAAyB,IAAA,EAAsC;AAC7E,EAAA,OAAO,IAAI,UAAA,CAAW,uBAAA,CAAwB,MAAA,CAAO,IAAI,CAAC,CAAA;AAC5D;AAGO,SAAS,2BACd,IAAA,EACY;AACZ,EAAA,OAAO,IAAI,UAAA,CAAW,yBAAA,CAA0B,MAAA,CAAO,IAAI,CAAC,CAAA;AAC9D;AAGO,SAAS,yBAAyB,IAAA,EAAsC;AAC7E,EAAA,OAAO,IAAI,UAAA,CAAW,uBAAA,CAAwB,MAAA,CAAO,IAAI,CAAC,CAAA;AAC5D;AAGO,SAAS,2BACd,IAAA,EACY;AACZ,EAAA,OAAO,IAAI,UAAA,CAAW,yBAAA,CAA0B,MAAA,CAAO,IAAI,CAAC,CAAA;AAC9D;AAGO,SAAS,kBAAkB,IAAA,EAA+B;AAC/D,EAAA,OAAO,IAAI,UAAA,CAAW,gBAAA,CAAiB,MAAA,CAAO,IAAI,CAAC,CAAA;AACrD;AAGO,SAAS,kBAAkB,IAAA,EAA+B;AAC/D,EAAA,OAAO,IAAI,UAAA,CAAW,gBAAA,CAAiB,MAAA,CAAO,IAAI,CAAC,CAAA;AACrD;AAGO,SAAS,wBAAwB,IAAA,EAAqC;AAC3E,EAAA,OAAO,IAAI,UAAA,CAAW,sBAAA,CAAuB,MAAA,CAAO,IAAI,CAAC,CAAA;AAC3D;AAGO,SAAS,wBAAwB,IAAA,EAAqC;AAC3E,EAAA,OAAO,IAAI,UAAA,CAAW,sBAAA,CAAuB,MAAA,CAAO,IAAI,CAAC,CAAA;AAC3D;;;AC3YO,SAAS,YAAY,GAAA,EAAqB;AAE/C,EAAA,MAAM,UAAU,GAAA,IAAO,GAAA;AACvB,EAAA,MAAM,QAAA,GAAW,GAAA,GAAA,CAAQ,EAAA,IAAM,GAAA,IAAO,EAAA;AACtC,EAAA,OAAO,OAAO,OAAO,CAAA,GAAI,OAAO,QAAQ,CAAA,GAAI,OAAO,OAAO,CAAA;AAC5D;AAKO,SAAS,YAAY,CAAA,EAAmB;AAC7C,EAAA,MAAM,OAAA,GAAU,IAAA,CAAK,KAAA,CAAM,CAAC,CAAA;AAC5B,EAAA,MAAM,WAAW,CAAA,GAAI,OAAA;AACrB,EAAA,OAAA,CACG,MAAA,CAAO,OAAO,CAAA,IAAK,GAAA,IAAO,MAAA,CAAO,IAAA,CAAK,KAAA,CAAM,QAAA,GAAW,MAAA,CAAO,OAAO,CAAC,CAAC,CAAA;AAE5E;AAKO,SAAS,MAAA,CAAO,GAAW,CAAA,EAAmB;AACnD,EAAA,OAAQ,IAAI,CAAA,IAAM,GAAA;AACpB;AAKO,SAAS,MAAA,CAAO,GAAW,CAAA,EAAmB;AACnD,EAAA,OAAA,CAAQ,KAAK,GAAA,IAAO,CAAA;AACtB;AAMO,SAAS,gBAAA,CAAiB,UAAkB,QAAA,EAA0B;AAC3E,EAAA,IAAI,QAAA,KAAa,IAAI,OAAO,EAAA;AAC5B,EAAA,OAAA,CAAQ,YAAY,GAAA,IAAO,QAAA;AAC7B;AAMO,SAAS,gBAAA,CAAiB,UAAkB,QAAA,EAA0B;AAC3E,EAAA,IAAI,QAAA,KAAa,IAAI,OAAO,EAAA;AAC5B,EAAA,OAAA,CAAQ,YAAY,GAAA,IAAO,QAAA;AAC7B;AASO,SAAS,MAAM,CAAA,EAAmB;AACvC,EAAA,IAAI,CAAA,GAAI,EAAA,EAAI,MAAM,IAAI,MAAM,uBAAuB,CAAA;AACnD,EAAA,IAAI,CAAA,KAAM,IAAI,OAAO,EAAA;AAErB,EAAA,IAAI,CAAA,GAAI,CAAA;AACR,EAAA,IAAI,CAAA,GAAA,CAAK,IAAI,EAAA,IAAM,EAAA;AAEnB,EAAA,OAAO,IAAI,CAAA,EAAG;AACZ,IAAA,CAAA,GAAI,CAAA;AACJ,IAAA,CAAA,GAAA,CAAK,CAAA,GAAI,IAAI,CAAA,IAAK,EAAA;AAAA,EACpB;AAEA,EAAA,OAAO,CAAA;AACT;AAKO,SAAS,OAAA,CAAQ,GAAW,CAAA,EAAmB;AACpD,EAAA,OAAA,CAAQ,CAAA,GAAI,IAAI,EAAA,IAAM,CAAA;AACxB;AAKO,SAAS,SAAA,CAAU,GAAW,CAAA,EAAmB;AACtD,EAAA,OAAO,CAAA,GAAI,IAAI,CAAA,GAAI,CAAA;AACrB;AAKO,SAAS,SAAA,CAAU,GAAW,CAAA,EAAmB;AACtD,EAAA,OAAO,CAAA,GAAI,IAAI,CAAA,GAAI,CAAA;AACrB;AAKO,SAAS,aAAA,CAAc,WAAmB,WAAA,EAA6B;AAC5E,EAAA,IAAI,WAAA,KAAgB,IAAI,OAAO,CAAA;AAC/B,EAAA,MAAM,GAAA,GAAA,CAAO,aAAa,GAAA,IAAO,WAAA;AACjC,EAAA,OAAO,YAAY,GAAG,CAAA;AACxB;AAkBO,SAAS,YAAA,CACd,IAAA,EACA,QAAA,EACA,cAAA,EACW;AACX,EAAA,IAAI,aAAa,EAAA,EAAI;AACnB,IAAA,OAAO;AAAA,MACL,SAAA,EAAW,EAAA;AAAA,MACX,QAAA,EAAU,EAAA;AAAA,MACV,OAAA,EAAS,EAAA;AAAA,MACT,OAAA,EAAS,EAAA;AAAA,MACT,WAAA,EAAa,CAAA;AAAA,MACb,cAAA,EAAgB;AAAA,KAClB;AAAA,EACF;AAGA,EAAA,MAAM,CAAC,SAAA,EAAW,UAAU,CAAA,GAC1B,cAAA,KAAmB,IACf,CAAC,IAAA,CAAK,QAAA,EAAU,IAAA,CAAK,QAAQ,CAAA,GAC7B,CAAC,IAAA,CAAK,QAAA,EAAU,KAAK,QAAQ,CAAA;AAEnC,EAAA,IAAI,SAAA,KAAc,EAAA,IAAM,UAAA,KAAe,EAAA,EAAI;AACzC,IAAA,MAAM,IAAI,MAAM,yBAAyB,CAAA;AAAA,EAC3C;AAGA,EAAA,MAAM,QAAA,GAAY,QAAA,GAAW,MAAA,CAAO,IAAA,CAAK,UAAU,CAAA,GAAK,SAAA;AACxD,EAAA,MAAM,OAAA,GAAW,QAAA,GAAW,MAAA,CAAO,IAAA,CAAK,WAAW,CAAA,GAAK,SAAA;AACxD,EAAA,MAAM,UAAU,QAAA,GAAW,OAAA;AAC3B,EAAA,MAAM,cAAc,QAAA,GAAW,QAAA;AAG/B,EAAA,MAAM,SAAA,GAAa,WAAA,GAAc,UAAA,IAAe,SAAA,GAAY,WAAA,CAAA;AAG5D,EAAA,MAAM,SAAA,GAAY,aAAA,CAAc,UAAA,EAAY,SAAS,CAAA;AACrD,EAAA,MAAM,cAAA,GAAiB,aAAA,CAAc,SAAA,EAAW,QAAQ,CAAA;AACxD,EAAA,MAAM,WAAA,GACJ,cAAc,CAAA,GAAI,CAAA,GAAI,KAAK,GAAA,CAAI,SAAA,GAAY,cAAc,CAAA,GAAI,SAAA;AAE/D,EAAA,OAAO;AAAA,IACL,SAAA;AAAA,IACA,QAAA;AAAA,IACA,OAAA;AAAA,IACA,OAAA;AAAA,IACA,WAAA;AAAA,IACA;AAAA,GACF;AACF;AAKO,SAAS,oBAAA,CACd,IAAA,EACA,SAAA,EACA,cAAA,EACmB;AAEnB,EAAA,MAAM,CAAC,SAAA,EAAW,UAAU,CAAA,GAC1B,cAAA,KAAmB,IACf,CAAC,IAAA,CAAK,QAAA,EAAU,IAAA,CAAK,QAAQ,CAAA,GAC7B,CAAC,IAAA,CAAK,QAAA,EAAU,KAAK,QAAQ,CAAA;AAEnC,EAAA,IAAI,SAAA,KAAc,EAAA,IAAM,UAAA,KAAe,EAAA,EAAI;AACzC,IAAA,MAAM,IAAI,MAAM,yBAAyB,CAAA;AAAA,EAC3C;AAEA,EAAA,IAAI,aAAa,UAAA,EAAY;AAC3B,IAAA,MAAM,IAAI,MAAM,0CAA0C,CAAA;AAAA,EAC5D;AAKA,EAAA,MAAM,WAAA,GAAc,OAAA,CAAQ,SAAA,GAAY,SAAA,EAAW,aAAa,SAAS,CAAA;AAKzE,EAAA,MAAM,QAAA,GAAW,OAAA;AAAA,IACf,WAAA,GAAc,SAAA;AAAA,IACd,SAAA,GAAY,MAAA,CAAO,IAAA,CAAK,UAAU;AAAA,GACpC;AACA,EAAA,MAAM,WAAW,QAAA,GAAW,WAAA;AAE5B,EAAA,OAAO,EAAE,UAAU,QAAA,EAAS;AAC9B;AAaO,SAAS,oBAAA,CACd,IAAA,EACA,UAAA,EACA,UAAA,EACmB;AACnB,EAAA,IAAI,IAAA,CAAK,gBAAgB,EAAA,EAAI;AAE3B,IAAA,MAAM,SAAA,GAAY,KAAA,CAAM,UAAA,GAAa,UAAU,CAAA;AAC/C,IAAA,IAAI,cAAc,EAAA,EAAI;AACpB,MAAA,MAAM,IAAI,MAAM,6BAA6B,CAAA;AAAA,IAC/C;AACA,IAAA,MAAMA,UAAAA,GAAY,SAAA;AAElB,IAAA,OAAO;AAAA,MACL,SAAA,EAAAA,UAAAA;AAAA,MACA,OAAA,EAAS,UAAA;AAAA,MACT,OAAA,EAAS,UAAA;AAAA,MACT,SAAA,EAAW,aAAA,CAAcA,UAAAA,EAAW,SAAS;AAAA,KAC/C;AAAA,EACF;AAGA,EAAA,IAAI,IAAA,CAAK,QAAA,KAAa,EAAA,IAAM,IAAA,CAAK,aAAa,EAAA,EAAI;AAChD,IAAA,MAAM,IAAI,MAAM,wDAAwD,CAAA;AAAA,EAC1E;AAGA,EAAA,MAAM,OAAA,GAAW,UAAA,GAAa,IAAA,CAAK,WAAA,GAAe,IAAA,CAAK,QAAA;AACvD,EAAA,MAAM,OAAA,GAAW,UAAA,GAAa,IAAA,CAAK,WAAA,GAAe,IAAA,CAAK,QAAA;AACvD,EAAA,MAAM,SAAA,GAAY,SAAA,CAAU,OAAA,EAAS,OAAO,CAAA;AAG5C,EAAA,MAAM,UAAU,OAAA,CAAQ,SAAA,GAAY,IAAA,CAAK,QAAA,EAAU,KAAK,WAAW,CAAA;AACnE,EAAA,MAAM,UAAU,OAAA,CAAQ,SAAA,GAAY,IAAA,CAAK,QAAA,EAAU,KAAK,WAAW,CAAA;AAGnE,EAAA,MAAM,cAAA,GAAiB,KAAK,WAAA,GAAc,SAAA;AAC1C,EAAA,MAAM,SAAA,GAAY,aAAA,CAAc,SAAA,EAAW,cAAc,CAAA;AAEzD,EAAA,OAAO;AAAA,IACL,SAAA;AAAA,IACA,OAAA;AAAA,IACA,OAAA;AAAA,IACA;AAAA,GACF;AACF;AASO,SAAS,uBAAA,CACd,MACA,QAAA,EACsB;AACtB,EAAA,IAAI,IAAA,CAAK,gBAAgB,EAAA,EAAI;AAC3B,IAAA,MAAM,IAAI,MAAM,oBAAoB,CAAA;AAAA,EACtC;AACA,EAAA,IAAI,QAAA,GAAW,KAAK,WAAA,EAAa;AAC/B,IAAA,MAAM,IAAI,MAAM,4BAA4B,CAAA;AAAA,EAC9C;AAEA,EAAA,MAAM,OAAA,GAAW,QAAA,GAAW,IAAA,CAAK,QAAA,GAAY,IAAA,CAAK,WAAA;AAClD,EAAA,MAAM,OAAA,GAAW,QAAA,GAAW,IAAA,CAAK,QAAA,GAAY,IAAA,CAAK,WAAA;AAElD,EAAA,OAAO,EAAE,SAAS,OAAA,EAAQ;AAC5B;AAaO,SAAS,oBAAA,CACd,MAAA,EACA,gBAAA,EACA,kBAAA,EACQ;AACR,EAAA,MAAM,QAAQ,kBAAA,GAAqB,gBAAA;AACnC,EAAA,OAAQ,SAAS,KAAA,IAAU,GAAA;AAC7B;AAKO,SAAS,cAAA,CACd,MACA,QAAA,EAOwC;AACxC,EAAA,MAAM,QAAA,GAAW,oBAAA;AAAA,IACf,QAAA,CAAS,MAAA;AAAA,IACT,QAAA,CAAS,iBAAA;AAAA,IACT,IAAA,CAAK;AAAA,GACP;AACA,EAAA,MAAM,QAAA,GAAW,oBAAA;AAAA,IACf,QAAA,CAAS,MAAA;AAAA,IACT,QAAA,CAAS,iBAAA;AAAA,IACT,IAAA,CAAK;AAAA,GACP;AAEA,EAAA,OAAO;AAAA,IACL,QAAA,EAAU,SAAS,QAAA,GAAW,QAAA;AAAA,IAC9B,QAAA,EAAU,SAAS,QAAA,GAAW;AAAA,GAChC;AACF;AASO,SAAS,cAAc,IAAA,EAAoB;AAChD,EAAA,IAAI,IAAA,CAAK,QAAA,KAAa,EAAA,EAAI,OAAO,CAAA;AACjC,EAAA,OAAO,YAAY,gBAAA,CAAiB,IAAA,CAAK,QAAA,EAAU,IAAA,CAAK,QAAQ,CAAC,CAAA;AACnE;AAKO,SAAS,cAAc,IAAA,EAAoB;AAChD,EAAA,IAAI,IAAA,CAAK,QAAA,KAAa,EAAA,EAAI,OAAO,CAAA;AACjC,EAAA,OAAO,YAAY,gBAAA,CAAiB,IAAA,CAAK,QAAA,EAAU,IAAA,CAAK,QAAQ,CAAC,CAAA;AACnE;AAKO,SAAS,KAAK,IAAA,EAAoB;AACvC,EAAA,OAAO,IAAA,CAAK,WAAW,IAAA,CAAK,QAAA;AAC9B;AAOO,SAAS,MAAA,CAAO,IAAA,EAAY,IAAA,GAAuB,CAAA,EAAW;AACnE,EAAA,IAAI,SAAS,CAAA,EAAG;AAId,IAAA,OAAO,KAAK,IAAA,CAAK,QAAA;AAAA,EACnB,CAAA,MAAO;AAEL,IAAA,OAAO,KAAK,IAAA,CAAK,QAAA;AAAA,EACnB;AACF;AAWO,SAAS,aAAA,CACd,eAAA,EACA,aAAA,EACA,cAAA,EACA,YAAA,EACQ;AACR,EAAA,MAAM,EAAA,GAAK,MAAA,CAAO,YAAA,GAAe,cAAc,CAAA;AAC/C,EAAA,IAAI,EAAA,KAAO,IAAI,OAAO,EAAA;AAGtB,EAAA,MAAM,iBACJ,aAAA,IAAiB,eAAA,GACb,gBAAgB,eAAA,GAAA,CACf,EAAA,IAAM,QAAQ,eAAA,GAAkB,aAAA;AAEvC,EAAA,OAAO,cAAA,GAAiB,EAAA;AAC1B;AAKO,SAAS,mBAAA,CACd,eAAA,EACA,aAAA,EACA,cAAA,EACA,YAAA,EACQ;AACR,EAAA,MAAM,OAAA,GAAU,aAAA;AAAA,IACd,eAAA;AAAA,IACA,aAAA;AAAA,IACA,cAAA;AAAA,IACA;AAAA,GACF;AACA,EAAA,OAAO,YAAY,OAAO,CAAA;AAC5B;ACpZO,IAAM,4BAAA,GAA+B,IAAI,UAAA,CAAW;AAAA,EACzD,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,EAAA;AAAA,EAAI,CAAA;AAAA,EAAG,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI;AAC/B,CAAC;AAEM,SAAS,kCAAA,GAAqC;AACnD,EAAA,OAAOC,cAAAA,CAAeC,eAAAA,EAAgB,EAAG,CAAC,CAAA,CAAE,MAAA;AAAA,IAC1C;AAAA,GACF;AACF;AAoCO,SAAS,sCAAA,GAA6F;AAC3G,EAAA,OAAOC,gBAAAA;AAAA,IACLC,gBAAAA,CAAiB,CAAC,CAAC,eAAA,EAAiBH,cAAAA,CAAeC,iBAAgB,EAAG,CAAC,CAAC,CAAC,CAAC,CAAA;AAAA,IAC1E,CAAC,KAAA,MAAW,EAAE,GAAG,KAAA,EAAO,eAAe,4BAAA,EAA6B;AAAA,GACtE;AACF;AAEO,SAAS,sCAAA,GAAyF;AACvG,EAAA,OAAOG,gBAAAA,CAAiB;AAAA,IACtB,CAAC,eAAA,EAAiBC,cAAAA,CAAeC,eAAAA,EAAgB,EAAG,CAAC,CAAC;AAAA,GACvD,CAAA;AACH;AAEO,SAAS,oCAAA,GAGd;AACA,EAAA,OAAOC,YAAAA;AAAA,IACL,sCAAA,EAAuC;AAAA,IACvC,sCAAA;AAAuC,GACzC;AACF;AAcO,SAAS,2BAAA,CAOd,OAMA,MAAA,EAOA;AAEA,EAAA,MAAM,cAAA,GAAiB,QAAQ,cAAA,IAAkB,oBAAA;AAGjD,EAAA,MAAM,gBAAA,GAAmB;AAAA,IACvB,MAAM,EAAE,KAAA,EAAO,MAAM,IAAA,IAAQ,IAAA,EAAM,YAAY,KAAA,EAAM;AAAA,IACrD,UAAU,EAAE,KAAA,EAAO,MAAM,QAAA,IAAY,IAAA,EAAM,YAAY,IAAA,EAAK;AAAA,IAC5D,OAAO,EAAE,KAAA,EAAO,MAAM,KAAA,IAAS,IAAA,EAAM,YAAY,KAAA,EAAM;AAAA,IACvD,eAAe,EAAE,KAAA,EAAO,MAAM,aAAA,IAAiB,IAAA,EAAM,YAAY,IAAA;AAAK,GACxE;AACA,EAAA,MAAM,QAAA,GAAW,gBAAA;AAKjB,EAAA,MAAM,cAAA,GAAiB,qBAAA,CAAsB,cAAA,EAAgB,WAAW,CAAA;AACxE,EAAA,OAAO,OAAO,MAAA,CAAO;AAAA,IACnB,QAAA,EAAU;AAAA,MACR,cAAA,CAAe,MAAA,EAAQ,QAAA,CAAS,IAAI,CAAA;AAAA,MACpC,cAAA,CAAe,UAAA,EAAY,QAAA,CAAS,QAAQ,CAAA;AAAA,MAC5C,cAAA,CAAe,OAAA,EAAS,QAAA,CAAS,KAAK,CAAA;AAAA,MACtC,cAAA,CAAe,eAAA,EAAiB,QAAA,CAAS,aAAa;AAAA,KACxD;AAAA,IACA,IAAA,EAAM,sCAAA,EAAuC,CAAE,MAAA,CAAO,EAAE,CAAA;AAAA,IACxD;AAAA,GAOD,CAAA;AACH;AAgBO,SAAS,8BAId,WAAA,EAGyD;AACzD,EAAA,IAAI,WAAA,CAAY,QAAA,CAAS,MAAA,GAAS,CAAA,EAAG;AACnC,IAAA,MAAM,IAAI,WAAA;AAAA,MACR,yDAAA;AAAA,MACA;AAAA,QACE,kBAAA,EAAoB,YAAY,QAAA,CAAS,MAAA;AAAA,QACzC,oBAAA,EAAsB;AAAA;AACxB,KACF;AAAA,EACF;AACA,EAAA,IAAI,YAAA,GAAe,CAAA;AACnB,EAAA,MAAM,iBAAiB,MAAM;AAC3B,IAAA,MAAM,WAAA,GAAe,WAAA,CAAY,QAAA,CAA2B,YAAY,CAAA;AACxE,IAAA,YAAA,IAAgB,CAAA;AAChB,IAAA,OAAO,WAAA;AAAA,EACT,CAAA;AACA,EAAA,OAAO;AAAA,IACL,gBAAgB,WAAA,CAAY,cAAA;AAAA,IAC5B,QAAA,EAAU;AAAA,MACR,MAAM,cAAA,EAAe;AAAA,MACrB,UAAU,cAAA,EAAe;AAAA,MACzB,OAAO,cAAA,EAAe;AAAA,MACtB,eAAe,cAAA;AAAe,KAChC;AAAA,IACA,IAAA,EAAM,sCAAA,EAAuC,CAAE,MAAA,CAAO,YAAY,IAAI;AAAA,GACxE;AACF;AChLO,IAAM,0BAAA,GAA6B,IAAI,UAAA,CAAW;AAAA,EACvD,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,GAAA;AAAA,EAAK,EAAA;AAAA,EAAI;AAClC,CAAC;AAEM,SAAS,gCAAA,GAAmC;AACjD,EAAA,OAAOP,cAAAA,CAAeC,eAAAA,EAAgB,EAAG,CAAC,CAAA,CAAE,MAAA;AAAA,IAC1C;AAAA,GACF;AACF;AAyEO,SAAS,oCAAA,GAAyF;AACvG,EAAA,OAAOC,gBAAAA;AAAA,IACLC,gBAAAA,CAAiB;AAAA,MACf,CAAC,eAAA,EAAiBH,cAAAA,CAAeC,eAAAA,EAAgB,EAAG,CAAC,CAAC,CAAA;AAAA,MACtD,CAAC,MAAA,EAAQO,aAAAA,EAAe,CAAA;AAAA,MACxB,CAAC,MAAA,EAAQA,aAAAA,EAAe;AAAA,KACzB,CAAA;AAAA,IACD,CAAC,KAAA,MAAW,EAAE,GAAG,KAAA,EAAO,eAAe,0BAAA,EAA2B;AAAA,GACpE;AACF;AAEO,SAAS,oCAAA,GAAqF;AACnG,EAAA,OAAOJ,gBAAAA,CAAiB;AAAA,IACtB,CAAC,eAAA,EAAiBC,cAAAA,CAAeC,eAAAA,EAAgB,EAAG,CAAC,CAAC,CAAA;AAAA,IACtD,CAAC,MAAA,EAAQG,aAAAA,EAAe,CAAA;AAAA,IACxB,CAAC,MAAA,EAAQA,aAAAA,EAAe;AAAA,GACzB,CAAA;AACH;AAEO,SAAS,kCAAA,GAGd;AACA,EAAA,OAAOF,YAAAA;AAAA,IACL,oCAAA,EAAqC;AAAA,IACrC,oCAAA;AAAqC,GACvC;AACF;AAgCA,eAAsB,8BAAA,CAepB,OAcA,MAAA,EAiBA;AAEA,EAAA,MAAM,cAAA,GAAiB,QAAQ,cAAA,IAAkB,oBAAA;AAGjD,EAAA,MAAM,gBAAA,GAAmB;AAAA,IACvB,MAAM,EAAE,KAAA,EAAO,MAAM,IAAA,IAAQ,IAAA,EAAM,YAAY,IAAA,EAAK;AAAA,IACpD,UAAU,EAAE,KAAA,EAAO,MAAM,QAAA,IAAY,IAAA,EAAM,YAAY,IAAA,EAAK;AAAA,IAC5D,OAAO,EAAE,KAAA,EAAO,MAAM,KAAA,IAAS,IAAA,EAAM,YAAY,KAAA,EAAM;AAAA,IACvD,WAAW,EAAE,KAAA,EAAO,MAAM,SAAA,IAAa,IAAA,EAAM,YAAY,KAAA,EAAM;AAAA,IAC/D,QAAQ,EAAE,KAAA,EAAO,MAAM,MAAA,IAAU,IAAA,EAAM,YAAY,IAAA,EAAK;AAAA,IACxD,QAAQ,EAAE,KAAA,EAAO,MAAM,MAAA,IAAU,IAAA,EAAM,YAAY,IAAA,EAAK;AAAA,IACxD,YAAY,EAAE,KAAA,EAAO,MAAM,UAAA,IAAc,IAAA,EAAM,YAAY,KAAA,EAAM;AAAA,IACjE,YAAY,EAAE,KAAA,EAAO,MAAM,UAAA,IAAc,IAAA,EAAM,YAAY,KAAA,EAAM;AAAA,IACjE,OAAO,EAAE,KAAA,EAAO,MAAM,KAAA,IAAS,IAAA,EAAM,YAAY,IAAA,EAAK;AAAA,IACtD,OAAO,EAAE,KAAA,EAAO,MAAM,KAAA,IAAS,IAAA,EAAM,YAAY,IAAA,EAAK;AAAA,IACtD,eAAe,EAAE,KAAA,EAAO,MAAM,aAAA,IAAiB,IAAA,EAAM,YAAY,KAAA,EAAM;AAAA,IACvE,eAAe,EAAE,KAAA,EAAO,MAAM,aAAA,IAAiB,IAAA,EAAM,YAAY,KAAA;AAAM,GACzE;AACA,EAAA,MAAM,QAAA,GAAW,gBAAA;AAMjB,EAAA,MAAM,IAAA,GAAO,EAAE,GAAG,KAAA,EAAM;AAGxB,EAAA,IAAI,CAAC,QAAA,CAAS,SAAA,CAAU,KAAA,EAAO;AAC7B,IAAA,QAAA,CAAS,SAAA,CAAU,KAAA,GAAQ,MAAM,wBAAA,CAAyB;AAAA,MACxD,cAAA;AAAA,MACA,KAAA,EAAO;AAAA,QACLN,iBAAgB,CAAE,MAAA;AAAA,UAChB,IAAI,UAAA,CAAW,CAAC,EAAA,EAAI,GAAA,EAAK,GAAA,EAAK,GAAA,EAAK,GAAA,EAAK,GAAA,EAAK,GAAA,EAAK,GAAA,EAAK,GAAG,CAAC;AAAA,SAC7D;AAAA,QACAS,mBAAkB,CAAE,MAAA;AAAA,UAClB,wCAAA,CAAyC,MAAA,EAAQ,QAAA,CAAS,IAAA,CAAK,KAAK;AAAA;AACtE;AACF,KACD,CAAA;AAAA,EACH;AAEA,EAAA,MAAM,cAAA,GAAiBC,qBAAAA,CAAsB,cAAA,EAAgB,WAAW,CAAA;AACxE,EAAA,OAAO,OAAO,MAAA,CAAO;AAAA,IACnB,QAAA,EAAU;AAAA,MACR,cAAA,CAAe,MAAA,EAAQ,QAAA,CAAS,IAAI,CAAA;AAAA,MACpC,cAAA,CAAe,UAAA,EAAY,QAAA,CAAS,QAAQ,CAAA;AAAA,MAC5C,cAAA,CAAe,OAAA,EAAS,QAAA,CAAS,KAAK,CAAA;AAAA,MACtC,cAAA,CAAe,WAAA,EAAa,QAAA,CAAS,SAAS,CAAA;AAAA,MAC9C,cAAA,CAAe,QAAA,EAAU,QAAA,CAAS,MAAM,CAAA;AAAA,MACxC,cAAA,CAAe,QAAA,EAAU,QAAA,CAAS,MAAM,CAAA;AAAA,MACxC,cAAA,CAAe,YAAA,EAAc,QAAA,CAAS,UAAU,CAAA;AAAA,MAChD,cAAA,CAAe,YAAA,EAAc,QAAA,CAAS,UAAU,CAAA;AAAA,MAChD,cAAA,CAAe,OAAA,EAAS,QAAA,CAAS,KAAK,CAAA;AAAA,MACtC,cAAA,CAAe,OAAA,EAAS,QAAA,CAAS,KAAK,CAAA;AAAA,MACtC,cAAA,CAAe,eAAA,EAAiB,QAAA,CAAS,aAAa,CAAA;AAAA,MACtD,cAAA,CAAe,eAAA,EAAiB,QAAA,CAAS,aAAa;AAAA,KACxD;AAAA,IACA,IAAA,EAAM,sCAAqC,CAAE,MAAA;AAAA,MAC3C;AAAA,KACF;AAAA,IACA;AAAA,GAeD,CAAA;AACH;AAgCO,SAAS,yBAAA,CAed,OAcA,MAAA,EAeA;AAEA,EAAA,MAAM,cAAA,GAAiB,QAAQ,cAAA,IAAkB,oBAAA;AAGjD,EAAA,MAAM,gBAAA,GAAmB;AAAA,IACvB,MAAM,EAAE,KAAA,EAAO,MAAM,IAAA,IAAQ,IAAA,EAAM,YAAY,IAAA,EAAK;AAAA,IACpD,UAAU,EAAE,KAAA,EAAO,MAAM,QAAA,IAAY,IAAA,EAAM,YAAY,IAAA,EAAK;AAAA,IAC5D,OAAO,EAAE,KAAA,EAAO,MAAM,KAAA,IAAS,IAAA,EAAM,YAAY,KAAA,EAAM;AAAA,IACvD,WAAW,EAAE,KAAA,EAAO,MAAM,SAAA,IAAa,IAAA,EAAM,YAAY,KAAA,EAAM;AAAA,IAC/D,QAAQ,EAAE,KAAA,EAAO,MAAM,MAAA,IAAU,IAAA,EAAM,YAAY,IAAA,EAAK;AAAA,IACxD,QAAQ,EAAE,KAAA,EAAO,MAAM,MAAA,IAAU,IAAA,EAAM,YAAY,IAAA,EAAK;AAAA,IACxD,YAAY,EAAE,KAAA,EAAO,MAAM,UAAA,IAAc,IAAA,EAAM,YAAY,KAAA,EAAM;AAAA,IACjE,YAAY,EAAE,KAAA,EAAO,MAAM,UAAA,IAAc,IAAA,EAAM,YAAY,KAAA,EAAM;AAAA,IACjE,OAAO,EAAE,KAAA,EAAO,MAAM,KAAA,IAAS,IAAA,EAAM,YAAY,IAAA,EAAK;AAAA,IACtD,OAAO,EAAE,KAAA,EAAO,MAAM,KAAA,IAAS,IAAA,EAAM,YAAY,IAAA,EAAK;AAAA,IACtD,eAAe,EAAE,KAAA,EAAO,MAAM,aAAA,IAAiB,IAAA,EAAM,YAAY,KAAA,EAAM;AAAA,IACvE,eAAe,EAAE,KAAA,EAAO,MAAM,aAAA,IAAiB,IAAA,EAAM,YAAY,KAAA;AAAM,GACzE;AACA,EAAA,MAAM,QAAA,GAAW,gBAAA;AAMjB,EAAA,MAAM,IAAA,GAAO,EAAE,GAAG,KAAA,EAAM;AAExB,EAAA,MAAM,cAAA,GAAiBA,qBAAAA,CAAsB,cAAA,EAAgB,WAAW,CAAA;AACxE,EAAA,OAAO,OAAO,MAAA,CAAO;AAAA,IACnB,QAAA,EAAU;AAAA,MACR,cAAA,CAAe,MAAA,EAAQ,QAAA,CAAS,IAAI,CAAA;AAAA,MACpC,cAAA,CAAe,UAAA,EAAY,QAAA,CAAS,QAAQ,CAAA;AAAA,MAC5C,cAAA,CAAe,OAAA,EAAS,QAAA,CAAS,KAAK,CAAA;AAAA,MACtC,cAAA,CAAe,WAAA,EAAa,QAAA,CAAS,SAAS,CAAA;AAAA,MAC9C,cAAA,CAAe,QAAA,EAAU,QAAA,CAAS,MAAM,CAAA;AAAA,MACxC,cAAA,CAAe,QAAA,EAAU,QAAA,CAAS,MAAM,CAAA;AAAA,MACxC,cAAA,CAAe,YAAA,EAAc,QAAA,CAAS,UAAU,CAAA;AAAA,MAChD,cAAA,CAAe,YAAA,EAAc,QAAA,CAAS,UAAU,CAAA;AAAA,MAChD,cAAA,CAAe,OAAA,EAAS,QAAA,CAAS,KAAK,CAAA;AAAA,MACtC,cAAA,CAAe,OAAA,EAAS,QAAA,CAAS,KAAK,CAAA;AAAA,MACtC,cAAA,CAAe,eAAA,EAAiB,QAAA,CAAS,aAAa,CAAA;AAAA,MACtD,cAAA,CAAe,eAAA,EAAiB,QAAA,CAAS,aAAa;AAAA,KACxD;AAAA,IACA,IAAA,EAAM,sCAAqC,CAAE,MAAA;AAAA,MAC3C;AAAA,KACF;AAAA,IACA;AAAA,GAeD,CAAA;AACH;AAwBO,SAAS,4BAId,WAAA,EAGuD;AACvD,EAAA,IAAI,WAAA,CAAY,QAAA,CAAS,MAAA,GAAS,EAAA,EAAI;AACpC,IAAA,MAAM,IAAIC,WAAAA;AAAA,MACRC,yDAAAA;AAAA,MACA;AAAA,QACE,kBAAA,EAAoB,YAAY,QAAA,CAAS,MAAA;AAAA,QACzC,oBAAA,EAAsB;AAAA;AACxB,KACF;AAAA,EACF;AACA,EAAA,IAAI,YAAA,GAAe,CAAA;AACnB,EAAA,MAAM,iBAAiB,MAAM;AAC3B,IAAA,MAAM,WAAA,GAAe,WAAA,CAAY,QAAA,CAA2B,YAAY,CAAA;AACxE,IAAA,YAAA,IAAgB,CAAA;AAChB,IAAA,OAAO,WAAA;AAAA,EACT,CAAA;AACA,EAAA,OAAO;AAAA,IACL,gBAAgB,WAAA,CAAY,cAAA;AAAA,IAC5B,QAAA,EAAU;AAAA,MACR,MAAM,cAAA,EAAe;AAAA,MACrB,UAAU,cAAA,EAAe;AAAA,MACzB,OAAO,cAAA,EAAe;AAAA,MACtB,WAAW,cAAA,EAAe;AAAA,MAC1B,QAAQ,cAAA,EAAe;AAAA,MACvB,QAAQ,cAAA,EAAe;AAAA,MACvB,YAAY,cAAA,EAAe;AAAA,MAC3B,YAAY,cAAA,EAAe;AAAA,MAC3B,OAAO,cAAA,EAAe;AAAA,MACtB,OAAO,cAAA,EAAe;AAAA,MACtB,eAAe,cAAA,EAAe;AAAA,MAC9B,eAAe,cAAA;AAAe,KAChC;AAAA,IACA,IAAA,EAAM,oCAAA,EAAqC,CAAE,MAAA,CAAO,YAAY,IAAI;AAAA,GACtE;AACF;ACldO,IAAM,mCAAA,GAAsC,IAAI,UAAA,CAAW;AAAA,EAChE,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,EAAA;AAAA,EAAI;AAChC,CAAC;AAEM,SAAS,wCAAA,GAA2C;AACzD,EAAA,OAAOb,cAAAA,CAAeC,eAAAA,EAAgB,EAAG,CAAC,CAAA,CAAE,MAAA;AAAA,IAC1C;AAAA,GACF;AACF;AA6EO,SAAS,4CAAA,GAAyG;AACvH,EAAA,OAAOC,gBAAAA;AAAA,IACLC,gBAAAA,CAAiB;AAAA,MACf,CAAC,eAAA,EAAiBH,cAAAA,CAAeC,eAAAA,EAAgB,EAAG,CAAC,CAAC,CAAA;AAAA,MACtD,CAAC,MAAA,EAAQO,aAAAA,EAAe,CAAA;AAAA,MACxB,CAAC,MAAA,EAAQA,aAAAA,EAAe;AAAA,KACzB,CAAA;AAAA,IACD,CAAC,KAAA,MAAW;AAAA,MACV,GAAG,KAAA;AAAA,MACH,aAAA,EAAe;AAAA,KACjB;AAAA,GACF;AACF;AAEO,SAAS,4CAAA,GAAqG;AACnH,EAAA,OAAOJ,gBAAAA,CAAiB;AAAA,IACtB,CAAC,eAAA,EAAiBC,cAAAA,CAAeC,eAAAA,EAAgB,EAAG,CAAC,CAAC,CAAA;AAAA,IACtD,CAAC,MAAA,EAAQG,aAAAA,EAAe,CAAA;AAAA,IACxB,CAAC,MAAA,EAAQA,aAAAA,EAAe;AAAA,GACzB,CAAA;AACH;AAEO,SAAS,0CAAA,GAGd;AACA,EAAA,OAAOF,YAAAA;AAAA,IACL,4CAAA,EAA6C;AAAA,IAC7C,4CAAA;AAA6C,GAC/C;AACF;AAkCA,eAAsB,sCAAA,CAgBpB,OAeA,MAAA,EAkBA;AAEA,EAAA,MAAM,cAAA,GAAiB,QAAQ,cAAA,IAAkB,oBAAA;AAGjD,EAAA,MAAM,gBAAA,GAAmB;AAAA,IACvB,QAAQ,EAAE,KAAA,EAAO,MAAM,MAAA,IAAU,IAAA,EAAM,YAAY,KAAA,EAAM;AAAA,IACzD,MAAM,EAAE,KAAA,EAAO,MAAM,IAAA,IAAQ,IAAA,EAAM,YAAY,IAAA,EAAK;AAAA,IACpD,mBAAA,EAAqB;AAAA,MACnB,KAAA,EAAO,MAAM,mBAAA,IAAuB,IAAA;AAAA,MACpC,UAAA,EAAY;AAAA,KACd;AAAA,IACA,OAAO,EAAE,KAAA,EAAO,MAAM,KAAA,IAAS,IAAA,EAAM,YAAY,KAAA,EAAM;AAAA,IACvD,WAAW,EAAE,KAAA,EAAO,MAAM,SAAA,IAAa,IAAA,EAAM,YAAY,KAAA,EAAM;AAAA,IAC/D,QAAQ,EAAE,KAAA,EAAO,MAAM,MAAA,IAAU,IAAA,EAAM,YAAY,IAAA,EAAK;AAAA,IACxD,QAAQ,EAAE,KAAA,EAAO,MAAM,MAAA,IAAU,IAAA,EAAM,YAAY,IAAA,EAAK;AAAA,IACxD,YAAY,EAAE,KAAA,EAAO,MAAM,UAAA,IAAc,IAAA,EAAM,YAAY,KAAA,EAAM;AAAA,IACjE,YAAY,EAAE,KAAA,EAAO,MAAM,UAAA,IAAc,IAAA,EAAM,YAAY,KAAA,EAAM;AAAA,IACjE,YAAY,EAAE,KAAA,EAAO,MAAM,UAAA,IAAc,IAAA,EAAM,YAAY,IAAA,EAAK;AAAA,IAChE,YAAY,EAAE,KAAA,EAAO,MAAM,UAAA,IAAc,IAAA,EAAM,YAAY,IAAA,EAAK;AAAA,IAChE,eAAe,EAAE,KAAA,EAAO,MAAM,aAAA,IAAiB,IAAA,EAAM,YAAY,KAAA,EAAM;AAAA,IACvE,eAAe,EAAE,KAAA,EAAO,MAAM,aAAA,IAAiB,IAAA,EAAM,YAAY,KAAA;AAAM,GACzE;AACA,EAAA,MAAM,QAAA,GAAW,gBAAA;AAMjB,EAAA,MAAM,IAAA,GAAO,EAAE,GAAG,KAAA,EAAM;AAGxB,EAAA,IAAI,CAAC,QAAA,CAAS,SAAA,CAAU,KAAA,EAAO;AAC7B,IAAA,QAAA,CAAS,SAAA,CAAU,KAAA,GAAQ,MAAMO,wBAAAA,CAAyB;AAAA,MACxD,cAAA;AAAA,MACA,KAAA,EAAO;AAAA,QACLb,iBAAgB,CAAE,MAAA;AAAA,UAChB,IAAI,UAAA,CAAW,CAAC,EAAA,EAAI,GAAA,EAAK,GAAA,EAAK,GAAA,EAAK,GAAA,EAAK,GAAA,EAAK,GAAA,EAAK,GAAA,EAAK,GAAG,CAAC;AAAA,SAC7D;AAAA,QACAS,mBAAkB,CAAE,MAAA;AAAA,UAClBK,wCAAAA,CAAyC,MAAA,EAAQ,QAAA,CAAS,IAAA,CAAK,KAAK;AAAA;AACtE;AACF,KACD,CAAA;AAAA,EACH;AAEA,EAAA,MAAM,cAAA,GAAiBJ,qBAAAA,CAAsB,cAAA,EAAgB,WAAW,CAAA;AACxE,EAAA,OAAO,OAAO,MAAA,CAAO;AAAA,IACnB,QAAA,EAAU;AAAA,MACR,cAAA,CAAe,QAAA,EAAU,QAAA,CAAS,MAAM,CAAA;AAAA,MACxC,cAAA,CAAe,MAAA,EAAQ,QAAA,CAAS,IAAI,CAAA;AAAA,MACpC,cAAA,CAAe,qBAAA,EAAuB,QAAA,CAAS,mBAAmB,CAAA;AAAA,MAClE,cAAA,CAAe,OAAA,EAAS,QAAA,CAAS,KAAK,CAAA;AAAA,MACtC,cAAA,CAAe,WAAA,EAAa,QAAA,CAAS,SAAS,CAAA;AAAA,MAC9C,cAAA,CAAe,QAAA,EAAU,QAAA,CAAS,MAAM,CAAA;AAAA,MACxC,cAAA,CAAe,QAAA,EAAU,QAAA,CAAS,MAAM,CAAA;AAAA,MACxC,cAAA,CAAe,YAAA,EAAc,QAAA,CAAS,UAAU,CAAA;AAAA,MAChD,cAAA,CAAe,YAAA,EAAc,QAAA,CAAS,UAAU,CAAA;AAAA,MAChD,cAAA,CAAe,YAAA,EAAc,QAAA,CAAS,UAAU,CAAA;AAAA,MAChD,cAAA,CAAe,YAAA,EAAc,QAAA,CAAS,UAAU,CAAA;AAAA,MAChD,cAAA,CAAe,eAAA,EAAiB,QAAA,CAAS,aAAa,CAAA;AAAA,MACtD,cAAA,CAAe,eAAA,EAAiB,QAAA,CAAS,aAAa;AAAA,KACxD;AAAA,IACA,IAAA,EAAM,8CAA6C,CAAE,MAAA;AAAA,MACnD;AAAA,KACF;AAAA,IACA;AAAA,GAgBD,CAAA;AACH;AAkCO,SAAS,iCAAA,CAgBd,OAeA,MAAA,EAgBA;AAEA,EAAA,MAAM,cAAA,GAAiB,QAAQ,cAAA,IAAkB,oBAAA;AAGjD,EAAA,MAAM,gBAAA,GAAmB;AAAA,IACvB,QAAQ,EAAE,KAAA,EAAO,MAAM,MAAA,IAAU,IAAA,EAAM,YAAY,KAAA,EAAM;AAAA,IACzD,MAAM,EAAE,KAAA,EAAO,MAAM,IAAA,IAAQ,IAAA,EAAM,YAAY,IAAA,EAAK;AAAA,IACpD,mBAAA,EAAqB;AAAA,MACnB,KAAA,EAAO,MAAM,mBAAA,IAAuB,IAAA;AAAA,MACpC,UAAA,EAAY;AAAA,KACd;AAAA,IACA,OAAO,EAAE,KAAA,EAAO,MAAM,KAAA,IAAS,IAAA,EAAM,YAAY,KAAA,EAAM;AAAA,IACvD,WAAW,EAAE,KAAA,EAAO,MAAM,SAAA,IAAa,IAAA,EAAM,YAAY,KAAA,EAAM;AAAA,IAC/D,QAAQ,EAAE,KAAA,EAAO,MAAM,MAAA,IAAU,IAAA,EAAM,YAAY,IAAA,EAAK;AAAA,IACxD,QAAQ,EAAE,KAAA,EAAO,MAAM,MAAA,IAAU,IAAA,EAAM,YAAY,IAAA,EAAK;AAAA,IACxD,YAAY,EAAE,KAAA,EAAO,MAAM,UAAA,IAAc,IAAA,EAAM,YAAY,KAAA,EAAM;AAAA,IACjE,YAAY,EAAE,KAAA,EAAO,MAAM,UAAA,IAAc,IAAA,EAAM,YAAY,KAAA,EAAM;AAAA,IACjE,YAAY,EAAE,KAAA,EAAO,MAAM,UAAA,IAAc,IAAA,EAAM,YAAY,IAAA,EAAK;AAAA,IAChE,YAAY,EAAE,KAAA,EAAO,MAAM,UAAA,IAAc,IAAA,EAAM,YAAY,IAAA,EAAK;AAAA,IAChE,eAAe,EAAE,KAAA,EAAO,MAAM,aAAA,IAAiB,IAAA,EAAM,YAAY,KAAA,EAAM;AAAA,IACvE,eAAe,EAAE,KAAA,EAAO,MAAM,aAAA,IAAiB,IAAA,EAAM,YAAY,KAAA;AAAM,GACzE;AACA,EAAA,MAAM,QAAA,GAAW,gBAAA;AAMjB,EAAA,MAAM,IAAA,GAAO,EAAE,GAAG,KAAA,EAAM;AAExB,EAAA,MAAM,cAAA,GAAiBA,qBAAAA,CAAsB,cAAA,EAAgB,WAAW,CAAA;AACxE,EAAA,OAAO,OAAO,MAAA,CAAO;AAAA,IACnB,QAAA,EAAU;AAAA,MACR,cAAA,CAAe,QAAA,EAAU,QAAA,CAAS,MAAM,CAAA;AAAA,MACxC,cAAA,CAAe,MAAA,EAAQ,QAAA,CAAS,IAAI,CAAA;AAAA,MACpC,cAAA,CAAe,qBAAA,EAAuB,QAAA,CAAS,mBAAmB,CAAA;AAAA,MAClE,cAAA,CAAe,OAAA,EAAS,QAAA,CAAS,KAAK,CAAA;AAAA,MACtC,cAAA,CAAe,WAAA,EAAa,QAAA,CAAS,SAAS,CAAA;AAAA,MAC9C,cAAA,CAAe,QAAA,EAAU,QAAA,CAAS,MAAM,CAAA;AAAA,MACxC,cAAA,CAAe,QAAA,EAAU,QAAA,CAAS,MAAM,CAAA;AAAA,MACxC,cAAA,CAAe,YAAA,EAAc,QAAA,CAAS,UAAU,CAAA;AAAA,MAChD,cAAA,CAAe,YAAA,EAAc,QAAA,CAAS,UAAU,CAAA;AAAA,MAChD,cAAA,CAAe,YAAA,EAAc,QAAA,CAAS,UAAU,CAAA;AAAA,MAChD,cAAA,CAAe,YAAA,EAAc,QAAA,CAAS,UAAU,CAAA;AAAA,MAChD,cAAA,CAAe,eAAA,EAAiB,QAAA,CAAS,aAAa,CAAA;AAAA,MACtD,cAAA,CAAe,eAAA,EAAiB,QAAA,CAAS,aAAa;AAAA,KACxD;AAAA,IACA,IAAA,EAAM,8CAA6C,CAAE,MAAA;AAAA,MACnD;AAAA,KACF;AAAA,IACA;AAAA,GAgBD,CAAA;AACH;AAyBO,SAAS,oCAId,WAAA,EAG+D;AAC/D,EAAA,IAAI,WAAA,CAAY,QAAA,CAAS,MAAA,GAAS,EAAA,EAAI;AACpC,IAAA,MAAM,IAAIC,WAAAA;AAAA,MACRC,yDAAAA;AAAA,MACA;AAAA,QACE,kBAAA,EAAoB,YAAY,QAAA,CAAS,MAAA;AAAA,QACzC,oBAAA,EAAsB;AAAA;AACxB,KACF;AAAA,EACF;AACA,EAAA,IAAI,YAAA,GAAe,CAAA;AACnB,EAAA,MAAM,iBAAiB,MAAM;AAC3B,IAAA,MAAM,WAAA,GAAe,WAAA,CAAY,QAAA,CAA2B,YAAY,CAAA;AACxE,IAAA,YAAA,IAAgB,CAAA;AAChB,IAAA,OAAO,WAAA;AAAA,EACT,CAAA;AACA,EAAA,OAAO;AAAA,IACL,gBAAgB,WAAA,CAAY,cAAA;AAAA,IAC5B,QAAA,EAAU;AAAA,MACR,QAAQ,cAAA,EAAe;AAAA,MACvB,MAAM,cAAA,EAAe;AAAA,MACrB,qBAAqB,cAAA,EAAe;AAAA,MACpC,OAAO,cAAA,EAAe;AAAA,MACtB,WAAW,cAAA,EAAe;AAAA,MAC1B,QAAQ,cAAA,EAAe;AAAA,MACvB,QAAQ,cAAA,EAAe;AAAA,MACvB,YAAY,cAAA,EAAe;AAAA,MAC3B,YAAY,cAAA,EAAe;AAAA,MAC3B,YAAY,cAAA,EAAe;AAAA,MAC3B,YAAY,cAAA,EAAe;AAAA,MAC3B,eAAe,cAAA,EAAe;AAAA,MAC9B,eAAe,cAAA;AAAe,KAChC;AAAA,IACA,IAAA,EAAM,8CAA6C,CAAE,MAAA;AAAA,MACnD,WAAA,CAAY;AAAA;AACd,GACF;AACF;ACjfO,IAAM,6BAAA,GAAgC,IAAI,UAAA,CAAW;AAAA,EAC1D,EAAA;AAAA,EAAI,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,EAAA;AAAA,EAAI,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK;AACnC,CAAC;AAEM,SAAS,mCAAA,GAAsC;AACpD,EAAA,OAAOb,cAAAA,CAAeC,eAAAA,EAAgB,EAAG,CAAC,CAAA,CAAE,MAAA;AAAA,IAC1C;AAAA,GACF;AACF;AA2CO,SAAS,uCAAA,GAA+F;AAC7G,EAAA,OAAOC,gBAAAA;AAAA,IACLC,gBAAAA,CAAiB;AAAA,MACf,CAAC,eAAA,EAAiBH,cAAAA,CAAeC,eAAAA,EAAgB,EAAG,CAAC,CAAC,CAAA;AAAA,MACtD,CAAC,YAAA,EAAcO,aAAAA,EAAe;AAAA,KAC/B,CAAA;AAAA,IACD,CAAC,KAAA,MAAW,EAAE,GAAG,KAAA,EAAO,eAAe,6BAAA,EAA8B;AAAA,GACvE;AACF;AAEO,SAAS,uCAAA,GAA2F;AACzG,EAAA,OAAOJ,gBAAAA,CAAiB;AAAA,IACtB,CAAC,eAAA,EAAiBC,cAAAA,CAAeC,eAAAA,EAAgB,EAAG,CAAC,CAAC,CAAA;AAAA,IACtD,CAAC,YAAA,EAAcG,aAAAA,EAAe;AAAA,GAC/B,CAAA;AACH;AAEO,SAAS,qCAAA,GAGd;AACA,EAAA,OAAOF,YAAAA;AAAA,IACL,uCAAA,EAAwC;AAAA,IACxC,uCAAA;AAAwC,GAC1C;AACF;AAiBA,eAAsB,iCAAA,CAQpB,OAOA,MAAA,EAUA;AAEA,EAAA,MAAM,cAAA,GAAiB,QAAQ,cAAA,IAAkB,oBAAA;AAGjD,EAAA,MAAM,gBAAA,GAAmB;AAAA,IACvB,MAAM,EAAE,KAAA,EAAO,MAAM,IAAA,IAAQ,IAAA,EAAM,YAAY,KAAA,EAAM;AAAA,IACrD,UAAU,EAAE,KAAA,EAAO,MAAM,QAAA,IAAY,IAAA,EAAM,YAAY,IAAA,EAAK;AAAA,IAC5D,OAAO,EAAE,KAAA,EAAO,MAAM,KAAA,IAAS,IAAA,EAAM,YAAY,KAAA,EAAM;AAAA,IACvD,OAAO,EAAE,KAAA,EAAO,MAAM,KAAA,IAAS,IAAA,EAAM,YAAY,IAAA,EAAK;AAAA,IACtD,eAAe,EAAE,KAAA,EAAO,MAAM,aAAA,IAAiB,IAAA,EAAM,YAAY,KAAA;AAAM,GACzE;AACA,EAAA,MAAM,QAAA,GAAW,gBAAA;AAMjB,EAAA,MAAM,IAAA,GAAO,EAAE,GAAG,KAAA,EAAM;AAGxB,EAAA,IAAI,CAAC,QAAA,CAAS,QAAA,CAAS,KAAA,EAAO;AAC5B,IAAA,QAAA,CAAS,QAAA,CAAS,KAAA,GAAQ,MAAMO,wBAAAA,CAAyB;AAAA,MACvD,cAAA;AAAA,MACA,KAAA,EAAO;AAAA,QACLb,iBAAgB,CAAE,MAAA;AAAA,UAChB,IAAI,UAAA,CAAW,CAAC,GAAA,EAAK,GAAA,EAAK,GAAA,EAAK,GAAA,EAAK,GAAA,EAAK,GAAA,EAAK,GAAA,EAAK,GAAG,CAAC;AAAA,SACzD;AAAA,QACAS,mBAAkB,CAAE,MAAA;AAAA,UAClBK,wCAAAA,CAAyC,MAAA,EAAQ,QAAA,CAAS,IAAA,CAAK,KAAK;AAAA,SACtE;AAAA,QACAL,mBAAkB,CAAE,MAAA;AAAA,UAClBK,wCAAAA;AAAA,YACE,OAAA;AAAA,YACA,SAAS,KAAA,CAAM;AAAA;AACjB,SACF;AAAA,QACAP,eAAc,CAAE,MAAA;AAAA,UACd,kCAAA,CAAmC,YAAA,EAAc,IAAA,CAAK,UAAU;AAAA;AAClE;AACF,KACD,CAAA;AAAA,EACH;AACA,EAAA,IAAI,CAAC,QAAA,CAAS,aAAA,CAAc,KAAA,EAAO;AACjC,IAAA,QAAA,CAAS,cAAc,KAAA,GACrB,kCAAA;AAAA,EACJ;AAEA,EAAA,MAAM,cAAA,GAAiBG,qBAAAA,CAAsB,cAAA,EAAgB,WAAW,CAAA;AACxE,EAAA,OAAO,OAAO,MAAA,CAAO;AAAA,IACnB,QAAA,EAAU;AAAA,MACR,cAAA,CAAe,MAAA,EAAQ,QAAA,CAAS,IAAI,CAAA;AAAA,MACpC,cAAA,CAAe,UAAA,EAAY,QAAA,CAAS,QAAQ,CAAA;AAAA,MAC5C,cAAA,CAAe,OAAA,EAAS,QAAA,CAAS,KAAK,CAAA;AAAA,MACtC,cAAA,CAAe,OAAA,EAAS,QAAA,CAAS,KAAK,CAAA;AAAA,MACtC,cAAA,CAAe,eAAA,EAAiB,QAAA,CAAS,aAAa;AAAA,KACxD;AAAA,IACA,IAAA,EAAM,yCAAwC,CAAE,MAAA;AAAA,MAC9C;AAAA,KACF;AAAA,IACA;AAAA,GAQD,CAAA;AACH;AAiBO,SAAS,4BAAA,CAQd,OAOA,MAAA,EAQA;AAEA,EAAA,MAAM,cAAA,GAAiB,QAAQ,cAAA,IAAkB,oBAAA;AAGjD,EAAA,MAAM,gBAAA,GAAmB;AAAA,IACvB,MAAM,EAAE,KAAA,EAAO,MAAM,IAAA,IAAQ,IAAA,EAAM,YAAY,KAAA,EAAM;AAAA,IACrD,UAAU,EAAE,KAAA,EAAO,MAAM,QAAA,IAAY,IAAA,EAAM,YAAY,IAAA,EAAK;AAAA,IAC5D,OAAO,EAAE,KAAA,EAAO,MAAM,KAAA,IAAS,IAAA,EAAM,YAAY,KAAA,EAAM;AAAA,IACvD,OAAO,EAAE,KAAA,EAAO,MAAM,KAAA,IAAS,IAAA,EAAM,YAAY,IAAA,EAAK;AAAA,IACtD,eAAe,EAAE,KAAA,EAAO,MAAM,aAAA,IAAiB,IAAA,EAAM,YAAY,KAAA;AAAM,GACzE;AACA,EAAA,MAAM,QAAA,GAAW,gBAAA;AAMjB,EAAA,MAAM,IAAA,GAAO,EAAE,GAAG,KAAA,EAAM;AAGxB,EAAA,IAAI,CAAC,QAAA,CAAS,aAAA,CAAc,KAAA,EAAO;AACjC,IAAA,QAAA,CAAS,cAAc,KAAA,GACrB,kCAAA;AAAA,EACJ;AAEA,EAAA,MAAM,cAAA,GAAiBA,qBAAAA,CAAsB,cAAA,EAAgB,WAAW,CAAA;AACxE,EAAA,OAAO,OAAO,MAAA,CAAO;AAAA,IACnB,QAAA,EAAU;AAAA,MACR,cAAA,CAAe,MAAA,EAAQ,QAAA,CAAS,IAAI,CAAA;AAAA,MACpC,cAAA,CAAe,UAAA,EAAY,QAAA,CAAS,QAAQ,CAAA;AAAA,MAC5C,cAAA,CAAe,OAAA,EAAS,QAAA,CAAS,KAAK,CAAA;AAAA,MACtC,cAAA,CAAe,OAAA,EAAS,QAAA,CAAS,KAAK,CAAA;AAAA,MACtC,cAAA,CAAe,eAAA,EAAiB,QAAA,CAAS,aAAa;AAAA,KACxD;AAAA,IACA,IAAA,EAAM,yCAAwC,CAAE,MAAA;AAAA,MAC9C;AAAA,KACF;AAAA,IACA;AAAA,GAQD,CAAA;AACH;AAiBO,SAAS,+BAId,WAAA,EAG0D;AAC1D,EAAA,IAAI,WAAA,CAAY,QAAA,CAAS,MAAA,GAAS,CAAA,EAAG;AACnC,IAAA,MAAM,IAAIC,WAAAA;AAAA,MACRC,yDAAAA;AAAA,MACA;AAAA,QACE,kBAAA,EAAoB,YAAY,QAAA,CAAS,MAAA;AAAA,QACzC,oBAAA,EAAsB;AAAA;AACxB,KACF;AAAA,EACF;AACA,EAAA,IAAI,YAAA,GAAe,CAAA;AACnB,EAAA,MAAM,iBAAiB,MAAM;AAC3B,IAAA,MAAM,WAAA,GAAe,WAAA,CAAY,QAAA,CAA2B,YAAY,CAAA;AACxE,IAAA,YAAA,IAAgB,CAAA;AAChB,IAAA,OAAO,WAAA;AAAA,EACT,CAAA;AACA,EAAA,OAAO;AAAA,IACL,gBAAgB,WAAA,CAAY,cAAA;AAAA,IAC5B,QAAA,EAAU;AAAA,MACR,MAAM,cAAA,EAAe;AAAA,MACrB,UAAU,cAAA,EAAe;AAAA,MACzB,OAAO,cAAA,EAAe;AAAA,MACtB,OAAO,cAAA,EAAe;AAAA,MACtB,eAAe,cAAA;AAAe,KAChC;AAAA,IACA,IAAA,EAAM,uCAAA,EAAwC,CAAE,MAAA,CAAO,YAAY,IAAI;AAAA,GACzE;AACF;ACnUO,IAAM,+BAAA,GAAkC,IAAI,UAAA,CAAW;AAAA,EAC5D,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,EAAA;AAAA,EAAI,CAAA;AAAA,EAAG,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK;AAClC,CAAC;AAEM,SAAS,qCAAA,GAAwC;AACtD,EAAA,OAAOb,cAAAA,CAAeC,eAAAA,EAAgB,EAAG,CAAC,CAAA,CAAE,MAAA;AAAA,IAC1C;AAAA,GACF;AACF;AAkDO,SAAS,yCAAA,GAA0F;AACxG,EAAA,OAAOC,gBAAAA;AAAA,IACLC,gBAAAA,CAAiB;AAAA,MACf,CAAC,eAAA,EAAiBH,cAAAA,CAAeC,eAAAA,EAAgB,EAAG,CAAC,CAAC,CAAA;AAAA,MACtD,CAAC,OAAA,EAASS,iBAAAA,EAAmB,CAAA;AAAA,MAC7B,CAAC,eAAA,EAAiBM,aAAAA,EAAe,CAAA;AAAA,MACjC,CAAC,gBAAA,EAAkBA,aAAAA,EAAe,CAAA;AAAA,MAClC,CAAC,oBAAA,EAAsBC,iBAAAA,EAAmB,CAAA;AAAA,MAC1C,CAAC,gBAAA,EAAkBD,aAAAA,EAAe,CAAA;AAAA,MAClC,CAAC,eAAA,EAAiBE,eAAAA,CAAgBR,iBAAAA,EAAmB,CAAC;AAAA,KACvD,CAAA;AAAA,IACD,CAAC,KAAA,MAAW,EAAE,GAAG,KAAA,EAAO,eAAe,+BAAA,EAAgC;AAAA,GACzE;AACF;AAEO,SAAS,yCAAA,GAAsF;AACpG,EAAA,OAAON,gBAAAA,CAAiB;AAAA,IACtB,CAAC,eAAA,EAAiBC,cAAAA,CAAeC,eAAAA,EAAgB,EAAG,CAAC,CAAC,CAAA;AAAA,IACtD,CAAC,OAAA,EAASa,iBAAAA,EAAmB,CAAA;AAAA,IAC7B,CAAC,eAAA,EAAiBC,aAAAA,EAAe,CAAA;AAAA,IACjC,CAAC,gBAAA,EAAkBA,aAAAA,EAAe,CAAA;AAAA,IAClC,CAAC,oBAAA,EAAsBC,iBAAAA,EAAmB,CAAA;AAAA,IAC1C,CAAC,gBAAA,EAAkBD,aAAAA,EAAe,CAAA;AAAA,IAClC,CAAC,eAAA,EAAiBE,eAAAA,CAAgBH,iBAAAA,EAAmB,CAAC;AAAA,GACvD,CAAA;AACH;AAEO,SAAS,uCAAA,GAGd;AACA,EAAA,OAAOZ,YAAAA;AAAA,IACL,yCAAA,EAA0C;AAAA,IAC1C,yCAAA;AAA0C,GAC5C;AACF;AAoBA,eAAsB,mCAAA,CAOpB,OAMA,MAAA,EASA;AAEA,EAAA,MAAM,cAAA,GAAiB,QAAQ,cAAA,IAAkB,oBAAA;AAGjD,EAAA,MAAM,gBAAA,GAAmB;AAAA,IACvB,QAAQ,EAAE,KAAA,EAAO,MAAM,MAAA,IAAU,IAAA,EAAM,YAAY,IAAA,EAAK;AAAA,IACxD,aAAa,EAAE,KAAA,EAAO,MAAM,WAAA,IAAe,IAAA,EAAM,YAAY,KAAA,EAAM;AAAA,IACnE,OAAO,EAAE,KAAA,EAAO,MAAM,KAAA,IAAS,IAAA,EAAM,YAAY,IAAA,EAAK;AAAA,IACtD,eAAe,EAAE,KAAA,EAAO,MAAM,aAAA,IAAiB,IAAA,EAAM,YAAY,KAAA;AAAM,GACzE;AACA,EAAA,MAAM,QAAA,GAAW,gBAAA;AAMjB,EAAA,MAAM,IAAA,GAAO,EAAE,GAAG,KAAA,EAAM;AAGxB,EAAA,IAAI,CAAC,QAAA,CAAS,MAAA,CAAO,KAAA,EAAO;AAC1B,IAAA,QAAA,CAAS,MAAA,CAAO,KAAA,GAAQ,MAAMO,wBAAAA,CAAyB;AAAA,MACrD,cAAA;AAAA,MACA,KAAA,EAAO;AAAA,QACLb,eAAAA,EAAgB,CAAE,MAAA,CAAO,IAAI,UAAA,CAAW,CAAC,EAAA,EAAI,GAAA,EAAK,GAAA,EAAK,GAAA,EAAK,GAAA,EAAK,GAAG,CAAC,CAAC;AAAA;AACxE,KACD,CAAA;AAAA,EACH;AACA,EAAA,IAAI,CAAC,QAAA,CAAS,aAAA,CAAc,KAAA,EAAO;AACjC,IAAA,QAAA,CAAS,cAAc,KAAA,GACrB,kCAAA;AAAA,EACJ;AAEA,EAAA,MAAM,cAAA,GAAiBU,qBAAAA,CAAsB,cAAA,EAAgB,WAAW,CAAA;AACxE,EAAA,OAAO,OAAO,MAAA,CAAO;AAAA,IACnB,QAAA,EAAU;AAAA,MACR,cAAA,CAAe,QAAA,EAAU,QAAA,CAAS,MAAM,CAAA;AAAA,MACxC,cAAA,CAAe,aAAA,EAAe,QAAA,CAAS,WAAW,CAAA;AAAA,MAClD,cAAA,CAAe,OAAA,EAAS,QAAA,CAAS,KAAK,CAAA;AAAA,MACtC,cAAA,CAAe,eAAA,EAAiB,QAAA,CAAS,aAAa;AAAA,KACxD;AAAA,IACA,IAAA,EAAM,2CAA0C,CAAE,MAAA;AAAA,MAChD;AAAA,KACF;AAAA,IACA;AAAA,GAOD,CAAA;AACH;AAoBO,SAAS,8BAAA,CAOd,OAMA,MAAA,EAOA;AAEA,EAAA,MAAM,cAAA,GAAiB,QAAQ,cAAA,IAAkB,oBAAA;AAGjD,EAAA,MAAM,gBAAA,GAAmB;AAAA,IACvB,QAAQ,EAAE,KAAA,EAAO,MAAM,MAAA,IAAU,IAAA,EAAM,YAAY,IAAA,EAAK;AAAA,IACxD,aAAa,EAAE,KAAA,EAAO,MAAM,WAAA,IAAe,IAAA,EAAM,YAAY,KAAA,EAAM;AAAA,IACnE,OAAO,EAAE,KAAA,EAAO,MAAM,KAAA,IAAS,IAAA,EAAM,YAAY,IAAA,EAAK;AAAA,IACtD,eAAe,EAAE,KAAA,EAAO,MAAM,aAAA,IAAiB,IAAA,EAAM,YAAY,KAAA;AAAM,GACzE;AACA,EAAA,MAAM,QAAA,GAAW,gBAAA;AAMjB,EAAA,MAAM,IAAA,GAAO,EAAE,GAAG,KAAA,EAAM;AAGxB,EAAA,IAAI,CAAC,QAAA,CAAS,aAAA,CAAc,KAAA,EAAO;AACjC,IAAA,QAAA,CAAS,cAAc,KAAA,GACrB,kCAAA;AAAA,EACJ;AAEA,EAAA,MAAM,cAAA,GAAiBA,qBAAAA,CAAsB,cAAA,EAAgB,WAAW,CAAA;AACxE,EAAA,OAAO,OAAO,MAAA,CAAO;AAAA,IACnB,QAAA,EAAU;AAAA,MACR,cAAA,CAAe,QAAA,EAAU,QAAA,CAAS,MAAM,CAAA;AAAA,MACxC,cAAA,CAAe,aAAA,EAAe,QAAA,CAAS,WAAW,CAAA;AAAA,MAClD,cAAA,CAAe,OAAA,EAAS,QAAA,CAAS,KAAK,CAAA;AAAA,MACtC,cAAA,CAAe,eAAA,EAAiB,QAAA,CAAS,aAAa;AAAA,KACxD;AAAA,IACA,IAAA,EAAM,2CAA0C,CAAE,MAAA;AAAA,MAChD;AAAA,KACF;AAAA,IACA;AAAA,GAOD,CAAA;AACH;AAgBO,SAAS,iCAId,WAAA,EAG4D;AAC5D,EAAA,IAAI,WAAA,CAAY,QAAA,CAAS,MAAA,GAAS,CAAA,EAAG;AACnC,IAAA,MAAM,IAAIC,WAAAA;AAAA,MACRC,yDAAAA;AAAA,MACA;AAAA,QACE,kBAAA,EAAoB,YAAY,QAAA,CAAS,MAAA;AAAA,QACzC,oBAAA,EAAsB;AAAA;AACxB,KACF;AAAA,EACF;AACA,EAAA,IAAI,YAAA,GAAe,CAAA;AACnB,EAAA,MAAM,iBAAiB,MAAM;AAC3B,IAAA,MAAM,WAAA,GAAe,WAAA,CAAY,QAAA,CAA2B,YAAY,CAAA;AACxE,IAAA,YAAA,IAAgB,CAAA;AAChB,IAAA,OAAO,WAAA;AAAA,EACT,CAAA;AACA,EAAA,OAAO;AAAA,IACL,gBAAgB,WAAA,CAAY,cAAA;AAAA,IAC5B,QAAA,EAAU;AAAA,MACR,QAAQ,cAAA,EAAe;AAAA,MACvB,aAAa,cAAA,EAAe;AAAA,MAC5B,OAAO,cAAA,EAAe;AAAA,MACtB,eAAe,cAAA;AAAe,KAChC;AAAA,IACA,IAAA,EAAM,yCAAA,EAA0C,CAAE,MAAA,CAAO,YAAY,IAAI;AAAA,GAC3E;AACF;ACjUO,IAAM,+BAAA,GAAkC,IAAI,UAAA,CAAW;AAAA,EAC5D,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK;AACrC,CAAC;AAEM,SAAS,qCAAA,GAAwC;AACtD,EAAA,OAAOb,cAAAA,CAAeC,eAAAA,EAAgB,EAAG,CAAC,CAAA,CAAE,MAAA;AAAA,IAC1C;AAAA,GACF;AACF;AAmDO,SAAS,yCAAA,GAAmG;AACjH,EAAA,OAAOC,gBAAAA;AAAA,IACLC,gBAAAA,CAAiB;AAAA,MACf,CAAC,eAAA,EAAiBH,cAAAA,CAAeC,eAAAA,EAAgB,EAAG,CAAC,CAAC,CAAA;AAAA,MACtD,CAAC,wBAAA,EAA0BsB,cAAAA,EAAgB,CAAA;AAAA,MAC3C,CAAC,wBAAA,EAA0BC,aAAAA,EAAe;AAAA,KAC3C,CAAA;AAAA,IACD,CAAC,KAAA,MAAW,EAAE,GAAG,KAAA,EAAO,eAAe,+BAAA,EAAgC;AAAA,GACzE;AACF;AAEO,SAAS,yCAAA,GAA+F;AAC7G,EAAA,OAAOpB,gBAAAA,CAAiB;AAAA,IACtB,CAAC,eAAA,EAAiBC,cAAAA,CAAeC,eAAAA,EAAgB,EAAG,CAAC,CAAC,CAAA;AAAA,IACtD,CAAC,wBAAA,EAA0BmB,cAAAA,EAAgB,CAAA;AAAA,IAC3C,CAAC,wBAAA,EAA0BC,aAAAA,EAAe;AAAA,GAC3C,CAAA;AACH;AAEO,SAAS,uCAAA,GAGd;AACA,EAAA,OAAOnB,YAAAA;AAAA,IACL,yCAAA,EAA0C;AAAA,IAC1C,yCAAA;AAA0C,GAC5C;AACF;AAoBA,eAAsB,mCAAA,CASpB,OAQA,MAAA,EAWA;AAEA,EAAA,MAAM,cAAA,GAAiB,QAAQ,cAAA,IAAkB,oBAAA;AAGjD,EAAA,MAAM,gBAAA,GAAmB;AAAA,IACvB,QAAQ,EAAE,KAAA,EAAO,MAAM,MAAA,IAAU,IAAA,EAAM,YAAY,KAAA,EAAM;AAAA,IACzD,MAAM,EAAE,KAAA,EAAO,MAAM,IAAA,IAAQ,IAAA,EAAM,YAAY,KAAA,EAAM;AAAA,IACrD,QAAQ,EAAE,KAAA,EAAO,MAAM,MAAA,IAAU,IAAA,EAAM,YAAY,IAAA,EAAK;AAAA,IACxD,OAAO,EAAE,KAAA,EAAO,MAAM,KAAA,IAAS,IAAA,EAAM,YAAY,KAAA,EAAM;AAAA,IACvD,OAAO,EAAE,KAAA,EAAO,MAAM,KAAA,IAAS,IAAA,EAAM,YAAY,IAAA,EAAK;AAAA,IACtD,eAAe,EAAE,KAAA,EAAO,MAAM,aAAA,IAAiB,IAAA,EAAM,YAAY,KAAA;AAAM,GACzE;AACA,EAAA,MAAM,QAAA,GAAW,gBAAA;AAMjB,EAAA,MAAM,IAAA,GAAO,EAAE,GAAG,KAAA,EAAM;AAGxB,EAAA,IAAI,CAAC,QAAA,CAAS,MAAA,CAAO,KAAA,EAAO;AAC1B,IAAA,QAAA,CAAS,MAAA,CAAO,KAAA,GAAQ,MAAMO,wBAAAA,CAAyB;AAAA,MACrD,cAAA;AAAA,MACA,KAAA,EAAO;AAAA,QACLb,eAAAA,EAAgB,CAAE,MAAA,CAAO,IAAI,UAAA,CAAW,CAAC,GAAA,EAAK,GAAA,EAAK,EAAA,EAAI,EAAA,EAAI,GAAA,EAAK,GAAG,CAAC,CAAC,CAAA;AAAA,QACrES,mBAAkB,CAAE,MAAA;AAAA,UAClBK,wCAAAA,CAAyC,MAAA,EAAQ,QAAA,CAAS,IAAA,CAAK,KAAK;AAAA;AACtE;AACF,KACD,CAAA;AAAA,EACH;AACA,EAAA,IAAI,CAAC,QAAA,CAAS,aAAA,CAAc,KAAA,EAAO;AACjC,IAAA,QAAA,CAAS,cAAc,KAAA,GACrB,kCAAA;AAAA,EACJ;AAEA,EAAA,MAAM,cAAA,GAAiBJ,qBAAAA,CAAsB,cAAA,EAAgB,WAAW,CAAA;AACxE,EAAA,OAAO,OAAO,MAAA,CAAO;AAAA,IACnB,QAAA,EAAU;AAAA,MACR,cAAA,CAAe,QAAA,EAAU,QAAA,CAAS,MAAM,CAAA;AAAA,MACxC,cAAA,CAAe,MAAA,EAAQ,QAAA,CAAS,IAAI,CAAA;AAAA,MACpC,cAAA,CAAe,QAAA,EAAU,QAAA,CAAS,MAAM,CAAA;AAAA,MACxC,cAAA,CAAe,OAAA,EAAS,QAAA,CAAS,KAAK,CAAA;AAAA,MACtC,cAAA,CAAe,OAAA,EAAS,QAAA,CAAS,KAAK,CAAA;AAAA,MACtC,cAAA,CAAe,eAAA,EAAiB,QAAA,CAAS,aAAa;AAAA,KACxD;AAAA,IACA,IAAA,EAAM,2CAA0C,CAAE,MAAA;AAAA,MAChD;AAAA,KACF;AAAA,IACA;AAAA,GASD,CAAA;AACH;AAoBO,SAAS,8BAAA,CASd,OAQA,MAAA,EASA;AAEA,EAAA,MAAM,cAAA,GAAiB,QAAQ,cAAA,IAAkB,oBAAA;AAGjD,EAAA,MAAM,gBAAA,GAAmB;AAAA,IACvB,QAAQ,EAAE,KAAA,EAAO,MAAM,MAAA,IAAU,IAAA,EAAM,YAAY,KAAA,EAAM;AAAA,IACzD,MAAM,EAAE,KAAA,EAAO,MAAM,IAAA,IAAQ,IAAA,EAAM,YAAY,KAAA,EAAM;AAAA,IACrD,QAAQ,EAAE,KAAA,EAAO,MAAM,MAAA,IAAU,IAAA,EAAM,YAAY,IAAA,EAAK;AAAA,IACxD,OAAO,EAAE,KAAA,EAAO,MAAM,KAAA,IAAS,IAAA,EAAM,YAAY,KAAA,EAAM;AAAA,IACvD,OAAO,EAAE,KAAA,EAAO,MAAM,KAAA,IAAS,IAAA,EAAM,YAAY,IAAA,EAAK;AAAA,IACtD,eAAe,EAAE,KAAA,EAAO,MAAM,aAAA,IAAiB,IAAA,EAAM,YAAY,KAAA;AAAM,GACzE;AACA,EAAA,MAAM,QAAA,GAAW,gBAAA;AAMjB,EAAA,MAAM,IAAA,GAAO,EAAE,GAAG,KAAA,EAAM;AAGxB,EAAA,IAAI,CAAC,QAAA,CAAS,aAAA,CAAc,KAAA,EAAO;AACjC,IAAA,QAAA,CAAS,cAAc,KAAA,GACrB,kCAAA;AAAA,EACJ;AAEA,EAAA,MAAM,cAAA,GAAiBA,qBAAAA,CAAsB,cAAA,EAAgB,WAAW,CAAA;AACxE,EAAA,OAAO,OAAO,MAAA,CAAO;AAAA,IACnB,QAAA,EAAU;AAAA,MACR,cAAA,CAAe,QAAA,EAAU,QAAA,CAAS,MAAM,CAAA;AAAA,MACxC,cAAA,CAAe,MAAA,EAAQ,QAAA,CAAS,IAAI,CAAA;AAAA,MACpC,cAAA,CAAe,QAAA,EAAU,QAAA,CAAS,MAAM,CAAA;AAAA,MACxC,cAAA,CAAe,OAAA,EAAS,QAAA,CAAS,KAAK,CAAA;AAAA,MACtC,cAAA,CAAe,OAAA,EAAS,QAAA,CAAS,KAAK,CAAA;AAAA,MACtC,cAAA,CAAe,eAAA,EAAiB,QAAA,CAAS,aAAa;AAAA,KACxD;AAAA,IACA,IAAA,EAAM,2CAA0C,CAAE,MAAA;AAAA,MAChD;AAAA,KACF;AAAA,IACA;AAAA,GASD,CAAA;AACH;AAkBO,SAAS,iCAId,WAAA,EAG4D;AAC5D,EAAA,IAAI,WAAA,CAAY,QAAA,CAAS,MAAA,GAAS,CAAA,EAAG;AACnC,IAAA,MAAM,IAAIC,WAAAA;AAAA,MACRC,yDAAAA;AAAA,MACA;AAAA,QACE,kBAAA,EAAoB,YAAY,QAAA,CAAS,MAAA;AAAA,QACzC,oBAAA,EAAsB;AAAA;AACxB,KACF;AAAA,EACF;AACA,EAAA,IAAI,YAAA,GAAe,CAAA;AACnB,EAAA,MAAM,iBAAiB,MAAM;AAC3B,IAAA,MAAM,WAAA,GAAe,WAAA,CAAY,QAAA,CAA2B,YAAY,CAAA;AACxE,IAAA,YAAA,IAAgB,CAAA;AAChB,IAAA,OAAO,WAAA;AAAA,EACT,CAAA;AACA,EAAA,OAAO;AAAA,IACL,gBAAgB,WAAA,CAAY,cAAA;AAAA,IAC5B,QAAA,EAAU;AAAA,MACR,QAAQ,cAAA,EAAe;AAAA,MACvB,MAAM,cAAA,EAAe;AAAA,MACrB,QAAQ,cAAA,EAAe;AAAA,MACvB,OAAO,cAAA,EAAe;AAAA,MACtB,OAAO,cAAA,EAAe;AAAA,MACtB,eAAe,cAAA;AAAe,KAChC;AAAA,IACA,IAAA,EAAM,yCAAA,EAA0C,CAAE,MAAA,CAAO,YAAY,IAAI;AAAA,GAC3E;AACF;ACrVO,IAAM,6BAAA,GAAgC,IAAI,UAAA,CAAW;AAAA,EAC1D,EAAA;AAAA,EAAI,GAAA;AAAA,EAAK,EAAA;AAAA,EAAI,GAAA;AAAA,EAAK,EAAA;AAAA,EAAI,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK;AAClC,CAAC;AAEM,SAAS,mCAAA,GAAsC;AACpD,EAAA,OAAOb,cAAAA,CAAeC,eAAAA,EAAgB,EAAG,CAAC,CAAA,CAAE,MAAA;AAAA,IAC1C;AAAA,GACF;AACF;AAkGO,SAAS,uCAAA,GAA+F;AAC7G,EAAA,OAAOC,gBAAAA;AAAA,IACLC,gBAAAA,CAAiB;AAAA,MACf,CAAC,eAAA,EAAiBH,cAAAA,CAAeC,eAAAA,EAAgB,EAAG,CAAC,CAAC,CAAA;AAAA,MACtD,CAAC,OAAA,EAASS,iBAAAA,EAAmB,CAAA;AAAA,MAC7B,CAAC,OAAA,EAASA,iBAAAA,EAAmB,CAAA;AAAA,MAC7B,CAAC,mBAAA,EAAqBM,aAAAA,EAAe,CAAA;AAAA,MACrC,CAAC,oBAAA,EAAsBA,aAAAA,EAAe,CAAA;AAAA,MACtC,CAAC,4BAAA,EAA8BW,YAAAA,EAAc,CAAA;AAAA,MAC7C,CAAC,aAAA,EAAejB,iBAAAA,EAAmB,CAAA;AAAA,MACnC,CAAC,WAAA,EAAac,aAAAA,EAAe;AAAA,KAC9B,CAAA;AAAA,IACD,CAAC,KAAA,MAAW,EAAE,GAAG,KAAA,EAAO,eAAe,6BAAA,EAA8B;AAAA,GACvE;AACF;AAEO,SAAS,uCAAA,GAA2F;AACzG,EAAA,OAAOpB,gBAAAA,CAAiB;AAAA,IACtB,CAAC,eAAA,EAAiBC,cAAAA,CAAeC,eAAAA,EAAgB,EAAG,CAAC,CAAC,CAAA;AAAA,IACtD,CAAC,OAAA,EAASa,iBAAAA,EAAmB,CAAA;AAAA,IAC7B,CAAC,OAAA,EAASA,iBAAAA,EAAmB,CAAA;AAAA,IAC7B,CAAC,mBAAA,EAAqBC,aAAAA,EAAe,CAAA;AAAA,IACrC,CAAC,oBAAA,EAAsBA,aAAAA,EAAe,CAAA;AAAA,IACtC,CAAC,4BAAA,EAA8BQ,YAAAA,EAAc,CAAA;AAAA,IAC7C,CAAC,aAAA,EAAeT,iBAAAA,EAAmB,CAAA;AAAA,IACnC,CAAC,WAAA,EAAaO,aAAAA,EAAe;AAAA,GAC9B,CAAA;AACH;AAEO,SAAS,qCAAA,GAGd;AACA,EAAA,OAAOnB,YAAAA;AAAA,IACL,uCAAA,EAAwC;AAAA,IACxC,uCAAA;AAAwC,GAC1C;AACF;AAgDA,eAAsB,iCAAA,CAkBpB,OAiBA,MAAA,EAoBA;AAEA,EAAA,MAAM,cAAA,GAAiB,QAAQ,cAAA,IAAkB,oBAAA;AAGjD,EAAA,MAAM,gBAAA,GAAmB;AAAA,IACvB,QAAQ,EAAE,KAAA,EAAO,MAAM,MAAA,IAAU,IAAA,EAAM,YAAY,KAAA,EAAM;AAAA,IACzD,MAAM,EAAE,KAAA,EAAO,MAAM,IAAA,IAAQ,IAAA,EAAM,YAAY,IAAA,EAAK;AAAA,IACpD,mBAAA,EAAqB;AAAA,MACnB,KAAA,EAAO,MAAM,mBAAA,IAAuB,IAAA;AAAA,MACpC,UAAA,EAAY;AAAA,KACd;AAAA,IACA,gBAAA,EAAkB;AAAA,MAChB,KAAA,EAAO,MAAM,gBAAA,IAAoB,IAAA;AAAA,MACjC,UAAA,EAAY;AAAA,KACd;AAAA,IACA,WAAW,EAAE,KAAA,EAAO,MAAM,SAAA,IAAa,IAAA,EAAM,YAAY,KAAA,EAAM;AAAA,IAC/D,QAAQ,EAAE,KAAA,EAAO,MAAM,MAAA,IAAU,IAAA,EAAM,YAAY,IAAA,EAAK;AAAA,IACxD,QAAQ,EAAE,KAAA,EAAO,MAAM,MAAA,IAAU,IAAA,EAAM,YAAY,IAAA,EAAK;AAAA,IACxD,YAAY,EAAE,KAAA,EAAO,MAAM,UAAA,IAAc,IAAA,EAAM,YAAY,KAAA,EAAM;AAAA,IACjE,YAAY,EAAE,KAAA,EAAO,MAAM,UAAA,IAAc,IAAA,EAAM,YAAY,KAAA,EAAM;AAAA,IACjE,OAAO,EAAE,KAAA,EAAO,MAAM,KAAA,IAAS,IAAA,EAAM,YAAY,IAAA,EAAK;AAAA,IACtD,eAAe,EAAE,KAAA,EAAO,MAAM,aAAA,IAAiB,IAAA,EAAM,YAAY,KAAA,EAAM;AAAA,IACvE,eAAe,EAAE,KAAA,EAAO,MAAM,aAAA,IAAiB,IAAA,EAAM,YAAY,KAAA,EAAM;AAAA,IACvE,eAAe,EAAE,KAAA,EAAO,MAAM,aAAA,IAAiB,IAAA,EAAM,YAAY,KAAA,EAAM;AAAA,IACvE,MAAM,EAAE,KAAA,EAAO,MAAM,IAAA,IAAQ,IAAA,EAAM,YAAY,KAAA,EAAM;AAAA,IACrD,kBAAA,EAAoB;AAAA,MAClB,KAAA,EAAO,MAAM,kBAAA,IAAsB,IAAA;AAAA,MACnC,UAAA,EAAY;AAAA;AACd,GACF;AACA,EAAA,MAAM,QAAA,GAAW,gBAAA;AAMjB,EAAA,MAAM,IAAA,GAAO,EAAE,GAAG,KAAA,EAAM;AAGxB,EAAA,IAAI,CAAC,QAAA,CAAS,IAAA,CAAK,KAAA,EAAO;AACxB,IAAA,QAAA,CAAS,IAAA,CAAK,KAAA,GAAQ,MAAMO,wBAAAA,CAAyB;AAAA,MACnD,cAAA;AAAA,MACA,KAAA,EAAO;AAAA,QACLb,eAAAA,EAAgB,CAAE,MAAA,CAAO,IAAI,UAAA,CAAW,CAAC,GAAA,EAAK,GAAA,EAAK,GAAA,EAAK,GAAG,CAAC,CAAC,CAAA;AAAA,QAC7DS,mBAAkB,CAAE,MAAA;AAAA,UAClBK,wCAAAA;AAAA,YACE,YAAA;AAAA,YACA,SAAS,UAAA,CAAW;AAAA;AACtB,SACF;AAAA,QACAL,mBAAkB,CAAE,MAAA;AAAA,UAClBK,wCAAAA;AAAA,YACE,YAAA;AAAA,YACA,SAAS,UAAA,CAAW;AAAA;AACtB;AACF;AACF,KACD,CAAA;AAAA,EACH;AACA,EAAA,IAAI,CAAC,QAAA,CAAS,gBAAA,CAAiB,KAAA,EAAO;AACpC,IAAA,QAAA,CAAS,gBAAA,CAAiB,KAAA,GAAQ,MAAMD,wBAAAA,CAAyB;AAAA,MAC/D,cAAA;AAAA,MACA,KAAA,EAAO;AAAA,QACLb,iBAAgB,CAAE,MAAA;AAAA,UAChB,IAAI,UAAA,CAAW;AAAA,YACb,GAAA;AAAA,YAAK,GAAA;AAAA,YAAK,GAAA;AAAA,YAAK,GAAA;AAAA,YAAK,GAAA;AAAA,YAAK,EAAA;AAAA,YAAI,GAAA;AAAA,YAAK,GAAA;AAAA,YAAK,EAAA;AAAA,YAAI,GAAA;AAAA,YAAK,GAAA;AAAA,YAAK,GAAA;AAAA,YAAK,EAAA;AAAA,YAAI,GAAA;AAAA,YAC9D,GAAA;AAAA,YAAK,GAAA;AAAA,YAAK,GAAA;AAAA,YAAK;AAAA,WAChB;AAAA,SACH;AAAA,QACAS,mBAAkB,CAAE,MAAA;AAAA,UAClBK,wCAAAA,CAAyC,MAAA,EAAQ,QAAA,CAAS,IAAA,CAAK,KAAK;AAAA;AACtE;AACF,KACD,CAAA;AAAA,EACH;AACA,EAAA,IAAI,CAAC,QAAA,CAAS,mBAAA,CAAoB,KAAA,EAAO;AACvC,IAAA,QAAA,CAAS,mBAAA,CAAoB,KAAA,GAAQ,MAAMD,wBAAAA,CAAyB;AAAA,MAClE,cAAA;AAAA,MACA,KAAA,EAAO;AAAA,QACLb,iBAAgB,CAAE,MAAA;AAAA,UAChB,IAAI,UAAA,CAAW,CAAC,GAAA,EAAK,GAAA,EAAK,GAAA,EAAK,GAAA,EAAK,GAAA,EAAK,GAAA,EAAK,GAAA,EAAK,GAAG,CAAC;AAAA,SACzD;AAAA,QACAS,mBAAkB,CAAE,MAAA;AAAA,UAClBK,wCAAAA,CAAyC,MAAA,EAAQ,QAAA,CAAS,IAAA,CAAK,KAAK;AAAA,SACtE;AAAA,QACAL,mBAAkB,CAAE,MAAA;AAAA,UAClBK,wCAAAA;AAAA,YACE,kBAAA;AAAA,YACA,SAAS,gBAAA,CAAiB;AAAA;AAC5B,SACF;AAAA,QACAd,eAAAA,EAAgB,CAAE,MAAA,CAAO,IAAI,WAAW,CAAC,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,GAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAC,CAAC,CAAC;AAAA;AACnE,KACD,CAAA;AAAA,EACH;AACA,EAAA,IAAI,CAAC,QAAA,CAAS,SAAA,CAAU,KAAA,EAAO;AAC7B,IAAA,QAAA,CAAS,SAAA,CAAU,KAAA,GAAQ,MAAMa,wBAAAA,CAAyB;AAAA,MACxD,cAAA;AAAA,MACA,KAAA,EAAO;AAAA,QACLb,iBAAgB,CAAE,MAAA;AAAA,UAChB,IAAI,UAAA,CAAW,CAAC,EAAA,EAAI,GAAA,EAAK,GAAA,EAAK,GAAA,EAAK,GAAA,EAAK,GAAA,EAAK,GAAA,EAAK,GAAA,EAAK,GAAG,CAAC;AAAA,SAC7D;AAAA,QACAS,mBAAkB,CAAE,MAAA;AAAA,UAClBK,wCAAAA,CAAyC,MAAA,EAAQ,QAAA,CAAS,IAAA,CAAK,KAAK;AAAA;AACtE;AACF,KACD,CAAA;AAAA,EACH;AACA,EAAA,IAAI,CAAC,QAAA,CAAS,MAAA,CAAO,KAAA,EAAO;AAC1B,IAAA,QAAA,CAAS,MAAA,CAAO,KAAA,GAAQ,MAAMD,wBAAAA,CAAyB;AAAA,MACrD,cAAA;AAAA,MACA,KAAA,EAAO;AAAA,QACLb,eAAAA,EAAgB,CAAE,MAAA,CAAO,IAAI,UAAA,CAAW,CAAC,GAAA,EAAK,EAAA,EAAI,GAAA,EAAK,GAAA,EAAK,GAAA,EAAK,EAAE,CAAC,CAAC,CAAA;AAAA,QACrES,mBAAkB,CAAE,MAAA;AAAA,UAClBK,wCAAAA,CAAyC,MAAA,EAAQ,QAAA,CAAS,IAAA,CAAK,KAAK;AAAA;AACtE;AACF,KACD,CAAA;AAAA,EACH;AACA,EAAA,IAAI,CAAC,QAAA,CAAS,MAAA,CAAO,KAAA,EAAO;AAC1B,IAAA,QAAA,CAAS,MAAA,CAAO,KAAA,GAAQ,MAAMD,wBAAAA,CAAyB;AAAA,MACrD,cAAA;AAAA,MACA,KAAA,EAAO;AAAA,QACLb,eAAAA,EAAgB,CAAE,MAAA,CAAO,IAAI,UAAA,CAAW,CAAC,GAAA,EAAK,EAAA,EAAI,GAAA,EAAK,GAAA,EAAK,GAAA,EAAK,EAAE,CAAC,CAAC,CAAA;AAAA,QACrES,mBAAkB,CAAE,MAAA;AAAA,UAClBK,wCAAAA,CAAyC,MAAA,EAAQ,QAAA,CAAS,IAAA,CAAK,KAAK;AAAA;AACtE;AACF,KACD,CAAA;AAAA,EACH;AACA,EAAA,IAAI,CAAC,QAAA,CAAS,aAAA,CAAc,KAAA,EAAO;AACjC,IAAA,QAAA,CAAS,cAAc,KAAA,GACrB,kCAAA;AAAA,EACJ;AACA,EAAA,IAAI,CAAC,QAAA,CAAS,IAAA,CAAK,KAAA,EAAO;AACxB,IAAA,QAAA,CAAS,KAAK,KAAA,GACZ,6CAAA;AAAA,EACJ;AAEA,EAAA,MAAM,cAAA,GAAiBJ,qBAAAA,CAAsB,cAAA,EAAgB,WAAW,CAAA;AACxE,EAAA,OAAO,OAAO,MAAA,CAAO;AAAA,IACnB,QAAA,EAAU;AAAA,MACR,cAAA,CAAe,QAAA,EAAU,QAAA,CAAS,MAAM,CAAA;AAAA,MACxC,cAAA,CAAe,MAAA,EAAQ,QAAA,CAAS,IAAI,CAAA;AAAA,MACpC,cAAA,CAAe,qBAAA,EAAuB,QAAA,CAAS,mBAAmB,CAAA;AAAA,MAClE,cAAA,CAAe,kBAAA,EAAoB,QAAA,CAAS,gBAAgB,CAAA;AAAA,MAC5D,cAAA,CAAe,WAAA,EAAa,QAAA,CAAS,SAAS,CAAA;AAAA,MAC9C,cAAA,CAAe,QAAA,EAAU,QAAA,CAAS,MAAM,CAAA;AAAA,MACxC,cAAA,CAAe,QAAA,EAAU,QAAA,CAAS,MAAM,CAAA;AAAA,MACxC,cAAA,CAAe,YAAA,EAAc,QAAA,CAAS,UAAU,CAAA;AAAA,MAChD,cAAA,CAAe,YAAA,EAAc,QAAA,CAAS,UAAU,CAAA;AAAA,MAChD,cAAA,CAAe,OAAA,EAAS,QAAA,CAAS,KAAK,CAAA;AAAA,MACtC,cAAA,CAAe,eAAA,EAAiB,QAAA,CAAS,aAAa,CAAA;AAAA,MACtD,cAAA,CAAe,eAAA,EAAiB,QAAA,CAAS,aAAa,CAAA;AAAA,MACtD,cAAA,CAAe,eAAA,EAAiB,QAAA,CAAS,aAAa,CAAA;AAAA,MACtD,cAAA,CAAe,MAAA,EAAQ,QAAA,CAAS,IAAI,CAAA;AAAA,MACpC,cAAA,CAAe,oBAAA,EAAsB,QAAA,CAAS,kBAAkB;AAAA,KAClE;AAAA,IACA,IAAA,EAAM,yCAAwC,CAAE,MAAA;AAAA,MAC9C;AAAA,KACF;AAAA,IACA;AAAA,GAkBD,CAAA;AACH;AAgDO,SAAS,4BAAA,CAkBd,OAiBA,MAAA,EAkBA;AAEA,EAAA,MAAM,cAAA,GAAiB,QAAQ,cAAA,IAAkB,oBAAA;AAGjD,EAAA,MAAM,gBAAA,GAAmB;AAAA,IACvB,QAAQ,EAAE,KAAA,EAAO,MAAM,MAAA,IAAU,IAAA,EAAM,YAAY,KAAA,EAAM;AAAA,IACzD,MAAM,EAAE,KAAA,EAAO,MAAM,IAAA,IAAQ,IAAA,EAAM,YAAY,IAAA,EAAK;AAAA,IACpD,mBAAA,EAAqB;AAAA,MACnB,KAAA,EAAO,MAAM,mBAAA,IAAuB,IAAA;AAAA,MACpC,UAAA,EAAY;AAAA,KACd;AAAA,IACA,gBAAA,EAAkB;AAAA,MAChB,KAAA,EAAO,MAAM,gBAAA,IAAoB,IAAA;AAAA,MACjC,UAAA,EAAY;AAAA,KACd;AAAA,IACA,WAAW,EAAE,KAAA,EAAO,MAAM,SAAA,IAAa,IAAA,EAAM,YAAY,KAAA,EAAM;AAAA,IAC/D,QAAQ,EAAE,KAAA,EAAO,MAAM,MAAA,IAAU,IAAA,EAAM,YAAY,IAAA,EAAK;AAAA,IACxD,QAAQ,EAAE,KAAA,EAAO,MAAM,MAAA,IAAU,IAAA,EAAM,YAAY,IAAA,EAAK;AAAA,IACxD,YAAY,EAAE,KAAA,EAAO,MAAM,UAAA,IAAc,IAAA,EAAM,YAAY,KAAA,EAAM;AAAA,IACjE,YAAY,EAAE,KAAA,EAAO,MAAM,UAAA,IAAc,IAAA,EAAM,YAAY,KAAA,EAAM;AAAA,IACjE,OAAO,EAAE,KAAA,EAAO,MAAM,KAAA,IAAS,IAAA,EAAM,YAAY,IAAA,EAAK;AAAA,IACtD,eAAe,EAAE,KAAA,EAAO,MAAM,aAAA,IAAiB,IAAA,EAAM,YAAY,KAAA,EAAM;AAAA,IACvE,eAAe,EAAE,KAAA,EAAO,MAAM,aAAA,IAAiB,IAAA,EAAM,YAAY,KAAA,EAAM;AAAA,IACvE,eAAe,EAAE,KAAA,EAAO,MAAM,aAAA,IAAiB,IAAA,EAAM,YAAY,KAAA,EAAM;AAAA,IACvE,MAAM,EAAE,KAAA,EAAO,MAAM,IAAA,IAAQ,IAAA,EAAM,YAAY,KAAA,EAAM;AAAA,IACrD,kBAAA,EAAoB;AAAA,MAClB,KAAA,EAAO,MAAM,kBAAA,IAAsB,IAAA;AAAA,MACnC,UAAA,EAAY;AAAA;AACd,GACF;AACA,EAAA,MAAM,QAAA,GAAW,gBAAA;AAMjB,EAAA,MAAM,IAAA,GAAO,EAAE,GAAG,KAAA,EAAM;AAGxB,EAAA,IAAI,CAAC,QAAA,CAAS,aAAA,CAAc,KAAA,EAAO;AACjC,IAAA,QAAA,CAAS,cAAc,KAAA,GACrB,kCAAA;AAAA,EACJ;AACA,EAAA,IAAI,CAAC,QAAA,CAAS,IAAA,CAAK,KAAA,EAAO;AACxB,IAAA,QAAA,CAAS,KAAK,KAAA,GACZ,6CAAA;AAAA,EACJ;AAEA,EAAA,MAAM,cAAA,GAAiBA,qBAAAA,CAAsB,cAAA,EAAgB,WAAW,CAAA;AACxE,EAAA,OAAO,OAAO,MAAA,CAAO;AAAA,IACnB,QAAA,EAAU;AAAA,MACR,cAAA,CAAe,QAAA,EAAU,QAAA,CAAS,MAAM,CAAA;AAAA,MACxC,cAAA,CAAe,MAAA,EAAQ,QAAA,CAAS,IAAI,CAAA;AAAA,MACpC,cAAA,CAAe,qBAAA,EAAuB,QAAA,CAAS,mBAAmB,CAAA;AAAA,MAClE,cAAA,CAAe,kBAAA,EAAoB,QAAA,CAAS,gBAAgB,CAAA;AAAA,MAC5D,cAAA,CAAe,WAAA,EAAa,QAAA,CAAS,SAAS,CAAA;AAAA,MAC9C,cAAA,CAAe,QAAA,EAAU,QAAA,CAAS,MAAM,CAAA;AAAA,MACxC,cAAA,CAAe,QAAA,EAAU,QAAA,CAAS,MAAM,CAAA;AAAA,MACxC,cAAA,CAAe,YAAA,EAAc,QAAA,CAAS,UAAU,CAAA;AAAA,MAChD,cAAA,CAAe,YAAA,EAAc,QAAA,CAAS,UAAU,CAAA;AAAA,MAChD,cAAA,CAAe,OAAA,EAAS,QAAA,CAAS,KAAK,CAAA;AAAA,MACtC,cAAA,CAAe,eAAA,EAAiB,QAAA,CAAS,aAAa,CAAA;AAAA,MACtD,cAAA,CAAe,eAAA,EAAiB,QAAA,CAAS,aAAa,CAAA;AAAA,MACtD,cAAA,CAAe,eAAA,EAAiB,QAAA,CAAS,aAAa,CAAA;AAAA,MACtD,cAAA,CAAe,MAAA,EAAQ,QAAA,CAAS,IAAI,CAAA;AAAA,MACpC,cAAA,CAAe,oBAAA,EAAsB,QAAA,CAAS,kBAAkB;AAAA,KAClE;AAAA,IACA,IAAA,EAAM,yCAAwC,CAAE,MAAA;AAAA,MAC9C;AAAA,KACF;AAAA,IACA;AAAA,GAkBD,CAAA;AACH;AAgCO,SAAS,+BAId,WAAA,EAG0D;AAC1D,EAAA,IAAI,WAAA,CAAY,QAAA,CAAS,MAAA,GAAS,EAAA,EAAI;AACpC,IAAA,MAAM,IAAIC,WAAAA;AAAA,MACRC,yDAAAA;AAAA,MACA;AAAA,QACE,kBAAA,EAAoB,YAAY,QAAA,CAAS,MAAA;AAAA,QACzC,oBAAA,EAAsB;AAAA;AACxB,KACF;AAAA,EACF;AACA,EAAA,IAAI,YAAA,GAAe,CAAA;AACnB,EAAA,MAAM,iBAAiB,MAAM;AAC3B,IAAA,MAAM,WAAA,GAAe,WAAA,CAAY,QAAA,CAA2B,YAAY,CAAA;AACxE,IAAA,YAAA,IAAgB,CAAA;AAChB,IAAA,OAAO,WAAA;AAAA,EACT,CAAA;AACA,EAAA,OAAO;AAAA,IACL,gBAAgB,WAAA,CAAY,cAAA;AAAA,IAC5B,QAAA,EAAU;AAAA,MACR,QAAQ,cAAA,EAAe;AAAA,MACvB,MAAM,cAAA,EAAe;AAAA,MACrB,qBAAqB,cAAA,EAAe;AAAA,MACpC,kBAAkB,cAAA,EAAe;AAAA,MACjC,WAAW,cAAA,EAAe;AAAA,MAC1B,QAAQ,cAAA,EAAe;AAAA,MACvB,QAAQ,cAAA,EAAe;AAAA,MACvB,YAAY,cAAA,EAAe;AAAA,MAC3B,YAAY,cAAA,EAAe;AAAA,MAC3B,OAAO,cAAA,EAAe;AAAA,MACtB,eAAe,cAAA,EAAe;AAAA,MAC9B,eAAe,cAAA,EAAe;AAAA,MAC9B,eAAe,cAAA,EAAe;AAAA,MAC9B,MAAM,cAAA,EAAe;AAAA,MACrB,oBAAoB,cAAA;AAAe,KACrC;AAAA,IACA,IAAA,EAAM,uCAAA,EAAwC,CAAE,MAAA,CAAO,YAAY,IAAI;AAAA,GACzE;AACF;AChsBO,IAAM,4BAAA,GAA+B,IAAI,UAAA,CAAW;AAAA,EACzD,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI;AACnC,CAAC;AAEM,SAAS,kCAAA,GAAqC;AACnD,EAAA,OAAOb,cAAAA,CAAeC,eAAAA,EAAgB,EAAG,CAAC,CAAA,CAAE,MAAA;AAAA,IAC1C;AAAA,GACF;AACF;AA4BO,SAAS,sCAAA,GAA6F;AAC3G,EAAA,OAAOC,gBAAAA;AAAA,IACLC,gBAAAA,CAAiB;AAAA,MACf,CAAC,eAAA,EAAiBH,cAAAA,CAAeC,eAAAA,EAAgB,EAAG,CAAC,CAAC,CAAA;AAAA,MACtD,CAAC,eAAA,EAAiBuB,aAAAA,EAAe;AAAA,KAClC,CAAA;AAAA,IACD,CAAC,KAAA,MAAW,EAAE,GAAG,KAAA,EAAO,eAAe,4BAAA,EAA6B;AAAA,GACtE;AACF;AAEO,SAAS,sCAAA,GAAyF;AACvG,EAAA,OAAOpB,gBAAAA,CAAiB;AAAA,IACtB,CAAC,eAAA,EAAiBC,cAAAA,CAAeC,eAAAA,EAAgB,EAAG,CAAC,CAAC,CAAA;AAAA,IACtD,CAAC,eAAA,EAAiBoB,aAAAA,EAAe;AAAA,GAClC,CAAA;AACH;AAEO,SAAS,oCAAA,GAGd;AACA,EAAA,OAAOnB,YAAAA;AAAA,IACL,sCAAA,EAAuC;AAAA,IACvC,sCAAA;AAAuC,GACzC;AACF;AAWA,eAAsB,gCAAA,CAKpB,OACA,MAAA,EAGA;AAEA,EAAA,MAAM,cAAA,GAAiB,QAAQ,cAAA,IAAkB,oBAAA;AAGjD,EAAA,MAAM,gBAAA,GAAmB;AAAA,IACvB,MAAM,EAAE,KAAA,EAAO,MAAM,IAAA,IAAQ,IAAA,EAAM,YAAY,KAAA,EAAM;AAAA,IACrD,QAAQ,EAAE,KAAA,EAAO,MAAM,MAAA,IAAU,IAAA,EAAM,YAAY,KAAA;AAAM,GAC3D;AACA,EAAA,MAAM,QAAA,GAAW,gBAAA;AAMjB,EAAA,MAAM,IAAA,GAAO,EAAE,GAAG,KAAA,EAAM;AAGxB,EAAA,IAAI,CAAC,QAAA,CAAS,MAAA,CAAO,KAAA,EAAO;AAC1B,IAAA,QAAA,CAAS,MAAA,CAAO,KAAA,GAAQ,MAAMO,wBAAAA,CAAyB;AAAA,MACrD,cAAA;AAAA,MACA,KAAA,EAAO;AAAA,QACLb,eAAAA,EAAgB,CAAE,MAAA,CAAO,IAAI,UAAA,CAAW,CAAC,GAAA,EAAK,GAAA,EAAK,EAAA,EAAI,EAAA,EAAI,GAAA,EAAK,GAAG,CAAC,CAAC,CAAA;AAAA,QACrES,mBAAkB,CAAE,MAAA;AAAA,UAClBK,wCAAAA,CAAyC,MAAA,EAAQ,QAAA,CAAS,IAAA,CAAK,KAAK;AAAA;AACtE;AACF,KACD,CAAA;AAAA,EACH;AAEA,EAAA,MAAM,cAAA,GAAiBJ,qBAAAA,CAAsB,cAAA,EAAgB,WAAW,CAAA;AACxE,EAAA,OAAO,OAAO,MAAA,CAAO;AAAA,IACnB,QAAA,EAAU;AAAA,MACR,cAAA,CAAe,MAAA,EAAQ,QAAA,CAAS,IAAI,CAAA;AAAA,MACpC,cAAA,CAAe,QAAA,EAAU,QAAA,CAAS,MAAM;AAAA,KAC1C;AAAA,IACA,IAAA,EAAM,wCAAuC,CAAE,MAAA;AAAA,MAC7C;AAAA,KACF;AAAA,IACA;AAAA,GAC0E,CAAA;AAC9E;AAWO,SAAS,2BAAA,CAKd,OACA,MAAA,EACyE;AAEzE,EAAA,MAAM,cAAA,GAAiB,QAAQ,cAAA,IAAkB,oBAAA;AAGjD,EAAA,MAAM,gBAAA,GAAmB;AAAA,IACvB,MAAM,EAAE,KAAA,EAAO,MAAM,IAAA,IAAQ,IAAA,EAAM,YAAY,KAAA,EAAM;AAAA,IACrD,QAAQ,EAAE,KAAA,EAAO,MAAM,MAAA,IAAU,IAAA,EAAM,YAAY,KAAA;AAAM,GAC3D;AACA,EAAA,MAAM,QAAA,GAAW,gBAAA;AAMjB,EAAA,MAAM,IAAA,GAAO,EAAE,GAAG,KAAA,EAAM;AAExB,EAAA,MAAM,cAAA,GAAiBA,qBAAAA,CAAsB,cAAA,EAAgB,WAAW,CAAA;AACxE,EAAA,OAAO,OAAO,MAAA,CAAO;AAAA,IACnB,QAAA,EAAU;AAAA,MACR,cAAA,CAAe,MAAA,EAAQ,QAAA,CAAS,IAAI,CAAA;AAAA,MACpC,cAAA,CAAe,QAAA,EAAU,QAAA,CAAS,MAAM;AAAA,KAC1C;AAAA,IACA,IAAA,EAAM,wCAAuC,CAAE,MAAA;AAAA,MAC7C;AAAA,KACF;AAAA,IACA;AAAA,GAC0E,CAAA;AAC9E;AAcO,SAAS,8BAId,WAAA,EAGyD;AACzD,EAAA,IAAI,WAAA,CAAY,QAAA,CAAS,MAAA,GAAS,CAAA,EAAG;AACnC,IAAA,MAAM,IAAIC,WAAAA;AAAA,MACRC,yDAAAA;AAAA,MACA;AAAA,QACE,kBAAA,EAAoB,YAAY,QAAA,CAAS,MAAA;AAAA,QACzC,oBAAA,EAAsB;AAAA;AACxB,KACF;AAAA,EACF;AACA,EAAA,IAAI,YAAA,GAAe,CAAA;AACnB,EAAA,MAAM,iBAAiB,MAAM;AAC3B,IAAA,MAAM,WAAA,GAAe,WAAA,CAAY,QAAA,CAA2B,YAAY,CAAA;AACxE,IAAA,YAAA,IAAgB,CAAA;AAChB,IAAA,OAAO,WAAA;AAAA,EACT,CAAA;AACA,EAAA,OAAO;AAAA,IACL,gBAAgB,WAAA,CAAY,cAAA;AAAA,IAC5B,UAAU,EAAE,IAAA,EAAM,gBAAe,EAAG,MAAA,EAAQ,gBAAe,EAAE;AAAA,IAC7D,IAAA,EAAM,sCAAA,EAAuC,CAAE,MAAA,CAAO,YAAY,IAAI;AAAA,GACxE;AACF;ACnNO,IAAM,2BAAA,GAA8B,IAAI,UAAA,CAAW;AAAA,EACxD,EAAA;AAAA,EAAI,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK;AACpC,CAAC;AAEM,SAAS,iCAAA,GAAoC;AAClD,EAAA,OAAOb,cAAAA,CAAeC,eAAAA,EAAgB,EAAG,CAAC,CAAA,CAAE,MAAA;AAAA,IAC1C;AAAA,GACF;AACF;AAyBO,SAAS,qCAAA,GAA2F;AACzG,EAAA,OAAOC,gBAAAA;AAAA,IACLC,gBAAAA,CAAiB,CAAC,CAAC,eAAA,EAAiBH,cAAAA,CAAeC,iBAAgB,EAAG,CAAC,CAAC,CAAC,CAAC,CAAA;AAAA,IAC1E,CAAC,KAAA,MAAW,EAAE,GAAG,KAAA,EAAO,eAAe,2BAAA,EAA4B;AAAA,GACrE;AACF;AAEO,SAAS,qCAAA,GAAuF;AACrG,EAAA,OAAOG,gBAAAA,CAAiB;AAAA,IACtB,CAAC,eAAA,EAAiBC,cAAAA,CAAeC,eAAAA,EAAgB,EAAG,CAAC,CAAC;AAAA,GACvD,CAAA;AACH;AAEO,SAAS,mCAAA,GAGd;AACA,EAAA,OAAOC,YAAAA;AAAA,IACL,qCAAA,EAAsC;AAAA,IACtC,qCAAA;AAAsC,GACxC;AACF;AAUA,eAAsB,+BAAA,CAKpB,OACA,MAAA,EAGA;AAEA,EAAA,MAAM,cAAA,GAAiB,QAAQ,cAAA,IAAkB,oBAAA;AAGjD,EAAA,MAAM,gBAAA,GAAmB;AAAA,IACvB,MAAM,EAAE,KAAA,EAAO,MAAM,IAAA,IAAQ,IAAA,EAAM,YAAY,KAAA,EAAM;AAAA,IACrD,QAAQ,EAAE,KAAA,EAAO,MAAM,MAAA,IAAU,IAAA,EAAM,YAAY,IAAA;AAAK,GAC1D;AACA,EAAA,MAAM,QAAA,GAAW,gBAAA;AAMjB,EAAA,IAAI,CAAC,QAAA,CAAS,MAAA,CAAO,KAAA,EAAO;AAC1B,IAAA,QAAA,CAAS,MAAA,CAAO,KAAA,GAAQ,MAAMO,wBAAAA,CAAyB;AAAA,MACrD,cAAA;AAAA,MACA,KAAA,EAAO;AAAA,QACLb,eAAAA,EAAgB,CAAE,MAAA,CAAO,IAAI,UAAA,CAAW,CAAC,GAAA,EAAK,GAAA,EAAK,EAAA,EAAI,EAAA,EAAI,GAAA,EAAK,GAAG,CAAC,CAAC,CAAA;AAAA,QACrES,mBAAkB,CAAE,MAAA;AAAA,UAClBK,wCAAAA,CAAyC,MAAA,EAAQ,QAAA,CAAS,IAAA,CAAK,KAAK;AAAA;AACtE;AACF,KACD,CAAA;AAAA,EACH;AAEA,EAAA,MAAM,cAAA,GAAiBJ,qBAAAA,CAAsB,cAAA,EAAgB,WAAW,CAAA;AACxE,EAAA,OAAO,OAAO,MAAA,CAAO;AAAA,IACnB,QAAA,EAAU;AAAA,MACR,cAAA,CAAe,MAAA,EAAQ,QAAA,CAAS,IAAI,CAAA;AAAA,MACpC,cAAA,CAAe,QAAA,EAAU,QAAA,CAAS,MAAM;AAAA,KAC1C;AAAA,IACA,IAAA,EAAM,qCAAA,EAAsC,CAAE,MAAA,CAAO,EAAE,CAAA;AAAA,IACvD;AAAA,GACyE,CAAA;AAC7E;AAUO,SAAS,0BAAA,CAKd,OACA,MAAA,EACwE;AAExE,EAAA,MAAM,cAAA,GAAiB,QAAQ,cAAA,IAAkB,oBAAA;AAGjD,EAAA,MAAM,gBAAA,GAAmB;AAAA,IACvB,MAAM,EAAE,KAAA,EAAO,MAAM,IAAA,IAAQ,IAAA,EAAM,YAAY,KAAA,EAAM;AAAA,IACrD,QAAQ,EAAE,KAAA,EAAO,MAAM,MAAA,IAAU,IAAA,EAAM,YAAY,IAAA;AAAK,GAC1D;AACA,EAAA,MAAM,QAAA,GAAW,gBAAA;AAKjB,EAAA,MAAM,cAAA,GAAiBA,qBAAAA,CAAsB,cAAA,EAAgB,WAAW,CAAA;AACxE,EAAA,OAAO,OAAO,MAAA,CAAO;AAAA,IACnB,QAAA,EAAU;AAAA,MACR,cAAA,CAAe,MAAA,EAAQ,QAAA,CAAS,IAAI,CAAA;AAAA,MACpC,cAAA,CAAe,QAAA,EAAU,QAAA,CAAS,MAAM;AAAA,KAC1C;AAAA,IACA,IAAA,EAAM,qCAAA,EAAsC,CAAE,MAAA,CAAO,EAAE,CAAA;AAAA,IACvD;AAAA,GACyE,CAAA;AAC7E;AAcO,SAAS,6BAId,WAAA,EAGwD;AACxD,EAAA,IAAI,WAAA,CAAY,QAAA,CAAS,MAAA,GAAS,CAAA,EAAG;AACnC,IAAA,MAAM,IAAIC,WAAAA;AAAA,MACRC,yDAAAA;AAAA,MACA;AAAA,QACE,kBAAA,EAAoB,YAAY,QAAA,CAAS,MAAA;AAAA,QACzC,oBAAA,EAAsB;AAAA;AACxB,KACF;AAAA,EACF;AACA,EAAA,IAAI,YAAA,GAAe,CAAA;AACnB,EAAA,MAAM,iBAAiB,MAAM;AAC3B,IAAA,MAAM,WAAA,GAAe,WAAA,CAAY,QAAA,CAA2B,YAAY,CAAA;AACxE,IAAA,YAAA,IAAgB,CAAA;AAChB,IAAA,OAAO,WAAA;AAAA,EACT,CAAA;AACA,EAAA,OAAO;AAAA,IACL,gBAAgB,WAAA,CAAY,cAAA;AAAA,IAC5B,UAAU,EAAE,IAAA,EAAM,gBAAe,EAAG,MAAA,EAAQ,gBAAe,EAAE;AAAA,IAC7D,IAAA,EAAM,qCAAA,EAAsC,CAAE,MAAA,CAAO,YAAY,IAAI;AAAA,GACvE;AACF;AChMO,IAAM,mBAAA,GAAsB,IAAI,UAAA,CAAW;AAAA,EAChD,GAAA;AAAA,EAAK,EAAA;AAAA,EAAI,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,EAAA;AAAA,EAAI,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK;AACnC,CAAC;AAEM,SAAS,0BAAA,GAA6B;AAC3C,EAAA,OAAOb,eAAeC,eAAAA,EAAgB,EAAG,CAAC,CAAA,CAAE,OAAO,mBAAmB,CAAA;AACxE;AA0BO,SAAS,8BAAA,GAA6E;AAC3F,EAAA,OAAOC,gBAAAA;AAAA,IACLC,gBAAAA,CAAiB,CAAC,CAAC,eAAA,EAAiBH,cAAAA,CAAeC,iBAAgB,EAAG,CAAC,CAAC,CAAC,CAAC,CAAA;AAAA,IAC1E,CAAC,KAAA,MAAW,EAAE,GAAG,KAAA,EAAO,eAAe,mBAAA,EAAoB;AAAA,GAC7D;AACF;AAEO,SAAS,8BAAA,GAAyE;AACvF,EAAA,OAAOG,gBAAAA,CAAiB;AAAA,IACtB,CAAC,eAAA,EAAiBC,cAAAA,CAAeC,eAAAA,EAAgB,EAAG,CAAC,CAAC;AAAA,GACvD,CAAA;AACH;AAEO,SAAS,4BAAA,GAGd;AACA,EAAA,OAAOC,YAAAA;AAAA,IACL,8BAAA,EAA+B;AAAA,IAC/B,8BAAA;AAA+B,GACjC;AACF;AAUO,SAAS,mBAAA,CAKd,OACA,MAAA,EACkE;AAElE,EAAA,MAAM,cAAA,GAAiB,QAAQ,cAAA,IAAkB,oBAAA;AAGjD,EAAA,MAAM,gBAAA,GAAmB;AAAA,IACvB,QAAQ,EAAE,KAAA,EAAO,MAAM,MAAA,IAAU,IAAA,EAAM,YAAY,IAAA,EAAK;AAAA,IACxD,OAAO,EAAE,KAAA,EAAO,MAAM,KAAA,IAAS,IAAA,EAAM,YAAY,KAAA;AAAM,GACzD;AACA,EAAA,MAAM,QAAA,GAAW,gBAAA;AAKjB,EAAA,MAAM,cAAA,GAAiBI,qBAAAA,CAAsB,cAAA,EAAgB,WAAW,CAAA;AACxE,EAAA,OAAO,OAAO,MAAA,CAAO;AAAA,IACnB,QAAA,EAAU;AAAA,MACR,cAAA,CAAe,QAAA,EAAU,QAAA,CAAS,MAAM,CAAA;AAAA,MACxC,cAAA,CAAe,OAAA,EAAS,QAAA,CAAS,KAAK;AAAA,KACxC;AAAA,IACA,IAAA,EAAM,8BAAA,EAA+B,CAAE,MAAA,CAAO,EAAE,CAAA;AAAA,IAChD;AAAA,GACmE,CAAA;AACvE;AAcO,SAAS,sBAId,WAAA,EAGiD;AACjD,EAAA,IAAI,WAAA,CAAY,QAAA,CAAS,MAAA,GAAS,CAAA,EAAG;AACnC,IAAA,MAAM,IAAIC,WAAAA;AAAA,MACRC,yDAAAA;AAAA,MACA;AAAA,QACE,kBAAA,EAAoB,YAAY,QAAA,CAAS,MAAA;AAAA,QACzC,oBAAA,EAAsB;AAAA;AACxB,KACF;AAAA,EACF;AACA,EAAA,IAAI,YAAA,GAAe,CAAA;AACnB,EAAA,MAAM,iBAAiB,MAAM;AAC3B,IAAA,MAAM,WAAA,GAAe,WAAA,CAAY,QAAA,CAA2B,YAAY,CAAA;AACxE,IAAA,YAAA,IAAgB,CAAA;AAChB,IAAA,OAAO,WAAA;AAAA,EACT,CAAA;AACA,EAAA,OAAO;AAAA,IACL,gBAAgB,WAAA,CAAY,cAAA;AAAA,IAC5B,UAAU,EAAE,MAAA,EAAQ,gBAAe,EAAG,KAAA,EAAO,gBAAe,EAAE;AAAA,IAC9D,IAAA,EAAM,8BAAA,EAA+B,CAAE,MAAA,CAAO,YAAY,IAAI;AAAA,GAChE;AACF;ACtIO,IAAM,mCAAA,GAAsC,IAAI,UAAA,CAAW;AAAA,EAChE,EAAA;AAAA,EAAI,GAAA;AAAA,EAAK,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,GAAA;AAAA,EAAK,EAAA;AAAA,EAAI,GAAA;AAAA,EAAK;AACjC,CAAC;AAEM,SAAS,uCAAA,GAA0C;AACxD,EAAA,OAAOb,cAAAA,CAAeC,eAAAA,EAAgB,EAAG,CAAC,CAAA,CAAE,MAAA;AAAA,IAC1C;AAAA,GACF;AACF;AAgCO,SAAS,2CAAA,GAAuG;AACrH,EAAA,OAAOC,gBAAAA;AAAA,IACLC,gBAAAA,CAAiB;AAAA,MACf,CAAC,eAAA,EAAiBH,cAAAA,CAAeC,eAAAA,EAAgB,EAAG,CAAC,CAAC,CAAA;AAAA,MACtD,CAAC,UAAA,EAAYO,aAAAA,EAAe,CAAA;AAAA,MAC5B,CAAC,gBAAA,EAAkBmB,YAAAA,EAAc;AAAA,KAClC,CAAA;AAAA,IACD,CAAC,KAAA,MAAW;AAAA,MACV,GAAG,KAAA;AAAA,MACH,aAAA,EAAe;AAAA,KACjB;AAAA,GACF;AACF;AAEO,SAAS,2CAAA,GAAmG;AACjH,EAAA,OAAOvB,gBAAAA,CAAiB;AAAA,IACtB,CAAC,eAAA,EAAiBC,cAAAA,CAAeC,eAAAA,EAAgB,EAAG,CAAC,CAAC,CAAA;AAAA,IACtD,CAAC,UAAA,EAAYG,aAAAA,EAAe,CAAA;AAAA,IAC5B,CAAC,gBAAA,EAAkBmB,YAAAA,EAAc;AAAA,GAClC,CAAA;AACH;AAEO,SAAS,yCAAA,GAGd;AACA,EAAA,OAAOrB,YAAAA;AAAA,IACL,2CAAA,EAA4C;AAAA,IAC5C,2CAAA;AAA4C,GAC9C;AACF;AAYO,SAAS,gCAAA,CAKd,OACA,MAAA,EAKA;AAEA,EAAA,MAAM,cAAA,GAAiB,QAAQ,cAAA,IAAkB,oBAAA;AAGjD,EAAA,MAAM,gBAAA,GAAmB;AAAA,IACvB,QAAQ,EAAE,KAAA,EAAO,MAAM,MAAA,IAAU,IAAA,EAAM,YAAY,KAAA,EAAM;AAAA,IACzD,MAAM,EAAE,KAAA,EAAO,MAAM,IAAA,IAAQ,IAAA,EAAM,YAAY,KAAA;AAAM,GACvD;AACA,EAAA,MAAM,QAAA,GAAW,gBAAA;AAMjB,EAAA,MAAM,IAAA,GAAO,EAAE,GAAG,KAAA,EAAM;AAExB,EAAA,MAAM,cAAA,GAAiBI,qBAAAA,CAAsB,cAAA,EAAgB,WAAW,CAAA;AACxE,EAAA,OAAO,OAAO,MAAA,CAAO;AAAA,IACnB,QAAA,EAAU;AAAA,MACR,cAAA,CAAe,QAAA,EAAU,QAAA,CAAS,MAAM,CAAA;AAAA,MACxC,cAAA,CAAe,MAAA,EAAQ,QAAA,CAAS,IAAI;AAAA,KACtC;AAAA,IACA,IAAA,EAAM,6CAA4C,CAAE,MAAA;AAAA,MAClD;AAAA,KACF;AAAA,IACA;AAAA,GAKD,CAAA;AACH;AAcO,SAAS,mCAId,WAAA,EAG8D;AAC9D,EAAA,IAAI,WAAA,CAAY,QAAA,CAAS,MAAA,GAAS,CAAA,EAAG;AACnC,IAAA,MAAM,IAAIC,WAAAA;AAAA,MACRC,yDAAAA;AAAA,MACA;AAAA,QACE,kBAAA,EAAoB,YAAY,QAAA,CAAS,MAAA;AAAA,QACzC,oBAAA,EAAsB;AAAA;AACxB,KACF;AAAA,EACF;AACA,EAAA,IAAI,YAAA,GAAe,CAAA;AACnB,EAAA,MAAM,iBAAiB,MAAM;AAC3B,IAAA,MAAM,WAAA,GAAe,WAAA,CAAY,QAAA,CAA2B,YAAY,CAAA;AACxE,IAAA,YAAA,IAAgB,CAAA;AAChB,IAAA,OAAO,WAAA;AAAA,EACT,CAAA;AACA,EAAA,OAAO;AAAA,IACL,gBAAgB,WAAA,CAAY,cAAA;AAAA,IAC5B,UAAU,EAAE,MAAA,EAAQ,gBAAe,EAAG,IAAA,EAAM,gBAAe,EAAE;AAAA,IAC7D,IAAA,EAAM,6CAA4C,CAAE,MAAA;AAAA,MAClD,WAAA,CAAY;AAAA;AACd,GACF;AACF;AClKO,IAAM,oCAAA,GAAuC,IAAI,UAAA,CAAW;AAAA,EACjE,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,EAAA;AAAA,EAAI,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,CAAA;AAAA,EAAG;AAClC,CAAC;AAEM,SAAS,yCAAA,GAA4C;AAC1D,EAAA,OAAOb,cAAAA,CAAeC,eAAAA,EAAgB,EAAG,CAAC,CAAA,CAAE,MAAA;AAAA,IAC1C;AAAA,GACF;AACF;AA+EO,SAAS,6CAAA,GAA2G;AACzH,EAAA,OAAOC,gBAAAA;AAAA,IACLC,gBAAAA,CAAiB;AAAA,MACf,CAAC,eAAA,EAAiBH,cAAAA,CAAeC,eAAAA,EAAgB,EAAG,CAAC,CAAC,CAAA;AAAA,MACtD,CAAC,UAAA,EAAYsB,cAAAA,EAAgB,CAAA;AAAA,MAC7B,CAAC,eAAA,EAAiBf,aAAAA,EAAe,CAAA;AAAA,MACjC,CAAC,eAAA,EAAiBA,aAAAA,EAAe;AAAA,KAClC,CAAA;AAAA,IACD,CAAC,KAAA,MAAW;AAAA,MACV,GAAG,KAAA;AAAA,MACH,aAAA,EAAe;AAAA,KACjB;AAAA,GACF;AACF;AAEO,SAAS,6CAAA,GAAuG;AACrH,EAAA,OAAOJ,gBAAAA,CAAiB;AAAA,IACtB,CAAC,eAAA,EAAiBC,cAAAA,CAAeC,eAAAA,EAAgB,EAAG,CAAC,CAAC,CAAA;AAAA,IACtD,CAAC,UAAA,EAAYmB,cAAAA,EAAgB,CAAA;AAAA,IAC7B,CAAC,eAAA,EAAiBhB,aAAAA,EAAe,CAAA;AAAA,IACjC,CAAC,eAAA,EAAiBA,aAAAA,EAAe;AAAA,GAClC,CAAA;AACH;AAEO,SAAS,2CAAA,GAGd;AACA,EAAA,OAAOF,YAAAA;AAAA,IACL,6CAAA,EAA8C;AAAA,IAC9C,6CAAA;AAA8C,GAChD;AACF;AAmCA,eAAsB,uCAAA,CAgBpB,OAeA,MAAA,EAkBA;AAEA,EAAA,MAAM,cAAA,GAAiB,QAAQ,cAAA,IAAkB,oBAAA;AAGjD,EAAA,MAAM,gBAAA,GAAmB;AAAA,IACvB,QAAQ,EAAE,KAAA,EAAO,MAAM,MAAA,IAAU,IAAA,EAAM,YAAY,KAAA,EAAM;AAAA,IACzD,MAAM,EAAE,KAAA,EAAO,MAAM,IAAA,IAAQ,IAAA,EAAM,YAAY,IAAA,EAAK;AAAA,IACpD,mBAAA,EAAqB;AAAA,MACnB,KAAA,EAAO,MAAM,mBAAA,IAAuB,IAAA;AAAA,MACpC,UAAA,EAAY;AAAA,KACd;AAAA,IACA,OAAO,EAAE,KAAA,EAAO,MAAM,KAAA,IAAS,IAAA,EAAM,YAAY,KAAA,EAAM;AAAA,IACvD,WAAW,EAAE,KAAA,EAAO,MAAM,SAAA,IAAa,IAAA,EAAM,YAAY,KAAA,EAAM;AAAA,IAC/D,QAAQ,EAAE,KAAA,EAAO,MAAM,MAAA,IAAU,IAAA,EAAM,YAAY,IAAA,EAAK;AAAA,IACxD,QAAQ,EAAE,KAAA,EAAO,MAAM,MAAA,IAAU,IAAA,EAAM,YAAY,IAAA,EAAK;AAAA,IACxD,YAAY,EAAE,KAAA,EAAO,MAAM,UAAA,IAAc,IAAA,EAAM,YAAY,KAAA,EAAM;AAAA,IACjE,YAAY,EAAE,KAAA,EAAO,MAAM,UAAA,IAAc,IAAA,EAAM,YAAY,KAAA,EAAM;AAAA,IACjE,YAAY,EAAE,KAAA,EAAO,MAAM,UAAA,IAAc,IAAA,EAAM,YAAY,IAAA,EAAK;AAAA,IAChE,YAAY,EAAE,KAAA,EAAO,MAAM,UAAA,IAAc,IAAA,EAAM,YAAY,IAAA,EAAK;AAAA,IAChE,eAAe,EAAE,KAAA,EAAO,MAAM,aAAA,IAAiB,IAAA,EAAM,YAAY,KAAA,EAAM;AAAA,IACvE,eAAe,EAAE,KAAA,EAAO,MAAM,aAAA,IAAiB,IAAA,EAAM,YAAY,KAAA;AAAM,GACzE;AACA,EAAA,MAAM,QAAA,GAAW,gBAAA;AAMjB,EAAA,MAAM,IAAA,GAAO,EAAE,GAAG,KAAA,EAAM;AAGxB,EAAA,IAAI,CAAC,QAAA,CAAS,SAAA,CAAU,KAAA,EAAO;AAC7B,IAAA,QAAA,CAAS,SAAA,CAAU,KAAA,GAAQ,MAAMO,wBAAAA,CAAyB;AAAA,MACxD,cAAA;AAAA,MACA,KAAA,EAAO;AAAA,QACLb,iBAAgB,CAAE,MAAA;AAAA,UAChB,IAAI,UAAA,CAAW,CAAC,EAAA,EAAI,GAAA,EAAK,GAAA,EAAK,GAAA,EAAK,GAAA,EAAK,GAAA,EAAK,GAAA,EAAK,GAAA,EAAK,GAAG,CAAC;AAAA,SAC7D;AAAA,QACAS,mBAAkB,CAAE,MAAA;AAAA,UAClBK,wCAAAA,CAAyC,MAAA,EAAQ,QAAA,CAAS,IAAA,CAAK,KAAK;AAAA;AACtE;AACF,KACD,CAAA;AAAA,EACH;AAEA,EAAA,MAAM,cAAA,GAAiBJ,qBAAAA,CAAsB,cAAA,EAAgB,WAAW,CAAA;AACxE,EAAA,OAAO,OAAO,MAAA,CAAO;AAAA,IACnB,QAAA,EAAU;AAAA,MACR,cAAA,CAAe,QAAA,EAAU,QAAA,CAAS,MAAM,CAAA;AAAA,MACxC,cAAA,CAAe,MAAA,EAAQ,QAAA,CAAS,IAAI,CAAA;AAAA,MACpC,cAAA,CAAe,qBAAA,EAAuB,QAAA,CAAS,mBAAmB,CAAA;AAAA,MAClE,cAAA,CAAe,OAAA,EAAS,QAAA,CAAS,KAAK,CAAA;AAAA,MACtC,cAAA,CAAe,WAAA,EAAa,QAAA,CAAS,SAAS,CAAA;AAAA,MAC9C,cAAA,CAAe,QAAA,EAAU,QAAA,CAAS,MAAM,CAAA;AAAA,MACxC,cAAA,CAAe,QAAA,EAAU,QAAA,CAAS,MAAM,CAAA;AAAA,MACxC,cAAA,CAAe,YAAA,EAAc,QAAA,CAAS,UAAU,CAAA;AAAA,MAChD,cAAA,CAAe,YAAA,EAAc,QAAA,CAAS,UAAU,CAAA;AAAA,MAChD,cAAA,CAAe,YAAA,EAAc,QAAA,CAAS,UAAU,CAAA;AAAA,MAChD,cAAA,CAAe,YAAA,EAAc,QAAA,CAAS,UAAU,CAAA;AAAA,MAChD,cAAA,CAAe,eAAA,EAAiB,QAAA,CAAS,aAAa,CAAA;AAAA,MACtD,cAAA,CAAe,eAAA,EAAiB,QAAA,CAAS,aAAa;AAAA,KACxD;AAAA,IACA,IAAA,EAAM,+CAA8C,CAAE,MAAA;AAAA,MACpD;AAAA,KACF;AAAA,IACA;AAAA,GAgBD,CAAA;AACH;AAmCO,SAAS,kCAAA,CAgBd,OAeA,MAAA,EAgBA;AAEA,EAAA,MAAM,cAAA,GAAiB,QAAQ,cAAA,IAAkB,oBAAA;AAGjD,EAAA,MAAM,gBAAA,GAAmB;AAAA,IACvB,QAAQ,EAAE,KAAA,EAAO,MAAM,MAAA,IAAU,IAAA,EAAM,YAAY,KAAA,EAAM;AAAA,IACzD,MAAM,EAAE,KAAA,EAAO,MAAM,IAAA,IAAQ,IAAA,EAAM,YAAY,IAAA,EAAK;AAAA,IACpD,mBAAA,EAAqB;AAAA,MACnB,KAAA,EAAO,MAAM,mBAAA,IAAuB,IAAA;AAAA,MACpC,UAAA,EAAY;AAAA,KACd;AAAA,IACA,OAAO,EAAE,KAAA,EAAO,MAAM,KAAA,IAAS,IAAA,EAAM,YAAY,KAAA,EAAM;AAAA,IACvD,WAAW,EAAE,KAAA,EAAO,MAAM,SAAA,IAAa,IAAA,EAAM,YAAY,KAAA,EAAM;AAAA,IAC/D,QAAQ,EAAE,KAAA,EAAO,MAAM,MAAA,IAAU,IAAA,EAAM,YAAY,IAAA,EAAK;AAAA,IACxD,QAAQ,EAAE,KAAA,EAAO,MAAM,MAAA,IAAU,IAAA,EAAM,YAAY,IAAA,EAAK;AAAA,IACxD,YAAY,EAAE,KAAA,EAAO,MAAM,UAAA,IAAc,IAAA,EAAM,YAAY,KAAA,EAAM;AAAA,IACjE,YAAY,EAAE,KAAA,EAAO,MAAM,UAAA,IAAc,IAAA,EAAM,YAAY,KAAA,EAAM;AAAA,IACjE,YAAY,EAAE,KAAA,EAAO,MAAM,UAAA,IAAc,IAAA,EAAM,YAAY,IAAA,EAAK;AAAA,IAChE,YAAY,EAAE,KAAA,EAAO,MAAM,UAAA,IAAc,IAAA,EAAM,YAAY,IAAA,EAAK;AAAA,IAChE,eAAe,EAAE,KAAA,EAAO,MAAM,aAAA,IAAiB,IAAA,EAAM,YAAY,KAAA,EAAM;AAAA,IACvE,eAAe,EAAE,KAAA,EAAO,MAAM,aAAA,IAAiB,IAAA,EAAM,YAAY,KAAA;AAAM,GACzE;AACA,EAAA,MAAM,QAAA,GAAW,gBAAA;AAMjB,EAAA,MAAM,IAAA,GAAO,EAAE,GAAG,KAAA,EAAM;AAExB,EAAA,MAAM,cAAA,GAAiBA,qBAAAA,CAAsB,cAAA,EAAgB,WAAW,CAAA;AACxE,EAAA,OAAO,OAAO,MAAA,CAAO;AAAA,IACnB,QAAA,EAAU;AAAA,MACR,cAAA,CAAe,QAAA,EAAU,QAAA,CAAS,MAAM,CAAA;AAAA,MACxC,cAAA,CAAe,MAAA,EAAQ,QAAA,CAAS,IAAI,CAAA;AAAA,MACpC,cAAA,CAAe,qBAAA,EAAuB,QAAA,CAAS,mBAAmB,CAAA;AAAA,MAClE,cAAA,CAAe,OAAA,EAAS,QAAA,CAAS,KAAK,CAAA;AAAA,MACtC,cAAA,CAAe,WAAA,EAAa,QAAA,CAAS,SAAS,CAAA;AAAA,MAC9C,cAAA,CAAe,QAAA,EAAU,QAAA,CAAS,MAAM,CAAA;AAAA,MACxC,cAAA,CAAe,QAAA,EAAU,QAAA,CAAS,MAAM,CAAA;AAAA,MACxC,cAAA,CAAe,YAAA,EAAc,QAAA,CAAS,UAAU,CAAA;AAAA,MAChD,cAAA,CAAe,YAAA,EAAc,QAAA,CAAS,UAAU,CAAA;AAAA,MAChD,cAAA,CAAe,YAAA,EAAc,QAAA,CAAS,UAAU,CAAA;AAAA,MAChD,cAAA,CAAe,YAAA,EAAc,QAAA,CAAS,UAAU,CAAA;AAAA,MAChD,cAAA,CAAe,eAAA,EAAiB,QAAA,CAAS,aAAa,CAAA;AAAA,MACtD,cAAA,CAAe,eAAA,EAAiB,QAAA,CAAS,aAAa;AAAA,KACxD;AAAA,IACA,IAAA,EAAM,+CAA8C,CAAE,MAAA;AAAA,MACpD;AAAA,KACF;AAAA,IACA;AAAA,GAgBD,CAAA;AACH;AAyBO,SAAS,qCAId,WAAA,EAGgE;AAChE,EAAA,IAAI,WAAA,CAAY,QAAA,CAAS,MAAA,GAAS,EAAA,EAAI;AACpC,IAAA,MAAM,IAAIC,WAAAA;AAAA,MACRC,yDAAAA;AAAA,MACA;AAAA,QACE,kBAAA,EAAoB,YAAY,QAAA,CAAS,MAAA;AAAA,QACzC,oBAAA,EAAsB;AAAA;AACxB,KACF;AAAA,EACF;AACA,EAAA,IAAI,YAAA,GAAe,CAAA;AACnB,EAAA,MAAM,iBAAiB,MAAM;AAC3B,IAAA,MAAM,WAAA,GAAe,WAAA,CAAY,QAAA,CAA2B,YAAY,CAAA;AACxE,IAAA,YAAA,IAAgB,CAAA;AAChB,IAAA,OAAO,WAAA;AAAA,EACT,CAAA;AACA,EAAA,OAAO;AAAA,IACL,gBAAgB,WAAA,CAAY,cAAA;AAAA,IAC5B,QAAA,EAAU;AAAA,MACR,QAAQ,cAAA,EAAe;AAAA,MACvB,MAAM,cAAA,EAAe;AAAA,MACrB,qBAAqB,cAAA,EAAe;AAAA,MACpC,OAAO,cAAA,EAAe;AAAA,MACtB,WAAW,cAAA,EAAe;AAAA,MAC1B,QAAQ,cAAA,EAAe;AAAA,MACvB,QAAQ,cAAA,EAAe;AAAA,MACvB,YAAY,cAAA,EAAe;AAAA,MAC3B,YAAY,cAAA,EAAe;AAAA,MAC3B,YAAY,cAAA,EAAe;AAAA,MAC3B,YAAY,cAAA,EAAe;AAAA,MAC3B,eAAe,cAAA,EAAe;AAAA,MAC9B,eAAe,cAAA;AAAe,KAChC;AAAA,IACA,IAAA,EAAM,+CAA8C,CAAE,MAAA;AAAA,MACpD,WAAA,CAAY;AAAA;AACd,GACF;AACF;ACvfO,IAAM,8BAAA,GAAiC,IAAI,UAAA,CAAW;AAAA,EAC3D,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,GAAA;AAAA,EAAK,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK;AACjC,CAAC;AAEM,SAAS,oCAAA,GAAuC;AACrD,EAAA,OAAOb,cAAAA,CAAeC,eAAAA,EAAgB,EAAG,CAAC,CAAA,CAAE,MAAA;AAAA,IAC1C;AAAA,GACF;AACF;AAyFO,SAAS,wCAAA,GAAiG;AAC/G,EAAA,OAAOC,gBAAAA;AAAA,IACLC,gBAAAA,CAAiB;AAAA,MACf,CAAC,eAAA,EAAiBH,cAAAA,CAAeC,eAAAA,EAAgB,EAAG,CAAC,CAAC,CAAA;AAAA,MACtD,CAAC,UAAA,EAAYsB,cAAAA,EAAgB,CAAA;AAAA,MAC7B,CAAC,eAAA,EAAiBf,aAAAA,EAAe,CAAA;AAAA,MACjC,CAAC,eAAA,EAAiBA,aAAAA,EAAe,CAAA;AAAA,MACjC,CAAC,cAAA,EAAgBS,iBAAAA,EAAmB;AAAA,KACrC,CAAA;AAAA,IACD,CAAC,KAAA,MAAW,EAAE,GAAG,KAAA,EAAO,eAAe,8BAAA,EAA+B;AAAA,GACxE;AACF;AAEO,SAAS,wCAAA,GAA6F;AAC3G,EAAA,OAAOb,gBAAAA,CAAiB;AAAA,IACtB,CAAC,eAAA,EAAiBC,cAAAA,CAAeC,eAAAA,EAAgB,EAAG,CAAC,CAAC,CAAA;AAAA,IACtD,CAAC,UAAA,EAAYmB,cAAAA,EAAgB,CAAA;AAAA,IAC7B,CAAC,eAAA,EAAiBhB,aAAAA,EAAe,CAAA;AAAA,IACjC,CAAC,eAAA,EAAiBA,aAAAA,EAAe,CAAA;AAAA,IACjC,CAAC,cAAA,EAAgBY,iBAAAA,EAAmB;AAAA,GACrC,CAAA;AACH;AAEO,SAAS,sCAAA,GAGd;AACA,EAAA,OAAOd,YAAAA;AAAA,IACL,wCAAA,EAAyC;AAAA,IACzC,wCAAA;AAAyC,GAC3C;AACF;AAwCA,eAAsB,kCAAA,CAkBpB,OAiBA,MAAA,EAoBA;AAEA,EAAA,MAAM,cAAA,GAAiB,QAAQ,cAAA,IAAkB,oBAAA;AAGjD,EAAA,MAAM,gBAAA,GAAmB;AAAA,IACvB,QAAQ,EAAE,KAAA,EAAO,MAAM,MAAA,IAAU,IAAA,EAAM,YAAY,KAAA,EAAM;AAAA,IACzD,MAAM,EAAE,KAAA,EAAO,MAAM,IAAA,IAAQ,IAAA,EAAM,YAAY,IAAA,EAAK;AAAA,IACpD,UAAU,EAAE,KAAA,EAAO,MAAM,QAAA,IAAY,IAAA,EAAM,YAAY,IAAA,EAAK;AAAA,IAC5D,mBAAA,EAAqB;AAAA,MACnB,KAAA,EAAO,MAAM,mBAAA,IAAuB,IAAA;AAAA,MACpC,UAAA,EAAY;AAAA,KACd;AAAA,IACA,OAAO,EAAE,KAAA,EAAO,MAAM,KAAA,IAAS,IAAA,EAAM,YAAY,KAAA,EAAM;AAAA,IACvD,WAAW,EAAE,KAAA,EAAO,MAAM,SAAA,IAAa,IAAA,EAAM,YAAY,KAAA,EAAM;AAAA,IAC/D,QAAQ,EAAE,KAAA,EAAO,MAAM,MAAA,IAAU,IAAA,EAAM,YAAY,IAAA,EAAK;AAAA,IACxD,QAAQ,EAAE,KAAA,EAAO,MAAM,MAAA,IAAU,IAAA,EAAM,YAAY,IAAA,EAAK;AAAA,IACxD,YAAY,EAAE,KAAA,EAAO,MAAM,UAAA,IAAc,IAAA,EAAM,YAAY,KAAA,EAAM;AAAA,IACjE,YAAY,EAAE,KAAA,EAAO,MAAM,UAAA,IAAc,IAAA,EAAM,YAAY,KAAA,EAAM;AAAA,IACjE,OAAO,EAAE,KAAA,EAAO,MAAM,KAAA,IAAS,IAAA,EAAM,YAAY,IAAA,EAAK;AAAA,IACtD,OAAO,EAAE,KAAA,EAAO,MAAM,KAAA,IAAS,IAAA,EAAM,YAAY,IAAA,EAAK;AAAA,IACtD,eAAe,EAAE,KAAA,EAAO,MAAM,aAAA,IAAiB,IAAA,EAAM,YAAY,KAAA,EAAM;AAAA,IACvE,eAAe,EAAE,KAAA,EAAO,MAAM,aAAA,IAAiB,IAAA,EAAM,YAAY,KAAA,EAAM;AAAA,IACvE,QAAQ,EAAE,KAAA,EAAO,MAAM,MAAA,IAAU,IAAA,EAAM,YAAY,IAAA;AAAK,GAC1D;AACA,EAAA,MAAM,QAAA,GAAW,gBAAA;AAMjB,EAAA,MAAM,IAAA,GAAO,EAAE,GAAG,KAAA,EAAM;AAGxB,EAAA,IAAI,CAAC,QAAA,CAAS,SAAA,CAAU,KAAA,EAAO;AAC7B,IAAA,QAAA,CAAS,SAAA,CAAU,KAAA,GAAQ,MAAMO,wBAAAA,CAAyB;AAAA,MACxD,cAAA;AAAA,MACA,KAAA,EAAO;AAAA,QACLb,iBAAgB,CAAE,MAAA;AAAA,UAChB,IAAI,UAAA,CAAW,CAAC,EAAA,EAAI,GAAA,EAAK,GAAA,EAAK,GAAA,EAAK,GAAA,EAAK,GAAA,EAAK,GAAA,EAAK,GAAA,EAAK,GAAG,CAAC;AAAA,SAC7D;AAAA,QACAS,mBAAkB,CAAE,MAAA;AAAA,UAClBK,wCAAAA,CAAyC,MAAA,EAAQ,QAAA,CAAS,IAAA,CAAK,KAAK;AAAA;AACtE;AACF,KACD,CAAA;AAAA,EACH;AAEA,EAAA,MAAM,cAAA,GAAiBJ,qBAAAA,CAAsB,cAAA,EAAgB,WAAW,CAAA;AACxE,EAAA,OAAO,OAAO,MAAA,CAAO;AAAA,IACnB,QAAA,EAAU;AAAA,MACR,cAAA,CAAe,QAAA,EAAU,QAAA,CAAS,MAAM,CAAA;AAAA,MACxC,cAAA,CAAe,MAAA,EAAQ,QAAA,CAAS,IAAI,CAAA;AAAA,MACpC,cAAA,CAAe,UAAA,EAAY,QAAA,CAAS,QAAQ,CAAA;AAAA,MAC5C,cAAA,CAAe,qBAAA,EAAuB,QAAA,CAAS,mBAAmB,CAAA;AAAA,MAClE,cAAA,CAAe,OAAA,EAAS,QAAA,CAAS,KAAK,CAAA;AAAA,MACtC,cAAA,CAAe,WAAA,EAAa,QAAA,CAAS,SAAS,CAAA;AAAA,MAC9C,cAAA,CAAe,QAAA,EAAU,QAAA,CAAS,MAAM,CAAA;AAAA,MACxC,cAAA,CAAe,QAAA,EAAU,QAAA,CAAS,MAAM,CAAA;AAAA,MACxC,cAAA,CAAe,YAAA,EAAc,QAAA,CAAS,UAAU,CAAA;AAAA,MAChD,cAAA,CAAe,YAAA,EAAc,QAAA,CAAS,UAAU,CAAA;AAAA,MAChD,cAAA,CAAe,OAAA,EAAS,QAAA,CAAS,KAAK,CAAA;AAAA,MACtC,cAAA,CAAe,OAAA,EAAS,QAAA,CAAS,KAAK,CAAA;AAAA,MACtC,cAAA,CAAe,eAAA,EAAiB,QAAA,CAAS,aAAa,CAAA;AAAA,MACtD,cAAA,CAAe,eAAA,EAAiB,QAAA,CAAS,aAAa,CAAA;AAAA,MACtD,cAAA,CAAe,QAAA,EAAU,QAAA,CAAS,MAAM;AAAA,KAC1C;AAAA,IACA,IAAA,EAAM,0CAAyC,CAAE,MAAA;AAAA,MAC/C;AAAA,KACF;AAAA,IACA;AAAA,GAkBD,CAAA;AACH;AAwCO,SAAS,6BAAA,CAkBd,OAiBA,MAAA,EAkBA;AAEA,EAAA,MAAM,cAAA,GAAiB,QAAQ,cAAA,IAAkB,oBAAA;AAGjD,EAAA,MAAM,gBAAA,GAAmB;AAAA,IACvB,QAAQ,EAAE,KAAA,EAAO,MAAM,MAAA,IAAU,IAAA,EAAM,YAAY,KAAA,EAAM;AAAA,IACzD,MAAM,EAAE,KAAA,EAAO,MAAM,IAAA,IAAQ,IAAA,EAAM,YAAY,IAAA,EAAK;AAAA,IACpD,UAAU,EAAE,KAAA,EAAO,MAAM,QAAA,IAAY,IAAA,EAAM,YAAY,IAAA,EAAK;AAAA,IAC5D,mBAAA,EAAqB;AAAA,MACnB,KAAA,EAAO,MAAM,mBAAA,IAAuB,IAAA;AAAA,MACpC,UAAA,EAAY;AAAA,KACd;AAAA,IACA,OAAO,EAAE,KAAA,EAAO,MAAM,KAAA,IAAS,IAAA,EAAM,YAAY,KAAA,EAAM;AAAA,IACvD,WAAW,EAAE,KAAA,EAAO,MAAM,SAAA,IAAa,IAAA,EAAM,YAAY,KAAA,EAAM;AAAA,IAC/D,QAAQ,EAAE,KAAA,EAAO,MAAM,MAAA,IAAU,IAAA,EAAM,YAAY,IAAA,EAAK;AAAA,IACxD,QAAQ,EAAE,KAAA,EAAO,MAAM,MAAA,IAAU,IAAA,EAAM,YAAY,IAAA,EAAK;AAAA,IACxD,YAAY,EAAE,KAAA,EAAO,MAAM,UAAA,IAAc,IAAA,EAAM,YAAY,KAAA,EAAM;AAAA,IACjE,YAAY,EAAE,KAAA,EAAO,MAAM,UAAA,IAAc,IAAA,EAAM,YAAY,KAAA,EAAM;AAAA,IACjE,OAAO,EAAE,KAAA,EAAO,MAAM,KAAA,IAAS,IAAA,EAAM,YAAY,IAAA,EAAK;AAAA,IACtD,OAAO,EAAE,KAAA,EAAO,MAAM,KAAA,IAAS,IAAA,EAAM,YAAY,IAAA,EAAK;AAAA,IACtD,eAAe,EAAE,KAAA,EAAO,MAAM,aAAA,IAAiB,IAAA,EAAM,YAAY,KAAA,EAAM;AAAA,IACvE,eAAe,EAAE,KAAA,EAAO,MAAM,aAAA,IAAiB,IAAA,EAAM,YAAY,KAAA,EAAM;AAAA,IACvE,QAAQ,EAAE,KAAA,EAAO,MAAM,MAAA,IAAU,IAAA,EAAM,YAAY,IAAA;AAAK,GAC1D;AACA,EAAA,MAAM,QAAA,GAAW,gBAAA;AAMjB,EAAA,MAAM,IAAA,GAAO,EAAE,GAAG,KAAA,EAAM;AAExB,EAAA,MAAM,cAAA,GAAiBA,qBAAAA,CAAsB,cAAA,EAAgB,WAAW,CAAA;AACxE,EAAA,OAAO,OAAO,MAAA,CAAO;AAAA,IACnB,QAAA,EAAU;AAAA,MACR,cAAA,CAAe,QAAA,EAAU,QAAA,CAAS,MAAM,CAAA;AAAA,MACxC,cAAA,CAAe,MAAA,EAAQ,QAAA,CAAS,IAAI,CAAA;AAAA,MACpC,cAAA,CAAe,UAAA,EAAY,QAAA,CAAS,QAAQ,CAAA;AAAA,MAC5C,cAAA,CAAe,qBAAA,EAAuB,QAAA,CAAS,mBAAmB,CAAA;AAAA,MAClE,cAAA,CAAe,OAAA,EAAS,QAAA,CAAS,KAAK,CAAA;AAAA,MACtC,cAAA,CAAe,WAAA,EAAa,QAAA,CAAS,SAAS,CAAA;AAAA,MAC9C,cAAA,CAAe,QAAA,EAAU,QAAA,CAAS,MAAM,CAAA;AAAA,MACxC,cAAA,CAAe,QAAA,EAAU,QAAA,CAAS,MAAM,CAAA;AAAA,MACxC,cAAA,CAAe,YAAA,EAAc,QAAA,CAAS,UAAU,CAAA;AAAA,MAChD,cAAA,CAAe,YAAA,EAAc,QAAA,CAAS,UAAU,CAAA;AAAA,MAChD,cAAA,CAAe,OAAA,EAAS,QAAA,CAAS,KAAK,CAAA;AAAA,MACtC,cAAA,CAAe,OAAA,EAAS,QAAA,CAAS,KAAK,CAAA;AAAA,MACtC,cAAA,CAAe,eAAA,EAAiB,QAAA,CAAS,aAAa,CAAA;AAAA,MACtD,cAAA,CAAe,eAAA,EAAiB,QAAA,CAAS,aAAa,CAAA;AAAA,MACtD,cAAA,CAAe,QAAA,EAAU,QAAA,CAAS,MAAM;AAAA,KAC1C;AAAA,IACA,IAAA,EAAM,0CAAyC,CAAE,MAAA;AAAA,MAC/C;AAAA,KACF;AAAA,IACA;AAAA,GAkBD,CAAA;AACH;AA2BO,SAAS,gCAId,WAAA,EAG2D;AAC3D,EAAA,IAAI,WAAA,CAAY,QAAA,CAAS,MAAA,GAAS,EAAA,EAAI;AACpC,IAAA,MAAM,IAAIC,WAAAA;AAAA,MACRC,yDAAAA;AAAA,MACA;AAAA,QACE,kBAAA,EAAoB,YAAY,QAAA,CAAS,MAAA;AAAA,QACzC,oBAAA,EAAsB;AAAA;AACxB,KACF;AAAA,EACF;AACA,EAAA,IAAI,YAAA,GAAe,CAAA;AACnB,EAAA,MAAM,iBAAiB,MAAM;AAC3B,IAAA,MAAM,WAAA,GAAe,WAAA,CAAY,QAAA,CAA2B,YAAY,CAAA;AACxE,IAAA,YAAA,IAAgB,CAAA;AAChB,IAAA,OAAO,WAAA;AAAA,EACT,CAAA;AACA,EAAA,MAAM,yBAAyB,MAAM;AACnC,IAAA,MAAM,cAAc,cAAA,EAAe;AACnC,IAAA,OAAO,WAAA,CAAY,OAAA,KAAY,oBAAA,GAC3B,MAAA,GACA,WAAA;AAAA,EACN,CAAA;AACA,EAAA,OAAO;AAAA,IACL,gBAAgB,WAAA,CAAY,cAAA;AAAA,IAC5B,QAAA,EAAU;AAAA,MACR,QAAQ,cAAA,EAAe;AAAA,MACvB,MAAM,cAAA,EAAe;AAAA,MACrB,UAAU,cAAA,EAAe;AAAA,MACzB,qBAAqB,cAAA,EAAe;AAAA,MACpC,OAAO,cAAA,EAAe;AAAA,MACtB,WAAW,cAAA,EAAe;AAAA,MAC1B,QAAQ,cAAA,EAAe;AAAA,MACvB,QAAQ,cAAA,EAAe;AAAA,MACvB,YAAY,cAAA,EAAe;AAAA,MAC3B,YAAY,cAAA,EAAe;AAAA,MAC3B,OAAO,cAAA,EAAe;AAAA,MACtB,OAAO,cAAA,EAAe;AAAA,MACtB,eAAe,cAAA,EAAe;AAAA,MAC9B,eAAe,cAAA,EAAe;AAAA,MAC9B,QAAQ,sBAAA;AAAuB,KACjC;AAAA,IACA,IAAA,EAAM,wCAAA,EAAyC,CAAE,MAAA,CAAO,YAAY,IAAI;AAAA,GAC1E;AACF;ACnjBO,IAAM,sBAAA,GAAyB,IAAI,UAAA,CAAW;AAAA,EACnD,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,CAAA;AAAA,EAAG,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK;AACjC,CAAC;AAEM,SAAS,4BAAA,GAA+B;AAC7C,EAAA,OAAOb,eAAeC,eAAAA,EAAgB,EAAG,CAAC,CAAA,CAAE,OAAO,sBAAsB,CAAA;AAC3E;AAqCO,SAAS,gCAAA,GAAiF;AAC/F,EAAA,OAAOC,gBAAAA;AAAA,IACLC,gBAAAA,CAAiB;AAAA,MACf,CAAC,eAAA,EAAiBH,cAAAA,CAAeC,eAAAA,EAAgB,EAAG,CAAC,CAAC,CAAA;AAAA,MACtD,CAAC,YAAA,EAAce,aAAAA,EAAe,CAAA;AAAA,MAC9B,CAAC,aAAA,EAAeA,aAAAA,EAAe;AAAA,KAChC,CAAA;AAAA,IACD,CAAC,KAAA,MAAW,EAAE,GAAG,KAAA,EAAO,eAAe,sBAAA,EAAuB;AAAA,GAChE;AACF;AAEO,SAAS,gCAAA,GAA6E;AAC3F,EAAA,OAAOZ,gBAAAA,CAAiB;AAAA,IACtB,CAAC,eAAA,EAAiBC,cAAAA,CAAeC,eAAAA,EAAgB,EAAG,CAAC,CAAC,CAAA;AAAA,IACtD,CAAC,YAAA,EAAcc,aAAAA,EAAe,CAAA;AAAA,IAC9B,CAAC,aAAA,EAAeA,aAAAA,EAAe;AAAA,GAChC,CAAA;AACH;AAEO,SAAS,8BAAA,GAGd;AACA,EAAA,OAAOb,YAAAA;AAAA,IACL,gCAAA,EAAiC;AAAA,IACjC,gCAAA;AAAiC,GACnC;AACF;AAcO,SAAS,qBAAA,CAMd,OACA,MAAA,EAMA;AAEA,EAAA,MAAM,cAAA,GAAiB,QAAQ,cAAA,IAAkB,oBAAA;AAGjD,EAAA,MAAM,gBAAA,GAAmB;AAAA,IACvB,QAAQ,EAAE,KAAA,EAAO,MAAM,MAAA,IAAU,IAAA,EAAM,YAAY,KAAA,EAAM;AAAA,IACzD,MAAM,EAAE,KAAA,EAAO,MAAM,IAAA,IAAQ,IAAA,EAAM,YAAY,IAAA,EAAK;AAAA,IACpD,OAAO,EAAE,KAAA,EAAO,MAAM,KAAA,IAAS,IAAA,EAAM,YAAY,KAAA;AAAM,GACzD;AACA,EAAA,MAAM,QAAA,GAAW,gBAAA;AAMjB,EAAA,MAAM,IAAA,GAAO,EAAE,GAAG,KAAA,EAAM;AAExB,EAAA,MAAM,cAAA,GAAiBI,qBAAAA,CAAsB,cAAA,EAAgB,WAAW,CAAA;AACxE,EAAA,OAAO,OAAO,MAAA,CAAO;AAAA,IACnB,QAAA,EAAU;AAAA,MACR,cAAA,CAAe,QAAA,EAAU,QAAA,CAAS,MAAM,CAAA;AAAA,MACxC,cAAA,CAAe,MAAA,EAAQ,QAAA,CAAS,IAAI,CAAA;AAAA,MACpC,cAAA,CAAe,OAAA,EAAS,QAAA,CAAS,KAAK;AAAA,KACxC;AAAA,IACA,IAAA,EAAM,kCAAiC,CAAE,MAAA;AAAA,MACvC;AAAA,KACF;AAAA,IACA;AAAA,GAMD,CAAA;AACH;AAeO,SAAS,wBAId,WAAA,EAGmD;AACnD,EAAA,IAAI,WAAA,CAAY,QAAA,CAAS,MAAA,GAAS,CAAA,EAAG;AACnC,IAAA,MAAM,IAAIC,WAAAA;AAAA,MACRC,yDAAAA;AAAA,MACA;AAAA,QACE,kBAAA,EAAoB,YAAY,QAAA,CAAS,MAAA;AAAA,QACzC,oBAAA,EAAsB;AAAA;AACxB,KACF;AAAA,EACF;AACA,EAAA,IAAI,YAAA,GAAe,CAAA;AACnB,EAAA,MAAM,iBAAiB,MAAM;AAC3B,IAAA,MAAM,WAAA,GAAe,WAAA,CAAY,QAAA,CAA2B,YAAY,CAAA;AACxE,IAAA,YAAA,IAAgB,CAAA;AAChB,IAAA,OAAO,WAAA;AAAA,EACT,CAAA;AACA,EAAA,OAAO;AAAA,IACL,gBAAgB,WAAA,CAAY,cAAA;AAAA,IAC5B,QAAA,EAAU;AAAA,MACR,QAAQ,cAAA,EAAe;AAAA,MACvB,MAAM,cAAA,EAAe;AAAA,MACrB,OAAO,cAAA;AAAe,KACxB;AAAA,IACA,IAAA,EAAM,gCAAA,EAAiC,CAAE,MAAA,CAAO,YAAY,IAAI;AAAA,GAClE;AACF;ACjLO,IAAM,sBAAA,GAAyB,IAAI,UAAA,CAAW;AAAA,EACnD,GAAA;AAAA,EAAK,EAAA;AAAA,EAAI,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,GAAA;AAAA,EAAK;AAClC,CAAC;AAEM,SAAS,4BAAA,GAA+B;AAC7C,EAAA,OAAOb,eAAeC,eAAAA,EAAgB,EAAG,CAAC,CAAA,CAAE,OAAO,sBAAsB,CAAA;AAC3E;AAqCO,SAAS,gCAAA,GAAiF;AAC/F,EAAA,OAAOC,gBAAAA;AAAA,IACLC,gBAAAA,CAAiB;AAAA,MACf,CAAC,eAAA,EAAiBH,cAAAA,CAAeC,eAAAA,EAAgB,EAAG,CAAC,CAAC,CAAA;AAAA,MACtD,CAAC,aAAA,EAAeS,iBAAAA,EAAmB,CAAA;AAAA,MACnC,CAAC,WAAA,EAAac,aAAAA,EAAe;AAAA,KAC9B,CAAA;AAAA,IACD,CAAC,KAAA,MAAW,EAAE,GAAG,KAAA,EAAO,eAAe,sBAAA,EAAuB;AAAA,GAChE;AACF;AAEO,SAAS,gCAAA,GAA6E;AAC3F,EAAA,OAAOpB,gBAAAA,CAAiB;AAAA,IACtB,CAAC,eAAA,EAAiBC,cAAAA,CAAeC,eAAAA,EAAgB,EAAG,CAAC,CAAC,CAAA;AAAA,IACtD,CAAC,aAAA,EAAea,iBAAAA,EAAmB,CAAA;AAAA,IACnC,CAAC,WAAA,EAAaO,aAAAA,EAAe;AAAA,GAC9B,CAAA;AACH;AAEO,SAAS,8BAAA,GAGd;AACA,EAAA,OAAOnB,YAAAA;AAAA,IACL,gCAAA,EAAiC;AAAA,IACjC,gCAAA;AAAiC,GACnC;AACF;AAcO,SAAS,qBAAA,CAMd,OACA,MAAA,EAMA;AAEA,EAAA,MAAM,cAAA,GAAiB,QAAQ,cAAA,IAAkB,oBAAA;AAGjD,EAAA,MAAM,gBAAA,GAAmB;AAAA,IACvB,QAAQ,EAAE,KAAA,EAAO,MAAM,MAAA,IAAU,IAAA,EAAM,YAAY,KAAA,EAAM;AAAA,IACzD,MAAM,EAAE,KAAA,EAAO,MAAM,IAAA,IAAQ,IAAA,EAAM,YAAY,IAAA,EAAK;AAAA,IACpD,OAAO,EAAE,KAAA,EAAO,MAAM,KAAA,IAAS,IAAA,EAAM,YAAY,KAAA;AAAM,GACzD;AACA,EAAA,MAAM,QAAA,GAAW,gBAAA;AAMjB,EAAA,MAAM,IAAA,GAAO,EAAE,GAAG,KAAA,EAAM;AAExB,EAAA,MAAM,cAAA,GAAiBI,qBAAAA,CAAsB,cAAA,EAAgB,WAAW,CAAA;AACxE,EAAA,OAAO,OAAO,MAAA,CAAO;AAAA,IACnB,QAAA,EAAU;AAAA,MACR,cAAA,CAAe,QAAA,EAAU,QAAA,CAAS,MAAM,CAAA;AAAA,MACxC,cAAA,CAAe,MAAA,EAAQ,QAAA,CAAS,IAAI,CAAA;AAAA,MACpC,cAAA,CAAe,OAAA,EAAS,QAAA,CAAS,KAAK;AAAA,KACxC;AAAA,IACA,IAAA,EAAM,kCAAiC,CAAE,MAAA;AAAA,MACvC;AAAA,KACF;AAAA,IACA;AAAA,GAMD,CAAA;AACH;AAeO,SAAS,wBAId,WAAA,EAGmD;AACnD,EAAA,IAAI,WAAA,CAAY,QAAA,CAAS,MAAA,GAAS,CAAA,EAAG;AACnC,IAAA,MAAM,IAAIC,WAAAA;AAAA,MACRC,yDAAAA;AAAA,MACA;AAAA,QACE,kBAAA,EAAoB,YAAY,QAAA,CAAS,MAAA;AAAA,QACzC,oBAAA,EAAsB;AAAA;AACxB,KACF;AAAA,EACF;AACA,EAAA,IAAI,YAAA,GAAe,CAAA;AACnB,EAAA,MAAM,iBAAiB,MAAM;AAC3B,IAAA,MAAM,WAAA,GAAe,WAAA,CAAY,QAAA,CAA2B,YAAY,CAAA;AACxE,IAAA,YAAA,IAAgB,CAAA;AAChB,IAAA,OAAO,WAAA;AAAA,EACT,CAAA;AACA,EAAA,OAAO;AAAA,IACL,gBAAgB,WAAA,CAAY,cAAA;AAAA,IAC5B,QAAA,EAAU;AAAA,MACR,QAAQ,cAAA,EAAe;AAAA,MACvB,MAAM,cAAA,EAAe;AAAA,MACrB,OAAO,cAAA;AAAe,KACxB;AAAA,IACA,IAAA,EAAM,gCAAA,EAAiC,CAAE,MAAA,CAAO,YAAY,IAAI;AAAA,GAClE;AACF;AC9KO,IAAM,2BAAA,GAA8B,IAAI,UAAA,CAAW;AAAA,EACxD,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,EAAA;AAAA,EAAI,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK;AACpC,CAAC;AAEM,SAAS,gCAAA,GAAmC;AACjD,EAAA,OAAOb,cAAAA,CAAeC,eAAAA,EAAgB,EAAG,CAAC,CAAA,CAAE,MAAA;AAAA,IAC1C;AAAA,GACF;AACF;AAiFO,SAAS,oCAAA,GAAyF;AACvG,EAAA,OAAOC,gBAAAA;AAAA,IACLC,gBAAAA,CAAiB;AAAA,MACf,CAAC,eAAA,EAAiBH,cAAAA,CAAeC,eAAAA,EAAgB,EAAG,CAAC,CAAC,CAAA;AAAA,MACtD,CAAC,UAAA,EAAYO,aAAAA,EAAe,CAAA;AAAA,MAC5B,CAAC,cAAA,EAAgBA,aAAAA,EAAe,CAAA;AAAA,MAChC,CAAC,gBAAA,EAAkBmB,YAAAA,EAAc,CAAA;AAAA,MACjC,CAAC,cAAA,EAAgBV,iBAAAA,EAAmB;AAAA,KACrC,CAAA;AAAA,IACD,CAAC,KAAA,MAAW,EAAE,GAAG,KAAA,EAAO,eAAe,2BAAA,EAA4B;AAAA,GACrE;AACF;AAEO,SAAS,oCAAA,GAAqF;AACnG,EAAA,OAAOb,gBAAAA,CAAiB;AAAA,IACtB,CAAC,eAAA,EAAiBC,cAAAA,CAAeC,eAAAA,EAAgB,EAAG,CAAC,CAAC,CAAA;AAAA,IACtD,CAAC,UAAA,EAAYG,aAAAA,EAAe,CAAA;AAAA,IAC5B,CAAC,cAAA,EAAgBA,aAAAA,EAAe,CAAA;AAAA,IAChC,CAAC,gBAAA,EAAkBmB,YAAAA,EAAc,CAAA;AAAA,IACjC,CAAC,cAAA,EAAgBP,iBAAAA,EAAmB;AAAA,GACrC,CAAA;AACH;AAEO,SAAS,kCAAA,GAGd;AACA,EAAA,OAAOd,YAAAA;AAAA,IACL,oCAAA,EAAqC;AAAA,IACrC,oCAAA;AAAqC,GACvC;AACF;AAoCA,eAAsB,8BAAA,CAgBpB,OAeA,MAAA,EAkBA;AAEA,EAAA,MAAM,cAAA,GAAiB,QAAQ,cAAA,IAAkB,oBAAA;AAGjD,EAAA,MAAM,gBAAA,GAAmB;AAAA,IACvB,QAAQ,EAAE,KAAA,EAAO,MAAM,MAAA,IAAU,IAAA,EAAM,YAAY,KAAA,EAAM;AAAA,IACzD,MAAM,EAAE,KAAA,EAAO,MAAM,IAAA,IAAQ,IAAA,EAAM,YAAY,IAAA,EAAK;AAAA,IACpD,WAAW,EAAE,KAAA,EAAO,MAAM,SAAA,IAAa,IAAA,EAAM,YAAY,KAAA,EAAM;AAAA,IAC/D,SAAS,EAAE,KAAA,EAAO,MAAM,OAAA,IAAW,IAAA,EAAM,YAAY,IAAA,EAAK;AAAA,IAC1D,UAAU,EAAE,KAAA,EAAO,MAAM,QAAA,IAAY,IAAA,EAAM,YAAY,IAAA,EAAK;AAAA,IAC5D,YAAY,EAAE,KAAA,EAAO,MAAM,UAAA,IAAc,IAAA,EAAM,YAAY,KAAA,EAAM;AAAA,IACjE,YAAY,EAAE,KAAA,EAAO,MAAM,UAAA,IAAc,IAAA,EAAM,YAAY,KAAA,EAAM;AAAA,IACjE,QAAQ,EAAE,KAAA,EAAO,MAAM,MAAA,IAAU,IAAA,EAAM,YAAY,IAAA,EAAK;AAAA,IACxD,SAAS,EAAE,KAAA,EAAO,MAAM,OAAA,IAAW,IAAA,EAAM,YAAY,IAAA,EAAK;AAAA,IAC1D,QAAQ,EAAE,KAAA,EAAO,MAAM,MAAA,IAAU,IAAA,EAAM,YAAY,KAAA,EAAM;AAAA,IACzD,eAAe,EAAE,KAAA,EAAO,MAAM,aAAA,IAAiB,IAAA,EAAM,YAAY,KAAA,EAAM;AAAA,IACvE,eAAe,EAAE,KAAA,EAAO,MAAM,aAAA,IAAiB,IAAA,EAAM,YAAY,KAAA,EAAM;AAAA,IACvE,QAAQ,EAAE,KAAA,EAAO,MAAM,MAAA,IAAU,IAAA,EAAM,YAAY,IAAA;AAAK,GAC1D;AACA,EAAA,MAAM,QAAA,GAAW,gBAAA;AAMjB,EAAA,MAAM,IAAA,GAAO,EAAE,GAAG,KAAA,EAAM;AAGxB,EAAA,IAAI,CAAC,QAAA,CAAS,SAAA,CAAU,KAAA,EAAO;AAC7B,IAAA,QAAA,CAAS,SAAA,CAAU,KAAA,GAAQ,MAAMO,wBAAAA,CAAyB;AAAA,MACxD,cAAA;AAAA,MACA,KAAA,EAAO;AAAA,QACLb,iBAAgB,CAAE,MAAA;AAAA,UAChB,IAAI,UAAA,CAAW,CAAC,EAAA,EAAI,GAAA,EAAK,GAAA,EAAK,GAAA,EAAK,GAAA,EAAK,GAAA,EAAK,GAAA,EAAK,GAAA,EAAK,GAAG,CAAC;AAAA,SAC7D;AAAA,QACAS,mBAAkB,CAAE,MAAA;AAAA,UAClBK,wCAAAA,CAAyC,MAAA,EAAQ,QAAA,CAAS,IAAA,CAAK,KAAK;AAAA;AACtE;AACF,KACD,CAAA;AAAA,EACH;AAEA,EAAA,MAAM,cAAA,GAAiBJ,qBAAAA,CAAsB,cAAA,EAAgB,WAAW,CAAA;AACxE,EAAA,OAAO,OAAO,MAAA,CAAO;AAAA,IACnB,QAAA,EAAU;AAAA,MACR,cAAA,CAAe,QAAA,EAAU,QAAA,CAAS,MAAM,CAAA;AAAA,MACxC,cAAA,CAAe,MAAA,EAAQ,QAAA,CAAS,IAAI,CAAA;AAAA,MACpC,cAAA,CAAe,WAAA,EAAa,QAAA,CAAS,SAAS,CAAA;AAAA,MAC9C,cAAA,CAAe,SAAA,EAAW,QAAA,CAAS,OAAO,CAAA;AAAA,MAC1C,cAAA,CAAe,UAAA,EAAY,QAAA,CAAS,QAAQ,CAAA;AAAA,MAC5C,cAAA,CAAe,YAAA,EAAc,QAAA,CAAS,UAAU,CAAA;AAAA,MAChD,cAAA,CAAe,YAAA,EAAc,QAAA,CAAS,UAAU,CAAA;AAAA,MAChD,cAAA,CAAe,QAAA,EAAU,QAAA,CAAS,MAAM,CAAA;AAAA,MACxC,cAAA,CAAe,SAAA,EAAW,QAAA,CAAS,OAAO,CAAA;AAAA,MAC1C,cAAA,CAAe,QAAA,EAAU,QAAA,CAAS,MAAM,CAAA;AAAA,MACxC,cAAA,CAAe,eAAA,EAAiB,QAAA,CAAS,aAAa,CAAA;AAAA,MACtD,cAAA,CAAe,eAAA,EAAiB,QAAA,CAAS,aAAa,CAAA;AAAA,MACtD,cAAA,CAAe,QAAA,EAAU,QAAA,CAAS,MAAM;AAAA,KAC1C;AAAA,IACA,IAAA,EAAM,sCAAqC,CAAE,MAAA;AAAA,MAC3C;AAAA,KACF;AAAA,IACA;AAAA,GAgBD,CAAA;AACH;AAoCO,SAAS,yBAAA,CAgBd,OAeA,MAAA,EAgBA;AAEA,EAAA,MAAM,cAAA,GAAiB,QAAQ,cAAA,IAAkB,oBAAA;AAGjD,EAAA,MAAM,gBAAA,GAAmB;AAAA,IACvB,QAAQ,EAAE,KAAA,EAAO,MAAM,MAAA,IAAU,IAAA,EAAM,YAAY,KAAA,EAAM;AAAA,IACzD,MAAM,EAAE,KAAA,EAAO,MAAM,IAAA,IAAQ,IAAA,EAAM,YAAY,IAAA,EAAK;AAAA,IACpD,WAAW,EAAE,KAAA,EAAO,MAAM,SAAA,IAAa,IAAA,EAAM,YAAY,KAAA,EAAM;AAAA,IAC/D,SAAS,EAAE,KAAA,EAAO,MAAM,OAAA,IAAW,IAAA,EAAM,YAAY,IAAA,EAAK;AAAA,IAC1D,UAAU,EAAE,KAAA,EAAO,MAAM,QAAA,IAAY,IAAA,EAAM,YAAY,IAAA,EAAK;AAAA,IAC5D,YAAY,EAAE,KAAA,EAAO,MAAM,UAAA,IAAc,IAAA,EAAM,YAAY,KAAA,EAAM;AAAA,IACjE,YAAY,EAAE,KAAA,EAAO,MAAM,UAAA,IAAc,IAAA,EAAM,YAAY,KAAA,EAAM;AAAA,IACjE,QAAQ,EAAE,KAAA,EAAO,MAAM,MAAA,IAAU,IAAA,EAAM,YAAY,IAAA,EAAK;AAAA,IACxD,SAAS,EAAE,KAAA,EAAO,MAAM,OAAA,IAAW,IAAA,EAAM,YAAY,IAAA,EAAK;AAAA,IAC1D,QAAQ,EAAE,KAAA,EAAO,MAAM,MAAA,IAAU,IAAA,EAAM,YAAY,KAAA,EAAM;AAAA,IACzD,eAAe,EAAE,KAAA,EAAO,MAAM,aAAA,IAAiB,IAAA,EAAM,YAAY,KAAA,EAAM;AAAA,IACvE,eAAe,EAAE,KAAA,EAAO,MAAM,aAAA,IAAiB,IAAA,EAAM,YAAY,KAAA,EAAM;AAAA,IACvE,QAAQ,EAAE,KAAA,EAAO,MAAM,MAAA,IAAU,IAAA,EAAM,YAAY,IAAA;AAAK,GAC1D;AACA,EAAA,MAAM,QAAA,GAAW,gBAAA;AAMjB,EAAA,MAAM,IAAA,GAAO,EAAE,GAAG,KAAA,EAAM;AAExB,EAAA,MAAM,cAAA,GAAiBA,qBAAAA,CAAsB,cAAA,EAAgB,WAAW,CAAA;AACxE,EAAA,OAAO,OAAO,MAAA,CAAO;AAAA,IACnB,QAAA,EAAU;AAAA,MACR,cAAA,CAAe,QAAA,EAAU,QAAA,CAAS,MAAM,CAAA;AAAA,MACxC,cAAA,CAAe,MAAA,EAAQ,QAAA,CAAS,IAAI,CAAA;AAAA,MACpC,cAAA,CAAe,WAAA,EAAa,QAAA,CAAS,SAAS,CAAA;AAAA,MAC9C,cAAA,CAAe,SAAA,EAAW,QAAA,CAAS,OAAO,CAAA;AAAA,MAC1C,cAAA,CAAe,UAAA,EAAY,QAAA,CAAS,QAAQ,CAAA;AAAA,MAC5C,cAAA,CAAe,YAAA,EAAc,QAAA,CAAS,UAAU,CAAA;AAAA,MAChD,cAAA,CAAe,YAAA,EAAc,QAAA,CAAS,UAAU,CAAA;AAAA,MAChD,cAAA,CAAe,QAAA,EAAU,QAAA,CAAS,MAAM,CAAA;AAAA,MACxC,cAAA,CAAe,SAAA,EAAW,QAAA,CAAS,OAAO,CAAA;AAAA,MAC1C,cAAA,CAAe,QAAA,EAAU,QAAA,CAAS,MAAM,CAAA;AAAA,MACxC,cAAA,CAAe,eAAA,EAAiB,QAAA,CAAS,aAAa,CAAA;AAAA,MACtD,cAAA,CAAe,eAAA,EAAiB,QAAA,CAAS,aAAa,CAAA;AAAA,MACtD,cAAA,CAAe,QAAA,EAAU,QAAA,CAAS,MAAM;AAAA,KAC1C;AAAA,IACA,IAAA,EAAM,sCAAqC,CAAE,MAAA;AAAA,MAC3C;AAAA,KACF;AAAA,IACA;AAAA,GAgBD,CAAA;AACH;AAyBO,SAAS,4BAId,WAAA,EAGuD;AACvD,EAAA,IAAI,WAAA,CAAY,QAAA,CAAS,MAAA,GAAS,EAAA,EAAI;AACpC,IAAA,MAAM,IAAIC,WAAAA;AAAA,MACRC,yDAAAA;AAAA,MACA;AAAA,QACE,kBAAA,EAAoB,YAAY,QAAA,CAAS,MAAA;AAAA,QACzC,oBAAA,EAAsB;AAAA;AACxB,KACF;AAAA,EACF;AACA,EAAA,IAAI,YAAA,GAAe,CAAA;AACnB,EAAA,MAAM,iBAAiB,MAAM;AAC3B,IAAA,MAAM,WAAA,GAAe,WAAA,CAAY,QAAA,CAA2B,YAAY,CAAA;AACxE,IAAA,YAAA,IAAgB,CAAA;AAChB,IAAA,OAAO,WAAA;AAAA,EACT,CAAA;AACA,EAAA,MAAM,yBAAyB,MAAM;AACnC,IAAA,MAAM,cAAc,cAAA,EAAe;AACnC,IAAA,OAAO,WAAA,CAAY,OAAA,KAAY,oBAAA,GAC3B,MAAA,GACA,WAAA;AAAA,EACN,CAAA;AACA,EAAA,OAAO;AAAA,IACL,gBAAgB,WAAA,CAAY,cAAA;AAAA,IAC5B,QAAA,EAAU;AAAA,MACR,QAAQ,cAAA,EAAe;AAAA,MACvB,MAAM,cAAA,EAAe;AAAA,MACrB,WAAW,cAAA,EAAe;AAAA,MAC1B,SAAS,cAAA,EAAe;AAAA,MACxB,UAAU,cAAA,EAAe;AAAA,MACzB,YAAY,cAAA,EAAe;AAAA,MAC3B,YAAY,cAAA,EAAe;AAAA,MAC3B,QAAQ,cAAA,EAAe;AAAA,MACvB,SAAS,cAAA,EAAe;AAAA,MACxB,QAAQ,cAAA,EAAe;AAAA,MACvB,eAAe,cAAA,EAAe;AAAA,MAC9B,eAAe,cAAA,EAAe;AAAA,MAC9B,QAAQ,sBAAA;AAAuB,KACjC;AAAA,IACA,IAAA,EAAM,oCAAA,EAAqC,CAAE,MAAA,CAAO,YAAY,IAAI;AAAA,GACtE;AACF;AClgBO,IAAM,4BAAA,GAA+B,IAAI,UAAA,CAAW;AAAA,EACzD,EAAA;AAAA,EAAI,GAAA;AAAA,EAAK,EAAA;AAAA,EAAI,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,EAAA;AAAA,EAAI,GAAA;AAAA,EAAK;AAClC,CAAC;AAEM,SAAS,kCAAA,GAAqC;AACnD,EAAA,OAAOb,cAAAA,CAAeC,eAAAA,EAAgB,EAAG,CAAC,CAAA,CAAE,MAAA;AAAA,IAC1C;AAAA,GACF;AACF;AA6BO,SAAS,sCAAA,GAA6F;AAC3G,EAAA,OAAOC,gBAAAA;AAAA,IACLC,gBAAAA,CAAiB;AAAA,MACf,CAAC,eAAA,EAAiBH,cAAAA,CAAeC,eAAAA,EAAgB,EAAG,CAAC,CAAC,CAAA;AAAA,MACtD,CAAC,UAAA,EAAYS,iBAAAA,EAAmB;AAAA,KACjC,CAAA;AAAA,IACD,CAAC,KAAA,MAAW,EAAE,GAAG,KAAA,EAAO,eAAe,4BAAA,EAA6B;AAAA,GACtE;AACF;AAEO,SAAS,sCAAA,GAAyF;AACvG,EAAA,OAAON,gBAAAA,CAAiB;AAAA,IACtB,CAAC,eAAA,EAAiBC,cAAAA,CAAeC,eAAAA,EAAgB,EAAG,CAAC,CAAC,CAAA;AAAA,IACtD,CAAC,UAAA,EAAYa,iBAAAA,EAAmB;AAAA,GACjC,CAAA;AACH;AAEO,SAAS,oCAAA,GAGd;AACA,EAAA,OAAOZ,YAAAA;AAAA,IACL,sCAAA,EAAuC;AAAA,IACvC,sCAAA;AAAuC,GACzC;AACF;AAWO,SAAS,2BAAA,CAKd,OACA,MAAA,EAC0E;AAE1E,EAAA,MAAM,cAAA,GAAiB,QAAQ,cAAA,IAAkB,oBAAA;AAGjD,EAAA,MAAM,gBAAA,GAAmB;AAAA,IACvB,QAAQ,EAAE,KAAA,EAAO,MAAM,MAAA,IAAU,IAAA,EAAM,YAAY,IAAA,EAAK;AAAA,IACxD,OAAO,EAAE,KAAA,EAAO,MAAM,KAAA,IAAS,IAAA,EAAM,YAAY,KAAA;AAAM,GACzD;AACA,EAAA,MAAM,QAAA,GAAW,gBAAA;AAMjB,EAAA,MAAM,IAAA,GAAO,EAAE,GAAG,KAAA,EAAM;AAExB,EAAA,MAAM,cAAA,GAAiBI,qBAAAA,CAAsB,cAAA,EAAgB,WAAW,CAAA;AACxE,EAAA,OAAO,OAAO,MAAA,CAAO;AAAA,IACnB,QAAA,EAAU;AAAA,MACR,cAAA,CAAe,QAAA,EAAU,QAAA,CAAS,MAAM,CAAA;AAAA,MACxC,cAAA,CAAe,OAAA,EAAS,QAAA,CAAS,KAAK;AAAA,KACxC;AAAA,IACA,IAAA,EAAM,wCAAuC,CAAE,MAAA;AAAA,MAC7C;AAAA,KACF;AAAA,IACA;AAAA,GAKD,CAAA;AACH;AAcO,SAAS,8BAId,WAAA,EAGyD;AACzD,EAAA,IAAI,WAAA,CAAY,QAAA,CAAS,MAAA,GAAS,CAAA,EAAG;AACnC,IAAA,MAAM,IAAIC,WAAAA;AAAA,MACRC,yDAAAA;AAAA,MACA;AAAA,QACE,kBAAA,EAAoB,YAAY,QAAA,CAAS,MAAA;AAAA,QACzC,oBAAA,EAAsB;AAAA;AACxB,KACF;AAAA,EACF;AACA,EAAA,IAAI,YAAA,GAAe,CAAA;AACnB,EAAA,MAAM,iBAAiB,MAAM;AAC3B,IAAA,MAAM,WAAA,GAAe,WAAA,CAAY,QAAA,CAA2B,YAAY,CAAA;AACxE,IAAA,YAAA,IAAgB,CAAA;AAChB,IAAA,OAAO,WAAA;AAAA,EACT,CAAA;AACA,EAAA,OAAO;AAAA,IACL,gBAAgB,WAAA,CAAY,cAAA;AAAA,IAC5B,UAAU,EAAE,MAAA,EAAQ,gBAAe,EAAG,KAAA,EAAO,gBAAe,EAAE;AAAA,IAC9D,IAAA,EAAM,sCAAA,EAAuC,CAAE,MAAA,CAAO,YAAY,IAAI;AAAA,GACxE;AACF;AC5JO,IAAM,qBAAA,GAAwB,IAAI,UAAA,CAAW;AAAA,EAClD,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,CAAA;AAAA,EAAG,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK;AACjC,CAAC;AAEM,SAAS,4BAAA,GAA+B;AAC7C,EAAA,OAAOb,eAAeC,eAAAA,EAAgB,EAAG,CAAC,CAAA,CAAE,OAAO,qBAAqB,CAAA;AAC1E;AA0BO,SAAS,gCAAA,GAAiF;AAC/F,EAAA,OAAOC,gBAAAA;AAAA,IACLC,gBAAAA,CAAiB,CAAC,CAAC,eAAA,EAAiBH,cAAAA,CAAeC,iBAAgB,EAAG,CAAC,CAAC,CAAC,CAAC,CAAA;AAAA,IAC1E,CAAC,KAAA,MAAW,EAAE,GAAG,KAAA,EAAO,eAAe,qBAAA,EAAsB;AAAA,GAC/D;AACF;AAEO,SAAS,gCAAA,GAA6E;AAC3F,EAAA,OAAOG,gBAAAA,CAAiB;AAAA,IACtB,CAAC,eAAA,EAAiBC,cAAAA,CAAeC,eAAAA,EAAgB,EAAG,CAAC,CAAC;AAAA,GACvD,CAAA;AACH;AAEO,SAAS,8BAAA,GAGd;AACA,EAAA,OAAOC,YAAAA;AAAA,IACL,gCAAA,EAAiC;AAAA,IACjC,gCAAA;AAAiC,GACnC;AACF;AAUO,SAAS,qBAAA,CAKd,OACA,MAAA,EACoE;AAEpE,EAAA,MAAM,cAAA,GAAiB,QAAQ,cAAA,IAAkB,oBAAA;AAGjD,EAAA,MAAM,gBAAA,GAAmB;AAAA,IACvB,QAAQ,EAAE,KAAA,EAAO,MAAM,MAAA,IAAU,IAAA,EAAM,YAAY,IAAA,EAAK;AAAA,IACxD,OAAO,EAAE,KAAA,EAAO,MAAM,KAAA,IAAS,IAAA,EAAM,YAAY,KAAA;AAAM,GACzD;AACA,EAAA,MAAM,QAAA,GAAW,gBAAA;AAKjB,EAAA,MAAM,cAAA,GAAiBI,qBAAAA,CAAsB,cAAA,EAAgB,WAAW,CAAA;AACxE,EAAA,OAAO,OAAO,MAAA,CAAO;AAAA,IACnB,QAAA,EAAU;AAAA,MACR,cAAA,CAAe,QAAA,EAAU,QAAA,CAAS,MAAM,CAAA;AAAA,MACxC,cAAA,CAAe,OAAA,EAAS,QAAA,CAAS,KAAK;AAAA,KACxC;AAAA,IACA,IAAA,EAAM,gCAAA,EAAiC,CAAE,MAAA,CAAO,EAAE,CAAA;AAAA,IAClD;AAAA,GACqE,CAAA;AACzE;AAcO,SAAS,wBAId,WAAA,EAGmD;AACnD,EAAA,IAAI,WAAA,CAAY,QAAA,CAAS,MAAA,GAAS,CAAA,EAAG;AACnC,IAAA,MAAM,IAAIC,WAAAA;AAAA,MACRC,yDAAAA;AAAA,MACA;AAAA,QACE,kBAAA,EAAoB,YAAY,QAAA,CAAS,MAAA;AAAA,QACzC,oBAAA,EAAsB;AAAA;AACxB,KACF;AAAA,EACF;AACA,EAAA,IAAI,YAAA,GAAe,CAAA;AACnB,EAAA,MAAM,iBAAiB,MAAM;AAC3B,IAAA,MAAM,WAAA,GAAe,WAAA,CAAY,QAAA,CAA2B,YAAY,CAAA;AACxE,IAAA,YAAA,IAAgB,CAAA;AAChB,IAAA,OAAO,WAAA;AAAA,EACT,CAAA;AACA,EAAA,OAAO;AAAA,IACL,gBAAgB,WAAA,CAAY,cAAA;AAAA,IAC5B,UAAU,EAAE,MAAA,EAAQ,gBAAe,EAAG,KAAA,EAAO,gBAAe,EAAE;AAAA,IAC9D,IAAA,EAAM,gCAAA,EAAiC,CAAE,MAAA,CAAO,YAAY,IAAI;AAAA,GAClE;AACF;AC/HO,IAAM,2BAAA,GAA8B,IAAI,UAAA,CAAW;AAAA,EACxD,EAAA;AAAA,EAAI,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,GAAA;AAAA,EAAK;AAClC,CAAC;AAEM,SAAS,iCAAA,GAAoC;AAClD,EAAA,OAAOb,cAAAA,CAAeC,eAAAA,EAAgB,EAAG,CAAC,CAAA,CAAE,MAAA;AAAA,IAC1C;AAAA,GACF;AACF;AAuCO,SAAS,qCAAA,GAAkF;AAChG,EAAA,OAAOC,gBAAAA;AAAA,IACLC,gBAAAA,CAAiB;AAAA,MACf,CAAC,eAAA,EAAiBH,cAAAA,CAAeC,eAAAA,EAAgB,EAAG,CAAC,CAAC,CAAA;AAAA,MACtD,CAAC,eAAA,EAAiBe,aAAAA,EAAe,CAAA;AAAA,MACjC,CAAC,gBAAA,EAAkBA,aAAAA,EAAe,CAAA;AAAA,MAClC,CAAC,oBAAA,EAAsBC,iBAAAA,EAAmB,CAAA;AAAA,MAC1C,CAAC,gBAAA,EAAkBD,aAAAA,EAAe,CAAA;AAAA,MAClC,CAAC,eAAA,EAAiBE,eAAAA,CAAgBR,iBAAAA,EAAmB,CAAC;AAAA,KACvD,CAAA;AAAA,IACD,CAAC,KAAA,MAAW,EAAE,GAAG,KAAA,EAAO,eAAe,2BAAA,EAA4B;AAAA,GACrE;AACF;AAEO,SAAS,qCAAA,GAA8E;AAC5F,EAAA,OAAON,gBAAAA,CAAiB;AAAA,IACtB,CAAC,eAAA,EAAiBC,cAAAA,CAAeC,eAAAA,EAAgB,EAAG,CAAC,CAAC,CAAA;AAAA,IACtD,CAAC,eAAA,EAAiBc,aAAAA,EAAe,CAAA;AAAA,IACjC,CAAC,gBAAA,EAAkBA,aAAAA,EAAe,CAAA;AAAA,IAClC,CAAC,oBAAA,EAAsBC,iBAAAA,EAAmB,CAAA;AAAA,IAC1C,CAAC,gBAAA,EAAkBD,aAAAA,EAAe,CAAA;AAAA,IAClC,CAAC,eAAA,EAAiBE,eAAAA,CAAgBH,iBAAAA,EAAmB,CAAC;AAAA,GACvD,CAAA;AACH;AAEO,SAAS,mCAAA,GAGd;AACA,EAAA,OAAOZ,YAAAA;AAAA,IACL,qCAAA,EAAsC;AAAA,IACtC,qCAAA;AAAsC,GACxC;AACF;AAeO,SAAS,0BAAA,CAKd,OACA,MAAA,EACyE;AAEzE,EAAA,MAAM,cAAA,GAAiB,QAAQ,cAAA,IAAkB,oBAAA;AAGjD,EAAA,MAAM,gBAAA,GAAmB;AAAA,IACvB,QAAQ,EAAE,KAAA,EAAO,MAAM,MAAA,IAAU,IAAA,EAAM,YAAY,IAAA,EAAK;AAAA,IACxD,OAAO,EAAE,KAAA,EAAO,MAAM,KAAA,IAAS,IAAA,EAAM,YAAY,KAAA;AAAM,GACzD;AACA,EAAA,MAAM,QAAA,GAAW,gBAAA;AAMjB,EAAA,MAAM,IAAA,GAAO,EAAE,GAAG,KAAA,EAAM;AAExB,EAAA,MAAM,cAAA,GAAiBI,qBAAAA,CAAsB,cAAA,EAAgB,WAAW,CAAA;AACxE,EAAA,OAAO,OAAO,MAAA,CAAO;AAAA,IACnB,QAAA,EAAU;AAAA,MACR,cAAA,CAAe,QAAA,EAAU,QAAA,CAAS,MAAM,CAAA;AAAA,MACxC,cAAA,CAAe,OAAA,EAAS,QAAA,CAAS,KAAK;AAAA,KACxC;AAAA,IACA,IAAA,EAAM,uCAAsC,CAAE,MAAA;AAAA,MAC5C;AAAA,KACF;AAAA,IACA;AAAA,GAC0E,CAAA;AAC9E;AAcO,SAAS,6BAId,WAAA,EAGwD;AACxD,EAAA,IAAI,WAAA,CAAY,QAAA,CAAS,MAAA,GAAS,CAAA,EAAG;AACnC,IAAA,MAAM,IAAIC,WAAAA;AAAA,MACRC,yDAAAA;AAAA,MACA;AAAA,QACE,kBAAA,EAAoB,YAAY,QAAA,CAAS,MAAA;AAAA,QACzC,oBAAA,EAAsB;AAAA;AACxB,KACF;AAAA,EACF;AACA,EAAA,IAAI,YAAA,GAAe,CAAA;AACnB,EAAA,MAAM,iBAAiB,MAAM;AAC3B,IAAA,MAAM,WAAA,GAAe,WAAA,CAAY,QAAA,CAA2B,YAAY,CAAA;AACxE,IAAA,YAAA,IAAgB,CAAA;AAChB,IAAA,OAAO,WAAA;AAAA,EACT,CAAA;AACA,EAAA,OAAO;AAAA,IACL,gBAAgB,WAAA,CAAY,cAAA;AAAA,IAC5B,UAAU,EAAE,MAAA,EAAQ,gBAAe,EAAG,KAAA,EAAO,gBAAe,EAAE;AAAA,IAC9D,IAAA,EAAM,qCAAA,EAAsC,CAAE,MAAA,CAAO,YAAY,IAAI;AAAA,GACvE;AACF;AChLO,IAAM,mCAAA,GAAsC,IAAI,UAAA,CAAW;AAAA,EAChE,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,EAAA;AAAA,EAAI,GAAA;AAAA,EAAK;AACpC,CAAC;AAEM,SAAS,wCAAA,GAA2C;AACzD,EAAA,OAAOb,cAAAA,CAAeC,eAAAA,EAAgB,EAAG,CAAC,CAAA,CAAE,MAAA;AAAA,IAC1C;AAAA,GACF;AACF;AAoEO,SAAS,4CAAA,GAAyG;AACvH,EAAA,OAAOC,gBAAAA;AAAA,IACLC,gBAAAA,CAAiB,CAAC,CAAC,eAAA,EAAiBH,cAAAA,CAAeC,iBAAgB,EAAG,CAAC,CAAC,CAAC,CAAC,CAAA;AAAA,IAC1E,CAAC,KAAA,MAAW;AAAA,MACV,GAAG,KAAA;AAAA,MACH,aAAA,EAAe;AAAA,KACjB;AAAA,GACF;AACF;AAEO,SAAS,4CAAA,GAAqG;AACnH,EAAA,OAAOG,gBAAAA,CAAiB;AAAA,IACtB,CAAC,eAAA,EAAiBC,cAAAA,CAAeC,eAAAA,EAAgB,EAAG,CAAC,CAAC;AAAA,GACvD,CAAA;AACH;AAEO,SAAS,0CAAA,GAGd;AACA,EAAA,OAAOC,YAAAA;AAAA,IACL,4CAAA,EAA6C;AAAA,IAC7C,4CAAA;AAA6C,GAC/C;AACF;AA8BA,eAAsB,sCAAA,CAepB,OAcA,MAAA,EAiBA;AAEA,EAAA,MAAM,cAAA,GAAiB,QAAQ,cAAA,IAAkB,oBAAA;AAGjD,EAAA,MAAM,gBAAA,GAAmB;AAAA,IACvB,QAAQ,EAAE,KAAA,EAAO,MAAM,MAAA,IAAU,IAAA,EAAM,YAAY,KAAA,EAAM;AAAA,IACzD,MAAM,EAAE,KAAA,EAAO,MAAM,IAAA,IAAQ,IAAA,EAAM,YAAY,KAAA,EAAM;AAAA,IACrD,OAAO,EAAE,KAAA,EAAO,MAAM,KAAA,IAAS,IAAA,EAAM,YAAY,KAAA,EAAM;AAAA,IACvD,WAAW,EAAE,KAAA,EAAO,MAAM,SAAA,IAAa,IAAA,EAAM,YAAY,KAAA,EAAM;AAAA,IAC/D,QAAQ,EAAE,KAAA,EAAO,MAAM,MAAA,IAAU,IAAA,EAAM,YAAY,IAAA,EAAK;AAAA,IACxD,QAAQ,EAAE,KAAA,EAAO,MAAM,MAAA,IAAU,IAAA,EAAM,YAAY,IAAA,EAAK;AAAA,IACxD,YAAY,EAAE,KAAA,EAAO,MAAM,UAAA,IAAc,IAAA,EAAM,YAAY,KAAA,EAAM;AAAA,IACjE,YAAY,EAAE,KAAA,EAAO,MAAM,UAAA,IAAc,IAAA,EAAM,YAAY,KAAA,EAAM;AAAA,IACjE,WAAW,EAAE,KAAA,EAAO,MAAM,SAAA,IAAa,IAAA,EAAM,YAAY,IAAA,EAAK;AAAA,IAC9D,WAAW,EAAE,KAAA,EAAO,MAAM,SAAA,IAAa,IAAA,EAAM,YAAY,IAAA,EAAK;AAAA,IAC9D,eAAe,EAAE,KAAA,EAAO,MAAM,aAAA,IAAiB,IAAA,EAAM,YAAY,KAAA,EAAM;AAAA,IACvE,eAAe,EAAE,KAAA,EAAO,MAAM,aAAA,IAAiB,IAAA,EAAM,YAAY,KAAA;AAAM,GACzE;AACA,EAAA,MAAM,QAAA,GAAW,gBAAA;AAMjB,EAAA,IAAI,CAAC,QAAA,CAAS,SAAA,CAAU,KAAA,EAAO;AAC7B,IAAA,QAAA,CAAS,SAAA,CAAU,KAAA,GAAQ,MAAMO,wBAAAA,CAAyB;AAAA,MACxD,cAAA;AAAA,MACA,KAAA,EAAO;AAAA,QACLb,iBAAgB,CAAE,MAAA;AAAA,UAChB,IAAI,UAAA,CAAW,CAAC,EAAA,EAAI,GAAA,EAAK,GAAA,EAAK,GAAA,EAAK,GAAA,EAAK,GAAA,EAAK,GAAA,EAAK,GAAA,EAAK,GAAG,CAAC;AAAA,SAC7D;AAAA,QACAS,mBAAkB,CAAE,MAAA;AAAA,UAClBK,wCAAAA,CAAyC,MAAA,EAAQ,QAAA,CAAS,IAAA,CAAK,KAAK;AAAA;AACtE;AACF,KACD,CAAA;AAAA,EACH;AACA,EAAA,IAAI,CAAC,QAAA,CAAS,SAAA,CAAU,KAAA,EAAO;AAC7B,IAAA,QAAA,CAAS,SAAA,CAAU,KAAA,GAAQ,MAAMD,wBAAAA,CAAyB;AAAA,MACxD,cAAA,EACE,8CAAA;AAAA,MACF,KAAA,EAAO;AAAA,QACLJ,mBAAkB,CAAE,MAAA;AAAA,UAClBK,wCAAAA;AAAA,YACE,OAAA;AAAA,YACA,SAAS,KAAA,CAAM;AAAA;AACjB,SACF;AAAA,QACAL,mBAAkB,CAAE,MAAA;AAAA,UAClBK,wCAAAA;AAAA,YACE,eAAA;AAAA,YACA,SAAS,aAAA,CAAc;AAAA;AACzB,SACF;AAAA,QACAL,mBAAkB,CAAE,MAAA;AAAA,UAClBK,wCAAAA;AAAA,YACE,YAAA;AAAA,YACA,SAAS,UAAA,CAAW;AAAA;AACtB;AACF;AACF,KACD,CAAA;AAAA,EACH;AACA,EAAA,IAAI,CAAC,QAAA,CAAS,SAAA,CAAU,KAAA,EAAO;AAC7B,IAAA,QAAA,CAAS,SAAA,CAAU,KAAA,GAAQ,MAAMD,wBAAAA,CAAyB;AAAA,MACxD,cAAA,EACE,8CAAA;AAAA,MACF,KAAA,EAAO;AAAA,QACLJ,mBAAkB,CAAE,MAAA;AAAA,UAClBK,wCAAAA;AAAA,YACE,OAAA;AAAA,YACA,SAAS,KAAA,CAAM;AAAA;AACjB,SACF;AAAA,QACAL,mBAAkB,CAAE,MAAA;AAAA,UAClBK,wCAAAA;AAAA,YACE,eAAA;AAAA,YACA,SAAS,aAAA,CAAc;AAAA;AACzB,SACF;AAAA,QACAL,mBAAkB,CAAE,MAAA;AAAA,UAClBK,wCAAAA;AAAA,YACE,YAAA;AAAA,YACA,SAAS,UAAA,CAAW;AAAA;AACtB;AACF;AACF,KACD,CAAA;AAAA,EACH;AAEA,EAAA,MAAM,cAAA,GAAiBJ,qBAAAA,CAAsB,cAAA,EAAgB,WAAW,CAAA;AACxE,EAAA,OAAO,OAAO,MAAA,CAAO;AAAA,IACnB,QAAA,EAAU;AAAA,MACR,cAAA,CAAe,QAAA,EAAU,QAAA,CAAS,MAAM,CAAA;AAAA,MACxC,cAAA,CAAe,MAAA,EAAQ,QAAA,CAAS,IAAI,CAAA;AAAA,MACpC,cAAA,CAAe,OAAA,EAAS,QAAA,CAAS,KAAK,CAAA;AAAA,MACtC,cAAA,CAAe,WAAA,EAAa,QAAA,CAAS,SAAS,CAAA;AAAA,MAC9C,cAAA,CAAe,QAAA,EAAU,QAAA,CAAS,MAAM,CAAA;AAAA,MACxC,cAAA,CAAe,QAAA,EAAU,QAAA,CAAS,MAAM,CAAA;AAAA,MACxC,cAAA,CAAe,YAAA,EAAc,QAAA,CAAS,UAAU,CAAA;AAAA,MAChD,cAAA,CAAe,YAAA,EAAc,QAAA,CAAS,UAAU,CAAA;AAAA,MAChD,cAAA,CAAe,WAAA,EAAa,QAAA,CAAS,SAAS,CAAA;AAAA,MAC9C,cAAA,CAAe,WAAA,EAAa,QAAA,CAAS,SAAS,CAAA;AAAA,MAC9C,cAAA,CAAe,eAAA,EAAiB,QAAA,CAAS,aAAa,CAAA;AAAA,MACtD,cAAA,CAAe,eAAA,EAAiB,QAAA,CAAS,aAAa;AAAA,KACxD;AAAA,IACA,IAAA,EAAM,4CAAA,EAA6C,CAAE,MAAA,CAAO,EAAE,CAAA;AAAA,IAC9D;AAAA,GAeD,CAAA;AACH;AA8BO,SAAS,iCAAA,CAed,OAcA,MAAA,EAeA;AAEA,EAAA,MAAM,cAAA,GAAiB,QAAQ,cAAA,IAAkB,oBAAA;AAGjD,EAAA,MAAM,gBAAA,GAAmB;AAAA,IACvB,QAAQ,EAAE,KAAA,EAAO,MAAM,MAAA,IAAU,IAAA,EAAM,YAAY,KAAA,EAAM;AAAA,IACzD,MAAM,EAAE,KAAA,EAAO,MAAM,IAAA,IAAQ,IAAA,EAAM,YAAY,KAAA,EAAM;AAAA,IACrD,OAAO,EAAE,KAAA,EAAO,MAAM,KAAA,IAAS,IAAA,EAAM,YAAY,KAAA,EAAM;AAAA,IACvD,WAAW,EAAE,KAAA,EAAO,MAAM,SAAA,IAAa,IAAA,EAAM,YAAY,KAAA,EAAM;AAAA,IAC/D,QAAQ,EAAE,KAAA,EAAO,MAAM,MAAA,IAAU,IAAA,EAAM,YAAY,IAAA,EAAK;AAAA,IACxD,QAAQ,EAAE,KAAA,EAAO,MAAM,MAAA,IAAU,IAAA,EAAM,YAAY,IAAA,EAAK;AAAA,IACxD,YAAY,EAAE,KAAA,EAAO,MAAM,UAAA,IAAc,IAAA,EAAM,YAAY,KAAA,EAAM;AAAA,IACjE,YAAY,EAAE,KAAA,EAAO,MAAM,UAAA,IAAc,IAAA,EAAM,YAAY,KAAA,EAAM;AAAA,IACjE,WAAW,EAAE,KAAA,EAAO,MAAM,SAAA,IAAa,IAAA,EAAM,YAAY,IAAA,EAAK;AAAA,IAC9D,WAAW,EAAE,KAAA,EAAO,MAAM,SAAA,IAAa,IAAA,EAAM,YAAY,IAAA,EAAK;AAAA,IAC9D,eAAe,EAAE,KAAA,EAAO,MAAM,aAAA,IAAiB,IAAA,EAAM,YAAY,KAAA,EAAM;AAAA,IACvE,eAAe,EAAE,KAAA,EAAO,MAAM,aAAA,IAAiB,IAAA,EAAM,YAAY,KAAA;AAAM,GACzE;AACA,EAAA,MAAM,QAAA,GAAW,gBAAA;AAKjB,EAAA,MAAM,cAAA,GAAiBA,qBAAAA,CAAsB,cAAA,EAAgB,WAAW,CAAA;AACxE,EAAA,OAAO,OAAO,MAAA,CAAO;AAAA,IACnB,QAAA,EAAU;AAAA,MACR,cAAA,CAAe,QAAA,EAAU,QAAA,CAAS,MAAM,CAAA;AAAA,MACxC,cAAA,CAAe,MAAA,EAAQ,QAAA,CAAS,IAAI,CAAA;AAAA,MACpC,cAAA,CAAe,OAAA,EAAS,QAAA,CAAS,KAAK,CAAA;AAAA,MACtC,cAAA,CAAe,WAAA,EAAa,QAAA,CAAS,SAAS,CAAA;AAAA,MAC9C,cAAA,CAAe,QAAA,EAAU,QAAA,CAAS,MAAM,CAAA;AAAA,MACxC,cAAA,CAAe,QAAA,EAAU,QAAA,CAAS,MAAM,CAAA;AAAA,MACxC,cAAA,CAAe,YAAA,EAAc,QAAA,CAAS,UAAU,CAAA;AAAA,MAChD,cAAA,CAAe,YAAA,EAAc,QAAA,CAAS,UAAU,CAAA;AAAA,MAChD,cAAA,CAAe,WAAA,EAAa,QAAA,CAAS,SAAS,CAAA;AAAA,MAC9C,cAAA,CAAe,WAAA,EAAa,QAAA,CAAS,SAAS,CAAA;AAAA,MAC9C,cAAA,CAAe,eAAA,EAAiB,QAAA,CAAS,aAAa,CAAA;AAAA,MACtD,cAAA,CAAe,eAAA,EAAiB,QAAA,CAAS,aAAa;AAAA,KACxD;AAAA,IACA,IAAA,EAAM,4CAAA,EAA6C,CAAE,MAAA,CAAO,EAAE,CAAA;AAAA,IAC9D;AAAA,GAeD,CAAA;AACH;AAwBO,SAAS,oCAId,WAAA,EAG+D;AAC/D,EAAA,IAAI,WAAA,CAAY,QAAA,CAAS,MAAA,GAAS,EAAA,EAAI;AACpC,IAAA,MAAM,IAAIC,WAAAA;AAAA,MACRC,yDAAAA;AAAA,MACA;AAAA,QACE,kBAAA,EAAoB,YAAY,QAAA,CAAS,MAAA;AAAA,QACzC,oBAAA,EAAsB;AAAA;AACxB,KACF;AAAA,EACF;AACA,EAAA,IAAI,YAAA,GAAe,CAAA;AACnB,EAAA,MAAM,iBAAiB,MAAM;AAC3B,IAAA,MAAM,WAAA,GAAe,WAAA,CAAY,QAAA,CAA2B,YAAY,CAAA;AACxE,IAAA,YAAA,IAAgB,CAAA;AAChB,IAAA,OAAO,WAAA;AAAA,EACT,CAAA;AACA,EAAA,OAAO;AAAA,IACL,gBAAgB,WAAA,CAAY,cAAA;AAAA,IAC5B,QAAA,EAAU;AAAA,MACR,QAAQ,cAAA,EAAe;AAAA,MACvB,MAAM,cAAA,EAAe;AAAA,MACrB,OAAO,cAAA,EAAe;AAAA,MACtB,WAAW,cAAA,EAAe;AAAA,MAC1B,QAAQ,cAAA,EAAe;AAAA,MACvB,QAAQ,cAAA,EAAe;AAAA,MACvB,YAAY,cAAA,EAAe;AAAA,MAC3B,YAAY,cAAA,EAAe;AAAA,MAC3B,WAAW,cAAA,EAAe;AAAA,MAC1B,WAAW,cAAA,EAAe;AAAA,MAC1B,eAAe,cAAA,EAAe;AAAA,MAC9B,eAAe,cAAA;AAAe,KAChC;AAAA,IACA,IAAA,EAAM,8CAA6C,CAAE,MAAA;AAAA,MACnD,WAAA,CAAY;AAAA;AACd,GACF;AACF;;;ACtZO,IAAM,oBAAA,GACX;;;ACvFK,IAAM,2BAAA,GAA8B,IAAI,UAAA,CAAW;AAAA,EACxD,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,EAAA;AAAA,EAAI;AAClC,CAAC;AAEM,SAAS,iCAAA,GAAoC;AAClD,EAAA,OAAOb,cAAAA,CAAeC,eAAAA,EAAgB,EAAG,CAAC,CAAA,CAAE,MAAA;AAAA,IAC1C;AAAA,GACF;AACF;AAyFO,SAAS,qCAAA,GAA2F;AACzG,EAAA,OAAOC,gBAAAA;AAAA,IACLC,gBAAAA,CAAiB;AAAA,MACf,CAAC,eAAA,EAAiBH,cAAAA,CAAeC,eAAAA,EAAgB,EAAG,CAAC,CAAC,CAAA;AAAA,MACtD,CAAC,YAAA,EAAcO,aAAAA,EAAe,CAAA;AAAA,MAC9B,CAAC,YAAA,EAAcA,aAAAA,EAAe,CAAA;AAAA,MAC9B,CAAC,cAAA,EAAgBe,cAAAA,EAAgB,CAAA;AAAA,MACjC,CAAC,cAAA,EAAgBN,iBAAAA,EAAmB;AAAA,KACrC,CAAA;AAAA,IACD,CAAC,KAAA,MAAW,EAAE,GAAG,KAAA,EAAO,eAAe,2BAAA,EAA4B;AAAA,GACrE;AACF;AAEO,SAAS,qCAAA,GAAuF;AACrG,EAAA,OAAOb,gBAAAA,CAAiB;AAAA,IACtB,CAAC,eAAA,EAAiBC,cAAAA,CAAeC,eAAAA,EAAgB,EAAG,CAAC,CAAC,CAAA;AAAA,IACtD,CAAC,YAAA,EAAcG,aAAAA,EAAe,CAAA;AAAA,IAC9B,CAAC,YAAA,EAAcA,aAAAA,EAAe,CAAA;AAAA,IAC9B,CAAC,cAAA,EAAgBgB,cAAAA,EAAgB,CAAA;AAAA,IACjC,CAAC,cAAA,EAAgBJ,iBAAAA,EAAmB;AAAA,GACrC,CAAA;AACH;AAEO,SAAS,mCAAA,GAGd;AACA,EAAA,OAAOd,YAAAA;AAAA,IACL,qCAAA,EAAsC;AAAA,IACtC,qCAAA;AAAsC,GACxC;AACF;AAwCA,eAAsB,+BAAA,CAkBpB,OAiBA,MAAA,EAoBA;AAEA,EAAA,MAAM,cAAA,GAAiB,QAAQ,cAAA,IAAkB,oBAAA;AAGjD,EAAA,MAAM,gBAAA,GAAmB;AAAA,IACvB,QAAQ,EAAE,KAAA,EAAO,MAAM,MAAA,IAAU,IAAA,EAAM,YAAY,KAAA,EAAM;AAAA,IACzD,MAAM,EAAE,KAAA,EAAO,MAAM,IAAA,IAAQ,IAAA,EAAM,YAAY,IAAA,EAAK;AAAA,IACpD,UAAU,EAAE,KAAA,EAAO,MAAM,QAAA,IAAY,IAAA,EAAM,YAAY,IAAA,EAAK;AAAA,IAC5D,mBAAA,EAAqB;AAAA,MACnB,KAAA,EAAO,MAAM,mBAAA,IAAuB,IAAA;AAAA,MACpC,UAAA,EAAY;AAAA,KACd;AAAA,IACA,OAAO,EAAE,KAAA,EAAO,MAAM,KAAA,IAAS,IAAA,EAAM,YAAY,KAAA,EAAM;AAAA,IACvD,WAAW,EAAE,KAAA,EAAO,MAAM,SAAA,IAAa,IAAA,EAAM,YAAY,KAAA,EAAM;AAAA,IAC/D,QAAQ,EAAE,KAAA,EAAO,MAAM,MAAA,IAAU,IAAA,EAAM,YAAY,IAAA,EAAK;AAAA,IACxD,QAAQ,EAAE,KAAA,EAAO,MAAM,MAAA,IAAU,IAAA,EAAM,YAAY,IAAA,EAAK;AAAA,IACxD,YAAY,EAAE,KAAA,EAAO,MAAM,UAAA,IAAc,IAAA,EAAM,YAAY,KAAA,EAAM;AAAA,IACjE,YAAY,EAAE,KAAA,EAAO,MAAM,UAAA,IAAc,IAAA,EAAM,YAAY,KAAA,EAAM;AAAA,IACjE,OAAO,EAAE,KAAA,EAAO,MAAM,KAAA,IAAS,IAAA,EAAM,YAAY,IAAA,EAAK;AAAA,IACtD,OAAO,EAAE,KAAA,EAAO,MAAM,KAAA,IAAS,IAAA,EAAM,YAAY,IAAA,EAAK;AAAA,IACtD,eAAe,EAAE,KAAA,EAAO,MAAM,aAAA,IAAiB,IAAA,EAAM,YAAY,KAAA,EAAM;AAAA,IACvE,eAAe,EAAE,KAAA,EAAO,MAAM,aAAA,IAAiB,IAAA,EAAM,YAAY,KAAA,EAAM;AAAA,IACvE,QAAQ,EAAE,KAAA,EAAO,MAAM,MAAA,IAAU,IAAA,EAAM,YAAY,IAAA;AAAK,GAC1D;AACA,EAAA,MAAM,QAAA,GAAW,gBAAA;AAMjB,EAAA,MAAM,IAAA,GAAO,EAAE,GAAG,KAAA,EAAM;AAGxB,EAAA,IAAI,CAAC,QAAA,CAAS,SAAA,CAAU,KAAA,EAAO;AAC7B,IAAA,QAAA,CAAS,SAAA,CAAU,KAAA,GAAQ,MAAMO,wBAAAA,CAAyB;AAAA,MACxD,cAAA;AAAA,MACA,KAAA,EAAO;AAAA,QACLb,iBAAgB,CAAE,MAAA;AAAA,UAChB,IAAI,UAAA,CAAW,CAAC,EAAA,EAAI,GAAA,EAAK,GAAA,EAAK,GAAA,EAAK,GAAA,EAAK,GAAA,EAAK,GAAA,EAAK,GAAA,EAAK,GAAG,CAAC;AAAA,SAC7D;AAAA,QACAS,mBAAkB,CAAE,MAAA;AAAA,UAClBK,wCAAAA,CAAyC,MAAA,EAAQ,QAAA,CAAS,IAAA,CAAK,KAAK;AAAA;AACtE;AACF,KACD,CAAA;AAAA,EACH;AAEA,EAAA,MAAM,cAAA,GAAiBJ,qBAAAA,CAAsB,cAAA,EAAgB,WAAW,CAAA;AACxE,EAAA,OAAO,OAAO,MAAA,CAAO;AAAA,IACnB,QAAA,EAAU;AAAA,MACR,cAAA,CAAe,QAAA,EAAU,QAAA,CAAS,MAAM,CAAA;AAAA,MACxC,cAAA,CAAe,MAAA,EAAQ,QAAA,CAAS,IAAI,CAAA;AAAA,MACpC,cAAA,CAAe,UAAA,EAAY,QAAA,CAAS,QAAQ,CAAA;AAAA,MAC5C,cAAA,CAAe,qBAAA,EAAuB,QAAA,CAAS,mBAAmB,CAAA;AAAA,MAClE,cAAA,CAAe,OAAA,EAAS,QAAA,CAAS,KAAK,CAAA;AAAA,MACtC,cAAA,CAAe,WAAA,EAAa,QAAA,CAAS,SAAS,CAAA;AAAA,MAC9C,cAAA,CAAe,QAAA,EAAU,QAAA,CAAS,MAAM,CAAA;AAAA,MACxC,cAAA,CAAe,QAAA,EAAU,QAAA,CAAS,MAAM,CAAA;AAAA,MACxC,cAAA,CAAe,YAAA,EAAc,QAAA,CAAS,UAAU,CAAA;AAAA,MAChD,cAAA,CAAe,YAAA,EAAc,QAAA,CAAS,UAAU,CAAA;AAAA,MAChD,cAAA,CAAe,OAAA,EAAS,QAAA,CAAS,KAAK,CAAA;AAAA,MACtC,cAAA,CAAe,OAAA,EAAS,QAAA,CAAS,KAAK,CAAA;AAAA,MACtC,cAAA,CAAe,eAAA,EAAiB,QAAA,CAAS,aAAa,CAAA;AAAA,MACtD,cAAA,CAAe,eAAA,EAAiB,QAAA,CAAS,aAAa,CAAA;AAAA,MACtD,cAAA,CAAe,QAAA,EAAU,QAAA,CAAS,MAAM;AAAA,KAC1C;AAAA,IACA,IAAA,EAAM,uCAAsC,CAAE,MAAA;AAAA,MAC5C;AAAA,KACF;AAAA,IACA;AAAA,GAkBD,CAAA;AACH;AAwCO,SAAS,0BAAA,CAkBd,OAiBA,MAAA,EAkBA;AAEA,EAAA,MAAM,cAAA,GAAiB,QAAQ,cAAA,IAAkB,oBAAA;AAGjD,EAAA,MAAM,gBAAA,GAAmB;AAAA,IACvB,QAAQ,EAAE,KAAA,EAAO,MAAM,MAAA,IAAU,IAAA,EAAM,YAAY,KAAA,EAAM;AAAA,IACzD,MAAM,EAAE,KAAA,EAAO,MAAM,IAAA,IAAQ,IAAA,EAAM,YAAY,IAAA,EAAK;AAAA,IACpD,UAAU,EAAE,KAAA,EAAO,MAAM,QAAA,IAAY,IAAA,EAAM,YAAY,IAAA,EAAK;AAAA,IAC5D,mBAAA,EAAqB;AAAA,MACnB,KAAA,EAAO,MAAM,mBAAA,IAAuB,IAAA;AAAA,MACpC,UAAA,EAAY;AAAA,KACd;AAAA,IACA,OAAO,EAAE,KAAA,EAAO,MAAM,KAAA,IAAS,IAAA,EAAM,YAAY,KAAA,EAAM;AAAA,IACvD,WAAW,EAAE,KAAA,EAAO,MAAM,SAAA,IAAa,IAAA,EAAM,YAAY,KAAA,EAAM;AAAA,IAC/D,QAAQ,EAAE,KAAA,EAAO,MAAM,MAAA,IAAU,IAAA,EAAM,YAAY,IAAA,EAAK;AAAA,IACxD,QAAQ,EAAE,KAAA,EAAO,MAAM,MAAA,IAAU,IAAA,EAAM,YAAY,IAAA,EAAK;AAAA,IACxD,YAAY,EAAE,KAAA,EAAO,MAAM,UAAA,IAAc,IAAA,EAAM,YAAY,KAAA,EAAM;AAAA,IACjE,YAAY,EAAE,KAAA,EAAO,MAAM,UAAA,IAAc,IAAA,EAAM,YAAY,KAAA,EAAM;AAAA,IACjE,OAAO,EAAE,KAAA,EAAO,MAAM,KAAA,IAAS,IAAA,EAAM,YAAY,IAAA,EAAK;AAAA,IACtD,OAAO,EAAE,KAAA,EAAO,MAAM,KAAA,IAAS,IAAA,EAAM,YAAY,IAAA,EAAK;AAAA,IACtD,eAAe,EAAE,KAAA,EAAO,MAAM,aAAA,IAAiB,IAAA,EAAM,YAAY,KAAA,EAAM;AAAA,IACvE,eAAe,EAAE,KAAA,EAAO,MAAM,aAAA,IAAiB,IAAA,EAAM,YAAY,KAAA,EAAM;AAAA,IACvE,QAAQ,EAAE,KAAA,EAAO,MAAM,MAAA,IAAU,IAAA,EAAM,YAAY,IAAA;AAAK,GAC1D;AACA,EAAA,MAAM,QAAA,GAAW,gBAAA;AAMjB,EAAA,MAAM,IAAA,GAAO,EAAE,GAAG,KAAA,EAAM;AAExB,EAAA,MAAM,cAAA,GAAiBA,qBAAAA,CAAsB,cAAA,EAAgB,WAAW,CAAA;AACxE,EAAA,OAAO,OAAO,MAAA,CAAO;AAAA,IACnB,QAAA,EAAU;AAAA,MACR,cAAA,CAAe,QAAA,EAAU,QAAA,CAAS,MAAM,CAAA;AAAA,MACxC,cAAA,CAAe,MAAA,EAAQ,QAAA,CAAS,IAAI,CAAA;AAAA,MACpC,cAAA,CAAe,UAAA,EAAY,QAAA,CAAS,QAAQ,CAAA;AAAA,MAC5C,cAAA,CAAe,qBAAA,EAAuB,QAAA,CAAS,mBAAmB,CAAA;AAAA,MAClE,cAAA,CAAe,OAAA,EAAS,QAAA,CAAS,KAAK,CAAA;AAAA,MACtC,cAAA,CAAe,WAAA,EAAa,QAAA,CAAS,SAAS,CAAA;AAAA,MAC9C,cAAA,CAAe,QAAA,EAAU,QAAA,CAAS,MAAM,CAAA;AAAA,MACxC,cAAA,CAAe,QAAA,EAAU,QAAA,CAAS,MAAM,CAAA;AAAA,MACxC,cAAA,CAAe,YAAA,EAAc,QAAA,CAAS,UAAU,CAAA;AAAA,MAChD,cAAA,CAAe,YAAA,EAAc,QAAA,CAAS,UAAU,CAAA;AAAA,MAChD,cAAA,CAAe,OAAA,EAAS,QAAA,CAAS,KAAK,CAAA;AAAA,MACtC,cAAA,CAAe,OAAA,EAAS,QAAA,CAAS,KAAK,CAAA;AAAA,MACtC,cAAA,CAAe,eAAA,EAAiB,QAAA,CAAS,aAAa,CAAA;AAAA,MACtD,cAAA,CAAe,eAAA,EAAiB,QAAA,CAAS,aAAa,CAAA;AAAA,MACtD,cAAA,CAAe,QAAA,EAAU,QAAA,CAAS,MAAM;AAAA,KAC1C;AAAA,IACA,IAAA,EAAM,uCAAsC,CAAE,MAAA;AAAA,MAC5C;AAAA,KACF;AAAA,IACA;AAAA,GAkBD,CAAA;AACH;AA2BO,SAAS,6BAId,WAAA,EAGwD;AACxD,EAAA,IAAI,WAAA,CAAY,QAAA,CAAS,MAAA,GAAS,EAAA,EAAI;AACpC,IAAA,MAAM,IAAIC,WAAAA;AAAA,MACRC,yDAAAA;AAAA,MACA;AAAA,QACE,kBAAA,EAAoB,YAAY,QAAA,CAAS,MAAA;AAAA,QACzC,oBAAA,EAAsB;AAAA;AACxB,KACF;AAAA,EACF;AACA,EAAA,IAAI,YAAA,GAAe,CAAA;AACnB,EAAA,MAAM,iBAAiB,MAAM;AAC3B,IAAA,MAAM,WAAA,GAAe,WAAA,CAAY,QAAA,CAA2B,YAAY,CAAA;AACxE,IAAA,YAAA,IAAgB,CAAA;AAChB,IAAA,OAAO,WAAA;AAAA,EACT,CAAA;AACA,EAAA,MAAM,yBAAyB,MAAM;AACnC,IAAA,MAAM,cAAc,cAAA,EAAe;AACnC,IAAA,OAAO,WAAA,CAAY,OAAA,KAAY,oBAAA,GAC3B,MAAA,GACA,WAAA;AAAA,EACN,CAAA;AACA,EAAA,OAAO;AAAA,IACL,gBAAgB,WAAA,CAAY,cAAA;AAAA,IAC5B,QAAA,EAAU;AAAA,MACR,QAAQ,cAAA,EAAe;AAAA,MACvB,MAAM,cAAA,EAAe;AAAA,MACrB,UAAU,cAAA,EAAe;AAAA,MACzB,qBAAqB,cAAA,EAAe;AAAA,MACpC,OAAO,cAAA,EAAe;AAAA,MACtB,WAAW,cAAA,EAAe;AAAA,MAC1B,QAAQ,cAAA,EAAe;AAAA,MACvB,QAAQ,cAAA,EAAe;AAAA,MACvB,YAAY,cAAA,EAAe;AAAA,MAC3B,YAAY,cAAA,EAAe;AAAA,MAC3B,OAAO,cAAA,EAAe;AAAA,MACtB,OAAO,cAAA,EAAe;AAAA,MACtB,eAAe,cAAA,EAAe;AAAA,MAC9B,eAAe,cAAA,EAAe;AAAA,MAC9B,QAAQ,sBAAA;AAAuB,KACjC;AAAA,IACA,IAAA,EAAM,qCAAA,EAAsC,CAAE,MAAA,CAAO,YAAY,IAAI;AAAA,GACvE;AACF;;;AC/kBA,SAAS,cAAc,KAAA,EAA2B;AAChD,EAAA,IAAI,MAAA,GAAS,EAAA;AACb,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,KAAA,CAAM,QAAQ,CAAA,EAAA,EAAK;AACrC,IAAA,MAAA,IAAU,MAAA,CAAO,YAAA,CAAa,KAAA,CAAM,CAAC,CAAC,CAAA;AAAA,EACxC;AACA,EAAA,OAAO,KAAK,MAAM,CAAA;AACpB;AAEA,SAAS,cAAc,MAAA,EAA4B;AACjD,EAAA,MAAM,MAAA,GAAS,KAAK,MAAM,CAAA;AAC1B,EAAA,MAAM,KAAA,GAAQ,IAAI,UAAA,CAAW,MAAA,CAAO,MAAM,CAAA;AAC1C,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,MAAA,CAAO,QAAQ,CAAA,EAAA,EAAK;AACtC,IAAA,KAAA,CAAM,CAAC,CAAA,GAAI,MAAA,CAAO,UAAA,CAAW,CAAC,CAAA;AAAA,EAChC;AACA,EAAA,OAAO,KAAA;AACT;AAyCA,eAAsB,SAAA,CACpB,GAAA,EACA,OAAA,EACA,MAAA,EACsB;AACtB,EAAA,MAAM,QAAA,GAAW,MAAM,GAAA,CACpB,cAAA,CAAe,OAAA,EAAS;AAAA,IACvB,QAAA,EAAU,QAAA;AAAA,IACV,YAAY,MAAA,EAAQ;AAAA,GACrB,EACA,IAAA,EAAK;AAER,EAAA,IAAI,CAAC,SAAS,KAAA,EAAO;AACnB,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,OAAO,WAAW,aAAA,CAAc,QAAA,CAAS,MAAM,IAAA,CAAK,CAAC,CAAC,CAAC,CAAA;AACzD;AAoBA,eAAsB,aAAA,CACpB,KACA,MAAA,EAC4B;AAC5B,EAAA,MAAM,SAAA,GAAY,QAAQ,SAAA,IAAa,eAAA;AAGvC,EAAA,MAAM,mBAAA,GAAsB;AAAA,IAC1B,MAAA,EAAQ;AAAA,MACN,MAAA,EAAQ,EAAA;AAAA,MACR,KAAA,EAAO,aAAA,CAAc,sBAAA,CAAuB,IAAI,CAAA;AAAA,MAChD,QAAA,EAAU;AAAA;AACZ,GACF;AAEA,EAAA,MAAM,QAAA,GAAY,MAAM,GAAA,CACrB,kBAAA,CAAmB,SAAA,EAAW;AAAA,IAC7B,QAAA,EAAU,QAAA;AAAA,IACV,YAAY,MAAA,EAAQ,UAAA;AAAA,IACpB,OAAA,EAAS,CAAC,mBAAmB;AAAA,GAC9B,EACA,IAAA,EAAK;AAER,EAAA,MAAM,WACJ,KAAA,CAAM,OAAA,CAAQ,QAAQ,CAAA,GAClB,WACC,QAAA,CAAyC,KAAA;AAGhD,EAAA,MAAM,QAA2B,EAAC;AAElC,EAAA,KAAA,MAAW,WAAW,QAAA,EAAU;AAC9B,IAAA,IAAI;AACF,MAAA,MAAM,IAAA,GAAO,WAAW,aAAA,CAAc,OAAA,CAAQ,QAAQ,IAAA,CAAK,CAAC,CAAC,CAAC,CAAA;AAC9D,MAAA,KAAA,CAAM,IAAA,CAAK;AAAA,QACT,SAAS,OAAA,CAAQ,MAAA;AAAA,QACjB,OAAA,EAAS;AAAA,OACV,CAAA;AAAA,IACH,CAAA,CAAA,MAAQ;AAEN,MAAA,OAAA,CAAQ,IAAA,CAAK,CAAA,+BAAA,EAAkC,OAAA,CAAQ,MAAM,CAAA,CAAE,CAAA;AAAA,IACjE;AAAA,EACF;AAEA,EAAA,OAAO,KAAA;AACT;AAsBA,eAAsB,cAAA,CACpB,GAAA,EACA,KAAA,EACA,KAAA,EACA,MAAA,EACiC;AACjC,EAAA,MAAM,SAAA,GAAY,QAAQ,SAAA,IAAa,eAAA;AAGvC,EAAA,MAAM,CAAC,WAAW,CAAA,GAAI,MAAM,cAAA,CAAe,KAAA,EAAO,OAAO,SAAS,CAAA;AAElE,EAAA,MAAM,IAAA,GAAO,MAAM,SAAA,CAAU,GAAA,EAAK,aAAa,MAAM,CAAA;AAErD,EAAA,IAAI,CAAC,IAAA,EAAM;AACT,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,OAAO;AAAA,IACL,OAAA,EAAS,WAAA;AAAA,IACT,OAAA,EAAS;AAAA,GACX;AACF;AAkBA,eAAsB,eAAA,CACpB,GAAA,EACA,SAAA,EACA,MAAA,EAC6B;AAC7B,EAAA,MAAM,KAAA,uBAAY,GAAA,EAAmB;AAGrC,EAAA,MAAM,OAAA,GAAU,MAAM,OAAA,CAAQ,GAAA;AAAA,IAC5B,SAAA,CAAU,IAAI,CAAC,IAAA,KAAS,UAAU,GAAA,EAAK,IAAA,EAAM,MAAM,CAAC;AAAA,GACtD;AAEA,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,SAAA,CAAU,QAAQ,CAAA,EAAA,EAAK;AACzC,IAAA,MAAM,IAAA,GAAO,QAAQ,CAAC,CAAA;AACtB,IAAA,IAAI,IAAA,EAAM;AACR,MAAA,KAAA,CAAM,GAAA,CAAI,SAAA,CAAU,CAAC,CAAA,EAAG,IAAI,CAAA;AAAA,IAC9B;AAAA,EACF;AAEA,EAAA,OAAO,KAAA;AACT;AAWA,eAAsB,UAAA,CACpB,GAAA,EACA,KAAA,EACA,KAAA,EACA,MAAA,EACkB;AAClB,EAAA,MAAM,SAAS,MAAM,cAAA,CAAe,GAAA,EAAK,KAAA,EAAO,OAAO,MAAM,CAAA;AAC7D,EAAA,OAAO,MAAA,KAAW,IAAA;AACpB;AAUA,eAAsB,uBAAA,CACpB,KAAA,EACA,KAAA,EACA,SAAA,GAAqB,eAAA,EAKpB;AACD,EAAA,MAAM,CAAC,MAAA,EAAQ,MAAM,CAAA,GAAI,SAAA,CAAU,OAAO,KAAK,CAAA;AAC/C,EAAA,MAAM,CAAC,WAAW,CAAA,GAAI,MAAM,cAAA,CAAe,KAAA,EAAO,OAAO,SAAS,CAAA;AAElE,EAAA,OAAO;AAAA,IACL,WAAA;AAAA,IACA,MAAA;AAAA,IACA;AAAA,GACF;AACF;AASO,SAAS,iBAAA,CACd,OACA,IAAA,EACmB;AACnB,EAAA,OAAO,KAAA,CAAM,MAAA;AAAA,IACX,CAAC,EAAE,OAAA,EAAQ,KAAM,QAAQ,UAAA,KAAe,IAAA,IAAQ,QAAQ,UAAA,KAAe;AAAA,GACzE;AACF;AASO,SAAS,mBAAA,CACd,KAAA,EACA,UAAA,GAAa,IAAA,EACM;AACnB,EAAA,OAAO,CAAC,GAAG,KAAK,EAAE,IAAA,CAAK,CAAC,GAAG,CAAA,KAAM;AAC/B,IAAA,MAAM,MAAA,GAAS,CAAA,CAAE,OAAA,CAAQ,QAAA,GAAW,EAAE,OAAA,CAAQ,QAAA;AAC9C,IAAA,MAAM,MAAA,GAAS,CAAA,CAAE,OAAA,CAAQ,QAAA,GAAW,EAAE,OAAA,CAAQ,QAAA;AAC9C,IAAA,MAAM,MAAM,MAAA,GAAS,MAAA,GAAS,EAAA,GAAK,MAAA,GAAS,SAAS,CAAA,GAAI,CAAA;AACzD,IAAA,OAAO,UAAA,GAAa,CAAC,GAAA,GAAM,GAAA;AAAA,EAC7B,CAAC,CAAA;AACH;;;AC3SA,SAASgB,eAAc,KAAA,EAA2B;AAChD,EAAA,IAAI,MAAA,GAAS,EAAA;AACb,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,KAAA,CAAM,QAAQ,CAAA,EAAA,EAAK;AACrC,IAAA,MAAA,IAAU,MAAA,CAAO,YAAA,CAAa,KAAA,CAAM,CAAC,CAAC,CAAA;AAAA,EACxC;AACA,EAAA,OAAO,KAAK,MAAM,CAAA;AACpB;AAEA,SAASC,eAAc,MAAA,EAA4B;AACjD,EAAA,MAAM,MAAA,GAAS,KAAK,MAAM,CAAA;AAC1B,EAAA,MAAM,KAAA,GAAQ,IAAI,UAAA,CAAW,MAAA,CAAO,MAAM,CAAA;AAC1C,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,MAAA,CAAO,QAAQ,CAAA,EAAA,EAAK;AACtC,IAAA,KAAA,CAAM,CAAC,CAAA,GAAI,MAAA,CAAO,UAAA,CAAW,CAAC,CAAA;AAAA,EAChC;AACA,EAAA,OAAO,KAAA;AACT;AA6DA,eAAsB,aAAA,CACpB,GAAA,EACA,OAAA,EACA,MAAA,EAC0B;AAC1B,EAAA,MAAM,QAAA,GAAW,MAAM,GAAA,CACpB,cAAA,CAAe,OAAA,EAAS;AAAA,IACvB,QAAA,EAAU,QAAA;AAAA,IACV,YAAY,MAAA,EAAQ;AAAA,GACrB,EACA,IAAA,EAAK;AAER,EAAA,IAAI,CAAC,SAAS,KAAA,EAAO;AACnB,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,OAAO,eAAeA,cAAAA,CAAc,QAAA,CAAS,MAAM,IAAA,CAAK,CAAC,CAAC,CAAC,CAAA;AAC7D;AAoBA,eAAsB,kBAAA,CACpB,GAAA,EACA,KAAA,EACA,IAAA,EACA,MAAA,EACgC;AAChC,EAAA,MAAM,SAAA,GAAY,QAAQ,SAAA,IAAa,eAAA;AAGvC,EAAA,MAAM,OAAA,GAAU;AAAA;AAAA,IAEd;AAAA,MACE,MAAA,EAAQ;AAAA,QACN,MAAA,EAAQ,EAAA;AAAA,QACR,KAAA,EAAOD,cAAAA;AAAA,UACL,sBAAA,CAAuB;AAAA,SACzB;AAAA,QACA,QAAA,EAAU;AAAA;AACZ,KACF;AAAA;AAAA,IAEA;AAAA,MACE,MAAA,EAAQ;AAAA,QACN,MAAA,EAAQ,GAAA;AAAA,QACR,KAAA,EAAO,KAAA;AAAA,QACP,QAAA,EAAU;AAAA;AACZ;AACF,GACF;AAGA,EAAA,IAAI,IAAA,EAAM;AACR,IAAA,OAAA,CAAQ,IAAA,CAAK;AAAA,MACX,MAAA,EAAQ;AAAA,QACN,MAAA,EAAQ,EAAA;AAAA,QACR,KAAA,EAAO,IAAA;AAAA,QACP,QAAA,EAAU;AAAA;AACZ,KACD,CAAA;AAAA,EACH;AAEA,EAAA,MAAM,QAAA,GAAY,MAAM,GAAA,CACrB,kBAAA,CAAmB,SAAA,EAAW;AAAA,IAC7B,QAAA,EAAU,QAAA;AAAA,IACV,YAAY,MAAA,EAAQ,UAAA;AAAA,IACpB;AAAA,GACD,EACA,IAAA,EAAK;AAER,EAAA,MAAM,WACJ,KAAA,CAAM,OAAA,CAAQ,QAAQ,CAAA,GAClB,WACC,QAAA,CAAyC,KAAA;AAGhD,EAAA,MAAM,YAAmC,EAAC;AAE1C,EAAA,KAAA,MAAW,WAAW,QAAA,EAAU;AAC9B,IAAA,IAAI;AACF,MAAA,MAAM,QAAA,GAAW,eAAeC,cAAAA,CAAc,OAAA,CAAQ,QAAQ,IAAA,CAAK,CAAC,CAAC,CAAC,CAAA;AACtE,MAAA,SAAA,CAAU,IAAA,CAAK;AAAA,QACb,SAAS,OAAA,CAAQ,MAAA;AAAA,QACjB,OAAA,EAAS;AAAA,OACV,CAAA;AAAA,IACH,CAAA,CAAA,MAAQ;AACN,MAAA,OAAA,CAAQ,IAAA,CAAK,CAAA,mCAAA,EAAsC,OAAA,CAAQ,MAAM,CAAA,CAAE,CAAA;AAAA,IACrE;AAAA,EACF;AAEA,EAAA,OAAO,SAAA;AACT;AAUA,eAAsB,kBAAA,CACpB,GAAA,EACA,IAAA,EACA,MAAA,EACgC;AAChC,EAAA,MAAM,SAAA,GAAY,QAAQ,SAAA,IAAa,eAAA;AAEvC,EAAA,MAAM,OAAA,GAAU;AAAA;AAAA,IAEd;AAAA,MACE,MAAA,EAAQ;AAAA,QACN,MAAA,EAAQ,EAAA;AAAA,QACR,KAAA,EAAOD,cAAAA;AAAA,UACL,sBAAA,CAAuB;AAAA,SACzB;AAAA,QACA,QAAA,EAAU;AAAA;AACZ,KACF;AAAA;AAAA,IAEA;AAAA,MACE,MAAA,EAAQ;AAAA,QACN,MAAA,EAAQ,EAAA;AAAA,QACR,KAAA,EAAO,IAAA;AAAA,QACP,QAAA,EAAU;AAAA;AACZ;AACF,GACF;AAEA,EAAA,MAAM,QAAA,GAAY,MAAM,GAAA,CACrB,kBAAA,CAAmB,SAAA,EAAW;AAAA,IAC7B,QAAA,EAAU,QAAA;AAAA,IACV,YAAY,MAAA,EAAQ,UAAA;AAAA,IACpB;AAAA,GACD,EACA,IAAA,EAAK;AAER,EAAA,MAAM,WACJ,KAAA,CAAM,OAAA,CAAQ,QAAQ,CAAA,GAClB,WACC,QAAA,CAAyC,KAAA;AAGhD,EAAA,MAAM,YAAmC,EAAC;AAE1C,EAAA,KAAA,MAAW,WAAW,QAAA,EAAU;AAC9B,IAAA,IAAI;AACF,MAAA,MAAM,QAAA,GAAW,eAAeC,cAAAA,CAAc,OAAA,CAAQ,QAAQ,IAAA,CAAK,CAAC,CAAC,CAAC,CAAA;AACtE,MAAA,SAAA,CAAU,IAAA,CAAK;AAAA,QACb,SAAS,OAAA,CAAQ,MAAA;AAAA,QACjB,OAAA,EAAS;AAAA,OACV,CAAA;AAAA,IACH,CAAA,CAAA,MAAQ;AACN,MAAA,OAAA,CAAQ,IAAA,CAAK,CAAA,mCAAA,EAAsC,OAAA,CAAQ,MAAM,CAAA,CAAE,CAAA;AAAA,IACrE;AAAA,EACF;AAEA,EAAA,OAAO,SAAA;AACT;AAqBO,SAAS,gBAAA,CACd,MACA,QAAA,EACe;AACf,EAAA,IAAI,IAAA,CAAK,gBAAgB,EAAA,EAAI;AAC3B,IAAA,OAAO;AAAA,MACL,OAAA,EAAS,EAAA;AAAA,MACT,OAAA,EAAS,EAAA;AAAA,MACT,YAAA,EAAc,EAAA;AAAA,MACd,YAAA,EAAc,EAAA;AAAA,MACd,WAAA,EAAa,EAAA;AAAA,MACb,WAAA,EAAa,EAAA;AAAA,MACb,SAAA,EAAW;AAAA,KACb;AAAA,EACF;AAGA,EAAA,MAAM,OAAA,GAAW,QAAA,CAAS,MAAA,GAAS,IAAA,CAAK,WAAY,IAAA,CAAK,WAAA;AACzD,EAAA,MAAM,OAAA,GAAW,QAAA,CAAS,MAAA,GAAS,IAAA,CAAK,WAAY,IAAA,CAAK,WAAA;AAGzD,EAAA,MAAM,EAAE,QAAA,EAAU,QAAA,EAAS,GAAI,cAAA,CAAe,MAAM,QAAQ,CAAA;AAG5D,EAAA,MAAM,SAAA,GAAY,aAAA,CAAc,QAAA,CAAS,MAAA,EAAQ,KAAK,WAAW,CAAA;AAEjE,EAAA,OAAO;AAAA,IACL,OAAA;AAAA,IACA,OAAA;AAAA,IACA,YAAA,EAAc,QAAA;AAAA,IACd,YAAA,EAAc,QAAA;AAAA,IACd,aAAa,OAAA,GAAU,QAAA;AAAA,IACvB,aAAa,OAAA,GAAU,QAAA;AAAA,IACvB;AAAA,GACF;AACF;AAYA,eAAsB,qBAAA,CACpB,GAAA,EACA,IAAA,EACA,KAAA,EACA,YACA,MAAA,EACqC;AACrC,EAAA,MAAM,SAAA,GAAY,QAAQ,SAAA,IAAa,eAAA;AACvC,EAAA,MAAM,CAAC,OAAO,CAAA,GAAI,MAAM,kBAAA;AAAA,IACtB,IAAA;AAAA,IACA,KAAA;AAAA,IACA,UAAA;AAAA,IACA;AAAA,GACF;AAEA,EAAA,MAAM,QAAA,GAAW,MAAM,aAAA,CAAc,GAAA,EAAK,SAAS,MAAM,CAAA;AAEzD,EAAA,IAAI,CAAC,QAAA,EAAU;AACb,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,OAAO;AAAA,IACL,OAAA;AAAA,IACA,OAAA,EAAS;AAAA,GACX;AACF;AAWA,eAAsB,4BAAA,CACpB,IAAA,EACA,KAAA,EACA,UAAA,EACA,YAAqB,eAAA,EACH;AAClB,EAAA,MAAM,CAAC,OAAO,CAAA,GAAI,MAAM,kBAAA;AAAA,IACtB,IAAA;AAAA,IACA,KAAA;AAAA,IACA,UAAA;AAAA,IACA;AAAA,GACF;AACA,EAAA,OAAO,OAAA;AACT;AAUA,eAAsB,mBAAA,CACpB,GAAA,EACA,SAAA,EACA,MAAA,EACiC;AACjC,EAAA,MAAM,SAAA,uBAAgB,GAAA,EAAuB;AAE7C,EAAA,MAAM,OAAA,GAAU,MAAM,OAAA,CAAQ,GAAA;AAAA,IAC5B,SAAA,CAAU,IAAI,CAAC,IAAA,KAAS,cAAc,GAAA,EAAK,IAAA,EAAM,MAAM,CAAC;AAAA,GAC1D;AAEA,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,SAAA,CAAU,QAAQ,CAAA,EAAA,EAAK;AACzC,IAAA,MAAM,QAAA,GAAW,QAAQ,CAAC,CAAA;AAC1B,IAAA,IAAI,QAAA,EAAU;AACZ,MAAA,SAAA,CAAU,GAAA,CAAI,SAAA,CAAU,CAAC,CAAA,EAAG,QAAQ,CAAA;AAAA,IACtC;AAAA,EACF;AAEA,EAAA,OAAO,SAAA;AACT;AAQO,SAAS,sBACd,SAAA,EACuB;AACvB,EAAA,OAAO,SAAA,CAAU,OAAO,CAAC,EAAE,SAAQ,KAAM,OAAA,CAAQ,SAAS,EAAE,CAAA;AAC9D;AASO,SAAS,qBAAA,CACd,SAAA,EACA,UAAA,GAAa,IAAA,EACU;AACvB,EAAA,OAAO,CAAC,GAAG,SAAS,EAAE,IAAA,CAAK,CAAC,GAAG,CAAA,KAAM;AACnC,IAAA,MAAM,GAAA,GACJ,CAAA,CAAE,OAAA,CAAQ,MAAA,GAAS,EAAE,OAAA,CAAQ,MAAA,GACzB,EAAA,GACA,CAAA,CAAE,OAAA,CAAQ,MAAA,GAAS,CAAA,CAAE,OAAA,CAAQ,SAC3B,CAAA,GACA,CAAA;AACR,IAAA,OAAO,UAAA,GAAa,CAAC,GAAA,GAAM,GAAA;AAAA,EAC7B,CAAC,CAAA;AACH;;;AChbA,SAASA,eAAc,MAAA,EAA4B;AACjD,EAAA,MAAM,MAAA,GAAS,KAAK,MAAM,CAAA;AAC1B,EAAA,MAAM,KAAA,GAAQ,IAAI,UAAA,CAAW,MAAA,CAAO,MAAM,CAAA;AAC1C,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,MAAA,CAAO,QAAQ,CAAA,EAAA,EAAK;AACtC,IAAA,KAAA,CAAM,CAAC,CAAA,GAAI,MAAA,CAAO,UAAA,CAAW,CAAC,CAAA;AAAA,EAChC;AACA,EAAA,OAAO,KAAA;AACT;AAqCA,eAAsB,WAAA,CACpB,GAAA,EACA,OAAA,EACA,MAAA,EAC6B;AAC7B,EAAA,MAAM,QAAA,GAAW,MAAM,GAAA,CACpB,cAAA,CAAe,OAAA,EAAS;AAAA,IACvB,QAAA,EAAU,QAAA;AAAA,IACV,YAAY,MAAA,EAAQ;AAAA,GACrB,EACA,IAAA,EAAK;AAER,EAAA,IAAI,CAAC,SAAS,KAAA,EAAO;AACnB,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,OAAO,kBAAkBA,cAAAA,CAAc,QAAA,CAAS,MAAM,IAAA,CAAK,CAAC,CAAC,CAAC,CAAA;AAChE;AAsBA,eAAsB,gBAAA,CACpB,GAAA,EACA,IAAA,EACA,MAAA,EACmC;AACnC,EAAA,MAAM,SAAA,GAAY,QAAQ,SAAA,IAAa,eAAA;AACvC,EAAA,MAAM,CAAC,aAAa,CAAA,GAAI,MAAM,gBAAA,CAAiB,MAAM,SAAS,CAAA;AAE9D,EAAA,MAAM,MAAA,GAAS,MAAM,WAAA,CAAY,GAAA,EAAK,eAAe,MAAM,CAAA;AAE3D,EAAA,IAAI,CAAC,MAAA,EAAQ;AACX,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,OAAO;AAAA,IACL,OAAA,EAAS,aAAA;AAAA,IACT,OAAA,EAAS;AAAA,GACX;AACF;AASA,eAAsB,wBAAA,CACpB,IAAA,EACA,SAAA,GAAqB,eAAA,EACH;AAClB,EAAA,MAAM,CAAC,OAAO,CAAA,GAAI,MAAM,gBAAA,CAAiB,MAAM,SAAS,CAAA;AACxD,EAAA,OAAO,OAAA;AACT;AA0BO,SAAS,WAAA,CACd,MAAA,EACA,aAAA,EACA,gBAAA,EACmB;AACnB,EAAA,IAAI,CAAC,MAAA,CAAO,WAAA,IAAe,MAAA,CAAO,kBAAkB,CAAA,EAAG;AACrD,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,IAAA,CAAK,KAAA,CAAM,gBAAA,IAAoB,IAAA,CAAK,GAAA,EAAI,GAAI,GAAI,CAAC,CAAA;AAC3E,EAAA,MAAM,cAAc,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,KAAA,GAAQ,OAAO,aAAa,CAAA;AAE5D,EAAA,MAAM,UACJ,MAAA,CAAO,gBAAA,GAAmB,MAAA,CAAO,cAAA,GAAiB,OAAO,WAAW,CAAA;AACtE,EAAA,MAAM,UACJ,MAAA,CAAO,gBAAA,GAAmB,MAAA,CAAO,cAAA,GAAiB,OAAO,WAAW,CAAA;AAEtE,EAAA,IAAI,kBAAkB,CAAA,EAAG;AACvB,IAAA,OAAO;AAAA,MACL,WAAW,MAAA,CAAO,cAAA;AAAA,MAClB,WAAW,MAAA,CAAO,cAAA;AAAA,MAClB,MAAA,EAAQ,WAAA,CAAY,MAAA,CAAO,cAAc,CAAA;AAAA,MACzC,MAAA,EAAQ,WAAA,CAAY,MAAA,CAAO,cAAc;AAAA,KAC3C;AAAA,EACF;AAEA,EAAA,MAAM,QAAA,GAAW,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,QAAQ,aAAa,CAAA;AAClD,EAAA,MAAM,MAAA,GAAS,YAAA,CAAa,MAAA,EAAQ,QAAQ,CAAA;AAC5C,EAAA,IAAI,CAAC,MAAA,EAAQ;AACX,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,MAAM,KAAK,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,KAAA,GAAQ,OAAO,SAAS,CAAA;AAC/C,EAAA,IAAI,OAAO,CAAA,EAAG;AACZ,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,MAAM,SAAA,GAAA,CAAa,OAAA,GAAU,MAAA,CAAO,gBAAA,IAAoB,OAAO,EAAE,CAAA;AACjE,EAAA,MAAM,SAAA,GAAA,CAAa,OAAA,GAAU,MAAA,CAAO,gBAAA,IAAoB,OAAO,EAAE,CAAA;AAEjE,EAAA,OAAO;AAAA,IACL,SAAA;AAAA,IACA,SAAA;AAAA,IACA,MAAA,EAAQ,YAAY,SAAS,CAAA;AAAA,IAC7B,MAAA,EAAQ,YAAY,SAAS;AAAA,GAC/B;AACF;AAEA,SAAS,YAAA,CACP,QACA,eAAA,EAC4C;AAC5C,EAAA,IAAI,IAAA,GAAmD,IAAA;AACvD,EAAA,MAAM,IAAA,GAAO;AAAA,IACX,WAAW,MAAA,CAAO,aAAA;AAAA,IAClB,kBAAkB,MAAA,CAAO,gBAAA;AAAA,IACzB,kBAAkB,MAAA,CAAO;AAAA,GAC3B;AAEA,EAAA,IAAI,IAAA,CAAK,SAAA,KAAc,CAAA,IAAK,IAAA,CAAK,aAAa,eAAA,EAAiB;AAC7D,IAAA,IAAA,GAAO,IAAA;AAAA,EACT;AAEA,EAAA,KAAA,MAAW,GAAA,IAAO,OAAO,YAAA,EAAc;AACrC,IAAA,IAAI,GAAA,CAAI,cAAc,CAAA,EAAG;AACvB,MAAA;AAAA,IACF;AACA,IAAA,IAAI,GAAA,CAAI,aAAa,eAAA,EAAiB;AACpC,MAAA,IAAI,CAAC,IAAA,IAAQ,GAAA,CAAI,SAAA,GAAY,KAAK,SAAA,EAAW;AAC3C,QAAA,IAAA,GAAO,GAAA;AAAA,MACT;AAAA,IACF;AAAA,EACF;AAEA,EAAA,IAAI,IAAA,EAAM;AACR,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,IAAI,MAAA,GACF,IAAA,CAAK,SAAA,KAAc,CAAA,GAAI,IAAA,GAAO,IAAA;AAChC,EAAA,KAAA,MAAW,GAAA,IAAO,OAAO,YAAA,EAAc;AACrC,IAAA,IAAI,GAAA,CAAI,cAAc,CAAA,EAAG;AACvB,MAAA;AAAA,IACF;AACA,IAAA,IAAI,CAAC,MAAA,IAAU,GAAA,CAAI,SAAA,GAAY,OAAO,SAAA,EAAW;AAC/C,MAAA,MAAA,GAAS,GAAA;AAAA,IACX;AAAA,EACF;AAEA,EAAA,OAAO,MAAA;AACT;AAUO,SAAS,oBAAoB,MAAA,EAKlC;AACA,EAAA,OAAO;AAAA,IACL,WAAW,MAAA,CAAO,cAAA;AAAA,IAClB,WAAW,MAAA,CAAO,cAAA;AAAA,IAClB,MAAA,EAAQ,WAAA,CAAY,MAAA,CAAO,cAAc,CAAA;AAAA,IACzC,MAAA,EAAQ,WAAA,CAAY,MAAA,CAAO,cAAc;AAAA,GAC3C;AACF;AAWO,SAAS,mBAAmB,MAAA,EAKjC;AACA,EAAA,OAAO;AAAA,IACL,eAAe,MAAA,CAAO,aAAA;AAAA,IACtB,eAAe,MAAA,CAAO,aAAA;AAAA,IACtB,UAAA,EAAY,WAAA,CAAY,MAAA,CAAO,aAAa,CAAA;AAAA,IAC5C,UAAA,EAAY,WAAA,CAAY,MAAA,CAAO,aAAa;AAAA,GAC9C;AACF;AASO,SAAS,YAAA,CACd,QACA,gBAAA,EACQ;AACR,EAAA,MAAM,MAAM,gBAAA,IAAoB,IAAA,CAAK,MAAM,IAAA,CAAK,GAAA,KAAQ,GAAI,CAAA;AAC5D,EAAA,OAAO,MAAM,MAAA,CAAO,aAAA;AACtB;AAUO,SAAS,aAAA,CACd,MAAA,EACA,aAAA,EACA,gBAAA,EACS;AACT,EAAA,OAAO,YAAA,CAAa,MAAA,EAAQ,gBAAgB,CAAA,GAAI,aAAA;AAClD;AAQO,SAAS,qBAAqB,MAAA,EAanC;AACA,EAAA,MAAM,eAAe,MAAA,CAAO,YAAA;AAC5B,EAAA,MAAM,WAAW,YAAA,CAAa,MAAA;AAC9B,EAAA,MAAM,eAAe,MAAA,CAAO,gBAAA;AAE5B,EAAA,IAAI,WAAA,GAAc,CAAA;AAClB,EAAA,IAAI,eAAA,GAAkB,CAAA;AACtB,EAAA,IAAI,eAAA,GAAkB,CAAA;AAEtB,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,QAAA,EAAU,CAAA,EAAA,EAAK;AACjC,IAAA,MAAM,GAAA,GAAM,aAAa,CAAC,CAAA;AAC1B,IAAA,IAAI,GAAA,CAAI,YAAY,CAAA,EAAG;AACrB,MAAA,WAAA,EAAA;AACA,MAAA,IAAI,eAAA,KAAoB,CAAA,IAAK,GAAA,CAAI,SAAA,GAAY,eAAA,EAAiB;AAC5D,QAAA,eAAA,GAAkB,GAAA,CAAI,SAAA;AAAA,MACxB;AACA,MAAA,IAAI,GAAA,CAAI,YAAY,eAAA,EAAiB;AACnC,QAAA,eAAA,GAAkB,GAAA,CAAI,SAAA;AAAA,MACxB;AAAA,IACF;AAAA,EACF;AAEA,EAAA,OAAO;AAAA,IACL,QAAA;AAAA,IACA,WAAA;AAAA,IACA,YAAA;AAAA,IACA,eAAA;AAAA,IACA,eAAA;AAAA,IACA,eAAA,EACE,eAAA,GAAkB,eAAA,GAAkB,eAAA,GAAkB,eAAA,GAAkB;AAAA,GAC5E;AACF;AAUA,eAAsB,iBAAA,CACpB,GAAA,EACA,KAAA,EACA,MAAA,EAC0C;AAC1C,EAAA,MAAM,SAAA,GAAY,QAAQ,SAAA,IAAa,eAAA;AACvC,EAAA,MAAM,OAAA,uBAAc,GAAA,EAAgC;AAGpD,EAAA,MAAM,eAAA,GAAkB,MAAM,OAAA,CAAQ,GAAA;AAAA,IACpC,MAAM,GAAA,CAAI,CAAC,SAAS,gBAAA,CAAiB,IAAA,EAAM,SAAS,CAAC;AAAA,GACvD;AAGA,EAAA,MAAM,OAAA,GAAU,MAAM,OAAA,CAAQ,GAAA;AAAA,IAC5B,eAAA,CAAgB,GAAA,CAAI,CAAC,CAAC,IAAI,MAAM,WAAA,CAAY,GAAA,EAAK,IAAA,EAAM,MAAM,CAAC;AAAA,GAChE;AAEA,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,KAAA,CAAM,QAAQ,CAAA,EAAA,EAAK;AACrC,IAAA,MAAM,MAAA,GAAS,QAAQ,CAAC,CAAA;AACxB,IAAA,IAAI,MAAA,EAAQ;AACV,MAAA,OAAA,CAAQ,GAAA,CAAI,KAAA,CAAM,CAAC,CAAA,EAAG;AAAA,QACpB,OAAA,EAAS,eAAA,CAAgB,CAAC,CAAA,CAAE,CAAC,CAAA;AAAA,QAC7B,OAAA,EAAS;AAAA,OACV,CAAA;AAAA,IACH;AAAA,EACF;AAEA,EAAA,OAAO,OAAA;AACT;AAWO,SAAS,0BAAA,CACd,MACA,MAAA,EAQA;AACA,EAAA,MAAM,UAAA,GACJ,IAAA,CAAK,QAAA,GAAW,EAAA,GAAK,MAAA,CAAO,IAAA,CAAK,QAAQ,CAAA,GAAI,MAAA,CAAO,IAAA,CAAK,QAAQ,CAAA,GAAI,CAAA;AAEvE,EAAA,MAAM,YAAA,GAAe,WAAA,CAAY,MAAA,CAAO,cAAc,CAAA;AAEtD,EAAA,MAAM,gBACJ,YAAA,GAAe,CAAA,GAAA,CAAM,UAAA,GAAa,YAAA,IAAgB,eAAgB,GAAA,GAAM,CAAA;AAE1E,EAAA,OAAO;AAAA,IACL,UAAA;AAAA,IACA,YAAA;AAAA,IACA;AAAA,GACF;AACF","file":"chunk-BESE77DM.js","sourcesContent":["/**\n * Borsh serialization/deserialization for CPMM accounts and instructions\n *\n * This module provides encoding/decoding utilities for program accounts\n * and instruction data using Borsh-compatible binary formats.\n */\n\nimport { getAddressCodec } from '@solana/kit';\nimport type { ReadonlyUint8Array } from '@solana/kit';\nimport {\n fixCodecSize,\n getArrayCodec,\n getBooleanCodec,\n getBytesCodec,\n getConstantDecoder,\n getHiddenPrefixDecoder,\n getStructCodec,\n getU8Codec,\n getU16Codec,\n getU32Codec,\n getU64Codec,\n getU128Codec,\n mergeBytes,\n transformCodec,\n type Codec,\n} from '@solana/kit';\nimport {\n MAX_ORACLE_OBSERVATIONS,\n MAX_HOOK_ALLOWLIST,\n ACCOUNT_DISCRIMINATORS,\n} from './constants.js';\nimport type {\n AmmConfig,\n Pool,\n Position,\n OracleState,\n Observation,\n SwapExactInArgs,\n AddLiquidityArgs,\n RemoveLiquidityArgs,\n CollectFeesArgs,\n CollectProtocolFeesArgs,\n CreatePositionArgs,\n InitializeConfigArgs,\n InitializePoolArgs,\n InitializeOracleArgs,\n SetHookArgs,\n SetFeesArgs,\n TransferAdminArgs,\n OracleConsultArgs,\n} from './types.js';\n\nconst addressCodec = getAddressCodec();\nconst boolCodec = getBooleanCodec();\nconst u8Codec = getU8Codec();\nconst u16Codec = getU16Codec();\nconst u32Codec = getU32Codec();\nconst u64Codec = getU64Codec();\nconst u128Codec = getU128Codec();\nconst u256Codec: Codec<bigint> = transformCodec(\n getArrayCodec(u64Codec, { size: 4 }),\n (value) => {\n if (value < 0n) {\n throw new Error('u256 cannot be negative');\n }\n if (value >> 256n !== 0n) {\n throw new Error('u256 overflow');\n }\n const mask = (1n << 64n) - 1n;\n return [\n value & mask,\n (value >> 64n) & mask,\n (value >> 128n) & mask,\n (value >> 192n) & mask,\n ];\n },\n (value) => {\n let out = 0n;\n for (let i = 0; i < 4; i += 1) {\n out |= value[i] << (64n * BigInt(i));\n }\n return out;\n },\n);\n\nconst reservedBytesCodec = transformCodec(\n fixCodecSize(getBytesCodec(), 7),\n (value: Uint8Array) => value,\n (value) => new Uint8Array(value),\n);\n\n// ============================================================================\n// Account Codecs\n// ============================================================================\n\nexport const observationCodec: Codec<Observation> = getStructCodec([\n ['timestamp', u32Codec],\n ['price0Cumulative', u256Codec],\n ['price1Cumulative', u256Codec],\n]);\n\nexport const ammConfigDataCodec: Codec<AmmConfig> = getStructCodec([\n ['admin', addressCodec],\n ['paused', boolCodec],\n ['hookAllowlistLen', u8Codec],\n ['hookAllowlist', getArrayCodec(addressCodec, { size: MAX_HOOK_ALLOWLIST })],\n ['maxSwapFeeBps', u16Codec],\n ['maxFeeSplitBps', u16Codec],\n ['protocolFeeEnabled', boolCodec],\n ['protocolFeeBps', u16Codec],\n ['version', u8Codec],\n ['reserved', reservedBytesCodec],\n]);\n\nexport const poolDataCodec: Codec<Pool> = getStructCodec([\n ['config', addressCodec],\n ['token0Mint', addressCodec],\n ['token1Mint', addressCodec],\n ['vault0', addressCodec],\n ['vault1', addressCodec],\n ['authority', addressCodec],\n ['bump', u8Codec],\n ['reserve0', u64Codec],\n ['reserve1', u64Codec],\n ['totalShares', u128Codec],\n ['swapFeeBps', u16Codec],\n ['feeSplitBps', u16Codec],\n ['feeGrowthGlobal0Q64', u128Codec],\n ['feeGrowthGlobal1Q64', u128Codec],\n ['feesUnclaimed0', u64Codec],\n ['feesUnclaimed1', u64Codec],\n ['hookProgram', addressCodec],\n ['hookFlags', u32Codec],\n ['liquidityMeasureTokenIndex', u8Codec],\n ['kLast', u128Codec],\n ['protocolFeePosition', addressCodec],\n ['locked', u8Codec],\n ['version', u8Codec],\n ['reserved', reservedBytesCodec],\n]);\n\nexport const positionDataCodec: Codec<Position> = getStructCodec([\n ['pool', addressCodec],\n ['owner', addressCodec],\n ['positionId', u64Codec],\n ['shares', u128Codec],\n ['feeGrowthLast0Q64', u128Codec],\n ['feeGrowthLast1Q64', u128Codec],\n ['feeOwed0', u64Codec],\n ['feeOwed1', u64Codec],\n ['version', u8Codec],\n ['reserved', reservedBytesCodec],\n]);\n\nexport const oracleStateDataCodec: Codec<OracleState> = getStructCodec([\n ['pool', addressCodec],\n ['initialized', boolCodec],\n ['maxPriceChangeRatioQ64', u128Codec],\n ['lastSlot', u64Codec],\n ['truncPrice0Q64', u128Codec],\n ['truncPrice1Q64', u128Codec],\n ['deviation0Q64', u128Codec],\n ['deviation1Q64', u128Codec],\n ['price0Cumulative', u256Codec],\n ['price1Cumulative', u256Codec],\n ['lastTimestamp', u32Codec],\n ['lastObservationTimestamp', u32Codec],\n ['observationIntervalSec', u32Codec],\n ['observationIndex', u16Codec],\n [\n 'observations',\n getArrayCodec(observationCodec, { size: MAX_ORACLE_OBSERVATIONS }),\n ],\n ['version', u8Codec],\n ['reserved', reservedBytesCodec],\n]);\n\nconst ammConfigDecoder = getHiddenPrefixDecoder(ammConfigDataCodec, [\n getConstantDecoder(ACCOUNT_DISCRIMINATORS.AmmConfig),\n]);\nconst poolDecoder = getHiddenPrefixDecoder(poolDataCodec, [\n getConstantDecoder(ACCOUNT_DISCRIMINATORS.Pool),\n]);\nconst positionDecoder = getHiddenPrefixDecoder(positionDataCodec, [\n getConstantDecoder(ACCOUNT_DISCRIMINATORS.Position),\n]);\nconst oracleStateDecoder = getHiddenPrefixDecoder(oracleStateDataCodec, [\n getConstantDecoder(ACCOUNT_DISCRIMINATORS.OracleState),\n]);\n\n/**\n * Decode AmmConfig from raw account data (including discriminator)\n */\nexport function decodeAmmConfig(data: ReadonlyUint8Array): AmmConfig {\n return ammConfigDecoder.decode(data);\n}\n\n/**\n * Decode Pool from raw account data (including discriminator)\n */\nexport function decodePool(data: ReadonlyUint8Array): Pool {\n return poolDecoder.decode(data);\n}\n\n/**\n * Decode Position from raw account data (including discriminator)\n */\nexport function decodePosition(data: ReadonlyUint8Array): Position {\n return positionDecoder.decode(data);\n}\n\n/**\n * Decode OracleState from raw account data (including discriminator)\n */\nexport function decodeOracleState(data: ReadonlyUint8Array): OracleState {\n return oracleStateDecoder.decode(data);\n}\n\n// ============================================================================\n// Instruction Encoders\n// ============================================================================\n\n/**\n * Encode instruction data with discriminator prefix\n */\nexport function encodeInstructionData<T>(\n discriminator: Uint8Array,\n codec?: { encode: (args: T) => ReadonlyUint8Array | Uint8Array },\n args?: T,\n): Uint8Array {\n const encodedArgs = (() => {\n if (!codec) {\n return new Uint8Array();\n }\n if (args === undefined) {\n throw new Error('Instruction args are required for codec encoders');\n }\n return new Uint8Array(codec.encode(args));\n })();\n\n return mergeBytes([discriminator, encodedArgs]);\n}\n\ntype AddLiquidityArgsWithOracle = AddLiquidityArgs & { updateOracle?: boolean };\n\nexport const swapExactInArgsCodec = getStructCodec([\n ['amountIn', u64Codec],\n ['minAmountOut', u64Codec],\n ['tradeDirection', u8Codec],\n ['updateOracle', boolCodec],\n]) as Codec<SwapExactInArgs>;\n\nconst addLiquidityArgsWithOracleCodec: Codec<\n AddLiquidityArgs & { updateOracle: boolean }\n> = getStructCodec([\n ['amount0Max', u64Codec],\n ['amount1Max', u64Codec],\n ['minSharesOut', u128Codec],\n ['updateOracle', boolCodec],\n]);\n\nexport const addLiquidityArgsCodec: Codec<AddLiquidityArgsWithOracle> =\n transformCodec(\n addLiquidityArgsWithOracleCodec,\n (value: AddLiquidityArgsWithOracle) => ({\n ...value,\n updateOracle: value.updateOracle ?? false,\n }),\n (value) => value,\n );\n\nexport const removeLiquidityArgsCodec: Codec<RemoveLiquidityArgs> =\n getStructCodec([\n ['sharesIn', u128Codec],\n ['minAmount0Out', u64Codec],\n ['minAmount1Out', u64Codec],\n ['updateOracle', boolCodec],\n ]);\n\nexport const collectFeesArgsCodec: Codec<CollectFeesArgs> = getStructCodec([\n ['max0', u64Codec],\n ['max1', u64Codec],\n]);\n\nexport const collectProtocolFeesArgsCodec: Codec<CollectProtocolFeesArgs> =\n getStructCodec([\n ['max0', u64Codec],\n ['max1', u64Codec],\n ]);\n\nexport const createPositionArgsCodec: Codec<CreatePositionArgs> =\n getStructCodec([['positionId', u64Codec]]);\n\nexport const initializeConfigArgsCodec: Codec<InitializeConfigArgs> =\n getStructCodec([\n ['admin', addressCodec],\n ['maxSwapFeeBps', u16Codec],\n ['maxFeeSplitBps', u16Codec],\n ['protocolFeeEnabled', boolCodec],\n ['protocolFeeBps', u16Codec],\n ['hookAllowlist', getArrayCodec(addressCodec, { size: u32Codec })],\n ]);\n\nexport const initializePoolArgsCodec: Codec<InitializePoolArgs> =\n getStructCodec([\n ['mintA', addressCodec],\n ['mintB', addressCodec],\n ['initialSwapFeeBps', u16Codec],\n ['initialFeeSplitBps', u16Codec],\n ['liquidityMeasureTokenIndex', u8Codec],\n ['hookProgram', addressCodec],\n ['hookFlags', u32Codec],\n ]);\n\nexport const initializeOracleArgsCodec: Codec<InitializeOracleArgs> =\n getStructCodec([\n ['maxPriceChangeRatioQ64', u128Codec],\n ['observationIntervalSec', u32Codec],\n ['numObservations', u16Codec],\n ]);\n\nexport const setHookArgsCodec: Codec<SetHookArgs> = getStructCodec([\n ['hookProgram', addressCodec],\n ['hookFlags', u32Codec],\n]);\n\nexport const setFeesArgsCodec: Codec<SetFeesArgs> = getStructCodec([\n ['swapFeeBps', u16Codec],\n ['feeSplitBps', u16Codec],\n]);\n\nexport const transferAdminArgsCodec: Codec<TransferAdminArgs> = getStructCodec([\n ['newAdmin', addressCodec],\n]);\n\nexport const oracleConsultArgsCodec: Codec<OracleConsultArgs> = getStructCodec([\n ['windowSeconds', u32Codec],\n]);\n\n/** Encode SwapExactIn args */\nexport function encodeSwapExactInArgs(args: SwapExactInArgs): Uint8Array {\n return new Uint8Array(swapExactInArgsCodec.encode(args));\n}\n\n/** Encode AddLiquidity args */\nexport function encodeAddLiquidityArgs(\n args: AddLiquidityArgsWithOracle,\n): Uint8Array {\n return new Uint8Array(addLiquidityArgsCodec.encode(args));\n}\n\n/** Encode RemoveLiquidity args */\nexport function encodeRemoveLiquidityArgs(\n args: RemoveLiquidityArgs,\n): Uint8Array {\n return new Uint8Array(removeLiquidityArgsCodec.encode(args));\n}\n\n/** Encode CollectFees args */\nexport function encodeCollectFeesArgs(args: CollectFeesArgs): Uint8Array {\n return new Uint8Array(collectFeesArgsCodec.encode(args));\n}\n\n/** Encode CollectProtocolFees args */\nexport function encodeCollectProtocolFeesArgs(\n args: CollectProtocolFeesArgs,\n): Uint8Array {\n return new Uint8Array(collectProtocolFeesArgsCodec.encode(args));\n}\n\n/** Encode CreatePosition args */\nexport function encodeCreatePositionArgs(args: CreatePositionArgs): Uint8Array {\n return new Uint8Array(createPositionArgsCodec.encode(args));\n}\n\n/** Encode InitializeConfig args */\nexport function encodeInitializeConfigArgs(\n args: InitializeConfigArgs,\n): Uint8Array {\n return new Uint8Array(initializeConfigArgsCodec.encode(args));\n}\n\n/** Encode InitializePool args */\nexport function encodeInitializePoolArgs(args: InitializePoolArgs): Uint8Array {\n return new Uint8Array(initializePoolArgsCodec.encode(args));\n}\n\n/** Encode InitializeOracle args */\nexport function encodeInitializeOracleArgs(\n args: InitializeOracleArgs,\n): Uint8Array {\n return new Uint8Array(initializeOracleArgsCodec.encode(args));\n}\n\n/** Encode SetHook args */\nexport function encodeSetHookArgs(args: SetHookArgs): Uint8Array {\n return new Uint8Array(setHookArgsCodec.encode(args));\n}\n\n/** Encode SetFees args */\nexport function encodeSetFeesArgs(args: SetFeesArgs): Uint8Array {\n return new Uint8Array(setFeesArgsCodec.encode(args));\n}\n\n/** Encode TransferAdmin args */\nexport function encodeTransferAdminArgs(args: TransferAdminArgs): Uint8Array {\n return new Uint8Array(transferAdminArgsCodec.encode(args));\n}\n\n/** Encode OracleConsult args */\nexport function encodeOracleConsultArgs(args: OracleConsultArgs): Uint8Array {\n return new Uint8Array(oracleConsultArgsCodec.encode(args));\n}\n","import { BPS_DENOM, Q64_ONE } from './constants.js';\nimport type {\n Pool,\n SwapQuote,\n SwapQuoteExactOut,\n AddLiquidityQuote,\n RemoveLiquidityQuote,\n TradeDirection,\n} from './types.js';\n\n// ============================================================================\n// Q64.64 Fixed-Point Arithmetic\n// ============================================================================\n\n/**\n * Convert a Q64.64 fixed-point number to a decimal number\n */\nexport function q64ToNumber(q64: bigint): number {\n // Split into integer and fractional parts for precision\n const intPart = q64 >> 64n;\n const fracPart = q64 & ((1n << 64n) - 1n);\n return Number(intPart) + Number(fracPart) / Number(Q64_ONE);\n}\n\n/**\n * Convert a decimal number to Q64.64 fixed-point\n */\nexport function numberToQ64(n: number): bigint {\n const intPart = Math.floor(n);\n const fracPart = n - intPart;\n return (\n (BigInt(intPart) << 64n) + BigInt(Math.round(fracPart * Number(Q64_ONE)))\n );\n}\n\n/**\n * Multiply two Q64.64 numbers, returning Q64.64 result\n */\nexport function q64Mul(a: bigint, b: bigint): bigint {\n return (a * b) >> 64n;\n}\n\n/**\n * Divide two Q64.64 numbers, returning Q64.64 result\n */\nexport function q64Div(a: bigint, b: bigint): bigint {\n return (a << 64n) / b;\n}\n\n/**\n * Compute spot price (reserve1/reserve0) as Q64.64\n * Price of token0 denominated in token1\n */\nexport function computePrice0Q64(reserve0: bigint, reserve1: bigint): bigint {\n if (reserve0 === 0n) return 0n;\n return (reserve1 << 64n) / reserve0;\n}\n\n/**\n * Compute spot price (reserve0/reserve1) as Q64.64\n * Price of token1 denominated in token0\n */\nexport function computePrice1Q64(reserve0: bigint, reserve1: bigint): bigint {\n if (reserve1 === 0n) return 0n;\n return (reserve0 << 64n) / reserve1;\n}\n\n// ============================================================================\n// Integer Math Helpers\n// ============================================================================\n\n/**\n * Integer square root (floor)\n */\nexport function isqrt(n: bigint): bigint {\n if (n < 0n) throw new Error('isqrt: negative input');\n if (n === 0n) return 0n;\n\n let x = n;\n let y = (x + 1n) / 2n;\n\n while (y < x) {\n x = y;\n y = (x + n / x) / 2n;\n }\n\n return x;\n}\n\n/**\n * Ceiling division: ceil(a / b)\n */\nexport function ceilDiv(a: bigint, b: bigint): bigint {\n return (a + b - 1n) / b;\n}\n\n/**\n * Minimum of two bigints\n */\nexport function minBigInt(a: bigint, b: bigint): bigint {\n return a < b ? a : b;\n}\n\n/**\n * Maximum of two bigints\n */\nexport function maxBigInt(a: bigint, b: bigint): bigint {\n return a > b ? a : b;\n}\n\n/**\n * Convert a ratio of two bigints to a decimal number using Q64.64 precision\n */\nexport function ratioToNumber(numerator: bigint, denominator: bigint): number {\n if (denominator === 0n) return 0;\n const q64 = (numerator << 64n) / denominator;\n return q64ToNumber(q64);\n}\n\n// ============================================================================\n// Swap Quote Calculations\n// ============================================================================\n\n/**\n * Calculate swap output and fees for exact input amount\n *\n * Fee calculation (from spec):\n * - fee_total = floor(amount_in * fee_bps / 10_000)\n * - fee_dist = floor(fee_total * split_bps / 10_000)\n * - fee_comp = fee_total - fee_dist\n * - amount_in_eff = amount_in - fee_total\n *\n * CPMM output:\n * - amount_out = floor(amount_in_eff * reserve_out / (reserve_in + amount_in_eff))\n */\nexport function getSwapQuote(\n pool: Pool,\n amountIn: bigint,\n tradeDirection: TradeDirection,\n): SwapQuote {\n if (amountIn === 0n) {\n return {\n amountOut: 0n,\n feeTotal: 0n,\n feeDist: 0n,\n feeComp: 0n,\n priceImpact: 0,\n executionPrice: 0,\n };\n }\n\n // Get reserves based on trade direction\n const [reserveIn, reserveOut] =\n tradeDirection === 0\n ? [pool.reserve0, pool.reserve1]\n : [pool.reserve1, pool.reserve0];\n\n if (reserveIn === 0n || reserveOut === 0n) {\n throw new Error('Pool has zero liquidity');\n }\n\n // Calculate fees\n const feeTotal = (amountIn * BigInt(pool.swapFeeBps)) / BPS_DENOM;\n const feeDist = (feeTotal * BigInt(pool.feeSplitBps)) / BPS_DENOM;\n const feeComp = feeTotal - feeDist;\n const amountInEff = amountIn - feeTotal;\n\n // CPMM output calculation\n const amountOut = (amountInEff * reserveOut) / (reserveIn + amountInEff);\n\n // Calculate price impact\n const spotPrice = ratioToNumber(reserveOut, reserveIn);\n const executionPrice = ratioToNumber(amountOut, amountIn);\n const priceImpact =\n spotPrice === 0 ? 0 : Math.abs(spotPrice - executionPrice) / spotPrice;\n\n return {\n amountOut,\n feeTotal,\n feeDist,\n feeComp,\n priceImpact,\n executionPrice,\n };\n}\n\n/**\n * Calculate input amount needed for exact output (reverse quote)\n */\nexport function getSwapQuoteExactOut(\n pool: Pool,\n amountOut: bigint,\n tradeDirection: TradeDirection,\n): SwapQuoteExactOut {\n // Get reserves based on trade direction\n const [reserveIn, reserveOut] =\n tradeDirection === 0\n ? [pool.reserve0, pool.reserve1]\n : [pool.reserve1, pool.reserve0];\n\n if (reserveIn === 0n || reserveOut === 0n) {\n throw new Error('Pool has zero liquidity');\n }\n\n if (amountOut >= reserveOut) {\n throw new Error('Insufficient liquidity for output amount');\n }\n\n // Reverse CPMM formula:\n // amountOut = amountInEff * reserveOut / (reserveIn + amountInEff)\n // => amountInEff = amountOut * reserveIn / (reserveOut - amountOut)\n const amountInEff = ceilDiv(amountOut * reserveIn, reserveOut - amountOut);\n\n // Reverse fee calculation:\n // amountInEff = amountIn - feeTotal = amountIn * (1 - feeBps/10000)\n // => amountIn = amountInEff * 10000 / (10000 - feeBps)\n const amountIn = ceilDiv(\n amountInEff * BPS_DENOM,\n BPS_DENOM - BigInt(pool.swapFeeBps),\n );\n const feeTotal = amountIn - amountInEff;\n\n return { amountIn, feeTotal };\n}\n\n// ============================================================================\n// Liquidity Quote Calculations\n// ============================================================================\n\n/**\n * Calculate shares and actual amounts for adding liquidity\n *\n * From spec:\n * - If initial: shares = floor_sqrt(amount0 * amount1)\n * - Else: shares = min(amount0 * totalShares / reserve0, amount1 * totalShares / reserve1)\n */\nexport function getAddLiquidityQuote(\n pool: Pool,\n amount0Max: bigint,\n amount1Max: bigint,\n): AddLiquidityQuote {\n if (pool.totalShares === 0n) {\n // Initial liquidity deposit\n const rawShares = isqrt(amount0Max * amount1Max);\n if (rawShares === 0n) {\n throw new Error('Initial liquidity too small');\n }\n const sharesOut = rawShares;\n\n return {\n sharesOut,\n amount0: amount0Max,\n amount1: amount1Max,\n poolShare: ratioToNumber(sharesOut, rawShares),\n };\n }\n\n // Existing pool - calculate proportional deposit\n if (pool.reserve0 === 0n || pool.reserve1 === 0n) {\n throw new Error('Invalid pool state: zero reserves with non-zero shares');\n }\n\n // Calculate shares for each token amount\n const shares0 = (amount0Max * pool.totalShares) / pool.reserve0;\n const shares1 = (amount1Max * pool.totalShares) / pool.reserve1;\n const sharesOut = minBigInt(shares0, shares1);\n\n // Calculate actual amounts needed for exact ratio\n const amount0 = ceilDiv(sharesOut * pool.reserve0, pool.totalShares);\n const amount1 = ceilDiv(sharesOut * pool.reserve1, pool.totalShares);\n\n // Calculate pool share after deposit\n const newTotalShares = pool.totalShares + sharesOut;\n const poolShare = ratioToNumber(sharesOut, newTotalShares);\n\n return {\n sharesOut,\n amount0,\n amount1,\n poolShare,\n };\n}\n\n/**\n * Calculate token amounts for removing liquidity\n *\n * From spec:\n * - amount0 = shares * reserve0 / totalShares\n * - amount1 = shares * reserve1 / totalShares\n */\nexport function getRemoveLiquidityQuote(\n pool: Pool,\n sharesIn: bigint,\n): RemoveLiquidityQuote {\n if (pool.totalShares === 0n) {\n throw new Error('Pool has no shares');\n }\n if (sharesIn > pool.totalShares) {\n throw new Error('Shares exceed total supply');\n }\n\n const amount0 = (sharesIn * pool.reserve0) / pool.totalShares;\n const amount1 = (sharesIn * pool.reserve1) / pool.totalShares;\n\n return { amount0, amount1 };\n}\n\n// ============================================================================\n// Fee Growth Calculations\n// ============================================================================\n\n/**\n * Calculate accrued fees for a position\n *\n * From spec:\n * - delta = pool.fee_growth_global - position.fee_growth_last\n * - owed_inc = floor(position.shares * delta / 2^64)\n */\nexport function calculateAccruedFees(\n shares: bigint,\n feeGrowthLastQ64: bigint,\n feeGrowthGlobalQ64: bigint,\n): bigint {\n const delta = feeGrowthGlobalQ64 - feeGrowthLastQ64;\n return (shares * delta) >> 64n;\n}\n\n/**\n * Calculate pending fees for a position (both tokens)\n */\nexport function getPendingFees(\n pool: Pool,\n position: {\n shares: bigint;\n feeGrowthLast0Q64: bigint;\n feeGrowthLast1Q64: bigint;\n feeOwed0: bigint;\n feeOwed1: bigint;\n },\n): { pending0: bigint; pending1: bigint } {\n const accrued0 = calculateAccruedFees(\n position.shares,\n position.feeGrowthLast0Q64,\n pool.feeGrowthGlobal0Q64,\n );\n const accrued1 = calculateAccruedFees(\n position.shares,\n position.feeGrowthLast1Q64,\n pool.feeGrowthGlobal1Q64,\n );\n\n return {\n pending0: position.feeOwed0 + accrued0,\n pending1: position.feeOwed1 + accrued1,\n };\n}\n\n// ============================================================================\n// Price Helpers\n// ============================================================================\n\n/**\n * Calculate spot price of token0 in terms of token1\n */\nexport function getSpotPrice0(pool: Pool): number {\n if (pool.reserve0 === 0n) return 0;\n return q64ToNumber(computePrice0Q64(pool.reserve0, pool.reserve1));\n}\n\n/**\n * Calculate spot price of token1 in terms of token0\n */\nexport function getSpotPrice1(pool: Pool): number {\n if (pool.reserve1 === 0n) return 0;\n return q64ToNumber(computePrice1Q64(pool.reserve0, pool.reserve1));\n}\n\n/**\n * Calculate k (constant product invariant)\n */\nexport function getK(pool: Pool): bigint {\n return pool.reserve0 * pool.reserve1;\n}\n\n/**\n * Calculate pool TVL in terms of one token\n * @param pool Pool data\n * @param side 0 = denominate in token0, 1 = denominate in token1\n */\nexport function getTvl(pool: Pool, side: TradeDirection = 0): bigint {\n if (side === 0) {\n // TVL in token0: reserve0 + (reserve1 * price1)\n // where price1 = reserve0/reserve1 (price of 1 in terms of 0)\n // = reserve0 + reserve1 * reserve0 / reserve1 = 2 * reserve0\n return 2n * pool.reserve0;\n } else {\n // TVL in token1: reserve1 + (reserve0 * price0)\n return 2n * pool.reserve1;\n }\n}\n\n// ============================================================================\n// TWAP Helpers\n// ============================================================================\n\n/**\n * Calculate TWAP price from oracle observations\n *\n * TWAP = (cumulative_end - cumulative_start) / (timestamp_end - timestamp_start)\n */\nexport function calculateTwap(\n cumulativeStart: bigint,\n cumulativeEnd: bigint,\n timestampStart: number,\n timestampEnd: number,\n): bigint {\n const dt = BigInt(timestampEnd - timestampStart);\n if (dt === 0n) return 0n;\n\n // Handle wrapping (cumulative values can wrap around)\n const cumulativeDiff =\n cumulativeEnd >= cumulativeStart\n ? cumulativeEnd - cumulativeStart\n : (1n << 256n) - cumulativeStart + cumulativeEnd;\n\n return cumulativeDiff / dt;\n}\n\n/**\n * Calculate TWAP as a decimal number\n */\nexport function calculateTwapNumber(\n cumulativeStart: bigint,\n cumulativeEnd: bigint,\n timestampStart: number,\n timestampEnd: number,\n): number {\n const twapQ64 = calculateTwap(\n cumulativeStart,\n cumulativeEnd,\n timestampStart,\n timestampEnd,\n );\n return q64ToNumber(twapQ64);\n}\n","/**\n * This code was AUTOGENERATED using the Codama library.\n * Please DO NOT EDIT THIS FILE, instead use visitors\n * to add features, then rerun Codama to update it.\n *\n * @see https://github.com/codama-idl/codama\n */\n\nimport {\n combineCodec,\n fixDecoderSize,\n fixEncoderSize,\n getBytesDecoder,\n getBytesEncoder,\n getStructDecoder,\n getStructEncoder,\n SOLANA_ERROR__PROGRAM_CLIENTS__INSUFFICIENT_ACCOUNT_METAS,\n SolanaError,\n transformEncoder,\n type AccountMeta,\n type AccountSignerMeta,\n type Address,\n type FixedSizeCodec,\n type FixedSizeDecoder,\n type FixedSizeEncoder,\n type Instruction,\n type InstructionWithAccounts,\n type InstructionWithData,\n type ReadonlyAccount,\n type ReadonlySignerAccount,\n type ReadonlyUint8Array,\n type TransactionSigner,\n type WritableAccount,\n} from '@solana/kit';\nimport {\n getAccountMetaFactory,\n type ResolvedInstructionAccount,\n} from '@solana/program-client-core';\nimport { CPMM_PROGRAM_ADDRESS } from '../programs';\n\nexport const CLOSE_POSITION_DISCRIMINATOR = new Uint8Array([\n 123, 134, 81, 0, 49, 68, 98, 98,\n]);\n\nexport function getClosePositionDiscriminatorBytes() {\n return fixEncoderSize(getBytesEncoder(), 8).encode(\n CLOSE_POSITION_DISCRIMINATOR,\n );\n}\n\nexport type ClosePositionInstruction<\n TProgram extends string = typeof CPMM_PROGRAM_ADDRESS,\n TAccountPool extends string | AccountMeta<string> = string,\n TAccountPosition extends string | AccountMeta<string> = string,\n TAccountOwner extends string | AccountMeta<string> = string,\n TAccountRentRecipient extends string | AccountMeta<string> = string,\n TRemainingAccounts extends readonly AccountMeta<string>[] = [],\n> = Instruction<TProgram> &\n InstructionWithData<ReadonlyUint8Array> &\n InstructionWithAccounts<\n [\n TAccountPool extends string\n ? ReadonlyAccount<TAccountPool>\n : TAccountPool,\n TAccountPosition extends string\n ? WritableAccount<TAccountPosition>\n : TAccountPosition,\n TAccountOwner extends string\n ? ReadonlySignerAccount<TAccountOwner> &\n AccountSignerMeta<TAccountOwner>\n : TAccountOwner,\n TAccountRentRecipient extends string\n ? WritableAccount<TAccountRentRecipient>\n : TAccountRentRecipient,\n ...TRemainingAccounts,\n ]\n >;\n\nexport type ClosePositionInstructionData = {\n discriminator: ReadonlyUint8Array;\n};\n\nexport type ClosePositionInstructionDataArgs = {};\n\nexport function getClosePositionInstructionDataEncoder(): FixedSizeEncoder<ClosePositionInstructionDataArgs> {\n return transformEncoder(\n getStructEncoder([['discriminator', fixEncoderSize(getBytesEncoder(), 8)]]),\n (value) => ({ ...value, discriminator: CLOSE_POSITION_DISCRIMINATOR }),\n );\n}\n\nexport function getClosePositionInstructionDataDecoder(): FixedSizeDecoder<ClosePositionInstructionData> {\n return getStructDecoder([\n ['discriminator', fixDecoderSize(getBytesDecoder(), 8)],\n ]);\n}\n\nexport function getClosePositionInstructionDataCodec(): FixedSizeCodec<\n ClosePositionInstructionDataArgs,\n ClosePositionInstructionData\n> {\n return combineCodec(\n getClosePositionInstructionDataEncoder(),\n getClosePositionInstructionDataDecoder(),\n );\n}\n\nexport type ClosePositionInput<\n TAccountPool extends string = string,\n TAccountPosition extends string = string,\n TAccountOwner extends string = string,\n TAccountRentRecipient extends string = string,\n> = {\n pool: Address<TAccountPool>;\n position: Address<TAccountPosition>;\n owner: TransactionSigner<TAccountOwner>;\n rentRecipient: Address<TAccountRentRecipient>;\n};\n\nexport function getClosePositionInstruction<\n TAccountPool extends string,\n TAccountPosition extends string,\n TAccountOwner extends string,\n TAccountRentRecipient extends string,\n TProgramAddress extends Address = typeof CPMM_PROGRAM_ADDRESS,\n>(\n input: ClosePositionInput<\n TAccountPool,\n TAccountPosition,\n TAccountOwner,\n TAccountRentRecipient\n >,\n config?: { programAddress?: TProgramAddress },\n): ClosePositionInstruction<\n TProgramAddress,\n TAccountPool,\n TAccountPosition,\n TAccountOwner,\n TAccountRentRecipient\n> {\n // Program address.\n const programAddress = config?.programAddress ?? CPMM_PROGRAM_ADDRESS;\n\n // Original accounts.\n const originalAccounts = {\n pool: { value: input.pool ?? null, isWritable: false },\n position: { value: input.position ?? null, isWritable: true },\n owner: { value: input.owner ?? null, isWritable: false },\n rentRecipient: { value: input.rentRecipient ?? null, isWritable: true },\n };\n const accounts = originalAccounts as Record<\n keyof typeof originalAccounts,\n ResolvedInstructionAccount\n >;\n\n const getAccountMeta = getAccountMetaFactory(programAddress, 'programId');\n return Object.freeze({\n accounts: [\n getAccountMeta('pool', accounts.pool),\n getAccountMeta('position', accounts.position),\n getAccountMeta('owner', accounts.owner),\n getAccountMeta('rentRecipient', accounts.rentRecipient),\n ],\n data: getClosePositionInstructionDataEncoder().encode({}),\n programAddress,\n } as ClosePositionInstruction<\n TProgramAddress,\n TAccountPool,\n TAccountPosition,\n TAccountOwner,\n TAccountRentRecipient\n >);\n}\n\nexport type ParsedClosePositionInstruction<\n TProgram extends string = typeof CPMM_PROGRAM_ADDRESS,\n TAccountMetas extends readonly AccountMeta[] = readonly AccountMeta[],\n> = {\n programAddress: Address<TProgram>;\n accounts: {\n pool: TAccountMetas[0];\n position: TAccountMetas[1];\n owner: TAccountMetas[2];\n rentRecipient: TAccountMetas[3];\n };\n data: ClosePositionInstructionData;\n};\n\nexport function parseClosePositionInstruction<\n TProgram extends string,\n TAccountMetas extends readonly AccountMeta[],\n>(\n instruction: Instruction<TProgram> &\n InstructionWithAccounts<TAccountMetas> &\n InstructionWithData<ReadonlyUint8Array>,\n): ParsedClosePositionInstruction<TProgram, TAccountMetas> {\n if (instruction.accounts.length < 4) {\n throw new SolanaError(\n SOLANA_ERROR__PROGRAM_CLIENTS__INSUFFICIENT_ACCOUNT_METAS,\n {\n actualAccountMetas: instruction.accounts.length,\n expectedAccountMetas: 4,\n },\n );\n }\n let accountIndex = 0;\n const getNextAccount = () => {\n const accountMeta = (instruction.accounts as TAccountMetas)[accountIndex]!;\n accountIndex += 1;\n return accountMeta;\n };\n return {\n programAddress: instruction.programAddress,\n accounts: {\n pool: getNextAccount(),\n position: getNextAccount(),\n owner: getNextAccount(),\n rentRecipient: getNextAccount(),\n },\n data: getClosePositionInstructionDataDecoder().decode(instruction.data),\n };\n}\n","/**\n * This code was AUTOGENERATED using the Codama library.\n * Please DO NOT EDIT THIS FILE, instead use visitors\n * to add features, then rerun Codama to update it.\n *\n * @see https://github.com/codama-idl/codama\n */\n\nimport {\n combineCodec,\n fixDecoderSize,\n fixEncoderSize,\n getAddressEncoder,\n getBytesDecoder,\n getBytesEncoder,\n getProgramDerivedAddress,\n getStructDecoder,\n getStructEncoder,\n getU64Decoder,\n getU64Encoder,\n SOLANA_ERROR__PROGRAM_CLIENTS__INSUFFICIENT_ACCOUNT_METAS,\n SolanaError,\n transformEncoder,\n type AccountMeta,\n type AccountSignerMeta,\n type Address,\n type FixedSizeCodec,\n type FixedSizeDecoder,\n type FixedSizeEncoder,\n type Instruction,\n type InstructionWithAccounts,\n type InstructionWithData,\n type ReadonlyAccount,\n type ReadonlySignerAccount,\n type ReadonlyUint8Array,\n type TransactionSigner,\n type WritableAccount,\n} from '@solana/kit';\nimport {\n getAccountMetaFactory,\n getAddressFromResolvedInstructionAccount,\n type ResolvedInstructionAccount,\n} from '@solana/program-client-core';\nimport { CPMM_PROGRAM_ADDRESS } from '../programs';\n\nexport const COLLECT_FEES_DISCRIMINATOR = new Uint8Array([\n 164, 152, 207, 99, 30, 186, 19, 182,\n]);\n\nexport function getCollectFeesDiscriminatorBytes() {\n return fixEncoderSize(getBytesEncoder(), 8).encode(\n COLLECT_FEES_DISCRIMINATOR,\n );\n}\n\nexport type CollectFeesInstruction<\n TProgram extends string = typeof CPMM_PROGRAM_ADDRESS,\n TAccountPool extends string | AccountMeta<string> = string,\n TAccountPosition extends string | AccountMeta<string> = string,\n TAccountOwner extends string | AccountMeta<string> = string,\n TAccountAuthority extends string | AccountMeta<string> = string,\n TAccountVault0 extends string | AccountMeta<string> = string,\n TAccountVault1 extends string | AccountMeta<string> = string,\n TAccountToken0Mint extends string | AccountMeta<string> = string,\n TAccountToken1Mint extends string | AccountMeta<string> = string,\n TAccountUser0 extends string | AccountMeta<string> = string,\n TAccountUser1 extends string | AccountMeta<string> = string,\n TAccountToken0Program extends string | AccountMeta<string> = string,\n TAccountToken1Program extends string | AccountMeta<string> = string,\n TRemainingAccounts extends readonly AccountMeta<string>[] = [],\n> = Instruction<TProgram> &\n InstructionWithData<ReadonlyUint8Array> &\n InstructionWithAccounts<\n [\n TAccountPool extends string\n ? WritableAccount<TAccountPool>\n : TAccountPool,\n TAccountPosition extends string\n ? WritableAccount<TAccountPosition>\n : TAccountPosition,\n TAccountOwner extends string\n ? ReadonlySignerAccount<TAccountOwner> &\n AccountSignerMeta<TAccountOwner>\n : TAccountOwner,\n TAccountAuthority extends string\n ? ReadonlyAccount<TAccountAuthority>\n : TAccountAuthority,\n TAccountVault0 extends string\n ? WritableAccount<TAccountVault0>\n : TAccountVault0,\n TAccountVault1 extends string\n ? WritableAccount<TAccountVault1>\n : TAccountVault1,\n TAccountToken0Mint extends string\n ? ReadonlyAccount<TAccountToken0Mint>\n : TAccountToken0Mint,\n TAccountToken1Mint extends string\n ? ReadonlyAccount<TAccountToken1Mint>\n : TAccountToken1Mint,\n TAccountUser0 extends string\n ? WritableAccount<TAccountUser0>\n : TAccountUser0,\n TAccountUser1 extends string\n ? WritableAccount<TAccountUser1>\n : TAccountUser1,\n TAccountToken0Program extends string\n ? ReadonlyAccount<TAccountToken0Program>\n : TAccountToken0Program,\n TAccountToken1Program extends string\n ? ReadonlyAccount<TAccountToken1Program>\n : TAccountToken1Program,\n ...TRemainingAccounts,\n ]\n >;\n\nexport type CollectFeesInstructionData = {\n discriminator: ReadonlyUint8Array;\n max0: bigint;\n max1: bigint;\n};\n\nexport type CollectFeesInstructionDataArgs = {\n max0: number | bigint;\n max1: number | bigint;\n};\n\nexport function getCollectFeesInstructionDataEncoder(): FixedSizeEncoder<CollectFeesInstructionDataArgs> {\n return transformEncoder(\n getStructEncoder([\n ['discriminator', fixEncoderSize(getBytesEncoder(), 8)],\n ['max0', getU64Encoder()],\n ['max1', getU64Encoder()],\n ]),\n (value) => ({ ...value, discriminator: COLLECT_FEES_DISCRIMINATOR }),\n );\n}\n\nexport function getCollectFeesInstructionDataDecoder(): FixedSizeDecoder<CollectFeesInstructionData> {\n return getStructDecoder([\n ['discriminator', fixDecoderSize(getBytesDecoder(), 8)],\n ['max0', getU64Decoder()],\n ['max1', getU64Decoder()],\n ]);\n}\n\nexport function getCollectFeesInstructionDataCodec(): FixedSizeCodec<\n CollectFeesInstructionDataArgs,\n CollectFeesInstructionData\n> {\n return combineCodec(\n getCollectFeesInstructionDataEncoder(),\n getCollectFeesInstructionDataDecoder(),\n );\n}\n\nexport type CollectFeesAsyncInput<\n TAccountPool extends string = string,\n TAccountPosition extends string = string,\n TAccountOwner extends string = string,\n TAccountAuthority extends string = string,\n TAccountVault0 extends string = string,\n TAccountVault1 extends string = string,\n TAccountToken0Mint extends string = string,\n TAccountToken1Mint extends string = string,\n TAccountUser0 extends string = string,\n TAccountUser1 extends string = string,\n TAccountToken0Program extends string = string,\n TAccountToken1Program extends string = string,\n> = {\n pool: Address<TAccountPool>;\n position: Address<TAccountPosition>;\n owner: TransactionSigner<TAccountOwner>;\n authority?: Address<TAccountAuthority>;\n vault0: Address<TAccountVault0>;\n vault1: Address<TAccountVault1>;\n token0Mint: Address<TAccountToken0Mint>;\n token1Mint: Address<TAccountToken1Mint>;\n user0: Address<TAccountUser0>;\n user1: Address<TAccountUser1>;\n token0Program: Address<TAccountToken0Program>;\n token1Program: Address<TAccountToken1Program>;\n max0: CollectFeesInstructionDataArgs['max0'];\n max1: CollectFeesInstructionDataArgs['max1'];\n};\n\nexport async function getCollectFeesInstructionAsync<\n TAccountPool extends string,\n TAccountPosition extends string,\n TAccountOwner extends string,\n TAccountAuthority extends string,\n TAccountVault0 extends string,\n TAccountVault1 extends string,\n TAccountToken0Mint extends string,\n TAccountToken1Mint extends string,\n TAccountUser0 extends string,\n TAccountUser1 extends string,\n TAccountToken0Program extends string,\n TAccountToken1Program extends string,\n TProgramAddress extends Address = typeof CPMM_PROGRAM_ADDRESS,\n>(\n input: CollectFeesAsyncInput<\n TAccountPool,\n TAccountPosition,\n TAccountOwner,\n TAccountAuthority,\n TAccountVault0,\n TAccountVault1,\n TAccountToken0Mint,\n TAccountToken1Mint,\n TAccountUser0,\n TAccountUser1,\n TAccountToken0Program,\n TAccountToken1Program\n >,\n config?: { programAddress?: TProgramAddress },\n): Promise<\n CollectFeesInstruction<\n TProgramAddress,\n TAccountPool,\n TAccountPosition,\n TAccountOwner,\n TAccountAuthority,\n TAccountVault0,\n TAccountVault1,\n TAccountToken0Mint,\n TAccountToken1Mint,\n TAccountUser0,\n TAccountUser1,\n TAccountToken0Program,\n TAccountToken1Program\n >\n> {\n // Program address.\n const programAddress = config?.programAddress ?? CPMM_PROGRAM_ADDRESS;\n\n // Original accounts.\n const originalAccounts = {\n pool: { value: input.pool ?? null, isWritable: true },\n position: { value: input.position ?? null, isWritable: true },\n owner: { value: input.owner ?? null, isWritable: false },\n authority: { value: input.authority ?? null, isWritable: false },\n vault0: { value: input.vault0 ?? null, isWritable: true },\n vault1: { value: input.vault1 ?? null, isWritable: true },\n token0Mint: { value: input.token0Mint ?? null, isWritable: false },\n token1Mint: { value: input.token1Mint ?? null, isWritable: false },\n user0: { value: input.user0 ?? null, isWritable: true },\n user1: { value: input.user1 ?? null, isWritable: true },\n token0Program: { value: input.token0Program ?? null, isWritable: false },\n token1Program: { value: input.token1Program ?? null, isWritable: false },\n };\n const accounts = originalAccounts as Record<\n keyof typeof originalAccounts,\n ResolvedInstructionAccount\n >;\n\n // Original args.\n const args = { ...input };\n\n // Resolve default values.\n if (!accounts.authority.value) {\n accounts.authority.value = await getProgramDerivedAddress({\n programAddress,\n seeds: [\n getBytesEncoder().encode(\n new Uint8Array([97, 117, 116, 104, 111, 114, 105, 116, 121]),\n ),\n getAddressEncoder().encode(\n getAddressFromResolvedInstructionAccount('pool', accounts.pool.value),\n ),\n ],\n });\n }\n\n const getAccountMeta = getAccountMetaFactory(programAddress, 'programId');\n return Object.freeze({\n accounts: [\n getAccountMeta('pool', accounts.pool),\n getAccountMeta('position', accounts.position),\n getAccountMeta('owner', accounts.owner),\n getAccountMeta('authority', accounts.authority),\n getAccountMeta('vault0', accounts.vault0),\n getAccountMeta('vault1', accounts.vault1),\n getAccountMeta('token0Mint', accounts.token0Mint),\n getAccountMeta('token1Mint', accounts.token1Mint),\n getAccountMeta('user0', accounts.user0),\n getAccountMeta('user1', accounts.user1),\n getAccountMeta('token0Program', accounts.token0Program),\n getAccountMeta('token1Program', accounts.token1Program),\n ],\n data: getCollectFeesInstructionDataEncoder().encode(\n args as CollectFeesInstructionDataArgs,\n ),\n programAddress,\n } as CollectFeesInstruction<\n TProgramAddress,\n TAccountPool,\n TAccountPosition,\n TAccountOwner,\n TAccountAuthority,\n TAccountVault0,\n TAccountVault1,\n TAccountToken0Mint,\n TAccountToken1Mint,\n TAccountUser0,\n TAccountUser1,\n TAccountToken0Program,\n TAccountToken1Program\n >);\n}\n\nexport type CollectFeesInput<\n TAccountPool extends string = string,\n TAccountPosition extends string = string,\n TAccountOwner extends string = string,\n TAccountAuthority extends string = string,\n TAccountVault0 extends string = string,\n TAccountVault1 extends string = string,\n TAccountToken0Mint extends string = string,\n TAccountToken1Mint extends string = string,\n TAccountUser0 extends string = string,\n TAccountUser1 extends string = string,\n TAccountToken0Program extends string = string,\n TAccountToken1Program extends string = string,\n> = {\n pool: Address<TAccountPool>;\n position: Address<TAccountPosition>;\n owner: TransactionSigner<TAccountOwner>;\n authority: Address<TAccountAuthority>;\n vault0: Address<TAccountVault0>;\n vault1: Address<TAccountVault1>;\n token0Mint: Address<TAccountToken0Mint>;\n token1Mint: Address<TAccountToken1Mint>;\n user0: Address<TAccountUser0>;\n user1: Address<TAccountUser1>;\n token0Program: Address<TAccountToken0Program>;\n token1Program: Address<TAccountToken1Program>;\n max0: CollectFeesInstructionDataArgs['max0'];\n max1: CollectFeesInstructionDataArgs['max1'];\n};\n\nexport function getCollectFeesInstruction<\n TAccountPool extends string,\n TAccountPosition extends string,\n TAccountOwner extends string,\n TAccountAuthority extends string,\n TAccountVault0 extends string,\n TAccountVault1 extends string,\n TAccountToken0Mint extends string,\n TAccountToken1Mint extends string,\n TAccountUser0 extends string,\n TAccountUser1 extends string,\n TAccountToken0Program extends string,\n TAccountToken1Program extends string,\n TProgramAddress extends Address = typeof CPMM_PROGRAM_ADDRESS,\n>(\n input: CollectFeesInput<\n TAccountPool,\n TAccountPosition,\n TAccountOwner,\n TAccountAuthority,\n TAccountVault0,\n TAccountVault1,\n TAccountToken0Mint,\n TAccountToken1Mint,\n TAccountUser0,\n TAccountUser1,\n TAccountToken0Program,\n TAccountToken1Program\n >,\n config?: { programAddress?: TProgramAddress },\n): CollectFeesInstruction<\n TProgramAddress,\n TAccountPool,\n TAccountPosition,\n TAccountOwner,\n TAccountAuthority,\n TAccountVault0,\n TAccountVault1,\n TAccountToken0Mint,\n TAccountToken1Mint,\n TAccountUser0,\n TAccountUser1,\n TAccountToken0Program,\n TAccountToken1Program\n> {\n // Program address.\n const programAddress = config?.programAddress ?? CPMM_PROGRAM_ADDRESS;\n\n // Original accounts.\n const originalAccounts = {\n pool: { value: input.pool ?? null, isWritable: true },\n position: { value: input.position ?? null, isWritable: true },\n owner: { value: input.owner ?? null, isWritable: false },\n authority: { value: input.authority ?? null, isWritable: false },\n vault0: { value: input.vault0 ?? null, isWritable: true },\n vault1: { value: input.vault1 ?? null, isWritable: true },\n token0Mint: { value: input.token0Mint ?? null, isWritable: false },\n token1Mint: { value: input.token1Mint ?? null, isWritable: false },\n user0: { value: input.user0 ?? null, isWritable: true },\n user1: { value: input.user1 ?? null, isWritable: true },\n token0Program: { value: input.token0Program ?? null, isWritable: false },\n token1Program: { value: input.token1Program ?? null, isWritable: false },\n };\n const accounts = originalAccounts as Record<\n keyof typeof originalAccounts,\n ResolvedInstructionAccount\n >;\n\n // Original args.\n const args = { ...input };\n\n const getAccountMeta = getAccountMetaFactory(programAddress, 'programId');\n return Object.freeze({\n accounts: [\n getAccountMeta('pool', accounts.pool),\n getAccountMeta('position', accounts.position),\n getAccountMeta('owner', accounts.owner),\n getAccountMeta('authority', accounts.authority),\n getAccountMeta('vault0', accounts.vault0),\n getAccountMeta('vault1', accounts.vault1),\n getAccountMeta('token0Mint', accounts.token0Mint),\n getAccountMeta('token1Mint', accounts.token1Mint),\n getAccountMeta('user0', accounts.user0),\n getAccountMeta('user1', accounts.user1),\n getAccountMeta('token0Program', accounts.token0Program),\n getAccountMeta('token1Program', accounts.token1Program),\n ],\n data: getCollectFeesInstructionDataEncoder().encode(\n args as CollectFeesInstructionDataArgs,\n ),\n programAddress,\n } as CollectFeesInstruction<\n TProgramAddress,\n TAccountPool,\n TAccountPosition,\n TAccountOwner,\n TAccountAuthority,\n TAccountVault0,\n TAccountVault1,\n TAccountToken0Mint,\n TAccountToken1Mint,\n TAccountUser0,\n TAccountUser1,\n TAccountToken0Program,\n TAccountToken1Program\n >);\n}\n\nexport type ParsedCollectFeesInstruction<\n TProgram extends string = typeof CPMM_PROGRAM_ADDRESS,\n TAccountMetas extends readonly AccountMeta[] = readonly AccountMeta[],\n> = {\n programAddress: Address<TProgram>;\n accounts: {\n pool: TAccountMetas[0];\n position: TAccountMetas[1];\n owner: TAccountMetas[2];\n authority: TAccountMetas[3];\n vault0: TAccountMetas[4];\n vault1: TAccountMetas[5];\n token0Mint: TAccountMetas[6];\n token1Mint: TAccountMetas[7];\n user0: TAccountMetas[8];\n user1: TAccountMetas[9];\n token0Program: TAccountMetas[10];\n token1Program: TAccountMetas[11];\n };\n data: CollectFeesInstructionData;\n};\n\nexport function parseCollectFeesInstruction<\n TProgram extends string,\n TAccountMetas extends readonly AccountMeta[],\n>(\n instruction: Instruction<TProgram> &\n InstructionWithAccounts<TAccountMetas> &\n InstructionWithData<ReadonlyUint8Array>,\n): ParsedCollectFeesInstruction<TProgram, TAccountMetas> {\n if (instruction.accounts.length < 12) {\n throw new SolanaError(\n SOLANA_ERROR__PROGRAM_CLIENTS__INSUFFICIENT_ACCOUNT_METAS,\n {\n actualAccountMetas: instruction.accounts.length,\n expectedAccountMetas: 12,\n },\n );\n }\n let accountIndex = 0;\n const getNextAccount = () => {\n const accountMeta = (instruction.accounts as TAccountMetas)[accountIndex]!;\n accountIndex += 1;\n return accountMeta;\n };\n return {\n programAddress: instruction.programAddress,\n accounts: {\n pool: getNextAccount(),\n position: getNextAccount(),\n owner: getNextAccount(),\n authority: getNextAccount(),\n vault0: getNextAccount(),\n vault1: getNextAccount(),\n token0Mint: getNextAccount(),\n token1Mint: getNextAccount(),\n user0: getNextAccount(),\n user1: getNextAccount(),\n token0Program: getNextAccount(),\n token1Program: getNextAccount(),\n },\n data: getCollectFeesInstructionDataDecoder().decode(instruction.data),\n };\n}\n","/**\n * This code was AUTOGENERATED using the Codama library.\n * Please DO NOT EDIT THIS FILE, instead use visitors\n * to add features, then rerun Codama to update it.\n *\n * @see https://github.com/codama-idl/codama\n */\n\nimport {\n combineCodec,\n fixDecoderSize,\n fixEncoderSize,\n getAddressEncoder,\n getBytesDecoder,\n getBytesEncoder,\n getProgramDerivedAddress,\n getStructDecoder,\n getStructEncoder,\n getU64Decoder,\n getU64Encoder,\n SOLANA_ERROR__PROGRAM_CLIENTS__INSUFFICIENT_ACCOUNT_METAS,\n SolanaError,\n transformEncoder,\n type AccountMeta,\n type AccountSignerMeta,\n type Address,\n type FixedSizeCodec,\n type FixedSizeDecoder,\n type FixedSizeEncoder,\n type Instruction,\n type InstructionWithAccounts,\n type InstructionWithData,\n type ReadonlyAccount,\n type ReadonlySignerAccount,\n type ReadonlyUint8Array,\n type TransactionSigner,\n type WritableAccount,\n} from '@solana/kit';\nimport {\n getAccountMetaFactory,\n getAddressFromResolvedInstructionAccount,\n type ResolvedInstructionAccount,\n} from '@solana/program-client-core';\nimport { CPMM_PROGRAM_ADDRESS } from '../programs';\n\nexport const COLLECT_PROTOCOL_FEES_DISCRIMINATOR = new Uint8Array([\n 22, 67, 23, 98, 150, 178, 70, 220,\n]);\n\nexport function getCollectProtocolFeesDiscriminatorBytes() {\n return fixEncoderSize(getBytesEncoder(), 8).encode(\n COLLECT_PROTOCOL_FEES_DISCRIMINATOR,\n );\n}\n\nexport type CollectProtocolFeesInstruction<\n TProgram extends string = typeof CPMM_PROGRAM_ADDRESS,\n TAccountConfig extends string | AccountMeta<string> = string,\n TAccountPool extends string | AccountMeta<string> = string,\n TAccountProtocolFeePosition extends string | AccountMeta<string> = string,\n TAccountAdmin extends string | AccountMeta<string> = string,\n TAccountAuthority extends string | AccountMeta<string> = string,\n TAccountVault0 extends string | AccountMeta<string> = string,\n TAccountVault1 extends string | AccountMeta<string> = string,\n TAccountToken0Mint extends string | AccountMeta<string> = string,\n TAccountToken1Mint extends string | AccountMeta<string> = string,\n TAccountRecipient0 extends string | AccountMeta<string> = string,\n TAccountRecipient1 extends string | AccountMeta<string> = string,\n TAccountToken0Program extends string | AccountMeta<string> = string,\n TAccountToken1Program extends string | AccountMeta<string> = string,\n TRemainingAccounts extends readonly AccountMeta<string>[] = [],\n> = Instruction<TProgram> &\n InstructionWithData<ReadonlyUint8Array> &\n InstructionWithAccounts<\n [\n TAccountConfig extends string\n ? ReadonlyAccount<TAccountConfig>\n : TAccountConfig,\n TAccountPool extends string\n ? WritableAccount<TAccountPool>\n : TAccountPool,\n TAccountProtocolFeePosition extends string\n ? WritableAccount<TAccountProtocolFeePosition>\n : TAccountProtocolFeePosition,\n TAccountAdmin extends string\n ? ReadonlySignerAccount<TAccountAdmin> &\n AccountSignerMeta<TAccountAdmin>\n : TAccountAdmin,\n TAccountAuthority extends string\n ? ReadonlyAccount<TAccountAuthority>\n : TAccountAuthority,\n TAccountVault0 extends string\n ? WritableAccount<TAccountVault0>\n : TAccountVault0,\n TAccountVault1 extends string\n ? WritableAccount<TAccountVault1>\n : TAccountVault1,\n TAccountToken0Mint extends string\n ? ReadonlyAccount<TAccountToken0Mint>\n : TAccountToken0Mint,\n TAccountToken1Mint extends string\n ? ReadonlyAccount<TAccountToken1Mint>\n : TAccountToken1Mint,\n TAccountRecipient0 extends string\n ? WritableAccount<TAccountRecipient0>\n : TAccountRecipient0,\n TAccountRecipient1 extends string\n ? WritableAccount<TAccountRecipient1>\n : TAccountRecipient1,\n TAccountToken0Program extends string\n ? ReadonlyAccount<TAccountToken0Program>\n : TAccountToken0Program,\n TAccountToken1Program extends string\n ? ReadonlyAccount<TAccountToken1Program>\n : TAccountToken1Program,\n ...TRemainingAccounts,\n ]\n >;\n\nexport type CollectProtocolFeesInstructionData = {\n discriminator: ReadonlyUint8Array;\n max0: bigint;\n max1: bigint;\n};\n\nexport type CollectProtocolFeesInstructionDataArgs = {\n max0: number | bigint;\n max1: number | bigint;\n};\n\nexport function getCollectProtocolFeesInstructionDataEncoder(): FixedSizeEncoder<CollectProtocolFeesInstructionDataArgs> {\n return transformEncoder(\n getStructEncoder([\n ['discriminator', fixEncoderSize(getBytesEncoder(), 8)],\n ['max0', getU64Encoder()],\n ['max1', getU64Encoder()],\n ]),\n (value) => ({\n ...value,\n discriminator: COLLECT_PROTOCOL_FEES_DISCRIMINATOR,\n }),\n );\n}\n\nexport function getCollectProtocolFeesInstructionDataDecoder(): FixedSizeDecoder<CollectProtocolFeesInstructionData> {\n return getStructDecoder([\n ['discriminator', fixDecoderSize(getBytesDecoder(), 8)],\n ['max0', getU64Decoder()],\n ['max1', getU64Decoder()],\n ]);\n}\n\nexport function getCollectProtocolFeesInstructionDataCodec(): FixedSizeCodec<\n CollectProtocolFeesInstructionDataArgs,\n CollectProtocolFeesInstructionData\n> {\n return combineCodec(\n getCollectProtocolFeesInstructionDataEncoder(),\n getCollectProtocolFeesInstructionDataDecoder(),\n );\n}\n\nexport type CollectProtocolFeesAsyncInput<\n TAccountConfig extends string = string,\n TAccountPool extends string = string,\n TAccountProtocolFeePosition extends string = string,\n TAccountAdmin extends string = string,\n TAccountAuthority extends string = string,\n TAccountVault0 extends string = string,\n TAccountVault1 extends string = string,\n TAccountToken0Mint extends string = string,\n TAccountToken1Mint extends string = string,\n TAccountRecipient0 extends string = string,\n TAccountRecipient1 extends string = string,\n TAccountToken0Program extends string = string,\n TAccountToken1Program extends string = string,\n> = {\n config: Address<TAccountConfig>;\n pool: Address<TAccountPool>;\n protocolFeePosition: Address<TAccountProtocolFeePosition>;\n admin: TransactionSigner<TAccountAdmin>;\n authority?: Address<TAccountAuthority>;\n vault0: Address<TAccountVault0>;\n vault1: Address<TAccountVault1>;\n token0Mint: Address<TAccountToken0Mint>;\n token1Mint: Address<TAccountToken1Mint>;\n recipient0: Address<TAccountRecipient0>;\n recipient1: Address<TAccountRecipient1>;\n token0Program: Address<TAccountToken0Program>;\n token1Program: Address<TAccountToken1Program>;\n max0: CollectProtocolFeesInstructionDataArgs['max0'];\n max1: CollectProtocolFeesInstructionDataArgs['max1'];\n};\n\nexport async function getCollectProtocolFeesInstructionAsync<\n TAccountConfig extends string,\n TAccountPool extends string,\n TAccountProtocolFeePosition extends string,\n TAccountAdmin extends string,\n TAccountAuthority extends string,\n TAccountVault0 extends string,\n TAccountVault1 extends string,\n TAccountToken0Mint extends string,\n TAccountToken1Mint extends string,\n TAccountRecipient0 extends string,\n TAccountRecipient1 extends string,\n TAccountToken0Program extends string,\n TAccountToken1Program extends string,\n TProgramAddress extends Address = typeof CPMM_PROGRAM_ADDRESS,\n>(\n input: CollectProtocolFeesAsyncInput<\n TAccountConfig,\n TAccountPool,\n TAccountProtocolFeePosition,\n TAccountAdmin,\n TAccountAuthority,\n TAccountVault0,\n TAccountVault1,\n TAccountToken0Mint,\n TAccountToken1Mint,\n TAccountRecipient0,\n TAccountRecipient1,\n TAccountToken0Program,\n TAccountToken1Program\n >,\n config?: { programAddress?: TProgramAddress },\n): Promise<\n CollectProtocolFeesInstruction<\n TProgramAddress,\n TAccountConfig,\n TAccountPool,\n TAccountProtocolFeePosition,\n TAccountAdmin,\n TAccountAuthority,\n TAccountVault0,\n TAccountVault1,\n TAccountToken0Mint,\n TAccountToken1Mint,\n TAccountRecipient0,\n TAccountRecipient1,\n TAccountToken0Program,\n TAccountToken1Program\n >\n> {\n // Program address.\n const programAddress = config?.programAddress ?? CPMM_PROGRAM_ADDRESS;\n\n // Original accounts.\n const originalAccounts = {\n config: { value: input.config ?? null, isWritable: false },\n pool: { value: input.pool ?? null, isWritable: true },\n protocolFeePosition: {\n value: input.protocolFeePosition ?? null,\n isWritable: true,\n },\n admin: { value: input.admin ?? null, isWritable: false },\n authority: { value: input.authority ?? null, isWritable: false },\n vault0: { value: input.vault0 ?? null, isWritable: true },\n vault1: { value: input.vault1 ?? null, isWritable: true },\n token0Mint: { value: input.token0Mint ?? null, isWritable: false },\n token1Mint: { value: input.token1Mint ?? null, isWritable: false },\n recipient0: { value: input.recipient0 ?? null, isWritable: true },\n recipient1: { value: input.recipient1 ?? null, isWritable: true },\n token0Program: { value: input.token0Program ?? null, isWritable: false },\n token1Program: { value: input.token1Program ?? null, isWritable: false },\n };\n const accounts = originalAccounts as Record<\n keyof typeof originalAccounts,\n ResolvedInstructionAccount\n >;\n\n // Original args.\n const args = { ...input };\n\n // Resolve default values.\n if (!accounts.authority.value) {\n accounts.authority.value = await getProgramDerivedAddress({\n programAddress,\n seeds: [\n getBytesEncoder().encode(\n new Uint8Array([97, 117, 116, 104, 111, 114, 105, 116, 121]),\n ),\n getAddressEncoder().encode(\n getAddressFromResolvedInstructionAccount('pool', accounts.pool.value),\n ),\n ],\n });\n }\n\n const getAccountMeta = getAccountMetaFactory(programAddress, 'programId');\n return Object.freeze({\n accounts: [\n getAccountMeta('config', accounts.config),\n getAccountMeta('pool', accounts.pool),\n getAccountMeta('protocolFeePosition', accounts.protocolFeePosition),\n getAccountMeta('admin', accounts.admin),\n getAccountMeta('authority', accounts.authority),\n getAccountMeta('vault0', accounts.vault0),\n getAccountMeta('vault1', accounts.vault1),\n getAccountMeta('token0Mint', accounts.token0Mint),\n getAccountMeta('token1Mint', accounts.token1Mint),\n getAccountMeta('recipient0', accounts.recipient0),\n getAccountMeta('recipient1', accounts.recipient1),\n getAccountMeta('token0Program', accounts.token0Program),\n getAccountMeta('token1Program', accounts.token1Program),\n ],\n data: getCollectProtocolFeesInstructionDataEncoder().encode(\n args as CollectProtocolFeesInstructionDataArgs,\n ),\n programAddress,\n } as CollectProtocolFeesInstruction<\n TProgramAddress,\n TAccountConfig,\n TAccountPool,\n TAccountProtocolFeePosition,\n TAccountAdmin,\n TAccountAuthority,\n TAccountVault0,\n TAccountVault1,\n TAccountToken0Mint,\n TAccountToken1Mint,\n TAccountRecipient0,\n TAccountRecipient1,\n TAccountToken0Program,\n TAccountToken1Program\n >);\n}\n\nexport type CollectProtocolFeesInput<\n TAccountConfig extends string = string,\n TAccountPool extends string = string,\n TAccountProtocolFeePosition extends string = string,\n TAccountAdmin extends string = string,\n TAccountAuthority extends string = string,\n TAccountVault0 extends string = string,\n TAccountVault1 extends string = string,\n TAccountToken0Mint extends string = string,\n TAccountToken1Mint extends string = string,\n TAccountRecipient0 extends string = string,\n TAccountRecipient1 extends string = string,\n TAccountToken0Program extends string = string,\n TAccountToken1Program extends string = string,\n> = {\n config: Address<TAccountConfig>;\n pool: Address<TAccountPool>;\n protocolFeePosition: Address<TAccountProtocolFeePosition>;\n admin: TransactionSigner<TAccountAdmin>;\n authority: Address<TAccountAuthority>;\n vault0: Address<TAccountVault0>;\n vault1: Address<TAccountVault1>;\n token0Mint: Address<TAccountToken0Mint>;\n token1Mint: Address<TAccountToken1Mint>;\n recipient0: Address<TAccountRecipient0>;\n recipient1: Address<TAccountRecipient1>;\n token0Program: Address<TAccountToken0Program>;\n token1Program: Address<TAccountToken1Program>;\n max0: CollectProtocolFeesInstructionDataArgs['max0'];\n max1: CollectProtocolFeesInstructionDataArgs['max1'];\n};\n\nexport function getCollectProtocolFeesInstruction<\n TAccountConfig extends string,\n TAccountPool extends string,\n TAccountProtocolFeePosition extends string,\n TAccountAdmin extends string,\n TAccountAuthority extends string,\n TAccountVault0 extends string,\n TAccountVault1 extends string,\n TAccountToken0Mint extends string,\n TAccountToken1Mint extends string,\n TAccountRecipient0 extends string,\n TAccountRecipient1 extends string,\n TAccountToken0Program extends string,\n TAccountToken1Program extends string,\n TProgramAddress extends Address = typeof CPMM_PROGRAM_ADDRESS,\n>(\n input: CollectProtocolFeesInput<\n TAccountConfig,\n TAccountPool,\n TAccountProtocolFeePosition,\n TAccountAdmin,\n TAccountAuthority,\n TAccountVault0,\n TAccountVault1,\n TAccountToken0Mint,\n TAccountToken1Mint,\n TAccountRecipient0,\n TAccountRecipient1,\n TAccountToken0Program,\n TAccountToken1Program\n >,\n config?: { programAddress?: TProgramAddress },\n): CollectProtocolFeesInstruction<\n TProgramAddress,\n TAccountConfig,\n TAccountPool,\n TAccountProtocolFeePosition,\n TAccountAdmin,\n TAccountAuthority,\n TAccountVault0,\n TAccountVault1,\n TAccountToken0Mint,\n TAccountToken1Mint,\n TAccountRecipient0,\n TAccountRecipient1,\n TAccountToken0Program,\n TAccountToken1Program\n> {\n // Program address.\n const programAddress = config?.programAddress ?? CPMM_PROGRAM_ADDRESS;\n\n // Original accounts.\n const originalAccounts = {\n config: { value: input.config ?? null, isWritable: false },\n pool: { value: input.pool ?? null, isWritable: true },\n protocolFeePosition: {\n value: input.protocolFeePosition ?? null,\n isWritable: true,\n },\n admin: { value: input.admin ?? null, isWritable: false },\n authority: { value: input.authority ?? null, isWritable: false },\n vault0: { value: input.vault0 ?? null, isWritable: true },\n vault1: { value: input.vault1 ?? null, isWritable: true },\n token0Mint: { value: input.token0Mint ?? null, isWritable: false },\n token1Mint: { value: input.token1Mint ?? null, isWritable: false },\n recipient0: { value: input.recipient0 ?? null, isWritable: true },\n recipient1: { value: input.recipient1 ?? null, isWritable: true },\n token0Program: { value: input.token0Program ?? null, isWritable: false },\n token1Program: { value: input.token1Program ?? null, isWritable: false },\n };\n const accounts = originalAccounts as Record<\n keyof typeof originalAccounts,\n ResolvedInstructionAccount\n >;\n\n // Original args.\n const args = { ...input };\n\n const getAccountMeta = getAccountMetaFactory(programAddress, 'programId');\n return Object.freeze({\n accounts: [\n getAccountMeta('config', accounts.config),\n getAccountMeta('pool', accounts.pool),\n getAccountMeta('protocolFeePosition', accounts.protocolFeePosition),\n getAccountMeta('admin', accounts.admin),\n getAccountMeta('authority', accounts.authority),\n getAccountMeta('vault0', accounts.vault0),\n getAccountMeta('vault1', accounts.vault1),\n getAccountMeta('token0Mint', accounts.token0Mint),\n getAccountMeta('token1Mint', accounts.token1Mint),\n getAccountMeta('recipient0', accounts.recipient0),\n getAccountMeta('recipient1', accounts.recipient1),\n getAccountMeta('token0Program', accounts.token0Program),\n getAccountMeta('token1Program', accounts.token1Program),\n ],\n data: getCollectProtocolFeesInstructionDataEncoder().encode(\n args as CollectProtocolFeesInstructionDataArgs,\n ),\n programAddress,\n } as CollectProtocolFeesInstruction<\n TProgramAddress,\n TAccountConfig,\n TAccountPool,\n TAccountProtocolFeePosition,\n TAccountAdmin,\n TAccountAuthority,\n TAccountVault0,\n TAccountVault1,\n TAccountToken0Mint,\n TAccountToken1Mint,\n TAccountRecipient0,\n TAccountRecipient1,\n TAccountToken0Program,\n TAccountToken1Program\n >);\n}\n\nexport type ParsedCollectProtocolFeesInstruction<\n TProgram extends string = typeof CPMM_PROGRAM_ADDRESS,\n TAccountMetas extends readonly AccountMeta[] = readonly AccountMeta[],\n> = {\n programAddress: Address<TProgram>;\n accounts: {\n config: TAccountMetas[0];\n pool: TAccountMetas[1];\n protocolFeePosition: TAccountMetas[2];\n admin: TAccountMetas[3];\n authority: TAccountMetas[4];\n vault0: TAccountMetas[5];\n vault1: TAccountMetas[6];\n token0Mint: TAccountMetas[7];\n token1Mint: TAccountMetas[8];\n recipient0: TAccountMetas[9];\n recipient1: TAccountMetas[10];\n token0Program: TAccountMetas[11];\n token1Program: TAccountMetas[12];\n };\n data: CollectProtocolFeesInstructionData;\n};\n\nexport function parseCollectProtocolFeesInstruction<\n TProgram extends string,\n TAccountMetas extends readonly AccountMeta[],\n>(\n instruction: Instruction<TProgram> &\n InstructionWithAccounts<TAccountMetas> &\n InstructionWithData<ReadonlyUint8Array>,\n): ParsedCollectProtocolFeesInstruction<TProgram, TAccountMetas> {\n if (instruction.accounts.length < 13) {\n throw new SolanaError(\n SOLANA_ERROR__PROGRAM_CLIENTS__INSUFFICIENT_ACCOUNT_METAS,\n {\n actualAccountMetas: instruction.accounts.length,\n expectedAccountMetas: 13,\n },\n );\n }\n let accountIndex = 0;\n const getNextAccount = () => {\n const accountMeta = (instruction.accounts as TAccountMetas)[accountIndex]!;\n accountIndex += 1;\n return accountMeta;\n };\n return {\n programAddress: instruction.programAddress,\n accounts: {\n config: getNextAccount(),\n pool: getNextAccount(),\n protocolFeePosition: getNextAccount(),\n admin: getNextAccount(),\n authority: getNextAccount(),\n vault0: getNextAccount(),\n vault1: getNextAccount(),\n token0Mint: getNextAccount(),\n token1Mint: getNextAccount(),\n recipient0: getNextAccount(),\n recipient1: getNextAccount(),\n token0Program: getNextAccount(),\n token1Program: getNextAccount(),\n },\n data: getCollectProtocolFeesInstructionDataDecoder().decode(\n instruction.data,\n ),\n };\n}\n","/**\n * This code was AUTOGENERATED using the Codama library.\n * Please DO NOT EDIT THIS FILE, instead use visitors\n * to add features, then rerun Codama to update it.\n *\n * @see https://github.com/codama-idl/codama\n */\n\nimport {\n combineCodec,\n fixDecoderSize,\n fixEncoderSize,\n getAddressEncoder,\n getBytesDecoder,\n getBytesEncoder,\n getProgramDerivedAddress,\n getStructDecoder,\n getStructEncoder,\n getU64Decoder,\n getU64Encoder,\n SOLANA_ERROR__PROGRAM_CLIENTS__INSUFFICIENT_ACCOUNT_METAS,\n SolanaError,\n transformEncoder,\n type AccountMeta,\n type AccountSignerMeta,\n type Address,\n type FixedSizeCodec,\n type FixedSizeDecoder,\n type FixedSizeEncoder,\n type Instruction,\n type InstructionWithAccounts,\n type InstructionWithData,\n type ReadonlyAccount,\n type ReadonlySignerAccount,\n type ReadonlyUint8Array,\n type TransactionSigner,\n type WritableAccount,\n type WritableSignerAccount,\n} from '@solana/kit';\nimport {\n getAccountMetaFactory,\n getAddressFromResolvedInstructionAccount,\n getNonNullResolvedInstructionInput,\n type ResolvedInstructionAccount,\n} from '@solana/program-client-core';\nimport { CPMM_PROGRAM_ADDRESS } from '../programs';\n\nexport const CREATE_POSITION_DISCRIMINATOR = new Uint8Array([\n 48, 215, 197, 153, 96, 203, 180, 133,\n]);\n\nexport function getCreatePositionDiscriminatorBytes() {\n return fixEncoderSize(getBytesEncoder(), 8).encode(\n CREATE_POSITION_DISCRIMINATOR,\n );\n}\n\nexport type CreatePositionInstruction<\n TProgram extends string = typeof CPMM_PROGRAM_ADDRESS,\n TAccountPool extends string | AccountMeta<string> = string,\n TAccountPosition extends string | AccountMeta<string> = string,\n TAccountOwner extends string | AccountMeta<string> = string,\n TAccountPayer extends string | AccountMeta<string> = string,\n TAccountSystemProgram extends string | AccountMeta<string> =\n '11111111111111111111111111111111',\n TRemainingAccounts extends readonly AccountMeta<string>[] = [],\n> = Instruction<TProgram> &\n InstructionWithData<ReadonlyUint8Array> &\n InstructionWithAccounts<\n [\n TAccountPool extends string\n ? ReadonlyAccount<TAccountPool>\n : TAccountPool,\n TAccountPosition extends string\n ? WritableAccount<TAccountPosition>\n : TAccountPosition,\n TAccountOwner extends string\n ? ReadonlySignerAccount<TAccountOwner> &\n AccountSignerMeta<TAccountOwner>\n : TAccountOwner,\n TAccountPayer extends string\n ? WritableSignerAccount<TAccountPayer> &\n AccountSignerMeta<TAccountPayer>\n : TAccountPayer,\n TAccountSystemProgram extends string\n ? ReadonlyAccount<TAccountSystemProgram>\n : TAccountSystemProgram,\n ...TRemainingAccounts,\n ]\n >;\n\nexport type CreatePositionInstructionData = {\n discriminator: ReadonlyUint8Array;\n positionId: bigint;\n};\n\nexport type CreatePositionInstructionDataArgs = { positionId: number | bigint };\n\nexport function getCreatePositionInstructionDataEncoder(): FixedSizeEncoder<CreatePositionInstructionDataArgs> {\n return transformEncoder(\n getStructEncoder([\n ['discriminator', fixEncoderSize(getBytesEncoder(), 8)],\n ['positionId', getU64Encoder()],\n ]),\n (value) => ({ ...value, discriminator: CREATE_POSITION_DISCRIMINATOR }),\n );\n}\n\nexport function getCreatePositionInstructionDataDecoder(): FixedSizeDecoder<CreatePositionInstructionData> {\n return getStructDecoder([\n ['discriminator', fixDecoderSize(getBytesDecoder(), 8)],\n ['positionId', getU64Decoder()],\n ]);\n}\n\nexport function getCreatePositionInstructionDataCodec(): FixedSizeCodec<\n CreatePositionInstructionDataArgs,\n CreatePositionInstructionData\n> {\n return combineCodec(\n getCreatePositionInstructionDataEncoder(),\n getCreatePositionInstructionDataDecoder(),\n );\n}\n\nexport type CreatePositionAsyncInput<\n TAccountPool extends string = string,\n TAccountPosition extends string = string,\n TAccountOwner extends string = string,\n TAccountPayer extends string = string,\n TAccountSystemProgram extends string = string,\n> = {\n pool: Address<TAccountPool>;\n position?: Address<TAccountPosition>;\n owner: TransactionSigner<TAccountOwner>;\n payer: TransactionSigner<TAccountPayer>;\n systemProgram?: Address<TAccountSystemProgram>;\n positionId: CreatePositionInstructionDataArgs['positionId'];\n};\n\nexport async function getCreatePositionInstructionAsync<\n TAccountPool extends string,\n TAccountPosition extends string,\n TAccountOwner extends string,\n TAccountPayer extends string,\n TAccountSystemProgram extends string,\n TProgramAddress extends Address = typeof CPMM_PROGRAM_ADDRESS,\n>(\n input: CreatePositionAsyncInput<\n TAccountPool,\n TAccountPosition,\n TAccountOwner,\n TAccountPayer,\n TAccountSystemProgram\n >,\n config?: { programAddress?: TProgramAddress },\n): Promise<\n CreatePositionInstruction<\n TProgramAddress,\n TAccountPool,\n TAccountPosition,\n TAccountOwner,\n TAccountPayer,\n TAccountSystemProgram\n >\n> {\n // Program address.\n const programAddress = config?.programAddress ?? CPMM_PROGRAM_ADDRESS;\n\n // Original accounts.\n const originalAccounts = {\n pool: { value: input.pool ?? null, isWritable: false },\n position: { value: input.position ?? null, isWritable: true },\n owner: { value: input.owner ?? null, isWritable: false },\n payer: { value: input.payer ?? null, isWritable: true },\n systemProgram: { value: input.systemProgram ?? null, isWritable: false },\n };\n const accounts = originalAccounts as Record<\n keyof typeof originalAccounts,\n ResolvedInstructionAccount\n >;\n\n // Original args.\n const args = { ...input };\n\n // Resolve default values.\n if (!accounts.position.value) {\n accounts.position.value = await getProgramDerivedAddress({\n programAddress,\n seeds: [\n getBytesEncoder().encode(\n new Uint8Array([112, 111, 115, 105, 116, 105, 111, 110]),\n ),\n getAddressEncoder().encode(\n getAddressFromResolvedInstructionAccount('pool', accounts.pool.value),\n ),\n getAddressEncoder().encode(\n getAddressFromResolvedInstructionAccount(\n 'owner',\n accounts.owner.value,\n ),\n ),\n getU64Encoder().encode(\n getNonNullResolvedInstructionInput('positionId', args.positionId),\n ),\n ],\n });\n }\n if (!accounts.systemProgram.value) {\n accounts.systemProgram.value =\n '11111111111111111111111111111111' as Address<'11111111111111111111111111111111'>;\n }\n\n const getAccountMeta = getAccountMetaFactory(programAddress, 'programId');\n return Object.freeze({\n accounts: [\n getAccountMeta('pool', accounts.pool),\n getAccountMeta('position', accounts.position),\n getAccountMeta('owner', accounts.owner),\n getAccountMeta('payer', accounts.payer),\n getAccountMeta('systemProgram', accounts.systemProgram),\n ],\n data: getCreatePositionInstructionDataEncoder().encode(\n args as CreatePositionInstructionDataArgs,\n ),\n programAddress,\n } as CreatePositionInstruction<\n TProgramAddress,\n TAccountPool,\n TAccountPosition,\n TAccountOwner,\n TAccountPayer,\n TAccountSystemProgram\n >);\n}\n\nexport type CreatePositionInput<\n TAccountPool extends string = string,\n TAccountPosition extends string = string,\n TAccountOwner extends string = string,\n TAccountPayer extends string = string,\n TAccountSystemProgram extends string = string,\n> = {\n pool: Address<TAccountPool>;\n position: Address<TAccountPosition>;\n owner: TransactionSigner<TAccountOwner>;\n payer: TransactionSigner<TAccountPayer>;\n systemProgram?: Address<TAccountSystemProgram>;\n positionId: CreatePositionInstructionDataArgs['positionId'];\n};\n\nexport function getCreatePositionInstruction<\n TAccountPool extends string,\n TAccountPosition extends string,\n TAccountOwner extends string,\n TAccountPayer extends string,\n TAccountSystemProgram extends string,\n TProgramAddress extends Address = typeof CPMM_PROGRAM_ADDRESS,\n>(\n input: CreatePositionInput<\n TAccountPool,\n TAccountPosition,\n TAccountOwner,\n TAccountPayer,\n TAccountSystemProgram\n >,\n config?: { programAddress?: TProgramAddress },\n): CreatePositionInstruction<\n TProgramAddress,\n TAccountPool,\n TAccountPosition,\n TAccountOwner,\n TAccountPayer,\n TAccountSystemProgram\n> {\n // Program address.\n const programAddress = config?.programAddress ?? CPMM_PROGRAM_ADDRESS;\n\n // Original accounts.\n const originalAccounts = {\n pool: { value: input.pool ?? null, isWritable: false },\n position: { value: input.position ?? null, isWritable: true },\n owner: { value: input.owner ?? null, isWritable: false },\n payer: { value: input.payer ?? null, isWritable: true },\n systemProgram: { value: input.systemProgram ?? null, isWritable: false },\n };\n const accounts = originalAccounts as Record<\n keyof typeof originalAccounts,\n ResolvedInstructionAccount\n >;\n\n // Original args.\n const args = { ...input };\n\n // Resolve default values.\n if (!accounts.systemProgram.value) {\n accounts.systemProgram.value =\n '11111111111111111111111111111111' as Address<'11111111111111111111111111111111'>;\n }\n\n const getAccountMeta = getAccountMetaFactory(programAddress, 'programId');\n return Object.freeze({\n accounts: [\n getAccountMeta('pool', accounts.pool),\n getAccountMeta('position', accounts.position),\n getAccountMeta('owner', accounts.owner),\n getAccountMeta('payer', accounts.payer),\n getAccountMeta('systemProgram', accounts.systemProgram),\n ],\n data: getCreatePositionInstructionDataEncoder().encode(\n args as CreatePositionInstructionDataArgs,\n ),\n programAddress,\n } as CreatePositionInstruction<\n TProgramAddress,\n TAccountPool,\n TAccountPosition,\n TAccountOwner,\n TAccountPayer,\n TAccountSystemProgram\n >);\n}\n\nexport type ParsedCreatePositionInstruction<\n TProgram extends string = typeof CPMM_PROGRAM_ADDRESS,\n TAccountMetas extends readonly AccountMeta[] = readonly AccountMeta[],\n> = {\n programAddress: Address<TProgram>;\n accounts: {\n pool: TAccountMetas[0];\n position: TAccountMetas[1];\n owner: TAccountMetas[2];\n payer: TAccountMetas[3];\n systemProgram: TAccountMetas[4];\n };\n data: CreatePositionInstructionData;\n};\n\nexport function parseCreatePositionInstruction<\n TProgram extends string,\n TAccountMetas extends readonly AccountMeta[],\n>(\n instruction: Instruction<TProgram> &\n InstructionWithAccounts<TAccountMetas> &\n InstructionWithData<ReadonlyUint8Array>,\n): ParsedCreatePositionInstruction<TProgram, TAccountMetas> {\n if (instruction.accounts.length < 5) {\n throw new SolanaError(\n SOLANA_ERROR__PROGRAM_CLIENTS__INSUFFICIENT_ACCOUNT_METAS,\n {\n actualAccountMetas: instruction.accounts.length,\n expectedAccountMetas: 5,\n },\n );\n }\n let accountIndex = 0;\n const getNextAccount = () => {\n const accountMeta = (instruction.accounts as TAccountMetas)[accountIndex]!;\n accountIndex += 1;\n return accountMeta;\n };\n return {\n programAddress: instruction.programAddress,\n accounts: {\n pool: getNextAccount(),\n position: getNextAccount(),\n owner: getNextAccount(),\n payer: getNextAccount(),\n systemProgram: getNextAccount(),\n },\n data: getCreatePositionInstructionDataDecoder().decode(instruction.data),\n };\n}\n","/**\n * This code was AUTOGENERATED using the Codama library.\n * Please DO NOT EDIT THIS FILE, instead use visitors\n * to add features, then rerun Codama to update it.\n *\n * @see https://github.com/codama-idl/codama\n */\n\nimport {\n combineCodec,\n fixDecoderSize,\n fixEncoderSize,\n getAddressDecoder,\n getAddressEncoder,\n getArrayDecoder,\n getArrayEncoder,\n getBooleanDecoder,\n getBooleanEncoder,\n getBytesDecoder,\n getBytesEncoder,\n getProgramDerivedAddress,\n getStructDecoder,\n getStructEncoder,\n getU16Decoder,\n getU16Encoder,\n SOLANA_ERROR__PROGRAM_CLIENTS__INSUFFICIENT_ACCOUNT_METAS,\n SolanaError,\n transformEncoder,\n type AccountMeta,\n type AccountSignerMeta,\n type Address,\n type Codec,\n type Decoder,\n type Encoder,\n type Instruction,\n type InstructionWithAccounts,\n type InstructionWithData,\n type ReadonlyAccount,\n type ReadonlyUint8Array,\n type TransactionSigner,\n type WritableAccount,\n type WritableSignerAccount,\n} from '@solana/kit';\nimport {\n getAccountMetaFactory,\n type ResolvedInstructionAccount,\n} from '@solana/program-client-core';\nimport { CPMM_PROGRAM_ADDRESS } from '../programs';\n\nexport const INITIALIZE_CONFIG_DISCRIMINATOR = new Uint8Array([\n 208, 127, 21, 1, 194, 190, 196, 70,\n]);\n\nexport function getInitializeConfigDiscriminatorBytes() {\n return fixEncoderSize(getBytesEncoder(), 8).encode(\n INITIALIZE_CONFIG_DISCRIMINATOR,\n );\n}\n\nexport type InitializeConfigInstruction<\n TProgram extends string = typeof CPMM_PROGRAM_ADDRESS,\n TAccountConfig extends string | AccountMeta<string> = string,\n TAccountProgramData extends string | AccountMeta<string> = string,\n TAccountPayer extends string | AccountMeta<string> = string,\n TAccountSystemProgram extends string | AccountMeta<string> =\n '11111111111111111111111111111111',\n TRemainingAccounts extends readonly AccountMeta<string>[] = [],\n> = Instruction<TProgram> &\n InstructionWithData<ReadonlyUint8Array> &\n InstructionWithAccounts<\n [\n TAccountConfig extends string\n ? WritableAccount<TAccountConfig>\n : TAccountConfig,\n TAccountProgramData extends string\n ? ReadonlyAccount<TAccountProgramData>\n : TAccountProgramData,\n TAccountPayer extends string\n ? WritableSignerAccount<TAccountPayer> &\n AccountSignerMeta<TAccountPayer>\n : TAccountPayer,\n TAccountSystemProgram extends string\n ? ReadonlyAccount<TAccountSystemProgram>\n : TAccountSystemProgram,\n ...TRemainingAccounts,\n ]\n >;\n\nexport type InitializeConfigInstructionData = {\n discriminator: ReadonlyUint8Array;\n admin: Address;\n maxSwapFeeBps: number;\n maxFeeSplitBps: number;\n protocolFeeEnabled: boolean;\n protocolFeeBps: number;\n hookAllowlist: Array<Address>;\n};\n\nexport type InitializeConfigInstructionDataArgs = {\n admin: Address;\n maxSwapFeeBps: number;\n maxFeeSplitBps: number;\n protocolFeeEnabled: boolean;\n protocolFeeBps: number;\n hookAllowlist: Array<Address>;\n};\n\nexport function getInitializeConfigInstructionDataEncoder(): Encoder<InitializeConfigInstructionDataArgs> {\n return transformEncoder(\n getStructEncoder([\n ['discriminator', fixEncoderSize(getBytesEncoder(), 8)],\n ['admin', getAddressEncoder()],\n ['maxSwapFeeBps', getU16Encoder()],\n ['maxFeeSplitBps', getU16Encoder()],\n ['protocolFeeEnabled', getBooleanEncoder()],\n ['protocolFeeBps', getU16Encoder()],\n ['hookAllowlist', getArrayEncoder(getAddressEncoder())],\n ]),\n (value) => ({ ...value, discriminator: INITIALIZE_CONFIG_DISCRIMINATOR }),\n );\n}\n\nexport function getInitializeConfigInstructionDataDecoder(): Decoder<InitializeConfigInstructionData> {\n return getStructDecoder([\n ['discriminator', fixDecoderSize(getBytesDecoder(), 8)],\n ['admin', getAddressDecoder()],\n ['maxSwapFeeBps', getU16Decoder()],\n ['maxFeeSplitBps', getU16Decoder()],\n ['protocolFeeEnabled', getBooleanDecoder()],\n ['protocolFeeBps', getU16Decoder()],\n ['hookAllowlist', getArrayDecoder(getAddressDecoder())],\n ]);\n}\n\nexport function getInitializeConfigInstructionDataCodec(): Codec<\n InitializeConfigInstructionDataArgs,\n InitializeConfigInstructionData\n> {\n return combineCodec(\n getInitializeConfigInstructionDataEncoder(),\n getInitializeConfigInstructionDataDecoder(),\n );\n}\n\nexport type InitializeConfigAsyncInput<\n TAccountConfig extends string = string,\n TAccountProgramData extends string = string,\n TAccountPayer extends string = string,\n TAccountSystemProgram extends string = string,\n> = {\n config?: Address<TAccountConfig>;\n programData: Address<TAccountProgramData>;\n payer: TransactionSigner<TAccountPayer>;\n systemProgram?: Address<TAccountSystemProgram>;\n admin: InitializeConfigInstructionDataArgs['admin'];\n maxSwapFeeBps: InitializeConfigInstructionDataArgs['maxSwapFeeBps'];\n maxFeeSplitBps: InitializeConfigInstructionDataArgs['maxFeeSplitBps'];\n protocolFeeEnabled: InitializeConfigInstructionDataArgs['protocolFeeEnabled'];\n protocolFeeBps: InitializeConfigInstructionDataArgs['protocolFeeBps'];\n hookAllowlist: InitializeConfigInstructionDataArgs['hookAllowlist'];\n};\n\nexport async function getInitializeConfigInstructionAsync<\n TAccountConfig extends string,\n TAccountProgramData extends string,\n TAccountPayer extends string,\n TAccountSystemProgram extends string,\n TProgramAddress extends Address = typeof CPMM_PROGRAM_ADDRESS,\n>(\n input: InitializeConfigAsyncInput<\n TAccountConfig,\n TAccountProgramData,\n TAccountPayer,\n TAccountSystemProgram\n >,\n config?: { programAddress?: TProgramAddress },\n): Promise<\n InitializeConfigInstruction<\n TProgramAddress,\n TAccountConfig,\n TAccountProgramData,\n TAccountPayer,\n TAccountSystemProgram\n >\n> {\n // Program address.\n const programAddress = config?.programAddress ?? CPMM_PROGRAM_ADDRESS;\n\n // Original accounts.\n const originalAccounts = {\n config: { value: input.config ?? null, isWritable: true },\n programData: { value: input.programData ?? null, isWritable: false },\n payer: { value: input.payer ?? null, isWritable: true },\n systemProgram: { value: input.systemProgram ?? null, isWritable: false },\n };\n const accounts = originalAccounts as Record<\n keyof typeof originalAccounts,\n ResolvedInstructionAccount\n >;\n\n // Original args.\n const args = { ...input };\n\n // Resolve default values.\n if (!accounts.config.value) {\n accounts.config.value = await getProgramDerivedAddress({\n programAddress,\n seeds: [\n getBytesEncoder().encode(new Uint8Array([99, 111, 110, 102, 105, 103])),\n ],\n });\n }\n if (!accounts.systemProgram.value) {\n accounts.systemProgram.value =\n '11111111111111111111111111111111' as Address<'11111111111111111111111111111111'>;\n }\n\n const getAccountMeta = getAccountMetaFactory(programAddress, 'programId');\n return Object.freeze({\n accounts: [\n getAccountMeta('config', accounts.config),\n getAccountMeta('programData', accounts.programData),\n getAccountMeta('payer', accounts.payer),\n getAccountMeta('systemProgram', accounts.systemProgram),\n ],\n data: getInitializeConfigInstructionDataEncoder().encode(\n args as InitializeConfigInstructionDataArgs,\n ),\n programAddress,\n } as InitializeConfigInstruction<\n TProgramAddress,\n TAccountConfig,\n TAccountProgramData,\n TAccountPayer,\n TAccountSystemProgram\n >);\n}\n\nexport type InitializeConfigInput<\n TAccountConfig extends string = string,\n TAccountProgramData extends string = string,\n TAccountPayer extends string = string,\n TAccountSystemProgram extends string = string,\n> = {\n config: Address<TAccountConfig>;\n programData: Address<TAccountProgramData>;\n payer: TransactionSigner<TAccountPayer>;\n systemProgram?: Address<TAccountSystemProgram>;\n admin: InitializeConfigInstructionDataArgs['admin'];\n maxSwapFeeBps: InitializeConfigInstructionDataArgs['maxSwapFeeBps'];\n maxFeeSplitBps: InitializeConfigInstructionDataArgs['maxFeeSplitBps'];\n protocolFeeEnabled: InitializeConfigInstructionDataArgs['protocolFeeEnabled'];\n protocolFeeBps: InitializeConfigInstructionDataArgs['protocolFeeBps'];\n hookAllowlist: InitializeConfigInstructionDataArgs['hookAllowlist'];\n};\n\nexport function getInitializeConfigInstruction<\n TAccountConfig extends string,\n TAccountProgramData extends string,\n TAccountPayer extends string,\n TAccountSystemProgram extends string,\n TProgramAddress extends Address = typeof CPMM_PROGRAM_ADDRESS,\n>(\n input: InitializeConfigInput<\n TAccountConfig,\n TAccountProgramData,\n TAccountPayer,\n TAccountSystemProgram\n >,\n config?: { programAddress?: TProgramAddress },\n): InitializeConfigInstruction<\n TProgramAddress,\n TAccountConfig,\n TAccountProgramData,\n TAccountPayer,\n TAccountSystemProgram\n> {\n // Program address.\n const programAddress = config?.programAddress ?? CPMM_PROGRAM_ADDRESS;\n\n // Original accounts.\n const originalAccounts = {\n config: { value: input.config ?? null, isWritable: true },\n programData: { value: input.programData ?? null, isWritable: false },\n payer: { value: input.payer ?? null, isWritable: true },\n systemProgram: { value: input.systemProgram ?? null, isWritable: false },\n };\n const accounts = originalAccounts as Record<\n keyof typeof originalAccounts,\n ResolvedInstructionAccount\n >;\n\n // Original args.\n const args = { ...input };\n\n // Resolve default values.\n if (!accounts.systemProgram.value) {\n accounts.systemProgram.value =\n '11111111111111111111111111111111' as Address<'11111111111111111111111111111111'>;\n }\n\n const getAccountMeta = getAccountMetaFactory(programAddress, 'programId');\n return Object.freeze({\n accounts: [\n getAccountMeta('config', accounts.config),\n getAccountMeta('programData', accounts.programData),\n getAccountMeta('payer', accounts.payer),\n getAccountMeta('systemProgram', accounts.systemProgram),\n ],\n data: getInitializeConfigInstructionDataEncoder().encode(\n args as InitializeConfigInstructionDataArgs,\n ),\n programAddress,\n } as InitializeConfigInstruction<\n TProgramAddress,\n TAccountConfig,\n TAccountProgramData,\n TAccountPayer,\n TAccountSystemProgram\n >);\n}\n\nexport type ParsedInitializeConfigInstruction<\n TProgram extends string = typeof CPMM_PROGRAM_ADDRESS,\n TAccountMetas extends readonly AccountMeta[] = readonly AccountMeta[],\n> = {\n programAddress: Address<TProgram>;\n accounts: {\n config: TAccountMetas[0];\n programData: TAccountMetas[1];\n payer: TAccountMetas[2];\n systemProgram: TAccountMetas[3];\n };\n data: InitializeConfigInstructionData;\n};\n\nexport function parseInitializeConfigInstruction<\n TProgram extends string,\n TAccountMetas extends readonly AccountMeta[],\n>(\n instruction: Instruction<TProgram> &\n InstructionWithAccounts<TAccountMetas> &\n InstructionWithData<ReadonlyUint8Array>,\n): ParsedInitializeConfigInstruction<TProgram, TAccountMetas> {\n if (instruction.accounts.length < 4) {\n throw new SolanaError(\n SOLANA_ERROR__PROGRAM_CLIENTS__INSUFFICIENT_ACCOUNT_METAS,\n {\n actualAccountMetas: instruction.accounts.length,\n expectedAccountMetas: 4,\n },\n );\n }\n let accountIndex = 0;\n const getNextAccount = () => {\n const accountMeta = (instruction.accounts as TAccountMetas)[accountIndex]!;\n accountIndex += 1;\n return accountMeta;\n };\n return {\n programAddress: instruction.programAddress,\n accounts: {\n config: getNextAccount(),\n programData: getNextAccount(),\n payer: getNextAccount(),\n systemProgram: getNextAccount(),\n },\n data: getInitializeConfigInstructionDataDecoder().decode(instruction.data),\n };\n}\n","/**\n * This code was AUTOGENERATED using the Codama library.\n * Please DO NOT EDIT THIS FILE, instead use visitors\n * to add features, then rerun Codama to update it.\n *\n * @see https://github.com/codama-idl/codama\n */\n\nimport {\n combineCodec,\n fixDecoderSize,\n fixEncoderSize,\n getAddressEncoder,\n getBytesDecoder,\n getBytesEncoder,\n getProgramDerivedAddress,\n getStructDecoder,\n getStructEncoder,\n getU128Decoder,\n getU128Encoder,\n getU32Decoder,\n getU32Encoder,\n SOLANA_ERROR__PROGRAM_CLIENTS__INSUFFICIENT_ACCOUNT_METAS,\n SolanaError,\n transformEncoder,\n type AccountMeta,\n type AccountSignerMeta,\n type Address,\n type FixedSizeCodec,\n type FixedSizeDecoder,\n type FixedSizeEncoder,\n type Instruction,\n type InstructionWithAccounts,\n type InstructionWithData,\n type ReadonlyAccount,\n type ReadonlySignerAccount,\n type ReadonlyUint8Array,\n type TransactionSigner,\n type WritableAccount,\n type WritableSignerAccount,\n} from '@solana/kit';\nimport {\n getAccountMetaFactory,\n getAddressFromResolvedInstructionAccount,\n type ResolvedInstructionAccount,\n} from '@solana/program-client-core';\nimport { CPMM_PROGRAM_ADDRESS } from '../programs';\n\nexport const INITIALIZE_ORACLE_DISCRIMINATOR = new Uint8Array([\n 144, 223, 131, 120, 196, 253, 181, 99,\n]);\n\nexport function getInitializeOracleDiscriminatorBytes() {\n return fixEncoderSize(getBytesEncoder(), 8).encode(\n INITIALIZE_ORACLE_DISCRIMINATOR,\n );\n}\n\nexport type InitializeOracleInstruction<\n TProgram extends string = typeof CPMM_PROGRAM_ADDRESS,\n TAccountConfig extends string | AccountMeta<string> = string,\n TAccountPool extends string | AccountMeta<string> = string,\n TAccountOracle extends string | AccountMeta<string> = string,\n TAccountAdmin extends string | AccountMeta<string> = string,\n TAccountPayer extends string | AccountMeta<string> = string,\n TAccountSystemProgram extends string | AccountMeta<string> =\n '11111111111111111111111111111111',\n TRemainingAccounts extends readonly AccountMeta<string>[] = [],\n> = Instruction<TProgram> &\n InstructionWithData<ReadonlyUint8Array> &\n InstructionWithAccounts<\n [\n TAccountConfig extends string\n ? ReadonlyAccount<TAccountConfig>\n : TAccountConfig,\n TAccountPool extends string\n ? ReadonlyAccount<TAccountPool>\n : TAccountPool,\n TAccountOracle extends string\n ? WritableAccount<TAccountOracle>\n : TAccountOracle,\n TAccountAdmin extends string\n ? ReadonlySignerAccount<TAccountAdmin> &\n AccountSignerMeta<TAccountAdmin>\n : TAccountAdmin,\n TAccountPayer extends string\n ? WritableSignerAccount<TAccountPayer> &\n AccountSignerMeta<TAccountPayer>\n : TAccountPayer,\n TAccountSystemProgram extends string\n ? ReadonlyAccount<TAccountSystemProgram>\n : TAccountSystemProgram,\n ...TRemainingAccounts,\n ]\n >;\n\nexport type InitializeOracleInstructionData = {\n discriminator: ReadonlyUint8Array;\n maxPriceChangeRatioQ64: bigint;\n observationIntervalSec: number;\n};\n\nexport type InitializeOracleInstructionDataArgs = {\n maxPriceChangeRatioQ64: number | bigint;\n observationIntervalSec: number;\n};\n\nexport function getInitializeOracleInstructionDataEncoder(): FixedSizeEncoder<InitializeOracleInstructionDataArgs> {\n return transformEncoder(\n getStructEncoder([\n ['discriminator', fixEncoderSize(getBytesEncoder(), 8)],\n ['maxPriceChangeRatioQ64', getU128Encoder()],\n ['observationIntervalSec', getU32Encoder()],\n ]),\n (value) => ({ ...value, discriminator: INITIALIZE_ORACLE_DISCRIMINATOR }),\n );\n}\n\nexport function getInitializeOracleInstructionDataDecoder(): FixedSizeDecoder<InitializeOracleInstructionData> {\n return getStructDecoder([\n ['discriminator', fixDecoderSize(getBytesDecoder(), 8)],\n ['maxPriceChangeRatioQ64', getU128Decoder()],\n ['observationIntervalSec', getU32Decoder()],\n ]);\n}\n\nexport function getInitializeOracleInstructionDataCodec(): FixedSizeCodec<\n InitializeOracleInstructionDataArgs,\n InitializeOracleInstructionData\n> {\n return combineCodec(\n getInitializeOracleInstructionDataEncoder(),\n getInitializeOracleInstructionDataDecoder(),\n );\n}\n\nexport type InitializeOracleAsyncInput<\n TAccountConfig extends string = string,\n TAccountPool extends string = string,\n TAccountOracle extends string = string,\n TAccountAdmin extends string = string,\n TAccountPayer extends string = string,\n TAccountSystemProgram extends string = string,\n> = {\n config: Address<TAccountConfig>;\n pool: Address<TAccountPool>;\n oracle?: Address<TAccountOracle>;\n admin: TransactionSigner<TAccountAdmin>;\n payer: TransactionSigner<TAccountPayer>;\n systemProgram?: Address<TAccountSystemProgram>;\n maxPriceChangeRatioQ64: InitializeOracleInstructionDataArgs['maxPriceChangeRatioQ64'];\n observationIntervalSec: InitializeOracleInstructionDataArgs['observationIntervalSec'];\n};\n\nexport async function getInitializeOracleInstructionAsync<\n TAccountConfig extends string,\n TAccountPool extends string,\n TAccountOracle extends string,\n TAccountAdmin extends string,\n TAccountPayer extends string,\n TAccountSystemProgram extends string,\n TProgramAddress extends Address = typeof CPMM_PROGRAM_ADDRESS,\n>(\n input: InitializeOracleAsyncInput<\n TAccountConfig,\n TAccountPool,\n TAccountOracle,\n TAccountAdmin,\n TAccountPayer,\n TAccountSystemProgram\n >,\n config?: { programAddress?: TProgramAddress },\n): Promise<\n InitializeOracleInstruction<\n TProgramAddress,\n TAccountConfig,\n TAccountPool,\n TAccountOracle,\n TAccountAdmin,\n TAccountPayer,\n TAccountSystemProgram\n >\n> {\n // Program address.\n const programAddress = config?.programAddress ?? CPMM_PROGRAM_ADDRESS;\n\n // Original accounts.\n const originalAccounts = {\n config: { value: input.config ?? null, isWritable: false },\n pool: { value: input.pool ?? null, isWritable: false },\n oracle: { value: input.oracle ?? null, isWritable: true },\n admin: { value: input.admin ?? null, isWritable: false },\n payer: { value: input.payer ?? null, isWritable: true },\n systemProgram: { value: input.systemProgram ?? null, isWritable: false },\n };\n const accounts = originalAccounts as Record<\n keyof typeof originalAccounts,\n ResolvedInstructionAccount\n >;\n\n // Original args.\n const args = { ...input };\n\n // Resolve default values.\n if (!accounts.oracle.value) {\n accounts.oracle.value = await getProgramDerivedAddress({\n programAddress,\n seeds: [\n getBytesEncoder().encode(new Uint8Array([111, 114, 97, 99, 108, 101])),\n getAddressEncoder().encode(\n getAddressFromResolvedInstructionAccount('pool', accounts.pool.value),\n ),\n ],\n });\n }\n if (!accounts.systemProgram.value) {\n accounts.systemProgram.value =\n '11111111111111111111111111111111' as Address<'11111111111111111111111111111111'>;\n }\n\n const getAccountMeta = getAccountMetaFactory(programAddress, 'programId');\n return Object.freeze({\n accounts: [\n getAccountMeta('config', accounts.config),\n getAccountMeta('pool', accounts.pool),\n getAccountMeta('oracle', accounts.oracle),\n getAccountMeta('admin', accounts.admin),\n getAccountMeta('payer', accounts.payer),\n getAccountMeta('systemProgram', accounts.systemProgram),\n ],\n data: getInitializeOracleInstructionDataEncoder().encode(\n args as InitializeOracleInstructionDataArgs,\n ),\n programAddress,\n } as InitializeOracleInstruction<\n TProgramAddress,\n TAccountConfig,\n TAccountPool,\n TAccountOracle,\n TAccountAdmin,\n TAccountPayer,\n TAccountSystemProgram\n >);\n}\n\nexport type InitializeOracleInput<\n TAccountConfig extends string = string,\n TAccountPool extends string = string,\n TAccountOracle extends string = string,\n TAccountAdmin extends string = string,\n TAccountPayer extends string = string,\n TAccountSystemProgram extends string = string,\n> = {\n config: Address<TAccountConfig>;\n pool: Address<TAccountPool>;\n oracle: Address<TAccountOracle>;\n admin: TransactionSigner<TAccountAdmin>;\n payer: TransactionSigner<TAccountPayer>;\n systemProgram?: Address<TAccountSystemProgram>;\n maxPriceChangeRatioQ64: InitializeOracleInstructionDataArgs['maxPriceChangeRatioQ64'];\n observationIntervalSec: InitializeOracleInstructionDataArgs['observationIntervalSec'];\n};\n\nexport function getInitializeOracleInstruction<\n TAccountConfig extends string,\n TAccountPool extends string,\n TAccountOracle extends string,\n TAccountAdmin extends string,\n TAccountPayer extends string,\n TAccountSystemProgram extends string,\n TProgramAddress extends Address = typeof CPMM_PROGRAM_ADDRESS,\n>(\n input: InitializeOracleInput<\n TAccountConfig,\n TAccountPool,\n TAccountOracle,\n TAccountAdmin,\n TAccountPayer,\n TAccountSystemProgram\n >,\n config?: { programAddress?: TProgramAddress },\n): InitializeOracleInstruction<\n TProgramAddress,\n TAccountConfig,\n TAccountPool,\n TAccountOracle,\n TAccountAdmin,\n TAccountPayer,\n TAccountSystemProgram\n> {\n // Program address.\n const programAddress = config?.programAddress ?? CPMM_PROGRAM_ADDRESS;\n\n // Original accounts.\n const originalAccounts = {\n config: { value: input.config ?? null, isWritable: false },\n pool: { value: input.pool ?? null, isWritable: false },\n oracle: { value: input.oracle ?? null, isWritable: true },\n admin: { value: input.admin ?? null, isWritable: false },\n payer: { value: input.payer ?? null, isWritable: true },\n systemProgram: { value: input.systemProgram ?? null, isWritable: false },\n };\n const accounts = originalAccounts as Record<\n keyof typeof originalAccounts,\n ResolvedInstructionAccount\n >;\n\n // Original args.\n const args = { ...input };\n\n // Resolve default values.\n if (!accounts.systemProgram.value) {\n accounts.systemProgram.value =\n '11111111111111111111111111111111' as Address<'11111111111111111111111111111111'>;\n }\n\n const getAccountMeta = getAccountMetaFactory(programAddress, 'programId');\n return Object.freeze({\n accounts: [\n getAccountMeta('config', accounts.config),\n getAccountMeta('pool', accounts.pool),\n getAccountMeta('oracle', accounts.oracle),\n getAccountMeta('admin', accounts.admin),\n getAccountMeta('payer', accounts.payer),\n getAccountMeta('systemProgram', accounts.systemProgram),\n ],\n data: getInitializeOracleInstructionDataEncoder().encode(\n args as InitializeOracleInstructionDataArgs,\n ),\n programAddress,\n } as InitializeOracleInstruction<\n TProgramAddress,\n TAccountConfig,\n TAccountPool,\n TAccountOracle,\n TAccountAdmin,\n TAccountPayer,\n TAccountSystemProgram\n >);\n}\n\nexport type ParsedInitializeOracleInstruction<\n TProgram extends string = typeof CPMM_PROGRAM_ADDRESS,\n TAccountMetas extends readonly AccountMeta[] = readonly AccountMeta[],\n> = {\n programAddress: Address<TProgram>;\n accounts: {\n config: TAccountMetas[0];\n pool: TAccountMetas[1];\n oracle: TAccountMetas[2];\n admin: TAccountMetas[3];\n payer: TAccountMetas[4];\n systemProgram: TAccountMetas[5];\n };\n data: InitializeOracleInstructionData;\n};\n\nexport function parseInitializeOracleInstruction<\n TProgram extends string,\n TAccountMetas extends readonly AccountMeta[],\n>(\n instruction: Instruction<TProgram> &\n InstructionWithAccounts<TAccountMetas> &\n InstructionWithData<ReadonlyUint8Array>,\n): ParsedInitializeOracleInstruction<TProgram, TAccountMetas> {\n if (instruction.accounts.length < 6) {\n throw new SolanaError(\n SOLANA_ERROR__PROGRAM_CLIENTS__INSUFFICIENT_ACCOUNT_METAS,\n {\n actualAccountMetas: instruction.accounts.length,\n expectedAccountMetas: 6,\n },\n );\n }\n let accountIndex = 0;\n const getNextAccount = () => {\n const accountMeta = (instruction.accounts as TAccountMetas)[accountIndex]!;\n accountIndex += 1;\n return accountMeta;\n };\n return {\n programAddress: instruction.programAddress,\n accounts: {\n config: getNextAccount(),\n pool: getNextAccount(),\n oracle: getNextAccount(),\n admin: getNextAccount(),\n payer: getNextAccount(),\n systemProgram: getNextAccount(),\n },\n data: getInitializeOracleInstructionDataDecoder().decode(instruction.data),\n };\n}\n","/**\n * This code was AUTOGENERATED using the Codama library.\n * Please DO NOT EDIT THIS FILE, instead use visitors\n * to add features, then rerun Codama to update it.\n *\n * @see https://github.com/codama-idl/codama\n */\n\nimport {\n combineCodec,\n fixDecoderSize,\n fixEncoderSize,\n getAddressDecoder,\n getAddressEncoder,\n getBytesDecoder,\n getBytesEncoder,\n getProgramDerivedAddress,\n getStructDecoder,\n getStructEncoder,\n getU16Decoder,\n getU16Encoder,\n getU32Decoder,\n getU32Encoder,\n getU8Decoder,\n getU8Encoder,\n SOLANA_ERROR__PROGRAM_CLIENTS__INSUFFICIENT_ACCOUNT_METAS,\n SolanaError,\n transformEncoder,\n type AccountMeta,\n type AccountSignerMeta,\n type Address,\n type FixedSizeCodec,\n type FixedSizeDecoder,\n type FixedSizeEncoder,\n type Instruction,\n type InstructionWithAccounts,\n type InstructionWithData,\n type ReadonlyAccount,\n type ReadonlySignerAccount,\n type ReadonlyUint8Array,\n type TransactionSigner,\n type WritableAccount,\n type WritableSignerAccount,\n} from '@solana/kit';\nimport {\n getAccountMetaFactory,\n getAddressFromResolvedInstructionAccount,\n type ResolvedInstructionAccount,\n} from '@solana/program-client-core';\nimport { CPMM_PROGRAM_ADDRESS } from '../programs';\n\nexport const INITIALIZE_POOL_DISCRIMINATOR = new Uint8Array([\n 95, 180, 10, 172, 84, 174, 232, 40,\n]);\n\nexport function getInitializePoolDiscriminatorBytes() {\n return fixEncoderSize(getBytesEncoder(), 8).encode(\n INITIALIZE_POOL_DISCRIMINATOR,\n );\n}\n\nexport type InitializePoolInstruction<\n TProgram extends string = typeof CPMM_PROGRAM_ADDRESS,\n TAccountConfig extends string | AccountMeta<string> = string,\n TAccountPool extends string | AccountMeta<string> = string,\n TAccountProtocolFeePosition extends string | AccountMeta<string> = string,\n TAccountProtocolFeeOwner extends string | AccountMeta<string> = string,\n TAccountAuthority extends string | AccountMeta<string> = string,\n TAccountVault0 extends string | AccountMeta<string> = string,\n TAccountVault1 extends string | AccountMeta<string> = string,\n TAccountToken0Mint extends string | AccountMeta<string> = string,\n TAccountToken1Mint extends string | AccountMeta<string> = string,\n TAccountPayer extends string | AccountMeta<string> = string,\n TAccountToken0Program extends string | AccountMeta<string> = string,\n TAccountToken1Program extends string | AccountMeta<string> = string,\n TAccountSystemProgram extends string | AccountMeta<string> =\n '11111111111111111111111111111111',\n TAccountRent extends string | AccountMeta<string> =\n 'SysvarRent111111111111111111111111111111111',\n TAccountMigrationAuthority extends string | AccountMeta<string> = string,\n TRemainingAccounts extends readonly AccountMeta<string>[] = [],\n> = Instruction<TProgram> &\n InstructionWithData<ReadonlyUint8Array> &\n InstructionWithAccounts<\n [\n TAccountConfig extends string\n ? ReadonlyAccount<TAccountConfig>\n : TAccountConfig,\n TAccountPool extends string\n ? WritableAccount<TAccountPool>\n : TAccountPool,\n TAccountProtocolFeePosition extends string\n ? WritableAccount<TAccountProtocolFeePosition>\n : TAccountProtocolFeePosition,\n TAccountProtocolFeeOwner extends string\n ? ReadonlyAccount<TAccountProtocolFeeOwner>\n : TAccountProtocolFeeOwner,\n TAccountAuthority extends string\n ? ReadonlyAccount<TAccountAuthority>\n : TAccountAuthority,\n TAccountVault0 extends string\n ? WritableAccount<TAccountVault0>\n : TAccountVault0,\n TAccountVault1 extends string\n ? WritableAccount<TAccountVault1>\n : TAccountVault1,\n TAccountToken0Mint extends string\n ? ReadonlyAccount<TAccountToken0Mint>\n : TAccountToken0Mint,\n TAccountToken1Mint extends string\n ? ReadonlyAccount<TAccountToken1Mint>\n : TAccountToken1Mint,\n TAccountPayer extends string\n ? WritableSignerAccount<TAccountPayer> &\n AccountSignerMeta<TAccountPayer>\n : TAccountPayer,\n TAccountToken0Program extends string\n ? ReadonlyAccount<TAccountToken0Program>\n : TAccountToken0Program,\n TAccountToken1Program extends string\n ? ReadonlyAccount<TAccountToken1Program>\n : TAccountToken1Program,\n TAccountSystemProgram extends string\n ? ReadonlyAccount<TAccountSystemProgram>\n : TAccountSystemProgram,\n TAccountRent extends string\n ? ReadonlyAccount<TAccountRent>\n : TAccountRent,\n TAccountMigrationAuthority extends string\n ? ReadonlySignerAccount<TAccountMigrationAuthority> &\n AccountSignerMeta<TAccountMigrationAuthority>\n : TAccountMigrationAuthority,\n ...TRemainingAccounts,\n ]\n >;\n\nexport type InitializePoolInstructionData = {\n discriminator: ReadonlyUint8Array;\n mintA: Address;\n mintB: Address;\n initialSwapFeeBps: number;\n initialFeeSplitBps: number;\n liquidityMeasureTokenIndex: number;\n hookProgram: Address;\n hookFlags: number;\n};\n\nexport type InitializePoolInstructionDataArgs = {\n mintA: Address;\n mintB: Address;\n initialSwapFeeBps: number;\n initialFeeSplitBps: number;\n liquidityMeasureTokenIndex: number;\n hookProgram: Address;\n hookFlags: number;\n};\n\nexport function getInitializePoolInstructionDataEncoder(): FixedSizeEncoder<InitializePoolInstructionDataArgs> {\n return transformEncoder(\n getStructEncoder([\n ['discriminator', fixEncoderSize(getBytesEncoder(), 8)],\n ['mintA', getAddressEncoder()],\n ['mintB', getAddressEncoder()],\n ['initialSwapFeeBps', getU16Encoder()],\n ['initialFeeSplitBps', getU16Encoder()],\n ['liquidityMeasureTokenIndex', getU8Encoder()],\n ['hookProgram', getAddressEncoder()],\n ['hookFlags', getU32Encoder()],\n ]),\n (value) => ({ ...value, discriminator: INITIALIZE_POOL_DISCRIMINATOR }),\n );\n}\n\nexport function getInitializePoolInstructionDataDecoder(): FixedSizeDecoder<InitializePoolInstructionData> {\n return getStructDecoder([\n ['discriminator', fixDecoderSize(getBytesDecoder(), 8)],\n ['mintA', getAddressDecoder()],\n ['mintB', getAddressDecoder()],\n ['initialSwapFeeBps', getU16Decoder()],\n ['initialFeeSplitBps', getU16Decoder()],\n ['liquidityMeasureTokenIndex', getU8Decoder()],\n ['hookProgram', getAddressDecoder()],\n ['hookFlags', getU32Decoder()],\n ]);\n}\n\nexport function getInitializePoolInstructionDataCodec(): FixedSizeCodec<\n InitializePoolInstructionDataArgs,\n InitializePoolInstructionData\n> {\n return combineCodec(\n getInitializePoolInstructionDataEncoder(),\n getInitializePoolInstructionDataDecoder(),\n );\n}\n\nexport type InitializePoolAsyncInput<\n TAccountConfig extends string = string,\n TAccountPool extends string = string,\n TAccountProtocolFeePosition extends string = string,\n TAccountProtocolFeeOwner extends string = string,\n TAccountAuthority extends string = string,\n TAccountVault0 extends string = string,\n TAccountVault1 extends string = string,\n TAccountToken0Mint extends string = string,\n TAccountToken1Mint extends string = string,\n TAccountPayer extends string = string,\n TAccountToken0Program extends string = string,\n TAccountToken1Program extends string = string,\n TAccountSystemProgram extends string = string,\n TAccountRent extends string = string,\n TAccountMigrationAuthority extends string = string,\n> = {\n config: Address<TAccountConfig>;\n pool?: Address<TAccountPool>;\n protocolFeePosition?: Address<TAccountProtocolFeePosition>;\n protocolFeeOwner?: Address<TAccountProtocolFeeOwner>;\n authority?: Address<TAccountAuthority>;\n vault0?: Address<TAccountVault0>;\n vault1?: Address<TAccountVault1>;\n token0Mint: Address<TAccountToken0Mint>;\n token1Mint: Address<TAccountToken1Mint>;\n payer: TransactionSigner<TAccountPayer>;\n token0Program: Address<TAccountToken0Program>;\n token1Program: Address<TAccountToken1Program>;\n systemProgram?: Address<TAccountSystemProgram>;\n rent?: Address<TAccountRent>;\n /**\n * Capability PDA owned by the trusted migrator program. Anchor enforces\n * `is_signer`; the handler verifies the pubkey matches the expected\n * derivation. Together these prove the CPI originated from the migrator.\n */\n migrationAuthority: TransactionSigner<TAccountMigrationAuthority>;\n mintA: InitializePoolInstructionDataArgs['mintA'];\n mintB: InitializePoolInstructionDataArgs['mintB'];\n initialSwapFeeBps: InitializePoolInstructionDataArgs['initialSwapFeeBps'];\n initialFeeSplitBps: InitializePoolInstructionDataArgs['initialFeeSplitBps'];\n liquidityMeasureTokenIndex: InitializePoolInstructionDataArgs['liquidityMeasureTokenIndex'];\n hookProgram: InitializePoolInstructionDataArgs['hookProgram'];\n hookFlags: InitializePoolInstructionDataArgs['hookFlags'];\n};\n\nexport async function getInitializePoolInstructionAsync<\n TAccountConfig extends string,\n TAccountPool extends string,\n TAccountProtocolFeePosition extends string,\n TAccountProtocolFeeOwner extends string,\n TAccountAuthority extends string,\n TAccountVault0 extends string,\n TAccountVault1 extends string,\n TAccountToken0Mint extends string,\n TAccountToken1Mint extends string,\n TAccountPayer extends string,\n TAccountToken0Program extends string,\n TAccountToken1Program extends string,\n TAccountSystemProgram extends string,\n TAccountRent extends string,\n TAccountMigrationAuthority extends string,\n TProgramAddress extends Address = typeof CPMM_PROGRAM_ADDRESS,\n>(\n input: InitializePoolAsyncInput<\n TAccountConfig,\n TAccountPool,\n TAccountProtocolFeePosition,\n TAccountProtocolFeeOwner,\n TAccountAuthority,\n TAccountVault0,\n TAccountVault1,\n TAccountToken0Mint,\n TAccountToken1Mint,\n TAccountPayer,\n TAccountToken0Program,\n TAccountToken1Program,\n TAccountSystemProgram,\n TAccountRent,\n TAccountMigrationAuthority\n >,\n config?: { programAddress?: TProgramAddress },\n): Promise<\n InitializePoolInstruction<\n TProgramAddress,\n TAccountConfig,\n TAccountPool,\n TAccountProtocolFeePosition,\n TAccountProtocolFeeOwner,\n TAccountAuthority,\n TAccountVault0,\n TAccountVault1,\n TAccountToken0Mint,\n TAccountToken1Mint,\n TAccountPayer,\n TAccountToken0Program,\n TAccountToken1Program,\n TAccountSystemProgram,\n TAccountRent,\n TAccountMigrationAuthority\n >\n> {\n // Program address.\n const programAddress = config?.programAddress ?? CPMM_PROGRAM_ADDRESS;\n\n // Original accounts.\n const originalAccounts = {\n config: { value: input.config ?? null, isWritable: false },\n pool: { value: input.pool ?? null, isWritable: true },\n protocolFeePosition: {\n value: input.protocolFeePosition ?? null,\n isWritable: true,\n },\n protocolFeeOwner: {\n value: input.protocolFeeOwner ?? null,\n isWritable: false,\n },\n authority: { value: input.authority ?? null, isWritable: false },\n vault0: { value: input.vault0 ?? null, isWritable: true },\n vault1: { value: input.vault1 ?? null, isWritable: true },\n token0Mint: { value: input.token0Mint ?? null, isWritable: false },\n token1Mint: { value: input.token1Mint ?? null, isWritable: false },\n payer: { value: input.payer ?? null, isWritable: true },\n token0Program: { value: input.token0Program ?? null, isWritable: false },\n token1Program: { value: input.token1Program ?? null, isWritable: false },\n systemProgram: { value: input.systemProgram ?? null, isWritable: false },\n rent: { value: input.rent ?? null, isWritable: false },\n migrationAuthority: {\n value: input.migrationAuthority ?? null,\n isWritable: false,\n },\n };\n const accounts = originalAccounts as Record<\n keyof typeof originalAccounts,\n ResolvedInstructionAccount\n >;\n\n // Original args.\n const args = { ...input };\n\n // Resolve default values.\n if (!accounts.pool.value) {\n accounts.pool.value = await getProgramDerivedAddress({\n programAddress,\n seeds: [\n getBytesEncoder().encode(new Uint8Array([112, 111, 111, 108])),\n getAddressEncoder().encode(\n getAddressFromResolvedInstructionAccount(\n 'token0Mint',\n accounts.token0Mint.value,\n ),\n ),\n getAddressEncoder().encode(\n getAddressFromResolvedInstructionAccount(\n 'token1Mint',\n accounts.token1Mint.value,\n ),\n ),\n ],\n });\n }\n if (!accounts.protocolFeeOwner.value) {\n accounts.protocolFeeOwner.value = await getProgramDerivedAddress({\n programAddress,\n seeds: [\n getBytesEncoder().encode(\n new Uint8Array([\n 112, 114, 111, 116, 111, 99, 111, 108, 95, 102, 101, 101, 95, 111,\n 119, 110, 101, 114,\n ]),\n ),\n getAddressEncoder().encode(\n getAddressFromResolvedInstructionAccount('pool', accounts.pool.value),\n ),\n ],\n });\n }\n if (!accounts.protocolFeePosition.value) {\n accounts.protocolFeePosition.value = await getProgramDerivedAddress({\n programAddress,\n seeds: [\n getBytesEncoder().encode(\n new Uint8Array([112, 111, 115, 105, 116, 105, 111, 110]),\n ),\n getAddressEncoder().encode(\n getAddressFromResolvedInstructionAccount('pool', accounts.pool.value),\n ),\n getAddressEncoder().encode(\n getAddressFromResolvedInstructionAccount(\n 'protocolFeeOwner',\n accounts.protocolFeeOwner.value,\n ),\n ),\n getBytesEncoder().encode(new Uint8Array([0, 0, 0, 0, 0, 0, 0, 0])),\n ],\n });\n }\n if (!accounts.authority.value) {\n accounts.authority.value = await getProgramDerivedAddress({\n programAddress,\n seeds: [\n getBytesEncoder().encode(\n new Uint8Array([97, 117, 116, 104, 111, 114, 105, 116, 121]),\n ),\n getAddressEncoder().encode(\n getAddressFromResolvedInstructionAccount('pool', accounts.pool.value),\n ),\n ],\n });\n }\n if (!accounts.vault0.value) {\n accounts.vault0.value = await getProgramDerivedAddress({\n programAddress,\n seeds: [\n getBytesEncoder().encode(new Uint8Array([118, 97, 117, 108, 116, 48])),\n getAddressEncoder().encode(\n getAddressFromResolvedInstructionAccount('pool', accounts.pool.value),\n ),\n ],\n });\n }\n if (!accounts.vault1.value) {\n accounts.vault1.value = await getProgramDerivedAddress({\n programAddress,\n seeds: [\n getBytesEncoder().encode(new Uint8Array([118, 97, 117, 108, 116, 49])),\n getAddressEncoder().encode(\n getAddressFromResolvedInstructionAccount('pool', accounts.pool.value),\n ),\n ],\n });\n }\n if (!accounts.systemProgram.value) {\n accounts.systemProgram.value =\n '11111111111111111111111111111111' as Address<'11111111111111111111111111111111'>;\n }\n if (!accounts.rent.value) {\n accounts.rent.value =\n 'SysvarRent111111111111111111111111111111111' as Address<'SysvarRent111111111111111111111111111111111'>;\n }\n\n const getAccountMeta = getAccountMetaFactory(programAddress, 'programId');\n return Object.freeze({\n accounts: [\n getAccountMeta('config', accounts.config),\n getAccountMeta('pool', accounts.pool),\n getAccountMeta('protocolFeePosition', accounts.protocolFeePosition),\n getAccountMeta('protocolFeeOwner', accounts.protocolFeeOwner),\n getAccountMeta('authority', accounts.authority),\n getAccountMeta('vault0', accounts.vault0),\n getAccountMeta('vault1', accounts.vault1),\n getAccountMeta('token0Mint', accounts.token0Mint),\n getAccountMeta('token1Mint', accounts.token1Mint),\n getAccountMeta('payer', accounts.payer),\n getAccountMeta('token0Program', accounts.token0Program),\n getAccountMeta('token1Program', accounts.token1Program),\n getAccountMeta('systemProgram', accounts.systemProgram),\n getAccountMeta('rent', accounts.rent),\n getAccountMeta('migrationAuthority', accounts.migrationAuthority),\n ],\n data: getInitializePoolInstructionDataEncoder().encode(\n args as InitializePoolInstructionDataArgs,\n ),\n programAddress,\n } as InitializePoolInstruction<\n TProgramAddress,\n TAccountConfig,\n TAccountPool,\n TAccountProtocolFeePosition,\n TAccountProtocolFeeOwner,\n TAccountAuthority,\n TAccountVault0,\n TAccountVault1,\n TAccountToken0Mint,\n TAccountToken1Mint,\n TAccountPayer,\n TAccountToken0Program,\n TAccountToken1Program,\n TAccountSystemProgram,\n TAccountRent,\n TAccountMigrationAuthority\n >);\n}\n\nexport type InitializePoolInput<\n TAccountConfig extends string = string,\n TAccountPool extends string = string,\n TAccountProtocolFeePosition extends string = string,\n TAccountProtocolFeeOwner extends string = string,\n TAccountAuthority extends string = string,\n TAccountVault0 extends string = string,\n TAccountVault1 extends string = string,\n TAccountToken0Mint extends string = string,\n TAccountToken1Mint extends string = string,\n TAccountPayer extends string = string,\n TAccountToken0Program extends string = string,\n TAccountToken1Program extends string = string,\n TAccountSystemProgram extends string = string,\n TAccountRent extends string = string,\n TAccountMigrationAuthority extends string = string,\n> = {\n config: Address<TAccountConfig>;\n pool: Address<TAccountPool>;\n protocolFeePosition: Address<TAccountProtocolFeePosition>;\n protocolFeeOwner: Address<TAccountProtocolFeeOwner>;\n authority: Address<TAccountAuthority>;\n vault0: Address<TAccountVault0>;\n vault1: Address<TAccountVault1>;\n token0Mint: Address<TAccountToken0Mint>;\n token1Mint: Address<TAccountToken1Mint>;\n payer: TransactionSigner<TAccountPayer>;\n token0Program: Address<TAccountToken0Program>;\n token1Program: Address<TAccountToken1Program>;\n systemProgram?: Address<TAccountSystemProgram>;\n rent?: Address<TAccountRent>;\n /**\n * Capability PDA owned by the trusted migrator program. Anchor enforces\n * `is_signer`; the handler verifies the pubkey matches the expected\n * derivation. Together these prove the CPI originated from the migrator.\n */\n migrationAuthority: TransactionSigner<TAccountMigrationAuthority>;\n mintA: InitializePoolInstructionDataArgs['mintA'];\n mintB: InitializePoolInstructionDataArgs['mintB'];\n initialSwapFeeBps: InitializePoolInstructionDataArgs['initialSwapFeeBps'];\n initialFeeSplitBps: InitializePoolInstructionDataArgs['initialFeeSplitBps'];\n liquidityMeasureTokenIndex: InitializePoolInstructionDataArgs['liquidityMeasureTokenIndex'];\n hookProgram: InitializePoolInstructionDataArgs['hookProgram'];\n hookFlags: InitializePoolInstructionDataArgs['hookFlags'];\n};\n\nexport function getInitializePoolInstruction<\n TAccountConfig extends string,\n TAccountPool extends string,\n TAccountProtocolFeePosition extends string,\n TAccountProtocolFeeOwner extends string,\n TAccountAuthority extends string,\n TAccountVault0 extends string,\n TAccountVault1 extends string,\n TAccountToken0Mint extends string,\n TAccountToken1Mint extends string,\n TAccountPayer extends string,\n TAccountToken0Program extends string,\n TAccountToken1Program extends string,\n TAccountSystemProgram extends string,\n TAccountRent extends string,\n TAccountMigrationAuthority extends string,\n TProgramAddress extends Address = typeof CPMM_PROGRAM_ADDRESS,\n>(\n input: InitializePoolInput<\n TAccountConfig,\n TAccountPool,\n TAccountProtocolFeePosition,\n TAccountProtocolFeeOwner,\n TAccountAuthority,\n TAccountVault0,\n TAccountVault1,\n TAccountToken0Mint,\n TAccountToken1Mint,\n TAccountPayer,\n TAccountToken0Program,\n TAccountToken1Program,\n TAccountSystemProgram,\n TAccountRent,\n TAccountMigrationAuthority\n >,\n config?: { programAddress?: TProgramAddress },\n): InitializePoolInstruction<\n TProgramAddress,\n TAccountConfig,\n TAccountPool,\n TAccountProtocolFeePosition,\n TAccountProtocolFeeOwner,\n TAccountAuthority,\n TAccountVault0,\n TAccountVault1,\n TAccountToken0Mint,\n TAccountToken1Mint,\n TAccountPayer,\n TAccountToken0Program,\n TAccountToken1Program,\n TAccountSystemProgram,\n TAccountRent,\n TAccountMigrationAuthority\n> {\n // Program address.\n const programAddress = config?.programAddress ?? CPMM_PROGRAM_ADDRESS;\n\n // Original accounts.\n const originalAccounts = {\n config: { value: input.config ?? null, isWritable: false },\n pool: { value: input.pool ?? null, isWritable: true },\n protocolFeePosition: {\n value: input.protocolFeePosition ?? null,\n isWritable: true,\n },\n protocolFeeOwner: {\n value: input.protocolFeeOwner ?? null,\n isWritable: false,\n },\n authority: { value: input.authority ?? null, isWritable: false },\n vault0: { value: input.vault0 ?? null, isWritable: true },\n vault1: { value: input.vault1 ?? null, isWritable: true },\n token0Mint: { value: input.token0Mint ?? null, isWritable: false },\n token1Mint: { value: input.token1Mint ?? null, isWritable: false },\n payer: { value: input.payer ?? null, isWritable: true },\n token0Program: { value: input.token0Program ?? null, isWritable: false },\n token1Program: { value: input.token1Program ?? null, isWritable: false },\n systemProgram: { value: input.systemProgram ?? null, isWritable: false },\n rent: { value: input.rent ?? null, isWritable: false },\n migrationAuthority: {\n value: input.migrationAuthority ?? null,\n isWritable: false,\n },\n };\n const accounts = originalAccounts as Record<\n keyof typeof originalAccounts,\n ResolvedInstructionAccount\n >;\n\n // Original args.\n const args = { ...input };\n\n // Resolve default values.\n if (!accounts.systemProgram.value) {\n accounts.systemProgram.value =\n '11111111111111111111111111111111' as Address<'11111111111111111111111111111111'>;\n }\n if (!accounts.rent.value) {\n accounts.rent.value =\n 'SysvarRent111111111111111111111111111111111' as Address<'SysvarRent111111111111111111111111111111111'>;\n }\n\n const getAccountMeta = getAccountMetaFactory(programAddress, 'programId');\n return Object.freeze({\n accounts: [\n getAccountMeta('config', accounts.config),\n getAccountMeta('pool', accounts.pool),\n getAccountMeta('protocolFeePosition', accounts.protocolFeePosition),\n getAccountMeta('protocolFeeOwner', accounts.protocolFeeOwner),\n getAccountMeta('authority', accounts.authority),\n getAccountMeta('vault0', accounts.vault0),\n getAccountMeta('vault1', accounts.vault1),\n getAccountMeta('token0Mint', accounts.token0Mint),\n getAccountMeta('token1Mint', accounts.token1Mint),\n getAccountMeta('payer', accounts.payer),\n getAccountMeta('token0Program', accounts.token0Program),\n getAccountMeta('token1Program', accounts.token1Program),\n getAccountMeta('systemProgram', accounts.systemProgram),\n getAccountMeta('rent', accounts.rent),\n getAccountMeta('migrationAuthority', accounts.migrationAuthority),\n ],\n data: getInitializePoolInstructionDataEncoder().encode(\n args as InitializePoolInstructionDataArgs,\n ),\n programAddress,\n } as InitializePoolInstruction<\n TProgramAddress,\n TAccountConfig,\n TAccountPool,\n TAccountProtocolFeePosition,\n TAccountProtocolFeeOwner,\n TAccountAuthority,\n TAccountVault0,\n TAccountVault1,\n TAccountToken0Mint,\n TAccountToken1Mint,\n TAccountPayer,\n TAccountToken0Program,\n TAccountToken1Program,\n TAccountSystemProgram,\n TAccountRent,\n TAccountMigrationAuthority\n >);\n}\n\nexport type ParsedInitializePoolInstruction<\n TProgram extends string = typeof CPMM_PROGRAM_ADDRESS,\n TAccountMetas extends readonly AccountMeta[] = readonly AccountMeta[],\n> = {\n programAddress: Address<TProgram>;\n accounts: {\n config: TAccountMetas[0];\n pool: TAccountMetas[1];\n protocolFeePosition: TAccountMetas[2];\n protocolFeeOwner: TAccountMetas[3];\n authority: TAccountMetas[4];\n vault0: TAccountMetas[5];\n vault1: TAccountMetas[6];\n token0Mint: TAccountMetas[7];\n token1Mint: TAccountMetas[8];\n payer: TAccountMetas[9];\n token0Program: TAccountMetas[10];\n token1Program: TAccountMetas[11];\n systemProgram: TAccountMetas[12];\n rent: TAccountMetas[13];\n /**\n * Capability PDA owned by the trusted migrator program. Anchor enforces\n * `is_signer`; the handler verifies the pubkey matches the expected\n * derivation. Together these prove the CPI originated from the migrator.\n */\n migrationAuthority: TAccountMetas[14];\n };\n data: InitializePoolInstructionData;\n};\n\nexport function parseInitializePoolInstruction<\n TProgram extends string,\n TAccountMetas extends readonly AccountMeta[],\n>(\n instruction: Instruction<TProgram> &\n InstructionWithAccounts<TAccountMetas> &\n InstructionWithData<ReadonlyUint8Array>,\n): ParsedInitializePoolInstruction<TProgram, TAccountMetas> {\n if (instruction.accounts.length < 15) {\n throw new SolanaError(\n SOLANA_ERROR__PROGRAM_CLIENTS__INSUFFICIENT_ACCOUNT_METAS,\n {\n actualAccountMetas: instruction.accounts.length,\n expectedAccountMetas: 15,\n },\n );\n }\n let accountIndex = 0;\n const getNextAccount = () => {\n const accountMeta = (instruction.accounts as TAccountMetas)[accountIndex]!;\n accountIndex += 1;\n return accountMeta;\n };\n return {\n programAddress: instruction.programAddress,\n accounts: {\n config: getNextAccount(),\n pool: getNextAccount(),\n protocolFeePosition: getNextAccount(),\n protocolFeeOwner: getNextAccount(),\n authority: getNextAccount(),\n vault0: getNextAccount(),\n vault1: getNextAccount(),\n token0Mint: getNextAccount(),\n token1Mint: getNextAccount(),\n payer: getNextAccount(),\n token0Program: getNextAccount(),\n token1Program: getNextAccount(),\n systemProgram: getNextAccount(),\n rent: getNextAccount(),\n migrationAuthority: getNextAccount(),\n },\n data: getInitializePoolInstructionDataDecoder().decode(instruction.data),\n };\n}\n","/**\n * This code was AUTOGENERATED using the Codama library.\n * Please DO NOT EDIT THIS FILE, instead use visitors\n * to add features, then rerun Codama to update it.\n *\n * @see https://github.com/codama-idl/codama\n */\n\nimport {\n combineCodec,\n fixDecoderSize,\n fixEncoderSize,\n getAddressEncoder,\n getBytesDecoder,\n getBytesEncoder,\n getProgramDerivedAddress,\n getStructDecoder,\n getStructEncoder,\n getU32Decoder,\n getU32Encoder,\n SOLANA_ERROR__PROGRAM_CLIENTS__INSUFFICIENT_ACCOUNT_METAS,\n SolanaError,\n transformEncoder,\n type AccountMeta,\n type Address,\n type FixedSizeCodec,\n type FixedSizeDecoder,\n type FixedSizeEncoder,\n type Instruction,\n type InstructionWithAccounts,\n type InstructionWithData,\n type ReadonlyAccount,\n type ReadonlyUint8Array,\n} from '@solana/kit';\nimport {\n getAccountMetaFactory,\n getAddressFromResolvedInstructionAccount,\n type ResolvedInstructionAccount,\n} from '@solana/program-client-core';\nimport { CPMM_PROGRAM_ADDRESS } from '../programs';\n\nexport const ORACLE_CONSULT_DISCRIMINATOR = new Uint8Array([\n 239, 237, 255, 177, 142, 72, 96, 175,\n]);\n\nexport function getOracleConsultDiscriminatorBytes() {\n return fixEncoderSize(getBytesEncoder(), 8).encode(\n ORACLE_CONSULT_DISCRIMINATOR,\n );\n}\n\nexport type OracleConsultInstruction<\n TProgram extends string = typeof CPMM_PROGRAM_ADDRESS,\n TAccountPool extends string | AccountMeta<string> = string,\n TAccountOracle extends string | AccountMeta<string> = string,\n TRemainingAccounts extends readonly AccountMeta<string>[] = [],\n> = Instruction<TProgram> &\n InstructionWithData<ReadonlyUint8Array> &\n InstructionWithAccounts<\n [\n TAccountPool extends string\n ? ReadonlyAccount<TAccountPool>\n : TAccountPool,\n TAccountOracle extends string\n ? ReadonlyAccount<TAccountOracle>\n : TAccountOracle,\n ...TRemainingAccounts,\n ]\n >;\n\nexport type OracleConsultInstructionData = {\n discriminator: ReadonlyUint8Array;\n windowSeconds: number;\n};\n\nexport type OracleConsultInstructionDataArgs = { windowSeconds: number };\n\nexport function getOracleConsultInstructionDataEncoder(): FixedSizeEncoder<OracleConsultInstructionDataArgs> {\n return transformEncoder(\n getStructEncoder([\n ['discriminator', fixEncoderSize(getBytesEncoder(), 8)],\n ['windowSeconds', getU32Encoder()],\n ]),\n (value) => ({ ...value, discriminator: ORACLE_CONSULT_DISCRIMINATOR }),\n );\n}\n\nexport function getOracleConsultInstructionDataDecoder(): FixedSizeDecoder<OracleConsultInstructionData> {\n return getStructDecoder([\n ['discriminator', fixDecoderSize(getBytesDecoder(), 8)],\n ['windowSeconds', getU32Decoder()],\n ]);\n}\n\nexport function getOracleConsultInstructionDataCodec(): FixedSizeCodec<\n OracleConsultInstructionDataArgs,\n OracleConsultInstructionData\n> {\n return combineCodec(\n getOracleConsultInstructionDataEncoder(),\n getOracleConsultInstructionDataDecoder(),\n );\n}\n\nexport type OracleConsultAsyncInput<\n TAccountPool extends string = string,\n TAccountOracle extends string = string,\n> = {\n pool: Address<TAccountPool>;\n oracle?: Address<TAccountOracle>;\n windowSeconds: OracleConsultInstructionDataArgs['windowSeconds'];\n};\n\nexport async function getOracleConsultInstructionAsync<\n TAccountPool extends string,\n TAccountOracle extends string,\n TProgramAddress extends Address = typeof CPMM_PROGRAM_ADDRESS,\n>(\n input: OracleConsultAsyncInput<TAccountPool, TAccountOracle>,\n config?: { programAddress?: TProgramAddress },\n): Promise<\n OracleConsultInstruction<TProgramAddress, TAccountPool, TAccountOracle>\n> {\n // Program address.\n const programAddress = config?.programAddress ?? CPMM_PROGRAM_ADDRESS;\n\n // Original accounts.\n const originalAccounts = {\n pool: { value: input.pool ?? null, isWritable: false },\n oracle: { value: input.oracle ?? null, isWritable: false },\n };\n const accounts = originalAccounts as Record<\n keyof typeof originalAccounts,\n ResolvedInstructionAccount\n >;\n\n // Original args.\n const args = { ...input };\n\n // Resolve default values.\n if (!accounts.oracle.value) {\n accounts.oracle.value = await getProgramDerivedAddress({\n programAddress,\n seeds: [\n getBytesEncoder().encode(new Uint8Array([111, 114, 97, 99, 108, 101])),\n getAddressEncoder().encode(\n getAddressFromResolvedInstructionAccount('pool', accounts.pool.value),\n ),\n ],\n });\n }\n\n const getAccountMeta = getAccountMetaFactory(programAddress, 'programId');\n return Object.freeze({\n accounts: [\n getAccountMeta('pool', accounts.pool),\n getAccountMeta('oracle', accounts.oracle),\n ],\n data: getOracleConsultInstructionDataEncoder().encode(\n args as OracleConsultInstructionDataArgs,\n ),\n programAddress,\n } as OracleConsultInstruction<TProgramAddress, TAccountPool, TAccountOracle>);\n}\n\nexport type OracleConsultInput<\n TAccountPool extends string = string,\n TAccountOracle extends string = string,\n> = {\n pool: Address<TAccountPool>;\n oracle: Address<TAccountOracle>;\n windowSeconds: OracleConsultInstructionDataArgs['windowSeconds'];\n};\n\nexport function getOracleConsultInstruction<\n TAccountPool extends string,\n TAccountOracle extends string,\n TProgramAddress extends Address = typeof CPMM_PROGRAM_ADDRESS,\n>(\n input: OracleConsultInput<TAccountPool, TAccountOracle>,\n config?: { programAddress?: TProgramAddress },\n): OracleConsultInstruction<TProgramAddress, TAccountPool, TAccountOracle> {\n // Program address.\n const programAddress = config?.programAddress ?? CPMM_PROGRAM_ADDRESS;\n\n // Original accounts.\n const originalAccounts = {\n pool: { value: input.pool ?? null, isWritable: false },\n oracle: { value: input.oracle ?? null, isWritable: false },\n };\n const accounts = originalAccounts as Record<\n keyof typeof originalAccounts,\n ResolvedInstructionAccount\n >;\n\n // Original args.\n const args = { ...input };\n\n const getAccountMeta = getAccountMetaFactory(programAddress, 'programId');\n return Object.freeze({\n accounts: [\n getAccountMeta('pool', accounts.pool),\n getAccountMeta('oracle', accounts.oracle),\n ],\n data: getOracleConsultInstructionDataEncoder().encode(\n args as OracleConsultInstructionDataArgs,\n ),\n programAddress,\n } as OracleConsultInstruction<TProgramAddress, TAccountPool, TAccountOracle>);\n}\n\nexport type ParsedOracleConsultInstruction<\n TProgram extends string = typeof CPMM_PROGRAM_ADDRESS,\n TAccountMetas extends readonly AccountMeta[] = readonly AccountMeta[],\n> = {\n programAddress: Address<TProgram>;\n accounts: {\n pool: TAccountMetas[0];\n oracle: TAccountMetas[1];\n };\n data: OracleConsultInstructionData;\n};\n\nexport function parseOracleConsultInstruction<\n TProgram extends string,\n TAccountMetas extends readonly AccountMeta[],\n>(\n instruction: Instruction<TProgram> &\n InstructionWithAccounts<TAccountMetas> &\n InstructionWithData<ReadonlyUint8Array>,\n): ParsedOracleConsultInstruction<TProgram, TAccountMetas> {\n if (instruction.accounts.length < 2) {\n throw new SolanaError(\n SOLANA_ERROR__PROGRAM_CLIENTS__INSUFFICIENT_ACCOUNT_METAS,\n {\n actualAccountMetas: instruction.accounts.length,\n expectedAccountMetas: 2,\n },\n );\n }\n let accountIndex = 0;\n const getNextAccount = () => {\n const accountMeta = (instruction.accounts as TAccountMetas)[accountIndex]!;\n accountIndex += 1;\n return accountMeta;\n };\n return {\n programAddress: instruction.programAddress,\n accounts: { pool: getNextAccount(), oracle: getNextAccount() },\n data: getOracleConsultInstructionDataDecoder().decode(instruction.data),\n };\n}\n","/**\n * This code was AUTOGENERATED using the Codama library.\n * Please DO NOT EDIT THIS FILE, instead use visitors\n * to add features, then rerun Codama to update it.\n *\n * @see https://github.com/codama-idl/codama\n */\n\nimport {\n combineCodec,\n fixDecoderSize,\n fixEncoderSize,\n getAddressEncoder,\n getBytesDecoder,\n getBytesEncoder,\n getProgramDerivedAddress,\n getStructDecoder,\n getStructEncoder,\n SOLANA_ERROR__PROGRAM_CLIENTS__INSUFFICIENT_ACCOUNT_METAS,\n SolanaError,\n transformEncoder,\n type AccountMeta,\n type Address,\n type FixedSizeCodec,\n type FixedSizeDecoder,\n type FixedSizeEncoder,\n type Instruction,\n type InstructionWithAccounts,\n type InstructionWithData,\n type ReadonlyAccount,\n type ReadonlyUint8Array,\n type WritableAccount,\n} from '@solana/kit';\nimport {\n getAccountMetaFactory,\n getAddressFromResolvedInstructionAccount,\n type ResolvedInstructionAccount,\n} from '@solana/program-client-core';\nimport { CPMM_PROGRAM_ADDRESS } from '../programs';\n\nexport const ORACLE_UPDATE_DISCRIMINATOR = new Uint8Array([\n 85, 209, 248, 142, 186, 249, 120, 239,\n]);\n\nexport function getOracleUpdateDiscriminatorBytes() {\n return fixEncoderSize(getBytesEncoder(), 8).encode(\n ORACLE_UPDATE_DISCRIMINATOR,\n );\n}\n\nexport type OracleUpdateInstruction<\n TProgram extends string = typeof CPMM_PROGRAM_ADDRESS,\n TAccountPool extends string | AccountMeta<string> = string,\n TAccountOracle extends string | AccountMeta<string> = string,\n TRemainingAccounts extends readonly AccountMeta<string>[] = [],\n> = Instruction<TProgram> &\n InstructionWithData<ReadonlyUint8Array> &\n InstructionWithAccounts<\n [\n TAccountPool extends string\n ? ReadonlyAccount<TAccountPool>\n : TAccountPool,\n TAccountOracle extends string\n ? WritableAccount<TAccountOracle>\n : TAccountOracle,\n ...TRemainingAccounts,\n ]\n >;\n\nexport type OracleUpdateInstructionData = { discriminator: ReadonlyUint8Array };\n\nexport type OracleUpdateInstructionDataArgs = {};\n\nexport function getOracleUpdateInstructionDataEncoder(): FixedSizeEncoder<OracleUpdateInstructionDataArgs> {\n return transformEncoder(\n getStructEncoder([['discriminator', fixEncoderSize(getBytesEncoder(), 8)]]),\n (value) => ({ ...value, discriminator: ORACLE_UPDATE_DISCRIMINATOR }),\n );\n}\n\nexport function getOracleUpdateInstructionDataDecoder(): FixedSizeDecoder<OracleUpdateInstructionData> {\n return getStructDecoder([\n ['discriminator', fixDecoderSize(getBytesDecoder(), 8)],\n ]);\n}\n\nexport function getOracleUpdateInstructionDataCodec(): FixedSizeCodec<\n OracleUpdateInstructionDataArgs,\n OracleUpdateInstructionData\n> {\n return combineCodec(\n getOracleUpdateInstructionDataEncoder(),\n getOracleUpdateInstructionDataDecoder(),\n );\n}\n\nexport type OracleUpdateAsyncInput<\n TAccountPool extends string = string,\n TAccountOracle extends string = string,\n> = {\n pool: Address<TAccountPool>;\n oracle?: Address<TAccountOracle>;\n};\n\nexport async function getOracleUpdateInstructionAsync<\n TAccountPool extends string,\n TAccountOracle extends string,\n TProgramAddress extends Address = typeof CPMM_PROGRAM_ADDRESS,\n>(\n input: OracleUpdateAsyncInput<TAccountPool, TAccountOracle>,\n config?: { programAddress?: TProgramAddress },\n): Promise<\n OracleUpdateInstruction<TProgramAddress, TAccountPool, TAccountOracle>\n> {\n // Program address.\n const programAddress = config?.programAddress ?? CPMM_PROGRAM_ADDRESS;\n\n // Original accounts.\n const originalAccounts = {\n pool: { value: input.pool ?? null, isWritable: false },\n oracle: { value: input.oracle ?? null, isWritable: true },\n };\n const accounts = originalAccounts as Record<\n keyof typeof originalAccounts,\n ResolvedInstructionAccount\n >;\n\n // Resolve default values.\n if (!accounts.oracle.value) {\n accounts.oracle.value = await getProgramDerivedAddress({\n programAddress,\n seeds: [\n getBytesEncoder().encode(new Uint8Array([111, 114, 97, 99, 108, 101])),\n getAddressEncoder().encode(\n getAddressFromResolvedInstructionAccount('pool', accounts.pool.value),\n ),\n ],\n });\n }\n\n const getAccountMeta = getAccountMetaFactory(programAddress, 'programId');\n return Object.freeze({\n accounts: [\n getAccountMeta('pool', accounts.pool),\n getAccountMeta('oracle', accounts.oracle),\n ],\n data: getOracleUpdateInstructionDataEncoder().encode({}),\n programAddress,\n } as OracleUpdateInstruction<TProgramAddress, TAccountPool, TAccountOracle>);\n}\n\nexport type OracleUpdateInput<\n TAccountPool extends string = string,\n TAccountOracle extends string = string,\n> = {\n pool: Address<TAccountPool>;\n oracle: Address<TAccountOracle>;\n};\n\nexport function getOracleUpdateInstruction<\n TAccountPool extends string,\n TAccountOracle extends string,\n TProgramAddress extends Address = typeof CPMM_PROGRAM_ADDRESS,\n>(\n input: OracleUpdateInput<TAccountPool, TAccountOracle>,\n config?: { programAddress?: TProgramAddress },\n): OracleUpdateInstruction<TProgramAddress, TAccountPool, TAccountOracle> {\n // Program address.\n const programAddress = config?.programAddress ?? CPMM_PROGRAM_ADDRESS;\n\n // Original accounts.\n const originalAccounts = {\n pool: { value: input.pool ?? null, isWritable: false },\n oracle: { value: input.oracle ?? null, isWritable: true },\n };\n const accounts = originalAccounts as Record<\n keyof typeof originalAccounts,\n ResolvedInstructionAccount\n >;\n\n const getAccountMeta = getAccountMetaFactory(programAddress, 'programId');\n return Object.freeze({\n accounts: [\n getAccountMeta('pool', accounts.pool),\n getAccountMeta('oracle', accounts.oracle),\n ],\n data: getOracleUpdateInstructionDataEncoder().encode({}),\n programAddress,\n } as OracleUpdateInstruction<TProgramAddress, TAccountPool, TAccountOracle>);\n}\n\nexport type ParsedOracleUpdateInstruction<\n TProgram extends string = typeof CPMM_PROGRAM_ADDRESS,\n TAccountMetas extends readonly AccountMeta[] = readonly AccountMeta[],\n> = {\n programAddress: Address<TProgram>;\n accounts: {\n pool: TAccountMetas[0];\n oracle: TAccountMetas[1];\n };\n data: OracleUpdateInstructionData;\n};\n\nexport function parseOracleUpdateInstruction<\n TProgram extends string,\n TAccountMetas extends readonly AccountMeta[],\n>(\n instruction: Instruction<TProgram> &\n InstructionWithAccounts<TAccountMetas> &\n InstructionWithData<ReadonlyUint8Array>,\n): ParsedOracleUpdateInstruction<TProgram, TAccountMetas> {\n if (instruction.accounts.length < 2) {\n throw new SolanaError(\n SOLANA_ERROR__PROGRAM_CLIENTS__INSUFFICIENT_ACCOUNT_METAS,\n {\n actualAccountMetas: instruction.accounts.length,\n expectedAccountMetas: 2,\n },\n );\n }\n let accountIndex = 0;\n const getNextAccount = () => {\n const accountMeta = (instruction.accounts as TAccountMetas)[accountIndex]!;\n accountIndex += 1;\n return accountMeta;\n };\n return {\n programAddress: instruction.programAddress,\n accounts: { pool: getNextAccount(), oracle: getNextAccount() },\n data: getOracleUpdateInstructionDataDecoder().decode(instruction.data),\n };\n}\n","/**\n * This code was AUTOGENERATED using the Codama library.\n * Please DO NOT EDIT THIS FILE, instead use visitors\n * to add features, then rerun Codama to update it.\n *\n * @see https://github.com/codama-idl/codama\n */\n\nimport {\n combineCodec,\n fixDecoderSize,\n fixEncoderSize,\n getBytesDecoder,\n getBytesEncoder,\n getStructDecoder,\n getStructEncoder,\n SOLANA_ERROR__PROGRAM_CLIENTS__INSUFFICIENT_ACCOUNT_METAS,\n SolanaError,\n transformEncoder,\n type AccountMeta,\n type AccountSignerMeta,\n type Address,\n type FixedSizeCodec,\n type FixedSizeDecoder,\n type FixedSizeEncoder,\n type Instruction,\n type InstructionWithAccounts,\n type InstructionWithData,\n type ReadonlySignerAccount,\n type ReadonlyUint8Array,\n type TransactionSigner,\n type WritableAccount,\n} from '@solana/kit';\nimport {\n getAccountMetaFactory,\n type ResolvedInstructionAccount,\n} from '@solana/program-client-core';\nimport { CPMM_PROGRAM_ADDRESS } from '../programs';\n\nexport const PAUSE_DISCRIMINATOR = new Uint8Array([\n 211, 22, 221, 251, 74, 121, 193, 47,\n]);\n\nexport function getPauseDiscriminatorBytes() {\n return fixEncoderSize(getBytesEncoder(), 8).encode(PAUSE_DISCRIMINATOR);\n}\n\nexport type PauseInstruction<\n TProgram extends string = typeof CPMM_PROGRAM_ADDRESS,\n TAccountConfig extends string | AccountMeta<string> = string,\n TAccountAdmin extends string | AccountMeta<string> = string,\n TRemainingAccounts extends readonly AccountMeta<string>[] = [],\n> = Instruction<TProgram> &\n InstructionWithData<ReadonlyUint8Array> &\n InstructionWithAccounts<\n [\n TAccountConfig extends string\n ? WritableAccount<TAccountConfig>\n : TAccountConfig,\n TAccountAdmin extends string\n ? ReadonlySignerAccount<TAccountAdmin> &\n AccountSignerMeta<TAccountAdmin>\n : TAccountAdmin,\n ...TRemainingAccounts,\n ]\n >;\n\nexport type PauseInstructionData = { discriminator: ReadonlyUint8Array };\n\nexport type PauseInstructionDataArgs = {};\n\nexport function getPauseInstructionDataEncoder(): FixedSizeEncoder<PauseInstructionDataArgs> {\n return transformEncoder(\n getStructEncoder([['discriminator', fixEncoderSize(getBytesEncoder(), 8)]]),\n (value) => ({ ...value, discriminator: PAUSE_DISCRIMINATOR }),\n );\n}\n\nexport function getPauseInstructionDataDecoder(): FixedSizeDecoder<PauseInstructionData> {\n return getStructDecoder([\n ['discriminator', fixDecoderSize(getBytesDecoder(), 8)],\n ]);\n}\n\nexport function getPauseInstructionDataCodec(): FixedSizeCodec<\n PauseInstructionDataArgs,\n PauseInstructionData\n> {\n return combineCodec(\n getPauseInstructionDataEncoder(),\n getPauseInstructionDataDecoder(),\n );\n}\n\nexport type PauseInput<\n TAccountConfig extends string = string,\n TAccountAdmin extends string = string,\n> = {\n config: Address<TAccountConfig>;\n admin: TransactionSigner<TAccountAdmin>;\n};\n\nexport function getPauseInstruction<\n TAccountConfig extends string,\n TAccountAdmin extends string,\n TProgramAddress extends Address = typeof CPMM_PROGRAM_ADDRESS,\n>(\n input: PauseInput<TAccountConfig, TAccountAdmin>,\n config?: { programAddress?: TProgramAddress },\n): PauseInstruction<TProgramAddress, TAccountConfig, TAccountAdmin> {\n // Program address.\n const programAddress = config?.programAddress ?? CPMM_PROGRAM_ADDRESS;\n\n // Original accounts.\n const originalAccounts = {\n config: { value: input.config ?? null, isWritable: true },\n admin: { value: input.admin ?? null, isWritable: false },\n };\n const accounts = originalAccounts as Record<\n keyof typeof originalAccounts,\n ResolvedInstructionAccount\n >;\n\n const getAccountMeta = getAccountMetaFactory(programAddress, 'programId');\n return Object.freeze({\n accounts: [\n getAccountMeta('config', accounts.config),\n getAccountMeta('admin', accounts.admin),\n ],\n data: getPauseInstructionDataEncoder().encode({}),\n programAddress,\n } as PauseInstruction<TProgramAddress, TAccountConfig, TAccountAdmin>);\n}\n\nexport type ParsedPauseInstruction<\n TProgram extends string = typeof CPMM_PROGRAM_ADDRESS,\n TAccountMetas extends readonly AccountMeta[] = readonly AccountMeta[],\n> = {\n programAddress: Address<TProgram>;\n accounts: {\n config: TAccountMetas[0];\n admin: TAccountMetas[1];\n };\n data: PauseInstructionData;\n};\n\nexport function parsePauseInstruction<\n TProgram extends string,\n TAccountMetas extends readonly AccountMeta[],\n>(\n instruction: Instruction<TProgram> &\n InstructionWithAccounts<TAccountMetas> &\n InstructionWithData<ReadonlyUint8Array>,\n): ParsedPauseInstruction<TProgram, TAccountMetas> {\n if (instruction.accounts.length < 2) {\n throw new SolanaError(\n SOLANA_ERROR__PROGRAM_CLIENTS__INSUFFICIENT_ACCOUNT_METAS,\n {\n actualAccountMetas: instruction.accounts.length,\n expectedAccountMetas: 2,\n },\n );\n }\n let accountIndex = 0;\n const getNextAccount = () => {\n const accountMeta = (instruction.accounts as TAccountMetas)[accountIndex]!;\n accountIndex += 1;\n return accountMeta;\n };\n return {\n programAddress: instruction.programAddress,\n accounts: { config: getNextAccount(), admin: getNextAccount() },\n data: getPauseInstructionDataDecoder().decode(instruction.data),\n };\n}\n","/**\n * This code was AUTOGENERATED using the Codama library.\n * Please DO NOT EDIT THIS FILE, instead use visitors\n * to add features, then rerun Codama to update it.\n *\n * @see https://github.com/codama-idl/codama\n */\n\nimport {\n combineCodec,\n fixDecoderSize,\n fixEncoderSize,\n getBytesDecoder,\n getBytesEncoder,\n getStructDecoder,\n getStructEncoder,\n getU64Decoder,\n getU64Encoder,\n getU8Decoder,\n getU8Encoder,\n SOLANA_ERROR__PROGRAM_CLIENTS__INSUFFICIENT_ACCOUNT_METAS,\n SolanaError,\n transformEncoder,\n type AccountMeta,\n type Address,\n type FixedSizeCodec,\n type FixedSizeDecoder,\n type FixedSizeEncoder,\n type Instruction,\n type InstructionWithAccounts,\n type InstructionWithData,\n type ReadonlyAccount,\n type ReadonlyUint8Array,\n} from '@solana/kit';\nimport {\n getAccountMetaFactory,\n type ResolvedInstructionAccount,\n} from '@solana/program-client-core';\nimport { CPMM_PROGRAM_ADDRESS } from '../programs';\n\nexport const PREVIEW_SWAP_EXACT_IN_DISCRIMINATOR = new Uint8Array([\n 50, 130, 31, 69, 147, 58, 222, 178,\n]);\n\nexport function getPreviewSwapExactInDiscriminatorBytes() {\n return fixEncoderSize(getBytesEncoder(), 8).encode(\n PREVIEW_SWAP_EXACT_IN_DISCRIMINATOR,\n );\n}\n\nexport type PreviewSwapExactInInstruction<\n TProgram extends string = typeof CPMM_PROGRAM_ADDRESS,\n TAccountConfig extends string | AccountMeta<string> = string,\n TAccountPool extends string | AccountMeta<string> = string,\n TRemainingAccounts extends readonly AccountMeta<string>[] = [],\n> = Instruction<TProgram> &\n InstructionWithData<ReadonlyUint8Array> &\n InstructionWithAccounts<\n [\n TAccountConfig extends string\n ? ReadonlyAccount<TAccountConfig>\n : TAccountConfig,\n TAccountPool extends string\n ? ReadonlyAccount<TAccountPool>\n : TAccountPool,\n ...TRemainingAccounts,\n ]\n >;\n\nexport type PreviewSwapExactInInstructionData = {\n discriminator: ReadonlyUint8Array;\n amountIn: bigint;\n tradeDirection: number;\n};\n\nexport type PreviewSwapExactInInstructionDataArgs = {\n amountIn: number | bigint;\n tradeDirection: number;\n};\n\nexport function getPreviewSwapExactInInstructionDataEncoder(): FixedSizeEncoder<PreviewSwapExactInInstructionDataArgs> {\n return transformEncoder(\n getStructEncoder([\n ['discriminator', fixEncoderSize(getBytesEncoder(), 8)],\n ['amountIn', getU64Encoder()],\n ['tradeDirection', getU8Encoder()],\n ]),\n (value) => ({\n ...value,\n discriminator: PREVIEW_SWAP_EXACT_IN_DISCRIMINATOR,\n }),\n );\n}\n\nexport function getPreviewSwapExactInInstructionDataDecoder(): FixedSizeDecoder<PreviewSwapExactInInstructionData> {\n return getStructDecoder([\n ['discriminator', fixDecoderSize(getBytesDecoder(), 8)],\n ['amountIn', getU64Decoder()],\n ['tradeDirection', getU8Decoder()],\n ]);\n}\n\nexport function getPreviewSwapExactInInstructionDataCodec(): FixedSizeCodec<\n PreviewSwapExactInInstructionDataArgs,\n PreviewSwapExactInInstructionData\n> {\n return combineCodec(\n getPreviewSwapExactInInstructionDataEncoder(),\n getPreviewSwapExactInInstructionDataDecoder(),\n );\n}\n\nexport type PreviewSwapExactInInput<\n TAccountConfig extends string = string,\n TAccountPool extends string = string,\n> = {\n config: Address<TAccountConfig>;\n pool: Address<TAccountPool>;\n amountIn: PreviewSwapExactInInstructionDataArgs['amountIn'];\n tradeDirection: PreviewSwapExactInInstructionDataArgs['tradeDirection'];\n};\n\nexport function getPreviewSwapExactInInstruction<\n TAccountConfig extends string,\n TAccountPool extends string,\n TProgramAddress extends Address = typeof CPMM_PROGRAM_ADDRESS,\n>(\n input: PreviewSwapExactInInput<TAccountConfig, TAccountPool>,\n config?: { programAddress?: TProgramAddress },\n): PreviewSwapExactInInstruction<\n TProgramAddress,\n TAccountConfig,\n TAccountPool\n> {\n // Program address.\n const programAddress = config?.programAddress ?? CPMM_PROGRAM_ADDRESS;\n\n // Original accounts.\n const originalAccounts = {\n config: { value: input.config ?? null, isWritable: false },\n pool: { value: input.pool ?? null, isWritable: false },\n };\n const accounts = originalAccounts as Record<\n keyof typeof originalAccounts,\n ResolvedInstructionAccount\n >;\n\n // Original args.\n const args = { ...input };\n\n const getAccountMeta = getAccountMetaFactory(programAddress, 'programId');\n return Object.freeze({\n accounts: [\n getAccountMeta('config', accounts.config),\n getAccountMeta('pool', accounts.pool),\n ],\n data: getPreviewSwapExactInInstructionDataEncoder().encode(\n args as PreviewSwapExactInInstructionDataArgs,\n ),\n programAddress,\n } as PreviewSwapExactInInstruction<\n TProgramAddress,\n TAccountConfig,\n TAccountPool\n >);\n}\n\nexport type ParsedPreviewSwapExactInInstruction<\n TProgram extends string = typeof CPMM_PROGRAM_ADDRESS,\n TAccountMetas extends readonly AccountMeta[] = readonly AccountMeta[],\n> = {\n programAddress: Address<TProgram>;\n accounts: {\n config: TAccountMetas[0];\n pool: TAccountMetas[1];\n };\n data: PreviewSwapExactInInstructionData;\n};\n\nexport function parsePreviewSwapExactInInstruction<\n TProgram extends string,\n TAccountMetas extends readonly AccountMeta[],\n>(\n instruction: Instruction<TProgram> &\n InstructionWithAccounts<TAccountMetas> &\n InstructionWithData<ReadonlyUint8Array>,\n): ParsedPreviewSwapExactInInstruction<TProgram, TAccountMetas> {\n if (instruction.accounts.length < 2) {\n throw new SolanaError(\n SOLANA_ERROR__PROGRAM_CLIENTS__INSUFFICIENT_ACCOUNT_METAS,\n {\n actualAccountMetas: instruction.accounts.length,\n expectedAccountMetas: 2,\n },\n );\n }\n let accountIndex = 0;\n const getNextAccount = () => {\n const accountMeta = (instruction.accounts as TAccountMetas)[accountIndex]!;\n accountIndex += 1;\n return accountMeta;\n };\n return {\n programAddress: instruction.programAddress,\n accounts: { config: getNextAccount(), pool: getNextAccount() },\n data: getPreviewSwapExactInInstructionDataDecoder().decode(\n instruction.data,\n ),\n };\n}\n","/**\n * This code was AUTOGENERATED using the Codama library.\n * Please DO NOT EDIT THIS FILE, instead use visitors\n * to add features, then rerun Codama to update it.\n *\n * @see https://github.com/codama-idl/codama\n */\n\nimport {\n combineCodec,\n fixDecoderSize,\n fixEncoderSize,\n getAddressEncoder,\n getBytesDecoder,\n getBytesEncoder,\n getProgramDerivedAddress,\n getStructDecoder,\n getStructEncoder,\n getU128Decoder,\n getU128Encoder,\n getU64Decoder,\n getU64Encoder,\n SOLANA_ERROR__PROGRAM_CLIENTS__INSUFFICIENT_ACCOUNT_METAS,\n SolanaError,\n transformEncoder,\n type AccountMeta,\n type AccountSignerMeta,\n type Address,\n type FixedSizeCodec,\n type FixedSizeDecoder,\n type FixedSizeEncoder,\n type Instruction,\n type InstructionWithAccounts,\n type InstructionWithData,\n type ReadonlyAccount,\n type ReadonlySignerAccount,\n type ReadonlyUint8Array,\n type TransactionSigner,\n type WritableAccount,\n} from '@solana/kit';\nimport {\n getAccountMetaFactory,\n getAddressFromResolvedInstructionAccount,\n type ResolvedInstructionAccount,\n} from '@solana/program-client-core';\nimport { CPMM_PROGRAM_ADDRESS } from '../programs';\n\nexport const REDEEM_PROTOCOL_SHARES_DISCRIMINATOR = new Uint8Array([\n 143, 253, 251, 77, 213, 178, 0, 225,\n]);\n\nexport function getRedeemProtocolSharesDiscriminatorBytes() {\n return fixEncoderSize(getBytesEncoder(), 8).encode(\n REDEEM_PROTOCOL_SHARES_DISCRIMINATOR,\n );\n}\n\nexport type RedeemProtocolSharesInstruction<\n TProgram extends string = typeof CPMM_PROGRAM_ADDRESS,\n TAccountConfig extends string | AccountMeta<string> = string,\n TAccountPool extends string | AccountMeta<string> = string,\n TAccountProtocolFeePosition extends string | AccountMeta<string> = string,\n TAccountAdmin extends string | AccountMeta<string> = string,\n TAccountAuthority extends string | AccountMeta<string> = string,\n TAccountVault0 extends string | AccountMeta<string> = string,\n TAccountVault1 extends string | AccountMeta<string> = string,\n TAccountToken0Mint extends string | AccountMeta<string> = string,\n TAccountToken1Mint extends string | AccountMeta<string> = string,\n TAccountRecipient0 extends string | AccountMeta<string> = string,\n TAccountRecipient1 extends string | AccountMeta<string> = string,\n TAccountToken0Program extends string | AccountMeta<string> = string,\n TAccountToken1Program extends string | AccountMeta<string> = string,\n TRemainingAccounts extends readonly AccountMeta<string>[] = [],\n> = Instruction<TProgram> &\n InstructionWithData<ReadonlyUint8Array> &\n InstructionWithAccounts<\n [\n TAccountConfig extends string\n ? ReadonlyAccount<TAccountConfig>\n : TAccountConfig,\n TAccountPool extends string\n ? WritableAccount<TAccountPool>\n : TAccountPool,\n TAccountProtocolFeePosition extends string\n ? WritableAccount<TAccountProtocolFeePosition>\n : TAccountProtocolFeePosition,\n TAccountAdmin extends string\n ? ReadonlySignerAccount<TAccountAdmin> &\n AccountSignerMeta<TAccountAdmin>\n : TAccountAdmin,\n TAccountAuthority extends string\n ? ReadonlyAccount<TAccountAuthority>\n : TAccountAuthority,\n TAccountVault0 extends string\n ? WritableAccount<TAccountVault0>\n : TAccountVault0,\n TAccountVault1 extends string\n ? WritableAccount<TAccountVault1>\n : TAccountVault1,\n TAccountToken0Mint extends string\n ? ReadonlyAccount<TAccountToken0Mint>\n : TAccountToken0Mint,\n TAccountToken1Mint extends string\n ? ReadonlyAccount<TAccountToken1Mint>\n : TAccountToken1Mint,\n TAccountRecipient0 extends string\n ? WritableAccount<TAccountRecipient0>\n : TAccountRecipient0,\n TAccountRecipient1 extends string\n ? WritableAccount<TAccountRecipient1>\n : TAccountRecipient1,\n TAccountToken0Program extends string\n ? ReadonlyAccount<TAccountToken0Program>\n : TAccountToken0Program,\n TAccountToken1Program extends string\n ? ReadonlyAccount<TAccountToken1Program>\n : TAccountToken1Program,\n ...TRemainingAccounts,\n ]\n >;\n\nexport type RedeemProtocolSharesInstructionData = {\n discriminator: ReadonlyUint8Array;\n sharesIn: bigint;\n minAmount0Out: bigint;\n minAmount1Out: bigint;\n};\n\nexport type RedeemProtocolSharesInstructionDataArgs = {\n sharesIn: number | bigint;\n minAmount0Out: number | bigint;\n minAmount1Out: number | bigint;\n};\n\nexport function getRedeemProtocolSharesInstructionDataEncoder(): FixedSizeEncoder<RedeemProtocolSharesInstructionDataArgs> {\n return transformEncoder(\n getStructEncoder([\n ['discriminator', fixEncoderSize(getBytesEncoder(), 8)],\n ['sharesIn', getU128Encoder()],\n ['minAmount0Out', getU64Encoder()],\n ['minAmount1Out', getU64Encoder()],\n ]),\n (value) => ({\n ...value,\n discriminator: REDEEM_PROTOCOL_SHARES_DISCRIMINATOR,\n }),\n );\n}\n\nexport function getRedeemProtocolSharesInstructionDataDecoder(): FixedSizeDecoder<RedeemProtocolSharesInstructionData> {\n return getStructDecoder([\n ['discriminator', fixDecoderSize(getBytesDecoder(), 8)],\n ['sharesIn', getU128Decoder()],\n ['minAmount0Out', getU64Decoder()],\n ['minAmount1Out', getU64Decoder()],\n ]);\n}\n\nexport function getRedeemProtocolSharesInstructionDataCodec(): FixedSizeCodec<\n RedeemProtocolSharesInstructionDataArgs,\n RedeemProtocolSharesInstructionData\n> {\n return combineCodec(\n getRedeemProtocolSharesInstructionDataEncoder(),\n getRedeemProtocolSharesInstructionDataDecoder(),\n );\n}\n\nexport type RedeemProtocolSharesAsyncInput<\n TAccountConfig extends string = string,\n TAccountPool extends string = string,\n TAccountProtocolFeePosition extends string = string,\n TAccountAdmin extends string = string,\n TAccountAuthority extends string = string,\n TAccountVault0 extends string = string,\n TAccountVault1 extends string = string,\n TAccountToken0Mint extends string = string,\n TAccountToken1Mint extends string = string,\n TAccountRecipient0 extends string = string,\n TAccountRecipient1 extends string = string,\n TAccountToken0Program extends string = string,\n TAccountToken1Program extends string = string,\n> = {\n config: Address<TAccountConfig>;\n pool: Address<TAccountPool>;\n protocolFeePosition: Address<TAccountProtocolFeePosition>;\n admin: TransactionSigner<TAccountAdmin>;\n authority?: Address<TAccountAuthority>;\n vault0: Address<TAccountVault0>;\n vault1: Address<TAccountVault1>;\n token0Mint: Address<TAccountToken0Mint>;\n token1Mint: Address<TAccountToken1Mint>;\n recipient0: Address<TAccountRecipient0>;\n recipient1: Address<TAccountRecipient1>;\n token0Program: Address<TAccountToken0Program>;\n token1Program: Address<TAccountToken1Program>;\n sharesIn: RedeemProtocolSharesInstructionDataArgs['sharesIn'];\n minAmount0Out: RedeemProtocolSharesInstructionDataArgs['minAmount0Out'];\n minAmount1Out: RedeemProtocolSharesInstructionDataArgs['minAmount1Out'];\n};\n\nexport async function getRedeemProtocolSharesInstructionAsync<\n TAccountConfig extends string,\n TAccountPool extends string,\n TAccountProtocolFeePosition extends string,\n TAccountAdmin extends string,\n TAccountAuthority extends string,\n TAccountVault0 extends string,\n TAccountVault1 extends string,\n TAccountToken0Mint extends string,\n TAccountToken1Mint extends string,\n TAccountRecipient0 extends string,\n TAccountRecipient1 extends string,\n TAccountToken0Program extends string,\n TAccountToken1Program extends string,\n TProgramAddress extends Address = typeof CPMM_PROGRAM_ADDRESS,\n>(\n input: RedeemProtocolSharesAsyncInput<\n TAccountConfig,\n TAccountPool,\n TAccountProtocolFeePosition,\n TAccountAdmin,\n TAccountAuthority,\n TAccountVault0,\n TAccountVault1,\n TAccountToken0Mint,\n TAccountToken1Mint,\n TAccountRecipient0,\n TAccountRecipient1,\n TAccountToken0Program,\n TAccountToken1Program\n >,\n config?: { programAddress?: TProgramAddress },\n): Promise<\n RedeemProtocolSharesInstruction<\n TProgramAddress,\n TAccountConfig,\n TAccountPool,\n TAccountProtocolFeePosition,\n TAccountAdmin,\n TAccountAuthority,\n TAccountVault0,\n TAccountVault1,\n TAccountToken0Mint,\n TAccountToken1Mint,\n TAccountRecipient0,\n TAccountRecipient1,\n TAccountToken0Program,\n TAccountToken1Program\n >\n> {\n // Program address.\n const programAddress = config?.programAddress ?? CPMM_PROGRAM_ADDRESS;\n\n // Original accounts.\n const originalAccounts = {\n config: { value: input.config ?? null, isWritable: false },\n pool: { value: input.pool ?? null, isWritable: true },\n protocolFeePosition: {\n value: input.protocolFeePosition ?? null,\n isWritable: true,\n },\n admin: { value: input.admin ?? null, isWritable: false },\n authority: { value: input.authority ?? null, isWritable: false },\n vault0: { value: input.vault0 ?? null, isWritable: true },\n vault1: { value: input.vault1 ?? null, isWritable: true },\n token0Mint: { value: input.token0Mint ?? null, isWritable: false },\n token1Mint: { value: input.token1Mint ?? null, isWritable: false },\n recipient0: { value: input.recipient0 ?? null, isWritable: true },\n recipient1: { value: input.recipient1 ?? null, isWritable: true },\n token0Program: { value: input.token0Program ?? null, isWritable: false },\n token1Program: { value: input.token1Program ?? null, isWritable: false },\n };\n const accounts = originalAccounts as Record<\n keyof typeof originalAccounts,\n ResolvedInstructionAccount\n >;\n\n // Original args.\n const args = { ...input };\n\n // Resolve default values.\n if (!accounts.authority.value) {\n accounts.authority.value = await getProgramDerivedAddress({\n programAddress,\n seeds: [\n getBytesEncoder().encode(\n new Uint8Array([97, 117, 116, 104, 111, 114, 105, 116, 121]),\n ),\n getAddressEncoder().encode(\n getAddressFromResolvedInstructionAccount('pool', accounts.pool.value),\n ),\n ],\n });\n }\n\n const getAccountMeta = getAccountMetaFactory(programAddress, 'programId');\n return Object.freeze({\n accounts: [\n getAccountMeta('config', accounts.config),\n getAccountMeta('pool', accounts.pool),\n getAccountMeta('protocolFeePosition', accounts.protocolFeePosition),\n getAccountMeta('admin', accounts.admin),\n getAccountMeta('authority', accounts.authority),\n getAccountMeta('vault0', accounts.vault0),\n getAccountMeta('vault1', accounts.vault1),\n getAccountMeta('token0Mint', accounts.token0Mint),\n getAccountMeta('token1Mint', accounts.token1Mint),\n getAccountMeta('recipient0', accounts.recipient0),\n getAccountMeta('recipient1', accounts.recipient1),\n getAccountMeta('token0Program', accounts.token0Program),\n getAccountMeta('token1Program', accounts.token1Program),\n ],\n data: getRedeemProtocolSharesInstructionDataEncoder().encode(\n args as RedeemProtocolSharesInstructionDataArgs,\n ),\n programAddress,\n } as RedeemProtocolSharesInstruction<\n TProgramAddress,\n TAccountConfig,\n TAccountPool,\n TAccountProtocolFeePosition,\n TAccountAdmin,\n TAccountAuthority,\n TAccountVault0,\n TAccountVault1,\n TAccountToken0Mint,\n TAccountToken1Mint,\n TAccountRecipient0,\n TAccountRecipient1,\n TAccountToken0Program,\n TAccountToken1Program\n >);\n}\n\nexport type RedeemProtocolSharesInput<\n TAccountConfig extends string = string,\n TAccountPool extends string = string,\n TAccountProtocolFeePosition extends string = string,\n TAccountAdmin extends string = string,\n TAccountAuthority extends string = string,\n TAccountVault0 extends string = string,\n TAccountVault1 extends string = string,\n TAccountToken0Mint extends string = string,\n TAccountToken1Mint extends string = string,\n TAccountRecipient0 extends string = string,\n TAccountRecipient1 extends string = string,\n TAccountToken0Program extends string = string,\n TAccountToken1Program extends string = string,\n> = {\n config: Address<TAccountConfig>;\n pool: Address<TAccountPool>;\n protocolFeePosition: Address<TAccountProtocolFeePosition>;\n admin: TransactionSigner<TAccountAdmin>;\n authority: Address<TAccountAuthority>;\n vault0: Address<TAccountVault0>;\n vault1: Address<TAccountVault1>;\n token0Mint: Address<TAccountToken0Mint>;\n token1Mint: Address<TAccountToken1Mint>;\n recipient0: Address<TAccountRecipient0>;\n recipient1: Address<TAccountRecipient1>;\n token0Program: Address<TAccountToken0Program>;\n token1Program: Address<TAccountToken1Program>;\n sharesIn: RedeemProtocolSharesInstructionDataArgs['sharesIn'];\n minAmount0Out: RedeemProtocolSharesInstructionDataArgs['minAmount0Out'];\n minAmount1Out: RedeemProtocolSharesInstructionDataArgs['minAmount1Out'];\n};\n\nexport function getRedeemProtocolSharesInstruction<\n TAccountConfig extends string,\n TAccountPool extends string,\n TAccountProtocolFeePosition extends string,\n TAccountAdmin extends string,\n TAccountAuthority extends string,\n TAccountVault0 extends string,\n TAccountVault1 extends string,\n TAccountToken0Mint extends string,\n TAccountToken1Mint extends string,\n TAccountRecipient0 extends string,\n TAccountRecipient1 extends string,\n TAccountToken0Program extends string,\n TAccountToken1Program extends string,\n TProgramAddress extends Address = typeof CPMM_PROGRAM_ADDRESS,\n>(\n input: RedeemProtocolSharesInput<\n TAccountConfig,\n TAccountPool,\n TAccountProtocolFeePosition,\n TAccountAdmin,\n TAccountAuthority,\n TAccountVault0,\n TAccountVault1,\n TAccountToken0Mint,\n TAccountToken1Mint,\n TAccountRecipient0,\n TAccountRecipient1,\n TAccountToken0Program,\n TAccountToken1Program\n >,\n config?: { programAddress?: TProgramAddress },\n): RedeemProtocolSharesInstruction<\n TProgramAddress,\n TAccountConfig,\n TAccountPool,\n TAccountProtocolFeePosition,\n TAccountAdmin,\n TAccountAuthority,\n TAccountVault0,\n TAccountVault1,\n TAccountToken0Mint,\n TAccountToken1Mint,\n TAccountRecipient0,\n TAccountRecipient1,\n TAccountToken0Program,\n TAccountToken1Program\n> {\n // Program address.\n const programAddress = config?.programAddress ?? CPMM_PROGRAM_ADDRESS;\n\n // Original accounts.\n const originalAccounts = {\n config: { value: input.config ?? null, isWritable: false },\n pool: { value: input.pool ?? null, isWritable: true },\n protocolFeePosition: {\n value: input.protocolFeePosition ?? null,\n isWritable: true,\n },\n admin: { value: input.admin ?? null, isWritable: false },\n authority: { value: input.authority ?? null, isWritable: false },\n vault0: { value: input.vault0 ?? null, isWritable: true },\n vault1: { value: input.vault1 ?? null, isWritable: true },\n token0Mint: { value: input.token0Mint ?? null, isWritable: false },\n token1Mint: { value: input.token1Mint ?? null, isWritable: false },\n recipient0: { value: input.recipient0 ?? null, isWritable: true },\n recipient1: { value: input.recipient1 ?? null, isWritable: true },\n token0Program: { value: input.token0Program ?? null, isWritable: false },\n token1Program: { value: input.token1Program ?? null, isWritable: false },\n };\n const accounts = originalAccounts as Record<\n keyof typeof originalAccounts,\n ResolvedInstructionAccount\n >;\n\n // Original args.\n const args = { ...input };\n\n const getAccountMeta = getAccountMetaFactory(programAddress, 'programId');\n return Object.freeze({\n accounts: [\n getAccountMeta('config', accounts.config),\n getAccountMeta('pool', accounts.pool),\n getAccountMeta('protocolFeePosition', accounts.protocolFeePosition),\n getAccountMeta('admin', accounts.admin),\n getAccountMeta('authority', accounts.authority),\n getAccountMeta('vault0', accounts.vault0),\n getAccountMeta('vault1', accounts.vault1),\n getAccountMeta('token0Mint', accounts.token0Mint),\n getAccountMeta('token1Mint', accounts.token1Mint),\n getAccountMeta('recipient0', accounts.recipient0),\n getAccountMeta('recipient1', accounts.recipient1),\n getAccountMeta('token0Program', accounts.token0Program),\n getAccountMeta('token1Program', accounts.token1Program),\n ],\n data: getRedeemProtocolSharesInstructionDataEncoder().encode(\n args as RedeemProtocolSharesInstructionDataArgs,\n ),\n programAddress,\n } as RedeemProtocolSharesInstruction<\n TProgramAddress,\n TAccountConfig,\n TAccountPool,\n TAccountProtocolFeePosition,\n TAccountAdmin,\n TAccountAuthority,\n TAccountVault0,\n TAccountVault1,\n TAccountToken0Mint,\n TAccountToken1Mint,\n TAccountRecipient0,\n TAccountRecipient1,\n TAccountToken0Program,\n TAccountToken1Program\n >);\n}\n\nexport type ParsedRedeemProtocolSharesInstruction<\n TProgram extends string = typeof CPMM_PROGRAM_ADDRESS,\n TAccountMetas extends readonly AccountMeta[] = readonly AccountMeta[],\n> = {\n programAddress: Address<TProgram>;\n accounts: {\n config: TAccountMetas[0];\n pool: TAccountMetas[1];\n protocolFeePosition: TAccountMetas[2];\n admin: TAccountMetas[3];\n authority: TAccountMetas[4];\n vault0: TAccountMetas[5];\n vault1: TAccountMetas[6];\n token0Mint: TAccountMetas[7];\n token1Mint: TAccountMetas[8];\n recipient0: TAccountMetas[9];\n recipient1: TAccountMetas[10];\n token0Program: TAccountMetas[11];\n token1Program: TAccountMetas[12];\n };\n data: RedeemProtocolSharesInstructionData;\n};\n\nexport function parseRedeemProtocolSharesInstruction<\n TProgram extends string,\n TAccountMetas extends readonly AccountMeta[],\n>(\n instruction: Instruction<TProgram> &\n InstructionWithAccounts<TAccountMetas> &\n InstructionWithData<ReadonlyUint8Array>,\n): ParsedRedeemProtocolSharesInstruction<TProgram, TAccountMetas> {\n if (instruction.accounts.length < 13) {\n throw new SolanaError(\n SOLANA_ERROR__PROGRAM_CLIENTS__INSUFFICIENT_ACCOUNT_METAS,\n {\n actualAccountMetas: instruction.accounts.length,\n expectedAccountMetas: 13,\n },\n );\n }\n let accountIndex = 0;\n const getNextAccount = () => {\n const accountMeta = (instruction.accounts as TAccountMetas)[accountIndex]!;\n accountIndex += 1;\n return accountMeta;\n };\n return {\n programAddress: instruction.programAddress,\n accounts: {\n config: getNextAccount(),\n pool: getNextAccount(),\n protocolFeePosition: getNextAccount(),\n admin: getNextAccount(),\n authority: getNextAccount(),\n vault0: getNextAccount(),\n vault1: getNextAccount(),\n token0Mint: getNextAccount(),\n token1Mint: getNextAccount(),\n recipient0: getNextAccount(),\n recipient1: getNextAccount(),\n token0Program: getNextAccount(),\n token1Program: getNextAccount(),\n },\n data: getRedeemProtocolSharesInstructionDataDecoder().decode(\n instruction.data,\n ),\n };\n}\n","/**\n * This code was AUTOGENERATED using the Codama library.\n * Please DO NOT EDIT THIS FILE, instead use visitors\n * to add features, then rerun Codama to update it.\n *\n * @see https://github.com/codama-idl/codama\n */\n\nimport {\n combineCodec,\n fixDecoderSize,\n fixEncoderSize,\n getAddressEncoder,\n getBooleanDecoder,\n getBooleanEncoder,\n getBytesDecoder,\n getBytesEncoder,\n getProgramDerivedAddress,\n getStructDecoder,\n getStructEncoder,\n getU128Decoder,\n getU128Encoder,\n getU64Decoder,\n getU64Encoder,\n SOLANA_ERROR__PROGRAM_CLIENTS__INSUFFICIENT_ACCOUNT_METAS,\n SolanaError,\n transformEncoder,\n type AccountMeta,\n type AccountSignerMeta,\n type Address,\n type FixedSizeCodec,\n type FixedSizeDecoder,\n type FixedSizeEncoder,\n type Instruction,\n type InstructionWithAccounts,\n type InstructionWithData,\n type ReadonlyAccount,\n type ReadonlySignerAccount,\n type ReadonlyUint8Array,\n type TransactionSigner,\n type WritableAccount,\n} from '@solana/kit';\nimport {\n getAccountMetaFactory,\n getAddressFromResolvedInstructionAccount,\n type ResolvedInstructionAccount,\n} from '@solana/program-client-core';\nimport { CPMM_PROGRAM_ADDRESS } from '../programs';\n\nexport const REMOVE_LIQUIDITY_DISCRIMINATOR = new Uint8Array([\n 80, 85, 209, 72, 24, 206, 177, 108,\n]);\n\nexport function getRemoveLiquidityDiscriminatorBytes() {\n return fixEncoderSize(getBytesEncoder(), 8).encode(\n REMOVE_LIQUIDITY_DISCRIMINATOR,\n );\n}\n\nexport type RemoveLiquidityInstruction<\n TProgram extends string = typeof CPMM_PROGRAM_ADDRESS,\n TAccountConfig extends string | AccountMeta<string> = string,\n TAccountPool extends string | AccountMeta<string> = string,\n TAccountPosition extends string | AccountMeta<string> = string,\n TAccountProtocolFeePosition extends string | AccountMeta<string> = string,\n TAccountOwner extends string | AccountMeta<string> = string,\n TAccountAuthority extends string | AccountMeta<string> = string,\n TAccountVault0 extends string | AccountMeta<string> = string,\n TAccountVault1 extends string | AccountMeta<string> = string,\n TAccountToken0Mint extends string | AccountMeta<string> = string,\n TAccountToken1Mint extends string | AccountMeta<string> = string,\n TAccountUser0 extends string | AccountMeta<string> = string,\n TAccountUser1 extends string | AccountMeta<string> = string,\n TAccountToken0Program extends string | AccountMeta<string> = string,\n TAccountToken1Program extends string | AccountMeta<string> = string,\n TAccountOracle extends string | AccountMeta<string> = string,\n TRemainingAccounts extends readonly AccountMeta<string>[] = [],\n> = Instruction<TProgram> &\n InstructionWithData<ReadonlyUint8Array> &\n InstructionWithAccounts<\n [\n TAccountConfig extends string\n ? ReadonlyAccount<TAccountConfig>\n : TAccountConfig,\n TAccountPool extends string\n ? WritableAccount<TAccountPool>\n : TAccountPool,\n TAccountPosition extends string\n ? WritableAccount<TAccountPosition>\n : TAccountPosition,\n TAccountProtocolFeePosition extends string\n ? WritableAccount<TAccountProtocolFeePosition>\n : TAccountProtocolFeePosition,\n TAccountOwner extends string\n ? ReadonlySignerAccount<TAccountOwner> &\n AccountSignerMeta<TAccountOwner>\n : TAccountOwner,\n TAccountAuthority extends string\n ? ReadonlyAccount<TAccountAuthority>\n : TAccountAuthority,\n TAccountVault0 extends string\n ? WritableAccount<TAccountVault0>\n : TAccountVault0,\n TAccountVault1 extends string\n ? WritableAccount<TAccountVault1>\n : TAccountVault1,\n TAccountToken0Mint extends string\n ? ReadonlyAccount<TAccountToken0Mint>\n : TAccountToken0Mint,\n TAccountToken1Mint extends string\n ? ReadonlyAccount<TAccountToken1Mint>\n : TAccountToken1Mint,\n TAccountUser0 extends string\n ? WritableAccount<TAccountUser0>\n : TAccountUser0,\n TAccountUser1 extends string\n ? WritableAccount<TAccountUser1>\n : TAccountUser1,\n TAccountToken0Program extends string\n ? ReadonlyAccount<TAccountToken0Program>\n : TAccountToken0Program,\n TAccountToken1Program extends string\n ? ReadonlyAccount<TAccountToken1Program>\n : TAccountToken1Program,\n TAccountOracle extends string\n ? WritableAccount<TAccountOracle>\n : TAccountOracle,\n ...TRemainingAccounts,\n ]\n >;\n\nexport type RemoveLiquidityInstructionData = {\n discriminator: ReadonlyUint8Array;\n sharesIn: bigint;\n minAmount0Out: bigint;\n minAmount1Out: bigint;\n updateOracle: boolean;\n};\n\nexport type RemoveLiquidityInstructionDataArgs = {\n sharesIn: number | bigint;\n minAmount0Out: number | bigint;\n minAmount1Out: number | bigint;\n updateOracle: boolean;\n};\n\nexport function getRemoveLiquidityInstructionDataEncoder(): FixedSizeEncoder<RemoveLiquidityInstructionDataArgs> {\n return transformEncoder(\n getStructEncoder([\n ['discriminator', fixEncoderSize(getBytesEncoder(), 8)],\n ['sharesIn', getU128Encoder()],\n ['minAmount0Out', getU64Encoder()],\n ['minAmount1Out', getU64Encoder()],\n ['updateOracle', getBooleanEncoder()],\n ]),\n (value) => ({ ...value, discriminator: REMOVE_LIQUIDITY_DISCRIMINATOR }),\n );\n}\n\nexport function getRemoveLiquidityInstructionDataDecoder(): FixedSizeDecoder<RemoveLiquidityInstructionData> {\n return getStructDecoder([\n ['discriminator', fixDecoderSize(getBytesDecoder(), 8)],\n ['sharesIn', getU128Decoder()],\n ['minAmount0Out', getU64Decoder()],\n ['minAmount1Out', getU64Decoder()],\n ['updateOracle', getBooleanDecoder()],\n ]);\n}\n\nexport function getRemoveLiquidityInstructionDataCodec(): FixedSizeCodec<\n RemoveLiquidityInstructionDataArgs,\n RemoveLiquidityInstructionData\n> {\n return combineCodec(\n getRemoveLiquidityInstructionDataEncoder(),\n getRemoveLiquidityInstructionDataDecoder(),\n );\n}\n\nexport type RemoveLiquidityAsyncInput<\n TAccountConfig extends string = string,\n TAccountPool extends string = string,\n TAccountPosition extends string = string,\n TAccountProtocolFeePosition extends string = string,\n TAccountOwner extends string = string,\n TAccountAuthority extends string = string,\n TAccountVault0 extends string = string,\n TAccountVault1 extends string = string,\n TAccountToken0Mint extends string = string,\n TAccountToken1Mint extends string = string,\n TAccountUser0 extends string = string,\n TAccountUser1 extends string = string,\n TAccountToken0Program extends string = string,\n TAccountToken1Program extends string = string,\n TAccountOracle extends string = string,\n> = {\n config: Address<TAccountConfig>;\n pool: Address<TAccountPool>;\n position: Address<TAccountPosition>;\n protocolFeePosition: Address<TAccountProtocolFeePosition>;\n owner: TransactionSigner<TAccountOwner>;\n authority?: Address<TAccountAuthority>;\n vault0: Address<TAccountVault0>;\n vault1: Address<TAccountVault1>;\n token0Mint: Address<TAccountToken0Mint>;\n token1Mint: Address<TAccountToken1Mint>;\n user0: Address<TAccountUser0>;\n user1: Address<TAccountUser1>;\n token0Program: Address<TAccountToken0Program>;\n token1Program: Address<TAccountToken1Program>;\n oracle?: Address<TAccountOracle>;\n sharesIn: RemoveLiquidityInstructionDataArgs['sharesIn'];\n minAmount0Out: RemoveLiquidityInstructionDataArgs['minAmount0Out'];\n minAmount1Out: RemoveLiquidityInstructionDataArgs['minAmount1Out'];\n updateOracle: RemoveLiquidityInstructionDataArgs['updateOracle'];\n};\n\nexport async function getRemoveLiquidityInstructionAsync<\n TAccountConfig extends string,\n TAccountPool extends string,\n TAccountPosition extends string,\n TAccountProtocolFeePosition extends string,\n TAccountOwner extends string,\n TAccountAuthority extends string,\n TAccountVault0 extends string,\n TAccountVault1 extends string,\n TAccountToken0Mint extends string,\n TAccountToken1Mint extends string,\n TAccountUser0 extends string,\n TAccountUser1 extends string,\n TAccountToken0Program extends string,\n TAccountToken1Program extends string,\n TAccountOracle extends string,\n TProgramAddress extends Address = typeof CPMM_PROGRAM_ADDRESS,\n>(\n input: RemoveLiquidityAsyncInput<\n TAccountConfig,\n TAccountPool,\n TAccountPosition,\n TAccountProtocolFeePosition,\n TAccountOwner,\n TAccountAuthority,\n TAccountVault0,\n TAccountVault1,\n TAccountToken0Mint,\n TAccountToken1Mint,\n TAccountUser0,\n TAccountUser1,\n TAccountToken0Program,\n TAccountToken1Program,\n TAccountOracle\n >,\n config?: { programAddress?: TProgramAddress },\n): Promise<\n RemoveLiquidityInstruction<\n TProgramAddress,\n TAccountConfig,\n TAccountPool,\n TAccountPosition,\n TAccountProtocolFeePosition,\n TAccountOwner,\n TAccountAuthority,\n TAccountVault0,\n TAccountVault1,\n TAccountToken0Mint,\n TAccountToken1Mint,\n TAccountUser0,\n TAccountUser1,\n TAccountToken0Program,\n TAccountToken1Program,\n TAccountOracle\n >\n> {\n // Program address.\n const programAddress = config?.programAddress ?? CPMM_PROGRAM_ADDRESS;\n\n // Original accounts.\n const originalAccounts = {\n config: { value: input.config ?? null, isWritable: false },\n pool: { value: input.pool ?? null, isWritable: true },\n position: { value: input.position ?? null, isWritable: true },\n protocolFeePosition: {\n value: input.protocolFeePosition ?? null,\n isWritable: true,\n },\n owner: { value: input.owner ?? null, isWritable: false },\n authority: { value: input.authority ?? null, isWritable: false },\n vault0: { value: input.vault0 ?? null, isWritable: true },\n vault1: { value: input.vault1 ?? null, isWritable: true },\n token0Mint: { value: input.token0Mint ?? null, isWritable: false },\n token1Mint: { value: input.token1Mint ?? null, isWritable: false },\n user0: { value: input.user0 ?? null, isWritable: true },\n user1: { value: input.user1 ?? null, isWritable: true },\n token0Program: { value: input.token0Program ?? null, isWritable: false },\n token1Program: { value: input.token1Program ?? null, isWritable: false },\n oracle: { value: input.oracle ?? null, isWritable: true },\n };\n const accounts = originalAccounts as Record<\n keyof typeof originalAccounts,\n ResolvedInstructionAccount\n >;\n\n // Original args.\n const args = { ...input };\n\n // Resolve default values.\n if (!accounts.authority.value) {\n accounts.authority.value = await getProgramDerivedAddress({\n programAddress,\n seeds: [\n getBytesEncoder().encode(\n new Uint8Array([97, 117, 116, 104, 111, 114, 105, 116, 121]),\n ),\n getAddressEncoder().encode(\n getAddressFromResolvedInstructionAccount('pool', accounts.pool.value),\n ),\n ],\n });\n }\n\n const getAccountMeta = getAccountMetaFactory(programAddress, 'programId');\n return Object.freeze({\n accounts: [\n getAccountMeta('config', accounts.config),\n getAccountMeta('pool', accounts.pool),\n getAccountMeta('position', accounts.position),\n getAccountMeta('protocolFeePosition', accounts.protocolFeePosition),\n getAccountMeta('owner', accounts.owner),\n getAccountMeta('authority', accounts.authority),\n getAccountMeta('vault0', accounts.vault0),\n getAccountMeta('vault1', accounts.vault1),\n getAccountMeta('token0Mint', accounts.token0Mint),\n getAccountMeta('token1Mint', accounts.token1Mint),\n getAccountMeta('user0', accounts.user0),\n getAccountMeta('user1', accounts.user1),\n getAccountMeta('token0Program', accounts.token0Program),\n getAccountMeta('token1Program', accounts.token1Program),\n getAccountMeta('oracle', accounts.oracle),\n ],\n data: getRemoveLiquidityInstructionDataEncoder().encode(\n args as RemoveLiquidityInstructionDataArgs,\n ),\n programAddress,\n } as RemoveLiquidityInstruction<\n TProgramAddress,\n TAccountConfig,\n TAccountPool,\n TAccountPosition,\n TAccountProtocolFeePosition,\n TAccountOwner,\n TAccountAuthority,\n TAccountVault0,\n TAccountVault1,\n TAccountToken0Mint,\n TAccountToken1Mint,\n TAccountUser0,\n TAccountUser1,\n TAccountToken0Program,\n TAccountToken1Program,\n TAccountOracle\n >);\n}\n\nexport type RemoveLiquidityInput<\n TAccountConfig extends string = string,\n TAccountPool extends string = string,\n TAccountPosition extends string = string,\n TAccountProtocolFeePosition extends string = string,\n TAccountOwner extends string = string,\n TAccountAuthority extends string = string,\n TAccountVault0 extends string = string,\n TAccountVault1 extends string = string,\n TAccountToken0Mint extends string = string,\n TAccountToken1Mint extends string = string,\n TAccountUser0 extends string = string,\n TAccountUser1 extends string = string,\n TAccountToken0Program extends string = string,\n TAccountToken1Program extends string = string,\n TAccountOracle extends string = string,\n> = {\n config: Address<TAccountConfig>;\n pool: Address<TAccountPool>;\n position: Address<TAccountPosition>;\n protocolFeePosition: Address<TAccountProtocolFeePosition>;\n owner: TransactionSigner<TAccountOwner>;\n authority: Address<TAccountAuthority>;\n vault0: Address<TAccountVault0>;\n vault1: Address<TAccountVault1>;\n token0Mint: Address<TAccountToken0Mint>;\n token1Mint: Address<TAccountToken1Mint>;\n user0: Address<TAccountUser0>;\n user1: Address<TAccountUser1>;\n token0Program: Address<TAccountToken0Program>;\n token1Program: Address<TAccountToken1Program>;\n oracle?: Address<TAccountOracle>;\n sharesIn: RemoveLiquidityInstructionDataArgs['sharesIn'];\n minAmount0Out: RemoveLiquidityInstructionDataArgs['minAmount0Out'];\n minAmount1Out: RemoveLiquidityInstructionDataArgs['minAmount1Out'];\n updateOracle: RemoveLiquidityInstructionDataArgs['updateOracle'];\n};\n\nexport function getRemoveLiquidityInstruction<\n TAccountConfig extends string,\n TAccountPool extends string,\n TAccountPosition extends string,\n TAccountProtocolFeePosition extends string,\n TAccountOwner extends string,\n TAccountAuthority extends string,\n TAccountVault0 extends string,\n TAccountVault1 extends string,\n TAccountToken0Mint extends string,\n TAccountToken1Mint extends string,\n TAccountUser0 extends string,\n TAccountUser1 extends string,\n TAccountToken0Program extends string,\n TAccountToken1Program extends string,\n TAccountOracle extends string,\n TProgramAddress extends Address = typeof CPMM_PROGRAM_ADDRESS,\n>(\n input: RemoveLiquidityInput<\n TAccountConfig,\n TAccountPool,\n TAccountPosition,\n TAccountProtocolFeePosition,\n TAccountOwner,\n TAccountAuthority,\n TAccountVault0,\n TAccountVault1,\n TAccountToken0Mint,\n TAccountToken1Mint,\n TAccountUser0,\n TAccountUser1,\n TAccountToken0Program,\n TAccountToken1Program,\n TAccountOracle\n >,\n config?: { programAddress?: TProgramAddress },\n): RemoveLiquidityInstruction<\n TProgramAddress,\n TAccountConfig,\n TAccountPool,\n TAccountPosition,\n TAccountProtocolFeePosition,\n TAccountOwner,\n TAccountAuthority,\n TAccountVault0,\n TAccountVault1,\n TAccountToken0Mint,\n TAccountToken1Mint,\n TAccountUser0,\n TAccountUser1,\n TAccountToken0Program,\n TAccountToken1Program,\n TAccountOracle\n> {\n // Program address.\n const programAddress = config?.programAddress ?? CPMM_PROGRAM_ADDRESS;\n\n // Original accounts.\n const originalAccounts = {\n config: { value: input.config ?? null, isWritable: false },\n pool: { value: input.pool ?? null, isWritable: true },\n position: { value: input.position ?? null, isWritable: true },\n protocolFeePosition: {\n value: input.protocolFeePosition ?? null,\n isWritable: true,\n },\n owner: { value: input.owner ?? null, isWritable: false },\n authority: { value: input.authority ?? null, isWritable: false },\n vault0: { value: input.vault0 ?? null, isWritable: true },\n vault1: { value: input.vault1 ?? null, isWritable: true },\n token0Mint: { value: input.token0Mint ?? null, isWritable: false },\n token1Mint: { value: input.token1Mint ?? null, isWritable: false },\n user0: { value: input.user0 ?? null, isWritable: true },\n user1: { value: input.user1 ?? null, isWritable: true },\n token0Program: { value: input.token0Program ?? null, isWritable: false },\n token1Program: { value: input.token1Program ?? null, isWritable: false },\n oracle: { value: input.oracle ?? null, isWritable: true },\n };\n const accounts = originalAccounts as Record<\n keyof typeof originalAccounts,\n ResolvedInstructionAccount\n >;\n\n // Original args.\n const args = { ...input };\n\n const getAccountMeta = getAccountMetaFactory(programAddress, 'programId');\n return Object.freeze({\n accounts: [\n getAccountMeta('config', accounts.config),\n getAccountMeta('pool', accounts.pool),\n getAccountMeta('position', accounts.position),\n getAccountMeta('protocolFeePosition', accounts.protocolFeePosition),\n getAccountMeta('owner', accounts.owner),\n getAccountMeta('authority', accounts.authority),\n getAccountMeta('vault0', accounts.vault0),\n getAccountMeta('vault1', accounts.vault1),\n getAccountMeta('token0Mint', accounts.token0Mint),\n getAccountMeta('token1Mint', accounts.token1Mint),\n getAccountMeta('user0', accounts.user0),\n getAccountMeta('user1', accounts.user1),\n getAccountMeta('token0Program', accounts.token0Program),\n getAccountMeta('token1Program', accounts.token1Program),\n getAccountMeta('oracle', accounts.oracle),\n ],\n data: getRemoveLiquidityInstructionDataEncoder().encode(\n args as RemoveLiquidityInstructionDataArgs,\n ),\n programAddress,\n } as RemoveLiquidityInstruction<\n TProgramAddress,\n TAccountConfig,\n TAccountPool,\n TAccountPosition,\n TAccountProtocolFeePosition,\n TAccountOwner,\n TAccountAuthority,\n TAccountVault0,\n TAccountVault1,\n TAccountToken0Mint,\n TAccountToken1Mint,\n TAccountUser0,\n TAccountUser1,\n TAccountToken0Program,\n TAccountToken1Program,\n TAccountOracle\n >);\n}\n\nexport type ParsedRemoveLiquidityInstruction<\n TProgram extends string = typeof CPMM_PROGRAM_ADDRESS,\n TAccountMetas extends readonly AccountMeta[] = readonly AccountMeta[],\n> = {\n programAddress: Address<TProgram>;\n accounts: {\n config: TAccountMetas[0];\n pool: TAccountMetas[1];\n position: TAccountMetas[2];\n protocolFeePosition: TAccountMetas[3];\n owner: TAccountMetas[4];\n authority: TAccountMetas[5];\n vault0: TAccountMetas[6];\n vault1: TAccountMetas[7];\n token0Mint: TAccountMetas[8];\n token1Mint: TAccountMetas[9];\n user0: TAccountMetas[10];\n user1: TAccountMetas[11];\n token0Program: TAccountMetas[12];\n token1Program: TAccountMetas[13];\n oracle?: TAccountMetas[14] | undefined;\n };\n data: RemoveLiquidityInstructionData;\n};\n\nexport function parseRemoveLiquidityInstruction<\n TProgram extends string,\n TAccountMetas extends readonly AccountMeta[],\n>(\n instruction: Instruction<TProgram> &\n InstructionWithAccounts<TAccountMetas> &\n InstructionWithData<ReadonlyUint8Array>,\n): ParsedRemoveLiquidityInstruction<TProgram, TAccountMetas> {\n if (instruction.accounts.length < 15) {\n throw new SolanaError(\n SOLANA_ERROR__PROGRAM_CLIENTS__INSUFFICIENT_ACCOUNT_METAS,\n {\n actualAccountMetas: instruction.accounts.length,\n expectedAccountMetas: 15,\n },\n );\n }\n let accountIndex = 0;\n const getNextAccount = () => {\n const accountMeta = (instruction.accounts as TAccountMetas)[accountIndex]!;\n accountIndex += 1;\n return accountMeta;\n };\n const getNextOptionalAccount = () => {\n const accountMeta = getNextAccount();\n return accountMeta.address === CPMM_PROGRAM_ADDRESS\n ? undefined\n : accountMeta;\n };\n return {\n programAddress: instruction.programAddress,\n accounts: {\n config: getNextAccount(),\n pool: getNextAccount(),\n position: getNextAccount(),\n protocolFeePosition: getNextAccount(),\n owner: getNextAccount(),\n authority: getNextAccount(),\n vault0: getNextAccount(),\n vault1: getNextAccount(),\n token0Mint: getNextAccount(),\n token1Mint: getNextAccount(),\n user0: getNextAccount(),\n user1: getNextAccount(),\n token0Program: getNextAccount(),\n token1Program: getNextAccount(),\n oracle: getNextOptionalAccount(),\n },\n data: getRemoveLiquidityInstructionDataDecoder().decode(instruction.data),\n };\n}\n","/**\n * This code was AUTOGENERATED using the Codama library.\n * Please DO NOT EDIT THIS FILE, instead use visitors\n * to add features, then rerun Codama to update it.\n *\n * @see https://github.com/codama-idl/codama\n */\n\nimport {\n combineCodec,\n fixDecoderSize,\n fixEncoderSize,\n getBytesDecoder,\n getBytesEncoder,\n getStructDecoder,\n getStructEncoder,\n getU16Decoder,\n getU16Encoder,\n SOLANA_ERROR__PROGRAM_CLIENTS__INSUFFICIENT_ACCOUNT_METAS,\n SolanaError,\n transformEncoder,\n type AccountMeta,\n type AccountSignerMeta,\n type Address,\n type FixedSizeCodec,\n type FixedSizeDecoder,\n type FixedSizeEncoder,\n type Instruction,\n type InstructionWithAccounts,\n type InstructionWithData,\n type ReadonlyAccount,\n type ReadonlySignerAccount,\n type ReadonlyUint8Array,\n type TransactionSigner,\n type WritableAccount,\n} from '@solana/kit';\nimport {\n getAccountMetaFactory,\n type ResolvedInstructionAccount,\n} from '@solana/program-client-core';\nimport { CPMM_PROGRAM_ADDRESS } from '../programs';\n\nexport const SET_FEES_DISCRIMINATOR = new Uint8Array([\n 137, 178, 49, 58, 0, 245, 242, 190,\n]);\n\nexport function getSetFeesDiscriminatorBytes() {\n return fixEncoderSize(getBytesEncoder(), 8).encode(SET_FEES_DISCRIMINATOR);\n}\n\nexport type SetFeesInstruction<\n TProgram extends string = typeof CPMM_PROGRAM_ADDRESS,\n TAccountConfig extends string | AccountMeta<string> = string,\n TAccountPool extends string | AccountMeta<string> = string,\n TAccountAdmin extends string | AccountMeta<string> = string,\n TRemainingAccounts extends readonly AccountMeta<string>[] = [],\n> = Instruction<TProgram> &\n InstructionWithData<ReadonlyUint8Array> &\n InstructionWithAccounts<\n [\n TAccountConfig extends string\n ? ReadonlyAccount<TAccountConfig>\n : TAccountConfig,\n TAccountPool extends string\n ? WritableAccount<TAccountPool>\n : TAccountPool,\n TAccountAdmin extends string\n ? ReadonlySignerAccount<TAccountAdmin> &\n AccountSignerMeta<TAccountAdmin>\n : TAccountAdmin,\n ...TRemainingAccounts,\n ]\n >;\n\nexport type SetFeesInstructionData = {\n discriminator: ReadonlyUint8Array;\n swapFeeBps: number;\n feeSplitBps: number;\n};\n\nexport type SetFeesInstructionDataArgs = {\n swapFeeBps: number;\n feeSplitBps: number;\n};\n\nexport function getSetFeesInstructionDataEncoder(): FixedSizeEncoder<SetFeesInstructionDataArgs> {\n return transformEncoder(\n getStructEncoder([\n ['discriminator', fixEncoderSize(getBytesEncoder(), 8)],\n ['swapFeeBps', getU16Encoder()],\n ['feeSplitBps', getU16Encoder()],\n ]),\n (value) => ({ ...value, discriminator: SET_FEES_DISCRIMINATOR }),\n );\n}\n\nexport function getSetFeesInstructionDataDecoder(): FixedSizeDecoder<SetFeesInstructionData> {\n return getStructDecoder([\n ['discriminator', fixDecoderSize(getBytesDecoder(), 8)],\n ['swapFeeBps', getU16Decoder()],\n ['feeSplitBps', getU16Decoder()],\n ]);\n}\n\nexport function getSetFeesInstructionDataCodec(): FixedSizeCodec<\n SetFeesInstructionDataArgs,\n SetFeesInstructionData\n> {\n return combineCodec(\n getSetFeesInstructionDataEncoder(),\n getSetFeesInstructionDataDecoder(),\n );\n}\n\nexport type SetFeesInput<\n TAccountConfig extends string = string,\n TAccountPool extends string = string,\n TAccountAdmin extends string = string,\n> = {\n config: Address<TAccountConfig>;\n pool: Address<TAccountPool>;\n admin: TransactionSigner<TAccountAdmin>;\n swapFeeBps: SetFeesInstructionDataArgs['swapFeeBps'];\n feeSplitBps: SetFeesInstructionDataArgs['feeSplitBps'];\n};\n\nexport function getSetFeesInstruction<\n TAccountConfig extends string,\n TAccountPool extends string,\n TAccountAdmin extends string,\n TProgramAddress extends Address = typeof CPMM_PROGRAM_ADDRESS,\n>(\n input: SetFeesInput<TAccountConfig, TAccountPool, TAccountAdmin>,\n config?: { programAddress?: TProgramAddress },\n): SetFeesInstruction<\n TProgramAddress,\n TAccountConfig,\n TAccountPool,\n TAccountAdmin\n> {\n // Program address.\n const programAddress = config?.programAddress ?? CPMM_PROGRAM_ADDRESS;\n\n // Original accounts.\n const originalAccounts = {\n config: { value: input.config ?? null, isWritable: false },\n pool: { value: input.pool ?? null, isWritable: true },\n admin: { value: input.admin ?? null, isWritable: false },\n };\n const accounts = originalAccounts as Record<\n keyof typeof originalAccounts,\n ResolvedInstructionAccount\n >;\n\n // Original args.\n const args = { ...input };\n\n const getAccountMeta = getAccountMetaFactory(programAddress, 'programId');\n return Object.freeze({\n accounts: [\n getAccountMeta('config', accounts.config),\n getAccountMeta('pool', accounts.pool),\n getAccountMeta('admin', accounts.admin),\n ],\n data: getSetFeesInstructionDataEncoder().encode(\n args as SetFeesInstructionDataArgs,\n ),\n programAddress,\n } as SetFeesInstruction<\n TProgramAddress,\n TAccountConfig,\n TAccountPool,\n TAccountAdmin\n >);\n}\n\nexport type ParsedSetFeesInstruction<\n TProgram extends string = typeof CPMM_PROGRAM_ADDRESS,\n TAccountMetas extends readonly AccountMeta[] = readonly AccountMeta[],\n> = {\n programAddress: Address<TProgram>;\n accounts: {\n config: TAccountMetas[0];\n pool: TAccountMetas[1];\n admin: TAccountMetas[2];\n };\n data: SetFeesInstructionData;\n};\n\nexport function parseSetFeesInstruction<\n TProgram extends string,\n TAccountMetas extends readonly AccountMeta[],\n>(\n instruction: Instruction<TProgram> &\n InstructionWithAccounts<TAccountMetas> &\n InstructionWithData<ReadonlyUint8Array>,\n): ParsedSetFeesInstruction<TProgram, TAccountMetas> {\n if (instruction.accounts.length < 3) {\n throw new SolanaError(\n SOLANA_ERROR__PROGRAM_CLIENTS__INSUFFICIENT_ACCOUNT_METAS,\n {\n actualAccountMetas: instruction.accounts.length,\n expectedAccountMetas: 3,\n },\n );\n }\n let accountIndex = 0;\n const getNextAccount = () => {\n const accountMeta = (instruction.accounts as TAccountMetas)[accountIndex]!;\n accountIndex += 1;\n return accountMeta;\n };\n return {\n programAddress: instruction.programAddress,\n accounts: {\n config: getNextAccount(),\n pool: getNextAccount(),\n admin: getNextAccount(),\n },\n data: getSetFeesInstructionDataDecoder().decode(instruction.data),\n };\n}\n","/**\n * This code was AUTOGENERATED using the Codama library.\n * Please DO NOT EDIT THIS FILE, instead use visitors\n * to add features, then rerun Codama to update it.\n *\n * @see https://github.com/codama-idl/codama\n */\n\nimport {\n combineCodec,\n fixDecoderSize,\n fixEncoderSize,\n getAddressDecoder,\n getAddressEncoder,\n getBytesDecoder,\n getBytesEncoder,\n getStructDecoder,\n getStructEncoder,\n getU32Decoder,\n getU32Encoder,\n SOLANA_ERROR__PROGRAM_CLIENTS__INSUFFICIENT_ACCOUNT_METAS,\n SolanaError,\n transformEncoder,\n type AccountMeta,\n type AccountSignerMeta,\n type Address,\n type FixedSizeCodec,\n type FixedSizeDecoder,\n type FixedSizeEncoder,\n type Instruction,\n type InstructionWithAccounts,\n type InstructionWithData,\n type ReadonlyAccount,\n type ReadonlySignerAccount,\n type ReadonlyUint8Array,\n type TransactionSigner,\n type WritableAccount,\n} from '@solana/kit';\nimport {\n getAccountMetaFactory,\n type ResolvedInstructionAccount,\n} from '@solana/program-client-core';\nimport { CPMM_PROGRAM_ADDRESS } from '../programs';\n\nexport const SET_HOOK_DISCRIMINATOR = new Uint8Array([\n 175, 16, 187, 252, 19, 54, 111, 221,\n]);\n\nexport function getSetHookDiscriminatorBytes() {\n return fixEncoderSize(getBytesEncoder(), 8).encode(SET_HOOK_DISCRIMINATOR);\n}\n\nexport type SetHookInstruction<\n TProgram extends string = typeof CPMM_PROGRAM_ADDRESS,\n TAccountConfig extends string | AccountMeta<string> = string,\n TAccountPool extends string | AccountMeta<string> = string,\n TAccountAdmin extends string | AccountMeta<string> = string,\n TRemainingAccounts extends readonly AccountMeta<string>[] = [],\n> = Instruction<TProgram> &\n InstructionWithData<ReadonlyUint8Array> &\n InstructionWithAccounts<\n [\n TAccountConfig extends string\n ? ReadonlyAccount<TAccountConfig>\n : TAccountConfig,\n TAccountPool extends string\n ? WritableAccount<TAccountPool>\n : TAccountPool,\n TAccountAdmin extends string\n ? ReadonlySignerAccount<TAccountAdmin> &\n AccountSignerMeta<TAccountAdmin>\n : TAccountAdmin,\n ...TRemainingAccounts,\n ]\n >;\n\nexport type SetHookInstructionData = {\n discriminator: ReadonlyUint8Array;\n hookProgram: Address;\n hookFlags: number;\n};\n\nexport type SetHookInstructionDataArgs = {\n hookProgram: Address;\n hookFlags: number;\n};\n\nexport function getSetHookInstructionDataEncoder(): FixedSizeEncoder<SetHookInstructionDataArgs> {\n return transformEncoder(\n getStructEncoder([\n ['discriminator', fixEncoderSize(getBytesEncoder(), 8)],\n ['hookProgram', getAddressEncoder()],\n ['hookFlags', getU32Encoder()],\n ]),\n (value) => ({ ...value, discriminator: SET_HOOK_DISCRIMINATOR }),\n );\n}\n\nexport function getSetHookInstructionDataDecoder(): FixedSizeDecoder<SetHookInstructionData> {\n return getStructDecoder([\n ['discriminator', fixDecoderSize(getBytesDecoder(), 8)],\n ['hookProgram', getAddressDecoder()],\n ['hookFlags', getU32Decoder()],\n ]);\n}\n\nexport function getSetHookInstructionDataCodec(): FixedSizeCodec<\n SetHookInstructionDataArgs,\n SetHookInstructionData\n> {\n return combineCodec(\n getSetHookInstructionDataEncoder(),\n getSetHookInstructionDataDecoder(),\n );\n}\n\nexport type SetHookInput<\n TAccountConfig extends string = string,\n TAccountPool extends string = string,\n TAccountAdmin extends string = string,\n> = {\n config: Address<TAccountConfig>;\n pool: Address<TAccountPool>;\n admin: TransactionSigner<TAccountAdmin>;\n hookProgram: SetHookInstructionDataArgs['hookProgram'];\n hookFlags: SetHookInstructionDataArgs['hookFlags'];\n};\n\nexport function getSetHookInstruction<\n TAccountConfig extends string,\n TAccountPool extends string,\n TAccountAdmin extends string,\n TProgramAddress extends Address = typeof CPMM_PROGRAM_ADDRESS,\n>(\n input: SetHookInput<TAccountConfig, TAccountPool, TAccountAdmin>,\n config?: { programAddress?: TProgramAddress },\n): SetHookInstruction<\n TProgramAddress,\n TAccountConfig,\n TAccountPool,\n TAccountAdmin\n> {\n // Program address.\n const programAddress = config?.programAddress ?? CPMM_PROGRAM_ADDRESS;\n\n // Original accounts.\n const originalAccounts = {\n config: { value: input.config ?? null, isWritable: false },\n pool: { value: input.pool ?? null, isWritable: true },\n admin: { value: input.admin ?? null, isWritable: false },\n };\n const accounts = originalAccounts as Record<\n keyof typeof originalAccounts,\n ResolvedInstructionAccount\n >;\n\n // Original args.\n const args = { ...input };\n\n const getAccountMeta = getAccountMetaFactory(programAddress, 'programId');\n return Object.freeze({\n accounts: [\n getAccountMeta('config', accounts.config),\n getAccountMeta('pool', accounts.pool),\n getAccountMeta('admin', accounts.admin),\n ],\n data: getSetHookInstructionDataEncoder().encode(\n args as SetHookInstructionDataArgs,\n ),\n programAddress,\n } as SetHookInstruction<\n TProgramAddress,\n TAccountConfig,\n TAccountPool,\n TAccountAdmin\n >);\n}\n\nexport type ParsedSetHookInstruction<\n TProgram extends string = typeof CPMM_PROGRAM_ADDRESS,\n TAccountMetas extends readonly AccountMeta[] = readonly AccountMeta[],\n> = {\n programAddress: Address<TProgram>;\n accounts: {\n config: TAccountMetas[0];\n pool: TAccountMetas[1];\n admin: TAccountMetas[2];\n };\n data: SetHookInstructionData;\n};\n\nexport function parseSetHookInstruction<\n TProgram extends string,\n TAccountMetas extends readonly AccountMeta[],\n>(\n instruction: Instruction<TProgram> &\n InstructionWithAccounts<TAccountMetas> &\n InstructionWithData<ReadonlyUint8Array>,\n): ParsedSetHookInstruction<TProgram, TAccountMetas> {\n if (instruction.accounts.length < 3) {\n throw new SolanaError(\n SOLANA_ERROR__PROGRAM_CLIENTS__INSUFFICIENT_ACCOUNT_METAS,\n {\n actualAccountMetas: instruction.accounts.length,\n expectedAccountMetas: 3,\n },\n );\n }\n let accountIndex = 0;\n const getNextAccount = () => {\n const accountMeta = (instruction.accounts as TAccountMetas)[accountIndex]!;\n accountIndex += 1;\n return accountMeta;\n };\n return {\n programAddress: instruction.programAddress,\n accounts: {\n config: getNextAccount(),\n pool: getNextAccount(),\n admin: getNextAccount(),\n },\n data: getSetHookInstructionDataDecoder().decode(instruction.data),\n };\n}\n","/**\n * This code was AUTOGENERATED using the Codama library.\n * Please DO NOT EDIT THIS FILE, instead use visitors\n * to add features, then rerun Codama to update it.\n *\n * @see https://github.com/codama-idl/codama\n */\n\nimport {\n combineCodec,\n fixDecoderSize,\n fixEncoderSize,\n getAddressEncoder,\n getBooleanDecoder,\n getBooleanEncoder,\n getBytesDecoder,\n getBytesEncoder,\n getProgramDerivedAddress,\n getStructDecoder,\n getStructEncoder,\n getU64Decoder,\n getU64Encoder,\n getU8Decoder,\n getU8Encoder,\n SOLANA_ERROR__PROGRAM_CLIENTS__INSUFFICIENT_ACCOUNT_METAS,\n SolanaError,\n transformEncoder,\n type AccountMeta,\n type AccountSignerMeta,\n type Address,\n type FixedSizeCodec,\n type FixedSizeDecoder,\n type FixedSizeEncoder,\n type Instruction,\n type InstructionWithAccounts,\n type InstructionWithData,\n type ReadonlyAccount,\n type ReadonlySignerAccount,\n type ReadonlyUint8Array,\n type TransactionSigner,\n type WritableAccount,\n} from '@solana/kit';\nimport {\n getAccountMetaFactory,\n getAddressFromResolvedInstructionAccount,\n type ResolvedInstructionAccount,\n} from '@solana/program-client-core';\nimport { CPMM_PROGRAM_ADDRESS } from '../programs';\n\nexport const SWAP_EXACT_IN_DISCRIMINATOR = new Uint8Array([\n 104, 104, 131, 86, 161, 189, 180, 216,\n]);\n\nexport function getSwapExactInDiscriminatorBytes() {\n return fixEncoderSize(getBytesEncoder(), 8).encode(\n SWAP_EXACT_IN_DISCRIMINATOR,\n );\n}\n\nexport type SwapExactInInstruction<\n TProgram extends string = typeof CPMM_PROGRAM_ADDRESS,\n TAccountConfig extends string | AccountMeta<string> = string,\n TAccountPool extends string | AccountMeta<string> = string,\n TAccountAuthority extends string | AccountMeta<string> = string,\n TAccountVaultIn extends string | AccountMeta<string> = string,\n TAccountVaultOut extends string | AccountMeta<string> = string,\n TAccountToken0Mint extends string | AccountMeta<string> = string,\n TAccountToken1Mint extends string | AccountMeta<string> = string,\n TAccountUserIn extends string | AccountMeta<string> = string,\n TAccountUserOut extends string | AccountMeta<string> = string,\n TAccountTrader extends string | AccountMeta<string> = string,\n TAccountToken0Program extends string | AccountMeta<string> = string,\n TAccountToken1Program extends string | AccountMeta<string> = string,\n TAccountOracle extends string | AccountMeta<string> = string,\n TRemainingAccounts extends readonly AccountMeta<string>[] = [],\n> = Instruction<TProgram> &\n InstructionWithData<ReadonlyUint8Array> &\n InstructionWithAccounts<\n [\n TAccountConfig extends string\n ? ReadonlyAccount<TAccountConfig>\n : TAccountConfig,\n TAccountPool extends string\n ? WritableAccount<TAccountPool>\n : TAccountPool,\n TAccountAuthority extends string\n ? ReadonlyAccount<TAccountAuthority>\n : TAccountAuthority,\n TAccountVaultIn extends string\n ? WritableAccount<TAccountVaultIn>\n : TAccountVaultIn,\n TAccountVaultOut extends string\n ? WritableAccount<TAccountVaultOut>\n : TAccountVaultOut,\n TAccountToken0Mint extends string\n ? ReadonlyAccount<TAccountToken0Mint>\n : TAccountToken0Mint,\n TAccountToken1Mint extends string\n ? ReadonlyAccount<TAccountToken1Mint>\n : TAccountToken1Mint,\n TAccountUserIn extends string\n ? WritableAccount<TAccountUserIn>\n : TAccountUserIn,\n TAccountUserOut extends string\n ? WritableAccount<TAccountUserOut>\n : TAccountUserOut,\n TAccountTrader extends string\n ? ReadonlySignerAccount<TAccountTrader> &\n AccountSignerMeta<TAccountTrader>\n : TAccountTrader,\n TAccountToken0Program extends string\n ? ReadonlyAccount<TAccountToken0Program>\n : TAccountToken0Program,\n TAccountToken1Program extends string\n ? ReadonlyAccount<TAccountToken1Program>\n : TAccountToken1Program,\n TAccountOracle extends string\n ? WritableAccount<TAccountOracle>\n : TAccountOracle,\n ...TRemainingAccounts,\n ]\n >;\n\nexport type SwapExactInInstructionData = {\n discriminator: ReadonlyUint8Array;\n amountIn: bigint;\n minAmountOut: bigint;\n tradeDirection: number;\n updateOracle: boolean;\n};\n\nexport type SwapExactInInstructionDataArgs = {\n amountIn: number | bigint;\n minAmountOut: number | bigint;\n tradeDirection: number;\n updateOracle: boolean;\n};\n\nexport function getSwapExactInInstructionDataEncoder(): FixedSizeEncoder<SwapExactInInstructionDataArgs> {\n return transformEncoder(\n getStructEncoder([\n ['discriminator', fixEncoderSize(getBytesEncoder(), 8)],\n ['amountIn', getU64Encoder()],\n ['minAmountOut', getU64Encoder()],\n ['tradeDirection', getU8Encoder()],\n ['updateOracle', getBooleanEncoder()],\n ]),\n (value) => ({ ...value, discriminator: SWAP_EXACT_IN_DISCRIMINATOR }),\n );\n}\n\nexport function getSwapExactInInstructionDataDecoder(): FixedSizeDecoder<SwapExactInInstructionData> {\n return getStructDecoder([\n ['discriminator', fixDecoderSize(getBytesDecoder(), 8)],\n ['amountIn', getU64Decoder()],\n ['minAmountOut', getU64Decoder()],\n ['tradeDirection', getU8Decoder()],\n ['updateOracle', getBooleanDecoder()],\n ]);\n}\n\nexport function getSwapExactInInstructionDataCodec(): FixedSizeCodec<\n SwapExactInInstructionDataArgs,\n SwapExactInInstructionData\n> {\n return combineCodec(\n getSwapExactInInstructionDataEncoder(),\n getSwapExactInInstructionDataDecoder(),\n );\n}\n\nexport type SwapExactInAsyncInput<\n TAccountConfig extends string = string,\n TAccountPool extends string = string,\n TAccountAuthority extends string = string,\n TAccountVaultIn extends string = string,\n TAccountVaultOut extends string = string,\n TAccountToken0Mint extends string = string,\n TAccountToken1Mint extends string = string,\n TAccountUserIn extends string = string,\n TAccountUserOut extends string = string,\n TAccountTrader extends string = string,\n TAccountToken0Program extends string = string,\n TAccountToken1Program extends string = string,\n TAccountOracle extends string = string,\n> = {\n config: Address<TAccountConfig>;\n pool: Address<TAccountPool>;\n authority?: Address<TAccountAuthority>;\n vaultIn: Address<TAccountVaultIn>;\n vaultOut: Address<TAccountVaultOut>;\n token0Mint: Address<TAccountToken0Mint>;\n token1Mint: Address<TAccountToken1Mint>;\n userIn: Address<TAccountUserIn>;\n userOut: Address<TAccountUserOut>;\n trader: TransactionSigner<TAccountTrader>;\n token0Program: Address<TAccountToken0Program>;\n token1Program: Address<TAccountToken1Program>;\n oracle?: Address<TAccountOracle>;\n amountIn: SwapExactInInstructionDataArgs['amountIn'];\n minAmountOut: SwapExactInInstructionDataArgs['minAmountOut'];\n tradeDirection: SwapExactInInstructionDataArgs['tradeDirection'];\n updateOracle: SwapExactInInstructionDataArgs['updateOracle'];\n};\n\nexport async function getSwapExactInInstructionAsync<\n TAccountConfig extends string,\n TAccountPool extends string,\n TAccountAuthority extends string,\n TAccountVaultIn extends string,\n TAccountVaultOut extends string,\n TAccountToken0Mint extends string,\n TAccountToken1Mint extends string,\n TAccountUserIn extends string,\n TAccountUserOut extends string,\n TAccountTrader extends string,\n TAccountToken0Program extends string,\n TAccountToken1Program extends string,\n TAccountOracle extends string,\n TProgramAddress extends Address = typeof CPMM_PROGRAM_ADDRESS,\n>(\n input: SwapExactInAsyncInput<\n TAccountConfig,\n TAccountPool,\n TAccountAuthority,\n TAccountVaultIn,\n TAccountVaultOut,\n TAccountToken0Mint,\n TAccountToken1Mint,\n TAccountUserIn,\n TAccountUserOut,\n TAccountTrader,\n TAccountToken0Program,\n TAccountToken1Program,\n TAccountOracle\n >,\n config?: { programAddress?: TProgramAddress },\n): Promise<\n SwapExactInInstruction<\n TProgramAddress,\n TAccountConfig,\n TAccountPool,\n TAccountAuthority,\n TAccountVaultIn,\n TAccountVaultOut,\n TAccountToken0Mint,\n TAccountToken1Mint,\n TAccountUserIn,\n TAccountUserOut,\n TAccountTrader,\n TAccountToken0Program,\n TAccountToken1Program,\n TAccountOracle\n >\n> {\n // Program address.\n const programAddress = config?.programAddress ?? CPMM_PROGRAM_ADDRESS;\n\n // Original accounts.\n const originalAccounts = {\n config: { value: input.config ?? null, isWritable: false },\n pool: { value: input.pool ?? null, isWritable: true },\n authority: { value: input.authority ?? null, isWritable: false },\n vaultIn: { value: input.vaultIn ?? null, isWritable: true },\n vaultOut: { value: input.vaultOut ?? null, isWritable: true },\n token0Mint: { value: input.token0Mint ?? null, isWritable: false },\n token1Mint: { value: input.token1Mint ?? null, isWritable: false },\n userIn: { value: input.userIn ?? null, isWritable: true },\n userOut: { value: input.userOut ?? null, isWritable: true },\n trader: { value: input.trader ?? null, isWritable: false },\n token0Program: { value: input.token0Program ?? null, isWritable: false },\n token1Program: { value: input.token1Program ?? null, isWritable: false },\n oracle: { value: input.oracle ?? null, isWritable: true },\n };\n const accounts = originalAccounts as Record<\n keyof typeof originalAccounts,\n ResolvedInstructionAccount\n >;\n\n // Original args.\n const args = { ...input };\n\n // Resolve default values.\n if (!accounts.authority.value) {\n accounts.authority.value = await getProgramDerivedAddress({\n programAddress,\n seeds: [\n getBytesEncoder().encode(\n new Uint8Array([97, 117, 116, 104, 111, 114, 105, 116, 121]),\n ),\n getAddressEncoder().encode(\n getAddressFromResolvedInstructionAccount('pool', accounts.pool.value),\n ),\n ],\n });\n }\n\n const getAccountMeta = getAccountMetaFactory(programAddress, 'programId');\n return Object.freeze({\n accounts: [\n getAccountMeta('config', accounts.config),\n getAccountMeta('pool', accounts.pool),\n getAccountMeta('authority', accounts.authority),\n getAccountMeta('vaultIn', accounts.vaultIn),\n getAccountMeta('vaultOut', accounts.vaultOut),\n getAccountMeta('token0Mint', accounts.token0Mint),\n getAccountMeta('token1Mint', accounts.token1Mint),\n getAccountMeta('userIn', accounts.userIn),\n getAccountMeta('userOut', accounts.userOut),\n getAccountMeta('trader', accounts.trader),\n getAccountMeta('token0Program', accounts.token0Program),\n getAccountMeta('token1Program', accounts.token1Program),\n getAccountMeta('oracle', accounts.oracle),\n ],\n data: getSwapExactInInstructionDataEncoder().encode(\n args as SwapExactInInstructionDataArgs,\n ),\n programAddress,\n } as SwapExactInInstruction<\n TProgramAddress,\n TAccountConfig,\n TAccountPool,\n TAccountAuthority,\n TAccountVaultIn,\n TAccountVaultOut,\n TAccountToken0Mint,\n TAccountToken1Mint,\n TAccountUserIn,\n TAccountUserOut,\n TAccountTrader,\n TAccountToken0Program,\n TAccountToken1Program,\n TAccountOracle\n >);\n}\n\nexport type SwapExactInInput<\n TAccountConfig extends string = string,\n TAccountPool extends string = string,\n TAccountAuthority extends string = string,\n TAccountVaultIn extends string = string,\n TAccountVaultOut extends string = string,\n TAccountToken0Mint extends string = string,\n TAccountToken1Mint extends string = string,\n TAccountUserIn extends string = string,\n TAccountUserOut extends string = string,\n TAccountTrader extends string = string,\n TAccountToken0Program extends string = string,\n TAccountToken1Program extends string = string,\n TAccountOracle extends string = string,\n> = {\n config: Address<TAccountConfig>;\n pool: Address<TAccountPool>;\n authority: Address<TAccountAuthority>;\n vaultIn: Address<TAccountVaultIn>;\n vaultOut: Address<TAccountVaultOut>;\n token0Mint: Address<TAccountToken0Mint>;\n token1Mint: Address<TAccountToken1Mint>;\n userIn: Address<TAccountUserIn>;\n userOut: Address<TAccountUserOut>;\n trader: TransactionSigner<TAccountTrader>;\n token0Program: Address<TAccountToken0Program>;\n token1Program: Address<TAccountToken1Program>;\n oracle?: Address<TAccountOracle>;\n amountIn: SwapExactInInstructionDataArgs['amountIn'];\n minAmountOut: SwapExactInInstructionDataArgs['minAmountOut'];\n tradeDirection: SwapExactInInstructionDataArgs['tradeDirection'];\n updateOracle: SwapExactInInstructionDataArgs['updateOracle'];\n};\n\nexport function getSwapExactInInstruction<\n TAccountConfig extends string,\n TAccountPool extends string,\n TAccountAuthority extends string,\n TAccountVaultIn extends string,\n TAccountVaultOut extends string,\n TAccountToken0Mint extends string,\n TAccountToken1Mint extends string,\n TAccountUserIn extends string,\n TAccountUserOut extends string,\n TAccountTrader extends string,\n TAccountToken0Program extends string,\n TAccountToken1Program extends string,\n TAccountOracle extends string,\n TProgramAddress extends Address = typeof CPMM_PROGRAM_ADDRESS,\n>(\n input: SwapExactInInput<\n TAccountConfig,\n TAccountPool,\n TAccountAuthority,\n TAccountVaultIn,\n TAccountVaultOut,\n TAccountToken0Mint,\n TAccountToken1Mint,\n TAccountUserIn,\n TAccountUserOut,\n TAccountTrader,\n TAccountToken0Program,\n TAccountToken1Program,\n TAccountOracle\n >,\n config?: { programAddress?: TProgramAddress },\n): SwapExactInInstruction<\n TProgramAddress,\n TAccountConfig,\n TAccountPool,\n TAccountAuthority,\n TAccountVaultIn,\n TAccountVaultOut,\n TAccountToken0Mint,\n TAccountToken1Mint,\n TAccountUserIn,\n TAccountUserOut,\n TAccountTrader,\n TAccountToken0Program,\n TAccountToken1Program,\n TAccountOracle\n> {\n // Program address.\n const programAddress = config?.programAddress ?? CPMM_PROGRAM_ADDRESS;\n\n // Original accounts.\n const originalAccounts = {\n config: { value: input.config ?? null, isWritable: false },\n pool: { value: input.pool ?? null, isWritable: true },\n authority: { value: input.authority ?? null, isWritable: false },\n vaultIn: { value: input.vaultIn ?? null, isWritable: true },\n vaultOut: { value: input.vaultOut ?? null, isWritable: true },\n token0Mint: { value: input.token0Mint ?? null, isWritable: false },\n token1Mint: { value: input.token1Mint ?? null, isWritable: false },\n userIn: { value: input.userIn ?? null, isWritable: true },\n userOut: { value: input.userOut ?? null, isWritable: true },\n trader: { value: input.trader ?? null, isWritable: false },\n token0Program: { value: input.token0Program ?? null, isWritable: false },\n token1Program: { value: input.token1Program ?? null, isWritable: false },\n oracle: { value: input.oracle ?? null, isWritable: true },\n };\n const accounts = originalAccounts as Record<\n keyof typeof originalAccounts,\n ResolvedInstructionAccount\n >;\n\n // Original args.\n const args = { ...input };\n\n const getAccountMeta = getAccountMetaFactory(programAddress, 'programId');\n return Object.freeze({\n accounts: [\n getAccountMeta('config', accounts.config),\n getAccountMeta('pool', accounts.pool),\n getAccountMeta('authority', accounts.authority),\n getAccountMeta('vaultIn', accounts.vaultIn),\n getAccountMeta('vaultOut', accounts.vaultOut),\n getAccountMeta('token0Mint', accounts.token0Mint),\n getAccountMeta('token1Mint', accounts.token1Mint),\n getAccountMeta('userIn', accounts.userIn),\n getAccountMeta('userOut', accounts.userOut),\n getAccountMeta('trader', accounts.trader),\n getAccountMeta('token0Program', accounts.token0Program),\n getAccountMeta('token1Program', accounts.token1Program),\n getAccountMeta('oracle', accounts.oracle),\n ],\n data: getSwapExactInInstructionDataEncoder().encode(\n args as SwapExactInInstructionDataArgs,\n ),\n programAddress,\n } as SwapExactInInstruction<\n TProgramAddress,\n TAccountConfig,\n TAccountPool,\n TAccountAuthority,\n TAccountVaultIn,\n TAccountVaultOut,\n TAccountToken0Mint,\n TAccountToken1Mint,\n TAccountUserIn,\n TAccountUserOut,\n TAccountTrader,\n TAccountToken0Program,\n TAccountToken1Program,\n TAccountOracle\n >);\n}\n\nexport type ParsedSwapExactInInstruction<\n TProgram extends string = typeof CPMM_PROGRAM_ADDRESS,\n TAccountMetas extends readonly AccountMeta[] = readonly AccountMeta[],\n> = {\n programAddress: Address<TProgram>;\n accounts: {\n config: TAccountMetas[0];\n pool: TAccountMetas[1];\n authority: TAccountMetas[2];\n vaultIn: TAccountMetas[3];\n vaultOut: TAccountMetas[4];\n token0Mint: TAccountMetas[5];\n token1Mint: TAccountMetas[6];\n userIn: TAccountMetas[7];\n userOut: TAccountMetas[8];\n trader: TAccountMetas[9];\n token0Program: TAccountMetas[10];\n token1Program: TAccountMetas[11];\n oracle?: TAccountMetas[12] | undefined;\n };\n data: SwapExactInInstructionData;\n};\n\nexport function parseSwapExactInInstruction<\n TProgram extends string,\n TAccountMetas extends readonly AccountMeta[],\n>(\n instruction: Instruction<TProgram> &\n InstructionWithAccounts<TAccountMetas> &\n InstructionWithData<ReadonlyUint8Array>,\n): ParsedSwapExactInInstruction<TProgram, TAccountMetas> {\n if (instruction.accounts.length < 13) {\n throw new SolanaError(\n SOLANA_ERROR__PROGRAM_CLIENTS__INSUFFICIENT_ACCOUNT_METAS,\n {\n actualAccountMetas: instruction.accounts.length,\n expectedAccountMetas: 13,\n },\n );\n }\n let accountIndex = 0;\n const getNextAccount = () => {\n const accountMeta = (instruction.accounts as TAccountMetas)[accountIndex]!;\n accountIndex += 1;\n return accountMeta;\n };\n const getNextOptionalAccount = () => {\n const accountMeta = getNextAccount();\n return accountMeta.address === CPMM_PROGRAM_ADDRESS\n ? undefined\n : accountMeta;\n };\n return {\n programAddress: instruction.programAddress,\n accounts: {\n config: getNextAccount(),\n pool: getNextAccount(),\n authority: getNextAccount(),\n vaultIn: getNextAccount(),\n vaultOut: getNextAccount(),\n token0Mint: getNextAccount(),\n token1Mint: getNextAccount(),\n userIn: getNextAccount(),\n userOut: getNextAccount(),\n trader: getNextAccount(),\n token0Program: getNextAccount(),\n token1Program: getNextAccount(),\n oracle: getNextOptionalAccount(),\n },\n data: getSwapExactInInstructionDataDecoder().decode(instruction.data),\n };\n}\n","/**\n * This code was AUTOGENERATED using the Codama library.\n * Please DO NOT EDIT THIS FILE, instead use visitors\n * to add features, then rerun Codama to update it.\n *\n * @see https://github.com/codama-idl/codama\n */\n\nimport {\n combineCodec,\n fixDecoderSize,\n fixEncoderSize,\n getAddressDecoder,\n getAddressEncoder,\n getBytesDecoder,\n getBytesEncoder,\n getStructDecoder,\n getStructEncoder,\n SOLANA_ERROR__PROGRAM_CLIENTS__INSUFFICIENT_ACCOUNT_METAS,\n SolanaError,\n transformEncoder,\n type AccountMeta,\n type AccountSignerMeta,\n type Address,\n type FixedSizeCodec,\n type FixedSizeDecoder,\n type FixedSizeEncoder,\n type Instruction,\n type InstructionWithAccounts,\n type InstructionWithData,\n type ReadonlySignerAccount,\n type ReadonlyUint8Array,\n type TransactionSigner,\n type WritableAccount,\n} from '@solana/kit';\nimport {\n getAccountMetaFactory,\n type ResolvedInstructionAccount,\n} from '@solana/program-client-core';\nimport { CPMM_PROGRAM_ADDRESS } from '../programs';\n\nexport const TRANSFER_ADMIN_DISCRIMINATOR = new Uint8Array([\n 42, 242, 66, 106, 228, 10, 111, 156,\n]);\n\nexport function getTransferAdminDiscriminatorBytes() {\n return fixEncoderSize(getBytesEncoder(), 8).encode(\n TRANSFER_ADMIN_DISCRIMINATOR,\n );\n}\n\nexport type TransferAdminInstruction<\n TProgram extends string = typeof CPMM_PROGRAM_ADDRESS,\n TAccountConfig extends string | AccountMeta<string> = string,\n TAccountAdmin extends string | AccountMeta<string> = string,\n TRemainingAccounts extends readonly AccountMeta<string>[] = [],\n> = Instruction<TProgram> &\n InstructionWithData<ReadonlyUint8Array> &\n InstructionWithAccounts<\n [\n TAccountConfig extends string\n ? WritableAccount<TAccountConfig>\n : TAccountConfig,\n TAccountAdmin extends string\n ? ReadonlySignerAccount<TAccountAdmin> &\n AccountSignerMeta<TAccountAdmin>\n : TAccountAdmin,\n ...TRemainingAccounts,\n ]\n >;\n\nexport type TransferAdminInstructionData = {\n discriminator: ReadonlyUint8Array;\n newAdmin: Address;\n};\n\nexport type TransferAdminInstructionDataArgs = { newAdmin: Address };\n\nexport function getTransferAdminInstructionDataEncoder(): FixedSizeEncoder<TransferAdminInstructionDataArgs> {\n return transformEncoder(\n getStructEncoder([\n ['discriminator', fixEncoderSize(getBytesEncoder(), 8)],\n ['newAdmin', getAddressEncoder()],\n ]),\n (value) => ({ ...value, discriminator: TRANSFER_ADMIN_DISCRIMINATOR }),\n );\n}\n\nexport function getTransferAdminInstructionDataDecoder(): FixedSizeDecoder<TransferAdminInstructionData> {\n return getStructDecoder([\n ['discriminator', fixDecoderSize(getBytesDecoder(), 8)],\n ['newAdmin', getAddressDecoder()],\n ]);\n}\n\nexport function getTransferAdminInstructionDataCodec(): FixedSizeCodec<\n TransferAdminInstructionDataArgs,\n TransferAdminInstructionData\n> {\n return combineCodec(\n getTransferAdminInstructionDataEncoder(),\n getTransferAdminInstructionDataDecoder(),\n );\n}\n\nexport type TransferAdminInput<\n TAccountConfig extends string = string,\n TAccountAdmin extends string = string,\n> = {\n config: Address<TAccountConfig>;\n admin: TransactionSigner<TAccountAdmin>;\n newAdmin: TransferAdminInstructionDataArgs['newAdmin'];\n};\n\nexport function getTransferAdminInstruction<\n TAccountConfig extends string,\n TAccountAdmin extends string,\n TProgramAddress extends Address = typeof CPMM_PROGRAM_ADDRESS,\n>(\n input: TransferAdminInput<TAccountConfig, TAccountAdmin>,\n config?: { programAddress?: TProgramAddress },\n): TransferAdminInstruction<TProgramAddress, TAccountConfig, TAccountAdmin> {\n // Program address.\n const programAddress = config?.programAddress ?? CPMM_PROGRAM_ADDRESS;\n\n // Original accounts.\n const originalAccounts = {\n config: { value: input.config ?? null, isWritable: true },\n admin: { value: input.admin ?? null, isWritable: false },\n };\n const accounts = originalAccounts as Record<\n keyof typeof originalAccounts,\n ResolvedInstructionAccount\n >;\n\n // Original args.\n const args = { ...input };\n\n const getAccountMeta = getAccountMetaFactory(programAddress, 'programId');\n return Object.freeze({\n accounts: [\n getAccountMeta('config', accounts.config),\n getAccountMeta('admin', accounts.admin),\n ],\n data: getTransferAdminInstructionDataEncoder().encode(\n args as TransferAdminInstructionDataArgs,\n ),\n programAddress,\n } as TransferAdminInstruction<\n TProgramAddress,\n TAccountConfig,\n TAccountAdmin\n >);\n}\n\nexport type ParsedTransferAdminInstruction<\n TProgram extends string = typeof CPMM_PROGRAM_ADDRESS,\n TAccountMetas extends readonly AccountMeta[] = readonly AccountMeta[],\n> = {\n programAddress: Address<TProgram>;\n accounts: {\n config: TAccountMetas[0];\n admin: TAccountMetas[1];\n };\n data: TransferAdminInstructionData;\n};\n\nexport function parseTransferAdminInstruction<\n TProgram extends string,\n TAccountMetas extends readonly AccountMeta[],\n>(\n instruction: Instruction<TProgram> &\n InstructionWithAccounts<TAccountMetas> &\n InstructionWithData<ReadonlyUint8Array>,\n): ParsedTransferAdminInstruction<TProgram, TAccountMetas> {\n if (instruction.accounts.length < 2) {\n throw new SolanaError(\n SOLANA_ERROR__PROGRAM_CLIENTS__INSUFFICIENT_ACCOUNT_METAS,\n {\n actualAccountMetas: instruction.accounts.length,\n expectedAccountMetas: 2,\n },\n );\n }\n let accountIndex = 0;\n const getNextAccount = () => {\n const accountMeta = (instruction.accounts as TAccountMetas)[accountIndex]!;\n accountIndex += 1;\n return accountMeta;\n };\n return {\n programAddress: instruction.programAddress,\n accounts: { config: getNextAccount(), admin: getNextAccount() },\n data: getTransferAdminInstructionDataDecoder().decode(instruction.data),\n };\n}\n","/**\n * This code was AUTOGENERATED using the Codama library.\n * Please DO NOT EDIT THIS FILE, instead use visitors\n * to add features, then rerun Codama to update it.\n *\n * @see https://github.com/codama-idl/codama\n */\n\nimport {\n combineCodec,\n fixDecoderSize,\n fixEncoderSize,\n getBytesDecoder,\n getBytesEncoder,\n getStructDecoder,\n getStructEncoder,\n SOLANA_ERROR__PROGRAM_CLIENTS__INSUFFICIENT_ACCOUNT_METAS,\n SolanaError,\n transformEncoder,\n type AccountMeta,\n type AccountSignerMeta,\n type Address,\n type FixedSizeCodec,\n type FixedSizeDecoder,\n type FixedSizeEncoder,\n type Instruction,\n type InstructionWithAccounts,\n type InstructionWithData,\n type ReadonlySignerAccount,\n type ReadonlyUint8Array,\n type TransactionSigner,\n type WritableAccount,\n} from '@solana/kit';\nimport {\n getAccountMetaFactory,\n type ResolvedInstructionAccount,\n} from '@solana/program-client-core';\nimport { CPMM_PROGRAM_ADDRESS } from '../programs';\n\nexport const UNPAUSE_DISCRIMINATOR = new Uint8Array([\n 169, 144, 4, 38, 10, 141, 188, 255,\n]);\n\nexport function getUnpauseDiscriminatorBytes() {\n return fixEncoderSize(getBytesEncoder(), 8).encode(UNPAUSE_DISCRIMINATOR);\n}\n\nexport type UnpauseInstruction<\n TProgram extends string = typeof CPMM_PROGRAM_ADDRESS,\n TAccountConfig extends string | AccountMeta<string> = string,\n TAccountAdmin extends string | AccountMeta<string> = string,\n TRemainingAccounts extends readonly AccountMeta<string>[] = [],\n> = Instruction<TProgram> &\n InstructionWithData<ReadonlyUint8Array> &\n InstructionWithAccounts<\n [\n TAccountConfig extends string\n ? WritableAccount<TAccountConfig>\n : TAccountConfig,\n TAccountAdmin extends string\n ? ReadonlySignerAccount<TAccountAdmin> &\n AccountSignerMeta<TAccountAdmin>\n : TAccountAdmin,\n ...TRemainingAccounts,\n ]\n >;\n\nexport type UnpauseInstructionData = { discriminator: ReadonlyUint8Array };\n\nexport type UnpauseInstructionDataArgs = {};\n\nexport function getUnpauseInstructionDataEncoder(): FixedSizeEncoder<UnpauseInstructionDataArgs> {\n return transformEncoder(\n getStructEncoder([['discriminator', fixEncoderSize(getBytesEncoder(), 8)]]),\n (value) => ({ ...value, discriminator: UNPAUSE_DISCRIMINATOR }),\n );\n}\n\nexport function getUnpauseInstructionDataDecoder(): FixedSizeDecoder<UnpauseInstructionData> {\n return getStructDecoder([\n ['discriminator', fixDecoderSize(getBytesDecoder(), 8)],\n ]);\n}\n\nexport function getUnpauseInstructionDataCodec(): FixedSizeCodec<\n UnpauseInstructionDataArgs,\n UnpauseInstructionData\n> {\n return combineCodec(\n getUnpauseInstructionDataEncoder(),\n getUnpauseInstructionDataDecoder(),\n );\n}\n\nexport type UnpauseInput<\n TAccountConfig extends string = string,\n TAccountAdmin extends string = string,\n> = {\n config: Address<TAccountConfig>;\n admin: TransactionSigner<TAccountAdmin>;\n};\n\nexport function getUnpauseInstruction<\n TAccountConfig extends string,\n TAccountAdmin extends string,\n TProgramAddress extends Address = typeof CPMM_PROGRAM_ADDRESS,\n>(\n input: UnpauseInput<TAccountConfig, TAccountAdmin>,\n config?: { programAddress?: TProgramAddress },\n): UnpauseInstruction<TProgramAddress, TAccountConfig, TAccountAdmin> {\n // Program address.\n const programAddress = config?.programAddress ?? CPMM_PROGRAM_ADDRESS;\n\n // Original accounts.\n const originalAccounts = {\n config: { value: input.config ?? null, isWritable: true },\n admin: { value: input.admin ?? null, isWritable: false },\n };\n const accounts = originalAccounts as Record<\n keyof typeof originalAccounts,\n ResolvedInstructionAccount\n >;\n\n const getAccountMeta = getAccountMetaFactory(programAddress, 'programId');\n return Object.freeze({\n accounts: [\n getAccountMeta('config', accounts.config),\n getAccountMeta('admin', accounts.admin),\n ],\n data: getUnpauseInstructionDataEncoder().encode({}),\n programAddress,\n } as UnpauseInstruction<TProgramAddress, TAccountConfig, TAccountAdmin>);\n}\n\nexport type ParsedUnpauseInstruction<\n TProgram extends string = typeof CPMM_PROGRAM_ADDRESS,\n TAccountMetas extends readonly AccountMeta[] = readonly AccountMeta[],\n> = {\n programAddress: Address<TProgram>;\n accounts: {\n config: TAccountMetas[0];\n admin: TAccountMetas[1];\n };\n data: UnpauseInstructionData;\n};\n\nexport function parseUnpauseInstruction<\n TProgram extends string,\n TAccountMetas extends readonly AccountMeta[],\n>(\n instruction: Instruction<TProgram> &\n InstructionWithAccounts<TAccountMetas> &\n InstructionWithData<ReadonlyUint8Array>,\n): ParsedUnpauseInstruction<TProgram, TAccountMetas> {\n if (instruction.accounts.length < 2) {\n throw new SolanaError(\n SOLANA_ERROR__PROGRAM_CLIENTS__INSUFFICIENT_ACCOUNT_METAS,\n {\n actualAccountMetas: instruction.accounts.length,\n expectedAccountMetas: 2,\n },\n );\n }\n let accountIndex = 0;\n const getNextAccount = () => {\n const accountMeta = (instruction.accounts as TAccountMetas)[accountIndex]!;\n accountIndex += 1;\n return accountMeta;\n };\n return {\n programAddress: instruction.programAddress,\n accounts: { config: getNextAccount(), admin: getNextAccount() },\n data: getUnpauseInstructionDataDecoder().decode(instruction.data),\n };\n}\n","/**\n * This code was AUTOGENERATED using the Codama library.\n * Please DO NOT EDIT THIS FILE, instead use visitors\n * to add features, then rerun Codama to update it.\n *\n * @see https://github.com/codama-idl/codama\n */\n\nimport {\n combineCodec,\n fixDecoderSize,\n fixEncoderSize,\n getAddressDecoder,\n getAddressEncoder,\n getArrayDecoder,\n getArrayEncoder,\n getBooleanDecoder,\n getBooleanEncoder,\n getBytesDecoder,\n getBytesEncoder,\n getStructDecoder,\n getStructEncoder,\n getU16Decoder,\n getU16Encoder,\n SOLANA_ERROR__PROGRAM_CLIENTS__INSUFFICIENT_ACCOUNT_METAS,\n SolanaError,\n transformEncoder,\n type AccountMeta,\n type AccountSignerMeta,\n type Address,\n type Codec,\n type Decoder,\n type Encoder,\n type Instruction,\n type InstructionWithAccounts,\n type InstructionWithData,\n type ReadonlySignerAccount,\n type ReadonlyUint8Array,\n type TransactionSigner,\n type WritableAccount,\n} from '@solana/kit';\nimport {\n getAccountMetaFactory,\n type ResolvedInstructionAccount,\n} from '@solana/program-client-core';\nimport { CPMM_PROGRAM_ADDRESS } from '../programs';\n\nexport const UPDATE_CONFIG_DISCRIMINATOR = new Uint8Array([\n 29, 158, 252, 191, 10, 83, 219, 99,\n]);\n\nexport function getUpdateConfigDiscriminatorBytes() {\n return fixEncoderSize(getBytesEncoder(), 8).encode(\n UPDATE_CONFIG_DISCRIMINATOR,\n );\n}\n\nexport type UpdateConfigInstruction<\n TProgram extends string = typeof CPMM_PROGRAM_ADDRESS,\n TAccountConfig extends string | AccountMeta<string> = string,\n TAccountAdmin extends string | AccountMeta<string> = string,\n TRemainingAccounts extends readonly AccountMeta<string>[] = [],\n> = Instruction<TProgram> &\n InstructionWithData<ReadonlyUint8Array> &\n InstructionWithAccounts<\n [\n TAccountConfig extends string\n ? WritableAccount<TAccountConfig>\n : TAccountConfig,\n TAccountAdmin extends string\n ? ReadonlySignerAccount<TAccountAdmin> &\n AccountSignerMeta<TAccountAdmin>\n : TAccountAdmin,\n ...TRemainingAccounts,\n ]\n >;\n\nexport type UpdateConfigInstructionData = {\n discriminator: ReadonlyUint8Array;\n maxSwapFeeBps: number;\n maxFeeSplitBps: number;\n protocolFeeEnabled: boolean;\n protocolFeeBps: number;\n hookAllowlist: Array<Address>;\n};\n\nexport type UpdateConfigInstructionDataArgs = {\n maxSwapFeeBps: number;\n maxFeeSplitBps: number;\n protocolFeeEnabled: boolean;\n protocolFeeBps: number;\n hookAllowlist: Array<Address>;\n};\n\nexport function getUpdateConfigInstructionDataEncoder(): Encoder<UpdateConfigInstructionDataArgs> {\n return transformEncoder(\n getStructEncoder([\n ['discriminator', fixEncoderSize(getBytesEncoder(), 8)],\n ['maxSwapFeeBps', getU16Encoder()],\n ['maxFeeSplitBps', getU16Encoder()],\n ['protocolFeeEnabled', getBooleanEncoder()],\n ['protocolFeeBps', getU16Encoder()],\n ['hookAllowlist', getArrayEncoder(getAddressEncoder())],\n ]),\n (value) => ({ ...value, discriminator: UPDATE_CONFIG_DISCRIMINATOR }),\n );\n}\n\nexport function getUpdateConfigInstructionDataDecoder(): Decoder<UpdateConfigInstructionData> {\n return getStructDecoder([\n ['discriminator', fixDecoderSize(getBytesDecoder(), 8)],\n ['maxSwapFeeBps', getU16Decoder()],\n ['maxFeeSplitBps', getU16Decoder()],\n ['protocolFeeEnabled', getBooleanDecoder()],\n ['protocolFeeBps', getU16Decoder()],\n ['hookAllowlist', getArrayDecoder(getAddressDecoder())],\n ]);\n}\n\nexport function getUpdateConfigInstructionDataCodec(): Codec<\n UpdateConfigInstructionDataArgs,\n UpdateConfigInstructionData\n> {\n return combineCodec(\n getUpdateConfigInstructionDataEncoder(),\n getUpdateConfigInstructionDataDecoder(),\n );\n}\n\nexport type UpdateConfigInput<\n TAccountConfig extends string = string,\n TAccountAdmin extends string = string,\n> = {\n config: Address<TAccountConfig>;\n admin: TransactionSigner<TAccountAdmin>;\n maxSwapFeeBps: UpdateConfigInstructionDataArgs['maxSwapFeeBps'];\n maxFeeSplitBps: UpdateConfigInstructionDataArgs['maxFeeSplitBps'];\n protocolFeeEnabled: UpdateConfigInstructionDataArgs['protocolFeeEnabled'];\n protocolFeeBps: UpdateConfigInstructionDataArgs['protocolFeeBps'];\n hookAllowlist: UpdateConfigInstructionDataArgs['hookAllowlist'];\n};\n\nexport function getUpdateConfigInstruction<\n TAccountConfig extends string,\n TAccountAdmin extends string,\n TProgramAddress extends Address = typeof CPMM_PROGRAM_ADDRESS,\n>(\n input: UpdateConfigInput<TAccountConfig, TAccountAdmin>,\n config?: { programAddress?: TProgramAddress },\n): UpdateConfigInstruction<TProgramAddress, TAccountConfig, TAccountAdmin> {\n // Program address.\n const programAddress = config?.programAddress ?? CPMM_PROGRAM_ADDRESS;\n\n // Original accounts.\n const originalAccounts = {\n config: { value: input.config ?? null, isWritable: true },\n admin: { value: input.admin ?? null, isWritable: false },\n };\n const accounts = originalAccounts as Record<\n keyof typeof originalAccounts,\n ResolvedInstructionAccount\n >;\n\n // Original args.\n const args = { ...input };\n\n const getAccountMeta = getAccountMetaFactory(programAddress, 'programId');\n return Object.freeze({\n accounts: [\n getAccountMeta('config', accounts.config),\n getAccountMeta('admin', accounts.admin),\n ],\n data: getUpdateConfigInstructionDataEncoder().encode(\n args as UpdateConfigInstructionDataArgs,\n ),\n programAddress,\n } as UpdateConfigInstruction<TProgramAddress, TAccountConfig, TAccountAdmin>);\n}\n\nexport type ParsedUpdateConfigInstruction<\n TProgram extends string = typeof CPMM_PROGRAM_ADDRESS,\n TAccountMetas extends readonly AccountMeta[] = readonly AccountMeta[],\n> = {\n programAddress: Address<TProgram>;\n accounts: {\n config: TAccountMetas[0];\n admin: TAccountMetas[1];\n };\n data: UpdateConfigInstructionData;\n};\n\nexport function parseUpdateConfigInstruction<\n TProgram extends string,\n TAccountMetas extends readonly AccountMeta[],\n>(\n instruction: Instruction<TProgram> &\n InstructionWithAccounts<TAccountMetas> &\n InstructionWithData<ReadonlyUint8Array>,\n): ParsedUpdateConfigInstruction<TProgram, TAccountMetas> {\n if (instruction.accounts.length < 2) {\n throw new SolanaError(\n SOLANA_ERROR__PROGRAM_CLIENTS__INSUFFICIENT_ACCOUNT_METAS,\n {\n actualAccountMetas: instruction.accounts.length,\n expectedAccountMetas: 2,\n },\n );\n }\n let accountIndex = 0;\n const getNextAccount = () => {\n const accountMeta = (instruction.accounts as TAccountMetas)[accountIndex]!;\n accountIndex += 1;\n return accountMeta;\n };\n return {\n programAddress: instruction.programAddress,\n accounts: { config: getNextAccount(), admin: getNextAccount() },\n data: getUpdateConfigInstructionDataDecoder().decode(instruction.data),\n };\n}\n","/**\n * This code was AUTOGENERATED using the Codama library.\n * Please DO NOT EDIT THIS FILE, instead use visitors\n * to add features, then rerun Codama to update it.\n *\n * @see https://github.com/codama-idl/codama\n */\n\nimport {\n combineCodec,\n fixDecoderSize,\n fixEncoderSize,\n getAddressEncoder,\n getBytesDecoder,\n getBytesEncoder,\n getProgramDerivedAddress,\n getStructDecoder,\n getStructEncoder,\n SOLANA_ERROR__PROGRAM_CLIENTS__INSUFFICIENT_ACCOUNT_METAS,\n SolanaError,\n transformEncoder,\n type AccountMeta,\n type AccountSignerMeta,\n type Address,\n type FixedSizeCodec,\n type FixedSizeDecoder,\n type FixedSizeEncoder,\n type Instruction,\n type InstructionWithAccounts,\n type InstructionWithData,\n type ReadonlyAccount,\n type ReadonlySignerAccount,\n type ReadonlyUint8Array,\n type TransactionSigner,\n type WritableAccount,\n} from '@solana/kit';\nimport {\n getAccountMetaFactory,\n getAddressFromResolvedInstructionAccount,\n type ResolvedInstructionAccount,\n} from '@solana/program-client-core';\nimport { CPMM_PROGRAM_ADDRESS } from '../programs';\n\nexport const WITHDRAW_VAULT_EXCESS_DISCRIMINATOR = new Uint8Array([\n 235, 197, 247, 177, 137, 72, 135, 113,\n]);\n\nexport function getWithdrawVaultExcessDiscriminatorBytes() {\n return fixEncoderSize(getBytesEncoder(), 8).encode(\n WITHDRAW_VAULT_EXCESS_DISCRIMINATOR,\n );\n}\n\nexport type WithdrawVaultExcessInstruction<\n TProgram extends string = typeof CPMM_PROGRAM_ADDRESS,\n TAccountConfig extends string | AccountMeta<string> = string,\n TAccountPool extends string | AccountMeta<string> = string,\n TAccountAdmin extends string | AccountMeta<string> = string,\n TAccountAuthority extends string | AccountMeta<string> = string,\n TAccountVault0 extends string | AccountMeta<string> = string,\n TAccountVault1 extends string | AccountMeta<string> = string,\n TAccountToken0Mint extends string | AccountMeta<string> = string,\n TAccountToken1Mint extends string | AccountMeta<string> = string,\n TAccountAdminAta0 extends string | AccountMeta<string> = string,\n TAccountAdminAta1 extends string | AccountMeta<string> = string,\n TAccountToken0Program extends string | AccountMeta<string> = string,\n TAccountToken1Program extends string | AccountMeta<string> = string,\n TRemainingAccounts extends readonly AccountMeta<string>[] = [],\n> = Instruction<TProgram> &\n InstructionWithData<ReadonlyUint8Array> &\n InstructionWithAccounts<\n [\n TAccountConfig extends string\n ? ReadonlyAccount<TAccountConfig>\n : TAccountConfig,\n TAccountPool extends string\n ? ReadonlyAccount<TAccountPool>\n : TAccountPool,\n TAccountAdmin extends string\n ? ReadonlySignerAccount<TAccountAdmin> &\n AccountSignerMeta<TAccountAdmin>\n : TAccountAdmin,\n TAccountAuthority extends string\n ? ReadonlyAccount<TAccountAuthority>\n : TAccountAuthority,\n TAccountVault0 extends string\n ? WritableAccount<TAccountVault0>\n : TAccountVault0,\n TAccountVault1 extends string\n ? WritableAccount<TAccountVault1>\n : TAccountVault1,\n TAccountToken0Mint extends string\n ? ReadonlyAccount<TAccountToken0Mint>\n : TAccountToken0Mint,\n TAccountToken1Mint extends string\n ? ReadonlyAccount<TAccountToken1Mint>\n : TAccountToken1Mint,\n TAccountAdminAta0 extends string\n ? WritableAccount<TAccountAdminAta0>\n : TAccountAdminAta0,\n TAccountAdminAta1 extends string\n ? WritableAccount<TAccountAdminAta1>\n : TAccountAdminAta1,\n TAccountToken0Program extends string\n ? ReadonlyAccount<TAccountToken0Program>\n : TAccountToken0Program,\n TAccountToken1Program extends string\n ? ReadonlyAccount<TAccountToken1Program>\n : TAccountToken1Program,\n ...TRemainingAccounts,\n ]\n >;\n\nexport type WithdrawVaultExcessInstructionData = {\n discriminator: ReadonlyUint8Array;\n};\n\nexport type WithdrawVaultExcessInstructionDataArgs = {};\n\nexport function getWithdrawVaultExcessInstructionDataEncoder(): FixedSizeEncoder<WithdrawVaultExcessInstructionDataArgs> {\n return transformEncoder(\n getStructEncoder([['discriminator', fixEncoderSize(getBytesEncoder(), 8)]]),\n (value) => ({\n ...value,\n discriminator: WITHDRAW_VAULT_EXCESS_DISCRIMINATOR,\n }),\n );\n}\n\nexport function getWithdrawVaultExcessInstructionDataDecoder(): FixedSizeDecoder<WithdrawVaultExcessInstructionData> {\n return getStructDecoder([\n ['discriminator', fixDecoderSize(getBytesDecoder(), 8)],\n ]);\n}\n\nexport function getWithdrawVaultExcessInstructionDataCodec(): FixedSizeCodec<\n WithdrawVaultExcessInstructionDataArgs,\n WithdrawVaultExcessInstructionData\n> {\n return combineCodec(\n getWithdrawVaultExcessInstructionDataEncoder(),\n getWithdrawVaultExcessInstructionDataDecoder(),\n );\n}\n\nexport type WithdrawVaultExcessAsyncInput<\n TAccountConfig extends string = string,\n TAccountPool extends string = string,\n TAccountAdmin extends string = string,\n TAccountAuthority extends string = string,\n TAccountVault0 extends string = string,\n TAccountVault1 extends string = string,\n TAccountToken0Mint extends string = string,\n TAccountToken1Mint extends string = string,\n TAccountAdminAta0 extends string = string,\n TAccountAdminAta1 extends string = string,\n TAccountToken0Program extends string = string,\n TAccountToken1Program extends string = string,\n> = {\n config: Address<TAccountConfig>;\n pool: Address<TAccountPool>;\n admin: TransactionSigner<TAccountAdmin>;\n authority?: Address<TAccountAuthority>;\n vault0: Address<TAccountVault0>;\n vault1: Address<TAccountVault1>;\n token0Mint: Address<TAccountToken0Mint>;\n token1Mint: Address<TAccountToken1Mint>;\n adminAta0?: Address<TAccountAdminAta0>;\n adminAta1?: Address<TAccountAdminAta1>;\n token0Program: Address<TAccountToken0Program>;\n token1Program: Address<TAccountToken1Program>;\n};\n\nexport async function getWithdrawVaultExcessInstructionAsync<\n TAccountConfig extends string,\n TAccountPool extends string,\n TAccountAdmin extends string,\n TAccountAuthority extends string,\n TAccountVault0 extends string,\n TAccountVault1 extends string,\n TAccountToken0Mint extends string,\n TAccountToken1Mint extends string,\n TAccountAdminAta0 extends string,\n TAccountAdminAta1 extends string,\n TAccountToken0Program extends string,\n TAccountToken1Program extends string,\n TProgramAddress extends Address = typeof CPMM_PROGRAM_ADDRESS,\n>(\n input: WithdrawVaultExcessAsyncInput<\n TAccountConfig,\n TAccountPool,\n TAccountAdmin,\n TAccountAuthority,\n TAccountVault0,\n TAccountVault1,\n TAccountToken0Mint,\n TAccountToken1Mint,\n TAccountAdminAta0,\n TAccountAdminAta1,\n TAccountToken0Program,\n TAccountToken1Program\n >,\n config?: { programAddress?: TProgramAddress },\n): Promise<\n WithdrawVaultExcessInstruction<\n TProgramAddress,\n TAccountConfig,\n TAccountPool,\n TAccountAdmin,\n TAccountAuthority,\n TAccountVault0,\n TAccountVault1,\n TAccountToken0Mint,\n TAccountToken1Mint,\n TAccountAdminAta0,\n TAccountAdminAta1,\n TAccountToken0Program,\n TAccountToken1Program\n >\n> {\n // Program address.\n const programAddress = config?.programAddress ?? CPMM_PROGRAM_ADDRESS;\n\n // Original accounts.\n const originalAccounts = {\n config: { value: input.config ?? null, isWritable: false },\n pool: { value: input.pool ?? null, isWritable: false },\n admin: { value: input.admin ?? null, isWritable: false },\n authority: { value: input.authority ?? null, isWritable: false },\n vault0: { value: input.vault0 ?? null, isWritable: true },\n vault1: { value: input.vault1 ?? null, isWritable: true },\n token0Mint: { value: input.token0Mint ?? null, isWritable: false },\n token1Mint: { value: input.token1Mint ?? null, isWritable: false },\n adminAta0: { value: input.adminAta0 ?? null, isWritable: true },\n adminAta1: { value: input.adminAta1 ?? null, isWritable: true },\n token0Program: { value: input.token0Program ?? null, isWritable: false },\n token1Program: { value: input.token1Program ?? null, isWritable: false },\n };\n const accounts = originalAccounts as Record<\n keyof typeof originalAccounts,\n ResolvedInstructionAccount\n >;\n\n // Resolve default values.\n if (!accounts.authority.value) {\n accounts.authority.value = await getProgramDerivedAddress({\n programAddress,\n seeds: [\n getBytesEncoder().encode(\n new Uint8Array([97, 117, 116, 104, 111, 114, 105, 116, 121]),\n ),\n getAddressEncoder().encode(\n getAddressFromResolvedInstructionAccount('pool', accounts.pool.value),\n ),\n ],\n });\n }\n if (!accounts.adminAta0.value) {\n accounts.adminAta0.value = await getProgramDerivedAddress({\n programAddress:\n 'ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL' as Address<'ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL'>,\n seeds: [\n getAddressEncoder().encode(\n getAddressFromResolvedInstructionAccount(\n 'admin',\n accounts.admin.value,\n ),\n ),\n getAddressEncoder().encode(\n getAddressFromResolvedInstructionAccount(\n 'token0Program',\n accounts.token0Program.value,\n ),\n ),\n getAddressEncoder().encode(\n getAddressFromResolvedInstructionAccount(\n 'token0Mint',\n accounts.token0Mint.value,\n ),\n ),\n ],\n });\n }\n if (!accounts.adminAta1.value) {\n accounts.adminAta1.value = await getProgramDerivedAddress({\n programAddress:\n 'ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL' as Address<'ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL'>,\n seeds: [\n getAddressEncoder().encode(\n getAddressFromResolvedInstructionAccount(\n 'admin',\n accounts.admin.value,\n ),\n ),\n getAddressEncoder().encode(\n getAddressFromResolvedInstructionAccount(\n 'token1Program',\n accounts.token1Program.value,\n ),\n ),\n getAddressEncoder().encode(\n getAddressFromResolvedInstructionAccount(\n 'token1Mint',\n accounts.token1Mint.value,\n ),\n ),\n ],\n });\n }\n\n const getAccountMeta = getAccountMetaFactory(programAddress, 'programId');\n return Object.freeze({\n accounts: [\n getAccountMeta('config', accounts.config),\n getAccountMeta('pool', accounts.pool),\n getAccountMeta('admin', accounts.admin),\n getAccountMeta('authority', accounts.authority),\n getAccountMeta('vault0', accounts.vault0),\n getAccountMeta('vault1', accounts.vault1),\n getAccountMeta('token0Mint', accounts.token0Mint),\n getAccountMeta('token1Mint', accounts.token1Mint),\n getAccountMeta('adminAta0', accounts.adminAta0),\n getAccountMeta('adminAta1', accounts.adminAta1),\n getAccountMeta('token0Program', accounts.token0Program),\n getAccountMeta('token1Program', accounts.token1Program),\n ],\n data: getWithdrawVaultExcessInstructionDataEncoder().encode({}),\n programAddress,\n } as WithdrawVaultExcessInstruction<\n TProgramAddress,\n TAccountConfig,\n TAccountPool,\n TAccountAdmin,\n TAccountAuthority,\n TAccountVault0,\n TAccountVault1,\n TAccountToken0Mint,\n TAccountToken1Mint,\n TAccountAdminAta0,\n TAccountAdminAta1,\n TAccountToken0Program,\n TAccountToken1Program\n >);\n}\n\nexport type WithdrawVaultExcessInput<\n TAccountConfig extends string = string,\n TAccountPool extends string = string,\n TAccountAdmin extends string = string,\n TAccountAuthority extends string = string,\n TAccountVault0 extends string = string,\n TAccountVault1 extends string = string,\n TAccountToken0Mint extends string = string,\n TAccountToken1Mint extends string = string,\n TAccountAdminAta0 extends string = string,\n TAccountAdminAta1 extends string = string,\n TAccountToken0Program extends string = string,\n TAccountToken1Program extends string = string,\n> = {\n config: Address<TAccountConfig>;\n pool: Address<TAccountPool>;\n admin: TransactionSigner<TAccountAdmin>;\n authority: Address<TAccountAuthority>;\n vault0: Address<TAccountVault0>;\n vault1: Address<TAccountVault1>;\n token0Mint: Address<TAccountToken0Mint>;\n token1Mint: Address<TAccountToken1Mint>;\n adminAta0: Address<TAccountAdminAta0>;\n adminAta1: Address<TAccountAdminAta1>;\n token0Program: Address<TAccountToken0Program>;\n token1Program: Address<TAccountToken1Program>;\n};\n\nexport function getWithdrawVaultExcessInstruction<\n TAccountConfig extends string,\n TAccountPool extends string,\n TAccountAdmin extends string,\n TAccountAuthority extends string,\n TAccountVault0 extends string,\n TAccountVault1 extends string,\n TAccountToken0Mint extends string,\n TAccountToken1Mint extends string,\n TAccountAdminAta0 extends string,\n TAccountAdminAta1 extends string,\n TAccountToken0Program extends string,\n TAccountToken1Program extends string,\n TProgramAddress extends Address = typeof CPMM_PROGRAM_ADDRESS,\n>(\n input: WithdrawVaultExcessInput<\n TAccountConfig,\n TAccountPool,\n TAccountAdmin,\n TAccountAuthority,\n TAccountVault0,\n TAccountVault1,\n TAccountToken0Mint,\n TAccountToken1Mint,\n TAccountAdminAta0,\n TAccountAdminAta1,\n TAccountToken0Program,\n TAccountToken1Program\n >,\n config?: { programAddress?: TProgramAddress },\n): WithdrawVaultExcessInstruction<\n TProgramAddress,\n TAccountConfig,\n TAccountPool,\n TAccountAdmin,\n TAccountAuthority,\n TAccountVault0,\n TAccountVault1,\n TAccountToken0Mint,\n TAccountToken1Mint,\n TAccountAdminAta0,\n TAccountAdminAta1,\n TAccountToken0Program,\n TAccountToken1Program\n> {\n // Program address.\n const programAddress = config?.programAddress ?? CPMM_PROGRAM_ADDRESS;\n\n // Original accounts.\n const originalAccounts = {\n config: { value: input.config ?? null, isWritable: false },\n pool: { value: input.pool ?? null, isWritable: false },\n admin: { value: input.admin ?? null, isWritable: false },\n authority: { value: input.authority ?? null, isWritable: false },\n vault0: { value: input.vault0 ?? null, isWritable: true },\n vault1: { value: input.vault1 ?? null, isWritable: true },\n token0Mint: { value: input.token0Mint ?? null, isWritable: false },\n token1Mint: { value: input.token1Mint ?? null, isWritable: false },\n adminAta0: { value: input.adminAta0 ?? null, isWritable: true },\n adminAta1: { value: input.adminAta1 ?? null, isWritable: true },\n token0Program: { value: input.token0Program ?? null, isWritable: false },\n token1Program: { value: input.token1Program ?? null, isWritable: false },\n };\n const accounts = originalAccounts as Record<\n keyof typeof originalAccounts,\n ResolvedInstructionAccount\n >;\n\n const getAccountMeta = getAccountMetaFactory(programAddress, 'programId');\n return Object.freeze({\n accounts: [\n getAccountMeta('config', accounts.config),\n getAccountMeta('pool', accounts.pool),\n getAccountMeta('admin', accounts.admin),\n getAccountMeta('authority', accounts.authority),\n getAccountMeta('vault0', accounts.vault0),\n getAccountMeta('vault1', accounts.vault1),\n getAccountMeta('token0Mint', accounts.token0Mint),\n getAccountMeta('token1Mint', accounts.token1Mint),\n getAccountMeta('adminAta0', accounts.adminAta0),\n getAccountMeta('adminAta1', accounts.adminAta1),\n getAccountMeta('token0Program', accounts.token0Program),\n getAccountMeta('token1Program', accounts.token1Program),\n ],\n data: getWithdrawVaultExcessInstructionDataEncoder().encode({}),\n programAddress,\n } as WithdrawVaultExcessInstruction<\n TProgramAddress,\n TAccountConfig,\n TAccountPool,\n TAccountAdmin,\n TAccountAuthority,\n TAccountVault0,\n TAccountVault1,\n TAccountToken0Mint,\n TAccountToken1Mint,\n TAccountAdminAta0,\n TAccountAdminAta1,\n TAccountToken0Program,\n TAccountToken1Program\n >);\n}\n\nexport type ParsedWithdrawVaultExcessInstruction<\n TProgram extends string = typeof CPMM_PROGRAM_ADDRESS,\n TAccountMetas extends readonly AccountMeta[] = readonly AccountMeta[],\n> = {\n programAddress: Address<TProgram>;\n accounts: {\n config: TAccountMetas[0];\n pool: TAccountMetas[1];\n admin: TAccountMetas[2];\n authority: TAccountMetas[3];\n vault0: TAccountMetas[4];\n vault1: TAccountMetas[5];\n token0Mint: TAccountMetas[6];\n token1Mint: TAccountMetas[7];\n adminAta0: TAccountMetas[8];\n adminAta1: TAccountMetas[9];\n token0Program: TAccountMetas[10];\n token1Program: TAccountMetas[11];\n };\n data: WithdrawVaultExcessInstructionData;\n};\n\nexport function parseWithdrawVaultExcessInstruction<\n TProgram extends string,\n TAccountMetas extends readonly AccountMeta[],\n>(\n instruction: Instruction<TProgram> &\n InstructionWithAccounts<TAccountMetas> &\n InstructionWithData<ReadonlyUint8Array>,\n): ParsedWithdrawVaultExcessInstruction<TProgram, TAccountMetas> {\n if (instruction.accounts.length < 12) {\n throw new SolanaError(\n SOLANA_ERROR__PROGRAM_CLIENTS__INSUFFICIENT_ACCOUNT_METAS,\n {\n actualAccountMetas: instruction.accounts.length,\n expectedAccountMetas: 12,\n },\n );\n }\n let accountIndex = 0;\n const getNextAccount = () => {\n const accountMeta = (instruction.accounts as TAccountMetas)[accountIndex]!;\n accountIndex += 1;\n return accountMeta;\n };\n return {\n programAddress: instruction.programAddress,\n accounts: {\n config: getNextAccount(),\n pool: getNextAccount(),\n admin: getNextAccount(),\n authority: getNextAccount(),\n vault0: getNextAccount(),\n vault1: getNextAccount(),\n token0Mint: getNextAccount(),\n token1Mint: getNextAccount(),\n adminAta0: getNextAccount(),\n adminAta1: getNextAccount(),\n token0Program: getNextAccount(),\n token1Program: getNextAccount(),\n },\n data: getWithdrawVaultExcessInstructionDataDecoder().decode(\n instruction.data,\n ),\n };\n}\n","/**\n * This code was AUTOGENERATED using the Codama library.\n * Please DO NOT EDIT THIS FILE, instead use visitors\n * to add features, then rerun Codama to update it.\n *\n * @see https://github.com/codama-idl/codama\n */\n\nimport {\n assertIsInstructionWithAccounts,\n containsBytes,\n fixEncoderSize,\n getBytesEncoder,\n SOLANA_ERROR__PROGRAM_CLIENTS__FAILED_TO_IDENTIFY_ACCOUNT,\n SOLANA_ERROR__PROGRAM_CLIENTS__FAILED_TO_IDENTIFY_INSTRUCTION,\n SOLANA_ERROR__PROGRAM_CLIENTS__UNRECOGNIZED_INSTRUCTION_TYPE,\n SolanaError,\n type Address,\n type ClientWithPayer,\n type ClientWithRpc,\n type ClientWithTransactionPlanning,\n type ClientWithTransactionSending,\n type GetAccountInfoApi,\n type GetMultipleAccountsApi,\n type Instruction,\n type InstructionWithData,\n type ReadonlyUint8Array,\n} from '@solana/kit';\nimport {\n addSelfFetchFunctions,\n addSelfPlanAndSendFunctions,\n type SelfFetchFunctions,\n type SelfPlanAndSendFunctions,\n} from '@solana/program-client-core';\nimport {\n getAmmConfigCodec,\n getOracleStateCodec,\n getPoolCodec,\n getPositionCodec,\n type AmmConfig,\n type AmmConfigArgs,\n type OracleState,\n type OracleStateArgs,\n type Pool,\n type PoolArgs,\n type Position,\n type PositionArgs,\n} from '../accounts';\nimport {\n getAddLiquidityInstructionAsync,\n getClosePositionInstruction,\n getCollectFeesInstructionAsync,\n getCollectProtocolFeesInstructionAsync,\n getCreatePositionInstructionAsync,\n getInitializeConfigInstructionAsync,\n getInitializeOracleInstructionAsync,\n getInitializePoolInstructionAsync,\n getOracleConsultInstructionAsync,\n getOracleUpdateInstructionAsync,\n getPauseInstruction,\n getPreviewSwapExactInInstruction,\n getRedeemProtocolSharesInstructionAsync,\n getRemoveLiquidityInstructionAsync,\n getSetFeesInstruction,\n getSetHookInstruction,\n getSwapExactInInstructionAsync,\n getTransferAdminInstruction,\n getUnpauseInstruction,\n getUpdateConfigInstruction,\n getWithdrawVaultExcessInstructionAsync,\n parseAddLiquidityInstruction,\n parseClosePositionInstruction,\n parseCollectFeesInstruction,\n parseCollectProtocolFeesInstruction,\n parseCreatePositionInstruction,\n parseInitializeConfigInstruction,\n parseInitializeOracleInstruction,\n parseInitializePoolInstruction,\n parseOracleConsultInstruction,\n parseOracleUpdateInstruction,\n parsePauseInstruction,\n parsePreviewSwapExactInInstruction,\n parseRedeemProtocolSharesInstruction,\n parseRemoveLiquidityInstruction,\n parseSetFeesInstruction,\n parseSetHookInstruction,\n parseSwapExactInInstruction,\n parseTransferAdminInstruction,\n parseUnpauseInstruction,\n parseUpdateConfigInstruction,\n parseWithdrawVaultExcessInstruction,\n type AddLiquidityAsyncInput,\n type ClosePositionInput,\n type CollectFeesAsyncInput,\n type CollectProtocolFeesAsyncInput,\n type CreatePositionAsyncInput,\n type InitializeConfigAsyncInput,\n type InitializeOracleAsyncInput,\n type InitializePoolAsyncInput,\n type OracleConsultAsyncInput,\n type OracleUpdateAsyncInput,\n type ParsedAddLiquidityInstruction,\n type ParsedClosePositionInstruction,\n type ParsedCollectFeesInstruction,\n type ParsedCollectProtocolFeesInstruction,\n type ParsedCreatePositionInstruction,\n type ParsedInitializeConfigInstruction,\n type ParsedInitializeOracleInstruction,\n type ParsedInitializePoolInstruction,\n type ParsedOracleConsultInstruction,\n type ParsedOracleUpdateInstruction,\n type ParsedPauseInstruction,\n type ParsedPreviewSwapExactInInstruction,\n type ParsedRedeemProtocolSharesInstruction,\n type ParsedRemoveLiquidityInstruction,\n type ParsedSetFeesInstruction,\n type ParsedSetHookInstruction,\n type ParsedSwapExactInInstruction,\n type ParsedTransferAdminInstruction,\n type ParsedUnpauseInstruction,\n type ParsedUpdateConfigInstruction,\n type ParsedWithdrawVaultExcessInstruction,\n type PauseInput,\n type PreviewSwapExactInInput,\n type RedeemProtocolSharesAsyncInput,\n type RemoveLiquidityAsyncInput,\n type SetFeesInput,\n type SetHookInput,\n type SwapExactInAsyncInput,\n type TransferAdminInput,\n type UnpauseInput,\n type UpdateConfigInput,\n type WithdrawVaultExcessAsyncInput,\n} from '../instructions';\n\nexport const CPMM_PROGRAM_ADDRESS =\n '9PSxVPoPfnbZ8Q1uQhgS6ZxvBjFboZtebNsu34umxkgQ' as Address<'9PSxVPoPfnbZ8Q1uQhgS6ZxvBjFboZtebNsu34umxkgQ'>;\n\nexport enum CpmmAccount {\n AmmConfig,\n OracleState,\n Pool,\n Position,\n}\n\nexport function identifyCpmmAccount(\n account: { data: ReadonlyUint8Array } | ReadonlyUint8Array,\n): CpmmAccount {\n const data = 'data' in account ? account.data : account;\n if (\n containsBytes(\n data,\n fixEncoderSize(getBytesEncoder(), 8).encode(\n new Uint8Array([218, 244, 33, 104, 203, 203, 43, 111]),\n ),\n 0,\n )\n ) {\n return CpmmAccount.AmmConfig;\n }\n if (\n containsBytes(\n data,\n fixEncoderSize(getBytesEncoder(), 8).encode(\n new Uint8Array([97, 156, 157, 189, 194, 73, 8, 15]),\n ),\n 0,\n )\n ) {\n return CpmmAccount.OracleState;\n }\n if (\n containsBytes(\n data,\n fixEncoderSize(getBytesEncoder(), 8).encode(\n new Uint8Array([241, 154, 109, 4, 17, 177, 109, 188]),\n ),\n 0,\n )\n ) {\n return CpmmAccount.Pool;\n }\n if (\n containsBytes(\n data,\n fixEncoderSize(getBytesEncoder(), 8).encode(\n new Uint8Array([170, 188, 143, 228, 122, 64, 247, 208]),\n ),\n 0,\n )\n ) {\n return CpmmAccount.Position;\n }\n throw new SolanaError(\n SOLANA_ERROR__PROGRAM_CLIENTS__FAILED_TO_IDENTIFY_ACCOUNT,\n { accountData: data, programName: 'cpmm' },\n );\n}\n\nexport enum CpmmInstruction {\n AddLiquidity,\n ClosePosition,\n CollectFees,\n CollectProtocolFees,\n CreatePosition,\n InitializeConfig,\n InitializeOracle,\n InitializePool,\n OracleConsult,\n OracleUpdate,\n Pause,\n PreviewSwapExactIn,\n RedeemProtocolShares,\n RemoveLiquidity,\n SetFees,\n SetHook,\n SwapExactIn,\n TransferAdmin,\n Unpause,\n UpdateConfig,\n WithdrawVaultExcess,\n}\n\nexport function identifyCpmmInstruction(\n instruction: { data: ReadonlyUint8Array } | ReadonlyUint8Array,\n): CpmmInstruction {\n const data = 'data' in instruction ? instruction.data : instruction;\n if (\n containsBytes(\n data,\n fixEncoderSize(getBytesEncoder(), 8).encode(\n new Uint8Array([181, 157, 89, 67, 143, 182, 52, 72]),\n ),\n 0,\n )\n ) {\n return CpmmInstruction.AddLiquidity;\n }\n if (\n containsBytes(\n data,\n fixEncoderSize(getBytesEncoder(), 8).encode(\n new Uint8Array([123, 134, 81, 0, 49, 68, 98, 98]),\n ),\n 0,\n )\n ) {\n return CpmmInstruction.ClosePosition;\n }\n if (\n containsBytes(\n data,\n fixEncoderSize(getBytesEncoder(), 8).encode(\n new Uint8Array([164, 152, 207, 99, 30, 186, 19, 182]),\n ),\n 0,\n )\n ) {\n return CpmmInstruction.CollectFees;\n }\n if (\n containsBytes(\n data,\n fixEncoderSize(getBytesEncoder(), 8).encode(\n new Uint8Array([22, 67, 23, 98, 150, 178, 70, 220]),\n ),\n 0,\n )\n ) {\n return CpmmInstruction.CollectProtocolFees;\n }\n if (\n containsBytes(\n data,\n fixEncoderSize(getBytesEncoder(), 8).encode(\n new Uint8Array([48, 215, 197, 153, 96, 203, 180, 133]),\n ),\n 0,\n )\n ) {\n return CpmmInstruction.CreatePosition;\n }\n if (\n containsBytes(\n data,\n fixEncoderSize(getBytesEncoder(), 8).encode(\n new Uint8Array([208, 127, 21, 1, 194, 190, 196, 70]),\n ),\n 0,\n )\n ) {\n return CpmmInstruction.InitializeConfig;\n }\n if (\n containsBytes(\n data,\n fixEncoderSize(getBytesEncoder(), 8).encode(\n new Uint8Array([144, 223, 131, 120, 196, 253, 181, 99]),\n ),\n 0,\n )\n ) {\n return CpmmInstruction.InitializeOracle;\n }\n if (\n containsBytes(\n data,\n fixEncoderSize(getBytesEncoder(), 8).encode(\n new Uint8Array([95, 180, 10, 172, 84, 174, 232, 40]),\n ),\n 0,\n )\n ) {\n return CpmmInstruction.InitializePool;\n }\n if (\n containsBytes(\n data,\n fixEncoderSize(getBytesEncoder(), 8).encode(\n new Uint8Array([239, 237, 255, 177, 142, 72, 96, 175]),\n ),\n 0,\n )\n ) {\n return CpmmInstruction.OracleConsult;\n }\n if (\n containsBytes(\n data,\n fixEncoderSize(getBytesEncoder(), 8).encode(\n new Uint8Array([85, 209, 248, 142, 186, 249, 120, 239]),\n ),\n 0,\n )\n ) {\n return CpmmInstruction.OracleUpdate;\n }\n if (\n containsBytes(\n data,\n fixEncoderSize(getBytesEncoder(), 8).encode(\n new Uint8Array([211, 22, 221, 251, 74, 121, 193, 47]),\n ),\n 0,\n )\n ) {\n return CpmmInstruction.Pause;\n }\n if (\n containsBytes(\n data,\n fixEncoderSize(getBytesEncoder(), 8).encode(\n new Uint8Array([50, 130, 31, 69, 147, 58, 222, 178]),\n ),\n 0,\n )\n ) {\n return CpmmInstruction.PreviewSwapExactIn;\n }\n if (\n containsBytes(\n data,\n fixEncoderSize(getBytesEncoder(), 8).encode(\n new Uint8Array([143, 253, 251, 77, 213, 178, 0, 225]),\n ),\n 0,\n )\n ) {\n return CpmmInstruction.RedeemProtocolShares;\n }\n if (\n containsBytes(\n data,\n fixEncoderSize(getBytesEncoder(), 8).encode(\n new Uint8Array([80, 85, 209, 72, 24, 206, 177, 108]),\n ),\n 0,\n )\n ) {\n return CpmmInstruction.RemoveLiquidity;\n }\n if (\n containsBytes(\n data,\n fixEncoderSize(getBytesEncoder(), 8).encode(\n new Uint8Array([137, 178, 49, 58, 0, 245, 242, 190]),\n ),\n 0,\n )\n ) {\n return CpmmInstruction.SetFees;\n }\n if (\n containsBytes(\n data,\n fixEncoderSize(getBytesEncoder(), 8).encode(\n new Uint8Array([175, 16, 187, 252, 19, 54, 111, 221]),\n ),\n 0,\n )\n ) {\n return CpmmInstruction.SetHook;\n }\n if (\n containsBytes(\n data,\n fixEncoderSize(getBytesEncoder(), 8).encode(\n new Uint8Array([104, 104, 131, 86, 161, 189, 180, 216]),\n ),\n 0,\n )\n ) {\n return CpmmInstruction.SwapExactIn;\n }\n if (\n containsBytes(\n data,\n fixEncoderSize(getBytesEncoder(), 8).encode(\n new Uint8Array([42, 242, 66, 106, 228, 10, 111, 156]),\n ),\n 0,\n )\n ) {\n return CpmmInstruction.TransferAdmin;\n }\n if (\n containsBytes(\n data,\n fixEncoderSize(getBytesEncoder(), 8).encode(\n new Uint8Array([169, 144, 4, 38, 10, 141, 188, 255]),\n ),\n 0,\n )\n ) {\n return CpmmInstruction.Unpause;\n }\n if (\n containsBytes(\n data,\n fixEncoderSize(getBytesEncoder(), 8).encode(\n new Uint8Array([29, 158, 252, 191, 10, 83, 219, 99]),\n ),\n 0,\n )\n ) {\n return CpmmInstruction.UpdateConfig;\n }\n if (\n containsBytes(\n data,\n fixEncoderSize(getBytesEncoder(), 8).encode(\n new Uint8Array([235, 197, 247, 177, 137, 72, 135, 113]),\n ),\n 0,\n )\n ) {\n return CpmmInstruction.WithdrawVaultExcess;\n }\n throw new SolanaError(\n SOLANA_ERROR__PROGRAM_CLIENTS__FAILED_TO_IDENTIFY_INSTRUCTION,\n { instructionData: data, programName: 'cpmm' },\n );\n}\n\nexport type ParsedCpmmInstruction<\n TProgram extends string = '9PSxVPoPfnbZ8Q1uQhgS6ZxvBjFboZtebNsu34umxkgQ',\n> =\n | ({\n instructionType: CpmmInstruction.AddLiquidity;\n } & ParsedAddLiquidityInstruction<TProgram>)\n | ({\n instructionType: CpmmInstruction.ClosePosition;\n } & ParsedClosePositionInstruction<TProgram>)\n | ({\n instructionType: CpmmInstruction.CollectFees;\n } & ParsedCollectFeesInstruction<TProgram>)\n | ({\n instructionType: CpmmInstruction.CollectProtocolFees;\n } & ParsedCollectProtocolFeesInstruction<TProgram>)\n | ({\n instructionType: CpmmInstruction.CreatePosition;\n } & ParsedCreatePositionInstruction<TProgram>)\n | ({\n instructionType: CpmmInstruction.InitializeConfig;\n } & ParsedInitializeConfigInstruction<TProgram>)\n | ({\n instructionType: CpmmInstruction.InitializeOracle;\n } & ParsedInitializeOracleInstruction<TProgram>)\n | ({\n instructionType: CpmmInstruction.InitializePool;\n } & ParsedInitializePoolInstruction<TProgram>)\n | ({\n instructionType: CpmmInstruction.OracleConsult;\n } & ParsedOracleConsultInstruction<TProgram>)\n | ({\n instructionType: CpmmInstruction.OracleUpdate;\n } & ParsedOracleUpdateInstruction<TProgram>)\n | ({\n instructionType: CpmmInstruction.Pause;\n } & ParsedPauseInstruction<TProgram>)\n | ({\n instructionType: CpmmInstruction.PreviewSwapExactIn;\n } & ParsedPreviewSwapExactInInstruction<TProgram>)\n | ({\n instructionType: CpmmInstruction.RedeemProtocolShares;\n } & ParsedRedeemProtocolSharesInstruction<TProgram>)\n | ({\n instructionType: CpmmInstruction.RemoveLiquidity;\n } & ParsedRemoveLiquidityInstruction<TProgram>)\n | ({\n instructionType: CpmmInstruction.SetFees;\n } & ParsedSetFeesInstruction<TProgram>)\n | ({\n instructionType: CpmmInstruction.SetHook;\n } & ParsedSetHookInstruction<TProgram>)\n | ({\n instructionType: CpmmInstruction.SwapExactIn;\n } & ParsedSwapExactInInstruction<TProgram>)\n | ({\n instructionType: CpmmInstruction.TransferAdmin;\n } & ParsedTransferAdminInstruction<TProgram>)\n | ({\n instructionType: CpmmInstruction.Unpause;\n } & ParsedUnpauseInstruction<TProgram>)\n | ({\n instructionType: CpmmInstruction.UpdateConfig;\n } & ParsedUpdateConfigInstruction<TProgram>)\n | ({\n instructionType: CpmmInstruction.WithdrawVaultExcess;\n } & ParsedWithdrawVaultExcessInstruction<TProgram>);\n\nexport function parseCpmmInstruction<TProgram extends string>(\n instruction: Instruction<TProgram> & InstructionWithData<ReadonlyUint8Array>,\n): ParsedCpmmInstruction<TProgram> {\n const instructionType = identifyCpmmInstruction(instruction);\n switch (instructionType) {\n case CpmmInstruction.AddLiquidity: {\n assertIsInstructionWithAccounts(instruction);\n return {\n instructionType: CpmmInstruction.AddLiquidity,\n ...parseAddLiquidityInstruction(instruction),\n };\n }\n case CpmmInstruction.ClosePosition: {\n assertIsInstructionWithAccounts(instruction);\n return {\n instructionType: CpmmInstruction.ClosePosition,\n ...parseClosePositionInstruction(instruction),\n };\n }\n case CpmmInstruction.CollectFees: {\n assertIsInstructionWithAccounts(instruction);\n return {\n instructionType: CpmmInstruction.CollectFees,\n ...parseCollectFeesInstruction(instruction),\n };\n }\n case CpmmInstruction.CollectProtocolFees: {\n assertIsInstructionWithAccounts(instruction);\n return {\n instructionType: CpmmInstruction.CollectProtocolFees,\n ...parseCollectProtocolFeesInstruction(instruction),\n };\n }\n case CpmmInstruction.CreatePosition: {\n assertIsInstructionWithAccounts(instruction);\n return {\n instructionType: CpmmInstruction.CreatePosition,\n ...parseCreatePositionInstruction(instruction),\n };\n }\n case CpmmInstruction.InitializeConfig: {\n assertIsInstructionWithAccounts(instruction);\n return {\n instructionType: CpmmInstruction.InitializeConfig,\n ...parseInitializeConfigInstruction(instruction),\n };\n }\n case CpmmInstruction.InitializeOracle: {\n assertIsInstructionWithAccounts(instruction);\n return {\n instructionType: CpmmInstruction.InitializeOracle,\n ...parseInitializeOracleInstruction(instruction),\n };\n }\n case CpmmInstruction.InitializePool: {\n assertIsInstructionWithAccounts(instruction);\n return {\n instructionType: CpmmInstruction.InitializePool,\n ...parseInitializePoolInstruction(instruction),\n };\n }\n case CpmmInstruction.OracleConsult: {\n assertIsInstructionWithAccounts(instruction);\n return {\n instructionType: CpmmInstruction.OracleConsult,\n ...parseOracleConsultInstruction(instruction),\n };\n }\n case CpmmInstruction.OracleUpdate: {\n assertIsInstructionWithAccounts(instruction);\n return {\n instructionType: CpmmInstruction.OracleUpdate,\n ...parseOracleUpdateInstruction(instruction),\n };\n }\n case CpmmInstruction.Pause: {\n assertIsInstructionWithAccounts(instruction);\n return {\n instructionType: CpmmInstruction.Pause,\n ...parsePauseInstruction(instruction),\n };\n }\n case CpmmInstruction.PreviewSwapExactIn: {\n assertIsInstructionWithAccounts(instruction);\n return {\n instructionType: CpmmInstruction.PreviewSwapExactIn,\n ...parsePreviewSwapExactInInstruction(instruction),\n };\n }\n case CpmmInstruction.RedeemProtocolShares: {\n assertIsInstructionWithAccounts(instruction);\n return {\n instructionType: CpmmInstruction.RedeemProtocolShares,\n ...parseRedeemProtocolSharesInstruction(instruction),\n };\n }\n case CpmmInstruction.RemoveLiquidity: {\n assertIsInstructionWithAccounts(instruction);\n return {\n instructionType: CpmmInstruction.RemoveLiquidity,\n ...parseRemoveLiquidityInstruction(instruction),\n };\n }\n case CpmmInstruction.SetFees: {\n assertIsInstructionWithAccounts(instruction);\n return {\n instructionType: CpmmInstruction.SetFees,\n ...parseSetFeesInstruction(instruction),\n };\n }\n case CpmmInstruction.SetHook: {\n assertIsInstructionWithAccounts(instruction);\n return {\n instructionType: CpmmInstruction.SetHook,\n ...parseSetHookInstruction(instruction),\n };\n }\n case CpmmInstruction.SwapExactIn: {\n assertIsInstructionWithAccounts(instruction);\n return {\n instructionType: CpmmInstruction.SwapExactIn,\n ...parseSwapExactInInstruction(instruction),\n };\n }\n case CpmmInstruction.TransferAdmin: {\n assertIsInstructionWithAccounts(instruction);\n return {\n instructionType: CpmmInstruction.TransferAdmin,\n ...parseTransferAdminInstruction(instruction),\n };\n }\n case CpmmInstruction.Unpause: {\n assertIsInstructionWithAccounts(instruction);\n return {\n instructionType: CpmmInstruction.Unpause,\n ...parseUnpauseInstruction(instruction),\n };\n }\n case CpmmInstruction.UpdateConfig: {\n assertIsInstructionWithAccounts(instruction);\n return {\n instructionType: CpmmInstruction.UpdateConfig,\n ...parseUpdateConfigInstruction(instruction),\n };\n }\n case CpmmInstruction.WithdrawVaultExcess: {\n assertIsInstructionWithAccounts(instruction);\n return {\n instructionType: CpmmInstruction.WithdrawVaultExcess,\n ...parseWithdrawVaultExcessInstruction(instruction),\n };\n }\n default:\n throw new SolanaError(\n SOLANA_ERROR__PROGRAM_CLIENTS__UNRECOGNIZED_INSTRUCTION_TYPE,\n { instructionType: instructionType as string, programName: 'cpmm' },\n );\n }\n}\n\nexport type CpmmPlugin = {\n accounts: CpmmPluginAccounts;\n instructions: CpmmPluginInstructions;\n};\n\nexport type CpmmPluginAccounts = {\n ammConfig: ReturnType<typeof getAmmConfigCodec> &\n SelfFetchFunctions<AmmConfigArgs, AmmConfig>;\n oracleState: ReturnType<typeof getOracleStateCodec> &\n SelfFetchFunctions<OracleStateArgs, OracleState>;\n pool: ReturnType<typeof getPoolCodec> & SelfFetchFunctions<PoolArgs, Pool>;\n position: ReturnType<typeof getPositionCodec> &\n SelfFetchFunctions<PositionArgs, Position>;\n};\n\nexport type CpmmPluginInstructions = {\n addLiquidity: (\n input: AddLiquidityAsyncInput,\n ) => ReturnType<typeof getAddLiquidityInstructionAsync> &\n SelfPlanAndSendFunctions;\n closePosition: (\n input: ClosePositionInput,\n ) => ReturnType<typeof getClosePositionInstruction> &\n SelfPlanAndSendFunctions;\n collectFees: (\n input: CollectFeesAsyncInput,\n ) => ReturnType<typeof getCollectFeesInstructionAsync> &\n SelfPlanAndSendFunctions;\n collectProtocolFees: (\n input: CollectProtocolFeesAsyncInput,\n ) => ReturnType<typeof getCollectProtocolFeesInstructionAsync> &\n SelfPlanAndSendFunctions;\n createPosition: (\n input: MakeOptional<CreatePositionAsyncInput, 'payer'>,\n ) => ReturnType<typeof getCreatePositionInstructionAsync> &\n SelfPlanAndSendFunctions;\n initializeConfig: (\n input: MakeOptional<InitializeConfigAsyncInput, 'payer'>,\n ) => ReturnType<typeof getInitializeConfigInstructionAsync> &\n SelfPlanAndSendFunctions;\n initializeOracle: (\n input: MakeOptional<InitializeOracleAsyncInput, 'payer'>,\n ) => ReturnType<typeof getInitializeOracleInstructionAsync> &\n SelfPlanAndSendFunctions;\n initializePool: (\n input: MakeOptional<InitializePoolAsyncInput, 'payer'>,\n ) => ReturnType<typeof getInitializePoolInstructionAsync> &\n SelfPlanAndSendFunctions;\n oracleConsult: (\n input: OracleConsultAsyncInput,\n ) => ReturnType<typeof getOracleConsultInstructionAsync> &\n SelfPlanAndSendFunctions;\n oracleUpdate: (\n input: OracleUpdateAsyncInput,\n ) => ReturnType<typeof getOracleUpdateInstructionAsync> &\n SelfPlanAndSendFunctions;\n pause: (\n input: PauseInput,\n ) => ReturnType<typeof getPauseInstruction> & SelfPlanAndSendFunctions;\n previewSwapExactIn: (\n input: PreviewSwapExactInInput,\n ) => ReturnType<typeof getPreviewSwapExactInInstruction> &\n SelfPlanAndSendFunctions;\n redeemProtocolShares: (\n input: RedeemProtocolSharesAsyncInput,\n ) => ReturnType<typeof getRedeemProtocolSharesInstructionAsync> &\n SelfPlanAndSendFunctions;\n removeLiquidity: (\n input: RemoveLiquidityAsyncInput,\n ) => ReturnType<typeof getRemoveLiquidityInstructionAsync> &\n SelfPlanAndSendFunctions;\n setFees: (\n input: SetFeesInput,\n ) => ReturnType<typeof getSetFeesInstruction> & SelfPlanAndSendFunctions;\n setHook: (\n input: SetHookInput,\n ) => ReturnType<typeof getSetHookInstruction> & SelfPlanAndSendFunctions;\n swapExactIn: (\n input: SwapExactInAsyncInput,\n ) => ReturnType<typeof getSwapExactInInstructionAsync> &\n SelfPlanAndSendFunctions;\n transferAdmin: (\n input: TransferAdminInput,\n ) => ReturnType<typeof getTransferAdminInstruction> &\n SelfPlanAndSendFunctions;\n unpause: (\n input: UnpauseInput,\n ) => ReturnType<typeof getUnpauseInstruction> & SelfPlanAndSendFunctions;\n updateConfig: (\n input: UpdateConfigInput,\n ) => ReturnType<typeof getUpdateConfigInstruction> & SelfPlanAndSendFunctions;\n withdrawVaultExcess: (\n input: WithdrawVaultExcessAsyncInput,\n ) => ReturnType<typeof getWithdrawVaultExcessInstructionAsync> &\n SelfPlanAndSendFunctions;\n};\n\nexport type CpmmPluginRequirements = ClientWithRpc<\n GetAccountInfoApi & GetMultipleAccountsApi\n> &\n ClientWithPayer &\n ClientWithTransactionPlanning &\n ClientWithTransactionSending;\n\nexport function cpmmProgram() {\n return <T extends CpmmPluginRequirements>(client: T) => {\n return {\n ...client,\n cpmm: <CpmmPlugin>{\n accounts: {\n ammConfig: addSelfFetchFunctions(client, getAmmConfigCodec()),\n oracleState: addSelfFetchFunctions(client, getOracleStateCodec()),\n pool: addSelfFetchFunctions(client, getPoolCodec()),\n position: addSelfFetchFunctions(client, getPositionCodec()),\n },\n instructions: {\n addLiquidity: (input) =>\n addSelfPlanAndSendFunctions(\n client,\n getAddLiquidityInstructionAsync(input),\n ),\n closePosition: (input) =>\n addSelfPlanAndSendFunctions(\n client,\n getClosePositionInstruction(input),\n ),\n collectFees: (input) =>\n addSelfPlanAndSendFunctions(\n client,\n getCollectFeesInstructionAsync(input),\n ),\n collectProtocolFees: (input) =>\n addSelfPlanAndSendFunctions(\n client,\n getCollectProtocolFeesInstructionAsync(input),\n ),\n createPosition: (input) =>\n addSelfPlanAndSendFunctions(\n client,\n getCreatePositionInstructionAsync({\n ...input,\n payer: input.payer ?? client.payer,\n }),\n ),\n initializeConfig: (input) =>\n addSelfPlanAndSendFunctions(\n client,\n getInitializeConfigInstructionAsync({\n ...input,\n payer: input.payer ?? client.payer,\n }),\n ),\n initializeOracle: (input) =>\n addSelfPlanAndSendFunctions(\n client,\n getInitializeOracleInstructionAsync({\n ...input,\n payer: input.payer ?? client.payer,\n }),\n ),\n initializePool: (input) =>\n addSelfPlanAndSendFunctions(\n client,\n getInitializePoolInstructionAsync({\n ...input,\n payer: input.payer ?? client.payer,\n }),\n ),\n oracleConsult: (input) =>\n addSelfPlanAndSendFunctions(\n client,\n getOracleConsultInstructionAsync(input),\n ),\n oracleUpdate: (input) =>\n addSelfPlanAndSendFunctions(\n client,\n getOracleUpdateInstructionAsync(input),\n ),\n pause: (input) =>\n addSelfPlanAndSendFunctions(client, getPauseInstruction(input)),\n previewSwapExactIn: (input) =>\n addSelfPlanAndSendFunctions(\n client,\n getPreviewSwapExactInInstruction(input),\n ),\n redeemProtocolShares: (input) =>\n addSelfPlanAndSendFunctions(\n client,\n getRedeemProtocolSharesInstructionAsync(input),\n ),\n removeLiquidity: (input) =>\n addSelfPlanAndSendFunctions(\n client,\n getRemoveLiquidityInstructionAsync(input),\n ),\n setFees: (input) =>\n addSelfPlanAndSendFunctions(client, getSetFeesInstruction(input)),\n setHook: (input) =>\n addSelfPlanAndSendFunctions(client, getSetHookInstruction(input)),\n swapExactIn: (input) =>\n addSelfPlanAndSendFunctions(\n client,\n getSwapExactInInstructionAsync(input),\n ),\n transferAdmin: (input) =>\n addSelfPlanAndSendFunctions(\n client,\n getTransferAdminInstruction(input),\n ),\n unpause: (input) =>\n addSelfPlanAndSendFunctions(client, getUnpauseInstruction(input)),\n updateConfig: (input) =>\n addSelfPlanAndSendFunctions(\n client,\n getUpdateConfigInstruction(input),\n ),\n withdrawVaultExcess: (input) =>\n addSelfPlanAndSendFunctions(\n client,\n getWithdrawVaultExcessInstructionAsync(input),\n ),\n },\n },\n };\n };\n}\n\ntype MakeOptional<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>;\n","/**\n * This code was AUTOGENERATED using the Codama library.\n * Please DO NOT EDIT THIS FILE, instead use visitors\n * to add features, then rerun Codama to update it.\n *\n * @see https://github.com/codama-idl/codama\n */\n\nimport {\n combineCodec,\n fixDecoderSize,\n fixEncoderSize,\n getAddressEncoder,\n getBooleanDecoder,\n getBooleanEncoder,\n getBytesDecoder,\n getBytesEncoder,\n getProgramDerivedAddress,\n getStructDecoder,\n getStructEncoder,\n getU128Decoder,\n getU128Encoder,\n getU64Decoder,\n getU64Encoder,\n SOLANA_ERROR__PROGRAM_CLIENTS__INSUFFICIENT_ACCOUNT_METAS,\n SolanaError,\n transformEncoder,\n type AccountMeta,\n type AccountSignerMeta,\n type Address,\n type FixedSizeCodec,\n type FixedSizeDecoder,\n type FixedSizeEncoder,\n type Instruction,\n type InstructionWithAccounts,\n type InstructionWithData,\n type ReadonlyAccount,\n type ReadonlySignerAccount,\n type ReadonlyUint8Array,\n type TransactionSigner,\n type WritableAccount,\n} from '@solana/kit';\nimport {\n getAccountMetaFactory,\n getAddressFromResolvedInstructionAccount,\n type ResolvedInstructionAccount,\n} from '@solana/program-client-core';\nimport { CPMM_PROGRAM_ADDRESS } from '../programs';\n\nexport const ADD_LIQUIDITY_DISCRIMINATOR = new Uint8Array([\n 181, 157, 89, 67, 143, 182, 52, 72,\n]);\n\nexport function getAddLiquidityDiscriminatorBytes() {\n return fixEncoderSize(getBytesEncoder(), 8).encode(\n ADD_LIQUIDITY_DISCRIMINATOR,\n );\n}\n\nexport type AddLiquidityInstruction<\n TProgram extends string = typeof CPMM_PROGRAM_ADDRESS,\n TAccountConfig extends string | AccountMeta<string> = string,\n TAccountPool extends string | AccountMeta<string> = string,\n TAccountPosition extends string | AccountMeta<string> = string,\n TAccountProtocolFeePosition extends string | AccountMeta<string> = string,\n TAccountOwner extends string | AccountMeta<string> = string,\n TAccountAuthority extends string | AccountMeta<string> = string,\n TAccountVault0 extends string | AccountMeta<string> = string,\n TAccountVault1 extends string | AccountMeta<string> = string,\n TAccountToken0Mint extends string | AccountMeta<string> = string,\n TAccountToken1Mint extends string | AccountMeta<string> = string,\n TAccountUser0 extends string | AccountMeta<string> = string,\n TAccountUser1 extends string | AccountMeta<string> = string,\n TAccountToken0Program extends string | AccountMeta<string> = string,\n TAccountToken1Program extends string | AccountMeta<string> = string,\n TAccountOracle extends string | AccountMeta<string> = string,\n TRemainingAccounts extends readonly AccountMeta<string>[] = [],\n> = Instruction<TProgram> &\n InstructionWithData<ReadonlyUint8Array> &\n InstructionWithAccounts<\n [\n TAccountConfig extends string\n ? ReadonlyAccount<TAccountConfig>\n : TAccountConfig,\n TAccountPool extends string\n ? WritableAccount<TAccountPool>\n : TAccountPool,\n TAccountPosition extends string\n ? WritableAccount<TAccountPosition>\n : TAccountPosition,\n TAccountProtocolFeePosition extends string\n ? WritableAccount<TAccountProtocolFeePosition>\n : TAccountProtocolFeePosition,\n TAccountOwner extends string\n ? ReadonlySignerAccount<TAccountOwner> &\n AccountSignerMeta<TAccountOwner>\n : TAccountOwner,\n TAccountAuthority extends string\n ? ReadonlyAccount<TAccountAuthority>\n : TAccountAuthority,\n TAccountVault0 extends string\n ? WritableAccount<TAccountVault0>\n : TAccountVault0,\n TAccountVault1 extends string\n ? WritableAccount<TAccountVault1>\n : TAccountVault1,\n TAccountToken0Mint extends string\n ? ReadonlyAccount<TAccountToken0Mint>\n : TAccountToken0Mint,\n TAccountToken1Mint extends string\n ? ReadonlyAccount<TAccountToken1Mint>\n : TAccountToken1Mint,\n TAccountUser0 extends string\n ? WritableAccount<TAccountUser0>\n : TAccountUser0,\n TAccountUser1 extends string\n ? WritableAccount<TAccountUser1>\n : TAccountUser1,\n TAccountToken0Program extends string\n ? ReadonlyAccount<TAccountToken0Program>\n : TAccountToken0Program,\n TAccountToken1Program extends string\n ? ReadonlyAccount<TAccountToken1Program>\n : TAccountToken1Program,\n TAccountOracle extends string\n ? WritableAccount<TAccountOracle>\n : TAccountOracle,\n ...TRemainingAccounts,\n ]\n >;\n\nexport type AddLiquidityInstructionData = {\n discriminator: ReadonlyUint8Array;\n amount0Max: bigint;\n amount1Max: bigint;\n minSharesOut: bigint;\n updateOracle: boolean;\n};\n\nexport type AddLiquidityInstructionDataArgs = {\n amount0Max: number | bigint;\n amount1Max: number | bigint;\n minSharesOut: number | bigint;\n updateOracle: boolean;\n};\n\nexport function getAddLiquidityInstructionDataEncoder(): FixedSizeEncoder<AddLiquidityInstructionDataArgs> {\n return transformEncoder(\n getStructEncoder([\n ['discriminator', fixEncoderSize(getBytesEncoder(), 8)],\n ['amount0Max', getU64Encoder()],\n ['amount1Max', getU64Encoder()],\n ['minSharesOut', getU128Encoder()],\n ['updateOracle', getBooleanEncoder()],\n ]),\n (value) => ({ ...value, discriminator: ADD_LIQUIDITY_DISCRIMINATOR }),\n );\n}\n\nexport function getAddLiquidityInstructionDataDecoder(): FixedSizeDecoder<AddLiquidityInstructionData> {\n return getStructDecoder([\n ['discriminator', fixDecoderSize(getBytesDecoder(), 8)],\n ['amount0Max', getU64Decoder()],\n ['amount1Max', getU64Decoder()],\n ['minSharesOut', getU128Decoder()],\n ['updateOracle', getBooleanDecoder()],\n ]);\n}\n\nexport function getAddLiquidityInstructionDataCodec(): FixedSizeCodec<\n AddLiquidityInstructionDataArgs,\n AddLiquidityInstructionData\n> {\n return combineCodec(\n getAddLiquidityInstructionDataEncoder(),\n getAddLiquidityInstructionDataDecoder(),\n );\n}\n\nexport type AddLiquidityAsyncInput<\n TAccountConfig extends string = string,\n TAccountPool extends string = string,\n TAccountPosition extends string = string,\n TAccountProtocolFeePosition extends string = string,\n TAccountOwner extends string = string,\n TAccountAuthority extends string = string,\n TAccountVault0 extends string = string,\n TAccountVault1 extends string = string,\n TAccountToken0Mint extends string = string,\n TAccountToken1Mint extends string = string,\n TAccountUser0 extends string = string,\n TAccountUser1 extends string = string,\n TAccountToken0Program extends string = string,\n TAccountToken1Program extends string = string,\n TAccountOracle extends string = string,\n> = {\n config: Address<TAccountConfig>;\n pool: Address<TAccountPool>;\n position: Address<TAccountPosition>;\n protocolFeePosition: Address<TAccountProtocolFeePosition>;\n owner: TransactionSigner<TAccountOwner>;\n authority?: Address<TAccountAuthority>;\n vault0: Address<TAccountVault0>;\n vault1: Address<TAccountVault1>;\n token0Mint: Address<TAccountToken0Mint>;\n token1Mint: Address<TAccountToken1Mint>;\n user0: Address<TAccountUser0>;\n user1: Address<TAccountUser1>;\n token0Program: Address<TAccountToken0Program>;\n token1Program: Address<TAccountToken1Program>;\n oracle?: Address<TAccountOracle>;\n amount0Max: AddLiquidityInstructionDataArgs['amount0Max'];\n amount1Max: AddLiquidityInstructionDataArgs['amount1Max'];\n minSharesOut: AddLiquidityInstructionDataArgs['minSharesOut'];\n updateOracle: AddLiquidityInstructionDataArgs['updateOracle'];\n};\n\nexport async function getAddLiquidityInstructionAsync<\n TAccountConfig extends string,\n TAccountPool extends string,\n TAccountPosition extends string,\n TAccountProtocolFeePosition extends string,\n TAccountOwner extends string,\n TAccountAuthority extends string,\n TAccountVault0 extends string,\n TAccountVault1 extends string,\n TAccountToken0Mint extends string,\n TAccountToken1Mint extends string,\n TAccountUser0 extends string,\n TAccountUser1 extends string,\n TAccountToken0Program extends string,\n TAccountToken1Program extends string,\n TAccountOracle extends string,\n TProgramAddress extends Address = typeof CPMM_PROGRAM_ADDRESS,\n>(\n input: AddLiquidityAsyncInput<\n TAccountConfig,\n TAccountPool,\n TAccountPosition,\n TAccountProtocolFeePosition,\n TAccountOwner,\n TAccountAuthority,\n TAccountVault0,\n TAccountVault1,\n TAccountToken0Mint,\n TAccountToken1Mint,\n TAccountUser0,\n TAccountUser1,\n TAccountToken0Program,\n TAccountToken1Program,\n TAccountOracle\n >,\n config?: { programAddress?: TProgramAddress },\n): Promise<\n AddLiquidityInstruction<\n TProgramAddress,\n TAccountConfig,\n TAccountPool,\n TAccountPosition,\n TAccountProtocolFeePosition,\n TAccountOwner,\n TAccountAuthority,\n TAccountVault0,\n TAccountVault1,\n TAccountToken0Mint,\n TAccountToken1Mint,\n TAccountUser0,\n TAccountUser1,\n TAccountToken0Program,\n TAccountToken1Program,\n TAccountOracle\n >\n> {\n // Program address.\n const programAddress = config?.programAddress ?? CPMM_PROGRAM_ADDRESS;\n\n // Original accounts.\n const originalAccounts = {\n config: { value: input.config ?? null, isWritable: false },\n pool: { value: input.pool ?? null, isWritable: true },\n position: { value: input.position ?? null, isWritable: true },\n protocolFeePosition: {\n value: input.protocolFeePosition ?? null,\n isWritable: true,\n },\n owner: { value: input.owner ?? null, isWritable: false },\n authority: { value: input.authority ?? null, isWritable: false },\n vault0: { value: input.vault0 ?? null, isWritable: true },\n vault1: { value: input.vault1 ?? null, isWritable: true },\n token0Mint: { value: input.token0Mint ?? null, isWritable: false },\n token1Mint: { value: input.token1Mint ?? null, isWritable: false },\n user0: { value: input.user0 ?? null, isWritable: true },\n user1: { value: input.user1 ?? null, isWritable: true },\n token0Program: { value: input.token0Program ?? null, isWritable: false },\n token1Program: { value: input.token1Program ?? null, isWritable: false },\n oracle: { value: input.oracle ?? null, isWritable: true },\n };\n const accounts = originalAccounts as Record<\n keyof typeof originalAccounts,\n ResolvedInstructionAccount\n >;\n\n // Original args.\n const args = { ...input };\n\n // Resolve default values.\n if (!accounts.authority.value) {\n accounts.authority.value = await getProgramDerivedAddress({\n programAddress,\n seeds: [\n getBytesEncoder().encode(\n new Uint8Array([97, 117, 116, 104, 111, 114, 105, 116, 121]),\n ),\n getAddressEncoder().encode(\n getAddressFromResolvedInstructionAccount('pool', accounts.pool.value),\n ),\n ],\n });\n }\n\n const getAccountMeta = getAccountMetaFactory(programAddress, 'programId');\n return Object.freeze({\n accounts: [\n getAccountMeta('config', accounts.config),\n getAccountMeta('pool', accounts.pool),\n getAccountMeta('position', accounts.position),\n getAccountMeta('protocolFeePosition', accounts.protocolFeePosition),\n getAccountMeta('owner', accounts.owner),\n getAccountMeta('authority', accounts.authority),\n getAccountMeta('vault0', accounts.vault0),\n getAccountMeta('vault1', accounts.vault1),\n getAccountMeta('token0Mint', accounts.token0Mint),\n getAccountMeta('token1Mint', accounts.token1Mint),\n getAccountMeta('user0', accounts.user0),\n getAccountMeta('user1', accounts.user1),\n getAccountMeta('token0Program', accounts.token0Program),\n getAccountMeta('token1Program', accounts.token1Program),\n getAccountMeta('oracle', accounts.oracle),\n ],\n data: getAddLiquidityInstructionDataEncoder().encode(\n args as AddLiquidityInstructionDataArgs,\n ),\n programAddress,\n } as AddLiquidityInstruction<\n TProgramAddress,\n TAccountConfig,\n TAccountPool,\n TAccountPosition,\n TAccountProtocolFeePosition,\n TAccountOwner,\n TAccountAuthority,\n TAccountVault0,\n TAccountVault1,\n TAccountToken0Mint,\n TAccountToken1Mint,\n TAccountUser0,\n TAccountUser1,\n TAccountToken0Program,\n TAccountToken1Program,\n TAccountOracle\n >);\n}\n\nexport type AddLiquidityInput<\n TAccountConfig extends string = string,\n TAccountPool extends string = string,\n TAccountPosition extends string = string,\n TAccountProtocolFeePosition extends string = string,\n TAccountOwner extends string = string,\n TAccountAuthority extends string = string,\n TAccountVault0 extends string = string,\n TAccountVault1 extends string = string,\n TAccountToken0Mint extends string = string,\n TAccountToken1Mint extends string = string,\n TAccountUser0 extends string = string,\n TAccountUser1 extends string = string,\n TAccountToken0Program extends string = string,\n TAccountToken1Program extends string = string,\n TAccountOracle extends string = string,\n> = {\n config: Address<TAccountConfig>;\n pool: Address<TAccountPool>;\n position: Address<TAccountPosition>;\n protocolFeePosition: Address<TAccountProtocolFeePosition>;\n owner: TransactionSigner<TAccountOwner>;\n authority: Address<TAccountAuthority>;\n vault0: Address<TAccountVault0>;\n vault1: Address<TAccountVault1>;\n token0Mint: Address<TAccountToken0Mint>;\n token1Mint: Address<TAccountToken1Mint>;\n user0: Address<TAccountUser0>;\n user1: Address<TAccountUser1>;\n token0Program: Address<TAccountToken0Program>;\n token1Program: Address<TAccountToken1Program>;\n oracle?: Address<TAccountOracle>;\n amount0Max: AddLiquidityInstructionDataArgs['amount0Max'];\n amount1Max: AddLiquidityInstructionDataArgs['amount1Max'];\n minSharesOut: AddLiquidityInstructionDataArgs['minSharesOut'];\n updateOracle: AddLiquidityInstructionDataArgs['updateOracle'];\n};\n\nexport function getAddLiquidityInstruction<\n TAccountConfig extends string,\n TAccountPool extends string,\n TAccountPosition extends string,\n TAccountProtocolFeePosition extends string,\n TAccountOwner extends string,\n TAccountAuthority extends string,\n TAccountVault0 extends string,\n TAccountVault1 extends string,\n TAccountToken0Mint extends string,\n TAccountToken1Mint extends string,\n TAccountUser0 extends string,\n TAccountUser1 extends string,\n TAccountToken0Program extends string,\n TAccountToken1Program extends string,\n TAccountOracle extends string,\n TProgramAddress extends Address = typeof CPMM_PROGRAM_ADDRESS,\n>(\n input: AddLiquidityInput<\n TAccountConfig,\n TAccountPool,\n TAccountPosition,\n TAccountProtocolFeePosition,\n TAccountOwner,\n TAccountAuthority,\n TAccountVault0,\n TAccountVault1,\n TAccountToken0Mint,\n TAccountToken1Mint,\n TAccountUser0,\n TAccountUser1,\n TAccountToken0Program,\n TAccountToken1Program,\n TAccountOracle\n >,\n config?: { programAddress?: TProgramAddress },\n): AddLiquidityInstruction<\n TProgramAddress,\n TAccountConfig,\n TAccountPool,\n TAccountPosition,\n TAccountProtocolFeePosition,\n TAccountOwner,\n TAccountAuthority,\n TAccountVault0,\n TAccountVault1,\n TAccountToken0Mint,\n TAccountToken1Mint,\n TAccountUser0,\n TAccountUser1,\n TAccountToken0Program,\n TAccountToken1Program,\n TAccountOracle\n> {\n // Program address.\n const programAddress = config?.programAddress ?? CPMM_PROGRAM_ADDRESS;\n\n // Original accounts.\n const originalAccounts = {\n config: { value: input.config ?? null, isWritable: false },\n pool: { value: input.pool ?? null, isWritable: true },\n position: { value: input.position ?? null, isWritable: true },\n protocolFeePosition: {\n value: input.protocolFeePosition ?? null,\n isWritable: true,\n },\n owner: { value: input.owner ?? null, isWritable: false },\n authority: { value: input.authority ?? null, isWritable: false },\n vault0: { value: input.vault0 ?? null, isWritable: true },\n vault1: { value: input.vault1 ?? null, isWritable: true },\n token0Mint: { value: input.token0Mint ?? null, isWritable: false },\n token1Mint: { value: input.token1Mint ?? null, isWritable: false },\n user0: { value: input.user0 ?? null, isWritable: true },\n user1: { value: input.user1 ?? null, isWritable: true },\n token0Program: { value: input.token0Program ?? null, isWritable: false },\n token1Program: { value: input.token1Program ?? null, isWritable: false },\n oracle: { value: input.oracle ?? null, isWritable: true },\n };\n const accounts = originalAccounts as Record<\n keyof typeof originalAccounts,\n ResolvedInstructionAccount\n >;\n\n // Original args.\n const args = { ...input };\n\n const getAccountMeta = getAccountMetaFactory(programAddress, 'programId');\n return Object.freeze({\n accounts: [\n getAccountMeta('config', accounts.config),\n getAccountMeta('pool', accounts.pool),\n getAccountMeta('position', accounts.position),\n getAccountMeta('protocolFeePosition', accounts.protocolFeePosition),\n getAccountMeta('owner', accounts.owner),\n getAccountMeta('authority', accounts.authority),\n getAccountMeta('vault0', accounts.vault0),\n getAccountMeta('vault1', accounts.vault1),\n getAccountMeta('token0Mint', accounts.token0Mint),\n getAccountMeta('token1Mint', accounts.token1Mint),\n getAccountMeta('user0', accounts.user0),\n getAccountMeta('user1', accounts.user1),\n getAccountMeta('token0Program', accounts.token0Program),\n getAccountMeta('token1Program', accounts.token1Program),\n getAccountMeta('oracle', accounts.oracle),\n ],\n data: getAddLiquidityInstructionDataEncoder().encode(\n args as AddLiquidityInstructionDataArgs,\n ),\n programAddress,\n } as AddLiquidityInstruction<\n TProgramAddress,\n TAccountConfig,\n TAccountPool,\n TAccountPosition,\n TAccountProtocolFeePosition,\n TAccountOwner,\n TAccountAuthority,\n TAccountVault0,\n TAccountVault1,\n TAccountToken0Mint,\n TAccountToken1Mint,\n TAccountUser0,\n TAccountUser1,\n TAccountToken0Program,\n TAccountToken1Program,\n TAccountOracle\n >);\n}\n\nexport type ParsedAddLiquidityInstruction<\n TProgram extends string = typeof CPMM_PROGRAM_ADDRESS,\n TAccountMetas extends readonly AccountMeta[] = readonly AccountMeta[],\n> = {\n programAddress: Address<TProgram>;\n accounts: {\n config: TAccountMetas[0];\n pool: TAccountMetas[1];\n position: TAccountMetas[2];\n protocolFeePosition: TAccountMetas[3];\n owner: TAccountMetas[4];\n authority: TAccountMetas[5];\n vault0: TAccountMetas[6];\n vault1: TAccountMetas[7];\n token0Mint: TAccountMetas[8];\n token1Mint: TAccountMetas[9];\n user0: TAccountMetas[10];\n user1: TAccountMetas[11];\n token0Program: TAccountMetas[12];\n token1Program: TAccountMetas[13];\n oracle?: TAccountMetas[14] | undefined;\n };\n data: AddLiquidityInstructionData;\n};\n\nexport function parseAddLiquidityInstruction<\n TProgram extends string,\n TAccountMetas extends readonly AccountMeta[],\n>(\n instruction: Instruction<TProgram> &\n InstructionWithAccounts<TAccountMetas> &\n InstructionWithData<ReadonlyUint8Array>,\n): ParsedAddLiquidityInstruction<TProgram, TAccountMetas> {\n if (instruction.accounts.length < 15) {\n throw new SolanaError(\n SOLANA_ERROR__PROGRAM_CLIENTS__INSUFFICIENT_ACCOUNT_METAS,\n {\n actualAccountMetas: instruction.accounts.length,\n expectedAccountMetas: 15,\n },\n );\n }\n let accountIndex = 0;\n const getNextAccount = () => {\n const accountMeta = (instruction.accounts as TAccountMetas)[accountIndex]!;\n accountIndex += 1;\n return accountMeta;\n };\n const getNextOptionalAccount = () => {\n const accountMeta = getNextAccount();\n return accountMeta.address === CPMM_PROGRAM_ADDRESS\n ? undefined\n : accountMeta;\n };\n return {\n programAddress: instruction.programAddress,\n accounts: {\n config: getNextAccount(),\n pool: getNextAccount(),\n position: getNextAccount(),\n protocolFeePosition: getNextAccount(),\n owner: getNextAccount(),\n authority: getNextAccount(),\n vault0: getNextAccount(),\n vault1: getNextAccount(),\n token0Mint: getNextAccount(),\n token1Mint: getNextAccount(),\n user0: getNextAccount(),\n user1: getNextAccount(),\n token0Program: getNextAccount(),\n token1Program: getNextAccount(),\n oracle: getNextOptionalAccount(),\n },\n data: getAddLiquidityInstructionDataDecoder().decode(instruction.data),\n };\n}\n","/**\n * Pool fetching and utility functions for the CPMM SDK\n */\n\nimport type { Address } from '@solana/kit';\nimport type { Rpc, GetAccountInfoApi } from '@solana/kit';\nimport type { Base64EncodedBytes } from '@solana/kit';\nimport type { GetProgramAccountsRpc } from '../core/rpc.js';\nimport type { Pool } from '../core/types.js';\nimport { decodePool } from '../core/codecs.js';\nimport { CPMM_PROGRAM_ID, ACCOUNT_DISCRIMINATORS } from '../core/constants.js';\nimport { getPoolAddress, sortMints } from '../core/pda.js';\n\n// Browser-compatible base64 encoding/decoding utilities\nfunction bytesToBase64(bytes: Uint8Array): string {\n let binary = '';\n for (let i = 0; i < bytes.length; i++) {\n binary += String.fromCharCode(bytes[i]);\n }\n return btoa(binary);\n}\n\nfunction base64ToBytes(base64: string): Uint8Array {\n const binary = atob(base64);\n const bytes = new Uint8Array(binary.length);\n for (let i = 0; i < binary.length; i++) {\n bytes[i] = binary.charCodeAt(i);\n }\n return bytes;\n}\n\n/**\n * Configuration for fetching pools\n */\nexport interface FetchPoolsConfig {\n /** Program ID (defaults to CPMM program) */\n programId?: Address;\n /** Commitment level */\n commitment?: 'processed' | 'confirmed' | 'finalized';\n}\n\n/**\n * Pool with its address\n */\nexport interface PoolWithAddress {\n address: Address;\n account: Pool;\n}\n\ntype ProgramAccount = Readonly<{\n pubkey: Address;\n account: Readonly<{ data: [string, 'base64'] }>;\n}>;\n\n/**\n * Fetch and decode a single pool account\n *\n * @param rpc - Solana RPC client\n * @param address - Pool account address\n * @param config - Optional configuration\n * @returns Decoded pool data or null if not found\n *\n * @example\n * ```ts\n * const pool = await fetchPool(rpc, poolAddress);\n * if (pool) {\n * console.log(`Pool reserves: ${pool.reserve0} / ${pool.reserve1}`);\n * }\n * ```\n */\nexport async function fetchPool(\n rpc: Rpc<GetAccountInfoApi>,\n address: Address,\n config?: FetchPoolsConfig,\n): Promise<Pool | null> {\n const response = await rpc\n .getAccountInfo(address, {\n encoding: 'base64',\n commitment: config?.commitment,\n })\n .send();\n\n if (!response.value) {\n return null;\n }\n\n return decodePool(base64ToBytes(response.value.data[0]));\n}\n\n/**\n * Fetch all pool accounts for the CPMM program\n *\n * Uses getProgramAccounts with a discriminator filter for efficiency.\n *\n * @param rpc - Solana RPC client\n * @param config - Optional configuration\n * @returns Array of pools with their addresses\n *\n * @example\n * ```ts\n * const pools = await fetchAllPools(rpc);\n * console.log(`Found ${pools.length} pools`);\n * for (const { address, account } of pools) {\n * console.log(`Pool ${address}: ${account.token0Mint} / ${account.token1Mint}`);\n * }\n * ```\n */\nexport async function fetchAllPools(\n rpc: GetProgramAccountsRpc,\n config?: FetchPoolsConfig,\n): Promise<PoolWithAddress[]> {\n const programId = config?.programId ?? CPMM_PROGRAM_ID;\n\n // Filter by Pool discriminator (first 8 bytes)\n const discriminatorFilter = {\n memcmp: {\n offset: 0n,\n bytes: bytesToBase64(ACCOUNT_DISCRIMINATORS.Pool) as Base64EncodedBytes,\n encoding: 'base64' as const,\n },\n };\n\n const response = (await rpc\n .getProgramAccounts(programId, {\n encoding: 'base64',\n commitment: config?.commitment,\n filters: [discriminatorFilter],\n })\n .send()) as unknown;\n\n const accounts = (\n Array.isArray(response)\n ? response\n : (response as { value: ProgramAccount[] }).value\n ) as ProgramAccount[];\n\n const pools: PoolWithAddress[] = [];\n\n for (const account of accounts) {\n try {\n const pool = decodePool(base64ToBytes(account.account.data[0]));\n pools.push({\n address: account.pubkey,\n account: pool,\n });\n } catch {\n // Skip accounts that fail to decode (shouldn't happen with proper filter)\n console.warn(`Failed to decode pool account: ${account.pubkey}`);\n }\n }\n\n return pools;\n}\n\n/**\n * Find a pool by its token pair mints\n *\n * Derives the pool PDA from the mints (automatically sorted) and fetches it.\n *\n * @param rpc - Solana RPC client\n * @param mint0 - First token mint\n * @param mint1 - Second token mint\n * @param config - Optional configuration\n * @returns Pool data with address, or null if not found\n *\n * @example\n * ```ts\n * const result = await getPoolByMints(rpc, usdcMint, wsolMint);\n * if (result) {\n * console.log(`Found pool at ${result.address}`);\n * console.log(`Swap fee: ${result.account.swapFeeBps} bps`);\n * }\n * ```\n */\nexport async function getPoolByMints(\n rpc: Rpc<GetAccountInfoApi>,\n mint0: Address,\n mint1: Address,\n config?: FetchPoolsConfig,\n): Promise<PoolWithAddress | null> {\n const programId = config?.programId ?? CPMM_PROGRAM_ID;\n\n // Derive pool address (mints are sorted internally)\n const [poolAddress] = await getPoolAddress(mint0, mint1, programId);\n\n const pool = await fetchPool(rpc, poolAddress, config);\n\n if (!pool) {\n return null;\n }\n\n return {\n address: poolAddress,\n account: pool,\n };\n}\n\n/**\n * Get multiple pools by their addresses in a single batch request\n *\n * @param rpc - Solana RPC client\n * @param addresses - Array of pool addresses to fetch\n * @param config - Optional configuration\n * @returns Map of address to pool (missing pools are not included)\n *\n * @example\n * ```ts\n * const poolMap = await fetchPoolsBatch(rpc, [pool1, pool2, pool3]);\n * for (const [addr, pool] of poolMap) {\n * console.log(`Pool ${addr}: TVL = ${pool.reserve0 + pool.reserve1}`);\n * }\n * ```\n */\nexport async function fetchPoolsBatch(\n rpc: Rpc<GetAccountInfoApi>,\n addresses: Address[],\n config?: FetchPoolsConfig,\n): Promise<Map<Address, Pool>> {\n const pools = new Map<Address, Pool>();\n\n // Fetch all in parallel\n const results = await Promise.all(\n addresses.map((addr) => fetchPool(rpc, addr, config)),\n );\n\n for (let i = 0; i < addresses.length; i++) {\n const pool = results[i];\n if (pool) {\n pools.set(addresses[i], pool);\n }\n }\n\n return pools;\n}\n\n/**\n * Check if a pool exists for a token pair\n *\n * @param rpc - Solana RPC client\n * @param mint0 - First token mint\n * @param mint1 - Second token mint\n * @param config - Optional configuration\n * @returns true if pool exists, false otherwise\n */\nexport async function poolExists(\n rpc: Rpc<GetAccountInfoApi>,\n mint0: Address,\n mint1: Address,\n config?: FetchPoolsConfig,\n): Promise<boolean> {\n const result = await getPoolByMints(rpc, mint0, mint1, config);\n return result !== null;\n}\n\n/**\n * Get the pool address for a token pair without fetching\n *\n * @param mint0 - First token mint\n * @param mint1 - Second token mint\n * @param programId - Program ID (defaults to CPMM program)\n * @returns Pool address and sorted mints\n */\nexport async function getPoolAddressFromMints(\n mint0: Address,\n mint1: Address,\n programId: Address = CPMM_PROGRAM_ID,\n): Promise<{\n poolAddress: Address;\n token0: Address;\n token1: Address;\n}> {\n const [token0, token1] = sortMints(mint0, mint1);\n const [poolAddress] = await getPoolAddress(mint0, mint1, programId);\n\n return {\n poolAddress,\n token0,\n token1,\n };\n}\n\n/**\n * Filter pools by a specific token mint\n *\n * @param pools - Array of pools to filter\n * @param mint - Token mint to filter by\n * @returns Pools that contain the specified mint\n */\nexport function filterPoolsByMint(\n pools: PoolWithAddress[],\n mint: Address,\n): PoolWithAddress[] {\n return pools.filter(\n ({ account }) => account.token0Mint === mint || account.token1Mint === mint,\n );\n}\n\n/**\n * Sort pools by total reserves (proxy for TVL)\n *\n * @param pools - Array of pools to sort\n * @param descending - Sort descending (highest first) if true\n * @returns Sorted array (does not mutate input)\n */\nexport function sortPoolsByReserves(\n pools: PoolWithAddress[],\n descending = true,\n): PoolWithAddress[] {\n return [...pools].sort((a, b) => {\n const totalA = a.account.reserve0 + a.account.reserve1;\n const totalB = b.account.reserve0 + b.account.reserve1;\n const cmp = totalA < totalB ? -1 : totalA > totalB ? 1 : 0;\n return descending ? -cmp : cmp;\n });\n}\n","/**\n * Position fetching and utility functions for the CPMM SDK\n */\n\nimport type { Address } from '@solana/kit';\nimport type { Rpc, GetAccountInfoApi } from '@solana/kit';\nimport type { GetProgramAccountsRpc } from '../core/rpc.js';\nimport type { Base58EncodedBytes, Base64EncodedBytes } from '@solana/kit';\nimport type { Position, Pool } from '../core/types.js';\nimport { decodePosition } from '../core/codecs.js';\nimport { CPMM_PROGRAM_ID, ACCOUNT_DISCRIMINATORS } from '../core/constants.js';\nimport { getPositionAddress } from '../core/pda.js';\nimport { getPendingFees, ratioToNumber } from '../core/math.js';\n\n// Browser-compatible base64 encoding/decoding utilities\nfunction bytesToBase64(bytes: Uint8Array): string {\n let binary = '';\n for (let i = 0; i < bytes.length; i++) {\n binary += String.fromCharCode(bytes[i]);\n }\n return btoa(binary);\n}\n\nfunction base64ToBytes(base64: string): Uint8Array {\n const binary = atob(base64);\n const bytes = new Uint8Array(binary.length);\n for (let i = 0; i < binary.length; i++) {\n bytes[i] = binary.charCodeAt(i);\n }\n return bytes;\n}\n\n/**\n * Configuration for fetching positions\n */\nexport interface FetchPositionsConfig {\n /** Program ID (defaults to CPMM program) */\n programId?: Address;\n /** Commitment level */\n commitment?: 'processed' | 'confirmed' | 'finalized';\n}\n\n/**\n * Position with its address\n */\nexport interface PositionWithAddress {\n address: Address;\n account: Position;\n}\n\ntype ProgramAccount = Readonly<{\n pubkey: Address;\n account: Readonly<{ data: [string, 'base64'] }>;\n}>;\n\n/**\n * Position value in underlying tokens\n */\nexport interface PositionValue {\n /** Amount of token0 the position is worth */\n amount0: bigint;\n /** Amount of token1 the position is worth */\n amount1: bigint;\n /** Pending uncollected fees in token0 */\n pendingFees0: bigint;\n /** Pending uncollected fees in token1 */\n pendingFees1: bigint;\n /** Total value in token0 (amount0 + pending0) */\n totalValue0: bigint;\n /** Total value in token1 (amount1 + pending1) */\n totalValue1: bigint;\n /** Share of pool as a decimal (0-1) */\n poolShare: number;\n}\n\n/**\n * Fetch and decode a single position account\n *\n * @param rpc - Solana RPC client\n * @param address - Position account address\n * @param config - Optional configuration\n * @returns Decoded position data or null if not found\n *\n * @example\n * ```ts\n * const position = await fetchPosition(rpc, positionAddress);\n * if (position) {\n * console.log(`Position shares: ${position.shares}`);\n * }\n * ```\n */\nexport async function fetchPosition(\n rpc: Rpc<GetAccountInfoApi>,\n address: Address,\n config?: FetchPositionsConfig,\n): Promise<Position | null> {\n const response = await rpc\n .getAccountInfo(address, {\n encoding: 'base64',\n commitment: config?.commitment,\n })\n .send();\n\n if (!response.value) {\n return null;\n }\n\n return decodePosition(base64ToBytes(response.value.data[0]));\n}\n\n/**\n * Fetch all positions for a specific owner\n *\n * @param rpc - Solana RPC client\n * @param owner - Owner address\n * @param pool - Optional pool address to filter by\n * @param config - Optional configuration\n * @returns Array of positions with their addresses\n *\n * @example\n * ```ts\n * // Get all positions for a user\n * const allPositions = await fetchUserPositions(rpc, userWallet);\n *\n * // Get positions for a specific pool\n * const poolPositions = await fetchUserPositions(rpc, userWallet, poolAddress);\n * ```\n */\nexport async function fetchUserPositions(\n rpc: GetProgramAccountsRpc,\n owner: Address,\n pool?: Address,\n config?: FetchPositionsConfig,\n): Promise<PositionWithAddress[]> {\n const programId = config?.programId ?? CPMM_PROGRAM_ID;\n\n // Build filters\n const filters = [\n // Discriminator filter (first 8 bytes)\n {\n memcmp: {\n offset: 0n,\n bytes: bytesToBase64(\n ACCOUNT_DISCRIMINATORS.Position,\n ) as Base64EncodedBytes,\n encoding: 'base64' as const,\n },\n },\n // Owner filter (after 8-byte discriminator + 32-byte pool = offset 40)\n {\n memcmp: {\n offset: 40n,\n bytes: owner as unknown as Base58EncodedBytes,\n encoding: 'base58' as const,\n },\n },\n ];\n\n // Add pool filter if specified (after 8-byte discriminator = offset 8)\n if (pool) {\n filters.push({\n memcmp: {\n offset: 8n,\n bytes: pool as unknown as Base58EncodedBytes,\n encoding: 'base58' as const,\n },\n });\n }\n\n const response = (await rpc\n .getProgramAccounts(programId, {\n encoding: 'base64',\n commitment: config?.commitment,\n filters,\n })\n .send()) as unknown;\n\n const accounts = (\n Array.isArray(response)\n ? response\n : (response as { value: ProgramAccount[] }).value\n ) as ProgramAccount[];\n\n const positions: PositionWithAddress[] = [];\n\n for (const account of accounts) {\n try {\n const position = decodePosition(base64ToBytes(account.account.data[0]));\n positions.push({\n address: account.pubkey,\n account: position,\n });\n } catch {\n console.warn(`Failed to decode position account: ${account.pubkey}`);\n }\n }\n\n return positions;\n}\n\n/**\n * Fetch all positions for a specific pool\n *\n * @param rpc - Solana RPC client\n * @param pool - Pool address\n * @param config - Optional configuration\n * @returns Array of positions with their addresses\n */\nexport async function fetchPoolPositions(\n rpc: GetProgramAccountsRpc,\n pool: Address,\n config?: FetchPositionsConfig,\n): Promise<PositionWithAddress[]> {\n const programId = config?.programId ?? CPMM_PROGRAM_ID;\n\n const filters = [\n // Discriminator filter\n {\n memcmp: {\n offset: 0n,\n bytes: bytesToBase64(\n ACCOUNT_DISCRIMINATORS.Position,\n ) as Base64EncodedBytes,\n encoding: 'base64' as const,\n },\n },\n // Pool filter (after 8-byte discriminator = offset 8)\n {\n memcmp: {\n offset: 8n,\n bytes: pool as unknown as Base58EncodedBytes,\n encoding: 'base58' as const,\n },\n },\n ];\n\n const response = (await rpc\n .getProgramAccounts(programId, {\n encoding: 'base64',\n commitment: config?.commitment,\n filters,\n })\n .send()) as unknown;\n\n const accounts = (\n Array.isArray(response)\n ? response\n : (response as { value: ProgramAccount[] }).value\n ) as ProgramAccount[];\n\n const positions: PositionWithAddress[] = [];\n\n for (const account of accounts) {\n try {\n const position = decodePosition(base64ToBytes(account.account.data[0]));\n positions.push({\n address: account.pubkey,\n account: position,\n });\n } catch {\n console.warn(`Failed to decode position account: ${account.pubkey}`);\n }\n }\n\n return positions;\n}\n\n/**\n * Calculate the value of a position in underlying tokens\n *\n * @param pool - Pool data\n * @param position - Position data\n * @returns Position value breakdown\n *\n * @example\n * ```ts\n * const pool = await fetchPool(rpc, poolAddress);\n * const position = await fetchPosition(rpc, positionAddress);\n *\n * if (pool && position) {\n * const value = getPositionValue(pool, position);\n * console.log(`Position worth ${value.amount0} token0 + ${value.amount1} token1`);\n * console.log(`Pool share: ${(value.poolShare * 100).toFixed(2)}%`);\n * }\n * ```\n */\nexport function getPositionValue(\n pool: Pool,\n position: Position,\n): PositionValue {\n if (pool.totalShares === 0n) {\n return {\n amount0: 0n,\n amount1: 0n,\n pendingFees0: 0n,\n pendingFees1: 0n,\n totalValue0: 0n,\n totalValue1: 0n,\n poolShare: 0,\n };\n }\n\n // Calculate underlying token amounts\n const amount0 = (position.shares * pool.reserve0) / pool.totalShares;\n const amount1 = (position.shares * pool.reserve1) / pool.totalShares;\n\n // Calculate pending fees\n const { pending0, pending1 } = getPendingFees(pool, position);\n\n // Calculate pool share\n const poolShare = ratioToNumber(position.shares, pool.totalShares);\n\n return {\n amount0,\n amount1,\n pendingFees0: pending0,\n pendingFees1: pending1,\n totalValue0: amount0 + pending0,\n totalValue1: amount1 + pending1,\n poolShare,\n };\n}\n\n/**\n * Derive and fetch a position by its deterministic parameters\n *\n * @param rpc - Solana RPC client\n * @param pool - Pool address\n * @param owner - Position owner\n * @param positionId - Position ID\n * @param config - Optional configuration\n * @returns Position with address or null if not found\n */\nexport async function fetchPositionByParams(\n rpc: Rpc<GetAccountInfoApi>,\n pool: Address,\n owner: Address,\n positionId: bigint,\n config?: FetchPositionsConfig,\n): Promise<PositionWithAddress | null> {\n const programId = config?.programId ?? CPMM_PROGRAM_ID;\n const [address] = await getPositionAddress(\n pool,\n owner,\n positionId,\n programId,\n );\n\n const position = await fetchPosition(rpc, address, config);\n\n if (!position) {\n return null;\n }\n\n return {\n address,\n account: position,\n };\n}\n\n/**\n * Get the position address for given parameters without fetching\n *\n * @param pool - Pool address\n * @param owner - Position owner\n * @param positionId - Position ID\n * @param programId - Program ID (defaults to CPMM program)\n * @returns Position address\n */\nexport async function getPositionAddressFromParams(\n pool: Address,\n owner: Address,\n positionId: bigint,\n programId: Address = CPMM_PROGRAM_ID,\n): Promise<Address> {\n const [address] = await getPositionAddress(\n pool,\n owner,\n positionId,\n programId,\n );\n return address;\n}\n\n/**\n * Batch fetch multiple positions\n *\n * @param rpc - Solana RPC client\n * @param addresses - Array of position addresses to fetch\n * @param config - Optional configuration\n * @returns Map of address to position (missing positions are not included)\n */\nexport async function fetchPositionsBatch(\n rpc: Rpc<GetAccountInfoApi>,\n addresses: Address[],\n config?: FetchPositionsConfig,\n): Promise<Map<Address, Position>> {\n const positions = new Map<Address, Position>();\n\n const results = await Promise.all(\n addresses.map((addr) => fetchPosition(rpc, addr, config)),\n );\n\n for (let i = 0; i < addresses.length; i++) {\n const position = results[i];\n if (position) {\n positions.set(addresses[i], position);\n }\n }\n\n return positions;\n}\n\n/**\n * Filter positions with non-zero shares\n *\n * @param positions - Array of positions to filter\n * @returns Positions with shares > 0\n */\nexport function filterActivePositions(\n positions: PositionWithAddress[],\n): PositionWithAddress[] {\n return positions.filter(({ account }) => account.shares > 0n);\n}\n\n/**\n * Sort positions by share amount\n *\n * @param positions - Array of positions to sort\n * @param descending - Sort descending (largest first) if true\n * @returns Sorted array (does not mutate input)\n */\nexport function sortPositionsByShares(\n positions: PositionWithAddress[],\n descending = true,\n): PositionWithAddress[] {\n return [...positions].sort((a, b) => {\n const cmp =\n a.account.shares < b.account.shares\n ? -1\n : a.account.shares > b.account.shares\n ? 1\n : 0;\n return descending ? -cmp : cmp;\n });\n}\n","/**\n * Oracle fetching and TWAP utility functions for the CPMM SDK\n */\n\nimport type { Address } from '@solana/kit';\nimport type { Rpc, GetAccountInfoApi } from '@solana/kit';\nimport type { OracleState, TwapResult, Pool } from '../core/types.js';\nimport { decodeOracleState } from '../core/codecs.js';\nimport { CPMM_PROGRAM_ID } from '../core/constants.js';\nimport { getOracleAddress } from '../core/pda.js';\nimport { q64ToNumber } from '../core/math.js';\n\n// Browser-compatible base64 decoding\nfunction base64ToBytes(base64: string): Uint8Array {\n const binary = atob(base64);\n const bytes = new Uint8Array(binary.length);\n for (let i = 0; i < binary.length; i++) {\n bytes[i] = binary.charCodeAt(i);\n }\n return bytes;\n}\n\n/**\n * Configuration for fetching oracles\n */\nexport interface FetchOracleConfig {\n /** Program ID (defaults to CPMM program) */\n programId?: Address;\n /** Commitment level */\n commitment?: 'processed' | 'confirmed' | 'finalized';\n}\n\n/**\n * Oracle with its address\n */\nexport interface OracleWithAddress {\n address: Address;\n account: OracleState;\n}\n\n/**\n * Fetch and decode an oracle state account\n *\n * @param rpc - Solana RPC client\n * @param address - Oracle account address\n * @param config - Optional configuration\n * @returns Decoded oracle state or null if not found\n *\n * @example\n * ```ts\n * const oracle = await fetchOracle(rpc, oracleAddress);\n * if (oracle) {\n * console.log(`Oracle initialized: ${oracle.initialized}`);\n * console.log(`Last update: ${oracle.lastTimestamp}`);\n * }\n * ```\n */\nexport async function fetchOracle(\n rpc: Rpc<GetAccountInfoApi>,\n address: Address,\n config?: FetchOracleConfig,\n): Promise<OracleState | null> {\n const response = await rpc\n .getAccountInfo(address, {\n encoding: 'base64',\n commitment: config?.commitment,\n })\n .send();\n\n if (!response.value) {\n return null;\n }\n\n return decodeOracleState(base64ToBytes(response.value.data[0]));\n}\n\n/**\n * Get the oracle for a specific pool\n *\n * Derives the oracle PDA from the pool address and fetches it.\n *\n * @param rpc - Solana RPC client\n * @param pool - Pool address\n * @param config - Optional configuration\n * @returns Oracle data with address, or null if not found/initialized\n *\n * @example\n * ```ts\n * const result = await getOracleForPool(rpc, poolAddress);\n * if (result) {\n * console.log(`Oracle at ${result.address}`);\n * const twap = consultTwap(result.account, 300); // 5-minute TWAP\n * console.log(`TWAP price: ${twap.price0}`);\n * }\n * ```\n */\nexport async function getOracleForPool(\n rpc: Rpc<GetAccountInfoApi>,\n pool: Address,\n config?: FetchOracleConfig,\n): Promise<OracleWithAddress | null> {\n const programId = config?.programId ?? CPMM_PROGRAM_ID;\n const [oracleAddress] = await getOracleAddress(pool, programId);\n\n const oracle = await fetchOracle(rpc, oracleAddress, config);\n\n if (!oracle) {\n return null;\n }\n\n return {\n address: oracleAddress,\n account: oracle,\n };\n}\n\n/**\n * Get the oracle address for a pool without fetching\n *\n * @param pool - Pool address\n * @param programId - Program ID (defaults to CPMM program)\n * @returns Oracle address\n */\nexport async function getOracleAddressFromPool(\n pool: Address,\n programId: Address = CPMM_PROGRAM_ID,\n): Promise<Address> {\n const [address] = await getOracleAddress(pool, programId);\n return address;\n}\n\n/**\n * Calculate TWAP price from oracle observations\n *\n * Finds the appropriate observations in the circular buffer and computes\n * the time-weighted average price over the specified window.\n *\n * @param oracle - Oracle state data\n * @param windowSeconds - TWAP window in seconds\n * @param currentTimestamp - Optional override for current time (seconds)\n * @returns TWAP prices for both directions, or null if insufficient data\n *\n * @example\n * ```ts\n * const oracle = await fetchOracle(rpc, oracleAddress);\n * if (oracle && oracle.initialized) {\n * // Get 5-minute TWAP\n * const twap = consultTwap(oracle, 300);\n * if (twap) {\n * console.log(`Token0 price: ${twap.price0} token1 per token0`);\n * console.log(`Token1 price: ${twap.price1} token0 per token1`);\n * }\n * }\n * ```\n */\nexport function consultTwap(\n oracle: OracleState,\n windowSeconds: number,\n currentTimestamp?: number,\n): TwapResult | null {\n if (!oracle.initialized || oracle.lastTimestamp === 0) {\n return null;\n }\n\n const nowTs = Math.max(0, Math.floor(currentTimestamp ?? Date.now() / 1000));\n const dtSinceLast = Math.max(0, nowTs - oracle.lastTimestamp);\n\n const cum0Now =\n oracle.price0Cumulative + oracle.truncPrice0Q64 * BigInt(dtSinceLast);\n const cum1Now =\n oracle.price1Cumulative + oracle.truncPrice1Q64 * BigInt(dtSinceLast);\n\n if (windowSeconds === 0) {\n return {\n price0Q64: oracle.truncPrice0Q64,\n price1Q64: oracle.truncPrice1Q64,\n price0: q64ToNumber(oracle.truncPrice0Q64),\n price1: q64ToNumber(oracle.truncPrice1Q64),\n };\n }\n\n const targetTs = Math.max(0, nowTs - windowSeconds);\n const sample = selectSample(oracle, targetTs);\n if (!sample) {\n return null;\n }\n\n const dt = Math.max(0, nowTs - sample.timestamp);\n if (dt === 0) {\n return null;\n }\n\n const price0Q64 = (cum0Now - sample.price0Cumulative) / BigInt(dt);\n const price1Q64 = (cum1Now - sample.price1Cumulative) / BigInt(dt);\n\n return {\n price0Q64,\n price1Q64,\n price0: q64ToNumber(price0Q64),\n price1: q64ToNumber(price1Q64),\n };\n}\n\nfunction selectSample(\n oracle: OracleState,\n targetTimestamp: number,\n): OracleState['observations'][number] | null {\n let best: OracleState['observations'][number] | null = null;\n const base = {\n timestamp: oracle.lastTimestamp,\n price0Cumulative: oracle.price0Cumulative,\n price1Cumulative: oracle.price1Cumulative,\n };\n\n if (base.timestamp !== 0 && base.timestamp <= targetTimestamp) {\n best = base;\n }\n\n for (const obs of oracle.observations) {\n if (obs.timestamp === 0) {\n continue;\n }\n if (obs.timestamp <= targetTimestamp) {\n if (!best || obs.timestamp > best.timestamp) {\n best = obs;\n }\n }\n }\n\n if (best) {\n return best;\n }\n\n let oldest: OracleState['observations'][number] | null =\n base.timestamp !== 0 ? base : null;\n for (const obs of oracle.observations) {\n if (obs.timestamp === 0) {\n continue;\n }\n if (!oldest || obs.timestamp < oldest.timestamp) {\n oldest = obs;\n }\n }\n\n return oldest;\n}\n\n/**\n * Get the current spot prices from oracle\n *\n * Uses the truncated (manipulation-resistant) prices stored in the oracle.\n *\n * @param oracle - Oracle state data\n * @returns Current truncated prices\n */\nexport function getOracleSpotPrices(oracle: OracleState): {\n price0Q64: bigint;\n price1Q64: bigint;\n price0: number;\n price1: number;\n} {\n return {\n price0Q64: oracle.truncPrice0Q64,\n price1Q64: oracle.truncPrice1Q64,\n price0: q64ToNumber(oracle.truncPrice0Q64),\n price1: q64ToNumber(oracle.truncPrice1Q64),\n };\n}\n\n/**\n * Get the price deviation metrics from oracle\n *\n * Deviation indicates how much the spot price has moved from the truncated price.\n * High deviation may indicate price manipulation or rapid market movement.\n *\n * @param oracle - Oracle state data\n * @returns Deviation values for both price directions\n */\nexport function getOracleDeviation(oracle: OracleState): {\n deviation0Q64: bigint;\n deviation1Q64: bigint;\n deviation0: number;\n deviation1: number;\n} {\n return {\n deviation0Q64: oracle.deviation0Q64,\n deviation1Q64: oracle.deviation1Q64,\n deviation0: q64ToNumber(oracle.deviation0Q64),\n deviation1: q64ToNumber(oracle.deviation1Q64),\n };\n}\n\n/**\n * Calculate the age of the oracle (time since last update)\n *\n * @param oracle - Oracle state data\n * @param currentTimestamp - Current timestamp (defaults to Date.now() / 1000)\n * @returns Age in seconds\n */\nexport function getOracleAge(\n oracle: OracleState,\n currentTimestamp?: number,\n): number {\n const now = currentTimestamp ?? Math.floor(Date.now() / 1000);\n return now - oracle.lastTimestamp;\n}\n\n/**\n * Check if oracle is stale (hasn't been updated recently)\n *\n * @param oracle - Oracle state data\n * @param maxAgeSeconds - Maximum acceptable age in seconds\n * @param currentTimestamp - Current timestamp (defaults to Date.now() / 1000)\n * @returns true if oracle is stale\n */\nexport function isOracleStale(\n oracle: OracleState,\n maxAgeSeconds: number,\n currentTimestamp?: number,\n): boolean {\n return getOracleAge(oracle, currentTimestamp) > maxAgeSeconds;\n}\n\n/**\n * Get observation buffer statistics\n *\n * @param oracle - Oracle state data\n * @returns Information about the observation buffer\n */\nexport function getOracleBufferStats(oracle: OracleState): {\n /** Total buffer capacity */\n capacity: number;\n /** Number of observations with data */\n filledCount: number;\n /** Current write index */\n currentIndex: number;\n /** Oldest observation timestamp (0 if not filled) */\n oldestTimestamp: number;\n /** Newest observation timestamp */\n newestTimestamp: number;\n /** Time span covered by observations */\n timeSpanSeconds: number;\n} {\n const observations = oracle.observations;\n const capacity = observations.length;\n const currentIndex = oracle.observationIndex;\n\n let filledCount = 0;\n let oldestTimestamp = 0;\n let newestTimestamp = 0;\n\n for (let i = 0; i < capacity; i++) {\n const obs = observations[i];\n if (obs.timestamp > 0) {\n filledCount++;\n if (oldestTimestamp === 0 || obs.timestamp < oldestTimestamp) {\n oldestTimestamp = obs.timestamp;\n }\n if (obs.timestamp > newestTimestamp) {\n newestTimestamp = obs.timestamp;\n }\n }\n }\n\n return {\n capacity,\n filledCount,\n currentIndex,\n oldestTimestamp,\n newestTimestamp,\n timeSpanSeconds:\n newestTimestamp > oldestTimestamp ? newestTimestamp - oldestTimestamp : 0,\n };\n}\n\n/**\n * Batch fetch oracles for multiple pools\n *\n * @param rpc - Solana RPC client\n * @param pools - Array of pool addresses\n * @param config - Optional configuration\n * @returns Map of pool address to oracle (missing oracles not included)\n */\nexport async function fetchOraclesBatch(\n rpc: Rpc<GetAccountInfoApi>,\n pools: Address[],\n config?: FetchOracleConfig,\n): Promise<Map<Address, OracleWithAddress>> {\n const programId = config?.programId ?? CPMM_PROGRAM_ID;\n const oracles = new Map<Address, OracleWithAddress>();\n\n // Derive all oracle addresses\n const oracleAddresses = await Promise.all(\n pools.map((pool) => getOracleAddress(pool, programId)),\n );\n\n // Fetch all oracles in parallel\n const results = await Promise.all(\n oracleAddresses.map(([addr]) => fetchOracle(rpc, addr, config)),\n );\n\n for (let i = 0; i < pools.length; i++) {\n const oracle = results[i];\n if (oracle) {\n oracles.set(pools[i], {\n address: oracleAddresses[i][0],\n account: oracle,\n });\n }\n }\n\n return oracles;\n}\n\n/**\n * Calculate price from pool reserves and compare with oracle\n *\n * Useful for detecting price discrepancies or manipulation.\n *\n * @param pool - Pool data\n * @param oracle - Oracle data\n * @returns Comparison metrics\n */\nexport function comparePoolAndOraclePrices(\n pool: Pool,\n oracle: OracleState,\n): {\n /** Spot price from pool reserves (token1 per token0) */\n poolPrice0: number;\n /** Truncated price from oracle (token1 per token0) */\n oraclePrice0: number;\n /** Difference as percentage (positive = pool > oracle) */\n divergencePct: number;\n} {\n const poolPrice0 =\n pool.reserve0 > 0n ? Number(pool.reserve1) / Number(pool.reserve0) : 0;\n\n const oraclePrice0 = q64ToNumber(oracle.truncPrice0Q64);\n\n const divergencePct =\n oraclePrice0 > 0 ? ((poolPrice0 - oraclePrice0) / oraclePrice0) * 100 : 0;\n\n return {\n poolPrice0,\n oraclePrice0,\n divergencePct,\n };\n}\n"]}