@fepvenancio/stela-sdk 0.9.0 → 0.11.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.
- package/README.md +184 -31
- package/dist/index.cjs +432 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +404 -1
- package/dist/index.d.ts +404 -1
- package/dist/index.js +404 -1
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/types/common.ts","../src/constants/addresses.ts","../src/constants/protocol.ts","../src/utils/u256.ts","../src/utils/address.ts","../src/utils/amount.ts","../src/utils/format.ts","../src/utils/status.ts","../src/tokens/registry.ts","../src/math/shares.ts","../src/math/position.ts","../src/events/selectors.ts","../src/events/parser.ts","../src/offchain/hash.ts","../src/offchain/typed-data.ts","../src/offchain/signature.ts","../src/abi/stela.json","../src/client/inscription-client.ts","../src/client/share-client.ts","../src/abi/erc20.json","../src/abi/locker.json","../src/client/locker-client.ts","../src/client/api-client.ts","../src/client/stela-sdk.ts"],"names":["uint256","addAddressPadding","validateAndParseAddress","hash","Contract"],"mappings":";;;;;AAiBO,IAAM,cAAA,GAA+C;AAAA,EAC1D,MAAA;AAAA,EACA,SAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,YAAA;AAAA,EACA,SAAA;AAAA,EACA;AACF;AAGO,IAAM,aAAA,GAAmD;AAAA,EAC9D,IAAA,EAAM,MAAA;AAAA,EACN,OAAA,EAAS,SAAA;AAAA,EACT,MAAA,EAAQ,QAAA;AAAA,EACR,MAAA,EAAQ,QAAA;AAAA,EACR,UAAA,EAAY,YAAA;AAAA,EACZ,OAAA,EAAS,SAAA;AAAA,EACT,SAAA,EAAW;AACb;;;ACjCO,IAAM,aAAA,GAAyC;AAAA,EACpD,OAAA,EAAS,oEAAA;AAAA,EACT,OAAA,EAAS;AACX;AAEA,IAAM,cAAA,GAA4B,CAAC,SAAA,EAAW,SAAS,CAAA;AAGhD,SAAS,eAAe,GAAA,EAAuB;AACpD,EAAA,MAAM,OAAA,GAAU,KAAK,IAAA,EAAK;AAC1B,EAAA,IAAI,OAAA,IAAW,cAAA,CAAe,QAAA,CAAS,OAAkB,GAAG,OAAO,OAAA;AACnE,EAAA,IAAI,OAAA,EAAS,OAAA,CAAQ,IAAA,CAAK,CAAA,iBAAA,EAAoB,OAAO,CAAA,0BAAA,CAA4B,CAAA;AACjF,EAAA,OAAO,SAAA;AACT;AAGO,IAAM,QAAA,GAAoC;AAAA,EAC/C,OAAA,EAAS,YAAA;AAAA,EACT,OAAA,EAAS;AACX;AAGO,IAAM,eAAA,GAA2C;AAAA,EACtD,OAAA,EAAS,mCAAA;AAAA,EACT,OAAA,EAAS;AACX;;;ACzBO,IAAM,OAAA,GAAU;AAGhB,IAAM,oBAAA,GAAuB;AAG7B,IAAM,eAAA,GAA6C;AAAA,EACxD,KAAA,EAAO,CAAA;AAAA,EACP,MAAA,EAAQ,CAAA;AAAA,EACR,OAAA,EAAS,CAAA;AAAA,EACT,OAAA,EAAS;AACX;AAGO,IAAM,gBAAA,GAA8C;AAAA,EACzD,CAAA,EAAG,OAAA;AAAA,EACH,CAAA,EAAG,QAAA;AAAA,EACH,CAAA,EAAG,SAAA;AAAA,EACH,CAAA,EAAG;AACL;AAKO,IAAM,YAAA,GAAe;AAGrB,IAAM,gBAAA,GAAmB;AAGzB,IAAM,mBAAA,GAAsB;AAG5B,IAAM,mBAAA,GAAsB;AClCnC,IAAM,QAAA,GAAA,CAAY,MAAM,IAAA,IAAQ,EAAA;AAChC,IAAM,QAAA,GAAA,CAAY,MAAM,IAAA,IAAQ,EAAA;AAGzB,IAAM,MAAA,GAAS,CAAC,CAAA,KAAgC;AACrD,EAAA,IAAI,CAAA,GAAI,MAAM,CAAA,GAAI,QAAA,QAAgB,IAAI,UAAA,CAAW,CAAA,yBAAA,EAA4B,CAAC,CAAA,CAAE,CAAA;AAChF,EAAA,MAAM,EAAE,GAAA,EAAK,IAAA,EAAK,GAAIA,gBAAA,CAAQ,YAAY,CAAC,CAAA;AAC3C,EAAA,OAAO,CAAC,GAAA,CAAI,QAAA,EAAS,EAAG,IAAA,CAAK,UAAU,CAAA;AACzC;AAGO,IAAM,QAAA,GAAW,CAAC,CAAA,KAA6C;AACpE,EAAA,IAAI,CAAA,CAAE,GAAA,GAAM,EAAA,IAAM,CAAA,CAAE,GAAA,GAAM,QAAA,IAAY,CAAA,CAAE,IAAA,GAAO,EAAA,IAAM,CAAA,CAAE,IAAA,GAAO,QAAA,EAAU;AACtE,IAAA,MAAM,IAAI,WAAW,mDAAmD,CAAA;AAAA,EAC1E;AACA,EAAA,OAAOA,gBAAA,CAAQ,YAAY,CAAC,CAAA;AAC9B;AAGO,IAAM,kBAAA,GAAqB,CAAC,CAAA,KACjC,IAAA,GAAO,QAAA,CAAS,CAAC,CAAA,CAAE,QAAA,CAAS,EAAE,CAAA,CAAE,QAAA,CAAS,EAAA,EAAI,GAAG;ACnB3C,SAAS,MAAM,KAAA,EAAwB;AAC5C,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,EAAU,OAAO,KAAA;AACtC,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,SAAiB,IAAA,GAAO,KAAA,CAAM,SAAS,EAAE,CAAA;AAC9D,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,SAAiB,IAAA,GAAO,KAAA,CAAM,SAAS,EAAE,CAAA;AAC9D,EAAA,OAAO,OAAO,KAAK,CAAA;AACrB;AAGO,SAAS,cAAc,OAAA,EAA0B;AACtD,EAAA,IAAI;AACF,IAAA,MAAM,GAAA,GAAM,MAAM,OAAO,CAAA;AACzB,IAAA,MAAM,MAAA,GAASC,2BAAkB,GAAG,CAAA;AACpC,IAAA,OAAO,CAAA,EAAG,MAAA,CAAO,KAAA,CAAM,CAAA,EAAG,CAAC,CAAC,CAAA,GAAA,EAAM,MAAA,CAAO,KAAA,CAAM,CAAA,CAAE,CAAC,CAAA,CAAA;AAAA,EACpD,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,OAAO,OAAO,CAAA,CAAE,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA,GAAI,KAAA;AAAA,EACxC;AACF;AAGO,SAAS,iBAAiB,OAAA,EAA0B;AACzD,EAAA,MAAM,GAAA,GAAM,MAAM,OAAO,CAAA;AACzB,EAAA,OAAOA,0BAAA,CAAkBC,gCAAA,CAAwB,GAAG,CAAC,CAAA;AACvD;AAGO,SAAS,cAAA,CAAe,GAAY,CAAA,EAAqB;AAC9D,EAAA,IAAI;AACF,IAAA,OAAO,gBAAA,CAAiB,CAAC,CAAA,KAAM,gBAAA,CAAiB,CAAC,CAAA;AAAA,EACnD,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,KAAA,CAAM,CAAC,CAAA,CAAE,WAAA,OAAkB,KAAA,CAAM,CAAC,EAAE,WAAA,EAAY;AAAA,EACzD;AACF;;;ACjCO,SAAS,WAAA,CAAY,aAAqB,QAAA,EAA0B;AACzE,EAAA,IAAI,CAAC,WAAA,IAAe,WAAA,KAAgB,GAAA,IAAO,WAAA,KAAgB,IAAI,OAAO,EAAA;AACtE,EAAA,MAAM,KAAA,GAAQ,WAAA,CAAY,KAAA,CAAM,GAAG,CAAA;AACnC,EAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,CAAC,CAAA,IAAK,GAAA;AAC1B,EAAA,MAAM,IAAA,GAAA,CAAQ,KAAA,CAAM,CAAC,CAAA,IAAK,EAAA,EAAI,MAAA,CAAO,QAAA,EAAU,GAAG,CAAA,CAAE,KAAA,CAAM,CAAA,EAAG,QAAQ,CAAA;AACrE,EAAA,OAAO,MAAA,CAAO,QAAQ,IAAI,CAAA;AAC5B;AAGO,SAAS,gBAAA,CAAiB,KAAoB,QAAA,EAA0B;AAC7E,EAAA,IAAI,CAAC,GAAA,IAAO,GAAA,KAAQ,GAAA,EAAK,OAAO,GAAA;AAChC,EAAA,MAAM,CAAA,GAAI,OAAO,GAAG,CAAA;AACpB,EAAA,IAAI,QAAA,KAAa,CAAA,EAAG,OAAO,CAAA,CAAE,QAAA,EAAS;AACtC,EAAA,MAAM,OAAA,GAAU,GAAA,IAAO,MAAA,CAAO,QAAQ,CAAA;AACtC,EAAA,MAAM,QAAQ,CAAA,GAAI,OAAA;AAClB,EAAA,MAAM,OAAO,CAAA,GAAI,OAAA;AACjB,EAAA,IAAI,IAAA,KAAS,EAAA,EAAI,OAAO,KAAA,CAAM,QAAA,EAAS;AACvC,EAAA,MAAM,OAAA,GAAU,IAAA,CAAK,QAAA,EAAS,CAAE,QAAA,CAAS,UAAU,GAAG,CAAA,CAAE,OAAA,CAAQ,KAAA,EAAO,EAAE,CAAA;AACzE,EAAA,OAAO,CAAA,EAAG,KAAK,CAAA,CAAA,EAAI,OAAO,CAAA,CAAA;AAC5B;;;ACnBO,SAAS,eAAe,OAAA,EAAkC;AAC/D,EAAA,MAAM,CAAA,GAAI,OAAO,OAAO,CAAA;AACxB,EAAA,IAAI,CAAA,GAAI,MAAM,OAAO,CAAA,EAAG,KAAK,KAAA,CAAM,CAAA,GAAI,EAAE,CAAC,CAAA,CAAA,CAAA;AAC1C,EAAA,MAAM,CAAA,GAAI,IAAA,CAAK,KAAA,CAAM,CAAA,GAAI,IAAI,CAAA;AAC7B,EAAA,IAAI,CAAA,IAAK,EAAA,EAAI,OAAO,CAAA,EAAG,IAAA,CAAK,KAAA,CAAM,CAAA,GAAI,EAAE,CAAC,CAAA,EAAA,EAAK,CAAA,GAAI,EAAE,CAAA,CAAA,CAAA;AACpD,EAAA,OAAO,GAAG,CAAC,CAAA,CAAA,CAAA;AACb;AAGO,SAAS,gBAAgB,EAAA,EAAoB;AAClD,EAAA,IAAI,EAAA,KAAO,IAAI,OAAO,IAAA;AACtB,EAAA,OAAO,IAAI,IAAA,CAAK,MAAA,CAAO,EAAE,CAAA,GAAI,GAAI,EAAE,cAAA,EAAe;AACpD;;;ACEO,SAAS,aAAA,CAAc,GAAgB,UAAA,EAAwC;AACpF,EAAA,IAAI,CAAA,CAAE,WAAW,OAAO,QAAA;AACxB,EAAA,IAAI,CAAA,CAAE,YAAY,OAAO,YAAA;AACzB,EAAA,IAAI,CAAA,CAAE,MAAA,KAAW,WAAA,EAAa,OAAO,WAAA;AAErC,EAAA,MAAM,MAAM,UAAA,IAAc,IAAA,CAAK,MAAM,IAAA,CAAK,GAAA,KAAQ,GAAI,CAAA;AACtD,EAAA,MAAM,QAAA,GAAW,MAAA,CAAO,CAAA,CAAE,SAAS,CAAA;AACnC,EAAA,MAAM,QAAA,GAAW,MAAA,CAAO,CAAA,CAAE,QAAQ,CAAA;AAClC,EAAA,MAAM,WAAW,CAAA,CAAE,QAAA,KAAa,SAAY,MAAA,CAAO,CAAA,CAAE,QAAQ,CAAA,GAAI,CAAA;AACjE,EAAA,MAAM,SAAA,GAAY,MAAA,CAAO,CAAA,CAAE,sBAAsB,CAAA;AAGjD,EAAA,IAAI,aAAa,CAAA,EAAG;AAElB,IAAA,IAAI,QAAA,GAAW,CAAA,IAAK,GAAA,GAAM,QAAA,EAAU,OAAO,SAAA;AAC3C,IAAA,OAAO,MAAA;AAAA,EACT;AAGA,EAAA,IAAI,SAAA,GAAY,SAAS,OAAO,SAAA;AAGhC,EAAA,IAAI,GAAA,GAAM,QAAA,GAAW,QAAA,EAAU,OAAO,SAAA;AAEtC,EAAA,OAAO,QAAA;AACT;;;AClCO,IAAM,MAAA,GAAsB;AAAA,EACjC;AAAA,IACE,MAAA,EAAQ,KAAA;AAAA,IACR,IAAA,EAAM,OAAA;AAAA,IACN,QAAA,EAAU,EAAA;AAAA,IACV,OAAA,EACE,gGAAA;AAAA,IACF,SAAA,EAAW;AAAA,MACT,OAAA,EAAS,oEAAA;AAAA,MACT,OAAA,EAAS;AAAA;AACX,GACF;AAAA,EACA;AAAA,IACE,MAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAM,gBAAA;AAAA,IACN,QAAA,EAAU,EAAA;AAAA,IACV,OAAA,EAAS,uEAAA;AAAA,IACT,SAAA,EAAW;AAAA,MACT,OAAA,EAAS,oEAAA;AAAA,MACT,OAAA,EAAS;AAAA;AACX,GACF;AAAA,EACA;AAAA,IACE,MAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAM,UAAA;AAAA,IACN,QAAA,EAAU,CAAA;AAAA,IACV,OAAA,EACE,6IAAA;AAAA,IACF,SAAA,EAAW;AAAA,MACT,OAAA,EAAS,oEAAA;AAAA,MACT,OAAA,EAAS;AAAA;AACX,GACF;AAAA,EACA;AAAA,IACE,MAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAM,YAAA;AAAA,IACN,QAAA,EAAU,CAAA;AAAA,IACV,OAAA,EACE,6IAAA;AAAA,IACF,SAAA,EAAW;AAAA,MACT,OAAA,EAAS,oEAAA;AAAA,MACT,OAAA,EAAS;AAAA;AACX,GACF;AAAA,EACA;AAAA,IACE,MAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAM,iBAAA;AAAA,IACN,QAAA,EAAU,CAAA;AAAA,IACV,OAAA,EACE,6IAAA;AAAA,IACF,SAAA,EAAW;AAAA,MACT,OAAA,EAAS,oEAAA;AAAA,MACT,OAAA,EAAS;AAAA;AACX,GACF;AAAA,EACA;AAAA,IACE,MAAA,EAAQ,KAAA;AAAA,IACR,IAAA,EAAM,gBAAA;AAAA,IACN,QAAA,EAAU,EAAA;AAAA,IACV,OAAA,EACE,6IAAA;AAAA,IACF,SAAA,EAAW;AAAA,MACT,OAAA,EAAS;AAAA;AACX,GACF;AAAA,EACA;AAAA,IACE,MAAA,EAAQ,QAAA;AAAA,IACR,IAAA,EAAM,eAAA;AAAA,IACN,QAAA,EAAU,EAAA;AAAA,IACV,OAAA,EAAS,qEAAA;AAAA,IACT,SAAA,EAAW;AAAA,MACT,OAAA,EAAS,oEAAA;AAAA,MACT,OAAA,EAAS;AAAA;AACX,GACF;AAAA;AAAA,EAEA;AAAA,IACE,MAAA,EAAQ,OAAA;AAAA,IACR,IAAA,EAAM,WAAA;AAAA,IACN,QAAA,EAAU,CAAA;AAAA,IACV,SAAA,EAAW;AAAA,MACT,OAAA,EAAS;AAAA;AACX,GACF;AAAA,EACA;AAAA,IACE,MAAA,EAAQ,OAAA;AAAA,IACR,IAAA,EAAM,WAAA;AAAA,IACN,QAAA,EAAU,EAAA;AAAA,IACV,SAAA,EAAW;AAAA,MACT,OAAA,EAAS;AAAA;AACX,GACF;AAAA,EACA;AAAA,IACE,MAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAM,UAAA;AAAA,IACN,QAAA,EAAU,EAAA;AAAA,IACV,SAAA,EAAW;AAAA,MACT,OAAA,EAAS;AAAA;AACX,GACF;AAAA,EACA;AAAA,IACE,MAAA,EAAQ,UAAA;AAAA,IACR,IAAA,EAAM,WAAA;AAAA,IACN,QAAA,EAAU,CAAA;AAAA,IACV,SAAA,EAAW;AAAA,MACT,OAAA,EAAS;AAAA;AACX,GACF;AAAA;AAAA,EAEA;AAAA,IACE,MAAA,EAAQ,SAAA;AAAA,IACR,IAAA,EAAM,eAAA;AAAA,IACN,QAAA,EAAU,CAAA;AAAA,IACV,SAAA,EAAW,QAAA;AAAA,IACX,SAAA,EAAW;AAAA,MACT,OAAA,EAAS;AAAA;AACX,GACF;AAAA,EACA;AAAA,IACE,MAAA,EAAQ,SAAA;AAAA,IACR,IAAA,EAAM,aAAA;AAAA,IACN,QAAA,EAAU,CAAA;AAAA,IACV,SAAA,EAAW,QAAA;AAAA,IACX,SAAA,EAAW;AAAA,MACT,OAAA,EAAS;AAAA;AACX;AAEJ;AAGA,SAAS,aAAa,IAAA,EAAsB;AAC1C,EAAA,OAAO,OAAO,IAAA,CAAK,OAAA,CAAQ,QAAA,EAAU,EAAE,EAAE,WAAA,EAAY;AACvD;AAGO,SAAS,kBAAkB,OAAA,EAA8B;AAC9D,EAAA,OAAO,MAAA,CAAO,MAAA;AAAA,IACZ,CAAC,MAAM,CAAA,CAAE,SAAA,KAAc,YAAY,CAAA,CAAE,SAAA,CAAU,OAAmC,CAAA,KAAM;AAAA,GAC1F;AACF;AAGO,SAAS,oBAAoB,OAAA,EAA8B;AAChE,EAAA,OAAO,MAAA,CAAO,OAAO,CAAC,CAAA,KAAM,EAAE,SAAA,CAAU,OAAmC,MAAM,MAAS,CAAA;AAC5F;AAGO,SAAS,mBAAmB,OAAA,EAAwC;AACzE,EAAA,MAAM,UAAA,GAAa,aAAa,OAAO,CAAA;AACvC,EAAA,OAAO,MAAA,CAAO,IAAA;AAAA,IAAK,CAAC,CAAA,KAClB,MAAA,CAAO,MAAA,CAAO,EAAE,SAAS,CAAA,CAAE,IAAA,CAAK,CAAC,MAAM,CAAA,KAAM,MAAA,IAAa,YAAA,CAAa,CAAC,MAAM,UAAU;AAAA,GAC1F;AACF;;;AC3JO,SAAS,eAAA,CACd,UAAA,EACA,WAAA,EACA,uBAAA,EACQ;AACR,EAAA,MAAM,WAAA,GAAc,uBAAA,KAA4B,EAAA,GAAK,EAAA,GAAK,uBAAA;AAC1D,EAAA,OAAQ,UAAA,IAAc,cAAc,oBAAA,CAAA,GAAyB,WAAA;AAC/D;AAGO,SAAS,iBAAA,CAAkB,OAAe,UAAA,EAA4B;AAC3E,EAAA,OAAQ,QAAQ,UAAA,GAAc,OAAA;AAChC;AAGO,SAAS,kBAAA,CACd,MAAA,EACA,WAAA,EACA,uBAAA,EACQ;AACR,EAAA,MAAM,YAAA,GAAe,uBAAA,KAA4B,EAAA,GAAK,EAAA,GAAK,uBAAA;AAC3D,EAAA,OAAQ,MAAA,GAAS,gBAAiB,WAAA,GAAc,oBAAA,CAAA;AAClD;AAGO,SAAS,kBAAA,CAAmB,QAAgB,MAAA,EAAwB;AACzE,EAAA,OAAQ,SAAS,MAAA,GAAU,OAAA;AAC7B;AAGO,SAAS,OAAA,CAAQ,GAAW,CAAA,EAAmB;AACpD,EAAA,IAAI,CAAA,KAAM,IAAI,OAAO,EAAA;AACrB,EAAA,OAAA,CAAQ,CAAA,GAAI,IAAI,EAAA,IAAM,CAAA;AACxB;AAWO,SAAS,eAAA,CAAgB,MAAA,EAAgB,OAAA,EAAiB,QAAA,EAA0B;AACzF,EAAA,IAAI,MAAA,KAAW,EAAA,IAAM,OAAA,KAAY,EAAA,EAAI,OAAO,EAAA;AAC5C,EAAA,IAAI,OAAA,IAAW,UAAU,OAAO,MAAA;AAChC,EAAA,OAAO,OAAA,CAAQ,MAAA,GAAS,OAAA,EAAS,QAAQ,CAAA;AAC3C;;;AC9CO,IAAM,2BAAA,GAA8B;AAgDpC,SAAS,kBAAA,CAAmB,QAAgB,WAAA,EAA6B;AAC9E,EAAA,IAAI,WAAA,KAAgB,IAAI,OAAO,EAAA;AAC/B,EAAA,OAAQ,SAAS,OAAA,GAAW,WAAA;AAC9B;AAQO,SAAS,sBAAA,CACd,UAAA,EACA,MAAA,EACA,WAAA,EACQ;AACR,EAAA,IAAI,WAAA,KAAgB,EAAA,IAAM,MAAA,KAAW,EAAA,EAAI,OAAO,EAAA;AAChD,EAAA,OAAQ,aAAa,MAAA,GAAU,WAAA;AACjC;AAcO,SAAS,qBAAqB,MAAA,EASnB;AAChB,EAAA,MAAM,EAAE,MAAA,EAAQ,WAAA,EAAa,OAAA,EAAS,UAAS,GAAI,MAAA;AAEnD,EAAA,MAAM,QAAA,GAAW,kBAAA,CAAmB,MAAA,EAAQ,WAAW,CAAA;AAEvD,EAAA,MAAM,IAAA,GAAqB,MAAA,CAAO,UAAA,CAAW,GAAA,CAAI,CAAC,KAAA,MAAW;AAAA,IAC3D,KAAA;AAAA,IACA,iBAAA,EAAmB,sBAAA,CAAuB,KAAA,CAAM,KAAA,EAAO,QAAQ,WAAW;AAAA,GAC5E,CAAE,CAAA;AAEF,EAAA,MAAM,QAAA,GAAmC,MAAA,CAAO,cAAA,CAAe,GAAA,CAAI,CAAC,KAAA,KAAU;AAC5E,IAAA,MAAM,YAAA,GAAe,sBAAA,CAAuB,KAAA,CAAM,KAAA,EAAO,QAAQ,WAAW,CAAA;AAC5E,IAAA,MAAM,kBACJ,QAAA,KAAa,EAAA,GAAK,eAAe,eAAA,CAAgB,YAAA,EAAc,SAAS,QAAQ,CAAA;AAClF,IAAA,OAAO,EAAE,KAAA,EAAO,YAAA,EAAc,eAAA,EAAgB;AAAA,EAChD,CAAC,CAAA;AAED,EAAA,MAAM,UAAA,GAA2B,MAAA,CAAO,gBAAA,CAAiB,GAAA,CAAI,CAAC,KAAA,MAAW;AAAA,IACvE,KAAA;AAAA,IACA,iBAAA,EAAmB,sBAAA,CAAuB,KAAA,CAAM,KAAA,EAAO,QAAQ,WAAW;AAAA,GAC5E,CAAE,CAAA;AAEF,EAAA,OAAO;AAAA,IACL,eAAe,MAAA,CAAO,aAAA;AAAA,IACtB,MAAA;AAAA,IACA,WAAA;AAAA,IACA,QAAA;AAAA,IACA,IAAA;AAAA,IACA,QAAA;AAAA,IACA,UAAA;AAAA,IACA,OAAA,EAAS,QAAA;AAAA,IACT,OAAA;AAAA,IACA;AAAA,GACF;AACF;AAeO,SAAS,yBAAA,CACd,MAAA,EACA,OAAA,EACA,QAAA,EACA,gBAAwB,2BAAA,EAChB;AACR,EAAA,IAAI,QAAA,KAAa,IAAI,OAAO,MAAA;AAC5B,EAAA,MAAM,kBAAkB,OAAA,GAAU,aAAA;AAClC,EAAA,OAAO,eAAA,CAAgB,MAAA,EAAQ,eAAA,EAAiB,QAAQ,CAAA;AAC1D;AAUO,SAAS,yBAAyB,MAAA,EAQoB;AAC3D,EAAA,MAAM,EAAE,MAAA,EAAQ,WAAA,EAAa,OAAA,EAAS,UAAS,GAAI,MAAA;AACnD,EAAA,MAAM,MAAA,GAAS,OAAO,aAAA,IAAiB,2BAAA;AAEvC,EAAA,MAAM,SAAA,GAA0B,MAAA,CAAO,UAAA,CAAW,GAAA,CAAI,CAAC,KAAA,MAAW;AAAA,IAChE,KAAA;AAAA,IACA,iBAAA,EAAmB,sBAAA,CAAuB,KAAA,CAAM,KAAA,EAAO,QAAQ,WAAW;AAAA,GAC5E,CAAE,CAAA;AAEF,EAAA,MAAM,aAAA,GAA8B,MAAA,CAAO,cAAA,CAAe,GAAA,CAAI,CAAC,KAAA,KAAU;AACvE,IAAA,MAAM,YAAA,GAAe,sBAAA,CAAuB,KAAA,CAAM,KAAA,EAAO,QAAQ,WAAW,CAAA;AAC5E,IAAA,MAAM,WAAA,GAAc,yBAAA,CAA0B,YAAA,EAAc,OAAA,EAAS,UAAU,MAAM,CAAA;AACrF,IAAA,OAAO,EAAE,KAAA,EAAO,iBAAA,EAAmB,WAAA,EAAY;AAAA,EACjD,CAAC,CAAA;AAED,EAAA,OAAO,EAAE,WAAW,aAAA,EAAc;AACpC;ACvLO,IAAM,SAAA,GAAY;AAAA,EACvB,kBAAA,EAAoBC,aAAA,CAAK,mBAAA,CAAoB,oBAAoB,CAAA;AAAA,EACjE,iBAAA,EAAmBA,aAAA,CAAK,mBAAA,CAAoB,mBAAmB,CAAA;AAAA,EAC/D,oBAAA,EAAsBA,aAAA,CAAK,mBAAA,CAAoB,sBAAsB,CAAA;AAAA,EACrE,iBAAA,EAAmBA,aAAA,CAAK,mBAAA,CAAoB,mBAAmB,CAAA;AAAA,EAC/D,qBAAA,EAAuBA,aAAA,CAAK,mBAAA,CAAoB,uBAAuB,CAAA;AAAA,EACvE,cAAA,EAAgBA,aAAA,CAAK,mBAAA,CAAoB,gBAAgB,CAAA;AAAA,EACzD,cAAA,EAAgBA,aAAA,CAAK,mBAAA,CAAoB,gBAAgB,CAAA;AAAA,EACzD,YAAA,EAAcA,aAAA,CAAK,mBAAA,CAAoB,cAAc,CAAA;AAAA,EACrD,WAAA,EAAaA,aAAA,CAAK,mBAAA,CAAoB,aAAa,CAAA;AAAA,EACnD,cAAA,EAAgBA,aAAA,CAAK,mBAAA,CAAoB,gBAAgB,CAAA;AAAA,EACzD,mBAAA,EAAqBA,aAAA,CAAK,mBAAA,CAAoB,qBAAqB;AACrE;ACVA,SAAS,WAAA,CAAY,KAAa,IAAA,EAAsB;AACtD,EAAA,OAAOH,gBAAAA,CAAQ,WAAA,CAAY,EAAE,GAAA,EAAK,MAAA,CAAO,GAAG,CAAA,EAAG,IAAA,EAAM,MAAA,CAAO,IAAI,CAAA,EAAG,CAAA;AACrE;AAGO,SAAS,WAAW,GAAA,EAAkC;AAC3D,EAAA,MAAM,QAAA,GAAW,GAAA,CAAI,IAAA,CAAK,CAAC,CAAA;AAE3B,EAAA,QAAQ,QAAA;AAAU,IAChB,KAAK,UAAU,kBAAA,EAAoB;AAGjC,MAAA,OAAO;AAAA,QACL,IAAA,EAAM,oBAAA;AAAA,QACN,cAAA,EAAgB,YAAY,GAAA,CAAI,IAAA,CAAK,CAAC,CAAA,EAAG,GAAA,CAAI,IAAA,CAAK,CAAC,CAAC,CAAA;AAAA,QACpD,OAAA,EAAS,GAAA,CAAI,IAAA,CAAK,CAAC,CAAA;AAAA,QACnB,WAAW,MAAA,CAAO,GAAA,CAAI,IAAA,CAAK,CAAC,CAAC,CAAA,KAAM,EAAA;AAAA,QACnC,kBAAkB,GAAA,CAAI,gBAAA;AAAA,QACtB,cAAc,GAAA,CAAI;AAAA,OACpB;AAAA,IACF;AAAA,IAEA,KAAK,UAAU,iBAAA,EAAmB;AAGhC,MAAA,OAAO;AAAA,QACL,IAAA,EAAM,mBAAA;AAAA,QACN,cAAA,EAAgB,YAAY,GAAA,CAAI,IAAA,CAAK,CAAC,CAAA,EAAG,GAAA,CAAI,IAAA,CAAK,CAAC,CAAC,CAAA;AAAA,QACpD,QAAA,EAAU,GAAA,CAAI,IAAA,CAAK,CAAC,CAAA;AAAA,QACpB,MAAA,EAAQ,GAAA,CAAI,IAAA,CAAK,CAAC,CAAA;AAAA,QAClB,sBAAA,EAAwB,YAAY,GAAA,CAAI,IAAA,CAAK,CAAC,CAAA,EAAG,GAAA,CAAI,IAAA,CAAK,CAAC,CAAC,CAAA;AAAA,QAC5D,aAAA,EAAe,YAAY,GAAA,CAAI,IAAA,CAAK,CAAC,CAAA,EAAG,GAAA,CAAI,IAAA,CAAK,CAAC,CAAC,CAAA;AAAA,QACnD,kBAAkB,GAAA,CAAI,gBAAA;AAAA,QACtB,cAAc,GAAA,CAAI;AAAA,OACpB;AAAA,IACF;AAAA,IAEA,KAAK,UAAU,oBAAA,EAAsB;AAGnC,MAAA,OAAO;AAAA,QACL,IAAA,EAAM,sBAAA;AAAA,QACN,cAAA,EAAgB,YAAY,GAAA,CAAI,IAAA,CAAK,CAAC,CAAA,EAAG,GAAA,CAAI,IAAA,CAAK,CAAC,CAAC,CAAA;AAAA,QACpD,OAAA,EAAS,GAAA,CAAI,IAAA,CAAK,CAAC,CAAA;AAAA,QACnB,kBAAkB,GAAA,CAAI,gBAAA;AAAA,QACtB,cAAc,GAAA,CAAI;AAAA,OACpB;AAAA,IACF;AAAA,IAEA,KAAK,UAAU,iBAAA,EAAmB;AAGhC,MAAA,OAAO;AAAA,QACL,IAAA,EAAM,mBAAA;AAAA,QACN,cAAA,EAAgB,YAAY,GAAA,CAAI,IAAA,CAAK,CAAC,CAAA,EAAG,GAAA,CAAI,IAAA,CAAK,CAAC,CAAC,CAAA;AAAA,QACpD,OAAA,EAAS,GAAA,CAAI,IAAA,CAAK,CAAC,CAAA;AAAA,QACnB,kBAAkB,GAAA,CAAI,gBAAA;AAAA,QACtB,cAAc,GAAA,CAAI;AAAA,OACpB;AAAA,IACF;AAAA,IAEA,KAAK,UAAU,qBAAA,EAAuB;AAGpC,MAAA,OAAO;AAAA,QACL,IAAA,EAAM,uBAAA;AAAA,QACN,cAAA,EAAgB,YAAY,GAAA,CAAI,IAAA,CAAK,CAAC,CAAA,EAAG,GAAA,CAAI,IAAA,CAAK,CAAC,CAAC,CAAA;AAAA,QACpD,UAAA,EAAY,GAAA,CAAI,IAAA,CAAK,CAAC,CAAA;AAAA,QACtB,kBAAkB,GAAA,CAAI,gBAAA;AAAA,QACtB,cAAc,GAAA,CAAI;AAAA,OACpB;AAAA,IACF;AAAA,IAEA,KAAK,UAAU,cAAA,EAAgB;AAG7B,MAAA,OAAO;AAAA,QACL,IAAA,EAAM,gBAAA;AAAA,QACN,cAAA,EAAgB,YAAY,GAAA,CAAI,IAAA,CAAK,CAAC,CAAA,EAAG,GAAA,CAAI,IAAA,CAAK,CAAC,CAAC,CAAA;AAAA,QACpD,QAAA,EAAU,GAAA,CAAI,IAAA,CAAK,CAAC,CAAA;AAAA,QACpB,MAAA,EAAQ,YAAY,GAAA,CAAI,IAAA,CAAK,CAAC,CAAA,EAAG,GAAA,CAAI,IAAA,CAAK,CAAC,CAAC,CAAA;AAAA,QAC5C,kBAAkB,GAAA,CAAI,gBAAA;AAAA,QACtB,cAAc,GAAA,CAAI;AAAA,OACpB;AAAA,IACF;AAAA,IAEA,KAAK,UAAU,cAAA,EAAgB;AAG7B,MAAA,OAAO;AAAA,QACL,IAAA,EAAM,gBAAA;AAAA,QACN,QAAA,EAAU,GAAA,CAAI,IAAA,CAAK,CAAC,CAAA;AAAA,QACpB,IAAA,EAAM,GAAA,CAAI,IAAA,CAAK,CAAC,CAAA;AAAA,QAChB,EAAA,EAAI,GAAA,CAAI,IAAA,CAAK,CAAC,CAAA;AAAA,QACd,EAAA,EAAI,YAAY,GAAA,CAAI,IAAA,CAAK,CAAC,CAAA,EAAG,GAAA,CAAI,IAAA,CAAK,CAAC,CAAC,CAAA;AAAA,QACxC,KAAA,EAAO,YAAY,GAAA,CAAI,IAAA,CAAK,CAAC,CAAA,EAAG,GAAA,CAAI,IAAA,CAAK,CAAC,CAAC,CAAA;AAAA,QAC3C,kBAAkB,GAAA,CAAI,gBAAA;AAAA,QACtB,cAAc,GAAA,CAAI;AAAA,OACpB;AAAA,IACF;AAAA,IAEA,KAAK,UAAU,YAAA,EAAc;AAG3B,MAAA,OAAO;AAAA,QACL,IAAA,EAAM,cAAA;AAAA,QACN,cAAA,EAAgB,YAAY,GAAA,CAAI,IAAA,CAAK,CAAC,CAAA,EAAG,GAAA,CAAI,IAAA,CAAK,CAAC,CAAC,CAAA;AAAA,QACpD,QAAA,EAAU,GAAA,CAAI,IAAA,CAAK,CAAC,CAAA;AAAA,QACpB,MAAA,EAAQ,GAAA,CAAI,IAAA,CAAK,CAAC,CAAA;AAAA,QAClB,OAAA,EAAS,GAAA,CAAI,IAAA,CAAK,CAAC,CAAA;AAAA,QACnB,kBAAA,EAAoB,YAAY,GAAA,CAAI,IAAA,CAAK,CAAC,CAAA,EAAG,GAAA,CAAI,IAAA,CAAK,CAAC,CAAC,CAAA;AAAA,QACxD,kBAAkB,GAAA,CAAI,gBAAA;AAAA,QACtB,cAAc,GAAA,CAAI;AAAA,OACpB;AAAA,IACF;AAAA,IAEA,KAAK,UAAU,WAAA,EAAa;AAG1B,MAAA,OAAO;AAAA,QACL,IAAA,EAAM,aAAA;AAAA,QACN,cAAA,EAAgB,YAAY,GAAA,CAAI,IAAA,CAAK,CAAC,CAAA,EAAG,GAAA,CAAI,IAAA,CAAK,CAAC,CAAC,CAAA;AAAA,QACpD,UAAA,EAAY,GAAA,CAAI,IAAA,CAAK,CAAC,CAAA;AAAA,QACtB,KAAA,EAAO,GAAA,CAAI,IAAA,CAAK,CAAC,CAAA;AAAA,QACjB,QAAA,EAAU,YAAY,GAAA,CAAI,IAAA,CAAK,CAAC,CAAA,EAAG,GAAA,CAAI,IAAA,CAAK,CAAC,CAAC,CAAA;AAAA,QAC9C,gBAAA,EAAkB,YAAY,GAAA,CAAI,IAAA,CAAK,CAAC,CAAA,EAAG,GAAA,CAAI,IAAA,CAAK,CAAC,CAAC,CAAA;AAAA,QACtD,kBAAkB,GAAA,CAAI,gBAAA;AAAA,QACtB,cAAc,GAAA,CAAI;AAAA,OACpB;AAAA,IACF;AAAA,IAEA,KAAK,UAAU,cAAA,EAAgB;AAG7B,MAAA,OAAO;AAAA,QACL,IAAA,EAAM,gBAAA;AAAA,QACN,UAAA,EAAY,GAAA,CAAI,IAAA,CAAK,CAAC,CAAA;AAAA,QACtB,KAAA,EAAO,GAAA,CAAI,IAAA,CAAK,CAAC,CAAA;AAAA,QACjB,kBAAkB,GAAA,CAAI,gBAAA;AAAA,QACtB,cAAc,GAAA,CAAI;AAAA,OACpB;AAAA,IACF;AAAA,IAEA,KAAK,UAAU,mBAAA,EAAqB;AAGlC,MAAA,OAAO;AAAA,QACL,IAAA,EAAM,qBAAA;AAAA,QACN,KAAA,EAAO,GAAA,CAAI,IAAA,CAAK,CAAC,CAAA;AAAA,QACjB,aAAA,EAAe,GAAA,CAAI,IAAA,CAAK,CAAC,CAAA;AAAA,QACzB,kBAAkB,GAAA,CAAI,gBAAA;AAAA,QACtB,cAAc,GAAA,CAAI;AAAA,OACpB;AAAA,IACF;AAAA,IAEA;AACE,MAAA,OAAO,IAAA;AAAA;AAEb;AAGO,SAAS,YAAY,SAAA,EAAqC;AAC/D,EAAA,MAAM,UAAwB,EAAC;AAC/B,EAAA,KAAA,MAAW,OAAO,SAAA,EAAW;AAC3B,IAAA,MAAM,MAAA,GAAS,WAAW,GAAG,CAAA;AAC7B,IAAA,IAAI,MAAA,EAAQ,OAAA,CAAQ,IAAA,CAAK,MAAM,CAAA;AAAA,EACjC;AACA,EAAA,OAAO,OAAA;AACT;ACvKA,IAAM,cAAA,GAAiB,mEAAA;AAahB,SAAS,iBAAiB,OAAA,EAA+B;AAC9D,EAAA,MAAM,QAAA,GAAqB,CAAC,MAAA,CAAO,OAAA,CAAQ,MAAM,CAAC,CAAA;AAClD,EAAA,KAAA,MAAW,SAAS,OAAA,EAAS;AAC3B,IAAA,QAAA,CAAS,IAAA,CAAK,MAAM,SAAS,CAAA;AAC7B,IAAA,MAAM,CAAC,GAAA,EAAK,IAAI,CAAA,GAAI,MAAA,CAAO,MAAM,GAAG,CAAA;AACpC,IAAA,MAAM,UAAUG,aAAAA,CAAK,6BAAA,CAA8B,CAAC,cAAA,EAAgB,GAAA,EAAK,IAAI,CAAC,CAAA;AAC9E,IAAA,QAAA,CAAS,KAAK,OAAO,CAAA;AAAA,EACvB;AACA,EAAA,OAAOA,aAAAA,CAAK,8BAA8B,QAAQ,CAAA;AACpD;AAcO,SAAS,WAAW,MAAA,EAAyB;AAClD,EAAA,MAAM,QAAA,GAAqB,CAAC,MAAA,CAAO,MAAA,CAAO,MAAM,CAAC,CAAA;AACjD,EAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AAC1B,IAAA,QAAA,CAAS,IAAA,CAAK,MAAM,aAAa,CAAA;AACjC,IAAA,QAAA,CAAS,KAAK,MAAA,CAAO,eAAA,CAAgB,KAAA,CAAM,UAAU,CAAC,CAAC,CAAA;AACvD,IAAA,MAAM,CAAC,IAAA,EAAM,KAAK,CAAA,GAAI,MAAA,CAAO,MAAM,KAAK,CAAA;AACxC,IAAA,QAAA,CAAS,IAAA,CAAK,MAAM,KAAK,CAAA;AACzB,IAAA,MAAM,CAAC,MAAA,EAAQ,OAAO,CAAA,GAAI,MAAA,CAAO,MAAM,QAAQ,CAAA;AAC/C,IAAA,QAAA,CAAS,IAAA,CAAK,QAAQ,OAAO,CAAA;AAAA,EAC/B;AACA,EAAA,OAAOA,aAAAA,CAAK,8BAA8B,QAAQ,CAAA;AACpD;;;AChDA,IAAM,YAAA,GAAe;AAAA,EACnB,IAAA,EAAM,OAAA;AAAA,EACN,OAAA,EAAS,IAAA;AAAA,EACT,OAAA,EAAS,EAAA;AAAA;AAAA,EACT,QAAA,EAAU;AACZ,CAAA;AAMO,SAAS,6BAA6B,MAAA,EAa/B;AACZ,EAAA,OAAO;AAAA,IACL,KAAA,EAAO;AAAA,MACL,cAAA,EAAgB;AAAA,QACd,EAAE,IAAA,EAAM,MAAA,EAAQ,IAAA,EAAM,aAAA,EAAc;AAAA,QACpC,EAAE,IAAA,EAAM,SAAA,EAAW,IAAA,EAAM,aAAA,EAAc;AAAA,QACvC,EAAE,IAAA,EAAM,SAAA,EAAW,IAAA,EAAM,aAAA,EAAc;AAAA,QACvC,EAAE,IAAA,EAAM,UAAA,EAAY,IAAA,EAAM,aAAA;AAAc,OAC1C;AAAA,MACA,gBAAA,EAAkB;AAAA,QAChB,EAAE,IAAA,EAAM,UAAA,EAAY,IAAA,EAAM,iBAAA,EAAkB;AAAA,QAC5C,EAAE,IAAA,EAAM,WAAA,EAAa,IAAA,EAAM,MAAA,EAAO;AAAA,QAClC,EAAE,IAAA,EAAM,eAAA,EAAiB,IAAA,EAAM,MAAA,EAAO;AAAA,QACtC,EAAE,IAAA,EAAM,iBAAA,EAAmB,IAAA,EAAM,MAAA,EAAO;AAAA,QACxC,EAAE,IAAA,EAAM,YAAA,EAAc,IAAA,EAAM,MAAA,EAAO;AAAA,QACnC,EAAE,IAAA,EAAM,gBAAA,EAAkB,IAAA,EAAM,MAAA,EAAO;AAAA,QACvC,EAAE,IAAA,EAAM,kBAAA,EAAoB,IAAA,EAAM,MAAA,EAAO;AAAA,QACzC,EAAE,IAAA,EAAM,UAAA,EAAY,IAAA,EAAM,MAAA,EAAO;AAAA,QACjC,EAAE,IAAA,EAAM,UAAA,EAAY,IAAA,EAAM,MAAA,EAAO;AAAA,QACjC,EAAE,IAAA,EAAM,cAAA,EAAgB,IAAA,EAAM,MAAA,EAAO;AAAA,QACrC,EAAE,IAAA,EAAM,OAAA,EAAS,IAAA,EAAM,MAAA;AAAO;AAChC,KACF;AAAA,IACA,WAAA,EAAa,kBAAA;AAAA,IACb,MAAA,EAAQ;AAAA,MACN,GAAG,YAAA;AAAA,MACH,SAAS,MAAA,CAAO;AAAA,KAClB;AAAA,IACA,OAAA,EAAS;AAAA,MACP,UAAU,MAAA,CAAO,QAAA;AAAA,MACjB,SAAA,EAAW,UAAA,CAAW,MAAA,CAAO,UAAU,CAAA;AAAA,MACvC,aAAA,EAAe,UAAA,CAAW,MAAA,CAAO,cAAc,CAAA;AAAA,MAC/C,eAAA,EAAiB,UAAA,CAAW,MAAA,CAAO,gBAAgB,CAAA;AAAA,MACnD,UAAA,EAAY,MAAA,CAAO,SAAA,CAAU,QAAA,EAAS;AAAA,MACtC,cAAA,EAAgB,MAAA,CAAO,aAAA,CAAc,QAAA,EAAS;AAAA,MAC9C,gBAAA,EAAkB,MAAA,CAAO,eAAA,CAAgB,QAAA,EAAS;AAAA,MAClD,QAAA,EAAU,MAAA,CAAO,QAAA,CAAS,QAAA,EAAS;AAAA,MACnC,QAAA,EAAU,MAAA,CAAO,QAAA,CAAS,QAAA,EAAS;AAAA,MACnC,cAAc,MAAA,CAAO,WAAA;AAAA,MACrB,KAAA,EAAO,MAAA,CAAO,KAAA,CAAM,QAAA;AAAS;AAC/B,GACF;AACF;AAMO,SAAS,sBAAsB,MAAA,EAMxB;AACZ,EAAA,OAAO;AAAA,IACL,KAAA,EAAO;AAAA,MACL,cAAA,EAAgB;AAAA,QACd,EAAE,IAAA,EAAM,MAAA,EAAQ,IAAA,EAAM,aAAA,EAAc;AAAA,QACpC,EAAE,IAAA,EAAM,SAAA,EAAW,IAAA,EAAM,aAAA,EAAc;AAAA,QACvC,EAAE,IAAA,EAAM,SAAA,EAAW,IAAA,EAAM,aAAA,EAAc;AAAA,QACvC,EAAE,IAAA,EAAM,UAAA,EAAY,IAAA,EAAM,aAAA;AAAc,OAC1C;AAAA,MACA,SAAA,EAAW;AAAA,QACT,EAAE,IAAA,EAAM,YAAA,EAAc,IAAA,EAAM,MAAA,EAAO;AAAA,QACnC,EAAE,IAAA,EAAM,QAAA,EAAU,IAAA,EAAM,iBAAA,EAAkB;AAAA,QAC1C,EAAE,IAAA,EAAM,wBAAA,EAA0B,IAAA,EAAM,MAAA,EAAO;AAAA,QAC/C,EAAE,IAAA,EAAM,OAAA,EAAS,IAAA,EAAM,MAAA;AAAO,OAChC;AAAA,MACA,IAAA,EAAM;AAAA,QACJ,EAAE,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,MAAA,EAAO;AAAA,QAC5B,EAAE,IAAA,EAAM,MAAA,EAAQ,IAAA,EAAM,MAAA;AAAO;AAC/B,KACF;AAAA,IACA,WAAA,EAAa,WAAA;AAAA,IACb,MAAA,EAAQ;AAAA,MACN,GAAG,YAAA;AAAA,MACH,SAAS,MAAA,CAAO;AAAA,KAClB;AAAA,IACA,OAAA,EAAS;AAAA,MACP,YAAY,MAAA,CAAO,SAAA;AAAA,MACnB,QAAQ,MAAA,CAAO,MAAA;AAAA,MACf,sBAAA,EAAwB;AAAA,QACtB,MAAM,MAAA,CAAO,oBAAA,GAAA,CAAyB,EAAA,IAAM,IAAA,IAAQ,IAAK,QAAA,EAAS;AAAA,QAClE,IAAA,EAAA,CAAO,MAAA,CAAO,oBAAA,IAAwB,IAAA,EAAM,QAAA;AAAS,OACvD;AAAA,MACA,KAAA,EAAO,MAAA,CAAO,KAAA,CAAM,QAAA;AAAS;AAC/B,GACF;AACF;AAMO,SAAS,2BAA2B,MAAA,EAM7B;AACZ,EAAA,OAAO;AAAA,IACL,KAAA,EAAO;AAAA,MACL,cAAA,EAAgB;AAAA,QACd,EAAE,IAAA,EAAM,MAAA,EAAQ,IAAA,EAAM,aAAA,EAAc;AAAA,QACpC,EAAE,IAAA,EAAM,SAAA,EAAW,IAAA,EAAM,aAAA,EAAc;AAAA,QACvC,EAAE,IAAA,EAAM,SAAA,EAAW,IAAA,EAAM,aAAA,EAAc;AAAA,QACvC,EAAE,IAAA,EAAM,UAAA,EAAY,IAAA,EAAM,aAAA;AAAc,OAC1C;AAAA,MACA,cAAA,EAAgB;AAAA,QACd,EAAE,IAAA,EAAM,YAAA,EAAc,IAAA,EAAM,MAAA,EAAO;AAAA,QACnC,EAAE,IAAA,EAAM,OAAA,EAAS,IAAA,EAAM,MAAA,EAAO;AAAA,QAC9B,EAAE,IAAA,EAAM,QAAA,EAAU,IAAA,EAAM,iBAAA,EAAkB;AAAA,QAC1C,EAAE,IAAA,EAAM,aAAA,EAAe,IAAA,EAAM,MAAA;AAAO;AACtC,KACF;AAAA,IACA,WAAA,EAAa,gBAAA;AAAA,IACb,MAAA,EAAQ;AAAA,MACN,GAAG,YAAA;AAAA,MACH,SAAS,MAAA,CAAO;AAAA,KAClB;AAAA,IACA,OAAA,EAAS;AAAA,MACP,YAAY,MAAA,CAAO,SAAA;AAAA,MACnB,KAAA,EAAO,MAAA,CAAO,KAAA,CAAM,QAAA,EAAS;AAAA,MAC7B,QAAQ,MAAA,CAAO,MAAA;AAAA,MACf,WAAA,EAAa,MAAA,CAAO,UAAA,CAAW,QAAA;AAAS;AAC1C,GACF;AACF;AAKA,SAAS,YAAY,KAAA,EAA8C;AACjE,EAAA,OAAO;AAAA,IACL,GAAA,EAAA,CAAM,KAAA,GAAA,CAAU,EAAA,IAAM,IAAA,IAAQ,IAAK,QAAA,EAAS;AAAA,IAC5C,IAAA,EAAA,CAAO,KAAA,IAAS,IAAA,EAAM,QAAA;AAAS,GACjC;AACF;AAGA,IAAM,oBAAA,GAAuB;AAAA,EAC3B,EAAE,IAAA,EAAM,MAAA,EAAQ,IAAA,EAAM,aAAA,EAAc;AAAA,EACpC,EAAE,IAAA,EAAM,SAAA,EAAW,IAAA,EAAM,aAAA,EAAc;AAAA,EACvC,EAAE,IAAA,EAAM,SAAA,EAAW,IAAA,EAAM,aAAA,EAAc;AAAA,EACvC,EAAE,IAAA,EAAM,UAAA,EAAY,IAAA,EAAM,aAAA;AAC5B,CAAA;AAGA,IAAM,SAAA,GAAY;AAAA,EAChB,EAAE,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,MAAA,EAAO;AAAA,EAC5B,EAAE,IAAA,EAAM,MAAA,EAAQ,IAAA,EAAM,MAAA;AACxB,CAAA;AAMO,SAAS,gCAAgC,MAAA,EAWlC;AACZ,EAAA,OAAO;AAAA,IACL,KAAA,EAAO;AAAA,MACL,cAAA,EAAgB,oBAAA;AAAA,MAChB,mBAAA,EAAqB;AAAA,QACnB,EAAE,IAAA,EAAM,QAAA,EAAU,IAAA,EAAM,iBAAA,EAAkB;AAAA,QAC1C,EAAE,IAAA,EAAM,WAAA,EAAa,IAAA,EAAM,MAAA,EAAO;AAAA,QAClC,EAAE,IAAA,EAAM,eAAA,EAAiB,IAAA,EAAM,MAAA,EAAO;AAAA,QACtC,EAAE,IAAA,EAAM,YAAA,EAAc,IAAA,EAAM,MAAA,EAAO;AAAA,QACnC,EAAE,IAAA,EAAM,gBAAA,EAAkB,IAAA,EAAM,MAAA,EAAO;AAAA,QACvC,EAAE,IAAA,EAAM,oBAAA,EAAsB,IAAA,EAAM,iBAAA,EAAkB;AAAA,QACtD,EAAE,IAAA,EAAM,UAAA,EAAY,IAAA,EAAM,MAAA,EAAO;AAAA,QACjC,EAAE,IAAA,EAAM,UAAA,EAAY,IAAA,EAAM,MAAA,EAAO;AAAA,QACjC,EAAE,IAAA,EAAM,OAAA,EAAS,IAAA,EAAM,MAAA;AAAO;AAChC,KACF;AAAA,IACA,WAAA,EAAa,qBAAA;AAAA,IACb,QAAQ,EAAE,GAAG,YAAA,EAAc,OAAA,EAAS,OAAO,OAAA,EAAQ;AAAA,IACnD,OAAA,EAAS;AAAA,MACP,QAAQ,MAAA,CAAO,MAAA;AAAA,MACf,SAAA,EAAW,UAAA,CAAW,MAAA,CAAO,UAAU,CAAA;AAAA,MACvC,aAAA,EAAe,UAAA,CAAW,MAAA,CAAO,cAAc,CAAA;AAAA,MAC/C,UAAA,EAAY,MAAA,CAAO,SAAA,CAAU,QAAA,EAAS;AAAA,MACtC,cAAA,EAAgB,MAAA,CAAO,aAAA,CAAc,QAAA,EAAS;AAAA,MAC9C,oBAAoB,MAAA,CAAO,iBAAA;AAAA,MAC3B,QAAA,EAAU,MAAA,CAAO,QAAA,CAAS,QAAA,EAAS;AAAA,MACnC,QAAA,EAAU,MAAA,CAAO,QAAA,CAAS,QAAA,EAAS;AAAA,MACnC,KAAA,EAAO,MAAA,CAAO,KAAA,CAAM,QAAA;AAAS;AAC/B,GACF;AACF;AAMO,SAAS,uCAAuC,MAAA,EAMzC;AACZ,EAAA,OAAO;AAAA,IACL,KAAA,EAAO;AAAA,MACL,cAAA,EAAgB,oBAAA;AAAA,MAChB,0BAAA,EAA4B;AAAA,QAC1B,EAAE,IAAA,EAAM,YAAA,EAAc,IAAA,EAAM,MAAA,EAAO;AAAA,QACnC,EAAE,IAAA,EAAM,UAAA,EAAY,IAAA,EAAM,iBAAA,EAAkB;AAAA,QAC5C,EAAE,IAAA,EAAM,UAAA,EAAY,IAAA,EAAM,MAAA,EAAO;AAAA,QACjC,EAAE,IAAA,EAAM,OAAA,EAAS,IAAA,EAAM,MAAA;AAAO,OAChC;AAAA,MACA,IAAA,EAAM;AAAA,KACR;AAAA,IACA,WAAA,EAAa,4BAAA;AAAA,IACb,QAAQ,EAAE,GAAG,YAAA,EAAc,OAAA,EAAS,OAAO,OAAA,EAAQ;AAAA,IACnD,OAAA,EAAS;AAAA,MACP,YAAY,MAAA,CAAO,SAAA;AAAA,MACnB,UAAU,MAAA,CAAO,QAAA;AAAA,MACjB,QAAA,EAAU,WAAA,CAAY,MAAA,CAAO,OAAO,CAAA;AAAA,MACpC,KAAA,EAAO,MAAA,CAAO,KAAA,CAAM,QAAA;AAAS;AAC/B,GACF;AACF;AAMO,SAAS,kCAAkC,MAAA,EASpC;AACZ,EAAA,OAAO;AAAA,IACL,KAAA,EAAO;AAAA,MACL,cAAA,EAAgB,oBAAA;AAAA,MAChB,qBAAA,EAAuB;AAAA,QACrB,EAAE,IAAA,EAAM,gBAAA,EAAkB,IAAA,EAAM,MAAA,EAAO;AAAA,QACvC,EAAE,IAAA,EAAM,UAAA,EAAY,IAAA,EAAM,iBAAA,EAAkB;AAAA,QAC5C,EAAE,IAAA,EAAM,cAAA,EAAgB,IAAA,EAAM,MAAA,EAAO;AAAA,QACrC,EAAE,IAAA,EAAM,mBAAA,EAAqB,IAAA,EAAM,MAAA,EAAO;AAAA,QAC1C,EAAE,IAAA,EAAM,oBAAA,EAAsB,IAAA,EAAM,MAAA,EAAO;AAAA,QAC3C,EAAE,IAAA,EAAM,mBAAA,EAAqB,IAAA,EAAM,MAAA,EAAO;AAAA,QAC1C,EAAE,IAAA,EAAM,OAAA,EAAS,IAAA,EAAM,MAAA;AAAO,OAChC;AAAA,MACA,IAAA,EAAM;AAAA,KACR;AAAA,IACA,WAAA,EAAa,uBAAA;AAAA,IACb,QAAQ,EAAE,GAAG,YAAA,EAAc,OAAA,EAAS,OAAO,OAAA,EAAQ;AAAA,IACnD,OAAA,EAAS;AAAA,MACP,cAAA,EAAgB,WAAA,CAAY,MAAA,CAAO,aAAa,CAAA;AAAA,MAChD,UAAU,MAAA,CAAO,QAAA;AAAA,MACjB,YAAA,EAAc,MAAA,CAAO,WAAA,CAAY,QAAA,EAAS;AAAA,MAC1C,iBAAA,EAAmB,UAAA,CAAW,MAAA,CAAO,iBAAiB,CAAA;AAAA,MACtD,kBAAA,EAAoB,MAAA,CAAO,gBAAA,CAAiB,QAAA,EAAS;AAAA,MACrD,iBAAA,EAAmB,MAAA,CAAO,gBAAA,CAAiB,QAAA,EAAS;AAAA,MACpD,KAAA,EAAO,MAAA,CAAO,KAAA,CAAM,QAAA;AAAS;AAC/B,GACF;AACF;AAMO,SAAS,gCAAgC,MAAA,EASlC;AACZ,EAAA,OAAO;AAAA,IACL,KAAA,EAAO;AAAA,MACL,cAAA,EAAgB,oBAAA;AAAA,MAChB,mBAAA,EAAqB;AAAA,QACnB,EAAE,IAAA,EAAM,gBAAA,EAAkB,IAAA,EAAM,MAAA,EAAO;AAAA,QACvC,EAAE,IAAA,EAAM,UAAA,EAAY,IAAA,EAAM,iBAAA,EAAkB;AAAA,QAC5C,EAAE,IAAA,EAAM,WAAA,EAAa,IAAA,EAAM,MAAA,EAAO;AAAA,QAClC,EAAE,IAAA,EAAM,eAAA,EAAiB,IAAA,EAAM,iBAAA,EAAkB;AAAA,QACjD,EAAE,IAAA,EAAM,eAAA,EAAiB,IAAA,EAAM,iBAAA,EAAkB;AAAA,QACjD,EAAE,IAAA,EAAM,UAAA,EAAY,IAAA,EAAM,MAAA,EAAO;AAAA,QACjC,EAAE,IAAA,EAAM,OAAA,EAAS,IAAA,EAAM,MAAA;AAAO,OAChC;AAAA,MACA,IAAA,EAAM;AAAA,KACR;AAAA,IACA,WAAA,EAAa,qBAAA;AAAA,IACb,QAAQ,EAAE,GAAG,YAAA,EAAc,OAAA,EAAS,OAAO,OAAA,EAAQ;AAAA,IACnD,OAAA,EAAS;AAAA,MACP,cAAA,EAAgB,WAAA,CAAY,MAAA,CAAO,aAAa,CAAA;AAAA,MAChD,UAAU,MAAA,CAAO,QAAA;AAAA,MACjB,SAAA,EAAW,WAAA,CAAY,MAAA,CAAO,QAAQ,CAAA;AAAA,MACtC,eAAe,MAAA,CAAO,YAAA;AAAA,MACtB,eAAe,MAAA,CAAO,YAAA;AAAA,MACtB,QAAA,EAAU,MAAA,CAAO,QAAA,CAAS,QAAA,EAAS;AAAA,MACnC,KAAA,EAAO,MAAA,CAAO,KAAA,CAAM,QAAA;AAAS;AAC/B,GACF;AACF;AAMO,SAAS,2BAA2B,MAAA,EAW7B;AACZ,EAAA,OAAO;AAAA,IACL,KAAA,EAAO;AAAA,MACL,cAAA,EAAgB,oBAAA;AAAA,MAChB,cAAA,EAAgB;AAAA,QACd,EAAE,IAAA,EAAM,gBAAA,EAAkB,IAAA,EAAM,MAAA,EAAO;AAAA,QACvC,EAAE,IAAA,EAAM,YAAA,EAAc,IAAA,EAAM,iBAAA,EAAkB;AAAA,QAC9C,EAAE,IAAA,EAAM,eAAA,EAAiB,IAAA,EAAM,MAAA,EAAO;AAAA,QACtC,EAAE,IAAA,EAAM,mBAAA,EAAqB,IAAA,EAAM,MAAA,EAAO;AAAA,QAC1C,EAAE,IAAA,EAAM,gBAAA,EAAkB,IAAA,EAAM,MAAA,EAAO;AAAA,QACvC,EAAE,IAAA,EAAM,oBAAA,EAAsB,IAAA,EAAM,MAAA,EAAO;AAAA,QAC3C,EAAE,IAAA,EAAM,cAAA,EAAgB,IAAA,EAAM,MAAA,EAAO;AAAA,QACrC,EAAE,IAAA,EAAM,UAAA,EAAY,IAAA,EAAM,MAAA,EAAO;AAAA,QACjC,EAAE,IAAA,EAAM,OAAA,EAAS,IAAA,EAAM,MAAA;AAAO,OAChC;AAAA,MACA,IAAA,EAAM;AAAA,KACR;AAAA,IACA,WAAA,EAAa,gBAAA;AAAA,IACb,QAAQ,EAAE,GAAG,YAAA,EAAc,OAAA,EAAS,OAAO,OAAA,EAAQ;AAAA,IACnD,OAAA,EAAS;AAAA,MACP,cAAA,EAAgB,WAAA,CAAY,MAAA,CAAO,aAAa,CAAA;AAAA,MAChD,YAAY,MAAA,CAAO,SAAA;AAAA,MACnB,aAAA,EAAe,UAAA,CAAW,MAAA,CAAO,aAAa,CAAA;AAAA,MAC9C,iBAAA,EAAmB,UAAA,CAAW,MAAA,CAAO,iBAAiB,CAAA;AAAA,MACtD,cAAA,EAAgB,MAAA,CAAO,YAAA,CAAa,QAAA,EAAS;AAAA,MAC7C,kBAAA,EAAoB,MAAA,CAAO,gBAAA,CAAiB,QAAA,EAAS;AAAA,MACrD,YAAA,EAAc,MAAA,CAAO,WAAA,CAAY,QAAA,EAAS;AAAA,MAC1C,QAAA,EAAU,MAAA,CAAO,QAAA,CAAS,QAAA,EAAS;AAAA,MACnC,KAAA,EAAO,MAAA,CAAO,KAAA,CAAM,QAAA;AAAS;AAC/B,GACF;AACF;AAMO,SAAS,8BAA8B,MAAA,EAMhC;AACZ,EAAA,OAAO;AAAA,IACL,KAAA,EAAO;AAAA,MACL,cAAA,EAAgB,oBAAA;AAAA,MAChB,iBAAA,EAAmB;AAAA,QACjB,EAAE,IAAA,EAAM,gBAAA,EAAkB,IAAA,EAAM,MAAA,EAAO;AAAA,QACvC,EAAE,IAAA,EAAM,YAAA,EAAc,IAAA,EAAM,MAAA,EAAO;AAAA,QACnC,EAAE,IAAA,EAAM,UAAA,EAAY,IAAA,EAAM,iBAAA,EAAkB;AAAA,QAC5C,EAAE,IAAA,EAAM,OAAA,EAAS,IAAA,EAAM,MAAA;AAAO,OAChC;AAAA,MACA,IAAA,EAAM;AAAA,KACR;AAAA,IACA,WAAA,EAAa,mBAAA;AAAA,IACb,QAAQ,EAAE,GAAG,YAAA,EAAc,OAAA,EAAS,OAAO,OAAA,EAAQ;AAAA,IACnD,OAAA,EAAS;AAAA,MACP,cAAA,EAAgB,WAAA,CAAY,MAAA,CAAO,aAAa,CAAA;AAAA,MAChD,YAAY,MAAA,CAAO,SAAA;AAAA,MACnB,UAAU,MAAA,CAAO,QAAA;AAAA,MACjB,KAAA,EAAO,MAAA,CAAO,KAAA,CAAM,QAAA;AAAS;AAC/B,GACF;AACF;;;ACnaO,SAAS,mBAAmB,GAAA,EAAgC;AACjE,EAAA,OAAO,EAAE,GAAG,GAAA,CAAI,CAAC,GAAG,CAAA,EAAG,GAAA,CAAI,CAAC,CAAA,EAAE;AAChC;AAEO,SAAS,qBAAqB,MAAA,EAAmC;AACtE,EAAA,OAAO,CAAC,MAAA,CAAO,CAAA,EAAG,MAAA,CAAO,CAAC,CAAA;AAC5B;;;ACdA,IAAA,aAAA,GAAA;AAAA,EACE;AAAA,IACE,IAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAQ,mBAAA;AAAA,IACR,cAAA,EAAkB;AAAA,GACpB;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAQ,YAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,QACE,IAAA,EAAQ,OAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,MAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAQ,gCAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,QACE,IAAA,EAAQ,OAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,QAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,SAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,SAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,QAAA;AAAA,IACR,IAAA,EAAQ,qBAAA;AAAA,IACR,OAAA,EAAW;AAAA,MACT;AAAA,QACE,IAAA,EAAQ,KAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,MAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,QAAA;AAAA,IACR,IAAA,EAAQ,4BAAA;AAAA,IACR,OAAA,EAAW;AAAA,MACT;AAAA,QACE,IAAA,EAAQ,OAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,YAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,OAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,QAAA;AAAA,IACR,IAAA,EAAQ,8CAAA;AAAA,IACR,OAAA,EAAW;AAAA,MACT;AAAA,QACE,IAAA,EAAQ,WAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,aAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,iBAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,mBAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,cAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,QAAA;AAAA,IACR,IAAA,EAAQ,iCAAA;AAAA,IACR,OAAA,EAAW;AAAA,MACT;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,WAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,eAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,iBAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,YAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,gBAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,kBAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,cAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,OAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,QAAA;AAAA,IACR,IAAA,EAAQ,0BAAA;AAAA,IACR,OAAA,EAAW;AAAA,MACT;AAAA,QACE,IAAA,EAAQ,YAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,QAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,wBAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,OAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,QAAA;AAAA,IACR,IAAA,EAAQ,+BAAA;AAAA,IACR,OAAA,EAAW;AAAA,MACT;AAAA,QACE,IAAA,EAAQ,YAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,OAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,QAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,aAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,QAAA;AAAA,IACR,IAAA,EAAQ,yCAAA;AAAA,IACR,OAAA,EAAW;AAAA,MACT;AAAA,QACE,IAAA,EAAQ,OAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,eAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,gBAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,KAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,OAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,cAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,QAAA;AAAA,IACR,IAAA,EAAQ,8CAAA;AAAA,IACR,OAAA,EAAW;AAAA,MACT;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,QAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,WAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,wBAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,WAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,YAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,cAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,kBAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,sBAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,wBAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,iBAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,oBAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,QAAA;AAAA,IACR,IAAA,EAAQ,oCAAA;AAAA,IACR,OAAA,EAAW;AAAA,MACT;AAAA,QACE,IAAA,EAAQ,QAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,WAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,eAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,YAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,gBAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,oBAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,OAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,QAAA;AAAA,IACR,IAAA,EAAQ,2CAAA;AAAA,IACR,OAAA,EAAW;AAAA,MACT;AAAA,QACE,IAAA,EAAQ,YAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,OAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,QAAA;AAAA,IACR,IAAA,EAAQ,sCAAA;AAAA,IACR,OAAA,EAAW;AAAA,MACT;AAAA,QACE,IAAA,EAAQ,gBAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,cAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,mBAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,oBAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,mBAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,OAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,QAAA;AAAA,IACR,IAAA,EAAQ,oCAAA;AAAA,IACR,OAAA,EAAW;AAAA,MACT;AAAA,QACE,IAAA,EAAQ,gBAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,WAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,eAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,eAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,OAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,QAAA;AAAA,IACR,IAAA,EAAQ,+BAAA;AAAA,IACR,OAAA,EAAW;AAAA,MACT;AAAA,QACE,IAAA,EAAQ,gBAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,YAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,eAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,mBAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,gBAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,oBAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,cAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,OAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,QAAA;AAAA,IACR,IAAA,EAAQ,kCAAA;AAAA,IACR,OAAA,EAAW;AAAA,MACT;AAAA,QACE,IAAA,EAAQ,gBAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,YAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,OAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,WAAA;AAAA,IACR,IAAA,EAAQ,2CAAA;AAAA,IACR,KAAA,EAAS;AAAA,MACP;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,oBAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,QAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,OAAA,EAAW;AAAA,UACT;AAAA,YACE,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,gBAAA,EAAoB;AAAA,OACtB;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,kBAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,gBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,wBAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,SAAW,EAAC;AAAA,QACZ,gBAAA,EAAoB;AAAA,OACtB;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,oBAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,gBAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,SAAW,EAAC;AAAA,QACZ,gBAAA,EAAoB;AAAA,OACtB;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,OAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,gBAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,SAAW,EAAC;AAAA,QACZ,gBAAA,EAAoB;AAAA,OACtB;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,WAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,gBAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,SAAW,EAAC;AAAA,QACZ,gBAAA,EAAoB;AAAA,OACtB;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,QAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,gBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,QAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,SAAW,EAAC;AAAA,QACZ,gBAAA,EAAoB;AAAA,OACtB;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,QAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,OAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,aAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,iBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,mBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,cAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,OAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,YAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,SAAW,EAAC;AAAA,QACZ,gBAAA,EAAoB;AAAA,OACtB;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,cAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,QAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,kBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,sBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,wBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,eAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,aAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,YAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,UAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,SAAW,EAAC;AAAA,QACZ,gBAAA,EAAoB;AAAA,OACtB;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,mBAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,OAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,WAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,UAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,SAAW,EAAC;AAAA,QACZ,gBAAA,EAAoB;AAAA,OACtB;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,cAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,OAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,SAAW,EAAC;AAAA,QACZ,gBAAA,EAAoB;AAAA,OACtB;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,wBAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,WAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,SAAW,EAAC;AAAA,QACZ,gBAAA,EAAoB;AAAA,OACtB;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,iBAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,gBAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,OAAA,EAAW;AAAA,UACT;AAAA,YACE,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,gBAAA,EAAoB;AAAA,OACtB;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,YAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,gBAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,OAAA,EAAW;AAAA,UACT;AAAA,YACE,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,gBAAA,EAAoB;AAAA,OACtB;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,mBAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,gBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,wBAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,OAAA,EAAW;AAAA,UACT;AAAA,YACE,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,gBAAA,EAAoB;AAAA,OACtB;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,QAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,OAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,OAAA,EAAW;AAAA,UACT;AAAA,YACE,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,gBAAA,EAAoB;AAAA,OACtB;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,cAAA;AAAA,QACR,QAAU,EAAC;AAAA,QACX,OAAA,EAAW;AAAA,UACT;AAAA,YACE,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,gBAAA,EAAoB;AAAA,OACtB;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,qBAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,YAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,OAAA,EAAW;AAAA,UACT;AAAA,YACE,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,gBAAA,EAAoB;AAAA,OACtB;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,oBAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,YAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,OAAA,EAAW;AAAA,UACT;AAAA,YACE,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,gBAAA,EAAoB;AAAA,OACtB;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,gBAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,YAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,OAAA,EAAW;AAAA,UACT;AAAA,YACE,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,gBAAA,EAAoB;AAAA,OACtB;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,qBAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,OAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,OAAA,EAAW;AAAA,UACT;AAAA,YACE,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,gBAAA,EAAoB;AAAA,OACtB;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,sBAAA;AAAA,QACR,QAAU,EAAC;AAAA,QACX,OAAA,EAAW;AAAA,UACT;AAAA,YACE,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,gBAAA,EAAoB;AAAA,OACtB;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,oBAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,MAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,OAAA,EAAW;AAAA,UACT;AAAA,YACE,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,gBAAA,EAAoB;AAAA,OACtB;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,6BAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,OAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,OAAA,EAAW;AAAA,UACT;AAAA,YACE,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,gBAAA,EAAoB;AAAA,OACtB;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,cAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,UAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,SAAW,EAAC;AAAA,QACZ,gBAAA,EAAoB;AAAA,OACtB;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,cAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,UAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,SAAW,EAAC;AAAA,QACZ,gBAAA,EAAoB;AAAA,OACtB;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,sBAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,kBAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,SAAW,EAAC;AAAA,QACZ,gBAAA,EAAoB;AAAA,OACtB;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,yBAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,qBAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,SAAW,EAAC;AAAA,QACZ,gBAAA,EAAoB;AAAA,OACtB;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,8BAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,OAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,aAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,SAAW,EAAC;AAAA,QACZ,gBAAA,EAAoB;AAAA,OACtB;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,sBAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,kBAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,SAAW,EAAC;AAAA,QACZ,gBAAA,EAAoB;AAAA,OACtB;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,uBAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,QAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,aAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,SAAW,EAAC;AAAA,QACZ,gBAAA,EAAoB;AAAA,OACtB;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,kCAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,QAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,OAAA,EAAW;AAAA,UACT;AAAA,YACE,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,gBAAA,EAAoB;AAAA,OACtB;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,6BAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,QAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,QAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,UAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,SAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,SAAW,EAAC;AAAA,QACZ,gBAAA,EAAoB;AAAA,OACtB;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,kCAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,gBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,QAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,UAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,SAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,SAAW,EAAC;AAAA,QACZ,gBAAA,EAAoB;AAAA,OACtB;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,mBAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,OAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,YAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,aAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,iBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,YAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,cAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,SAAW,EAAC;AAAA,QACZ,gBAAA,EAAoB;AAAA,OACtB;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,sBAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,gBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,eAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,SAAW,EAAC;AAAA,QACZ,gBAAA,EAAoB;AAAA,OACtB;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,uBAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,gBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,UAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,cAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,qBAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,SAAW,EAAC;AAAA,QACZ,gBAAA,EAAoB;AAAA,OACtB;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,gBAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,gBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,OAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,cAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,YAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,SAAW,EAAC;AAAA,QACZ,gBAAA,EAAoB;AAAA,OACtB;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,WAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,OAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,iBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,qBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,gBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,UAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,cAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,SAAW,EAAC;AAAA,QACZ,gBAAA,EAAoB;AAAA,OACtB;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,eAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,gBAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,SAAW,EAAC;AAAA,QACZ,gBAAA,EAAoB;AAAA,OACtB;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,KAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,gBAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,SAAW,EAAC;AAAA,QACZ,gBAAA,EAAoB;AAAA,OACtB;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,kBAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,gBAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,SAAW,EAAC;AAAA,QACZ,gBAAA,EAAoB;AAAA,OACtB;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,mBAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,gBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,YAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,OAAA,EAAW;AAAA,UACT;AAAA,YACE,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,gBAAA,EAAoB;AAAA,OACtB;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,sBAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,gBAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,OAAA,EAAW;AAAA,UACT;AAAA,YACE,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,gBAAA,EAAoB;AAAA;AACtB;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAQ,kBAAA;AAAA,IACR,cAAA,EAAkB;AAAA,GACpB;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,QAAA;AAAA,IACR,IAAA,EAAQ,wEAAA;AAAA,IACR,OAAA,EAAW;AAAA,MACT;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,QAAA;AAAA,IACR,IAAA,EAAQ,0CAAA;AAAA,IACR,OAAA,EAAW;AAAA,MACT;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,QAAA;AAAA,IACR,IAAA,EAAQ,oCAAA;AAAA,IACR,OAAA,EAAW;AAAA,MACT;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,QAAA;AAAA,IACR,IAAA,EAAQ,6BAAA;AAAA,IACR,OAAA,EAAW;AAAA,MACT;AAAA,QACE,IAAA,EAAQ,MAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,cAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,kBAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,WAAA;AAAA,IACR,IAAA,EAAQ,qDAAA;AAAA,IACR,KAAA,EAAS;AAAA,MACP;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,YAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,SAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,UAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,OAAA,EAAW;AAAA,UACT;AAAA,YACE,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,gBAAA,EAAoB;AAAA,OACtB;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,kBAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,UAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,WAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,OAAA,EAAW;AAAA,UACT;AAAA,YACE,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,gBAAA,EAAoB;AAAA,OACtB;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,oBAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,MAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,IAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,UAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,OAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,MAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,SAAW,EAAC;AAAA,QACZ,gBAAA,EAAoB;AAAA,OACtB;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,0BAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,MAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,IAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,WAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,QAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,MAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,SAAW,EAAC;AAAA,QACZ,gBAAA,EAAoB;AAAA,OACtB;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,qBAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,OAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,UAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,OAAA,EAAW;AAAA,UACT;AAAA,YACE,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,gBAAA,EAAoB;AAAA,OACtB;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,sBAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,UAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,UAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,SAAW,EAAC;AAAA,QACZ,gBAAA,EAAoB;AAAA,OACtB;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,oBAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,cAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,OAAA,EAAW;AAAA,UACT;AAAA,YACE,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,gBAAA,EAAoB;AAAA,OACtB;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,KAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,UAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,OAAA,EAAW;AAAA,UACT;AAAA,YACE,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,gBAAA,EAAoB;AAAA,OACtB;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,WAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,SAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,SAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,OAAA,EAAW;AAAA,UACT;AAAA,YACE,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,gBAAA,EAAoB;AAAA,OACtB;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,gBAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,UAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,UAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,OAAA,EAAW;AAAA,UACT;AAAA,YACE,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,gBAAA,EAAoB;AAAA,OACtB;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,kBAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,MAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,IAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,SAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,OAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,MAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,SAAW,EAAC;AAAA,QACZ,gBAAA,EAAoB;AAAA,OACtB;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,uBAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,MAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,IAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,UAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,QAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,MAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,SAAW,EAAC;AAAA,QACZ,gBAAA,EAAoB;AAAA,OACtB;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,kBAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,OAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,UAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,OAAA,EAAW;AAAA,UACT;AAAA,YACE,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,gBAAA,EAAoB;AAAA,OACtB;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,mBAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,UAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,UAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,SAAW,EAAC;AAAA,QACZ,gBAAA,EAAoB;AAAA;AACtB;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAQ,kBAAA;AAAA,IACR,cAAA,EAAkB;AAAA,GACpB;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,WAAA;AAAA,IACR,IAAA,EAAQ,sDAAA;AAAA,IACR,KAAA,EAAS;AAAA,MACP;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,OAAA;AAAA,QACR,QAAU,EAAC;AAAA,QACX,OAAA,EAAW;AAAA,UACT;AAAA,YACE,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,gBAAA,EAAoB;AAAA,OACtB;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,oBAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,WAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,SAAW,EAAC;AAAA,QACZ,gBAAA,EAAoB;AAAA,OACtB;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,oBAAA;AAAA,QACR,QAAU,EAAC;AAAA,QACX,SAAW,EAAC;AAAA,QACZ,gBAAA,EAAoB;AAAA,OACtB;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,mBAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,UAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,SAAW,EAAC;AAAA,QACZ,gBAAA,EAAoB;AAAA,OACtB;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,mBAAA;AAAA,QACR,QAAU,EAAC;AAAA,QACX,SAAW,EAAC;AAAA,QACZ,gBAAA,EAAoB;AAAA;AACtB;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,aAAA;AAAA,IACR,IAAA,EAAQ,aAAA;AAAA,IACR,MAAA,EAAU;AAAA,MACR;AAAA,QACE,IAAA,EAAQ,OAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,kBAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,qBAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,OAAA;AAAA,IACR,IAAA,EAAQ,wEAAA;AAAA,IACR,IAAA,EAAQ,QAAA;AAAA,IACR,OAAA,EAAW;AAAA,MACT;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,mDAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,MAAA;AAAA,QACR,IAAA,EAAQ,mDAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,IAAA;AAAA,QACR,IAAA,EAAQ,mDAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,IAAA;AAAA,QACR,IAAA,EAAQ,qBAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,OAAA;AAAA,QACR,IAAA,EAAQ,qBAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,OAAA;AAAA,IACR,IAAA,EAAQ,uEAAA;AAAA,IACR,IAAA,EAAQ,QAAA;AAAA,IACR,OAAA,EAAW;AAAA,MACT;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,mDAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,MAAA;AAAA,QACR,IAAA,EAAQ,mDAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,IAAA;AAAA,QACR,IAAA,EAAQ,mDAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,KAAA;AAAA,QACR,IAAA,EAAQ,0CAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,QAAA;AAAA,QACR,IAAA,EAAQ,0CAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,OAAA;AAAA,IACR,IAAA,EAAQ,wEAAA;AAAA,IACR,IAAA,EAAQ,QAAA;AAAA,IACR,OAAA,EAAW;AAAA,MACT;AAAA,QACE,IAAA,EAAQ,OAAA;AAAA,QACR,IAAA,EAAQ,mDAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,mDAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,YAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,OAAA;AAAA,IACR,IAAA,EAAQ,6DAAA;AAAA,IACR,IAAA,EAAQ,QAAA;AAAA,IACR,OAAA,EAAW;AAAA,MACT;AAAA,QACE,IAAA,EAAQ,OAAA;AAAA,QACR,IAAA,EAAQ,6BAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,IAAA;AAAA,QACR,IAAA,EAAQ,qBAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,OAAA;AAAA,IACR,IAAA,EAAQ,+DAAA;AAAA,IACR,IAAA,EAAQ,MAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,QACE,IAAA,EAAQ,gBAAA;AAAA,QACR,IAAA,EAAQ,wEAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,eAAA;AAAA,QACR,IAAA,EAAQ,uEAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,gBAAA;AAAA,QACR,IAAA,EAAQ,wEAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,KAAA;AAAA,QACR,IAAA,EAAQ,6DAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,OAAA;AAAA,IACR,IAAA,EAAQ,+EAAA;AAAA,IACR,IAAA,EAAQ,QAAA;AAAA,IACR,OAAA,EAAW;AAAA,MACT;AAAA,QACE,IAAA,EAAQ,gBAAA;AAAA,QACR,IAAA,EAAQ,mDAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,WAAA;AAAA,QACR,IAAA,EAAQ,mDAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,OAAA;AAAA,IACR,IAAA,EAAQ,mFAAA;AAAA,IACR,IAAA,EAAQ,QAAA;AAAA,IACR,OAAA,EAAW;AAAA,MACT;AAAA,QACE,IAAA,EAAQ,gBAAA;AAAA,QACR,IAAA,EAAQ,mDAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,WAAA;AAAA,QACR,IAAA,EAAQ,mDAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,OAAA;AAAA,IACR,IAAA,EAAQ,gEAAA;AAAA,IACR,IAAA,EAAQ,MAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,QACE,IAAA,EAAQ,sBAAA;AAAA,QACR,IAAA,EAAQ,+EAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,0BAAA;AAAA,QACR,IAAA,EAAQ,mFAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,OAAA;AAAA,IACR,IAAA,EAAQ,wDAAA;AAAA,IACR,IAAA,EAAQ,MAAA;AAAA,IACR,UAAY;AAAC,GACf;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,OAAA;AAAA,IACR,IAAA,EAAQ,yEAAA;AAAA,IACR,IAAA,EAAQ,MAAA;AAAA,IACR,UAAY;AAAC,GACf;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,OAAA;AAAA,IACR,IAAA,EAAQ,kEAAA;AAAA,IACR,IAAA,EAAQ,MAAA;AAAA,IACR,UAAY;AAAC,GACf;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,OAAA;AAAA,IACR,IAAA,EAAQ,iDAAA;AAAA,IACR,IAAA,EAAQ,QAAA;AAAA,IACR,OAAA,EAAW;AAAA,MACT;AAAA,QACE,IAAA,EAAQ,gBAAA;AAAA,QACR,IAAA,EAAQ,qBAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,SAAA;AAAA,QACR,IAAA,EAAQ,mDAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,WAAA;AAAA,QACR,IAAA,EAAQ,YAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,OAAA;AAAA,IACR,IAAA,EAAQ,gDAAA;AAAA,IACR,IAAA,EAAQ,QAAA;AAAA,IACR,OAAA,EAAW;AAAA,MACT;AAAA,QACE,IAAA,EAAQ,gBAAA;AAAA,QACR,IAAA,EAAQ,qBAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,mDAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,QAAA;AAAA,QACR,IAAA,EAAQ,mDAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,wBAAA;AAAA,QACR,IAAA,EAAQ,qBAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,eAAA;AAAA,QACR,IAAA,EAAQ,qBAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,OAAA;AAAA,IACR,IAAA,EAAQ,mDAAA;AAAA,IACR,IAAA,EAAQ,QAAA;AAAA,IACR,OAAA,EAAW;AAAA,MACT;AAAA,QACE,IAAA,EAAQ,gBAAA;AAAA,QACR,IAAA,EAAQ,qBAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,SAAA;AAAA,QACR,IAAA,EAAQ,mDAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,OAAA;AAAA,IACR,IAAA,EAAQ,gDAAA;AAAA,IACR,IAAA,EAAQ,QAAA;AAAA,IACR,OAAA,EAAW;AAAA,MACT;AAAA,QACE,IAAA,EAAQ,gBAAA;AAAA,QACR,IAAA,EAAQ,qBAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,SAAA;AAAA,QACR,IAAA,EAAQ,mDAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,OAAA;AAAA,IACR,IAAA,EAAQ,oDAAA;AAAA,IACR,IAAA,EAAQ,QAAA;AAAA,IACR,OAAA,EAAW;AAAA,MACT;AAAA,QACE,IAAA,EAAQ,gBAAA;AAAA,QACR,IAAA,EAAQ,qBAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,YAAA;AAAA,QACR,IAAA,EAAQ,mDAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,OAAA;AAAA,IACR,IAAA,EAAQ,6CAAA;AAAA,IACR,IAAA,EAAQ,QAAA;AAAA,IACR,OAAA,EAAW;AAAA,MACT;AAAA,QACE,IAAA,EAAQ,gBAAA;AAAA,QACR,IAAA,EAAQ,qBAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,mDAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,QAAA;AAAA,QACR,IAAA,EAAQ,qBAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,OAAA;AAAA,IACR,IAAA,EAAQ,2CAAA;AAAA,IACR,IAAA,EAAQ,QAAA;AAAA,IACR,OAAA,EAAW;AAAA,MACT;AAAA,QACE,IAAA,EAAQ,gBAAA;AAAA,QACR,IAAA,EAAQ,qBAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,mDAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,QAAA;AAAA,QACR,IAAA,EAAQ,mDAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,SAAA;AAAA,QACR,IAAA,EAAQ,mDAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,oBAAA;AAAA,QACR,IAAA,EAAQ,qBAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,OAAA;AAAA,IACR,IAAA,EAAQ,0CAAA;AAAA,IACR,IAAA,EAAQ,QAAA;AAAA,IACR,OAAA,EAAW;AAAA,MACT;AAAA,QACE,IAAA,EAAQ,gBAAA;AAAA,QACR,IAAA,EAAQ,qBAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,YAAA;AAAA,QACR,IAAA,EAAQ,eAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,OAAA;AAAA,QACR,IAAA,EAAQ,mDAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,qBAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,kBAAA;AAAA,QACR,IAAA,EAAQ,qBAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,OAAA;AAAA,IACR,IAAA,EAAQ,6CAAA;AAAA,IACR,IAAA,EAAQ,QAAA;AAAA,IACR,OAAA,EAAW;AAAA,MACT;AAAA,QACE,IAAA,EAAQ,YAAA;AAAA,QACR,IAAA,EAAQ,eAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,OAAA;AAAA,QACR,IAAA,EAAQ,mDAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,OAAA;AAAA,IACR,IAAA,EAAQ,kDAAA;AAAA,IACR,IAAA,EAAQ,QAAA;AAAA,IACR,OAAA,EAAW;AAAA,MACT;AAAA,QACE,IAAA,EAAQ,OAAA;AAAA,QACR,IAAA,EAAQ,mDAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,eAAA;AAAA,QACR,IAAA,EAAQ,eAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,OAAA;AAAA,IACR,IAAA,EAAQ,iDAAA;AAAA,IACR,IAAA,EAAQ,QAAA;AAAA,IACR,OAAA,EAAW;AAAA,MACT;AAAA,QACE,IAAA,EAAQ,gBAAA;AAAA,QACR,IAAA,EAAQ,qBAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,mDAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,aAAA;AAAA,QACR,IAAA,EAAQ,oBAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,OAAA;AAAA,IACR,IAAA,EAAQ,oCAAA;AAAA,IACR,IAAA,EAAQ,MAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,QACE,IAAA,EAAQ,cAAA;AAAA,QACR,IAAA,EAAQ,+DAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,cAAA;AAAA,QACR,IAAA,EAAQ,gEAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,WAAA;AAAA,QACR,IAAA,EAAQ,wDAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,sBAAA;AAAA,QACR,IAAA,EAAQ,yEAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,aAAA;AAAA,QACR,IAAA,EAAQ,kEAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,oBAAA;AAAA,QACR,IAAA,EAAQ,iDAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,mBAAA;AAAA,QACR,IAAA,EAAQ,gDAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,sBAAA;AAAA,QACR,IAAA,EAAQ,mDAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,mBAAA;AAAA,QACR,IAAA,EAAQ,gDAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,uBAAA;AAAA,QACR,IAAA,EAAQ,oDAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,gBAAA;AAAA,QACR,IAAA,EAAQ,6CAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,cAAA;AAAA,QACR,IAAA,EAAQ,2CAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,aAAA;AAAA,QACR,IAAA,EAAQ,0CAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,gBAAA;AAAA,QACR,IAAA,EAAQ,6CAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,qBAAA;AAAA,QACR,IAAA,EAAQ,kDAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,oBAAA;AAAA,QACR,IAAA,EAAQ,iDAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF;AAEJ,CAAA;;;AC/pEO,IAAM,oBAAN,MAAwB;AAAA,EACrB,QAAA;AAAA,EACA,OAAA;AAAA,EACA,OAAA;AAAA,EAER,YAAY,IAAA,EAAgC;AAC1C,IAAA,IAAA,CAAK,UAAU,IAAA,CAAK,YAAA;AACpB,IAAA,IAAA,CAAK,UAAU,IAAA,CAAK,OAAA;AACpB,IAAA,IAAA,CAAK,WAAW,IAAIC,iBAAA,CAAS,eAAU,IAAA,CAAK,YAAA,EAAc,KAAK,QAAQ,CAAA;AAAA,EACzE;AAAA;AAAA,EAIA,MAAM,eAAe,aAAA,EAAmD;AACtE,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,QAAA,CAAS,KAAK,iBAAA,EAAmB,MAAA,CAAO,aAAa,CAAC,CAAA;AAChF,IAAA,OAAO,uBAAuB,MAAM,CAAA;AAAA,EACtC;AAAA,EAEA,MAAM,UAAU,aAAA,EAAwC;AACtD,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,QAAA,CAAS,KAAK,YAAA,EAAc,MAAA,CAAO,aAAa,CAAC,CAAA;AAC3E,IAAA,OAAO,MAAA,CAAQ,MAAA,CAAqB,CAAC,CAAC,CAAA;AAAA,EACxC;AAAA,EAEA,MAAM,eAAA,CAAgB,aAAA,EAAuB,UAAA,EAAqC;AAChF,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,QAAA,CAAS,KAAK,mBAAA,EAAqB;AAAA,MAC3D,GAAG,OAAO,aAAa,CAAA;AAAA,MACvB,GAAG,OAAO,UAAU;AAAA,KACrB,CAAA;AACD,IAAA,OAAO,YAAY,MAAM,CAAA;AAAA,EAC3B;AAAA,EAEA,MAAM,SAAS,OAAA,EAAkC;AAC/C,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,QAAA,CAAS,IAAA,CAAK,QAAA,EAAU,CAAC,OAAO,CAAA,EAAG,EAAE,eAAA,EAAiB,QAAA,EAAU,CAAA;AAC1F,IAAA,OAAO,OAAO,MAAA,CAAQ,MAAA,CAAqB,CAAC,CAAA,IAAK,GAAG,CAAC,CAAA;AAAA,EACvD;AAAA,EAEA,MAAM,aAAA,GAAiC;AACrC,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,QAAA,CAAS,KAAK,iBAAiB,CAAA;AACzD,IAAA,OAAO,YAAY,MAAM,CAAA;AAAA,EAC3B;AAAA,EAEA,MAAM,WAAA,GAA+B;AACnC,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,QAAA,CAAS,KAAK,cAAc,CAAA;AACtD,IAAA,OAAO,MAAA,CAAQ,MAAA,CAAqB,CAAC,CAAC,CAAA;AAAA,EACxC;AAAA,EAEA,MAAM,QAAA,GAA6B;AACjC,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,QAAA,CAAS,KAAK,WAAW,CAAA;AACnD,IAAA,OAAO,OAAA,CAAS,MAAA,CAAqB,CAAC,CAAC,CAAA;AAAA,EACzC;AAAA,EAEA,MAAM,kBAAkB,SAAA,EAAqC;AAC3D,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,QAAA,CAAS,KAAK,qBAAA,EAAuB,CAAC,SAAS,CAAC,CAAA;AAC1E,IAAA,OAAO,OAAA,CAAS,MAAA,CAAqB,CAAC,CAAC,CAAA;AAAA,EACzC;AAAA,EAEA,MAAM,iBAAiB,SAAA,EAAqC;AAC1D,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,QAAA,CAAS,KAAK,oBAAA,EAAsB,CAAC,SAAS,CAAC,CAAA;AACzE,IAAA,OAAO,OAAA,CAAS,MAAA,CAAqB,CAAC,CAAC,CAAA;AAAA,EACzC;AAAA,EAEA,MAAM,aAAa,SAAA,EAAoC;AACrD,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,QAAA,CAAS,KAAK,gBAAA,EAAkB,CAAC,SAAS,CAAC,CAAA;AACrE,IAAA,OAAO,YAAY,MAAM,CAAA;AAAA,EAC3B;AAAA,EAEA,MAAM,iBAAiB,KAAA,EAAgC;AACrD,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,QAAA,CAAS,IAAA,CAAK,qBAAA,EAAuB,CAAC,KAAK,CAAA,EAAG,EAAE,eAAA,EAAiB,QAAA,EAAU,CAAA;AACrG,IAAA,OAAO,MAAA,CAAQ,MAAA,CAAqB,CAAC,CAAA,IAAK,GAAG,CAAA;AAAA,EAC/C;AAAA;AAAA,EAIA,uBAAuB,MAAA,EAAiC;AACtD,IAAA,MAAM,QAAA,GAAqB;AAAA,MACzB,MAAA,CAAO,YAAY,GAAA,GAAM,GAAA;AAAA,MACzB,GAAG,eAAA,CAAgB,MAAA,CAAO,WAAW,CAAA;AAAA,MACrC,GAAG,eAAA,CAAgB,MAAA,CAAO,eAAe,CAAA;AAAA,MACzC,GAAG,eAAA,CAAgB,MAAA,CAAO,iBAAiB,CAAA;AAAA,MAC3C,MAAA,CAAO,SAAS,QAAA,EAAS;AAAA,MACzB,MAAA,CAAO,SAAS,QAAA,EAAS;AAAA,MACzB,MAAA,CAAO,eAAe,GAAA,GAAM;AAAA,KAC9B;AACA,IAAA,OAAO,EAAE,eAAA,EAAiB,IAAA,CAAK,OAAA,EAAS,UAAA,EAAY,sBAAsB,QAAA,EAAS;AAAA,EACrF;AAAA,EAEA,oBAAA,CAAqB,eAAuB,GAAA,EAAmB;AAC7D,IAAA,OAAO;AAAA,MACL,iBAAiB,IAAA,CAAK,OAAA;AAAA,MACtB,UAAA,EAAY,kBAAA;AAAA,MACZ,QAAA,EAAU,CAAC,GAAG,MAAA,CAAO,aAAa,CAAA,EAAG,GAAG,MAAA,CAAO,GAAG,CAAC;AAAA,KACrD;AAAA,EACF;AAAA,EAEA,uBAAuB,aAAA,EAA6B;AAClD,IAAA,OAAO;AAAA,MACL,iBAAiB,IAAA,CAAK,OAAA;AAAA,MACtB,UAAA,EAAY,oBAAA;AAAA,MACZ,QAAA,EAAU,CAAC,GAAG,MAAA,CAAO,aAAa,CAAC;AAAA,KACrC;AAAA,EACF;AAAA,EAEA,WAAW,aAAA,EAA6B;AACtC,IAAA,OAAO;AAAA,MACL,iBAAiB,IAAA,CAAK,OAAA;AAAA,MACtB,UAAA,EAAY,OAAA;AAAA,MACZ,QAAA,EAAU,CAAC,GAAG,MAAA,CAAO,aAAa,CAAC;AAAA,KACrC;AAAA,EACF;AAAA,EAEA,eAAe,aAAA,EAA6B;AAC1C,IAAA,OAAO;AAAA,MACL,iBAAiB,IAAA,CAAK,OAAA;AAAA,MACtB,UAAA,EAAY,WAAA;AAAA,MACZ,QAAA,EAAU,CAAC,GAAG,MAAA,CAAO,aAAa,CAAC;AAAA,KACrC;AAAA,EACF;AAAA,EAEA,WAAA,CAAY,eAAuB,MAAA,EAAsB;AACvD,IAAA,OAAO;AAAA,MACL,iBAAiB,IAAA,CAAK,OAAA;AAAA,MACtB,UAAA,EAAY,QAAA;AAAA,MACZ,QAAA,EAAU,CAAC,GAAG,MAAA,CAAO,aAAa,CAAA,EAAG,GAAG,MAAA,CAAO,MAAM,CAAC;AAAA,KACxD;AAAA,EACF;AAAA,EAEA,YAAY,MAAA,EAyBH;AACP,IAAA,MAAM,QAAA,GAAqB;AAAA;AAAA,MAEzB,OAAO,KAAA,CAAM,QAAA;AAAA,MACb,OAAO,KAAA,CAAM,QAAA;AAAA,MACb,OAAO,KAAA,CAAM,YAAA;AAAA,MACb,OAAO,KAAA,CAAM,cAAA;AAAA,MACb,MAAA,CAAO,MAAA,CAAO,KAAA,CAAM,SAAS,CAAA;AAAA,MAC7B,MAAA,CAAO,MAAA,CAAO,KAAA,CAAM,aAAa,CAAA;AAAA,MACjC,MAAA,CAAO,MAAA,CAAO,KAAA,CAAM,eAAe,CAAA;AAAA,MACnC,MAAA,CAAO,KAAA,CAAM,QAAA,CAAS,QAAA,EAAS;AAAA,MAC/B,MAAA,CAAO,KAAA,CAAM,QAAA,CAAS,QAAA,EAAS;AAAA,MAC/B,MAAA,CAAO,KAAA,CAAM,WAAA,GAAc,GAAA,GAAM,GAAA;AAAA,MACjC,MAAA,CAAO,KAAA,CAAM,KAAA,CAAM,QAAA,EAAS;AAAA;AAAA,MAE5B,GAAG,eAAA,CAAgB,MAAA,CAAO,UAAU,CAAA;AAAA;AAAA,MAEpC,GAAG,eAAA,CAAgB,MAAA,CAAO,cAAc,CAAA;AAAA;AAAA,MAExC,GAAG,eAAA,CAAgB,MAAA,CAAO,gBAAgB,CAAA;AAAA;AAAA,MAE1C,MAAA,CAAO,MAAA,CAAO,WAAA,CAAY,MAAM,CAAA;AAAA,MAChC,GAAG,MAAA,CAAO,WAAA;AAAA;AAAA,MAEV,OAAO,KAAA,CAAM,SAAA;AAAA,MACb,OAAO,KAAA,CAAM,MAAA;AAAA,MACb,GAAG,MAAA,CAAO,MAAA,CAAO,KAAA,CAAM,oBAAoB,CAAA;AAAA,MAC3C,MAAA,CAAO,KAAA,CAAM,KAAA,CAAM,QAAA,EAAS;AAAA;AAAA,MAE5B,MAAA,CAAO,MAAA,CAAO,SAAA,CAAU,MAAM,CAAA;AAAA,MAC9B,GAAG,MAAA,CAAO;AAAA,KACZ;AACA,IAAA,OAAO,EAAE,eAAA,EAAiB,IAAA,CAAK,OAAA,EAAS,UAAA,EAAY,UAAU,QAAA,EAAS;AAAA,EACzE;AAAA,EAEA,iBAAiB,MAAA,EA0BR;AACP,IAAA,MAAM,WAAqB,EAAC;AAG5B,IAAA,QAAA,CAAS,IAAA,CAAK,MAAA,CAAO,MAAA,CAAO,MAAA,CAAO,MAAM,CAAC,CAAA;AAC1C,IAAA,KAAA,MAAW,KAAA,IAAS,OAAO,MAAA,EAAQ;AACjC,MAAA,QAAA,CAAS,IAAA;AAAA,QACP,KAAA,CAAM,QAAA;AAAA,QACN,KAAA,CAAM,QAAA;AAAA,QACN,KAAA,CAAM,YAAA;AAAA,QACN,KAAA,CAAM,cAAA;AAAA,QACN,MAAA,CAAO,MAAM,SAAS,CAAA;AAAA,QACtB,MAAA,CAAO,MAAM,aAAa,CAAA;AAAA,QAC1B,MAAA,CAAO,MAAM,eAAe,CAAA;AAAA,QAC5B,KAAA,CAAM,SAAS,QAAA,EAAS;AAAA,QACxB,KAAA,CAAM,SAAS,QAAA,EAAS;AAAA,QACxB,KAAA,CAAM,cAAc,GAAA,GAAM,GAAA;AAAA,QAC1B,KAAA,CAAM,MAAM,QAAA;AAAS,OACvB;AAAA,IACF;AAGA,IAAA,QAAA,CAAS,IAAA,CAAK,GAAG,eAAA,CAAgB,MAAA,CAAO,cAAc,CAAC,CAAA;AAEvD,IAAA,QAAA,CAAS,IAAA,CAAK,GAAG,eAAA,CAAgB,MAAA,CAAO,kBAAkB,CAAC,CAAA;AAE3D,IAAA,QAAA,CAAS,IAAA,CAAK,GAAG,eAAA,CAAgB,MAAA,CAAO,oBAAoB,CAAC,CAAA;AAG7D,IAAA,QAAA,CAAS,IAAA,CAAK,MAAA,CAAO,MAAA,CAAO,YAAA,CAAa,MAAM,CAAC,CAAA;AAChD,IAAA,KAAA,MAAW,GAAA,IAAO,OAAO,YAAA,EAAc;AACrC,MAAA,QAAA,CAAS,KAAK,MAAA,CAAO,GAAA,CAAI,MAAM,CAAA,EAAG,GAAG,GAAG,CAAA;AAAA,IAC1C;AAGA,IAAA,QAAA,CAAS,IAAA;AAAA,MACP,OAAO,UAAA,CAAW,SAAA;AAAA,MAClB,MAAA,CAAO,MAAA,CAAO,UAAA,CAAW,KAAK,CAAA;AAAA,MAC9B,OAAO,UAAA,CAAW,MAAA;AAAA,MAClB,MAAA,CAAO,UAAA,CAAW,UAAA,CAAW,QAAA;AAAS,KACxC;AAGA,IAAA,QAAA,CAAS,IAAA,CAAK,OAAO,MAAA,CAAO,SAAA,CAAU,MAAM,CAAA,EAAG,GAAG,OAAO,SAAS,CAAA;AAGlE,IAAA,QAAA,CAAS,IAAA,CAAK,MAAA,CAAO,MAAA,CAAO,OAAA,CAAQ,MAAM,CAAC,CAAA;AAC3C,IAAA,KAAA,MAAW,GAAA,IAAO,OAAO,OAAA,EAAS;AAChC,MAAA,QAAA,CAAS,IAAA,CAAK,GAAG,MAAA,CAAO,GAAG,CAAC,CAAA;AAAA,IAC9B;AAEA,IAAA,OAAO,EAAE,eAAA,EAAiB,IAAA,CAAK,OAAA,EAAS,UAAA,EAAY,gBAAgB,QAAA,EAAS;AAAA,EAC/E;AAAA,EAEA,oBAAA,CAAqB,KAAA,EAAoB,SAAA,EAAqB,OAAA,EAAuB;AACnF,IAAA,MAAM,QAAA,GAAqB;AAAA;AAAA,MAEzB,KAAA,CAAM,KAAA;AAAA,MACN,KAAA,CAAM,aAAA;AAAA,MACN,GAAG,MAAA,CAAO,KAAA,CAAM,cAAc,CAAA;AAAA,MAC9B,GAAG,MAAA,CAAO,KAAA,CAAM,GAAG,CAAA;AAAA,MACnB,KAAA,CAAM,SAAS,QAAA,EAAS;AAAA,MACxB,KAAA,CAAM,KAAA;AAAA,MACN,GAAG,MAAA,CAAO,KAAA,CAAM,YAAY,CAAA;AAAA;AAAA,MAE5B,MAAA,CAAO,UAAU,MAAM,CAAA;AAAA,MACvB,GAAG,SAAA;AAAA;AAAA,MAEH,GAAG,OAAO,OAAO;AAAA,KACnB;AACA,IAAA,OAAO,EAAE,eAAA,EAAiB,IAAA,CAAK,OAAA,EAAS,UAAA,EAAY,qBAAqB,QAAA,EAAS;AAAA,EACpF;AAAA,EAEA,iBAAiB,KAAA,EAA0B;AACzC,IAAA,MAAM,QAAA,GAAqB;AAAA,MACzB,KAAA,CAAM,KAAA;AAAA,MACN,KAAA,CAAM,aAAA;AAAA,MACN,GAAG,MAAA,CAAO,KAAA,CAAM,cAAc,CAAA;AAAA,MAC9B,GAAG,MAAA,CAAO,KAAA,CAAM,GAAG,CAAA;AAAA,MACnB,KAAA,CAAM,SAAS,QAAA,EAAS;AAAA,MACxB,KAAA,CAAM,KAAA;AAAA,MACN,GAAG,MAAA,CAAO,KAAA,CAAM,YAAY;AAAA,KAC9B;AACA,IAAA,OAAO,EAAE,eAAA,EAAiB,IAAA,CAAK,OAAA,EAAS,UAAA,EAAY,gBAAgB,QAAA,EAAS;AAAA,EAC/E;AAAA,EAEA,yBAAyB,QAAA,EAAwB;AAC/C,IAAA,OAAO;AAAA,MACL,iBAAiB,IAAA,CAAK,OAAA;AAAA,MACtB,UAAA,EAAY,wBAAA;AAAA,MACZ,QAAA,EAAU,CAAC,QAAQ;AAAA,KACrB;AAAA,EACF;AAAA;AAAA;AAAA,EAKA,sBAAsB,MAAA,EAsBb;AACP,IAAA,MAAM,QAAA,GAAqB;AAAA;AAAA,MAEzB,OAAO,KAAA,CAAM,MAAA;AAAA,MACb,OAAO,KAAA,CAAM,QAAA;AAAA,MACb,OAAO,KAAA,CAAM,YAAA;AAAA,MACb,MAAA,CAAO,MAAA,CAAO,KAAA,CAAM,SAAS,CAAA;AAAA,MAC7B,MAAA,CAAO,MAAA,CAAO,KAAA,CAAM,aAAa,CAAA;AAAA,MACjC,OAAO,KAAA,CAAM,iBAAA;AAAA,MACb,MAAA,CAAO,KAAA,CAAM,QAAA,CAAS,QAAA,EAAS;AAAA,MAC/B,MAAA,CAAO,KAAA,CAAM,QAAA,CAAS,QAAA,EAAS;AAAA,MAC/B,MAAA,CAAO,KAAA,CAAM,KAAA,CAAM,QAAA,EAAS;AAAA;AAAA,MAE5B,OAAO,UAAA,CAAW,SAAA;AAAA,MAClB,OAAO,UAAA,CAAW,QAAA;AAAA,MAClB,GAAG,MAAA,CAAO,MAAA,CAAO,UAAA,CAAW,OAAO,CAAA;AAAA,MACnC,MAAA,CAAO,UAAA,CAAW,KAAA,CAAM,QAAA,EAAS;AAAA;AAAA,MAEjC,GAAG,eAAA,CAAgB,MAAA,CAAO,UAAU,CAAA;AAAA;AAAA,MAEpC,GAAG,eAAA,CAAgB,MAAA,CAAO,cAAc,CAAA;AAAA;AAAA,MAExC,MAAA,CAAO,MAAA,CAAO,SAAA,CAAU,MAAM,CAAA;AAAA,MAC9B,GAAG,MAAA,CAAO,SAAA;AAAA;AAAA,MAEV,MAAA,CAAO,MAAA,CAAO,WAAA,CAAY,MAAM,CAAA;AAAA,MAChC,GAAG,MAAA,CAAO;AAAA,KACZ;AACA,IAAA,OAAO,EAAE,eAAA,EAAiB,IAAA,CAAK,OAAA,EAAS,UAAA,EAAY,qBAAqB,QAAA,EAAS;AAAA,EACpF;AAAA;AAAA,EAGA,wBAAA,CAAyB,eAAuB,YAAA,EAA4B;AAC1E,IAAA,OAAO;AAAA,MACL,iBAAiB,IAAA,CAAK,OAAA;AAAA,MACtB,UAAA,EAAY,sBAAA;AAAA,MACZ,UAAU,CAAC,GAAG,MAAA,CAAO,aAAa,GAAG,YAAY;AAAA,KACnD;AAAA,EACF;AAAA;AAAA,EAGA,0BAA0B,MAAA,EAajB;AACP,IAAA,MAAM,QAAA,GAAqB;AAAA,MACzB,GAAG,MAAA,CAAO,MAAA,CAAO,aAAa,CAAA;AAAA;AAAA,MAE9B,GAAG,MAAA,CAAO,MAAA,CAAO,QAAA,CAAS,aAAa,CAAA;AAAA,MACvC,OAAO,QAAA,CAAS,QAAA;AAAA,MAChB,MAAA,CAAO,QAAA,CAAS,WAAA,CAAY,QAAA,EAAS;AAAA,MACrC,OAAO,QAAA,CAAS,eAAA;AAAA,MAChB,MAAA,CAAO,MAAA,CAAO,QAAA,CAAS,gBAAgB,CAAA;AAAA,MACvC,MAAA,CAAO,QAAA,CAAS,gBAAA,CAAiB,QAAA,EAAS;AAAA,MAC1C,MAAA,CAAO,QAAA,CAAS,KAAA,CAAM,QAAA,EAAS;AAAA;AAAA,MAE/B,MAAA,CAAO,MAAA,CAAO,WAAA,CAAY,MAAM,CAAA;AAAA,MAChC,GAAG,MAAA,CAAO,WAAA;AAAA;AAAA,MAEV,GAAG,eAAA,CAAgB,MAAA,CAAO,iBAAiB;AAAA,KAC7C;AACA,IAAA,OAAO,EAAE,eAAA,EAAiB,IAAA,CAAK,OAAA,EAAS,UAAA,EAAY,yBAAyB,QAAA,EAAS;AAAA,EACxF;AAAA;AAAA,EAGA,mBAAmB,MAAA,EAaV;AACP,IAAA,MAAM,QAAA,GAAqB;AAAA,MACzB,GAAG,MAAA,CAAO,MAAA,CAAO,aAAa,CAAA;AAAA;AAAA,MAE9B,GAAG,MAAA,CAAO,MAAA,CAAO,KAAA,CAAM,aAAa,CAAA;AAAA,MACpC,OAAO,KAAA,CAAM,QAAA;AAAA,MACb,GAAG,MAAA,CAAO,MAAA,CAAO,KAAA,CAAM,QAAQ,CAAA;AAAA,MAC/B,OAAO,KAAA,CAAM,YAAA;AAAA,MACb,OAAO,KAAA,CAAM,YAAA;AAAA,MACb,MAAA,CAAO,KAAA,CAAM,QAAA,CAAS,QAAA,EAAS;AAAA,MAC/B,MAAA,CAAO,KAAA,CAAM,KAAA,CAAM,QAAA,EAAS;AAAA;AAAA,MAE5B,MAAA,CAAO,MAAA,CAAO,WAAA,CAAY,MAAM,CAAA;AAAA,MAChC,GAAG,MAAA,CAAO,WAAA;AAAA;AAAA,MAEV,GAAG,MAAA,CAAO,MAAA,CAAO,SAAS;AAAA,KAC5B;AACA,IAAA,OAAO,EAAE,eAAA,EAAiB,IAAA,CAAK,OAAA,EAAS,UAAA,EAAY,kBAAkB,QAAA,EAAS;AAAA,EACjF;AAAA;AAAA,EAGA,eAAe,MAAA,EAsBN;AACP,IAAA,MAAM,QAAA,GAAqB;AAAA;AAAA,MAEzB,GAAG,MAAA,CAAO,MAAA,CAAO,KAAA,CAAM,aAAa,CAAA;AAAA,MACpC,OAAO,KAAA,CAAM,SAAA;AAAA,MACb,OAAO,KAAA,CAAM,WAAA;AAAA,MACb,OAAO,KAAA,CAAM,eAAA;AAAA,MACb,MAAA,CAAO,MAAA,CAAO,KAAA,CAAM,YAAY,CAAA;AAAA,MAChC,MAAA,CAAO,MAAA,CAAO,KAAA,CAAM,gBAAgB,CAAA;AAAA,MACpC,MAAA,CAAO,KAAA,CAAM,WAAA,CAAY,QAAA,EAAS;AAAA,MAClC,MAAA,CAAO,KAAA,CAAM,QAAA,CAAS,QAAA,EAAS;AAAA,MAC/B,MAAA,CAAO,KAAA,CAAM,KAAA,CAAM,QAAA,EAAS;AAAA;AAAA,MAE5B,GAAG,eAAA,CAAgB,MAAA,CAAO,aAAa,CAAA;AAAA;AAAA,MAEvC,GAAG,eAAA,CAAgB,MAAA,CAAO,iBAAiB,CAAA;AAAA;AAAA,MAE3C,MAAA,CAAO,MAAA,CAAO,YAAA,CAAa,MAAM,CAAA;AAAA,MACjC,GAAG,MAAA,CAAO,YAAA;AAAA;AAAA,MAEV,GAAG,MAAA,CAAO,MAAA,CAAO,QAAA,CAAS,aAAa,CAAA;AAAA,MACvC,OAAO,QAAA,CAAS,SAAA;AAAA,MAChB,OAAO,QAAA,CAAS,QAAA;AAAA,MAChB,MAAA,CAAO,QAAA,CAAS,KAAA,CAAM,QAAA,EAAS;AAAA;AAAA,MAE/B,MAAA,CAAO,MAAA,CAAO,WAAA,CAAY,MAAM,CAAA;AAAA,MAChC,GAAG,MAAA,CAAO;AAAA,KACZ;AACA,IAAA,OAAO,EAAE,eAAA,EAAiB,IAAA,CAAK,OAAA,EAAS,UAAA,EAAY,aAAa,QAAA,EAAS;AAAA,EAC5E;AAAA;AAAA,EAGA,kBAAkB,aAAA,EAA6B;AAC7C,IAAA,OAAO;AAAA,MACL,iBAAiB,IAAA,CAAK,OAAA;AAAA,MACtB,UAAA,EAAY,eAAA;AAAA,MACZ,QAAA,EAAU,CAAC,GAAG,MAAA,CAAO,aAAa,CAAC;AAAA,KACrC;AAAA,EACF;AAAA;AAAA,EAGA,SAAS,aAAA,EAA6B;AACpC,IAAA,OAAO;AAAA,MACL,iBAAiB,IAAA,CAAK,OAAA;AAAA,MACtB,UAAA,EAAY,KAAA;AAAA,MACZ,QAAA,EAAU,CAAC,GAAG,MAAA,CAAO,aAAa,CAAC;AAAA,KACrC;AAAA,EACF;AAAA;AAAA,EAGA,qBAAqB,aAAA,EAA6B;AAChD,IAAA,OAAO;AAAA,MACL,iBAAiB,IAAA,CAAK,OAAA;AAAA,MACtB,UAAA,EAAY,kBAAA;AAAA,MACZ,QAAA,EAAU,CAAC,GAAG,MAAA,CAAO,aAAa,CAAC;AAAA,KACrC;AAAA,EACF;AAAA;AAAA;AAAA,EAKA,MAAM,eAAA,CAAgB,aAAA,EAAuB,SAAA,EAAoC;AAC/E,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,QAAA,CAAS,KAAK,mBAAA,EAAqB;AAAA,MAC3D,GAAG,OAAO,aAAa,CAAA;AAAA,MACvB,OAAO,SAAS;AAAA,KACjB,CAAA;AACD,IAAA,OAAO,YAAY,MAAM,CAAA;AAAA,EAC3B;AAAA;AAAA,EAGA,MAAM,kBAAkB,aAAA,EAAwC;AAC9D,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,QAAA,CAAS,KAAK,sBAAA,EAAwB,MAAA,CAAO,aAAa,CAAC,CAAA;AACrF,IAAA,OAAO,OAAO,MAAA,CAAQ,MAAA,CAAqB,CAAC,CAAA,IAAK,GAAG,CAAC,CAAA;AAAA,EACvD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,QAAQ,KAAA,EAAsD;AAClE,IAAA,IAAI,CAAC,IAAA,CAAK,OAAA,EAAS,MAAM,IAAI,MAAM,uCAAuC,CAAA;AAC1E,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,OAAA,CAAQ,QAAQ,KAAK,CAAA;AAC/C,IAAA,OAAO,EAAE,gBAAA,EAAkB,MAAA,CAAO,gBAAA,EAAiB;AAAA,EACrD;AAAA,EAEA,MAAM,iBAAA,CAAkB,MAAA,EAA2B,SAAA,EAA2D;AAC5G,IAAA,MAAM,KAAA,GAAQ,CAAC,GAAI,SAAA,IAAa,EAAC,EAAI,IAAA,CAAK,sBAAA,CAAuB,MAAM,CAAC,CAAA;AACxE,IAAA,OAAO,IAAA,CAAK,QAAQ,KAAK,CAAA;AAAA,EAC3B;AAAA,EAEA,MAAM,eAAA,CAAgB,aAAA,EAAuB,GAAA,EAAa,SAAA,EAA2D;AACnH,IAAA,MAAM,KAAA,GAAQ,CAAC,GAAI,SAAA,IAAa,IAAK,IAAA,CAAK,oBAAA,CAAqB,aAAA,EAAe,GAAG,CAAC,CAAA;AAClF,IAAA,OAAO,IAAA,CAAK,QAAQ,KAAK,CAAA;AAAA,EAC3B;AAAA,EAEA,MAAM,kBAAkB,aAAA,EAA8D;AACpF,IAAA,OAAO,KAAK,OAAA,CAAQ,CAAC,KAAK,sBAAA,CAAuB,aAAa,CAAC,CAAC,CAAA;AAAA,EAClE;AAAA,EAEA,MAAM,KAAA,CAAM,aAAA,EAAuB,SAAA,EAA2D;AAC5F,IAAA,MAAM,KAAA,GAAQ,CAAC,GAAI,SAAA,IAAa,EAAC,EAAI,IAAA,CAAK,UAAA,CAAW,aAAa,CAAC,CAAA;AACnE,IAAA,OAAO,IAAA,CAAK,QAAQ,KAAK,CAAA;AAAA,EAC3B;AAAA,EAEA,MAAM,UAAU,aAAA,EAA8D;AAC5E,IAAA,OAAO,KAAK,OAAA,CAAQ,CAAC,KAAK,cAAA,CAAe,aAAa,CAAC,CAAC,CAAA;AAAA,EAC1D;AAAA,EAEA,MAAM,MAAA,CAAO,aAAA,EAAuB,MAAA,EAAuD;AACzF,IAAA,OAAO,IAAA,CAAK,QAAQ,CAAC,IAAA,CAAK,YAAY,aAAA,EAAe,MAAM,CAAC,CAAC,CAAA;AAAA,EAC/D;AAAA,EAEA,MAAM,eAAA,CAAgB,KAAA,EAAoB,SAAA,EAAqB,SAAiB,SAAA,EAA2D;AACzI,IAAA,MAAM,KAAA,GAAQ,CAAC,GAAI,SAAA,IAAa,EAAC,EAAI,IAAA,CAAK,oBAAA,CAAqB,KAAA,EAAO,SAAA,EAAW,OAAO,CAAC,CAAA;AACzF,IAAA,OAAO,IAAA,CAAK,QAAQ,KAAK,CAAA;AAAA,EAC3B;AAAA,EAEA,MAAM,YAAY,KAAA,EAA2D;AAC3E,IAAA,OAAO,KAAK,OAAA,CAAQ,CAAC,KAAK,gBAAA,CAAiB,KAAK,CAAC,CAAC,CAAA;AAAA,EACpD;AAAA,EAEA,MAAM,oBAAoB,QAAA,EAAyD;AACjF,IAAA,OAAO,KAAK,OAAA,CAAQ,CAAC,KAAK,wBAAA,CAAyB,QAAQ,CAAC,CAAC,CAAA;AAAA,EAC/D;AAAA;AAAA,EAIA,MAAM,iBAAiB,MAAA,EAA0G;AAC/H,IAAA,OAAO,KAAK,OAAA,CAAQ,CAAC,KAAK,qBAAA,CAAsB,MAAM,CAAC,CAAC,CAAA;AAAA,EAC1D;AAAA,EAEA,MAAM,mBAAA,CAAoB,aAAA,EAAuB,YAAA,EAA6D;AAC5G,IAAA,OAAO,IAAA,CAAK,QAAQ,CAAC,IAAA,CAAK,yBAAyB,aAAA,EAAe,YAAY,CAAC,CAAC,CAAA;AAAA,EAClF;AAAA,EAEA,MAAM,oBAAA,CAAqB,MAAA,EAAuE,SAAA,EAA2D;AAC3J,IAAA,MAAM,KAAA,GAAQ,CAAC,GAAI,SAAA,IAAa,EAAC,EAAI,IAAA,CAAK,yBAAA,CAA0B,MAAM,CAAC,CAAA;AAC3E,IAAA,OAAO,IAAA,CAAK,QAAQ,KAAK,CAAA;AAAA,EAC3B;AAAA,EAEA,MAAM,aAAA,CAAc,MAAA,EAAgE,SAAA,EAA2D;AAC7I,IAAA,MAAM,KAAA,GAAQ,CAAC,GAAI,SAAA,IAAa,EAAC,EAAI,IAAA,CAAK,kBAAA,CAAmB,MAAM,CAAC,CAAA;AACpE,IAAA,OAAO,IAAA,CAAK,QAAQ,KAAK,CAAA;AAAA,EAC3B;AAAA,EAEA,MAAM,SAAA,CAAU,MAAA,EAA4D,SAAA,EAA2D;AACrI,IAAA,MAAM,KAAA,GAAQ,CAAC,GAAI,SAAA,IAAa,EAAC,EAAI,IAAA,CAAK,cAAA,CAAe,MAAM,CAAC,CAAA;AAChE,IAAA,OAAO,IAAA,CAAK,QAAQ,KAAK,CAAA;AAAA,EAC3B;AAAA,EAEA,MAAM,aAAa,aAAA,EAA8D;AAC/E,IAAA,OAAO,KAAK,OAAA,CAAQ,CAAC,KAAK,iBAAA,CAAkB,aAAa,CAAC,CAAC,CAAA;AAAA,EAC7D;AAAA,EAEA,MAAM,GAAA,CAAI,aAAA,EAAuB,SAAA,EAA2D;AAC1F,IAAA,MAAM,KAAA,GAAQ,CAAC,GAAI,SAAA,IAAa,EAAC,EAAI,IAAA,CAAK,QAAA,CAAS,aAAa,CAAC,CAAA;AACjE,IAAA,OAAO,IAAA,CAAK,QAAQ,KAAK,CAAA;AAAA,EAC3B;AAAA,EAEA,MAAM,gBAAgB,aAAA,EAA8D;AAClF,IAAA,OAAO,KAAK,OAAA,CAAQ,CAAC,KAAK,oBAAA,CAAqB,aAAa,CAAC,CAAC,CAAA;AAAA,EAChE;AACF;AAIA,SAAS,gBAAgB,MAAA,EAA2B;AAClD,EAAA,MAAM,QAAA,GAAqB,CAAC,MAAA,CAAO,MAAA,CAAO,MAAM,CAAC,CAAA;AACjD,EAAA,KAAA,MAAW,KAAK,MAAA,EAAQ;AACtB,IAAA,QAAA,CAAS,IAAA,CAAK,EAAE,aAAa,CAAA;AAC7B,IAAA,QAAA,CAAS,KAAK,MAAA,CAAO,eAAA,CAAgB,CAAA,CAAE,UAAU,CAAC,CAAC,CAAA;AACnD,IAAA,QAAA,CAAS,IAAA,CAAK,GAAG,MAAA,CAAO,CAAA,CAAE,KAAK,CAAC,CAAA;AAChC,IAAA,QAAA,CAAS,IAAA,CAAK,GAAG,MAAA,CAAO,CAAA,CAAE,QAAQ,CAAC,CAAA;AAAA,EACrC;AACA,EAAA,OAAO,QAAA;AACT;AAEA,SAAS,YAAY,MAAA,EAAyB;AAC5C,EAAA,MAAM,GAAA,GAAM,MAAA;AACZ,EAAA,IAAI,OAAO,GAAA,CAAI,CAAC,MAAM,QAAA,EAAU,OAAO,IAAI,CAAC,CAAA;AAC5C,EAAA,IAAI,OAAO,GAAA,CAAI,CAAC,CAAA,KAAM,QAAA,IAAY,IAAI,CAAC,CAAA,KAAM,IAAA,IAAQ,KAAA,IAAS,IAAI,CAAC,CAAA,IAAK,MAAA,IAAU,GAAA,CAAI,CAAC,CAAA,EAAG;AACxF,IAAA,MAAM,CAAA,GAAI,IAAI,CAAC,CAAA;AACf,IAAA,OAAO,SAAS,CAAC,CAAA;AAAA,EACnB;AACA,EAAA,OAAO,MAAA,CAAO,MAAA,CAAO,GAAA,CAAI,CAAC,CAAC,CAAC,CAAA;AAC9B;AAEA,SAAS,uBAAuB,MAAA,EAAoC;AAClE,EAAA,MAAM,CAAA,GAAI,MAAA;AAEV,EAAA,MAAM,GAAA,GAAM,CAAC,GAAA,EAAa,KAAA,KAA2B;AACnD,IAAA,IAAI,GAAA,IAAO,CAAA,EAAG,OAAO,CAAA,CAAE,GAAG,CAAA;AAC1B,IAAA,MAAM,GAAA,GAAM,MAAA;AACZ,IAAA,OAAO,IAAI,KAAK,CAAA;AAAA,EAClB,CAAA;AAEA,EAAA,OAAO;AAAA,IACL,QAAA,EAAU,MAAA,CAAO,GAAA,CAAI,UAAA,EAAY,CAAC,CAAC,CAAA;AAAA,IACnC,MAAA,EAAQ,MAAA,CAAO,GAAA,CAAI,QAAA,EAAU,CAAC,CAAC,CAAA;AAAA,IAC/B,UAAU,MAAA,CAAO,MAAA,CAAO,IAAI,UAAA,EAAY,CAAC,CAAC,CAAC,CAAA;AAAA,IAC3C,UAAU,MAAA,CAAO,MAAA,CAAO,IAAI,UAAA,EAAY,CAAC,CAAC,CAAC,CAAA;AAAA,IAC3C,WAAW,MAAA,CAAO,MAAA,CAAO,IAAI,WAAA,EAAa,CAAC,CAAC,CAAC,CAAA;AAAA,IAC7C,sBAAA,EAAwB,gBAAA,CAAiB,GAAA,CAAI,wBAAA,EAA0B,CAAC,CAAC,CAAA;AAAA,IACzE,SAAA,EAAW,OAAA,CAAQ,GAAA,CAAI,WAAA,EAAa,CAAC,CAAC,CAAA;AAAA,IACtC,UAAA,EAAY,OAAA,CAAQ,GAAA,CAAI,YAAA,EAAc,CAAC,CAAC,CAAA;AAAA,IACxC,YAAA,EAAc,OAAA,CAAQ,GAAA,CAAI,cAAA,EAAgB,CAAC,CAAC,CAAA;AAAA,IAC5C,gBAAA,EAAkB,MAAA,CAAO,GAAA,CAAI,kBAAA,EAAoB,CAAC,CAAC,CAAA;AAAA,IACnD,oBAAA,EAAsB,MAAA,CAAO,GAAA,CAAI,sBAAA,EAAwB,EAAE,CAAC,CAAA;AAAA,IAC5D,sBAAA,EAAwB,MAAA,CAAO,GAAA,CAAI,wBAAA,EAA0B,EAAE,CAAC,CAAA;AAAA,IAChE,eAAA,EAAiB,OAAA,CAAQ,GAAA,CAAI,iBAAA,EAAmB,EAAE,CAAC,CAAA;AAAA,IACnD,kBAAA,EAAoB,OAAO,MAAA,CAAO,GAAA,CAAI,sBAAsB,EAAE,CAAA,IAAK,GAAG,CAAC;AAAA,GACzE;AACF;AAEA,SAAS,iBAAiB,GAAA,EAAsB;AAC9C,EAAA,IAAI,OAAO,GAAA,KAAQ,QAAA,EAAU,OAAO,GAAA;AACpC,EAAA,IAAI,OAAO,QAAQ,QAAA,IAAY,GAAA,KAAQ,QAAQ,KAAA,IAAS,GAAA,IAAO,UAAU,GAAA,EAAK;AAC5E,IAAA,OAAO,SAAS,GAAoC,CAAA;AAAA,EACtD;AACA,EAAA,OAAO,MAAA,CAAO,MAAA,CAAO,GAAG,CAAC,CAAA;AAC3B;ACvqBO,IAAM,cAAN,MAAkB;AAAA,EACf,QAAA;AAAA,EACA,OAAA;AAAA,EACA,OAAA;AAAA,EAER,YAAY,IAAA,EAA0B;AACpC,IAAA,IAAA,CAAK,UAAU,IAAA,CAAK,YAAA;AACpB,IAAA,IAAA,CAAK,WAAW,IAAIA,iBAAAA,CAAS,eAAU,IAAA,CAAK,YAAA,EAAc,KAAK,QAAQ,CAAA;AACvE,IAAA,IAAA,CAAK,UAAU,IAAA,CAAK,OAAA;AAAA,EACtB;AAAA;AAAA;AAAA,EAKA,MAAM,SAAA,CAAU,OAAA,EAAiB,aAAA,EAAwC;AACvE,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,QAAA,CAAS,IAAA,CAAK,YAAA,EAAc,CAAC,OAAA,EAAS,GAAG,MAAA,CAAO,aAAa,CAAC,CAAC,CAAA;AACzF,IAAA,OAAO,cAAc,MAAM,CAAA;AAAA,EAC7B;AAAA;AAAA,EAGA,MAAM,cAAA,CAAe,QAAA,EAAoB,cAAA,EAA6C;AACpF,IAAA,IAAI,QAAA,CAAS,MAAA,KAAW,cAAA,CAAe,MAAA,EAAQ;AAC7C,MAAA,MAAM,IAAI,MAAM,uDAAuD,CAAA;AAAA,IACzE;AACA,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,QAAA,CAAS,KAAK,kBAAA,EAAoB;AAAA,MAC1D,QAAA;AAAA,MACA,eAAe,GAAA,CAAI,CAAC,EAAA,KAAO,MAAA,CAAO,EAAE,CAAC;AAAA,KACtC,CAAA;AACD,IAAA,MAAM,GAAA,GAAM,MAAA;AACZ,IAAA,MAAM,QAAA,GAAW,IAAI,CAAC,CAAA;AACtB,IAAA,OAAO,QAAA,CAAS,IAAI,CAAC,CAAA,KAAM,OAAO,MAAA,CAAO,CAAC,CAAC,CAAC,CAAA;AAAA,EAC9C;AAAA;AAAA,EAGA,MAAM,gBAAA,CAAiB,KAAA,EAAe,QAAA,EAAoC;AACxE,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,QAAA,CAAS,KAAK,qBAAA,EAAuB,CAAC,KAAA,EAAO,QAAQ,CAAC,CAAA;AAChF,IAAA,OAAO,OAAA,CAAS,MAAA,CAAqB,CAAC,CAAC,CAAA;AAAA,EACzC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAcA,oBACE,IAAA,EACA,EAAA,EACA,eACA,MAAA,EACA,IAAA,GAAiB,EAAC,EACZ;AACN,IAAA,OAAO;AAAA,MACL,iBAAiB,IAAA,CAAK,OAAA;AAAA,MACtB,UAAA,EAAY,oBAAA;AAAA,MACZ,UAAU,CAAC,IAAA,EAAM,EAAA,EAAI,GAAG,OAAO,aAAa,CAAA,EAAG,GAAG,MAAA,CAAO,MAAM,CAAA,EAAG,MAAA,CAAO,KAAK,MAAM,CAAA,EAAG,GAAG,IAAI;AAAA,KAChG;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,sBAAA,CAAuB,UAAkB,QAAA,EAAyB;AAChE,IAAA,OAAO;AAAA,MACL,iBAAiB,IAAA,CAAK,OAAA;AAAA,MACtB,UAAA,EAAY,sBAAA;AAAA,MACZ,QAAA,EAAU,CAAC,QAAA,EAAU,QAAA,GAAW,MAAM,GAAG;AAAA,KAC3C;AAAA,EACF;AAAA;AAAA;AAAA,EAKA,MAAM,eACJ,IAAA,EACA,EAAA,EACA,eACA,MAAA,EACA,IAAA,GAAiB,EAAC,EACqB;AACvC,IAAA,IAAI,CAAC,IAAA,CAAK,OAAA,EAAS,MAAM,IAAI,MAAM,uCAAuC,CAAA;AAC1E,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,OAAA,CAAQ,OAAA,CAAQ;AAAA,MACxC,KAAK,mBAAA,CAAoB,IAAA,EAAM,EAAA,EAAI,aAAA,EAAe,QAAQ,IAAI;AAAA,KAC/D,CAAA;AACD,IAAA,OAAO,EAAE,gBAAA,EAAkB,MAAA,CAAO,gBAAA,EAAiB;AAAA,EACrD;AAAA;AAAA,EAGA,MAAM,iBAAA,CACJ,QAAA,EACA,QAAA,EACuC;AACvC,IAAA,IAAI,CAAC,IAAA,CAAK,OAAA,EAAS,MAAM,IAAI,MAAM,uCAAuC,CAAA;AAC1E,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,OAAA,CAAQ,OAAA,CAAQ,CAAC,IAAA,CAAK,sBAAA,CAAuB,QAAA,EAAU,QAAQ,CAAC,CAAC,CAAA;AAC3F,IAAA,OAAO,EAAE,gBAAA,EAAkB,MAAA,CAAO,gBAAA,EAAiB;AAAA,EACrD;AACF;AAEA,SAAS,cAAc,MAAA,EAAyB;AAC9C,EAAA,MAAM,GAAA,GAAM,MAAA;AACZ,EAAA,IAAI,OAAO,GAAA,CAAI,CAAC,MAAM,QAAA,EAAU,OAAO,IAAI,CAAC,CAAA;AAC5C,EAAA,OAAO,MAAA,CAAO,MAAA,CAAO,GAAA,CAAI,CAAC,CAAC,CAAC,CAAA;AAC9B;;;AClIA,IAAA,aAAA,GAAA;AAAA,EACE;AAAA,IACE,IAAA,EAAQ,QAAA;AAAA,IACR,IAAA,EAAQ,qBAAA;AAAA,IACR,OAAA,EAAW;AAAA,MACT,EAAE,IAAA,EAAQ,KAAA,EAAO,IAAA,EAAQ,qBAAA,EAAsB;AAAA,MAC/C,EAAE,IAAA,EAAQ,MAAA,EAAQ,IAAA,EAAQ,qBAAA;AAAsB;AAClD,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,WAAA;AAAA,IACR,IAAA,EAAQ,eAAA;AAAA,IACR,KAAA,EAAS;AAAA,MACP;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,SAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR,EAAE,IAAA,EAAQ,SAAA,EAAW,IAAA,EAAQ,mDAAA,EAAoD;AAAA,UACjF,EAAE,IAAA,EAAQ,QAAA,EAAU,IAAA,EAAQ,qBAAA;AAAsB,SACpD;AAAA,QACA,OAAA,EAAW,CAAC,EAAE,IAAA,EAAQ,cAAc,CAAA;AAAA,QACpC,gBAAA,EAAoB;AAAA,OACtB;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,YAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR,EAAE,IAAA,EAAQ,SAAA,EAAW,IAAA,EAAQ,mDAAA;AAAoD,SACnF;AAAA,QACA,OAAA,EAAW,CAAC,EAAE,IAAA,EAAQ,uBAAuB,CAAA;AAAA,QAC7C,gBAAA,EAAoB;AAAA,OACtB;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,WAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR,EAAE,IAAA,EAAQ,OAAA,EAAS,IAAA,EAAQ,mDAAA,EAAoD;AAAA,UAC/E,EAAE,IAAA,EAAQ,SAAA,EAAW,IAAA,EAAQ,mDAAA;AAAoD,SACnF;AAAA,QACA,OAAA,EAAW,CAAC,EAAE,IAAA,EAAQ,uBAAuB,CAAA;AAAA,QAC7C,gBAAA,EAAoB;AAAA,OACtB;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,WAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR,EAAE,IAAA,EAAQ,SAAA,EAAW,IAAA,EAAQ,mDAAA;AAAoD,SACnF;AAAA,QACA,OAAA,EAAW,CAAC,EAAE,IAAA,EAAQ,uBAAuB,CAAA;AAAA,QAC7C,gBAAA,EAAoB;AAAA;AACtB;AACF;AAEJ,CAAA;;;ACrDA,IAAA,cAAA,GAAA;AAAA,EACE;AAAA,IACE,IAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAQ,YAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV,EAAE,IAAA,EAAQ,OAAA,EAAS,IAAA,EAAQ,IAAA,EAAK;AAAA,MAChC,EAAE,IAAA,EAAQ,MAAA,EAAQ,IAAA,EAAQ,IAAA;AAAK;AACjC,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,QAAA;AAAA,IACR,IAAA,EAAQ,+BAAA;AAAA,IACR,OAAA,EAAW;AAAA,MACT,EAAE,IAAA,EAAQ,IAAA,EAAM,IAAA,EAAQ,mDAAA,EAAoD;AAAA,MAC5E,EAAE,IAAA,EAAQ,UAAA,EAAY,IAAA,EAAQ,eAAA,EAAgB;AAAA,MAC9C,EAAE,IAAA,EAAQ,UAAA,EAAY,IAAA,EAAQ,qCAAA;AAAsC;AACtE,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,QAAA;AAAA,IACR,IAAA,EAAQ,oCAAA;AAAA,IACR,OAAA,EAAW;AAAA,MACT,EAAE,IAAA,EAAQ,UAAA,EAAY,IAAA,EAAQ,sCAAA;AAAuC;AACvE,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,WAAA;AAAA,IACR,IAAA,EAAQ,wBAAA;AAAA,IACR,KAAA,EAAS;AAAA,MACP;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,aAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR,EAAE,IAAA,EAAQ,OAAA,EAAS,IAAA,EAAQ,oDAAA;AAAqD,SAClF;AAAA,QACA,OAAA,EAAW;AAAA,UACT,EAAE,MAAQ,0DAAA;AAA2D,SACvE;AAAA,QACA,gBAAA,EAAoB;AAAA,OACtB;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,aAAA;AAAA,QACR,QAAU,EAAC;AAAA,QACX,OAAA,EAAW,CAAC,EAAE,IAAA,EAAQ,cAAc,CAAA;AAAA,QACpC,gBAAA,EAAoB;AAAA;AACtB;AACF;AAEJ,CAAA;;;ACzCO,IAAM,eAAN,MAAmB;AAAA,EACxB,WAAA,CACU,aAAA,EACA,QAAA,EACA,OAAA,EACR;AAHQ,IAAA,IAAA,CAAA,aAAA,GAAA,aAAA;AACA,IAAA,IAAA,CAAA,QAAA,GAAA,QAAA;AACA,IAAA,IAAA,CAAA,OAAA,GAAA,OAAA;AAAA,EACP;AAAA;AAAA,EAGH,MAAM,iBAAiB,aAAA,EAAwC;AAC7D,IAAA,MAAM,QAAA,GAAW,IAAIA,iBAAAA,CAAS,aAAA,EAAU,KAAK,aAAA,CAAc,OAAA,EAAS,KAAK,QAAQ,CAAA;AACjF,IAAA,MAAM,SAAS,MAAM,QAAA,CAAS,KAAK,YAAA,EAAc,MAAA,CAAO,aAAa,CAAC,CAAA;AACtE,IAAA,OAAO,MAAA,CAAQ,MAAA,CAAqB,CAAC,CAAC,CAAA;AAAA,EACxC;AAAA;AAAA,EAGA,MAAM,WAAW,aAAA,EAAyC;AACxD,IAAA,MAAM,OAAA,GAAU,MAAM,IAAA,CAAK,gBAAA,CAAiB,aAAa,CAAA;AACzD,IAAA,MAAM,SAAS,IAAIA,iBAAAA,CAAS,cAAA,EAAW,OAAA,EAAS,KAAK,QAAQ,CAAA;AAC7D,IAAA,MAAM,MAAA,GAAS,MAAM,MAAA,CAAO,IAAA,CAAK,aAAa,CAAA;AAC9C,IAAA,OAAO,OAAA,CAAS,MAAA,CAAqB,CAAC,CAAC,CAAA;AAAA,EACzC;AAAA;AAAA,EAGA,MAAM,eAAe,aAAA,EAA6C;AAChE,IAAA,MAAM,OAAA,GAAU,MAAM,IAAA,CAAK,gBAAA,CAAiB,aAAa,CAAA;AACzD,IAAA,MAAM,SAAS,IAAIA,iBAAAA,CAAS,cAAA,EAAW,OAAA,EAAS,KAAK,QAAQ,CAAA;AAC7D,IAAA,MAAM,MAAA,GAAS,MAAM,MAAA,CAAO,IAAA,CAAK,aAAa,CAAA;AAC9C,IAAA,MAAM,UAAA,GAAa,OAAA,CAAS,MAAA,CAAqB,CAAC,CAAC,CAAA;AACnD,IAAA,OAAO,EAAE,SAAS,UAAA,EAAW;AAAA,EAC/B;AAAA;AAAA,EAGA,MAAM,gBAAA,CAAiB,aAAA,EAAuB,YAAA,EAAuC;AACnF,IAAA,MAAM,aAAA,GAAgB,MAAM,IAAA,CAAK,gBAAA,CAAiB,aAAa,CAAA;AAC/D,IAAA,MAAM,QAAQ,IAAIA,iBAAAA,CAAS,aAAA,EAAU,YAAA,EAAc,KAAK,QAAQ,CAAA;AAChE,IAAA,MAAM,SAAS,MAAM,KAAA,CAAM,KAAK,YAAA,EAAc,CAAC,aAAa,CAAC,CAAA;AAC7D,IAAA,OAAO,MAAA,CAAQ,MAAA,CAAqB,CAAC,CAAoB,CAAA;AAAA,EAC3D;AAAA;AAAA,EAGA,MAAM,iBAAA,CAAkB,aAAA,EAAuB,cAAA,EAAwD;AACrG,IAAA,MAAM,aAAA,GAAgB,MAAM,IAAA,CAAK,gBAAA,CAAiB,aAAa,CAAA;AAC/D,IAAA,MAAM,OAAA,GAAU,MAAM,OAAA,CAAQ,GAAA;AAAA,MAC5B,cAAA,CAAe,GAAA,CAAI,OAAO,IAAA,KAAS;AACjC,QAAA,MAAM,QAAQ,IAAIA,iBAAAA,CAAS,aAAA,EAAU,IAAA,EAAM,KAAK,QAAQ,CAAA;AACxD,QAAA,MAAM,SAAS,MAAM,KAAA,CAAM,KAAK,YAAA,EAAc,CAAC,aAAa,CAAC,CAAA;AAC7D,QAAA,OAAO,CAAC,IAAA,EAAM,MAAA,CAAQ,MAAA,CAAqB,CAAC,CAAoB,CAAC,CAAA;AAAA,MACnE,CAAC;AAAA,KACH;AACA,IAAA,OAAO,IAAI,IAAoB,OAAO,CAAA;AAAA,EACxC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAeA,kBAAA,CAAmB,eAAuB,UAAA,EAA0B;AAGlE,IAAA,MAAM,QAAA,GAAqB,CAAC,UAAA,CAAW,MAAA,CAAO,UAAU,CAAA;AACxD,IAAA,KAAA,MAAW,KAAK,UAAA,EAAY;AAC1B,MAAA,QAAA,CAAS,IAAA,CAAK,EAAE,eAAe,CAAA;AAC/B,MAAA,QAAA,CAAS,IAAA,CAAKD,aAAAA,CAAK,mBAAA,CAAoB,CAAA,CAAE,UAAU,CAAC,CAAA;AACpD,MAAA,QAAA,CAAS,IAAA,CAAK,CAAA,CAAE,QAAA,CAAS,MAAA,CAAO,UAAU,CAAA;AAC1C,MAAA,QAAA,CAAS,IAAA,CAAK,GAAG,CAAA,CAAE,QAAQ,CAAA;AAAA,IAC7B;AAEA,IAAA,OAAO;AAAA,MACL,eAAA,EAAiB,aAAA;AAAA,MACjB,UAAA,EAAY,aAAA;AAAA,MACZ;AAAA,KACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,cAAA,CAAe,aAAA,EAAuB,SAAA,EAAwD;AAClG,IAAA,IAAI,CAAC,IAAA,CAAK,OAAA,EAAS,MAAM,IAAI,MAAM,uCAAuC,CAAA;AAC1E,IAAA,MAAM,aAAA,GAAgB,MAAM,IAAA,CAAK,gBAAA,CAAiB,aAAa,CAAA;AAC/D,IAAA,MAAM,OAAO,IAAA,CAAK,kBAAA,CAAmB,aAAA,EAAe,CAAC,SAAS,CAAC,CAAA;AAC/D,IAAA,MAAM,SAAS,MAAM,IAAA,CAAK,QAAQ,OAAA,CAAQ,CAAC,IAAI,CAAC,CAAA;AAChD,IAAA,OAAO,EAAE,gBAAA,EAAkB,MAAA,CAAO,gBAAA,EAAiB;AAAA,EACrD;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,mBAAA,CAAoB,aAAA,EAAuB,UAAA,EAA2D;AAC1G,IAAA,IAAI,CAAC,IAAA,CAAK,OAAA,EAAS,MAAM,IAAI,MAAM,uCAAuC,CAAA;AAC1E,IAAA,MAAM,aAAA,GAAgB,MAAM,IAAA,CAAK,gBAAA,CAAiB,aAAa,CAAA;AAC/D,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,kBAAA,CAAmB,aAAA,EAAe,UAAU,CAAA;AAC9D,IAAA,MAAM,SAAS,MAAM,IAAA,CAAK,QAAQ,OAAA,CAAQ,CAAC,IAAI,CAAC,CAAA;AAChD,IAAA,OAAO,EAAE,gBAAA,EAAkB,MAAA,CAAO,gBAAA,EAAiB;AAAA,EACrD;AACF;;;ACxFO,IAAM,YAAN,MAAgB;AAAA,EACb,OAAA;AAAA,EAER,YAAY,IAAA,EAAyB;AACnC,IAAA,IAAA,CAAK,WAAW,IAAA,EAAM,OAAA,IAAW,4BAAA,EAA8B,OAAA,CAAQ,OAAO,EAAE,CAAA;AAAA,EAClF;AAAA;AAAA,EAGA,MAAM,iBAAiB,MAAA,EAA2E;AAChG,IAAA,MAAM,KAAA,GAAQ,IAAI,eAAA,EAAgB;AAClC,IAAA,IAAI,QAAQ,MAAA,EAAQ,KAAA,CAAM,GAAA,CAAI,QAAA,EAAU,OAAO,MAAM,CAAA;AACrD,IAAA,IAAI,QAAQ,OAAA,EAAS,KAAA,CAAM,GAAA,CAAI,SAAA,EAAW,OAAO,OAAO,CAAA;AACxD,IAAA,IAAI,MAAA,EAAQ,MAAM,KAAA,CAAM,GAAA,CAAI,QAAQ,MAAA,CAAO,MAAA,CAAO,IAAI,CAAC,CAAA;AACvD,IAAA,IAAI,MAAA,EAAQ,OAAO,KAAA,CAAM,GAAA,CAAI,SAAS,MAAA,CAAO,MAAA,CAAO,KAAK,CAAC,CAAA;AAC1D,IAAA,MAAM,EAAA,GAAK,MAAM,QAAA,EAAS;AAC1B,IAAA,OAAO,IAAA,CAAK,IAAqC,CAAA,aAAA,EAAgB,EAAA,GAAK,IAAI,EAAE,CAAA,CAAA,GAAK,EAAE,CAAA,CAAE,CAAA;AAAA,EACvF;AAAA;AAAA,EAGA,MAAM,eAAe,EAAA,EAAwD;AAC3E,IAAA,OAAO,IAAA,CAAK,GAAA,CAAuC,CAAA,cAAA,EAAiB,EAAE,CAAA,CAAE,CAAA;AAAA,EAC1E;AAAA;AAAA,EAGA,MAAM,qBAAqB,EAAA,EAA2D;AACpF,IAAA,OAAO,IAAA,CAAK,GAAA,CAA0C,CAAA,cAAA,EAAiB,EAAE,CAAA,OAAA,CAAS,CAAA;AAAA,EACpF;AAAA;AAAA,EAGA,MAAM,gBAAgB,OAAA,EAA0D;AAC9E,IAAA,MAAM,KAAA,GAAQ,IAAI,eAAA,CAAgB,EAAE,SAAS,CAAA;AAC7C,IAAA,OAAO,IAAA,CAAK,GAAA,CAAoC,CAAA,UAAA,EAAa,KAAK,CAAA,CAAE,CAAA;AAAA,EACtE;AAAA;AAAA,EAGA,MAAM,WAAW,OAAA,EAAuD;AACtE,IAAA,MAAM,KAAA,GAAQ,IAAI,eAAA,CAAgB,EAAE,SAAS,CAAA;AAC7C,IAAA,OAAO,IAAA,CAAK,GAAA,CAAiC,CAAA,SAAA,EAAY,KAAK,CAAA,CAAE,CAAA;AAAA,EAClE;AAAA;AAAA,EAGA,MAAM,iBAAiB,OAAA,EAAyD;AAC9E,IAAA,MAAM,KAAA,GAAQ,IAAI,eAAA,CAAgB,EAAE,SAAS,CAAA;AAC7C,IAAA,OAAO,IAAA,CAAK,GAAA,CAAmC,CAAA,QAAA,EAAW,KAAK,CAAA,CAAE,CAAA;AAAA,EACnE;AAAA,EAEA,MAAc,IAAO,IAAA,EAA0B;AAC7C,IAAA,MAAM,GAAA,GAAM,CAAA,EAAG,IAAA,CAAK,OAAO,GAAG,IAAI,CAAA,CAAA;AAClC,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,GAAG,CAAA;AAChC,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,MAAA,MAAM,IAAI,QAAA,CAAS,QAAA,CAAS,MAAA,EAAQ,CAAA,oBAAA,EAAuB,QAAA,CAAS,MAAM,CAAA,CAAA,EAAI,QAAA,CAAS,UAAU,CAAA,CAAA,EAAI,GAAG,CAAA;AAAA,IAC1G;AACA,IAAA,OAAO,SAAS,IAAA,EAAK;AAAA,EACvB;AACF;AAEO,IAAM,QAAA,GAAN,cAAuB,KAAA,CAAM;AAAA,EAClC,WAAA,CACkB,MAAA,EAChB,OAAA,EACgB,GAAA,EAChB;AACA,IAAA,KAAA,CAAM,OAAO,CAAA;AAJG,IAAA,IAAA,CAAA,MAAA,GAAA,MAAA;AAEA,IAAA,IAAA,CAAA,GAAA,GAAA,GAAA;AAGhB,IAAA,IAAA,CAAK,IAAA,GAAO,UAAA;AAAA,EACd;AACF;AC3DO,IAAM,WAAN,MAAe;AAAA,EACX,YAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA;AAAA,EACA,GAAA;AAAA,EACA,OAAA;AAAA,EACA,YAAA;AAAA,EAET,YAAY,IAAA,EAAuB;AACjC,IAAA,IAAA,CAAK,OAAA,GAAU,cAAA,CAAe,IAAA,CAAK,OAAO,CAAA;AAC1C,IAAA,IAAA,CAAK,YAAA,GAAe,IAAA,CAAK,YAAA,IAAgB,aAAA,CAAc,KAAK,OAAO,CAAA;AAEnE,IAAA,IAAA,CAAK,YAAA,GAAe,IAAI,iBAAA,CAAkB;AAAA,MACxC,cAAc,IAAA,CAAK,YAAA;AAAA,MACnB,UAAU,IAAA,CAAK,QAAA;AAAA,MACf,SAAS,IAAA,CAAK;AAAA,KACf,CAAA;AAED,IAAA,IAAA,CAAK,MAAA,GAAS,IAAI,WAAA,CAAY;AAAA,MAC5B,cAAc,IAAA,CAAK,YAAA;AAAA,MACnB,UAAU,IAAA,CAAK,QAAA;AAAA,MACf,SAAS,IAAA,CAAK;AAAA,KACf,CAAA;AAED,IAAA,MAAM,gBAAgB,IAAIC,iBAAAA,CAAS,eAAU,IAAA,CAAK,YAAA,EAAc,KAAK,QAAQ,CAAA;AAC7E,IAAA,IAAA,CAAK,SAAS,IAAI,YAAA,CAAa,eAAe,IAAA,CAAK,QAAA,EAAU,KAAK,OAAO,CAAA;AAEzE,IAAA,IAAA,CAAK,MAAM,IAAI,SAAA,CAAU,EAAE,OAAA,EAAS,IAAA,CAAK,YAAY,CAAA;AAAA,EACvD;AACF","file":"index.cjs","sourcesContent":["/** Supported StarkNet networks */\nexport type Network = 'sepolia' | 'mainnet'\n\n/** Token standard types supported by the Stela protocol */\nexport type AssetType = 'ERC20' | 'ERC721' | 'ERC1155' | 'ERC4626'\n\n/** Possible states of an inscription */\nexport type InscriptionStatus =\n | 'open'\n | 'partial'\n | 'filled'\n | 'repaid'\n | 'liquidated'\n | 'expired'\n | 'cancelled'\n\n/** All valid inscription statuses as an array */\nexport const VALID_STATUSES: readonly InscriptionStatus[] = [\n 'open',\n 'partial',\n 'filled',\n 'repaid',\n 'liquidated',\n 'expired',\n 'cancelled',\n] as const\n\n/** Human-readable labels for each inscription status */\nexport const STATUS_LABELS: Record<InscriptionStatus, string> = {\n open: 'Open',\n partial: 'Partial',\n filled: 'Filled',\n repaid: 'Repaid',\n liquidated: 'Liquidated',\n expired: 'Expired',\n cancelled: 'Cancelled',\n}\n\n/** A single StarkNet call (matches starknet.js Call type) */\nexport interface Call {\n contractAddress: string\n entrypoint: string\n calldata: string[]\n}\n","import type { Network } from '../types/common.js'\n\n/** Deployed Stela protocol contract addresses per network */\nexport const STELA_ADDRESS: Record<Network, string> = {\n sepolia: '0x0109c6caae0c5b4da6e063ed6c02ae784be05aa90806501a48dcfbb213bd7c03',\n mainnet: '0x0',\n} as const\n\nconst VALID_NETWORKS: Network[] = ['sepolia', 'mainnet']\n\n/** Validate and return a Network value, defaulting to 'sepolia' */\nexport function resolveNetwork(raw?: string): Network {\n const trimmed = raw?.trim()\n if (trimmed && VALID_NETWORKS.includes(trimmed as Network)) return trimmed as Network\n if (trimmed) console.warn(`Invalid NETWORK \"${trimmed}\", falling back to sepolia`)\n return 'sepolia'\n}\n\n/** SNIP-12 chain ID shortstrings per network */\nexport const CHAIN_ID: Record<Network, string> = {\n sepolia: 'SN_SEPOLIA',\n mainnet: 'SN_MAIN',\n} as const\n\n/** Block explorer base URLs per network (for transaction links) */\nexport const EXPLORER_TX_URL: Record<Network, string> = {\n sepolia: 'https://sepolia.voyager.online/tx',\n mainnet: 'https://voyager.online/tx',\n} as const\n","import type { AssetType } from '../types/common.js'\n\n/** Maximum basis points (100%) */\nexport const MAX_BPS = 10_000n\n\n/** Virtual share offset used in share calculations (1e16) */\nexport const VIRTUAL_SHARE_OFFSET = 10_000_000_000_000_000n\n\n/** Numeric enum values for asset types (matches Cairo contract) */\nexport const ASSET_TYPE_ENUM: Record<AssetType, number> = {\n ERC20: 0,\n ERC721: 1,\n ERC1155: 2,\n ERC4626: 3,\n}\n\n/** Reverse mapping: numeric enum value to AssetType name */\nexport const ASSET_TYPE_NAMES: Record<number, AssetType> = {\n 0: 'ERC20',\n 1: 'ERC721',\n 2: 'ERC1155',\n 3: 'ERC4626',\n}\n\n// ── T1 Auction Constants ────────────────────────────────────────────────\n\n/** Grace period after loan expiry before auction can start (24h in seconds) */\nexport const GRACE_PERIOD = 86400n\n\n/** Duration of the Dutch auction (24h in seconds) */\nexport const AUCTION_DURATION = 86400n\n\n/** Penalty added to debt at auction start (5% in BPS) */\nexport const AUCTION_PENALTY_BPS = 500n\n\n/** Minimum auction price as percentage of debt (10% floor in BPS) */\nexport const AUCTION_RESERVE_BPS = 1000n\n","import { uint256 } from 'starknet'\n\nconst U128_MAX = (1n << 128n) - 1n\nconst U256_MAX = (1n << 256n) - 1n\n\n/** Convert a bigint to a [low, high] calldata pair for StarkNet u256 */\nexport const toU256 = (n: bigint): [string, string] => {\n if (n < 0n || n > U256_MAX) throw new RangeError(`Value out of u256 range: ${n}`)\n const { low, high } = uint256.bnToUint256(n)\n return [low.toString(), high.toString()]\n}\n\n/** Convert a { low, high } u256 pair back to a bigint */\nexport const fromU256 = (u: { low: bigint; high: bigint }): bigint => {\n if (u.low < 0n || u.low > U128_MAX || u.high < 0n || u.high > U128_MAX) {\n throw new RangeError('Invalid u256 component: low and high must be u128')\n }\n return uint256.uint256ToBN(u)\n}\n\n/** Convert a u256 { low, high } to a 0x-prefixed 64-char hex string (for DB keys) */\nexport const inscriptionIdToHex = (u: { low: bigint; high: bigint }): string =>\n '0x' + fromU256(u).toString(16).padStart(64, '0')\n","import { addAddressPadding, validateAndParseAddress } from 'starknet'\n\n/** Convert any address-like value (string, bigint, number) to a hex string */\nexport function toHex(value: unknown): string {\n if (typeof value === 'string') return value\n if (typeof value === 'bigint') return '0x' + value.toString(16)\n if (typeof value === 'number') return '0x' + value.toString(16)\n return String(value)\n}\n\n/** Truncate an address for display: 0x1a2b...3c4d */\nexport function formatAddress(address: unknown): string {\n try {\n const hex = toHex(address)\n const padded = addAddressPadding(hex)\n return `${padded.slice(0, 6)}...${padded.slice(-4)}`\n } catch {\n return String(address).slice(0, 10) + '...'\n }\n}\n\n/** Normalize an address to a fully-padded, checksummed hex string */\nexport function normalizeAddress(address: unknown): string {\n const hex = toHex(address)\n return addAddressPadding(validateAndParseAddress(hex))\n}\n\n/** Compare two addresses for equality (handles different padding/casing) */\nexport function addressesEqual(a: unknown, b: unknown): boolean {\n try {\n return normalizeAddress(a) === normalizeAddress(b)\n } catch {\n return toHex(a).toLowerCase() === toHex(b).toLowerCase()\n }\n}\n","/** Convert human-readable amount (e.g. \"1.5\") to on-chain value using decimals */\nexport function parseAmount(humanAmount: string, decimals: number): bigint {\n if (!humanAmount || humanAmount === '.' || humanAmount === '') return 0n\n const parts = humanAmount.split('.')\n const whole = parts[0] ?? '0'\n const frac = (parts[1] ?? '').padEnd(decimals, '0').slice(0, decimals)\n return BigInt(whole + frac)\n}\n\n/** Format a raw token value (string) given its decimals */\nexport function formatTokenValue(raw: string | null, decimals: number): string {\n if (!raw || raw === '0') return '0'\n const n = BigInt(raw)\n if (decimals === 0) return n.toString()\n const divisor = 10n ** BigInt(decimals)\n const whole = n / divisor\n const frac = n % divisor\n if (frac === 0n) return whole.toString()\n const fracStr = frac.toString().padStart(decimals, '0').replace(/0+$/, '')\n return `${whole}.${fracStr}`\n}\n","/** Format duration in seconds to human-readable (e.g. \"7d 0h\", \"2h\", \"30m\") */\nexport function formatDuration(seconds: number | bigint): string {\n const s = Number(seconds)\n if (s < 3600) return `${Math.floor(s / 60)}m`\n const h = Math.floor(s / 3600)\n if (h >= 24) return `${Math.floor(h / 24)}d ${h % 24}h`\n return `${h}h`\n}\n\n/** Format a unix timestamp (seconds) to locale string */\nexport function formatTimestamp(ts: bigint): string {\n if (ts === 0n) return '--'\n return new Date(Number(ts) * 1000).toLocaleString()\n}\n","import type { InscriptionStatus } from '../types/common.js'\nimport { MAX_BPS } from '../constants/protocol.js'\n\n/** Input shape for computeStatus — accepts both bigint and number fields */\nexport interface StatusInput {\n signed_at: number | bigint\n duration: number | bigint\n issued_debt_percentage: number | bigint\n is_repaid: boolean\n liquidated: boolean\n deadline?: number | bigint\n status?: string\n}\n\n/** Compute the inscription status from on-chain fields */\nexport function computeStatus(a: StatusInput, nowSeconds?: number): InscriptionStatus {\n if (a.is_repaid) return 'repaid'\n if (a.liquidated) return 'liquidated'\n if (a.status === 'cancelled') return 'cancelled'\n\n const now = nowSeconds ?? Math.floor(Date.now() / 1000)\n const signedAt = Number(a.signed_at)\n const duration = Number(a.duration)\n const deadline = a.deadline !== undefined ? Number(a.deadline) : 0\n const issuedPct = BigInt(a.issued_debt_percentage)\n\n // Unsigned inscription\n if (signedAt === 0) {\n // If there's a deadline and it has passed, the inscription expired\n if (deadline > 0 && now > deadline) return 'expired'\n return 'open'\n }\n\n // Partially filled\n if (issuedPct < MAX_BPS) return 'partial'\n\n // Fully filled — check if loan duration has elapsed\n if (now > signedAt + duration) return 'expired'\n\n return 'filled'\n}\n","import type { TokenInfo } from './types.js'\n\n/**\n * Curated StarkNet token list.\n * Addresses sourced from official deployments.\n */\nexport const TOKENS: TokenInfo[] = [\n {\n symbol: 'ETH',\n name: 'Ether',\n decimals: 18,\n logoUrl:\n 'https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/info/logo.png',\n addresses: {\n sepolia: '0x049d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7',\n mainnet: '0x049d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7',\n },\n },\n {\n symbol: 'STRK',\n name: 'Starknet Token',\n decimals: 18,\n logoUrl: 'https://assets.coingecko.com/coins/images/26433/standard/starknet.png',\n addresses: {\n sepolia: '0x04718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d',\n mainnet: '0x04718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d',\n },\n },\n {\n symbol: 'USDC',\n name: 'USD Coin',\n decimals: 6,\n logoUrl:\n 'https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48/logo.png',\n addresses: {\n sepolia: '0x053b40a647cedfca6ca84f542a0fe36736031905a9639a7f19a3c1e66bfd5080',\n mainnet: '0x053c91253bc9682c04929ca02ed00b3e423f6710d2ee7e0d5ebb06f3ecf368a8',\n },\n },\n {\n symbol: 'USDT',\n name: 'Tether USD',\n decimals: 6,\n logoUrl:\n 'https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xdAC17F958D2ee523a2206206994597C13D831ec7/logo.png',\n addresses: {\n sepolia: '0x07394cbe418daa16e42b87ba67372d4ab4a5df0b05c6e554d158577e75e7777c',\n mainnet: '0x068f5c6a61780768455de69077e07e89787839bf8166decfbf92b645209c0fb8',\n },\n },\n {\n symbol: 'WBTC',\n name: 'Wrapped Bitcoin',\n decimals: 8,\n logoUrl:\n 'https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599/logo.png',\n addresses: {\n sepolia: '0x012d537dc323c439dc65c976fad242d5610d27cfb5f31689a0a319b8be7f3d56',\n mainnet: '0x03fe2b97c1fd336e750087d68b9b867997fd64a2661ff3ca5a7c771641e8e7ac',\n },\n },\n {\n symbol: 'DAI',\n name: 'Dai Stablecoin',\n decimals: 18,\n logoUrl:\n 'https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x6B175474E89094C44Da98b954EedeAC495271d0F/logo.png',\n addresses: {\n mainnet: '0x00da114221cb83fa859dbdb4c44beeaa0bb37c7537ad5ae66fe5e0efd20e6eb3',\n },\n },\n {\n symbol: 'wstETH',\n name: 'Wrapped stETH',\n decimals: 18,\n logoUrl: 'https://assets.coingecko.com/coins/images/18834/standard/wstETH.png',\n addresses: {\n sepolia: '0x0735d0f09a4e8bf8a17005fa35061b5957dcaa56889fc75df9ff7c0d36a4c5e0',\n mainnet: '0x042b8f0484674ca266ac5d08e4ac6a3fe65bd3129795def2dca5c34ecc5f96d2',\n },\n },\n // Mock tokens (Stela Sepolia testnet)\n {\n symbol: 'mUSDC',\n name: 'Mock USDC',\n decimals: 6,\n addresses: {\n sepolia: '0x034a0cf09c79e7f20fb2136212f27b7dd88e91f9a24b2ac50c5c41ff6b30c59d',\n },\n },\n {\n symbol: 'mWETH',\n name: 'Mock WETH',\n decimals: 18,\n addresses: {\n sepolia: '0x07e86764396d61d2179cd1a48033fa4f30897cb172464961a80649aff4da9bdd',\n },\n },\n {\n symbol: 'mDAI',\n name: 'Mock DAI',\n decimals: 18,\n addresses: {\n sepolia: '0x0479f31a23241b1337375b083099bd1672716edbf908b1b30148a648657a1cee',\n },\n },\n {\n symbol: 'StelaNFT',\n name: 'Stela NFT',\n decimals: 0,\n addresses: {\n sepolia: '0x04f2345306bf8ef1c8c1445661354ef08421aa092459445a5d6b46641237e943',\n },\n },\n // NFT Collections (ERC721)\n {\n symbol: 'GENESIS',\n name: 'Stela Genesis',\n decimals: 0,\n assetType: 'ERC721',\n addresses: {\n sepolia: '0x0265ea52ffbf1b7e1a029b94fe1a2023899dd0bc02eb1f11c9b04ea90e957d28',\n },\n },\n {\n symbol: 'MockNFT',\n name: 'Mock ERC721',\n decimals: 0,\n assetType: 'ERC721',\n addresses: {\n sepolia: '0x032bfd52134ad92beae1bc5018a3748e1d1240efd627220e314c07e4c63433d5',\n },\n },\n]\n\n/** Strip leading zeros after 0x for consistent comparison */\nfunction normalizeHex(addr: string): string {\n return '0x' + addr.replace(/^0x0*/i, '').toLowerCase()\n}\n\n/** Get NFT collections (ERC721) available on a specific network */\nexport function getNFTCollections(network: string): TokenInfo[] {\n return TOKENS.filter(\n (t) => t.assetType === 'ERC721' && t.addresses[network as keyof typeof t.addresses] !== undefined,\n )\n}\n\n/** Get tokens available on a specific network */\nexport function getTokensForNetwork(network: string): TokenInfo[] {\n return TOKENS.filter((t) => t.addresses[network as keyof typeof t.addresses] !== undefined)\n}\n\n/** Find a token by its address (any network) */\nexport function findTokenByAddress(address: string): TokenInfo | undefined {\n const normalized = normalizeHex(address)\n return TOKENS.find((t) =>\n Object.values(t.addresses).some((a) => a !== undefined && normalizeHex(a) === normalized),\n )\n}\n","import { MAX_BPS, VIRTUAL_SHARE_OFFSET } from '../constants/protocol.js'\n\n/** Convert a fill percentage to shares, matching the contract's share math */\nexport function convertToShares(\n percentage: bigint,\n totalSupply: bigint,\n currentIssuedPercentage: bigint,\n): bigint {\n const denominator = currentIssuedPercentage === 0n ? 1n : currentIssuedPercentage\n return (percentage * (totalSupply + VIRTUAL_SHARE_OFFSET)) / denominator\n}\n\n/** Scale a value by a percentage in basis points */\nexport function scaleByPercentage(value: bigint, percentage: bigint): bigint {\n return (value * percentage) / MAX_BPS\n}\n\n/** Convert shares back to a percentage of the inscription */\nexport function sharesToPercentage(\n shares: bigint,\n totalSupply: bigint,\n currentIssuedPercentage: bigint,\n): bigint {\n const effectivePct = currentIssuedPercentage === 0n ? 1n : currentIssuedPercentage\n return (shares * effectivePct) / (totalSupply + VIRTUAL_SHARE_OFFSET)\n}\n\n/** Calculate the fee portion of shares given a fee in basis points */\nexport function calculateFeeShares(shares: bigint, feeBps: bigint): bigint {\n return (shares * feeBps) / MAX_BPS\n}\n\n/** Ceiling integer division: ceil(a / b). Matches Cairo div_ceil. */\nexport function divCeil(a: bigint, b: bigint): bigint {\n if (a === 0n) return 0n\n return (a + b - 1n) / b\n}\n\n/**\n * Pro-rata interest for early repayment. Matches Cairo pro_rata_interest().\n * Rounds UP (ceiling) to protect lenders — borrower never underpays.\n *\n * @param amount - Full interest amount\n * @param elapsed - Seconds elapsed since loan signed\n * @param duration - Total loan duration in seconds\n * @returns ceil(amount * elapsed / duration), capped at amount\n */\nexport function proRataInterest(amount: bigint, elapsed: bigint, duration: bigint): bigint {\n if (amount === 0n || elapsed === 0n) return 0n\n if (elapsed >= duration) return amount\n return divCeil(amount * elapsed, duration)\n}\n","import { MAX_BPS } from '../constants/protocol.js'\nimport { proRataInterest, divCeil } from './shares.js'\nimport type { Asset } from '../types/inscription.js'\n\n/** Default dust buffer: 60 seconds of extra interest accrual to account for tx confirmation delay */\nexport const DEFAULT_DUST_BUFFER_SECONDS = 60n\n\n/** Value breakdown for a single asset in a position */\nexport interface AssetValue {\n /** The asset definition */\n asset: Asset\n /** The share-proportional amount of this asset */\n proportionalValue: bigint\n}\n\n/** Accrued interest for a single asset in a position */\nexport interface AccruedInterestEntry {\n /** The interest asset definition */\n asset: Asset\n /** Full interest amount (before pro-rata) scaled to share proportion */\n fullInterest: bigint\n /** Pro-rata accrued interest at the given elapsed time */\n accruedInterest: bigint\n}\n\n/** Complete position valuation at a point in time */\nexport interface PositionValue {\n /** Inscription ID */\n inscriptionId: string\n /** Shares held */\n shares: bigint\n /** Total supply of shares for this inscription */\n totalSupply: bigint\n /** Share proportion as a fraction of MAX_BPS (10000) */\n shareBps: bigint\n /** Debt asset values (proportional to shares held) */\n debt: AssetValue[]\n /** Interest asset values (full and accrued) */\n interest: AccruedInterestEntry[]\n /** Collateral asset values (proportional to shares held) */\n collateral: AssetValue[]\n /** Suggested floor price: sum of proportional debt + accrued interest (per asset) */\n accrued: AccruedInterestEntry[]\n /** Elapsed seconds since loan signed */\n elapsed: bigint\n /** Total loan duration */\n duration: bigint\n}\n\n/**\n * Compute the share proportion in BPS for a given share amount.\n * Returns how many basis points (out of 10000) the shares represent.\n */\nexport function shareProportionBps(shares: bigint, totalSupply: bigint): bigint {\n if (totalSupply === 0n) return 0n\n return (shares * MAX_BPS) / totalSupply\n}\n\n/**\n * Compute the proportional value of an asset for a given share amount.\n * This is the amount the share holder would receive on redemption.\n *\n * Matches the contract: `tracked_balance * shares / total_supply`\n */\nexport function proportionalAssetValue(\n assetValue: bigint,\n shares: bigint,\n totalSupply: bigint,\n): bigint {\n if (totalSupply === 0n || shares === 0n) return 0n\n return (assetValue * shares) / totalSupply\n}\n\n/**\n * Compute the full position valuation at a point in time.\n *\n * @param params.inscriptionId - The inscription ID\n * @param params.shares - Shares held by the position owner\n * @param params.totalSupply - Total shares for this inscription\n * @param params.debtAssets - Debt asset definitions with values\n * @param params.interestAssets - Interest asset definitions with values\n * @param params.collateralAssets - Collateral asset definitions with values\n * @param params.elapsed - Seconds elapsed since signed_at\n * @param params.duration - Total loan duration in seconds\n */\nexport function computePositionValue(params: {\n inscriptionId: string\n shares: bigint\n totalSupply: bigint\n debtAssets: Asset[]\n interestAssets: Asset[]\n collateralAssets: Asset[]\n elapsed: bigint\n duration: bigint\n}): PositionValue {\n const { shares, totalSupply, elapsed, duration } = params\n\n const shareBps = shareProportionBps(shares, totalSupply)\n\n const debt: AssetValue[] = params.debtAssets.map((asset) => ({\n asset,\n proportionalValue: proportionalAssetValue(asset.value, shares, totalSupply),\n }))\n\n const interest: AccruedInterestEntry[] = params.interestAssets.map((asset) => {\n const fullInterest = proportionalAssetValue(asset.value, shares, totalSupply)\n const accruedInterest =\n duration === 0n ? fullInterest : proRataInterest(fullInterest, elapsed, duration)\n return { asset, fullInterest, accruedInterest }\n })\n\n const collateral: AssetValue[] = params.collateralAssets.map((asset) => ({\n asset,\n proportionalValue: proportionalAssetValue(asset.value, shares, totalSupply),\n }))\n\n return {\n inscriptionId: params.inscriptionId,\n shares,\n totalSupply,\n shareBps,\n debt,\n interest,\n collateral,\n accrued: interest,\n elapsed,\n duration,\n }\n}\n\n/**\n * Compute accrued interest with a dust buffer to account for transaction confirmation delay.\n *\n * Between computing the price and the transaction landing on-chain, interest continues\n * to accrue. This adds a configurable buffer (default 60s) of extra interest so the\n * buyer's approval doesn't fail due to a tiny increase.\n *\n * @param amount - Full interest amount for the position\n * @param elapsed - Current elapsed seconds since signed_at\n * @param duration - Total loan duration in seconds\n * @param bufferSeconds - Extra seconds to add (default: 60)\n * @returns Accrued interest at (elapsed + buffer), capped at full amount\n */\nexport function accruedInterestWithBuffer(\n amount: bigint,\n elapsed: bigint,\n duration: bigint,\n bufferSeconds: bigint = DEFAULT_DUST_BUFFER_SECONDS,\n): bigint {\n if (duration === 0n) return amount\n const bufferedElapsed = elapsed + bufferSeconds\n return proRataInterest(amount, bufferedElapsed, duration)\n}\n\n/**\n * Compute a safe minimum price for buying a lending position.\n * Includes proportional debt + accrued interest + dust buffer for each interest asset.\n *\n * Use this when the buyer needs to know how much to approve for payment tokens.\n *\n * @returns Array of { asset, safeAmount } for debt assets and interest assets respectively\n */\nexport function computeSafePositionFloor(params: {\n shares: bigint\n totalSupply: bigint\n debtAssets: Asset[]\n interestAssets: Asset[]\n elapsed: bigint\n duration: bigint\n bufferSeconds?: bigint\n}): { debtFloor: AssetValue[]; interestFloor: AssetValue[] } {\n const { shares, totalSupply, elapsed, duration } = params\n const buffer = params.bufferSeconds ?? DEFAULT_DUST_BUFFER_SECONDS\n\n const debtFloor: AssetValue[] = params.debtAssets.map((asset) => ({\n asset,\n proportionalValue: proportionalAssetValue(asset.value, shares, totalSupply),\n }))\n\n const interestFloor: AssetValue[] = params.interestAssets.map((asset) => {\n const fullInterest = proportionalAssetValue(asset.value, shares, totalSupply)\n const safeAccrued = accruedInterestWithBuffer(fullInterest, elapsed, duration, buffer)\n return { asset, proportionalValue: safeAccrued }\n })\n\n return { debtFloor, interestFloor }\n}\n","import { hash } from 'starknet'\n\n/** Event selectors for all Stela protocol events */\nexport const SELECTORS = {\n InscriptionCreated: hash.getSelectorFromName('InscriptionCreated'),\n InscriptionSigned: hash.getSelectorFromName('InscriptionSigned'),\n InscriptionCancelled: hash.getSelectorFromName('InscriptionCancelled'),\n InscriptionRepaid: hash.getSelectorFromName('InscriptionRepaid'),\n InscriptionLiquidated: hash.getSelectorFromName('InscriptionLiquidated'),\n SharesRedeemed: hash.getSelectorFromName('SharesRedeemed'),\n TransferSingle: hash.getSelectorFromName('TransferSingle'),\n OrderSettled: hash.getSelectorFromName('OrderSettled'),\n OrderFilled: hash.getSelectorFromName('OrderFilled'),\n OrderCancelled: hash.getSelectorFromName('OrderCancelled'),\n OrdersBulkCancelled: hash.getSelectorFromName('OrdersBulkCancelled'),\n} as const\n","import { uint256 } from 'starknet'\nimport type { RawEvent, StelaEvent } from '../types/events.js'\nimport { SELECTORS } from './selectors.js'\n\n/** Convert two felt strings (low, high) into a bigint */\nfunction feltsToU256(low: string, high: string): bigint {\n return uint256.uint256ToBN({ low: BigInt(low), high: BigInt(high) })\n}\n\n/** Parse a single raw event into a typed StelaEvent. Returns null if unrecognized. */\nexport function parseEvent(raw: RawEvent): StelaEvent | null {\n const selector = raw.keys[0]\n\n switch (selector) {\n case SELECTORS.InscriptionCreated: {\n // keys: [selector, id_low, id_high, creator]\n // data: [is_borrow]\n return {\n type: 'InscriptionCreated',\n inscription_id: feltsToU256(raw.keys[1], raw.keys[2]),\n creator: raw.keys[3],\n is_borrow: BigInt(raw.data[0]) !== 0n,\n transaction_hash: raw.transaction_hash,\n block_number: raw.block_number,\n }\n }\n\n case SELECTORS.InscriptionSigned: {\n // keys: [selector, id_low, id_high, borrower, lender]\n // data: [pct_low, pct_high, shares_low, shares_high]\n return {\n type: 'InscriptionSigned',\n inscription_id: feltsToU256(raw.keys[1], raw.keys[2]),\n borrower: raw.keys[3],\n lender: raw.keys[4],\n issued_debt_percentage: feltsToU256(raw.data[0], raw.data[1]),\n shares_minted: feltsToU256(raw.data[2], raw.data[3]),\n transaction_hash: raw.transaction_hash,\n block_number: raw.block_number,\n }\n }\n\n case SELECTORS.InscriptionCancelled: {\n // keys: [selector, id_low, id_high]\n // data: [creator]\n return {\n type: 'InscriptionCancelled',\n inscription_id: feltsToU256(raw.keys[1], raw.keys[2]),\n creator: raw.data[0],\n transaction_hash: raw.transaction_hash,\n block_number: raw.block_number,\n }\n }\n\n case SELECTORS.InscriptionRepaid: {\n // keys: [selector, id_low, id_high]\n // data: [repayer]\n return {\n type: 'InscriptionRepaid',\n inscription_id: feltsToU256(raw.keys[1], raw.keys[2]),\n repayer: raw.data[0],\n transaction_hash: raw.transaction_hash,\n block_number: raw.block_number,\n }\n }\n\n case SELECTORS.InscriptionLiquidated: {\n // keys: [selector, id_low, id_high]\n // data: [liquidator]\n return {\n type: 'InscriptionLiquidated',\n inscription_id: feltsToU256(raw.keys[1], raw.keys[2]),\n liquidator: raw.data[0],\n transaction_hash: raw.transaction_hash,\n block_number: raw.block_number,\n }\n }\n\n case SELECTORS.SharesRedeemed: {\n // keys: [selector, id_low, id_high, redeemer]\n // data: [shares_low, shares_high]\n return {\n type: 'SharesRedeemed',\n inscription_id: feltsToU256(raw.keys[1], raw.keys[2]),\n redeemer: raw.keys[3],\n shares: feltsToU256(raw.data[0], raw.data[1]),\n transaction_hash: raw.transaction_hash,\n block_number: raw.block_number,\n }\n }\n\n case SELECTORS.TransferSingle: {\n // keys: [selector, operator, from, to]\n // data: [id_low, id_high, value_low, value_high]\n return {\n type: 'TransferSingle',\n operator: raw.keys[1],\n from: raw.keys[2],\n to: raw.keys[3],\n id: feltsToU256(raw.data[0], raw.data[1]),\n value: feltsToU256(raw.data[2], raw.data[3]),\n transaction_hash: raw.transaction_hash,\n block_number: raw.block_number,\n }\n }\n\n case SELECTORS.OrderSettled: {\n // keys: [selector, id_low, id_high, borrower, lender]\n // data: [relayer, fee_low, fee_high]\n return {\n type: 'OrderSettled',\n inscription_id: feltsToU256(raw.keys[1], raw.keys[2]),\n borrower: raw.keys[3],\n lender: raw.keys[4],\n relayer: raw.data[0],\n relayer_fee_amount: feltsToU256(raw.data[1], raw.data[2]),\n transaction_hash: raw.transaction_hash,\n block_number: raw.block_number,\n }\n }\n\n case SELECTORS.OrderFilled: {\n // keys: [selector, id_low, id_high, order_hash, taker]\n // data: [fill_bps_low, fill_bps_high, total_filled_bps_low, total_filled_bps_high]\n return {\n type: 'OrderFilled',\n inscription_id: feltsToU256(raw.keys[1], raw.keys[2]),\n order_hash: raw.keys[3],\n taker: raw.keys[4],\n fill_bps: feltsToU256(raw.data[0], raw.data[1]),\n total_filled_bps: feltsToU256(raw.data[2], raw.data[3]),\n transaction_hash: raw.transaction_hash,\n block_number: raw.block_number,\n }\n }\n\n case SELECTORS.OrderCancelled: {\n // keys: [selector, order_hash]\n // data: [maker]\n return {\n type: 'OrderCancelled',\n order_hash: raw.keys[1],\n maker: raw.data[0],\n transaction_hash: raw.transaction_hash,\n block_number: raw.block_number,\n }\n }\n\n case SELECTORS.OrdersBulkCancelled: {\n // keys: [selector, maker]\n // data: [new_min_nonce]\n return {\n type: 'OrdersBulkCancelled',\n maker: raw.keys[1],\n new_min_nonce: raw.data[0],\n transaction_hash: raw.transaction_hash,\n block_number: raw.block_number,\n }\n }\n\n default:\n return null\n }\n}\n\n/** Parse an array of raw events, skipping unrecognized ones. */\nexport function parseEvents(rawEvents: RawEvent[]): StelaEvent[] {\n const results: StelaEvent[] = []\n for (const raw of rawEvents) {\n const parsed = parseEvent(raw)\n if (parsed) results.push(parsed)\n }\n return results\n}\n","import { hash } from 'starknet'\nimport type { Asset } from '../types/inscription.js'\nimport { ASSET_TYPE_ENUM } from '../constants/protocol.js'\nimport { toU256 } from '../utils/u256.js'\n\n/** Matches Cairo's U256_TYPE_HASH = selector!(\"\\\"u256\\\"(\\\"low\\\":\\\"u128\\\",\\\"high\\\":\\\"u128\\\")\") */\nconst U256_TYPE_HASH = '0x3b143be38b811560b45593fb2a071ec4ddd0a020e10782be62ffe6f39e0e82c'\n\nexport interface BatchEntry {\n orderHash: string // felt252 hex\n bps: bigint // u256\n}\n\n/**\n * Hash an array of BatchEntry using Poseidon -- matches Cairo's hash_batch_entries().\n *\n * Format: Poseidon(count, order_hash_1, u256_hash(bps_1), order_hash_2, u256_hash(bps_2), ...)\n * where u256_hash(bps) = Poseidon(U256_TYPE_HASH, low, high)\n */\nexport function hashBatchEntries(entries: BatchEntry[]): string {\n const elements: string[] = [String(entries.length)]\n for (const entry of entries) {\n elements.push(entry.orderHash)\n const [low, high] = toU256(entry.bps)\n const bpsHash = hash.computePoseidonHashOnElements([U256_TYPE_HASH, low, high])\n elements.push(bpsHash)\n }\n return hash.computePoseidonHashOnElements(elements)\n}\n\n/**\n * Hash an array of assets using Poseidon -- matches Cairo's hash_assets().\n *\n * The Cairo code hashes: len, then for each asset:\n * asset.asset (ContractAddress -> 1 felt)\n * asset.asset_type (enum -> 1 felt)\n * asset.value (u256 -> low felt, high felt)\n * asset.token_id (u256 -> low felt, high felt)\n *\n * Uses `hash.computePoseidonHashOnElements` from starknet.js which takes an\n * array and computes Poseidon over all elements.\n */\nexport function hashAssets(assets: Asset[]): string {\n const elements: string[] = [String(assets.length)]\n for (const asset of assets) {\n elements.push(asset.asset_address)\n elements.push(String(ASSET_TYPE_ENUM[asset.asset_type]))\n const [vLow, vHigh] = toU256(asset.value)\n elements.push(vLow, vHigh)\n const [tidLow, tidHigh] = toU256(asset.token_id)\n elements.push(tidLow, tidHigh)\n }\n return hash.computePoseidonHashOnElements(elements)\n}\n","import type { TypedData } from 'starknet'\nimport type { Asset } from '../types/inscription.js'\nimport { hashAssets } from './hash.js'\n\n/** Domain separator -- MUST match the Cairo contract's SNIP12Metadata */\nconst STELA_DOMAIN = {\n name: 'Stela',\n version: 'v1',\n chainId: '', // filled at call time\n revision: '1',\n}\n\n/**\n * Build SNIP-12 TypedData for a borrower's InscriptionOrder.\n * The borrower signs this off-chain to create an order without gas.\n */\nexport function getInscriptionOrderTypedData(params: {\n borrower: string\n debtAssets: Asset[]\n interestAssets: Asset[]\n collateralAssets: Asset[]\n debtCount: number\n interestCount: number\n collateralCount: number\n duration: bigint\n deadline: bigint\n multiLender: boolean\n nonce: bigint\n chainId: string\n}): TypedData {\n return {\n types: {\n StarknetDomain: [\n { name: 'name', type: 'shortstring' },\n { name: 'version', type: 'shortstring' },\n { name: 'chainId', type: 'shortstring' },\n { name: 'revision', type: 'shortstring' },\n ],\n InscriptionOrder: [\n { name: 'borrower', type: 'ContractAddress' },\n { name: 'debt_hash', type: 'felt' },\n { name: 'interest_hash', type: 'felt' },\n { name: 'collateral_hash', type: 'felt' },\n { name: 'debt_count', type: 'u128' },\n { name: 'interest_count', type: 'u128' },\n { name: 'collateral_count', type: 'u128' },\n { name: 'duration', type: 'u128' },\n { name: 'deadline', type: 'u128' },\n { name: 'multi_lender', type: 'bool' },\n { name: 'nonce', type: 'felt' },\n ],\n },\n primaryType: 'InscriptionOrder',\n domain: {\n ...STELA_DOMAIN,\n chainId: params.chainId,\n },\n message: {\n borrower: params.borrower,\n debt_hash: hashAssets(params.debtAssets),\n interest_hash: hashAssets(params.interestAssets),\n collateral_hash: hashAssets(params.collateralAssets),\n debt_count: params.debtCount.toString(),\n interest_count: params.interestCount.toString(),\n collateral_count: params.collateralCount.toString(),\n duration: params.duration.toString(),\n deadline: params.deadline.toString(),\n multi_lender: params.multiLender,\n nonce: params.nonce.toString(),\n },\n }\n}\n\n/**\n * Build SNIP-12 TypedData for a lender's LendOffer.\n * The lender signs this off-chain to accept an order without gas.\n */\nexport function getLendOfferTypedData(params: {\n orderHash: string\n lender: string\n issuedDebtPercentage: bigint\n nonce: bigint\n chainId: string\n}): TypedData {\n return {\n types: {\n StarknetDomain: [\n { name: 'name', type: 'shortstring' },\n { name: 'version', type: 'shortstring' },\n { name: 'chainId', type: 'shortstring' },\n { name: 'revision', type: 'shortstring' },\n ],\n LendOffer: [\n { name: 'order_hash', type: 'felt' },\n { name: 'lender', type: 'ContractAddress' },\n { name: 'issued_debt_percentage', type: 'u256' },\n { name: 'nonce', type: 'felt' },\n ],\n u256: [\n { name: 'low', type: 'u128' },\n { name: 'high', type: 'u128' },\n ],\n },\n primaryType: 'LendOffer',\n domain: {\n ...STELA_DOMAIN,\n chainId: params.chainId,\n },\n message: {\n order_hash: params.orderHash,\n lender: params.lender,\n issued_debt_percentage: {\n low: (params.issuedDebtPercentage & ((1n << 128n) - 1n)).toString(),\n high: (params.issuedDebtPercentage >> 128n).toString(),\n },\n nonce: params.nonce.toString(),\n },\n }\n}\n\n/**\n * Build SNIP-12 TypedData for a lender's BatchLendOffer.\n * The lender signs this off-chain to accept multiple orders atomically.\n */\nexport function getBatchLendOfferTypedData(params: {\n batchHash: string\n count: number\n lender: string\n startNonce: bigint\n chainId: string\n}): TypedData {\n return {\n types: {\n StarknetDomain: [\n { name: 'name', type: 'shortstring' },\n { name: 'version', type: 'shortstring' },\n { name: 'chainId', type: 'shortstring' },\n { name: 'revision', type: 'shortstring' },\n ],\n BatchLendOffer: [\n { name: 'batch_hash', type: 'felt' },\n { name: 'count', type: 'u128' },\n { name: 'lender', type: 'ContractAddress' },\n { name: 'start_nonce', type: 'felt' },\n ],\n },\n primaryType: 'BatchLendOffer',\n domain: {\n ...STELA_DOMAIN,\n chainId: params.chainId,\n },\n message: {\n batch_hash: params.batchHash,\n count: params.count.toString(),\n lender: params.lender,\n start_nonce: params.startNonce.toString(),\n },\n }\n}\n\n// ── T1 Typed Data Builders ─────────────────────────────────────────────\n\n/** Helper to encode a u256 as the nested {low, high} struct SNIP-12 expects */\nfunction u256Message(value: bigint): { low: string; high: string } {\n return {\n low: (value & ((1n << 128n) - 1n)).toString(),\n high: (value >> 128n).toString(),\n }\n}\n\n/** SNIP-12 StarknetDomain type definition (shared across all typed data) */\nconst STARKNET_DOMAIN_TYPE = [\n { name: 'name', type: 'shortstring' },\n { name: 'version', type: 'shortstring' },\n { name: 'chainId', type: 'shortstring' },\n { name: 'revision', type: 'shortstring' },\n]\n\n/** u256 sub-type definition for SNIP-12 */\nconst U256_TYPE = [\n { name: 'low', type: 'u128' },\n { name: 'high', type: 'u128' },\n]\n\n/**\n * Build SNIP-12 TypedData for a collection-wide lend offer (T1-2).\n * The lender offers to lend against any NFT from a given collection.\n */\nexport function getCollectionLendOfferTypedData(params: {\n lender: string\n debtAssets: Asset[]\n interestAssets: Asset[]\n debtCount: number\n interestCount: number\n collectionAddress: string\n duration: bigint\n deadline: bigint\n nonce: bigint\n chainId: string\n}): TypedData {\n return {\n types: {\n StarknetDomain: STARKNET_DOMAIN_TYPE,\n CollectionLendOffer: [\n { name: 'lender', type: 'ContractAddress' },\n { name: 'debt_hash', type: 'felt' },\n { name: 'interest_hash', type: 'felt' },\n { name: 'debt_count', type: 'u128' },\n { name: 'interest_count', type: 'u128' },\n { name: 'collection_address', type: 'ContractAddress' },\n { name: 'duration', type: 'u128' },\n { name: 'deadline', type: 'u128' },\n { name: 'nonce', type: 'felt' },\n ],\n },\n primaryType: 'CollectionLendOffer',\n domain: { ...STELA_DOMAIN, chainId: params.chainId },\n message: {\n lender: params.lender,\n debt_hash: hashAssets(params.debtAssets),\n interest_hash: hashAssets(params.interestAssets),\n debt_count: params.debtCount.toString(),\n interest_count: params.interestCount.toString(),\n collection_address: params.collectionAddress,\n duration: params.duration.toString(),\n deadline: params.deadline.toString(),\n nonce: params.nonce.toString(),\n },\n }\n}\n\n/**\n * Build SNIP-12 TypedData for a borrower's collection borrow acceptance (T1-2).\n * The borrower specifies which token_id from the collection to use as collateral.\n */\nexport function getCollectionBorrowAcceptanceTypedData(params: {\n offerHash: string\n borrower: string\n tokenId: bigint\n nonce: bigint\n chainId: string\n}): TypedData {\n return {\n types: {\n StarknetDomain: STARKNET_DOMAIN_TYPE,\n CollectionBorrowAcceptance: [\n { name: 'offer_hash', type: 'felt' },\n { name: 'borrower', type: 'ContractAddress' },\n { name: 'token_id', type: 'u256' },\n { name: 'nonce', type: 'felt' },\n ],\n u256: U256_TYPE,\n },\n primaryType: 'CollectionBorrowAcceptance',\n domain: { ...STELA_DOMAIN, chainId: params.chainId },\n message: {\n offer_hash: params.offerHash,\n borrower: params.borrower,\n token_id: u256Message(params.tokenId),\n nonce: params.nonce.toString(),\n },\n }\n}\n\n/**\n * Build SNIP-12 TypedData for a renegotiation proposal (T1-4).\n * Either borrower or lender proposes new terms for an existing loan.\n */\nexport function getRenegotiationProposalTypedData(params: {\n inscriptionId: bigint\n proposer: string\n newDuration: bigint\n newInterestAssets: Asset[]\n newInterestCount: number\n proposalDeadline: bigint\n nonce: bigint\n chainId: string\n}): TypedData {\n return {\n types: {\n StarknetDomain: STARKNET_DOMAIN_TYPE,\n RenegotiationProposal: [\n { name: 'inscription_id', type: 'u256' },\n { name: 'proposer', type: 'ContractAddress' },\n { name: 'new_duration', type: 'u128' },\n { name: 'new_interest_hash', type: 'felt' },\n { name: 'new_interest_count', type: 'u128' },\n { name: 'proposal_deadline', type: 'u128' },\n { name: 'nonce', type: 'felt' },\n ],\n u256: U256_TYPE,\n },\n primaryType: 'RenegotiationProposal',\n domain: { ...STELA_DOMAIN, chainId: params.chainId },\n message: {\n inscription_id: u256Message(params.inscriptionId),\n proposer: params.proposer,\n new_duration: params.newDuration.toString(),\n new_interest_hash: hashAssets(params.newInterestAssets),\n new_interest_count: params.newInterestCount.toString(),\n proposal_deadline: params.proposalDeadline.toString(),\n nonce: params.nonce.toString(),\n },\n }\n}\n\n/**\n * Build SNIP-12 TypedData for a collateral sale offer (T1-5).\n * The borrower offers to sell locked collateral to repay the loan.\n */\nexport function getCollateralSaleOfferTypedData(params: {\n inscriptionId: bigint\n borrower: string\n minPrice: bigint\n paymentToken: string\n allowedBuyer: string\n deadline: bigint\n nonce: bigint\n chainId: string\n}): TypedData {\n return {\n types: {\n StarknetDomain: STARKNET_DOMAIN_TYPE,\n CollateralSaleOffer: [\n { name: 'inscription_id', type: 'u256' },\n { name: 'borrower', type: 'ContractAddress' },\n { name: 'min_price', type: 'u256' },\n { name: 'payment_token', type: 'ContractAddress' },\n { name: 'allowed_buyer', type: 'ContractAddress' },\n { name: 'deadline', type: 'u128' },\n { name: 'nonce', type: 'felt' },\n ],\n u256: U256_TYPE,\n },\n primaryType: 'CollateralSaleOffer',\n domain: { ...STELA_DOMAIN, chainId: params.chainId },\n message: {\n inscription_id: u256Message(params.inscriptionId),\n borrower: params.borrower,\n min_price: u256Message(params.minPrice),\n payment_token: params.paymentToken,\n allowed_buyer: params.allowedBuyer,\n deadline: params.deadline.toString(),\n nonce: params.nonce.toString(),\n },\n }\n}\n\n/**\n * Build SNIP-12 TypedData for a refinance offer (T1-1).\n * A new lender offers to take over an existing loan with new terms.\n */\nexport function getRefinanceOfferTypedData(params: {\n inscriptionId: bigint\n newLender: string\n newDebtAssets: Asset[]\n newInterestAssets: Asset[]\n newDebtCount: number\n newInterestCount: number\n newDuration: bigint\n deadline: bigint\n nonce: bigint\n chainId: string\n}): TypedData {\n return {\n types: {\n StarknetDomain: STARKNET_DOMAIN_TYPE,\n RefinanceOffer: [\n { name: 'inscription_id', type: 'u256' },\n { name: 'new_lender', type: 'ContractAddress' },\n { name: 'new_debt_hash', type: 'felt' },\n { name: 'new_interest_hash', type: 'felt' },\n { name: 'new_debt_count', type: 'u128' },\n { name: 'new_interest_count', type: 'u128' },\n { name: 'new_duration', type: 'u128' },\n { name: 'deadline', type: 'u128' },\n { name: 'nonce', type: 'felt' },\n ],\n u256: U256_TYPE,\n },\n primaryType: 'RefinanceOffer',\n domain: { ...STELA_DOMAIN, chainId: params.chainId },\n message: {\n inscription_id: u256Message(params.inscriptionId),\n new_lender: params.newLender,\n new_debt_hash: hashAssets(params.newDebtAssets),\n new_interest_hash: hashAssets(params.newInterestAssets),\n new_debt_count: params.newDebtCount.toString(),\n new_interest_count: params.newInterestCount.toString(),\n new_duration: params.newDuration.toString(),\n deadline: params.deadline.toString(),\n nonce: params.nonce.toString(),\n },\n }\n}\n\n/**\n * Build SNIP-12 TypedData for a refinance approval (T1-1).\n * The borrower approves a specific refinance offer for their loan.\n */\nexport function getRefinanceApprovalTypedData(params: {\n inscriptionId: bigint\n offerHash: string\n borrower: string\n nonce: bigint\n chainId: string\n}): TypedData {\n return {\n types: {\n StarknetDomain: STARKNET_DOMAIN_TYPE,\n RefinanceApproval: [\n { name: 'inscription_id', type: 'u256' },\n { name: 'offer_hash', type: 'felt' },\n { name: 'borrower', type: 'ContractAddress' },\n { name: 'nonce', type: 'felt' },\n ],\n u256: U256_TYPE,\n },\n primaryType: 'RefinanceApproval',\n domain: { ...STELA_DOMAIN, chainId: params.chainId },\n message: {\n inscription_id: u256Message(params.inscriptionId),\n offer_hash: params.offerHash,\n borrower: params.borrower,\n nonce: params.nonce.toString(),\n },\n }\n}\n","/**\n * Serialize a starknet.js signature (Signature type) for storage in D1.\n */\nexport interface StoredSignature {\n r: string\n s: string\n}\n\nexport function serializeSignature(sig: string[]): StoredSignature {\n return { r: sig[0], s: sig[1] }\n}\n\nexport function deserializeSignature(stored: StoredSignature): string[] {\n return [stored.r, stored.s]\n}\n","[\n {\n \"type\": \"impl\",\n \"name\": \"StelaProtocolImpl\",\n \"interface_name\": \"stela::interfaces::istela::IStelaProtocol\"\n },\n {\n \"type\": \"enum\",\n \"name\": \"core::bool\",\n \"variants\": [\n {\n \"name\": \"False\",\n \"type\": \"()\"\n },\n {\n \"name\": \"True\",\n \"type\": \"()\"\n }\n ]\n },\n {\n \"type\": \"enum\",\n \"name\": \"stela::types::asset::AssetType\",\n \"variants\": [\n {\n \"name\": \"ERC20\",\n \"type\": \"()\"\n },\n {\n \"name\": \"ERC721\",\n \"type\": \"()\"\n },\n {\n \"name\": \"ERC1155\",\n \"type\": \"()\"\n },\n {\n \"name\": \"ERC4626\",\n \"type\": \"()\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"core::integer::u256\",\n \"members\": [\n {\n \"name\": \"low\",\n \"type\": \"core::integer::u128\"\n },\n {\n \"name\": \"high\",\n \"type\": \"core::integer::u128\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"stela::types::asset::Asset\",\n \"members\": [\n {\n \"name\": \"asset\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"asset_type\",\n \"type\": \"stela::types::asset::AssetType\"\n },\n {\n \"name\": \"value\",\n \"type\": \"core::integer::u256\"\n },\n {\n \"name\": \"token_id\",\n \"type\": \"core::integer::u256\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"stela::types::inscription::InscriptionParams\",\n \"members\": [\n {\n \"name\": \"is_borrow\",\n \"type\": \"core::bool\"\n },\n {\n \"name\": \"debt_assets\",\n \"type\": \"core::array::Array::<stela::types::asset::Asset>\"\n },\n {\n \"name\": \"interest_assets\",\n \"type\": \"core::array::Array::<stela::types::asset::Asset>\"\n },\n {\n \"name\": \"collateral_assets\",\n \"type\": \"core::array::Array::<stela::types::asset::Asset>\"\n },\n {\n \"name\": \"duration\",\n \"type\": \"core::integer::u64\"\n },\n {\n \"name\": \"deadline\",\n \"type\": \"core::integer::u64\"\n },\n {\n \"name\": \"multi_lender\",\n \"type\": \"core::bool\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"stela::snip12::InscriptionOrder\",\n \"members\": [\n {\n \"name\": \"borrower\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"debt_hash\",\n \"type\": \"core::felt252\"\n },\n {\n \"name\": \"interest_hash\",\n \"type\": \"core::felt252\"\n },\n {\n \"name\": \"collateral_hash\",\n \"type\": \"core::felt252\"\n },\n {\n \"name\": \"debt_count\",\n \"type\": \"core::integer::u32\"\n },\n {\n \"name\": \"interest_count\",\n \"type\": \"core::integer::u32\"\n },\n {\n \"name\": \"collateral_count\",\n \"type\": \"core::integer::u32\"\n },\n {\n \"name\": \"duration\",\n \"type\": \"core::integer::u64\"\n },\n {\n \"name\": \"deadline\",\n \"type\": \"core::integer::u64\"\n },\n {\n \"name\": \"multi_lender\",\n \"type\": \"core::bool\"\n },\n {\n \"name\": \"nonce\",\n \"type\": \"core::felt252\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"stela::snip12::LendOffer\",\n \"members\": [\n {\n \"name\": \"order_hash\",\n \"type\": \"core::felt252\"\n },\n {\n \"name\": \"lender\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"issued_debt_percentage\",\n \"type\": \"core::integer::u256\"\n },\n {\n \"name\": \"nonce\",\n \"type\": \"core::felt252\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"stela::snip12::BatchLendOffer\",\n \"members\": [\n {\n \"name\": \"batch_hash\",\n \"type\": \"core::felt252\"\n },\n {\n \"name\": \"count\",\n \"type\": \"core::integer::u32\"\n },\n {\n \"name\": \"lender\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"start_nonce\",\n \"type\": \"core::felt252\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"stela::types::signed_order::SignedOrder\",\n \"members\": [\n {\n \"name\": \"maker\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"allowed_taker\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"inscription_id\",\n \"type\": \"core::integer::u256\"\n },\n {\n \"name\": \"bps\",\n \"type\": \"core::integer::u256\"\n },\n {\n \"name\": \"deadline\",\n \"type\": \"core::integer::u64\"\n },\n {\n \"name\": \"nonce\",\n \"type\": \"core::felt252\"\n },\n {\n \"name\": \"min_fill_bps\",\n \"type\": \"core::integer::u256\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"stela::types::inscription::StoredInscription\",\n \"members\": [\n {\n \"name\": \"borrower\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"lender\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"duration\",\n \"type\": \"core::integer::u64\"\n },\n {\n \"name\": \"deadline\",\n \"type\": \"core::integer::u64\"\n },\n {\n \"name\": \"signed_at\",\n \"type\": \"core::integer::u64\"\n },\n {\n \"name\": \"issued_debt_percentage\",\n \"type\": \"core::integer::u256\"\n },\n {\n \"name\": \"is_repaid\",\n \"type\": \"core::bool\"\n },\n {\n \"name\": \"liquidated\",\n \"type\": \"core::bool\"\n },\n {\n \"name\": \"multi_lender\",\n \"type\": \"core::bool\"\n },\n {\n \"name\": \"debt_asset_count\",\n \"type\": \"core::integer::u32\"\n },\n {\n \"name\": \"interest_asset_count\",\n \"type\": \"core::integer::u32\"\n },\n {\n \"name\": \"collateral_asset_count\",\n \"type\": \"core::integer::u32\"\n },\n {\n \"name\": \"auction_started\",\n \"type\": \"core::bool\"\n },\n {\n \"name\": \"auction_start_time\",\n \"type\": \"core::integer::u64\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"stela::snip12::CollectionLendOffer\",\n \"members\": [\n {\n \"name\": \"lender\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"debt_hash\",\n \"type\": \"core::felt252\"\n },\n {\n \"name\": \"interest_hash\",\n \"type\": \"core::felt252\"\n },\n {\n \"name\": \"debt_count\",\n \"type\": \"core::integer::u32\"\n },\n {\n \"name\": \"interest_count\",\n \"type\": \"core::integer::u32\"\n },\n {\n \"name\": \"collection_address\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"duration\",\n \"type\": \"core::integer::u64\"\n },\n {\n \"name\": \"deadline\",\n \"type\": \"core::integer::u64\"\n },\n {\n \"name\": \"nonce\",\n \"type\": \"core::felt252\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"stela::snip12::CollectionBorrowAcceptance\",\n \"members\": [\n {\n \"name\": \"offer_hash\",\n \"type\": \"core::felt252\"\n },\n {\n \"name\": \"borrower\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"token_id\",\n \"type\": \"core::integer::u256\"\n },\n {\n \"name\": \"nonce\",\n \"type\": \"core::felt252\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"stela::snip12::RenegotiationProposal\",\n \"members\": [\n {\n \"name\": \"inscription_id\",\n \"type\": \"core::integer::u256\"\n },\n {\n \"name\": \"proposer\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"new_duration\",\n \"type\": \"core::integer::u64\"\n },\n {\n \"name\": \"new_interest_hash\",\n \"type\": \"core::felt252\"\n },\n {\n \"name\": \"new_interest_count\",\n \"type\": \"core::integer::u32\"\n },\n {\n \"name\": \"proposal_deadline\",\n \"type\": \"core::integer::u64\"\n },\n {\n \"name\": \"nonce\",\n \"type\": \"core::felt252\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"stela::snip12::CollateralSaleOffer\",\n \"members\": [\n {\n \"name\": \"inscription_id\",\n \"type\": \"core::integer::u256\"\n },\n {\n \"name\": \"borrower\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"min_price\",\n \"type\": \"core::integer::u256\"\n },\n {\n \"name\": \"payment_token\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"allowed_buyer\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"deadline\",\n \"type\": \"core::integer::u64\"\n },\n {\n \"name\": \"nonce\",\n \"type\": \"core::felt252\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"stela::snip12::RefinanceOffer\",\n \"members\": [\n {\n \"name\": \"inscription_id\",\n \"type\": \"core::integer::u256\"\n },\n {\n \"name\": \"new_lender\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"new_debt_hash\",\n \"type\": \"core::felt252\"\n },\n {\n \"name\": \"new_interest_hash\",\n \"type\": \"core::felt252\"\n },\n {\n \"name\": \"new_debt_count\",\n \"type\": \"core::integer::u32\"\n },\n {\n \"name\": \"new_interest_count\",\n \"type\": \"core::integer::u32\"\n },\n {\n \"name\": \"new_duration\",\n \"type\": \"core::integer::u64\"\n },\n {\n \"name\": \"deadline\",\n \"type\": \"core::integer::u64\"\n },\n {\n \"name\": \"nonce\",\n \"type\": \"core::felt252\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"stela::snip12::RefinanceApproval\",\n \"members\": [\n {\n \"name\": \"inscription_id\",\n \"type\": \"core::integer::u256\"\n },\n {\n \"name\": \"offer_hash\",\n \"type\": \"core::felt252\"\n },\n {\n \"name\": \"borrower\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"nonce\",\n \"type\": \"core::felt252\"\n }\n ]\n },\n {\n \"type\": \"interface\",\n \"name\": \"stela::interfaces::istela::IStelaProtocol\",\n \"items\": [\n {\n \"type\": \"function\",\n \"name\": \"create_inscription\",\n \"inputs\": [\n {\n \"name\": \"params\",\n \"type\": \"stela::types::inscription::InscriptionParams\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"core::integer::u256\"\n }\n ],\n \"state_mutability\": \"external\"\n },\n {\n \"type\": \"function\",\n \"name\": \"sign_inscription\",\n \"inputs\": [\n {\n \"name\": \"inscription_id\",\n \"type\": \"core::integer::u256\"\n },\n {\n \"name\": \"issued_debt_percentage\",\n \"type\": \"core::integer::u256\"\n }\n ],\n \"outputs\": [],\n \"state_mutability\": \"external\"\n },\n {\n \"type\": \"function\",\n \"name\": \"cancel_inscription\",\n \"inputs\": [\n {\n \"name\": \"inscription_id\",\n \"type\": \"core::integer::u256\"\n }\n ],\n \"outputs\": [],\n \"state_mutability\": \"external\"\n },\n {\n \"type\": \"function\",\n \"name\": \"repay\",\n \"inputs\": [\n {\n \"name\": \"inscription_id\",\n \"type\": \"core::integer::u256\"\n }\n ],\n \"outputs\": [],\n \"state_mutability\": \"external\"\n },\n {\n \"type\": \"function\",\n \"name\": \"liquidate\",\n \"inputs\": [\n {\n \"name\": \"inscription_id\",\n \"type\": \"core::integer::u256\"\n }\n ],\n \"outputs\": [],\n \"state_mutability\": \"external\"\n },\n {\n \"type\": \"function\",\n \"name\": \"redeem\",\n \"inputs\": [\n {\n \"name\": \"inscription_id\",\n \"type\": \"core::integer::u256\"\n },\n {\n \"name\": \"shares\",\n \"type\": \"core::integer::u256\"\n }\n ],\n \"outputs\": [],\n \"state_mutability\": \"external\"\n },\n {\n \"type\": \"function\",\n \"name\": \"settle\",\n \"inputs\": [\n {\n \"name\": \"order\",\n \"type\": \"stela::snip12::InscriptionOrder\"\n },\n {\n \"name\": \"debt_assets\",\n \"type\": \"core::array::Array::<stela::types::asset::Asset>\"\n },\n {\n \"name\": \"interest_assets\",\n \"type\": \"core::array::Array::<stela::types::asset::Asset>\"\n },\n {\n \"name\": \"collateral_assets\",\n \"type\": \"core::array::Array::<stela::types::asset::Asset>\"\n },\n {\n \"name\": \"borrower_sig\",\n \"type\": \"core::array::Array::<core::felt252>\"\n },\n {\n \"name\": \"offer\",\n \"type\": \"stela::snip12::LendOffer\"\n },\n {\n \"name\": \"lender_sig\",\n \"type\": \"core::array::Array::<core::felt252>\"\n }\n ],\n \"outputs\": [],\n \"state_mutability\": \"external\"\n },\n {\n \"type\": \"function\",\n \"name\": \"batch_settle\",\n \"inputs\": [\n {\n \"name\": \"orders\",\n \"type\": \"core::array::Array::<stela::snip12::InscriptionOrder>\"\n },\n {\n \"name\": \"debt_assets_flat\",\n \"type\": \"core::array::Array::<stela::types::asset::Asset>\"\n },\n {\n \"name\": \"interest_assets_flat\",\n \"type\": \"core::array::Array::<stela::types::asset::Asset>\"\n },\n {\n \"name\": \"collateral_assets_flat\",\n \"type\": \"core::array::Array::<stela::types::asset::Asset>\"\n },\n {\n \"name\": \"borrower_sigs\",\n \"type\": \"core::array::Array::<core::array::Array::<core::felt252>>\"\n },\n {\n \"name\": \"batch_offer\",\n \"type\": \"stela::snip12::BatchLendOffer\"\n },\n {\n \"name\": \"lender_sig\",\n \"type\": \"core::array::Array::<core::felt252>\"\n },\n {\n \"name\": \"bps_list\",\n \"type\": \"core::array::Array::<core::integer::u256>\"\n }\n ],\n \"outputs\": [],\n \"state_mutability\": \"external\"\n },\n {\n \"type\": \"function\",\n \"name\": \"fill_signed_order\",\n \"inputs\": [\n {\n \"name\": \"order\",\n \"type\": \"stela::types::signed_order::SignedOrder\"\n },\n {\n \"name\": \"signature\",\n \"type\": \"core::array::Array::<core::felt252>\"\n },\n {\n \"name\": \"fill_bps\",\n \"type\": \"core::integer::u256\"\n }\n ],\n \"outputs\": [],\n \"state_mutability\": \"external\"\n },\n {\n \"type\": \"function\",\n \"name\": \"cancel_order\",\n \"inputs\": [\n {\n \"name\": \"order\",\n \"type\": \"stela::types::signed_order::SignedOrder\"\n }\n ],\n \"outputs\": [],\n \"state_mutability\": \"external\"\n },\n {\n \"type\": \"function\",\n \"name\": \"cancel_orders_by_nonce\",\n \"inputs\": [\n {\n \"name\": \"min_nonce\",\n \"type\": \"core::felt252\"\n }\n ],\n \"outputs\": [],\n \"state_mutability\": \"external\"\n },\n {\n \"type\": \"function\",\n \"name\": \"get_inscription\",\n \"inputs\": [\n {\n \"name\": \"inscription_id\",\n \"type\": \"core::integer::u256\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"stela::types::inscription::StoredInscription\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"get_locker\",\n \"inputs\": [\n {\n \"name\": \"inscription_id\",\n \"type\": \"core::integer::u256\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"convert_to_shares\",\n \"inputs\": [\n {\n \"name\": \"inscription_id\",\n \"type\": \"core::integer::u256\"\n },\n {\n \"name\": \"issued_debt_percentage\",\n \"type\": \"core::integer::u256\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"core::integer::u256\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"nonces\",\n \"inputs\": [\n {\n \"name\": \"owner\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"core::felt252\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"get_treasury\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"is_order_registered\",\n \"inputs\": [\n {\n \"name\": \"order_hash\",\n \"type\": \"core::felt252\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"core::bool\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"is_order_cancelled\",\n \"inputs\": [\n {\n \"name\": \"order_hash\",\n \"type\": \"core::felt252\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"core::bool\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"get_filled_bps\",\n \"inputs\": [\n {\n \"name\": \"order_hash\",\n \"type\": \"core::felt252\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"core::integer::u256\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"get_maker_min_nonce\",\n \"inputs\": [\n {\n \"name\": \"maker\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"core::felt252\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"get_genesis_contract\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"get_volume_settled\",\n \"inputs\": [\n {\n \"name\": \"user\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"core::integer::u256\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"is_volume_token_whitelisted\",\n \"inputs\": [\n {\n \"name\": \"token\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"core::bool\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"set_treasury\",\n \"inputs\": [\n {\n \"name\": \"treasury\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n }\n ],\n \"outputs\": [],\n \"state_mutability\": \"external\"\n },\n {\n \"type\": \"function\",\n \"name\": \"set_registry\",\n \"inputs\": [\n {\n \"name\": \"registry\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n }\n ],\n \"outputs\": [],\n \"state_mutability\": \"external\"\n },\n {\n \"type\": \"function\",\n \"name\": \"set_inscriptions_nft\",\n \"inputs\": [\n {\n \"name\": \"inscriptions_nft\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n }\n ],\n \"outputs\": [],\n \"state_mutability\": \"external\"\n },\n {\n \"type\": \"function\",\n \"name\": \"set_implementation_hash\",\n \"inputs\": [\n {\n \"name\": \"implementation_hash\",\n \"type\": \"core::felt252\"\n }\n ],\n \"outputs\": [],\n \"state_mutability\": \"external\"\n },\n {\n \"type\": \"function\",\n \"name\": \"set_volume_token_whitelisted\",\n \"inputs\": [\n {\n \"name\": \"token\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"whitelisted\",\n \"type\": \"core::bool\"\n }\n ],\n \"outputs\": [],\n \"state_mutability\": \"external\"\n },\n {\n \"type\": \"function\",\n \"name\": \"set_genesis_contract\",\n \"inputs\": [\n {\n \"name\": \"genesis_contract\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n }\n ],\n \"outputs\": [],\n \"state_mutability\": \"external\"\n },\n {\n \"type\": \"function\",\n \"name\": \"set_governance_target\",\n \"inputs\": [\n {\n \"name\": \"target\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"whitelisted\",\n \"type\": \"core::bool\"\n }\n ],\n \"outputs\": [],\n \"state_mutability\": \"external\"\n },\n {\n \"type\": \"function\",\n \"name\": \"is_governance_target_whitelisted\",\n \"inputs\": [\n {\n \"name\": \"target\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"core::bool\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"set_locker_allowed_selector\",\n \"inputs\": [\n {\n \"name\": \"locker\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"target\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"selector\",\n \"type\": \"core::felt252\"\n },\n {\n \"name\": \"allowed\",\n \"type\": \"core::bool\"\n }\n ],\n \"outputs\": [],\n \"state_mutability\": \"external\"\n },\n {\n \"type\": \"function\",\n \"name\": \"set_borrower_governance_selector\",\n \"inputs\": [\n {\n \"name\": \"inscription_id\",\n \"type\": \"core::integer::u256\"\n },\n {\n \"name\": \"target\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"selector\",\n \"type\": \"core::felt252\"\n },\n {\n \"name\": \"allowed\",\n \"type\": \"core::bool\"\n }\n ],\n \"outputs\": [],\n \"state_mutability\": \"external\"\n },\n {\n \"type\": \"function\",\n \"name\": \"settle_collection\",\n \"inputs\": [\n {\n \"name\": \"offer\",\n \"type\": \"stela::snip12::CollectionLendOffer\"\n },\n {\n \"name\": \"acceptance\",\n \"type\": \"stela::snip12::CollectionBorrowAcceptance\"\n },\n {\n \"name\": \"debt_assets\",\n \"type\": \"core::array::Array::<stela::types::asset::Asset>\"\n },\n {\n \"name\": \"interest_assets\",\n \"type\": \"core::array::Array::<stela::types::asset::Asset>\"\n },\n {\n \"name\": \"lender_sig\",\n \"type\": \"core::array::Array::<core::felt252>\"\n },\n {\n \"name\": \"borrower_sig\",\n \"type\": \"core::array::Array::<core::felt252>\"\n }\n ],\n \"outputs\": [],\n \"state_mutability\": \"external\"\n },\n {\n \"type\": \"function\",\n \"name\": \"commit_renegotiation\",\n \"inputs\": [\n {\n \"name\": \"inscription_id\",\n \"type\": \"core::integer::u256\"\n },\n {\n \"name\": \"proposal_hash\",\n \"type\": \"core::felt252\"\n }\n ],\n \"outputs\": [],\n \"state_mutability\": \"external\"\n },\n {\n \"type\": \"function\",\n \"name\": \"execute_renegotiation\",\n \"inputs\": [\n {\n \"name\": \"inscription_id\",\n \"type\": \"core::integer::u256\"\n },\n {\n \"name\": \"proposal\",\n \"type\": \"stela::snip12::RenegotiationProposal\"\n },\n {\n \"name\": \"proposer_sig\",\n \"type\": \"core::array::Array::<core::felt252>\"\n },\n {\n \"name\": \"new_interest_assets\",\n \"type\": \"core::array::Array::<stela::types::asset::Asset>\"\n }\n ],\n \"outputs\": [],\n \"state_mutability\": \"external\"\n },\n {\n \"type\": \"function\",\n \"name\": \"buy_collateral\",\n \"inputs\": [\n {\n \"name\": \"inscription_id\",\n \"type\": \"core::integer::u256\"\n },\n {\n \"name\": \"offer\",\n \"type\": \"stela::snip12::CollateralSaleOffer\"\n },\n {\n \"name\": \"borrower_sig\",\n \"type\": \"core::array::Array::<core::felt252>\"\n },\n {\n \"name\": \"sale_price\",\n \"type\": \"core::integer::u256\"\n }\n ],\n \"outputs\": [],\n \"state_mutability\": \"external\"\n },\n {\n \"type\": \"function\",\n \"name\": \"refinance\",\n \"inputs\": [\n {\n \"name\": \"offer\",\n \"type\": \"stela::snip12::RefinanceOffer\"\n },\n {\n \"name\": \"new_debt_assets\",\n \"type\": \"core::array::Array::<stela::types::asset::Asset>\"\n },\n {\n \"name\": \"new_interest_assets\",\n \"type\": \"core::array::Array::<stela::types::asset::Asset>\"\n },\n {\n \"name\": \"new_lender_sig\",\n \"type\": \"core::array::Array::<core::felt252>\"\n },\n {\n \"name\": \"approval\",\n \"type\": \"stela::snip12::RefinanceApproval\"\n },\n {\n \"name\": \"borrower_sig\",\n \"type\": \"core::array::Array::<core::felt252>\"\n }\n ],\n \"outputs\": [],\n \"state_mutability\": \"external\"\n },\n {\n \"type\": \"function\",\n \"name\": \"start_auction\",\n \"inputs\": [\n {\n \"name\": \"inscription_id\",\n \"type\": \"core::integer::u256\"\n }\n ],\n \"outputs\": [],\n \"state_mutability\": \"external\"\n },\n {\n \"type\": \"function\",\n \"name\": \"bid\",\n \"inputs\": [\n {\n \"name\": \"inscription_id\",\n \"type\": \"core::integer::u256\"\n }\n ],\n \"outputs\": [],\n \"state_mutability\": \"external\"\n },\n {\n \"type\": \"function\",\n \"name\": \"claim_collateral\",\n \"inputs\": [\n {\n \"name\": \"inscription_id\",\n \"type\": \"core::integer::u256\"\n }\n ],\n \"outputs\": [],\n \"state_mutability\": \"external\"\n },\n {\n \"type\": \"function\",\n \"name\": \"get_auction_price\",\n \"inputs\": [\n {\n \"name\": \"inscription_id\",\n \"type\": \"core::integer::u256\"\n },\n {\n \"name\": \"debt_index\",\n \"type\": \"core::integer::u32\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"core::integer::u256\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"get_auction_end_time\",\n \"inputs\": [\n {\n \"name\": \"inscription_id\",\n \"type\": \"core::integer::u256\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"core::integer::u64\"\n }\n ],\n \"state_mutability\": \"view\"\n }\n ]\n },\n {\n \"type\": \"impl\",\n \"name\": \"ERC1155MixinImpl\",\n \"interface_name\": \"openzeppelin_interfaces::token::erc1155::ERC1155ABI\"\n },\n {\n \"type\": \"struct\",\n \"name\": \"core::array::Span::<core::starknet::contract_address::ContractAddress>\",\n \"members\": [\n {\n \"name\": \"snapshot\",\n \"type\": \"@core::array::Array::<core::starknet::contract_address::ContractAddress>\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"core::array::Span::<core::integer::u256>\",\n \"members\": [\n {\n \"name\": \"snapshot\",\n \"type\": \"@core::array::Array::<core::integer::u256>\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"core::array::Span::<core::felt252>\",\n \"members\": [\n {\n \"name\": \"snapshot\",\n \"type\": \"@core::array::Array::<core::felt252>\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"core::byte_array::ByteArray\",\n \"members\": [\n {\n \"name\": \"data\",\n \"type\": \"core::array::Array::<core::bytes_31::bytes31>\"\n },\n {\n \"name\": \"pending_word\",\n \"type\": \"core::felt252\"\n },\n {\n \"name\": \"pending_word_len\",\n \"type\": \"core::internal::bounded_int::BoundedInt::<0, 30>\"\n }\n ]\n },\n {\n \"type\": \"interface\",\n \"name\": \"openzeppelin_interfaces::token::erc1155::ERC1155ABI\",\n \"items\": [\n {\n \"type\": \"function\",\n \"name\": \"balance_of\",\n \"inputs\": [\n {\n \"name\": \"account\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"token_id\",\n \"type\": \"core::integer::u256\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"core::integer::u256\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"balance_of_batch\",\n \"inputs\": [\n {\n \"name\": \"accounts\",\n \"type\": \"core::array::Span::<core::starknet::contract_address::ContractAddress>\"\n },\n {\n \"name\": \"token_ids\",\n \"type\": \"core::array::Span::<core::integer::u256>\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"core::array::Span::<core::integer::u256>\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"safe_transfer_from\",\n \"inputs\": [\n {\n \"name\": \"from\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"to\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"token_id\",\n \"type\": \"core::integer::u256\"\n },\n {\n \"name\": \"value\",\n \"type\": \"core::integer::u256\"\n },\n {\n \"name\": \"data\",\n \"type\": \"core::array::Span::<core::felt252>\"\n }\n ],\n \"outputs\": [],\n \"state_mutability\": \"external\"\n },\n {\n \"type\": \"function\",\n \"name\": \"safe_batch_transfer_from\",\n \"inputs\": [\n {\n \"name\": \"from\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"to\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"token_ids\",\n \"type\": \"core::array::Span::<core::integer::u256>\"\n },\n {\n \"name\": \"values\",\n \"type\": \"core::array::Span::<core::integer::u256>\"\n },\n {\n \"name\": \"data\",\n \"type\": \"core::array::Span::<core::felt252>\"\n }\n ],\n \"outputs\": [],\n \"state_mutability\": \"external\"\n },\n {\n \"type\": \"function\",\n \"name\": \"is_approved_for_all\",\n \"inputs\": [\n {\n \"name\": \"owner\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"operator\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"core::bool\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"set_approval_for_all\",\n \"inputs\": [\n {\n \"name\": \"operator\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"approved\",\n \"type\": \"core::bool\"\n }\n ],\n \"outputs\": [],\n \"state_mutability\": \"external\"\n },\n {\n \"type\": \"function\",\n \"name\": \"supports_interface\",\n \"inputs\": [\n {\n \"name\": \"interface_id\",\n \"type\": \"core::felt252\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"core::bool\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"uri\",\n \"inputs\": [\n {\n \"name\": \"token_id\",\n \"type\": \"core::integer::u256\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"core::byte_array::ByteArray\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"balanceOf\",\n \"inputs\": [\n {\n \"name\": \"account\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"tokenId\",\n \"type\": \"core::integer::u256\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"core::integer::u256\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"balanceOfBatch\",\n \"inputs\": [\n {\n \"name\": \"accounts\",\n \"type\": \"core::array::Span::<core::starknet::contract_address::ContractAddress>\"\n },\n {\n \"name\": \"tokenIds\",\n \"type\": \"core::array::Span::<core::integer::u256>\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"core::array::Span::<core::integer::u256>\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"safeTransferFrom\",\n \"inputs\": [\n {\n \"name\": \"from\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"to\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"tokenId\",\n \"type\": \"core::integer::u256\"\n },\n {\n \"name\": \"value\",\n \"type\": \"core::integer::u256\"\n },\n {\n \"name\": \"data\",\n \"type\": \"core::array::Span::<core::felt252>\"\n }\n ],\n \"outputs\": [],\n \"state_mutability\": \"external\"\n },\n {\n \"type\": \"function\",\n \"name\": \"safeBatchTransferFrom\",\n \"inputs\": [\n {\n \"name\": \"from\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"to\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"tokenIds\",\n \"type\": \"core::array::Span::<core::integer::u256>\"\n },\n {\n \"name\": \"values\",\n \"type\": \"core::array::Span::<core::integer::u256>\"\n },\n {\n \"name\": \"data\",\n \"type\": \"core::array::Span::<core::felt252>\"\n }\n ],\n \"outputs\": [],\n \"state_mutability\": \"external\"\n },\n {\n \"type\": \"function\",\n \"name\": \"isApprovedForAll\",\n \"inputs\": [\n {\n \"name\": \"owner\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"operator\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"core::bool\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"setApprovalForAll\",\n \"inputs\": [\n {\n \"name\": \"operator\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"approved\",\n \"type\": \"core::bool\"\n }\n ],\n \"outputs\": [],\n \"state_mutability\": \"external\"\n }\n ]\n },\n {\n \"type\": \"impl\",\n \"name\": \"OwnableMixinImpl\",\n \"interface_name\": \"openzeppelin_interfaces::access::ownable::OwnableABI\"\n },\n {\n \"type\": \"interface\",\n \"name\": \"openzeppelin_interfaces::access::ownable::OwnableABI\",\n \"items\": [\n {\n \"type\": \"function\",\n \"name\": \"owner\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"transfer_ownership\",\n \"inputs\": [\n {\n \"name\": \"new_owner\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n }\n ],\n \"outputs\": [],\n \"state_mutability\": \"external\"\n },\n {\n \"type\": \"function\",\n \"name\": \"renounce_ownership\",\n \"inputs\": [],\n \"outputs\": [],\n \"state_mutability\": \"external\"\n },\n {\n \"type\": \"function\",\n \"name\": \"transferOwnership\",\n \"inputs\": [\n {\n \"name\": \"newOwner\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n }\n ],\n \"outputs\": [],\n \"state_mutability\": \"external\"\n },\n {\n \"type\": \"function\",\n \"name\": \"renounceOwnership\",\n \"inputs\": [],\n \"outputs\": [],\n \"state_mutability\": \"external\"\n }\n ]\n },\n {\n \"type\": \"constructor\",\n \"name\": \"constructor\",\n \"inputs\": [\n {\n \"name\": \"owner\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"inscriptions_nft\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"registry\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"implementation_hash\",\n \"type\": \"core::felt252\"\n }\n ]\n },\n {\n \"type\": \"event\",\n \"name\": \"openzeppelin_token::erc1155::erc1155::ERC1155Component::TransferSingle\",\n \"kind\": \"struct\",\n \"members\": [\n {\n \"name\": \"operator\",\n \"type\": \"core::starknet::contract_address::ContractAddress\",\n \"kind\": \"key\"\n },\n {\n \"name\": \"from\",\n \"type\": \"core::starknet::contract_address::ContractAddress\",\n \"kind\": \"key\"\n },\n {\n \"name\": \"to\",\n \"type\": \"core::starknet::contract_address::ContractAddress\",\n \"kind\": \"key\"\n },\n {\n \"name\": \"id\",\n \"type\": \"core::integer::u256\",\n \"kind\": \"data\"\n },\n {\n \"name\": \"value\",\n \"type\": \"core::integer::u256\",\n \"kind\": \"data\"\n }\n ]\n },\n {\n \"type\": \"event\",\n \"name\": \"openzeppelin_token::erc1155::erc1155::ERC1155Component::TransferBatch\",\n \"kind\": \"struct\",\n \"members\": [\n {\n \"name\": \"operator\",\n \"type\": \"core::starknet::contract_address::ContractAddress\",\n \"kind\": \"key\"\n },\n {\n \"name\": \"from\",\n \"type\": \"core::starknet::contract_address::ContractAddress\",\n \"kind\": \"key\"\n },\n {\n \"name\": \"to\",\n \"type\": \"core::starknet::contract_address::ContractAddress\",\n \"kind\": \"key\"\n },\n {\n \"name\": \"ids\",\n \"type\": \"core::array::Span::<core::integer::u256>\",\n \"kind\": \"data\"\n },\n {\n \"name\": \"values\",\n \"type\": \"core::array::Span::<core::integer::u256>\",\n \"kind\": \"data\"\n }\n ]\n },\n {\n \"type\": \"event\",\n \"name\": \"openzeppelin_token::erc1155::erc1155::ERC1155Component::ApprovalForAll\",\n \"kind\": \"struct\",\n \"members\": [\n {\n \"name\": \"owner\",\n \"type\": \"core::starknet::contract_address::ContractAddress\",\n \"kind\": \"key\"\n },\n {\n \"name\": \"operator\",\n \"type\": \"core::starknet::contract_address::ContractAddress\",\n \"kind\": \"key\"\n },\n {\n \"name\": \"approved\",\n \"type\": \"core::bool\",\n \"kind\": \"data\"\n }\n ]\n },\n {\n \"type\": \"event\",\n \"name\": \"openzeppelin_token::erc1155::erc1155::ERC1155Component::URI\",\n \"kind\": \"struct\",\n \"members\": [\n {\n \"name\": \"value\",\n \"type\": \"core::byte_array::ByteArray\",\n \"kind\": \"data\"\n },\n {\n \"name\": \"id\",\n \"type\": \"core::integer::u256\",\n \"kind\": \"key\"\n }\n ]\n },\n {\n \"type\": \"event\",\n \"name\": \"openzeppelin_token::erc1155::erc1155::ERC1155Component::Event\",\n \"kind\": \"enum\",\n \"variants\": [\n {\n \"name\": \"TransferSingle\",\n \"type\": \"openzeppelin_token::erc1155::erc1155::ERC1155Component::TransferSingle\",\n \"kind\": \"nested\"\n },\n {\n \"name\": \"TransferBatch\",\n \"type\": \"openzeppelin_token::erc1155::erc1155::ERC1155Component::TransferBatch\",\n \"kind\": \"nested\"\n },\n {\n \"name\": \"ApprovalForAll\",\n \"type\": \"openzeppelin_token::erc1155::erc1155::ERC1155Component::ApprovalForAll\",\n \"kind\": \"nested\"\n },\n {\n \"name\": \"URI\",\n \"type\": \"openzeppelin_token::erc1155::erc1155::ERC1155Component::URI\",\n \"kind\": \"nested\"\n }\n ]\n },\n {\n \"type\": \"event\",\n \"name\": \"openzeppelin_access::ownable::ownable::OwnableComponent::OwnershipTransferred\",\n \"kind\": \"struct\",\n \"members\": [\n {\n \"name\": \"previous_owner\",\n \"type\": \"core::starknet::contract_address::ContractAddress\",\n \"kind\": \"key\"\n },\n {\n \"name\": \"new_owner\",\n \"type\": \"core::starknet::contract_address::ContractAddress\",\n \"kind\": \"key\"\n }\n ]\n },\n {\n \"type\": \"event\",\n \"name\": \"openzeppelin_access::ownable::ownable::OwnableComponent::OwnershipTransferStarted\",\n \"kind\": \"struct\",\n \"members\": [\n {\n \"name\": \"previous_owner\",\n \"type\": \"core::starknet::contract_address::ContractAddress\",\n \"kind\": \"key\"\n },\n {\n \"name\": \"new_owner\",\n \"type\": \"core::starknet::contract_address::ContractAddress\",\n \"kind\": \"key\"\n }\n ]\n },\n {\n \"type\": \"event\",\n \"name\": \"openzeppelin_access::ownable::ownable::OwnableComponent::Event\",\n \"kind\": \"enum\",\n \"variants\": [\n {\n \"name\": \"OwnershipTransferred\",\n \"type\": \"openzeppelin_access::ownable::ownable::OwnableComponent::OwnershipTransferred\",\n \"kind\": \"nested\"\n },\n {\n \"name\": \"OwnershipTransferStarted\",\n \"type\": \"openzeppelin_access::ownable::ownable::OwnableComponent::OwnershipTransferStarted\",\n \"kind\": \"nested\"\n }\n ]\n },\n {\n \"type\": \"event\",\n \"name\": \"openzeppelin_introspection::src5::SRC5Component::Event\",\n \"kind\": \"enum\",\n \"variants\": []\n },\n {\n \"type\": \"event\",\n \"name\": \"openzeppelin_security::reentrancyguard::ReentrancyGuardComponent::Event\",\n \"kind\": \"enum\",\n \"variants\": []\n },\n {\n \"type\": \"event\",\n \"name\": \"openzeppelin_utils::cryptography::nonces::NoncesComponent::Event\",\n \"kind\": \"enum\",\n \"variants\": []\n },\n {\n \"type\": \"event\",\n \"name\": \"stela::stela::StelaProtocol::InscriptionCreated\",\n \"kind\": \"struct\",\n \"members\": [\n {\n \"name\": \"inscription_id\",\n \"type\": \"core::integer::u256\",\n \"kind\": \"key\"\n },\n {\n \"name\": \"creator\",\n \"type\": \"core::starknet::contract_address::ContractAddress\",\n \"kind\": \"key\"\n },\n {\n \"name\": \"is_borrow\",\n \"type\": \"core::bool\",\n \"kind\": \"data\"\n }\n ]\n },\n {\n \"type\": \"event\",\n \"name\": \"stela::stela::StelaProtocol::InscriptionSigned\",\n \"kind\": \"struct\",\n \"members\": [\n {\n \"name\": \"inscription_id\",\n \"type\": \"core::integer::u256\",\n \"kind\": \"key\"\n },\n {\n \"name\": \"borrower\",\n \"type\": \"core::starknet::contract_address::ContractAddress\",\n \"kind\": \"key\"\n },\n {\n \"name\": \"lender\",\n \"type\": \"core::starknet::contract_address::ContractAddress\",\n \"kind\": \"key\"\n },\n {\n \"name\": \"issued_debt_percentage\",\n \"type\": \"core::integer::u256\",\n \"kind\": \"data\"\n },\n {\n \"name\": \"shares_minted\",\n \"type\": \"core::integer::u256\",\n \"kind\": \"data\"\n }\n ]\n },\n {\n \"type\": \"event\",\n \"name\": \"stela::stela::StelaProtocol::InscriptionCancelled\",\n \"kind\": \"struct\",\n \"members\": [\n {\n \"name\": \"inscription_id\",\n \"type\": \"core::integer::u256\",\n \"kind\": \"key\"\n },\n {\n \"name\": \"creator\",\n \"type\": \"core::starknet::contract_address::ContractAddress\",\n \"kind\": \"data\"\n }\n ]\n },\n {\n \"type\": \"event\",\n \"name\": \"stela::stela::StelaProtocol::InscriptionRepaid\",\n \"kind\": \"struct\",\n \"members\": [\n {\n \"name\": \"inscription_id\",\n \"type\": \"core::integer::u256\",\n \"kind\": \"key\"\n },\n {\n \"name\": \"repayer\",\n \"type\": \"core::starknet::contract_address::ContractAddress\",\n \"kind\": \"data\"\n }\n ]\n },\n {\n \"type\": \"event\",\n \"name\": \"stela::stela::StelaProtocol::InscriptionLiquidated\",\n \"kind\": \"struct\",\n \"members\": [\n {\n \"name\": \"inscription_id\",\n \"type\": \"core::integer::u256\",\n \"kind\": \"key\"\n },\n {\n \"name\": \"liquidator\",\n \"type\": \"core::starknet::contract_address::ContractAddress\",\n \"kind\": \"data\"\n }\n ]\n },\n {\n \"type\": \"event\",\n \"name\": \"stela::stela::StelaProtocol::SharesRedeemed\",\n \"kind\": \"struct\",\n \"members\": [\n {\n \"name\": \"inscription_id\",\n \"type\": \"core::integer::u256\",\n \"kind\": \"key\"\n },\n {\n \"name\": \"redeemer\",\n \"type\": \"core::starknet::contract_address::ContractAddress\",\n \"kind\": \"key\"\n },\n {\n \"name\": \"shares\",\n \"type\": \"core::integer::u256\",\n \"kind\": \"data\"\n }\n ]\n },\n {\n \"type\": \"event\",\n \"name\": \"stela::stela::StelaProtocol::OrderSettled\",\n \"kind\": \"struct\",\n \"members\": [\n {\n \"name\": \"inscription_id\",\n \"type\": \"core::integer::u256\",\n \"kind\": \"key\"\n },\n {\n \"name\": \"borrower\",\n \"type\": \"core::starknet::contract_address::ContractAddress\",\n \"kind\": \"key\"\n },\n {\n \"name\": \"lender\",\n \"type\": \"core::starknet::contract_address::ContractAddress\",\n \"kind\": \"key\"\n },\n {\n \"name\": \"relayer\",\n \"type\": \"core::starknet::contract_address::ContractAddress\",\n \"kind\": \"data\"\n },\n {\n \"name\": \"relayer_fee_amount\",\n \"type\": \"core::integer::u256\",\n \"kind\": \"data\"\n }\n ]\n },\n {\n \"type\": \"event\",\n \"name\": \"stela::stela::StelaProtocol::OrderFilled\",\n \"kind\": \"struct\",\n \"members\": [\n {\n \"name\": \"inscription_id\",\n \"type\": \"core::integer::u256\",\n \"kind\": \"key\"\n },\n {\n \"name\": \"order_hash\",\n \"type\": \"core::felt252\",\n \"kind\": \"key\"\n },\n {\n \"name\": \"taker\",\n \"type\": \"core::starknet::contract_address::ContractAddress\",\n \"kind\": \"key\"\n },\n {\n \"name\": \"fill_bps\",\n \"type\": \"core::integer::u256\",\n \"kind\": \"data\"\n },\n {\n \"name\": \"total_filled_bps\",\n \"type\": \"core::integer::u256\",\n \"kind\": \"data\"\n }\n ]\n },\n {\n \"type\": \"event\",\n \"name\": \"stela::stela::StelaProtocol::OrderCancelled\",\n \"kind\": \"struct\",\n \"members\": [\n {\n \"name\": \"order_hash\",\n \"type\": \"core::felt252\",\n \"kind\": \"key\"\n },\n {\n \"name\": \"maker\",\n \"type\": \"core::starknet::contract_address::ContractAddress\",\n \"kind\": \"data\"\n }\n ]\n },\n {\n \"type\": \"event\",\n \"name\": \"stela::stela::StelaProtocol::OrdersBulkCancelled\",\n \"kind\": \"struct\",\n \"members\": [\n {\n \"name\": \"maker\",\n \"type\": \"core::starknet::contract_address::ContractAddress\",\n \"kind\": \"key\"\n },\n {\n \"name\": \"new_min_nonce\",\n \"type\": \"core::felt252\",\n \"kind\": \"data\"\n }\n ]\n },\n {\n \"type\": \"event\",\n \"name\": \"stela::stela::StelaProtocol::CollateralReturned\",\n \"kind\": \"struct\",\n \"members\": [\n {\n \"name\": \"inscription_id\",\n \"type\": \"core::integer::u256\",\n \"kind\": \"key\"\n },\n {\n \"name\": \"borrower\",\n \"type\": \"core::starknet::contract_address::ContractAddress\",\n \"kind\": \"data\"\n },\n {\n \"name\": \"asset_count\",\n \"type\": \"core::integer::u32\",\n \"kind\": \"data\"\n }\n ]\n },\n {\n \"type\": \"event\",\n \"name\": \"stela::stela::StelaProtocol::Event\",\n \"kind\": \"enum\",\n \"variants\": [\n {\n \"name\": \"ERC1155Event\",\n \"type\": \"openzeppelin_token::erc1155::erc1155::ERC1155Component::Event\",\n \"kind\": \"flat\"\n },\n {\n \"name\": \"OwnableEvent\",\n \"type\": \"openzeppelin_access::ownable::ownable::OwnableComponent::Event\",\n \"kind\": \"flat\"\n },\n {\n \"name\": \"SRC5Event\",\n \"type\": \"openzeppelin_introspection::src5::SRC5Component::Event\",\n \"kind\": \"flat\"\n },\n {\n \"name\": \"ReentrancyGuardEvent\",\n \"type\": \"openzeppelin_security::reentrancyguard::ReentrancyGuardComponent::Event\",\n \"kind\": \"flat\"\n },\n {\n \"name\": \"NoncesEvent\",\n \"type\": \"openzeppelin_utils::cryptography::nonces::NoncesComponent::Event\",\n \"kind\": \"flat\"\n },\n {\n \"name\": \"InscriptionCreated\",\n \"type\": \"stela::stela::StelaProtocol::InscriptionCreated\",\n \"kind\": \"nested\"\n },\n {\n \"name\": \"InscriptionSigned\",\n \"type\": \"stela::stela::StelaProtocol::InscriptionSigned\",\n \"kind\": \"nested\"\n },\n {\n \"name\": \"InscriptionCancelled\",\n \"type\": \"stela::stela::StelaProtocol::InscriptionCancelled\",\n \"kind\": \"nested\"\n },\n {\n \"name\": \"InscriptionRepaid\",\n \"type\": \"stela::stela::StelaProtocol::InscriptionRepaid\",\n \"kind\": \"nested\"\n },\n {\n \"name\": \"InscriptionLiquidated\",\n \"type\": \"stela::stela::StelaProtocol::InscriptionLiquidated\",\n \"kind\": \"nested\"\n },\n {\n \"name\": \"SharesRedeemed\",\n \"type\": \"stela::stela::StelaProtocol::SharesRedeemed\",\n \"kind\": \"nested\"\n },\n {\n \"name\": \"OrderSettled\",\n \"type\": \"stela::stela::StelaProtocol::OrderSettled\",\n \"kind\": \"nested\"\n },\n {\n \"name\": \"OrderFilled\",\n \"type\": \"stela::stela::StelaProtocol::OrderFilled\",\n \"kind\": \"nested\"\n },\n {\n \"name\": \"OrderCancelled\",\n \"type\": \"stela::stela::StelaProtocol::OrderCancelled\",\n \"kind\": \"nested\"\n },\n {\n \"name\": \"OrdersBulkCancelled\",\n \"type\": \"stela::stela::StelaProtocol::OrdersBulkCancelled\",\n \"kind\": \"nested\"\n },\n {\n \"name\": \"CollateralReturned\",\n \"type\": \"stela::stela::StelaProtocol::CollateralReturned\",\n \"kind\": \"nested\"\n }\n ]\n }\n]","import { Contract, type RpcProvider, type Account } from 'starknet'\nimport type { Call } from '../types/common.js'\nimport type { Asset, InscriptionParams, StoredInscription, SignedOrder } from '../types/inscription.js'\nimport stelaAbi from '../abi/stela.json'\nimport { toU256, fromU256 } from '../utils/u256.js'\nimport { ASSET_TYPE_ENUM } from '../constants/protocol.js'\n\nexport interface InscriptionClientOptions {\n stelaAddress: string\n provider: RpcProvider\n account?: Account\n}\n\nexport class InscriptionClient {\n private contract: Contract\n private address: string\n private account?: Account\n\n constructor(opts: InscriptionClientOptions) {\n this.address = opts.stelaAddress\n this.account = opts.account\n this.contract = new Contract(stelaAbi, opts.stelaAddress, opts.provider)\n }\n\n // ── Read Methods ───────────────────────────────────────────────────\n\n async getInscription(inscriptionId: bigint): Promise<StoredInscription> {\n const result = await this.contract.call('get_inscription', toU256(inscriptionId))\n return parseStoredInscription(result)\n }\n\n async getLocker(inscriptionId: bigint): Promise<string> {\n const result = await this.contract.call('get_locker', toU256(inscriptionId))\n return String((result as unknown[])[0])\n }\n\n async convertToShares(inscriptionId: bigint, percentage: bigint): Promise<bigint> {\n const result = await this.contract.call('convert_to_shares', [\n ...toU256(inscriptionId),\n ...toU256(percentage),\n ])\n return extractU256(result)\n }\n\n async getNonce(address: string): Promise<bigint> {\n const result = await this.contract.call('nonces', [address], { blockIdentifier: 'latest' })\n return BigInt(String((result as unknown[])[0] ?? '0'))\n }\n\n async getRelayerFee(): Promise<bigint> {\n const result = await this.contract.call('get_relayer_fee')\n return extractU256(result)\n }\n\n async getTreasury(): Promise<string> {\n const result = await this.contract.call('get_treasury')\n return String((result as unknown[])[0])\n }\n\n async isPaused(): Promise<boolean> {\n const result = await this.contract.call('is_paused')\n return Boolean((result as unknown[])[0])\n }\n\n async isOrderRegistered(orderHash: string): Promise<boolean> {\n const result = await this.contract.call('is_order_registered', [orderHash])\n return Boolean((result as unknown[])[0])\n }\n\n async isOrderCancelled(orderHash: string): Promise<boolean> {\n const result = await this.contract.call('is_order_cancelled', [orderHash])\n return Boolean((result as unknown[])[0])\n }\n\n async getFilledBps(orderHash: string): Promise<bigint> {\n const result = await this.contract.call('get_filled_bps', [orderHash])\n return extractU256(result)\n }\n\n async getMakerMinNonce(maker: string): Promise<string> {\n const result = await this.contract.call('get_maker_min_nonce', [maker], { blockIdentifier: 'latest' })\n return String((result as unknown[])[0] ?? '0')\n }\n\n // ── Call Builders ──────────────────────────────────────────────────\n\n buildCreateInscription(params: InscriptionParams): Call {\n const calldata: string[] = [\n params.is_borrow ? '1' : '0',\n ...serializeAssets(params.debt_assets),\n ...serializeAssets(params.interest_assets),\n ...serializeAssets(params.collateral_assets),\n params.duration.toString(),\n params.deadline.toString(),\n params.multi_lender ? '1' : '0',\n ]\n return { contractAddress: this.address, entrypoint: 'create_inscription', calldata }\n }\n\n buildSignInscription(inscriptionId: bigint, bps: bigint): Call {\n return {\n contractAddress: this.address,\n entrypoint: 'sign_inscription',\n calldata: [...toU256(inscriptionId), ...toU256(bps)],\n }\n }\n\n buildCancelInscription(inscriptionId: bigint): Call {\n return {\n contractAddress: this.address,\n entrypoint: 'cancel_inscription',\n calldata: [...toU256(inscriptionId)],\n }\n }\n\n buildRepay(inscriptionId: bigint): Call {\n return {\n contractAddress: this.address,\n entrypoint: 'repay',\n calldata: [...toU256(inscriptionId)],\n }\n }\n\n buildLiquidate(inscriptionId: bigint): Call {\n return {\n contractAddress: this.address,\n entrypoint: 'liquidate',\n calldata: [...toU256(inscriptionId)],\n }\n }\n\n buildRedeem(inscriptionId: bigint, shares: bigint): Call {\n return {\n contractAddress: this.address,\n entrypoint: 'redeem',\n calldata: [...toU256(inscriptionId), ...toU256(shares)],\n }\n }\n\n buildSettle(params: {\n order: {\n borrower: string\n debtHash: string\n interestHash: string\n collateralHash: string\n debtCount: number\n interestCount: number\n collateralCount: number\n duration: bigint\n deadline: bigint\n multiLender: boolean\n nonce: bigint\n }\n debtAssets: Asset[]\n interestAssets: Asset[]\n collateralAssets: Asset[]\n borrowerSig: string[]\n offer: {\n orderHash: string\n lender: string\n issuedDebtPercentage: bigint\n nonce: bigint\n }\n lenderSig: string[]\n }): Call {\n const calldata: string[] = [\n // Order struct fields\n params.order.borrower,\n params.order.debtHash,\n params.order.interestHash,\n params.order.collateralHash,\n String(params.order.debtCount),\n String(params.order.interestCount),\n String(params.order.collateralCount),\n params.order.duration.toString(),\n params.order.deadline.toString(),\n params.order.multiLender ? '1' : '0',\n params.order.nonce.toString(),\n // debt_assets array\n ...serializeAssets(params.debtAssets),\n // interest_assets array\n ...serializeAssets(params.interestAssets),\n // collateral_assets array\n ...serializeAssets(params.collateralAssets),\n // borrower_sig array\n String(params.borrowerSig.length),\n ...params.borrowerSig,\n // offer struct\n params.offer.orderHash,\n params.offer.lender,\n ...toU256(params.offer.issuedDebtPercentage),\n params.offer.nonce.toString(),\n // lender_sig array\n String(params.lenderSig.length),\n ...params.lenderSig,\n ]\n return { contractAddress: this.address, entrypoint: 'settle', calldata }\n }\n\n buildBatchSettle(params: {\n orders: Array<{\n borrower: string\n debtHash: string\n interestHash: string\n collateralHash: string\n debtCount: number\n interestCount: number\n collateralCount: number\n duration: bigint\n deadline: bigint\n multiLender: boolean\n nonce: bigint\n }>\n debtAssetsFlat: Asset[]\n interestAssetsFlat: Asset[]\n collateralAssetsFlat: Asset[]\n borrowerSigs: string[][]\n batchOffer: {\n batchHash: string\n count: number\n lender: string\n startNonce: bigint\n }\n lenderSig: string[]\n bpsList: bigint[]\n }): Call {\n const calldata: string[] = []\n\n // orders: Array<InscriptionOrder>\n calldata.push(String(params.orders.length))\n for (const order of params.orders) {\n calldata.push(\n order.borrower,\n order.debtHash,\n order.interestHash,\n order.collateralHash,\n String(order.debtCount),\n String(order.interestCount),\n String(order.collateralCount),\n order.duration.toString(),\n order.deadline.toString(),\n order.multiLender ? '1' : '0',\n order.nonce.toString(),\n )\n }\n\n // debt_assets_flat: Array<Asset>\n calldata.push(...serializeAssets(params.debtAssetsFlat))\n // interest_assets_flat: Array<Asset>\n calldata.push(...serializeAssets(params.interestAssetsFlat))\n // collateral_assets_flat: Array<Asset>\n calldata.push(...serializeAssets(params.collateralAssetsFlat))\n\n // borrower_sigs: Array<Array<felt252>>\n calldata.push(String(params.borrowerSigs.length))\n for (const sig of params.borrowerSigs) {\n calldata.push(String(sig.length), ...sig)\n }\n\n // batch_offer: BatchLendOffer struct (4 fields)\n calldata.push(\n params.batchOffer.batchHash,\n String(params.batchOffer.count),\n params.batchOffer.lender,\n params.batchOffer.startNonce.toString(),\n )\n\n // lender_sig: Array<felt252>\n calldata.push(String(params.lenderSig.length), ...params.lenderSig)\n\n // bps_list: Array<u256>\n calldata.push(String(params.bpsList.length))\n for (const bps of params.bpsList) {\n calldata.push(...toU256(bps))\n }\n\n return { contractAddress: this.address, entrypoint: 'batch_settle', calldata }\n }\n\n buildFillSignedOrder(order: SignedOrder, signature: string[], fillBps: bigint): Call {\n const calldata: string[] = [\n // SignedOrder struct fields\n order.maker,\n order.allowed_taker,\n ...toU256(order.inscription_id),\n ...toU256(order.bps),\n order.deadline.toString(),\n order.nonce,\n ...toU256(order.min_fill_bps),\n // signature array\n String(signature.length),\n ...signature,\n // fill_bps\n ...toU256(fillBps),\n ]\n return { contractAddress: this.address, entrypoint: 'fill_signed_order', calldata }\n }\n\n buildCancelOrder(order: SignedOrder): Call {\n const calldata: string[] = [\n order.maker,\n order.allowed_taker,\n ...toU256(order.inscription_id),\n ...toU256(order.bps),\n order.deadline.toString(),\n order.nonce,\n ...toU256(order.min_fill_bps),\n ]\n return { contractAddress: this.address, entrypoint: 'cancel_order', calldata }\n }\n\n buildCancelOrdersByNonce(minNonce: string): Call {\n return {\n contractAddress: this.address,\n entrypoint: 'cancel_orders_by_nonce',\n calldata: [minNonce],\n }\n }\n\n // ── T1 Call Builders ─────────────────────────────────────────────────\n\n /** T1-2: Settle a collection-wide lend offer */\n buildSettleCollection(params: {\n offer: {\n lender: string\n debtHash: string\n interestHash: string\n debtCount: number\n interestCount: number\n collectionAddress: string\n duration: bigint\n deadline: bigint\n nonce: bigint\n }\n acceptance: {\n offerHash: string\n borrower: string\n tokenId: bigint\n nonce: bigint\n }\n debtAssets: Asset[]\n interestAssets: Asset[]\n lenderSig: string[]\n borrowerSig: string[]\n }): Call {\n const calldata: string[] = [\n // CollectionLendOffer struct (9 fields)\n params.offer.lender,\n params.offer.debtHash,\n params.offer.interestHash,\n String(params.offer.debtCount),\n String(params.offer.interestCount),\n params.offer.collectionAddress,\n params.offer.duration.toString(),\n params.offer.deadline.toString(),\n params.offer.nonce.toString(),\n // CollectionBorrowAcceptance struct (4 fields)\n params.acceptance.offerHash,\n params.acceptance.borrower,\n ...toU256(params.acceptance.tokenId),\n params.acceptance.nonce.toString(),\n // debt_assets array\n ...serializeAssets(params.debtAssets),\n // interest_assets array\n ...serializeAssets(params.interestAssets),\n // lender_sig array\n String(params.lenderSig.length),\n ...params.lenderSig,\n // borrower_sig array\n String(params.borrowerSig.length),\n ...params.borrowerSig,\n ]\n return { contractAddress: this.address, entrypoint: 'settle_collection', calldata }\n }\n\n /** T1-4: Commit a renegotiation proposal hash on-chain */\n buildCommitRenegotiation(inscriptionId: bigint, proposalHash: string): Call {\n return {\n contractAddress: this.address,\n entrypoint: 'commit_renegotiation',\n calldata: [...toU256(inscriptionId), proposalHash],\n }\n }\n\n /** T1-4: Execute a committed renegotiation proposal */\n buildExecuteRenegotiation(params: {\n inscriptionId: bigint\n proposal: {\n inscriptionId: bigint\n proposer: string\n newDuration: bigint\n newInterestHash: string\n newInterestCount: number\n proposalDeadline: bigint\n nonce: bigint\n }\n proposerSig: string[]\n newInterestAssets: Asset[]\n }): Call {\n const calldata: string[] = [\n ...toU256(params.inscriptionId),\n // RenegotiationProposal struct (7 fields)\n ...toU256(params.proposal.inscriptionId),\n params.proposal.proposer,\n params.proposal.newDuration.toString(),\n params.proposal.newInterestHash,\n String(params.proposal.newInterestCount),\n params.proposal.proposalDeadline.toString(),\n params.proposal.nonce.toString(),\n // proposer_sig array\n String(params.proposerSig.length),\n ...params.proposerSig,\n // new_interest_assets array\n ...serializeAssets(params.newInterestAssets),\n ]\n return { contractAddress: this.address, entrypoint: 'execute_renegotiation', calldata }\n }\n\n /** T1-5: Buy collateral from a borrower's sale offer */\n buildBuyCollateral(params: {\n inscriptionId: bigint\n offer: {\n inscriptionId: bigint\n borrower: string\n minPrice: bigint\n paymentToken: string\n allowedBuyer: string\n deadline: bigint\n nonce: bigint\n }\n borrowerSig: string[]\n salePrice: bigint\n }): Call {\n const calldata: string[] = [\n ...toU256(params.inscriptionId),\n // CollateralSaleOffer struct (7 fields)\n ...toU256(params.offer.inscriptionId),\n params.offer.borrower,\n ...toU256(params.offer.minPrice),\n params.offer.paymentToken,\n params.offer.allowedBuyer,\n params.offer.deadline.toString(),\n params.offer.nonce.toString(),\n // borrower_sig array\n String(params.borrowerSig.length),\n ...params.borrowerSig,\n // sale_price\n ...toU256(params.salePrice),\n ]\n return { contractAddress: this.address, entrypoint: 'buy_collateral', calldata }\n }\n\n /** T1-1: Refinance an existing loan with a new lender */\n buildRefinance(params: {\n offer: {\n inscriptionId: bigint\n newLender: string\n newDebtHash: string\n newInterestHash: string\n newDebtCount: number\n newInterestCount: number\n newDuration: bigint\n deadline: bigint\n nonce: bigint\n }\n newDebtAssets: Asset[]\n newInterestAssets: Asset[]\n newLenderSig: string[]\n approval: {\n inscriptionId: bigint\n offerHash: string\n borrower: string\n nonce: bigint\n }\n borrowerSig: string[]\n }): Call {\n const calldata: string[] = [\n // RefinanceOffer struct (9 fields)\n ...toU256(params.offer.inscriptionId),\n params.offer.newLender,\n params.offer.newDebtHash,\n params.offer.newInterestHash,\n String(params.offer.newDebtCount),\n String(params.offer.newInterestCount),\n params.offer.newDuration.toString(),\n params.offer.deadline.toString(),\n params.offer.nonce.toString(),\n // new_debt_assets array\n ...serializeAssets(params.newDebtAssets),\n // new_interest_assets array\n ...serializeAssets(params.newInterestAssets),\n // new_lender_sig array\n String(params.newLenderSig.length),\n ...params.newLenderSig,\n // RefinanceApproval struct (4 fields)\n ...toU256(params.approval.inscriptionId),\n params.approval.offerHash,\n params.approval.borrower,\n params.approval.nonce.toString(),\n // borrower_sig array\n String(params.borrowerSig.length),\n ...params.borrowerSig,\n ]\n return { contractAddress: this.address, entrypoint: 'refinance', calldata }\n }\n\n /** T1-3: Start a Dutch auction on an expired, unfilled inscription */\n buildStartAuction(inscriptionId: bigint): Call {\n return {\n contractAddress: this.address,\n entrypoint: 'start_auction',\n calldata: [...toU256(inscriptionId)],\n }\n }\n\n /** T1-3: Bid on an active Dutch auction */\n buildBid(inscriptionId: bigint): Call {\n return {\n contractAddress: this.address,\n entrypoint: 'bid',\n calldata: [...toU256(inscriptionId)],\n }\n }\n\n /** T1-3: Claim collateral after an auction expires with no bids */\n buildClaimCollateral(inscriptionId: bigint): Call {\n return {\n contractAddress: this.address,\n entrypoint: 'claim_collateral',\n calldata: [...toU256(inscriptionId)],\n }\n }\n\n // ── T1 Read Methods ──────────────────────────────────────────────────\n\n /** T1-3: Get the current Dutch auction price for a specific debt asset */\n async getAuctionPrice(inscriptionId: bigint, debtIndex: number): Promise<bigint> {\n const result = await this.contract.call('get_auction_price', [\n ...toU256(inscriptionId),\n String(debtIndex),\n ])\n return extractU256(result)\n }\n\n /** T1-3: Get the auction end timestamp */\n async getAuctionEndTime(inscriptionId: bigint): Promise<bigint> {\n const result = await this.contract.call('get_auction_end_time', toU256(inscriptionId))\n return BigInt(String((result as unknown[])[0] ?? '0'))\n }\n\n // ── Execute Methods ────────────────────────────────────────────────\n\n /**\n * Execute one or more calls via the connected account.\n * Pass approval calls to bundle ERC20 approve + protocol call atomically.\n */\n async execute(calls: Call[]): Promise<{ transaction_hash: string }> {\n if (!this.account) throw new Error('Account required for write operations')\n const result = await this.account.execute(calls)\n return { transaction_hash: result.transaction_hash }\n }\n\n async createInscription(params: InscriptionParams, approvals?: Call[]): Promise<{ transaction_hash: string }> {\n const calls = [...(approvals ?? []), this.buildCreateInscription(params)]\n return this.execute(calls)\n }\n\n async signInscription(inscriptionId: bigint, bps: bigint, approvals?: Call[]): Promise<{ transaction_hash: string }> {\n const calls = [...(approvals ?? []), this.buildSignInscription(inscriptionId, bps)]\n return this.execute(calls)\n }\n\n async cancelInscription(inscriptionId: bigint): Promise<{ transaction_hash: string }> {\n return this.execute([this.buildCancelInscription(inscriptionId)])\n }\n\n async repay(inscriptionId: bigint, approvals?: Call[]): Promise<{ transaction_hash: string }> {\n const calls = [...(approvals ?? []), this.buildRepay(inscriptionId)]\n return this.execute(calls)\n }\n\n async liquidate(inscriptionId: bigint): Promise<{ transaction_hash: string }> {\n return this.execute([this.buildLiquidate(inscriptionId)])\n }\n\n async redeem(inscriptionId: bigint, shares: bigint): Promise<{ transaction_hash: string }> {\n return this.execute([this.buildRedeem(inscriptionId, shares)])\n }\n\n async fillSignedOrder(order: SignedOrder, signature: string[], fillBps: bigint, approvals?: Call[]): Promise<{ transaction_hash: string }> {\n const calls = [...(approvals ?? []), this.buildFillSignedOrder(order, signature, fillBps)]\n return this.execute(calls)\n }\n\n async cancelOrder(order: SignedOrder): Promise<{ transaction_hash: string }> {\n return this.execute([this.buildCancelOrder(order)])\n }\n\n async cancelOrdersByNonce(minNonce: string): Promise<{ transaction_hash: string }> {\n return this.execute([this.buildCancelOrdersByNonce(minNonce)])\n }\n\n // ── T1 Execute Methods ───────────────────────────────────────────────\n\n async settleCollection(params: Parameters<InscriptionClient['buildSettleCollection']>[0]): Promise<{ transaction_hash: string }> {\n return this.execute([this.buildSettleCollection(params)])\n }\n\n async commitRenegotiation(inscriptionId: bigint, proposalHash: string): Promise<{ transaction_hash: string }> {\n return this.execute([this.buildCommitRenegotiation(inscriptionId, proposalHash)])\n }\n\n async executeRenegotiation(params: Parameters<InscriptionClient['buildExecuteRenegotiation']>[0], approvals?: Call[]): Promise<{ transaction_hash: string }> {\n const calls = [...(approvals ?? []), this.buildExecuteRenegotiation(params)]\n return this.execute(calls)\n }\n\n async buyCollateral(params: Parameters<InscriptionClient['buildBuyCollateral']>[0], approvals?: Call[]): Promise<{ transaction_hash: string }> {\n const calls = [...(approvals ?? []), this.buildBuyCollateral(params)]\n return this.execute(calls)\n }\n\n async refinance(params: Parameters<InscriptionClient['buildRefinance']>[0], approvals?: Call[]): Promise<{ transaction_hash: string }> {\n const calls = [...(approvals ?? []), this.buildRefinance(params)]\n return this.execute(calls)\n }\n\n async startAuction(inscriptionId: bigint): Promise<{ transaction_hash: string }> {\n return this.execute([this.buildStartAuction(inscriptionId)])\n }\n\n async bid(inscriptionId: bigint, approvals?: Call[]): Promise<{ transaction_hash: string }> {\n const calls = [...(approvals ?? []), this.buildBid(inscriptionId)]\n return this.execute(calls)\n }\n\n async claimCollateral(inscriptionId: bigint): Promise<{ transaction_hash: string }> {\n return this.execute([this.buildClaimCollateral(inscriptionId)])\n }\n}\n\n// ── Helpers ────────────────────────────────────────────────────────────\n\nfunction serializeAssets(assets: Asset[]): string[] {\n const calldata: string[] = [String(assets.length)]\n for (const a of assets) {\n calldata.push(a.asset_address)\n calldata.push(String(ASSET_TYPE_ENUM[a.asset_type]))\n calldata.push(...toU256(a.value))\n calldata.push(...toU256(a.token_id))\n }\n return calldata\n}\n\nfunction extractU256(result: unknown): bigint {\n const arr = result as unknown[]\n if (typeof arr[0] === 'bigint') return arr[0]\n if (typeof arr[0] === 'object' && arr[0] !== null && 'low' in arr[0] && 'high' in arr[0]) {\n const u = arr[0] as { low: bigint; high: bigint }\n return fromU256(u)\n }\n return BigInt(String(arr[0]))\n}\n\nfunction parseStoredInscription(result: unknown): StoredInscription {\n const r = result as Record<string, unknown>\n // starknet.js v6 returns a named struct or array depending on call\n const get = (key: string, index: number): unknown => {\n if (key in r) return r[key]\n const arr = result as unknown[]\n return arr[index]\n }\n\n return {\n borrower: String(get('borrower', 0)),\n lender: String(get('lender', 1)),\n duration: BigInt(String(get('duration', 2))),\n deadline: BigInt(String(get('deadline', 3))),\n signed_at: BigInt(String(get('signed_at', 4))),\n issued_debt_percentage: extractFieldU256(get('issued_debt_percentage', 5)),\n is_repaid: Boolean(get('is_repaid', 6)),\n liquidated: Boolean(get('liquidated', 7)),\n multi_lender: Boolean(get('multi_lender', 8)),\n debt_asset_count: Number(get('debt_asset_count', 9)),\n interest_asset_count: Number(get('interest_asset_count', 10)),\n collateral_asset_count: Number(get('collateral_asset_count', 11)),\n auction_started: Boolean(get('auction_started', 12)),\n auction_start_time: BigInt(String(get('auction_start_time', 13) ?? '0')),\n }\n}\n\nfunction extractFieldU256(val: unknown): bigint {\n if (typeof val === 'bigint') return val\n if (typeof val === 'object' && val !== null && 'low' in val && 'high' in val) {\n return fromU256(val as { low: bigint; high: bigint })\n }\n return BigInt(String(val))\n}\n","import { Contract, type RpcProvider, type Account } from 'starknet'\nimport type { Call } from '../types/common.js'\nimport stelaAbi from '../abi/stela.json'\nimport { toU256 } from '../utils/u256.js'\n\nexport interface ShareClientOptions {\n stelaAddress: string\n provider: RpcProvider\n account?: Account\n}\n\n/**\n * Client for ERC1155 share operations on the Stela contract.\n * Inscription IDs are token IDs — each lender receives shares as ERC1155 tokens.\n *\n * Shares are freely transferable via standard ERC1155 safeTransferFrom.\n * Any address holding shares can call redeem() after repayment/liquidation.\n */\nexport class ShareClient {\n private contract: Contract\n private address: string\n private account?: Account\n\n constructor(opts: ShareClientOptions) {\n this.address = opts.stelaAddress\n this.contract = new Contract(stelaAbi, opts.stelaAddress, opts.provider)\n this.account = opts.account\n }\n\n // ── Read Methods ───────────────────────────────────────────────────\n\n /** Get share balance for an account on a specific inscription */\n async balanceOf(account: string, inscriptionId: bigint): Promise<bigint> {\n const result = await this.contract.call('balance_of', [account, ...toU256(inscriptionId)])\n return extractBigInt(result)\n }\n\n /** Get share balances for multiple account/inscription pairs */\n async balanceOfBatch(accounts: string[], inscriptionIds: bigint[]): Promise<bigint[]> {\n if (accounts.length !== inscriptionIds.length) {\n throw new Error('accounts and inscriptionIds must have the same length')\n }\n const result = await this.contract.call('balance_of_batch', [\n accounts,\n inscriptionIds.map((id) => toU256(id)),\n ])\n const arr = result as unknown[]\n const balances = arr[0] as unknown[]\n return balances.map((b) => BigInt(String(b)))\n }\n\n /** Check if an operator is approved for all tokens of an owner */\n async isApprovedForAll(owner: string, operator: string): Promise<boolean> {\n const result = await this.contract.call('is_approved_for_all', [owner, operator])\n return Boolean((result as unknown[])[0])\n }\n\n // ── Call Builders ──────────────────────────────────────────────────\n\n /**\n * Build a call to transfer shares (ERC1155 safeTransferFrom).\n * This enables secondary market trading of lending positions.\n *\n * @param from - Current share holder\n * @param to - Recipient address\n * @param inscriptionId - The inscription (token ID)\n * @param amount - Number of shares to transfer\n * @param data - Optional calldata (empty array by default)\n */\n buildTransferShares(\n from: string,\n to: string,\n inscriptionId: bigint,\n amount: bigint,\n data: string[] = [],\n ): Call {\n return {\n contractAddress: this.address,\n entrypoint: 'safe_transfer_from',\n calldata: [from, to, ...toU256(inscriptionId), ...toU256(amount), String(data.length), ...data],\n }\n }\n\n /**\n * Build a call to approve an operator for all ERC1155 tokens.\n * Required before a marketplace contract can transfer shares on your behalf.\n *\n * @param operator - The address to approve (e.g., marketplace contract)\n * @param approved - Whether to approve or revoke\n */\n buildSetApprovalForAll(operator: string, approved: boolean): Call {\n return {\n contractAddress: this.address,\n entrypoint: 'set_approval_for_all',\n calldata: [operator, approved ? '1' : '0'],\n }\n }\n\n // ── Execute Methods ────────────────────────────────────────────────\n\n /** Transfer shares to another address */\n async transferShares(\n from: string,\n to: string,\n inscriptionId: bigint,\n amount: bigint,\n data: string[] = [],\n ): Promise<{ transaction_hash: string }> {\n if (!this.account) throw new Error('Account required for write operations')\n const result = await this.account.execute([\n this.buildTransferShares(from, to, inscriptionId, amount, data),\n ])\n return { transaction_hash: result.transaction_hash }\n }\n\n /** Approve or revoke an operator for all ERC1155 tokens */\n async setApprovalForAll(\n operator: string,\n approved: boolean,\n ): Promise<{ transaction_hash: string }> {\n if (!this.account) throw new Error('Account required for write operations')\n const result = await this.account.execute([this.buildSetApprovalForAll(operator, approved)])\n return { transaction_hash: result.transaction_hash }\n }\n}\n\nfunction extractBigInt(result: unknown): bigint {\n const arr = result as unknown[]\n if (typeof arr[0] === 'bigint') return arr[0]\n return BigInt(String(arr[0]))\n}\n","[\n {\n \"type\": \"struct\",\n \"name\": \"core::integer::u256\",\n \"members\": [\n { \"name\": \"low\", \"type\": \"core::integer::u128\" },\n { \"name\": \"high\", \"type\": \"core::integer::u128\" }\n ]\n },\n {\n \"type\": \"interface\",\n \"name\": \"erc20::IERC20\",\n \"items\": [\n {\n \"type\": \"function\",\n \"name\": \"approve\",\n \"inputs\": [\n { \"name\": \"spender\", \"type\": \"core::starknet::contract_address::ContractAddress\" },\n { \"name\": \"amount\", \"type\": \"core::integer::u256\" }\n ],\n \"outputs\": [{ \"type\": \"core::bool\" }],\n \"state_mutability\": \"external\"\n },\n {\n \"type\": \"function\",\n \"name\": \"balance_of\",\n \"inputs\": [\n { \"name\": \"account\", \"type\": \"core::starknet::contract_address::ContractAddress\" }\n ],\n \"outputs\": [{ \"type\": \"core::integer::u256\" }],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"allowance\",\n \"inputs\": [\n { \"name\": \"owner\", \"type\": \"core::starknet::contract_address::ContractAddress\" },\n { \"name\": \"spender\", \"type\": \"core::starknet::contract_address::ContractAddress\" }\n ],\n \"outputs\": [{ \"type\": \"core::integer::u256\" }],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"balanceOf\",\n \"inputs\": [\n { \"name\": \"account\", \"type\": \"core::starknet::contract_address::ContractAddress\" }\n ],\n \"outputs\": [{ \"type\": \"core::integer::u256\" }],\n \"state_mutability\": \"view\"\n }\n ]\n }\n]\n","[\n {\n \"type\": \"enum\",\n \"name\": \"core::bool\",\n \"variants\": [\n { \"name\": \"False\", \"type\": \"()\" },\n { \"name\": \"True\", \"type\": \"()\" }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"core::starknet::account::Call\",\n \"members\": [\n { \"name\": \"to\", \"type\": \"core::starknet::contract_address::ContractAddress\" },\n { \"name\": \"selector\", \"type\": \"core::felt252\" },\n { \"name\": \"calldata\", \"type\": \"core::array::Array::<core::felt252>\" }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"core::array::Span::<core::felt252>\",\n \"members\": [\n { \"name\": \"snapshot\", \"type\": \"@core::array::Array::<core::felt252>\" }\n ]\n },\n {\n \"type\": \"interface\",\n \"name\": \"locker::ILockerAccount\",\n \"items\": [\n {\n \"type\": \"function\",\n \"name\": \"__execute__\",\n \"inputs\": [\n { \"name\": \"calls\", \"type\": \"core::array::Span::<core::starknet::account::Call>\" }\n ],\n \"outputs\": [\n { \"type\": \"core::array::Array::<core::array::Span::<core::felt252>>\" }\n ],\n \"state_mutability\": \"external\"\n },\n {\n \"type\": \"function\",\n \"name\": \"is_unlocked\",\n \"inputs\": [],\n \"outputs\": [{ \"type\": \"core::bool\" }],\n \"state_mutability\": \"view\"\n }\n ]\n }\n]\n","import { Contract, type RpcProvider, type Account, hash } from 'starknet'\nimport type { Call } from '../types/common.js'\nimport type { LockerState } from '../types/locker.js'\nimport stelaAbi from '../abi/stela.json'\nimport erc20Abi from '../abi/erc20.json'\nimport lockerAbi from '../abi/locker.json'\nimport { toU256 } from '../utils/u256.js'\n\nexport class LockerClient {\n constructor(\n private stelaContract: Contract,\n private provider: RpcProvider,\n private account?: Account,\n ) {}\n\n /** Get the Locker TBA address for an inscription */\n async getLockerAddress(inscriptionId: bigint): Promise<string> {\n const contract = new Contract(stelaAbi, this.stelaContract.address, this.provider)\n const result = await contract.call('get_locker', toU256(inscriptionId))\n return String((result as unknown[])[0])\n }\n\n /** Check if a locker is unlocked */\n async isUnlocked(inscriptionId: bigint): Promise<boolean> {\n const address = await this.getLockerAddress(inscriptionId)\n const locker = new Contract(lockerAbi, address, this.provider)\n const result = await locker.call('is_unlocked')\n return Boolean((result as unknown[])[0])\n }\n\n /** Get full locker state */\n async getLockerState(inscriptionId: bigint): Promise<LockerState> {\n const address = await this.getLockerAddress(inscriptionId)\n const locker = new Contract(lockerAbi, address, this.provider)\n const result = await locker.call('is_unlocked')\n const isUnlocked = Boolean((result as unknown[])[0])\n return { address, isUnlocked }\n }\n\n /** Read ERC20 balance held by a locker */\n async getLockerBalance(inscriptionId: bigint, tokenAddress: string): Promise<bigint> {\n const lockerAddress = await this.getLockerAddress(inscriptionId)\n const token = new Contract(erc20Abi, tokenAddress, this.provider)\n const result = await token.call('balance_of', [lockerAddress])\n return BigInt((result as unknown[])[0] as string | bigint)\n }\n\n /** Read multiple ERC20 balances held by a locker */\n async getLockerBalances(inscriptionId: bigint, tokenAddresses: string[]): Promise<Map<string, bigint>> {\n const lockerAddress = await this.getLockerAddress(inscriptionId)\n const results = await Promise.all(\n tokenAddresses.map(async (addr) => {\n const token = new Contract(erc20Abi, addr, this.provider)\n const result = await token.call('balance_of', [lockerAddress])\n return [addr, BigInt((result as unknown[])[0] as string | bigint)] as const\n }),\n )\n return new Map<string, bigint>(results)\n }\n\n // ---- Governance execution through Locker ----\n\n /**\n * Build a Call to execute an arbitrary call through the Locker TBA.\n * The Locker's __execute__ function proxies calls from the locker's address.\n * This is how a DAO retains governance power over locked collateral.\n *\n * The locker uses SNIP-6 account standard (__execute__). The calldata\n * encodes an array of Call structs, each with:\n * - to: felt252 (ContractAddress)\n * - selector: felt252\n * - calldata: Array<felt252> (length-prefixed)\n */\n buildLockerExecute(lockerAddress: string, innerCalls: Call[]): Call {\n // Serialize Call[] into flat felt252 array for the Span<Call> parameter.\n // Format: [num_calls, call0_to, call0_selector, call0_calldata_len, ...call0_calldata, ...]\n const calldata: string[] = [innerCalls.length.toString()]\n for (const c of innerCalls) {\n calldata.push(c.contractAddress)\n calldata.push(hash.getSelectorFromName(c.entrypoint))\n calldata.push(c.calldata.length.toString())\n calldata.push(...c.calldata)\n }\n\n return {\n contractAddress: lockerAddress,\n entrypoint: '__execute__',\n calldata,\n }\n }\n\n /**\n * Execute a governance call through the Locker.\n * Requires account to be the inscription's borrower (NFT owner).\n */\n async executeThrough(inscriptionId: bigint, innerCall: Call): Promise<{ transaction_hash: string }> {\n if (!this.account) throw new Error('Account required for write operations')\n const lockerAddress = await this.getLockerAddress(inscriptionId)\n const call = this.buildLockerExecute(lockerAddress, [innerCall])\n const result = await this.account.execute([call])\n return { transaction_hash: result.transaction_hash }\n }\n\n /**\n * Execute multiple governance calls through the Locker in a single tx.\n */\n async executeThroughBatch(inscriptionId: bigint, innerCalls: Call[]): Promise<{ transaction_hash: string }> {\n if (!this.account) throw new Error('Account required for write operations')\n const lockerAddress = await this.getLockerAddress(inscriptionId)\n const call = this.buildLockerExecute(lockerAddress, innerCalls)\n const result = await this.account.execute([call])\n return { transaction_hash: result.transaction_hash }\n }\n}\n","import type {\n InscriptionRow,\n AssetRow,\n ApiListResponse,\n ApiDetailResponse,\n TreasuryAsset,\n ShareBalance,\n LockerInfo,\n} from '../types/api.js'\n\nexport interface ApiClientOptions {\n baseUrl?: string\n}\n\nexport interface ListInscriptionsParams {\n status?: string\n address?: string\n page?: number\n limit?: number\n}\n\n/**\n * HTTP client for the Stela indexer API.\n * Provides typed access to indexed inscription data, treasury views, and locker info.\n */\nexport class ApiClient {\n private baseUrl: string\n\n constructor(opts?: ApiClientOptions) {\n this.baseUrl = (opts?.baseUrl ?? 'https://stela-dapp.xyz/api').replace(/\\/$/, '')\n }\n\n /** List inscriptions with optional filters */\n async listInscriptions(params?: ListInscriptionsParams): Promise<ApiListResponse<InscriptionRow>> {\n const query = new URLSearchParams()\n if (params?.status) query.set('status', params.status)\n if (params?.address) query.set('address', params.address)\n if (params?.page) query.set('page', String(params.page))\n if (params?.limit) query.set('limit', String(params.limit))\n const qs = query.toString()\n return this.get<ApiListResponse<InscriptionRow>>(`/inscriptions${qs ? `?${qs}` : ''}`)\n }\n\n /** Get a single inscription by ID */\n async getInscription(id: string): Promise<ApiDetailResponse<InscriptionRow>> {\n return this.get<ApiDetailResponse<InscriptionRow>>(`/inscriptions/${id}`)\n }\n\n /** Get events for a specific inscription */\n async getInscriptionEvents(id: string): Promise<ApiListResponse<InscriptionEventRow>> {\n return this.get<ApiListResponse<InscriptionEventRow>>(`/inscriptions/${id}/events`)\n }\n\n /** Get treasury asset balances for an address */\n async getTreasuryView(address: string): Promise<ApiListResponse<TreasuryAsset>> {\n const query = new URLSearchParams({ address })\n return this.get<ApiListResponse<TreasuryAsset>>(`/treasury?${query}`)\n }\n\n /** Get locker info for inscriptions of an address */\n async getLockers(address: string): Promise<ApiListResponse<LockerInfo>> {\n const query = new URLSearchParams({ address })\n return this.get<ApiListResponse<LockerInfo>>(`/lockers?${query}`)\n }\n\n /** Get share balances for an address */\n async getShareBalances(address: string): Promise<ApiListResponse<ShareBalance>> {\n const query = new URLSearchParams({ address })\n return this.get<ApiListResponse<ShareBalance>>(`/shares?${query}`)\n }\n\n private async get<T>(path: string): Promise<T> {\n const url = `${this.baseUrl}${path}`\n const response = await fetch(url)\n if (!response.ok) {\n throw new ApiError(response.status, `API request failed: ${response.status} ${response.statusText}`, url)\n }\n return response.json() as Promise<T>\n }\n}\n\nexport class ApiError extends Error {\n constructor(\n public readonly status: number,\n message: string,\n public readonly url: string,\n ) {\n super(message)\n this.name = 'ApiError'\n }\n}\n\n/** Shape of an inscription event row from the API */\nexport interface InscriptionEventRow {\n id: number\n inscription_id: string\n event_type: string\n tx_hash: string\n block_number: number\n timestamp: string | null\n data: Record<string, unknown> | null\n}\n","import { Contract, type RpcProvider, type Account } from 'starknet'\nimport type { Network } from '../types/common.js'\nimport { STELA_ADDRESS, resolveNetwork } from '../constants/addresses.js'\nimport { InscriptionClient } from './inscription-client.js'\nimport { ShareClient } from './share-client.js'\nimport { LockerClient } from './locker-client.js'\nimport { ApiClient } from './api-client.js'\nimport stelaAbi from '../abi/stela.json'\n\nexport interface StelaSdkOptions {\n /** StarkNet RPC provider */\n provider: RpcProvider\n /** Connected account for write operations (optional for read-only) */\n account?: Account\n /** Network name or auto-detect from provider */\n network?: Network | string\n /** Custom API base URL */\n apiBaseUrl?: string\n /** Override the contract address (for custom deployments) */\n stelaAddress?: string\n}\n\n/**\n * Main SDK facade that wires together all clients.\n *\n * ```ts\n * const sdk = new StelaSdk({ provider, account, network: 'sepolia' })\n * const inscription = await sdk.inscriptions.getInscription(1n)\n * const shares = await sdk.shares.balanceOf(myAddress, 1n)\n * ```\n */\nexport class StelaSdk {\n readonly inscriptions: InscriptionClient\n readonly shares: ShareClient\n readonly locker: LockerClient\n readonly api: ApiClient\n readonly network: Network\n readonly stelaAddress: string\n\n constructor(opts: StelaSdkOptions) {\n this.network = resolveNetwork(opts.network)\n this.stelaAddress = opts.stelaAddress ?? STELA_ADDRESS[this.network]\n\n this.inscriptions = new InscriptionClient({\n stelaAddress: this.stelaAddress,\n provider: opts.provider,\n account: opts.account,\n })\n\n this.shares = new ShareClient({\n stelaAddress: this.stelaAddress,\n provider: opts.provider,\n account: opts.account,\n })\n\n const stelaContract = new Contract(stelaAbi, this.stelaAddress, opts.provider)\n this.locker = new LockerClient(stelaContract, opts.provider, opts.account)\n\n this.api = new ApiClient({ baseUrl: opts.apiBaseUrl })\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/types/common.ts","../src/types/orderbook.ts","../src/constants/addresses.ts","../src/constants/protocol.ts","../src/constants/presets.ts","../src/utils/u256.ts","../src/utils/address.ts","../src/utils/amount.ts","../src/utils/format.ts","../src/utils/status.ts","../src/utils/order.ts","../src/utils/signature.ts","../src/utils/calldata.ts","../src/tokens/registry.ts","../src/math/shares.ts","../src/math/position.ts","../src/math/rate.ts","../src/events/selectors.ts","../src/events/parser.ts","../src/offchain/hash.ts","../src/offchain/typed-data.ts","../src/offchain/signature.ts","../src/abi/stela.json","../src/client/inscription-client.ts","../src/client/share-client.ts","../src/abi/erc20.json","../src/abi/locker.json","../src/client/locker-client.ts","../src/client/api-client.ts","../src/client/stela-sdk.ts","../src/client/nonce.ts"],"names":["uint256","addAddressPadding","validateAndParseAddress","hash","Contract"],"mappings":";;;;;AAiBO,IAAM,cAAA,GAA+C;AAAA,EAC1D,MAAA;AAAA,EACA,SAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,YAAA;AAAA,EACA,SAAA;AAAA,EACA;AACF;AAGO,IAAM,aAAA,GAAmD;AAAA,EAC9D,IAAA,EAAM,MAAA;AAAA,EACN,OAAA,EAAS,SAAA;AAAA,EACT,MAAA,EAAQ,QAAA;AAAA,EACR,MAAA,EAAQ,QAAA;AAAA,EACR,UAAA,EAAY,YAAA;AAAA,EACZ,OAAA,EAAS,SAAA;AAAA,EACT,SAAA,EAAW;AACb;;;AC4DO,IAAM,eAAA,GAAmE;AAAA,EAC9E,GAAA,EAAK,IAAA;AAAA,EACL,IAAA,EAAM,CAAC,CAAA,EAAG,CAAA,GAAI,QAAQ,CAAC,CAAA;AAAA,EACvB,OAAO,CAAC,CAAA,GAAI,KAAA,EAAO,EAAA,GAAK,QAAQ,CAAC,CAAA;AAAA,EACjC,OAAO,CAAC,EAAA,GAAK,KAAA,EAAO,EAAA,GAAK,QAAQ,CAAC,CAAA;AAAA,EAClC,QAAQ,CAAC,EAAA,GAAK,KAAA,EAAO,GAAA,GAAM,QAAQ,CAAC,CAAA;AAAA,EACpC,MAAA,EAAQ,CAAC,GAAA,GAAM,KAAA,EAAO,MAAM,KAAK;AACnC;;;ACpGO,IAAM,aAAA,GAAyC;AAAA,EACpD,OAAA,EAAS,oEAAA;AAAA,EACT,OAAA,EAAS;AACX;AAEA,IAAM,cAAA,GAA4B,CAAC,SAAA,EAAW,SAAS,CAAA;AAGhD,SAAS,eAAe,GAAA,EAAuB;AACpD,EAAA,MAAM,OAAA,GAAU,KAAK,IAAA,EAAK;AAC1B,EAAA,IAAI,OAAA,IAAW,cAAA,CAAe,QAAA,CAAS,OAAkB,GAAG,OAAO,OAAA;AACnE,EAAA,IAAI,OAAA,EAAS,OAAA,CAAQ,IAAA,CAAK,CAAA,iBAAA,EAAoB,OAAO,CAAA,0BAAA,CAA4B,CAAA;AACjF,EAAA,OAAO,SAAA;AACT;AAGO,IAAM,QAAA,GAAoC;AAAA,EAC/C,OAAA,EAAS,YAAA;AAAA,EACT,OAAA,EAAS;AACX;AAGO,IAAM,eAAA,GAA2C;AAAA,EACtD,OAAA,EAAS,mCAAA;AAAA,EACT,OAAA,EAAS;AACX;;;ACzBO,IAAM,OAAA,GAAU;AAGhB,IAAM,oBAAA,GAAuB;AAG7B,IAAM,eAAA,GAA6C;AAAA,EACxD,KAAA,EAAO,CAAA;AAAA,EACP,MAAA,EAAQ,CAAA;AAAA,EACR,OAAA,EAAS,CAAA;AAAA,EACT,OAAA,EAAS;AACX;AAGO,IAAM,gBAAA,GAA8C;AAAA,EACzD,CAAA,EAAG,OAAA;AAAA,EACH,CAAA,EAAG,QAAA;AAAA,EACH,CAAA,EAAG,SAAA;AAAA,EACH,CAAA,EAAG;AACL;AAKO,IAAM,YAAA,GAAe;AAGrB,IAAM,gBAAA,GAAmB;AAGzB,IAAM,mBAAA,GAAsB;AAG5B,IAAM,mBAAA,GAAsB;;;AClB5B,IAAM,qBAAA,GAA0C;AAAA,EACrD,EAAE,KAAA,EAAO,IAAA,EAAM,OAAA,EAAS,GAAA,EAAI;AAAA,EAC5B,EAAE,KAAA,EAAO,KAAA,EAAO,OAAA,EAAS,GAAA,EAAI;AAAA,EAC7B,EAAE,KAAA,EAAO,KAAA,EAAO,OAAA,EAAS,IAAA,EAAK;AAAA,EAC9B,EAAE,KAAA,EAAO,IAAA,EAAM,OAAA,EAAS,IAAA,EAAK;AAAA,EAC7B,EAAE,KAAA,EAAO,KAAA,EAAO,OAAA,EAAS,KAAA,EAAM;AAAA,EAC/B,EAAE,KAAA,EAAO,IAAA,EAAM,OAAA,EAAS,KAAA,EAAM;AAAA,EAC9B,EAAE,KAAA,EAAO,IAAA,EAAM,OAAA,EAAS,MAAA,EAAO;AAAA,EAC/B,EAAE,KAAA,EAAO,KAAA,EAAO,OAAA,EAAS,MAAA;AAC3B;AAGO,IAAM,qBAAA,GAA0C;AAAA,EACrD,EAAE,KAAA,EAAO,IAAA,EAAM,OAAA,EAAS,MAAA,EAAO;AAAA,EAC/B,EAAE,KAAA,EAAO,KAAA,EAAO,OAAA,EAAS,OAAA,EAAQ;AAAA,EACjC,EAAE,KAAA,EAAO,KAAA,EAAO,OAAA,EAAS,MAAA,EAAQ;AAAA,EACjC,EAAE,KAAA,EAAO,KAAA,EAAO,OAAA,EAAS,MAAA,EAAQ;AAAA,EACjC,EAAE,KAAA,EAAO,KAAA,EAAO,OAAA,EAAS,MAAA;AAC3B;AAGO,IAAM,gBAAA,GAAqC;AAAA,EAChD,EAAE,KAAA,EAAO,IAAA,EAAM,OAAA,EAAS,KAAA,EAAM;AAAA,EAC9B,EAAE,KAAA,EAAO,IAAA,EAAM,OAAA,EAAS,MAAA,EAAO;AAAA,EAC/B,EAAE,KAAA,EAAO,KAAA,EAAO,OAAA,EAAS,OAAA,EAAQ;AAAA,EACjC,EAAE,KAAA,EAAO,KAAA,EAAO,OAAA,EAAS,MAAA,EAAQ;AAAA,EACjC,EAAE,KAAA,EAAO,KAAA,EAAO,OAAA,EAAS,MAAA,EAAQ;AAAA,EACjC,EAAE,KAAA,EAAO,MAAA,EAAQ,OAAA,EAAS,OAAA,EAAS;AAAA,EACnC,EAAE,KAAA,EAAO,IAAA,EAAM,OAAA,EAAS,OAAA;AAC1B;AAWO,SAAS,oBAAoB,OAAA,EAAyB;AAC3D,EAAA,IAAI,OAAA,GAAU,MAAM,OAAO,CAAA,EAAG,KAAK,KAAA,CAAM,OAAA,GAAU,EAAE,CAAC,CAAA,IAAA,CAAA;AACtD,EAAA,IAAI,OAAA,GAAU,OAAO,OAAO,CAAA,EAAG,KAAK,KAAA,CAAM,OAAA,GAAU,IAAI,CAAC,CAAA,MAAA,CAAA;AACzD,EAAA,MAAM,IAAA,GAAO,IAAA,CAAK,KAAA,CAAM,OAAA,GAAU,KAAK,CAAA;AACvC,EAAA,OAAO,GAAG,IAAI,CAAA,IAAA,EAAO,IAAA,KAAS,CAAA,GAAI,MAAM,EAAE,CAAA,CAAA;AAC5C;AC7DA,IAAM,QAAA,GAAA,CAAY,MAAM,IAAA,IAAQ,EAAA;AAChC,IAAM,QAAA,GAAA,CAAY,MAAM,IAAA,IAAQ,EAAA;AAGzB,IAAM,MAAA,GAAS,CAAC,CAAA,KAAgC;AACrD,EAAA,IAAI,CAAA,GAAI,MAAM,CAAA,GAAI,QAAA,QAAgB,IAAI,UAAA,CAAW,CAAA,yBAAA,EAA4B,CAAC,CAAA,CAAE,CAAA;AAChF,EAAA,MAAM,EAAE,GAAA,EAAK,IAAA,EAAK,GAAIA,gBAAA,CAAQ,YAAY,CAAC,CAAA;AAC3C,EAAA,OAAO,CAAC,GAAA,CAAI,QAAA,EAAS,EAAG,IAAA,CAAK,UAAU,CAAA;AACzC;AAGO,IAAM,QAAA,GAAW,CAAC,CAAA,KAA6C;AACpE,EAAA,IAAI,CAAA,CAAE,GAAA,GAAM,EAAA,IAAM,CAAA,CAAE,GAAA,GAAM,QAAA,IAAY,CAAA,CAAE,IAAA,GAAO,EAAA,IAAM,CAAA,CAAE,IAAA,GAAO,QAAA,EAAU;AACtE,IAAA,MAAM,IAAI,WAAW,mDAAmD,CAAA;AAAA,EAC1E;AACA,EAAA,OAAOA,gBAAA,CAAQ,YAAY,CAAC,CAAA;AAC9B;AAGO,IAAM,kBAAA,GAAqB,CAAC,CAAA,KACjC,IAAA,GAAO,QAAA,CAAS,CAAC,CAAA,CAAE,QAAA,CAAS,EAAE,CAAA,CAAE,QAAA,CAAS,EAAA,EAAI,GAAG;ACnB3C,SAAS,MAAM,KAAA,EAAwB;AAC5C,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,EAAU,OAAO,KAAA;AACtC,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,SAAiB,IAAA,GAAO,KAAA,CAAM,SAAS,EAAE,CAAA;AAC9D,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,SAAiB,IAAA,GAAO,KAAA,CAAM,SAAS,EAAE,CAAA;AAC9D,EAAA,OAAO,OAAO,KAAK,CAAA;AACrB;AAGO,SAAS,cAAc,OAAA,EAA0B;AACtD,EAAA,IAAI;AACF,IAAA,MAAM,GAAA,GAAM,MAAM,OAAO,CAAA;AACzB,IAAA,MAAM,MAAA,GAASC,2BAAkB,GAAG,CAAA;AACpC,IAAA,OAAO,CAAA,EAAG,MAAA,CAAO,KAAA,CAAM,CAAA,EAAG,CAAC,CAAC,CAAA,GAAA,EAAM,MAAA,CAAO,KAAA,CAAM,CAAA,CAAE,CAAC,CAAA,CAAA;AAAA,EACpD,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,OAAO,OAAO,CAAA,CAAE,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA,GAAI,KAAA;AAAA,EACxC;AACF;AAGO,SAAS,iBAAiB,OAAA,EAA0B;AACzD,EAAA,MAAM,GAAA,GAAM,MAAM,OAAO,CAAA;AACzB,EAAA,OAAOA,0BAAA,CAAkBC,gCAAA,CAAwB,GAAG,CAAC,CAAA;AACvD;AAGO,SAAS,cAAA,CAAe,GAAY,CAAA,EAAqB;AAC9D,EAAA,IAAI;AACF,IAAA,OAAO,gBAAA,CAAiB,CAAC,CAAA,KAAM,gBAAA,CAAiB,CAAC,CAAA;AAAA,EACnD,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,KAAA,CAAM,CAAC,CAAA,CAAE,WAAA,OAAkB,KAAA,CAAM,CAAC,EAAE,WAAA,EAAY;AAAA,EACzD;AACF;;;ACjCO,SAAS,WAAA,CAAY,aAAqB,QAAA,EAA0B;AACzE,EAAA,IAAI,CAAC,WAAA,IAAe,WAAA,KAAgB,GAAA,IAAO,WAAA,KAAgB,IAAI,OAAO,EAAA;AACtE,EAAA,MAAM,KAAA,GAAQ,WAAA,CAAY,KAAA,CAAM,GAAG,CAAA;AACnC,EAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,CAAC,CAAA,IAAK,GAAA;AAC1B,EAAA,MAAM,IAAA,GAAA,CAAQ,KAAA,CAAM,CAAC,CAAA,IAAK,EAAA,EAAI,MAAA,CAAO,QAAA,EAAU,GAAG,CAAA,CAAE,KAAA,CAAM,CAAA,EAAG,QAAQ,CAAA;AACrE,EAAA,OAAO,MAAA,CAAO,QAAQ,IAAI,CAAA;AAC5B;AAGO,SAAS,gBAAA,CAAiB,KAAoB,QAAA,EAA0B;AAC7E,EAAA,IAAI,CAAC,GAAA,IAAO,GAAA,KAAQ,GAAA,EAAK,OAAO,GAAA;AAChC,EAAA,MAAM,CAAA,GAAI,OAAO,GAAG,CAAA;AACpB,EAAA,IAAI,QAAA,KAAa,CAAA,EAAG,OAAO,CAAA,CAAE,QAAA,EAAS;AACtC,EAAA,MAAM,OAAA,GAAU,GAAA,IAAO,MAAA,CAAO,QAAQ,CAAA;AACtC,EAAA,MAAM,QAAQ,CAAA,GAAI,OAAA;AAClB,EAAA,MAAM,OAAO,CAAA,GAAI,OAAA;AACjB,EAAA,IAAI,IAAA,KAAS,EAAA,EAAI,OAAO,KAAA,CAAM,QAAA,EAAS;AACvC,EAAA,MAAM,OAAA,GAAU,IAAA,CAAK,QAAA,EAAS,CAAE,QAAA,CAAS,UAAU,GAAG,CAAA,CAAE,OAAA,CAAQ,KAAA,EAAO,EAAE,CAAA;AACzE,EAAA,OAAO,CAAA,EAAG,KAAK,CAAA,CAAA,EAAI,OAAO,CAAA,CAAA;AAC5B;;;ACnBO,SAAS,eAAe,OAAA,EAAkC;AAC/D,EAAA,MAAM,CAAA,GAAI,OAAO,OAAO,CAAA;AACxB,EAAA,IAAI,CAAA,GAAI,MAAM,OAAO,CAAA,EAAG,KAAK,KAAA,CAAM,CAAA,GAAI,EAAE,CAAC,CAAA,CAAA,CAAA;AAC1C,EAAA,MAAM,CAAA,GAAI,IAAA,CAAK,KAAA,CAAM,CAAA,GAAI,IAAI,CAAA;AAC7B,EAAA,IAAI,CAAA,IAAK,EAAA,EAAI,OAAO,CAAA,EAAG,IAAA,CAAK,KAAA,CAAM,CAAA,GAAI,EAAE,CAAC,CAAA,EAAA,EAAK,CAAA,GAAI,EAAE,CAAA,CAAA,CAAA;AACpD,EAAA,OAAO,GAAG,CAAC,CAAA,CAAA,CAAA;AACb;AAGO,SAAS,gBAAgB,EAAA,EAAoB;AAClD,EAAA,IAAI,EAAA,KAAO,IAAI,OAAO,IAAA;AACtB,EAAA,OAAO,IAAI,IAAA,CAAK,MAAA,CAAO,EAAE,CAAA,GAAI,GAAI,EAAE,cAAA,EAAe;AACpD;;;ACGO,SAAS,aAAA,CAAc,GAAgB,UAAA,EAAwC;AACpF,EAAA,IAAI,CAAA,CAAE,WAAW,OAAO,QAAA;AACxB,EAAA,IAAI,CAAA,CAAE,YAAY,OAAO,YAAA;AACzB,EAAA,IAAI,CAAA,CAAE,MAAA,KAAW,WAAA,EAAa,OAAO,WAAA;AAErC,EAAA,MAAM,MAAM,UAAA,IAAc,IAAA,CAAK,MAAM,IAAA,CAAK,GAAA,KAAQ,GAAI,CAAA;AACtD,EAAA,MAAM,QAAA,GAAW,MAAA,CAAO,CAAA,CAAE,SAAS,CAAA;AACnC,EAAA,MAAM,QAAA,GAAW,MAAA,CAAO,CAAA,CAAE,QAAQ,CAAA;AAClC,EAAA,MAAM,WAAW,CAAA,CAAE,QAAA,KAAa,SAAY,MAAA,CAAO,CAAA,CAAE,QAAQ,CAAA,GAAI,CAAA;AACjE,EAAA,MAAM,SAAA,GAAY,MAAA,CAAO,CAAA,CAAE,sBAAsB,CAAA;AAGjD,EAAA,IAAI,aAAa,CAAA,EAAG;AAElB,IAAA,IAAI,QAAA,GAAW,CAAA,IAAK,GAAA,GAAM,QAAA,EAAU,OAAO,SAAA;AAC3C,IAAA,OAAO,MAAA;AAAA,EACT;AAGA,EAAA,IAAI,SAAA,GAAY,SAAS,OAAO,SAAA;AAGhC,EAAA,IAAI,GAAA,GAAM,QAAA,GAAW,QAAA,EAAU,OAAO,SAAA;AAEtC,EAAA,OAAO,QAAA;AACT;AAcA,IAAM,eAAA,GAA0C;AAAA,EAC9C,OAAA,EAAS,SAAA;AAAA,EACT,SAAA,EAAW,WAAA;AAAA,EACX,YAAA,EAAc;AAChB,CAAA;AAGO,SAAS,sBAAsB,MAAA,EAAoC;AACxE,EAAA,IAAI,MAAA,KAAW,WAAW,OAAO,SAAA;AACjC,EAAA,IAAI,MAAA,KAAW,aAAa,OAAO,WAAA;AACnC,EAAA,IAAI,MAAA,KAAW,gBAAgB,OAAO,cAAA;AACtC,EAAA,OAAQ,MAAA,IAAU,gBAAgB,MAAA,GAAS,MAAA;AAC7C;AAGO,SAAS,eAAe,MAAA,EAAwB;AACrD,EAAA,OAAO,eAAA,CAAgB,MAAM,CAAA,IAAM,aAAA,CAAyC,MAAM,CAAA,IAAK,MAAA;AACzF;AAKO,IAAM,mBAAA,GAA8C;AAAA,EACzD,OAAA,EAAS,SAAA;AAAA,EACT,OAAA,EAAS,SAAA;AAAA,EACT,OAAA,EAAS,SAAA;AAAA,EACT,OAAA,EAAS,SAAA;AAAA,EACT,SAAA,EAAW;AACb;AAGO,SAAS,2BAA2B,MAAA,EAAoC;AAC7E,EAAA,MAAM,GAAA,GAA0C;AAAA,IAC9C,OAAA,EAAS,SAAA;AAAA,IACT,OAAA,EAAS,SAAA;AAAA,IACT,OAAA,EAAS,SAAA;AAAA,IACT,OAAA,EAAS,SAAA;AAAA,IACT,SAAA,EAAW;AAAA,GACb;AACA,EAAA,OAAO,GAAA,CAAI,MAAM,CAAA,IAAK,SAAA;AACxB;AAGO,SAAS,oBAAoB,MAAA,EAAwB;AAC1D,EAAA,OAAO,mBAAA,CAAoB,MAAM,CAAA,IAAK,MAAA;AACxC;AAKO,IAAM,yBAAA,GAAyD;AAAA,EACpE,sBAAM,IAAI,GAAA,CAAI,CAAC,MAAA,EAAQ,SAAS,CAAC,CAAA;AAAA,EACjC,wBAAQ,IAAI,GAAA,CAAI,CAAC,QAAA,EAAU,WAAA,EAAa,cAAc,CAAC,CAAA;AAAA,EACvD,MAAA,sBAAY,GAAA,CAAI,CAAC,UAAU,YAAA,EAAc,SAAA,EAAW,SAAA,EAAW,WAAW,CAAC;AAC7E;AAGO,IAAM,mBAAA,GAAmD;AAAA,EAC9D,IAAA,kBAAM,IAAI,GAAA,CAAI,CAAC,SAAS,CAAC,CAAA;AAAA,EACzB,MAAA,kBAAQ,IAAI,GAAA,CAAI,CAAC,SAAS,CAAC,CAAA;AAAA,EAC3B,wBAAQ,IAAI,GAAA,CAAI,CAAC,SAAA,EAAW,SAAA,EAAW,WAAW,CAAC;AACrD;AAGO,SAAS,uBAAA,CAAwB,gBAAwB,KAAA,EAAwB;AACtF,EAAA,IAAI,KAAA,KAAU,OAAO,OAAO,IAAA;AAC5B,EAAA,OAAO,yBAAA,CAA0B,KAAK,CAAA,EAAG,GAAA,CAAI,cAAc,CAAA,IAAK,KAAA;AAClE;AAGO,SAAS,iBAAA,CAAkB,aAAqB,KAAA,EAAwB;AAC7E,EAAA,IAAI,KAAA,KAAU,OAAO,OAAO,IAAA;AAC5B,EAAA,OAAO,mBAAA,CAAoB,KAAK,CAAA,EAAG,GAAA,CAAI,WAAW,CAAA,IAAK,KAAA;AACzD;AAKO,IAAM,mBAAA,GAA8C;AAAA,EACzD,IAAA,EAAM,oEAAA;AAAA,EACN,OAAA,EAAS,iEAAA;AAAA,EACT,MAAA,EAAQ,iEAAA;AAAA,EACR,MAAA,EAAQ,gEAAA;AAAA,EACR,UAAA,EAAY,oEAAA;AAAA,EACZ,OAAA,EAAS,gEAAA;AAAA,EACT,SAAA,EAAW,sEAAA;AAAA,EACX,YAAA,EAAc,iFAAA;AAAA,EACd,OAAA,EAAS,0DAAA;AAAA,EACT,SAAA,EAAW,qDAAA;AAAA,EACX,OAAA,EAAS,6DAAA;AAAA,EACT,OAAA,EAAS,+DAAA;AAAA,EACT,OAAA,EAAS;AACX;AAGO,IAAM,oBAAA,GAA+C;AAAA,EAC1D,IAAA,EAAM,6DAAA;AAAA,EACN,QAAA,EAAU,0DAAA;AAAA,EACV,UAAA,EAAY,yDAAA;AAAA,EACZ,QAAA,EAAU,mDAAA;AAAA,EACV,GAAA,EAAK,+DAAA;AAAA,EACL,QAAA,EAAU,2DAAA;AAAA,EACV,MAAA,EAAQ;AACV;AASO,SAAS,aAAa,GAAA,EAOV;AACjB,EAAA,MAAM,OAAO,aAAA,CAAc;AAAA,IACzB,SAAA,EAAW,MAAA,CAAO,GAAA,CAAI,SAAA,IAAa,GAAG,CAAA;AAAA,IACtC,QAAA,EAAU,MAAA,CAAO,GAAA,CAAI,QAAQ,CAAA;AAAA,IAC7B,sBAAA,EAAwB,MAAA,CAAO,GAAA,CAAI,sBAAsB,CAAA;AAAA,IACzD,SAAA,EAAW,IAAI,MAAA,KAAW,QAAA;AAAA,IAC1B,UAAA,EAAY,IAAI,MAAA,KAAW,YAAA;AAAA,IAC3B,QAAA,EAAU,MAAA,CAAO,GAAA,CAAI,QAAA,IAAY,GAAG,CAAA;AAAA,IACpC,QAAQ,GAAA,CAAI;AAAA,GACb,CAAA;AAGD,EAAA,IAAI,IAAI,eAAA,EAAiB;AACvB,IAAA,OAAO,WAAA;AAAA,EACT;AAGA,EAAA,IAAI,IAAA,KAAS,aAAa,GAAA,CAAI,SAAA,IAAa,OAAO,GAAA,CAAI,SAAS,IAAI,EAAA,EAAI;AACrE,IAAA,MAAM,QAAA,GAAW,MAAA,CAAO,GAAA,CAAI,SAAS,CAAA;AACrC,IAAA,MAAM,QAAA,GAAW,MAAA,CAAO,GAAA,CAAI,QAAQ,CAAA;AACpC,IAAA,MAAM,UAAA,GAAa,OAAO,IAAA,CAAK,KAAA,CAAM,KAAK,GAAA,EAAI,GAAI,GAAI,CAAC,CAAA;AACvD,IAAA,MAAM,aAAa,QAAA,GAAW,QAAA;AAE9B,IAAA,IAAI,UAAA,IAAc,aAAa,YAAA,EAAc;AAC3C,MAAA,OAAO,cAAA;AAAA,IACT;AAEA,IAAA,OAAO,SAAA;AAAA,EACT;AAEA,EAAA,OAAO,IAAA;AACT;;;ACpKO,SAAS,mBAAmB,GAAA,EAAoC;AACrE,EAAA,OAAO;AAAA,IACL,QAAA,EAAU,IAAI,QAAA,IAAY,EAAA;AAAA,IAC1B,UAAA,EAAY,GAAA,CAAI,WAAA,IAAe,GAAA,CAAI,cAAc,EAAC;AAAA,IAClD,cAAA,EAAgB,GAAA,CAAI,eAAA,IAAmB,GAAA,CAAI,kBAAkB,EAAC;AAAA,IAC9D,gBAAA,EAAkB,GAAA,CAAI,iBAAA,IAAqB,GAAA,CAAI,oBAAoB,EAAC;AAAA,IACpE,QAAA,EAAU,IAAI,QAAA,IAAY,GAAA;AAAA,IAC1B,QAAA,EAAU,IAAI,QAAA,IAAY,GAAA;AAAA,IAC1B,WAAA,EAAa,GAAA,CAAI,YAAA,IAAgB,GAAA,CAAI,WAAA,IAAe;AAAA,GACtD;AACF;AAGA,SAAS,eAAe,GAAA,EAAiC;AACvD,EAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,GAAG,CAAA,SAAU,EAAC;AACjC,EAAA,OAAO,GAAA,CAAI,MAAA;AAAA,IACT,CAAC,CAAA,KACC,CAAA,IAAK,IAAA,IAAQ,OAAO,CAAA,KAAM,QAAA,IAC1B,OAAQ,CAAA,CAA8B,aAAA,KAAkB,QAAA,IACxD,OAAQ,EAA8B,UAAA,KAAe;AAAA,GACzD,CAAE,GAAA,CAAI,CAAC,CAAA,MAAO;AAAA,IACZ,aAAA,EAAe,MAAA,CAAO,CAAA,CAAE,aAAa,CAAA;AAAA,IACrC,UAAA,EAAY,MAAA,CAAO,CAAA,CAAE,UAAU,CAAA;AAAA,IAC/B,KAAA,EAAO,MAAA,CAAO,CAAA,CAAE,KAAA,IAAS,GAAG,CAAA;AAAA,IAC5B,QAAA,EAAU,MAAA,CAAO,CAAA,CAAE,QAAA,IAAY,GAAG;AAAA,GACpC,CAAE,CAAA;AACJ;AAUO,SAAS,cAAc,GAAA,EAAuD;AACnF,EAAA,IAAI,SAAkC,EAAC;AACvC,EAAA,MAAM,MAAM,GAAA,CAAI,UAAA;AAChB,EAAA,IAAI,OAAO,QAAQ,QAAA,EAAU;AAC3B,IAAA,IAAI;AAAE,MAAA,MAAA,GAAS,IAAA,CAAK,MAAM,GAAG,CAAA;AAAA,IAAE,CAAA,CAAA,MAAQ;AAAE,MAAA,MAAA,GAAS,EAAC;AAAA,IAAE;AAAA,EACvD,CAAA,MAAA,IAAW,GAAA,IAAO,OAAO,GAAA,KAAQ,QAAA,EAAU;AACzC,IAAA,MAAA,GAAS,GAAA;AAAA,EACX;AAEA,EAAA,MAAM,UAAA,GAAa,cAAA,CAAe,MAAA,CAAO,UAAA,IAAc,OAAO,WAAW,CAAA;AACzE,EAAA,MAAM,cAAA,GAAiB,cAAA,CAAe,MAAA,CAAO,cAAA,IAAkB,OAAO,eAAe,CAAA;AACrF,EAAA,MAAM,gBAAA,GAAmB,cAAA,CAAe,MAAA,CAAO,gBAAA,IAAoB,OAAO,iBAAiB,CAAA;AAI3F,EAAA,MAAM,EAAE,kBAAA,EAAoB,MAAA,EAAQ,GAAG,SAAQ,GAAI,GAAA;AACnD,EAAA,MAAM,UAAA,GAAa,GAAA,CAAI,MAAA,KAAW,SAAA,IAAa,MAAA,IAAU,IAAA;AAEzD,EAAA,OAAO;AAAA,IACL,GAAG,OAAA;AAAA,IACH,GAAI,UAAA,GAAa,EAAE,kBAAA,EAAoB,MAAA,KAAW,EAAC;AAAA,IACnD,UAAA,EAAY;AAAA,MACV,QAAA,EAAU,OAAO,QAAA,IAAY,EAAA;AAAA,MAC7B,UAAA;AAAA,MACA,cAAA;AAAA,MACA,gBAAA;AAAA,MACA,WAAW,UAAA,CAAW,MAAA;AAAA,MACtB,eAAe,cAAA,CAAe,MAAA;AAAA,MAC9B,iBAAiB,gBAAA,CAAiB,MAAA;AAAA,MAClC,QAAA,EAAU,MAAA,CAAO,MAAA,CAAO,QAAA,IAAY,GAAG,CAAA;AAAA,MACvC,QAAA,EAAU,MAAA,CAAO,MAAA,CAAO,QAAA,IAAY,GAAG,CAAA;AAAA,MACvC,WAAA,EAAa,MAAA,CAAO,WAAA,IAAe,MAAA,CAAO,YAAA,IAAgB,KAAA;AAAA,MAC1D,OAAO,MAAA,CAAO,MAAA,CAAO,KAAA,IAAS,GAAA,CAAI,SAAS,GAAG,CAAA;AAAA,MAC9C,SAAA,EAAW,OAAO,SAAA,IAAa;AAAA;AACjC,GACF;AACF;;;ACtGO,SAAS,UAAU,SAAA,EAA8B;AACtD,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,SAAS,CAAA,EAAG;AAC5B,IAAA,OAAO,SAAA,CAAU,GAAA,CAAI,CAAC,CAAA,KAAe,OAAO,CAAA,KAAM,QAAA,GAAW,IAAA,GAAO,CAAA,CAAE,QAAA,CAAS,EAAE,CAAA,GAAI,MAAA,CAAO,CAAC,CAAC,CAAA;AAAA,EAChG;AACA,EAAA,MAAM,GAAA,GAAM,SAAA;AACZ,EAAA,OAAO,CAAC,GAAA,CAAI,CAAA,EAAG,IAAI,CAAC,CAAA,CAAE,IAAI,CAAC,CAAA,KAAe,OAAO,CAAA,KAAM,QAAA,GAAW,OAAO,CAAA,CAAE,QAAA,CAAS,EAAE,CAAA,GAAI,MAAA,CAAO,CAAC,CAAC,CAAA;AACrG;AAMO,SAAS,gBAAgB,GAAA,EAAkC;AAChE,EAAA,IAAI,MAAM,OAAA,CAAQ,GAAG,GAAG,OAAO,GAAA,CAAI,IAAI,MAAM,CAAA;AAC7C,EAAA,IAAI,OAAO,QAAQ,QAAA,EAAU;AAC3B,IAAA,IAAI,GAAA,CAAI,UAAA,CAAW,GAAG,CAAA,EAAG;AACvB,MAAA,MAAM,MAAA,GAAS,IAAA,CAAK,KAAA,CAAM,GAAG,CAAA;AAC7B,MAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,MAAM,CAAA,IAAK,MAAA,CAAO,SAAS,CAAA,IAAK,CAAC,MAAA,CAAO,KAAA,CAAM,CAAC,CAAA,KAAe,OAAO,MAAM,QAAA,IAAY,OAAO,MAAM,QAAQ,CAAA;AAC7H,QAAA,MAAM,IAAI,MAAM,gCAAgC,CAAA;AAClD,MAAA,OAAO,MAAA,CAAO,IAAI,MAAM,CAAA;AAAA,IAC1B;AACA,IAAA,IAAI,GAAA,CAAI,UAAA,CAAW,GAAG,CAAA,EAAG;AACvB,MAAA,MAAM,GAAA,GAAM,IAAA,CAAK,KAAA,CAAM,GAAG,CAAA;AAC1B,MAAA,IAAI,OAAO,GAAA,CAAI,CAAA,KAAM,QAAA,IAAY,OAAO,IAAI,CAAA,KAAM,QAAA;AAChD,QAAA,MAAM,IAAI,MAAM,iDAAiD,CAAA;AACnE,MAAA,OAAO,CAAC,GAAA,CAAI,CAAA,EAAG,GAAA,CAAI,CAAC,CAAA;AAAA,IACtB;AACA,IAAA,MAAM,KAAA,GAAQ,GAAA,CAAI,KAAA,CAAM,GAAG,CAAA;AAC3B,IAAA,IAAI,MAAM,MAAA,GAAS,CAAA,EAAG,MAAM,IAAI,MAAM,qDAAqD,CAAA;AAC3F,IAAA,OAAO,KAAA;AAAA,EACT;AACA,EAAA,MAAM,IAAI,MAAM,0BAA0B,CAAA;AAC5C;;;ACtBO,SAAS,uBAAuB,MAAA,EAAiC;AACtE,EAAA,MAAM,QAAA,GAAqB,CAAC,MAAA,CAAO,MAAA,CAAO,MAAM,CAAC,CAAA;AACjD,EAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AAC1B,IAAA,MAAM,OAAA,GAAU,eAAA,CAAgB,KAAA,CAAM,UAAU,CAAA,IAAK,CAAA;AACrD,IAAA,MAAM,CAAC,UAAU,SAAS,CAAA,GAAI,OAAO,MAAA,CAAO,KAAA,CAAM,KAAK,CAAC,CAAA;AACxD,IAAA,MAAM,CAAC,YAAY,WAAW,CAAA,GAAI,OAAO,MAAA,CAAO,KAAA,CAAM,QAAQ,CAAC,CAAA;AAC/D,IAAA,QAAA,CAAS,IAAA;AAAA,MACP,gBAAA,CAAiB,MAAM,aAAa,CAAA;AAAA,MACpC,OAAO,OAAO,CAAA;AAAA,MACd,QAAA;AAAA,MACA,SAAA;AAAA,MACA,UAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF;AACA,EAAA,OAAO,QAAA;AACT;AAGO,SAAS,eAAA,CACd,UACA,MAAA,EAC+C;AAC/C,EAAA,MAAM,QAAQ,MAAA,CAAO,MAAA,CAAO,QAAA,CAAS,MAAM,CAAC,CAAC,CAAA;AAC7C,EAAA,IAAI,MAAM,MAAA,GAAS,CAAA;AACnB,EAAA,MAAM,SAAwB,EAAC;AAE/B,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,KAAA,EAAO,CAAA,EAAA,EAAK;AAC9B,IAAA,MAAM,OAAA,GAAU,gBAAA,CAAiB,QAAA,CAAS,GAAG,CAAC,CAAA;AAC9C,IAAA,MAAM,WAAW,MAAA,CAAO,MAAA,CAAO,SAAS,GAAA,GAAM,CAAC,CAAC,CAAC,CAAA;AACjD,IAAA,MAAM,QAAA,GAAW,MAAA,CAAO,QAAA,CAAS,GAAA,GAAM,CAAC,CAAC,CAAA;AACzC,IAAA,MAAM,SAAA,GAAY,MAAA,CAAO,QAAA,CAAS,GAAA,GAAM,CAAC,CAAC,CAAA;AAC1C,IAAA,MAAM,UAAA,GAAa,MAAA,CAAO,QAAA,CAAS,GAAA,GAAM,CAAC,CAAC,CAAA;AAC3C,IAAA,MAAM,WAAA,GAAc,MAAA,CAAO,QAAA,CAAS,GAAA,GAAM,CAAC,CAAC,CAAA;AAE5C,IAAA,MAAA,CAAO,IAAA,CAAK;AAAA,MACV,aAAA,EAAe,OAAA;AAAA,MACf,UAAA,EAAY,gBAAA,CAAiB,QAAQ,CAAA,IAAM,SAAA;AAAA,MAC3C,KAAA,EAAO,SAAS,EAAE,GAAA,EAAK,UAAU,IAAA,EAAM,SAAA,EAAW,CAAA,CAAE,QAAA,EAAS;AAAA,MAC7D,QAAA,EAAU,SAAS,EAAE,GAAA,EAAK,YAAY,IAAA,EAAM,WAAA,EAAa,CAAA,CAAE,QAAA;AAAS,KACrE,CAAA;AACD,IAAA,GAAA,IAAO,CAAA;AAAA,EACT;AAEA,EAAA,OAAO,EAAE,MAAA,EAAQ,UAAA,EAAY,GAAA,EAAI;AACnC;AAGO,SAAS,2BAA2B,GAAA,EAAuB;AAChE,EAAA,IAAI,KAAA;AACJ,EAAA,IAAI,GAAA,CAAI,UAAA,CAAW,GAAG,CAAA,EAAG;AACvB,IAAA,KAAA,GAAQ,IAAA,CAAK,MAAM,GAAG,CAAA;AAAA,EACxB,CAAA,MAAA,IAAW,GAAA,CAAI,UAAA,CAAW,GAAG,CAAA,EAAG;AAC9B,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,KAAA,CAAM,GAAG,CAAA;AAC1B,IAAA,KAAA,GAAQ,CAAC,GAAA,CAAI,CAAA,EAAG,GAAA,CAAI,CAAC,CAAA;AAAA,EACvB,CAAA,MAAO;AACL,IAAA,KAAA,GAAQ,GAAA,CAAI,MAAM,GAAG,CAAA;AAAA,EACvB;AACA,EAAA,OAAO,CAAC,MAAA,CAAO,KAAA,CAAM,MAAM,CAAA,EAAG,GAAG,KAAK,CAAA;AACxC;AAGA,SAAS,eAAe,GAAA,EAAqB;AAC3C,EAAA,MAAM,QAAQ,GAAA,CAAI,WAAA,EAAY,CAAE,OAAA,CAAQ,OAAO,EAAE,CAAA;AACjD,EAAA,OAAO,IAAA,GAAO,KAAA;AAChB;AAGA,IAAM,2BAAA,GAA8B,mEAAA;AACpC,IAAM,eAAA,GAAkB,mEAAA;AACxB,IAAM,qBAAA,GAAwB,mEAAA;AAK9B,SAAS,QAAA,CAAS,UAAoB,SAAA,EAAyC;AAC7E,EAAA,MAAM,WAAW,MAAA,CAAO,MAAA,CAAO,QAAA,CAAS,CAAC,CAAC,CAAC,CAAA;AAE3C,EAAA,IAAI,QAAA,GAAW,CAAA,IAAK,QAAA,GAAW,GAAA,EAAK;AAElC,IAAA,IAAI,GAAA,GAAM,CAAA;AACV,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,QAAA,EAAU,CAAA,EAAA,EAAK;AACjC,MAAA,MAAM,QAAA,GAAW,cAAA,CAAe,QAAA,CAAS,GAAA,GAAM,CAAC,CAAC,CAAA;AACjD,MAAA,MAAM,QAAQ,MAAA,CAAO,MAAA,CAAO,SAAS,GAAA,GAAM,CAAC,CAAC,CAAC,CAAA;AAC9C,MAAA,MAAM,UAAU,GAAA,GAAM,CAAA;AACtB,MAAA,IAAI,SAAA,CAAU,QAAA,CAAS,QAAQ,CAAA,EAAG;AAChC,QAAA,OAAO,EAAE,UAAU,EAAA,EAAI,QAAA,CAAS,MAAM,OAAA,EAAS,OAAA,GAAU,KAAK,CAAA,EAAE;AAAA,MAClE;AACA,MAAA,GAAA,GAAM,OAAA,GAAU,KAAA;AAAA,IAClB;AAAA,EACF;AAEA,EAAA,OAAO,IAAA;AACT;AAGO,SAAS,yBAAyB,QAAA,EAIhC;AACP,EAAA,IAAI;AACF,IAAA,MAAM,QAAQ,QAAA,CAAS,QAAA,EAAU,CAAC,2BAAA,EAA6B,eAAA,EAAiB,qBAAqB,CAAC,CAAA;AACtG,IAAA,IAAI,CAAC,OAAO,OAAO,IAAA;AAEnB,IAAA,IAAI,MAAA;AACJ,IAAA,IAAI,KAAA,CAAM,aAAa,2BAAA,EAA6B;AAElD,MAAA,MAAA,GAAS,CAAA;AAAA,IACX,CAAA,MAAA,IAAW,KAAA,CAAM,QAAA,KAAa,eAAA,EAAiB;AAE7C,MAAA,MAAA,GAAS,EAAA;AAAA,IACX,CAAA,MAAO;AAGL,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,MAAM,EAAE,QAAQ,IAAA,EAAM,UAAA,EAAY,WAAU,GAAI,eAAA,CAAgB,KAAA,CAAM,EAAA,EAAI,MAAM,CAAA;AAChF,IAAA,MAAM,EAAE,QAAQ,QAAA,EAAU,UAAA,EAAY,eAAc,GAAI,eAAA,CAAgB,KAAA,CAAM,EAAA,EAAI,SAAS,CAAA;AAC3F,IAAA,MAAM,EAAE,MAAA,EAAQ,UAAA,KAAe,eAAA,CAAgB,KAAA,CAAM,IAAI,aAAa,CAAA;AAEtE,IAAA,OAAO,EAAE,IAAA,EAAM,QAAA,EAAU,UAAA,EAAW;AAAA,EACtC,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,IAAA;AAAA,EACT;AACF;;;AC7IO,IAAM,MAAA,GAAsB;AAAA,EACjC;AAAA,IACE,MAAA,EAAQ,KAAA;AAAA,IACR,IAAA,EAAM,OAAA;AAAA,IACN,QAAA,EAAU,EAAA;AAAA,IACV,OAAA,EACE,gGAAA;AAAA,IACF,SAAA,EAAW;AAAA,MACT,OAAA,EAAS,oEAAA;AAAA,MACT,OAAA,EAAS;AAAA;AACX,GACF;AAAA,EACA;AAAA,IACE,MAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAM,gBAAA;AAAA,IACN,QAAA,EAAU,EAAA;AAAA,IACV,OAAA,EAAS,uEAAA;AAAA,IACT,SAAA,EAAW;AAAA,MACT,OAAA,EAAS,oEAAA;AAAA,MACT,OAAA,EAAS;AAAA;AACX,GACF;AAAA,EACA;AAAA,IACE,MAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAM,UAAA;AAAA,IACN,QAAA,EAAU,CAAA;AAAA,IACV,OAAA,EACE,6IAAA;AAAA,IACF,SAAA,EAAW;AAAA,MACT,OAAA,EAAS,oEAAA;AAAA,MACT,OAAA,EAAS;AAAA;AACX,GACF;AAAA,EACA;AAAA,IACE,MAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAM,YAAA;AAAA,IACN,QAAA,EAAU,CAAA;AAAA,IACV,OAAA,EACE,6IAAA;AAAA,IACF,SAAA,EAAW;AAAA,MACT,OAAA,EAAS,oEAAA;AAAA,MACT,OAAA,EAAS;AAAA;AACX,GACF;AAAA,EACA;AAAA,IACE,MAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAM,iBAAA;AAAA,IACN,QAAA,EAAU,CAAA;AAAA,IACV,OAAA,EACE,6IAAA;AAAA,IACF,SAAA,EAAW;AAAA,MACT,OAAA,EAAS,oEAAA;AAAA,MACT,OAAA,EAAS;AAAA;AACX,GACF;AAAA,EACA;AAAA,IACE,MAAA,EAAQ,KAAA;AAAA,IACR,IAAA,EAAM,gBAAA;AAAA,IACN,QAAA,EAAU,EAAA;AAAA,IACV,OAAA,EACE,6IAAA;AAAA,IACF,SAAA,EAAW;AAAA,MACT,OAAA,EAAS;AAAA;AACX,GACF;AAAA,EACA;AAAA,IACE,MAAA,EAAQ,QAAA;AAAA,IACR,IAAA,EAAM,eAAA;AAAA,IACN,QAAA,EAAU,EAAA;AAAA,IACV,OAAA,EAAS,qEAAA;AAAA,IACT,SAAA,EAAW;AAAA,MACT,OAAA,EAAS,oEAAA;AAAA,MACT,OAAA,EAAS;AAAA;AACX,GACF;AAAA;AAAA,EAEA;AAAA,IACE,MAAA,EAAQ,OAAA;AAAA,IACR,IAAA,EAAM,WAAA;AAAA,IACN,QAAA,EAAU,CAAA;AAAA,IACV,SAAA,EAAW;AAAA,MACT,OAAA,EAAS;AAAA;AACX,GACF;AAAA,EACA;AAAA,IACE,MAAA,EAAQ,OAAA;AAAA,IACR,IAAA,EAAM,WAAA;AAAA,IACN,QAAA,EAAU,EAAA;AAAA,IACV,SAAA,EAAW;AAAA,MACT,OAAA,EAAS;AAAA;AACX,GACF;AAAA,EACA;AAAA,IACE,MAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAM,UAAA;AAAA,IACN,QAAA,EAAU,EAAA;AAAA,IACV,SAAA,EAAW;AAAA,MACT,OAAA,EAAS;AAAA;AACX,GACF;AAAA,EACA;AAAA,IACE,MAAA,EAAQ,UAAA;AAAA,IACR,IAAA,EAAM,WAAA;AAAA,IACN,QAAA,EAAU,CAAA;AAAA,IACV,SAAA,EAAW;AAAA,MACT,OAAA,EAAS;AAAA;AACX,GACF;AAAA;AAAA,EAEA;AAAA,IACE,MAAA,EAAQ,SAAA;AAAA,IACR,IAAA,EAAM,eAAA;AAAA,IACN,QAAA,EAAU,CAAA;AAAA,IACV,SAAA,EAAW,QAAA;AAAA,IACX,SAAA,EAAW;AAAA,MACT,OAAA,EAAS;AAAA;AACX,GACF;AAAA,EACA;AAAA,IACE,MAAA,EAAQ,SAAA;AAAA,IACR,IAAA,EAAM,aAAA;AAAA,IACN,QAAA,EAAU,CAAA;AAAA,IACV,SAAA,EAAW,QAAA;AAAA,IACX,SAAA,EAAW;AAAA,MACT,OAAA,EAAS;AAAA;AACX;AAEJ;AAGA,SAAS,aAAa,IAAA,EAAsB;AAC1C,EAAA,OAAO,OAAO,IAAA,CAAK,OAAA,CAAQ,QAAA,EAAU,EAAE,EAAE,WAAA,EAAY;AACvD;AAGO,SAAS,kBAAkB,OAAA,EAA8B;AAC9D,EAAA,OAAO,MAAA,CAAO,MAAA;AAAA,IACZ,CAAC,MAAM,CAAA,CAAE,SAAA,KAAc,YAAY,CAAA,CAAE,SAAA,CAAU,OAAmC,CAAA,KAAM;AAAA,GAC1F;AACF;AAGO,SAAS,oBAAoB,OAAA,EAA8B;AAChE,EAAA,OAAO,MAAA,CAAO,OAAO,CAAC,CAAA,KAAM,EAAE,SAAA,CAAU,OAAmC,MAAM,MAAS,CAAA;AAC5F;AAGO,SAAS,mBAAmB,OAAA,EAAwC;AACzE,EAAA,MAAM,UAAA,GAAa,aAAa,OAAO,CAAA;AACvC,EAAA,OAAO,MAAA,CAAO,IAAA;AAAA,IAAK,CAAC,CAAA,KAClB,MAAA,CAAO,MAAA,CAAO,EAAE,SAAS,CAAA,CAAE,IAAA,CAAK,CAAC,MAAM,CAAA,KAAM,MAAA,IAAa,YAAA,CAAa,CAAC,MAAM,UAAU;AAAA,GAC1F;AACF;;;AC3JO,SAAS,eAAA,CACd,UAAA,EACA,WAAA,EACA,uBAAA,EACQ;AACR,EAAA,MAAM,WAAA,GAAc,uBAAA,KAA4B,EAAA,GAAK,EAAA,GAAK,uBAAA;AAC1D,EAAA,OAAQ,UAAA,IAAc,cAAc,oBAAA,CAAA,GAAyB,WAAA;AAC/D;AAGO,SAAS,iBAAA,CAAkB,OAAe,UAAA,EAA4B;AAC3E,EAAA,OAAQ,QAAQ,UAAA,GAAc,OAAA;AAChC;AAGO,SAAS,kBAAA,CACd,MAAA,EACA,WAAA,EACA,uBAAA,EACQ;AACR,EAAA,MAAM,YAAA,GAAe,uBAAA,KAA4B,EAAA,GAAK,EAAA,GAAK,uBAAA;AAC3D,EAAA,OAAQ,MAAA,GAAS,gBAAiB,WAAA,GAAc,oBAAA,CAAA;AAClD;AAGO,SAAS,kBAAA,CAAmB,QAAgB,MAAA,EAAwB;AACzE,EAAA,OAAQ,SAAS,MAAA,GAAU,OAAA;AAC7B;AAGO,SAAS,OAAA,CAAQ,GAAW,CAAA,EAAmB;AACpD,EAAA,IAAI,CAAA,KAAM,IAAI,OAAO,EAAA;AACrB,EAAA,OAAA,CAAQ,CAAA,GAAI,IAAI,EAAA,IAAM,CAAA;AACxB;AAWO,SAAS,eAAA,CAAgB,MAAA,EAAgB,OAAA,EAAiB,QAAA,EAA0B;AACzF,EAAA,IAAI,MAAA,KAAW,EAAA,IAAM,OAAA,KAAY,EAAA,EAAI,OAAO,EAAA;AAC5C,EAAA,IAAI,OAAA,IAAW,UAAU,OAAO,MAAA;AAChC,EAAA,OAAO,OAAA,CAAQ,MAAA,GAAS,OAAA,EAAS,QAAQ,CAAA;AAC3C;;;AC9CO,IAAM,2BAAA,GAA8B;AAgDpC,SAAS,kBAAA,CAAmB,QAAgB,WAAA,EAA6B;AAC9E,EAAA,IAAI,WAAA,KAAgB,IAAI,OAAO,EAAA;AAC/B,EAAA,OAAQ,SAAS,OAAA,GAAW,WAAA;AAC9B;AAQO,SAAS,sBAAA,CACd,UAAA,EACA,MAAA,EACA,WAAA,EACQ;AACR,EAAA,IAAI,WAAA,KAAgB,EAAA,IAAM,MAAA,KAAW,EAAA,EAAI,OAAO,EAAA;AAChD,EAAA,OAAQ,aAAa,MAAA,GAAU,WAAA;AACjC;AAcO,SAAS,qBAAqB,MAAA,EASnB;AAChB,EAAA,MAAM,EAAE,MAAA,EAAQ,WAAA,EAAa,OAAA,EAAS,UAAS,GAAI,MAAA;AAEnD,EAAA,MAAM,QAAA,GAAW,kBAAA,CAAmB,MAAA,EAAQ,WAAW,CAAA;AAEvD,EAAA,MAAM,IAAA,GAAqB,MAAA,CAAO,UAAA,CAAW,GAAA,CAAI,CAAC,KAAA,MAAW;AAAA,IAC3D,KAAA;AAAA,IACA,iBAAA,EAAmB,sBAAA,CAAuB,KAAA,CAAM,KAAA,EAAO,QAAQ,WAAW;AAAA,GAC5E,CAAE,CAAA;AAEF,EAAA,MAAM,QAAA,GAAmC,MAAA,CAAO,cAAA,CAAe,GAAA,CAAI,CAAC,KAAA,KAAU;AAC5E,IAAA,MAAM,YAAA,GAAe,sBAAA,CAAuB,KAAA,CAAM,KAAA,EAAO,QAAQ,WAAW,CAAA;AAC5E,IAAA,MAAM,kBACJ,QAAA,KAAa,EAAA,GAAK,eAAe,eAAA,CAAgB,YAAA,EAAc,SAAS,QAAQ,CAAA;AAClF,IAAA,OAAO,EAAE,KAAA,EAAO,YAAA,EAAc,eAAA,EAAgB;AAAA,EAChD,CAAC,CAAA;AAED,EAAA,MAAM,UAAA,GAA2B,MAAA,CAAO,gBAAA,CAAiB,GAAA,CAAI,CAAC,KAAA,MAAW;AAAA,IACvE,KAAA;AAAA,IACA,iBAAA,EAAmB,sBAAA,CAAuB,KAAA,CAAM,KAAA,EAAO,QAAQ,WAAW;AAAA,GAC5E,CAAE,CAAA;AAEF,EAAA,OAAO;AAAA,IACL,eAAe,MAAA,CAAO,aAAA;AAAA,IACtB,MAAA;AAAA,IACA,WAAA;AAAA,IACA,QAAA;AAAA,IACA,IAAA;AAAA,IACA,QAAA;AAAA,IACA,UAAA;AAAA,IACA,OAAA,EAAS,QAAA;AAAA,IACT,OAAA;AAAA,IACA;AAAA,GACF;AACF;AAeO,SAAS,yBAAA,CACd,MAAA,EACA,OAAA,EACA,QAAA,EACA,gBAAwB,2BAAA,EAChB;AACR,EAAA,IAAI,QAAA,KAAa,IAAI,OAAO,MAAA;AAC5B,EAAA,MAAM,kBAAkB,OAAA,GAAU,aAAA;AAClC,EAAA,OAAO,eAAA,CAAgB,MAAA,EAAQ,eAAA,EAAiB,QAAQ,CAAA;AAC1D;AAUO,SAAS,yBAAyB,MAAA,EAQoB;AAC3D,EAAA,MAAM,EAAE,MAAA,EAAQ,WAAA,EAAa,OAAA,EAAS,UAAS,GAAI,MAAA;AACnD,EAAA,MAAM,MAAA,GAAS,OAAO,aAAA,IAAiB,2BAAA;AAEvC,EAAA,MAAM,SAAA,GAA0B,MAAA,CAAO,UAAA,CAAW,GAAA,CAAI,CAAC,KAAA,MAAW;AAAA,IAChE,KAAA;AAAA,IACA,iBAAA,EAAmB,sBAAA,CAAuB,KAAA,CAAM,KAAA,EAAO,QAAQ,WAAW;AAAA,GAC5E,CAAE,CAAA;AAEF,EAAA,MAAM,aAAA,GAA8B,MAAA,CAAO,cAAA,CAAe,GAAA,CAAI,CAAC,KAAA,KAAU;AACvE,IAAA,MAAM,YAAA,GAAe,sBAAA,CAAuB,KAAA,CAAM,KAAA,EAAO,QAAQ,WAAW,CAAA;AAC5E,IAAA,MAAM,WAAA,GAAc,yBAAA,CAA0B,YAAA,EAAc,OAAA,EAAS,UAAU,MAAM,CAAA;AACrF,IAAA,OAAO,EAAE,KAAA,EAAO,iBAAA,EAAmB,WAAA,EAAY;AAAA,EACjD,CAAC,CAAA;AAED,EAAA,OAAO,EAAE,WAAW,aAAA,EAAc;AACpC;;;ACrLO,SAAS,mBAAA,CACd,YACA,cAAA,EACe;AACf,EAAA,IAAI,SAAA,GAAY,EAAA;AAChB,EAAA,IAAI,aAAA,GAAgB,EAAA;AACpB,EAAA,KAAA,MAAW,KAAK,UAAA,EAAY;AAC1B,IAAA,IAAI,CAAA,CAAE,eAAe,QAAA,EAAU;AAC/B,IAAA,SAAA,IAAa,MAAA,CAAO,CAAA,CAAE,KAAA,IAAS,GAAG,CAAA;AAAA,EACpC;AACA,EAAA,KAAA,MAAW,KAAK,cAAA,EAAgB;AAC9B,IAAA,IAAI,CAAA,CAAE,eAAe,QAAA,EAAU;AAC/B,IAAA,aAAA,IAAiB,MAAA,CAAO,CAAA,CAAE,KAAA,IAAS,GAAG,CAAA;AAAA,EACxC;AACA,EAAA,IAAI,SAAA,KAAc,IAAI,OAAO,IAAA;AAC7B,EAAA,OAAO,MAAA,CAAQ,aAAA,GAAgB,QAAA,GAAc,SAAS,CAAA,GAAI,GAAA;AAC5D;AClBO,IAAM,SAAA,GAAY;AAAA,EACvB,kBAAA,EAAoBC,aAAA,CAAK,mBAAA,CAAoB,oBAAoB,CAAA;AAAA,EACjE,iBAAA,EAAmBA,aAAA,CAAK,mBAAA,CAAoB,mBAAmB,CAAA;AAAA,EAC/D,oBAAA,EAAsBA,aAAA,CAAK,mBAAA,CAAoB,sBAAsB,CAAA;AAAA,EACrE,iBAAA,EAAmBA,aAAA,CAAK,mBAAA,CAAoB,mBAAmB,CAAA;AAAA,EAC/D,qBAAA,EAAuBA,aAAA,CAAK,mBAAA,CAAoB,uBAAuB,CAAA;AAAA,EACvE,cAAA,EAAgBA,aAAA,CAAK,mBAAA,CAAoB,gBAAgB,CAAA;AAAA,EACzD,cAAA,EAAgBA,aAAA,CAAK,mBAAA,CAAoB,gBAAgB,CAAA;AAAA,EACzD,YAAA,EAAcA,aAAA,CAAK,mBAAA,CAAoB,cAAc,CAAA;AAAA,EACrD,WAAA,EAAaA,aAAA,CAAK,mBAAA,CAAoB,aAAa,CAAA;AAAA,EACnD,cAAA,EAAgBA,aAAA,CAAK,mBAAA,CAAoB,gBAAgB,CAAA;AAAA,EACzD,mBAAA,EAAqBA,aAAA,CAAK,mBAAA,CAAoB,qBAAqB;AACrE;ACVA,SAAS,WAAA,CAAY,KAAa,IAAA,EAAsB;AACtD,EAAA,OAAOH,gBAAAA,CAAQ,WAAA,CAAY,EAAE,GAAA,EAAK,MAAA,CAAO,GAAG,CAAA,EAAG,IAAA,EAAM,MAAA,CAAO,IAAI,CAAA,EAAG,CAAA;AACrE;AAGO,SAAS,WAAW,GAAA,EAAkC;AAC3D,EAAA,MAAM,QAAA,GAAW,GAAA,CAAI,IAAA,CAAK,CAAC,CAAA;AAE3B,EAAA,QAAQ,QAAA;AAAU,IAChB,KAAK,UAAU,kBAAA,EAAoB;AAGjC,MAAA,OAAO;AAAA,QACL,IAAA,EAAM,oBAAA;AAAA,QACN,cAAA,EAAgB,YAAY,GAAA,CAAI,IAAA,CAAK,CAAC,CAAA,EAAG,GAAA,CAAI,IAAA,CAAK,CAAC,CAAC,CAAA;AAAA,QACpD,OAAA,EAAS,GAAA,CAAI,IAAA,CAAK,CAAC,CAAA;AAAA,QACnB,WAAW,MAAA,CAAO,GAAA,CAAI,IAAA,CAAK,CAAC,CAAC,CAAA,KAAM,EAAA;AAAA,QACnC,kBAAkB,GAAA,CAAI,gBAAA;AAAA,QACtB,cAAc,GAAA,CAAI;AAAA,OACpB;AAAA,IACF;AAAA,IAEA,KAAK,UAAU,iBAAA,EAAmB;AAGhC,MAAA,OAAO;AAAA,QACL,IAAA,EAAM,mBAAA;AAAA,QACN,cAAA,EAAgB,YAAY,GAAA,CAAI,IAAA,CAAK,CAAC,CAAA,EAAG,GAAA,CAAI,IAAA,CAAK,CAAC,CAAC,CAAA;AAAA,QACpD,QAAA,EAAU,GAAA,CAAI,IAAA,CAAK,CAAC,CAAA;AAAA,QACpB,MAAA,EAAQ,GAAA,CAAI,IAAA,CAAK,CAAC,CAAA;AAAA,QAClB,sBAAA,EAAwB,YAAY,GAAA,CAAI,IAAA,CAAK,CAAC,CAAA,EAAG,GAAA,CAAI,IAAA,CAAK,CAAC,CAAC,CAAA;AAAA,QAC5D,aAAA,EAAe,YAAY,GAAA,CAAI,IAAA,CAAK,CAAC,CAAA,EAAG,GAAA,CAAI,IAAA,CAAK,CAAC,CAAC,CAAA;AAAA,QACnD,kBAAkB,GAAA,CAAI,gBAAA;AAAA,QACtB,cAAc,GAAA,CAAI;AAAA,OACpB;AAAA,IACF;AAAA,IAEA,KAAK,UAAU,oBAAA,EAAsB;AAGnC,MAAA,OAAO;AAAA,QACL,IAAA,EAAM,sBAAA;AAAA,QACN,cAAA,EAAgB,YAAY,GAAA,CAAI,IAAA,CAAK,CAAC,CAAA,EAAG,GAAA,CAAI,IAAA,CAAK,CAAC,CAAC,CAAA;AAAA,QACpD,OAAA,EAAS,GAAA,CAAI,IAAA,CAAK,CAAC,CAAA;AAAA,QACnB,kBAAkB,GAAA,CAAI,gBAAA;AAAA,QACtB,cAAc,GAAA,CAAI;AAAA,OACpB;AAAA,IACF;AAAA,IAEA,KAAK,UAAU,iBAAA,EAAmB;AAGhC,MAAA,OAAO;AAAA,QACL,IAAA,EAAM,mBAAA;AAAA,QACN,cAAA,EAAgB,YAAY,GAAA,CAAI,IAAA,CAAK,CAAC,CAAA,EAAG,GAAA,CAAI,IAAA,CAAK,CAAC,CAAC,CAAA;AAAA,QACpD,OAAA,EAAS,GAAA,CAAI,IAAA,CAAK,CAAC,CAAA;AAAA,QACnB,kBAAkB,GAAA,CAAI,gBAAA;AAAA,QACtB,cAAc,GAAA,CAAI;AAAA,OACpB;AAAA,IACF;AAAA,IAEA,KAAK,UAAU,qBAAA,EAAuB;AAGpC,MAAA,OAAO;AAAA,QACL,IAAA,EAAM,uBAAA;AAAA,QACN,cAAA,EAAgB,YAAY,GAAA,CAAI,IAAA,CAAK,CAAC,CAAA,EAAG,GAAA,CAAI,IAAA,CAAK,CAAC,CAAC,CAAA;AAAA,QACpD,UAAA,EAAY,GAAA,CAAI,IAAA,CAAK,CAAC,CAAA;AAAA,QACtB,kBAAkB,GAAA,CAAI,gBAAA;AAAA,QACtB,cAAc,GAAA,CAAI;AAAA,OACpB;AAAA,IACF;AAAA,IAEA,KAAK,UAAU,cAAA,EAAgB;AAG7B,MAAA,OAAO;AAAA,QACL,IAAA,EAAM,gBAAA;AAAA,QACN,cAAA,EAAgB,YAAY,GAAA,CAAI,IAAA,CAAK,CAAC,CAAA,EAAG,GAAA,CAAI,IAAA,CAAK,CAAC,CAAC,CAAA;AAAA,QACpD,QAAA,EAAU,GAAA,CAAI,IAAA,CAAK,CAAC,CAAA;AAAA,QACpB,MAAA,EAAQ,YAAY,GAAA,CAAI,IAAA,CAAK,CAAC,CAAA,EAAG,GAAA,CAAI,IAAA,CAAK,CAAC,CAAC,CAAA;AAAA,QAC5C,kBAAkB,GAAA,CAAI,gBAAA;AAAA,QACtB,cAAc,GAAA,CAAI;AAAA,OACpB;AAAA,IACF;AAAA,IAEA,KAAK,UAAU,cAAA,EAAgB;AAG7B,MAAA,OAAO;AAAA,QACL,IAAA,EAAM,gBAAA;AAAA,QACN,QAAA,EAAU,GAAA,CAAI,IAAA,CAAK,CAAC,CAAA;AAAA,QACpB,IAAA,EAAM,GAAA,CAAI,IAAA,CAAK,CAAC,CAAA;AAAA,QAChB,EAAA,EAAI,GAAA,CAAI,IAAA,CAAK,CAAC,CAAA;AAAA,QACd,EAAA,EAAI,YAAY,GAAA,CAAI,IAAA,CAAK,CAAC,CAAA,EAAG,GAAA,CAAI,IAAA,CAAK,CAAC,CAAC,CAAA;AAAA,QACxC,KAAA,EAAO,YAAY,GAAA,CAAI,IAAA,CAAK,CAAC,CAAA,EAAG,GAAA,CAAI,IAAA,CAAK,CAAC,CAAC,CAAA;AAAA,QAC3C,kBAAkB,GAAA,CAAI,gBAAA;AAAA,QACtB,cAAc,GAAA,CAAI;AAAA,OACpB;AAAA,IACF;AAAA,IAEA,KAAK,UAAU,YAAA,EAAc;AAG3B,MAAA,OAAO;AAAA,QACL,IAAA,EAAM,cAAA;AAAA,QACN,cAAA,EAAgB,YAAY,GAAA,CAAI,IAAA,CAAK,CAAC,CAAA,EAAG,GAAA,CAAI,IAAA,CAAK,CAAC,CAAC,CAAA;AAAA,QACpD,QAAA,EAAU,GAAA,CAAI,IAAA,CAAK,CAAC,CAAA;AAAA,QACpB,MAAA,EAAQ,GAAA,CAAI,IAAA,CAAK,CAAC,CAAA;AAAA,QAClB,OAAA,EAAS,GAAA,CAAI,IAAA,CAAK,CAAC,CAAA;AAAA,QACnB,kBAAA,EAAoB,YAAY,GAAA,CAAI,IAAA,CAAK,CAAC,CAAA,EAAG,GAAA,CAAI,IAAA,CAAK,CAAC,CAAC,CAAA;AAAA,QACxD,kBAAkB,GAAA,CAAI,gBAAA;AAAA,QACtB,cAAc,GAAA,CAAI;AAAA,OACpB;AAAA,IACF;AAAA,IAEA,KAAK,UAAU,WAAA,EAAa;AAG1B,MAAA,OAAO;AAAA,QACL,IAAA,EAAM,aAAA;AAAA,QACN,cAAA,EAAgB,YAAY,GAAA,CAAI,IAAA,CAAK,CAAC,CAAA,EAAG,GAAA,CAAI,IAAA,CAAK,CAAC,CAAC,CAAA;AAAA,QACpD,UAAA,EAAY,GAAA,CAAI,IAAA,CAAK,CAAC,CAAA;AAAA,QACtB,KAAA,EAAO,GAAA,CAAI,IAAA,CAAK,CAAC,CAAA;AAAA,QACjB,QAAA,EAAU,YAAY,GAAA,CAAI,IAAA,CAAK,CAAC,CAAA,EAAG,GAAA,CAAI,IAAA,CAAK,CAAC,CAAC,CAAA;AAAA,QAC9C,gBAAA,EAAkB,YAAY,GAAA,CAAI,IAAA,CAAK,CAAC,CAAA,EAAG,GAAA,CAAI,IAAA,CAAK,CAAC,CAAC,CAAA;AAAA,QACtD,kBAAkB,GAAA,CAAI,gBAAA;AAAA,QACtB,cAAc,GAAA,CAAI;AAAA,OACpB;AAAA,IACF;AAAA,IAEA,KAAK,UAAU,cAAA,EAAgB;AAG7B,MAAA,OAAO;AAAA,QACL,IAAA,EAAM,gBAAA;AAAA,QACN,UAAA,EAAY,GAAA,CAAI,IAAA,CAAK,CAAC,CAAA;AAAA,QACtB,KAAA,EAAO,GAAA,CAAI,IAAA,CAAK,CAAC,CAAA;AAAA,QACjB,kBAAkB,GAAA,CAAI,gBAAA;AAAA,QACtB,cAAc,GAAA,CAAI;AAAA,OACpB;AAAA,IACF;AAAA,IAEA,KAAK,UAAU,mBAAA,EAAqB;AAGlC,MAAA,OAAO;AAAA,QACL,IAAA,EAAM,qBAAA;AAAA,QACN,KAAA,EAAO,GAAA,CAAI,IAAA,CAAK,CAAC,CAAA;AAAA,QACjB,aAAA,EAAe,GAAA,CAAI,IAAA,CAAK,CAAC,CAAA;AAAA,QACzB,kBAAkB,GAAA,CAAI,gBAAA;AAAA,QACtB,cAAc,GAAA,CAAI;AAAA,OACpB;AAAA,IACF;AAAA,IAEA;AACE,MAAA,OAAO,IAAA;AAAA;AAEb;AAGO,SAAS,YAAY,SAAA,EAAqC;AAC/D,EAAA,MAAM,UAAwB,EAAC;AAC/B,EAAA,KAAA,MAAW,OAAO,SAAA,EAAW;AAC3B,IAAA,MAAM,MAAA,GAAS,WAAW,GAAG,CAAA;AAC7B,IAAA,IAAI,MAAA,EAAQ,OAAA,CAAQ,IAAA,CAAK,MAAM,CAAA;AAAA,EACjC;AACA,EAAA,OAAO,OAAA;AACT;ACvKA,IAAM,cAAA,GAAiB,mEAAA;AAahB,SAAS,iBAAiB,OAAA,EAA+B;AAC9D,EAAA,MAAM,QAAA,GAAqB,CAAC,MAAA,CAAO,OAAA,CAAQ,MAAM,CAAC,CAAA;AAClD,EAAA,KAAA,MAAW,SAAS,OAAA,EAAS;AAC3B,IAAA,QAAA,CAAS,IAAA,CAAK,MAAM,SAAS,CAAA;AAC7B,IAAA,MAAM,CAAC,GAAA,EAAK,IAAI,CAAA,GAAI,MAAA,CAAO,MAAM,GAAG,CAAA;AACpC,IAAA,MAAM,UAAUG,aAAAA,CAAK,6BAAA,CAA8B,CAAC,cAAA,EAAgB,GAAA,EAAK,IAAI,CAAC,CAAA;AAC9E,IAAA,QAAA,CAAS,KAAK,OAAO,CAAA;AAAA,EACvB;AACA,EAAA,OAAOA,aAAAA,CAAK,8BAA8B,QAAQ,CAAA;AACpD;AAcO,SAAS,WAAW,MAAA,EAAyB;AAClD,EAAA,MAAM,QAAA,GAAqB,CAAC,MAAA,CAAO,MAAA,CAAO,MAAM,CAAC,CAAA;AACjD,EAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AAC1B,IAAA,QAAA,CAAS,IAAA,CAAK,MAAM,aAAa,CAAA;AACjC,IAAA,QAAA,CAAS,KAAK,MAAA,CAAO,eAAA,CAAgB,KAAA,CAAM,UAAU,CAAC,CAAC,CAAA;AACvD,IAAA,MAAM,CAAC,IAAA,EAAM,KAAK,CAAA,GAAI,MAAA,CAAO,MAAM,KAAK,CAAA;AACxC,IAAA,QAAA,CAAS,IAAA,CAAK,MAAM,KAAK,CAAA;AACzB,IAAA,MAAM,CAAC,MAAA,EAAQ,OAAO,CAAA,GAAI,MAAA,CAAO,MAAM,QAAQ,CAAA;AAC/C,IAAA,QAAA,CAAS,IAAA,CAAK,QAAQ,OAAO,CAAA;AAAA,EAC/B;AACA,EAAA,OAAOA,aAAAA,CAAK,8BAA8B,QAAQ,CAAA;AACpD;;;AChDA,IAAM,YAAA,GAAe;AAAA,EACnB,IAAA,EAAM,OAAA;AAAA,EACN,OAAA,EAAS,IAAA;AAAA,EACT,OAAA,EAAS,EAAA;AAAA;AAAA,EACT,QAAA,EAAU;AACZ,CAAA;AASO,SAAS,uBAAA,CAAwB,SAAiB,OAAA,EAA4B;AACnF,EAAA,OAAO;AAAA,IACL,KAAA,EAAO;AAAA,MACL,cAAA,EAAgB;AAAA,QACd,EAAE,IAAA,EAAM,MAAA,EAAQ,IAAA,EAAM,aAAA,EAAc;AAAA,QACpC,EAAE,IAAA,EAAM,SAAA,EAAW,IAAA,EAAM,aAAA,EAAc;AAAA,QACvC,EAAE,IAAA,EAAM,SAAA,EAAW,IAAA,EAAM,aAAA,EAAc;AAAA,QACvC,EAAE,IAAA,EAAM,UAAA,EAAY,IAAA,EAAM,aAAA;AAAc,OAC1C;AAAA,MACA,WAAA,EAAa;AAAA,QACX,EAAE,IAAA,EAAM,UAAA,EAAY,IAAA,EAAM,QAAA;AAAS;AACrC,KACF;AAAA,IACA,WAAA,EAAa,aAAA;AAAA,IACb,MAAA,EAAQ;AAAA,MACN,GAAG,YAAA;AAAA,MACH;AAAA,KACF;AAAA,IACA,OAAA,EAAS;AAAA,MACP,QAAA,EAAU;AAAA;AACZ,GACF;AACF;AAMO,SAAS,6BAA6B,MAAA,EAa/B;AACZ,EAAA,OAAO;AAAA,IACL,KAAA,EAAO;AAAA,MACL,cAAA,EAAgB;AAAA,QACd,EAAE,IAAA,EAAM,MAAA,EAAQ,IAAA,EAAM,aAAA,EAAc;AAAA,QACpC,EAAE,IAAA,EAAM,SAAA,EAAW,IAAA,EAAM,aAAA,EAAc;AAAA,QACvC,EAAE,IAAA,EAAM,SAAA,EAAW,IAAA,EAAM,aAAA,EAAc;AAAA,QACvC,EAAE,IAAA,EAAM,UAAA,EAAY,IAAA,EAAM,aAAA;AAAc,OAC1C;AAAA,MACA,gBAAA,EAAkB;AAAA,QAChB,EAAE,IAAA,EAAM,UAAA,EAAY,IAAA,EAAM,iBAAA,EAAkB;AAAA,QAC5C,EAAE,IAAA,EAAM,WAAA,EAAa,IAAA,EAAM,MAAA,EAAO;AAAA,QAClC,EAAE,IAAA,EAAM,eAAA,EAAiB,IAAA,EAAM,MAAA,EAAO;AAAA,QACtC,EAAE,IAAA,EAAM,iBAAA,EAAmB,IAAA,EAAM,MAAA,EAAO;AAAA,QACxC,EAAE,IAAA,EAAM,YAAA,EAAc,IAAA,EAAM,MAAA,EAAO;AAAA,QACnC,EAAE,IAAA,EAAM,gBAAA,EAAkB,IAAA,EAAM,MAAA,EAAO;AAAA,QACvC,EAAE,IAAA,EAAM,kBAAA,EAAoB,IAAA,EAAM,MAAA,EAAO;AAAA,QACzC,EAAE,IAAA,EAAM,UAAA,EAAY,IAAA,EAAM,MAAA,EAAO;AAAA,QACjC,EAAE,IAAA,EAAM,UAAA,EAAY,IAAA,EAAM,MAAA,EAAO;AAAA,QACjC,EAAE,IAAA,EAAM,cAAA,EAAgB,IAAA,EAAM,MAAA,EAAO;AAAA,QACrC,EAAE,IAAA,EAAM,OAAA,EAAS,IAAA,EAAM,MAAA;AAAO;AAChC,KACF;AAAA,IACA,WAAA,EAAa,kBAAA;AAAA,IACb,MAAA,EAAQ;AAAA,MACN,GAAG,YAAA;AAAA,MACH,SAAS,MAAA,CAAO;AAAA,KAClB;AAAA,IACA,OAAA,EAAS;AAAA,MACP,UAAU,MAAA,CAAO,QAAA;AAAA,MACjB,SAAA,EAAW,UAAA,CAAW,MAAA,CAAO,UAAU,CAAA;AAAA,MACvC,aAAA,EAAe,UAAA,CAAW,MAAA,CAAO,cAAc,CAAA;AAAA,MAC/C,eAAA,EAAiB,UAAA,CAAW,MAAA,CAAO,gBAAgB,CAAA;AAAA,MACnD,UAAA,EAAY,MAAA,CAAO,SAAA,CAAU,QAAA,EAAS;AAAA,MACtC,cAAA,EAAgB,MAAA,CAAO,aAAA,CAAc,QAAA,EAAS;AAAA,MAC9C,gBAAA,EAAkB,MAAA,CAAO,eAAA,CAAgB,QAAA,EAAS;AAAA,MAClD,QAAA,EAAU,MAAA,CAAO,QAAA,CAAS,QAAA,EAAS;AAAA,MACnC,QAAA,EAAU,MAAA,CAAO,QAAA,CAAS,QAAA,EAAS;AAAA,MACnC,cAAc,MAAA,CAAO,WAAA;AAAA,MACrB,KAAA,EAAO,MAAA,CAAO,KAAA,CAAM,QAAA;AAAS;AAC/B,GACF;AACF;AAMO,SAAS,sBAAsB,MAAA,EAMxB;AACZ,EAAA,OAAO;AAAA,IACL,KAAA,EAAO;AAAA,MACL,cAAA,EAAgB;AAAA,QACd,EAAE,IAAA,EAAM,MAAA,EAAQ,IAAA,EAAM,aAAA,EAAc;AAAA,QACpC,EAAE,IAAA,EAAM,SAAA,EAAW,IAAA,EAAM,aAAA,EAAc;AAAA,QACvC,EAAE,IAAA,EAAM,SAAA,EAAW,IAAA,EAAM,aAAA,EAAc;AAAA,QACvC,EAAE,IAAA,EAAM,UAAA,EAAY,IAAA,EAAM,aAAA;AAAc,OAC1C;AAAA,MACA,SAAA,EAAW;AAAA,QACT,EAAE,IAAA,EAAM,YAAA,EAAc,IAAA,EAAM,MAAA,EAAO;AAAA,QACnC,EAAE,IAAA,EAAM,QAAA,EAAU,IAAA,EAAM,iBAAA,EAAkB;AAAA,QAC1C,EAAE,IAAA,EAAM,wBAAA,EAA0B,IAAA,EAAM,MAAA,EAAO;AAAA,QAC/C,EAAE,IAAA,EAAM,OAAA,EAAS,IAAA,EAAM,MAAA;AAAO,OAChC;AAAA,MACA,IAAA,EAAM;AAAA,QACJ,EAAE,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,MAAA,EAAO;AAAA,QAC5B,EAAE,IAAA,EAAM,MAAA,EAAQ,IAAA,EAAM,MAAA;AAAO;AAC/B,KACF;AAAA,IACA,WAAA,EAAa,WAAA;AAAA,IACb,MAAA,EAAQ;AAAA,MACN,GAAG,YAAA;AAAA,MACH,SAAS,MAAA,CAAO;AAAA,KAClB;AAAA,IACA,OAAA,EAAS;AAAA,MACP,YAAY,MAAA,CAAO,SAAA;AAAA,MACnB,QAAQ,MAAA,CAAO,MAAA;AAAA,MACf,sBAAA,EAAwB;AAAA,QACtB,MAAM,MAAA,CAAO,oBAAA,GAAA,CAAyB,EAAA,IAAM,IAAA,IAAQ,IAAK,QAAA,EAAS;AAAA,QAClE,IAAA,EAAA,CAAO,MAAA,CAAO,oBAAA,IAAwB,IAAA,EAAM,QAAA;AAAS,OACvD;AAAA,MACA,KAAA,EAAO,MAAA,CAAO,KAAA,CAAM,QAAA;AAAS;AAC/B,GACF;AACF;AAMO,SAAS,2BAA2B,MAAA,EAM7B;AACZ,EAAA,OAAO;AAAA,IACL,KAAA,EAAO;AAAA,MACL,cAAA,EAAgB;AAAA,QACd,EAAE,IAAA,EAAM,MAAA,EAAQ,IAAA,EAAM,aAAA,EAAc;AAAA,QACpC,EAAE,IAAA,EAAM,SAAA,EAAW,IAAA,EAAM,aAAA,EAAc;AAAA,QACvC,EAAE,IAAA,EAAM,SAAA,EAAW,IAAA,EAAM,aAAA,EAAc;AAAA,QACvC,EAAE,IAAA,EAAM,UAAA,EAAY,IAAA,EAAM,aAAA;AAAc,OAC1C;AAAA,MACA,cAAA,EAAgB;AAAA,QACd,EAAE,IAAA,EAAM,YAAA,EAAc,IAAA,EAAM,MAAA,EAAO;AAAA,QACnC,EAAE,IAAA,EAAM,OAAA,EAAS,IAAA,EAAM,MAAA,EAAO;AAAA,QAC9B,EAAE,IAAA,EAAM,QAAA,EAAU,IAAA,EAAM,iBAAA,EAAkB;AAAA,QAC1C,EAAE,IAAA,EAAM,aAAA,EAAe,IAAA,EAAM,MAAA;AAAO;AACtC,KACF;AAAA,IACA,WAAA,EAAa,gBAAA;AAAA,IACb,MAAA,EAAQ;AAAA,MACN,GAAG,YAAA;AAAA,MACH,SAAS,MAAA,CAAO;AAAA,KAClB;AAAA,IACA,OAAA,EAAS;AAAA,MACP,YAAY,MAAA,CAAO,SAAA;AAAA,MACnB,KAAA,EAAO,MAAA,CAAO,KAAA,CAAM,QAAA,EAAS;AAAA,MAC7B,QAAQ,MAAA,CAAO,MAAA;AAAA,MACf,WAAA,EAAa,MAAA,CAAO,UAAA,CAAW,QAAA;AAAS;AAC1C,GACF;AACF;AAKA,SAAS,YAAY,KAAA,EAA8C;AACjE,EAAA,OAAO;AAAA,IACL,GAAA,EAAA,CAAM,KAAA,GAAA,CAAU,EAAA,IAAM,IAAA,IAAQ,IAAK,QAAA,EAAS;AAAA,IAC5C,IAAA,EAAA,CAAO,KAAA,IAAS,IAAA,EAAM,QAAA;AAAS,GACjC;AACF;AAGA,IAAM,oBAAA,GAAuB;AAAA,EAC3B,EAAE,IAAA,EAAM,MAAA,EAAQ,IAAA,EAAM,aAAA,EAAc;AAAA,EACpC,EAAE,IAAA,EAAM,SAAA,EAAW,IAAA,EAAM,aAAA,EAAc;AAAA,EACvC,EAAE,IAAA,EAAM,SAAA,EAAW,IAAA,EAAM,aAAA,EAAc;AAAA,EACvC,EAAE,IAAA,EAAM,UAAA,EAAY,IAAA,EAAM,aAAA;AAC5B,CAAA;AAGA,IAAM,SAAA,GAAY;AAAA,EAChB,EAAE,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,MAAA,EAAO;AAAA,EAC5B,EAAE,IAAA,EAAM,MAAA,EAAQ,IAAA,EAAM,MAAA;AACxB,CAAA;AAMO,SAAS,gCAAgC,MAAA,EAWlC;AACZ,EAAA,OAAO;AAAA,IACL,KAAA,EAAO;AAAA,MACL,cAAA,EAAgB,oBAAA;AAAA,MAChB,mBAAA,EAAqB;AAAA,QACnB,EAAE,IAAA,EAAM,QAAA,EAAU,IAAA,EAAM,iBAAA,EAAkB;AAAA,QAC1C,EAAE,IAAA,EAAM,WAAA,EAAa,IAAA,EAAM,MAAA,EAAO;AAAA,QAClC,EAAE,IAAA,EAAM,eAAA,EAAiB,IAAA,EAAM,MAAA,EAAO;AAAA,QACtC,EAAE,IAAA,EAAM,YAAA,EAAc,IAAA,EAAM,MAAA,EAAO;AAAA,QACnC,EAAE,IAAA,EAAM,gBAAA,EAAkB,IAAA,EAAM,MAAA,EAAO;AAAA,QACvC,EAAE,IAAA,EAAM,oBAAA,EAAsB,IAAA,EAAM,iBAAA,EAAkB;AAAA,QACtD,EAAE,IAAA,EAAM,UAAA,EAAY,IAAA,EAAM,MAAA,EAAO;AAAA,QACjC,EAAE,IAAA,EAAM,UAAA,EAAY,IAAA,EAAM,MAAA,EAAO;AAAA,QACjC,EAAE,IAAA,EAAM,OAAA,EAAS,IAAA,EAAM,MAAA;AAAO;AAChC,KACF;AAAA,IACA,WAAA,EAAa,qBAAA;AAAA,IACb,QAAQ,EAAE,GAAG,YAAA,EAAc,OAAA,EAAS,OAAO,OAAA,EAAQ;AAAA,IACnD,OAAA,EAAS;AAAA,MACP,QAAQ,MAAA,CAAO,MAAA;AAAA,MACf,SAAA,EAAW,UAAA,CAAW,MAAA,CAAO,UAAU,CAAA;AAAA,MACvC,aAAA,EAAe,UAAA,CAAW,MAAA,CAAO,cAAc,CAAA;AAAA,MAC/C,UAAA,EAAY,MAAA,CAAO,SAAA,CAAU,QAAA,EAAS;AAAA,MACtC,cAAA,EAAgB,MAAA,CAAO,aAAA,CAAc,QAAA,EAAS;AAAA,MAC9C,oBAAoB,MAAA,CAAO,iBAAA;AAAA,MAC3B,QAAA,EAAU,MAAA,CAAO,QAAA,CAAS,QAAA,EAAS;AAAA,MACnC,QAAA,EAAU,MAAA,CAAO,QAAA,CAAS,QAAA,EAAS;AAAA,MACnC,KAAA,EAAO,MAAA,CAAO,KAAA,CAAM,QAAA;AAAS;AAC/B,GACF;AACF;AAMO,SAAS,uCAAuC,MAAA,EAMzC;AACZ,EAAA,OAAO;AAAA,IACL,KAAA,EAAO;AAAA,MACL,cAAA,EAAgB,oBAAA;AAAA,MAChB,0BAAA,EAA4B;AAAA,QAC1B,EAAE,IAAA,EAAM,YAAA,EAAc,IAAA,EAAM,MAAA,EAAO;AAAA,QACnC,EAAE,IAAA,EAAM,UAAA,EAAY,IAAA,EAAM,iBAAA,EAAkB;AAAA,QAC5C,EAAE,IAAA,EAAM,UAAA,EAAY,IAAA,EAAM,MAAA,EAAO;AAAA,QACjC,EAAE,IAAA,EAAM,OAAA,EAAS,IAAA,EAAM,MAAA;AAAO,OAChC;AAAA,MACA,IAAA,EAAM;AAAA,KACR;AAAA,IACA,WAAA,EAAa,4BAAA;AAAA,IACb,QAAQ,EAAE,GAAG,YAAA,EAAc,OAAA,EAAS,OAAO,OAAA,EAAQ;AAAA,IACnD,OAAA,EAAS;AAAA,MACP,YAAY,MAAA,CAAO,SAAA;AAAA,MACnB,UAAU,MAAA,CAAO,QAAA;AAAA,MACjB,QAAA,EAAU,WAAA,CAAY,MAAA,CAAO,OAAO,CAAA;AAAA,MACpC,KAAA,EAAO,MAAA,CAAO,KAAA,CAAM,QAAA;AAAS;AAC/B,GACF;AACF;AAMO,SAAS,kCAAkC,MAAA,EASpC;AACZ,EAAA,OAAO;AAAA,IACL,KAAA,EAAO;AAAA,MACL,cAAA,EAAgB,oBAAA;AAAA,MAChB,qBAAA,EAAuB;AAAA,QACrB,EAAE,IAAA,EAAM,gBAAA,EAAkB,IAAA,EAAM,MAAA,EAAO;AAAA,QACvC,EAAE,IAAA,EAAM,UAAA,EAAY,IAAA,EAAM,iBAAA,EAAkB;AAAA,QAC5C,EAAE,IAAA,EAAM,cAAA,EAAgB,IAAA,EAAM,MAAA,EAAO;AAAA,QACrC,EAAE,IAAA,EAAM,mBAAA,EAAqB,IAAA,EAAM,MAAA,EAAO;AAAA,QAC1C,EAAE,IAAA,EAAM,oBAAA,EAAsB,IAAA,EAAM,MAAA,EAAO;AAAA,QAC3C,EAAE,IAAA,EAAM,mBAAA,EAAqB,IAAA,EAAM,MAAA,EAAO;AAAA,QAC1C,EAAE,IAAA,EAAM,OAAA,EAAS,IAAA,EAAM,MAAA;AAAO,OAChC;AAAA,MACA,IAAA,EAAM;AAAA,KACR;AAAA,IACA,WAAA,EAAa,uBAAA;AAAA,IACb,QAAQ,EAAE,GAAG,YAAA,EAAc,OAAA,EAAS,OAAO,OAAA,EAAQ;AAAA,IACnD,OAAA,EAAS;AAAA,MACP,cAAA,EAAgB,WAAA,CAAY,MAAA,CAAO,aAAa,CAAA;AAAA,MAChD,UAAU,MAAA,CAAO,QAAA;AAAA,MACjB,YAAA,EAAc,MAAA,CAAO,WAAA,CAAY,QAAA,EAAS;AAAA,MAC1C,iBAAA,EAAmB,UAAA,CAAW,MAAA,CAAO,iBAAiB,CAAA;AAAA,MACtD,kBAAA,EAAoB,MAAA,CAAO,gBAAA,CAAiB,QAAA,EAAS;AAAA,MACrD,iBAAA,EAAmB,MAAA,CAAO,gBAAA,CAAiB,QAAA,EAAS;AAAA,MACpD,KAAA,EAAO,MAAA,CAAO,KAAA,CAAM,QAAA;AAAS;AAC/B,GACF;AACF;AAMO,SAAS,gCAAgC,MAAA,EASlC;AACZ,EAAA,OAAO;AAAA,IACL,KAAA,EAAO;AAAA,MACL,cAAA,EAAgB,oBAAA;AAAA,MAChB,mBAAA,EAAqB;AAAA,QACnB,EAAE,IAAA,EAAM,gBAAA,EAAkB,IAAA,EAAM,MAAA,EAAO;AAAA,QACvC,EAAE,IAAA,EAAM,UAAA,EAAY,IAAA,EAAM,iBAAA,EAAkB;AAAA,QAC5C,EAAE,IAAA,EAAM,WAAA,EAAa,IAAA,EAAM,MAAA,EAAO;AAAA,QAClC,EAAE,IAAA,EAAM,eAAA,EAAiB,IAAA,EAAM,iBAAA,EAAkB;AAAA,QACjD,EAAE,IAAA,EAAM,eAAA,EAAiB,IAAA,EAAM,iBAAA,EAAkB;AAAA,QACjD,EAAE,IAAA,EAAM,UAAA,EAAY,IAAA,EAAM,MAAA,EAAO;AAAA,QACjC,EAAE,IAAA,EAAM,OAAA,EAAS,IAAA,EAAM,MAAA;AAAO,OAChC;AAAA,MACA,IAAA,EAAM;AAAA,KACR;AAAA,IACA,WAAA,EAAa,qBAAA;AAAA,IACb,QAAQ,EAAE,GAAG,YAAA,EAAc,OAAA,EAAS,OAAO,OAAA,EAAQ;AAAA,IACnD,OAAA,EAAS;AAAA,MACP,cAAA,EAAgB,WAAA,CAAY,MAAA,CAAO,aAAa,CAAA;AAAA,MAChD,UAAU,MAAA,CAAO,QAAA;AAAA,MACjB,SAAA,EAAW,WAAA,CAAY,MAAA,CAAO,QAAQ,CAAA;AAAA,MACtC,eAAe,MAAA,CAAO,YAAA;AAAA,MACtB,eAAe,MAAA,CAAO,YAAA;AAAA,MACtB,QAAA,EAAU,MAAA,CAAO,QAAA,CAAS,QAAA,EAAS;AAAA,MACnC,KAAA,EAAO,MAAA,CAAO,KAAA,CAAM,QAAA;AAAS;AAC/B,GACF;AACF;AAMO,SAAS,2BAA2B,MAAA,EAW7B;AACZ,EAAA,OAAO;AAAA,IACL,KAAA,EAAO;AAAA,MACL,cAAA,EAAgB,oBAAA;AAAA,MAChB,cAAA,EAAgB;AAAA,QACd,EAAE,IAAA,EAAM,gBAAA,EAAkB,IAAA,EAAM,MAAA,EAAO;AAAA,QACvC,EAAE,IAAA,EAAM,YAAA,EAAc,IAAA,EAAM,iBAAA,EAAkB;AAAA,QAC9C,EAAE,IAAA,EAAM,eAAA,EAAiB,IAAA,EAAM,MAAA,EAAO;AAAA,QACtC,EAAE,IAAA,EAAM,mBAAA,EAAqB,IAAA,EAAM,MAAA,EAAO;AAAA,QAC1C,EAAE,IAAA,EAAM,gBAAA,EAAkB,IAAA,EAAM,MAAA,EAAO;AAAA,QACvC,EAAE,IAAA,EAAM,oBAAA,EAAsB,IAAA,EAAM,MAAA,EAAO;AAAA,QAC3C,EAAE,IAAA,EAAM,cAAA,EAAgB,IAAA,EAAM,MAAA,EAAO;AAAA,QACrC,EAAE,IAAA,EAAM,UAAA,EAAY,IAAA,EAAM,MAAA,EAAO;AAAA,QACjC,EAAE,IAAA,EAAM,OAAA,EAAS,IAAA,EAAM,MAAA;AAAO,OAChC;AAAA,MACA,IAAA,EAAM;AAAA,KACR;AAAA,IACA,WAAA,EAAa,gBAAA;AAAA,IACb,QAAQ,EAAE,GAAG,YAAA,EAAc,OAAA,EAAS,OAAO,OAAA,EAAQ;AAAA,IACnD,OAAA,EAAS;AAAA,MACP,cAAA,EAAgB,WAAA,CAAY,MAAA,CAAO,aAAa,CAAA;AAAA,MAChD,YAAY,MAAA,CAAO,SAAA;AAAA,MACnB,aAAA,EAAe,UAAA,CAAW,MAAA,CAAO,aAAa,CAAA;AAAA,MAC9C,iBAAA,EAAmB,UAAA,CAAW,MAAA,CAAO,iBAAiB,CAAA;AAAA,MACtD,cAAA,EAAgB,MAAA,CAAO,YAAA,CAAa,QAAA,EAAS;AAAA,MAC7C,kBAAA,EAAoB,MAAA,CAAO,gBAAA,CAAiB,QAAA,EAAS;AAAA,MACrD,YAAA,EAAc,MAAA,CAAO,WAAA,CAAY,QAAA,EAAS;AAAA,MAC1C,QAAA,EAAU,MAAA,CAAO,QAAA,CAAS,QAAA,EAAS;AAAA,MACnC,KAAA,EAAO,MAAA,CAAO,KAAA,CAAM,QAAA;AAAS;AAC/B,GACF;AACF;AAMO,SAAS,8BAA8B,MAAA,EAMhC;AACZ,EAAA,OAAO;AAAA,IACL,KAAA,EAAO;AAAA,MACL,cAAA,EAAgB,oBAAA;AAAA,MAChB,iBAAA,EAAmB;AAAA,QACjB,EAAE,IAAA,EAAM,gBAAA,EAAkB,IAAA,EAAM,MAAA,EAAO;AAAA,QACvC,EAAE,IAAA,EAAM,YAAA,EAAc,IAAA,EAAM,MAAA,EAAO;AAAA,QACnC,EAAE,IAAA,EAAM,UAAA,EAAY,IAAA,EAAM,iBAAA,EAAkB;AAAA,QAC5C,EAAE,IAAA,EAAM,OAAA,EAAS,IAAA,EAAM,MAAA;AAAO,OAChC;AAAA,MACA,IAAA,EAAM;AAAA,KACR;AAAA,IACA,WAAA,EAAa,mBAAA;AAAA,IACb,QAAQ,EAAE,GAAG,YAAA,EAAc,OAAA,EAAS,OAAO,OAAA,EAAQ;AAAA,IACnD,OAAA,EAAS;AAAA,MACP,cAAA,EAAgB,WAAA,CAAY,MAAA,CAAO,aAAa,CAAA;AAAA,MAChD,YAAY,MAAA,CAAO,SAAA;AAAA,MACnB,UAAU,MAAA,CAAO,QAAA;AAAA,MACjB,KAAA,EAAO,MAAA,CAAO,KAAA,CAAM,QAAA;AAAS;AAC/B,GACF;AACF;AAOO,SAAS,gCAAgC,MAAA,EAMlC;AACZ,EAAA,OAAO;AAAA,IACL,KAAA,EAAO;AAAA,MACL,cAAA,EAAgB,oBAAA;AAAA,MAChB,mBAAA,EAAqB;AAAA,QACnB,EAAE,IAAA,EAAM,MAAA,EAAQ,IAAA,EAAM,iBAAA,EAAkB;AAAA,QACxC,EAAE,IAAA,EAAM,eAAA,EAAiB,IAAA,EAAM,aAAA,EAAc;AAAA,QAC7C,EAAE,IAAA,EAAM,YAAA,EAAc,IAAA,EAAM,MAAA,EAAO;AAAA,QACnC,EAAE,IAAA,EAAM,WAAA,EAAa,IAAA,EAAM,MAAA;AAAO;AACpC,KACF;AAAA,IACA,WAAA,EAAa,qBAAA;AAAA,IACb,QAAQ,EAAE,GAAG,YAAA,EAAc,OAAA,EAAS,OAAO,OAAA,EAAQ;AAAA,IACnD,OAAA,EAAS;AAAA,MACP,MAAM,MAAA,CAAO,IAAA;AAAA,MACb,eAAe,MAAA,CAAO,YAAA;AAAA,MACtB,YAAY,MAAA,CAAO,SAAA;AAAA,MACnB,SAAA,EAAW,MAAA,CAAO,QAAA,CAAS,QAAA;AAAS;AACtC,GACF;AACF;;;ACneO,SAAS,mBAAmB,GAAA,EAAgC;AACjE,EAAA,OAAO,EAAE,GAAG,GAAA,CAAI,CAAC,GAAG,CAAA,EAAG,GAAA,CAAI,CAAC,CAAA,EAAE;AAChC;AAEO,SAAS,qBAAqB,MAAA,EAAmC;AACtE,EAAA,OAAO,CAAC,MAAA,CAAO,CAAA,EAAG,MAAA,CAAO,CAAC,CAAA;AAC5B;;;ACdA,IAAA,aAAA,GAAA;AAAA,EACE;AAAA,IACE,IAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAQ,mBAAA;AAAA,IACR,cAAA,EAAkB;AAAA,GACpB;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAQ,YAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,QACE,IAAA,EAAQ,OAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,MAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAQ,gCAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,QACE,IAAA,EAAQ,OAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,QAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,SAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,SAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,QAAA;AAAA,IACR,IAAA,EAAQ,qBAAA;AAAA,IACR,OAAA,EAAW;AAAA,MACT;AAAA,QACE,IAAA,EAAQ,KAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,MAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,QAAA;AAAA,IACR,IAAA,EAAQ,4BAAA;AAAA,IACR,OAAA,EAAW;AAAA,MACT;AAAA,QACE,IAAA,EAAQ,OAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,YAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,OAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,QAAA;AAAA,IACR,IAAA,EAAQ,8CAAA;AAAA,IACR,OAAA,EAAW;AAAA,MACT;AAAA,QACE,IAAA,EAAQ,WAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,aAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,iBAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,mBAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,cAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,QAAA;AAAA,IACR,IAAA,EAAQ,iCAAA;AAAA,IACR,OAAA,EAAW;AAAA,MACT;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,WAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,eAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,iBAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,YAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,gBAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,kBAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,cAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,OAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,QAAA;AAAA,IACR,IAAA,EAAQ,0BAAA;AAAA,IACR,OAAA,EAAW;AAAA,MACT;AAAA,QACE,IAAA,EAAQ,YAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,QAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,wBAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,OAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,QAAA;AAAA,IACR,IAAA,EAAQ,+BAAA;AAAA,IACR,OAAA,EAAW;AAAA,MACT;AAAA,QACE,IAAA,EAAQ,YAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,OAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,QAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,aAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,QAAA;AAAA,IACR,IAAA,EAAQ,yCAAA;AAAA,IACR,OAAA,EAAW;AAAA,MACT;AAAA,QACE,IAAA,EAAQ,OAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,eAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,gBAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,KAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,OAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,cAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,QAAA;AAAA,IACR,IAAA,EAAQ,8CAAA;AAAA,IACR,OAAA,EAAW;AAAA,MACT;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,QAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,WAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,wBAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,WAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,YAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,cAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,kBAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,sBAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,wBAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,iBAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,oBAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,QAAA;AAAA,IACR,IAAA,EAAQ,oCAAA;AAAA,IACR,OAAA,EAAW;AAAA,MACT;AAAA,QACE,IAAA,EAAQ,QAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,WAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,eAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,YAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,gBAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,oBAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,OAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,QAAA;AAAA,IACR,IAAA,EAAQ,2CAAA;AAAA,IACR,OAAA,EAAW;AAAA,MACT;AAAA,QACE,IAAA,EAAQ,YAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,OAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,QAAA;AAAA,IACR,IAAA,EAAQ,sCAAA;AAAA,IACR,OAAA,EAAW;AAAA,MACT;AAAA,QACE,IAAA,EAAQ,gBAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,cAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,mBAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,oBAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,mBAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,OAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,QAAA;AAAA,IACR,IAAA,EAAQ,oCAAA;AAAA,IACR,OAAA,EAAW;AAAA,MACT;AAAA,QACE,IAAA,EAAQ,gBAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,WAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,eAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,eAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,OAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,QAAA;AAAA,IACR,IAAA,EAAQ,+BAAA;AAAA,IACR,OAAA,EAAW;AAAA,MACT;AAAA,QACE,IAAA,EAAQ,gBAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,YAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,eAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,mBAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,gBAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,oBAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,cAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,OAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,QAAA;AAAA,IACR,IAAA,EAAQ,kCAAA;AAAA,IACR,OAAA,EAAW;AAAA,MACT;AAAA,QACE,IAAA,EAAQ,gBAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,YAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,OAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,WAAA;AAAA,IACR,IAAA,EAAQ,2CAAA;AAAA,IACR,KAAA,EAAS;AAAA,MACP;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,oBAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,QAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,OAAA,EAAW;AAAA,UACT;AAAA,YACE,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,gBAAA,EAAoB;AAAA,OACtB;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,kBAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,gBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,wBAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,SAAW,EAAC;AAAA,QACZ,gBAAA,EAAoB;AAAA,OACtB;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,oBAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,gBAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,SAAW,EAAC;AAAA,QACZ,gBAAA,EAAoB;AAAA,OACtB;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,OAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,gBAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,SAAW,EAAC;AAAA,QACZ,gBAAA,EAAoB;AAAA,OACtB;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,WAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,gBAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,SAAW,EAAC;AAAA,QACZ,gBAAA,EAAoB;AAAA,OACtB;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,QAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,gBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,QAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,SAAW,EAAC;AAAA,QACZ,gBAAA,EAAoB;AAAA,OACtB;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,QAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,OAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,aAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,iBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,mBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,cAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,OAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,YAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,SAAW,EAAC;AAAA,QACZ,gBAAA,EAAoB;AAAA,OACtB;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,cAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,QAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,kBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,sBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,wBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,eAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,aAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,YAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,UAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,SAAW,EAAC;AAAA,QACZ,gBAAA,EAAoB;AAAA,OACtB;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,mBAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,OAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,WAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,UAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,SAAW,EAAC;AAAA,QACZ,gBAAA,EAAoB;AAAA,OACtB;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,cAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,OAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,SAAW,EAAC;AAAA,QACZ,gBAAA,EAAoB;AAAA,OACtB;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,wBAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,WAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,SAAW,EAAC;AAAA,QACZ,gBAAA,EAAoB;AAAA,OACtB;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,iBAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,gBAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,OAAA,EAAW;AAAA,UACT;AAAA,YACE,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,gBAAA,EAAoB;AAAA,OACtB;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,YAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,gBAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,OAAA,EAAW;AAAA,UACT;AAAA,YACE,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,gBAAA,EAAoB;AAAA,OACtB;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,mBAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,gBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,wBAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,OAAA,EAAW;AAAA,UACT;AAAA,YACE,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,gBAAA,EAAoB;AAAA,OACtB;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,QAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,OAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,OAAA,EAAW;AAAA,UACT;AAAA,YACE,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,gBAAA,EAAoB;AAAA,OACtB;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,cAAA;AAAA,QACR,QAAU,EAAC;AAAA,QACX,OAAA,EAAW;AAAA,UACT;AAAA,YACE,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,gBAAA,EAAoB;AAAA,OACtB;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,qBAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,YAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,OAAA,EAAW;AAAA,UACT;AAAA,YACE,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,gBAAA,EAAoB;AAAA,OACtB;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,oBAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,YAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,OAAA,EAAW;AAAA,UACT;AAAA,YACE,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,gBAAA,EAAoB;AAAA,OACtB;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,gBAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,YAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,OAAA,EAAW;AAAA,UACT;AAAA,YACE,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,gBAAA,EAAoB;AAAA,OACtB;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,qBAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,OAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,OAAA,EAAW;AAAA,UACT;AAAA,YACE,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,gBAAA,EAAoB;AAAA,OACtB;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,sBAAA;AAAA,QACR,QAAU,EAAC;AAAA,QACX,OAAA,EAAW;AAAA,UACT;AAAA,YACE,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,gBAAA,EAAoB;AAAA,OACtB;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,oBAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,MAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,OAAA,EAAW;AAAA,UACT;AAAA,YACE,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,gBAAA,EAAoB;AAAA,OACtB;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,6BAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,OAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,OAAA,EAAW;AAAA,UACT;AAAA,YACE,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,gBAAA,EAAoB;AAAA,OACtB;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,cAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,UAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,SAAW,EAAC;AAAA,QACZ,gBAAA,EAAoB;AAAA,OACtB;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,cAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,UAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,SAAW,EAAC;AAAA,QACZ,gBAAA,EAAoB;AAAA,OACtB;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,sBAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,kBAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,SAAW,EAAC;AAAA,QACZ,gBAAA,EAAoB;AAAA,OACtB;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,yBAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,qBAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,SAAW,EAAC;AAAA,QACZ,gBAAA,EAAoB;AAAA,OACtB;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,8BAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,OAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,aAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,SAAW,EAAC;AAAA,QACZ,gBAAA,EAAoB;AAAA,OACtB;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,sBAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,kBAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,SAAW,EAAC;AAAA,QACZ,gBAAA,EAAoB;AAAA,OACtB;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,uBAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,QAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,aAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,SAAW,EAAC;AAAA,QACZ,gBAAA,EAAoB;AAAA,OACtB;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,kCAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,QAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,OAAA,EAAW;AAAA,UACT;AAAA,YACE,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,gBAAA,EAAoB;AAAA,OACtB;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,6BAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,QAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,QAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,UAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,SAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,SAAW,EAAC;AAAA,QACZ,gBAAA,EAAoB;AAAA,OACtB;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,kCAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,gBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,QAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,UAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,SAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,SAAW,EAAC;AAAA,QACZ,gBAAA,EAAoB;AAAA,OACtB;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,mBAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,OAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,YAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,aAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,iBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,YAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,cAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,SAAW,EAAC;AAAA,QACZ,gBAAA,EAAoB;AAAA,OACtB;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,sBAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,gBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,eAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,SAAW,EAAC;AAAA,QACZ,gBAAA,EAAoB;AAAA,OACtB;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,uBAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,gBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,UAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,cAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,qBAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,SAAW,EAAC;AAAA,QACZ,gBAAA,EAAoB;AAAA,OACtB;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,gBAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,gBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,OAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,cAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,YAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,SAAW,EAAC;AAAA,QACZ,gBAAA,EAAoB;AAAA,OACtB;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,WAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,OAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,iBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,qBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,gBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,UAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,cAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,SAAW,EAAC;AAAA,QACZ,gBAAA,EAAoB;AAAA,OACtB;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,eAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,gBAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,SAAW,EAAC;AAAA,QACZ,gBAAA,EAAoB;AAAA,OACtB;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,KAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,gBAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,SAAW,EAAC;AAAA,QACZ,gBAAA,EAAoB;AAAA,OACtB;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,kBAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,gBAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,SAAW,EAAC;AAAA,QACZ,gBAAA,EAAoB;AAAA,OACtB;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,mBAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,gBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,YAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,OAAA,EAAW;AAAA,UACT;AAAA,YACE,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,gBAAA,EAAoB;AAAA,OACtB;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,sBAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,gBAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,OAAA,EAAW;AAAA,UACT;AAAA,YACE,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,gBAAA,EAAoB;AAAA;AACtB;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAQ,kBAAA;AAAA,IACR,cAAA,EAAkB;AAAA,GACpB;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,QAAA;AAAA,IACR,IAAA,EAAQ,wEAAA;AAAA,IACR,OAAA,EAAW;AAAA,MACT;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,QAAA;AAAA,IACR,IAAA,EAAQ,0CAAA;AAAA,IACR,OAAA,EAAW;AAAA,MACT;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,QAAA;AAAA,IACR,IAAA,EAAQ,oCAAA;AAAA,IACR,OAAA,EAAW;AAAA,MACT;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,QAAA;AAAA,IACR,IAAA,EAAQ,6BAAA;AAAA,IACR,OAAA,EAAW;AAAA,MACT;AAAA,QACE,IAAA,EAAQ,MAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,cAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,kBAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,WAAA;AAAA,IACR,IAAA,EAAQ,qDAAA;AAAA,IACR,KAAA,EAAS;AAAA,MACP;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,YAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,SAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,UAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,OAAA,EAAW;AAAA,UACT;AAAA,YACE,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,gBAAA,EAAoB;AAAA,OACtB;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,kBAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,UAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,WAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,OAAA,EAAW;AAAA,UACT;AAAA,YACE,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,gBAAA,EAAoB;AAAA,OACtB;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,oBAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,MAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,IAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,UAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,OAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,MAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,SAAW,EAAC;AAAA,QACZ,gBAAA,EAAoB;AAAA,OACtB;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,0BAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,MAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,IAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,WAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,QAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,MAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,SAAW,EAAC;AAAA,QACZ,gBAAA,EAAoB;AAAA,OACtB;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,qBAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,OAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,UAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,OAAA,EAAW;AAAA,UACT;AAAA,YACE,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,gBAAA,EAAoB;AAAA,OACtB;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,sBAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,UAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,UAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,SAAW,EAAC;AAAA,QACZ,gBAAA,EAAoB;AAAA,OACtB;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,oBAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,cAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,OAAA,EAAW;AAAA,UACT;AAAA,YACE,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,gBAAA,EAAoB;AAAA,OACtB;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,KAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,UAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,OAAA,EAAW;AAAA,UACT;AAAA,YACE,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,gBAAA,EAAoB;AAAA,OACtB;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,WAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,SAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,SAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,OAAA,EAAW;AAAA,UACT;AAAA,YACE,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,gBAAA,EAAoB;AAAA,OACtB;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,gBAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,UAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,UAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,OAAA,EAAW;AAAA,UACT;AAAA,YACE,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,gBAAA,EAAoB;AAAA,OACtB;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,kBAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,MAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,IAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,SAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,OAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,MAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,SAAW,EAAC;AAAA,QACZ,gBAAA,EAAoB;AAAA,OACtB;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,uBAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,MAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,IAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,UAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,QAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,MAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,SAAW,EAAC;AAAA,QACZ,gBAAA,EAAoB;AAAA,OACtB;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,kBAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,OAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,UAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,OAAA,EAAW;AAAA,UACT;AAAA,YACE,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,gBAAA,EAAoB;AAAA,OACtB;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,mBAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,UAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,UAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,SAAW,EAAC;AAAA,QACZ,gBAAA,EAAoB;AAAA;AACtB;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAQ,kBAAA;AAAA,IACR,cAAA,EAAkB;AAAA,GACpB;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,WAAA;AAAA,IACR,IAAA,EAAQ,sDAAA;AAAA,IACR,KAAA,EAAS;AAAA,MACP;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,OAAA;AAAA,QACR,QAAU,EAAC;AAAA,QACX,OAAA,EAAW;AAAA,UACT;AAAA,YACE,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,gBAAA,EAAoB;AAAA,OACtB;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,oBAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,WAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,SAAW,EAAC;AAAA,QACZ,gBAAA,EAAoB;AAAA,OACtB;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,oBAAA;AAAA,QACR,QAAU,EAAC;AAAA,QACX,SAAW,EAAC;AAAA,QACZ,gBAAA,EAAoB;AAAA,OACtB;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,mBAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,UAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,SAAW,EAAC;AAAA,QACZ,gBAAA,EAAoB;AAAA,OACtB;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,mBAAA;AAAA,QACR,QAAU,EAAC;AAAA,QACX,SAAW,EAAC;AAAA,QACZ,gBAAA,EAAoB;AAAA;AACtB;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,aAAA;AAAA,IACR,IAAA,EAAQ,aAAA;AAAA,IACR,MAAA,EAAU;AAAA,MACR;AAAA,QACE,IAAA,EAAQ,OAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,kBAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,qBAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,OAAA;AAAA,IACR,IAAA,EAAQ,wEAAA;AAAA,IACR,IAAA,EAAQ,QAAA;AAAA,IACR,OAAA,EAAW;AAAA,MACT;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,mDAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,MAAA;AAAA,QACR,IAAA,EAAQ,mDAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,IAAA;AAAA,QACR,IAAA,EAAQ,mDAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,IAAA;AAAA,QACR,IAAA,EAAQ,qBAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,OAAA;AAAA,QACR,IAAA,EAAQ,qBAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,OAAA;AAAA,IACR,IAAA,EAAQ,uEAAA;AAAA,IACR,IAAA,EAAQ,QAAA;AAAA,IACR,OAAA,EAAW;AAAA,MACT;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,mDAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,MAAA;AAAA,QACR,IAAA,EAAQ,mDAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,IAAA;AAAA,QACR,IAAA,EAAQ,mDAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,KAAA;AAAA,QACR,IAAA,EAAQ,0CAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,QAAA;AAAA,QACR,IAAA,EAAQ,0CAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,OAAA;AAAA,IACR,IAAA,EAAQ,wEAAA;AAAA,IACR,IAAA,EAAQ,QAAA;AAAA,IACR,OAAA,EAAW;AAAA,MACT;AAAA,QACE,IAAA,EAAQ,OAAA;AAAA,QACR,IAAA,EAAQ,mDAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,mDAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,YAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,OAAA;AAAA,IACR,IAAA,EAAQ,6DAAA;AAAA,IACR,IAAA,EAAQ,QAAA;AAAA,IACR,OAAA,EAAW;AAAA,MACT;AAAA,QACE,IAAA,EAAQ,OAAA;AAAA,QACR,IAAA,EAAQ,6BAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,IAAA;AAAA,QACR,IAAA,EAAQ,qBAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,OAAA;AAAA,IACR,IAAA,EAAQ,+DAAA;AAAA,IACR,IAAA,EAAQ,MAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,QACE,IAAA,EAAQ,gBAAA;AAAA,QACR,IAAA,EAAQ,wEAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,eAAA;AAAA,QACR,IAAA,EAAQ,uEAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,gBAAA;AAAA,QACR,IAAA,EAAQ,wEAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,KAAA;AAAA,QACR,IAAA,EAAQ,6DAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,OAAA;AAAA,IACR,IAAA,EAAQ,+EAAA;AAAA,IACR,IAAA,EAAQ,QAAA;AAAA,IACR,OAAA,EAAW;AAAA,MACT;AAAA,QACE,IAAA,EAAQ,gBAAA;AAAA,QACR,IAAA,EAAQ,mDAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,WAAA;AAAA,QACR,IAAA,EAAQ,mDAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,OAAA;AAAA,IACR,IAAA,EAAQ,mFAAA;AAAA,IACR,IAAA,EAAQ,QAAA;AAAA,IACR,OAAA,EAAW;AAAA,MACT;AAAA,QACE,IAAA,EAAQ,gBAAA;AAAA,QACR,IAAA,EAAQ,mDAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,WAAA;AAAA,QACR,IAAA,EAAQ,mDAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,OAAA;AAAA,IACR,IAAA,EAAQ,gEAAA;AAAA,IACR,IAAA,EAAQ,MAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,QACE,IAAA,EAAQ,sBAAA;AAAA,QACR,IAAA,EAAQ,+EAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,0BAAA;AAAA,QACR,IAAA,EAAQ,mFAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,OAAA;AAAA,IACR,IAAA,EAAQ,wDAAA;AAAA,IACR,IAAA,EAAQ,MAAA;AAAA,IACR,UAAY;AAAC,GACf;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,OAAA;AAAA,IACR,IAAA,EAAQ,yEAAA;AAAA,IACR,IAAA,EAAQ,MAAA;AAAA,IACR,UAAY;AAAC,GACf;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,OAAA;AAAA,IACR,IAAA,EAAQ,kEAAA;AAAA,IACR,IAAA,EAAQ,MAAA;AAAA,IACR,UAAY;AAAC,GACf;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,OAAA;AAAA,IACR,IAAA,EAAQ,iDAAA;AAAA,IACR,IAAA,EAAQ,QAAA;AAAA,IACR,OAAA,EAAW;AAAA,MACT;AAAA,QACE,IAAA,EAAQ,gBAAA;AAAA,QACR,IAAA,EAAQ,qBAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,SAAA;AAAA,QACR,IAAA,EAAQ,mDAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,WAAA;AAAA,QACR,IAAA,EAAQ,YAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,OAAA;AAAA,IACR,IAAA,EAAQ,gDAAA;AAAA,IACR,IAAA,EAAQ,QAAA;AAAA,IACR,OAAA,EAAW;AAAA,MACT;AAAA,QACE,IAAA,EAAQ,gBAAA;AAAA,QACR,IAAA,EAAQ,qBAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,mDAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,QAAA;AAAA,QACR,IAAA,EAAQ,mDAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,wBAAA;AAAA,QACR,IAAA,EAAQ,qBAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,eAAA;AAAA,QACR,IAAA,EAAQ,qBAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,OAAA;AAAA,IACR,IAAA,EAAQ,mDAAA;AAAA,IACR,IAAA,EAAQ,QAAA;AAAA,IACR,OAAA,EAAW;AAAA,MACT;AAAA,QACE,IAAA,EAAQ,gBAAA;AAAA,QACR,IAAA,EAAQ,qBAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,SAAA;AAAA,QACR,IAAA,EAAQ,mDAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,OAAA;AAAA,IACR,IAAA,EAAQ,gDAAA;AAAA,IACR,IAAA,EAAQ,QAAA;AAAA,IACR,OAAA,EAAW;AAAA,MACT;AAAA,QACE,IAAA,EAAQ,gBAAA;AAAA,QACR,IAAA,EAAQ,qBAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,SAAA;AAAA,QACR,IAAA,EAAQ,mDAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,OAAA;AAAA,IACR,IAAA,EAAQ,oDAAA;AAAA,IACR,IAAA,EAAQ,QAAA;AAAA,IACR,OAAA,EAAW;AAAA,MACT;AAAA,QACE,IAAA,EAAQ,gBAAA;AAAA,QACR,IAAA,EAAQ,qBAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,YAAA;AAAA,QACR,IAAA,EAAQ,mDAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,OAAA;AAAA,IACR,IAAA,EAAQ,6CAAA;AAAA,IACR,IAAA,EAAQ,QAAA;AAAA,IACR,OAAA,EAAW;AAAA,MACT;AAAA,QACE,IAAA,EAAQ,gBAAA;AAAA,QACR,IAAA,EAAQ,qBAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,mDAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,QAAA;AAAA,QACR,IAAA,EAAQ,qBAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,OAAA;AAAA,IACR,IAAA,EAAQ,2CAAA;AAAA,IACR,IAAA,EAAQ,QAAA;AAAA,IACR,OAAA,EAAW;AAAA,MACT;AAAA,QACE,IAAA,EAAQ,gBAAA;AAAA,QACR,IAAA,EAAQ,qBAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,mDAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,QAAA;AAAA,QACR,IAAA,EAAQ,mDAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,SAAA;AAAA,QACR,IAAA,EAAQ,mDAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,oBAAA;AAAA,QACR,IAAA,EAAQ,qBAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,OAAA;AAAA,IACR,IAAA,EAAQ,0CAAA;AAAA,IACR,IAAA,EAAQ,QAAA;AAAA,IACR,OAAA,EAAW;AAAA,MACT;AAAA,QACE,IAAA,EAAQ,gBAAA;AAAA,QACR,IAAA,EAAQ,qBAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,YAAA;AAAA,QACR,IAAA,EAAQ,eAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,OAAA;AAAA,QACR,IAAA,EAAQ,mDAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,qBAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,kBAAA;AAAA,QACR,IAAA,EAAQ,qBAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,OAAA;AAAA,IACR,IAAA,EAAQ,6CAAA;AAAA,IACR,IAAA,EAAQ,QAAA;AAAA,IACR,OAAA,EAAW;AAAA,MACT;AAAA,QACE,IAAA,EAAQ,YAAA;AAAA,QACR,IAAA,EAAQ,eAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,OAAA;AAAA,QACR,IAAA,EAAQ,mDAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,OAAA;AAAA,IACR,IAAA,EAAQ,kDAAA;AAAA,IACR,IAAA,EAAQ,QAAA;AAAA,IACR,OAAA,EAAW;AAAA,MACT;AAAA,QACE,IAAA,EAAQ,OAAA;AAAA,QACR,IAAA,EAAQ,mDAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,eAAA;AAAA,QACR,IAAA,EAAQ,eAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,OAAA;AAAA,IACR,IAAA,EAAQ,iDAAA;AAAA,IACR,IAAA,EAAQ,QAAA;AAAA,IACR,OAAA,EAAW;AAAA,MACT;AAAA,QACE,IAAA,EAAQ,gBAAA;AAAA,QACR,IAAA,EAAQ,qBAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,mDAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,aAAA;AAAA,QACR,IAAA,EAAQ,oBAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,OAAA;AAAA,IACR,IAAA,EAAQ,oCAAA;AAAA,IACR,IAAA,EAAQ,MAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,QACE,IAAA,EAAQ,cAAA;AAAA,QACR,IAAA,EAAQ,+DAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,cAAA;AAAA,QACR,IAAA,EAAQ,gEAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,WAAA;AAAA,QACR,IAAA,EAAQ,wDAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,sBAAA;AAAA,QACR,IAAA,EAAQ,yEAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,aAAA;AAAA,QACR,IAAA,EAAQ,kEAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,oBAAA;AAAA,QACR,IAAA,EAAQ,iDAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,mBAAA;AAAA,QACR,IAAA,EAAQ,gDAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,sBAAA;AAAA,QACR,IAAA,EAAQ,mDAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,mBAAA;AAAA,QACR,IAAA,EAAQ,gDAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,uBAAA;AAAA,QACR,IAAA,EAAQ,oDAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,gBAAA;AAAA,QACR,IAAA,EAAQ,6CAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,cAAA;AAAA,QACR,IAAA,EAAQ,2CAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,aAAA;AAAA,QACR,IAAA,EAAQ,0CAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,gBAAA;AAAA,QACR,IAAA,EAAQ,6CAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,qBAAA;AAAA,QACR,IAAA,EAAQ,kDAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,oBAAA;AAAA,QACR,IAAA,EAAQ,iDAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF;AAEJ,CAAA;;;AC/pEO,IAAM,oBAAN,MAAwB;AAAA,EACrB,QAAA;AAAA,EACA,OAAA;AAAA,EACA,OAAA;AAAA,EAER,YAAY,IAAA,EAAgC;AAC1C,IAAA,IAAA,CAAK,UAAU,IAAA,CAAK,YAAA;AACpB,IAAA,IAAA,CAAK,UAAU,IAAA,CAAK,OAAA;AACpB,IAAA,IAAA,CAAK,WAAW,IAAIC,iBAAA,CAAS,eAAU,IAAA,CAAK,YAAA,EAAc,KAAK,QAAQ,CAAA;AAAA,EACzE;AAAA;AAAA,EAIA,MAAM,eAAe,aAAA,EAAmD;AACtE,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,QAAA,CAAS,KAAK,iBAAA,EAAmB,MAAA,CAAO,aAAa,CAAC,CAAA;AAChF,IAAA,OAAO,uBAAuB,MAAM,CAAA;AAAA,EACtC;AAAA,EAEA,MAAM,UAAU,aAAA,EAAwC;AACtD,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,QAAA,CAAS,KAAK,YAAA,EAAc,MAAA,CAAO,aAAa,CAAC,CAAA;AAC3E,IAAA,OAAO,MAAA,CAAQ,MAAA,CAAqB,CAAC,CAAC,CAAA;AAAA,EACxC;AAAA,EAEA,MAAM,eAAA,CAAgB,aAAA,EAAuB,UAAA,EAAqC;AAChF,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,QAAA,CAAS,KAAK,mBAAA,EAAqB;AAAA,MAC3D,GAAG,OAAO,aAAa,CAAA;AAAA,MACvB,GAAG,OAAO,UAAU;AAAA,KACrB,CAAA;AACD,IAAA,OAAO,YAAY,MAAM,CAAA;AAAA,EAC3B;AAAA,EAEA,MAAM,SAAS,OAAA,EAAkC;AAC/C,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,QAAA,CAAS,IAAA,CAAK,QAAA,EAAU,CAAC,OAAO,CAAA,EAAG,EAAE,eAAA,EAAiB,QAAA,EAAU,CAAA;AAC1F,IAAA,OAAO,OAAO,MAAA,CAAQ,MAAA,CAAqB,CAAC,CAAA,IAAK,GAAG,CAAC,CAAA;AAAA,EACvD;AAAA,EAEA,MAAM,aAAA,GAAiC;AACrC,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,QAAA,CAAS,KAAK,iBAAiB,CAAA;AACzD,IAAA,OAAO,YAAY,MAAM,CAAA;AAAA,EAC3B;AAAA,EAEA,MAAM,WAAA,GAA+B;AACnC,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,QAAA,CAAS,KAAK,cAAc,CAAA;AACtD,IAAA,OAAO,MAAA,CAAQ,MAAA,CAAqB,CAAC,CAAC,CAAA;AAAA,EACxC;AAAA,EAEA,MAAM,QAAA,GAA6B;AACjC,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,QAAA,CAAS,KAAK,WAAW,CAAA;AACnD,IAAA,OAAO,OAAA,CAAS,MAAA,CAAqB,CAAC,CAAC,CAAA;AAAA,EACzC;AAAA,EAEA,MAAM,kBAAkB,SAAA,EAAqC;AAC3D,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,QAAA,CAAS,KAAK,qBAAA,EAAuB,CAAC,SAAS,CAAC,CAAA;AAC1E,IAAA,OAAO,OAAA,CAAS,MAAA,CAAqB,CAAC,CAAC,CAAA;AAAA,EACzC;AAAA,EAEA,MAAM,iBAAiB,SAAA,EAAqC;AAC1D,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,QAAA,CAAS,KAAK,oBAAA,EAAsB,CAAC,SAAS,CAAC,CAAA;AACzE,IAAA,OAAO,OAAA,CAAS,MAAA,CAAqB,CAAC,CAAC,CAAA;AAAA,EACzC;AAAA,EAEA,MAAM,aAAa,SAAA,EAAoC;AACrD,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,QAAA,CAAS,KAAK,gBAAA,EAAkB,CAAC,SAAS,CAAC,CAAA;AACrE,IAAA,OAAO,YAAY,MAAM,CAAA;AAAA,EAC3B;AAAA,EAEA,MAAM,iBAAiB,KAAA,EAAgC;AACrD,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,QAAA,CAAS,IAAA,CAAK,qBAAA,EAAuB,CAAC,KAAK,CAAA,EAAG,EAAE,eAAA,EAAiB,QAAA,EAAU,CAAA;AACrG,IAAA,OAAO,MAAA,CAAQ,MAAA,CAAqB,CAAC,CAAA,IAAK,GAAG,CAAA;AAAA,EAC/C;AAAA;AAAA,EAIA,uBAAuB,MAAA,EAAiC;AACtD,IAAA,MAAM,QAAA,GAAqB;AAAA,MACzB,MAAA,CAAO,YAAY,GAAA,GAAM,GAAA;AAAA,MACzB,GAAG,eAAA,CAAgB,MAAA,CAAO,WAAW,CAAA;AAAA,MACrC,GAAG,eAAA,CAAgB,MAAA,CAAO,eAAe,CAAA;AAAA,MACzC,GAAG,eAAA,CAAgB,MAAA,CAAO,iBAAiB,CAAA;AAAA,MAC3C,MAAA,CAAO,SAAS,QAAA,EAAS;AAAA,MACzB,MAAA,CAAO,SAAS,QAAA,EAAS;AAAA,MACzB,MAAA,CAAO,eAAe,GAAA,GAAM;AAAA,KAC9B;AACA,IAAA,OAAO,EAAE,eAAA,EAAiB,IAAA,CAAK,OAAA,EAAS,UAAA,EAAY,sBAAsB,QAAA,EAAS;AAAA,EACrF;AAAA,EAEA,oBAAA,CAAqB,eAAuB,GAAA,EAAmB;AAC7D,IAAA,OAAO;AAAA,MACL,iBAAiB,IAAA,CAAK,OAAA;AAAA,MACtB,UAAA,EAAY,kBAAA;AAAA,MACZ,QAAA,EAAU,CAAC,GAAG,MAAA,CAAO,aAAa,CAAA,EAAG,GAAG,MAAA,CAAO,GAAG,CAAC;AAAA,KACrD;AAAA,EACF;AAAA,EAEA,uBAAuB,aAAA,EAA6B;AAClD,IAAA,OAAO;AAAA,MACL,iBAAiB,IAAA,CAAK,OAAA;AAAA,MACtB,UAAA,EAAY,oBAAA;AAAA,MACZ,QAAA,EAAU,CAAC,GAAG,MAAA,CAAO,aAAa,CAAC;AAAA,KACrC;AAAA,EACF;AAAA,EAEA,WAAW,aAAA,EAA6B;AACtC,IAAA,OAAO;AAAA,MACL,iBAAiB,IAAA,CAAK,OAAA;AAAA,MACtB,UAAA,EAAY,OAAA;AAAA,MACZ,QAAA,EAAU,CAAC,GAAG,MAAA,CAAO,aAAa,CAAC;AAAA,KACrC;AAAA,EACF;AAAA,EAEA,eAAe,aAAA,EAA6B;AAC1C,IAAA,OAAO;AAAA,MACL,iBAAiB,IAAA,CAAK,OAAA;AAAA,MACtB,UAAA,EAAY,WAAA;AAAA,MACZ,QAAA,EAAU,CAAC,GAAG,MAAA,CAAO,aAAa,CAAC;AAAA,KACrC;AAAA,EACF;AAAA,EAEA,WAAA,CAAY,eAAuB,MAAA,EAAsB;AACvD,IAAA,OAAO;AAAA,MACL,iBAAiB,IAAA,CAAK,OAAA;AAAA,MACtB,UAAA,EAAY,QAAA;AAAA,MACZ,QAAA,EAAU,CAAC,GAAG,MAAA,CAAO,aAAa,CAAA,EAAG,GAAG,MAAA,CAAO,MAAM,CAAC;AAAA,KACxD;AAAA,EACF;AAAA,EAEA,YAAY,MAAA,EAyBH;AACP,IAAA,MAAM,QAAA,GAAqB;AAAA;AAAA,MAEzB,OAAO,KAAA,CAAM,QAAA;AAAA,MACb,OAAO,KAAA,CAAM,QAAA;AAAA,MACb,OAAO,KAAA,CAAM,YAAA;AAAA,MACb,OAAO,KAAA,CAAM,cAAA;AAAA,MACb,MAAA,CAAO,MAAA,CAAO,KAAA,CAAM,SAAS,CAAA;AAAA,MAC7B,MAAA,CAAO,MAAA,CAAO,KAAA,CAAM,aAAa,CAAA;AAAA,MACjC,MAAA,CAAO,MAAA,CAAO,KAAA,CAAM,eAAe,CAAA;AAAA,MACnC,MAAA,CAAO,KAAA,CAAM,QAAA,CAAS,QAAA,EAAS;AAAA,MAC/B,MAAA,CAAO,KAAA,CAAM,QAAA,CAAS,QAAA,EAAS;AAAA,MAC/B,MAAA,CAAO,KAAA,CAAM,WAAA,GAAc,GAAA,GAAM,GAAA;AAAA,MACjC,MAAA,CAAO,KAAA,CAAM,KAAA,CAAM,QAAA,EAAS;AAAA;AAAA,MAE5B,GAAG,eAAA,CAAgB,MAAA,CAAO,UAAU,CAAA;AAAA;AAAA,MAEpC,GAAG,eAAA,CAAgB,MAAA,CAAO,cAAc,CAAA;AAAA;AAAA,MAExC,GAAG,eAAA,CAAgB,MAAA,CAAO,gBAAgB,CAAA;AAAA;AAAA,MAE1C,MAAA,CAAO,MAAA,CAAO,WAAA,CAAY,MAAM,CAAA;AAAA,MAChC,GAAG,MAAA,CAAO,WAAA;AAAA;AAAA,MAEV,OAAO,KAAA,CAAM,SAAA;AAAA,MACb,OAAO,KAAA,CAAM,MAAA;AAAA,MACb,GAAG,MAAA,CAAO,MAAA,CAAO,KAAA,CAAM,oBAAoB,CAAA;AAAA,MAC3C,MAAA,CAAO,KAAA,CAAM,KAAA,CAAM,QAAA,EAAS;AAAA;AAAA,MAE5B,MAAA,CAAO,MAAA,CAAO,SAAA,CAAU,MAAM,CAAA;AAAA,MAC9B,GAAG,MAAA,CAAO;AAAA,KACZ;AACA,IAAA,OAAO,EAAE,eAAA,EAAiB,IAAA,CAAK,OAAA,EAAS,UAAA,EAAY,UAAU,QAAA,EAAS;AAAA,EACzE;AAAA,EAEA,iBAAiB,MAAA,EA0BR;AACP,IAAA,MAAM,WAAqB,EAAC;AAG5B,IAAA,QAAA,CAAS,IAAA,CAAK,MAAA,CAAO,MAAA,CAAO,MAAA,CAAO,MAAM,CAAC,CAAA;AAC1C,IAAA,KAAA,MAAW,KAAA,IAAS,OAAO,MAAA,EAAQ;AACjC,MAAA,QAAA,CAAS,IAAA;AAAA,QACP,KAAA,CAAM,QAAA;AAAA,QACN,KAAA,CAAM,QAAA;AAAA,QACN,KAAA,CAAM,YAAA;AAAA,QACN,KAAA,CAAM,cAAA;AAAA,QACN,MAAA,CAAO,MAAM,SAAS,CAAA;AAAA,QACtB,MAAA,CAAO,MAAM,aAAa,CAAA;AAAA,QAC1B,MAAA,CAAO,MAAM,eAAe,CAAA;AAAA,QAC5B,KAAA,CAAM,SAAS,QAAA,EAAS;AAAA,QACxB,KAAA,CAAM,SAAS,QAAA,EAAS;AAAA,QACxB,KAAA,CAAM,cAAc,GAAA,GAAM,GAAA;AAAA,QAC1B,KAAA,CAAM,MAAM,QAAA;AAAS,OACvB;AAAA,IACF;AAGA,IAAA,QAAA,CAAS,IAAA,CAAK,GAAG,eAAA,CAAgB,MAAA,CAAO,cAAc,CAAC,CAAA;AAEvD,IAAA,QAAA,CAAS,IAAA,CAAK,GAAG,eAAA,CAAgB,MAAA,CAAO,kBAAkB,CAAC,CAAA;AAE3D,IAAA,QAAA,CAAS,IAAA,CAAK,GAAG,eAAA,CAAgB,MAAA,CAAO,oBAAoB,CAAC,CAAA;AAG7D,IAAA,QAAA,CAAS,IAAA,CAAK,MAAA,CAAO,MAAA,CAAO,YAAA,CAAa,MAAM,CAAC,CAAA;AAChD,IAAA,KAAA,MAAW,GAAA,IAAO,OAAO,YAAA,EAAc;AACrC,MAAA,QAAA,CAAS,KAAK,MAAA,CAAO,GAAA,CAAI,MAAM,CAAA,EAAG,GAAG,GAAG,CAAA;AAAA,IAC1C;AAGA,IAAA,QAAA,CAAS,IAAA;AAAA,MACP,OAAO,UAAA,CAAW,SAAA;AAAA,MAClB,MAAA,CAAO,MAAA,CAAO,UAAA,CAAW,KAAK,CAAA;AAAA,MAC9B,OAAO,UAAA,CAAW,MAAA;AAAA,MAClB,MAAA,CAAO,UAAA,CAAW,UAAA,CAAW,QAAA;AAAS,KACxC;AAGA,IAAA,QAAA,CAAS,IAAA,CAAK,OAAO,MAAA,CAAO,SAAA,CAAU,MAAM,CAAA,EAAG,GAAG,OAAO,SAAS,CAAA;AAGlE,IAAA,QAAA,CAAS,IAAA,CAAK,MAAA,CAAO,MAAA,CAAO,OAAA,CAAQ,MAAM,CAAC,CAAA;AAC3C,IAAA,KAAA,MAAW,GAAA,IAAO,OAAO,OAAA,EAAS;AAChC,MAAA,QAAA,CAAS,IAAA,CAAK,GAAG,MAAA,CAAO,GAAG,CAAC,CAAA;AAAA,IAC9B;AAEA,IAAA,OAAO,EAAE,eAAA,EAAiB,IAAA,CAAK,OAAA,EAAS,UAAA,EAAY,gBAAgB,QAAA,EAAS;AAAA,EAC/E;AAAA,EAEA,oBAAA,CAAqB,KAAA,EAAoB,SAAA,EAAqB,OAAA,EAAuB;AACnF,IAAA,MAAM,QAAA,GAAqB;AAAA;AAAA,MAEzB,KAAA,CAAM,KAAA;AAAA,MACN,KAAA,CAAM,aAAA;AAAA,MACN,GAAG,MAAA,CAAO,KAAA,CAAM,cAAc,CAAA;AAAA,MAC9B,GAAG,MAAA,CAAO,KAAA,CAAM,GAAG,CAAA;AAAA,MACnB,KAAA,CAAM,SAAS,QAAA,EAAS;AAAA,MACxB,KAAA,CAAM,KAAA;AAAA,MACN,GAAG,MAAA,CAAO,KAAA,CAAM,YAAY,CAAA;AAAA;AAAA,MAE5B,MAAA,CAAO,UAAU,MAAM,CAAA;AAAA,MACvB,GAAG,SAAA;AAAA;AAAA,MAEH,GAAG,OAAO,OAAO;AAAA,KACnB;AACA,IAAA,OAAO,EAAE,eAAA,EAAiB,IAAA,CAAK,OAAA,EAAS,UAAA,EAAY,qBAAqB,QAAA,EAAS;AAAA,EACpF;AAAA,EAEA,iBAAiB,KAAA,EAA0B;AACzC,IAAA,MAAM,QAAA,GAAqB;AAAA,MACzB,KAAA,CAAM,KAAA;AAAA,MACN,KAAA,CAAM,aAAA;AAAA,MACN,GAAG,MAAA,CAAO,KAAA,CAAM,cAAc,CAAA;AAAA,MAC9B,GAAG,MAAA,CAAO,KAAA,CAAM,GAAG,CAAA;AAAA,MACnB,KAAA,CAAM,SAAS,QAAA,EAAS;AAAA,MACxB,KAAA,CAAM,KAAA;AAAA,MACN,GAAG,MAAA,CAAO,KAAA,CAAM,YAAY;AAAA,KAC9B;AACA,IAAA,OAAO,EAAE,eAAA,EAAiB,IAAA,CAAK,OAAA,EAAS,UAAA,EAAY,gBAAgB,QAAA,EAAS;AAAA,EAC/E;AAAA,EAEA,yBAAyB,QAAA,EAAwB;AAC/C,IAAA,OAAO;AAAA,MACL,iBAAiB,IAAA,CAAK,OAAA;AAAA,MACtB,UAAA,EAAY,wBAAA;AAAA,MACZ,QAAA,EAAU,CAAC,QAAQ;AAAA,KACrB;AAAA,EACF;AAAA;AAAA;AAAA,EAKA,sBAAsB,MAAA,EAsBb;AACP,IAAA,MAAM,QAAA,GAAqB;AAAA;AAAA,MAEzB,OAAO,KAAA,CAAM,MAAA;AAAA,MACb,OAAO,KAAA,CAAM,QAAA;AAAA,MACb,OAAO,KAAA,CAAM,YAAA;AAAA,MACb,MAAA,CAAO,MAAA,CAAO,KAAA,CAAM,SAAS,CAAA;AAAA,MAC7B,MAAA,CAAO,MAAA,CAAO,KAAA,CAAM,aAAa,CAAA;AAAA,MACjC,OAAO,KAAA,CAAM,iBAAA;AAAA,MACb,MAAA,CAAO,KAAA,CAAM,QAAA,CAAS,QAAA,EAAS;AAAA,MAC/B,MAAA,CAAO,KAAA,CAAM,QAAA,CAAS,QAAA,EAAS;AAAA,MAC/B,MAAA,CAAO,KAAA,CAAM,KAAA,CAAM,QAAA,EAAS;AAAA;AAAA,MAE5B,OAAO,UAAA,CAAW,SAAA;AAAA,MAClB,OAAO,UAAA,CAAW,QAAA;AAAA,MAClB,GAAG,MAAA,CAAO,MAAA,CAAO,UAAA,CAAW,OAAO,CAAA;AAAA,MACnC,MAAA,CAAO,UAAA,CAAW,KAAA,CAAM,QAAA,EAAS;AAAA;AAAA,MAEjC,GAAG,eAAA,CAAgB,MAAA,CAAO,UAAU,CAAA;AAAA;AAAA,MAEpC,GAAG,eAAA,CAAgB,MAAA,CAAO,cAAc,CAAA;AAAA;AAAA,MAExC,MAAA,CAAO,MAAA,CAAO,SAAA,CAAU,MAAM,CAAA;AAAA,MAC9B,GAAG,MAAA,CAAO,SAAA;AAAA;AAAA,MAEV,MAAA,CAAO,MAAA,CAAO,WAAA,CAAY,MAAM,CAAA;AAAA,MAChC,GAAG,MAAA,CAAO;AAAA,KACZ;AACA,IAAA,OAAO,EAAE,eAAA,EAAiB,IAAA,CAAK,OAAA,EAAS,UAAA,EAAY,qBAAqB,QAAA,EAAS;AAAA,EACpF;AAAA;AAAA,EAGA,wBAAA,CAAyB,eAAuB,YAAA,EAA4B;AAC1E,IAAA,OAAO;AAAA,MACL,iBAAiB,IAAA,CAAK,OAAA;AAAA,MACtB,UAAA,EAAY,sBAAA;AAAA,MACZ,UAAU,CAAC,GAAG,MAAA,CAAO,aAAa,GAAG,YAAY;AAAA,KACnD;AAAA,EACF;AAAA;AAAA,EAGA,0BAA0B,MAAA,EAajB;AACP,IAAA,MAAM,QAAA,GAAqB;AAAA,MACzB,GAAG,MAAA,CAAO,MAAA,CAAO,aAAa,CAAA;AAAA;AAAA,MAE9B,GAAG,MAAA,CAAO,MAAA,CAAO,QAAA,CAAS,aAAa,CAAA;AAAA,MACvC,OAAO,QAAA,CAAS,QAAA;AAAA,MAChB,MAAA,CAAO,QAAA,CAAS,WAAA,CAAY,QAAA,EAAS;AAAA,MACrC,OAAO,QAAA,CAAS,eAAA;AAAA,MAChB,MAAA,CAAO,MAAA,CAAO,QAAA,CAAS,gBAAgB,CAAA;AAAA,MACvC,MAAA,CAAO,QAAA,CAAS,gBAAA,CAAiB,QAAA,EAAS;AAAA,MAC1C,MAAA,CAAO,QAAA,CAAS,KAAA,CAAM,QAAA,EAAS;AAAA;AAAA,MAE/B,MAAA,CAAO,MAAA,CAAO,WAAA,CAAY,MAAM,CAAA;AAAA,MAChC,GAAG,MAAA,CAAO,WAAA;AAAA;AAAA,MAEV,GAAG,eAAA,CAAgB,MAAA,CAAO,iBAAiB;AAAA,KAC7C;AACA,IAAA,OAAO,EAAE,eAAA,EAAiB,IAAA,CAAK,OAAA,EAAS,UAAA,EAAY,yBAAyB,QAAA,EAAS;AAAA,EACxF;AAAA;AAAA,EAGA,mBAAmB,MAAA,EAaV;AACP,IAAA,MAAM,QAAA,GAAqB;AAAA,MACzB,GAAG,MAAA,CAAO,MAAA,CAAO,aAAa,CAAA;AAAA;AAAA,MAE9B,GAAG,MAAA,CAAO,MAAA,CAAO,KAAA,CAAM,aAAa,CAAA;AAAA,MACpC,OAAO,KAAA,CAAM,QAAA;AAAA,MACb,GAAG,MAAA,CAAO,MAAA,CAAO,KAAA,CAAM,QAAQ,CAAA;AAAA,MAC/B,OAAO,KAAA,CAAM,YAAA;AAAA,MACb,OAAO,KAAA,CAAM,YAAA;AAAA,MACb,MAAA,CAAO,KAAA,CAAM,QAAA,CAAS,QAAA,EAAS;AAAA,MAC/B,MAAA,CAAO,KAAA,CAAM,KAAA,CAAM,QAAA,EAAS;AAAA;AAAA,MAE5B,MAAA,CAAO,MAAA,CAAO,WAAA,CAAY,MAAM,CAAA;AAAA,MAChC,GAAG,MAAA,CAAO,WAAA;AAAA;AAAA,MAEV,GAAG,MAAA,CAAO,MAAA,CAAO,SAAS;AAAA,KAC5B;AACA,IAAA,OAAO,EAAE,eAAA,EAAiB,IAAA,CAAK,OAAA,EAAS,UAAA,EAAY,kBAAkB,QAAA,EAAS;AAAA,EACjF;AAAA;AAAA,EAGA,eAAe,MAAA,EAsBN;AACP,IAAA,MAAM,QAAA,GAAqB;AAAA;AAAA,MAEzB,GAAG,MAAA,CAAO,MAAA,CAAO,KAAA,CAAM,aAAa,CAAA;AAAA,MACpC,OAAO,KAAA,CAAM,SAAA;AAAA,MACb,OAAO,KAAA,CAAM,WAAA;AAAA,MACb,OAAO,KAAA,CAAM,eAAA;AAAA,MACb,MAAA,CAAO,MAAA,CAAO,KAAA,CAAM,YAAY,CAAA;AAAA,MAChC,MAAA,CAAO,MAAA,CAAO,KAAA,CAAM,gBAAgB,CAAA;AAAA,MACpC,MAAA,CAAO,KAAA,CAAM,WAAA,CAAY,QAAA,EAAS;AAAA,MAClC,MAAA,CAAO,KAAA,CAAM,QAAA,CAAS,QAAA,EAAS;AAAA,MAC/B,MAAA,CAAO,KAAA,CAAM,KAAA,CAAM,QAAA,EAAS;AAAA;AAAA,MAE5B,GAAG,eAAA,CAAgB,MAAA,CAAO,aAAa,CAAA;AAAA;AAAA,MAEvC,GAAG,eAAA,CAAgB,MAAA,CAAO,iBAAiB,CAAA;AAAA;AAAA,MAE3C,MAAA,CAAO,MAAA,CAAO,YAAA,CAAa,MAAM,CAAA;AAAA,MACjC,GAAG,MAAA,CAAO,YAAA;AAAA;AAAA,MAEV,GAAG,MAAA,CAAO,MAAA,CAAO,QAAA,CAAS,aAAa,CAAA;AAAA,MACvC,OAAO,QAAA,CAAS,SAAA;AAAA,MAChB,OAAO,QAAA,CAAS,QAAA;AAAA,MAChB,MAAA,CAAO,QAAA,CAAS,KAAA,CAAM,QAAA,EAAS;AAAA;AAAA,MAE/B,MAAA,CAAO,MAAA,CAAO,WAAA,CAAY,MAAM,CAAA;AAAA,MAChC,GAAG,MAAA,CAAO;AAAA,KACZ;AACA,IAAA,OAAO,EAAE,eAAA,EAAiB,IAAA,CAAK,OAAA,EAAS,UAAA,EAAY,aAAa,QAAA,EAAS;AAAA,EAC5E;AAAA;AAAA,EAGA,kBAAkB,aAAA,EAA6B;AAC7C,IAAA,OAAO;AAAA,MACL,iBAAiB,IAAA,CAAK,OAAA;AAAA,MACtB,UAAA,EAAY,eAAA;AAAA,MACZ,QAAA,EAAU,CAAC,GAAG,MAAA,CAAO,aAAa,CAAC;AAAA,KACrC;AAAA,EACF;AAAA;AAAA,EAGA,SAAS,aAAA,EAA6B;AACpC,IAAA,OAAO;AAAA,MACL,iBAAiB,IAAA,CAAK,OAAA;AAAA,MACtB,UAAA,EAAY,KAAA;AAAA,MACZ,QAAA,EAAU,CAAC,GAAG,MAAA,CAAO,aAAa,CAAC;AAAA,KACrC;AAAA,EACF;AAAA;AAAA,EAGA,qBAAqB,aAAA,EAA6B;AAChD,IAAA,OAAO;AAAA,MACL,iBAAiB,IAAA,CAAK,OAAA;AAAA,MACtB,UAAA,EAAY,kBAAA;AAAA,MACZ,QAAA,EAAU,CAAC,GAAG,MAAA,CAAO,aAAa,CAAC;AAAA,KACrC;AAAA,EACF;AAAA;AAAA;AAAA,EAKA,MAAM,eAAA,CAAgB,aAAA,EAAuB,SAAA,EAAoC;AAC/E,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,QAAA,CAAS,KAAK,mBAAA,EAAqB;AAAA,MAC3D,GAAG,OAAO,aAAa,CAAA;AAAA,MACvB,OAAO,SAAS;AAAA,KACjB,CAAA;AACD,IAAA,OAAO,YAAY,MAAM,CAAA;AAAA,EAC3B;AAAA;AAAA,EAGA,MAAM,kBAAkB,aAAA,EAAwC;AAC9D,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,QAAA,CAAS,KAAK,sBAAA,EAAwB,MAAA,CAAO,aAAa,CAAC,CAAA;AACrF,IAAA,OAAO,OAAO,MAAA,CAAQ,MAAA,CAAqB,CAAC,CAAA,IAAK,GAAG,CAAC,CAAA;AAAA,EACvD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,QAAQ,KAAA,EAAsD;AAClE,IAAA,IAAI,CAAC,IAAA,CAAK,OAAA,EAAS,MAAM,IAAI,MAAM,uCAAuC,CAAA;AAC1E,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,OAAA,CAAQ,QAAQ,KAAK,CAAA;AAC/C,IAAA,OAAO,EAAE,gBAAA,EAAkB,MAAA,CAAO,gBAAA,EAAiB;AAAA,EACrD;AAAA,EAEA,MAAM,iBAAA,CAAkB,MAAA,EAA2B,SAAA,EAA2D;AAC5G,IAAA,MAAM,KAAA,GAAQ,CAAC,GAAI,SAAA,IAAa,EAAC,EAAI,IAAA,CAAK,sBAAA,CAAuB,MAAM,CAAC,CAAA;AACxE,IAAA,OAAO,IAAA,CAAK,QAAQ,KAAK,CAAA;AAAA,EAC3B;AAAA,EAEA,MAAM,eAAA,CAAgB,aAAA,EAAuB,GAAA,EAAa,SAAA,EAA2D;AACnH,IAAA,MAAM,KAAA,GAAQ,CAAC,GAAI,SAAA,IAAa,IAAK,IAAA,CAAK,oBAAA,CAAqB,aAAA,EAAe,GAAG,CAAC,CAAA;AAClF,IAAA,OAAO,IAAA,CAAK,QAAQ,KAAK,CAAA;AAAA,EAC3B;AAAA,EAEA,MAAM,kBAAkB,aAAA,EAA8D;AACpF,IAAA,OAAO,KAAK,OAAA,CAAQ,CAAC,KAAK,sBAAA,CAAuB,aAAa,CAAC,CAAC,CAAA;AAAA,EAClE;AAAA,EAEA,MAAM,KAAA,CAAM,aAAA,EAAuB,SAAA,EAA2D;AAC5F,IAAA,MAAM,KAAA,GAAQ,CAAC,GAAI,SAAA,IAAa,EAAC,EAAI,IAAA,CAAK,UAAA,CAAW,aAAa,CAAC,CAAA;AACnE,IAAA,OAAO,IAAA,CAAK,QAAQ,KAAK,CAAA;AAAA,EAC3B;AAAA,EAEA,MAAM,UAAU,aAAA,EAA8D;AAC5E,IAAA,OAAO,KAAK,OAAA,CAAQ,CAAC,KAAK,cAAA,CAAe,aAAa,CAAC,CAAC,CAAA;AAAA,EAC1D;AAAA,EAEA,MAAM,MAAA,CAAO,aAAA,EAAuB,MAAA,EAAuD;AACzF,IAAA,OAAO,IAAA,CAAK,QAAQ,CAAC,IAAA,CAAK,YAAY,aAAA,EAAe,MAAM,CAAC,CAAC,CAAA;AAAA,EAC/D;AAAA,EAEA,MAAM,eAAA,CAAgB,KAAA,EAAoB,SAAA,EAAqB,SAAiB,SAAA,EAA2D;AACzI,IAAA,MAAM,KAAA,GAAQ,CAAC,GAAI,SAAA,IAAa,EAAC,EAAI,IAAA,CAAK,oBAAA,CAAqB,KAAA,EAAO,SAAA,EAAW,OAAO,CAAC,CAAA;AACzF,IAAA,OAAO,IAAA,CAAK,QAAQ,KAAK,CAAA;AAAA,EAC3B;AAAA,EAEA,MAAM,YAAY,KAAA,EAA2D;AAC3E,IAAA,OAAO,KAAK,OAAA,CAAQ,CAAC,KAAK,gBAAA,CAAiB,KAAK,CAAC,CAAC,CAAA;AAAA,EACpD;AAAA,EAEA,MAAM,oBAAoB,QAAA,EAAyD;AACjF,IAAA,OAAO,KAAK,OAAA,CAAQ,CAAC,KAAK,wBAAA,CAAyB,QAAQ,CAAC,CAAC,CAAA;AAAA,EAC/D;AAAA;AAAA,EAIA,MAAM,iBAAiB,MAAA,EAA0G;AAC/H,IAAA,OAAO,KAAK,OAAA,CAAQ,CAAC,KAAK,qBAAA,CAAsB,MAAM,CAAC,CAAC,CAAA;AAAA,EAC1D;AAAA,EAEA,MAAM,mBAAA,CAAoB,aAAA,EAAuB,YAAA,EAA6D;AAC5G,IAAA,OAAO,IAAA,CAAK,QAAQ,CAAC,IAAA,CAAK,yBAAyB,aAAA,EAAe,YAAY,CAAC,CAAC,CAAA;AAAA,EAClF;AAAA,EAEA,MAAM,oBAAA,CAAqB,MAAA,EAAuE,SAAA,EAA2D;AAC3J,IAAA,MAAM,KAAA,GAAQ,CAAC,GAAI,SAAA,IAAa,EAAC,EAAI,IAAA,CAAK,yBAAA,CAA0B,MAAM,CAAC,CAAA;AAC3E,IAAA,OAAO,IAAA,CAAK,QAAQ,KAAK,CAAA;AAAA,EAC3B;AAAA,EAEA,MAAM,aAAA,CAAc,MAAA,EAAgE,SAAA,EAA2D;AAC7I,IAAA,MAAM,KAAA,GAAQ,CAAC,GAAI,SAAA,IAAa,EAAC,EAAI,IAAA,CAAK,kBAAA,CAAmB,MAAM,CAAC,CAAA;AACpE,IAAA,OAAO,IAAA,CAAK,QAAQ,KAAK,CAAA;AAAA,EAC3B;AAAA,EAEA,MAAM,SAAA,CAAU,MAAA,EAA4D,SAAA,EAA2D;AACrI,IAAA,MAAM,KAAA,GAAQ,CAAC,GAAI,SAAA,IAAa,EAAC,EAAI,IAAA,CAAK,cAAA,CAAe,MAAM,CAAC,CAAA;AAChE,IAAA,OAAO,IAAA,CAAK,QAAQ,KAAK,CAAA;AAAA,EAC3B;AAAA,EAEA,MAAM,aAAa,aAAA,EAA8D;AAC/E,IAAA,OAAO,KAAK,OAAA,CAAQ,CAAC,KAAK,iBAAA,CAAkB,aAAa,CAAC,CAAC,CAAA;AAAA,EAC7D;AAAA,EAEA,MAAM,GAAA,CAAI,aAAA,EAAuB,SAAA,EAA2D;AAC1F,IAAA,MAAM,KAAA,GAAQ,CAAC,GAAI,SAAA,IAAa,EAAC,EAAI,IAAA,CAAK,QAAA,CAAS,aAAa,CAAC,CAAA;AACjE,IAAA,OAAO,IAAA,CAAK,QAAQ,KAAK,CAAA;AAAA,EAC3B;AAAA,EAEA,MAAM,gBAAgB,aAAA,EAA8D;AAClF,IAAA,OAAO,KAAK,OAAA,CAAQ,CAAC,KAAK,oBAAA,CAAqB,aAAa,CAAC,CAAC,CAAA;AAAA,EAChE;AACF;AAIA,SAAS,gBAAgB,MAAA,EAA2B;AAClD,EAAA,MAAM,QAAA,GAAqB,CAAC,MAAA,CAAO,MAAA,CAAO,MAAM,CAAC,CAAA;AACjD,EAAA,KAAA,MAAW,KAAK,MAAA,EAAQ;AACtB,IAAA,QAAA,CAAS,IAAA,CAAK,EAAE,aAAa,CAAA;AAC7B,IAAA,QAAA,CAAS,KAAK,MAAA,CAAO,eAAA,CAAgB,CAAA,CAAE,UAAU,CAAC,CAAC,CAAA;AACnD,IAAA,QAAA,CAAS,IAAA,CAAK,GAAG,MAAA,CAAO,CAAA,CAAE,KAAK,CAAC,CAAA;AAChC,IAAA,QAAA,CAAS,IAAA,CAAK,GAAG,MAAA,CAAO,CAAA,CAAE,QAAQ,CAAC,CAAA;AAAA,EACrC;AACA,EAAA,OAAO,QAAA;AACT;AAEA,SAAS,YAAY,MAAA,EAAyB;AAC5C,EAAA,MAAM,GAAA,GAAM,MAAA;AACZ,EAAA,IAAI,OAAO,GAAA,CAAI,CAAC,MAAM,QAAA,EAAU,OAAO,IAAI,CAAC,CAAA;AAC5C,EAAA,IAAI,OAAO,GAAA,CAAI,CAAC,CAAA,KAAM,QAAA,IAAY,IAAI,CAAC,CAAA,KAAM,IAAA,IAAQ,KAAA,IAAS,IAAI,CAAC,CAAA,IAAK,MAAA,IAAU,GAAA,CAAI,CAAC,CAAA,EAAG;AACxF,IAAA,MAAM,CAAA,GAAI,IAAI,CAAC,CAAA;AACf,IAAA,OAAO,SAAS,CAAC,CAAA;AAAA,EACnB;AACA,EAAA,OAAO,MAAA,CAAO,MAAA,CAAO,GAAA,CAAI,CAAC,CAAC,CAAC,CAAA;AAC9B;AAEA,SAAS,uBAAuB,MAAA,EAAoC;AAClE,EAAA,MAAM,CAAA,GAAI,MAAA;AAEV,EAAA,MAAM,GAAA,GAAM,CAAC,GAAA,EAAa,KAAA,KAA2B;AACnD,IAAA,IAAI,GAAA,IAAO,CAAA,EAAG,OAAO,CAAA,CAAE,GAAG,CAAA;AAC1B,IAAA,MAAM,GAAA,GAAM,MAAA;AACZ,IAAA,OAAO,IAAI,KAAK,CAAA;AAAA,EAClB,CAAA;AAEA,EAAA,OAAO;AAAA,IACL,QAAA,EAAU,MAAA,CAAO,GAAA,CAAI,UAAA,EAAY,CAAC,CAAC,CAAA;AAAA,IACnC,MAAA,EAAQ,MAAA,CAAO,GAAA,CAAI,QAAA,EAAU,CAAC,CAAC,CAAA;AAAA,IAC/B,UAAU,MAAA,CAAO,MAAA,CAAO,IAAI,UAAA,EAAY,CAAC,CAAC,CAAC,CAAA;AAAA,IAC3C,UAAU,MAAA,CAAO,MAAA,CAAO,IAAI,UAAA,EAAY,CAAC,CAAC,CAAC,CAAA;AAAA,IAC3C,WAAW,MAAA,CAAO,MAAA,CAAO,IAAI,WAAA,EAAa,CAAC,CAAC,CAAC,CAAA;AAAA,IAC7C,sBAAA,EAAwB,gBAAA,CAAiB,GAAA,CAAI,wBAAA,EAA0B,CAAC,CAAC,CAAA;AAAA,IACzE,SAAA,EAAW,OAAA,CAAQ,GAAA,CAAI,WAAA,EAAa,CAAC,CAAC,CAAA;AAAA,IACtC,UAAA,EAAY,OAAA,CAAQ,GAAA,CAAI,YAAA,EAAc,CAAC,CAAC,CAAA;AAAA,IACxC,YAAA,EAAc,OAAA,CAAQ,GAAA,CAAI,cAAA,EAAgB,CAAC,CAAC,CAAA;AAAA,IAC5C,gBAAA,EAAkB,MAAA,CAAO,GAAA,CAAI,kBAAA,EAAoB,CAAC,CAAC,CAAA;AAAA,IACnD,oBAAA,EAAsB,MAAA,CAAO,GAAA,CAAI,sBAAA,EAAwB,EAAE,CAAC,CAAA;AAAA,IAC5D,sBAAA,EAAwB,MAAA,CAAO,GAAA,CAAI,wBAAA,EAA0B,EAAE,CAAC,CAAA;AAAA,IAChE,eAAA,EAAiB,OAAA,CAAQ,GAAA,CAAI,iBAAA,EAAmB,EAAE,CAAC,CAAA;AAAA,IACnD,kBAAA,EAAoB,OAAO,MAAA,CAAO,GAAA,CAAI,sBAAsB,EAAE,CAAA,IAAK,GAAG,CAAC;AAAA,GACzE;AACF;AAEA,SAAS,iBAAiB,GAAA,EAAsB;AAC9C,EAAA,IAAI,OAAO,GAAA,KAAQ,QAAA,EAAU,OAAO,GAAA;AACpC,EAAA,IAAI,OAAO,QAAQ,QAAA,IAAY,GAAA,KAAQ,QAAQ,KAAA,IAAS,GAAA,IAAO,UAAU,GAAA,EAAK;AAC5E,IAAA,OAAO,SAAS,GAAoC,CAAA;AAAA,EACtD;AACA,EAAA,OAAO,MAAA,CAAO,MAAA,CAAO,GAAG,CAAC,CAAA;AAC3B;ACvqBO,IAAM,cAAN,MAAkB;AAAA,EACf,QAAA;AAAA,EACA,OAAA;AAAA,EACA,OAAA;AAAA,EAER,YAAY,IAAA,EAA0B;AACpC,IAAA,IAAA,CAAK,UAAU,IAAA,CAAK,YAAA;AACpB,IAAA,IAAA,CAAK,WAAW,IAAIA,iBAAAA,CAAS,eAAU,IAAA,CAAK,YAAA,EAAc,KAAK,QAAQ,CAAA;AACvE,IAAA,IAAA,CAAK,UAAU,IAAA,CAAK,OAAA;AAAA,EACtB;AAAA;AAAA;AAAA,EAKA,MAAM,SAAA,CAAU,OAAA,EAAiB,aAAA,EAAwC;AACvE,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,QAAA,CAAS,IAAA,CAAK,YAAA,EAAc,CAAC,OAAA,EAAS,GAAG,MAAA,CAAO,aAAa,CAAC,CAAC,CAAA;AACzF,IAAA,OAAO,cAAc,MAAM,CAAA;AAAA,EAC7B;AAAA;AAAA,EAGA,MAAM,cAAA,CAAe,QAAA,EAAoB,cAAA,EAA6C;AACpF,IAAA,IAAI,QAAA,CAAS,MAAA,KAAW,cAAA,CAAe,MAAA,EAAQ;AAC7C,MAAA,MAAM,IAAI,MAAM,uDAAuD,CAAA;AAAA,IACzE;AACA,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,QAAA,CAAS,KAAK,kBAAA,EAAoB;AAAA,MAC1D,QAAA;AAAA,MACA,eAAe,GAAA,CAAI,CAAC,EAAA,KAAO,MAAA,CAAO,EAAE,CAAC;AAAA,KACtC,CAAA;AACD,IAAA,MAAM,GAAA,GAAM,MAAA;AACZ,IAAA,MAAM,QAAA,GAAW,IAAI,CAAC,CAAA;AACtB,IAAA,OAAO,QAAA,CAAS,IAAI,CAAC,CAAA,KAAM,OAAO,MAAA,CAAO,CAAC,CAAC,CAAC,CAAA;AAAA,EAC9C;AAAA;AAAA,EAGA,MAAM,gBAAA,CAAiB,KAAA,EAAe,QAAA,EAAoC;AACxE,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,QAAA,CAAS,KAAK,qBAAA,EAAuB,CAAC,KAAA,EAAO,QAAQ,CAAC,CAAA;AAChF,IAAA,OAAO,OAAA,CAAS,MAAA,CAAqB,CAAC,CAAC,CAAA;AAAA,EACzC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAcA,oBACE,IAAA,EACA,EAAA,EACA,eACA,MAAA,EACA,IAAA,GAAiB,EAAC,EACZ;AACN,IAAA,OAAO;AAAA,MACL,iBAAiB,IAAA,CAAK,OAAA;AAAA,MACtB,UAAA,EAAY,oBAAA;AAAA,MACZ,UAAU,CAAC,IAAA,EAAM,EAAA,EAAI,GAAG,OAAO,aAAa,CAAA,EAAG,GAAG,MAAA,CAAO,MAAM,CAAA,EAAG,MAAA,CAAO,KAAK,MAAM,CAAA,EAAG,GAAG,IAAI;AAAA,KAChG;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,sBAAA,CAAuB,UAAkB,QAAA,EAAyB;AAChE,IAAA,OAAO;AAAA,MACL,iBAAiB,IAAA,CAAK,OAAA;AAAA,MACtB,UAAA,EAAY,sBAAA;AAAA,MACZ,QAAA,EAAU,CAAC,QAAA,EAAU,QAAA,GAAW,MAAM,GAAG;AAAA,KAC3C;AAAA,EACF;AAAA;AAAA;AAAA,EAKA,MAAM,eACJ,IAAA,EACA,EAAA,EACA,eACA,MAAA,EACA,IAAA,GAAiB,EAAC,EACqB;AACvC,IAAA,IAAI,CAAC,IAAA,CAAK,OAAA,EAAS,MAAM,IAAI,MAAM,uCAAuC,CAAA;AAC1E,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,OAAA,CAAQ,OAAA,CAAQ;AAAA,MACxC,KAAK,mBAAA,CAAoB,IAAA,EAAM,EAAA,EAAI,aAAA,EAAe,QAAQ,IAAI;AAAA,KAC/D,CAAA;AACD,IAAA,OAAO,EAAE,gBAAA,EAAkB,MAAA,CAAO,gBAAA,EAAiB;AAAA,EACrD;AAAA;AAAA,EAGA,MAAM,iBAAA,CACJ,QAAA,EACA,QAAA,EACuC;AACvC,IAAA,IAAI,CAAC,IAAA,CAAK,OAAA,EAAS,MAAM,IAAI,MAAM,uCAAuC,CAAA;AAC1E,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,OAAA,CAAQ,OAAA,CAAQ,CAAC,IAAA,CAAK,sBAAA,CAAuB,QAAA,EAAU,QAAQ,CAAC,CAAC,CAAA;AAC3F,IAAA,OAAO,EAAE,gBAAA,EAAkB,MAAA,CAAO,gBAAA,EAAiB;AAAA,EACrD;AACF;AAEA,SAAS,cAAc,MAAA,EAAyB;AAC9C,EAAA,MAAM,GAAA,GAAM,MAAA;AACZ,EAAA,IAAI,OAAO,GAAA,CAAI,CAAC,MAAM,QAAA,EAAU,OAAO,IAAI,CAAC,CAAA;AAC5C,EAAA,OAAO,MAAA,CAAO,MAAA,CAAO,GAAA,CAAI,CAAC,CAAC,CAAC,CAAA;AAC9B;;;AClIA,IAAA,aAAA,GAAA;AAAA,EACE;AAAA,IACE,IAAA,EAAQ,QAAA;AAAA,IACR,IAAA,EAAQ,qBAAA;AAAA,IACR,OAAA,EAAW;AAAA,MACT,EAAE,IAAA,EAAQ,KAAA,EAAO,IAAA,EAAQ,qBAAA,EAAsB;AAAA,MAC/C,EAAE,IAAA,EAAQ,MAAA,EAAQ,IAAA,EAAQ,qBAAA;AAAsB;AAClD,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,WAAA;AAAA,IACR,IAAA,EAAQ,eAAA;AAAA,IACR,KAAA,EAAS;AAAA,MACP;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,SAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR,EAAE,IAAA,EAAQ,SAAA,EAAW,IAAA,EAAQ,mDAAA,EAAoD;AAAA,UACjF,EAAE,IAAA,EAAQ,QAAA,EAAU,IAAA,EAAQ,qBAAA;AAAsB,SACpD;AAAA,QACA,OAAA,EAAW,CAAC,EAAE,IAAA,EAAQ,cAAc,CAAA;AAAA,QACpC,gBAAA,EAAoB;AAAA,OACtB;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,YAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR,EAAE,IAAA,EAAQ,SAAA,EAAW,IAAA,EAAQ,mDAAA;AAAoD,SACnF;AAAA,QACA,OAAA,EAAW,CAAC,EAAE,IAAA,EAAQ,uBAAuB,CAAA;AAAA,QAC7C,gBAAA,EAAoB;AAAA,OACtB;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,WAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR,EAAE,IAAA,EAAQ,OAAA,EAAS,IAAA,EAAQ,mDAAA,EAAoD;AAAA,UAC/E,EAAE,IAAA,EAAQ,SAAA,EAAW,IAAA,EAAQ,mDAAA;AAAoD,SACnF;AAAA,QACA,OAAA,EAAW,CAAC,EAAE,IAAA,EAAQ,uBAAuB,CAAA;AAAA,QAC7C,gBAAA,EAAoB;AAAA,OACtB;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,WAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR,EAAE,IAAA,EAAQ,SAAA,EAAW,IAAA,EAAQ,mDAAA;AAAoD,SACnF;AAAA,QACA,OAAA,EAAW,CAAC,EAAE,IAAA,EAAQ,uBAAuB,CAAA;AAAA,QAC7C,gBAAA,EAAoB;AAAA;AACtB;AACF;AAEJ,CAAA;;;ACrDA,IAAA,cAAA,GAAA;AAAA,EACE;AAAA,IACE,IAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAQ,YAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV,EAAE,IAAA,EAAQ,OAAA,EAAS,IAAA,EAAQ,IAAA,EAAK;AAAA,MAChC,EAAE,IAAA,EAAQ,MAAA,EAAQ,IAAA,EAAQ,IAAA;AAAK;AACjC,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,QAAA;AAAA,IACR,IAAA,EAAQ,+BAAA;AAAA,IACR,OAAA,EAAW;AAAA,MACT,EAAE,IAAA,EAAQ,IAAA,EAAM,IAAA,EAAQ,mDAAA,EAAoD;AAAA,MAC5E,EAAE,IAAA,EAAQ,UAAA,EAAY,IAAA,EAAQ,eAAA,EAAgB;AAAA,MAC9C,EAAE,IAAA,EAAQ,UAAA,EAAY,IAAA,EAAQ,qCAAA;AAAsC;AACtE,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,QAAA;AAAA,IACR,IAAA,EAAQ,oCAAA;AAAA,IACR,OAAA,EAAW;AAAA,MACT,EAAE,IAAA,EAAQ,UAAA,EAAY,IAAA,EAAQ,sCAAA;AAAuC;AACvE,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,WAAA;AAAA,IACR,IAAA,EAAQ,wBAAA;AAAA,IACR,KAAA,EAAS;AAAA,MACP;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,aAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR,EAAE,IAAA,EAAQ,OAAA,EAAS,IAAA,EAAQ,oDAAA;AAAqD,SAClF;AAAA,QACA,OAAA,EAAW;AAAA,UACT,EAAE,MAAQ,0DAAA;AAA2D,SACvE;AAAA,QACA,gBAAA,EAAoB;AAAA,OACtB;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,aAAA;AAAA,QACR,QAAU,EAAC;AAAA,QACX,OAAA,EAAW,CAAC,EAAE,IAAA,EAAQ,cAAc,CAAA;AAAA,QACpC,gBAAA,EAAoB;AAAA;AACtB;AACF;AAEJ,CAAA;;;ACzCO,IAAM,eAAN,MAAmB;AAAA,EACxB,WAAA,CACU,aAAA,EACA,QAAA,EACA,OAAA,EACR;AAHQ,IAAA,IAAA,CAAA,aAAA,GAAA,aAAA;AACA,IAAA,IAAA,CAAA,QAAA,GAAA,QAAA;AACA,IAAA,IAAA,CAAA,OAAA,GAAA,OAAA;AAAA,EACP;AAAA;AAAA,EAGH,MAAM,iBAAiB,aAAA,EAAwC;AAC7D,IAAA,MAAM,QAAA,GAAW,IAAIA,iBAAAA,CAAS,aAAA,EAAU,KAAK,aAAA,CAAc,OAAA,EAAS,KAAK,QAAQ,CAAA;AACjF,IAAA,MAAM,SAAS,MAAM,QAAA,CAAS,KAAK,YAAA,EAAc,MAAA,CAAO,aAAa,CAAC,CAAA;AACtE,IAAA,OAAO,MAAA,CAAQ,MAAA,CAAqB,CAAC,CAAC,CAAA;AAAA,EACxC;AAAA;AAAA,EAGA,MAAM,WAAW,aAAA,EAAyC;AACxD,IAAA,MAAM,OAAA,GAAU,MAAM,IAAA,CAAK,gBAAA,CAAiB,aAAa,CAAA;AACzD,IAAA,MAAM,SAAS,IAAIA,iBAAAA,CAAS,cAAA,EAAW,OAAA,EAAS,KAAK,QAAQ,CAAA;AAC7D,IAAA,MAAM,MAAA,GAAS,MAAM,MAAA,CAAO,IAAA,CAAK,aAAa,CAAA;AAC9C,IAAA,OAAO,OAAA,CAAS,MAAA,CAAqB,CAAC,CAAC,CAAA;AAAA,EACzC;AAAA;AAAA,EAGA,MAAM,eAAe,aAAA,EAA6C;AAChE,IAAA,MAAM,OAAA,GAAU,MAAM,IAAA,CAAK,gBAAA,CAAiB,aAAa,CAAA;AACzD,IAAA,MAAM,SAAS,IAAIA,iBAAAA,CAAS,cAAA,EAAW,OAAA,EAAS,KAAK,QAAQ,CAAA;AAC7D,IAAA,MAAM,MAAA,GAAS,MAAM,MAAA,CAAO,IAAA,CAAK,aAAa,CAAA;AAC9C,IAAA,MAAM,UAAA,GAAa,OAAA,CAAS,MAAA,CAAqB,CAAC,CAAC,CAAA;AACnD,IAAA,OAAO,EAAE,SAAS,UAAA,EAAW;AAAA,EAC/B;AAAA;AAAA,EAGA,MAAM,gBAAA,CAAiB,aAAA,EAAuB,YAAA,EAAuC;AACnF,IAAA,MAAM,aAAA,GAAgB,MAAM,IAAA,CAAK,gBAAA,CAAiB,aAAa,CAAA;AAC/D,IAAA,MAAM,QAAQ,IAAIA,iBAAAA,CAAS,aAAA,EAAU,YAAA,EAAc,KAAK,QAAQ,CAAA;AAChE,IAAA,MAAM,SAAS,MAAM,KAAA,CAAM,KAAK,YAAA,EAAc,CAAC,aAAa,CAAC,CAAA;AAC7D,IAAA,OAAO,MAAA,CAAQ,MAAA,CAAqB,CAAC,CAAoB,CAAA;AAAA,EAC3D;AAAA;AAAA,EAGA,MAAM,iBAAA,CAAkB,aAAA,EAAuB,cAAA,EAAwD;AACrG,IAAA,MAAM,aAAA,GAAgB,MAAM,IAAA,CAAK,gBAAA,CAAiB,aAAa,CAAA;AAC/D,IAAA,MAAM,OAAA,GAAU,MAAM,OAAA,CAAQ,GAAA;AAAA,MAC5B,cAAA,CAAe,GAAA,CAAI,OAAO,IAAA,KAAS;AACjC,QAAA,MAAM,QAAQ,IAAIA,iBAAAA,CAAS,aAAA,EAAU,IAAA,EAAM,KAAK,QAAQ,CAAA;AACxD,QAAA,MAAM,SAAS,MAAM,KAAA,CAAM,KAAK,YAAA,EAAc,CAAC,aAAa,CAAC,CAAA;AAC7D,QAAA,OAAO,CAAC,IAAA,EAAM,MAAA,CAAQ,MAAA,CAAqB,CAAC,CAAoB,CAAC,CAAA;AAAA,MACnE,CAAC;AAAA,KACH;AACA,IAAA,OAAO,IAAI,IAAoB,OAAO,CAAA;AAAA,EACxC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAeA,kBAAA,CAAmB,eAAuB,UAAA,EAA0B;AAGlE,IAAA,MAAM,QAAA,GAAqB,CAAC,UAAA,CAAW,MAAA,CAAO,UAAU,CAAA;AACxD,IAAA,KAAA,MAAW,KAAK,UAAA,EAAY;AAC1B,MAAA,QAAA,CAAS,IAAA,CAAK,EAAE,eAAe,CAAA;AAC/B,MAAA,QAAA,CAAS,IAAA,CAAKD,aAAAA,CAAK,mBAAA,CAAoB,CAAA,CAAE,UAAU,CAAC,CAAA;AACpD,MAAA,QAAA,CAAS,IAAA,CAAK,CAAA,CAAE,QAAA,CAAS,MAAA,CAAO,UAAU,CAAA;AAC1C,MAAA,QAAA,CAAS,IAAA,CAAK,GAAG,CAAA,CAAE,QAAQ,CAAA;AAAA,IAC7B;AAEA,IAAA,OAAO;AAAA,MACL,eAAA,EAAiB,aAAA;AAAA,MACjB,UAAA,EAAY,aAAA;AAAA,MACZ;AAAA,KACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,cAAA,CAAe,aAAA,EAAuB,SAAA,EAAwD;AAClG,IAAA,IAAI,CAAC,IAAA,CAAK,OAAA,EAAS,MAAM,IAAI,MAAM,uCAAuC,CAAA;AAC1E,IAAA,MAAM,aAAA,GAAgB,MAAM,IAAA,CAAK,gBAAA,CAAiB,aAAa,CAAA;AAC/D,IAAA,MAAM,OAAO,IAAA,CAAK,kBAAA,CAAmB,aAAA,EAAe,CAAC,SAAS,CAAC,CAAA;AAC/D,IAAA,MAAM,SAAS,MAAM,IAAA,CAAK,QAAQ,OAAA,CAAQ,CAAC,IAAI,CAAC,CAAA;AAChD,IAAA,OAAO,EAAE,gBAAA,EAAkB,MAAA,CAAO,gBAAA,EAAiB;AAAA,EACrD;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,mBAAA,CAAoB,aAAA,EAAuB,UAAA,EAA2D;AAC1G,IAAA,IAAI,CAAC,IAAA,CAAK,OAAA,EAAS,MAAM,IAAI,MAAM,uCAAuC,CAAA;AAC1E,IAAA,MAAM,aAAA,GAAgB,MAAM,IAAA,CAAK,gBAAA,CAAiB,aAAa,CAAA;AAC/D,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,kBAAA,CAAmB,aAAA,EAAe,UAAU,CAAA;AAC9D,IAAA,MAAM,SAAS,MAAM,IAAA,CAAK,QAAQ,OAAA,CAAQ,CAAC,IAAI,CAAC,CAAA;AAChD,IAAA,OAAO,EAAE,gBAAA,EAAkB,MAAA,CAAO,gBAAA,EAAiB;AAAA,EACrD;AACF;;;ACxFO,IAAM,YAAN,MAAgB;AAAA,EACb,OAAA;AAAA,EAER,YAAY,IAAA,EAAyB;AACnC,IAAA,IAAA,CAAK,WAAW,IAAA,EAAM,OAAA,IAAW,4BAAA,EAA8B,OAAA,CAAQ,OAAO,EAAE,CAAA;AAAA,EAClF;AAAA;AAAA,EAGA,MAAM,iBAAiB,MAAA,EAA2E;AAChG,IAAA,MAAM,KAAA,GAAQ,IAAI,eAAA,EAAgB;AAClC,IAAA,IAAI,QAAQ,MAAA,EAAQ,KAAA,CAAM,GAAA,CAAI,QAAA,EAAU,OAAO,MAAM,CAAA;AACrD,IAAA,IAAI,QAAQ,OAAA,EAAS,KAAA,CAAM,GAAA,CAAI,SAAA,EAAW,OAAO,OAAO,CAAA;AACxD,IAAA,IAAI,MAAA,EAAQ,MAAM,KAAA,CAAM,GAAA,CAAI,QAAQ,MAAA,CAAO,MAAA,CAAO,IAAI,CAAC,CAAA;AACvD,IAAA,IAAI,MAAA,EAAQ,OAAO,KAAA,CAAM,GAAA,CAAI,SAAS,MAAA,CAAO,MAAA,CAAO,KAAK,CAAC,CAAA;AAC1D,IAAA,MAAM,EAAA,GAAK,MAAM,QAAA,EAAS;AAC1B,IAAA,OAAO,IAAA,CAAK,IAAqC,CAAA,aAAA,EAAgB,EAAA,GAAK,IAAI,EAAE,CAAA,CAAA,GAAK,EAAE,CAAA,CAAE,CAAA;AAAA,EACvF;AAAA;AAAA,EAGA,MAAM,eAAe,EAAA,EAAwD;AAC3E,IAAA,OAAO,IAAA,CAAK,GAAA,CAAuC,CAAA,cAAA,EAAiB,EAAE,CAAA,CAAE,CAAA;AAAA,EAC1E;AAAA;AAAA,EAGA,MAAM,qBAAqB,EAAA,EAA2D;AACpF,IAAA,OAAO,IAAA,CAAK,GAAA,CAA0C,CAAA,cAAA,EAAiB,EAAE,CAAA,OAAA,CAAS,CAAA;AAAA,EACpF;AAAA;AAAA,EAGA,MAAM,gBAAgB,OAAA,EAA0D;AAC9E,IAAA,MAAM,KAAA,GAAQ,IAAI,eAAA,CAAgB,EAAE,SAAS,CAAA;AAC7C,IAAA,OAAO,IAAA,CAAK,GAAA,CAAoC,CAAA,UAAA,EAAa,KAAK,CAAA,CAAE,CAAA;AAAA,EACtE;AAAA;AAAA,EAGA,MAAM,WAAW,OAAA,EAAuD;AACtE,IAAA,MAAM,KAAA,GAAQ,IAAI,eAAA,CAAgB,EAAE,SAAS,CAAA;AAC7C,IAAA,OAAO,IAAA,CAAK,GAAA,CAAiC,CAAA,SAAA,EAAY,KAAK,CAAA,CAAE,CAAA;AAAA,EAClE;AAAA;AAAA,EAGA,MAAM,iBAAiB,OAAA,EAAyD;AAC9E,IAAA,MAAM,KAAA,GAAQ,IAAI,eAAA,CAAgB,EAAE,SAAS,CAAA;AAC7C,IAAA,OAAO,IAAA,CAAK,GAAA,CAAmC,CAAA,QAAA,EAAW,KAAK,CAAA,CAAE,CAAA;AAAA,EACnE;AAAA,EAEA,MAAc,IAAO,IAAA,EAA0B;AAC7C,IAAA,MAAM,GAAA,GAAM,CAAA,EAAG,IAAA,CAAK,OAAO,GAAG,IAAI,CAAA,CAAA;AAClC,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,GAAG,CAAA;AAChC,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,MAAA,MAAM,IAAI,QAAA,CAAS,QAAA,CAAS,MAAA,EAAQ,CAAA,oBAAA,EAAuB,QAAA,CAAS,MAAM,CAAA,CAAA,EAAI,QAAA,CAAS,UAAU,CAAA,CAAA,EAAI,GAAG,CAAA;AAAA,IAC1G;AACA,IAAA,OAAO,SAAS,IAAA,EAAK;AAAA,EACvB;AACF;AAEO,IAAM,QAAA,GAAN,cAAuB,KAAA,CAAM;AAAA,EAClC,WAAA,CACkB,MAAA,EAChB,OAAA,EACgB,GAAA,EAChB;AACA,IAAA,KAAA,CAAM,OAAO,CAAA;AAJG,IAAA,IAAA,CAAA,MAAA,GAAA,MAAA;AAEA,IAAA,IAAA,CAAA,GAAA,GAAA,GAAA;AAGhB,IAAA,IAAA,CAAK,IAAA,GAAO,UAAA;AAAA,EACd;AACF;AC3DO,IAAM,WAAN,MAAe;AAAA,EACX,YAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA;AAAA,EACA,GAAA;AAAA,EACA,OAAA;AAAA,EACA,YAAA;AAAA,EAET,YAAY,IAAA,EAAuB;AACjC,IAAA,IAAA,CAAK,OAAA,GAAU,cAAA,CAAe,IAAA,CAAK,OAAO,CAAA;AAC1C,IAAA,IAAA,CAAK,YAAA,GAAe,IAAA,CAAK,YAAA,IAAgB,aAAA,CAAc,KAAK,OAAO,CAAA;AAEnE,IAAA,IAAA,CAAK,YAAA,GAAe,IAAI,iBAAA,CAAkB;AAAA,MACxC,cAAc,IAAA,CAAK,YAAA;AAAA,MACnB,UAAU,IAAA,CAAK,QAAA;AAAA,MACf,SAAS,IAAA,CAAK;AAAA,KACf,CAAA;AAED,IAAA,IAAA,CAAK,MAAA,GAAS,IAAI,WAAA,CAAY;AAAA,MAC5B,cAAc,IAAA,CAAK,YAAA;AAAA,MACnB,UAAU,IAAA,CAAK,QAAA;AAAA,MACf,SAAS,IAAA,CAAK;AAAA,KACf,CAAA;AAED,IAAA,MAAM,gBAAgB,IAAIC,iBAAAA,CAAS,eAAU,IAAA,CAAK,YAAA,EAAc,KAAK,QAAQ,CAAA;AAC7E,IAAA,IAAA,CAAK,SAAS,IAAI,YAAA,CAAa,eAAe,IAAA,CAAK,QAAA,EAAU,KAAK,OAAO,CAAA;AAEzE,IAAA,IAAA,CAAK,MAAM,IAAI,SAAA,CAAU,EAAE,OAAA,EAAS,IAAA,CAAK,YAAY,CAAA;AAAA,EACvD;AACF;;;AClDA,eAAsB,QAAA,CACpB,QAAA,EACA,YAAA,EACA,cAAA,EACiB;AACjB,EAAA,MAAM,MAAA,GAAS,MAAM,QAAA,CAAS,YAAA;AAAA,IAC5B;AAAA,MACE,eAAA,EAAiB,YAAA;AAAA,MACjB,UAAA,EAAY,QAAA;AAAA,MACZ,QAAA,EAAU,CAAC,cAAc;AAAA,KAC3B;AAAA,IACA;AAAA,GACF;AACA,EAAA,OAAO,MAAA,CAAO,MAAA,CAAO,CAAC,CAAC,CAAA;AACzB","file":"index.cjs","sourcesContent":["/** Supported StarkNet networks */\nexport type Network = 'sepolia' | 'mainnet'\n\n/** Token standard types supported by the Stela protocol */\nexport type AssetType = 'ERC20' | 'ERC721' | 'ERC1155' | 'ERC4626'\n\n/** Possible states of an inscription */\nexport type InscriptionStatus =\n | 'open'\n | 'partial'\n | 'filled'\n | 'repaid'\n | 'liquidated'\n | 'expired'\n | 'cancelled'\n\n/** All valid inscription statuses as an array */\nexport const VALID_STATUSES: readonly InscriptionStatus[] = [\n 'open',\n 'partial',\n 'filled',\n 'repaid',\n 'liquidated',\n 'expired',\n 'cancelled',\n] as const\n\n/** Human-readable labels for each inscription status */\nexport const STATUS_LABELS: Record<InscriptionStatus, string> = {\n open: 'Open',\n partial: 'Partial',\n filled: 'Filled',\n repaid: 'Repaid',\n liquidated: 'Liquidated',\n expired: 'Expired',\n cancelled: 'Cancelled',\n}\n\n/** A single StarkNet call (matches starknet.js Call type) */\nexport interface Call {\n contractAddress: string\n entrypoint: string\n calldata: string[]\n}\n","/** Order book types — shared between API and UI */\n\n/** A single price level in the lending order book */\nexport interface LendingLevel {\n /** Annualized percentage rate for this level */\n apr: number\n /** Total debt amount available at this APR (raw string for BigInt compat) */\n totalAmount: string\n /** Number of orders at this level */\n orderCount: number\n /** Running cumulative total from best to worst */\n cumulative: string\n /** Individual orders at this level */\n orders: {\n id: string\n amount: string\n creator: string\n source: 'offchain' | 'onchain'\n duration: number\n multiLender: boolean\n deadline: number\n interestAmount: string\n interestSymbol: string\n interestDecimals: number\n }[]\n}\n\n/** A single price level in the swap order book */\nexport interface SwapLevel {\n /** Exchange rate: units of quote per unit of base */\n rate: number\n /** Total base amount available at this rate */\n totalAmount: string\n /** Number of orders at this level */\n orderCount: number\n /** Running cumulative total from best to worst */\n cumulative: string\n /** Individual orders */\n orders: {\n id: string\n amount: string\n creator: string\n source: 'offchain' | 'onchain'\n deadline: number\n }[]\n}\n\n/** Token info for display in order book context */\nexport interface TokenDisplay {\n address: string\n symbol: string\n decimals: number\n logoUrl?: string\n}\n\n/** Full order book response from API */\nexport interface OrderBookResponse {\n pair: {\n base: TokenDisplay // debt token\n quote: TokenDisplay // collateral token\n }\n /** Available duration values for lending orders */\n durations: number[]\n /** Lending order book (duration > 0) */\n lending: {\n /** Borrow requests — sorted highest APR first (best for lenders) */\n asks: LendingLevel[]\n /** Total borrow demand */\n totalAskVolume: string\n }\n /** Swap order book (duration = 0) */\n swaps: {\n /** Sell base (want quote) — sorted lowest rate first */\n asks: SwapLevel[]\n /** Buy base (want base, pay quote) — sorted highest rate first */\n bids: SwapLevel[]\n totalAskVolume: string\n totalBidVolume: string\n }\n /** Recently settled/filled orders */\n recentFills: {\n id: string\n apr: number\n rate: number\n amount: string\n duration: number\n filledAt: number\n source: 'offchain' | 'onchain'\n type: 'lending' | 'swap'\n }[]\n}\n\n/** Duration filter options */\nexport type DurationFilter = 'all' | '7d' | '30d' | '90d' | '180d' | '365d'\n\n/** Duration filter to seconds mapping */\nexport const DURATION_RANGES: Record<DurationFilter, [number, number] | null> = {\n all: null,\n '7d': [0, 7 * 86400 + 1],\n '30d': [7 * 86400, 30 * 86400 + 1],\n '90d': [30 * 86400, 90 * 86400 + 1],\n '180d': [90 * 86400, 180 * 86400 + 1],\n '365d': [180 * 86400, 366 * 86400],\n}\n","import type { Network } from '../types/common.js'\n\n/** Deployed Stela protocol contract addresses per network */\nexport const STELA_ADDRESS: Record<Network, string> = {\n sepolia: '0x0109c6caae0c5b4da6e063ed6c02ae784be05aa90806501a48dcfbb213bd7c03',\n mainnet: '0x0',\n} as const\n\nconst VALID_NETWORKS: Network[] = ['sepolia', 'mainnet']\n\n/** Validate and return a Network value, defaulting to 'sepolia' */\nexport function resolveNetwork(raw?: string): Network {\n const trimmed = raw?.trim()\n if (trimmed && VALID_NETWORKS.includes(trimmed as Network)) return trimmed as Network\n if (trimmed) console.warn(`Invalid NETWORK \"${trimmed}\", falling back to sepolia`)\n return 'sepolia'\n}\n\n/** SNIP-12 chain ID shortstrings per network */\nexport const CHAIN_ID: Record<Network, string> = {\n sepolia: 'SN_SEPOLIA',\n mainnet: 'SN_MAIN',\n} as const\n\n/** Block explorer base URLs per network (for transaction links) */\nexport const EXPLORER_TX_URL: Record<Network, string> = {\n sepolia: 'https://sepolia.voyager.online/tx',\n mainnet: 'https://voyager.online/tx',\n} as const\n","import type { AssetType } from '../types/common.js'\n\n/** Maximum basis points (100%) */\nexport const MAX_BPS = 10_000n\n\n/** Virtual share offset used in share calculations (1e16) */\nexport const VIRTUAL_SHARE_OFFSET = 10_000_000_000_000_000n\n\n/** Numeric enum values for asset types (matches Cairo contract) */\nexport const ASSET_TYPE_ENUM: Record<AssetType, number> = {\n ERC20: 0,\n ERC721: 1,\n ERC1155: 2,\n ERC4626: 3,\n}\n\n/** Reverse mapping: numeric enum value to AssetType name */\nexport const ASSET_TYPE_NAMES: Record<number, AssetType> = {\n 0: 'ERC20',\n 1: 'ERC721',\n 2: 'ERC1155',\n 3: 'ERC4626',\n}\n\n// ── T1 Auction Constants ────────────────────────────────────────────────\n\n/** Grace period after loan expiry before auction can start (24h in seconds) */\nexport const GRACE_PERIOD = 86400n\n\n/** Duration of the Dutch auction (24h in seconds) */\nexport const AUCTION_DURATION = 86400n\n\n/** Penalty added to debt at auction start (5% in BPS) */\nexport const AUCTION_PENALTY_BPS = 500n\n\n/** Minimum auction price as percentage of debt (10% floor in BPS) */\nexport const AUCTION_RESERVE_BPS = 1000n\n","/**\n * Trade UI presets for deadlines and durations.\n *\n * Shared between frontend (form dropdowns) and backend (validation bounds).\n * Does NOT import any framework-specific code.\n */\n\nexport interface DeadlinePreset {\n label: string\n seconds: number\n}\n\nexport interface DurationPreset {\n label: string\n seconds: number\n}\n\n/** Short-lived deadline options used on the Swap form. */\nexport const SWAP_DEADLINE_PRESETS: DeadlinePreset[] = [\n { label: '5m', seconds: 300 },\n { label: '15m', seconds: 900 },\n { label: '30m', seconds: 1800 },\n { label: '1h', seconds: 3600 },\n { label: '12h', seconds: 43200 },\n { label: '1d', seconds: 86400 },\n { label: '7d', seconds: 604800 },\n { label: '30d', seconds: 2592000 },\n]\n\n/** Longer-lived deadline options used on the Lend / Borrow form. */\nexport const LEND_DEADLINE_PRESETS: DeadlinePreset[] = [\n { label: '7d', seconds: 604800 },\n { label: '14d', seconds: 1209600 },\n { label: '30d', seconds: 2592000 },\n { label: '60d', seconds: 5184000 },\n { label: '90d', seconds: 7776000 },\n]\n\n/** Loan duration options (how long the borrower has to repay). */\nexport const DURATION_PRESETS: DurationPreset[] = [\n { label: '1d', seconds: 86400 },\n { label: '7d', seconds: 604800 },\n { label: '14d', seconds: 1209600 },\n { label: '30d', seconds: 2592000 },\n { label: '90d', seconds: 7776000 },\n { label: '180d', seconds: 15552000 },\n { label: '1y', seconds: 31536000 },\n]\n\n/**\n * Convert a duration in seconds to a short human-readable string.\n *\n * @example\n * formatDurationHuman(300) // \"5 min\"\n * formatDurationHuman(7200) // \"2 hours\"\n * formatDurationHuman(86400) // \"1 day\"\n * formatDurationHuman(604800) // \"7 days\"\n */\nexport function formatDurationHuman(seconds: number): string {\n if (seconds < 3600) return `${Math.round(seconds / 60)} min`\n if (seconds < 86400) return `${Math.round(seconds / 3600)} hours`\n const days = Math.round(seconds / 86400)\n return `${days} day${days !== 1 ? 's' : ''}`\n}\n","import { uint256 } from 'starknet'\n\nconst U128_MAX = (1n << 128n) - 1n\nconst U256_MAX = (1n << 256n) - 1n\n\n/** Convert a bigint to a [low, high] calldata pair for StarkNet u256 */\nexport const toU256 = (n: bigint): [string, string] => {\n if (n < 0n || n > U256_MAX) throw new RangeError(`Value out of u256 range: ${n}`)\n const { low, high } = uint256.bnToUint256(n)\n return [low.toString(), high.toString()]\n}\n\n/** Convert a { low, high } u256 pair back to a bigint */\nexport const fromU256 = (u: { low: bigint; high: bigint }): bigint => {\n if (u.low < 0n || u.low > U128_MAX || u.high < 0n || u.high > U128_MAX) {\n throw new RangeError('Invalid u256 component: low and high must be u128')\n }\n return uint256.uint256ToBN(u)\n}\n\n/** Convert a u256 { low, high } to a 0x-prefixed 64-char hex string (for DB keys) */\nexport const inscriptionIdToHex = (u: { low: bigint; high: bigint }): string =>\n '0x' + fromU256(u).toString(16).padStart(64, '0')\n","import { addAddressPadding, validateAndParseAddress } from 'starknet'\n\n/** Convert any address-like value (string, bigint, number) to a hex string */\nexport function toHex(value: unknown): string {\n if (typeof value === 'string') return value\n if (typeof value === 'bigint') return '0x' + value.toString(16)\n if (typeof value === 'number') return '0x' + value.toString(16)\n return String(value)\n}\n\n/** Truncate an address for display: 0x1a2b...3c4d */\nexport function formatAddress(address: unknown): string {\n try {\n const hex = toHex(address)\n const padded = addAddressPadding(hex)\n return `${padded.slice(0, 6)}...${padded.slice(-4)}`\n } catch {\n return String(address).slice(0, 10) + '...'\n }\n}\n\n/** Normalize an address to a fully-padded, checksummed hex string */\nexport function normalizeAddress(address: unknown): string {\n const hex = toHex(address)\n return addAddressPadding(validateAndParseAddress(hex))\n}\n\n/** Compare two addresses for equality (handles different padding/casing) */\nexport function addressesEqual(a: unknown, b: unknown): boolean {\n try {\n return normalizeAddress(a) === normalizeAddress(b)\n } catch {\n return toHex(a).toLowerCase() === toHex(b).toLowerCase()\n }\n}\n","/** Convert human-readable amount (e.g. \"1.5\") to on-chain value using decimals */\nexport function parseAmount(humanAmount: string, decimals: number): bigint {\n if (!humanAmount || humanAmount === '.' || humanAmount === '') return 0n\n const parts = humanAmount.split('.')\n const whole = parts[0] ?? '0'\n const frac = (parts[1] ?? '').padEnd(decimals, '0').slice(0, decimals)\n return BigInt(whole + frac)\n}\n\n/** Format a raw token value (string) given its decimals */\nexport function formatTokenValue(raw: string | null, decimals: number): string {\n if (!raw || raw === '0') return '0'\n const n = BigInt(raw)\n if (decimals === 0) return n.toString()\n const divisor = 10n ** BigInt(decimals)\n const whole = n / divisor\n const frac = n % divisor\n if (frac === 0n) return whole.toString()\n const fracStr = frac.toString().padStart(decimals, '0').replace(/0+$/, '')\n return `${whole}.${fracStr}`\n}\n","/** Format duration in seconds to human-readable (e.g. \"7d 0h\", \"2h\", \"30m\") */\nexport function formatDuration(seconds: number | bigint): string {\n const s = Number(seconds)\n if (s < 3600) return `${Math.floor(s / 60)}m`\n const h = Math.floor(s / 3600)\n if (h >= 24) return `${Math.floor(h / 24)}d ${h % 24}h`\n return `${h}h`\n}\n\n/** Format a unix timestamp (seconds) to locale string */\nexport function formatTimestamp(ts: bigint): string {\n if (ts === 0n) return '--'\n return new Date(Number(ts) * 1000).toLocaleString()\n}\n","import type { InscriptionStatus } from '../types/common.js'\nimport { STATUS_LABELS } from '../types/common.js'\nimport { MAX_BPS, GRACE_PERIOD } from '../constants/protocol.js'\n\n/** Input shape for computeStatus — accepts both bigint and number fields */\nexport interface StatusInput {\n signed_at: number | bigint\n duration: number | bigint\n issued_debt_percentage: number | bigint\n is_repaid: boolean\n liquidated: boolean\n deadline?: number | bigint\n status?: string\n}\n\n/** Compute the inscription status from on-chain fields */\nexport function computeStatus(a: StatusInput, nowSeconds?: number): InscriptionStatus {\n if (a.is_repaid) return 'repaid'\n if (a.liquidated) return 'liquidated'\n if (a.status === 'cancelled') return 'cancelled'\n\n const now = nowSeconds ?? Math.floor(Date.now() / 1000)\n const signedAt = Number(a.signed_at)\n const duration = Number(a.duration)\n const deadline = a.deadline !== undefined ? Number(a.deadline) : 0\n const issuedPct = BigInt(a.issued_debt_percentage)\n\n // Unsigned inscription\n if (signedAt === 0) {\n // If there's a deadline and it has passed, the inscription expired\n if (deadline > 0 && now > deadline) return 'expired'\n return 'open'\n }\n\n // Partially filled\n if (issuedPct < MAX_BPS) return 'partial'\n\n // Fully filled — check if loan duration has elapsed\n if (now > signedAt + duration) return 'expired'\n\n return 'filled'\n}\n\n// ── Extended status types ───────────────────────────────────────────\n\n/** Enriched status includes display-only states not in InscriptionStatus */\nexport type EnrichedStatus = InscriptionStatus | 'overdue' | 'grace_period' | 'auctioned'\n\n/** Badge variant type for UI — union of inscription + order statuses */\nexport type StatusBadgeVariant =\n | 'open' | 'partial' | 'filled' | 'repaid' | 'liquidated'\n | 'expired' | 'overdue' | 'cancelled' | 'pending' | 'matched'\n | 'settled' | 'auctioned' | 'grace_period'\n\n/** Extended labels for enriched statuses not in the base SDK */\nconst EXTENDED_LABELS: Record<string, string> = {\n overdue: 'Overdue',\n auctioned: 'Auctioned',\n grace_period: 'Grace Period',\n}\n\n/** Map any status string to a valid badge variant, defaulting to 'open'. */\nexport function getStatusBadgeVariant(status: string): StatusBadgeVariant {\n if (status === 'overdue') return 'overdue'\n if (status === 'auctioned') return 'auctioned'\n if (status === 'grace_period') return 'grace_period'\n return (status in STATUS_LABELS ? status : 'open') as StatusBadgeVariant\n}\n\n/** Map any status string to its human-readable label. */\nexport function getStatusLabel(status: string): string {\n return EXTENDED_LABELS[status] ?? (STATUS_LABELS as Record<string, string>)[status] ?? status\n}\n\n// ── Off-chain order status helpers ──────────────────────────────────\n\n/** Human-readable labels for off-chain order statuses */\nexport const ORDER_STATUS_LABELS: Record<string, string> = {\n pending: 'Pending',\n matched: 'Matched',\n settled: 'Settled',\n expired: 'Expired',\n cancelled: 'Cancelled',\n}\n\n/** Map off-chain order status to its own badge variant. */\nexport function getOrderStatusBadgeVariant(status: string): StatusBadgeVariant {\n const map: Record<string, StatusBadgeVariant> = {\n pending: 'pending',\n matched: 'matched',\n settled: 'settled',\n expired: 'expired',\n cancelled: 'cancelled',\n }\n return map[status] ?? 'pending'\n}\n\n/** Get the human-readable label for an off-chain order status. */\nexport function getOrderStatusLabel(status: string): string {\n return ORDER_STATUS_LABELS[status] ?? status\n}\n\n// ── Filter group mappings ───────────────────────────────────────────\n\n/** Enriched inscription statuses that belong to each filter group. */\nexport const INSCRIPTION_STATUS_GROUPS: Record<string, Set<string>> = {\n open: new Set(['open', 'partial']),\n active: new Set(['filled', 'auctioned', 'grace_period']),\n closed: new Set(['repaid', 'liquidated', 'expired', 'overdue', 'cancelled']),\n}\n\n/** Off-chain order statuses that belong to each filter group. */\nexport const ORDER_STATUS_GROUPS: Record<string, Set<string>> = {\n open: new Set(['pending']),\n active: new Set(['matched']),\n closed: new Set(['settled', 'expired', 'cancelled']),\n}\n\n/** Check if an enriched inscription status belongs to a filter group. */\nexport function inscriptionMatchesGroup(enrichedStatus: string, group: string): boolean {\n if (group === 'all') return true\n return INSCRIPTION_STATUS_GROUPS[group]?.has(enrichedStatus) ?? false\n}\n\n/** Check if an order status belongs to a filter group. */\nexport function orderMatchesGroup(orderStatus: string, group: string): boolean {\n if (group === 'all') return true\n return ORDER_STATUS_GROUPS[group]?.has(orderStatus) ?? false\n}\n\n// ── Descriptions for tooltips ───────────────────────────────────────\n\n/** Detailed status descriptions for UI tooltips */\nexport const STATUS_DESCRIPTIONS: Record<string, string> = {\n open: 'Waiting for a lender to sign. The borrower has set the loan terms.',\n partial: 'Partially funded by lenders. More lenders can still contribute.',\n filled: 'Fully funded and active. The borrower received the debt tokens.',\n repaid: 'The borrower repaid the loan. Lenders can redeem their shares.',\n liquidated: 'Loan expired without repayment. Collateral distributed to lenders.',\n overdue: 'Loan duration elapsed without repayment. Anyone can liquidate.',\n auctioned: 'Auction started. The collateral is being sold to the highest bidder.',\n grace_period: 'Loan expired but within the 24-hour grace period. The borrower can still repay.',\n expired: 'Expired before being funded. No lender action was taken.',\n cancelled: 'Cancelled by the borrower before any lender signed.',\n pending: 'Gasless order waiting for a lender offer. No gas was spent.',\n matched: 'A lender offered. The settlement bot will execute it shortly.',\n settled: 'Settled on-chain. The loan is now active as an inscription.',\n}\n\n/** Concept descriptions for UI help text */\nexport const CONCEPT_DESCRIPTIONS: Record<string, string> = {\n debt: 'Tokens the borrower wants to borrow. Lenders provide these.',\n interest: 'Extra tokens the borrower pays as reward for the lender.',\n collateral: 'Tokens locked by the borrower as security for the loan.',\n duration: 'How long the borrower has to repay after funding.',\n apy: 'Annual Percentage Yield — annualized return for lenders.',\n offChain: 'Gasless orders signed off-chain. No gas until settlement.',\n shares: 'ERC1155 tokens representing a lender\\'s portion of a loan.',\n}\n\n// ── Enriched status computation ─────────────────────────────────────\n\n/**\n * Enrich an InscriptionRow with a client-side computed status.\n * Distinguishes \"overdue\" (filled past duration) from \"expired\" (unfilled past deadline),\n * and detects \"grace_period\" and \"auctioned\" states.\n */\nexport function enrichStatus(row: {\n status: string\n signed_at: string | null\n duration: string\n issued_debt_percentage: string\n deadline: string\n auction_started?: number\n}): EnrichedStatus {\n const base = computeStatus({\n signed_at: BigInt(row.signed_at ?? '0'),\n duration: BigInt(row.duration),\n issued_debt_percentage: BigInt(row.issued_debt_percentage),\n is_repaid: row.status === 'repaid',\n liquidated: row.status === 'liquidated',\n deadline: BigInt(row.deadline ?? '0'),\n status: row.status,\n })\n\n // Auction started — collateral is being auctioned off\n if (row.auction_started) {\n return 'auctioned'\n }\n\n // Distinguish overdue/grace_period (filled loan past duration) from expired (unfilled past deadline)\n if (base === 'expired' && row.signed_at && BigInt(row.signed_at) > 0n) {\n const signedAt = BigInt(row.signed_at)\n const duration = BigInt(row.duration)\n const nowSeconds = BigInt(Math.floor(Date.now() / 1000))\n const expiryTime = signedAt + duration\n // Grace period — loan expired but borrower can still repay within GRACE_PERIOD\n if (nowSeconds <= expiryTime + GRACE_PERIOD) {\n return 'grace_period'\n }\n // Past grace period — overdue, anyone can liquidate\n return 'overdue'\n }\n\n return base\n}\n","/**\n * Shared order data parsing utilities.\n *\n * Used by API routes (server) and UI components (client) to normalize\n * the flexible order_data JSON from D1 into a consistent shape.\n */\n\nexport interface SerializedAsset {\n asset_address: string\n asset_type: string\n value: string\n token_id: string\n}\n\nexport interface RawOrderData {\n borrower?: string\n debt_assets?: SerializedAsset[]\n interest_assets?: SerializedAsset[]\n collateral_assets?: SerializedAsset[]\n debtAssets?: SerializedAsset[]\n interestAssets?: SerializedAsset[]\n collateralAssets?: SerializedAsset[]\n multi_lender?: boolean\n multiLender?: boolean\n duration?: string\n deadline?: string\n nonce?: string\n orderHash?: string\n}\n\nexport interface ParsedOrderData {\n borrower: string\n debtAssets: SerializedAsset[]\n interestAssets: SerializedAsset[]\n collateralAssets: SerializedAsset[]\n duration: string\n deadline: string\n multiLender: boolean\n}\n\n/** Normalize camelCase/snake_case variants in order_data JSON. */\nexport function normalizeOrderData(raw: RawOrderData): ParsedOrderData {\n return {\n borrower: raw.borrower ?? '',\n debtAssets: raw.debt_assets ?? raw.debtAssets ?? [],\n interestAssets: raw.interest_assets ?? raw.interestAssets ?? [],\n collateralAssets: raw.collateral_assets ?? raw.collateralAssets ?? [],\n duration: raw.duration ?? '0',\n deadline: raw.deadline ?? '0',\n multiLender: raw.multi_lender ?? raw.multiLender ?? false,\n }\n}\n\n/** Validate and sanitize an asset array from untrusted input. */\nfunction sanitizeAssets(arr: unknown): SerializedAsset[] {\n if (!Array.isArray(arr)) return []\n return arr.filter(\n (a): a is SerializedAsset =>\n a != null && typeof a === 'object' &&\n typeof (a as Record<string, unknown>).asset_address === 'string' &&\n typeof (a as Record<string, unknown>).asset_type === 'string',\n ).map((a) => ({\n asset_address: String(a.asset_address),\n asset_type: String(a.asset_type),\n value: String(a.value ?? '0'),\n token_id: String(a.token_id ?? '0'),\n }))\n}\n\n/**\n * Parse the order_data TEXT column from D1 into a proper object.\n * Shared between GET /api/orders and GET /api/orders/[id].\n *\n * - Parses JSON string or passes through object\n * - Sanitizes asset arrays\n * - Only includes borrower_signature for pending orders\n */\nexport function parseOrderRow(row: Record<string, unknown>): Record<string, unknown> {\n let parsed: Record<string, unknown> = {}\n const raw = row.order_data\n if (typeof raw === 'string') {\n try { parsed = JSON.parse(raw) } catch { parsed = {} }\n } else if (raw && typeof raw === 'object') {\n parsed = raw as Record<string, unknown>\n }\n\n const debtAssets = sanitizeAssets(parsed.debtAssets ?? parsed.debt_assets)\n const interestAssets = sanitizeAssets(parsed.interestAssets ?? parsed.interest_assets)\n const collateralAssets = sanitizeAssets(parsed.collateralAssets ?? parsed.collateral_assets)\n\n // Include borrower_signature only for pending orders (needed by settlement calldata).\n // Once settled/expired/cancelled, signatures are purged (NULL) so nothing leaks.\n const { borrower_signature: rawSig, ...safeRow } = row\n const includeSig = row.status === 'pending' && rawSig != null\n\n return {\n ...safeRow,\n ...(includeSig ? { borrower_signature: rawSig } : {}),\n order_data: {\n borrower: parsed.borrower ?? '',\n debtAssets,\n interestAssets,\n collateralAssets,\n debtCount: debtAssets.length,\n interestCount: interestAssets.length,\n collateralCount: collateralAssets.length,\n duration: String(parsed.duration ?? '0'),\n deadline: String(parsed.deadline ?? '0'),\n multiLender: parsed.multiLender ?? parsed.multi_lender ?? false,\n nonce: String(parsed.nonce ?? row.nonce ?? '0'),\n orderHash: parsed.orderHash ?? undefined,\n },\n }\n}\n","/**\n * Shared signature utilities for parsing and formatting StarkNet signatures.\n *\n * Used by settlement hooks, API routes, and UI components to normalize\n * the various wallet signature formats into consistent string arrays.\n */\n\n/**\n * Format a wallet signature response (array or {r, s} object) into a string array.\n * Converts bigint values to hex strings.\n */\nexport function formatSig(signature: unknown): string[] {\n if (Array.isArray(signature)) {\n return signature.map((s: unknown) => typeof s === 'bigint' ? '0x' + s.toString(16) : String(s))\n }\n const sig = signature as { r: unknown; s: unknown }\n return [sig.r, sig.s].map((s: unknown) => typeof s === 'bigint' ? '0x' + s.toString(16) : String(s))\n}\n\n/**\n * Parse a stored signature (string, JSON string, or string array) into a string array.\n * Handles formats: `[r, s]` array, `\"[r, s]\"` JSON, `\"{r, s}\"` JSON object, `\"r,s\"` CSV.\n */\nexport function parseSigToArray(raw: string | string[]): string[] {\n if (Array.isArray(raw)) return raw.map(String)\n if (typeof raw === 'string') {\n if (raw.startsWith('[')) {\n const parsed = JSON.parse(raw) as unknown\n if (!Array.isArray(parsed) || parsed.length < 1 || !parsed.every((s: unknown) => typeof s === 'string' || typeof s === 'number'))\n throw new Error('Invalid signature array format')\n return parsed.map(String)\n }\n if (raw.startsWith('{')) {\n const obj = JSON.parse(raw) as Record<string, unknown>\n if (typeof obj.r !== 'string' || typeof obj.s !== 'string')\n throw new Error('Invalid signature object format: missing r or s')\n return [obj.r, obj.s]\n }\n const parts = raw.split(',')\n if (parts.length < 2) throw new Error('Invalid signature CSV: expected at least 2 elements')\n return parts\n }\n throw new Error('Invalid signature format')\n}\n","/**\n * Calldata serialization/deserialization for StarkNet transactions.\n *\n * Used by the indexer (parsing tx calldata) and settlement bot\n * (building calldata for create_inscription / settle / batch_settle).\n */\n\nimport type { AssetType } from '../types/common.js'\nimport { ASSET_TYPE_ENUM, ASSET_TYPE_NAMES } from '../constants/protocol.js'\nimport { toU256, fromU256 } from './u256.js'\nimport { normalizeAddress } from './address.js'\n\n/** Asset shape used in calldata serialization (string values, not bigint) */\nexport interface StoredAsset {\n asset_address: string\n asset_type: AssetType\n value: string\n token_id: string\n}\n\n/** Serialize an asset array into calldata: [len, ...per-asset fields] */\nexport function serializeAssetCalldata(assets: StoredAsset[]): string[] {\n const calldata: string[] = [String(assets.length)]\n for (const asset of assets) {\n const enumVal = ASSET_TYPE_ENUM[asset.asset_type] ?? 0\n const [valueLow, valueHigh] = toU256(BigInt(asset.value))\n const [tokenIdLow, tokenIdHigh] = toU256(BigInt(asset.token_id))\n calldata.push(\n normalizeAddress(asset.asset_address),\n String(enumVal),\n valueLow,\n valueHigh,\n tokenIdLow,\n tokenIdHigh,\n )\n }\n return calldata\n}\n\n/** Parse an asset array from raw RPC calldata */\nexport function parseAssetArray(\n calldata: string[],\n offset: number,\n): { assets: StoredAsset[]; nextOffset: number } {\n const count = Number(BigInt(calldata[offset]))\n let pos = offset + 1\n const assets: StoredAsset[] = []\n\n for (let i = 0; i < count; i++) {\n const address = normalizeAddress(calldata[pos])\n const typeEnum = Number(BigInt(calldata[pos + 1]))\n const valueLow = BigInt(calldata[pos + 2])\n const valueHigh = BigInt(calldata[pos + 3])\n const tokenIdLow = BigInt(calldata[pos + 4])\n const tokenIdHigh = BigInt(calldata[pos + 5])\n\n assets.push({\n asset_address: address,\n asset_type: ASSET_TYPE_NAMES[typeEnum] ?? ('unknown' as AssetType),\n value: fromU256({ low: valueLow, high: valueHigh }).toString(),\n token_id: fromU256({ low: tokenIdLow, high: tokenIdHigh }).toString(),\n })\n pos += 6\n }\n\n return { assets, nextOffset: pos }\n}\n\n/** Serialize a signature string \"r,s\" or JSON [r, s] into calldata: [len, ...parts] */\nexport function serializeSignatureCalldata(sig: string): string[] {\n let parts: string[]\n if (sig.startsWith('[')) {\n parts = JSON.parse(sig) as string[]\n } else if (sig.startsWith('{')) {\n const obj = JSON.parse(sig) as { r: string; s: string }\n parts = [obj.r, obj.s]\n } else {\n parts = sig.split(',')\n }\n return [String(parts.length), ...parts]\n}\n\n/** Standardize a hex string to 0x-prefixed lowercase */\nfunction standardizeHex(hex: string): string {\n const clean = hex.toLowerCase().replace(/^0x/, '')\n return '0x' + clean\n}\n\n// Computed via starknet.js hash.getSelectorFromName()\nconst CREATE_INSCRIPTION_SELECTOR = '0x1883531093e6399258a46b3e397a8ec94952f12d37afeeea49fb35b4361d262'\nconst SETTLE_SELECTOR = '0x1482408710165f49db4f7b422428870c37d86b0624cd661b387e24aa64f0249'\nconst BATCH_SETTLE_SELECTOR = '0x116475a69261425e56d6d49661fec19f7629381447afd9c70300115e6f44d0f'\n\ntype MatchedCall = { selector: string; cd: string[] }\n\n/** Find matching call in multicall or direct transaction calldata */\nfunction findCall(calldata: string[], selectors: string[]): MatchedCall | null {\n const numCalls = Number(BigInt(calldata[0]))\n\n if (numCalls > 0 && numCalls < 100) {\n // Multicall: [num_calls, to, selector, data_len, ...data, ...]\n let pos = 1\n for (let i = 0; i < numCalls; i++) {\n const selector = standardizeHex(calldata[pos + 1])\n const cdLen = Number(BigInt(calldata[pos + 2]))\n const cdStart = pos + 3\n if (selectors.includes(selector)) {\n return { selector, cd: calldata.slice(cdStart, cdStart + cdLen) }\n }\n pos = cdStart + cdLen\n }\n }\n\n return null\n}\n\n/** Extract and parse inscription assets from transaction calldata */\nexport function parseInscriptionCalldata(calldata: string[]): {\n debt: StoredAsset[]\n interest: StoredAsset[]\n collateral: StoredAsset[]\n} | null {\n try {\n const match = findCall(calldata, [CREATE_INSCRIPTION_SELECTOR, SETTLE_SELECTOR, BATCH_SETTLE_SELECTOR])\n if (!match) return null\n\n let offset: number\n if (match.selector === CREATE_INSCRIPTION_SELECTOR) {\n // create_inscription(InscriptionParams): is_borrow(1), debt_assets, interest_assets, collateral_assets, ...\n offset = 1\n } else if (match.selector === SETTLE_SELECTOR) {\n // settle(InscriptionOrder(11), debt_assets, interest_assets, collateral_assets, ...)\n offset = 11\n } else {\n // batch_settle: orders array length + N orders, then flat asset arrays\n // Too complex for single-inscription parsing — skip for now\n return null\n }\n\n const { assets: debt, nextOffset: afterDebt } = parseAssetArray(match.cd, offset)\n const { assets: interest, nextOffset: afterInterest } = parseAssetArray(match.cd, afterDebt)\n const { assets: collateral } = parseAssetArray(match.cd, afterInterest)\n\n return { debt, interest, collateral }\n } catch {\n return null\n }\n}\n","import type { TokenInfo } from './types.js'\n\n/**\n * Curated StarkNet token list.\n * Addresses sourced from official deployments.\n */\nexport const TOKENS: TokenInfo[] = [\n {\n symbol: 'ETH',\n name: 'Ether',\n decimals: 18,\n logoUrl:\n 'https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/info/logo.png',\n addresses: {\n sepolia: '0x049d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7',\n mainnet: '0x049d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7',\n },\n },\n {\n symbol: 'STRK',\n name: 'Starknet Token',\n decimals: 18,\n logoUrl: 'https://assets.coingecko.com/coins/images/26433/standard/starknet.png',\n addresses: {\n sepolia: '0x04718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d',\n mainnet: '0x04718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d',\n },\n },\n {\n symbol: 'USDC',\n name: 'USD Coin',\n decimals: 6,\n logoUrl:\n 'https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48/logo.png',\n addresses: {\n sepolia: '0x053b40a647cedfca6ca84f542a0fe36736031905a9639a7f19a3c1e66bfd5080',\n mainnet: '0x053c91253bc9682c04929ca02ed00b3e423f6710d2ee7e0d5ebb06f3ecf368a8',\n },\n },\n {\n symbol: 'USDT',\n name: 'Tether USD',\n decimals: 6,\n logoUrl:\n 'https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xdAC17F958D2ee523a2206206994597C13D831ec7/logo.png',\n addresses: {\n sepolia: '0x07394cbe418daa16e42b87ba67372d4ab4a5df0b05c6e554d158577e75e7777c',\n mainnet: '0x068f5c6a61780768455de69077e07e89787839bf8166decfbf92b645209c0fb8',\n },\n },\n {\n symbol: 'WBTC',\n name: 'Wrapped Bitcoin',\n decimals: 8,\n logoUrl:\n 'https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599/logo.png',\n addresses: {\n sepolia: '0x012d537dc323c439dc65c976fad242d5610d27cfb5f31689a0a319b8be7f3d56',\n mainnet: '0x03fe2b97c1fd336e750087d68b9b867997fd64a2661ff3ca5a7c771641e8e7ac',\n },\n },\n {\n symbol: 'DAI',\n name: 'Dai Stablecoin',\n decimals: 18,\n logoUrl:\n 'https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x6B175474E89094C44Da98b954EedeAC495271d0F/logo.png',\n addresses: {\n mainnet: '0x00da114221cb83fa859dbdb4c44beeaa0bb37c7537ad5ae66fe5e0efd20e6eb3',\n },\n },\n {\n symbol: 'wstETH',\n name: 'Wrapped stETH',\n decimals: 18,\n logoUrl: 'https://assets.coingecko.com/coins/images/18834/standard/wstETH.png',\n addresses: {\n sepolia: '0x0735d0f09a4e8bf8a17005fa35061b5957dcaa56889fc75df9ff7c0d36a4c5e0',\n mainnet: '0x042b8f0484674ca266ac5d08e4ac6a3fe65bd3129795def2dca5c34ecc5f96d2',\n },\n },\n // Mock tokens (Stela Sepolia testnet)\n {\n symbol: 'mUSDC',\n name: 'Mock USDC',\n decimals: 6,\n addresses: {\n sepolia: '0x034a0cf09c79e7f20fb2136212f27b7dd88e91f9a24b2ac50c5c41ff6b30c59d',\n },\n },\n {\n symbol: 'mWETH',\n name: 'Mock WETH',\n decimals: 18,\n addresses: {\n sepolia: '0x07e86764396d61d2179cd1a48033fa4f30897cb172464961a80649aff4da9bdd',\n },\n },\n {\n symbol: 'mDAI',\n name: 'Mock DAI',\n decimals: 18,\n addresses: {\n sepolia: '0x0479f31a23241b1337375b083099bd1672716edbf908b1b30148a648657a1cee',\n },\n },\n {\n symbol: 'StelaNFT',\n name: 'Stela NFT',\n decimals: 0,\n addresses: {\n sepolia: '0x04f2345306bf8ef1c8c1445661354ef08421aa092459445a5d6b46641237e943',\n },\n },\n // NFT Collections (ERC721)\n {\n symbol: 'GENESIS',\n name: 'Stela Genesis',\n decimals: 0,\n assetType: 'ERC721',\n addresses: {\n sepolia: '0x0265ea52ffbf1b7e1a029b94fe1a2023899dd0bc02eb1f11c9b04ea90e957d28',\n },\n },\n {\n symbol: 'MockNFT',\n name: 'Mock ERC721',\n decimals: 0,\n assetType: 'ERC721',\n addresses: {\n sepolia: '0x032bfd52134ad92beae1bc5018a3748e1d1240efd627220e314c07e4c63433d5',\n },\n },\n]\n\n/** Strip leading zeros after 0x for consistent comparison */\nfunction normalizeHex(addr: string): string {\n return '0x' + addr.replace(/^0x0*/i, '').toLowerCase()\n}\n\n/** Get NFT collections (ERC721) available on a specific network */\nexport function getNFTCollections(network: string): TokenInfo[] {\n return TOKENS.filter(\n (t) => t.assetType === 'ERC721' && t.addresses[network as keyof typeof t.addresses] !== undefined,\n )\n}\n\n/** Get tokens available on a specific network */\nexport function getTokensForNetwork(network: string): TokenInfo[] {\n return TOKENS.filter((t) => t.addresses[network as keyof typeof t.addresses] !== undefined)\n}\n\n/** Find a token by its address (any network) */\nexport function findTokenByAddress(address: string): TokenInfo | undefined {\n const normalized = normalizeHex(address)\n return TOKENS.find((t) =>\n Object.values(t.addresses).some((a) => a !== undefined && normalizeHex(a) === normalized),\n )\n}\n","import { MAX_BPS, VIRTUAL_SHARE_OFFSET } from '../constants/protocol.js'\n\n/** Convert a fill percentage to shares, matching the contract's share math */\nexport function convertToShares(\n percentage: bigint,\n totalSupply: bigint,\n currentIssuedPercentage: bigint,\n): bigint {\n const denominator = currentIssuedPercentage === 0n ? 1n : currentIssuedPercentage\n return (percentage * (totalSupply + VIRTUAL_SHARE_OFFSET)) / denominator\n}\n\n/** Scale a value by a percentage in basis points */\nexport function scaleByPercentage(value: bigint, percentage: bigint): bigint {\n return (value * percentage) / MAX_BPS\n}\n\n/** Convert shares back to a percentage of the inscription */\nexport function sharesToPercentage(\n shares: bigint,\n totalSupply: bigint,\n currentIssuedPercentage: bigint,\n): bigint {\n const effectivePct = currentIssuedPercentage === 0n ? 1n : currentIssuedPercentage\n return (shares * effectivePct) / (totalSupply + VIRTUAL_SHARE_OFFSET)\n}\n\n/** Calculate the fee portion of shares given a fee in basis points */\nexport function calculateFeeShares(shares: bigint, feeBps: bigint): bigint {\n return (shares * feeBps) / MAX_BPS\n}\n\n/** Ceiling integer division: ceil(a / b). Matches Cairo div_ceil. */\nexport function divCeil(a: bigint, b: bigint): bigint {\n if (a === 0n) return 0n\n return (a + b - 1n) / b\n}\n\n/**\n * Pro-rata interest for early repayment. Matches Cairo pro_rata_interest().\n * Rounds UP (ceiling) to protect lenders — borrower never underpays.\n *\n * @param amount - Full interest amount\n * @param elapsed - Seconds elapsed since loan signed\n * @param duration - Total loan duration in seconds\n * @returns ceil(amount * elapsed / duration), capped at amount\n */\nexport function proRataInterest(amount: bigint, elapsed: bigint, duration: bigint): bigint {\n if (amount === 0n || elapsed === 0n) return 0n\n if (elapsed >= duration) return amount\n return divCeil(amount * elapsed, duration)\n}\n","import { MAX_BPS } from '../constants/protocol.js'\nimport { proRataInterest, divCeil } from './shares.js'\nimport type { Asset } from '../types/inscription.js'\n\n/** Default dust buffer: 60 seconds of extra interest accrual to account for tx confirmation delay */\nexport const DEFAULT_DUST_BUFFER_SECONDS = 60n\n\n/** Value breakdown for a single asset in a position */\nexport interface AssetValue {\n /** The asset definition */\n asset: Asset\n /** The share-proportional amount of this asset */\n proportionalValue: bigint\n}\n\n/** Accrued interest for a single asset in a position */\nexport interface AccruedInterestEntry {\n /** The interest asset definition */\n asset: Asset\n /** Full interest amount (before pro-rata) scaled to share proportion */\n fullInterest: bigint\n /** Pro-rata accrued interest at the given elapsed time */\n accruedInterest: bigint\n}\n\n/** Complete position valuation at a point in time */\nexport interface PositionValue {\n /** Inscription ID */\n inscriptionId: string\n /** Shares held */\n shares: bigint\n /** Total supply of shares for this inscription */\n totalSupply: bigint\n /** Share proportion as a fraction of MAX_BPS (10000) */\n shareBps: bigint\n /** Debt asset values (proportional to shares held) */\n debt: AssetValue[]\n /** Interest asset values (full and accrued) */\n interest: AccruedInterestEntry[]\n /** Collateral asset values (proportional to shares held) */\n collateral: AssetValue[]\n /** Suggested floor price: sum of proportional debt + accrued interest (per asset) */\n accrued: AccruedInterestEntry[]\n /** Elapsed seconds since loan signed */\n elapsed: bigint\n /** Total loan duration */\n duration: bigint\n}\n\n/**\n * Compute the share proportion in BPS for a given share amount.\n * Returns how many basis points (out of 10000) the shares represent.\n */\nexport function shareProportionBps(shares: bigint, totalSupply: bigint): bigint {\n if (totalSupply === 0n) return 0n\n return (shares * MAX_BPS) / totalSupply\n}\n\n/**\n * Compute the proportional value of an asset for a given share amount.\n * This is the amount the share holder would receive on redemption.\n *\n * Matches the contract: `tracked_balance * shares / total_supply`\n */\nexport function proportionalAssetValue(\n assetValue: bigint,\n shares: bigint,\n totalSupply: bigint,\n): bigint {\n if (totalSupply === 0n || shares === 0n) return 0n\n return (assetValue * shares) / totalSupply\n}\n\n/**\n * Compute the full position valuation at a point in time.\n *\n * @param params.inscriptionId - The inscription ID\n * @param params.shares - Shares held by the position owner\n * @param params.totalSupply - Total shares for this inscription\n * @param params.debtAssets - Debt asset definitions with values\n * @param params.interestAssets - Interest asset definitions with values\n * @param params.collateralAssets - Collateral asset definitions with values\n * @param params.elapsed - Seconds elapsed since signed_at\n * @param params.duration - Total loan duration in seconds\n */\nexport function computePositionValue(params: {\n inscriptionId: string\n shares: bigint\n totalSupply: bigint\n debtAssets: Asset[]\n interestAssets: Asset[]\n collateralAssets: Asset[]\n elapsed: bigint\n duration: bigint\n}): PositionValue {\n const { shares, totalSupply, elapsed, duration } = params\n\n const shareBps = shareProportionBps(shares, totalSupply)\n\n const debt: AssetValue[] = params.debtAssets.map((asset) => ({\n asset,\n proportionalValue: proportionalAssetValue(asset.value, shares, totalSupply),\n }))\n\n const interest: AccruedInterestEntry[] = params.interestAssets.map((asset) => {\n const fullInterest = proportionalAssetValue(asset.value, shares, totalSupply)\n const accruedInterest =\n duration === 0n ? fullInterest : proRataInterest(fullInterest, elapsed, duration)\n return { asset, fullInterest, accruedInterest }\n })\n\n const collateral: AssetValue[] = params.collateralAssets.map((asset) => ({\n asset,\n proportionalValue: proportionalAssetValue(asset.value, shares, totalSupply),\n }))\n\n return {\n inscriptionId: params.inscriptionId,\n shares,\n totalSupply,\n shareBps,\n debt,\n interest,\n collateral,\n accrued: interest,\n elapsed,\n duration,\n }\n}\n\n/**\n * Compute accrued interest with a dust buffer to account for transaction confirmation delay.\n *\n * Between computing the price and the transaction landing on-chain, interest continues\n * to accrue. This adds a configurable buffer (default 60s) of extra interest so the\n * buyer's approval doesn't fail due to a tiny increase.\n *\n * @param amount - Full interest amount for the position\n * @param elapsed - Current elapsed seconds since signed_at\n * @param duration - Total loan duration in seconds\n * @param bufferSeconds - Extra seconds to add (default: 60)\n * @returns Accrued interest at (elapsed + buffer), capped at full amount\n */\nexport function accruedInterestWithBuffer(\n amount: bigint,\n elapsed: bigint,\n duration: bigint,\n bufferSeconds: bigint = DEFAULT_DUST_BUFFER_SECONDS,\n): bigint {\n if (duration === 0n) return amount\n const bufferedElapsed = elapsed + bufferSeconds\n return proRataInterest(amount, bufferedElapsed, duration)\n}\n\n/**\n * Compute a safe minimum price for buying a lending position.\n * Includes proportional debt + accrued interest + dust buffer for each interest asset.\n *\n * Use this when the buyer needs to know how much to approve for payment tokens.\n *\n * @returns Array of { asset, safeAmount } for debt assets and interest assets respectively\n */\nexport function computeSafePositionFloor(params: {\n shares: bigint\n totalSupply: bigint\n debtAssets: Asset[]\n interestAssets: Asset[]\n elapsed: bigint\n duration: bigint\n bufferSeconds?: bigint\n}): { debtFloor: AssetValue[]; interestFloor: AssetValue[] } {\n const { shares, totalSupply, elapsed, duration } = params\n const buffer = params.bufferSeconds ?? DEFAULT_DUST_BUFFER_SECONDS\n\n const debtFloor: AssetValue[] = params.debtAssets.map((asset) => ({\n asset,\n proportionalValue: proportionalAssetValue(asset.value, shares, totalSupply),\n }))\n\n const interestFloor: AssetValue[] = params.interestAssets.map((asset) => {\n const fullInterest = proportionalAssetValue(asset.value, shares, totalSupply)\n const safeAccrued = accruedInterestWithBuffer(fullInterest, elapsed, duration, buffer)\n return { asset, proportionalValue: safeAccrued }\n })\n\n return { debtFloor, interestFloor }\n}\n","/**\n * Compute interest rate as a ratio of interest value to debt value.\n * Skips ERC721 assets (no fungible value). Returns null if debt total is zero.\n * Used by both the settlement bot (priority) and frontend (rank display).\n */\nexport function computeInterestRate(\n debtAssets: { asset_type: string; value: string }[],\n interestAssets: { asset_type: string; value: string }[],\n): number | null {\n let debtTotal = 0n\n let interestTotal = 0n\n for (const a of debtAssets) {\n if (a.asset_type === 'ERC721') continue\n debtTotal += BigInt(a.value || '0')\n }\n for (const a of interestAssets) {\n if (a.asset_type === 'ERC721') continue\n interestTotal += BigInt(a.value || '0')\n }\n if (debtTotal === 0n) return null\n return Number((interestTotal * 1_000_000n) / debtTotal) / 1_000_000\n}\n","import { hash } from 'starknet'\n\n/** Event selectors for all Stela protocol events */\nexport const SELECTORS = {\n InscriptionCreated: hash.getSelectorFromName('InscriptionCreated'),\n InscriptionSigned: hash.getSelectorFromName('InscriptionSigned'),\n InscriptionCancelled: hash.getSelectorFromName('InscriptionCancelled'),\n InscriptionRepaid: hash.getSelectorFromName('InscriptionRepaid'),\n InscriptionLiquidated: hash.getSelectorFromName('InscriptionLiquidated'),\n SharesRedeemed: hash.getSelectorFromName('SharesRedeemed'),\n TransferSingle: hash.getSelectorFromName('TransferSingle'),\n OrderSettled: hash.getSelectorFromName('OrderSettled'),\n OrderFilled: hash.getSelectorFromName('OrderFilled'),\n OrderCancelled: hash.getSelectorFromName('OrderCancelled'),\n OrdersBulkCancelled: hash.getSelectorFromName('OrdersBulkCancelled'),\n} as const\n","import { uint256 } from 'starknet'\nimport type { RawEvent, StelaEvent } from '../types/events.js'\nimport { SELECTORS } from './selectors.js'\n\n/** Convert two felt strings (low, high) into a bigint */\nfunction feltsToU256(low: string, high: string): bigint {\n return uint256.uint256ToBN({ low: BigInt(low), high: BigInt(high) })\n}\n\n/** Parse a single raw event into a typed StelaEvent. Returns null if unrecognized. */\nexport function parseEvent(raw: RawEvent): StelaEvent | null {\n const selector = raw.keys[0]\n\n switch (selector) {\n case SELECTORS.InscriptionCreated: {\n // keys: [selector, id_low, id_high, creator]\n // data: [is_borrow]\n return {\n type: 'InscriptionCreated',\n inscription_id: feltsToU256(raw.keys[1], raw.keys[2]),\n creator: raw.keys[3],\n is_borrow: BigInt(raw.data[0]) !== 0n,\n transaction_hash: raw.transaction_hash,\n block_number: raw.block_number,\n }\n }\n\n case SELECTORS.InscriptionSigned: {\n // keys: [selector, id_low, id_high, borrower, lender]\n // data: [pct_low, pct_high, shares_low, shares_high]\n return {\n type: 'InscriptionSigned',\n inscription_id: feltsToU256(raw.keys[1], raw.keys[2]),\n borrower: raw.keys[3],\n lender: raw.keys[4],\n issued_debt_percentage: feltsToU256(raw.data[0], raw.data[1]),\n shares_minted: feltsToU256(raw.data[2], raw.data[3]),\n transaction_hash: raw.transaction_hash,\n block_number: raw.block_number,\n }\n }\n\n case SELECTORS.InscriptionCancelled: {\n // keys: [selector, id_low, id_high]\n // data: [creator]\n return {\n type: 'InscriptionCancelled',\n inscription_id: feltsToU256(raw.keys[1], raw.keys[2]),\n creator: raw.data[0],\n transaction_hash: raw.transaction_hash,\n block_number: raw.block_number,\n }\n }\n\n case SELECTORS.InscriptionRepaid: {\n // keys: [selector, id_low, id_high]\n // data: [repayer]\n return {\n type: 'InscriptionRepaid',\n inscription_id: feltsToU256(raw.keys[1], raw.keys[2]),\n repayer: raw.data[0],\n transaction_hash: raw.transaction_hash,\n block_number: raw.block_number,\n }\n }\n\n case SELECTORS.InscriptionLiquidated: {\n // keys: [selector, id_low, id_high]\n // data: [liquidator]\n return {\n type: 'InscriptionLiquidated',\n inscription_id: feltsToU256(raw.keys[1], raw.keys[2]),\n liquidator: raw.data[0],\n transaction_hash: raw.transaction_hash,\n block_number: raw.block_number,\n }\n }\n\n case SELECTORS.SharesRedeemed: {\n // keys: [selector, id_low, id_high, redeemer]\n // data: [shares_low, shares_high]\n return {\n type: 'SharesRedeemed',\n inscription_id: feltsToU256(raw.keys[1], raw.keys[2]),\n redeemer: raw.keys[3],\n shares: feltsToU256(raw.data[0], raw.data[1]),\n transaction_hash: raw.transaction_hash,\n block_number: raw.block_number,\n }\n }\n\n case SELECTORS.TransferSingle: {\n // keys: [selector, operator, from, to]\n // data: [id_low, id_high, value_low, value_high]\n return {\n type: 'TransferSingle',\n operator: raw.keys[1],\n from: raw.keys[2],\n to: raw.keys[3],\n id: feltsToU256(raw.data[0], raw.data[1]),\n value: feltsToU256(raw.data[2], raw.data[3]),\n transaction_hash: raw.transaction_hash,\n block_number: raw.block_number,\n }\n }\n\n case SELECTORS.OrderSettled: {\n // keys: [selector, id_low, id_high, borrower, lender]\n // data: [relayer, fee_low, fee_high]\n return {\n type: 'OrderSettled',\n inscription_id: feltsToU256(raw.keys[1], raw.keys[2]),\n borrower: raw.keys[3],\n lender: raw.keys[4],\n relayer: raw.data[0],\n relayer_fee_amount: feltsToU256(raw.data[1], raw.data[2]),\n transaction_hash: raw.transaction_hash,\n block_number: raw.block_number,\n }\n }\n\n case SELECTORS.OrderFilled: {\n // keys: [selector, id_low, id_high, order_hash, taker]\n // data: [fill_bps_low, fill_bps_high, total_filled_bps_low, total_filled_bps_high]\n return {\n type: 'OrderFilled',\n inscription_id: feltsToU256(raw.keys[1], raw.keys[2]),\n order_hash: raw.keys[3],\n taker: raw.keys[4],\n fill_bps: feltsToU256(raw.data[0], raw.data[1]),\n total_filled_bps: feltsToU256(raw.data[2], raw.data[3]),\n transaction_hash: raw.transaction_hash,\n block_number: raw.block_number,\n }\n }\n\n case SELECTORS.OrderCancelled: {\n // keys: [selector, order_hash]\n // data: [maker]\n return {\n type: 'OrderCancelled',\n order_hash: raw.keys[1],\n maker: raw.data[0],\n transaction_hash: raw.transaction_hash,\n block_number: raw.block_number,\n }\n }\n\n case SELECTORS.OrdersBulkCancelled: {\n // keys: [selector, maker]\n // data: [new_min_nonce]\n return {\n type: 'OrdersBulkCancelled',\n maker: raw.keys[1],\n new_min_nonce: raw.data[0],\n transaction_hash: raw.transaction_hash,\n block_number: raw.block_number,\n }\n }\n\n default:\n return null\n }\n}\n\n/** Parse an array of raw events, skipping unrecognized ones. */\nexport function parseEvents(rawEvents: RawEvent[]): StelaEvent[] {\n const results: StelaEvent[] = []\n for (const raw of rawEvents) {\n const parsed = parseEvent(raw)\n if (parsed) results.push(parsed)\n }\n return results\n}\n","import { hash } from 'starknet'\nimport type { Asset } from '../types/inscription.js'\nimport { ASSET_TYPE_ENUM } from '../constants/protocol.js'\nimport { toU256 } from '../utils/u256.js'\n\n/** Matches Cairo's U256_TYPE_HASH = selector!(\"\\\"u256\\\"(\\\"low\\\":\\\"u128\\\",\\\"high\\\":\\\"u128\\\")\") */\nconst U256_TYPE_HASH = '0x3b143be38b811560b45593fb2a071ec4ddd0a020e10782be62ffe6f39e0e82c'\n\nexport interface BatchEntry {\n orderHash: string // felt252 hex\n bps: bigint // u256\n}\n\n/**\n * Hash an array of BatchEntry using Poseidon -- matches Cairo's hash_batch_entries().\n *\n * Format: Poseidon(count, order_hash_1, u256_hash(bps_1), order_hash_2, u256_hash(bps_2), ...)\n * where u256_hash(bps) = Poseidon(U256_TYPE_HASH, low, high)\n */\nexport function hashBatchEntries(entries: BatchEntry[]): string {\n const elements: string[] = [String(entries.length)]\n for (const entry of entries) {\n elements.push(entry.orderHash)\n const [low, high] = toU256(entry.bps)\n const bpsHash = hash.computePoseidonHashOnElements([U256_TYPE_HASH, low, high])\n elements.push(bpsHash)\n }\n return hash.computePoseidonHashOnElements(elements)\n}\n\n/**\n * Hash an array of assets using Poseidon -- matches Cairo's hash_assets().\n *\n * The Cairo code hashes: len, then for each asset:\n * asset.asset (ContractAddress -> 1 felt)\n * asset.asset_type (enum -> 1 felt)\n * asset.value (u256 -> low felt, high felt)\n * asset.token_id (u256 -> low felt, high felt)\n *\n * Uses `hash.computePoseidonHashOnElements` from starknet.js which takes an\n * array and computes Poseidon over all elements.\n */\nexport function hashAssets(assets: Asset[]): string {\n const elements: string[] = [String(assets.length)]\n for (const asset of assets) {\n elements.push(asset.asset_address)\n elements.push(String(ASSET_TYPE_ENUM[asset.asset_type]))\n const [vLow, vHigh] = toU256(asset.value)\n elements.push(vLow, vHigh)\n const [tidLow, tidHigh] = toU256(asset.token_id)\n elements.push(tidLow, tidHigh)\n }\n return hash.computePoseidonHashOnElements(elements)\n}\n","import type { TypedData } from 'starknet'\nimport type { Asset } from '../types/inscription.js'\nimport { hashAssets } from './hash.js'\n\n/** Domain separator -- MUST match the Cairo contract's SNIP12Metadata */\nconst STELA_DOMAIN = {\n name: 'Stela',\n version: 'v1',\n chainId: '', // filled at call time\n revision: '1',\n}\n\n/**\n * Build SNIP-12 typed data for an order cancellation.\n *\n * The borrower signs this to prove they want to cancel their order.\n * Both client and server must produce the same typed data to agree\n * on the message hash that gets verified via is_valid_signature.\n */\nexport function getCancelOrderTypedData(orderId: string, chainId: string): TypedData {\n return {\n types: {\n StarknetDomain: [\n { name: 'name', type: 'shortstring' },\n { name: 'version', type: 'shortstring' },\n { name: 'chainId', type: 'shortstring' },\n { name: 'revision', type: 'shortstring' },\n ],\n CancelOrder: [\n { name: 'order_id', type: 'string' },\n ],\n },\n primaryType: 'CancelOrder',\n domain: {\n ...STELA_DOMAIN,\n chainId,\n },\n message: {\n order_id: orderId,\n },\n }\n}\n\n/**\n * Build SNIP-12 TypedData for a borrower's InscriptionOrder.\n * The borrower signs this off-chain to create an order without gas.\n */\nexport function getInscriptionOrderTypedData(params: {\n borrower: string\n debtAssets: Asset[]\n interestAssets: Asset[]\n collateralAssets: Asset[]\n debtCount: number\n interestCount: number\n collateralCount: number\n duration: bigint\n deadline: bigint\n multiLender: boolean\n nonce: bigint\n chainId: string\n}): TypedData {\n return {\n types: {\n StarknetDomain: [\n { name: 'name', type: 'shortstring' },\n { name: 'version', type: 'shortstring' },\n { name: 'chainId', type: 'shortstring' },\n { name: 'revision', type: 'shortstring' },\n ],\n InscriptionOrder: [\n { name: 'borrower', type: 'ContractAddress' },\n { name: 'debt_hash', type: 'felt' },\n { name: 'interest_hash', type: 'felt' },\n { name: 'collateral_hash', type: 'felt' },\n { name: 'debt_count', type: 'u128' },\n { name: 'interest_count', type: 'u128' },\n { name: 'collateral_count', type: 'u128' },\n { name: 'duration', type: 'u128' },\n { name: 'deadline', type: 'u128' },\n { name: 'multi_lender', type: 'bool' },\n { name: 'nonce', type: 'felt' },\n ],\n },\n primaryType: 'InscriptionOrder',\n domain: {\n ...STELA_DOMAIN,\n chainId: params.chainId,\n },\n message: {\n borrower: params.borrower,\n debt_hash: hashAssets(params.debtAssets),\n interest_hash: hashAssets(params.interestAssets),\n collateral_hash: hashAssets(params.collateralAssets),\n debt_count: params.debtCount.toString(),\n interest_count: params.interestCount.toString(),\n collateral_count: params.collateralCount.toString(),\n duration: params.duration.toString(),\n deadline: params.deadline.toString(),\n multi_lender: params.multiLender,\n nonce: params.nonce.toString(),\n },\n }\n}\n\n/**\n * Build SNIP-12 TypedData for a lender's LendOffer.\n * The lender signs this off-chain to accept an order without gas.\n */\nexport function getLendOfferTypedData(params: {\n orderHash: string\n lender: string\n issuedDebtPercentage: bigint\n nonce: bigint\n chainId: string\n}): TypedData {\n return {\n types: {\n StarknetDomain: [\n { name: 'name', type: 'shortstring' },\n { name: 'version', type: 'shortstring' },\n { name: 'chainId', type: 'shortstring' },\n { name: 'revision', type: 'shortstring' },\n ],\n LendOffer: [\n { name: 'order_hash', type: 'felt' },\n { name: 'lender', type: 'ContractAddress' },\n { name: 'issued_debt_percentage', type: 'u256' },\n { name: 'nonce', type: 'felt' },\n ],\n u256: [\n { name: 'low', type: 'u128' },\n { name: 'high', type: 'u128' },\n ],\n },\n primaryType: 'LendOffer',\n domain: {\n ...STELA_DOMAIN,\n chainId: params.chainId,\n },\n message: {\n order_hash: params.orderHash,\n lender: params.lender,\n issued_debt_percentage: {\n low: (params.issuedDebtPercentage & ((1n << 128n) - 1n)).toString(),\n high: (params.issuedDebtPercentage >> 128n).toString(),\n },\n nonce: params.nonce.toString(),\n },\n }\n}\n\n/**\n * Build SNIP-12 TypedData for a lender's BatchLendOffer.\n * The lender signs this off-chain to accept multiple orders atomically.\n */\nexport function getBatchLendOfferTypedData(params: {\n batchHash: string\n count: number\n lender: string\n startNonce: bigint\n chainId: string\n}): TypedData {\n return {\n types: {\n StarknetDomain: [\n { name: 'name', type: 'shortstring' },\n { name: 'version', type: 'shortstring' },\n { name: 'chainId', type: 'shortstring' },\n { name: 'revision', type: 'shortstring' },\n ],\n BatchLendOffer: [\n { name: 'batch_hash', type: 'felt' },\n { name: 'count', type: 'u128' },\n { name: 'lender', type: 'ContractAddress' },\n { name: 'start_nonce', type: 'felt' },\n ],\n },\n primaryType: 'BatchLendOffer',\n domain: {\n ...STELA_DOMAIN,\n chainId: params.chainId,\n },\n message: {\n batch_hash: params.batchHash,\n count: params.count.toString(),\n lender: params.lender,\n start_nonce: params.startNonce.toString(),\n },\n }\n}\n\n// ── T1 Typed Data Builders ─────────────────────────────────────────────\n\n/** Helper to encode a u256 as the nested {low, high} struct SNIP-12 expects */\nfunction u256Message(value: bigint): { low: string; high: string } {\n return {\n low: (value & ((1n << 128n) - 1n)).toString(),\n high: (value >> 128n).toString(),\n }\n}\n\n/** SNIP-12 StarknetDomain type definition (shared across all typed data) */\nconst STARKNET_DOMAIN_TYPE = [\n { name: 'name', type: 'shortstring' },\n { name: 'version', type: 'shortstring' },\n { name: 'chainId', type: 'shortstring' },\n { name: 'revision', type: 'shortstring' },\n]\n\n/** u256 sub-type definition for SNIP-12 */\nconst U256_TYPE = [\n { name: 'low', type: 'u128' },\n { name: 'high', type: 'u128' },\n]\n\n/**\n * Build SNIP-12 TypedData for a collection-wide lend offer (T1-2).\n * The lender offers to lend against any NFT from a given collection.\n */\nexport function getCollectionLendOfferTypedData(params: {\n lender: string\n debtAssets: Asset[]\n interestAssets: Asset[]\n debtCount: number\n interestCount: number\n collectionAddress: string\n duration: bigint\n deadline: bigint\n nonce: bigint\n chainId: string\n}): TypedData {\n return {\n types: {\n StarknetDomain: STARKNET_DOMAIN_TYPE,\n CollectionLendOffer: [\n { name: 'lender', type: 'ContractAddress' },\n { name: 'debt_hash', type: 'felt' },\n { name: 'interest_hash', type: 'felt' },\n { name: 'debt_count', type: 'u128' },\n { name: 'interest_count', type: 'u128' },\n { name: 'collection_address', type: 'ContractAddress' },\n { name: 'duration', type: 'u128' },\n { name: 'deadline', type: 'u128' },\n { name: 'nonce', type: 'felt' },\n ],\n },\n primaryType: 'CollectionLendOffer',\n domain: { ...STELA_DOMAIN, chainId: params.chainId },\n message: {\n lender: params.lender,\n debt_hash: hashAssets(params.debtAssets),\n interest_hash: hashAssets(params.interestAssets),\n debt_count: params.debtCount.toString(),\n interest_count: params.interestCount.toString(),\n collection_address: params.collectionAddress,\n duration: params.duration.toString(),\n deadline: params.deadline.toString(),\n nonce: params.nonce.toString(),\n },\n }\n}\n\n/**\n * Build SNIP-12 TypedData for a borrower's collection borrow acceptance (T1-2).\n * The borrower specifies which token_id from the collection to use as collateral.\n */\nexport function getCollectionBorrowAcceptanceTypedData(params: {\n offerHash: string\n borrower: string\n tokenId: bigint\n nonce: bigint\n chainId: string\n}): TypedData {\n return {\n types: {\n StarknetDomain: STARKNET_DOMAIN_TYPE,\n CollectionBorrowAcceptance: [\n { name: 'offer_hash', type: 'felt' },\n { name: 'borrower', type: 'ContractAddress' },\n { name: 'token_id', type: 'u256' },\n { name: 'nonce', type: 'felt' },\n ],\n u256: U256_TYPE,\n },\n primaryType: 'CollectionBorrowAcceptance',\n domain: { ...STELA_DOMAIN, chainId: params.chainId },\n message: {\n offer_hash: params.offerHash,\n borrower: params.borrower,\n token_id: u256Message(params.tokenId),\n nonce: params.nonce.toString(),\n },\n }\n}\n\n/**\n * Build SNIP-12 TypedData for a renegotiation proposal (T1-4).\n * Either borrower or lender proposes new terms for an existing loan.\n */\nexport function getRenegotiationProposalTypedData(params: {\n inscriptionId: bigint\n proposer: string\n newDuration: bigint\n newInterestAssets: Asset[]\n newInterestCount: number\n proposalDeadline: bigint\n nonce: bigint\n chainId: string\n}): TypedData {\n return {\n types: {\n StarknetDomain: STARKNET_DOMAIN_TYPE,\n RenegotiationProposal: [\n { name: 'inscription_id', type: 'u256' },\n { name: 'proposer', type: 'ContractAddress' },\n { name: 'new_duration', type: 'u128' },\n { name: 'new_interest_hash', type: 'felt' },\n { name: 'new_interest_count', type: 'u128' },\n { name: 'proposal_deadline', type: 'u128' },\n { name: 'nonce', type: 'felt' },\n ],\n u256: U256_TYPE,\n },\n primaryType: 'RenegotiationProposal',\n domain: { ...STELA_DOMAIN, chainId: params.chainId },\n message: {\n inscription_id: u256Message(params.inscriptionId),\n proposer: params.proposer,\n new_duration: params.newDuration.toString(),\n new_interest_hash: hashAssets(params.newInterestAssets),\n new_interest_count: params.newInterestCount.toString(),\n proposal_deadline: params.proposalDeadline.toString(),\n nonce: params.nonce.toString(),\n },\n }\n}\n\n/**\n * Build SNIP-12 TypedData for a collateral sale offer (T1-5).\n * The borrower offers to sell locked collateral to repay the loan.\n */\nexport function getCollateralSaleOfferTypedData(params: {\n inscriptionId: bigint\n borrower: string\n minPrice: bigint\n paymentToken: string\n allowedBuyer: string\n deadline: bigint\n nonce: bigint\n chainId: string\n}): TypedData {\n return {\n types: {\n StarknetDomain: STARKNET_DOMAIN_TYPE,\n CollateralSaleOffer: [\n { name: 'inscription_id', type: 'u256' },\n { name: 'borrower', type: 'ContractAddress' },\n { name: 'min_price', type: 'u256' },\n { name: 'payment_token', type: 'ContractAddress' },\n { name: 'allowed_buyer', type: 'ContractAddress' },\n { name: 'deadline', type: 'u128' },\n { name: 'nonce', type: 'felt' },\n ],\n u256: U256_TYPE,\n },\n primaryType: 'CollateralSaleOffer',\n domain: { ...STELA_DOMAIN, chainId: params.chainId },\n message: {\n inscription_id: u256Message(params.inscriptionId),\n borrower: params.borrower,\n min_price: u256Message(params.minPrice),\n payment_token: params.paymentToken,\n allowed_buyer: params.allowedBuyer,\n deadline: params.deadline.toString(),\n nonce: params.nonce.toString(),\n },\n }\n}\n\n/**\n * Build SNIP-12 TypedData for a refinance offer (T1-1).\n * A new lender offers to take over an existing loan with new terms.\n */\nexport function getRefinanceOfferTypedData(params: {\n inscriptionId: bigint\n newLender: string\n newDebtAssets: Asset[]\n newInterestAssets: Asset[]\n newDebtCount: number\n newInterestCount: number\n newDuration: bigint\n deadline: bigint\n nonce: bigint\n chainId: string\n}): TypedData {\n return {\n types: {\n StarknetDomain: STARKNET_DOMAIN_TYPE,\n RefinanceOffer: [\n { name: 'inscription_id', type: 'u256' },\n { name: 'new_lender', type: 'ContractAddress' },\n { name: 'new_debt_hash', type: 'felt' },\n { name: 'new_interest_hash', type: 'felt' },\n { name: 'new_debt_count', type: 'u128' },\n { name: 'new_interest_count', type: 'u128' },\n { name: 'new_duration', type: 'u128' },\n { name: 'deadline', type: 'u128' },\n { name: 'nonce', type: 'felt' },\n ],\n u256: U256_TYPE,\n },\n primaryType: 'RefinanceOffer',\n domain: { ...STELA_DOMAIN, chainId: params.chainId },\n message: {\n inscription_id: u256Message(params.inscriptionId),\n new_lender: params.newLender,\n new_debt_hash: hashAssets(params.newDebtAssets),\n new_interest_hash: hashAssets(params.newInterestAssets),\n new_debt_count: params.newDebtCount.toString(),\n new_interest_count: params.newInterestCount.toString(),\n new_duration: params.newDuration.toString(),\n deadline: params.deadline.toString(),\n nonce: params.nonce.toString(),\n },\n }\n}\n\n/**\n * Build SNIP-12 TypedData for a refinance approval (T1-1).\n * The borrower approves a specific refinance offer for their loan.\n */\nexport function getRefinanceApprovalTypedData(params: {\n inscriptionId: bigint\n offerHash: string\n borrower: string\n nonce: bigint\n chainId: string\n}): TypedData {\n return {\n types: {\n StarknetDomain: STARKNET_DOMAIN_TYPE,\n RefinanceApproval: [\n { name: 'inscription_id', type: 'u256' },\n { name: 'offer_hash', type: 'felt' },\n { name: 'borrower', type: 'ContractAddress' },\n { name: 'nonce', type: 'felt' },\n ],\n u256: U256_TYPE,\n },\n primaryType: 'RefinanceApproval',\n domain: { ...STELA_DOMAIN, chainId: params.chainId },\n message: {\n inscription_id: u256Message(params.inscriptionId),\n offer_hash: params.offerHash,\n borrower: params.borrower,\n nonce: params.nonce.toString(),\n },\n }\n}\n\n/**\n * Build SNIP-12 TypedData for a terms-of-use acknowledgment.\n * The user signs this off-chain to prove they accepted the protocol terms.\n * NOT verified on-chain — stored off-chain as proof of consent.\n */\nexport function getTermsAcknowledgmentTypedData(params: {\n user: string\n termsVersion: string\n termsHash: string\n agreedAt: bigint\n chainId: string\n}): TypedData {\n return {\n types: {\n StarknetDomain: STARKNET_DOMAIN_TYPE,\n TermsAcknowledgment: [\n { name: 'user', type: 'ContractAddress' },\n { name: 'terms_version', type: 'shortstring' },\n { name: 'terms_hash', type: 'felt' },\n { name: 'agreed_at', type: 'u128' },\n ],\n },\n primaryType: 'TermsAcknowledgment',\n domain: { ...STELA_DOMAIN, chainId: params.chainId },\n message: {\n user: params.user,\n terms_version: params.termsVersion,\n terms_hash: params.termsHash,\n agreed_at: params.agreedAt.toString(),\n },\n }\n}\n","/**\n * Serialize a starknet.js signature (Signature type) for storage in D1.\n */\nexport interface StoredSignature {\n r: string\n s: string\n}\n\nexport function serializeSignature(sig: string[]): StoredSignature {\n return { r: sig[0], s: sig[1] }\n}\n\nexport function deserializeSignature(stored: StoredSignature): string[] {\n return [stored.r, stored.s]\n}\n","[\n {\n \"type\": \"impl\",\n \"name\": \"StelaProtocolImpl\",\n \"interface_name\": \"stela::interfaces::istela::IStelaProtocol\"\n },\n {\n \"type\": \"enum\",\n \"name\": \"core::bool\",\n \"variants\": [\n {\n \"name\": \"False\",\n \"type\": \"()\"\n },\n {\n \"name\": \"True\",\n \"type\": \"()\"\n }\n ]\n },\n {\n \"type\": \"enum\",\n \"name\": \"stela::types::asset::AssetType\",\n \"variants\": [\n {\n \"name\": \"ERC20\",\n \"type\": \"()\"\n },\n {\n \"name\": \"ERC721\",\n \"type\": \"()\"\n },\n {\n \"name\": \"ERC1155\",\n \"type\": \"()\"\n },\n {\n \"name\": \"ERC4626\",\n \"type\": \"()\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"core::integer::u256\",\n \"members\": [\n {\n \"name\": \"low\",\n \"type\": \"core::integer::u128\"\n },\n {\n \"name\": \"high\",\n \"type\": \"core::integer::u128\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"stela::types::asset::Asset\",\n \"members\": [\n {\n \"name\": \"asset\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"asset_type\",\n \"type\": \"stela::types::asset::AssetType\"\n },\n {\n \"name\": \"value\",\n \"type\": \"core::integer::u256\"\n },\n {\n \"name\": \"token_id\",\n \"type\": \"core::integer::u256\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"stela::types::inscription::InscriptionParams\",\n \"members\": [\n {\n \"name\": \"is_borrow\",\n \"type\": \"core::bool\"\n },\n {\n \"name\": \"debt_assets\",\n \"type\": \"core::array::Array::<stela::types::asset::Asset>\"\n },\n {\n \"name\": \"interest_assets\",\n \"type\": \"core::array::Array::<stela::types::asset::Asset>\"\n },\n {\n \"name\": \"collateral_assets\",\n \"type\": \"core::array::Array::<stela::types::asset::Asset>\"\n },\n {\n \"name\": \"duration\",\n \"type\": \"core::integer::u64\"\n },\n {\n \"name\": \"deadline\",\n \"type\": \"core::integer::u64\"\n },\n {\n \"name\": \"multi_lender\",\n \"type\": \"core::bool\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"stela::snip12::InscriptionOrder\",\n \"members\": [\n {\n \"name\": \"borrower\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"debt_hash\",\n \"type\": \"core::felt252\"\n },\n {\n \"name\": \"interest_hash\",\n \"type\": \"core::felt252\"\n },\n {\n \"name\": \"collateral_hash\",\n \"type\": \"core::felt252\"\n },\n {\n \"name\": \"debt_count\",\n \"type\": \"core::integer::u32\"\n },\n {\n \"name\": \"interest_count\",\n \"type\": \"core::integer::u32\"\n },\n {\n \"name\": \"collateral_count\",\n \"type\": \"core::integer::u32\"\n },\n {\n \"name\": \"duration\",\n \"type\": \"core::integer::u64\"\n },\n {\n \"name\": \"deadline\",\n \"type\": \"core::integer::u64\"\n },\n {\n \"name\": \"multi_lender\",\n \"type\": \"core::bool\"\n },\n {\n \"name\": \"nonce\",\n \"type\": \"core::felt252\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"stela::snip12::LendOffer\",\n \"members\": [\n {\n \"name\": \"order_hash\",\n \"type\": \"core::felt252\"\n },\n {\n \"name\": \"lender\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"issued_debt_percentage\",\n \"type\": \"core::integer::u256\"\n },\n {\n \"name\": \"nonce\",\n \"type\": \"core::felt252\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"stela::snip12::BatchLendOffer\",\n \"members\": [\n {\n \"name\": \"batch_hash\",\n \"type\": \"core::felt252\"\n },\n {\n \"name\": \"count\",\n \"type\": \"core::integer::u32\"\n },\n {\n \"name\": \"lender\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"start_nonce\",\n \"type\": \"core::felt252\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"stela::types::signed_order::SignedOrder\",\n \"members\": [\n {\n \"name\": \"maker\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"allowed_taker\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"inscription_id\",\n \"type\": \"core::integer::u256\"\n },\n {\n \"name\": \"bps\",\n \"type\": \"core::integer::u256\"\n },\n {\n \"name\": \"deadline\",\n \"type\": \"core::integer::u64\"\n },\n {\n \"name\": \"nonce\",\n \"type\": \"core::felt252\"\n },\n {\n \"name\": \"min_fill_bps\",\n \"type\": \"core::integer::u256\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"stela::types::inscription::StoredInscription\",\n \"members\": [\n {\n \"name\": \"borrower\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"lender\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"duration\",\n \"type\": \"core::integer::u64\"\n },\n {\n \"name\": \"deadline\",\n \"type\": \"core::integer::u64\"\n },\n {\n \"name\": \"signed_at\",\n \"type\": \"core::integer::u64\"\n },\n {\n \"name\": \"issued_debt_percentage\",\n \"type\": \"core::integer::u256\"\n },\n {\n \"name\": \"is_repaid\",\n \"type\": \"core::bool\"\n },\n {\n \"name\": \"liquidated\",\n \"type\": \"core::bool\"\n },\n {\n \"name\": \"multi_lender\",\n \"type\": \"core::bool\"\n },\n {\n \"name\": \"debt_asset_count\",\n \"type\": \"core::integer::u32\"\n },\n {\n \"name\": \"interest_asset_count\",\n \"type\": \"core::integer::u32\"\n },\n {\n \"name\": \"collateral_asset_count\",\n \"type\": \"core::integer::u32\"\n },\n {\n \"name\": \"auction_started\",\n \"type\": \"core::bool\"\n },\n {\n \"name\": \"auction_start_time\",\n \"type\": \"core::integer::u64\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"stela::snip12::CollectionLendOffer\",\n \"members\": [\n {\n \"name\": \"lender\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"debt_hash\",\n \"type\": \"core::felt252\"\n },\n {\n \"name\": \"interest_hash\",\n \"type\": \"core::felt252\"\n },\n {\n \"name\": \"debt_count\",\n \"type\": \"core::integer::u32\"\n },\n {\n \"name\": \"interest_count\",\n \"type\": \"core::integer::u32\"\n },\n {\n \"name\": \"collection_address\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"duration\",\n \"type\": \"core::integer::u64\"\n },\n {\n \"name\": \"deadline\",\n \"type\": \"core::integer::u64\"\n },\n {\n \"name\": \"nonce\",\n \"type\": \"core::felt252\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"stela::snip12::CollectionBorrowAcceptance\",\n \"members\": [\n {\n \"name\": \"offer_hash\",\n \"type\": \"core::felt252\"\n },\n {\n \"name\": \"borrower\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"token_id\",\n \"type\": \"core::integer::u256\"\n },\n {\n \"name\": \"nonce\",\n \"type\": \"core::felt252\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"stela::snip12::RenegotiationProposal\",\n \"members\": [\n {\n \"name\": \"inscription_id\",\n \"type\": \"core::integer::u256\"\n },\n {\n \"name\": \"proposer\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"new_duration\",\n \"type\": \"core::integer::u64\"\n },\n {\n \"name\": \"new_interest_hash\",\n \"type\": \"core::felt252\"\n },\n {\n \"name\": \"new_interest_count\",\n \"type\": \"core::integer::u32\"\n },\n {\n \"name\": \"proposal_deadline\",\n \"type\": \"core::integer::u64\"\n },\n {\n \"name\": \"nonce\",\n \"type\": \"core::felt252\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"stela::snip12::CollateralSaleOffer\",\n \"members\": [\n {\n \"name\": \"inscription_id\",\n \"type\": \"core::integer::u256\"\n },\n {\n \"name\": \"borrower\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"min_price\",\n \"type\": \"core::integer::u256\"\n },\n {\n \"name\": \"payment_token\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"allowed_buyer\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"deadline\",\n \"type\": \"core::integer::u64\"\n },\n {\n \"name\": \"nonce\",\n \"type\": \"core::felt252\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"stela::snip12::RefinanceOffer\",\n \"members\": [\n {\n \"name\": \"inscription_id\",\n \"type\": \"core::integer::u256\"\n },\n {\n \"name\": \"new_lender\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"new_debt_hash\",\n \"type\": \"core::felt252\"\n },\n {\n \"name\": \"new_interest_hash\",\n \"type\": \"core::felt252\"\n },\n {\n \"name\": \"new_debt_count\",\n \"type\": \"core::integer::u32\"\n },\n {\n \"name\": \"new_interest_count\",\n \"type\": \"core::integer::u32\"\n },\n {\n \"name\": \"new_duration\",\n \"type\": \"core::integer::u64\"\n },\n {\n \"name\": \"deadline\",\n \"type\": \"core::integer::u64\"\n },\n {\n \"name\": \"nonce\",\n \"type\": \"core::felt252\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"stela::snip12::RefinanceApproval\",\n \"members\": [\n {\n \"name\": \"inscription_id\",\n \"type\": \"core::integer::u256\"\n },\n {\n \"name\": \"offer_hash\",\n \"type\": \"core::felt252\"\n },\n {\n \"name\": \"borrower\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"nonce\",\n \"type\": \"core::felt252\"\n }\n ]\n },\n {\n \"type\": \"interface\",\n \"name\": \"stela::interfaces::istela::IStelaProtocol\",\n \"items\": [\n {\n \"type\": \"function\",\n \"name\": \"create_inscription\",\n \"inputs\": [\n {\n \"name\": \"params\",\n \"type\": \"stela::types::inscription::InscriptionParams\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"core::integer::u256\"\n }\n ],\n \"state_mutability\": \"external\"\n },\n {\n \"type\": \"function\",\n \"name\": \"sign_inscription\",\n \"inputs\": [\n {\n \"name\": \"inscription_id\",\n \"type\": \"core::integer::u256\"\n },\n {\n \"name\": \"issued_debt_percentage\",\n \"type\": \"core::integer::u256\"\n }\n ],\n \"outputs\": [],\n \"state_mutability\": \"external\"\n },\n {\n \"type\": \"function\",\n \"name\": \"cancel_inscription\",\n \"inputs\": [\n {\n \"name\": \"inscription_id\",\n \"type\": \"core::integer::u256\"\n }\n ],\n \"outputs\": [],\n \"state_mutability\": \"external\"\n },\n {\n \"type\": \"function\",\n \"name\": \"repay\",\n \"inputs\": [\n {\n \"name\": \"inscription_id\",\n \"type\": \"core::integer::u256\"\n }\n ],\n \"outputs\": [],\n \"state_mutability\": \"external\"\n },\n {\n \"type\": \"function\",\n \"name\": \"liquidate\",\n \"inputs\": [\n {\n \"name\": \"inscription_id\",\n \"type\": \"core::integer::u256\"\n }\n ],\n \"outputs\": [],\n \"state_mutability\": \"external\"\n },\n {\n \"type\": \"function\",\n \"name\": \"redeem\",\n \"inputs\": [\n {\n \"name\": \"inscription_id\",\n \"type\": \"core::integer::u256\"\n },\n {\n \"name\": \"shares\",\n \"type\": \"core::integer::u256\"\n }\n ],\n \"outputs\": [],\n \"state_mutability\": \"external\"\n },\n {\n \"type\": \"function\",\n \"name\": \"settle\",\n \"inputs\": [\n {\n \"name\": \"order\",\n \"type\": \"stela::snip12::InscriptionOrder\"\n },\n {\n \"name\": \"debt_assets\",\n \"type\": \"core::array::Array::<stela::types::asset::Asset>\"\n },\n {\n \"name\": \"interest_assets\",\n \"type\": \"core::array::Array::<stela::types::asset::Asset>\"\n },\n {\n \"name\": \"collateral_assets\",\n \"type\": \"core::array::Array::<stela::types::asset::Asset>\"\n },\n {\n \"name\": \"borrower_sig\",\n \"type\": \"core::array::Array::<core::felt252>\"\n },\n {\n \"name\": \"offer\",\n \"type\": \"stela::snip12::LendOffer\"\n },\n {\n \"name\": \"lender_sig\",\n \"type\": \"core::array::Array::<core::felt252>\"\n }\n ],\n \"outputs\": [],\n \"state_mutability\": \"external\"\n },\n {\n \"type\": \"function\",\n \"name\": \"batch_settle\",\n \"inputs\": [\n {\n \"name\": \"orders\",\n \"type\": \"core::array::Array::<stela::snip12::InscriptionOrder>\"\n },\n {\n \"name\": \"debt_assets_flat\",\n \"type\": \"core::array::Array::<stela::types::asset::Asset>\"\n },\n {\n \"name\": \"interest_assets_flat\",\n \"type\": \"core::array::Array::<stela::types::asset::Asset>\"\n },\n {\n \"name\": \"collateral_assets_flat\",\n \"type\": \"core::array::Array::<stela::types::asset::Asset>\"\n },\n {\n \"name\": \"borrower_sigs\",\n \"type\": \"core::array::Array::<core::array::Array::<core::felt252>>\"\n },\n {\n \"name\": \"batch_offer\",\n \"type\": \"stela::snip12::BatchLendOffer\"\n },\n {\n \"name\": \"lender_sig\",\n \"type\": \"core::array::Array::<core::felt252>\"\n },\n {\n \"name\": \"bps_list\",\n \"type\": \"core::array::Array::<core::integer::u256>\"\n }\n ],\n \"outputs\": [],\n \"state_mutability\": \"external\"\n },\n {\n \"type\": \"function\",\n \"name\": \"fill_signed_order\",\n \"inputs\": [\n {\n \"name\": \"order\",\n \"type\": \"stela::types::signed_order::SignedOrder\"\n },\n {\n \"name\": \"signature\",\n \"type\": \"core::array::Array::<core::felt252>\"\n },\n {\n \"name\": \"fill_bps\",\n \"type\": \"core::integer::u256\"\n }\n ],\n \"outputs\": [],\n \"state_mutability\": \"external\"\n },\n {\n \"type\": \"function\",\n \"name\": \"cancel_order\",\n \"inputs\": [\n {\n \"name\": \"order\",\n \"type\": \"stela::types::signed_order::SignedOrder\"\n }\n ],\n \"outputs\": [],\n \"state_mutability\": \"external\"\n },\n {\n \"type\": \"function\",\n \"name\": \"cancel_orders_by_nonce\",\n \"inputs\": [\n {\n \"name\": \"min_nonce\",\n \"type\": \"core::felt252\"\n }\n ],\n \"outputs\": [],\n \"state_mutability\": \"external\"\n },\n {\n \"type\": \"function\",\n \"name\": \"get_inscription\",\n \"inputs\": [\n {\n \"name\": \"inscription_id\",\n \"type\": \"core::integer::u256\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"stela::types::inscription::StoredInscription\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"get_locker\",\n \"inputs\": [\n {\n \"name\": \"inscription_id\",\n \"type\": \"core::integer::u256\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"convert_to_shares\",\n \"inputs\": [\n {\n \"name\": \"inscription_id\",\n \"type\": \"core::integer::u256\"\n },\n {\n \"name\": \"issued_debt_percentage\",\n \"type\": \"core::integer::u256\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"core::integer::u256\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"nonces\",\n \"inputs\": [\n {\n \"name\": \"owner\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"core::felt252\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"get_treasury\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"is_order_registered\",\n \"inputs\": [\n {\n \"name\": \"order_hash\",\n \"type\": \"core::felt252\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"core::bool\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"is_order_cancelled\",\n \"inputs\": [\n {\n \"name\": \"order_hash\",\n \"type\": \"core::felt252\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"core::bool\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"get_filled_bps\",\n \"inputs\": [\n {\n \"name\": \"order_hash\",\n \"type\": \"core::felt252\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"core::integer::u256\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"get_maker_min_nonce\",\n \"inputs\": [\n {\n \"name\": \"maker\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"core::felt252\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"get_genesis_contract\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"get_volume_settled\",\n \"inputs\": [\n {\n \"name\": \"user\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"core::integer::u256\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"is_volume_token_whitelisted\",\n \"inputs\": [\n {\n \"name\": \"token\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"core::bool\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"set_treasury\",\n \"inputs\": [\n {\n \"name\": \"treasury\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n }\n ],\n \"outputs\": [],\n \"state_mutability\": \"external\"\n },\n {\n \"type\": \"function\",\n \"name\": \"set_registry\",\n \"inputs\": [\n {\n \"name\": \"registry\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n }\n ],\n \"outputs\": [],\n \"state_mutability\": \"external\"\n },\n {\n \"type\": \"function\",\n \"name\": \"set_inscriptions_nft\",\n \"inputs\": [\n {\n \"name\": \"inscriptions_nft\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n }\n ],\n \"outputs\": [],\n \"state_mutability\": \"external\"\n },\n {\n \"type\": \"function\",\n \"name\": \"set_implementation_hash\",\n \"inputs\": [\n {\n \"name\": \"implementation_hash\",\n \"type\": \"core::felt252\"\n }\n ],\n \"outputs\": [],\n \"state_mutability\": \"external\"\n },\n {\n \"type\": \"function\",\n \"name\": \"set_volume_token_whitelisted\",\n \"inputs\": [\n {\n \"name\": \"token\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"whitelisted\",\n \"type\": \"core::bool\"\n }\n ],\n \"outputs\": [],\n \"state_mutability\": \"external\"\n },\n {\n \"type\": \"function\",\n \"name\": \"set_genesis_contract\",\n \"inputs\": [\n {\n \"name\": \"genesis_contract\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n }\n ],\n \"outputs\": [],\n \"state_mutability\": \"external\"\n },\n {\n \"type\": \"function\",\n \"name\": \"set_governance_target\",\n \"inputs\": [\n {\n \"name\": \"target\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"whitelisted\",\n \"type\": \"core::bool\"\n }\n ],\n \"outputs\": [],\n \"state_mutability\": \"external\"\n },\n {\n \"type\": \"function\",\n \"name\": \"is_governance_target_whitelisted\",\n \"inputs\": [\n {\n \"name\": \"target\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"core::bool\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"set_locker_allowed_selector\",\n \"inputs\": [\n {\n \"name\": \"locker\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"target\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"selector\",\n \"type\": \"core::felt252\"\n },\n {\n \"name\": \"allowed\",\n \"type\": \"core::bool\"\n }\n ],\n \"outputs\": [],\n \"state_mutability\": \"external\"\n },\n {\n \"type\": \"function\",\n \"name\": \"set_borrower_governance_selector\",\n \"inputs\": [\n {\n \"name\": \"inscription_id\",\n \"type\": \"core::integer::u256\"\n },\n {\n \"name\": \"target\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"selector\",\n \"type\": \"core::felt252\"\n },\n {\n \"name\": \"allowed\",\n \"type\": \"core::bool\"\n }\n ],\n \"outputs\": [],\n \"state_mutability\": \"external\"\n },\n {\n \"type\": \"function\",\n \"name\": \"settle_collection\",\n \"inputs\": [\n {\n \"name\": \"offer\",\n \"type\": \"stela::snip12::CollectionLendOffer\"\n },\n {\n \"name\": \"acceptance\",\n \"type\": \"stela::snip12::CollectionBorrowAcceptance\"\n },\n {\n \"name\": \"debt_assets\",\n \"type\": \"core::array::Array::<stela::types::asset::Asset>\"\n },\n {\n \"name\": \"interest_assets\",\n \"type\": \"core::array::Array::<stela::types::asset::Asset>\"\n },\n {\n \"name\": \"lender_sig\",\n \"type\": \"core::array::Array::<core::felt252>\"\n },\n {\n \"name\": \"borrower_sig\",\n \"type\": \"core::array::Array::<core::felt252>\"\n }\n ],\n \"outputs\": [],\n \"state_mutability\": \"external\"\n },\n {\n \"type\": \"function\",\n \"name\": \"commit_renegotiation\",\n \"inputs\": [\n {\n \"name\": \"inscription_id\",\n \"type\": \"core::integer::u256\"\n },\n {\n \"name\": \"proposal_hash\",\n \"type\": \"core::felt252\"\n }\n ],\n \"outputs\": [],\n \"state_mutability\": \"external\"\n },\n {\n \"type\": \"function\",\n \"name\": \"execute_renegotiation\",\n \"inputs\": [\n {\n \"name\": \"inscription_id\",\n \"type\": \"core::integer::u256\"\n },\n {\n \"name\": \"proposal\",\n \"type\": \"stela::snip12::RenegotiationProposal\"\n },\n {\n \"name\": \"proposer_sig\",\n \"type\": \"core::array::Array::<core::felt252>\"\n },\n {\n \"name\": \"new_interest_assets\",\n \"type\": \"core::array::Array::<stela::types::asset::Asset>\"\n }\n ],\n \"outputs\": [],\n \"state_mutability\": \"external\"\n },\n {\n \"type\": \"function\",\n \"name\": \"buy_collateral\",\n \"inputs\": [\n {\n \"name\": \"inscription_id\",\n \"type\": \"core::integer::u256\"\n },\n {\n \"name\": \"offer\",\n \"type\": \"stela::snip12::CollateralSaleOffer\"\n },\n {\n \"name\": \"borrower_sig\",\n \"type\": \"core::array::Array::<core::felt252>\"\n },\n {\n \"name\": \"sale_price\",\n \"type\": \"core::integer::u256\"\n }\n ],\n \"outputs\": [],\n \"state_mutability\": \"external\"\n },\n {\n \"type\": \"function\",\n \"name\": \"refinance\",\n \"inputs\": [\n {\n \"name\": \"offer\",\n \"type\": \"stela::snip12::RefinanceOffer\"\n },\n {\n \"name\": \"new_debt_assets\",\n \"type\": \"core::array::Array::<stela::types::asset::Asset>\"\n },\n {\n \"name\": \"new_interest_assets\",\n \"type\": \"core::array::Array::<stela::types::asset::Asset>\"\n },\n {\n \"name\": \"new_lender_sig\",\n \"type\": \"core::array::Array::<core::felt252>\"\n },\n {\n \"name\": \"approval\",\n \"type\": \"stela::snip12::RefinanceApproval\"\n },\n {\n \"name\": \"borrower_sig\",\n \"type\": \"core::array::Array::<core::felt252>\"\n }\n ],\n \"outputs\": [],\n \"state_mutability\": \"external\"\n },\n {\n \"type\": \"function\",\n \"name\": \"start_auction\",\n \"inputs\": [\n {\n \"name\": \"inscription_id\",\n \"type\": \"core::integer::u256\"\n }\n ],\n \"outputs\": [],\n \"state_mutability\": \"external\"\n },\n {\n \"type\": \"function\",\n \"name\": \"bid\",\n \"inputs\": [\n {\n \"name\": \"inscription_id\",\n \"type\": \"core::integer::u256\"\n }\n ],\n \"outputs\": [],\n \"state_mutability\": \"external\"\n },\n {\n \"type\": \"function\",\n \"name\": \"claim_collateral\",\n \"inputs\": [\n {\n \"name\": \"inscription_id\",\n \"type\": \"core::integer::u256\"\n }\n ],\n \"outputs\": [],\n \"state_mutability\": \"external\"\n },\n {\n \"type\": \"function\",\n \"name\": \"get_auction_price\",\n \"inputs\": [\n {\n \"name\": \"inscription_id\",\n \"type\": \"core::integer::u256\"\n },\n {\n \"name\": \"debt_index\",\n \"type\": \"core::integer::u32\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"core::integer::u256\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"get_auction_end_time\",\n \"inputs\": [\n {\n \"name\": \"inscription_id\",\n \"type\": \"core::integer::u256\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"core::integer::u64\"\n }\n ],\n \"state_mutability\": \"view\"\n }\n ]\n },\n {\n \"type\": \"impl\",\n \"name\": \"ERC1155MixinImpl\",\n \"interface_name\": \"openzeppelin_interfaces::token::erc1155::ERC1155ABI\"\n },\n {\n \"type\": \"struct\",\n \"name\": \"core::array::Span::<core::starknet::contract_address::ContractAddress>\",\n \"members\": [\n {\n \"name\": \"snapshot\",\n \"type\": \"@core::array::Array::<core::starknet::contract_address::ContractAddress>\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"core::array::Span::<core::integer::u256>\",\n \"members\": [\n {\n \"name\": \"snapshot\",\n \"type\": \"@core::array::Array::<core::integer::u256>\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"core::array::Span::<core::felt252>\",\n \"members\": [\n {\n \"name\": \"snapshot\",\n \"type\": \"@core::array::Array::<core::felt252>\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"core::byte_array::ByteArray\",\n \"members\": [\n {\n \"name\": \"data\",\n \"type\": \"core::array::Array::<core::bytes_31::bytes31>\"\n },\n {\n \"name\": \"pending_word\",\n \"type\": \"core::felt252\"\n },\n {\n \"name\": \"pending_word_len\",\n \"type\": \"core::internal::bounded_int::BoundedInt::<0, 30>\"\n }\n ]\n },\n {\n \"type\": \"interface\",\n \"name\": \"openzeppelin_interfaces::token::erc1155::ERC1155ABI\",\n \"items\": [\n {\n \"type\": \"function\",\n \"name\": \"balance_of\",\n \"inputs\": [\n {\n \"name\": \"account\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"token_id\",\n \"type\": \"core::integer::u256\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"core::integer::u256\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"balance_of_batch\",\n \"inputs\": [\n {\n \"name\": \"accounts\",\n \"type\": \"core::array::Span::<core::starknet::contract_address::ContractAddress>\"\n },\n {\n \"name\": \"token_ids\",\n \"type\": \"core::array::Span::<core::integer::u256>\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"core::array::Span::<core::integer::u256>\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"safe_transfer_from\",\n \"inputs\": [\n {\n \"name\": \"from\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"to\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"token_id\",\n \"type\": \"core::integer::u256\"\n },\n {\n \"name\": \"value\",\n \"type\": \"core::integer::u256\"\n },\n {\n \"name\": \"data\",\n \"type\": \"core::array::Span::<core::felt252>\"\n }\n ],\n \"outputs\": [],\n \"state_mutability\": \"external\"\n },\n {\n \"type\": \"function\",\n \"name\": \"safe_batch_transfer_from\",\n \"inputs\": [\n {\n \"name\": \"from\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"to\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"token_ids\",\n \"type\": \"core::array::Span::<core::integer::u256>\"\n },\n {\n \"name\": \"values\",\n \"type\": \"core::array::Span::<core::integer::u256>\"\n },\n {\n \"name\": \"data\",\n \"type\": \"core::array::Span::<core::felt252>\"\n }\n ],\n \"outputs\": [],\n \"state_mutability\": \"external\"\n },\n {\n \"type\": \"function\",\n \"name\": \"is_approved_for_all\",\n \"inputs\": [\n {\n \"name\": \"owner\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"operator\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"core::bool\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"set_approval_for_all\",\n \"inputs\": [\n {\n \"name\": \"operator\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"approved\",\n \"type\": \"core::bool\"\n }\n ],\n \"outputs\": [],\n \"state_mutability\": \"external\"\n },\n {\n \"type\": \"function\",\n \"name\": \"supports_interface\",\n \"inputs\": [\n {\n \"name\": \"interface_id\",\n \"type\": \"core::felt252\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"core::bool\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"uri\",\n \"inputs\": [\n {\n \"name\": \"token_id\",\n \"type\": \"core::integer::u256\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"core::byte_array::ByteArray\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"balanceOf\",\n \"inputs\": [\n {\n \"name\": \"account\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"tokenId\",\n \"type\": \"core::integer::u256\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"core::integer::u256\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"balanceOfBatch\",\n \"inputs\": [\n {\n \"name\": \"accounts\",\n \"type\": \"core::array::Span::<core::starknet::contract_address::ContractAddress>\"\n },\n {\n \"name\": \"tokenIds\",\n \"type\": \"core::array::Span::<core::integer::u256>\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"core::array::Span::<core::integer::u256>\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"safeTransferFrom\",\n \"inputs\": [\n {\n \"name\": \"from\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"to\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"tokenId\",\n \"type\": \"core::integer::u256\"\n },\n {\n \"name\": \"value\",\n \"type\": \"core::integer::u256\"\n },\n {\n \"name\": \"data\",\n \"type\": \"core::array::Span::<core::felt252>\"\n }\n ],\n \"outputs\": [],\n \"state_mutability\": \"external\"\n },\n {\n \"type\": \"function\",\n \"name\": \"safeBatchTransferFrom\",\n \"inputs\": [\n {\n \"name\": \"from\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"to\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"tokenIds\",\n \"type\": \"core::array::Span::<core::integer::u256>\"\n },\n {\n \"name\": \"values\",\n \"type\": \"core::array::Span::<core::integer::u256>\"\n },\n {\n \"name\": \"data\",\n \"type\": \"core::array::Span::<core::felt252>\"\n }\n ],\n \"outputs\": [],\n \"state_mutability\": \"external\"\n },\n {\n \"type\": \"function\",\n \"name\": \"isApprovedForAll\",\n \"inputs\": [\n {\n \"name\": \"owner\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"operator\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"core::bool\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"setApprovalForAll\",\n \"inputs\": [\n {\n \"name\": \"operator\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"approved\",\n \"type\": \"core::bool\"\n }\n ],\n \"outputs\": [],\n \"state_mutability\": \"external\"\n }\n ]\n },\n {\n \"type\": \"impl\",\n \"name\": \"OwnableMixinImpl\",\n \"interface_name\": \"openzeppelin_interfaces::access::ownable::OwnableABI\"\n },\n {\n \"type\": \"interface\",\n \"name\": \"openzeppelin_interfaces::access::ownable::OwnableABI\",\n \"items\": [\n {\n \"type\": \"function\",\n \"name\": \"owner\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"transfer_ownership\",\n \"inputs\": [\n {\n \"name\": \"new_owner\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n }\n ],\n \"outputs\": [],\n \"state_mutability\": \"external\"\n },\n {\n \"type\": \"function\",\n \"name\": \"renounce_ownership\",\n \"inputs\": [],\n \"outputs\": [],\n \"state_mutability\": \"external\"\n },\n {\n \"type\": \"function\",\n \"name\": \"transferOwnership\",\n \"inputs\": [\n {\n \"name\": \"newOwner\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n }\n ],\n \"outputs\": [],\n \"state_mutability\": \"external\"\n },\n {\n \"type\": \"function\",\n \"name\": \"renounceOwnership\",\n \"inputs\": [],\n \"outputs\": [],\n \"state_mutability\": \"external\"\n }\n ]\n },\n {\n \"type\": \"constructor\",\n \"name\": \"constructor\",\n \"inputs\": [\n {\n \"name\": \"owner\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"inscriptions_nft\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"registry\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"implementation_hash\",\n \"type\": \"core::felt252\"\n }\n ]\n },\n {\n \"type\": \"event\",\n \"name\": \"openzeppelin_token::erc1155::erc1155::ERC1155Component::TransferSingle\",\n \"kind\": \"struct\",\n \"members\": [\n {\n \"name\": \"operator\",\n \"type\": \"core::starknet::contract_address::ContractAddress\",\n \"kind\": \"key\"\n },\n {\n \"name\": \"from\",\n \"type\": \"core::starknet::contract_address::ContractAddress\",\n \"kind\": \"key\"\n },\n {\n \"name\": \"to\",\n \"type\": \"core::starknet::contract_address::ContractAddress\",\n \"kind\": \"key\"\n },\n {\n \"name\": \"id\",\n \"type\": \"core::integer::u256\",\n \"kind\": \"data\"\n },\n {\n \"name\": \"value\",\n \"type\": \"core::integer::u256\",\n \"kind\": \"data\"\n }\n ]\n },\n {\n \"type\": \"event\",\n \"name\": \"openzeppelin_token::erc1155::erc1155::ERC1155Component::TransferBatch\",\n \"kind\": \"struct\",\n \"members\": [\n {\n \"name\": \"operator\",\n \"type\": \"core::starknet::contract_address::ContractAddress\",\n \"kind\": \"key\"\n },\n {\n \"name\": \"from\",\n \"type\": \"core::starknet::contract_address::ContractAddress\",\n \"kind\": \"key\"\n },\n {\n \"name\": \"to\",\n \"type\": \"core::starknet::contract_address::ContractAddress\",\n \"kind\": \"key\"\n },\n {\n \"name\": \"ids\",\n \"type\": \"core::array::Span::<core::integer::u256>\",\n \"kind\": \"data\"\n },\n {\n \"name\": \"values\",\n \"type\": \"core::array::Span::<core::integer::u256>\",\n \"kind\": \"data\"\n }\n ]\n },\n {\n \"type\": \"event\",\n \"name\": \"openzeppelin_token::erc1155::erc1155::ERC1155Component::ApprovalForAll\",\n \"kind\": \"struct\",\n \"members\": [\n {\n \"name\": \"owner\",\n \"type\": \"core::starknet::contract_address::ContractAddress\",\n \"kind\": \"key\"\n },\n {\n \"name\": \"operator\",\n \"type\": \"core::starknet::contract_address::ContractAddress\",\n \"kind\": \"key\"\n },\n {\n \"name\": \"approved\",\n \"type\": \"core::bool\",\n \"kind\": \"data\"\n }\n ]\n },\n {\n \"type\": \"event\",\n \"name\": \"openzeppelin_token::erc1155::erc1155::ERC1155Component::URI\",\n \"kind\": \"struct\",\n \"members\": [\n {\n \"name\": \"value\",\n \"type\": \"core::byte_array::ByteArray\",\n \"kind\": \"data\"\n },\n {\n \"name\": \"id\",\n \"type\": \"core::integer::u256\",\n \"kind\": \"key\"\n }\n ]\n },\n {\n \"type\": \"event\",\n \"name\": \"openzeppelin_token::erc1155::erc1155::ERC1155Component::Event\",\n \"kind\": \"enum\",\n \"variants\": [\n {\n \"name\": \"TransferSingle\",\n \"type\": \"openzeppelin_token::erc1155::erc1155::ERC1155Component::TransferSingle\",\n \"kind\": \"nested\"\n },\n {\n \"name\": \"TransferBatch\",\n \"type\": \"openzeppelin_token::erc1155::erc1155::ERC1155Component::TransferBatch\",\n \"kind\": \"nested\"\n },\n {\n \"name\": \"ApprovalForAll\",\n \"type\": \"openzeppelin_token::erc1155::erc1155::ERC1155Component::ApprovalForAll\",\n \"kind\": \"nested\"\n },\n {\n \"name\": \"URI\",\n \"type\": \"openzeppelin_token::erc1155::erc1155::ERC1155Component::URI\",\n \"kind\": \"nested\"\n }\n ]\n },\n {\n \"type\": \"event\",\n \"name\": \"openzeppelin_access::ownable::ownable::OwnableComponent::OwnershipTransferred\",\n \"kind\": \"struct\",\n \"members\": [\n {\n \"name\": \"previous_owner\",\n \"type\": \"core::starknet::contract_address::ContractAddress\",\n \"kind\": \"key\"\n },\n {\n \"name\": \"new_owner\",\n \"type\": \"core::starknet::contract_address::ContractAddress\",\n \"kind\": \"key\"\n }\n ]\n },\n {\n \"type\": \"event\",\n \"name\": \"openzeppelin_access::ownable::ownable::OwnableComponent::OwnershipTransferStarted\",\n \"kind\": \"struct\",\n \"members\": [\n {\n \"name\": \"previous_owner\",\n \"type\": \"core::starknet::contract_address::ContractAddress\",\n \"kind\": \"key\"\n },\n {\n \"name\": \"new_owner\",\n \"type\": \"core::starknet::contract_address::ContractAddress\",\n \"kind\": \"key\"\n }\n ]\n },\n {\n \"type\": \"event\",\n \"name\": \"openzeppelin_access::ownable::ownable::OwnableComponent::Event\",\n \"kind\": \"enum\",\n \"variants\": [\n {\n \"name\": \"OwnershipTransferred\",\n \"type\": \"openzeppelin_access::ownable::ownable::OwnableComponent::OwnershipTransferred\",\n \"kind\": \"nested\"\n },\n {\n \"name\": \"OwnershipTransferStarted\",\n \"type\": \"openzeppelin_access::ownable::ownable::OwnableComponent::OwnershipTransferStarted\",\n \"kind\": \"nested\"\n }\n ]\n },\n {\n \"type\": \"event\",\n \"name\": \"openzeppelin_introspection::src5::SRC5Component::Event\",\n \"kind\": \"enum\",\n \"variants\": []\n },\n {\n \"type\": \"event\",\n \"name\": \"openzeppelin_security::reentrancyguard::ReentrancyGuardComponent::Event\",\n \"kind\": \"enum\",\n \"variants\": []\n },\n {\n \"type\": \"event\",\n \"name\": \"openzeppelin_utils::cryptography::nonces::NoncesComponent::Event\",\n \"kind\": \"enum\",\n \"variants\": []\n },\n {\n \"type\": \"event\",\n \"name\": \"stela::stela::StelaProtocol::InscriptionCreated\",\n \"kind\": \"struct\",\n \"members\": [\n {\n \"name\": \"inscription_id\",\n \"type\": \"core::integer::u256\",\n \"kind\": \"key\"\n },\n {\n \"name\": \"creator\",\n \"type\": \"core::starknet::contract_address::ContractAddress\",\n \"kind\": \"key\"\n },\n {\n \"name\": \"is_borrow\",\n \"type\": \"core::bool\",\n \"kind\": \"data\"\n }\n ]\n },\n {\n \"type\": \"event\",\n \"name\": \"stela::stela::StelaProtocol::InscriptionSigned\",\n \"kind\": \"struct\",\n \"members\": [\n {\n \"name\": \"inscription_id\",\n \"type\": \"core::integer::u256\",\n \"kind\": \"key\"\n },\n {\n \"name\": \"borrower\",\n \"type\": \"core::starknet::contract_address::ContractAddress\",\n \"kind\": \"key\"\n },\n {\n \"name\": \"lender\",\n \"type\": \"core::starknet::contract_address::ContractAddress\",\n \"kind\": \"key\"\n },\n {\n \"name\": \"issued_debt_percentage\",\n \"type\": \"core::integer::u256\",\n \"kind\": \"data\"\n },\n {\n \"name\": \"shares_minted\",\n \"type\": \"core::integer::u256\",\n \"kind\": \"data\"\n }\n ]\n },\n {\n \"type\": \"event\",\n \"name\": \"stela::stela::StelaProtocol::InscriptionCancelled\",\n \"kind\": \"struct\",\n \"members\": [\n {\n \"name\": \"inscription_id\",\n \"type\": \"core::integer::u256\",\n \"kind\": \"key\"\n },\n {\n \"name\": \"creator\",\n \"type\": \"core::starknet::contract_address::ContractAddress\",\n \"kind\": \"data\"\n }\n ]\n },\n {\n \"type\": \"event\",\n \"name\": \"stela::stela::StelaProtocol::InscriptionRepaid\",\n \"kind\": \"struct\",\n \"members\": [\n {\n \"name\": \"inscription_id\",\n \"type\": \"core::integer::u256\",\n \"kind\": \"key\"\n },\n {\n \"name\": \"repayer\",\n \"type\": \"core::starknet::contract_address::ContractAddress\",\n \"kind\": \"data\"\n }\n ]\n },\n {\n \"type\": \"event\",\n \"name\": \"stela::stela::StelaProtocol::InscriptionLiquidated\",\n \"kind\": \"struct\",\n \"members\": [\n {\n \"name\": \"inscription_id\",\n \"type\": \"core::integer::u256\",\n \"kind\": \"key\"\n },\n {\n \"name\": \"liquidator\",\n \"type\": \"core::starknet::contract_address::ContractAddress\",\n \"kind\": \"data\"\n }\n ]\n },\n {\n \"type\": \"event\",\n \"name\": \"stela::stela::StelaProtocol::SharesRedeemed\",\n \"kind\": \"struct\",\n \"members\": [\n {\n \"name\": \"inscription_id\",\n \"type\": \"core::integer::u256\",\n \"kind\": \"key\"\n },\n {\n \"name\": \"redeemer\",\n \"type\": \"core::starknet::contract_address::ContractAddress\",\n \"kind\": \"key\"\n },\n {\n \"name\": \"shares\",\n \"type\": \"core::integer::u256\",\n \"kind\": \"data\"\n }\n ]\n },\n {\n \"type\": \"event\",\n \"name\": \"stela::stela::StelaProtocol::OrderSettled\",\n \"kind\": \"struct\",\n \"members\": [\n {\n \"name\": \"inscription_id\",\n \"type\": \"core::integer::u256\",\n \"kind\": \"key\"\n },\n {\n \"name\": \"borrower\",\n \"type\": \"core::starknet::contract_address::ContractAddress\",\n \"kind\": \"key\"\n },\n {\n \"name\": \"lender\",\n \"type\": \"core::starknet::contract_address::ContractAddress\",\n \"kind\": \"key\"\n },\n {\n \"name\": \"relayer\",\n \"type\": \"core::starknet::contract_address::ContractAddress\",\n \"kind\": \"data\"\n },\n {\n \"name\": \"relayer_fee_amount\",\n \"type\": \"core::integer::u256\",\n \"kind\": \"data\"\n }\n ]\n },\n {\n \"type\": \"event\",\n \"name\": \"stela::stela::StelaProtocol::OrderFilled\",\n \"kind\": \"struct\",\n \"members\": [\n {\n \"name\": \"inscription_id\",\n \"type\": \"core::integer::u256\",\n \"kind\": \"key\"\n },\n {\n \"name\": \"order_hash\",\n \"type\": \"core::felt252\",\n \"kind\": \"key\"\n },\n {\n \"name\": \"taker\",\n \"type\": \"core::starknet::contract_address::ContractAddress\",\n \"kind\": \"key\"\n },\n {\n \"name\": \"fill_bps\",\n \"type\": \"core::integer::u256\",\n \"kind\": \"data\"\n },\n {\n \"name\": \"total_filled_bps\",\n \"type\": \"core::integer::u256\",\n \"kind\": \"data\"\n }\n ]\n },\n {\n \"type\": \"event\",\n \"name\": \"stela::stela::StelaProtocol::OrderCancelled\",\n \"kind\": \"struct\",\n \"members\": [\n {\n \"name\": \"order_hash\",\n \"type\": \"core::felt252\",\n \"kind\": \"key\"\n },\n {\n \"name\": \"maker\",\n \"type\": \"core::starknet::contract_address::ContractAddress\",\n \"kind\": \"data\"\n }\n ]\n },\n {\n \"type\": \"event\",\n \"name\": \"stela::stela::StelaProtocol::OrdersBulkCancelled\",\n \"kind\": \"struct\",\n \"members\": [\n {\n \"name\": \"maker\",\n \"type\": \"core::starknet::contract_address::ContractAddress\",\n \"kind\": \"key\"\n },\n {\n \"name\": \"new_min_nonce\",\n \"type\": \"core::felt252\",\n \"kind\": \"data\"\n }\n ]\n },\n {\n \"type\": \"event\",\n \"name\": \"stela::stela::StelaProtocol::CollateralReturned\",\n \"kind\": \"struct\",\n \"members\": [\n {\n \"name\": \"inscription_id\",\n \"type\": \"core::integer::u256\",\n \"kind\": \"key\"\n },\n {\n \"name\": \"borrower\",\n \"type\": \"core::starknet::contract_address::ContractAddress\",\n \"kind\": \"data\"\n },\n {\n \"name\": \"asset_count\",\n \"type\": \"core::integer::u32\",\n \"kind\": \"data\"\n }\n ]\n },\n {\n \"type\": \"event\",\n \"name\": \"stela::stela::StelaProtocol::Event\",\n \"kind\": \"enum\",\n \"variants\": [\n {\n \"name\": \"ERC1155Event\",\n \"type\": \"openzeppelin_token::erc1155::erc1155::ERC1155Component::Event\",\n \"kind\": \"flat\"\n },\n {\n \"name\": \"OwnableEvent\",\n \"type\": \"openzeppelin_access::ownable::ownable::OwnableComponent::Event\",\n \"kind\": \"flat\"\n },\n {\n \"name\": \"SRC5Event\",\n \"type\": \"openzeppelin_introspection::src5::SRC5Component::Event\",\n \"kind\": \"flat\"\n },\n {\n \"name\": \"ReentrancyGuardEvent\",\n \"type\": \"openzeppelin_security::reentrancyguard::ReentrancyGuardComponent::Event\",\n \"kind\": \"flat\"\n },\n {\n \"name\": \"NoncesEvent\",\n \"type\": \"openzeppelin_utils::cryptography::nonces::NoncesComponent::Event\",\n \"kind\": \"flat\"\n },\n {\n \"name\": \"InscriptionCreated\",\n \"type\": \"stela::stela::StelaProtocol::InscriptionCreated\",\n \"kind\": \"nested\"\n },\n {\n \"name\": \"InscriptionSigned\",\n \"type\": \"stela::stela::StelaProtocol::InscriptionSigned\",\n \"kind\": \"nested\"\n },\n {\n \"name\": \"InscriptionCancelled\",\n \"type\": \"stela::stela::StelaProtocol::InscriptionCancelled\",\n \"kind\": \"nested\"\n },\n {\n \"name\": \"InscriptionRepaid\",\n \"type\": \"stela::stela::StelaProtocol::InscriptionRepaid\",\n \"kind\": \"nested\"\n },\n {\n \"name\": \"InscriptionLiquidated\",\n \"type\": \"stela::stela::StelaProtocol::InscriptionLiquidated\",\n \"kind\": \"nested\"\n },\n {\n \"name\": \"SharesRedeemed\",\n \"type\": \"stela::stela::StelaProtocol::SharesRedeemed\",\n \"kind\": \"nested\"\n },\n {\n \"name\": \"OrderSettled\",\n \"type\": \"stela::stela::StelaProtocol::OrderSettled\",\n \"kind\": \"nested\"\n },\n {\n \"name\": \"OrderFilled\",\n \"type\": \"stela::stela::StelaProtocol::OrderFilled\",\n \"kind\": \"nested\"\n },\n {\n \"name\": \"OrderCancelled\",\n \"type\": \"stela::stela::StelaProtocol::OrderCancelled\",\n \"kind\": \"nested\"\n },\n {\n \"name\": \"OrdersBulkCancelled\",\n \"type\": \"stela::stela::StelaProtocol::OrdersBulkCancelled\",\n \"kind\": \"nested\"\n },\n {\n \"name\": \"CollateralReturned\",\n \"type\": \"stela::stela::StelaProtocol::CollateralReturned\",\n \"kind\": \"nested\"\n }\n ]\n }\n]","import { Contract, type RpcProvider, type Account } from 'starknet'\nimport type { Call } from '../types/common.js'\nimport type { Asset, InscriptionParams, StoredInscription, SignedOrder } from '../types/inscription.js'\nimport stelaAbi from '../abi/stela.json'\nimport { toU256, fromU256 } from '../utils/u256.js'\nimport { ASSET_TYPE_ENUM } from '../constants/protocol.js'\n\nexport interface InscriptionClientOptions {\n stelaAddress: string\n provider: RpcProvider\n account?: Account\n}\n\nexport class InscriptionClient {\n private contract: Contract\n private address: string\n private account?: Account\n\n constructor(opts: InscriptionClientOptions) {\n this.address = opts.stelaAddress\n this.account = opts.account\n this.contract = new Contract(stelaAbi, opts.stelaAddress, opts.provider)\n }\n\n // ── Read Methods ───────────────────────────────────────────────────\n\n async getInscription(inscriptionId: bigint): Promise<StoredInscription> {\n const result = await this.contract.call('get_inscription', toU256(inscriptionId))\n return parseStoredInscription(result)\n }\n\n async getLocker(inscriptionId: bigint): Promise<string> {\n const result = await this.contract.call('get_locker', toU256(inscriptionId))\n return String((result as unknown[])[0])\n }\n\n async convertToShares(inscriptionId: bigint, percentage: bigint): Promise<bigint> {\n const result = await this.contract.call('convert_to_shares', [\n ...toU256(inscriptionId),\n ...toU256(percentage),\n ])\n return extractU256(result)\n }\n\n async getNonce(address: string): Promise<bigint> {\n const result = await this.contract.call('nonces', [address], { blockIdentifier: 'latest' })\n return BigInt(String((result as unknown[])[0] ?? '0'))\n }\n\n async getRelayerFee(): Promise<bigint> {\n const result = await this.contract.call('get_relayer_fee')\n return extractU256(result)\n }\n\n async getTreasury(): Promise<string> {\n const result = await this.contract.call('get_treasury')\n return String((result as unknown[])[0])\n }\n\n async isPaused(): Promise<boolean> {\n const result = await this.contract.call('is_paused')\n return Boolean((result as unknown[])[0])\n }\n\n async isOrderRegistered(orderHash: string): Promise<boolean> {\n const result = await this.contract.call('is_order_registered', [orderHash])\n return Boolean((result as unknown[])[0])\n }\n\n async isOrderCancelled(orderHash: string): Promise<boolean> {\n const result = await this.contract.call('is_order_cancelled', [orderHash])\n return Boolean((result as unknown[])[0])\n }\n\n async getFilledBps(orderHash: string): Promise<bigint> {\n const result = await this.contract.call('get_filled_bps', [orderHash])\n return extractU256(result)\n }\n\n async getMakerMinNonce(maker: string): Promise<string> {\n const result = await this.contract.call('get_maker_min_nonce', [maker], { blockIdentifier: 'latest' })\n return String((result as unknown[])[0] ?? '0')\n }\n\n // ── Call Builders ──────────────────────────────────────────────────\n\n buildCreateInscription(params: InscriptionParams): Call {\n const calldata: string[] = [\n params.is_borrow ? '1' : '0',\n ...serializeAssets(params.debt_assets),\n ...serializeAssets(params.interest_assets),\n ...serializeAssets(params.collateral_assets),\n params.duration.toString(),\n params.deadline.toString(),\n params.multi_lender ? '1' : '0',\n ]\n return { contractAddress: this.address, entrypoint: 'create_inscription', calldata }\n }\n\n buildSignInscription(inscriptionId: bigint, bps: bigint): Call {\n return {\n contractAddress: this.address,\n entrypoint: 'sign_inscription',\n calldata: [...toU256(inscriptionId), ...toU256(bps)],\n }\n }\n\n buildCancelInscription(inscriptionId: bigint): Call {\n return {\n contractAddress: this.address,\n entrypoint: 'cancel_inscription',\n calldata: [...toU256(inscriptionId)],\n }\n }\n\n buildRepay(inscriptionId: bigint): Call {\n return {\n contractAddress: this.address,\n entrypoint: 'repay',\n calldata: [...toU256(inscriptionId)],\n }\n }\n\n buildLiquidate(inscriptionId: bigint): Call {\n return {\n contractAddress: this.address,\n entrypoint: 'liquidate',\n calldata: [...toU256(inscriptionId)],\n }\n }\n\n buildRedeem(inscriptionId: bigint, shares: bigint): Call {\n return {\n contractAddress: this.address,\n entrypoint: 'redeem',\n calldata: [...toU256(inscriptionId), ...toU256(shares)],\n }\n }\n\n buildSettle(params: {\n order: {\n borrower: string\n debtHash: string\n interestHash: string\n collateralHash: string\n debtCount: number\n interestCount: number\n collateralCount: number\n duration: bigint\n deadline: bigint\n multiLender: boolean\n nonce: bigint\n }\n debtAssets: Asset[]\n interestAssets: Asset[]\n collateralAssets: Asset[]\n borrowerSig: string[]\n offer: {\n orderHash: string\n lender: string\n issuedDebtPercentage: bigint\n nonce: bigint\n }\n lenderSig: string[]\n }): Call {\n const calldata: string[] = [\n // Order struct fields\n params.order.borrower,\n params.order.debtHash,\n params.order.interestHash,\n params.order.collateralHash,\n String(params.order.debtCount),\n String(params.order.interestCount),\n String(params.order.collateralCount),\n params.order.duration.toString(),\n params.order.deadline.toString(),\n params.order.multiLender ? '1' : '0',\n params.order.nonce.toString(),\n // debt_assets array\n ...serializeAssets(params.debtAssets),\n // interest_assets array\n ...serializeAssets(params.interestAssets),\n // collateral_assets array\n ...serializeAssets(params.collateralAssets),\n // borrower_sig array\n String(params.borrowerSig.length),\n ...params.borrowerSig,\n // offer struct\n params.offer.orderHash,\n params.offer.lender,\n ...toU256(params.offer.issuedDebtPercentage),\n params.offer.nonce.toString(),\n // lender_sig array\n String(params.lenderSig.length),\n ...params.lenderSig,\n ]\n return { contractAddress: this.address, entrypoint: 'settle', calldata }\n }\n\n buildBatchSettle(params: {\n orders: Array<{\n borrower: string\n debtHash: string\n interestHash: string\n collateralHash: string\n debtCount: number\n interestCount: number\n collateralCount: number\n duration: bigint\n deadline: bigint\n multiLender: boolean\n nonce: bigint\n }>\n debtAssetsFlat: Asset[]\n interestAssetsFlat: Asset[]\n collateralAssetsFlat: Asset[]\n borrowerSigs: string[][]\n batchOffer: {\n batchHash: string\n count: number\n lender: string\n startNonce: bigint\n }\n lenderSig: string[]\n bpsList: bigint[]\n }): Call {\n const calldata: string[] = []\n\n // orders: Array<InscriptionOrder>\n calldata.push(String(params.orders.length))\n for (const order of params.orders) {\n calldata.push(\n order.borrower,\n order.debtHash,\n order.interestHash,\n order.collateralHash,\n String(order.debtCount),\n String(order.interestCount),\n String(order.collateralCount),\n order.duration.toString(),\n order.deadline.toString(),\n order.multiLender ? '1' : '0',\n order.nonce.toString(),\n )\n }\n\n // debt_assets_flat: Array<Asset>\n calldata.push(...serializeAssets(params.debtAssetsFlat))\n // interest_assets_flat: Array<Asset>\n calldata.push(...serializeAssets(params.interestAssetsFlat))\n // collateral_assets_flat: Array<Asset>\n calldata.push(...serializeAssets(params.collateralAssetsFlat))\n\n // borrower_sigs: Array<Array<felt252>>\n calldata.push(String(params.borrowerSigs.length))\n for (const sig of params.borrowerSigs) {\n calldata.push(String(sig.length), ...sig)\n }\n\n // batch_offer: BatchLendOffer struct (4 fields)\n calldata.push(\n params.batchOffer.batchHash,\n String(params.batchOffer.count),\n params.batchOffer.lender,\n params.batchOffer.startNonce.toString(),\n )\n\n // lender_sig: Array<felt252>\n calldata.push(String(params.lenderSig.length), ...params.lenderSig)\n\n // bps_list: Array<u256>\n calldata.push(String(params.bpsList.length))\n for (const bps of params.bpsList) {\n calldata.push(...toU256(bps))\n }\n\n return { contractAddress: this.address, entrypoint: 'batch_settle', calldata }\n }\n\n buildFillSignedOrder(order: SignedOrder, signature: string[], fillBps: bigint): Call {\n const calldata: string[] = [\n // SignedOrder struct fields\n order.maker,\n order.allowed_taker,\n ...toU256(order.inscription_id),\n ...toU256(order.bps),\n order.deadline.toString(),\n order.nonce,\n ...toU256(order.min_fill_bps),\n // signature array\n String(signature.length),\n ...signature,\n // fill_bps\n ...toU256(fillBps),\n ]\n return { contractAddress: this.address, entrypoint: 'fill_signed_order', calldata }\n }\n\n buildCancelOrder(order: SignedOrder): Call {\n const calldata: string[] = [\n order.maker,\n order.allowed_taker,\n ...toU256(order.inscription_id),\n ...toU256(order.bps),\n order.deadline.toString(),\n order.nonce,\n ...toU256(order.min_fill_bps),\n ]\n return { contractAddress: this.address, entrypoint: 'cancel_order', calldata }\n }\n\n buildCancelOrdersByNonce(minNonce: string): Call {\n return {\n contractAddress: this.address,\n entrypoint: 'cancel_orders_by_nonce',\n calldata: [minNonce],\n }\n }\n\n // ── T1 Call Builders ─────────────────────────────────────────────────\n\n /** T1-2: Settle a collection-wide lend offer */\n buildSettleCollection(params: {\n offer: {\n lender: string\n debtHash: string\n interestHash: string\n debtCount: number\n interestCount: number\n collectionAddress: string\n duration: bigint\n deadline: bigint\n nonce: bigint\n }\n acceptance: {\n offerHash: string\n borrower: string\n tokenId: bigint\n nonce: bigint\n }\n debtAssets: Asset[]\n interestAssets: Asset[]\n lenderSig: string[]\n borrowerSig: string[]\n }): Call {\n const calldata: string[] = [\n // CollectionLendOffer struct (9 fields)\n params.offer.lender,\n params.offer.debtHash,\n params.offer.interestHash,\n String(params.offer.debtCount),\n String(params.offer.interestCount),\n params.offer.collectionAddress,\n params.offer.duration.toString(),\n params.offer.deadline.toString(),\n params.offer.nonce.toString(),\n // CollectionBorrowAcceptance struct (4 fields)\n params.acceptance.offerHash,\n params.acceptance.borrower,\n ...toU256(params.acceptance.tokenId),\n params.acceptance.nonce.toString(),\n // debt_assets array\n ...serializeAssets(params.debtAssets),\n // interest_assets array\n ...serializeAssets(params.interestAssets),\n // lender_sig array\n String(params.lenderSig.length),\n ...params.lenderSig,\n // borrower_sig array\n String(params.borrowerSig.length),\n ...params.borrowerSig,\n ]\n return { contractAddress: this.address, entrypoint: 'settle_collection', calldata }\n }\n\n /** T1-4: Commit a renegotiation proposal hash on-chain */\n buildCommitRenegotiation(inscriptionId: bigint, proposalHash: string): Call {\n return {\n contractAddress: this.address,\n entrypoint: 'commit_renegotiation',\n calldata: [...toU256(inscriptionId), proposalHash],\n }\n }\n\n /** T1-4: Execute a committed renegotiation proposal */\n buildExecuteRenegotiation(params: {\n inscriptionId: bigint\n proposal: {\n inscriptionId: bigint\n proposer: string\n newDuration: bigint\n newInterestHash: string\n newInterestCount: number\n proposalDeadline: bigint\n nonce: bigint\n }\n proposerSig: string[]\n newInterestAssets: Asset[]\n }): Call {\n const calldata: string[] = [\n ...toU256(params.inscriptionId),\n // RenegotiationProposal struct (7 fields)\n ...toU256(params.proposal.inscriptionId),\n params.proposal.proposer,\n params.proposal.newDuration.toString(),\n params.proposal.newInterestHash,\n String(params.proposal.newInterestCount),\n params.proposal.proposalDeadline.toString(),\n params.proposal.nonce.toString(),\n // proposer_sig array\n String(params.proposerSig.length),\n ...params.proposerSig,\n // new_interest_assets array\n ...serializeAssets(params.newInterestAssets),\n ]\n return { contractAddress: this.address, entrypoint: 'execute_renegotiation', calldata }\n }\n\n /** T1-5: Buy collateral from a borrower's sale offer */\n buildBuyCollateral(params: {\n inscriptionId: bigint\n offer: {\n inscriptionId: bigint\n borrower: string\n minPrice: bigint\n paymentToken: string\n allowedBuyer: string\n deadline: bigint\n nonce: bigint\n }\n borrowerSig: string[]\n salePrice: bigint\n }): Call {\n const calldata: string[] = [\n ...toU256(params.inscriptionId),\n // CollateralSaleOffer struct (7 fields)\n ...toU256(params.offer.inscriptionId),\n params.offer.borrower,\n ...toU256(params.offer.minPrice),\n params.offer.paymentToken,\n params.offer.allowedBuyer,\n params.offer.deadline.toString(),\n params.offer.nonce.toString(),\n // borrower_sig array\n String(params.borrowerSig.length),\n ...params.borrowerSig,\n // sale_price\n ...toU256(params.salePrice),\n ]\n return { contractAddress: this.address, entrypoint: 'buy_collateral', calldata }\n }\n\n /** T1-1: Refinance an existing loan with a new lender */\n buildRefinance(params: {\n offer: {\n inscriptionId: bigint\n newLender: string\n newDebtHash: string\n newInterestHash: string\n newDebtCount: number\n newInterestCount: number\n newDuration: bigint\n deadline: bigint\n nonce: bigint\n }\n newDebtAssets: Asset[]\n newInterestAssets: Asset[]\n newLenderSig: string[]\n approval: {\n inscriptionId: bigint\n offerHash: string\n borrower: string\n nonce: bigint\n }\n borrowerSig: string[]\n }): Call {\n const calldata: string[] = [\n // RefinanceOffer struct (9 fields)\n ...toU256(params.offer.inscriptionId),\n params.offer.newLender,\n params.offer.newDebtHash,\n params.offer.newInterestHash,\n String(params.offer.newDebtCount),\n String(params.offer.newInterestCount),\n params.offer.newDuration.toString(),\n params.offer.deadline.toString(),\n params.offer.nonce.toString(),\n // new_debt_assets array\n ...serializeAssets(params.newDebtAssets),\n // new_interest_assets array\n ...serializeAssets(params.newInterestAssets),\n // new_lender_sig array\n String(params.newLenderSig.length),\n ...params.newLenderSig,\n // RefinanceApproval struct (4 fields)\n ...toU256(params.approval.inscriptionId),\n params.approval.offerHash,\n params.approval.borrower,\n params.approval.nonce.toString(),\n // borrower_sig array\n String(params.borrowerSig.length),\n ...params.borrowerSig,\n ]\n return { contractAddress: this.address, entrypoint: 'refinance', calldata }\n }\n\n /** T1-3: Start a Dutch auction on an expired, unfilled inscription */\n buildStartAuction(inscriptionId: bigint): Call {\n return {\n contractAddress: this.address,\n entrypoint: 'start_auction',\n calldata: [...toU256(inscriptionId)],\n }\n }\n\n /** T1-3: Bid on an active Dutch auction */\n buildBid(inscriptionId: bigint): Call {\n return {\n contractAddress: this.address,\n entrypoint: 'bid',\n calldata: [...toU256(inscriptionId)],\n }\n }\n\n /** T1-3: Claim collateral after an auction expires with no bids */\n buildClaimCollateral(inscriptionId: bigint): Call {\n return {\n contractAddress: this.address,\n entrypoint: 'claim_collateral',\n calldata: [...toU256(inscriptionId)],\n }\n }\n\n // ── T1 Read Methods ──────────────────────────────────────────────────\n\n /** T1-3: Get the current Dutch auction price for a specific debt asset */\n async getAuctionPrice(inscriptionId: bigint, debtIndex: number): Promise<bigint> {\n const result = await this.contract.call('get_auction_price', [\n ...toU256(inscriptionId),\n String(debtIndex),\n ])\n return extractU256(result)\n }\n\n /** T1-3: Get the auction end timestamp */\n async getAuctionEndTime(inscriptionId: bigint): Promise<bigint> {\n const result = await this.contract.call('get_auction_end_time', toU256(inscriptionId))\n return BigInt(String((result as unknown[])[0] ?? '0'))\n }\n\n // ── Execute Methods ────────────────────────────────────────────────\n\n /**\n * Execute one or more calls via the connected account.\n * Pass approval calls to bundle ERC20 approve + protocol call atomically.\n */\n async execute(calls: Call[]): Promise<{ transaction_hash: string }> {\n if (!this.account) throw new Error('Account required for write operations')\n const result = await this.account.execute(calls)\n return { transaction_hash: result.transaction_hash }\n }\n\n async createInscription(params: InscriptionParams, approvals?: Call[]): Promise<{ transaction_hash: string }> {\n const calls = [...(approvals ?? []), this.buildCreateInscription(params)]\n return this.execute(calls)\n }\n\n async signInscription(inscriptionId: bigint, bps: bigint, approvals?: Call[]): Promise<{ transaction_hash: string }> {\n const calls = [...(approvals ?? []), this.buildSignInscription(inscriptionId, bps)]\n return this.execute(calls)\n }\n\n async cancelInscription(inscriptionId: bigint): Promise<{ transaction_hash: string }> {\n return this.execute([this.buildCancelInscription(inscriptionId)])\n }\n\n async repay(inscriptionId: bigint, approvals?: Call[]): Promise<{ transaction_hash: string }> {\n const calls = [...(approvals ?? []), this.buildRepay(inscriptionId)]\n return this.execute(calls)\n }\n\n async liquidate(inscriptionId: bigint): Promise<{ transaction_hash: string }> {\n return this.execute([this.buildLiquidate(inscriptionId)])\n }\n\n async redeem(inscriptionId: bigint, shares: bigint): Promise<{ transaction_hash: string }> {\n return this.execute([this.buildRedeem(inscriptionId, shares)])\n }\n\n async fillSignedOrder(order: SignedOrder, signature: string[], fillBps: bigint, approvals?: Call[]): Promise<{ transaction_hash: string }> {\n const calls = [...(approvals ?? []), this.buildFillSignedOrder(order, signature, fillBps)]\n return this.execute(calls)\n }\n\n async cancelOrder(order: SignedOrder): Promise<{ transaction_hash: string }> {\n return this.execute([this.buildCancelOrder(order)])\n }\n\n async cancelOrdersByNonce(minNonce: string): Promise<{ transaction_hash: string }> {\n return this.execute([this.buildCancelOrdersByNonce(minNonce)])\n }\n\n // ── T1 Execute Methods ───────────────────────────────────────────────\n\n async settleCollection(params: Parameters<InscriptionClient['buildSettleCollection']>[0]): Promise<{ transaction_hash: string }> {\n return this.execute([this.buildSettleCollection(params)])\n }\n\n async commitRenegotiation(inscriptionId: bigint, proposalHash: string): Promise<{ transaction_hash: string }> {\n return this.execute([this.buildCommitRenegotiation(inscriptionId, proposalHash)])\n }\n\n async executeRenegotiation(params: Parameters<InscriptionClient['buildExecuteRenegotiation']>[0], approvals?: Call[]): Promise<{ transaction_hash: string }> {\n const calls = [...(approvals ?? []), this.buildExecuteRenegotiation(params)]\n return this.execute(calls)\n }\n\n async buyCollateral(params: Parameters<InscriptionClient['buildBuyCollateral']>[0], approvals?: Call[]): Promise<{ transaction_hash: string }> {\n const calls = [...(approvals ?? []), this.buildBuyCollateral(params)]\n return this.execute(calls)\n }\n\n async refinance(params: Parameters<InscriptionClient['buildRefinance']>[0], approvals?: Call[]): Promise<{ transaction_hash: string }> {\n const calls = [...(approvals ?? []), this.buildRefinance(params)]\n return this.execute(calls)\n }\n\n async startAuction(inscriptionId: bigint): Promise<{ transaction_hash: string }> {\n return this.execute([this.buildStartAuction(inscriptionId)])\n }\n\n async bid(inscriptionId: bigint, approvals?: Call[]): Promise<{ transaction_hash: string }> {\n const calls = [...(approvals ?? []), this.buildBid(inscriptionId)]\n return this.execute(calls)\n }\n\n async claimCollateral(inscriptionId: bigint): Promise<{ transaction_hash: string }> {\n return this.execute([this.buildClaimCollateral(inscriptionId)])\n }\n}\n\n// ── Helpers ────────────────────────────────────────────────────────────\n\nfunction serializeAssets(assets: Asset[]): string[] {\n const calldata: string[] = [String(assets.length)]\n for (const a of assets) {\n calldata.push(a.asset_address)\n calldata.push(String(ASSET_TYPE_ENUM[a.asset_type]))\n calldata.push(...toU256(a.value))\n calldata.push(...toU256(a.token_id))\n }\n return calldata\n}\n\nfunction extractU256(result: unknown): bigint {\n const arr = result as unknown[]\n if (typeof arr[0] === 'bigint') return arr[0]\n if (typeof arr[0] === 'object' && arr[0] !== null && 'low' in arr[0] && 'high' in arr[0]) {\n const u = arr[0] as { low: bigint; high: bigint }\n return fromU256(u)\n }\n return BigInt(String(arr[0]))\n}\n\nfunction parseStoredInscription(result: unknown): StoredInscription {\n const r = result as Record<string, unknown>\n // starknet.js v6 returns a named struct or array depending on call\n const get = (key: string, index: number): unknown => {\n if (key in r) return r[key]\n const arr = result as unknown[]\n return arr[index]\n }\n\n return {\n borrower: String(get('borrower', 0)),\n lender: String(get('lender', 1)),\n duration: BigInt(String(get('duration', 2))),\n deadline: BigInt(String(get('deadline', 3))),\n signed_at: BigInt(String(get('signed_at', 4))),\n issued_debt_percentage: extractFieldU256(get('issued_debt_percentage', 5)),\n is_repaid: Boolean(get('is_repaid', 6)),\n liquidated: Boolean(get('liquidated', 7)),\n multi_lender: Boolean(get('multi_lender', 8)),\n debt_asset_count: Number(get('debt_asset_count', 9)),\n interest_asset_count: Number(get('interest_asset_count', 10)),\n collateral_asset_count: Number(get('collateral_asset_count', 11)),\n auction_started: Boolean(get('auction_started', 12)),\n auction_start_time: BigInt(String(get('auction_start_time', 13) ?? '0')),\n }\n}\n\nfunction extractFieldU256(val: unknown): bigint {\n if (typeof val === 'bigint') return val\n if (typeof val === 'object' && val !== null && 'low' in val && 'high' in val) {\n return fromU256(val as { low: bigint; high: bigint })\n }\n return BigInt(String(val))\n}\n","import { Contract, type RpcProvider, type Account } from 'starknet'\nimport type { Call } from '../types/common.js'\nimport stelaAbi from '../abi/stela.json'\nimport { toU256 } from '../utils/u256.js'\n\nexport interface ShareClientOptions {\n stelaAddress: string\n provider: RpcProvider\n account?: Account\n}\n\n/**\n * Client for ERC1155 share operations on the Stela contract.\n * Inscription IDs are token IDs — each lender receives shares as ERC1155 tokens.\n *\n * Shares are freely transferable via standard ERC1155 safeTransferFrom.\n * Any address holding shares can call redeem() after repayment/liquidation.\n */\nexport class ShareClient {\n private contract: Contract\n private address: string\n private account?: Account\n\n constructor(opts: ShareClientOptions) {\n this.address = opts.stelaAddress\n this.contract = new Contract(stelaAbi, opts.stelaAddress, opts.provider)\n this.account = opts.account\n }\n\n // ── Read Methods ───────────────────────────────────────────────────\n\n /** Get share balance for an account on a specific inscription */\n async balanceOf(account: string, inscriptionId: bigint): Promise<bigint> {\n const result = await this.contract.call('balance_of', [account, ...toU256(inscriptionId)])\n return extractBigInt(result)\n }\n\n /** Get share balances for multiple account/inscription pairs */\n async balanceOfBatch(accounts: string[], inscriptionIds: bigint[]): Promise<bigint[]> {\n if (accounts.length !== inscriptionIds.length) {\n throw new Error('accounts and inscriptionIds must have the same length')\n }\n const result = await this.contract.call('balance_of_batch', [\n accounts,\n inscriptionIds.map((id) => toU256(id)),\n ])\n const arr = result as unknown[]\n const balances = arr[0] as unknown[]\n return balances.map((b) => BigInt(String(b)))\n }\n\n /** Check if an operator is approved for all tokens of an owner */\n async isApprovedForAll(owner: string, operator: string): Promise<boolean> {\n const result = await this.contract.call('is_approved_for_all', [owner, operator])\n return Boolean((result as unknown[])[0])\n }\n\n // ── Call Builders ──────────────────────────────────────────────────\n\n /**\n * Build a call to transfer shares (ERC1155 safeTransferFrom).\n * This enables secondary market trading of lending positions.\n *\n * @param from - Current share holder\n * @param to - Recipient address\n * @param inscriptionId - The inscription (token ID)\n * @param amount - Number of shares to transfer\n * @param data - Optional calldata (empty array by default)\n */\n buildTransferShares(\n from: string,\n to: string,\n inscriptionId: bigint,\n amount: bigint,\n data: string[] = [],\n ): Call {\n return {\n contractAddress: this.address,\n entrypoint: 'safe_transfer_from',\n calldata: [from, to, ...toU256(inscriptionId), ...toU256(amount), String(data.length), ...data],\n }\n }\n\n /**\n * Build a call to approve an operator for all ERC1155 tokens.\n * Required before a marketplace contract can transfer shares on your behalf.\n *\n * @param operator - The address to approve (e.g., marketplace contract)\n * @param approved - Whether to approve or revoke\n */\n buildSetApprovalForAll(operator: string, approved: boolean): Call {\n return {\n contractAddress: this.address,\n entrypoint: 'set_approval_for_all',\n calldata: [operator, approved ? '1' : '0'],\n }\n }\n\n // ── Execute Methods ────────────────────────────────────────────────\n\n /** Transfer shares to another address */\n async transferShares(\n from: string,\n to: string,\n inscriptionId: bigint,\n amount: bigint,\n data: string[] = [],\n ): Promise<{ transaction_hash: string }> {\n if (!this.account) throw new Error('Account required for write operations')\n const result = await this.account.execute([\n this.buildTransferShares(from, to, inscriptionId, amount, data),\n ])\n return { transaction_hash: result.transaction_hash }\n }\n\n /** Approve or revoke an operator for all ERC1155 tokens */\n async setApprovalForAll(\n operator: string,\n approved: boolean,\n ): Promise<{ transaction_hash: string }> {\n if (!this.account) throw new Error('Account required for write operations')\n const result = await this.account.execute([this.buildSetApprovalForAll(operator, approved)])\n return { transaction_hash: result.transaction_hash }\n }\n}\n\nfunction extractBigInt(result: unknown): bigint {\n const arr = result as unknown[]\n if (typeof arr[0] === 'bigint') return arr[0]\n return BigInt(String(arr[0]))\n}\n","[\n {\n \"type\": \"struct\",\n \"name\": \"core::integer::u256\",\n \"members\": [\n { \"name\": \"low\", \"type\": \"core::integer::u128\" },\n { \"name\": \"high\", \"type\": \"core::integer::u128\" }\n ]\n },\n {\n \"type\": \"interface\",\n \"name\": \"erc20::IERC20\",\n \"items\": [\n {\n \"type\": \"function\",\n \"name\": \"approve\",\n \"inputs\": [\n { \"name\": \"spender\", \"type\": \"core::starknet::contract_address::ContractAddress\" },\n { \"name\": \"amount\", \"type\": \"core::integer::u256\" }\n ],\n \"outputs\": [{ \"type\": \"core::bool\" }],\n \"state_mutability\": \"external\"\n },\n {\n \"type\": \"function\",\n \"name\": \"balance_of\",\n \"inputs\": [\n { \"name\": \"account\", \"type\": \"core::starknet::contract_address::ContractAddress\" }\n ],\n \"outputs\": [{ \"type\": \"core::integer::u256\" }],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"allowance\",\n \"inputs\": [\n { \"name\": \"owner\", \"type\": \"core::starknet::contract_address::ContractAddress\" },\n { \"name\": \"spender\", \"type\": \"core::starknet::contract_address::ContractAddress\" }\n ],\n \"outputs\": [{ \"type\": \"core::integer::u256\" }],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"balanceOf\",\n \"inputs\": [\n { \"name\": \"account\", \"type\": \"core::starknet::contract_address::ContractAddress\" }\n ],\n \"outputs\": [{ \"type\": \"core::integer::u256\" }],\n \"state_mutability\": \"view\"\n }\n ]\n }\n]\n","[\n {\n \"type\": \"enum\",\n \"name\": \"core::bool\",\n \"variants\": [\n { \"name\": \"False\", \"type\": \"()\" },\n { \"name\": \"True\", \"type\": \"()\" }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"core::starknet::account::Call\",\n \"members\": [\n { \"name\": \"to\", \"type\": \"core::starknet::contract_address::ContractAddress\" },\n { \"name\": \"selector\", \"type\": \"core::felt252\" },\n { \"name\": \"calldata\", \"type\": \"core::array::Array::<core::felt252>\" }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"core::array::Span::<core::felt252>\",\n \"members\": [\n { \"name\": \"snapshot\", \"type\": \"@core::array::Array::<core::felt252>\" }\n ]\n },\n {\n \"type\": \"interface\",\n \"name\": \"locker::ILockerAccount\",\n \"items\": [\n {\n \"type\": \"function\",\n \"name\": \"__execute__\",\n \"inputs\": [\n { \"name\": \"calls\", \"type\": \"core::array::Span::<core::starknet::account::Call>\" }\n ],\n \"outputs\": [\n { \"type\": \"core::array::Array::<core::array::Span::<core::felt252>>\" }\n ],\n \"state_mutability\": \"external\"\n },\n {\n \"type\": \"function\",\n \"name\": \"is_unlocked\",\n \"inputs\": [],\n \"outputs\": [{ \"type\": \"core::bool\" }],\n \"state_mutability\": \"view\"\n }\n ]\n }\n]\n","import { Contract, type RpcProvider, type Account, hash } from 'starknet'\nimport type { Call } from '../types/common.js'\nimport type { LockerState } from '../types/locker.js'\nimport stelaAbi from '../abi/stela.json'\nimport erc20Abi from '../abi/erc20.json'\nimport lockerAbi from '../abi/locker.json'\nimport { toU256 } from '../utils/u256.js'\n\nexport class LockerClient {\n constructor(\n private stelaContract: Contract,\n private provider: RpcProvider,\n private account?: Account,\n ) {}\n\n /** Get the Locker TBA address for an inscription */\n async getLockerAddress(inscriptionId: bigint): Promise<string> {\n const contract = new Contract(stelaAbi, this.stelaContract.address, this.provider)\n const result = await contract.call('get_locker', toU256(inscriptionId))\n return String((result as unknown[])[0])\n }\n\n /** Check if a locker is unlocked */\n async isUnlocked(inscriptionId: bigint): Promise<boolean> {\n const address = await this.getLockerAddress(inscriptionId)\n const locker = new Contract(lockerAbi, address, this.provider)\n const result = await locker.call('is_unlocked')\n return Boolean((result as unknown[])[0])\n }\n\n /** Get full locker state */\n async getLockerState(inscriptionId: bigint): Promise<LockerState> {\n const address = await this.getLockerAddress(inscriptionId)\n const locker = new Contract(lockerAbi, address, this.provider)\n const result = await locker.call('is_unlocked')\n const isUnlocked = Boolean((result as unknown[])[0])\n return { address, isUnlocked }\n }\n\n /** Read ERC20 balance held by a locker */\n async getLockerBalance(inscriptionId: bigint, tokenAddress: string): Promise<bigint> {\n const lockerAddress = await this.getLockerAddress(inscriptionId)\n const token = new Contract(erc20Abi, tokenAddress, this.provider)\n const result = await token.call('balance_of', [lockerAddress])\n return BigInt((result as unknown[])[0] as string | bigint)\n }\n\n /** Read multiple ERC20 balances held by a locker */\n async getLockerBalances(inscriptionId: bigint, tokenAddresses: string[]): Promise<Map<string, bigint>> {\n const lockerAddress = await this.getLockerAddress(inscriptionId)\n const results = await Promise.all(\n tokenAddresses.map(async (addr) => {\n const token = new Contract(erc20Abi, addr, this.provider)\n const result = await token.call('balance_of', [lockerAddress])\n return [addr, BigInt((result as unknown[])[0] as string | bigint)] as const\n }),\n )\n return new Map<string, bigint>(results)\n }\n\n // ---- Governance execution through Locker ----\n\n /**\n * Build a Call to execute an arbitrary call through the Locker TBA.\n * The Locker's __execute__ function proxies calls from the locker's address.\n * This is how a DAO retains governance power over locked collateral.\n *\n * The locker uses SNIP-6 account standard (__execute__). The calldata\n * encodes an array of Call structs, each with:\n * - to: felt252 (ContractAddress)\n * - selector: felt252\n * - calldata: Array<felt252> (length-prefixed)\n */\n buildLockerExecute(lockerAddress: string, innerCalls: Call[]): Call {\n // Serialize Call[] into flat felt252 array for the Span<Call> parameter.\n // Format: [num_calls, call0_to, call0_selector, call0_calldata_len, ...call0_calldata, ...]\n const calldata: string[] = [innerCalls.length.toString()]\n for (const c of innerCalls) {\n calldata.push(c.contractAddress)\n calldata.push(hash.getSelectorFromName(c.entrypoint))\n calldata.push(c.calldata.length.toString())\n calldata.push(...c.calldata)\n }\n\n return {\n contractAddress: lockerAddress,\n entrypoint: '__execute__',\n calldata,\n }\n }\n\n /**\n * Execute a governance call through the Locker.\n * Requires account to be the inscription's borrower (NFT owner).\n */\n async executeThrough(inscriptionId: bigint, innerCall: Call): Promise<{ transaction_hash: string }> {\n if (!this.account) throw new Error('Account required for write operations')\n const lockerAddress = await this.getLockerAddress(inscriptionId)\n const call = this.buildLockerExecute(lockerAddress, [innerCall])\n const result = await this.account.execute([call])\n return { transaction_hash: result.transaction_hash }\n }\n\n /**\n * Execute multiple governance calls through the Locker in a single tx.\n */\n async executeThroughBatch(inscriptionId: bigint, innerCalls: Call[]): Promise<{ transaction_hash: string }> {\n if (!this.account) throw new Error('Account required for write operations')\n const lockerAddress = await this.getLockerAddress(inscriptionId)\n const call = this.buildLockerExecute(lockerAddress, innerCalls)\n const result = await this.account.execute([call])\n return { transaction_hash: result.transaction_hash }\n }\n}\n","import type {\n InscriptionRow,\n AssetRow,\n ApiListResponse,\n ApiDetailResponse,\n TreasuryAsset,\n ShareBalance,\n LockerInfo,\n} from '../types/api.js'\n\nexport interface ApiClientOptions {\n baseUrl?: string\n}\n\nexport interface ListInscriptionsParams {\n status?: string\n address?: string\n page?: number\n limit?: number\n}\n\n/**\n * HTTP client for the Stela indexer API.\n * Provides typed access to indexed inscription data, treasury views, and locker info.\n */\nexport class ApiClient {\n private baseUrl: string\n\n constructor(opts?: ApiClientOptions) {\n this.baseUrl = (opts?.baseUrl ?? 'https://stela-dapp.xyz/api').replace(/\\/$/, '')\n }\n\n /** List inscriptions with optional filters */\n async listInscriptions(params?: ListInscriptionsParams): Promise<ApiListResponse<InscriptionRow>> {\n const query = new URLSearchParams()\n if (params?.status) query.set('status', params.status)\n if (params?.address) query.set('address', params.address)\n if (params?.page) query.set('page', String(params.page))\n if (params?.limit) query.set('limit', String(params.limit))\n const qs = query.toString()\n return this.get<ApiListResponse<InscriptionRow>>(`/inscriptions${qs ? `?${qs}` : ''}`)\n }\n\n /** Get a single inscription by ID */\n async getInscription(id: string): Promise<ApiDetailResponse<InscriptionRow>> {\n return this.get<ApiDetailResponse<InscriptionRow>>(`/inscriptions/${id}`)\n }\n\n /** Get events for a specific inscription */\n async getInscriptionEvents(id: string): Promise<ApiListResponse<InscriptionEventRow>> {\n return this.get<ApiListResponse<InscriptionEventRow>>(`/inscriptions/${id}/events`)\n }\n\n /** Get treasury asset balances for an address */\n async getTreasuryView(address: string): Promise<ApiListResponse<TreasuryAsset>> {\n const query = new URLSearchParams({ address })\n return this.get<ApiListResponse<TreasuryAsset>>(`/treasury?${query}`)\n }\n\n /** Get locker info for inscriptions of an address */\n async getLockers(address: string): Promise<ApiListResponse<LockerInfo>> {\n const query = new URLSearchParams({ address })\n return this.get<ApiListResponse<LockerInfo>>(`/lockers?${query}`)\n }\n\n /** Get share balances for an address */\n async getShareBalances(address: string): Promise<ApiListResponse<ShareBalance>> {\n const query = new URLSearchParams({ address })\n return this.get<ApiListResponse<ShareBalance>>(`/shares?${query}`)\n }\n\n private async get<T>(path: string): Promise<T> {\n const url = `${this.baseUrl}${path}`\n const response = await fetch(url)\n if (!response.ok) {\n throw new ApiError(response.status, `API request failed: ${response.status} ${response.statusText}`, url)\n }\n return response.json() as Promise<T>\n }\n}\n\nexport class ApiError extends Error {\n constructor(\n public readonly status: number,\n message: string,\n public readonly url: string,\n ) {\n super(message)\n this.name = 'ApiError'\n }\n}\n\n/** Shape of an inscription event row from the API */\nexport interface InscriptionEventRow {\n id: number\n inscription_id: string\n event_type: string\n tx_hash: string\n block_number: number\n timestamp: string | null\n data: Record<string, unknown> | null\n}\n","import { Contract, type RpcProvider, type Account } from 'starknet'\nimport type { Network } from '../types/common.js'\nimport { STELA_ADDRESS, resolveNetwork } from '../constants/addresses.js'\nimport { InscriptionClient } from './inscription-client.js'\nimport { ShareClient } from './share-client.js'\nimport { LockerClient } from './locker-client.js'\nimport { ApiClient } from './api-client.js'\nimport stelaAbi from '../abi/stela.json'\n\nexport interface StelaSdkOptions {\n /** StarkNet RPC provider */\n provider: RpcProvider\n /** Connected account for write operations (optional for read-only) */\n account?: Account\n /** Network name or auto-detect from provider */\n network?: Network | string\n /** Custom API base URL */\n apiBaseUrl?: string\n /** Override the contract address (for custom deployments) */\n stelaAddress?: string\n}\n\n/**\n * Main SDK facade that wires together all clients.\n *\n * ```ts\n * const sdk = new StelaSdk({ provider, account, network: 'sepolia' })\n * const inscription = await sdk.inscriptions.getInscription(1n)\n * const shares = await sdk.shares.balanceOf(myAddress, 1n)\n * ```\n */\nexport class StelaSdk {\n readonly inscriptions: InscriptionClient\n readonly shares: ShareClient\n readonly locker: LockerClient\n readonly api: ApiClient\n readonly network: Network\n readonly stelaAddress: string\n\n constructor(opts: StelaSdkOptions) {\n this.network = resolveNetwork(opts.network)\n this.stelaAddress = opts.stelaAddress ?? STELA_ADDRESS[this.network]\n\n this.inscriptions = new InscriptionClient({\n stelaAddress: this.stelaAddress,\n provider: opts.provider,\n account: opts.account,\n })\n\n this.shares = new ShareClient({\n stelaAddress: this.stelaAddress,\n provider: opts.provider,\n account: opts.account,\n })\n\n const stelaContract = new Contract(stelaAbi, this.stelaAddress, opts.provider)\n this.locker = new LockerClient(stelaContract, opts.provider, opts.account)\n\n this.api = new ApiClient({ baseUrl: opts.apiBaseUrl })\n }\n}\n","import type { RpcProvider } from 'starknet'\n\n/**\n * Read the on-chain nonce for an address from the Stela contract.\n *\n * Uses 'latest' block — Cartridge RPC does not support 'pending'.\n * All nonce reads (frontend, server verify, API route) MUST use the same\n * block tag. The server-side processCreateOrder has a grace window to\n * account for nonces consumed in recent blocks not yet in 'latest'.\n */\nexport async function getNonce(\n provider: RpcProvider,\n stelaAddress: string,\n accountAddress: string,\n): Promise<bigint> {\n const result = await provider.callContract(\n {\n contractAddress: stelaAddress,\n entrypoint: 'nonces',\n calldata: [accountAddress],\n },\n 'latest',\n )\n return BigInt(result[0])\n}\n"]}
|