lemura 1.0.0

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 (62) hide show
  1. package/CHANGELOG.md +34 -0
  2. package/LICENSE +21 -0
  3. package/README.md +143 -0
  4. package/dist/adapters/index.d.mts +45 -0
  5. package/dist/adapters/index.d.ts +45 -0
  6. package/dist/adapters/index.js +371 -0
  7. package/dist/adapters/index.js.map +1 -0
  8. package/dist/adapters/index.mjs +369 -0
  9. package/dist/adapters/index.mjs.map +1 -0
  10. package/dist/adapters-BSkhv5ac.d.ts +208 -0
  11. package/dist/adapters-BnG0LEYD.d.mts +208 -0
  12. package/dist/context/index.d.mts +143 -0
  13. package/dist/context/index.d.ts +143 -0
  14. package/dist/context/index.js +321 -0
  15. package/dist/context/index.js.map +1 -0
  16. package/dist/context/index.mjs +314 -0
  17. package/dist/context/index.mjs.map +1 -0
  18. package/dist/index.d.mts +91 -0
  19. package/dist/index.d.ts +91 -0
  20. package/dist/index.js +1375 -0
  21. package/dist/index.js.map +1 -0
  22. package/dist/index.mjs +1348 -0
  23. package/dist/index.mjs.map +1 -0
  24. package/dist/logger/index.d.mts +19 -0
  25. package/dist/logger/index.d.ts +19 -0
  26. package/dist/logger/index.js +67 -0
  27. package/dist/logger/index.js.map +1 -0
  28. package/dist/logger/index.mjs +65 -0
  29. package/dist/logger/index.mjs.map +1 -0
  30. package/dist/logger-DxvKliuk.d.mts +37 -0
  31. package/dist/logger-DxvKliuk.d.ts +37 -0
  32. package/dist/rag/index.d.mts +10 -0
  33. package/dist/rag/index.d.ts +10 -0
  34. package/dist/rag/index.js +43 -0
  35. package/dist/rag/index.js.map +1 -0
  36. package/dist/rag/index.mjs +41 -0
  37. package/dist/rag/index.mjs.map +1 -0
  38. package/dist/rag-La_Bo-J8.d.mts +45 -0
  39. package/dist/rag-La_Bo-J8.d.ts +45 -0
  40. package/dist/skills/index.d.mts +15 -0
  41. package/dist/skills/index.d.ts +15 -0
  42. package/dist/skills/index.js +40 -0
  43. package/dist/skills/index.js.map +1 -0
  44. package/dist/skills/index.mjs +38 -0
  45. package/dist/skills/index.mjs.map +1 -0
  46. package/dist/skills-wc8S-OvC.d.mts +14 -0
  47. package/dist/skills-wc8S-OvC.d.ts +14 -0
  48. package/dist/storage-BGu4Loao.d.ts +121 -0
  49. package/dist/storage-DMcliVVj.d.mts +121 -0
  50. package/dist/tools/index.d.mts +17 -0
  51. package/dist/tools/index.d.ts +17 -0
  52. package/dist/tools/index.js +72 -0
  53. package/dist/tools/index.js.map +1 -0
  54. package/dist/tools/index.mjs +70 -0
  55. package/dist/tools/index.mjs.map +1 -0
  56. package/dist/types/index.d.mts +118 -0
  57. package/dist/types/index.d.ts +118 -0
  58. package/dist/types/index.js +84 -0
  59. package/dist/types/index.js.map +1 -0
  60. package/dist/types/index.mjs +74 -0
  61. package/dist/types/index.mjs.map +1 -0
  62. package/package.json +79 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/types/errors.ts","../src/types/logger.ts","../src/adapters/OpenAICompatibleAdapter.ts","../src/context/ContextManager.ts","../src/context/SandwichCompressionStrategy.ts","../src/context/HistoryCompressionStrategy.ts","../src/context/ShortTermMemoryRegistry.ts","../src/context/InMemoryStorageAdapter.ts","../src/tools/ToolRegistry.ts","../src/skills/SkillInjector.ts","../src/rag/InMemoryRAGAdapter.ts","../src/logger/DefaultLogger.ts","../src/tools/builtin/short_term_memory.ts","../src/agent/SessionManager.ts","../src/agent/execution/ToolResponseProcessor.ts","../src/agent/execution/GoalInjector.ts","../src/agent/execution/ContinuationPlanner.ts","../src/agent/execution/StepCounter.ts","../src/agent/execution/FinalResponseFormatter.ts"],"names":["LogLevel","randomUUID"],"mappings":";;;;;AAMO,IAAM,WAAA,GAAN,cAA0B,KAAA,CAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOnC,YACI,OAAA,EACgB,IAAA,EACA,OAAA,EACA,KAAA,GAAkB,EAAC,EACrC;AACE,IAAA,KAAA,CAAM,OAAO,CAAA;AAJG,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AACA,IAAA,IAAA,CAAA,OAAA,GAAA,OAAA;AACA,IAAA,IAAA,CAAA,KAAA,GAAA,KAAA;AAGhB,IAAA,IAAA,CAAK,IAAA,GAAO,aAAA;AACZ,IAAA,MAAA,CAAO,cAAA,CAAe,IAAA,EAAM,GAAA,CAAA,MAAA,CAAW,SAAS,CAAA;AAAA,EACpD;AACJ;AAGO,IAAM,0BAAA,GAAN,cAAyC,WAAA,CAAY;AAAA,EACxD,YAAY,OAAA,EAAiB;AACzB,IAAA,KAAA,CAAM,SAAS,kBAAkB,CAAA;AACjC,IAAA,IAAA,CAAK,IAAA,GAAO,4BAAA;AAAA,EAChB;AACJ;AAGO,IAAM,uBAAA,GAAN,cAAsC,WAAA,CAAY;AAAA,EACrD,YAAY,OAAA,EAAiB;AACzB,IAAA,KAAA,CAAM,SAAS,gBAAgB,CAAA;AAC/B,IAAA,IAAA,CAAK,IAAA,GAAO,yBAAA;AAAA,EAChB;AACJ;AAGO,IAAM,kBAAA,GAAN,cAAiC,WAAA,CAAY;AAAA,EAChD,WAAA,CACI,SACA,IAAA,GAAO,eAAA,EACA,OACP,OAAA,EACA,KAAA,GAAkB,EAAC,EACrB;AACE,IAAA,KAAA,CAAM,OAAA,EAAS,IAAA,EAAM,OAAA,EAAS,KAAK,CAAA;AAJ5B,IAAA,IAAA,CAAA,KAAA,GAAA,KAAA;AAKP,IAAA,IAAA,CAAK,IAAA,GAAO,oBAAA;AAAA,EAChB;AACJ;AAGO,IAAM,yBAAA,GAAN,cAAwC,WAAA,CAAY;AAAA,EACvD,YAAY,OAAA,EAAiB;AACzB,IAAA,KAAA,CAAM,SAAS,wBAAwB,CAAA;AACvC,IAAA,IAAA,CAAK,IAAA,GAAO,2BAAA;AAAA,EAChB;AACJ;AAGO,IAAM,wBAAA,GAAN,cAAuC,WAAA,CAAY;AAAA,EACtD,YAAY,OAAA,EAAiB;AACzB,IAAA,KAAA,CAAM,SAAS,yBAAyB,CAAA;AACxC,IAAA,IAAA,CAAK,IAAA,GAAO,0BAAA;AAAA,EAChB;AACJ;AAGO,IAAM,yBAAA,GAAN,cAAwC,WAAA,CAAY;AAAA,EACvD,YAAY,OAAA,EAAiB;AACzB,IAAA,KAAA,CAAM,SAAS,wBAAwB,CAAA;AACvC,IAAA,IAAA,CAAK,IAAA,GAAO,2BAAA;AAAA,EAChB;AACJ;AAGO,IAAM,sBAAA,GAAN,cAAqC,WAAA,CAAY;AAAA,EACpD,YAAY,OAAA,EAAiB;AACzB,IAAA,KAAA,CAAM,SAAS,cAAc,CAAA;AAC7B,IAAA,IAAA,CAAK,IAAA,GAAO,wBAAA;AAAA,EAChB;AACJ;;;ACpFO,IAAK,QAAA,qBAAAA,SAAAA,KAAL;AACH,EAAAA,SAAAA,CAAAA,SAAAA,CAAA,WAAQ,CAAA,CAAA,GAAR,OAAA;AACA,EAAAA,SAAAA,CAAAA,SAAAA,CAAA,UAAO,CAAA,CAAA,GAAP,MAAA;AACA,EAAAA,SAAAA,CAAAA,SAAAA,CAAA,UAAO,CAAA,CAAA,GAAP,MAAA;AACA,EAAAA,SAAAA,CAAAA,SAAAA,CAAA,WAAQ,CAAA,CAAA,GAAR,OAAA;AACA,EAAAA,SAAAA,CAAAA,SAAAA,CAAA,WAAQ,CAAA,CAAA,GAAR,OAAA;AALQ,EAAA,OAAAA,SAAAA;AAAA,CAAA,EAAA,QAAA,IAAA,EAAA;;;ACiCL,IAAM,0BAAN,MAA0D;AAAA,EACpD,IAAA,GAAO,mBAAA;AAAA,EACP,OAAA,GAAU,OAAA;AAAA,EAEX,OAAA;AAAA,EACA,MAAA;AAAA,EACA,YAAA;AAAA,EACA,cAAA;AAAA,EACA,SAAA;AAAA,EACA,WAAA;AAAA,EAER,WAAA,CAAY,MAAA,GAAwC,EAAC,EAAG;AACpD,IAAA,IAAA,CAAK,OAAA,GAAA,CACD,MAAA,CAAO,OAAA,IACP,OAAA,CAAQ,GAAA,CAAI,eAAA,IACZ,OAAA,CAAQ,GAAA,CAAI,eAAA,IACZ,2BAAA,EACF,OAAA,CAAQ,KAAA,EAAO,EAAE,CAAA;AAEnB,IAAA,IAAA,CAAK,MAAA,GAAS,OAAO,MAAA,IAAU,OAAA,CAAQ,IAAI,cAAA,IAAkB,OAAA,CAAQ,IAAI,cAAA,IAAkB,EAAA;AAC3F,IAAA,IAAA,CAAK,YAAA,GAAe,OAAO,YAAA,IAAgB,OAAA,CAAQ,IAAI,YAAA,IAAgB,OAAA,CAAQ,IAAI,YAAA,IAAgB,eAAA;AAEnG,IAAA,IAAA,CAAK,cAAA,GAAiB,MAAA,CAAO,cAAA,IAAkB,EAAC;AAChD,IAAA,IAAA,CAAK,SAAA,GAAY,OAAO,OAAA,IAAW,GAAA;AACnC,IAAA,IAAA,CAAK,cAAc,MAAA,CAAO,KAAA,IAAS,EAAE,UAAA,EAAY,CAAA,EAAG,aAAa,GAAA,EAAK;AAAA,EAC1E;AAAA,EAEA,MAAc,cAAA,CAAe,GAAA,EAAa,IAAA,EAAsC;AAC5E,IAAA,IAAI,QAAA,GAAW,CAAA;AACf,IAAA,OAAO,QAAA,IAAY,IAAA,CAAK,WAAA,CAAY,UAAA,EAAY;AAC5C,MAAA,IAAI;AACA,QAAA,MAAM,UAAA,GAAa,IAAI,eAAA,EAAgB;AACvC,QAAA,MAAM,YAAY,UAAA,CAAW,MAAM,WAAW,KAAA,EAAM,EAAG,KAAK,SAAS,CAAA;AAErE,QAAA,MAAM,OAAA,GAAkC;AAAA,UACpC,eAAA,EAAiB,CAAA,OAAA,EAAU,IAAA,CAAK,MAAM,CAAA,CAAA;AAAA,UACtC,GAAG,IAAA,CAAK;AAAA,SACZ;AAEA,QAAA,IAAI,KAAK,OAAA,EAAS;AACd,UAAA,MAAA,CAAO,MAAA,CAAO,OAAA,EAAS,IAAA,CAAK,OAAO,CAAA;AAAA,QACvC;AAGA,QAAA,IAAI,OAAA,CAAQ,cAAc,CAAA,KAAM,OAAA,EAAS;AACrC,UAAA,OAAO,QAAQ,cAAc,CAAA;AAAA,QACjC,CAAA,MAAA,IAAW,CAAC,OAAA,CAAQ,cAAc,CAAA,EAAG;AACjC,UAAA,OAAA,CAAQ,cAAc,CAAA,GAAI,kBAAA;AAAA,QAC9B;AAEA,QAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,GAAA,EAAK;AAAA,UAC9B,GAAG,IAAA;AAAA,UACH,QAAQ,UAAA,CAAW,MAAA;AAAA,UACnB;AAAA,SACH,CAAA;AAED,QAAA,YAAA,CAAa,SAAS,CAAA;AAEtB,QAAA,IAAI,QAAA,CAAS,IAAI,OAAO,QAAA;AAGxB,QAAA,IAAA,CAAK,QAAA,CAAS,WAAW,GAAA,IAAO,QAAA,CAAS,WAAW,GAAA,KAAQ,QAAA,GAAW,IAAA,CAAK,WAAA,CAAY,UAAA,EAAY;AAChG,UAAA,QAAA,EAAA;AACA,UAAA,MAAM,KAAA,GAAQ,KAAK,WAAA,CAAY,WAAA,GAAc,KAAK,GAAA,CAAI,CAAA,EAAG,WAAW,CAAC,CAAA;AACrE,UAAA,MAAM,IAAI,OAAA,CAAQ,CAAA,OAAA,KAAW,UAAA,CAAW,OAAA,EAAS,KAAK,CAAC,CAAA;AACvD,UAAA;AAAA,QACJ;AAEA,QAAA,MAAM,YAAY,MAAM,QAAA,CAAS,MAAK,CAAE,KAAA,CAAM,MAAM,EAAE,CAAA;AACtD,QAAA,IAAI,OAAA,GAAU,uDAAA;AACd,QAAA,IAAI,KAAA,GAAQ,CAAC,6DAA6D,CAAA;AAE1E,QAAA,IAAI,QAAA,CAAS,WAAW,GAAA,EAAK;AACzB,UAAA,OAAA,GAAU,2DAAA;AACV,UAAA,KAAA,GAAQ;AAAA,YACJ,sFAAA;AAAA,YACA;AAAA,WACJ;AAAA,QACJ,CAAA,MAAA,IAAW,QAAA,CAAS,MAAA,KAAW,GAAA,EAAK;AAChC,UAAA,OAAA,GAAU,gDAAA;AACV,UAAA,KAAA,GAAQ;AAAA,YACJ,uEAAA;AAAA,YACA,oEAAA;AAAA,YACA;AAAA,WACJ;AAAA,QACJ,CAAA,MAAA,IAAW,QAAA,CAAS,MAAA,KAAW,GAAA,EAAK;AAChC,UAAA,OAAA,GAAU,sBAAA;AACV,UAAA,KAAA,GAAQ;AAAA,YACJ,qCAAA;AAAA,YACA;AAAA,WACJ;AAAA,QACJ;AAEA,QAAA,MAAM,IAAI,kBAAA;AAAA,UACN,CAAA,KAAA,EAAQ,QAAA,CAAS,MAAM,CAAA,EAAA,EAAK,SAAS,CAAA,CAAA;AAAA,UACrC,YAAA;AAAA,UACA,EAAE,MAAA,EAAQ,QAAA,CAAS,MAAA,EAAQ,MAAM,SAAA,EAAU;AAAA,UAC3C,OAAA;AAAA,UACA;AAAA,SACJ;AAAA,MACJ,SAAS,GAAA,EAAK;AACV,QAAA,IAAI,GAAA,YAAe,oBAAoB,MAAM,GAAA;AAE7C,QAAA,IAAI,QAAA,GAAW,IAAA,CAAK,WAAA,CAAY,UAAA,EAAY;AACxC,UAAA,QAAA,EAAA;AACA,UAAA,MAAM,KAAA,GAAQ,KAAK,WAAA,CAAY,WAAA,GAAc,KAAK,GAAA,CAAI,CAAA,EAAG,WAAW,CAAC,CAAA;AACrE,UAAA,MAAM,IAAI,OAAA,CAAQ,CAAA,OAAA,KAAW,UAAA,CAAW,OAAA,EAAS,KAAK,CAAC,CAAA;AACvD,UAAA;AAAA,QACJ;AAEA,QAAA,MAAM,IAAI,kBAAA;AAAA,UACN,2BAA2B,GAAA,YAAe,KAAA,GAAQ,IAAI,OAAA,GAAU,MAAA,CAAO,GAAG,CAAC,CAAA,CAAA;AAAA,UAC3E,eAAA;AAAA,UACA,GAAA;AAAA,UACA,4DAAA;AAAA,UACA;AAAA,YACI,iCAAA;AAAA,YACA,yDAAA;AAAA,YACA;AAAA;AACJ,SACJ;AAAA,MACJ;AAAA,IACJ;AACA,IAAA,MAAM,IAAI,kBAAA;AAAA,MACN,sBAAA;AAAA,MACA,aAAA;AAAA,MACA,MAAA;AAAA,MACA,mDAAA;AAAA,MACA,CAAC,kEAAkE;AAAA,KACvE;AAAA,EACJ;AAAA,EAEQ,gBAAgB,MAAA,EAA2D;AAC/E,IAAA,IAAI,CAAC,QAAQ,OAAO,MAAA;AACpB,IAAA,MAAM,CAAA,GAAI,OAAO,WAAA,EAAY;AAC7B,IAAA,IAAI,CAAA,KAAM,YAAA,IAAgB,CAAA,KAAM,WAAA,EAAa,OAAO,WAAA;AACpD,IAAA,IAAI,CAAA,KAAM,QAAA,IAAY,CAAA,KAAM,YAAA,EAAc,OAAO,YAAA;AACjD,IAAA,IAAI,CAAA,KAAM,gBAAA,IAAoB,CAAA,KAAM,OAAA,EAAS,OAAO,OAAA;AACpD,IAAA,OAAO,MAAA;AAAA,EACX;AAAA,EAEQ,aAAa,OAAA,EAAqC;AACtD,IAAA,MAAM,OAAA,GAAmC;AAAA,MACrC,KAAA,EAAO,OAAA,CAAQ,KAAA,IAAS,IAAA,CAAK,YAAA;AAAA,MAC7B,UAAU,OAAA,CAAQ;AAAA,KACtB;AACA,IAAA,IAAI,OAAA,CAAQ,SAAA,KAAc,MAAA,EAAW,OAAA,CAAQ,aAAa,OAAA,CAAQ,SAAA;AAClE,IAAA,IAAI,OAAA,CAAQ,WAAA,KAAgB,MAAA,EAAW,OAAA,CAAQ,cAAc,OAAA,CAAQ,WAAA;AACrE,IAAA,IAAI,OAAA,CAAQ,aAAA,EAAe,MAAA,EAAQ,OAAA,CAAQ,OAAO,OAAA,CAAQ,aAAA;AAC1D,IAAA,IAAI,OAAA,CAAQ,MAAA,EAAQ,OAAA,CAAQ,MAAA,GAAS,IAAA;AAErC,IAAA,IAAI,OAAA,CAAQ,KAAA,IAAS,OAAA,CAAQ,KAAA,CAAM,SAAS,CAAA,EAAG;AAC3C,MAAA,OAAA,CAAQ,KAAA,GAAQ,OAAA,CAAQ,KAAA,CAAM,GAAA,CAAI,CAAA,CAAA,MAAM;AAAA,QACpC,IAAA,EAAM,UAAA;AAAA,QACN,QAAA,EAAU;AAAA,UACN,MAAM,CAAA,CAAE,IAAA;AAAA,UACR,aAAa,CAAA,CAAE,WAAA;AAAA,UACf,YAAY,CAAA,CAAE;AAAA;AAClB,OACJ,CAAE,CAAA;AAAA,IACN;AAEA,IAAA,OAAO,OAAA;AAAA,EACX;AAAA,EAEA,MAAM,SAAS,OAAA,EAAyD;AACpE,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,YAAA,CAAa,OAAO,CAAA;AAEzC,IAAA,MAAM,WAAW,MAAM,IAAA,CAAK,eAAe,CAAA,EAAG,IAAA,CAAK,OAAO,CAAA,iBAAA,CAAA,EAAqB;AAAA,MAC3E,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,OAAO;AAAA,KAC/B,CAAA;AAED,IAAA,MAAM,IAAA,GAAO,MAAM,QAAA,CAAS,IAAA,EAAK;AACjC,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,OAAA,GAAU,CAAC,CAAA;AAC/B,IAAA,IAAI,CAAC,MAAA,EAAQ;AACT,MAAA,MAAM,IAAI,kBAAA,CAAmB,0CAAA,EAA4C,kBAAA,EAAoB,IAAI,CAAA;AAAA,IACrG;AAEA,IAAA,MAAM,UAAU,MAAA,CAAO,OAAA;AACvB,IAAA,IAAI,SAAA;AAEJ,IAAA,IAAI,OAAA,CAAQ,UAAA,IAAc,OAAA,CAAQ,UAAA,CAAW,SAAS,CAAA,EAAG;AACrD,MAAA,SAAA,GAAY,OAAA,CAAQ,UAAA,CAAW,GAAA,CAAI,CAAC,EAAA,MAAa;AAAA,QAC7C,IAAI,EAAA,CAAG,EAAA;AAAA,QACP,IAAA,EAAM,GAAG,QAAA,CAAS,IAAA;AAAA,QAClB,SAAA,EAAW,GAAG,QAAA,CAAS;AAAA,OAC3B,CAAE,CAAA;AAAA,IACN;AAEA,IAAA,OAAO;AAAA,MACH,OAAA,EAAS,QAAQ,OAAA,IAAW,EAAA;AAAA,MAC5B,SAAA;AAAA,MACA,YAAA,EAAc,IAAA,CAAK,eAAA,CAAgB,MAAA,CAAO,aAAa,CAAA;AAAA,MACvD,KAAA,EAAO;AAAA,QACH,YAAA,EAAc,IAAA,CAAK,KAAA,EAAO,aAAA,IAAiB,CAAA;AAAA,QAC3C,gBAAA,EAAkB,IAAA,CAAK,KAAA,EAAO,iBAAA,IAAqB,CAAA;AAAA,QACnD,WAAA,EAAa,IAAA,CAAK,KAAA,EAAO,YAAA,IAAgB;AAAA,OAC7C;AAAA,MACA,WAAA,EAAa;AAAA,KACjB;AAAA,EACJ;AAAA,EAEA,OAAO,OAAO,OAAA,EAA4D;AACtE,IAAA,MAAM,OAAA,GAAU,KAAK,YAAA,CAAa,EAAE,GAAG,OAAA,EAAS,MAAA,EAAQ,MAAM,CAAA;AAE9D,IAAA,MAAM,WAAW,MAAM,IAAA,CAAK,eAAe,CAAA,EAAG,IAAA,CAAK,OAAO,CAAA,iBAAA,CAAA,EAAqB;AAAA,MAC3E,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,OAAO;AAAA,KAC/B,CAAA;AAED,IAAA,IAAI,CAAC,SAAS,IAAA,EAAM;AAChB,MAAA,MAAM,IAAI,kBAAA,CAAmB,uBAAA,EAAyB,cAAc,CAAA;AAAA,IACxE;AAEA,IAAA,MAAM,MAAA,GAAS,QAAA,CAAS,IAAA,CAAK,SAAA,EAAU;AACvC,IAAA,MAAM,OAAA,GAAU,IAAI,WAAA,CAAY,OAAO,CAAA;AACvC,IAAA,IAAI,MAAA,GAAS,EAAA;AAEb,IAAA,IAAI;AACA,MAAA,OAAO,IAAA,EAAM;AACT,QAAA,MAAM,EAAE,KAAA,EAAO,IAAA,EAAK,GAAI,MAAM,OAAO,IAAA,EAAK;AAC1C,QAAA,IAAI,IAAA,EAAM;AAEV,QAAA,MAAA,IAAU,QAAQ,MAAA,CAAO,KAAA,EAAO,EAAE,MAAA,EAAQ,MAAM,CAAA;AAChD,QAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,KAAA,CAAM,IAAI,CAAA;AAC/B,QAAA,MAAA,GAAS,KAAA,CAAM,KAAI,IAAK,EAAA;AAExB,QAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACtB,UAAA,MAAM,OAAA,GAAU,KAAK,IAAA,EAAK;AAC1B,UAAA,IAAI,CAAC,OAAA,IAAW,OAAA,KAAY,cAAA,EAAgB;AAC5C,UAAA,IAAI,OAAA,CAAQ,UAAA,CAAW,QAAQ,CAAA,EAAG;AAC9B,YAAA,MAAM,OAAA,GAAU,OAAA,CAAQ,KAAA,CAAM,CAAC,CAAA;AAC/B,YAAA,IAAI,IAAA;AACJ,YAAA,IAAI;AACA,cAAA,IAAA,GAAO,IAAA,CAAK,MAAM,OAAO,CAAA;AAAA,YAC7B,SAAS,GAAA,EAAK;AACV,cAAA;AAAA,YACJ;AAEA,YAAA,MAAM,MAAA,GAAS,IAAA,CAAK,OAAA,GAAU,CAAC,CAAA;AAC/B,YAAA,IAAI,CAAC,MAAA,EAAQ;AAEb,YAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,KAAA,EAAO,OAAA,IAAW,EAAA;AACvC,YAAA,MAAM,aAAA,GAAgB,MAAA,CAAO,KAAA,EAAO,UAAA,GAAa,CAAC,CAAA;AAClD,YAAA,IAAI,aAAA;AAEJ,YAAA,IAAI,aAAA,EAAe;AACf,cAAA,aAAA,GAAgB;AAAA,gBACZ,IAAI,aAAA,CAAc,EAAA;AAAA,gBAClB,IAAA,EAAM,cAAc,QAAA,EAAU,IAAA;AAAA,gBAC9B,SAAA,EAAW,cAAc,QAAA,EAAU;AAAA,eACvC;AAAA,YACJ;AAEA,YAAA,MAAM,UAAA,GAAa,MAAA,CAAO,aAAA,KAAkB,IAAA,IAAQ,OAAO,aAAA,KAAkB,KAAA,CAAA;AAE7E,YAAA,MAAM;AAAA,cACF,KAAA;AAAA,cACA,QAAA,EAAU,UAAA;AAAA,cACV,GAAI,aAAA,IAAiB,EAAE,aAAA,EAAc;AAAA,cACrC,GAAI,cAAc,EAAE,YAAA,EAAc,KAAK,eAAA,CAAgB,MAAA,CAAO,aAAa,CAAA;AAAE,aACjF;AAAA,UACJ;AAAA,QACJ;AAAA,MACJ;AAAA,IACJ,CAAA,SAAE;AACE,MAAA,MAAA,CAAO,WAAA,EAAY;AAAA,IACvB;AAAA,EACJ;AAAA,EAEA,eAAe,IAAA,EAAsB;AACjC,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,MAAA,GAAS,CAAC,CAAA;AAAA,EACpC;AAAA,EAEA,YAAA,GAA0B;AACtB,IAAA,OAAO;AAAA,MACH,cAAA,EAAgB,IAAA;AAAA,MAChB,aAAA,EAAe,IAAA;AAAA,MACf,aAAA,EAAe;AAAA,KACnB;AAAA,EACJ;AAAA,EAEA,MAAM,WAAA,GAAgC;AAClC,IAAA,IAAI;AACA,MAAA,MAAM,IAAA,GAAO,MAAM,IAAA,CAAK,cAAA,CAAe,CAAA,EAAG,IAAA,CAAK,OAAO,CAAA,OAAA,CAAA,EAAW,EAAE,MAAA,EAAQ,KAAA,EAAO,CAAA;AAClF,MAAA,OAAO,IAAA,CAAK,EAAA;AAAA,IAChB,CAAA,CAAA,MAAQ;AACJ,MAAA,OAAO,KAAA;AAAA,IACX;AAAA,EACJ;AAAA,EAEA,MAAM,WAAW,OAAA,EAA+D;AAC5E,IAAA,MAAM,YAAA,GAAe,IAAA,CAAK,OAAA,CAAQ,WAAW,CAAA;AAC7C,IAAA,MAAM,KAAA,GAAQ,IAAI,UAAA,CAAW,YAAA,CAAa,MAAM,CAAA;AAChD,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,YAAA,CAAa,QAAQ,CAAA,EAAA,EAAK;AAC1C,MAAA,KAAA,CAAM,CAAC,CAAA,GAAI,YAAA,CAAa,UAAA,CAAW,CAAC,CAAA;AAAA,IACxC;AACA,IAAA,MAAM,IAAA,GAAO,IAAI,IAAA,CAAK,CAAC,KAAK,GAAG,EAAE,IAAA,EAAM,OAAA,CAAQ,QAAA,EAAU,CAAA;AACzD,IAAA,MAAM,QAAA,GAAW,IAAI,QAAA,EAAS;AAC9B,IAAA,QAAA,CAAS,MAAA,CAAO,MAAA,EAAQ,IAAA,EAAM,YAAY,CAAA;AAC1C,IAAA,QAAA,CAAS,MAAA,CAAO,SAAS,WAAW,CAAA;AACpC,IAAA,IAAI,QAAQ,QAAA,EAAU,QAAA,CAAS,MAAA,CAAO,UAAA,EAAY,QAAQ,QAAQ,CAAA;AAElE,IAAA,MAAM,WAAW,MAAM,IAAA,CAAK,eAAe,CAAA,EAAG,IAAA,CAAK,OAAO,CAAA,qBAAA,CAAA,EAAyB;AAAA,MAC/E,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,QAAA;AAAA,MACN,OAAA,EAAS;AAAA,QACL,cAAA,EAAgB;AAAA;AACpB,KACH,CAAA;AAED,IAAA,MAAM,IAAA,GAAO,MAAM,QAAA,CAAS,IAAA,EAAK;AACjC,IAAA,OAAO;AAAA,MACH,YAAY,IAAA,CAAK,IAAA;AAAA,MACjB,UAAA,EAAY,CAAA;AAAA;AAAA,MACZ,QAAA,EAAU,IAAA,CAAK,QAAA,IAAY,OAAA,CAAQ,QAAA,IAAY;AAAA,KACnD;AAAA,EACJ;AAAA,EAEA,OAAO,WAAW,OAAA,EAAsD;AACpE,IAAA,MAAM,WAAW,MAAM,IAAA,CAAK,eAAe,CAAA,EAAG,IAAA,CAAK,OAAO,CAAA,aAAA,CAAA,EAAiB;AAAA,MACvE,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,KAAK,SAAA,CAAU;AAAA,QACjB,KAAA,EAAO,OAAA;AAAA,QACP,OAAO,OAAA,CAAQ,IAAA;AAAA,QACf,KAAA,EAAO,QAAQ,OAAA,IAAW,OAAA;AAAA,QAC1B,eAAA,EAAiB,QAAQ,MAAA,IAAU;AAAA,OACtC;AAAA,KACJ,CAAA;AAED,IAAA,IAAI,CAAC,QAAA,CAAS,IAAA,QAAY,IAAI,kBAAA,CAAmB,4BAA4B,cAAc,CAAA;AAE3F,IAAA,MAAM,MAAA,GAAS,QAAA,CAAS,IAAA,CAAK,SAAA,EAAU;AACvC,IAAA,IAAI;AACA,MAAA,OAAO,IAAA,EAAM;AACT,QAAA,MAAM,EAAE,IAAA,EAAM,KAAA,EAAM,GAAI,MAAM,OAAO,IAAA,EAAK;AAC1C,QAAA,IAAI,IAAA,EAAM;AACV,QAAA,IAAI,KAAA,EAAO;AACP,UAAA,MAAM,SAAS,IAAI,WAAA,CAAY,QAAQ,CAAA,CAAE,OAAO,KAAK,CAAA;AACrD,UAAA,MAAM,EAAE,WAAA,EAAa,IAAA,CAAK,MAAM,CAAA,EAAE;AAAA,QACtC;AAAA,MACJ;AAAA,IACJ,CAAA,SAAE;AACE,MAAA,MAAA,CAAO,WAAA,EAAY;AAAA,IACvB;AAAA,EACJ;AAAA,EAEA,MAAM,cAAc,OAAA,EAAiD;AACjE,IAAA,MAAM,OAAA,GAAU;AAAA,MACZ,OAAO,IAAA,CAAK,YAAA;AAAA,MACZ,QAAA,EAAU;AAAA,QACN;AAAA,UACI,IAAA,EAAM,MAAA;AAAA,UACN,OAAA,EAAS;AAAA,YACL,EAAE,IAAA,EAAM,MAAA,EAAQ,IAAA,EAAM,OAAA,CAAQ,UAAU,qBAAA,EAAsB;AAAA,YAC9D;AAAA,cACI,IAAA,EAAM,WAAA;AAAA,cACN,SAAA,EAAW;AAAA,gBACP,GAAA,EAAK,CAAA,uBAAA,EAA0B,OAAA,CAAQ,WAAW,CAAA;AAAA;AACtD;AACJ;AACJ;AACJ;AACJ,KACJ;AAEA,IAAA,MAAM,WAAW,MAAM,IAAA,CAAK,eAAe,CAAA,EAAG,IAAA,CAAK,OAAO,CAAA,iBAAA,CAAA,EAAqB;AAAA,MAC3E,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,OAAO;AAAA,KAC/B,CAAA;AAED,IAAA,MAAM,IAAA,GAAO,MAAM,QAAA,CAAS,IAAA,EAAK;AACjC,IAAA,OAAO;AAAA,MACH,WAAA,EAAa,IAAA,CAAK,OAAA,CAAQ,CAAC,EAAE,OAAA,CAAQ,OAAA;AAAA,MACrC,SAAS;AAAC;AAAA,KACd;AAAA,EACJ;AAAA,EAEA,MAAM,cAAc,OAAA,EAAqD;AACrE,IAAA,MAAM,WAAW,MAAM,IAAA,CAAK,eAAe,CAAA,EAAG,IAAA,CAAK,OAAO,CAAA,mBAAA,CAAA,EAAuB;AAAA,MAC7E,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,KAAK,SAAA,CAAU;AAAA,QACjB,QAAQ,OAAA,CAAQ,MAAA;AAAA,QAChB,KAAA,EAAO,UAAA;AAAA,QACP,CAAA,EAAG,CAAA;AAAA,QACH,IAAA,EAAM,QAAQ,UAAA,IAAc;AAAA,OAC/B;AAAA,KACJ,CAAA;AAED,IAAA,MAAM,IAAA,GAAO,MAAM,QAAA,CAAS,IAAA,EAAK;AACjC,IAAA,OAAO;AAAA,MACH,QAAA,EAAU,IAAA,CAAK,IAAA,CAAK,CAAC,CAAA,CAAE,GAAA;AAAA,MACvB,aAAA,EAAe,IAAA,CAAK,IAAA,CAAK,CAAC,CAAA,CAAE;AAAA,KAChC;AAAA,EACJ;AACJ;;;ACxaO,IAAM,iBAAN,MAAqB;AAAA,EAChB,aAAiC,EAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAO1C,iBAAiB,QAAA,EAAkC;AAC/C,IAAA,IAAA,CAAK,UAAA,CAAW,KAAK,QAAQ,CAAA;AAC7B,IAAA,IAAA,CAAK,UAAA,CAAW,KAAK,CAAC,CAAA,EAAG,MAAM,CAAA,CAAE,QAAA,GAAW,EAAE,QAAQ,CAAA;AAAA,EAC1D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,MAAM,OAAA,CAAQ,OAAA,EAAwB,YAAA,GAAe,IAAA,EAA8B;AAC/E,IAAA,IAAI,UAAA,GAAa,EAAE,GAAG,OAAA,EAAS,OAAO,CAAC,GAAG,OAAA,CAAQ,KAAK,CAAA,EAAE;AACzD,IAAyB,WAAW,SAAA,GAAY;AAEhD,IAAA,KAAA,MAAW,QAAA,IAAY,KAAK,UAAA,EAAY;AAIpC,MAAA,IAAI,QAAA,CAAS,WAAA,CAAY,UAAU,CAAA,EAAG;AAClC,QAAA,UAAA,GAAa,MAAM,QAAA,CAAS,KAAA,CAAM,UAAU,CAAA;AAAA,MAChD;AAAA,IACJ;AAEA,IAAA,IAAI,UAAA,CAAW,UAAA,GAAa,UAAA,CAAW,SAAA,EAAW;AAC9C,MAAA,MAAM,IAAI,0BAAA;AAAA,QACN,CAAA,oBAAA,EAAuB,UAAA,CAAW,UAAU,CAAA,UAAA,EAAa,WAAW,SAAS,CAAA;AAAA,OACjF;AAAA,IACJ;AAEA,IAAA,OAAO,UAAA;AAAA,EACX;AACJ;;;ACrCO,IAAM,8BAAN,MAA8D;AAAA,EAIjE,WAAA,CACY,SACA,MAAA,EACV;AAFU,IAAA,IAAA,CAAA,OAAA,GAAA,OAAA;AACA,IAAA,IAAA,CAAA,MAAA,GAAA,MAAA;AAAA,EACR;AAAA,EANK,IAAA,GAAO,sBAAA;AAAA,EACP,QAAA,GAAW,EAAA;AAAA,EAOpB,YAAY,GAAA,EAA6B;AACrC,IAAA,OACI,GAAA,CAAI,UAAA,IAAc,GAAA,CAAI,SAAA,GAAY,KAAK,MAAA,CAAO,gBAAA,IAC9C,GAAA,CAAI,KAAA,CAAM,MAAA,GAAS,IAAA,CAAK,MAAA,CAAO,aAAA,GAAgB,KAAK,MAAA,CAAO,YAAA;AAAA,EAEnE;AAAA,EAEA,MAAM,MAAM,GAAA,EAA4C;AACpD,IAAA,MAAM,EAAE,aAAA,EAAe,YAAA,EAAa,GAAI,IAAA,CAAK,MAAA;AAE7C,IAAA,MAAM,IAAA,GAAO,GAAA,CAAI,KAAA,CAAM,KAAA,CAAM,GAAG,aAAa,CAAA;AAC7C,IAAA,MAAM,OAAO,GAAA,CAAI,KAAA,CAAM,MAAM,GAAA,CAAI,KAAA,CAAM,SAAS,YAAY,CAAA;AAC5D,IAAA,MAAM,MAAA,GAAS,IAAI,KAAA,CAAM,KAAA,CAAM,eAAe,GAAA,CAAI,KAAA,CAAM,SAAS,YAAY,CAAA;AAE7E,IAAA,MAAM,aAAa,MAAA,CAAO,GAAA,CAAI,CAAA,CAAA,KAAK,CAAA,EAAG,EAAE,IAAI,CAAA,EAAA,EAAK,IAAA,CAAK,SAAA,CAAU,EAAE,OAAO,CAAC,CAAA,CAAE,CAAA,CAAE,KAAK,IAAI,CAAA;AAEvF,IAAA,MAAM,eAAA,GAAkB,MAAM,IAAA,CAAK,OAAA,CAAQ,QAAA,CAAS;AAAA,MAChD,KAAA,EAAO,EAAA;AAAA,MACP,UAAU,CAAC;AAAA,QACP,IAAA,EAAM,MAAA;AAAA,QACN,OAAA,EAAS,CAAA;AAAA,EAA0D,UAAU,CAAA;AAAA,OAChF;AAAA,KACJ,CAAA;AAED,IAAA,MAAM,aAAa,eAAA,CAAgB,OAAA;AAEnC,IAAA,MAAM,qBAAA,GAAwB,GAAA,CAAI,kBAAA,GAC5B,CAAA,EAAG,IAAI,kBAAkB;AAAA,EAAK,UAAU,CAAA,CAAA,GACxC,UAAA;AAEN,IAAA,MAAM,WAAA,GAAoB;AAAA,MACtB,IAAA,EAAM,QAAA;AAAA,MACN,OAAA,EAAS,CAAA;AAAA,EAAiC,qBAAqB,CAAA,CAAA;AAAA,MAC/D,UAAA,EAAY,IAAA,CAAK,OAAA,CAAQ,cAAA,CAAe,qBAAqB,CAAA;AAAA,MAC7D,SAAA,EAAW,EAAA;AAAA,MACX,UAAA,EAAY;AAAA,KAChB;AAEA,IAAA,MAAM,WAAW,CAAC,GAAG,IAAA,EAAM,WAAA,EAAa,GAAG,IAAI,CAAA;AAC/C,IAAA,MAAM,aAAA,GAAgB,SAAS,MAAA,CAAO,CAAC,KAAK,CAAA,KAAM,GAAA,GAAM,EAAE,UAAA,EAAY,CAAC,IACnE,IAAA,CAAK,OAAA,CAAQ,eAAe,GAAA,CAAI,YAAY,IAC5C,IAAA,CAAK,OAAA,CAAQ,cAAA,CAAe,GAAA,CAAI,UAAU,CAAA;AAE9C,IAAA,OAAO;AAAA,MACH,GAAG,GAAA;AAAA,MACH,KAAA,EAAO,QAAA;AAAA,MACP,UAAA,EAAY,aAAA;AAAA,MACZ,kBAAA,EAAoB;AAAA,KACxB;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,MAAM,kBAAA,CAAmB,OAAA,EAAiB,YAAA,GAAuB,6BAAA,EAI9D;AAGC,IAAA,MAAM,eAAA,GAAkB,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,OAAA,CAAQ,cAAA,CAAe,OAAO,CAAA,GAAI,GAAI,CAAC,CAAA;AAC1F,IAAA,MAAM,QAAA,GAAW,uBAAuB,eAAe,CAAA,iBAAA,CAAA;AAKvD,IAAA,MAAM,eAAA,GAAkB,MAAM,IAAA,CAAK,OAAA,CAAQ,QAAA,CAAS;AAAA,MAChD,KAAA,EAAO,EAAA;AAAA,MACP,UAAU,CAAC;AAAA,QACP,IAAA,EAAM,MAAA;AAAA,QACN,OAAA,EAAS,CAAA;AAAA,EAAyB,YAAY;;AAAA;AAAA,EAAwB,OAAO;;AAAA;AAAA,EAA6B,YAAY,CAAA;AAAA,OACzH;AAAA,KACJ,CAAA;AACD,IAAA,MAAM,YAAY,eAAA,CAAgB,OAAA;AAIlC,IAAA,MAAM,SAAA,GAAY,CAAA,+FAAA,CAAA;AAElB,IAAA,OAAO,EAAE,QAAA,EAAU,SAAA,EAAW,SAAA,EAAU;AAAA,EAC5C;AACJ;;;ACrGO,IAAM,qBAAN,MAAqD;AAAA,EAC/C,IAAA,GAAO,qBAAA;AAAA,EACP,QAAA,GAAW,EAAA;AAAA,EAEpB,YAAY,GAAA,EAA6B;AAErC,IAAA,OAAO,GAAA,CAAI,WAAW,MAAA,GAAS,CAAA;AAAA,EACnC;AAAA,EAEA,MAAM,MAAM,GAAA,EAA4C;AAEpD,IAAA,OAAO,GAAA;AAAA,EACX;AACJ;AAUO,IAAM,6BAAN,MAA6D;AAAA,EAIhE,WAAA,CACY,SACA,MAAA,EACV;AAFU,IAAA,IAAA,CAAA,OAAA,GAAA,OAAA;AACA,IAAA,IAAA,CAAA,MAAA,GAAA,MAAA;AAAA,EACR;AAAA,EANK,IAAA,GAAO,qBAAA;AAAA,EACP,QAAA,GAAW,EAAA;AAAA,EAOpB,YAAY,GAAA,EAA6B;AACrC,IAAA,MAAM,aAAA,GAAgB,GAAA,CAAI,SAAA,GAAY,IAAA,CAAK,MAAA,CAAO,gBAAA;AAGlD,IAAA,MAAM,iBAAA,GAAoB,GAAA,CAAI,KAAA,CAAM,MAAA,CAAO,CAAA,CAAA,KAAK,EAAE,IAAA,KAAS,QAAA,IAAY,CAAC,CAAA,CAAE,UAAU,CAAA;AACpF,IAAA,OAAO,IAAI,UAAA,IAAc,aAAA,IAAiB,iBAAA,CAAkB,MAAA,GAAS,KAAK,MAAA,CAAO,UAAA;AAAA,EACrF;AAAA,EAEA,MAAM,MAAM,GAAA,EAA4C;AAEpD,IAAA,MAAM,mBAAA,GAAsB,GAAA,CAAI,KAAA,CAC3B,GAAA,CAAI,CAAC,CAAA,EAAG,CAAA,MAAO,EAAE,CAAA,EAAG,CAAA,EAAE,CAAE,CAAA,CACxB,MAAA,CAAO,CAAC,EAAE,CAAA,EAAE,KAAM,CAAA,CAAE,IAAA,KAAS,QAAA,IAAY,CAAC,CAAA,CAAE,UAAU,CAAA,CACtD,KAAA,CAAM,CAAA,EAAG,IAAA,CAAK,MAAA,CAAO,UAAU,CAAA;AAEpC,IAAA,MAAM,WAAA,GAAc,mBAAA,CAAoB,GAAA,CAAI,CAAA,CAAA,KAAK,EAAE,CAAC,CAAA;AACpD,IAAA,MAAM,aAAa,WAAA,CAAY,GAAA,CAAI,CAAA,CAAA,KAAK,CAAA,EAAG,EAAE,IAAI,CAAA,EAAA,EAAK,IAAA,CAAK,SAAA,CAAU,EAAE,OAAO,CAAC,CAAA,CAAE,CAAA,CAAE,KAAK,IAAI,CAAA;AAE5F,IAAA,MAAM,eAAA,GAAkB,MAAM,IAAA,CAAK,OAAA,CAAQ,QAAA,CAAS;AAAA,MAChD,KAAA,EAAO,EAAA;AAAA,MACP,UAAU,CAAC;AAAA,QACP,IAAA,EAAM,MAAA;AAAA,QACN,OAAA,EAAS,CAAA;AAAA,EAAoD,UAAU,CAAA;AAAA,OAC1E;AAAA,KACJ,CAAA;AAED,IAAA,MAAM,aAAa,eAAA,CAAgB,OAAA;AACnC,IAAA,MAAM,qBAAA,GAAwB,GAAA,CAAI,kBAAA,GAC5B,CAAA,EAAG,IAAI,kBAAkB;AAAA,EAAK,UAAU,CAAA,CAAA,GACxC,UAAA;AAGN,IAAA,MAAM,eAAA,GAAkB,IAAI,GAAA,CAAI,mBAAA,CAAoB,IAAI,CAAA,CAAA,KAAK,CAAA,CAAE,CAAC,CAAC,CAAA;AACjE,IAAA,MAAM,QAAA,GAAW,GAAA,CAAI,KAAA,CAAM,MAAA,CAAO,CAAC,CAAA,EAAG,CAAA,KAAM,CAAC,eAAA,CAAgB,GAAA,CAAI,CAAC,CAAC,CAAA;AAEnE,IAAA,MAAM,UAAA,GAAa,SAAS,MAAA,CAAO,CAAC,KAAK,CAAA,KAAM,GAAA,GAAM,EAAE,UAAA,EAAY,CAAC,IAChE,IAAA,CAAK,OAAA,CAAQ,eAAe,GAAA,CAAI,YAAY,IAC5C,IAAA,CAAK,OAAA,CAAQ,cAAA,CAAe,GAAA,CAAI,UAAU,CAAA;AAE9C,IAAA,OAAO;AAAA,MACH,GAAG,GAAA;AAAA,MACH,KAAA,EAAO,QAAA;AAAA,MACP,UAAA,EAAY,UAAA;AAAA,MACZ,kBAAA,EAAoB;AAAA,KACxB;AAAA,EACJ;AACJ;AC/DO,IAAM,0BAAN,MAA8B;AAAA,EACzB,OAAA;AAAA,EACA,aAAA;AAAA,EAER,YAAY,MAAA,EAA2B;AACnC,IAAA,IAAA,CAAK,UAAU,MAAA,CAAO,OAAA;AACtB,IAAA,IAAA,CAAK,aAAA,GAAgB,OAAO,aAAA,IAAiB,GAAA;AAAA,EACjD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,MAAM,QAAA,CACF,OAAA,EACA,IAAA,EACA,UACA,cAAA,EACe;AACf,IAAA,IAAI,SAAS,MAAA,EAAQ;AACjB,MAAA,MAAM,UAAA,GAAa,cAAA,GAAiB,cAAA,CAAe,OAAO,CAAA,GAAI,IAAA,CAAK,IAAA,CAAK,MAAA,CAAO,OAAO,CAAA,CAAE,MAAA,GAAS,CAAC,CAAA;AAClG,MAAA,IAAI,UAAA,GAAa,KAAK,aAAA,EAAe;AACjC,QAAA,MAAM,IAAI,KAAA,CAAM,CAAA,yCAAA,EAA4C,KAAK,aAAa,CAAA,YAAA,EAAe,UAAU,CAAA,CAAA,CAAG,CAAA;AAAA,MAC9G;AAAA,IACJ;AAEA,IAAA,MAAM,KAAKC,iBAAA,EAAW;AACtB,IAAA,MAAM,IAAA,GAAgB;AAAA,MAClB,EAAA;AAAA,MACA,OAAA;AAAA,MACA,IAAA;AAAA,MACA,GAAI,QAAA,KAAa,MAAA,GAAY,EAAE,QAAA,KAAa;AAAC,KACjD;AAEA,IAAA,MAAM,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAI,EAAA,EAAI,IAAI,CAAA;AAC/B,IAAA,OAAO,QAAQ,EAAE,CAAA,CAAA,CAAA;AAAA,EACrB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,MAAA,CAAO,EAAA,EAAY,OAAA,EAA+E;AACpG,IAAA,MAAM,IAAA,GAAO,MAAM,IAAA,CAAK,OAAA,CAAQ,IAAI,EAAE,CAAA;AACtC,IAAA,IAAI,CAAC,IAAA,EAAM,MAAM,IAAI,KAAA,CAAM,CAAA,+BAAA,EAAkC,EAAE,CAAA,CAAE,CAAA;AAEjE,IAAA,MAAM,WAAA,GAAuB;AAAA,MACzB,GAAG,IAAA;AAAA,MACH,GAAI,QAAQ,OAAA,KAAY,MAAA,GAAY,EAAE,OAAA,EAAS,OAAA,CAAQ,OAAA,EAAQ,GAAI,EAAC;AAAA,MACpE,GAAI,OAAA,CAAQ,QAAA,KAAa,MAAA,GAAY,EAAE,QAAA,EAAU,EAAE,GAAG,IAAA,CAAK,UAAU,GAAG,OAAA,CAAQ,QAAA,EAAS,KAAM;AAAC,KACpG;AAEA,IAAA,MAAM,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAI,EAAA,EAAI,WAAW,CAAA;AAAA,EAC1C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAM,SAAS,GAAA,EAA2C;AACtD,IAAA,MAAM,KAAA,GAAQ,GAAA,CAAI,KAAA,CAAM,gBAAgB,CAAA;AACxC,IAAA,IAAI,CAAC,KAAA,IAAS,CAAC,KAAA,CAAM,CAAC,GAAG,OAAO,MAAA;AAChC,IAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAI,KAAA,CAAM,CAAC,CAAC,CAAA;AAAA,EACpC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,OAAO,EAAA,EAA2B;AACpC,IAAA,MAAM,IAAA,CAAK,OAAA,CAAQ,MAAA,CAAO,EAAE,CAAA;AAAA,EAChC;AACJ;AC9FO,IAAM,yBAAN,MAAwD;AAAA,EACnD,KAAA,uBAAY,GAAA,EAAkE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQtF,MAAM,IAAI,EAAA,EAAsC;AAC5C,IAAA,OAAO,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,EAAE,CAAA,EAAG,OAAA;AAAA,EAC/B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAM,QAAQ,EAAA,EAAuF;AACjG,IAAA,OAAO,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,EAAE,CAAA;AAAA,EAC5B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,MAAM,GAAA,CAAI,EAAA,EAAwB,OAAA,EAAc,QAAA,EAAqD;AACjG,IAAA,MAAM,UAAA,GAAa,MAAMA,iBAAAA,EAAW;AACpC,IAAA,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,UAAA,EAAY,QAAA,KAAa,MAAA,GAAY,EAAE,OAAA,EAAS,QAAA,EAAS,GAAI,EAAE,OAAA,EAAS,CAAA;AACvF,IAAA,OAAO,UAAA;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,OAAO,EAAA,EAA2B;AACpC,IAAA,IAAA,CAAK,KAAA,CAAM,OAAO,EAAE,CAAA;AAAA,EACxB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,WAAA,GAAgC;AAClC,IAAA,OAAO,IAAA;AAAA,EACX;AACJ;;;AC9DO,IAAM,eAAN,MAAmB;AAAA,EACd,KAAA,uBAA0C,GAAA,EAAI;AAAA,EAEtD,WAAA,CAAY,YAAA,GAAkC,EAAC,EAAG;AAC9C,IAAA,KAAA,MAAW,QAAQ,YAAA,EAAc;AAC7B,MAAA,IAAA,CAAK,SAAS,IAAI,CAAA;AAAA,IACtB;AAAA,EACJ;AAAA,EAEA,SAAS,IAAA,EAA6B;AAClC,IAAA,IAAI,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,IAAA,CAAK,IAAI,CAAA,EAAG;AAC3B,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,KAAA,EAAQ,IAAA,CAAK,IAAI,CAAA,uBAAA,CAAyB,CAAA;AAAA,IAC9D;AACA,IAAA,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,IAAA,CAAK,IAAA,EAAM,IAAI,CAAA;AAAA,EAClC;AAAA,EAEA,IAAI,IAAA,EAA2C;AAC3C,IAAA,OAAO,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,IAAI,CAAA;AAAA,EAC9B;AAAA,EAEA,MAAA,GAA4B;AACxB,IAAA,OAAO,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,KAAA,CAAM,QAAQ,CAAA;AAAA,EACzC;AAAA,EAEA,MAAM,OAAA,CAAQ,IAAA,EAAc,MAAA,EAAiB,OAAA,EAAwC;AACjF,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,IAAI,CAAA;AAChC,IAAA,IAAI,CAAC,IAAA,EAAM;AACP,MAAA,MAAM,IAAI,uBAAA,CAAwB,CAAA,MAAA,EAAS,IAAI,CAAA,YAAA,CAAc,CAAA;AAAA,IACjE;AAEA,IAAA,IAAI;AAGA,MAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,OAAA,CAAQ,QAAQ,OAAO,CAAA;AACjD,MAAA,OAAO,MAAA;AAAA,IACX,SAAS,GAAA,EAAU;AACf,MAAA,IAAI,eAAe,yBAAA,EAA2B;AAC1C,QAAA,MAAM,GAAA;AAAA,MACV;AACA,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,2BAAA,EAA8B,IAAI,CAAA,GAAA,EAAM,GAAA,CAAI,OAAO,CAAA,CAAE,CAAA;AAAA,IACzE;AAAA,EACJ;AACJ;;;AC7CO,IAAM,gBAAN,MAAoB;AAAA,EACf,SAAmB,EAAC;AAAA,EAE5B,WAAA,CAAY,MAAA,GAAmB,EAAC,EAAG;AAC/B,IAAA,IAAA,CAAK,MAAA,GAAS,CAAC,GAAG,MAAM,CAAA;AACxB,IAAA,IAAA,CAAK,UAAA,EAAW;AAAA,EACpB;AAAA,EAEA,SAAS,KAAA,EAAe;AACpB,IAAA,IAAA,CAAK,MAAA,CAAO,KAAK,KAAK,CAAA;AACtB,IAAA,IAAA,CAAK,UAAA,EAAW;AAAA,EACpB;AAAA,EAEQ,UAAA,GAAa;AACjB,IAAA,IAAA,CAAK,MAAA,CAAO,KAAK,CAAC,CAAA,EAAG,MAAM,CAAA,CAAE,QAAA,GAAW,EAAE,QAAQ,CAAA;AAAA,EACtD;AAAA,EAEA,sBAAsB,QAAA,EAAsC;AACxD,IAAA,OAAO,KAAK,MAAA,CAAO,MAAA,CAAO,CAAA,CAAA,KAAK,CAAA,CAAE,WAAW,QAAQ,CAAA;AAAA,EACxD;AAAA;AAAA;AAAA;AAAA,EAKA,oBAAoB,QAAA,EAAoC;AACpD,IAAA,MAAM,cAAA,GAAiB,IAAA,CAAK,qBAAA,CAAsB,QAAQ,CAAA;AAC1D,IAAA,IAAI,cAAA,CAAe,MAAA,KAAW,CAAA,EAAG,OAAO,EAAA;AAExC,IAAA,IAAI,KAAA,GAAQ,EAAA;AACZ,IAAA,KAAA,MAAW,SAAS,cAAA,EAAgB;AAEhC,MAAA,MAAM,UAAU,KAAA,CAAM,QAAA,IAAY,MAAM,KAAA,IAAS,KAAA,CAAM,QAAQ,KAAA,CAAM,WAAA;AACrE,MAAA,KAAA,IAAS;AAAA,QAAA,EAAa,KAAA,CAAM,IAAI,CAAA,QAAA,EAAW,KAAA,CAAM,IAAI,CAAA;AAAA,EAAO,OAAO;AAAA,CAAA;AAAA,IACvE;AAEA,IAAA,OAAO,MAAM,IAAA,EAAK;AAAA,EACtB;AACJ;;;ACrCO,IAAM,qBAAN,MAAgD;AAAA,EAC3C,SAAA,uBAA0C,GAAA,EAAI;AAAA,EAEtD,MAAM,OAAO,OAAA,EAAuD;AAChE,IAAA,KAAA,MAAW,GAAA,IAAO,QAAQ,SAAA,EAAW;AACjC,MAAA,IAAA,CAAK,SAAA,CAAU,GAAA,CAAI,GAAA,CAAI,EAAA,EAAI,GAAG,CAAA;AAAA,IAClC;AACA,IAAA,OAAO;AAAA,MACH,aAAA,EAAe,QAAQ,SAAA,CAAU,MAAA;AAAA,MACjC,WAAA,EAAa;AAAA,KACjB;AAAA,EACJ;AAAA,EAEA,MAAM,MAAM,OAAA,EAAqD;AAC7D,IAAA,MAAM,QAAA,GAAW,OAAA,CAAQ,KAAA,CAAM,WAAA,EAAY;AAC3C,IAAA,MAAM,UAAU,EAAC;AAGjB,IAAA,KAAA,MAAW,GAAA,IAAO,IAAA,CAAK,SAAA,CAAU,MAAA,EAAO,EAAG;AACvC,MAAA,MAAM,OAAA,GAAU,GAAA,CAAI,OAAA,CAAQ,WAAA,EAAY;AACxC,MAAA,IAAI,KAAA,GAAQ,CAAA;AACZ,MAAA,IAAI,OAAA,CAAQ,QAAA,CAAS,QAAQ,CAAA,EAAG,KAAA,IAAS,GAAA;AAEzC,MAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,KAAA,CAAM,GAAG,CAAA;AAChC,MAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACtB,QAAA,IAAI,OAAA,CAAQ,QAAA,CAAS,IAAI,CAAA,EAAG,KAAA,IAAS,GAAA;AAAA,MACzC;AAEA,MAAA,IAAI,KAAA,GAAQ,CAAA,IAAK,KAAA,KAAU,OAAA,CAAQ,YAAY,CAAA,CAAA,EAAI;AAC/C,QAAA,OAAA,CAAQ,IAAA,CAAK,EAAE,QAAA,EAAU,GAAA,EAAK,KAAA,EAAO,KAAK,GAAA,CAAI,KAAA,EAAO,CAAC,CAAA,EAAG,CAAA;AAAA,MAC7D;AAAA,IACJ;AAEA,IAAA,OAAA,CAAQ,KAAK,CAAC,CAAA,EAAG,MAAM,CAAA,CAAE,KAAA,GAAQ,EAAE,KAAK,CAAA;AACxC,IAAA,MAAM,IAAA,GAAO,QAAQ,IAAA,IAAQ,CAAA;AAE7B,IAAA,OAAO;AAAA,MACH,OAAA,EAAS,OAAA,CAAQ,KAAA,CAAM,CAAA,EAAG,IAAI;AAAA,KAClC;AAAA,EACJ;AAAA,EAEA,MAAM,WAAA,GAAgC;AAClC,IAAA,OAAO,IAAA;AAAA,EACX;AACJ;;;ACxCO,IAAM,gBAAN,MAAuC;AAAA,EAClC,KAAA,GAAA,CAAA;AAAA,EAES,MAAA,GAA6C;AAAA,IAC1D,KAAA,EAAO,UAAA;AAAA;AAAA,IACP,IAAA,EAAM,UAAA;AAAA;AAAA,IACN,IAAA,EAAM,UAAA;AAAA;AAAA,IACN,KAAA,EAAO,UAAA;AAAA;AAAA,IACP,KAAA,EAAO,kBAAA;AAAA;AAAA,IACP,KAAA,EAAO;AAAA,GACX;AAAA,EAEA,SAAS,KAAA,EAAuB;AAC5B,IAAA,IAAA,CAAK,KAAA,GAAQ,KAAA;AAAA,EACjB;AAAA,EAEA,KAAA,CAAM,SAAiB,QAAA,EAA8B;AACjD,IAAA,IAAI,KAAK,KAAA,IAAA,CAAA,cAAyB,IAAA,CAAK,GAAA,CAAI,OAAA,EAAS,SAAS,QAAQ,CAAA;AAAA,EACzE;AAAA,EAEA,IAAA,CAAK,SAAiB,QAAA,EAA8B;AAChD,IAAA,IAAI,KAAK,KAAA,IAAA,CAAA,aAAwB,IAAA,CAAK,GAAA,CAAI,MAAA,EAAQ,SAAS,QAAQ,CAAA;AAAA,EACvE;AAAA,EAEA,IAAA,CAAK,SAAiB,QAAA,EAA8B;AAChD,IAAA,IAAI,KAAK,KAAA,IAAA,CAAA,aAAwB,IAAA,CAAK,GAAA,CAAI,MAAA,EAAQ,SAAS,QAAQ,CAAA;AAAA,EACvE;AAAA,EAEA,KAAA,CAAM,SAAiB,QAAA,EAA8B;AACjD,IAAA,IAAI,KAAK,KAAA,IAAA,CAAA,cAAyB,IAAA,CAAK,GAAA,CAAI,OAAA,EAAS,SAAS,QAAQ,CAAA;AAAA,EACzE;AAAA,EAEA,KAAA,CAAM,SAAiB,QAAA,EAA8B;AACjD,IAAA,IAAI,KAAK,KAAA,IAAA,CAAA,cAAyB,IAAA,CAAK,GAAA,CAAI,OAAA,EAAS,SAAS,QAAQ,CAAA;AAAA,EACzE;AAAA,EAEQ,GAAA,CAAI,QAAA,EAAoB,OAAA,EAAiB,QAAA,EAA8B;AAC3E,IAAA,MAAM,SAAA,GAAA,iBAAY,IAAI,IAAA,EAAK,EAAE,WAAA,EAAY;AACzC,IAAA,MAAM,QAAQ,IAAA,CAAK,MAAA,CAAO,QAAQ,CAAA,IAAK,KAAK,MAAA,CAAO,KAAA;AACnD,IAAA,MAAM,KAAA,GAAQ,KAAK,MAAA,CAAO,KAAA;AAE1B,IAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,EAAG,SAAS,CAAA,EAAA,EAAK,KAAK,CAAA,EAAG,QAAQ,CAAA,EAAG,KAAK,CAAA,EAAA,EAAK,OAAO,CAAA,CAAE,CAAA;AAEnE,IAAA,IAAI,QAAA,EAAU;AACV,MAAA,IAAI,SAAS,OAAA,EAAS;AAClB,QAAA,OAAA,CAAQ,GAAA,CAAI,KAAK,KAAK,CAAA,QAAA,EAAW,KAAK,CAAA,CAAA,EAAI,QAAA,CAAS,OAAO,CAAA,CAAE,CAAA;AAAA,MAChE;AACA,MAAA,IAAI,QAAA,CAAS,KAAA,IAAS,QAAA,CAAS,KAAA,CAAM,SAAS,CAAA,EAAG;AAC7C,QAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,EAAA,EAAK,KAAK,CAAA,MAAA,EAAS,KAAK,CAAA,CAAE,CAAA;AACtC,QAAA,QAAA,CAAS,KAAA,CAAM,QAAQ,CAAA,IAAA,KAAQ,OAAA,CAAQ,IAAI,CAAA,MAAA,EAAS,IAAI,EAAE,CAAC,CAAA;AAAA,MAC/D;AAGA,MAAA,MAAM,SAAA,GAAY,MAAA,CAAO,IAAA,CAAK,QAAQ,EAAE,MAAA,CAAO,CAAA,CAAA,KAAK,CAAC,CAAC,WAAW,OAAA,EAAS,UAAU,CAAA,CAAE,QAAA,CAAS,CAAC,CAAC,CAAA;AACjG,MAAA,IAAI,SAAA,CAAU,SAAS,CAAA,EAAG;AACtB,QAAA,SAAA,CAAU,QAAQ,CAAA,GAAA,KAAO;AACrB,UAAA,MAAM,KAAA,GAAQ,SAAS,GAAG,CAAA;AAC1B,UAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC3B,YAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,EAAA,EAAK,GAAG,CAAA,EAAA,EAAK,KAAK,SAAA,CAAU,KAAA,EAAO,IAAA,EAAM,CAAC,CAAA,CAAE,OAAA,CAAQ,KAAA,EAAO,MAAM,CAAC,CAAA,CAAE,CAAA;AAAA,UACpF,CAAA,MAAO;AACH,YAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,EAAA,EAAK,GAAG,CAAA,EAAA,EAAK,KAAK,CAAA,CAAE,CAAA;AAAA,UACpC;AAAA,QACJ,CAAC,CAAA;AAAA,MACL;AAAA,IACJ;AAAA,EACJ;AACJ;;;ACjEO,IAAM,aAAA,GAAiC;AAAA,EAC1C,IAAA,EAAM,YAAA;AAAA,EACN,WAAA,EAAa,iFAAA;AAAA,EACb,UAAA,EAAY;AAAA,IACR,IAAA,EAAM,QAAA;AAAA,IACN,UAAA,EAAY;AAAA,MACR,GAAA,EAAK,EAAE,IAAA,EAAM,QAAA,EAAU,aAAa,sCAAA,EAAuC;AAAA,MAC3E,KAAA,EAAO,EAAE,IAAA,EAAM,QAAA,EAAU,aAAa,wBAAA,EAAyB;AAAA,MAC/D,GAAA,EAAK,EAAE,IAAA,EAAM,QAAA,EAAU,aAAa,sBAAA;AAAuB,KAC/D;AAAA,IACA,QAAA,EAAU,CAAC,KAAK;AAAA,GACpB;AAAA,EACA,MAAM,OAAA,CAAQ,MAAA,EAAa,OAAA,EAAsB;AAC7C,IAAA,IAAI,CAAC,OAAA,CAAQ,WAAA,EAAa,MAAM,IAAI,MAAM,uCAAuC,CAAA;AACjF,IAAA,MAAM,OAAO,MAAM,OAAA,CAAQ,WAAA,CAAY,QAAA,CAAS,OAAO,GAAG,CAAA;AAC1D,IAAA,IAAI,CAAC,MAAM,MAAM,IAAI,MAAM,CAAA,oBAAA,EAAuB,MAAA,CAAO,GAAG,CAAA,CAAE,CAAA;AAG9D,IAAA,MAAM,OAAA,GAAU,MAAA,CAAO,IAAA,CAAK,OAAO,CAAA;AACnC,IAAA,IAAI,MAAA,CAAO,KAAA,KAAU,MAAA,IAAa,MAAA,CAAO,QAAQ,MAAA,EAAW;AACxD,MAAA,OAAO,OAAA,CAAQ,MAAM,MAAA,CAAO,KAAA,IAAS,GAAG,MAAA,CAAO,GAAA,IAAO,QAAQ,MAAM,CAAA;AAAA,IACxE;AACA,IAAA,OAAO,OAAA;AAAA,EACX;AACJ,CAAA;AAKO,IAAM,eAAA,GAAmC;AAAA,EAC5C,IAAA,EAAM,cAAA;AAAA,EACN,WAAA,EAAa,4EAAA;AAAA,EACb,UAAA,EAAY;AAAA,IACR,IAAA,EAAM,QAAA;AAAA,IACN,UAAA,EAAY;AAAA,MACR,GAAA,EAAK,EAAE,IAAA,EAAM,QAAA,EAAU,aAAa,mBAAA,EAAoB;AAAA,MACxD,KAAA,EAAO,EAAE,IAAA,EAAM,QAAA,EAAU,aAAa,6BAAA;AAA8B,KACxE;AAAA,IACA,QAAA,EAAU,CAAC,KAAA,EAAO,OAAO;AAAA,GAC7B;AAAA,EACA,MAAM,OAAA,CAAQ,MAAA,EAAa,OAAA,EAAsB;AAC7C,IAAA,IAAI,CAAC,OAAA,CAAQ,WAAA,EAAa,MAAM,IAAI,MAAM,uCAAuC,CAAA;AACjF,IAAA,MAAM,OAAO,MAAM,OAAA,CAAQ,WAAA,CAAY,QAAA,CAAS,OAAO,GAAG,CAAA;AAC1D,IAAA,IAAI,CAAC,MAAM,MAAM,IAAI,MAAM,CAAA,oBAAA,EAAuB,MAAA,CAAO,GAAG,CAAA,CAAE,CAAA;AAE9D,IAAA,MAAM,OAAA,GAAU,MAAA,CAAO,IAAA,CAAK,OAAO,CAAA;AACnC,IAAA,MAAM,KAAA,GAAQ,QAAQ,WAAA,EAAY,CAAE,QAAQ,MAAA,CAAO,KAAA,CAAM,aAAa,CAAA;AACtE,IAAA,IAAI,KAAA,KAAU,IAAI,OAAO,mBAAA;AAGzB,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,QAAQ,GAAG,CAAA;AACrC,IAAA,MAAM,MAAM,IAAA,CAAK,GAAA,CAAI,OAAA,CAAQ,MAAA,EAAQ,QAAQ,GAAG,CAAA;AAChD,IAAA,OAAO,wBAAwB,KAAK,CAAA,KAAA,EAAQ,QAAQ,KAAA,CAAM,KAAA,EAAO,GAAG,CAAC,CAAA,GAAA,CAAA;AAAA,EACzE;AACJ,CAAA;AAKO,IAAM,cAAA,GAAkC;AAAA,EAC3C,IAAA,EAAM,aAAA;AAAA,EACN,WAAA,EAAa,kFAAA;AAAA,EACb,UAAA,EAAY;AAAA,IACR,IAAA,EAAM,QAAA;AAAA,IACN,UAAA,EAAY;AAAA,MACR,GAAA,EAAK,EAAE,IAAA,EAAM,QAAA,EAAU,aAAa,mBAAA;AAAoB,KAC5D;AAAA,IACA,QAAA,EAAU,CAAC,KAAK;AAAA,GACpB;AAAA,EACA,MAAM,OAAA,CAAQ,MAAA,EAAa,OAAA,EAAsB;AAC7C,IAAA,IAAI,CAAC,OAAA,CAAQ,WAAA,EAAa,MAAM,IAAI,MAAM,uCAAuC,CAAA;AACjF,IAAA,MAAM,OAAO,MAAM,OAAA,CAAQ,WAAA,CAAY,QAAA,CAAS,OAAO,GAAG,CAAA;AAC1D,IAAA,IAAI,CAAC,MAAM,MAAM,IAAI,MAAM,CAAA,oBAAA,EAAuB,MAAA,CAAO,GAAG,CAAA,CAAE,CAAA;AAE9D,IAAA,MAAM,IAAA,GAAO,MAAA,CAAO,IAAA,CAAK,OAAO,CAAA,CAAE,MAAA;AAClC,IAAA,MAAM,SAAA,GAAY,GAAA;AAClB,IAAA,MAAM,WAAA,GAAc,IAAA,CAAK,IAAA,CAAK,IAAA,GAAO,SAAS,CAAA;AAE9C,IAAA,OAAO;AAAA,MACH,SAAA,EAAW,IAAA;AAAA,MACX,SAAA;AAAA,MACA,WAAA;AAAA,MACA,MAAA,EAAQ,MAAM,IAAA,CAAK,EAAE,QAAQ,WAAA,EAAY,EAAG,CAAC,CAAA,EAAG,CAAA,MAAO;AAAA,QACnD,KAAA,EAAO,CAAA;AAAA,QACP,OAAO,CAAA,GAAI,SAAA;AAAA,QACX,KAAK,IAAA,CAAK,GAAA,CAAA,CAAK,CAAA,GAAI,CAAA,IAAK,WAAW,IAAI;AAAA,OAC3C,CAAE;AAAA,KACN;AAAA,EACJ;AACJ,CAAA;AAKO,IAAM,eAAA,GAAmC;AAAA,EAC5C,IAAA,EAAM,cAAA;AAAA,EACN,WAAA,EAAa,uEAAA;AAAA,EACb,UAAA,EAAY;AAAA,IACR,IAAA,EAAM,QAAA;AAAA,IACN,UAAA,EAAY;AAAA,MACR,GAAA,EAAK,EAAE,IAAA,EAAM,QAAA,EAAU,aAAa,mBAAA,EAAoB;AAAA,MACxD,OAAA,EAAS,EAAE,IAAA,EAAM,QAAA,EAAU,aAAa,2BAAA,EAA4B;AAAA,MACpE,IAAA,EAAM,EAAE,IAAA,EAAM,QAAA,EAAU,IAAA,EAAM,CAAC,QAAA,EAAU,SAAS,CAAA,EAAG,OAAA,EAAS,QAAA;AAAS,KAC3E;AAAA,IACA,QAAA,EAAU,CAAC,KAAA,EAAO,SAAS;AAAA,GAC/B;AAAA,EACA,MAAM,OAAA,CAAQ,MAAA,EAAa,OAAA,EAAsB;AAC7C,IAAA,IAAI,CAAC,OAAA,CAAQ,WAAA,EAAa,MAAM,IAAI,MAAM,uCAAuC,CAAA;AACjF,IAAA,MAAM,OAAO,MAAM,OAAA,CAAQ,WAAA,CAAY,QAAA,CAAS,OAAO,GAAG,CAAA;AAC1D,IAAA,IAAI,CAAC,MAAM,MAAM,IAAI,MAAM,CAAA,oBAAA,EAAuB,MAAA,CAAO,GAAG,CAAA,CAAE,CAAA;AAE9D,IAAA,IAAI,UAAA,GAAa,MAAA,CAAO,IAAA,CAAK,OAAO,CAAA;AACpC,IAAA,IAAI,MAAA,CAAO,SAAS,SAAA,EAAW;AAC3B,MAAA,UAAA,GAAa,MAAA,CAAO,OAAA;AAAA,IACxB,CAAA,MAAO;AACH,MAAA,UAAA,IAAc,MAAA,CAAO,OAAA;AAAA,IACzB;AAEA,IAAA,MAAM,OAAO,MAAA,CAAO,GAAA,CAAI,KAAA,CAAM,cAAc,IAAI,CAAC,CAAA;AACjD,IAAA,IAAI,CAAC,IAAA,EAAM,MAAM,IAAI,MAAM,uBAAuB,CAAA;AAElD,IAAA,MAAM,QAAQ,WAAA,CAAY,MAAA,CAAO,MAAM,EAAE,OAAA,EAAS,YAAY,CAAA;AAC9D,IAAA,OAAO,EAAE,MAAA,EAAQ,SAAA,EAAW,GAAA,EAAK,OAAO,GAAA,EAAI;AAAA,EAChD;AACJ,CAAA;AAKO,IAAM,kBAAA,GAAsC;AAAA,EAC/C,IAAA,EAAM,iBAAA;AAAA,EACN,WAAA,EAAa,sDAAA;AAAA,EACb,YAAY,EAAE,IAAA,EAAM,QAAA,EAAU,UAAA,EAAY,EAAC,EAAE;AAAA,EAC7C,MAAM,OAAA,CAAQ,OAAA,EAAc,OAAA,EAAsB;AAC9C,IAAA,OAAO,QAAQ,UAAA,IAAc,EAAA;AAAA,EACjC;AACJ,CAAA;AAKO,IAAM,mBAAA,GAAuC;AAAA,EAChD,IAAA,EAAM,kBAAA;AAAA,EACN,WAAA,EAAa,uEAAA;AAAA,EACb,UAAA,EAAY;AAAA,IACR,IAAA,EAAM,QAAA;AAAA,IACN,UAAA,EAAY;AAAA,MACR,OAAA,EAAS,EAAE,IAAA,EAAM,QAAA,EAAU,aAAa,kBAAA,EAAmB;AAAA,MAC3D,MAAA,EAAQ,EAAE,IAAA,EAAM,SAAA,EAAW,SAAS,IAAA;AAAK,KAC7C;AAAA,IACA,QAAA,EAAU,CAAC,SAAS;AAAA,GACxB;AAAA,EACA,MAAM,OAAA,CAAQ,MAAA,EAAa,OAAA,EAAsB;AAC7C,IAAA,IAAI,aAAA,GAAgB,QAAQ,UAAA,IAAc,EAAA;AAC1C,IAAA,IAAI,OAAO,MAAA,EAAQ;AACf,MAAA,aAAA,IAAA,CAAkB,aAAA,GAAgB,IAAA,GAAO,EAAA,IAAM,MAAA,CAAO,OAAA;AAAA,IAC1D,CAAA,MAAO;AACH,MAAA,aAAA,GAAgB,MAAA,CAAO,OAAA;AAAA,IAC3B;AACA,IAAA,OAAO,EAAE,MAAA,EAAQ,SAAA,EAAW,aAAA,EAAe,MAAM,oBAAA,EAAqB;AAAA,EAC1E;AACJ,CAAA;AAKO,IAAM,oBAAA,GAAwC;AAAA,EACjD,IAAA,EAAM,mBAAA;AAAA,EACN,WAAA,EAAa,gDAAA;AAAA,EACb,YAAY,EAAE,IAAA,EAAM,QAAA,EAAU,UAAA,EAAY,EAAC,EAAE;AAAA,EAC7C,MAAM,OAAA,CAAQ,OAAA,EAAc,QAAA,EAAuB;AAC/C,IAAA,OAAO,EAAE,MAAA,EAAQ,SAAA,EAAW,aAAA,EAAe,EAAA,EAAI,MAAM,oBAAA,EAAqB;AAAA,EAC9E;AACJ,CAAA;AAKO,IAAM,qBAAA,GAAyC;AAAA,EAClD,IAAA,EAAM,oBAAA;AAAA,EACN,WAAA,EAAa,gEAAA;AAAA,EACb,UAAA,EAAY;AAAA,IACR,IAAA,EAAM,QAAA;AAAA,IACN,UAAA,EAAY;AAAA,MACR,GAAA,EAAK,EAAE,IAAA,EAAM,QAAA,EAAU,aAAa,mBAAA,EAAoB;AAAA,MACxD,YAAA,EAAc,EAAE,IAAA,EAAM,QAAA,EAAU,aAAa,4BAAA;AAA6B,KAC9E;AAAA,IACA,QAAA,EAAU,CAAC,KAAK;AAAA,GACpB;AAAA,EACA,MAAM,OAAA,CAAQ,MAAA,EAAa,OAAA,EAAsB;AAC7C,IAAA,IAAI,CAAC,OAAA,CAAQ,WAAA,EAAa,MAAM,IAAI,MAAM,uCAAuC,CAAA;AACjF,IAAA,MAAM,OAAO,MAAM,OAAA,CAAQ,WAAA,CAAY,QAAA,CAAS,OAAO,GAAG,CAAA;AAC1D,IAAA,IAAI,CAAC,MAAM,MAAM,IAAI,MAAM,CAAA,oBAAA,EAAuB,MAAA,CAAO,GAAG,CAAA,CAAE,CAAA;AAK9D,IAAA,OAAO,EAAE,MAAA,EAAQ,SAAA,EAAW,IAAA,EAAM,oCAAA,EAAqC;AAAA,EAC3E;AACJ,CAAA;;;AC7LO,IAAM,iBAAN,MAAqB;AAAA,EAChB,cAAA;AAAA,EACA,YAAA;AAAA,EACA,aAAA;AAAA,EACA,OAAA;AAAA,EACA,OAAA;AAAA,EACA,MAAA;AAAA,EACA,UAAA,GAAqB,CAAA;AAAA,EACrB,MAAA;AAAA,EAER,YAAY,MAAA,EAAuB;AAC/B,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AACd,IAAA,IAAA,CAAK,UAAU,MAAA,CAAO,OAAA;AACtB,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA,CAAO,MAAA,IAAU,IAAI,aAAA,EAAc;AACjD,IAAA,IAAA,CAAK,cAAA,GAAiB,IAAI,cAAA,EAAe;AACzC,IAAA,IAAA,CAAK,eAAe,IAAI,YAAA,CAAa,MAAA,CAAO,KAAA,IAAS,EAAE,CAAA;AACvD,IAAA,IAAA,CAAK,gBAAgB,IAAI,aAAA,CAAc,MAAA,CAAO,MAAA,IAAU,EAAE,CAAA;AAE1D,IAAA,KAAA,MAAW,QAAA,IAAY,MAAA,CAAO,qBAAA,IAAyB,EAAC,EAAG;AACvD,MAAA,IAAA,CAAK,cAAA,CAAe,iBAAiB,QAAQ,CAAA;AAAA,IACjD;AAGA,IAAA,IAAI,OAAO,WAAA,EAAa;AACpB,MAAA,IAAA,CAAK,YAAA,CAAa,SAAS,aAAa,CAAA;AACxC,MAAA,IAAA,CAAK,YAAA,CAAa,SAAS,eAAe,CAAA;AAC1C,MAAA,IAAA,CAAK,YAAA,CAAa,SAAS,cAAc,CAAA;AACzC,MAAA,IAAA,CAAK,YAAA,CAAa,SAAS,eAAe,CAAA;AAC1C,MAAA,IAAA,CAAK,YAAA,CAAa,SAAS,kBAAkB,CAAA;AAC7C,MAAA,IAAA,CAAK,YAAA,CAAa,SAAS,mBAAmB,CAAA;AAC9C,MAAA,IAAA,CAAK,YAAA,CAAa,SAAS,oBAAoB,CAAA;AAC/C,MAAA,IAAA,CAAK,YAAA,CAAa,SAAS,qBAAqB,CAAA;AAAA,IACpD;AAEA,IAAA,IAAA,CAAK,OAAA,GAAU;AAAA,MACX,YAAA,EAAc,OAAO,YAAA,IAAgB,EAAA;AAAA,MACrC,UAAA,EAAY,EAAA;AAAA,MACZ,OAAO,EAAC;AAAA,MACR,UAAA,EAAY,CAAA;AAAA,MACZ,WAAW,MAAA,CAAO,SAAA;AAAA,MAClB,UAAU;AAAC,KACf;AAAA,EACJ;AAAA,EAEA,UAAA,GAA4B;AACxB,IAAA,OAAO,EAAE,GAAG,IAAA,CAAK,OAAA,EAAQ;AAAA,EAC7B;AAAA,EAEA,UAAA,GAAa;AACT,IAAA,OAAO,CAAC,GAAG,IAAA,CAAK,OAAA,CAAQ,KAAK,CAAA;AAAA,EACjC;AAAA,EAEA,MAAM,IAAI,WAAA,EAAuD;AAC7D,IAAA,IAAA,CAAK,MAAA,CAAO,KAAK,CAAA,wBAAA,CAAA,EAA4B;AAAA,MACzC,KAAA,EAAO,KAAK,MAAA,CAAO,KAAA;AAAA,MACnB,OAAA,EAAS,KAAA,CAAM,OAAA,CAAQ,WAAW,IAAI,sBAAA,GAAyB;AAAA,KAClE,CAAA;AAGD,IAAA,IAAA,CAAK,OAAA,CAAQ,MAAM,IAAA,CAAK;AAAA,MACpB,IAAA,EAAM,MAAA;AAAA,MACN,OAAA,EAAS,WAAA;AAAA,MACT,UAAA,EAAY,KAAA,CAAM,OAAA,CAAQ,WAAW,CAAA,GAAI,WAAA,CAAY,MAAA,GAAS,EAAA,GAAK,IAAA,CAAK,OAAA,CAAQ,cAAA,CAAe,WAAW,CAAA;AAAA,MAC1G,SAAA,EAAW,IAAA,CAAK,OAAA,CAAQ,KAAA,CAAM,MAAA;AAAA,MAC9B,UAAA,EAAY;AAAA,KACf,CAAA;AAED,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,MAAA,CAAO,aAAA,IAAiB,EAAA;AAC5C,IAAA,IAAA,CAAK,UAAA,GAAa,CAAA;AAGlB,IAAA,OAAO,IAAA,CAAK,aAAa,MAAA,EAAQ;AAC7B,MAAA,IAAA,CAAK,UAAA,EAAA;AACL,MAAA,IAAA,CAAK,OAAO,KAAA,CAAM,CAAA,gBAAA,EAAmB,KAAK,UAAU,CAAA,CAAA,EAAI,MAAM,CAAA,CAAE,CAAA;AAGhE,MAAA,IAAA,CAAK,UAAU,MAAM,IAAA,CAAK,cAAA,CAAe,OAAA,CAAQ,KAAK,OAAO,CAAA;AAG7D,MAAA,MAAM,QAAA,GAAW,IAAA,CAAK,OAAA,CAAQ,KAAA,CAAM,IAAI,CAAA,CAAA,MAAM;AAAA,QAC1C,MAAM,CAAA,CAAE,IAAA;AAAA,QACR,SAAS,CAAA,CAAE,OAAA;AAAA,QACX,GAAI,CAAA,CAAE,IAAA,KAAS,MAAA,IAAU,CAAA,CAAE,cAAc,CAAC,CAAA,GAAI,EAAE,IAAA,EAAM,EAAE,WAAA,CAAY,CAAC,CAAA,CAAE,UAAA,KAAe,EAAC;AAAA,QACvF,GAAI,CAAA,CAAE,IAAA,KAAS,WAAA,IAAe,CAAA,CAAE,SAAA,GAAY,EAAE,SAAA,EAAW,CAAA,CAAE,SAAA,EAAU,GAAI;AAAC,OAC9E,CAAE,CAAA;AAGF,MAAA,IAAI,gBAAA,GAAmB,IAAA,CAAK,OAAA,CAAQ,YAAA,IAAgB,EAAA;AACpD,MAAA,MAAM,cAAA,GAAiB,IAAA,CAAK,aAAA,CAAc,mBAAA,CAAoB,eAAe,CAAA;AAC7E,MAAA,IAAI,cAAA,EAAgB;AAChB,QAAA,gBAAA,IAAoB,MAAA,GAAS,cAAA;AAAA,MACjC;AACA,MAAA,IAAI,gBAAA,CAAiB,MAAK,EAAG;AACzB,QAAA,QAAA,CAAS,OAAA,CAAQ,EAAE,IAAA,EAAM,QAAA,EAAU,SAAS,gBAAA,CAAiB,IAAA,IAAQ,CAAA;AAAA,MACzE;AAGA,MAAA,IAAA,CAAK,OAAO,KAAA,CAAM,CAAA,0BAAA,EAA6B,IAAA,CAAK,OAAA,CAAQ,IAAI,CAAA,IAAA,CAAM,CAAA;AACtE,MAAA,IAAI,QAAA;AACJ,MAAA,IAAI;AACA,QAAA,QAAA,GAAW,MAAM,IAAA,CAAK,OAAA,CAAQ,QAAA,CAAS;AAAA,UACnC,KAAA,EAAO,KAAK,MAAA,CAAO,KAAA;AAAA,UACnB,QAAA;AAAA,UACA,KAAA,EAAO,IAAA,CAAK,YAAA,CAAa,MAAA,EAAO;AAAA,UAChC,SAAA,EAAW;AAAA;AAAA,SACd,CAAA;AAAA,MACL,SAAS,GAAA,EAAU;AACf,QAAA,MAAM,QAAA,GAAW,GAAA,CAAI,OAAA,GAAU,EAAE,OAAA,EAAS,GAAA,CAAI,OAAA,EAAS,KAAA,EAAO,GAAA,CAAI,KAAA,EAAM,GAAI,EAAC;AAC7E,QAAA,IAAA,CAAK,OAAO,KAAA,CAAM,CAAA,sBAAA,EAAyB,GAAA,CAAI,OAAO,IAAI,QAAQ,CAAA;AAClE,QAAA,MAAM,GAAA;AAAA,MACV;AAGA,MAAA,IAAI,QAAA,CAAS,YAAA,KAAiB,WAAA,IAAe,QAAA,CAAS,SAAA,EAAW;AAC7D,QAAA,IAAA,CAAK,OAAO,IAAA,CAAK,CAAA,oBAAA,EAAuB,QAAA,CAAS,SAAA,CAAU,MAAM,CAAA,WAAA,CAAA,EAAe;AAAA,UAC5E,OAAO,QAAA,CAAS,SAAA,CAAU,GAAA,CAAI,CAAA,EAAA,KAAM,GAAG,IAAI;AAAA,SAC9C,CAAA;AAED,QAAA,MAAM,cAAc,EAAC;AACrB,QAAA,KAAA,MAAW,EAAA,IAAM,SAAS,SAAA,EAAW;AACjC,UAAA,IAAI;AACA,YAAA,MAAM,IAAA,GAAO,IAAA,CAAK,KAAA,CAAM,EAAA,CAAG,SAAS,CAAA;AACpC,YAAA,MAAM,cAAA,GAAsB;AAAA,cACxB,SAAA,EAAW,SAAA;AAAA,cACX,SAAA,EAAW,IAAA,CAAK,OAAA,CAAQ,KAAA,CAAM,MAAA;AAAA,cAC9B,QAAQ,IAAA,CAAK,MAAA;AAAA,cACb,WAAA,EAAa,KAAK,MAAA,CAAO,WAAA;AAAA,cACzB,UAAA,EAAY,KAAK,OAAA,CAAQ;AAAA,aAC7B;AACA,YAAA,IAAI,IAAA,CAAK,OAAO,UAAA,EAAY;AACxB,cAAA,cAAA,CAAe,UAAA,GAAa,KAAK,MAAA,CAAO,UAAA;AAAA,YAC5C;AAEA,YAAA,IAAA,CAAK,MAAA,CAAO,KAAA,CAAM,CAAA,gBAAA,EAAmB,EAAA,CAAG,IAAI,IAAI,EAAE,IAAA,EAAM,EAAA,CAAG,SAAA,EAAW,CAAA;AACtE,YAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,YAAA,CAAa,QAAQ,EAAA,CAAG,IAAA,EAAM,MAAM,cAAc,CAAA;AAC5E,YAAA,IAAA,CAAK,MAAA,CAAO,KAAA,CAAM,CAAA,KAAA,EAAQ,EAAA,CAAG,IAAI,CAAA,sBAAA,CAAwB,CAAA;AAEzD,YAAA,IAAI,WAAA,GAAc,MAAA;AAClB,YAAA,IAAI,OAAO,MAAA,KAAW,QAAA,IAAY,MAAA,KAAW,IAAA,EAAM;AAC/C,cAAA,MAAM,MAAA,GAAS,MAAA;AACf,cAAA,IAAI,MAAA,CAAO,MAAA,KAAW,SAAA,IAAa,MAAA,CAAO,kBAAkB,KAAA,CAAA,EAAW;AACnE,gBAAA,IAAA,CAAK,OAAA,CAAQ,aAAa,MAAA,CAAO,aAAA;AACjC,gBAAA,WAAA,GAAc,OAAO,IAAA,IAAQ,oBAAA;AAAA,cACjC;AAAA,YACJ;AAGA,YAAA,IAAI,OAAA,GAAU,IAAA,CAAK,SAAA,CAAU,WAAW,CAAA;AACxC,YAAA,MAAM,UAAA,GAAa,IAAA,CAAK,OAAA,CAAQ,cAAA,CAAe,OAAO,CAAA;AACtD,YAAA,IAAI,KAAK,MAAA,CAAO,gBAAA,IAAoB,UAAA,GAAa,IAAA,CAAK,OAAO,gBAAA,EAAkB;AAC3E,cAAA,OAAA,GAAU,QAAQ,KAAA,CAAM,CAAA,EAAG,KAAK,MAAA,CAAO,gBAAA,GAAmB,CAAC,CAAA,GAAI,yCAAA;AAAA,YACnE;AAEA,YAAA,WAAA,CAAY,KAAK,EAAE,UAAA,EAAY,EAAA,CAAG,EAAA,EAAI,SAAS,CAAA;AAAA,UACnD,SAAS,CAAA,EAAQ;AACb,YAAA,IAAA,CAAK,MAAA,CAAO,MAAM,CAAA,KAAA,EAAQ,EAAA,CAAG,IAAI,CAAA,mBAAA,EAAsB,CAAA,CAAE,OAAO,CAAA,CAAA,EAAI;AAAA,cAChE,OAAA,EAAS,CAAA,CAAE,OAAA,IAAW,CAAA,KAAA,EAAQ,GAAG,IAAI,CAAA,4BAAA,CAAA;AAAA,cACrC,KAAA,EAAO,CAAA,CAAE,KAAA,IAAS,CAAC,yEAAyE;AAAA,aAC/F,CAAA;AACD,YAAA,WAAA,CAAY,IAAA,CAAK,EAAE,UAAA,EAAY,EAAA,CAAG,EAAA,EAAI,SAAS,CAAA,OAAA,EAAU,CAAA,CAAE,OAAO,CAAA,CAAA,EAAI,CAAA;AAAA,UAC1E;AAAA,QACJ;AAGA,QAAA,MAAM,aAAA,GAAsB;AAAA,UACxB,IAAA,EAAM,WAAA;AAAA,UACN,OAAA,EAAS,SAAS,OAAA,IAAW,EAAA;AAAA,UAC7B,YAAY,IAAA,CAAK,OAAA,CAAQ,eAAe,QAAA,CAAS,OAAA,IAAW,EAAE,CAAA,GAAI,EAAA;AAAA;AAAA,UAClE,SAAA,EAAW,IAAA,CAAK,OAAA,CAAQ,KAAA,CAAM,MAAA;AAAA,UAC9B,UAAA,EAAY,KAAA;AAAA,UACZ,WAAW,QAAA,CAAS;AAAA,SACxB;AACA,QAAA,IAAA,CAAK,OAAA,CAAQ,KAAA,CAAM,IAAA,CAAK,aAAa,CAAA;AACrC,QAAA,IAAI,KAAK,MAAA,CAAO,MAAA,EAAQ,IAAA,CAAK,MAAA,CAAO,OAAO,aAAa,CAAA;AAGxD,QAAA,KAAA,MAAW,OAAO,WAAA,EAAa;AAC3B,UAAA,MAAM,QAAA,GAAiB;AAAA,YACnB,IAAA,EAAM,MAAA;AAAA,YACN,SAAS,GAAA,CAAI,OAAA;AAAA,YACb,UAAA,EAAY,IAAA,CAAK,OAAA,CAAQ,cAAA,CAAe,IAAI,OAAO,CAAA;AAAA,YACnD,SAAA,EAAW,IAAA,CAAK,OAAA,CAAQ,KAAA,CAAM,MAAA;AAAA,YAC9B,UAAA,EAAY,KAAA;AAAA,YACZ,WAAA,EAAa,CAAC,GAAG;AAAA,WACrB;AACA,UAAA,IAAA,CAAK,OAAA,CAAQ,KAAA,CAAM,IAAA,CAAK,QAAQ,CAAA;AAChC,UAAA,IAAI,KAAK,MAAA,CAAO,MAAA,EAAQ,IAAA,CAAK,MAAA,CAAO,OAAO,QAAQ,CAAA;AAAA,QACvD;AAGA,QAAA;AAAA,MACJ;AAGA,MAAA,IAAI,QAAA,CAAS,iBAAiB,MAAA,IAAU,QAAA,CAAS,iBAAiB,YAAA,IAAgB,QAAA,CAAS,iBAAiB,OAAA,EAAS;AACjH,QAAA,MAAM,SAAA,GAAkB;AAAA,UACpB,IAAA,EAAM,WAAA;AAAA,UACN,SAAS,QAAA,CAAS,OAAA;AAAA,UAClB,UAAA,EAAY,SAAS,KAAA,CAAM,gBAAA;AAAA,UAC3B,SAAA,EAAW,IAAA,CAAK,OAAA,CAAQ,KAAA,CAAM,MAAA;AAAA,UAC9B,UAAA,EAAY;AAAA,SAChB;AACA,QAAA,IAAA,CAAK,OAAA,CAAQ,KAAA,CAAM,IAAA,CAAK,SAAS,CAAA;AACjC,QAAA,IAAI,KAAK,MAAA,CAAO,MAAA,EAAQ,IAAA,CAAK,MAAA,CAAO,OAAO,SAAS,CAAA;AACpD,QAAA,IAAA,CAAK,MAAA,CAAO,KAAK,CAAA,0BAAA,CAA4B,CAAA;AAC7C,QAAA,OAAO,QAAA,CAAS,OAAA;AAAA,MACpB;AAAA,IACJ;AAEA,IAAA,MAAM,SAAA,GAAY,IAAI,wBAAA,CAAyB,CAAA,2BAAA,EAA8B,MAAM,CAAA,CAAE,CAAA;AACrF,IAAA,IAAA,CAAK,MAAA,CAAO,KAAA,CAAM,SAAA,CAAU,OAAA,EAAS;AAAA,MACjC,OAAA,EAAS,gFAAA;AAAA,MACT,KAAA,EAAO,CAAC,gDAAA,EAAkD,kDAAkD;AAAA,KAC/G,CAAA;AACD,IAAA,MAAM,SAAA;AAAA,EACV;AACJ;;;AClOO,IAAM,wBAAN,MAA8D;AAAA,EAEjE,QAAA,CAAS,QAAA,EAAkB,IAAA,EAAuB,OAAA,EAA0C;AACxF,IAAA,MAAM,SAAS,QAAA,CAAS,MAAA;AAExB,IAAA,MAAM,kBAAkB,MAAA,GAAS,CAAA;AAEjC,IAAA,IAAI,SAAA,GAAiD,OAAA;AACrD,IAAA,IAAI,eAAA,GAAkB,KAAM,SAAA,GAAY,WAAA;AAAA,SAAA,IAC/B,eAAA,GAAkB,KAAK,SAAA,GAAY,OAAA;AAAA,SAAA,IACnC,eAAA,GAAkB,KAAK,SAAA,GAAY,QAAA;AAE5C,IAAA,OAAO;AAAA,MACH,cAAA,EAAgB,CAAA;AAAA,MAChB,SAAA;AAAA,MACA,cAAA,EAAgB,SAAA,KAAc,OAAA,IAAW,SAAA,KAAc,WAAA;AAAA,MACvD,kBAAA,EAAoB,GAAA;AAAA,MACpB,QAAA,EAAU,IAAA;AAAA,MACV,iBAAA,EAAmB,KAAA;AAAA,MACnB,aAAA,EAAe,QAAA,CAAS,WAAA,EAAY,CAAE,SAAS,OAAO,CAAA;AAAA,MACtD,eAAA,EAAiB;AAAA,KACrB;AAAA,EACJ;AAAA,EAEA,QAAA,CAAS,UAAkB,UAAA,EAA4C;AACnE,IAAA,IAAI,CAAC,UAAA,CAAW,cAAA,IAAkB,UAAA,CAAW,aAAA,EAAe;AACxD,MAAA,OAAO,QAAA;AAAA,IACX;AAGA,IAAA,IAAI,QAAA,CAAS,SAAS,GAAA,EAAM;AACxB,MAAA,OAAO,QAAA,CAAS,SAAA,CAAU,CAAA,EAAG,GAAI,CAAA,GAAI,qCAAA;AAAA,IACzC;AAEA,IAAA,OAAO,QAAA;AAAA,EACX;AACJ;;;AClCO,IAAM,eAAN,MAAmB;AAAA,EACtB,YAAoB,IAAA,EAAY;AAAZ,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AAAA,EAAc;AAAA,EAElC,WAAW,MAAA,EAAwB;AAE/B,IAAA,MAAM,UAAA,GAAa,CAAA;AAAA,EAAmB,IAAA,CAAK,KAAK,SAAS;;AAAA;AAAA,EAA0B,IAAA,CAAK,IAAA,CAAK,eAAA,CAAgB,GAAA,CAAI,CAAA,CAAA,KAAK,CAAA,EAAA,EAAK,CAAC,CAAA,CAAE,CAAA,CAAE,IAAA,CAAK,IAAI,CAAC;AAAA,eAAA,CAAA;AAE1I,IAAA,IAAI,IAAA,CAAK,IAAA,CAAK,iBAAA,KAAsB,eAAA,EAAiB;AACjD,MAAA,OAAO,GAAG,MAAM;;AAAA,EAAO,UAAU,CAAA,CAAA;AAAA,IACrC;AAEA,IAAA,OAAO,MAAA;AAAA,EACX;AACJ;;;ACNO,IAAM,sBAAN,MAA0B;AAAA,EAC7B,YAAoB,IAAA,EAAwB;AAAxB,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AAAA,EAA0B;AAAA,EAE9C,mBAAA,GAA8B;AAC1B,IAAA,IAAI,MAAA,GAAS,CAAA,+BAAA,EAA6B,IAAA,CAAK,IAAA,CAAK,gBAAA,GAAmB,CAAC,CAAA,CAAA,EAAI,IAAA,CAAK,IAAA,CAAK,KAAA,CAAM,MAAM,CAAA;AAAA,CAAA;AAClG,IAAA,KAAA,MAAW,IAAA,IAAQ,IAAA,CAAK,IAAA,CAAK,KAAA,EAAO;AAChC,MAAA,MAAM,OAAA,GAAU,CAAC,MAAA,KAAmB;AAChC,QAAA,QAAQ,MAAA;AAAQ,UACZ,KAAK,MAAA;AAAQ,YAAA,OAAO,QAAA;AAAA,UACpB,KAAK,SAAA;AAAW,YAAA,OAAO,QAAA;AAAA,UACvB,KAAK,QAAA;AAAU,YAAA,OAAO,QAAA;AAAA,UACtB,KAAK,SAAA;AAAW,YAAA,OAAO,QAAA;AAAA,UACvB;AAAS,YAAA,OAAO,QAAA;AAAA;AACpB,MACJ,CAAA;AAEA,MAAA,MAAM,UAAA,GAAa,IAAA,CAAK,MAAA,KAAW,SAAA,IAAa,IAAA,CAAK,UAAU,MAAA,GAAS,CAAA,GAClE,CAAA,gBAAA,EAAmB,IAAA,CAAK,SAAA,CAAU,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,GAC5C,IAAA,CAAK,MAAA,CAAO,MAAA,CAAO,CAAC,CAAA,CAAE,WAAA,EAAY,GAAI,IAAA,CAAK,MAAA,CAAO,KAAA,CAAM,CAAC,CAAA;AAE/D,MAAA,MAAA,IAAU,CAAA,EAAG,OAAA,CAAQ,IAAA,CAAK,MAAM,CAAC,CAAA,MAAA,EAAS,IAAA,CAAK,MAAM,CAAA,EAAA,EAAK,IAAA,CAAK,QAAQ,CAAA,GAAA,EAAM,UAAU;AAAA,CAAA;AAAA,IAC3F;AACA,IAAA,OAAO,MAAA;AAAA,EACX;AACJ;;;ACxCO,IAAM,cAAN,MAAkB;AAAA,EAGrB,WAAA,CAAoB,WAAmB,EAAA,EAAI;AAAvB,IAAA,IAAA,CAAA,QAAA,GAAA,QAAA;AAAA,EAAyB;AAAA,EAFrC,aAAA,GAAwB,CAAA;AAAA,EAIhC,SAAA,CAAU,QAAgB,CAAA,EAAS;AAC/B,IAAA,IAAA,CAAK,aAAA,IAAiB,KAAA;AAAA,EAC1B;AAAA,EAEA,IAAI,KAAA,GAAgB;AAChB,IAAA,OAAO,IAAA,CAAK,aAAA;AAAA,EAChB;AAAA,EAEA,YAAA,GAAwB;AACpB,IAAA,OAAO,IAAA,CAAK,iBAAiB,IAAA,CAAK,QAAA;AAAA,EACtC;AAAA,EAEA,yBAAA,GAAoC;AAChC,IAAA,OAAO,CAAA,cAAA,EAAiB,IAAA,CAAK,aAAa,CAAA,CAAA,EAAI,KAAK,QAAQ,CAAA;AAAA,6DAAA,CAAA;AAAA,EAC/D;AACJ;;;ACpBO,IAAM,yBAAN,MAA6B;AAAA,EAChC,OAAO,oBAAA,GAA+B;AAClC,IAAA,OAAO,CAAA;;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA,kCAAA,CAAA;AAAA,EAaX;AAAA,EAEA,OAAO,kBAAkB,QAAA,EAA2B;AAEhD,IAAA,IAAI,CAAC,QAAA,CAAS,QAAA,CAAS,iBAAiB,GAAG,OAAO,KAAA;AAClD,IAAA,IAAI,CAAC,QAAA,CAAS,QAAA,CAAS,2BAA2B,GAAG,OAAO,KAAA;AAC5D,IAAA,IAAI,CAAC,QAAA,CAAS,QAAA,CAAS,qBAAqB,GAAG,OAAO,KAAA;AACtD,IAAA,IAAI,CAAC,QAAA,CAAS,QAAA,CAAS,kBAAkB,GAAG,OAAO,KAAA;AACnD,IAAA,IAAI,CAAC,QAAA,CAAS,QAAA,CAAS,YAAY,GAAG,OAAO,KAAA;AAC7C,IAAA,OAAO,IAAA;AAAA,EACX;AACJ","file":"index.js","sourcesContent":["/**\n * Base class for all custom errors thrown by lemura.\n *\n * @example\n * throw new LemuraError('Something went wrong', 'UNKNOWN_ERROR');\n */\nexport class LemuraError extends Error {\n /**\n * @param message - The error message\n * @param code - The error code for programmatic handling\n * @param problem - A clear description of the problem for the end user\n * @param hints - A list of suggestions to resolve the issue\n */\n constructor(\n message: string,\n public readonly code: string,\n public readonly problem?: string,\n public readonly hints: string[] = []\n ) {\n super(message);\n this.name = 'LemuraError';\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\n/** Error thrown when context exceeds max tokens and cannot be compressed further */\nexport class LemuraContextOverflowError extends LemuraError {\n constructor(message: string) {\n super(message, 'CONTEXT_OVERFLOW');\n this.name = 'LemuraContextOverflowError';\n }\n}\n\n/** Error thrown when a requested tool is not found in the registry */\nexport class LemuraToolNotFoundError extends LemuraError {\n constructor(message: string) {\n super(message, 'TOOL_NOT_FOUND');\n this.name = 'LemuraToolNotFoundError';\n }\n}\n\n/** Error thrown when an adapter encounters an API or formatting issue */\nexport class LemuraAdapterError extends LemuraError {\n constructor(\n message: string,\n code = 'ADAPTER_ERROR',\n public cause?: any,\n problem?: string,\n hints: string[] = []\n ) {\n super(message, code, problem, hints);\n this.name = 'LemuraAdapterError';\n }\n}\n\n/** Error thrown when a skill cannot be parsed or injected */\nexport class LemuraSkillInjectionError extends LemuraError {\n constructor(message: string) {\n super(message, 'SKILL_INJECTION_FAILED');\n this.name = 'LemuraSkillInjectionError';\n }\n}\n\n/** Error thrown when the ReAct loop exceeds the configured max iterations */\nexport class LemuraMaxIterationsError extends LemuraError {\n constructor(message: string) {\n super(message, 'MAX_ITERATIONS_EXCEEDED');\n this.name = 'LemuraMaxIterationsError';\n }\n}\n\n/** Error thrown when tool parameters fail JSON schema validation */\nexport class LemuraToolValidationError extends LemuraError {\n constructor(message: string) {\n super(message, 'TOOL_VALIDATION_FAILED');\n this.name = 'LemuraToolValidationError';\n }\n}\n\n/** Error thrown when a tool execute function exceeds its timeout */\nexport class LemuraToolTimeoutError extends LemuraError {\n constructor(message: string) {\n super(message, 'TOOL_TIMEOUT');\n this.name = 'LemuraToolTimeoutError';\n }\n}\n","/** Log levels supported by lemura */\nexport enum LogLevel {\n DEBUG = 0,\n INFO = 1,\n WARN = 2,\n ERROR = 3,\n FATAL = 4,\n}\n\n/** Severity levels for user-facing logs */\nexport type Severity = 'DEBUG' | 'INFO' | 'WARN' | 'ERROR' | 'FATAL';\n\n/** Metadata for structured logging and error reporting */\nexport interface LogMetadata {\n problem?: string;\n hints?: string[];\n severity?: Severity;\n [key: string]: unknown;\n}\n\n/**\n * Enhanced logger interface for lemura.\n * Supports structured logging with problems and hints.\n */\nexport interface ILogger {\n /** Log a debug message (trace-level details) */\n debug(message: string, metadata?: LogMetadata): void;\n /** Log an informational message */\n info(message: string, metadata?: LogMetadata): void;\n /** Log a warning */\n warn(message: string, metadata?: LogMetadata): void;\n /** Log an error */\n error(message: string, metadata?: LogMetadata): void;\n /** Log a fatal error that prevents execution */\n fatal(message: string, metadata?: LogMetadata): void;\n\n /** Set the minimum log level to display */\n setLevel(level: LogLevel): void;\n}\n","import {\n IProviderAdapter,\n CompletionRequest,\n CompletionResponse,\n CompletionChunk,\n TranscriptionRequest,\n TranscriptionResponse,\n SynthesisRequest,\n AudioChunk,\n VisionRequest,\n VisionResponse,\n ImageGenRequest,\n ImageGenResponse,\n ModelInfo,\n LemuraAdapterError,\n} from '../types/index.js';\n\nexport interface RetryConfig {\n maxRetries: number;\n baseDelayMs: number;\n}\n\nexport interface OpenAICompatibleAdapterConfig {\n baseUrl?: string;\n apiKey?: string;\n defaultModel?: string;\n defaultHeaders?: Record<string, string>;\n timeout?: number;\n retry?: RetryConfig;\n}\n\n/**\n * Reference implementation of an OpenAI-compatible provider adapter.\n */\nexport class OpenAICompatibleAdapter implements IProviderAdapter {\n readonly name = 'openai_compatible';\n readonly version = '1.0.0';\n\n private baseUrl: string;\n private apiKey: string;\n private defaultModel: string;\n private defaultHeaders: Record<string, string>;\n private timeoutMs: number;\n private retryConfig: RetryConfig;\n\n constructor(config: OpenAICompatibleAdapterConfig = {}) {\n this.baseUrl = (\n config.baseUrl ??\n process.env.LEMURA_BASE_URL ??\n process.env.OPENAI_BASE_URL ??\n 'https://api.openai.com/v1'\n ).replace(/\\/$/, '');\n\n this.apiKey = config.apiKey ?? process.env.LEMURA_API_KEY ?? process.env.OPENAI_API_KEY ?? '';\n this.defaultModel = config.defaultModel ?? process.env.LEMURA_MODEL ?? process.env.OPENAI_MODEL ?? 'gpt-3.5-turbo';\n\n this.defaultHeaders = config.defaultHeaders || {};\n this.timeoutMs = config.timeout || 30000;\n this.retryConfig = config.retry || { maxRetries: 2, baseDelayMs: 1000 };\n }\n\n private async fetchWithRetry(url: string, init: RequestInit): Promise<Response> {\n let attempts = 0;\n while (attempts <= this.retryConfig.maxRetries) {\n try {\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), this.timeoutMs);\n\n const headers: Record<string, string> = {\n 'Authorization': `Bearer ${this.apiKey}`,\n ...this.defaultHeaders,\n };\n\n if (init.headers) {\n Object.assign(headers, init.headers);\n }\n\n // Don't set Content-Type if it's 'unset' (for FormData)\n if (headers['Content-Type'] === 'unset') {\n delete headers['Content-Type'];\n } else if (!headers['Content-Type']) {\n headers['Content-Type'] = 'application/json';\n }\n\n const response = await fetch(url, {\n ...init,\n signal: controller.signal,\n headers,\n });\n\n clearTimeout(timeoutId);\n\n if (response.ok) return response;\n\n // Retry on 429 and 503\n if ((response.status === 429 || response.status === 503) && attempts < this.retryConfig.maxRetries) {\n attempts++;\n const delay = this.retryConfig.baseDelayMs * Math.pow(2, attempts - 1);\n await new Promise(resolve => setTimeout(resolve, delay));\n continue;\n }\n\n const errorText = await response.text().catch(() => '');\n let problem = 'The server replied with an error during the API call.';\n let hints = ['Check the API documentation for the provider you are using.'];\n\n if (response.status === 401) {\n problem = 'Authentication failed. The API key is invalid or missing.';\n hints = [\n 'Ensure your API key is correctly configured in the adapter or environment variables.',\n 'Check if the API key has expired or been revoked.'\n ];\n } else if (response.status === 404) {\n problem = 'The requested resource or model was not found.';\n hints = [\n 'Verify that the baseUrl is correct (e.g., https://api.openai.com/v1).',\n 'Check if the model name is correct and available for your account.',\n 'Ensure you are not appending extra paths to the baseUrl.'\n ];\n } else if (response.status === 429) {\n problem = 'Rate limit exceeded.';\n hints = [\n 'Wait a few seconds before retrying.',\n 'Check your usage limits and billing status on the provider dashboard.'\n ];\n }\n\n throw new LemuraAdapterError(\n `HTTP ${response.status}: ${errorText}`,\n 'HTTP_ERROR',\n { status: response.status, body: errorText },\n problem,\n hints\n );\n } catch (err) {\n if (err instanceof LemuraAdapterError) throw err;\n\n if (attempts < this.retryConfig.maxRetries) {\n attempts++;\n const delay = this.retryConfig.baseDelayMs * Math.pow(2, attempts - 1);\n await new Promise(resolve => setTimeout(resolve, delay));\n continue;\n }\n\n throw new LemuraAdapterError(\n `Network request failed: ${err instanceof Error ? err.message : String(err)}`,\n 'NETWORK_ERROR',\n err,\n 'A network error occurred while connecting to the provider.',\n [\n 'Check your internet connection.',\n 'Verify that the baseUrl is reachable from your network.',\n 'Check for proxy or firewall settings that might block the request.'\n ]\n );\n }\n }\n throw new LemuraAdapterError(\n 'Max retries exceeded',\n 'MAX_RETRIES',\n undefined,\n 'The request failed after multiple retry attempts.',\n ['Check if the provider service is down or experiencing high load.']\n );\n }\n\n private mapFinishReason(reason: string | null): CompletionResponse['finishReason'] {\n if (!reason) return 'stop';\n const r = reason.toLowerCase();\n if (r === 'tool_calls' || r === 'tool_call') return 'tool_call';\n if (r === 'length' || r === 'max_tokens') return 'max_tokens';\n if (r === 'content_filter' || r === 'error') return 'error';\n return 'stop';\n }\n\n private buildPayload(request: CompletionRequest): unknown {\n const payload: Record<string, unknown> = {\n model: request.model || this.defaultModel,\n messages: request.messages,\n };\n if (request.maxTokens !== undefined) payload.max_tokens = request.maxTokens;\n if (request.temperature !== undefined) payload.temperature = request.temperature;\n if (request.stopSequences?.length) payload.stop = request.stopSequences;\n if (request.stream) payload.stream = true;\n\n if (request.tools && request.tools.length > 0) {\n payload.tools = request.tools.map(t => ({\n type: 'function',\n function: {\n name: t.name,\n description: t.description,\n parameters: t.parameters,\n }\n }));\n }\n\n return payload;\n }\n\n async complete(request: CompletionRequest): Promise<CompletionResponse> {\n const payload = this.buildPayload(request);\n\n const response = await this.fetchWithRetry(`${this.baseUrl}/chat/completions`, {\n method: 'POST',\n body: JSON.stringify(payload)\n });\n\n const data = await response.json();\n const choice = data.choices?.[0];\n if (!choice) {\n throw new LemuraAdapterError('Invalid response format: missing choices', 'INVALID_RESPONSE', data);\n }\n\n const message = choice.message;\n let toolCalls;\n\n if (message.tool_calls && message.tool_calls.length > 0) {\n toolCalls = message.tool_calls.map((tc: any) => ({\n id: tc.id,\n name: tc.function.name,\n arguments: tc.function.arguments,\n }));\n }\n\n return {\n content: message.content || '',\n toolCalls,\n finishReason: this.mapFinishReason(choice.finish_reason),\n usage: {\n promptTokens: data.usage?.prompt_tokens || 0,\n completionTokens: data.usage?.completion_tokens || 0,\n totalTokens: data.usage?.total_tokens || 0,\n },\n rawResponse: data\n };\n }\n\n async *stream(request: CompletionRequest): AsyncIterable<CompletionChunk> {\n const payload = this.buildPayload({ ...request, stream: true });\n\n const response = await this.fetchWithRetry(`${this.baseUrl}/chat/completions`, {\n method: 'POST',\n body: JSON.stringify(payload)\n });\n\n if (!response.body) {\n throw new LemuraAdapterError('Response body is null', 'STREAM_ERROR');\n }\n\n const reader = response.body.getReader();\n const decoder = new TextDecoder('utf-8');\n let buffer = '';\n\n try {\n while (true) {\n const { value, done } = await reader.read();\n if (done) break;\n\n buffer += decoder.decode(value, { stream: true });\n const lines = buffer.split('\\n');\n buffer = lines.pop() || '';\n\n for (const line of lines) {\n const trimmed = line.trim();\n if (!trimmed || trimmed === 'data: [DONE]') continue;\n if (trimmed.startsWith('data: ')) {\n const jsonStr = trimmed.slice(6);\n let data;\n try {\n data = JSON.parse(jsonStr);\n } catch (err) {\n continue;\n }\n\n const choice = data.choices?.[0];\n if (!choice) continue;\n\n const delta = choice.delta?.content || '';\n const toolCallBlock = choice.delta?.tool_calls?.[0];\n let toolCallDelta;\n\n if (toolCallBlock) {\n toolCallDelta = {\n id: toolCallBlock.id,\n name: toolCallBlock.function?.name,\n arguments: toolCallBlock.function?.arguments,\n };\n }\n\n const isFinished = choice.finish_reason !== null && choice.finish_reason !== undefined;\n\n yield {\n delta,\n finished: isFinished,\n ...(toolCallDelta && { toolCallDelta }),\n ...(isFinished && { finishReason: this.mapFinishReason(choice.finish_reason) })\n };\n }\n }\n }\n } finally {\n reader.releaseLock();\n }\n }\n\n estimateTokens(text: string): number {\n return Math.ceil(text.length / 4);\n }\n\n getModelInfo(): ModelInfo {\n return {\n supportsVision: true,\n supportsTools: true,\n contextWindow: 128000\n };\n }\n\n async healthCheck(): Promise<boolean> {\n try {\n const resp = await this.fetchWithRetry(`${this.baseUrl}/models`, { method: 'GET' });\n return resp.ok;\n } catch {\n return false;\n }\n }\n\n async transcribe(request: TranscriptionRequest): Promise<TranscriptionResponse> {\n const binaryString = atob(request.audioBase64);\n const bytes = new Uint8Array(binaryString.length);\n for (let i = 0; i < binaryString.length; i++) {\n bytes[i] = binaryString.charCodeAt(i);\n }\n const blob = new Blob([bytes], { type: request.mimeType });\n const formData = new FormData();\n formData.append('file', blob, 'audio.webm');\n formData.append('model', 'whisper-1');\n if (request.language) formData.append('language', request.language);\n\n const response = await this.fetchWithRetry(`${this.baseUrl}/audio/transcriptions`, {\n method: 'POST',\n body: formData,\n headers: {\n 'Content-Type': 'unset'\n }\n });\n\n const data = await response.json();\n return {\n transcript: data.text,\n confidence: 1.0, // OpenAI doesn't return confidence in standard response\n language: data.language || request.language || 'en'\n };\n }\n\n async *synthesize(request: SynthesisRequest): AsyncIterable<AudioChunk> {\n const response = await this.fetchWithRetry(`${this.baseUrl}/audio/speech`, {\n method: 'POST',\n body: JSON.stringify({\n model: 'tts-1',\n input: request.text,\n voice: request.voiceId || 'alloy',\n response_format: request.format || 'mp3'\n })\n });\n\n if (!response.body) throw new LemuraAdapterError('No response body for TTS', 'STREAM_ERROR');\n\n const reader = response.body.getReader();\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n if (value) {\n const binary = new TextDecoder('latin1').decode(value);\n yield { audioBase64: btoa(binary) };\n }\n }\n } finally {\n reader.releaseLock();\n }\n }\n\n async describeImage(request: VisionRequest): Promise<VisionResponse> {\n const payload = {\n model: this.defaultModel,\n messages: [\n {\n role: 'user',\n content: [\n { type: 'text', text: request.prompt || 'Describe this image' },\n {\n type: 'image_url',\n image_url: {\n url: `data:image/jpeg;base64,${request.imageBase64}`\n }\n }\n ]\n }\n ]\n };\n\n const response = await this.fetchWithRetry(`${this.baseUrl}/chat/completions`, {\n method: 'POST',\n body: JSON.stringify(payload)\n });\n\n const data = await response.json();\n return {\n description: data.choices[0].message.content,\n objects: [] // OpenAI doesn't return structured objects in standard vision call\n };\n }\n\n async generateImage(request: ImageGenRequest): Promise<ImageGenResponse> {\n const response = await this.fetchWithRetry(`${this.baseUrl}/images/generations`, {\n method: 'POST',\n body: JSON.stringify({\n prompt: request.prompt,\n model: 'dall-e-3',\n n: 1,\n size: request.dimensions || '1024x1024'\n })\n });\n\n const data = await response.json();\n return {\n imageUrl: data.data[0].url,\n revisedPrompt: data.data[0].revised_prompt\n };\n }\n}\n","import { ContextWindow, IContextStrategy, LemuraContextOverflowError } from '../types/index.js';\n\n/**\n * Orchestrates a stack of IContextStrategy implementations to keep the\n * token count within the maxTokens limit.\n */\nexport class ContextManager {\n private strategies: IContextStrategy[] = [];\n\n /**\n * Registers a new compression or pre-turn strategy and sorts the stack by priority.\n *\n * @param strategy - The strategy implementation to register\n */\n registerStrategy(strategy: IContextStrategy): void {\n this.strategies.push(strategy);\n this.strategies.sort((a, b) => a.priority - b.priority);\n }\n\n /**\n * Applies all registered strategies that return true for `shouldApply()`\n * until the context token count is safely below the maximum budget.\n *\n * @param context - The context window to prepare\n * @param safetyMargin - Modifier applied to maxTokens (default: 0.95 -> 95%)\n * @returns A new ContextWindow object potentially compressed\n * @throws {LemuraContextOverflowError} If the context is still over maxTokens after all strategies\n */\n async prepare(context: ContextWindow, safetyMargin = 0.95): Promise<ContextWindow> {\n let currentCtx = { ...context, turns: [...context.turns] };\n const targetTokenCount = currentCtx.maxTokens * safetyMargin;\n\n for (const strategy of this.strategies) {\n // If we are below the limit and it's not a pre-turn non-reducing strategy, skip it.\n // E.g., SummaryInjectionStrategy might still want to run.\n // But purely compression ones drop out early in our base architecture if they choose in `shouldApply`.\n if (strategy.shouldApply(currentCtx)) {\n currentCtx = await strategy.apply(currentCtx);\n }\n }\n\n if (currentCtx.tokenCount > currentCtx.maxTokens) {\n throw new LemuraContextOverflowError(\n `Context overflowed: ${currentCtx.tokenCount} tokens > ${currentCtx.maxTokens}`\n );\n }\n\n return currentCtx;\n }\n}\n","import { ContextWindow, IContextStrategy, IProviderAdapter, Turn } from '../types/index.js';\n\nexport interface SandwichCompressionConfig {\n preserveFirst: number;\n preserveLast: number;\n triggerThreshold: number; // e.g. 0.8\n}\n\n/**\n * Sandwich compression preserves the beginning and end of the conversation,\n * replacing the middle with a generated summary.\n */\nexport class SandwichCompressionStrategy implements IContextStrategy {\n readonly name = 'sandwich_compression';\n readonly priority = 20;\n\n constructor(\n private adapter: IProviderAdapter,\n private config: SandwichCompressionConfig\n ) { }\n\n shouldApply(ctx: ContextWindow): boolean {\n return (\n ctx.tokenCount >= ctx.maxTokens * this.config.triggerThreshold &&\n ctx.turns.length > this.config.preserveFirst + this.config.preserveLast\n );\n }\n\n async apply(ctx: ContextWindow): Promise<ContextWindow> {\n const { preserveFirst, preserveLast } = this.config;\n\n const head = ctx.turns.slice(0, preserveFirst);\n const tail = ctx.turns.slice(ctx.turns.length - preserveLast);\n const middle = ctx.turns.slice(preserveFirst, ctx.turns.length - preserveLast);\n\n const middleText = middle.map(t => `${t.role}: ${JSON.stringify(t.content)}`).join('\\n');\n\n const summaryResponse = await this.adapter.complete({\n model: '',\n messages: [{\n role: 'user',\n content: `Summarize the following conversation history briefly:\\n${middleText}`\n }]\n });\n\n const summaryStr = summaryResponse.content;\n\n const newCompressionSummary = ctx.compressionSummary\n ? `${ctx.compressionSummary}\\n${summaryStr}`\n : summaryStr;\n\n const summaryTurn: Turn = {\n role: 'system',\n content: `[COMPRESSED HISTORY SUMMARY]\\n${newCompressionSummary}`,\n tokenCount: this.adapter.estimateTokens(newCompressionSummary),\n turnIndex: -1,\n compressed: true,\n };\n\n const newTurns = [...head, summaryTurn, ...tail];\n const newTokenCount = newTurns.reduce((sum, t) => sum + t.tokenCount, 0) +\n this.adapter.estimateTokens(ctx.systemPrompt) +\n this.adapter.estimateTokens(ctx.scratchpad);\n\n return {\n ...ctx,\n turns: newTurns,\n tokenCount: newTokenCount,\n compressionSummary: newCompressionSummary,\n };\n }\n\n /**\n * Applies sandwich compression specifically to a Short Term Memory item's content.\n * Implements a 3-layer pipeline: Pre-Layer (encoding), Core Layer (dense summary), Post-Layer (refinement cues).\n * \n * @param content - The heavy text content to compress\n * @param instructions - Guiding instructions for the core layer summary\n * @returns The three-layer sandwich result\n */\n async compressMemoryItem(content: string, instructions: string = 'Extract the key information'): Promise<{\n preLayer: string;\n coreLayer: string;\n postLayer: string;\n }> {\n // Pre-Layer: Chunking and initial encoding\n // Here we do a naive encoding representation to signify the pre-processed chunks\n const estimatedChunks = Math.max(1, Math.ceil(this.adapter.estimateTokens(content) / 2000));\n const preLayer = `[PRE-LAYER ENCODED: ${estimatedChunks} internal chunks]`;\n\n // Core Layer: Dense summary sandwich with instructions\n // We sandwich the content between the instructions to guide extraction\n // If content is extremely large, we might trim it here, but ideally the provider streaming handles it.\n const summaryResponse = await this.adapter.complete({\n model: '',\n messages: [{\n role: 'user',\n content: `### INSTRUCTIONS ###\\n${instructions}\\n\\n### CONTENT ###\\n${content}\\n\\n### INSTRUCTIONS ###\\n${instructions}`\n }]\n });\n const coreLayer = summaryResponse.content;\n\n // Post-Layer: Decoding/Refinement hooks\n // Indicates that the LLM can use tools to drill down into specific chunks\n const postLayer = `[POST-LAYER DECODING: Use \\`refine_layer\\` or \\`read_chunk\\` tools to expand specific sections]`;\n\n return { preLayer, coreLayer, postLayer };\n }\n}\n","import { ContextWindow, IContextStrategy, IProviderAdapter, Turn } from '../types/index.js';\n\n/**\n * ScratchpadStrategy manages the thinking process separate from the turn history.\n * It is primarily a marker/pre-turn strategy that ensures scratchpad gets tokenized properly\n * but is not compressed.\n */\nexport class ScratchpadStrategy implements IContextStrategy {\n readonly name = 'scratchpad_strategy';\n readonly priority = 10;\n\n shouldApply(ctx: ContextWindow): boolean {\n // Only apply if there's actual scratchpad content to track\n return ctx.scratchpad.length > 0;\n }\n\n async apply(ctx: ContextWindow): Promise<ContextWindow> {\n // Basic implementation: we don't compress the scratchpad, we just ensure its tokens are counted\n return ctx;\n }\n}\n\nexport interface HistoryCompressionConfig {\n windowSize: number;\n triggerAtPercent: number; // e.g. 0.8\n}\n\n/**\n * Operates on a rolling window of the oldest N turns and summarizes them.\n */\nexport class HistoryCompressionStrategy implements IContextStrategy {\n readonly name = 'history_compression';\n readonly priority = 30;\n\n constructor(\n private adapter: IProviderAdapter,\n private config: HistoryCompressionConfig\n ) { }\n\n shouldApply(ctx: ContextWindow): boolean {\n const triggerTokens = ctx.maxTokens * this.config.triggerAtPercent;\n // Apply if we are over the trigger threshold and have at least enough turns\n // Ignore system prompts and already compressed turns\n const uncompressedTurns = ctx.turns.filter(t => t.role !== 'system' && !t.compressed);\n return ctx.tokenCount >= triggerTokens && uncompressedTurns.length > this.config.windowSize;\n }\n\n async apply(ctx: ContextWindow): Promise<ContextWindow> {\n // Find the oldest N uncompressed turns that aren't the system prompt\n const uncompressedIndices = ctx.turns\n .map((t, i) => ({ t, i }))\n .filter(({ t }) => t.role !== 'system' && !t.compressed)\n .slice(0, this.config.windowSize);\n\n const targetTurns = uncompressedIndices.map(u => u.t);\n const middleText = targetTurns.map(t => `${t.role}: ${JSON.stringify(t.content)}`).join('\\n');\n\n const summaryResponse = await this.adapter.complete({\n model: '',\n messages: [{\n role: 'user',\n content: `Summarize the oldest part of this conversation:\\n${middleText}`\n }]\n });\n\n const summaryStr = summaryResponse.content;\n const newCompressionSummary = ctx.compressionSummary\n ? `${ctx.compressionSummary}\\n${summaryStr}`\n : summaryStr;\n\n // Filter out the summarized turns\n const indicesToRemove = new Set(uncompressedIndices.map(u => u.i));\n const newTurns = ctx.turns.filter((_, i) => !indicesToRemove.has(i));\n\n const TokenCount = newTurns.reduce((sum, t) => sum + t.tokenCount, 0) +\n this.adapter.estimateTokens(ctx.systemPrompt) +\n this.adapter.estimateTokens(ctx.scratchpad);\n\n return {\n ...ctx,\n turns: newTurns,\n tokenCount: TokenCount,\n compressionSummary: newCompressionSummary,\n };\n }\n}\n","import { IStorageAdapter, STMItem } from '../types/index.js';\nimport { randomUUID } from 'crypto';\n\nexport interface STMRegistryConfig {\n /**\n * The storage backend to use for Short Term Memory items.\n */\n storage: IStorageAdapter;\n\n /**\n * The maximum number of tokens allowed for a 'text' type STM item.\n * If an item exceeds this, it may be rejected or truncated.\n * Default: 100000\n */\n maxTextTokens?: number;\n}\n\n/**\n * Registry for Short Term Memory (STM).\n * Manages the storage and retrieval of large context variables like long texts or blobs.\n * Generates '[STM:uuid]' references to be used within the ReAct agent context.\n */\nexport class ShortTermMemoryRegistry {\n private storage: IStorageAdapter;\n private maxTextTokens: number;\n\n constructor(config: STMRegistryConfig) {\n this.storage = config.storage;\n this.maxTextTokens = config.maxTextTokens ?? 100000;\n }\n\n /**\n * Registers a new memory item and returns its reference string.\n * \n * @param content - The raw content to store\n * @param type - The type of content ('text' or 'blob')\n * @param metadata - Optional metadata (e.g. sandwich layers, original filename)\n * @param estimateTokens - Optional function to estimate token count for 'text' type\n * @returns A reference string formatted as '[STM:uuid]'\n * @throws {Error} if a text item exceeds the maxTextTokens limit\n */\n async register(\n content: any,\n type: 'text' | 'blob',\n metadata?: Record<string, unknown>,\n estimateTokens?: (text: string) => number\n ): Promise<string> {\n if (type === 'text') {\n const tokenCount = estimateTokens ? estimateTokens(content) : Math.ceil(String(content).length / 4);\n if (tokenCount > this.maxTextTokens) {\n throw new Error(`Text content exceeds max tokens limit of ${this.maxTextTokens} (estimated ${tokenCount})`);\n }\n }\n\n const id = randomUUID();\n const item: STMItem = {\n id,\n content,\n type,\n ...(metadata !== undefined ? { metadata } : {})\n };\n\n await this.storage.set(id, item);\n return `[STM:${id}]`;\n }\n\n /**\n * Updates an existing STM item's content or metadata.\n * \n * @param id - The UUID of the item to update\n * @param updates - Partial updates to apply (content or metadata)\n */\n async update(id: string, updates: { content?: any; metadata?: Record<string, unknown> }): Promise<void> {\n const item = await this.storage.get(id);\n if (!item) throw new Error(`STM item not found for update: ${id}`);\n\n const updatedItem: STMItem = {\n ...item,\n ...(updates.content !== undefined ? { content: updates.content } : {}),\n ...(updates.metadata !== undefined ? { metadata: { ...item.metadata, ...updates.metadata } } : {})\n };\n\n await this.storage.set(id, updatedItem);\n }\n\n\n /**\n * Retrieves an STM item by its full reference string (e.g., '[STM:uuid]').\n * \n * @param ref - The full reference string\n * @returns The STMItem or undefined if not found\n */\n async getByRef(ref: string): Promise<STMItem | undefined> {\n const match = ref.match(/^\\[STM:(.+)\\]$/);\n if (!match || !match[1]) return undefined;\n return this.storage.get(match[1]);\n }\n\n /**\n * Deletes an STM item by its ID.\n * \n * @param id - The UUID of the item to delete\n */\n async delete(id: string): Promise<void> {\n await this.storage.delete(id);\n }\n}\n","import { IStorageAdapter } from '../types/index.js';\nimport { randomUUID } from 'crypto';\n\n/**\n * An in-memory implementation of IStorageAdapter for holding Short Term Memory.\n * Ideal for testing or single-process lightweight usage.\n *\n * @example\n * const storage = new InMemoryStorageAdapter();\n * const id = await storage.set(undefined, 'my content', { type: 'text' });\n * const retrieved = await storage.get(id);\n */\nexport class InMemoryStorageAdapter implements IStorageAdapter {\n private store = new Map<string, { content: any; metadata?: Record<string, unknown> }>();\n\n /**\n * Retrieves stored content by ID.\n *\n * @param id - The identifier of the stored item\n * @returns The stored content or undefined if not found\n */\n async get(id: string): Promise<any | undefined> {\n return this.store.get(id)?.content;\n }\n\n /**\n * Returns the full item including metadata.\n *\n * @param id - The identifier of the stored item\n * @returns The complete item with content and metadata\n * @internal\n */\n async getFull(id: string): Promise<{ content: any; metadata?: Record<string, unknown> } | undefined> {\n return this.store.get(id);\n }\n\n /**\n * Stores content, generating an ID if none is provided.\n *\n * @param id - Optional provided ID. If omitted, a UUID is generated.\n * @param content - The content to store\n * @param metadata - Optional metadata\n * @returns The ID under which the content is stored\n */\n async set(id: string | undefined, content: any, metadata?: Record<string, unknown>): Promise<string> {\n const resolvedId = id ?? randomUUID();\n this.store.set(resolvedId, metadata !== undefined ? { content, metadata } : { content });\n return resolvedId;\n }\n\n /**\n * Deletes the content for the given ID.\n *\n * @param id - The identifier of the item to delete\n */\n async delete(id: string): Promise<void> {\n this.store.delete(id);\n }\n\n /**\n * Synchronous health check, always true for in-memory.\n *\n * @returns true\n */\n async healthCheck(): Promise<boolean> {\n return true;\n }\n}\n","import { IToolDefinition, LemuraToolNotFoundError, LemuraToolValidationError, ToolContext } from '../types/index.js';\n\n/**\n * Manages registered tools and their execution\n */\nexport class ToolRegistry {\n private tools: Map<string, IToolDefinition> = new Map();\n\n constructor(initialTools: IToolDefinition[] = []) {\n for (const tool of initialTools) {\n this.register(tool);\n }\n }\n\n register(tool: IToolDefinition): void {\n if (this.tools.has(tool.name)) {\n throw new Error(`Tool ${tool.name} is already registered.`);\n }\n this.tools.set(tool.name, tool);\n }\n\n get(name: string): IToolDefinition | undefined {\n return this.tools.get(name);\n }\n\n getAll(): IToolDefinition[] {\n return Array.from(this.tools.values());\n }\n\n async execute(name: string, params: unknown, context: ToolContext): Promise<unknown> {\n const tool = this.tools.get(name);\n if (!tool) {\n throw new LemuraToolNotFoundError(`Tool '${name}' not found.`);\n }\n\n try {\n // Basic JSON schema validation logic goes here\n // Real implementation would use Ajv or similar to validate `params` against `tool.parameters`\n const result = await tool.execute(params, context);\n return result;\n } catch (err: any) {\n if (err instanceof LemuraToolValidationError) {\n throw err;\n }\n throw new Error(`Tool execution failed for '${name}': ${err.message}`);\n }\n }\n}\n","import { ISkill } from '../types/index.js';\n\nexport class SkillInjector {\n private skills: ISkill[] = [];\n\n constructor(skills: ISkill[] = []) {\n this.skills = [...skills];\n this.sortSkills();\n }\n\n register(skill: ISkill) {\n this.skills.push(skill);\n this.sortSkills();\n }\n\n private sortSkills() {\n this.skills.sort((a, b) => a.priority - b.priority);\n }\n\n getSkillsForInjection(position: ISkill['inject']): ISkill[] {\n return this.skills.filter(s => s.inject === position);\n }\n\n /**\n * Generates a combined prompt block for all skills targeting a specific injection position.\n */\n buildInjectionBlock(position: ISkill['inject']): string {\n const relevantSkills = this.getSkillsForInjection(position);\n if (relevantSkills.length === 0) return '';\n\n let block = '';\n for (const skill of relevantSkills) {\n // Very basic tier logic, full compression handling would be tied to budgets\n const content = skill.standard || skill.micro || skill.nano || skill.description;\n block += `\\n[Skill: ${skill.name} (Tier: ${skill.tier})]\\n${content}\\n`;\n }\n\n return block.trim();\n }\n}\n","import { IRAGAdapter, RAGDocument, RAGIngestRequest, RAGIngestResponse, RAGQueryRequest, RAGQueryResponse } from '../types/index.js';\n\nexport class InMemoryRAGAdapter implements IRAGAdapter {\n private documents: Map<string, RAGDocument> = new Map();\n\n async ingest(request: RAGIngestRequest): Promise<RAGIngestResponse> {\n for (const doc of request.documents) {\n this.documents.set(doc.id, doc);\n }\n return {\n ingestedCount: request.documents.length,\n failedCount: 0\n };\n }\n\n async query(request: RAGQueryRequest): Promise<RAGQueryResponse> {\n const queryStr = request.query.toLowerCase();\n const results = [];\n\n // Very basic keyword matching for testing\n for (const doc of this.documents.values()) {\n const content = doc.content.toLowerCase();\n let score = 0;\n if (content.includes(queryStr)) score += 0.8;\n\n const words = queryStr.split(' ');\n for (const word of words) {\n if (content.includes(word)) score += 0.1;\n }\n\n if (score > 0 && score >= (request.minScore || 0)) {\n results.push({ document: doc, score: Math.min(score, 1) });\n }\n }\n\n results.sort((a, b) => b.score - a.score);\n const topK = request.topK || 5;\n\n return {\n results: results.slice(0, topK)\n };\n }\n\n async healthCheck(): Promise<boolean> {\n return true;\n }\n}\n","import { ILogger, LogLevel, LogMetadata, Severity } from '../types/logger.js';\n\n/**\n * Default colorized logger for lemura.\n * Uses ANSI escape codes for beautiful colors without dependencies.\n */\nexport class DefaultLogger implements ILogger {\n private level: LogLevel = LogLevel.INFO;\n\n private readonly COLORS: Record<Severity | 'RESET', string> = {\n DEBUG: '\\x1b[36m', // Cyan\n INFO: '\\x1b[32m', // Green\n WARN: '\\x1b[33m', // Yellow\n ERROR: '\\x1b[31m', // Red\n FATAL: '\\x1b[41m\\x1b[37m', // White on Red background\n RESET: '\\x1b[0m',\n };\n\n setLevel(level: LogLevel): void {\n this.level = level;\n }\n\n debug(message: string, metadata?: LogMetadata): void {\n if (this.level <= LogLevel.DEBUG) this.log('DEBUG', message, metadata);\n }\n\n info(message: string, metadata?: LogMetadata): void {\n if (this.level <= LogLevel.INFO) this.log('INFO', message, metadata);\n }\n\n warn(message: string, metadata?: LogMetadata): void {\n if (this.level <= LogLevel.WARN) this.log('WARN', message, metadata);\n }\n\n error(message: string, metadata?: LogMetadata): void {\n if (this.level <= LogLevel.ERROR) this.log('ERROR', message, metadata);\n }\n\n fatal(message: string, metadata?: LogMetadata): void {\n if (this.level <= LogLevel.FATAL) this.log('FATAL', message, metadata);\n }\n\n private log(severity: Severity, message: string, metadata?: LogMetadata): void {\n const timestamp = new Date().toISOString();\n const color = this.COLORS[severity] || this.COLORS.RESET;\n const reset = this.COLORS.RESET;\n\n console.log(`${timestamp} [${color}${severity}${reset}] ${message}`);\n\n if (metadata) {\n if (metadata.problem) {\n console.log(` ${color}PROBLEM:${reset} ${metadata.problem}`);\n }\n if (metadata.hints && metadata.hints.length > 0) {\n console.log(` ${color}HINTS:${reset}`);\n metadata.hints.forEach(hint => console.log(` - ${hint}`));\n }\n\n // Log other metadata fields if they are not system fields\n const otherKeys = Object.keys(metadata).filter(k => !['problem', 'hints', 'severity'].includes(k));\n if (otherKeys.length > 0) {\n otherKeys.forEach(key => {\n const value = metadata[key];\n if (typeof value === 'object') {\n console.log(` ${key}: ${JSON.stringify(value, null, 2).replace(/\\n/g, '\\n ')}`);\n } else {\n console.log(` ${key}: ${value}`);\n }\n });\n }\n }\n }\n}\n","import { IToolDefinition, ToolContext } from '../../types/index.js';\nimport { ShortTermMemoryRegistry } from '../../context/ShortTermMemoryRegistry.js';\nimport { SandwichCompressionStrategy } from '../../context/SandwichCompressionStrategy.js';\n\n/**\n * Tool to read a chunk from Short Term Memory.\n */\nexport const readChunkTool: IToolDefinition = {\n name: 'read_chunk',\n description: 'Reads a specific portion or chunk of memory from a Short Term Memory reference.',\n parameters: {\n type: 'object',\n properties: {\n ref: { type: 'string', description: 'The STM reference (e.g., [STM:uuid])' },\n start: { type: 'number', description: 'Starting index or page' },\n end: { type: 'number', description: 'Ending index or page' }\n },\n required: ['ref']\n },\n async execute(params: any, context: ToolContext) {\n if (!context.stmRegistry) throw new Error('STM Registry not available in context');\n const item = await context.stmRegistry.getByRef(params.ref);\n if (!item) throw new Error(`STM item not found: ${params.ref}`);\n\n // Basic chunking logic for demo purposes\n const content = String(item.content);\n if (params.start !== undefined || params.end !== undefined) {\n return content.slice(params.start ?? 0, params.end ?? content.length);\n }\n return content;\n }\n};\n\n/**\n * Tool to search for content within chunks.\n */\nexport const searchChunkTool: IToolDefinition = {\n name: 'search_chunk',\n description: 'Searches for specific content or patterns within Short Term Memory chunks.',\n parameters: {\n type: 'object',\n properties: {\n ref: { type: 'string', description: 'The STM reference' },\n query: { type: 'string', description: 'The search query or keyword' }\n },\n required: ['ref', 'query']\n },\n async execute(params: any, context: ToolContext) {\n if (!context.stmRegistry) throw new Error('STM Registry not available in context');\n const item = await context.stmRegistry.getByRef(params.ref);\n if (!item) throw new Error(`STM item not found: ${params.ref}`);\n\n const content = String(item.content);\n const index = content.toLowerCase().indexOf(params.query.toLowerCase());\n if (index === -1) return 'No matches found.';\n\n // Return a snippet around the match\n const start = Math.max(0, index - 100);\n const end = Math.min(content.length, index + 100);\n return `Match found at index ${index}: ...${content.slice(start, end)}...`;\n }\n};\n\n/**\n * Tool to list chunks of an STM reference.\n */\nexport const listChunksTool: IToolDefinition = {\n name: 'list_chunks',\n description: 'Lists available chunks or structural breakdown of a Short Term Memory reference.',\n parameters: {\n type: 'object',\n properties: {\n ref: { type: 'string', description: 'The STM reference' }\n },\n required: ['ref']\n },\n async execute(params: any, context: ToolContext) {\n if (!context.stmRegistry) throw new Error('STM Registry not available in context');\n const item = await context.stmRegistry.getByRef(params.ref);\n if (!item) throw new Error(`STM item not found: ${params.ref}`);\n\n const size = String(item.content).length;\n const chunkSize = 2000;\n const totalChunks = Math.ceil(size / chunkSize);\n\n return {\n totalSize: size,\n chunkSize,\n totalChunks,\n chunks: Array.from({ length: totalChunks }, (_, i) => ({\n index: i,\n start: i * chunkSize,\n end: Math.min((i + 1) * chunkSize, size)\n }))\n };\n }\n};\n\n/**\n * Tool to update a chunk in STM.\n */\nexport const updateChunkTool: IToolDefinition = {\n name: 'update_chunk',\n description: 'Updates or appends content to a specific Short Term Memory reference.',\n parameters: {\n type: 'object',\n properties: {\n ref: { type: 'string', description: 'The STM reference' },\n content: { type: 'string', description: 'The new content or update' },\n mode: { type: 'string', enum: ['append', 'replace'], default: 'append' }\n },\n required: ['ref', 'content']\n },\n async execute(params: any, context: ToolContext) {\n if (!context.stmRegistry) throw new Error('STM Registry not available in context');\n const item = await context.stmRegistry.getByRef(params.ref);\n if (!item) throw new Error(`STM item not found: ${params.ref}`);\n\n let newContent = String(item.content);\n if (params.mode === 'replace') {\n newContent = params.content;\n } else {\n newContent += params.content;\n }\n\n const uuid = params.ref.match(/\\[STM:(.+)\\]/)?.[1];\n if (!uuid) throw new Error('Invalid STM reference');\n\n await context.stmRegistry.update(uuid, { content: newContent });\n return { status: 'success', ref: params.ref };\n }\n};\n\n/**\n * Tool to read the scratchpad.\n */\nexport const readScratchpadTool: IToolDefinition = {\n name: 'read_scratchpad',\n description: 'Reads the content from the current agent scratchpad.',\n parameters: { type: 'object', properties: {} },\n async execute(_params: any, context: ToolContext) {\n return context.scratchpad ?? '';\n }\n};\n\n/**\n * Tool to write to the scratchpad.\n */\nexport const writeScratchpadTool: IToolDefinition = {\n name: 'write_scratchpad',\n description: 'Writes content to the agent scratchpad for long-term reasoning steps.',\n parameters: {\n type: 'object',\n properties: {\n content: { type: 'string', description: 'Content to write' },\n append: { type: 'boolean', default: true }\n },\n required: ['content']\n },\n async execute(params: any, context: ToolContext) {\n let newScratchpad = context.scratchpad ?? '';\n if (params.append) {\n newScratchpad += (newScratchpad ? '\\n' : '') + params.content;\n } else {\n newScratchpad = params.content;\n }\n return { status: 'success', newScratchpad, note: 'Scratchpad updated' };\n }\n};\n\n/**\n * Tool to remove scratchpad content.\n */\nexport const removeScratchpadTool: IToolDefinition = {\n name: 'remove_scratchpad',\n description: 'Clears or removes content from the scratchpad.',\n parameters: { type: 'object', properties: {} },\n async execute(_params: any, _context: ToolContext) {\n return { status: 'success', newScratchpad: '', note: 'Scratchpad cleared' };\n }\n};\n\n/**\n * Tool to summarize via sandwich strategy.\n */\nexport const summarizeSandwichTool: IToolDefinition = {\n name: 'summarize_sandwich',\n description: 'Generated a layered sandwich summary of a large STM reference.',\n parameters: {\n type: 'object',\n properties: {\n ref: { type: 'string', description: 'The STM reference' },\n instructions: { type: 'string', description: 'Summarization instructions' }\n },\n required: ['ref']\n },\n async execute(params: any, context: ToolContext) {\n if (!context.stmRegistry) throw new Error('STM Registry not available in context');\n const item = await context.stmRegistry.getByRef(params.ref);\n if (!item) throw new Error(`STM item not found: ${params.ref}`);\n\n // This tool needs a provider adapter. In a real scenario, this might be passed in context or config.\n // For now, let's assume we can use a strategy if provided.\n // This highlights that some tools might need more context.\n return { status: 'pending', note: 'Summarization requires AI provider' };\n }\n};\n","import { SessionConfig, ContextWindow, IProviderAdapter, ContentBlock, Turn, ILogger } from '../types/index.js';\nimport { ContextManager } from '../context/ContextManager.js';\nimport { ToolRegistry } from '../tools/ToolRegistry.js';\nimport { SkillInjector } from '../skills/SkillInjector.js';\nimport { LemuraMaxIterationsError } from '../types/index.js';\nimport { DefaultLogger } from '../logger/DefaultLogger.js';\nimport {\n readChunkTool,\n searchChunkTool,\n listChunksTool,\n updateChunkTool,\n readScratchpadTool,\n writeScratchpadTool,\n removeScratchpadTool,\n summarizeSandwichTool\n} from '../tools/builtin/short_term_memory.js';\n\nexport class SessionManager {\n private contextManager: ContextManager;\n private toolRegistry: ToolRegistry;\n private skillInjector: SkillInjector;\n private context: ContextWindow;\n private adapter: IProviderAdapter;\n private config: SessionConfig;\n private iterations: number = 0;\n private logger: ILogger;\n\n constructor(config: SessionConfig) {\n this.config = config;\n this.adapter = config.adapter;\n this.logger = config.logger || new DefaultLogger();\n this.contextManager = new ContextManager();\n this.toolRegistry = new ToolRegistry(config.tools || []);\n this.skillInjector = new SkillInjector(config.skills || []);\n\n for (const strategy of config.compressionStrategies || []) {\n this.contextManager.registerStrategy(strategy);\n }\n\n // Register STM and Scratchpad tools if registry is provided\n if (config.stmRegistry) {\n this.toolRegistry.register(readChunkTool);\n this.toolRegistry.register(searchChunkTool);\n this.toolRegistry.register(listChunksTool);\n this.toolRegistry.register(updateChunkTool);\n this.toolRegistry.register(readScratchpadTool);\n this.toolRegistry.register(writeScratchpadTool);\n this.toolRegistry.register(removeScratchpadTool);\n this.toolRegistry.register(summarizeSandwichTool);\n }\n\n this.context = {\n systemPrompt: config.systemPrompt || '',\n scratchpad: '',\n turns: [],\n tokenCount: 0,\n maxTokens: config.maxTokens,\n metadata: {}\n };\n }\n\n getContext(): ContextWindow {\n return { ...this.context };\n }\n\n getHistory() {\n return [...this.context.turns];\n }\n\n async run(userMessage: string | ContentBlock[]): Promise<string> {\n this.logger.info(`Starting new session run`, {\n model: this.config.model,\n message: Array.isArray(userMessage) ? '[Multimodal Content]' : userMessage\n });\n\n // 1. Prepare context with user's message\n this.context.turns.push({\n role: 'user',\n content: userMessage,\n tokenCount: Array.isArray(userMessage) ? userMessage.length * 50 : this.adapter.estimateTokens(userMessage),\n turnIndex: this.context.turns.length,\n compressed: false\n });\n\n const maxIts = this.config.maxIterations || 10;\n this.iterations = 0;\n\n // The ReAct Loop\n while (this.iterations < maxIts) {\n this.iterations++;\n this.logger.debug(`ReAct Iteration ${this.iterations}/${maxIts}`);\n\n // 2. Prepare context window (compress if needed)\n this.context = await this.contextManager.prepare(this.context);\n\n // Map context to provider API format\n const messages = this.context.turns.map(t => ({\n role: t.role,\n content: t.content,\n ...(t.role === 'tool' && t.toolResults?.[0] ? { name: t.toolResults[0].toolCallId } : {}),\n ...(t.role === 'assistant' && t.toolCalls ? { toolCalls: t.toolCalls } : {})\n }));\n\n // In a real implementation we would also inject the system prompt + compressionSummary properly\n let fullSystemPrompt = this.context.systemPrompt || '';\n const injectedSkills = this.skillInjector.buildInjectionBlock('system_prompt');\n if (injectedSkills) {\n fullSystemPrompt += '\\n\\n' + injectedSkills;\n }\n if (fullSystemPrompt.trim()) {\n messages.unshift({ role: 'system', content: fullSystemPrompt.trim() });\n }\n\n // 3. Call provider\n this.logger.debug(`Calling provider adapter (${this.adapter.name})...`);\n let response;\n try {\n response = await this.adapter.complete({\n model: this.config.model,\n messages: messages,\n tools: this.toolRegistry.getAll(),\n maxTokens: 1000 // default gen tokens\n });\n } catch (err: any) {\n const metadata = err.problem ? { problem: err.problem, hints: err.hints } : {};\n this.logger.fatal(`Provider call failed: ${err.message}`, metadata);\n throw err;\n }\n\n // 4. Parse response\n if (response.finishReason === 'tool_call' && response.toolCalls) {\n this.logger.info(`Assistant requested ${response.toolCalls.length} tool calls`, {\n tools: response.toolCalls.map(tc => tc.name)\n });\n // Execute tool calls\n const toolResults = [];\n for (const tc of response.toolCalls) {\n try {\n const args = JSON.parse(tc.arguments);\n const executeContext: any = {\n sessionId: 'default',\n turnIndex: this.context.turns.length,\n logger: this.logger,\n stmRegistry: this.config.stmRegistry,\n scratchpad: this.context.scratchpad\n };\n if (this.config.ragAdapter) {\n executeContext.ragAdapter = this.config.ragAdapter;\n }\n\n this.logger.debug(`Executing tool: ${tc.name}`, { args: tc.arguments });\n const result = await this.toolRegistry.execute(tc.name, args, executeContext);\n this.logger.debug(`Tool ${tc.name} returned successfully`);\n\n let finalResult = result;\n if (typeof result === 'object' && result !== null) {\n const resObj = result as any;\n if (resObj.status === 'success' && resObj.newScratchpad !== undefined) {\n this.context.scratchpad = resObj.newScratchpad;\n finalResult = resObj.note || 'Scratchpad updated';\n }\n }\n\n // Enforce maxTokensPerTool\n let content = JSON.stringify(finalResult);\n const tokenCount = this.adapter.estimateTokens(content);\n if (this.config.maxTokensPerTool && tokenCount > this.config.maxTokensPerTool) {\n content = content.slice(0, this.config.maxTokensPerTool * 4) + '... [TRUNCATED DUE TO TOOL TOKEN LIMIT]';\n }\n\n toolResults.push({ toolCallId: tc.id, content });\n } catch (e: any) {\n this.logger.error(`Tool ${tc.name} execution failed: ${e.message}`, {\n problem: e.problem || `Tool ${tc.name} failed to execute properly.`,\n hints: e.hints || ['Check the tool parameters and ensure the required services are running.']\n });\n toolResults.push({ toolCallId: tc.id, content: `Error: ${e.message}` });\n }\n }\n\n // Add assistant turn with tool calls\n const assistantTurn: Turn = {\n role: 'assistant',\n content: response.content || '',\n tokenCount: this.adapter.estimateTokens(response.content || '') + 50, // rough tool estimate\n turnIndex: this.context.turns.length,\n compressed: false,\n toolCalls: response.toolCalls\n };\n this.context.turns.push(assistantTurn);\n if (this.config.onTurn) this.config.onTurn(assistantTurn);\n\n // Add tool observation turns\n for (const res of toolResults) {\n const toolTurn: Turn = {\n role: 'tool',\n content: res.content,\n tokenCount: this.adapter.estimateTokens(res.content),\n turnIndex: this.context.turns.length,\n compressed: false,\n toolResults: [res]\n };\n this.context.turns.push(toolTurn);\n if (this.config.onTurn) this.config.onTurn(toolTurn);\n }\n\n // Continue loop\n continue;\n }\n\n // If stop/final -> return response to caller\n if (response.finishReason === 'stop' || response.finishReason === 'max_tokens' || response.finishReason === 'error') {\n const finalTurn: Turn = {\n role: 'assistant',\n content: response.content,\n tokenCount: response.usage.completionTokens,\n turnIndex: this.context.turns.length,\n compressed: false\n };\n this.context.turns.push(finalTurn);\n if (this.config.onTurn) this.config.onTurn(finalTurn);\n this.logger.info(`Run completed successfully`);\n return response.content;\n }\n }\n\n const maxItsErr = new LemuraMaxIterationsError(`Exceeded max iterations of ${maxIts}`);\n this.logger.fatal(maxItsErr.message, {\n problem: 'The agent entered an infinite loop or took too many steps to resolve the task.',\n hints: ['Increase maxIterations if the task is complex.', 'Check if tools are returning consistent results.']\n });\n throw maxItsErr;\n }\n}\n","import { IToolResponseProcessor, ToolResponseEvaluation, IToolDefinition } from '../../types/index.js';\n\n/**\n * Advanced Execution: ToolResponseProcessor handles compression\n * and evaluation of tool outputs, flagging errors, mapping tool size classes\n * and compressing large responses to save token bandwidth.\n */\nexport class ToolResponseProcessor implements IToolResponseProcessor {\n\n evaluate(response: string, tool: IToolDefinition, context: unknown): ToolResponseEvaluation {\n const length = response.length;\n // Approximating tokens (length / 4)\n const estimatedTokens = length / 4;\n\n let sizeClass: ToolResponseEvaluation['sizeClass'] = 'small';\n if (estimatedTokens > 2000) sizeClass = 'oversized';\n else if (estimatedTokens > 800) sizeClass = 'large';\n else if (estimatedTokens > 200) sizeClass = 'medium';\n\n return {\n relevanceScore: 1.0,\n sizeClass,\n shouldCompress: sizeClass === 'large' || sizeClass === 'oversized',\n suggestedMaxTokens: 500,\n answered: true,\n answeredPartially: false,\n errorDetected: response.toLowerCase().includes('error'),\n suggestedAction: 'continue'\n };\n }\n\n compress(response: string, evaluation: ToolResponseEvaluation): string {\n if (!evaluation.shouldCompress || evaluation.errorDetected) {\n return response;\n }\n\n // Very basic extactive/truncative compression: Return first 1000 characters and note truncation.\n if (response.length > 1000) {\n return response.substring(0, 1000) + '\\n...[COMPRESSED TO SAVE TOKENS]...';\n }\n\n return response;\n }\n}\n","export interface Goal {\n id: string;\n statement: string;\n decomposition: string[];\n successCriteria: string[];\n injectionFrequency: 'always' | 'every_N_turns' | 'on_compression';\n injectionPosition: 'system_prompt' | 'pre_turn';\n}\n\nexport class GoalInjector {\n constructor(private goal: Goal) { }\n\n injectInto(prompt: string): string {\n // Basic formatting for Goal Injection\n const formatting = `[CURRENT GOAL]\\n${this.goal.statement}\\n\\nSuccess criteria:\\n${this.goal.successCriteria.map(c => `- ${c}`).join('\\n')}\\n[/CURRENT GOAL]`;\n\n if (this.goal.injectionPosition === 'system_prompt') {\n return `${prompt}\\n\\n${formatting}`;\n }\n\n return prompt;\n }\n}\n","export interface ContinuationStep {\n stepId: string;\n toolName: string;\n description: string;\n dependsOn: string[];\n status: 'pending' | 'running' | 'done' | 'failed' | 'skipped';\n outputKey?: string;\n inputMapping?: Record<string, string>;\n}\n\nexport interface ContinuationPlan {\n steps: ContinuationStep[];\n currentStepIndex: number;\n strategy: 'sequential' | 'parallel' | 'conditional';\n}\n\nexport class ContinuationPlanner {\n constructor(private plan: ContinuationPlan) { }\n\n getPlanStatusString(): string {\n let result = `[CONTINUATION PLAN — Step ${this.plan.currentStepIndex + 1}/${this.plan.steps.length}]\\n`;\n for (const step of this.plan.steps) {\n const getIcon = (status: string) => {\n switch (status) {\n case 'done': return '✅';\n case 'running': return '▶';\n case 'failed': return '❌';\n case 'skipped': return '⏭';\n default: return '⏳';\n }\n };\n\n const statusText = step.status === 'pending' && step.dependsOn.length > 0\n ? `Waiting on Step ${step.dependsOn.join(', ')}`\n : step.status.charAt(0).toUpperCase() + step.status.slice(1);\n\n result += `${getIcon(step.status)} Step ${step.stepId} (${step.toolName}): ${statusText}\\n`;\n }\n return result;\n }\n}\n","export class StepCounter {\n private toolCallCount: number = 0;\n\n constructor(private maxSteps: number = 20) { }\n\n increment(count: number = 1): void {\n this.toolCallCount += count;\n }\n\n get count(): number {\n return this.toolCallCount;\n }\n\n isMaxReached(): boolean {\n return this.toolCallCount >= this.maxSteps;\n }\n\n getForcedConclusionPrompt(): string {\n return `You have used ${this.toolCallCount}/${this.maxSteps} steps. Provide your final response now.\\nDo not call any more tools. Use the required structure below.`;\n }\n}\n","export class FinalResponseFormatter {\n static getRequiredStructure(): string {\n return `## Goal Status: [ACHIEVED | PARTIALLY_ACHIEVED | FAILED]\n\n### What was accomplished\n[Summary of completed work]\n\n### Remaining tasks\n[Bulleted list, or \"None\"]\n\n### Failed steps\n[Tool/step name + error context, or \"None\"]\n\n### Result\n[The actual answer or deliverable]`;\n }\n\n static validateStructure(response: string): boolean {\n // Very basic validation heuristics\n if (!response.includes('## Goal Status:')) return false;\n if (!response.includes('### What was accomplished')) return false;\n if (!response.includes('### Remaining tasks')) return false;\n if (!response.includes('### Failed steps')) return false;\n if (!response.includes('### Result')) return false;\n return true;\n }\n}\n"]}