{"version":3,"sources":["../src/gateway/errors.ts","../src/utils/parse-boolean-flag.ts","../src/auxiliaries.ts","../src/client-result.ts","../src/gateway/structured-select.ts","../src/query-ast.ts","../src/query-transport.ts","../src/sql-identifiers.ts","../src/client-sql.ts","../src/gateway/url.ts","../package.json","../src/sdk-version.ts","../src/cookies/base64.ts","../src/cookies/cookie-utils.ts","../src/cookies/crypto.ts","../src/cookies/session-store.ts","../src/cookies/index.ts","../src/utils/athena-request-headers.ts","../src/client-request.ts","../src/gateway/client.ts","../src/auth/limits.ts","../src/auth/react-email.ts","../src/auth/client.ts","../src/storage/direct-upload.ts","../src/storage/file.ts","../src/storage/backup.ts","../src/storage/module.ts","../src/chat/module.ts","../src/query-debug-ast.ts","../src/query-tracing.ts","../src/schema/model-target.ts","../src/client.ts","../src/billing/module.ts","../src/v3-client.ts","../src/gateway/types.ts","../src/schema/definitions.ts","../src/schema/model-form.ts","../src/schema/table-columns.ts","../src/schema/table-schemas.ts","../src/schema/table-builder.ts","../src/schema/postgres-introspection-core.ts","../src/schema/postgres-provider.ts","../src/generator/schema-selection.ts","../src/generator/table-selection.ts","../src/generator/config.ts","../src/generator/env.ts","../src/utils/slugify.ts","../src/generator/naming.ts","../src/generator/postgres-type-mapping.ts","../src/generator/placeholders.ts","../src/generator/render-shared.ts","../src/generator/table-builder-renderer.ts","../src/generator/renderer.ts","../src/generator/providers.ts","../src/generator/pipeline.ts","../src/auth/server.ts","../src/organization/ensure-active-organization.ts"],"names":["parseBooleanFlag","message","table","kind","resolve","isRecord","firstNonEmptyString","identifier","aliasIdentifier","baseIdentifier","request","parsed","SDK_NAME","resolveStructuredErrorPayload","SDK_HEADER_VALUE","parseResponseBody","resolveRequestId","resolveErrorMessage","buildHeaders","token","sessions","parseXhrHeaders","headerValue","appendQuery","resolveErrorHint","isBlobBody","callAthena","stringifyFilterValue","filterMethods","withPathParam","z","createTableBuilder","existsSync","readFileSync","pathToFileURL","readEnvStringValue","posix","renderModelArtifact","normalizeTypeLabel","relationKey","stat","mkdir","dirname","writeFile","capitalize","isDynamicBaseURLConfig"],"mappings":";;;;;;;;;AAuBO,IAAM,kBAAA,GAAN,MAAM,mBAAA,SAA2B,KAAA,CAAM;AAAA,EACnC,IAAA;AAAA,EACA,MAAA;AAAA,EACA,QAAA;AAAA,EACA,MAAA;AAAA,EACA,SAAA;AAAA,EACA,IAAA;AAAA,EACA,WAAA;AAAA,EAET,YAAY,KAAA,EAAgC;AAC1C,IAAA,KAAA,CAAM,MAAM,OAAO,CAAA;AACnB,IAAA,IAAA,CAAK,IAAA,GAAO,oBAAA;AACZ,IAAA,IAAA,CAAK,OAAO,KAAA,CAAM,IAAA;AAClB,IAAA,IAAA,CAAK,MAAA,GAAS,MAAM,MAAA,IAAU,CAAA;AAC9B,IAAA,IAAA,CAAK,WAAW,KAAA,CAAM,QAAA;AACtB,IAAA,IAAA,CAAK,SAAS,KAAA,CAAM,MAAA;AACpB,IAAA,IAAA,CAAK,YAAY,KAAA,CAAM,SAAA;AACvB,IAAA,IAAA,CAAK,OAAO,KAAA,CAAM,IAAA;AAClB,IAAA,IAAA,CAAK,cAAc,KAAA,CAAM,KAAA;AAAA,EAC3B;AAAA,EAEA,SAAA,GAAuC;AACrC,IAAA,OAAO;AAAA,MACL,MAAM,IAAA,CAAK,IAAA;AAAA,MACX,SAAS,IAAA,CAAK,OAAA;AAAA,MACd,QAAQ,IAAA,CAAK,MAAA;AAAA,MACb,UAAU,IAAA,CAAK,QAAA;AAAA,MACf,QAAQ,IAAA,CAAK,MAAA;AAAA,MACb,WAAW,IAAA,CAAK,SAAA;AAAA,MAChB,MAAM,IAAA,CAAK,IAAA;AAAA,MACX,OAAO,IAAA,CAAK;AAAA,KACd;AAAA,EACF;AAAA,EAEA,OAAO,YAAA,CACL,QAAA,EACA,QAAA,EACA;AACA,IAAA,MAAM,UAAU,QAAA,CAAS,YAAA;AACzB,IAAA,IAAI,OAAA,EAAS;AACX,MAAA,OAAO,IAAI,mBAAA,CAAmB;AAAA,QAC5B,MAAM,OAAA,CAAQ,IAAA;AAAA,QACd,SAAS,OAAA,CAAQ,OAAA;AAAA,QACjB,QAAQ,OAAA,CAAQ,MAAA;AAAA,QAChB,QAAA,EAAU,OAAA,CAAQ,QAAA,IAAY,QAAA,CAAS,QAAA;AAAA,QACvC,MAAA,EAAQ,OAAA,CAAQ,MAAA,IAAU,QAAA,CAAS,MAAA;AAAA,QACnC,SAAA,EAAW,OAAA,CAAQ,SAAA,IAAa,QAAA,CAAS,SAAA;AAAA,QACzC,MAAM,OAAA,CAAQ,IAAA;AAAA,QACd,OAAO,OAAA,CAAQ;AAAA,OAChB,CAAA;AAAA,IACH;AAEA,IAAA,OAAO,IAAI,mBAAA,CAAmB;AAAA,MAC5B,IAAA,EAAM,YAAA;AAAA,MACN,OAAA,EAAS,SAAS,KAAA,IAAS,wBAAA;AAAA,MAC3B,QAAQ,QAAA,CAAS,MAAA;AAAA,MACjB,UAAU,QAAA,CAAS,QAAA;AAAA,MACnB,QAAQ,QAAA,CAAS,MAAA;AAAA,MACjB,WAAW,QAAA,CAAS;AAAA,KACrB,CAAA;AAAA,EACH;AACF;AAEO,SAAS,qBAAqB,KAAA,EAA6C;AAChF,EAAA,OAAO,KAAA,YAAiB,kBAAA;AAC1B;;;ACxFO,SAAS,gBAAA,CACd,UACA,QAAA,EACS;AACT,EAAA,IAAI,CAAC,UAAU,OAAO,QAAA;AAEtB,EAAA,MAAM,UAAA,GAAa,QAAA,CAAS,IAAA,EAAK,CAAE,WAAA,EAAY;AAE/C,EAAA,IACE,eAAe,GAAA,IACf,UAAA,KAAe,UACf,UAAA,KAAe,KAAA,IACf,eAAe,IAAA,EACf;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,IACE,eAAe,GAAA,IACf,UAAA,KAAe,WACf,UAAA,KAAe,IAAA,IACf,eAAe,KAAA,EACf;AACA,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,OAAO,QAAA;AACT;;;ACbO,IAAM,eAAA,GAAkB;AAAA,EAC7B,eAAA,EAAiB,kBAAA;AAAA,EACjB,QAAA,EAAU,WAAA;AAAA,EACV,UAAA,EAAY,YAAA;AAAA,EACZ,IAAA,EAAM,MAAA;AAAA,EACN,SAAA,EAAW,YAAA;AAAA,EACX,SAAA,EAAW,WAAA;AAAA,EACX,OAAA,EAAS;AACX;AAcO,IAAM,eAAA,GAAkB;AAAA,EAC7B,eAAA,EAAiB,kBAAA;AAAA,EACjB,QAAA,EAAU,WAAA;AAAA,EACV,gBAAA,EAAkB,mBAAA;AAAA,EAClB,gBAAA,EAAkB,mBAAA;AAAA,EAClB,aAAA,EAAe,gBAAA;AAAA,EACf,WAAA,EAAa,cAAA;AAAA,EACb,kBAAA,EAAoB,qBAAA;AAAA,EACpB,gBAAA,EAAkB,mBAAA;AAAA,EAClB,WAAA,EAAa,cAAA;AAAA,EACb,OAAA,EAAS;AACX;AAIO,IAAM,mBAAA,GAAsB;AAAA,EACjC,SAAA,EAAW,WAAA;AAAA,EACX,MAAA,EAAQ,QAAA;AAAA,EACR,MAAA,EAAQ,QAAA;AAAA,EACR,QAAA,EAAU,UAAA;AAAA,EACV,OAAA,EAAS;AACX;AAuEO,SAASA,iBAAAA,CACd,UACA,QAAA,EACS;AACT,EAAA,OAAO,gBAAA,CAAqB,UAAU,QAAQ,CAAA;AAChD;AAEO,IAAM,WAAA,GAAN,cAA0B,KAAA,CAAM;AAAA,EAC5B,IAAA;AAAA,EACA,IAAA;AAAA,EACA,QAAA;AAAA,EACA,MAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,OAAA;AAAA,EACA,GAAA;AAAA,EAET,YAAY,KAAA,EAAyB;AACnC,IAAA,KAAA,CAAM,MAAM,OAAO,CAAA;AACnB,IAAA,IAAA,CAAK,IAAA,GAAO,aAAA;AACZ,IAAA,IAAA,CAAK,OAAO,KAAA,CAAM,IAAA;AAClB,IAAA,IAAA,CAAK,OAAO,KAAA,CAAM,IAAA;AAClB,IAAA,IAAA,CAAK,WAAW,KAAA,CAAM,QAAA;AACtB,IAAA,IAAA,CAAK,SAAS,KAAA,CAAM,MAAA;AACpB,IAAA,IAAA,CAAK,SAAA,GAAY,MAAM,SAAA,IAAa,KAAA;AACpC,IAAA,IAAA,CAAK,YAAY,KAAA,CAAM,SAAA;AACvB,IAAA,IAAA,CAAK,UAAU,KAAA,CAAM,OAAA;AACrB,IAAA,IAAA,CAAK,MAAM,KAAA,CAAM,GAAA;AAAA,EACnB;AACF;AAEA,SAAS,SAAS,KAAA,EAAkD;AAClE,EAAA,OAAO,OAAA,CAAQ,KAAK,CAAA,IAAK,OAAO,UAAU,QAAA,IAAY,CAAC,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA;AAC5E;AAEA,SAAS,uBAAuB,MAAA,EAAuC;AACrE,EAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AAC1B,IAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,MAAM,IAAA,EAAK,CAAE,SAAS,CAAA,EAAG;AACxD,MAAA,OAAO,MAAM,IAAA,EAAK;AAAA,IACpB;AAAA,EACF;AACA,EAAA,OAAO,MAAA;AACT;AAEA,SAAS,wBAAwB,KAAA,EAAoC;AACnE,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,MAAM,IAAA,EAAK,CAAE,SAAS,CAAA,EAAG;AACxD,IAAA,OAAO,MAAM,IAAA,EAAK;AAAA,EACpB;AACA,EAAA,IAAI,iBAAiB,KAAA,IAAS,KAAA,CAAM,QAAQ,IAAA,EAAK,CAAE,SAAS,CAAA,EAAG;AAC7D,IAAA,OAAO,KAAA,CAAM,QAAQ,IAAA,EAAK;AAAA,EAC5B;AACA,EAAA,IAAI,CAAC,QAAA,CAAS,KAAK,CAAA,EAAG;AACpB,IAAA,OAAO,MAAA;AAAA,EACT;AACA,EAAA,OAAO,oBAAoB,KAAA,CAAM,OAAA,EAAS,KAAA,CAAM,KAAA,EAAO,MAAM,OAAO,CAAA;AACtE;AAEA,SAAS,4BAA4B,KAAA,EAAoD;AACvF,EAAA,IAAI,CAAC,QAAA,CAAS,KAAK,KAAK,OAAO,KAAA,CAAM,gBAAgB,QAAA,EAAU;AAC7D,IAAA,OAAO,MAAA;AAAA,EACT;AACA,EAAA,OAAO,KAAA,CAAM,WAAA;AACf;AAEA,SAAS,wBACP,KAAA,EAYA;AACA,EAAA,OACE,SAAS,KAAK,CAAA,IACd,OAAO,KAAA,CAAM,OAAA,KAAY,aACxB,KAAA,CAAM,UAAA,KAAe,MAAA,IAAa,iBAAA,CAAkB,MAAM,UAAU,CAAA,CAAA,KACpE,MAAM,IAAA,KAAS,MAAA,IAAa,kBAAkB,KAAA,CAAM,IAAI,CAAA,CAAA,KACxD,KAAA,CAAM,aAAa,MAAA,IAAa,qBAAA,CAAsB,MAAM,QAAQ,CAAA,CAAA,KACpE,MAAM,SAAA,KAAc,MAAA,IAAa,OAAO,KAAA,CAAM,cAAc,SAAA,CAAA,KAC5D,KAAA,CAAM,WAAW,MAAA,IAAa,OAAO,MAAM,MAAA,KAAW,QAAA,CAAA;AAE3D;AAEA,SAAS,kBAAkB,KAAA,EAA0C;AACnE,EAAA,OACE,KAAA,KAAU,kBAAA,IACV,KAAA,KAAU,WAAA,IACV,KAAA,KAAU,YAAA,IACV,KAAA,KAAU,MAAA,IACV,KAAA,KAAU,YAAA,IACV,KAAA,KAAU,WAAA,IACV,KAAA,KAAU,SAAA;AAEd;AAEA,SAAS,kBAAkB,KAAA,EAA0C;AACnE,EAAA,OACE,UAAU,kBAAA,IACV,KAAA,KAAU,eACV,KAAA,KAAU,mBAAA,IACV,UAAU,mBAAA,IACV,KAAA,KAAU,gBAAA,IACV,KAAA,KAAU,kBACV,KAAA,KAAU,qBAAA,IACV,UAAU,mBAAA,IACV,KAAA,KAAU,kBACV,KAAA,KAAU,SAAA;AAEd;AAEA,SAAS,sBAAsB,KAAA,EAA8C;AAC3E,EAAA,OACE,KAAA,KAAU,eACV,KAAA,KAAU,QAAA,IACV,UAAU,QAAA,IACV,KAAA,KAAU,cACV,KAAA,KAAU,SAAA;AAEd;AAEA,SAAS,wBAAwB,KAAA,EAAgD;AAC/E,EAAA,OACE,QAAA,CAAS,KAAK,CAAA,IACd,iBAAA,CAAkB,MAAM,IAAI,CAAA,IAC5B,iBAAA,CAAkB,KAAA,CAAM,IAAI,CAAA,IAC5B,sBAAsB,KAAA,CAAM,QAAQ,CAAA,IACpC,OAAO,KAAA,CAAM,SAAA,KAAc,aAC3B,OAAO,KAAA,CAAM,OAAA,KAAY,QAAA,IACzB,KAAA,IAAS,KAAA;AAEb;AAEA,SAAS,oBAAA,CACP,YACA,OAAA,EACuB;AACvB,EAAA,IAAI,CAAC,OAAA,EAAS,KAAA,IAAS,CAAC,SAAS,SAAA,EAAW;AAC1C,IAAA,OAAO,UAAA;AAAA,EACT;AAEA,EAAA,OAAO;AAAA,IACL,GAAG,UAAA;AAAA,IACH,KAAA,EAAO,OAAA,CAAQ,KAAA,IAAS,UAAA,CAAW,KAAA;AAAA,IACnC,SAAA,EAAW,OAAA,CAAQ,SAAA,IAAa,UAAA,CAAW;AAAA,GAC7C;AACF;AAEA,SAAS,+BAA+B,aAAA,EAA2D;AACjG,EAAA,IAAI,CAAC,QAAA,CAAS,aAAa,CAAA,EAAG,OAAO,MAAA;AACrC,EAAA,IAAI,EAAE,yBAAA,IAA6B,aAAA,CAAA,EAAgB,OAAO,MAAA;AAC1D,EAAA,MAAM,YAAY,aAAA,CAAc,uBAAA;AAChC,EAAA,OAAO,uBAAA,CAAwB,SAAS,CAAA,GAAI,SAAA,GAAY,MAAA;AAC1D;AAEA,SAAS,cAAc,KAAA,EAAwB;AAC7C,EAAA,IAAI;AACF,IAAA,MAAM,UAAA,GAAa,IAAA,CAAK,SAAA,CAAU,KAAK,CAAA;AACvC,IAAA,OAAO,UAAA,IAAc,OAAO,KAAK,CAAA;AAAA,EACnC,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,kBAAA;AAAA,EACT;AACF;AAEA,SAAS,YAAY,OAAA,EAAsD;AACzE,EAAA,IAAI,CAAC,OAAA,EAAS,QAAA,EAAU,OAAO,MAAA;AAC/B,EAAA,MAAM,QAAA,GACJ,OAAO,OAAA,CAAQ,QAAA,KAAa,WAAW,OAAA,CAAQ,QAAA,GAAW,aAAA,CAAc,OAAA,CAAQ,QAAQ,CAAA;AAC1F,EAAA,OAAO,aAAa,QAAQ,CAAA,CAAA;AAC9B;AAEA,SAAS,mBAAmB,KAAA,EAAgD;AAC1E,EAAA,OACE,QAAA,CAAS,KAAK,CAAA,IACd,QAAA,IAAY,KAAA,IACZ,OAAA,IAAW,KAAA,IACX,MAAA,IAAU,KAAA,IACV,OAAO,KAAA,CAAM,MAAA,KAAW,QAAA;AAE5B;AAEA,SAAS,qBAAqB,OAAA,EAAgE;AAC5F,EAAA,IAAI,CAAC,OAAA,EAAS,QAAA,EAAU,OAAO,MAAA;AAC/B,EAAA,IAAI,QAAQ,QAAA,KAAa,gBAAA,IAAoB,OAAA,CAAQ,QAAA,KAAa,kBAAkB,OAAO,QAAA;AAC3F,EAAA,IAAI,OAAA,CAAQ,QAAA,KAAa,iBAAA,EAAmB,OAAO,QAAA;AACnD,EAAA,IAAI,OAAA,CAAQ,QAAA,KAAa,iBAAA,EAAmB,OAAO,QAAA;AACnD,EAAA,IAAI,OAAA,CAAQ,QAAA,KAAa,iBAAA,EAAmB,OAAO,QAAA;AACnD,EAAA,IAAI,OAAA,CAAQ,aAAa,cAAA,IAAkB,OAAA,CAAQ,SAAS,UAAA,CAAW,OAAO,GAAG,OAAO,KAAA;AACxF,EAAA,OAAO,MAAA;AACT;AAEA,SAAS,UAAA,CAAW,OAAe,QAAA,EAAwC;AACzE,EAAA,KAAA,MAAW,WAAW,QAAA,EAAU;AAC9B,IAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,IAAA,CAAK,KAAK,CAAA;AAChC,IAAA,IAAI,KAAA,GAAQ,CAAC,CAAA,EAAG,OAAO,MAAM,CAAC,CAAA;AAAA,EAChC;AACA,EAAA,OAAO,MAAA;AACT;AAEA,SAAS,kBAAkB,OAAA,EAAqC;AAC9D,EAAA,OAAO,WAAW,OAAA,EAAS;AAAA,IACzB,0CAAA;AAAA,IACA;AAAA,GACD,CAAA;AACH;AAEA,SAAS,aAAa,OAAA,EAAqC;AACzD,EAAA,OAAO,WAAW,OAAA,EAAS;AAAA,IACzB,2CAAA;AAAA,IACA;AAAA,GACD,CAAA;AACH;AAEA,SAAS,YAAA,CAAa,MAAA,EAA4B,IAAA,EAA0C,OAAA,EAAkC;AAC5H,EAAA,MAAM,KAAA,GAAQ,QAAQ,WAAA,EAAY;AAClC,EAAA,MAAM,gBAAA,GACJ,KAAA,CAAM,QAAA,CAAS,mBAAmB,KAClC,KAAA,CAAM,QAAA,CAAS,eAAe,CAAA,IAC9B,MAAM,QAAA,CAAS,gBAAgB,CAAA,IAC/B,KAAA,CAAM,SAAS,WAAW,CAAA;AAC5B,EAAA,MAAM,qBAAqB,KAAA,CAAM,QAAA,CAAS,WAAW,CAAA,IAAK,KAAA,CAAM,SAAS,SAAS,CAAA;AAClF,EAAA,MAAM,oBAAA,GACJ,KAAA,CAAM,QAAA,CAAS,YAAY,CAAA,IAAK,KAAA,CAAM,QAAA,CAAS,SAAS,CAAA,IAAK,KAAA,CAAM,QAAA,CAAS,WAAW,CAAA;AACzF,EAAA,MAAM,cAAA,GACJ,KAAA,CAAM,QAAA,CAAS,cAAc,CAAA,IAAK,KAAA,CAAM,QAAA,CAAS,WAAW,CAAA,IAAK,KAAA,CAAM,QAAA,CAAS,MAAM,CAAA;AACxF,EAAA,MAAM,sBAAsB,KAAA,CAAM,QAAA,CAAS,YAAY,CAAA,IAAK,KAAA,CAAM,SAAS,mBAAmB,CAAA;AAC9F,EAAA,MAAM,sBACJ,KAAA,CAAM,QAAA,CAAS,SAAS,CAAA,IACxB,KAAA,CAAM,SAAS,UAAU,CAAA,IACzB,MAAM,QAAA,CAAS,kBAAkB,KACjC,KAAA,CAAM,QAAA,CAAS,QAAQ,CAAA,IACvB,KAAA,CAAM,SAAS,UAAU,CAAA;AAE3B,EAAA,IAAI,MAAA,KAAW,GAAA,IAAO,gBAAA,EAAkB,OAAO,kBAAA;AAC/C,EAAA,IAAI,MAAA,KAAW,GAAA,IAAO,kBAAA,EAAoB,OAAO,WAAA;AACjD,EAAA,IAAI,MAAA,KAAW,GAAA,IAAO,MAAA,KAAW,GAAA,IAAO,gBAAgB,OAAO,MAAA;AAC/D,EAAA,IAAI,MAAA,KAAW,GAAA,IAAO,mBAAA,EAAqB,OAAO,YAAA;AAClD,EAAA,IAAI,IAAA,KAAS,eAAe,OAAO,YAAA;AACnC,EAAA,IAAI,MAAA,KAAW,GAAA,IAAO,MAAA,KAAW,GAAA,IAAO,sBAAsB,OAAO,YAAA;AACrE,EAAA,IAAI,IAAA,KAAS,mBAAmB,MAAA,KAAW,CAAA,IAAM,WAAW,MAAA,IAAa,MAAA,IAAU,OAAQ,mBAAA,EAAqB;AAC9G,IAAA,OAAO,WAAA;AAAA,EACT;AACA,EAAA,OAAO,SAAA;AACT;AAEA,SAAS,iBAAA,CACP,IAAA,EACA,MAAA,EACA,WAAA,EACiB;AACjB,EAAA,IAAI,gBAAgB,aAAA,EAAe;AACjC,IAAA,OAAO,eAAA,CAAgB,gBAAA;AAAA,EACzB;AAEA,EAAA,IAAI,WAAA,KAAgB,eAAA,IAAoB,IAAA,KAAS,WAAA,IAAe,WAAW,CAAA,EAAI;AAC7E,IAAA,OAAO,eAAA,CAAgB,kBAAA;AAAA,EACzB;AAEA,EAAA,QAAQ,IAAA;AAAM,IACZ,KAAK,kBAAA;AACH,MAAA,OAAO,eAAA,CAAgB,eAAA;AAAA,IACzB,KAAK,WAAA;AACH,MAAA,OAAO,eAAA,CAAgB,QAAA;AAAA,IACzB,KAAK,YAAA;AACH,MAAA,OAAO,eAAA,CAAgB,gBAAA;AAAA,IACzB,KAAK,YAAA;AACH,MAAA,OAAO,eAAA,CAAgB,WAAA;AAAA,IACzB,KAAK,MAAA;AACH,MAAA,IAAI,WAAW,GAAA,EAAK;AAClB,QAAA,OAAO,eAAA,CAAgB,aAAA;AAAA,MACzB;AACA,MAAA,OAAO,eAAA,CAAgB,gBAAA;AAAA,IACzB,KAAK,WAAA;AACH,MAAA,OAAO,WAAW,MAAA,IAAa,MAAA,IAAU,GAAA,GACrC,eAAA,CAAgB,cAChB,eAAA,CAAgB,gBAAA;AAAA,IACtB,KAAK,SAAA;AAAA,IACL;AACE,MAAA,OAAO,WAAW,MAAA,IAAa,MAAA,IAAU,GAAA,GACrC,eAAA,CAAgB,cAChB,eAAA,CAAgB,OAAA;AAAA;AAE1B;AAEA,SAAS,qBAAA,CAAsB,MAAuB,MAAA,EAAiD;AACrG,EAAA,IAAI,IAAA,KAAS,WAAA,KAAgB,MAAA,KAAW,CAAA,IAAK,WAAW,MAAA,CAAA,EAAY;AAClE,IAAA,OAAO,mBAAA,CAAoB,SAAA;AAAA,EAC7B;AACA,EAAA,IAAI,IAAA,KAAS,kBAAA,EAAoB,OAAO,mBAAA,CAAoB,QAAA;AAC5D,EAAA,IAAI,SAAS,YAAA,IAAgB,IAAA,KAAS,UAAU,IAAA,KAAS,WAAA,SAAoB,mBAAA,CAAoB,MAAA;AACjG,EAAA,IAAI,IAAA,KAAS,YAAA,IAAgB,IAAA,KAAS,WAAA,SAAoB,mBAAA,CAAoB,MAAA;AAC9E,EAAA,OAAO,mBAAA,CAAoB,OAAA;AAC7B;AAEA,SAAS,WAAA,CAAY,MAAuB,MAAA,EAAqC;AAC/E,EAAA,IAAI,IAAA,KAAS,YAAA,IAAgB,IAAA,KAAS,WAAA,EAAa,OAAO,IAAA;AAC1D,EAAA,OAAO,MAAA,KAAW,UAAa,MAAA,IAAU,GAAA;AAC3C;AAEA,SAAS,aAAA,CAAc,MAAuB,MAAA,EAAyC;AACrF,EAAA,IAAI,SAAS,WAAA,KAAgB,MAAA,KAAW,CAAA,IAAK,MAAA,KAAW,SAAY,OAAO,eAAA;AAC3E,EAAA,IAAI,IAAA,KAAS,cAAc,OAAO,cAAA;AAClC,EAAA,IAAI,MAAA,KAAW,MAAA,IAAa,MAAA,IAAU,GAAA,EAAK,OAAO,YAAA;AAClD,EAAA,OAAO,eAAA;AACT;AAEA,SAAS,oBAAA,CACP,MAAA,EACA,eAAA,EACA,OAAA,EACoB;AACpB,EAAA,IAAI,oBAAA,CAAqB,MAAM,CAAA,EAAG;AAChC,IAAA,OAAO,MAAA;AAAA,EACT;AAEA,EAAA,IAAI,kBAAA,CAAmB,MAAM,CAAA,IAAK,MAAA,CAAO,YAAA,EAAc;AACrD,IAAA,MAAMC,WACJ,uBAAA,CAAwB,MAAA,CAAO,KAAK,CAAA,IACpC,MAAA,CAAO,aAAa,OAAA,IACpB,eAAA;AACF,IAAA,OAAO,IAAI,kBAAA,CAAmB;AAAA,MAC5B,IAAA,EAAM,OAAO,YAAA,CAAa,IAAA;AAAA,MAC1B,OAAA,EAAAA,QAAAA;AAAA,MACA,QAAQ,MAAA,CAAO,MAAA;AAAA,MACf,QAAA,EAAU,OAAO,YAAA,CAAa,QAAA;AAAA,MAC9B,MAAA,EAAQ,OAAO,YAAA,CAAa,MAAA;AAAA,MAC5B,SAAA,EAAW,OAAO,YAAA,CAAa,SAAA;AAAA,MAC/B,IAAA,EAAA,CACG,QAAA,CAAS,MAAA,CAAO,KAAK,CAAA,GAAI,mBAAA,CAAoB,MAAA,CAAO,KAAA,CAAM,IAAI,CAAA,GAAI,MAAA,KACnE,MAAA,CAAO,YAAA,CAAa,IAAA;AAAA,MACtB,KAAA,EAAA,CACG,QAAA,CAAS,MAAA,CAAO,KAAK,CAAA,GAAI,mBAAA,CAAoB,MAAA,CAAO,KAAA,CAAM,KAAK,CAAA,GAAI,MAAA,KACpE,MAAA,CAAO,YAAA,CAAa;AAAA,KACvB,CAAA;AAAA,EACH;AAEA,EAAA,MAAM,UAAA,GAAa,oBAAA,CAAqB,MAAA,EAAQ,OAAO,CAAA;AACvD,EAAA,MAAM,OAAA,GACJ,kBAAA,CAAmB,MAAM,CAAA,IAAK,MAAA,CAAO,KAAA,IAAS,IAAA,IAAQ,MAAA,CAAO,YAAA,IAAgB,IAAA,GACzE,eAAA,GACA,UAAA,CAAW,OAAA,IAAW,eAAA;AAE5B,EAAA,OAAO,IAAI,kBAAA,CAAmB;AAAA,IAC5B,IAAA,EAAM,aAAA,CAAc,UAAA,CAAW,IAAA,EAAM,WAAW,MAAM,CAAA;AAAA,IACtD,OAAA;AAAA,IACA,MAAA,EAAQ,WAAW,MAAA,IAAU,CAAA;AAAA,IAC7B,IAAA,EACE,WAAW,UAAA,IAAc,IAAA,GACrB,eAAe,UAAA,CAAW,UAAU,CAAA,CAAA,GACpC,WAAA,CAAY,OAAO,CAAA;AAAA,IACzB,KAAA,EAAO,OAAO,UAAA,CAAW,GAAA,KAAQ,WAAW,UAAA,CAAW,GAAA,GAAM,aAAA,CAAc,UAAA,CAAW,GAAG;AAAA,GAC1F,CAAA;AACH;AAKO,SAAS,KAAQ,MAAA,EAAkC;AACxD,EAAA,OAAO,OAAO,KAAA,IAAS,IAAA,IAAQ,OAAO,MAAA,IAAU,GAAA,IAAO,OAAO,MAAA,GAAS,GAAA;AACzE;AAYO,SAAS,oBAAA,CACd,eACA,OAAA,EACuB;AACvB,EAAA,MAAM,QAAA,GAAW,+BAA+B,aAAa,CAAA;AAC7D,EAAA,IAAI,QAAA,EAAU;AACZ,IAAA,OAAO,oBAAA,CAAqB,UAAU,OAAO,CAAA;AAAA,EAC/C;AAEA,EAAA,IAAI,kBAAA,CAAmB,aAAa,CAAA,EAAG;AACrC,IAAA,IAAI,uBAAA,CAAwB,aAAA,CAAc,KAAK,CAAA,EAAG;AAChD,MAAA,OAAO;AAAA,QACL,IAAA,EAAM,aAAA,CAAc,KAAA,CAAM,IAAA,IAAQ,YAAA,CAAa,aAAA,CAAc,MAAA,EAAQ,2BAAA,CAA4B,aAAA,CAAc,KAAK,CAAA,EAAG,aAAA,CAAc,MAAM,OAAO,CAAA;AAAA,QAClJ,IAAA,EACE,aAAA,CAAc,KAAA,CAAM,UAAA,IACpB,iBAAA;AAAA,UACE,aAAA,CAAc,MAAM,IAAA,IAClB,YAAA;AAAA,YACE,aAAA,CAAc,MAAA;AAAA,YACd,2BAAA,CAA4B,cAAc,KAAK,CAAA;AAAA,YAC/C,cAAc,KAAA,CAAM;AAAA,WACtB;AAAA,UACF,aAAA,CAAc,KAAA,CAAM,MAAA,IAAU,aAAA,CAAc,MAAA;AAAA,UAC5C,2BAAA,CAA4B,cAAc,KAAK;AAAA,SACjD;AAAA,QACF,QAAA,EACE,aAAA,CAAc,KAAA,CAAM,QAAA,IACpB,qBAAA;AAAA,UACE,aAAA,CAAc,MAAM,IAAA,IAClB,YAAA;AAAA,YACE,aAAA,CAAc,MAAA;AAAA,YACd,2BAAA,CAA4B,cAAc,KAAK,CAAA;AAAA,YAC/C,cAAc,KAAA,CAAM;AAAA,WACtB;AAAA,UACF,aAAA,CAAc,KAAA,CAAM,MAAA,IAAU,aAAA,CAAc;AAAA,SAC9C;AAAA,QACF,SAAA,EACE,aAAA,CAAc,KAAA,CAAM,SAAA,IACpB,WAAA;AAAA,UACE,aAAA,CAAc,MAAM,IAAA,IAClB,YAAA;AAAA,YACE,aAAA,CAAc,MAAA;AAAA,YACd,2BAAA,CAA4B,cAAc,KAAK,CAAA;AAAA,YAC/C,cAAc,KAAA,CAAM;AAAA,WACtB;AAAA,UACF,aAAA,CAAc,KAAA,CAAM,MAAA,IAAU,aAAA,CAAc;AAAA,SAC9C;AAAA,QACF,MAAA,EAAQ,aAAA,CAAc,KAAA,CAAM,MAAA,IAAU,aAAA,CAAc,MAAA;AAAA,QACpD,UAAA,EAAY,cAAc,KAAA,CAAM,UAAA;AAAA,QAChC,KAAA,EAAO,OAAA,EAAS,KAAA,IAAS,aAAA,CAAc,KAAA,CAAM,KAAA;AAAA,QAC7C,SAAA,EAAW,OAAA,EAAS,SAAA,IAAa,aAAA,CAAc,KAAA,CAAM,SAAA;AAAA,QACrD,OAAA,EAAS,cAAc,KAAA,CAAM,OAAA;AAAA,QAC7B,GAAA,EAAK,aAAA,CAAc,KAAA,CAAM,GAAA,IAAO,aAAA,CAAc;AAAA,OAChD;AAAA,IACF;AAEA,IAAA,MAAM,UAAU,aAAA,CAAc,YAAA;AAC9B,IAAA,MAAMA,QAAAA,GACJ,uBAAA,CAAwB,aAAA,CAAc,KAAK,CAAA,IAC3C,OAAA,EAAS,OAAA,IACT,CAAA,OAAA,EAAU,OAAA,EAAS,SAAA,IAAa,oBAAA,CAAqB,OAAO,KAAK,SAAS,CAAA,OAAA,CAAA;AAC5E,IAAA,MAAM,SAAA,GAAY,OAAA,EAAS,SAAA,IAAa,oBAAA,CAAqB,OAAO,CAAA;AACpE,IAAA,MAAMC,MAAAA,GAAQ,OAAA,EAAS,KAAA,IAAS,YAAA,CAAaD,QAAO,CAAA;AACpD,IAAA,MAAM,UAAA,GAAa,kBAAkBA,QAAO,CAAA;AAC5C,IAAA,MAAM,WAAA,GAAc,OAAA,EAAS,IAAA,IAAQ,2BAAA,CAA4B,cAAc,KAAK,CAAA;AACpF,IAAA,MAAME,KAAAA,GAAO,YAAA,CAAa,aAAA,CAAc,MAAA,EAAQ,aAAaF,QAAO,CAAA;AACpE,IAAA,MAAM,IAAA,GAAO,iBAAA,CAAkBE,KAAAA,EAAM,aAAA,CAAc,QAAQ,WAAW,CAAA;AACtE,IAAA,MAAM,QAAA,GAAW,qBAAA,CAAsBA,KAAAA,EAAM,aAAA,CAAc,MAAM,CAAA;AACjE,IAAA,OAAO;AAAA,MACL,IAAA,EAAAA,KAAAA;AAAA,MACA,IAAA;AAAA,MACA,QAAA;AAAA,MACA,SAAA,EAAW,WAAA,CAAYA,KAAAA,EAAM,aAAA,CAAc,MAAM,CAAA;AAAA,MACjD,QAAQ,aAAA,CAAc,MAAA;AAAA,MACtB,UAAA;AAAA,MACA,KAAA,EAAAD,MAAAA;AAAA,MACA,SAAA;AAAA,MACA,OAAA,EAAAD,QAAAA;AAAA,MACA,KAAK,aAAA,CAAc;AAAA,KACrB;AAAA,EACF;AAEA,EAAA,IAAI,oBAAA,CAAqB,aAAa,CAAA,EAAG;AACvC,IAAA,MAAM,OAAA,GAAU,cAAc,SAAA,EAAU;AACxC,IAAA,MAAM,SAAA,GAAY,OAAA,EAAS,SAAA,IAAa,oBAAA,CAAqB,OAAO,CAAA;AACpE,IAAA,MAAMC,MAAAA,GAAQ,OAAA,EAAS,KAAA,IAAS,YAAA,CAAa,cAAc,OAAO,CAAA;AAClE,IAAA,MAAM,UAAA,GAAa,iBAAA,CAAkB,aAAA,CAAc,OAAO,CAAA;AAC1D,IAAA,MAAMC,QAAO,YAAA,CAAa,aAAA,CAAc,QAAQ,aAAA,CAAc,IAAA,EAAM,cAAc,OAAO,CAAA;AACzF,IAAA,MAAM,OAAO,iBAAA,CAAkBA,KAAAA,EAAM,aAAA,CAAc,MAAA,EAAQ,cAAc,IAAI,CAAA;AAC7E,IAAA,MAAM,QAAA,GAAW,qBAAA,CAAsBA,KAAAA,EAAM,aAAA,CAAc,MAAM,CAAA;AACjE,IAAA,OAAO;AAAA,MACL,IAAA,EAAAA,KAAAA;AAAA,MACA,IAAA;AAAA,MACA,QAAA;AAAA,MACA,SAAA,EAAW,WAAA,CAAYA,KAAAA,EAAM,aAAA,CAAc,MAAM,CAAA;AAAA,MACjD,QAAQ,aAAA,CAAc,MAAA;AAAA,MACtB,UAAA;AAAA,MACA,KAAA,EAAAD,MAAAA;AAAA,MACA,SAAA;AAAA,MACA,SAAS,aAAA,CAAc,OAAA;AAAA,MACvB,GAAA,EAAK;AAAA,KACP;AAAA,EACF;AAEA,EAAA,IAAI,yBAAyB,KAAA,EAAO;AAClC,IAAA,MAAM,WAAA,GACJ,SAAS,aAAa,CAAA,IAAK,OAAO,aAAA,CAAc,MAAA,KAAW,QAAA,GACvD,aAAA,CAAc,MAAA,GACd,MAAA;AACN,IAAA,MAAMC,KAAAA,GAAO,YAAA,CAAa,WAAA,EAAa,MAAA,EAAW,cAAc,OAAO,CAAA;AACvE,IAAA,OAAO;AAAA,MACL,IAAA,EAAAA,KAAAA;AAAA,MACA,IAAA,EAAM,iBAAA,CAAkBA,KAAAA,EAAM,WAAW,CAAA;AAAA,MACzC,QAAA,EAAU,qBAAA,CAAsBA,KAAAA,EAAM,WAAW,CAAA;AAAA,MACjD,SAAA,EAAW,WAAA,CAAYA,KAAAA,EAAM,WAAW,CAAA;AAAA,MACxC,MAAA,EAAQ,WAAA;AAAA,MACR,UAAA,EAAY,iBAAA,CAAkB,aAAA,CAAc,OAAO,CAAA;AAAA,MACnD,KAAA,EAAO,OAAA,EAAS,KAAA,IAAS,YAAA,CAAa,cAAc,OAAO,CAAA;AAAA,MAC3D,WAAW,OAAA,EAAS,SAAA;AAAA,MACpB,SAAS,aAAA,CAAc,OAAA;AAAA,MACvB,GAAA,EAAK;AAAA,KACP;AAAA,EACF;AAEA,EAAA,MAAM,OAAA,GAAU,OAAO,aAAA,KAAkB,QAAA,GAAW,aAAA,GAAgB,sBAAA;AACpE,EAAA,MAAM,IAAA,GAAO,YAAA,CAAa,MAAA,EAAW,MAAA,EAAW,OAAO,CAAA;AACvD,EAAA,OAAO;AAAA,IACL,IAAA;AAAA,IACA,IAAA,EAAM,iBAAA,CAAkB,IAAA,EAAM,MAAS,CAAA;AAAA,IACvC,QAAA,EAAU,qBAAA,CAAsB,IAAA,EAAM,MAAS,CAAA;AAAA,IAC/C,SAAA,EAAW,WAAA,CAAY,IAAA,EAAM,MAAS,CAAA;AAAA,IACtC,MAAA,EAAQ,MAAA;AAAA,IACR,UAAA,EAAY,kBAAkB,OAAO,CAAA;AAAA,IACrC,KAAA,EAAO,OAAA,EAAS,KAAA,IAAS,YAAA,CAAa,OAAO,CAAA;AAAA,IAC7C,WAAW,OAAA,EAAS,SAAA;AAAA,IACpB,OAAA;AAAA,IACA,GAAA,EAAK;AAAA,GACP;AACF;AASO,SAAS,UAAA,CACd,QACA,OAAA,EACK;AACL,EAAA,IAAI,CAAC,IAAA,CAAK,MAAM,CAAA,EAAG;AACjB,IAAA,MAAM,oBAAA,CAAqB,MAAA,EAAQ,uBAAA,EAAyB,OAAA,EAAS,OAAO,CAAA;AAAA,EAC9E;AACA,EAAA,IAAI,MAAA,CAAO,IAAA,IAAQ,IAAA,EAAM,OAAO,EAAC;AACjC,EAAA,OAAO,KAAA,CAAM,QAAQ,MAAA,CAAO,IAAI,IAAI,MAAA,CAAO,IAAA,GAAO,CAAC,MAAA,CAAO,IAAI,CAAA;AAChE;AAYO,SAAS,MAAA,CACd,QACA,OAAA,EACU;AACV,EAAA,IAAI,CAAC,IAAA,CAAK,MAAM,CAAA,EAAG;AACjB,IAAA,MAAM,oBAAA,CAAqB,MAAA,EAAQ,uBAAA,EAAyB,OAAA,EAAS,OAAO,CAAA;AAAA,EAC9E;AACA,EAAA,IAAI,MAAA,CAAO,IAAA,IAAQ,IAAA,IAAQ,CAAC,SAAS,SAAA,EAAW;AAC9C,IAAA,MAAM,oBAAA,CAAqB,MAAA,EAAQ,iCAAA,EAAmC,OAAA,EAAS,OAAO,CAAA;AAAA,EACxF;AACA,EAAA,OAAO,MAAA,CAAO,IAAA;AAChB;AAcO,SAAS,SAAA,CACd,QACA,OAAA,EACU;AACV,EAAA,MAAM,IAAA,GAAO,UAAA,CAAW,MAAA,EAAQ,OAAO,CAAA;AACvC,EAAA,IAAI,CAAC,KAAK,MAAA,EAAQ;AAChB,IAAA,IAAI,OAAA,EAAS,WAAW,OAAO,IAAA;AAC/B,IAAA,MAAM,oBAAA,CAAqB,MAAA,EAAQ,oCAAA,EAAsC,OAAA,EAAS,OAAO,CAAA;AAAA,EAC3F;AACA,EAAA,IAAI,OAAA,EAAS,iBAAA,IAAqB,IAAA,CAAK,MAAA,KAAW,CAAA,EAAG;AACnD,IAAA,MAAM,oBAAA;AAAA,MACJ,MAAA;AAAA,MACA,CAAA,sCAAA,EAAyC,KAAK,MAAM,CAAA,CAAA;AAAA,MACpD,OAAA,CAAQ;AAAA,KACV;AAAA,EACF;AACA,EAAA,OAAO,KAAK,CAAC,CAAA;AACf;AAOO,SAAS,cAAA,CACd,QACA,OAAA,EACiB;AACjB,EAAA,IAAI,CAAC,IAAA,CAAK,MAAM,CAAA,EAAG;AACjB,IAAA,MAAM,oBAAA;AAAA,MACJ,MAAA;AAAA,MACA,CAAA,OAAA,EAAU,OAAA,EAAS,SAAA,IAAa,SAAS,CAAA,OAAA,CAAA;AAAA,MACzC;AAAA,KACF;AAAA,EACF;AACA,EAAA,OAAO,MAAA;AACT;AAWO,SAAS,eAAA,CACd,MAAA,EACA,OAAA,EACA,OAAA,EACQ;AACR,EAAA,cAAA,CAAe,QAAQ,OAAO,CAAA;AAE9B,EAAA,MAAM,OAAA,GAAU,SAAS,GAAA,IAAO,CAAA;AAChC,EAAA,MAAM,QAAQ,MAAA,CAAO,KAAA;AACrB,EAAA,IAAI,SAAS,IAAA,EAAM;AACjB,IAAA,MAAM,IAAI,kBAAA,CAAmB;AAAA,MAC3B,IAAA,EAAM,eAAA;AAAA,MACN,QAAQ,MAAA,CAAO,MAAA;AAAA,MACf,OAAA,EAAS,2DAAA;AAAA,MACT,IAAA,EAAM,uEAAA;AAAA,MACN,KAAA,EAAO,aAAA,CAAc,MAAA,CAAO,GAAG;AAAA,KAChC,CAAA;AAAA,EACH;AAEA,EAAA,IAAI,QAAQ,OAAA,EAAS;AACnB,IAAA,MAAM,IAAI,kBAAA,CAAmB;AAAA,MAC3B,IAAA,EAAM,eAAA;AAAA,MACN,QAAQ,MAAA,CAAO,MAAA;AAAA,MACf,OAAA,EAAS,CAAA,kBAAA,EAAqB,OAAO,CAAA,4BAAA,EAA+B,KAAK,CAAA,CAAA;AAAA,MACzE,IAAA,EAAM,YAAY,OAAO,CAAA;AAAA,MACzB,KAAA,EAAO,aAAA,CAAc,MAAA,CAAO,GAAG;AAAA,KAChC,CAAA;AAAA,EACH;AAEA,EAAA,OAAO,KAAA;AACT;AAEA,SAAS,WAAA,CAAY,OAAe,OAAA,EAA6C;AAC/E,EAAA,IAAI,SAAS,GAAA,KAAQ,MAAA,IAAa,KAAA,GAAQ,OAAA,CAAQ,KAAK,OAAO,IAAA;AAC9D,EAAA,IAAI,SAAS,GAAA,KAAQ,MAAA,IAAa,KAAA,GAAQ,OAAA,CAAQ,KAAK,OAAO,IAAA;AAC9D,EAAA,OAAO,KAAA;AACT;AAEA,SAAS,mBAAmB,KAAA,EAA8B;AACxD,EAAA,MAAM,UAAA,GAAa,MAAM,IAAA,EAAK;AAC9B,EAAA,IAAI,CAAC,YAAA,CAAa,IAAA,CAAK,UAAU,GAAG,OAAO,IAAA;AAC3C,EAAA,MAAM,MAAA,GAAS,OAAO,UAAU,CAAA;AAChC,EAAA,IAAI,CAAC,MAAA,CAAO,QAAA,CAAS,MAAM,CAAA,IAAK,CAAC,MAAA,CAAO,SAAA,CAAU,MAAM,CAAA,EAAG,OAAO,IAAA;AAClE,EAAA,OAAO,MAAA;AACT;AAOO,SAAS,SAAA,CAAU,OAAgB,OAAA,EAA6C;AACrF,EAAA,IAAI,KAAA,IAAS,MAAM,OAAO,IAAA;AAE1B,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,IAAA,IAAI,CAAC,MAAA,CAAO,QAAA,CAAS,KAAK,CAAA,IAAK,CAAC,MAAA,CAAO,SAAA,CAAU,KAAK,CAAA,EAAG,OAAO,IAAA;AAChE,IAAA,OAAO,WAAA,CAAY,OAAO,OAAO,CAAA;AAAA,EACnC;AAEA,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,IAAA,MAAM,MAAA,GAAS,mBAAmB,KAAK,CAAA;AACvC,IAAA,IAAI,MAAA,IAAU,MAAM,OAAO,IAAA;AAC3B,IAAA,OAAO,WAAA,CAAY,QAAQ,OAAO,CAAA;AAAA,EACpC;AAEA,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,IAAA,IAAI,SAAS,YAAA,EAAc;AACzB,MAAA,IAAI,KAAA,GAAQ,OAAO,MAAA,CAAO,gBAAgB,KAAK,KAAA,GAAQ,MAAA,CAAO,MAAA,CAAO,gBAAgB,CAAA,EAAG;AACtF,QAAA,OAAO,IAAA;AAAA,MACT;AAAA,IACF;AACA,IAAA,MAAM,MAAA,GAAS,OAAO,KAAK,CAAA;AAC3B,IAAA,IAAI,CAAC,MAAA,CAAO,QAAA,CAAS,MAAM,CAAA,IAAK,CAAC,MAAA,CAAO,SAAA,CAAU,MAAM,CAAA,EAAG,OAAO,IAAA;AAClE,IAAA,OAAO,WAAA,CAAY,QAAQ,OAAO,CAAA;AAAA,EACpC;AAEA,EAAA,OAAO,IAAA;AACT;AAOO,SAAS,SAAA,CAAU,KAAA,EAAgB,KAAA,GAAQ,OAAA,EAAS,OAAA,EAAsC;AAC/F,EAAA,MAAM,MAAA,GAAS,SAAA,CAAU,KAAA,EAAO,OAAO,CAAA;AACvC,EAAA,IAAI,UAAU,IAAA,EAAM;AAClB,IAAA,MAAM,IAAI,SAAA,CAAU,CAAA,EAAG,KAAK,CAAA,yBAAA,CAA2B,CAAA;AAAA,EACzD;AACA,EAAA,OAAO,MAAA;AACT;AAEA,SAAS,mBAAmB,KAAA,EAAyB;AACnD,EAAA,MAAM,UAAA,GAAa,qBAAqB,KAAK,CAAA;AAC7C,EAAA,OAAO,UAAA,CAAW,IAAA,KAAS,WAAA,IAAe,UAAA,CAAW,IAAA,KAAS,YAAA;AAChE;AAEA,SAAS,cAAA,CACP,OAAA,EACA,KAAA,EACA,MAAA,EACQ;AACR,EAAA,MAAM,YAAY,MAAA,CAAO,WAAA;AACzB,EAAA,MAAM,QAAA,GACJ,OAAO,MAAA,CAAO,OAAA,KAAY,aACtB,MAAA,CAAO,OAAA,CAAQ,SAAS,KAAK,CAAA,GAC7B,OAAO,OAAA,KAAY,QAAA,GACjB,YAAY,OAAA,GACZ,SAAA,GAAY,KAAK,GAAA,CAAI,CAAA,EAAG,UAAU,CAAC,CAAA;AAE3C,EAAA,MAAM,SAAA,GAAY,OAAO,QAAA,CAAS,QAAQ,IAAI,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,QAAQ,CAAA,GAAI,CAAA;AACtE,EAAA,MAAM,OAAA,GAAU,IAAA,CAAK,GAAA,CAAI,MAAA,CAAO,YAAY,SAAS,CAAA;AACrD,EAAA,MAAM,eACJ,OAAO,MAAA,CAAO,MAAA,KAAW,QAAA,GACrB,KAAK,GAAA,CAAI,CAAA,EAAG,IAAA,CAAK,GAAA,CAAI,GAAG,MAAA,CAAO,MAAM,CAAC,CAAA,GACtC,MAAA,CAAO,SACL,GAAA,GACA,CAAA;AAER,EAAA,IAAI,CAAC,cAAc,OAAO,OAAA;AAC1B,EAAA,MAAM,YAAY,OAAA,GAAU,YAAA;AAC5B,EAAA,MAAM,MAAA,GAAA,CAAU,IAAA,CAAK,MAAA,EAAO,GAAI,IAAI,CAAA,IAAK,SAAA;AACzC,EAAA,OAAO,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,OAAA,GAAU,MAAM,CAAA;AACrC;AAEA,SAAS,MAAM,EAAA,EAA2B;AACxC,EAAA,IAAI,EAAA,IAAM,CAAA,EAAG,OAAO,OAAA,CAAQ,OAAA,EAAQ;AACpC,EAAA,OAAO,IAAI,OAAA,CAAQ,CAAAC,QAAAA,KAAW;AAC5B,IAAA,UAAA,CAAWA,UAAS,EAAE,CAAA;AAAA,EACxB,CAAC,CAAA;AACH;AAYA,eAAsB,SAAA,CAAa,QAAqB,EAAA,EAAkC;AACxF,EAAA,MAAM,OAAA,GAAU,KAAK,GAAA,CAAI,CAAA,EAAG,KAAK,KAAA,CAAM,MAAA,CAAO,OAAO,CAAC,CAAA;AACtD,EAAA,MAAM,WAAA,GAAc,OAAO,WAAA,IAAe,kBAAA;AAC1C,EAAA,MAAM,cAAA,GAAiB;AAAA,IACrB,WAAA,EAAa,OAAO,WAAA,IAAe,GAAA;AAAA,IACnC,UAAA,EAAY,OAAO,UAAA,IAAc,GAAA;AAAA,IACjC,OAAA,EAAS,OAAO,OAAA,IAAW,aAAA;AAAA,IAC3B,MAAA,EAAQ,OAAO,MAAA,IAAU;AAAA,GAC3B;AAEA,EAAA,KAAA,IAAS,QAAA,GAAW,CAAA,EAAG,QAAA,IAAY,OAAA,EAAS,YAAY,CAAA,EAAG;AACzD,IAAA,IAAI;AACF,MAAA,OAAO,MAAM,EAAA,EAAG;AAAA,IAClB,SAAS,KAAA,EAAO;AACd,MAAA,IAAI,YAAY,OAAA,EAAS;AACvB,QAAA,MAAM,KAAA;AAAA,MACR;AAEA,MAAA,MAAM,iBAAiB,QAAA,GAAW,CAAA;AAClC,MAAA,MAAM,KAAA,GAAQ,MAAM,WAAA,CAAY,KAAA,EAAO,cAAc,CAAA;AACrD,MAAA,IAAI,CAAC,KAAA,EAAO;AACV,QAAA,MAAM,KAAA;AAAA,MACR;AAEA,MAAA,MAAM,KAAA,GAAQ,cAAA,CAAe,cAAA,EAAgB,KAAA,EAAO,cAAc,CAAA;AAClE,MAAA,MAAM,MAAM,KAAK,CAAA;AAAA,IACnB;AAAA,EACF;AAEA,EAAA,MAAM,IAAI,MAAM,uCAAuC,CAAA;AACzD;;;ACz4BA,IAAM,2BAAA,GAA8B,yBAAA;AAEpC,IAAM,iBAAA,GAAiC;AAAA,EACrC,OAAA,EAAS,CAAA;AAAA,EACT,WAAA,EAAa,GAAA;AAAA,EACb,UAAA,EAAY,GAAA;AAAA,EACZ,OAAA,EAAS,aAAA;AAAA,EACT,MAAA,EAAQ;AACV,CAAA;AA0CA,SAAS,aAAgB,QAAA,EAAqD;AAC5E,EAAA,MAAM,MAAA,GAA0B;AAAA,IAC9B,IAAA,EAAM,SAAS,IAAA,IAAQ,IAAA;AAAA,IACvB,KAAA,EAAO,IAAA;AAAA,IACP,YAAA,EAAc,SAAS,YAAA,IAAgB,IAAA;AAAA,IACvC,QAAQ,QAAA,CAAS,MAAA;AAAA,IACjB,UAAA,EAAY,SAAS,UAAA,IAAc,IAAA;AAAA,IACnC,KAAK,QAAA,CAAS;AAAA,GAChB;AACA,EAAA,IAAI,QAAA,CAAS,UAAU,MAAA,EAAW;AAChC,IAAA,MAAA,CAAO,QAAQ,QAAA,CAAS,KAAA;AAAA,EAC1B;AACA,EAAA,OAAO,MAAA;AACT;AAEA,SAAS,qBAAA,CACP,QACA,eAAA,EACM;AACN,EAAA,MAAA,CAAO,cAAA,CAAe,QAAQ,2BAAA,EAA6B;AAAA,IACzD,KAAA,EAAO,eAAA;AAAA,IACP,UAAA,EAAY,KAAA;AAAA,IACZ,YAAA,EAAc,IAAA;AAAA,IACd,QAAA,EAAU;AAAA,GACX,CAAA;AACH;AAEA,SAASC,UAAS,KAAA,EAAkD;AAClE,EAAA,OAAO,OAAA,CAAQ,KAAK,CAAA,IAAK,OAAO,UAAU,QAAA,IAAY,CAAC,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA;AAC5E;AAEA,SAASC,wBAAuB,MAAA,EAAuC;AACrE,EAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AAC1B,IAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,MAAM,IAAA,EAAK,CAAE,SAAS,CAAA,EAAG;AACxD,MAAA,OAAO,MAAM,IAAA,EAAK;AAAA,IACpB;AAAA,EACF;AACA,EAAA,OAAO,MAAA;AACT;AAEA,SAAS,8BAA8B,GAAA,EAA8C;AACnF,EAAA,IAAI,CAACD,SAAAA,CAAS,GAAG,CAAA,EAAG,OAAO,IAAA;AAC3B,EAAA,OAAOA,SAAAA,CAAS,GAAA,CAAI,KAAK,CAAA,GAAI,IAAI,KAAA,GAAQ,GAAA;AAC3C;AAEA,SAAS,6BAAA,CACP,SACA,OAAA,EACgB;AAChB,EAAA,IAAI,CAAC,OAAA,IAAW,EAAE,SAAA,IAAa,OAAA,CAAA,EAAU;AACvC,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,MAAM,UAAU,OAAA,CAAQ,OAAA;AACxB,EAAA,IAAI,WAAW,IAAA,EAAM;AACnB,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,IAAI,OAAO,YAAY,QAAA,IAAY,OAAA,CAAQ,MAAK,KAAM,OAAA,CAAQ,MAAK,EAAG;AACpE,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,OAAO,OAAA;AACT;AAEA,SAAS,iBAAA,CACP,QAAA,EACA,MAAA,EACA,UAAA,EACmB;AACnB,EAAA,MAAM,YAAYA,SAAAA,CAAS,QAAA,CAAS,GAAG,CAAA,GAAI,SAAS,GAAA,GAAM,IAAA;AAC1D,EAAA,MAAM,OAAA,GAAU,6BAAA,CAA8B,QAAA,CAAS,GAAG,CAAA;AAC1D,EAAA,MAAM,OAAA,GACJC,oBAAAA;AAAA,IACE,QAAA,CAAS,KAAA;AAAA,IACT,OAAA,EAAS,OAAA;AAAA,IACT,OAAA,EAAS,KAAA;AAAA,IACT,OAAA,EAAS,OAAA;AAAA,IACT,SAAS,YAAA,EAAc,OAAA;AAAA,IACvB,UAAA,CAAW;AAAA,OACR,UAAA,CAAW,OAAA;AAClB,EAAA,MAAM,aAAaA,oBAAAA,CAAoB,QAAA,CAAS,UAAA,EAAY,SAAA,EAAW,UAAU,CAAA,IAAK,IAAA;AACtF,EAAA,MAAM,OAAOA,oBAAAA,CAAoB,OAAA,EAAS,MAAM,QAAA,CAAS,YAAA,EAAc,IAAI,CAAA,IAAK,IAAA;AAChF,EAAA,MAAM,IAAA,GAAOA,oBAAAA,CAAoB,OAAA,EAAS,IAAI,KAAK,UAAA,CAAW,IAAA;AAC9D,EAAA,MAAM,UACJ,6BAAA,CAA8B,OAAA,EAAS,OAAO,CAAA,IAAK,QAAA,CAAS,cAAc,KAAA,IAAS,IAAA;AAErF,EAAA,OAAO;AAAA,IACL,OAAA;AAAA,IACA,IAAA;AAAA,IACA,YAAY,UAAA,CAAW,IAAA;AAAA,IACvB,WAAA,EAAa,QAAA,CAAS,YAAA,EAAc,IAAA,IAAQ,IAAA;AAAA,IAC5C,MAAM,UAAA,CAAW,IAAA;AAAA,IACjB,UAAU,UAAA,CAAW,QAAA;AAAA,IACrB,WAAW,UAAA,CAAW,SAAA;AAAA,IACtB,OAAA;AAAA,IACA,IAAA;AAAA,IACA,QAAQ,MAAA,CAAO,MAAA;AAAA,IACf,UAAA;AAAA,IACA,YAAY,UAAA,CAAW,UAAA;AAAA,IACvB,OAAO,UAAA,CAAW,KAAA;AAAA,IAClB,WAAW,UAAA,CAAW,SAAA;AAAA,IACtB,QAAA,EAAU,SAAS,YAAA,EAAc,QAAA;AAAA,IACjC,MAAA,EAAQ,SAAS,YAAA,EAAc,MAAA;AAAA,IAC/B,SAAA,EAAW,SAAS,YAAA,EAAc,SAAA;AAAA,IAClC,KAAA,EAAO,SAAS,YAAA,EAAc,KAAA;AAAA,IAC9B,KAAK,MAAA,CAAO;AAAA,GACd;AACF;AAEO,SAAS,qBAAA,GAA+C;AAC7D,EAAA,OAAO,CACL,UACA,OAAA,KACoB;AACpB,IAAA,MAAM,MAAA,GAAS,aAAa,QAAQ,CAAA;AACpC,IAAA,IAAI,QAAA,CAAS,KAAA,IAAS,IAAA,IAAQ,QAAA,CAAS,gBAAgB,IAAA,EAAM;AAC3D,MAAA,OAAO,MAAA;AAAA,IACT;AACA,IAAA,MAAM,eAAA,GAAkB,oBAAA;AAAA,MACtB;AAAA,QACE,GAAG,MAAA;AAAA,QACH,KAAA,EAAO,QAAA,CAAS,KAAA,IAAS,QAAA,CAAS,cAAc,OAAA,IAAW;AAAA,OAC7D;AAAA,MACA;AAAA,KACF;AACA,IAAA,MAAA,CAAO,KAAA,GAAQ,iBAAA,CAAkB,QAAA,EAAU,MAAA,EAAQ,eAAe,CAAA;AAClE,IAAA,qBAAA,CAAsB,QAAQ,eAAe,CAAA;AAC7C,IAAA,OAAO,MAAA;AAAA,EACT,CAAA;AACF;AAEA,eAAsB,WAAA,CACpB,UACA,MAAA,EAC0B;AAC1B,EAAA,IAAI,CAAC,UAAU,UAAA,EAAY;AACzB,IAAA,OAAO,MAAA,EAAO;AAAA,EAChB;AAEA,EAAA,IAAI,mBAAA;AACJ,EAAA,IAAI,eAAA,GAA4C,IAAA;AAChD,EAAA,IAAI;AACF,IAAA,OAAO,MAAM,SAAA;AAAA,MACX;AAAA,QACE,GAAG,iBAAA;AAAA,QACH,aAAa,CAAA,KAAA,KACX,KAAA,KAAU,eAAA,IAAmB,oBAAA,CAAqB,KAAK,CAAA,CAAE;AAAA,OAC7D;AAAA,MACA,YAAY;AACV,QAAA,MAAM,MAAA,GAAS,MAAM,MAAA,EAAO;AAC5B,QAAA,IAAI,MAAA,CAAO,OAAO,SAAA,EAAW;AAC3B,UAAA,mBAAA,GAAsB,MAAA;AACtB,UAAA,eAAA,GAAkB,MAAA,CAAO,KAAA;AACzB,UAAA,MAAM,eAAA;AAAA,QACR;AACA,QAAA,OAAO,MAAA;AAAA,MACT;AAAA,KACF;AAAA,EACF,SAAS,KAAA,EAAO;AACd,IAAA,IAAI,mBAAA,IAAuB,UAAU,eAAA,EAAiB;AACpD,MAAA,OAAO,mBAAA;AAAA,IACT;AACA,IAAA,MAAM,KAAA;AAAA,EACR;AACF;AAEO,SAAS,eACd,QAAA,EAC8E;AAC9E,EAAA,MAAM,UAAU,QAAA,CAAS,IAAA;AACzB,EAAA,MAAM,UAAA,GAAa,KAAA,CAAM,OAAA,CAAQ,OAAO,CAAA,GACpC,OAAA,CAAQ,MAAA,GACN,OAAA,CAAQ,CAAC,CAAA,GACT,IAAA,GACD,OAAA,IAAW,IAAA;AAChB,EAAA,OAAO;AAAA,IACL,GAAG,QAAA;AAAA,IACH,IAAA,EAAM;AAAA,GACR;AACF;;;ACrOA,IAAM,0BAAA,GAA6B,0BAAA;AAEnC,SAAS,iBAAiB,KAAA,EAAwB;AAChD,EAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,GAAG,EAAE,GAAA,CAAI,CAAA,OAAA,KAAW,OAAA,CAAQ,IAAA,EAAM,CAAA;AAC/D,EAAA,OAAO,QAAA,CAAS,SAAS,CAAA,IAAK,QAAA,CAAS,MAAM,CAAA,OAAA,KAAW,0BAAA,CAA2B,IAAA,CAAK,OAAO,CAAC,CAAA;AAClG;AAEA,SAAS,oBAAoB,GAAA,EAAqB;AAChD,EAAA,MAAM,OAAA,GAAU,IAAI,IAAA,EAAK;AACzB,EAAA,IAAI,CAAC,SAAS,OAAO,EAAA;AAErB,EAAA,MAAM,UAAA,GAAa,OAAA,CAAQ,OAAA,CAAQ,GAAG,CAAA;AACtC,EAAA,MAAM,YAAA,GAAe,cAAc,CAAA,GAAI,OAAA,CAAQ,MAAM,UAAA,GAAa,CAAC,CAAA,CAAE,IAAA,EAAK,GAAI,OAAA;AAC9E,EAAA,MAAM,aAAA,GAAgB,YAAA,CAAa,OAAA,CAAQ,GAAG,CAAA;AAC9C,EAAA,OAAA,CAAQ,aAAA,IAAiB,IAAI,YAAA,CAAa,KAAA,CAAM,GAAG,aAAa,CAAA,GAAI,cAAc,IAAA,EAAK;AACzF;AAEA,SAAS,gCAAgC,MAAA,EAAyB;AAChE,EAAA,IAAI,YAAA,GAAe,KAAA;AACnB,EAAA,IAAI,YAAA,GAAe,KAAA;AACnB,EAAA,IAAI,UAAA,GAAa,CAAA;AAEjB,EAAA,KAAA,IAAS,QAAQ,CAAA,EAAG,KAAA,GAAQ,MAAA,CAAO,MAAA,EAAQ,SAAS,CAAA,EAAG;AACrD,IAAA,MAAM,IAAA,GAAO,OAAO,KAAK,CAAA;AACzB,IAAA,MAAM,IAAA,GAAO,QAAQ,CAAA,GAAI,MAAA,CAAO,SAAS,MAAA,CAAO,KAAA,GAAQ,CAAC,CAAA,GAAI,EAAA;AAE7D,IAAA,IAAI,YAAA,EAAc;AAChB,MAAA,IAAI,IAAA,KAAS,GAAA,IAAO,IAAA,KAAS,GAAA,EAAK;AAChC,QAAA,KAAA,IAAS,CAAA;AACT,QAAA;AAAA,MACF;AACA,MAAA,IAAI,SAAS,GAAA,EAAK;AAChB,QAAA,YAAA,GAAe,KAAA;AAAA,MACjB;AACA,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,YAAA,EAAc;AAChB,MAAA,IAAI,IAAA,KAAS,GAAA,IAAO,IAAA,KAAS,GAAA,EAAK;AAChC,QAAA,KAAA,IAAS,CAAA;AACT,QAAA;AAAA,MACF;AACA,MAAA,IAAI,SAAS,GAAA,EAAK;AAChB,QAAA,YAAA,GAAe,KAAA;AAAA,MACjB;AACA,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,SAAS,GAAA,EAAK;AAChB,MAAA,YAAA,GAAe,IAAA;AACf,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,SAAS,GAAA,EAAK;AAChB,MAAA,YAAA,GAAe,IAAA;AACf,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,SAAS,GAAA,EAAK;AAChB,MAAA,MAAM,eAAe,mBAAA,CAAoB,MAAA,CAAO,KAAA,CAAM,UAAA,EAAY,KAAK,CAAC,CAAA;AACxE,MAAA,IAAI,gBAAA,CAAiB,YAAY,CAAA,EAAG;AAClC,QAAA,OAAO,IAAA;AAAA,MACT;AACA,MAAA,UAAA,GAAa,KAAA,GAAQ,CAAA;AACrB,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,IAAA,KAAS,GAAA,IAAO,IAAA,KAAS,GAAA,EAAK;AAChC,MAAA,UAAA,GAAa,KAAA,GAAQ,CAAA;AAAA,IACvB;AAAA,EACF;AAEA,EAAA,OAAO,KAAA;AACT;AAEA,SAAS,yBAAyB,OAAA,EAAoC;AACpE,EAAA,OAAO,MAAM,OAAA,CAAQ,OAAO,IAAI,OAAA,CAAQ,IAAA,CAAK,GAAG,CAAA,GAAI,OAAA;AACtD;AAOA,SAAS,qBACP,UAAA,EACqC;AACrC,EAAA,IAAI,CAAC,UAAA,EAAY,MAAA,EAAQ,OAAO,MAAA;AAEhC,EAAA,MAAM,QAA0B,EAAC;AAEjC,EAAA,KAAA,MAAW,aAAa,UAAA,EAAY;AAClC,IAAA,IAAI,CAAC,UAAU,MAAA,EAAQ;AACrB,MAAA,OAAO,IAAA;AAAA,IACT;AACA,IAAA,IAAI,SAAA,CAAU,eAAe,MAAA,EAAW;AACtC,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,MAAM,UAAU,SAAA,CAAU,KAAA;AAC1B,IAAA,MAAM,WAAW,SAAA,CAAU,QAAA;AAC3B,IAAA,IAAI,aAAa,IAAA,EAAM;AACrB,MAAA,IAAI,OAAA,KAAY,QAAW,OAAO,IAAA;AAAA,IACpC,WAAW,QAAA,KAAa,KAAA,IAAS,QAAA,KAAa,IAAA,IAAQ,aAAa,IAAA,EAAM;AACvE,MAAA,IAAI,OAAA,KAAY,QAAW,OAAO,IAAA;AAAA,IACpC,CAAA,MAAA,IAAW,aAAa,IAAA,EAAM;AAC5B,MAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,OAAO,GAAG,OAAO,IAAA;AAAA,IACtC,CAAA,MAAO;AACL,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,MAAM,QAAA,GAAW,KAAA,CAAM,SAAA,CAAU,MAAM,CAAA;AACvC,IAAA,IAAI,QAAA,KAAa,MAAA,KAAc,OAAO,QAAA,KAAa,QAAA,IAAY,aAAa,IAAA,IAAQ,KAAA,CAAM,OAAA,CAAQ,QAAQ,CAAA,CAAA,EAAI;AAC5G,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,MAAM,IAAA,GAAQ,YAA6C,EAAC;AAC5D,IAAA,IAAI,OAAO,SAAA,CAAU,cAAA,CAAe,IAAA,CAAK,IAAA,EAAM,QAAQ,CAAA,EAAG;AACxD,MAAA,OAAO,IAAA;AAAA,IACT;AACA,IAAA,IAAA,CAAK,QAAQ,CAAA,GAAI,OAAA;AACjB,IAAA,KAAA,CAAM,SAAA,CAAU,MAAM,CAAA,GAAI,IAAA;AAAA,EAC5B;AAEA,EAAA,OAAO,KAAA;AACT;AAEA,SAAS,uBAAuB,KAAA,EAA+D;AAC7F,EAAA,IAAI,CAAC,KAAA,EAAO,KAAA,EAAO,OAAO,MAAA;AAC1B,EAAA,OAAO;AAAA,IACL,CAAC,KAAA,CAAM,KAAK,GAAG,KAAA,CAAM,SAAA,KAAc,eAAe,MAAA,GAAS;AAAA,GAC7D;AACF;AAmBO,SAAS,+BACd,KAAA,EAC4D;AAC5D,EAAA,MAAM,MAAA,GAAS,wBAAA,CAAyB,KAAA,CAAM,OAAO,EAAE,IAAA,EAAK;AAC5D,EAAA,IAAI,CAAC,MAAA,IAAU,MAAA,KAAW,GAAA,EAAK;AAC7B,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,IAAI,CAAC,+BAAA,CAAgC,MAAM,CAAA,EAAG;AAC5C,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,IAAI,KAAA,CAAM,KAAA,KAAU,MAAA,IAAa,KAAA,CAAM,SAAS,MAAA,EAAW;AACzD,IAAA,OAAO;AAAA,MACL,KAAA,EACE;AAAA,KACJ;AAAA,EACF;AAEA,EAAA,MAAM,KAAA,GAAQ,oBAAA,CAAqB,KAAA,CAAM,UAAU,CAAA;AACnD,EAAA,IAAI,UAAU,IAAA,EAAM;AAClB,IAAA,OAAO;AAAA,MACL,KAAA,EACE;AAAA,KACJ;AAAA,EACF;AAEA,EAAA,OAAO;AAAA,IACL,MAAA;AAAA,IACA,OAAA,EAAS;AAAA,MACP,YAAY,KAAA,CAAM,SAAA;AAAA,MAClB,MAAA;AAAA,MACA,KAAA;AAAA,MACA,OAAA,EAAS,sBAAA,CAAuB,KAAA,CAAM,KAAK,CAAA;AAAA,MAC3C,OAAO,KAAA,CAAM,KAAA;AAAA,MACb,QAAQ,KAAA,CAAM,MAAA;AAAA,MACd,aAAa,KAAA,CAAM;AAAA;AACrB,GACF;AACF;;;ACjLA,IAAM,YAAA,GACJ,4EAAA;AAyRF,IAAM,gBAAA,uBAAuB,GAAA,CAA0B;AAAA,EACrD,IAAA;AAAA,EACA,KAAA;AAAA,EACA,IAAA;AAAA,EACA,KAAA;AAAA,EACA,IAAA;AAAA,EACA,KAAA;AAAA,EACA,MAAA;AAAA,EACA,OAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,UAAA;AAAA,EACA;AACF,CAAC,CAAA;AAED,IAAM,sBAAA,uBAA6B,GAAA,CAA+B;AAAA,EAChE,IAAA;AAAA,EACA,KAAA;AAAA,EACA,IAAA;AAAA,EACA,KAAA;AAAA,EACA,IAAA;AAAA,EACA,KAAA;AAAA,EACA,MAAA;AAAA,EACA,OAAA;AAAA,EACA;AACF,CAAC,CAAA;AAED,SAASD,UAAS,KAAA,EAAkD;AAClE,EAAA,OAAO,OAAA,CAAQ,KAAK,CAAA,IAAK,OAAO,UAAU,QAAA,IAAY,CAAC,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA;AAC5E;AAEA,SAAS,aAAa,KAAA,EAAwB;AAC5C,EAAA,OAAO,YAAA,CAAa,IAAA,CAAK,KAAA,CAAM,IAAA,EAAM,CAAA;AACvC;AAEA,SAAS,uBAAuB,MAAA,EAAyB;AACvD,EAAA,OAAO,MAAA,KAAW,QAAQ,qBAAA,CAAsB,IAAA,CAAK,MAAM,CAAA,IAAK,OAAA,CAAQ,KAAK,MAAM,CAAA;AACrF;AAEO,SAAS,2BAAA,CAA4B,QAAgB,KAAA,EAAsC;AAChG,EAAA,OAAO,OAAO,KAAA,KAAU,QAAA,IAAY,aAAa,KAAK,CAAA,IAAK,uBAAuB,MAAM,CAAA;AAC1F;AAEA,SAAS,qBAAqB,KAAA,EAAmD;AAC/E,EAAA,OAAOA,SAAAA,CAAS,KAAK,CAAA,IAAKA,SAAAA,CAAS,MAAM,MAAM,CAAA;AACjD;AAEA,SAAS,mBAAA,CAAoB,OAAe,KAAA,EAAuB;AACjE,EAAA,MAAM,UAAA,GAAa,MAAM,IAAA,EAAK;AAC9B,EAAA,IAAI,CAAC,UAAA,EAAY;AACf,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,EAAG,KAAK,CAAA,2BAAA,CAA6B,CAAA;AAAA,EACvD;AACA,EAAA,OAAO,UAAA;AACT;AAEA,SAAS,qBAAqB,KAAA,EAA0E;AACtG,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACxB,IAAA,OAAO,KAAA,CAAM,KAAK,GAAG,CAAA;AAAA,EACvB;AACA,EAAA,OAAO,OAAO,KAAK,CAAA;AACrB;AAEA,SAAS,qBAAA,CACP,QAAA,EACA,MAAA,EACA,KAAA,EACwB;AACxB,EAAA,MAAM,SAAA,GAAoC,EAAE,QAAA,EAAS;AACrD,EAAA,IAAI,MAAA,EAAQ;AACV,IAAA,SAAA,CAAU,MAAA,GAAS,MAAA;AACnB,IAAA,IAAI,aAAa,IAAA,EAAM;AACrB,MAAA,SAAA,CAAU,SAAA,GAAY,MAAA;AAAA,IACxB;AAAA,EACF;AACA,EAAA,IAAI,UAAU,MAAA,EAAW;AACvB,IAAA,SAAA,CAAU,KAAA,GAAQ,KAAA;AAClB,IAAA,IAAI,aAAa,IAAA,EAAM;AACrB,MAAA,SAAA,CAAU,QAAA,GAAW,KAAA;AAAA,IACvB;AAAA,EACF;AACA,EAAA,IAAI,QAAA,KAAa,QAAQ,MAAA,IAAU,KAAA,KAAU,UAAa,2BAAA,CAA4B,MAAA,EAAQ,KAA6B,CAAA,EAAG;AAC5H,IAAA,SAAA,CAAU,WAAA,GAAc,MAAA;AACxB,IAAA,SAAA,CAAU,cAAA,GAAiB,MAAA;AAAA,EAC7B;AACA,EAAA,OAAO,SAAA;AACT;AAEA,SAAS,oBAAA,CACP,KACA,IAAA,EACQ;AACR,EAAA,MAAM,MAAA,GAAS,kBAAA,CAAmB,IAAA,CAAK,MAAM,CAAA;AAC7C,EAAA,MAAM,WAAA,GAAc,mBAAA,CAAoB,GAAA,EAAK,qBAAqB,CAAA;AAClE,EAAA,IAAI,IAAA,CAAK,MAAA,IAAU,IAAA,CAAK,GAAA,EAAK;AAC3B,IAAA,MAAM,IAAI,KAAA;AAAA,MACR,sBAAsB,WAAW,CAAA,gGAAA;AAAA,KACnC;AAAA,EACF;AAEA,EAAA,MAAM,iBAAA,GAAoB,mBAAA,CAAoB,IAAA,CAAK,GAAA,IAAO,aAAa,uBAAuB,CAAA;AAC9F,EAAA,IAAI,IAAA,CAAK,MAAA,IAAU,iBAAA,CAAkB,QAAA,CAAS,GAAG,CAAA,EAAG;AAClD,IAAA,MAAM,IAAI,KAAA;AAAA,MACR,sBAAsB,WAAW,CAAA,wEAAA;AAAA,KACnC;AAAA,EACF;AAEA,EAAA,MAAM,cAAA,GAAiB,IAAA,CAAK,MAAA,EAAQ,IAAA,EAAK;AACzC,EAAA,MAAM,aAAA,GAAgB,iBAClB,CAAA,EAAG,mBAAA,CAAoB,gBAAgB,wBAAwB,CAAC,CAAA,CAAA,EAAI,iBAAiB,CAAA,CAAA,GACrF,iBAAA;AACJ,EAAA,MAAM,QAAQ,IAAA,CAAK,EAAA,EAAI,MAAK,KAAM,aAAA,KAAkB,cAAc,WAAA,GAAc,EAAA,CAAA;AAChF,EAAA,MAAM,MAAA,GAAS,KAAA,GAAQ,CAAA,EAAG,KAAK,CAAA,CAAA,CAAA,GAAM,EAAA;AACrC,EAAA,OAAO,CAAA,EAAG,MAAM,CAAA,EAAG,aAAa,IAAI,MAAM,CAAA,CAAA,CAAA;AAC5C;AAEO,SAAS,mBAAmB,MAAA,EAAmC;AACpE,EAAA,IAAI,CAACA,SAAAA,CAAS,MAAM,CAAA,EAAG;AACrB,IAAA,MAAM,IAAI,MAAM,mCAAmC,CAAA;AAAA,EACrD;AAEA,EAAA,MAAM,SAAmB,EAAC;AAC1B,EAAA,KAAA,MAAW,CAAC,MAAA,EAAQ,QAAQ,KAAK,MAAA,CAAO,OAAA,CAAQ,MAAM,CAAA,EAAG;AACvD,IAAA,IAAI,aAAa,MAAA,EAAW;AAC1B,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,aAAa,IAAA,EAAM;AACrB,MAAA,MAAA,CAAO,IAAA,CAAK,mBAAA,CAAoB,MAAA,EAAQ,eAAe,CAAC,CAAA;AACxD,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,oBAAA,CAAqB,QAAQ,CAAA,EAAG;AAClC,MAAA,MAAA,CAAO,IAAA,CAAK,oBAAA,CAAqB,MAAA,EAAQ,QAAQ,CAAC,CAAA;AAClD,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,6BAAA,EAAgC,MAAM,CAAA,CAAA,CAAG,CAAA;AAAA,EAC3D;AAEA,EAAA,IAAI,MAAA,CAAO,WAAW,CAAA,EAAG;AACvB,IAAA,MAAM,IAAI,MAAM,6CAA6C,CAAA;AAAA,EAC/D;AAEA,EAAA,OAAO,MAAA,CAAO,KAAK,GAAG,CAAA;AACxB;AAEO,SAAS,8BAA8B,MAAA,EAAoC;AAChF,EAAA,IAAI,CAACA,SAAAA,CAAS,MAAM,CAAA,EAAG;AACrB,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,KAAA,MAAW,QAAA,IAAY,MAAA,CAAO,MAAA,CAAO,MAAM,CAAA,EAAG;AAC5C,IAAA,IAAI,CAAC,oBAAA,CAAqB,QAAQ,CAAA,EAAG;AACnC,MAAA;AAAA,IACF;AACA,IAAA,IAAI,OAAO,SAAS,MAAA,KAAW,QAAA,IAAY,SAAS,MAAA,CAAO,IAAA,EAAK,CAAE,MAAA,GAAS,CAAA,EAAG;AAC5E,MAAA,OAAO,IAAA;AAAA,IACT;AACA,IAAA,IAAI,6BAAA,CAA8B,QAAA,CAAS,MAAM,CAAA,EAAG;AAClD,MAAA,OAAO,IAAA;AAAA,IACT;AAAA,EACF;AAEA,EAAA,OAAO,KAAA;AACT;AAEA,SAAS,kBAAA,CACP,QACA,KAAA,EAC0B;AAC1B,EAAA,MAAM,gBAAA,GAAmB,mBAAA,CAAoB,MAAA,EAAQ,cAAc,CAAA;AACnE,EAAA,IAAI,CAACA,SAAAA,CAAS,KAAK,CAAA,EAAG;AACpB,IAAA,OAAO,CAAC,qBAAA,CAAsB,IAAA,EAAM,gBAAA,EAAkB,KAAK,CAAC,CAAA;AAAA,EAC9D;AAEA,EAAA,MAAM,aAAuC,EAAC;AAC9C,EAAA,KAAA,MAAW,CAAC,WAAA,EAAa,QAAQ,KAAK,MAAA,CAAO,OAAA,CAAQ,KAAK,CAAA,EAAG;AAC3D,IAAA,IAAI,aAAa,MAAA,EAAW;AAC1B,MAAA;AAAA,IACF;AACA,IAAA,IAAI,CAAC,gBAAA,CAAiB,GAAA,CAAI,WAAmC,CAAA,EAAG;AAC9D,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,4BAAA,EAA+B,WAAW,CAAA,MAAA,EAAS,gBAAgB,CAAA,CAAA,CAAG,CAAA;AAAA,IACxF;AACA,IAAA,IAAA,CACG,WAAA,KAAgB,IAAA,IAAQ,WAAA,KAAgB,UAAA,IAAc,WAAA,KAAgB,kBACvE,CAAC,KAAA,CAAM,OAAA,CAAQ,QAAQ,CAAA,EACvB;AACA,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,MAAA,EAAS,gBAAgB,CAAA,CAAA,EAAI,WAAW,CAAA,wBAAA,CAA0B,CAAA;AAAA,IACpF;AACA,IAAA,UAAA,CAAW,IAAA;AAAA,MACT,qBAAA;AAAA,QACE,WAAA;AAAA,QACA,gBAAA;AAAA,QACA;AAAA;AACF,KACF;AAAA,EACF;AAEA,EAAA,IAAI,UAAA,CAAW,WAAW,CAAA,EAAG;AAC3B,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,MAAA,EAAS,gBAAgB,CAAA,+BAAA,CAAiC,CAAA;AAAA,EAC5E;AAEA,EAAA,OAAO,UAAA;AACT;AAEA,SAAS,6BAAA,CACP,QACA,KAAA,EACU;AACV,EAAA,IAAI,CAACA,SAAAA,CAAS,MAAM,CAAA,EAAG;AACrB,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,eAAA,EAAkB,KAAK,CAAA,wBAAA,CAA0B,CAAA;AAAA,EACnE;AAEA,EAAA,MAAM,OAAA,GAAU,MAAA,CAAO,OAAA,CAAQ,MAAM,CAAA,CAAE,MAAA,CAAO,CAAC,GAAG,KAAK,CAAA,KAAM,KAAA,KAAU,MAAS,CAAA;AAChF,EAAA,IAAI,OAAA,CAAQ,WAAW,CAAA,EAAG;AACxB,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,eAAA,EAAkB,KAAK,CAAA,uCAAA,CAAyC,CAAA;AAAA,EAClF;AAEA,EAAA,MAAM,CAAC,SAAA,EAAW,QAAQ,CAAA,GAAI,QAAQ,CAAC,CAAA;AACvC,EAAA,MAAM,MAAA,GAAS,mBAAA,CAAoB,SAAA,EAAW,CAAA,MAAA,EAAS,KAAK,CAAA,OAAA,CAAS,CAAA;AAErE,EAAA,IAAI,CAACA,SAAAA,CAAS,QAAQ,CAAA,EAAG;AACvB,IAAA,OAAO,CAAC,CAAA,EAAG,MAAM,OAAO,oBAAA,CAAqB,QAAgC,CAAC,CAAA,CAAE,CAAA;AAAA,EAClF;AAEA,EAAA,MAAM,eAAA,GAAkB,MAAA,CAAO,OAAA,CAAQ,QAAQ,CAAA,CAAE,MAAA,CAAO,CAAC,GAAG,KAAK,CAAA,KAAM,KAAA,KAAU,MAAS,CAAA;AAC1F,EAAA,IAAI,eAAA,CAAgB,WAAW,CAAA,EAAG;AAChC,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,eAAA,EAAkB,KAAK,CAAA,CAAA,EAAI,MAAM,CAAA,+BAAA,CAAiC,CAAA;AAAA,EACpF;AAEA,EAAA,IAAI,KAAA,KAAU,KAAA,IAAS,eAAA,CAAgB,MAAA,GAAS,CAAA,EAAG;AACjD,IAAA,MAAM,IAAI,MAAM,wEAAwE,CAAA;AAAA,EAC1F;AAEA,EAAA,OAAO,gBAAgB,GAAA,CAAI,CAAC,CAAC,WAAA,EAAa,UAAU,CAAA,KAAM;AACxD,IAAA,IAAI,CAAC,sBAAA,CAAuB,GAAA,CAAI,WAAwC,CAAA,EAAG;AACzE,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,eAAA,EAAkB,KAAK,CAAA,wCAAA,CAA0C,CAAA;AAAA,IACnF;AACA,IAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,UAAU,CAAA,EAAG;AAC7B,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,eAAA,EAAkB,KAAK,CAAA,wCAAA,CAA0C,CAAA;AAAA,IACnF;AACA,IAAA,OAAO,GAAG,MAAM,CAAA,CAAA,EAAI,WAAW,CAAA,CAAA,EAAI,oBAAA,CAAqB,UAAkC,CAAC,CAAA,CAAA;AAAA,EAC7F,CAAC,CAAA;AACH;AAEO,SAAS,aAAa,KAAA,EAA2D;AACtF,EAAA,IAAI,UAAU,MAAA,EAAW;AACvB,IAAA,OAAO,MAAA;AAAA,EACT;AACA,EAAA,IAAI,CAACA,SAAAA,CAAS,KAAK,CAAA,EAAG;AACpB,IAAA,MAAM,IAAI,MAAM,kCAAkC,CAAA;AAAA,EACpD;AAEA,EAAA,MAAM,aAAuC,EAAC;AAC9C,EAAA,KAAA,MAAW,CAAC,MAAA,EAAQ,QAAQ,KAAK,MAAA,CAAO,OAAA,CAAQ,KAAK,CAAA,EAAG;AACtD,IAAA,IAAI,aAAa,MAAA,EAAW;AAC1B,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,WAAW,IAAA,EAAM;AACnB,MAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,QAAQ,CAAA,IAAK,QAAA,CAAS,WAAW,CAAA,EAAG;AACrD,QAAA,MAAM,IAAI,MAAM,6CAA6C,CAAA;AAAA,MAC/D;AACA,MAAA,MAAM,cAAc,QAAA,CAAS,OAAA;AAAA,QAAQ,CAAA,KAAA,KACnC,6BAAA,CAA8B,KAAA,EAAoC,IAAI;AAAA,OACxE;AACA,MAAA,UAAA,CAAW,IAAA,CAAK,sBAAsB,IAAA,EAAM,MAAA,EAAW,YAAY,IAAA,CAAK,GAAG,CAAC,CAAC,CAAA;AAC7E,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,WAAW,KAAA,EAAO;AACpB,MAAA,MAAM,WAAA,GAAc,6BAAA,CAA8B,QAAA,EAAuC,KAAK,CAAA;AAC9F,MAAA,IAAI,WAAA,CAAY,WAAW,CAAA,EAAG;AAC5B,QAAA,MAAM,IAAI,MAAM,oEAAoE,CAAA;AAAA,MACtF;AACA,MAAA,UAAA,CAAW,KAAK,qBAAA,CAAsB,KAAA,EAAO,QAAW,WAAA,CAAY,CAAC,CAAC,CAAC,CAAA;AACvE,MAAA;AAAA,IACF;AAEA,IAAA,UAAA,CAAW,IAAA,CAAK,GAAG,kBAAA,CAAmB,MAAA,EAAQ,QAA2D,CAAC,CAAA;AAAA,EAC5G;AAEA,EAAA,OAAO,UAAA,CAAW,MAAA,GAAS,CAAA,GAAI,UAAA,GAAa,MAAA;AAC9C;AAEA,SAAS,sBAAsB,KAAA,EAA+D;AAC5F,EAAA,IAAI,OAAO,UAAU,SAAA,EAAW;AAC9B,IAAA,OAAO,KAAA,KAAU,QAAQ,YAAA,GAAe,WAAA;AAAA,EAC1C;AACA,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,IAAA,MAAM,UAAA,GAAa,KAAA,CAAM,IAAA,EAAK,CAAE,WAAA,EAAY;AAC5C,IAAA,IAAI,UAAA,KAAe,KAAA,IAAS,UAAA,KAAe,WAAA,EAAa;AACtD,MAAA,OAAO,WAAA;AAAA,IACT;AACA,IAAA,IAAI,UAAA,KAAe,MAAA,IAAU,UAAA,KAAe,YAAA,EAAc;AACxD,MAAA,OAAO,YAAA;AAAA,IACT;AACA,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,+BAAA,EAAkC,KAAK,CAAA,CAAA,CAAG,CAAA;AAAA,EAC5D;AACA,EAAA,OAAO,KAAA,CAAM,SAAA,KAAc,KAAA,GAAQ,YAAA,GAAe,WAAA;AACpD;AAEO,SAAS,eAAqC,OAAA,EAAwD;AAC3G,EAAA,IAAI,YAAY,MAAA,EAAW;AACzB,IAAA,OAAO,MAAA;AAAA,EACT;AACA,EAAA,IAAI,CAACA,SAAAA,CAAS,OAAO,CAAA,EAAG;AACtB,IAAA,MAAM,IAAI,MAAM,oCAAoC,CAAA;AAAA,EACtD;AAEA,EAAA,IAAI,YAAY,OAAA,EAAS;AACvB,IAAA,OAAO;AAAA,MACL,OAAO,mBAAA,CAAoB,MAAA,CAAO,OAAA,CAAQ,MAAM,GAAG,gBAAgB,CAAA;AAAA,MACnE,SAAA,EAAW,OAAA,CAAQ,SAAA,KAAc,KAAA,GAAQ,YAAA,GAAe;AAAA,KAC1D;AAAA,EACF;AAEA,EAAA,MAAM,OAAA,GAAU,MAAA,CAAO,OAAA,CAAQ,OAAO,CAAA,CAAE,MAAA,CAAO,CAAC,GAAG,KAAK,CAAA,KAAM,KAAA,KAAU,MAAS,CAAA;AACjF,EAAA,IAAI,OAAA,CAAQ,WAAW,CAAA,EAAG;AACxB,IAAA,OAAO,MAAA;AAAA,EACT;AACA,EAAA,IAAI,OAAA,CAAQ,SAAS,CAAA,EAAG;AACtB,IAAA,MAAM,IAAI,MAAM,sDAAsD,CAAA;AAAA,EACxE;AAEA,EAAA,MAAM,CAAC,MAAA,EAAQ,KAAK,CAAA,GAAI,QAAQ,CAAC,CAAA;AACjC,EAAA,OAAO;AAAA,IACL,KAAA,EAAO,mBAAA,CAAoB,MAAA,EAAQ,gBAAgB,CAAA;AAAA,IACnD,SAAA,EAAW,sBAAsB,KAAoC;AAAA,GACvE;AACF;;;ACziBO,SAAS,2BAA2B,KAAA,EAA4C;AACrF,EAAA,OACE,KAAA,CAAM,UAAA,CAAW,MAAA,KAAW,CAAA,IAC5B,MAAM,MAAA,KAAW,MAAA,IACjB,KAAA,CAAM,WAAA,KAAgB,MAAA,IACtB,KAAA,CAAM,QAAA,KAAa,MAAA,IACnB,MAAM,UAAA,KAAe,MAAA;AAEzB;AAEO,SAAS,mBAAwB,KAAA,EAAsD;AAC5F,EAAA,IAAI,CAAC,KAAA,EAAO;AACV,IAAA,OAAO,MAAA;AAAA,EACT;AACA,EAAA,OAAO;AAAA,IACL,QAAQ,KAAA,CAAM,KAAA;AAAA,IACd,SAAA,EAAW,MAAM,SAAA,KAAc;AAAA,GACjC;AACF;AAEA,SAASA,UAAS,KAAA,EAAkD;AAClE,EAAA,OAAO,OAAA,CAAQ,KAAK,CAAA,IAAK,OAAO,UAAU,QAAA,IAAY,CAAC,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA;AAC5E;AAEA,SAAS,oCACP,KAAA,EAC0B;AAC1B,EAAA,IAAI,CAACA,SAAAA,CAAS,KAAK,CAAA,EAAG;AACpB,IAAA,OAAO;AAAA,MACL,EAAA,EAAI;AAAA,KACN;AAAA,EACF;AAEA,EAAA,MAAM,aAAuC,EAAC;AAC9C,EAAA,KAAA,MAAW,CAAC,GAAA,EAAK,OAAO,KAAK,MAAA,CAAO,OAAA,CAAQ,KAAK,CAAA,EAAG;AAClD,IAAA,IAAI,YAAY,MAAA,EAAW;AACzB,MAAA,UAAA,CAAW,GAAqC,CAAA,GAAI,OAAA;AAAA,IACtD;AAAA,EACF;AACA,EAAA,OAAO,UAAA;AACT;AAEA,SAAS,mCACP,MAAA,EACgC;AAChC,EAAA,MAAM,aAAsC,EAAC;AAC7C,EAAA,KAAA,MAAW,CAAC,MAAA,EAAQ,KAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,MAAiC,CAAA,EAAG;AAC/E,IAAA,IAAI,UAAU,MAAA,EAAW;AACvB,MAAA;AAAA,IACF;AACA,IAAA,UAAA,CAAW,MAAM,CAAA,GAAI,mCAAA,CAAoC,KAAK,CAAA;AAAA,EAChE;AACA,EAAA,OAAO,UAAA;AACT;AAEO,SAAS,0BACd,KAAA,EAC8B;AAC9B,EAAA,IAAI,CAAC,KAAA,IAAS,CAACA,SAAAA,CAAS,KAAK,CAAA,EAAG;AAC9B,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,MAAM,aAA+B,EAAC;AACtC,EAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,KAAgC,CAAA,EAAG;AAC3E,IAAA,IAAI,UAAU,MAAA,EAAW;AACvB,MAAA;AAAA,IACF;AACA,IAAA,IAAI,GAAA,KAAQ,IAAA,IAAQ,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACxC,MAAA,UAAA,CAAW,KAAK,KAAA,CAAM,GAAA;AAAA,QAAI,CAAA,MAAA,KACxB,mCAAmC,MAAwC;AAAA,OAC7E;AACA,MAAA;AAAA,IACF;AACA,IAAA,IAAI,GAAA,KAAQ,KAAA,IAASA,SAAAA,CAAS,KAAK,CAAA,EAAG;AACpC,MAAA,UAAA,CAAW,GAAA,GAAM,kCAAA;AAAA,QACf;AAAA,OACF;AACA,MAAA;AAAA,IACF;AACA,IAAA,UAAA,CAAW,GAAG,CAAA,GAAI,mCAAA,CAAoC,KAAK,CAAA;AAAA,EAC7D;AAEA,EAAA,OAAO,UAAA;AACT;AAEA,SAAS,kCAAA,CACP,QACA,KAAA,EACS;AACT,EAAA,IAAI,CAACA,SAAAA,CAAS,KAAK,CAAA,EAAG;AACpB,IAAA,OAAO,2BAAA,CAA4B,QAAQ,KAA0D,CAAA;AAAA,EACvG;AAEA,EAAA,MAAM,UAAU,KAAA,CAAM,EAAA;AACtB,EAAA,OAAO,OAAA,KAAY,MAAA,IACd,2BAAA,CAA4B,MAAA,EAAQ,OAA4D,CAAA;AACvG;AAEA,SAAS,wCACP,MAAA,EACS;AACT,EAAA,KAAA,MAAW,CAAC,MAAA,EAAQ,KAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,MAAiC,CAAA,EAAG;AAC/E,IAAA,IAAI,UAAU,MAAA,EAAW;AACvB,MAAA;AAAA,IACF;AACA,IAAA,IAAI,kCAAA,CAAmC,MAAA,EAAQ,KAAK,CAAA,EAAG;AACrD,MAAA,OAAO,IAAA;AAAA,IACT;AAAA,EACF;AACA,EAAA,OAAO,KAAA;AACT;AAEO,SAAS,wCACd,KAAA,EACS;AACT,EAAA,IAAI,CAAC,KAAA,IAAS,CAACA,SAAAA,CAAS,KAAK,CAAA,EAAG;AAC9B,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,KAAgC,CAAA,EAAG;AAC3E,IAAA,IAAI,UAAU,MAAA,EAAW;AACvB,MAAA;AAAA,IACF;AACA,IAAA,IAAI,GAAA,KAAQ,IAAA,IAAQ,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACxC,MAAA,IACE,KAAA,CAAM,IAAA;AAAA,QAAK,CAAA,MAAA,KACT,wCAAwC,MAAwC;AAAA,OAClF,EACA;AACA,QAAA,OAAO,IAAA;AAAA,MACT;AACA,MAAA;AAAA,IACF;AACA,IAAA,IAAI,GAAA,KAAQ,KAAA,IAASA,SAAAA,CAAS,KAAK,CAAA,EAAG;AACpC,MAAA,IAAI,uCAAA,CAAwC,KAAuC,CAAA,EAAG;AACpF,QAAA,OAAO,IAAA;AAAA,MACT;AACA,MAAA;AAAA,IACF;AACA,IAAA,IAAI,kCAAA,CAAmC,GAAA,EAAK,KAAK,CAAA,EAAG;AAClD,MAAA,OAAO,IAAA;AAAA,IACT;AAAA,EACF;AAEA,EAAA,OAAO,KAAA;AACT;AAEO,SAAS,kBAAkB,KAAA,EAKL;AAC3B,EAAA,IAAI,QAAQ,KAAA,CAAM,KAAA;AAClB,EAAA,IAAI,SAAS,KAAA,CAAM,MAAA;AAEnB,EAAA,IAAI,KAAA,KAAU,MAAA,IAAa,KAAA,CAAM,QAAA,KAAa,MAAA,EAAW;AACvD,IAAA,KAAA,GAAQ,KAAK,GAAA,CAAI,CAAA,EAAG,KAAK,KAAA,CAAM,KAAA,CAAM,QAAQ,CAAC,CAAA;AAAA,EAChD;AACA,EAAA,IACE,MAAA,KAAW,MAAA,IACX,KAAA,CAAM,QAAA,KAAa,MAAA,IACnB,MAAM,WAAA,KAAgB,MAAA,IACtB,KAAA,CAAM,WAAA,GAAc,CAAA,EACpB;AACA,IAAA,MAAA,GAAA,CAAU,IAAA,CAAK,KAAA,CAAM,KAAA,CAAM,WAAW,CAAA,GAAI,CAAA,IAAK,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,IAAA,CAAK,KAAA,CAAM,KAAA,CAAM,QAAQ,CAAC,CAAA;AAAA,EACvF;AAEA,EAAA,OAAO,EAAE,OAAO,MAAA,EAAO;AACzB;AAEA,SAAS,2BAA2B,UAAA,EAA2D;AAC7F,EAAA,OACE,UAAA,EAAY,IAAA;AAAA,IACV,CAAA,SAAA,KACE,UAAU,QAAA,KAAa,IAAA,KACtB,UAAU,UAAA,KAAe,MAAA,IAAa,UAAU,WAAA,KAAgB,MAAA;AAAA,GACrE,IAAK,KAAA;AAET;AAEO,SAAS,0BAA0B,KAAA,EAMZ;AAC5B,EAAA,MAAM,UAAA,GAAa,KAAA,CAAM,KAAA,CAAM,UAAA,CAAW,SACtC,KAAA,CAAM,KAAA,CAAM,UAAA,CAAW,GAAA,CAAI,CAAA,SAAA,MAAc,EAAE,GAAG,SAAA,GAAY,CAAA,GAC1D,MAAA;AAEJ,EAAA,MAAM,aAAa,iBAAA,CAAkB;AAAA,IACnC,KAAA,EAAO,MAAM,KAAA,CAAM,KAAA;AAAA,IACnB,MAAA,EAAQ,MAAM,KAAA,CAAM,MAAA;AAAA,IACpB,WAAA,EAAa,MAAM,KAAA,CAAM,WAAA;AAAA,IACzB,QAAA,EAAU,MAAM,KAAA,CAAM;AAAA,GACvB,CAAA;AACD,EAAA,MAAM,UAAA,GAAa,KAAA,CAAM,OAAA,EAAS,UAAA,IAAc,IAAA;AAChD,EAAA,MAAM,4BAA4B,8BAAA,CAA+B;AAAA,IAC/D,WAAW,KAAA,CAAM,SAAA;AAAA,IACjB,SAAS,KAAA,CAAM,OAAA;AAAA,IACf,UAAA;AAAA,IACA,OAAO,UAAA,CAAW,KAAA;AAAA,IAClB,QAAQ,UAAA,CAAW,MAAA;AAAA,IACnB,KAAA,EAAO,MAAM,KAAA,CAAM,KAAA;AAAA,IACnB,UAAA;AAAA,IACA,KAAA,EAAO,MAAM,OAAA,EAAS,KAAA;AAAA,IACtB,IAAA,EAAM,MAAM,OAAA,EAAS;AAAA,GACtB,CAAA;AACD,EAAA,IAAI,yBAAA,IAA6B,WAAW,yBAAA,EAA2B;AACrE,IAAA,MAAM,IAAI,KAAA,CAAM,yBAAA,CAA0B,KAAK,CAAA;AAAA,EACjD;AACA,EAAA,IAAI,yBAAA,EAA2B;AAC7B,IAAA,MAAM,EAAE,OAAA,EAAS,MAAA,EAAO,GAAI,yBAAA;AAC5B,IAAA,OAAO;AAAA,MACL,IAAA,EAAM,OAAA;AAAA,MACN,OAAA;AAAA,MACA,KAAA,EAAO;AAAA,QACL,OAAA,EAAS,MAAA;AAAA,QACT,UAAA;AAAA,QACA,OAAO,UAAA,CAAW,KAAA;AAAA,QAClB,QAAQ,UAAA,CAAW,MAAA;AAAA,QACnB,KAAA,EAAO,MAAM,KAAA,CAAM;AAAA;AACrB,KACF;AAAA,EACF;AAEA,EAAA,IAAI,0BAAA,CAA2B,UAAU,CAAA,IAAK,CAAC,KAAA,CAAM,OAAA,EAAS,IAAA,IAAQ,CAAC,KAAA,CAAM,OAAA,EAAS,KAAA,IAAS,UAAA,EAAY;AACzG,IAAA,MAAM,KAAA,GAAQ,MAAM,qBAAA,CAAsB;AAAA,MACxC,WAAW,KAAA,CAAM,SAAA;AAAA,MACjB,SAAS,KAAA,CAAM,OAAA;AAAA,MACf,UAAA;AAAA,MACA,KAAA,EAAO,MAAM,KAAA,CAAM,KAAA;AAAA,MACnB,MAAA,EAAQ,MAAM,KAAA,CAAM,MAAA;AAAA,MACpB,WAAA,EAAa,MAAM,KAAA,CAAM,WAAA;AAAA,MACzB,QAAA,EAAU,MAAM,KAAA,CAAM,QAAA;AAAA,MACtB,KAAA,EAAO,MAAM,KAAA,CAAM;AAAA,KACpB,CAAA;AACD,IAAA,IAAI,KAAA,EAAO;AACT,MAAA,OAAO;AAAA,QACL,IAAA,EAAM,OAAA;AAAA,QACN,KAAA;AAAA,QACA,OAAA,EAAS,EAAE,KAAA;AAAM,OACnB;AAAA,IACF;AAAA,EACF;AAEA,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,OAAA;AAAA,IACN,OAAA,EAAS;AAAA,MACP,YAAY,KAAA,CAAM,SAAA;AAAA,MAClB,SAAS,KAAA,CAAM,OAAA;AAAA,MACf,UAAA;AAAA,MACA,KAAA,EAAO,MAAM,KAAA,CAAM,KAAA;AAAA,MACnB,MAAA,EAAQ,MAAM,KAAA,CAAM,MAAA;AAAA,MACpB,YAAA,EAAc,MAAM,KAAA,CAAM,WAAA;AAAA,MAC1B,SAAA,EAAW,MAAM,KAAA,CAAM,QAAA;AAAA,MACvB,WAAA,EAAa,MAAM,KAAA,CAAM,UAAA;AAAA,MACzB,OAAA,EAAS,MAAM,KAAA,CAAM,KAAA;AAAA,MACrB,WAAA,EAAa,UAAA;AAAA,MACb,KAAA,EAAO,MAAM,OAAA,EAAS,KAAA;AAAA,MACtB,IAAA,EAAM,MAAM,OAAA,EAAS;AAAA,KACvB;AAAA,IACA,KAAA,EAAO;AAAA,MACL,SAAS,KAAA,CAAM,OAAA;AAAA,MACf,UAAA;AAAA,MACA,KAAA,EAAO,MAAM,KAAA,CAAM,KAAA;AAAA,MACnB,MAAA,EAAQ,MAAM,KAAA,CAAM,MAAA;AAAA,MACpB,WAAA,EAAa,MAAM,KAAA,CAAM,WAAA;AAAA,MACzB,QAAA,EAAU,MAAM,KAAA,CAAM,QAAA;AAAA,MACtB,KAAA,EAAO,MAAM,KAAA,CAAM;AAAA;AACrB,GACF;AACF;;;ACnWA,IAAM,yBAAA,GAA4B,0BAAA;AAClC,IAAM,4BAAA,GAA+B,uDAAA;AACrC,IAAM,iBAAA,GAAoB,mEAAA;AAC1B,IAAM,sBAAA,GAAyB,6DAAA;AAE/B,SAAS,uBAAuBE,WAAAA,EAA4B;AAC1D,EAAA,OAAO,CAAA,CAAA,EAAIA,WAAAA,CAAW,OAAA,CAAQ,IAAA,EAAM,IAAI,CAAC,CAAA,CAAA,CAAA;AAC3C;AAEA,SAAS,4BACP,KAAA,EAC4D;AAC5D,EAAA,MAAM,kBAAA,GAAqB,sBAAA,CAAuB,IAAA,CAAK,KAAK,CAAA;AAC5D,EAAA,IAAI,kBAAA,EAAoB;AACtB,IAAA,MAAM,GAAGC,gBAAAA,EAAiBC,eAAc,CAAA,GAAI,kBAAA;AAC5C,IAAA,IAAI,6BAA6B,IAAA,CAAKA,eAAc,KAAK,yBAAA,CAA0B,IAAA,CAAKD,gBAAe,CAAA,EAAG;AACxG,MAAA,OAAO,EAAE,cAAA,EAAAC,eAAAA,EAAgB,eAAA,EAAAD,gBAAAA,EAAgB;AAAA,IAC3C;AAAA,EACF;AAEA,EAAA,MAAM,aAAA,GAAgB,iBAAA,CAAkB,IAAA,CAAK,KAAK,CAAA;AAClD,EAAA,IAAI,CAAC,aAAA,EAAe;AAClB,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,MAAM,GAAG,cAAA,EAAgB,eAAe,CAAA,GAAI,aAAA;AAC5C,EAAA,IAAI,CAAC,6BAA6B,IAAA,CAAK,cAAc,KAAK,CAAC,yBAAA,CAA0B,IAAA,CAAK,eAAe,CAAA,EAAG;AAC1G,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,OAAO,EAAE,gBAAgB,eAAA,EAAgB;AAC3C;AAKO,SAAS,yBAAyBD,WAAAA,EAA4B;AACnE,EAAA,OAAOA,WAAAA,CACJ,KAAA,CAAM,GAAG,CAAA,CACT,GAAA,CAAI,CAAA,OAAA,KAAW,sBAAA,CAAuB,OAAO,CAAC,CAAA,CAC9C,IAAA,CAAK,GAAG,CAAA;AACb;AAEA,SAAS,iBAAiB,KAAA,EAAuB;AAC/C,EAAA,IAAI,KAAA,KAAU,KAAK,OAAO,KAAA;AAC1B,EAAA,IAAI,4BAAA,CAA6B,IAAA,CAAK,KAAK,CAAA,EAAG;AAC5C,IAAA,OAAO,yBAAyB,KAAK,CAAA;AAAA,EACvC;AAEA,EAAA,MAAM,iBAAA,GAAoB,4BAA4B,KAAK,CAAA;AAC3D,EAAA,IAAI,CAAC,iBAAA,EAAmB;AACtB,IAAA,OAAO,KAAA;AAAA,EACT;AACA,EAAA,MAAM,EAAE,cAAA,EAAgB,eAAA,EAAgB,GAAI,iBAAA;AAC5C,EAAA,OAAO,GAAG,wBAAA,CAAyB,cAAc,CAAC,CAAA,IAAA,EAAO,sBAAA,CAAuB,eAAe,CAAC,CAAA,CAAA;AAClG;AAEO,SAAS,uBAAuB,KAAA,EAAuB;AAC5D,EAAA,MAAM,OAAA,GAAU,MAAM,IAAA,EAAK;AAC3B,EAAA,IAAI,CAAC,OAAA,IAAW,OAAA,KAAY,GAAA,SAAY,OAAA,IAAW,GAAA;AAEnD,EAAA,MAAM,kBAAA,GAAqB,sBAAA,CAAuB,IAAA,CAAK,OAAO,CAAA;AAC9D,EAAA,IAAI,kBAAA,EAAoB;AACtB,IAAA,MAAM,GAAG,eAAA,EAAiB,cAAc,CAAA,GAAI,kBAAA;AAC5C,IAAA,OAAO,GAAG,wBAAA,CAAyB,cAAc,CAAC,CAAA,IAAA,EAAO,sBAAA,CAAuB,eAAe,CAAC,CAAA,CAAA;AAAA,EAClG;AAEA,EAAA,OAAO,yBAAyB,OAAO,CAAA;AACzC;AAEA,SAAS,kBAAkB,KAAA,EAAwB;AACjD,EAAA,IAAI,KAAA,KAAU,KAAK,OAAO,IAAA;AAC1B,EAAA,IAAI,4BAAA,CAA6B,IAAA,CAAK,KAAK,CAAA,EAAG,OAAO,IAAA;AACrD,EAAA,OAAO,2BAAA,CAA4B,KAAK,CAAA,IAAK,IAAA;AAC/C;AAEA,SAAS,4BAA4B,KAAA,EAAgC;AACnE,EAAA,MAAM,QAAkB,EAAC;AACzB,EAAA,IAAI,MAAA,GAAS,EAAA;AACb,EAAA,IAAI,YAAA,GAAe,KAAA;AACnB,EAAA,IAAI,YAAA,GAAe,KAAA;AACnB,EAAA,IAAI,KAAA,GAAQ,CAAA;AAEZ,EAAA,KAAA,IAAS,QAAQ,CAAA,EAAG,KAAA,GAAQ,KAAA,CAAM,MAAA,EAAQ,SAAS,CAAA,EAAG;AACpD,IAAA,MAAM,IAAA,GAAO,MAAM,KAAK,CAAA;AACxB,IAAA,MAAM,IAAA,GAAO,QAAQ,CAAA,GAAI,KAAA,CAAM,SAAS,KAAA,CAAM,KAAA,GAAQ,CAAC,CAAA,GAAI,EAAA;AAE3D,IAAA,IAAI,YAAA,EAAc;AAChB,MAAA,MAAA,IAAU,IAAA;AACV,MAAA,IAAI,IAAA,KAAS,GAAA,IAAO,IAAA,KAAS,GAAA,EAAK;AAChC,QAAA,MAAA,IAAU,IAAA;AACV,QAAA,KAAA,IAAS,CAAA;AACT,QAAA;AAAA,MACF;AACA,MAAA,IAAI,SAAS,GAAA,EAAK;AAChB,QAAA,YAAA,GAAe,KAAA;AAAA,MACjB;AACA,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,YAAA,EAAc;AAChB,MAAA,MAAA,IAAU,IAAA;AACV,MAAA,IAAI,IAAA,KAAS,GAAA,IAAO,IAAA,KAAS,GAAA,EAAK;AAChC,QAAA,MAAA,IAAU,IAAA;AACV,QAAA,KAAA,IAAS,CAAA;AACT,QAAA;AAAA,MACF;AACA,MAAA,IAAI,SAAS,GAAA,EAAK;AAChB,QAAA,YAAA,GAAe,KAAA;AAAA,MACjB;AACA,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,SAAS,GAAA,EAAK;AAChB,MAAA,YAAA,GAAe,IAAA;AACf,MAAA,MAAA,IAAU,IAAA;AACV,MAAA;AAAA,IACF;AACA,IAAA,IAAI,SAAS,GAAA,EAAK;AAChB,MAAA,YAAA,GAAe,IAAA;AACf,MAAA,MAAA,IAAU,IAAA;AACV,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,SAAS,GAAA,EAAK;AAChB,MAAA,KAAA,IAAS,CAAA;AACT,MAAA,MAAA,IAAU,IAAA;AACV,MAAA;AAAA,IACF;AACA,IAAA,IAAI,SAAS,GAAA,EAAK;AAChB,MAAA,KAAA,IAAS,CAAA;AACT,MAAA,IAAI,KAAA,GAAQ,GAAG,OAAO,IAAA;AACtB,MAAA,MAAA,IAAU,IAAA;AACV,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,IAAA,KAAS,GAAA,IAAO,KAAA,KAAU,CAAA,EAAG;AAC/B,MAAA,KAAA,CAAM,IAAA,CAAK,MAAA,CAAO,IAAA,EAAM,CAAA;AACxB,MAAA,MAAA,GAAS,EAAA;AACT,MAAA;AAAA,IACF;AAEA,IAAA,MAAA,IAAU,IAAA;AAAA,EACZ;AAEA,EAAA,IAAI,YAAA,IAAgB,YAAA,IAAgB,KAAA,KAAU,CAAA,EAAG;AAC/C,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,IAAI,MAAA,CAAO,IAAA,EAAK,CAAE,MAAA,GAAS,CAAA,EAAG;AAC5B,IAAA,KAAA,CAAM,IAAA,CAAK,MAAA,CAAO,IAAA,EAAM,CAAA;AAAA,EAC1B;AAEA,EAAA,OAAO,KAAA;AACT;AASO,SAAS,6BAA6B,OAAA,EAAyB;AACpE,EAAA,MAAM,OAAA,GAAU,QAAQ,IAAA,EAAK;AAC7B,EAAA,IAAI,CAAC,OAAA,IAAW,OAAA,KAAY,GAAA,SAAY,OAAA,IAAW,GAAA;AAEnD,EAAA,MAAM,MAAA,GAAS,4BAA4B,OAAO,CAAA;AAClD,EAAA,IAAI,CAAC,MAAA,IAAU,MAAA,CAAO,MAAA,KAAW,CAAA,EAAG;AAClC,IAAA,OAAO,OAAA;AAAA,EACT;AAEA,EAAA,IAAI,CAAC,MAAA,CAAO,KAAA,CAAM,iBAAiB,CAAA,EAAG;AACpC,IAAA,OAAO,OAAA;AAAA,EACT;AAEA,EAAA,OAAO,MAAA,CAAO,GAAA,CAAI,gBAAgB,CAAA,CAAE,KAAK,IAAI,CAAA;AAC/C;AAWA,IAAM,oBAAN,MAAiD;AAAA,EACtC,QAAA;AAAA,EAET,YAAY,QAAA,EAAoB;AAC9B,IAAA,IAAA,CAAK,QAAA,GAAW,QAAA;AAAA,EAClB;AAAA,EAEA,KAAA,GAAgB;AACd,IAAA,OAAO,KAAK,QAAA,CAAS,GAAA,CAAI,sBAAsB,CAAA,CAAE,KAAK,GAAG,CAAA;AAAA,EAC3D;AAAA,EAEA,QAAA,GAAmB;AACjB,IAAA,OAAO,KAAK,KAAA,EAAM;AAAA,EACpB;AACF,CAAA;AAKO,SAAS,cAAc,QAAA,EAAmC;AAC/D,EAAA,MAAM,mBAAmB,QAAA,CACtB,OAAA,CAAQ,aAAW,OAAA,CAAQ,KAAA,CAAM,GAAG,CAAC,CAAA,CACrC,IAAI,CAAA,OAAA,KAAW,OAAA,CAAQ,MAAM,CAAA,CAC7B,OAAO,CAAA,OAAA,KAAW,OAAA,CAAQ,SAAS,CAAC,CAAA;AAEvC,EAAA,OAAO,IAAI,kBAAkB,gBAAgB,CAAA;AAC/C;;;ACnMA,IAAM,iBAAA,GAAoB,8BAAA;AAE1B,SAAS,cAAc,IAAA,EAAuC;AAC5D,EAAA,MAAM,UAAA,GAAa,IAAA,CAAK,IAAA,EAAK,CAAE,WAAA,EAAY;AAC3C,EAAA,IAAI,CAAC,iBAAA,CAAkB,IAAA,CAAK,UAAU,CAAA,EAAG;AACvC,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,mBAAA,EAAsB,IAAI,CAAA,CAAA,CAAG,CAAA;AAAA,EAC/C;AACA,EAAA,OAAO,UAAA;AACT;AAEA,SAAS,uBAAuB,KAAA,EAAuB;AACrD,EAAA,OAAO,KAAA,CAAM,OAAA,CAAQ,IAAA,EAAM,IAAI,CAAA;AACjC;AAEA,SAAS,aAAa,KAAA,EAAqC;AACzD,EAAA,IAAI,KAAA,KAAU,MAAM,OAAO,MAAA;AAC3B,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,EAAU,OAAO,MAAA,CAAO,SAAS,KAAK,CAAA,GAAI,MAAA,CAAO,KAAK,CAAA,GAAI,MAAA;AAC/E,EAAA,IAAI,OAAO,KAAA,KAAU,SAAA,EAAW,OAAO,QAAQ,MAAA,GAAS,OAAA;AACxD,EAAA,OAAO,CAAA,CAAA,EAAI,sBAAA,CAAuB,KAAK,CAAC,CAAA,CAAA,CAAA;AAC1C;AAEA,SAAS,QAAA,CAAS,YAAoB,IAAA,EAAwC;AAC5E,EAAA,IAAI,CAAC,MAAM,OAAO,UAAA;AAClB,EAAA,OAAO,CAAA,EAAG,UAAU,CAAA,EAAA,EAAK,aAAA,CAAc,IAAI,CAAC,CAAA,CAAA;AAC9C;AAEA,SAAS,yBAAyB,OAAA,EAAoC;AACpE,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,OAAO,CAAA,EAAG;AAC1B,IAAA,OAAO,OAAA,CAAQ,IAAI,CAAA,MAAA,KAAU,sBAAA,CAAuB,MAAM,CAAC,CAAA,CAAE,KAAK,IAAI,CAAA;AAAA,EACxE;AACA,EAAA,OAAO,6BAA6B,OAAO,CAAA;AAC7C;AAMA,SAAS,uBAAuB,KAAA,EAA+C;AAC7E,EAAA,MAAM,OAAA,GAAU,MAAM,IAAA,EAAK;AAC3B,EAAA,IAAI,CAAC,SAAS,OAAO,IAAA;AAErB,EAAA,IAAI,CAAC,OAAA,CAAQ,UAAA,CAAW,GAAG,CAAA,EAAG;AAC5B,IAAA,OAAO;AAAA,MACL,eAAA,EAAiB,QAAQ,WAAA;AAAY,KACvC;AAAA,EACF;AAEA,EAAA,IAAI,KAAA,GAAQ,EAAA;AACZ,EAAA,IAAI,KAAA,GAAQ,CAAA;AACZ,EAAA,IAAI,MAAA,GAAS,KAAA;AACb,EAAA,OAAO,KAAA,GAAQ,QAAQ,MAAA,EAAQ;AAC7B,IAAA,MAAM,IAAA,GAAO,QAAQ,KAAK,CAAA;AAC1B,IAAA,MAAM,IAAA,GAAO,QAAQ,CAAA,GAAI,OAAA,CAAQ,SAAS,OAAA,CAAQ,KAAA,GAAQ,CAAC,CAAA,GAAI,EAAA;AAC/D,IAAA,IAAI,IAAA,KAAS,GAAA,IAAO,IAAA,KAAS,GAAA,EAAK;AAChC,MAAA,KAAA,IAAS,GAAA;AACT,MAAA,KAAA,IAAS,CAAA;AACT,MAAA;AAAA,IACF;AACA,IAAA,IAAI,SAAS,GAAA,EAAK;AAChB,MAAA,MAAA,GAAS,IAAA;AACT,MAAA,KAAA,IAAS,CAAA;AACT,MAAA;AAAA,IACF;AACA,IAAA,KAAA,IAAS,IAAA;AACT,IAAA,KAAA,IAAS,CAAA;AAAA,EACX;AAEA,EAAA,IAAI,CAAC,MAAA,IAAU,OAAA,CAAQ,KAAA,CAAM,KAAK,CAAA,CAAE,IAAA,EAAK,CAAE,MAAA,GAAS,CAAA,IAAK,CAAC,KAAA,CAAM,MAAK,EAAG;AACtE,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,OAAO;AAAA,IACL,eAAA,EAAiB;AAAA,GACnB;AACF;AAEA,SAAS,wBAAwB,SAAA,EAAqD;AACpF,EAAA,MAAM,OAAA,GAAU,UAAU,IAAA,EAAK;AAC/B,EAAA,IAAI,QAAA,GAAW,KAAA;AACf,EAAA,KAAA,IAAS,QAAQ,CAAA,EAAG,KAAA,GAAQ,OAAA,CAAQ,MAAA,EAAQ,SAAS,CAAA,EAAG;AACtD,IAAA,MAAM,IAAA,GAAO,QAAQ,KAAK,CAAA;AAC1B,IAAA,MAAM,IAAA,GAAO,QAAQ,CAAA,GAAI,OAAA,CAAQ,SAAS,OAAA,CAAQ,KAAA,GAAQ,CAAC,CAAA,GAAI,EAAA;AAC/D,IAAA,IAAI,SAAS,GAAA,EAAK;AAChB,MAAA,IAAI,QAAA,IAAY,SAAS,GAAA,EAAK;AAC5B,QAAA,KAAA,IAAS,CAAA;AACT,QAAA;AAAA,MACF;AACA,MAAA,QAAA,GAAW,CAAC,QAAA;AACZ,MAAA;AAAA,IACF;AACA,IAAA,IAAI,IAAA,KAAS,GAAA,IAAO,CAAC,QAAA,EAAU;AAC7B,MAAA,MAAM,gBAAgB,OAAA,CAAQ,KAAA,CAAM,CAAA,EAAG,KAAK,EAAE,IAAA,EAAK;AACnD,MAAA,MAAM,eAAe,OAAA,CAAQ,KAAA,CAAM,KAAA,GAAQ,CAAC,EAAE,IAAA,EAAK;AACnD,MAAA,IAAI,CAAC,aAAA,IAAiB,CAAC,YAAA,EAAc;AACnC,QAAA,OAAO,IAAA;AAAA,MACT;AACA,MAAA,OAAO,EAAE,aAAA,EAAc;AAAA,IACzB;AAAA,EACF;AACA,EAAA,OAAO,IAAA;AACT;AAEO,SAAS,uBAAA,CAAwB,WAAmB,MAAA,EAAoC;AAC7F,EAAA,IAAI,CAAC,QAAQ,OAAO,SAAA;AACpB,EAAA,MAAM,gBAAA,GAAmB,OAAO,IAAA,EAAK;AACrC,EAAA,IAAI,CAAC,gBAAA,EAAkB;AACrB,IAAA,MAAM,IAAI,MAAM,0CAA0C,CAAA;AAAA,EAC5D;AACA,EAAA,MAAM,mBAAA,GAAsB,UAAU,IAAA,EAAK;AAC3C,EAAA,MAAM,YAAA,GAAe,uBAAuB,gBAAgB,CAAA;AAC5D,EAAA,IAAI,CAAC,YAAA,EAAc;AACjB,IAAA,MAAM,IAAI,MAAM,0CAA0C,CAAA;AAAA,EAC5D;AACA,EAAA,MAAM,SAAA,GAAY,wBAAwB,mBAAmB,CAAA;AAC7D,EAAA,IAAI,SAAA,EAAW;AACb,IAAA,MAAM,iBAAA,GAAoB,sBAAA,CAAuB,SAAA,CAAU,aAAa,CAAA;AACxE,IAAA,MAAM,UAAA,GAAa,iBAAA,GACf,iBAAA,CAAkB,eAAA,KAAoB,YAAA,CAAa,kBACnD,mBAAA,CAAoB,UAAA,CAAW,CAAA,EAAG,gBAAgB,CAAA,CAAA,CAAG,CAAA;AACzD,IAAA,IAAI,UAAA,EAAY;AACd,MAAA,OAAO,mBAAA;AAAA,IACT;AACA,IAAA,MAAM,IAAI,KAAA;AAAA,MACR,CAAA,eAAA,EAAkB,gBAAgB,CAAA,yCAAA,EAA4C,mBAAmB,CAAA,CAAA;AAAA,KACnG;AAAA,EACF;AACA,EAAA,OAAO,CAAA,EAAG,gBAAgB,CAAA,CAAA,EAAI,mBAAmB,CAAA,CAAA;AACnD;AAEA,SAAS,qBAAqB,SAAA,EAAkD;AAC9E,EAAA,IAAI,CAAC,SAAA,CAAU,MAAA,EAAQ,OAAO,IAAA;AAC9B,EAAA,MAAM,SAAS,QAAA,CAAS,wBAAA,CAAyB,UAAU,MAAM,CAAA,EAAG,UAAU,WAAW,CAAA;AACzF,EAAA,MAAM,QAAQ,SAAA,CAAU,KAAA;AACxB,EAAA,MAAM,WAAA,GAAc;AAAA,IAClB,EAAA,EAAI,GAAA;AAAA,IACJ,GAAA,EAAK,IAAA;AAAA,IACL,EAAA,EAAI,GAAA;AAAA,IACJ,GAAA,EAAK,IAAA;AAAA,IACL,EAAA,EAAI,GAAA;AAAA,IACJ,GAAA,EAAK,IAAA;AAAA,IACL,IAAA,EAAM,MAAA;AAAA,IACN,KAAA,EAAO;AAAA,GACT;AAEA,EAAA,QAAQ,UAAU,QAAA;AAAU,IAC1B,KAAK,IAAA;AAAA,IACL,KAAK,KAAA;AAAA,IACL,KAAK,IAAA;AAAA,IACL,KAAK,KAAA;AAAA,IACL,KAAK,IAAA;AAAA,IACL,KAAK,KAAA;AAAA,IACL,KAAK,MAAA;AAAA,IACL,KAAK,OAAA,EAAS;AACZ,MAAA,IAAI,MAAM,OAAA,CAAQ,KAAK,CAAA,IAAK,KAAA,KAAU,QAAW,OAAO,IAAA;AACxD,MAAA,MAAM,MAAM,QAAA,CAAS,YAAA,CAAa,KAAK,CAAA,EAAG,UAAU,UAAU,CAAA;AAC9D,MAAA,OAAO,CAAA,EAAG,MAAM,CAAA,CAAA,EAAI,WAAA,CAAY,UAAU,QAAQ,CAAC,IAAI,GAAG,CAAA,CAAA;AAAA,IAC5D;AAAA,IACA,KAAK,IAAA,EAAM;AACT,MAAA,IAAI,KAAA,KAAU,IAAA,EAAM,OAAO,CAAA,EAAG,MAAM,CAAA,QAAA,CAAA;AACpC,MAAA,IAAI,KAAA,KAAU,IAAA,EAAM,OAAO,CAAA,EAAG,MAAM,CAAA,QAAA,CAAA;AACpC,MAAA,IAAI,KAAA,KAAU,KAAA,EAAO,OAAO,CAAA,EAAG,MAAM,CAAA,SAAA,CAAA;AACrC,MAAA,OAAO,IAAA;AAAA,IACT;AAAA,IACA,KAAK,IAAA,EAAM;AACT,MAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,KAAK,GAAG,OAAO,IAAA;AAClC,MAAA,IAAI,KAAA,CAAM,MAAA,KAAW,CAAA,EAAG,OAAO,OAAA;AAC/B,MAAA,MAAM,MAAA,GAAS,KAAA,CAAM,GAAA,CAAI,CAAA,IAAA,KAAQ,QAAA,CAAS,aAAa,IAAI,CAAA,EAAG,SAAA,CAAU,UAAU,CAAC,CAAA;AACnF,MAAA,OAAO,GAAG,MAAM,CAAA,KAAA,EAAQ,MAAA,CAAO,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,CAAA;AAAA,IAC3C;AAAA,IACA;AACE,MAAA,OAAO,IAAA;AAAA;AAEb;AAEO,SAAS,sBAAsB,KAAA,EASpB;AAChB,EAAA,MAAM,eAAyB,EAAC;AAChC,EAAA,KAAA,MAAW,SAAA,IAAa,MAAM,UAAA,EAAY;AACxC,IAAA,MAAM,MAAA,GAAS,qBAAqB,SAAS,CAAA;AAC7C,IAAA,IAAI,CAAC,QAAQ,OAAO,IAAA;AACpB,IAAA,YAAA,CAAa,KAAK,MAAM,CAAA;AAAA,EAC1B;AAEA,EAAA,IAAI,QAAQ,KAAA,CAAM,KAAA;AAClB,EAAA,IAAI,SAAS,KAAA,CAAM,MAAA;AACnB,EAAA,IAAI,KAAA,KAAU,MAAA,IAAa,KAAA,CAAM,QAAA,KAAa,MAAA,EAAW;AACvD,IAAA,KAAA,GAAQ,KAAA,CAAM,QAAA;AAAA,EAChB;AACA,EAAA,IACE,MAAA,KAAW,MAAA,IACX,KAAA,CAAM,QAAA,KAAa,MAAA,IACnB,MAAM,WAAA,KAAgB,MAAA,IACtB,KAAA,CAAM,WAAA,GAAc,CAAA,EACpB;AACA,IAAA,MAAA,GAAA,CAAU,KAAA,CAAM,WAAA,GAAc,CAAA,IAAK,KAAA,CAAM,QAAA;AAAA,EAC3C;AAEA,EAAA,MAAM,QAAA,GAAW;AAAA,IACf,CAAA,OAAA,EAAU,yBAAyB,KAAA,CAAM,OAAO,CAAC,CAAA,MAAA,EAAS,wBAAA,CAAyB,KAAA,CAAM,SAAS,CAAC,CAAA;AAAA,GACrG;AAEA,EAAA,IAAI,YAAA,CAAa,SAAS,CAAA,EAAG;AAC3B,IAAA,QAAA,CAAS,KAAK,CAAA,MAAA,EAAS,YAAA,CAAa,IAAA,CAAK,OAAO,CAAC,CAAA,CAAE,CAAA;AAAA,EACrD;AAEA,EAAA,IAAI,KAAA,CAAM,OAAO,KAAA,EAAO;AACtB,IAAA,MAAM,SAAA,GAAY,KAAA,CAAM,KAAA,CAAM,SAAA,KAAc,eAAe,MAAA,GAAS,KAAA;AACpE,IAAA,QAAA,CAAS,IAAA,CAAK,YAAY,wBAAA,CAAyB,KAAA,CAAM,MAAM,KAAK,CAAC,CAAA,CAAA,EAAI,SAAS,CAAA,CAAE,CAAA;AAAA,EACtF;AAEA,EAAA,IAAI,UAAU,MAAA,EAAW;AACvB,IAAA,QAAA,CAAS,IAAA,CAAK,CAAA,MAAA,EAAS,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,KAAK,KAAA,CAAM,KAAK,CAAC,CAAC,CAAA,CAAE,CAAA;AAAA,EACzD;AAEA,EAAA,IAAI,WAAW,MAAA,EAAW;AACxB,IAAA,QAAA,CAAS,IAAA,CAAK,CAAA,OAAA,EAAU,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,KAAK,KAAA,CAAM,MAAM,CAAC,CAAC,CAAA,CAAE,CAAA;AAAA,EAC3D;AAEA,EAAA,OAAO,CAAA,EAAG,QAAA,CAAS,IAAA,CAAK,GAAG,CAAC,CAAA,CAAA,CAAA;AAC9B;AAEA,SAAS,mBAAmB,OAAA,EAAyB;AACnD,EAAA,OAAO,OAAA,CAAQ,OAAA,CAAQ,OAAA,EAAS,KAAK,CAAA;AACvC;AAEA,SAAS,iBAAiB,KAAA,EAA4C;AACpE,EAAA,IAAI,KAAA,KAAU,QAAW,OAAO,SAAA;AAChC,EAAA,IACE,KAAA,KAAU,IAAA,IACV,OAAO,KAAA,KAAU,QAAA,IACjB,OAAO,KAAA,KAAU,QAAA,IACjB,OAAO,KAAA,KAAU,SAAA,EACjB;AACA,IAAA,OAAO,aAAa,KAAK,CAAA;AAAA,EAC3B;AACA,EAAA,OAAO,IAAI,sBAAA,CAAuB,IAAA,CAAK,SAAA,CAAU,KAAK,CAAC,CAAC,CAAA,QAAA,CAAA;AAC1D;AAEA,SAAS,0BAA0B,SAAA,EAA2C;AAC5E,EAAA,MAAM,KAAA,GAAQ,qBAAqB,SAAS,CAAA;AAC5C,EAAA,IAAI,OAAO,OAAO,KAAA;AAElB,EAAA,MAAM,YAAA,GAAe,kBAAA,CAAmB,IAAA,CAAK,SAAA,CAAU,SAAS,CAAC,CAAA;AACjE,EAAA,IAAI,CAAC,UAAU,MAAA,EAAQ;AACrB,IAAA,OAAO,kCAAkC,YAAY,CAAA,GAAA,CAAA;AAAA,EACvD;AAEA,EAAA,MAAM,SAAS,QAAA,CAAS,wBAAA,CAAyB,UAAU,MAAM,CAAA,EAAG,UAAU,WAAW,CAAA;AACzF,EAAA,MAAM,QAAQ,SAAA,CAAU,KAAA;AACxB,EAAA,MAAM,MAAM,QAAA,CAAS,gBAAA,CAAiB,KAAoC,CAAA,EAAG,UAAU,UAAU,CAAA;AAEjG,EAAA,QAAQ,UAAU,QAAA;AAAU,IAC1B,KAAK,UAAA;AACH,MAAA,OAAO,CAAA,EAAG,MAAM,CAAA,IAAA,EAAO,GAAG,CAAA,CAAA;AAAA,IAC5B,KAAK,aAAA;AACH,MAAA,OAAO,CAAA,EAAG,MAAM,CAAA,IAAA,EAAO,GAAG,CAAA,CAAA;AAAA,IAC5B,KAAK,KAAA;AACH,MAAA,OAAO,uCAAuC,YAAY,CAAA,GAAA,CAAA;AAAA,IAC5D,KAAK,IAAA;AACH,MAAA,OAAO,sCAAsC,YAAY,CAAA,GAAA,CAAA;AAAA,IAC3D;AACE,MAAA,OAAO,kCAAkC,YAAY,CAAA,GAAA,CAAA;AAAA;AAE3D;AAEA,SAAS,sBAAA,CACP,QAAA,EACA,KAAA,EACA,KAAA,EACA,MAAA,EACA;AACA,EAAA,IAAI,OAAO,KAAA,EAAO;AAChB,IAAA,MAAM,SAAA,GAAY,KAAA,CAAM,SAAA,KAAc,YAAA,GAAe,MAAA,GAAS,KAAA;AAC9D,IAAA,QAAA,CAAS,IAAA,CAAK,YAAY,wBAAA,CAAyB,KAAA,CAAM,KAAK,CAAC,CAAA,CAAA,EAAI,SAAS,CAAA,CAAE,CAAA;AAAA,EAChF;AACA,EAAA,IAAI,UAAU,MAAA,EAAW;AACvB,IAAA,QAAA,CAAS,IAAA,CAAK,CAAA,MAAA,EAAS,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,KAAK,KAAA,CAAM,KAAK,CAAC,CAAC,CAAA,CAAE,CAAA;AAAA,EACzD;AACA,EAAA,IAAI,WAAW,MAAA,EAAW;AACxB,IAAA,QAAA,CAAS,IAAA,CAAK,CAAA,OAAA,EAAU,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,KAAK,KAAA,CAAM,MAAM,CAAC,CAAC,CAAA,CAAE,CAAA;AAAA,EAC3D;AACF;AAEO,SAAS,sBAAsB,KAAA,EAS3B;AACT,EAAA,MAAM,QAAA,GAAW;AAAA,IACf,CAAA,OAAA,EAAU,yBAAyB,KAAA,CAAM,OAAO,CAAC,CAAA,MAAA,EAAS,wBAAA,CAAyB,KAAA,CAAM,SAAS,CAAC,CAAA;AAAA,GACrG;AACA,EAAA,IAAI,KAAA,CAAM,YAAY,MAAA,EAAQ;AAC5B,IAAA,MAAM,YAAA,GAAe,KAAA,CAAM,UAAA,CAAW,GAAA,CAAI,yBAAyB,CAAA;AACnE,IAAA,QAAA,CAAS,KAAK,CAAA,MAAA,EAAS,YAAA,CAAa,IAAA,CAAK,OAAO,CAAC,CAAA,CAAE,CAAA;AAAA,EACrD;AACA,EAAA,MAAM,UAAA,GAAa,kBAAkB,KAAK,CAAA;AAC1C,EAAA,sBAAA,CAAuB,UAAU,KAAA,CAAM,KAAA,EAAO,UAAA,CAAW,KAAA,EAAO,WAAW,MAAM,CAAA;AACjF,EAAA,OAAO,CAAA,EAAG,QAAA,CAAS,IAAA,CAAK,GAAG,CAAC,CAAA,CAAA,CAAA;AAC9B;AAEA,SAAS,4BAA4B,SAAA,EAAuC;AAC1E,EAAA,IAAI,CAAC,SAAA,EAAW,IAAA,EAAK,EAAG;AACtB,IAAA,OAAO,qBAAA;AAAA,EACT;AACA,EAAA,OAAO,yBAAyB,SAAS,CAAA;AAC3C;AAEO,SAAS,oBAAoB,OAAA,EAAsC;AACxE,EAAA,MAAM,IAAA,GAAO,KAAA,CAAM,OAAA,CAAQ,OAAA,CAAQ,WAAW,IAC1C,OAAA,CAAQ,WAAA,GACR,CAAC,OAAA,CAAQ,WAAW,CAAA;AACxB,EAAA,MAAM,UAAoB,EAAC;AAC3B,EAAA,MAAM,IAAA,uBAAW,GAAA,EAAY;AAC7B,EAAA,KAAA,MAAW,OAAO,IAAA,EAAM;AACtB,IAAA,KAAA,MAAW,MAAA,IAAU,MAAA,CAAO,IAAA,CAAK,GAAG,CAAA,EAAG;AACrC,MAAA,IAAI,IAAA,CAAK,GAAA,CAAI,MAAM,CAAA,EAAG;AACtB,MAAA,IAAA,CAAK,IAAI,MAAM,CAAA;AACf,MAAA,OAAA,CAAQ,KAAK,MAAM,CAAA;AAAA,IACrB;AAAA,EACF;AAEA,EAAA,MAAM,WAAW,CAAC,CAAA,YAAA,EAAe,yBAAyB,OAAA,CAAQ,UAAU,CAAC,CAAA,CAAE,CAAA;AAE/E,EAAA,IAAI,CAAC,IAAA,CAAK,MAAA,IAAU,CAAC,QAAQ,MAAA,EAAQ;AACnC,IAAA,QAAA,CAAS,KAAK,gBAAgB,CAAA;AAC9B,IAAA,IAAI,IAAA,CAAK,SAAS,CAAA,EAAG;AACnB,MAAA,QAAA,CAAS,IAAA,CAAK,CAAA,UAAA,EAAa,IAAA,CAAK,MAAM,CAAA,oCAAA,CAAsC,CAAA;AAAA,IAC9E;AAAA,EACF,CAAA,MAAO;AACL,IAAA,MAAM,YAAA,GAAe,IAAA,CAClB,GAAA,CAAI,CAAA,GAAA,KAAO;AACV,MAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,GAAA,CAAI,CAAA,MAAA,KAAU;AACnC,QAAA,MAAM,YAAY,MAAA,CAAO,SAAA,CAAU,cAAA,CAAe,IAAA,CAAK,KAAK,MAAM,CAAA;AAClE,QAAA,IAAI,CAAC,SAAA,EAAW;AACd,UAAA,OAAO,OAAA,CAAQ,kBAAkB,MAAA,GAAS,SAAA;AAAA,QAC5C;AACA,QAAA,MAAM,QAAA,GAAY,IAAoD,MAAM,CAAA;AAC5E,QAAA,OAAO,iBAAiB,QAAQ,CAAA;AAAA,MAClC,CAAC,CAAA;AACD,MAAA,OAAO,CAAA,CAAA,EAAI,MAAA,CAAO,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,CAAA;AAAA,IAC9B,CAAC,CAAA,CACA,IAAA,CAAK,IAAI,CAAA;AACZ,IAAA,MAAM,YAAA,GAAe,QAAQ,GAAA,CAAI,CAAA,MAAA,KAAU,yBAAyB,MAAM,CAAC,CAAA,CAAE,IAAA,CAAK,IAAI,CAAA;AACtF,IAAA,QAAA,CAAS,IAAA,CAAK,CAAA,CAAA,EAAI,YAAY,CAAA,CAAA,CAAG,CAAA;AACjC,IAAA,QAAA,CAAS,IAAA,CAAK,CAAA,OAAA,EAAU,YAAY,CAAA,CAAE,CAAA;AAAA,EACxC;AAEA,EAAA,IAAI,QAAQ,WAAA,EAAa;AACvB,IAAA,MAAM,kBAAkB,KAAA,CAAM,OAAA,CAAQ,OAAA,CAAQ,WAAW,IACrD,OAAA,CAAQ,WAAA,CAAY,GAAA,CAAI,CAAA,MAAA,KAAU,yBAAyB,MAAM,CAAC,EAAE,IAAA,CAAK,IAAI,IAC7E,OAAA,CAAQ,WAAA;AACZ,IAAA,IAAI,OAAA,CAAQ,eAAe,MAAA,CAAO,IAAA,CAAK,QAAQ,WAAW,CAAA,CAAE,SAAS,CAAA,EAAG;AACtE,MAAA,MAAM,WAAA,GAAc,MAAA,CAAO,OAAA,CAAQ,OAAA,CAAQ,WAAW,CAAA,CAAE,GAAA;AAAA,QAAI,CAAC,CAAC,MAAA,EAAQ,KAAK,CAAA,KACzE,CAAA,EAAG,wBAAA,CAAyB,MAAM,CAAC,CAAA,GAAA,EAAM,gBAAA,CAAiB,KAAwB,CAAC,CAAA;AAAA,OACrF;AACA,MAAA,QAAA,CAAS,IAAA,CAAK,gBAAgB,eAAe,CAAA,gBAAA,EAAmB,YAAY,IAAA,CAAK,IAAI,CAAC,CAAA,CAAE,CAAA;AAAA,IAC1F,CAAA,MAAO;AACL,MAAA,QAAA,CAAS,IAAA,CAAK,CAAA,aAAA,EAAgB,eAAe,CAAA,YAAA,CAAc,CAAA;AAAA,IAC7D;AAAA,EACF;AAEA,EAAA,IAAI,QAAQ,OAAA,EAAS;AACnB,IAAA,QAAA,CAAS,KAAK,CAAA,UAAA,EAAa,wBAAA,CAAyB,OAAA,CAAQ,OAAO,CAAC,CAAA,CAAE,CAAA;AAAA,EACxE;AAEA,EAAA,OAAO,CAAA,EAAG,QAAA,CAAS,IAAA,CAAK,GAAG,CAAC,CAAA,CAAA,CAAA;AAC9B;AAEO,SAAS,oBAAoB,OAAA,EAAsC;AACxE,EAAA,MAAM,WAAA,GAAc,MAAA,CAAO,OAAA,CAAQ,OAAA,CAAQ,WAAW,CAAA,CAAE,GAAA;AAAA,IAAI,CAAC,CAAC,MAAA,EAAQ,KAAK,CAAA,KACzE,CAAA,EAAG,wBAAA,CAAyB,MAAM,CAAC,CAAA,GAAA,EAAM,gBAAA,CAAiB,KAAwB,CAAC,CAAA;AAAA,GACrF;AACA,EAAA,MAAM,QAAA,GAAW;AAAA,IACf,CAAA,OAAA,EAAU,2BAAA,CAA4B,OAAA,CAAQ,UAAU,CAAC,CAAA,KAAA,EAAQ,WAAA,CAAY,MAAA,GAAS,WAAA,CAAY,IAAA,CAAK,IAAI,CAAA,GAAI,iBAAiB,CAAA;AAAA,GAClI;AACA,EAAA,IAAI,OAAA,CAAQ,YAAY,MAAA,EAAQ;AAC9B,IAAA,MAAM,YAAA,GAAe,OAAA,CAAQ,UAAA,CAAW,GAAA,CAAI,yBAAyB,CAAA;AACrE,IAAA,QAAA,CAAS,KAAK,CAAA,MAAA,EAAS,YAAA,CAAa,IAAA,CAAK,OAAO,CAAC,CAAA,CAAE,CAAA;AAAA,EACrD;AACA,EAAA,MAAM,aAAa,iBAAA,CAAkB;AAAA,IACnC,aAAa,OAAA,CAAQ,YAAA;AAAA,IACrB,UAAU,OAAA,CAAQ;AAAA,GACnB,CAAA;AACD,EAAA,sBAAA,CAAuB,UAAU,OAAA,CAAQ,OAAA,EAAS,UAAA,CAAW,KAAA,EAAO,WAAW,MAAM,CAAA;AACrF,EAAA,IAAI,QAAQ,OAAA,EAAS;AACnB,IAAA,QAAA,CAAS,KAAK,CAAA,UAAA,EAAa,wBAAA,CAAyB,OAAA,CAAQ,OAAO,CAAC,CAAA,CAAE,CAAA;AAAA,EACxE;AACA,EAAA,OAAO,CAAA,EAAG,QAAA,CAAS,IAAA,CAAK,GAAG,CAAC,CAAA,CAAA,CAAA;AAC9B;AAEO,SAAS,oBAAoB,OAAA,EAAsC;AACxE,EAAA,MAAM,WAAW,CAAC,CAAA,YAAA,EAAe,yBAAyB,OAAA,CAAQ,UAAU,CAAC,CAAA,CAAE,CAAA;AAC/E,EAAA,MAAM,eAAyB,EAAC;AAChC,EAAA,IAAI,QAAQ,WAAA,EAAa;AACvB,IAAA,YAAA,CAAa,KAAK,CAAA,gBAAA,EAAmB,YAAA,CAAa,OAAA,CAAQ,WAAW,CAAC,CAAA,CAAE,CAAA;AAAA,EAC1E;AACA,EAAA,IAAI,OAAA,CAAQ,YAAY,MAAA,EAAQ;AAC9B,IAAA,YAAA,CAAa,KAAK,GAAG,OAAA,CAAQ,UAAA,CAAW,GAAA,CAAI,yBAAyB,CAAC,CAAA;AAAA,EACxE;AACA,EAAA,IAAI,aAAa,MAAA,EAAQ;AACvB,IAAA,QAAA,CAAS,KAAK,CAAA,MAAA,EAAS,YAAA,CAAa,IAAA,CAAK,OAAO,CAAC,CAAA,CAAE,CAAA;AAAA,EACrD;AACA,EAAA,MAAM,aAAa,iBAAA,CAAkB;AAAA,IACnC,aAAa,OAAA,CAAQ,YAAA;AAAA,IACrB,UAAU,OAAA,CAAQ;AAAA,GACnB,CAAA;AACD,EAAA,sBAAA,CAAuB,UAAU,OAAA,CAAQ,OAAA,EAAS,UAAA,CAAW,KAAA,EAAO,WAAW,MAAM,CAAA;AACrF,EAAA,IAAI,QAAQ,OAAA,EAAS;AACnB,IAAA,QAAA,CAAS,KAAK,CAAA,UAAA,EAAa,wBAAA,CAAyB,OAAA,CAAQ,OAAO,CAAC,CAAA,CAAE,CAAA;AAAA,EACxE;AACA,EAAA,OAAO,CAAA,EAAG,QAAA,CAAS,IAAA,CAAK,GAAG,CAAC,CAAA,CAAA,CAAA;AAC9B;AAEA,SAAS,qBAAqB,MAAA,EAAiC;AAC7D,EAAA,MAAM,MAAA,GAAS,wBAAA,CAAyB,MAAA,CAAO,MAAM,CAAA;AACrD,EAAA,MAAM,QAAQ,MAAA,CAAO,KAAA;AACrB,EAAA,QAAQ,OAAO,QAAA;AAAU,IACvB,KAAK,IAAA;AAAA,IACL,KAAK,KAAA;AAAA,IACL,KAAK,IAAA;AAAA,IACL,KAAK,KAAA;AAAA,IACL,KAAK,IAAA;AAAA,IACL,KAAK,KAAA;AAAA,IACL,KAAK,MAAA;AAAA,IACL,KAAK,OAAA,EAAS;AACZ,MAAA,IAAI,KAAA,KAAU,MAAA,IAAa,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AAC/C,QAAA,OAAO,mCAAmC,kBAAA,CAAmB,IAAA,CAAK,SAAA,CAAU,MAAM,CAAC,CAAC,CAAA,GAAA,CAAA;AAAA,MACtF;AACA,MAAA,MAAM,WAAA,GAAc;AAAA,QAClB,EAAA,EAAI,GAAA;AAAA,QACJ,GAAA,EAAK,IAAA;AAAA,QACL,EAAA,EAAI,GAAA;AAAA,QACJ,GAAA,EAAK,IAAA;AAAA,QACL,EAAA,EAAI,GAAA;AAAA,QACJ,GAAA,EAAK,IAAA;AAAA,QACL,IAAA,EAAM,MAAA;AAAA,QACN,KAAA,EAAO;AAAA,OACT;AACA,MAAA,OAAO,CAAA,EAAG,MAAM,CAAA,CAAA,EAAI,WAAA,CAAY,MAAA,CAAO,QAAQ,CAAC,CAAA,CAAA,EAAI,YAAA,CAAa,KAAK,CAAC,CAAA,CAAA;AAAA,IACzE;AAAA,IACA,KAAK,IAAA;AACH,MAAA,IAAI,KAAA,KAAU,IAAA,EAAM,OAAO,CAAA,EAAG,MAAM,CAAA,QAAA,CAAA;AACpC,MAAA,IAAI,KAAA,KAAU,IAAA,EAAM,OAAO,CAAA,EAAG,MAAM,CAAA,QAAA,CAAA;AACpC,MAAA,IAAI,KAAA,KAAU,KAAA,EAAO,OAAO,CAAA,EAAG,MAAM,CAAA,SAAA,CAAA;AACrC,MAAA,OAAO,mCAAmC,kBAAA,CAAmB,IAAA,CAAK,SAAA,CAAU,MAAM,CAAC,CAAC,CAAA,GAAA,CAAA;AAAA,IACtF,KAAK,IAAA;AACH,MAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACzB,QAAA,OAAO,mCAAmC,kBAAA,CAAmB,IAAA,CAAK,SAAA,CAAU,MAAM,CAAC,CAAC,CAAA,GAAA,CAAA;AAAA,MACtF;AACA,MAAA,IAAI,KAAA,CAAM,MAAA,KAAW,CAAA,EAAG,OAAO,OAAA;AAC/B,MAAA,OAAO,CAAA,EAAG,MAAM,CAAA,KAAA,EAAQ,KAAA,CAAM,GAAA,CAAI,CAAA,IAAA,KAAQ,YAAA,CAAa,IAAI,CAAC,CAAA,CAAE,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,CAAA;AAAA,IAC1E;AACE,MAAA,OAAO,mCAAmC,kBAAA,CAAmB,IAAA,CAAK,SAAA,CAAU,MAAM,CAAC,CAAC,CAAA,GAAA,CAAA;AAAA;AAE1F;AAEO,SAAS,iBAAiB,OAAA,EAAmC;AAClE,EAAA,MAAM,WAAA,GAAc,QAAQ,IAAA,GAAO,MAAA,CAAO,QAAQ,OAAA,CAAQ,IAAI,IAAI,EAAC;AACnE,EAAA,MAAM,aAAa,WAAA,CAChB,GAAA,CAAI,CAAC,CAAC,GAAA,EAAK,KAAK,CAAA,KAAM,CAAA,EAAG,yBAAyB,GAAG,CAAC,OAAO,gBAAA,CAAiB,KAAwB,CAAC,CAAA,CAAE,CAAA,CACzG,KAAK,IAAI,CAAA;AACZ,EAAA,MAAM,cAAc,OAAA,CAAQ,MAAA,GACxB,CAAA,EAAG,wBAAA,CAAyB,QAAQ,MAAM,CAAC,CAAA,CAAA,EAAI,wBAAA,CAAyB,QAAQ,QAAQ,CAAC,CAAA,CAAA,GACzF,wBAAA,CAAyB,QAAQ,QAAQ,CAAA;AAC7C,EAAA,MAAM,QAAA,GAAW;AAAA,IACf,CAAA,OAAA,EAAU,OAAA,CAAQ,MAAA,GAAS,4BAAA,CAA6B,OAAA,CAAQ,MAAM,CAAA,GAAI,GAAG,CAAA,MAAA,EAAS,WAAW,CAAA,CAAA,EAAI,UAAU,CAAA,CAAA;AAAA,GACjH;AACA,EAAA,IAAI,OAAA,CAAQ,SAAS,MAAA,EAAQ;AAC3B,IAAA,QAAA,CAAS,IAAA,CAAK,CAAA,MAAA,EAAS,OAAA,CAAQ,OAAA,CAAQ,GAAA,CAAI,oBAAoB,CAAA,CAAE,IAAA,CAAK,OAAO,CAAC,CAAA,CAAE,CAAA;AAAA,EAClF;AACA,EAAA,IAAI,OAAA,CAAQ,OAAO,MAAA,EAAQ;AACzB,IAAA,MAAM,SAAA,GAAY,OAAA,CAAQ,KAAA,CAAM,SAAA,KAAc,QAAQ,MAAA,GAAS,KAAA;AAC/D,IAAA,QAAA,CAAS,IAAA,CAAK,YAAY,wBAAA,CAAyB,OAAA,CAAQ,MAAM,MAAM,CAAC,CAAA,CAAA,EAAI,SAAS,CAAA,CAAE,CAAA;AAAA,EACzF;AACA,EAAA,IAAI,OAAA,CAAQ,UAAU,MAAA,EAAW;AAC/B,IAAA,QAAA,CAAS,IAAA,CAAK,CAAA,MAAA,EAAS,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,IAAA,CAAK,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAC,CAAC,CAAA,CAAE,CAAA;AAAA,EACjE;AACA,EAAA,IAAI,OAAA,CAAQ,WAAW,MAAA,EAAW;AAChC,IAAA,QAAA,CAAS,IAAA,CAAK,CAAA,OAAA,EAAU,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,IAAA,CAAK,KAAA,CAAM,OAAA,CAAQ,MAAM,CAAC,CAAC,CAAA,CAAE,CAAA;AAAA,EACnE;AACA,EAAA,OAAO,CAAA,EAAG,QAAA,CAAS,IAAA,CAAK,GAAG,CAAC,CAAA,CAAA,CAAA;AAC9B;;;AC/fO,IAAM,uBAAA,GAA0B,uBAAA;AAEvC,SAAS,sBAAsB,KAAA,EAAwB;AACrD,EAAA,IAAI,KAAA,KAAU,QAAW,OAAO,WAAA;AAChC,EAAA,IAAI,KAAA,KAAU,MAAM,OAAO,MAAA;AAC3B,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,IAAA,OAAO,KAAA,CAAM,MAAK,CAAE,MAAA,GAAS,IAAI,IAAA,CAAK,SAAA,CAAU,KAAK,CAAA,GAAI,iBAAA;AAAA,EAC3D;AACA,EAAA,OAAO,GAAG,OAAO,KAAK,IAAI,IAAA,CAAK,SAAA,CAAU,KAAK,CAAC,CAAA,CAAA;AACjD;AAEA,SAAS,mBAAA,CAAoB,SAAiB,IAAA,EAAkC;AAC9E,EAAA,OAAO,IAAI,kBAAA,CAAmB;AAAA,IAC5B,IAAA,EAAM,aAAA;AAAA,IACN,OAAA;AAAA,IACA,MAAA,EAAQ,CAAA;AAAA,IACR;AAAA,GACD,CAAA;AACH;AAOO,SAAS,6BAAA,CACd,KAAA,EACA,OAAA,GAAgD,EAAC,EACzC;AACR,EAAA,MAAM,KAAA,GAAQ,QAAQ,KAAA,IAAS,yBAAA;AAC/B,EAAA,MAAM,SAAA,GAAY,SAAS,OAAA,CAAQ,cAAA;AAEnC,EAAA,IAAI,SAAA,KAAc,MAAA,IAAa,SAAA,KAAc,IAAA,EAAM;AACjD,IAAA,MAAM,mBAAA;AAAA,MACJ,CAAA,EAAG,KAAK,CAAA,oDAAA,EAAuD,qBAAA,CAAsB,KAAK,CAAC,CAAA,CAAA,CAAA;AAAA,MAC3F;AAAA,KACF;AAAA,EACF;AAEA,EAAA,MAAM,OAAA,GAAU,UAAU,IAAA,EAAK;AAC/B,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,MAAM,mBAAA;AAAA,MACJ,CAAA,EAAG,KAAK,CAAA,oDAAA,EAAuD,qBAAA,CAAsB,SAAS,CAAC,CAAA,CAAA,CAAA;AAAA,MAC/F;AAAA,KACF;AAAA,EACF;AAEA,EAAA,IAAI,MAAA;AACJ,EAAA,IAAI;AACF,IAAA,MAAA,GAAS,IAAI,IAAI,OAAO,CAAA;AAAA,EAC1B,CAAA,CAAA,MAAQ;AACN,IAAA,MAAM,mBAAA;AAAA,MACJ,CAAA,EAAG,KAAK,CAAA,gDAAA,EAAmD,qBAAA,CAAsB,SAAS,CAAC,CAAA,CAAA,CAAA;AAAA,MAC3F;AAAA,KACF;AAAA,EACF;AAEA,EAAA,IAAI,MAAA,CAAO,QAAA,KAAa,OAAA,IAAW,MAAA,CAAO,aAAa,QAAA,EAAU;AAC/D,IAAA,MAAM,mBAAA;AAAA,MACJ,GAAG,KAAK,CAAA,kCAAA,EAAqC,IAAA,CAAK,SAAA,CAAU,OAAO,CAAC,CAAA,CAAA,CAAA;AAAA,MACpE;AAAA,KACF;AAAA,EACF;AAEA,EAAA,IAAI,MAAA,CAAO,MAAA,IAAU,MAAA,CAAO,IAAA,EAAM;AAChC,IAAA,MAAM,mBAAA;AAAA,MACJ,GAAG,KAAK,CAAA,+DAAA,EAAkE,IAAA,CAAK,SAAA,CAAU,OAAO,CAAC,CAAA,CAAA,CAAA;AAAA,MACjG;AAAA,KACF;AAAA,EACF;AAEA,EAAA,OAAO,MAAA,CAAO,QAAA,EAAS,CAAE,OAAA,CAAQ,QAAQ,EAAE,CAAA;AAC7C;AAEO,SAAS,qBAAA,CAAsB,SAAiB,IAAA,EAAsB;AAC3E,EAAA,IAAI,CAAC,IAAA,CAAK,UAAA,CAAW,GAAG,CAAA,EAAG;AACzB,IAAA,MAAM,mBAAA;AAAA,MACJ,CAAA,kDAAA,EAAqD,IAAA,CAAK,SAAA,CAAU,IAAI,CAAC,CAAA,CAAA,CAAA;AAAA,MACzE;AAAA,KACF;AAAA,EACF;AAEA,EAAA,OAAO,CAAA,EAAG,OAAO,CAAA,EAAG,IAAI,CAAA,CAAA;AAC1B;;;ACrFA,IAAA,eAAA,GAAA;AAAA,EAyNE,OAAA,EAAW;AACb,CAAA;;;ACxNO,IAAM,kBAAkB,eAAA,CAAY,OAAA;AAEpC,SAAS,oBAAoB,OAAA,EAAyB;AAC3D,EAAA,OAAO,CAAA,EAAG,OAAO,CAAA,CAAA,EAAI,eAAe,CAAA,CAAA;AACtC;;;ACNA,SAAS,OAAA,GAAmD;AAC1D,EAAA,MAAM,YAAa,UAAA,CAAkC,IAAA;AACrD,EAAA,OAAO,OAAO,SAAA,KAAc,UAAA,GAAc,SAAA,GAA0C,MAAA;AACtF;AAEA,SAAS,OAAA,GAAmD;AAC1D,EAAA,MAAM,YAAa,UAAA,CAAkC,IAAA;AACrD,EAAA,OAAO,OAAO,SAAA,KAAc,UAAA,GAAc,SAAA,GAA0C,MAAA;AACtF;AAEA,SAAS,oBAAoB,KAAA,EAA2B;AACtD,EAAA,IAAI,MAAA,GAAS,EAAA;AACb,EAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,IAAA,MAAA,IAAU,MAAA,CAAO,aAAa,IAAI,CAAA;AAAA,EACpC;AACA,EAAA,OAAO,MAAA;AACT;AAEA,SAAS,oBAAoB,MAAA,EAA4B;AACvD,EAAA,MAAM,KAAA,GAAQ,IAAI,UAAA,CAAW,MAAA,CAAO,MAAM,CAAA;AAC1C,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,MAAA,CAAO,QAAQ,CAAA,EAAA,EAAK;AACtC,IAAA,KAAA,CAAM,CAAC,CAAA,GAAI,MAAA,CAAO,UAAA,CAAW,CAAC,CAAA;AAAA,EAChC;AACA,EAAA,OAAO,KAAA;AACT;AAEA,SAAS,aAAa,KAAA,EAA2B;AAC/C,EAAA,MAAM,SAAS,OAAA,EAAQ;AACvB,EAAA,IAAI,MAAA,EAAQ;AACV,IAAA,OAAO,MAAA,CAAO,mBAAA,CAAoB,KAAK,CAAC,CAAA;AAAA,EAC1C;AACA,EAAA,OAAO,MAAA,CAAO,IAAA,CAAK,KAAK,CAAA,CAAE,SAAS,QAAQ,CAAA;AAC7C;AAEA,SAAS,aAAa,MAAA,EAA4B;AAChD,EAAA,MAAM,SAAS,OAAA,EAAQ;AACvB,EAAA,IAAI,MAAA,EAAQ;AACV,IAAA,OAAO,mBAAA,CAAoB,MAAA,CAAO,MAAM,CAAC,CAAA;AAAA,EAC3C;AACA,EAAA,OAAO,IAAI,UAAA,CAAW,MAAA,CAAO,IAAA,CAAK,MAAA,EAAQ,QAAQ,CAAC,CAAA;AACrD;AAEO,SAAS,uBAAuB,KAAA,EAA2B;AAChE,EAAA,OAAO,YAAA,CAAa,KAAK,CAAA,CAAE,OAAA,CAAQ,KAAA,EAAO,GAAG,CAAA,CAAE,OAAA,CAAQ,KAAA,EAAO,GAAG,CAAA,CAAE,OAAA,CAAQ,QAAQ,EAAE,CAAA;AACvF;AAEO,SAAS,wBAAwB,KAAA,EAAuB;AAC7D,EAAA,MAAM,KAAA,GAAQ,IAAI,WAAA,EAAY,CAAE,OAAO,KAAK,CAAA;AAC5C,EAAA,OAAO,uBAAuB,KAAK,CAAA;AACrC;AAEO,SAAS,uBAAuB,KAAA,EAA2B;AAChE,EAAA,MAAM,UAAA,GAAa,MAAM,OAAA,CAAQ,IAAA,EAAM,GAAG,CAAA,CAAE,OAAA,CAAQ,MAAM,GAAG,CAAA;AAC7D,EAAA,MAAM,aAAA,GAAgB,WAAW,MAAA,GAAS,CAAA;AAC1C,EAAA,MAAM,MAAA,GAAS,aAAA,KAAkB,CAAA,GAAI,UAAA,GAAa,CAAA,EAAG,UAAU,CAAA,EAAG,GAAA,CAAI,MAAA,CAAO,CAAA,GAAI,aAAa,CAAC,CAAA,CAAA;AAC/F,EAAA,OAAO,aAAa,MAAM,CAAA;AAC5B;AAEO,SAAS,wBAAwB,KAAA,EAAuB;AAC7D,EAAA,OAAO,IAAI,WAAA,EAAY,CAAE,MAAA,CAAO,sBAAA,CAAuB,KAAK,CAAC,CAAA;AAC/D;;;AClCO,IAAM,oBAAA,GAAuB,WAAA;AAmJ7B,SAAS,aAAa,YAAA,EAA2C;AACtE,EAAA,MAAM,OAAA,GAAU,YAAA,CAAa,KAAA,CAAM,IAAI,CAAA;AACvC,EAAA,MAAM,SAAA,uBAAgB,GAAA,EAAoB;AAC1C,EAAA,OAAA,CAAQ,OAAA,CAAQ,CAAC,MAAA,KAAW;AAC1B,IAAA,MAAM,CAAC,IAAA,EAAM,KAAK,CAAA,GAAI,MAAA,CAAO,MAAM,QAAQ,CAAA;AAC3C,IAAA,SAAA,CAAU,GAAA,CAAI,MAAgB,KAAe,CAAA;AAAA,EAC/C,CAAC,CAAA;AACD,EAAA,OAAO,SAAA;AACT;;;ACjLA,IAAM,SAAA,GAAY,OAAA;AAiBlB,eAAe,eAAA,GAA6C;AAC1D,EAAA,MAAM,eAAgB,UAAA,CAA0C,MAAA;AAChE,EAAA,IAAI,cAAc,MAAA,EAAQ;AACxB,IAAA,OAAO,YAAA,CAAa,MAAA;AAAA,EACtB;AACA,EAAA,MAAM,EAAE,SAAA,EAAU,GAAI,MAAM,OAAO,QAAa,CAAA;AAChD,EAAA,MAAM,SAAU,SAAA,CAAuC,MAAA;AACvD,EAAA,IAAI,CAAC,MAAA,EAAQ;AACX,IAAA,MAAM,IAAI,MAAM,uCAAuC,CAAA;AAAA,EACzD;AACA,EAAA,OAAO,MAAA;AACT;AAEA,eAAe,aAAA,CAAc,QAAgB,KAAA,EAA4C;AACvF,EAAA,MAAM,MAAA,GAAS,MAAM,eAAA,EAAgB;AACrC,EAAA,OAAO,MAAA,CAAO,SAAA;AAAA,IACZ,KAAA;AAAA,IACA,IAAI,WAAA,EAAY,CAAE,MAAA,CAAO,MAAM,CAAA;AAAA,IAC/B;AAAA,MACE,IAAA,EAAM,MAAA;AAAA,MACN,IAAA,EAAM;AAAA,KACR;AAAA,IACA,KAAA;AAAA,IACA,CAAC,KAAK;AAAA,GACR;AACF;AAEA,SAAS,cAAc,MAAA,EAAiC;AACtD,EAAA,OAAO,IAAI,WAAW,MAAM,CAAA;AAC9B;AAEA,SAAS,gBAAgB,cAAA,EAA2C;AAClE,EAAA,IAAI;AACF,IAAA,MAAM,OAAA,GAAU,wBAAwB,cAAc,CAAA;AACtD,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,KAAA,CAAM,OAAO,CAAA;AAClC,IAAA,IAAI,CAAC,OAAA,IAAW,OAAO,OAAA,KAAY,QAAA,EAAU;AAC3C,MAAA,OAAO,IAAA;AAAA,IACT;AACA,IAAA,OAAO,OAAA;AAAA,EACT,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,IAAA;AAAA,EACT;AACF;AAEA,SAAS,aAAa,OAAA,EAA8B;AAClD,EAAA,MAAM,MAAM,OAAA,CAAQ,GAAA;AACpB,EAAA,IAAI,OAAO,QAAQ,QAAA,EAAU;AAC3B,IAAA,OAAO,KAAA;AAAA,EACT;AACA,EAAA,OAAO,MAAM,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,GAAA,KAAQ,GAAI,CAAA;AAC3C;AAEA,eAAsB,iBAAA,CAAkB,QAAgB,KAAA,EAAgC;AACtF,EAAA,MAAM,MAAA,GAAS,MAAM,eAAA,EAAgB;AACrC,EAAA,MAAM,GAAA,GAAM,MAAM,aAAA,CAAc,MAAA,EAAQ,MAAM,CAAA;AAC9C,EAAA,MAAM,SAAA,GAAY,MAAM,MAAA,CAAO,IAAA,CAAK,MAAA,EAAQ,GAAA,EAAK,IAAI,WAAA,EAAY,CAAE,MAAA,CAAO,KAAK,CAAC,CAAA;AAChF,EAAA,OAAO,sBAAA,CAAuB,aAAA,CAAc,SAAS,CAAC,CAAA;AACxD;AAEA,eAAsB,YAAA,CACpB,OAAA,EACA,MAAA,EACA,SAAA,GAAY,KAAK,CAAA,EACA;AACjB,EAAA,MAAM,MAAM,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,GAAA,KAAQ,GAAI,CAAA;AACxC,EAAA,MAAM,MAAA,GAAS,EAAE,GAAA,EAAK,SAAA,EAAW,KAAK,KAAA,EAAM;AAC5C,EAAA,MAAM,WAAA,GAAc;AAAA,IAClB,GAAG,OAAA;AAAA,IACH,GAAA,EAAK,GAAA;AAAA,IACL,KAAK,GAAA,GAAM;AAAA,GACb;AACA,EAAA,MAAM,UAAA,GAAa,uBAAA,CAAwB,IAAA,CAAK,SAAA,CAAU,MAAM,CAAC,CAAA;AACjE,EAAA,MAAM,WAAA,GAAc,uBAAA,CAAwB,IAAA,CAAK,SAAA,CAAU,WAAW,CAAC,CAAA;AACvE,EAAA,MAAM,OAAA,GAAU,CAAA,EAAG,UAAU,CAAA,CAAA,EAAI,WAAW,CAAA,CAAA;AAC5C,EAAA,MAAM,SAAA,GAAY,MAAM,iBAAA,CAAkB,MAAA,EAAQ,OAAO,CAAA;AACzD,EAAA,OAAO,CAAA,EAAG,OAAO,CAAA,CAAA,EAAI,SAAS,CAAA,CAAA;AAChC;AAEA,eAAsB,cAAA,CACpB,OACA,MAAA,EAC0B;AAC1B,EAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,KAAA,CAAM,GAAG,CAAA;AAC7B,EAAA,IAAI,KAAA,CAAM,WAAW,CAAA,EAAG;AACtB,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,MAAM,CAAC,UAAA,EAAY,WAAA,EAAa,aAAa,CAAA,GAAI,KAAA;AACjD,EAAA,IAAI,CAAC,UAAA,IAAc,CAAC,WAAA,IAAe,CAAC,aAAA,EAAe;AACjD,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,IAAI,MAAA,GAAkC,IAAA;AACtC,EAAA,IAAI;AACF,IAAA,MAAA,GAAS,IAAA,CAAK,KAAA,CAAM,uBAAA,CAAwB,UAAU,CAAC,CAAA;AAAA,EACzD,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,IAAI,CAAC,MAAA,IAAU,MAAA,CAAO,GAAA,KAAQ,SAAA,EAAW;AACvC,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,MAAM,OAAA,GAAU,gBAAgB,WAAW,CAAA;AAC3C,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,MAAM,iBAAA,GAAoB,MAAM,iBAAA,CAAkB,MAAA,EAAQ,GAAG,UAAU,CAAA,CAAA,EAAI,WAAW,CAAA,CAAE,CAAA;AACxF,EAAA,IAAI,sBAAsB,aAAA,EAAe;AACvC,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,IAAI,YAAA,CAAa,OAAO,CAAA,EAAG;AACzB,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,OAAO,OAAA;AACT;;;ACvIA,IAAM,mBAAA,GAAsB,IAAA;AAC5B,IAAM,2BAAA,GAA8B,GAAA;AACpC,IAAM,aAAa,mBAAA,GAAsB,2BAAA;AAUzC,SAAS,cAAc,UAAA,EAA4B;AACjD,EAAA,MAAM,KAAA,GAAQ,UAAA,CAAW,KAAA,CAAM,GAAG,CAAA;AAClC,EAAA,MAAM,QAAA,GAAW,KAAA,CAAM,KAAA,CAAM,MAAA,GAAS,CAAC,CAAA;AACvC,EAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,QAAA,IAAY,GAAA,EAAK,EAAE,CAAA;AAC1C,EAAA,OAAO,MAAA,CAAO,KAAA,CAAM,KAAK,CAAA,GAAI,CAAA,GAAI,KAAA;AACnC;AAEA,SAAS,kBAAA,CAAmB,YAAoB,GAAA,EAAyC;AACvF,EAAA,MAAM,SAAiB,EAAC;AACxB,EAAA,MAAM,UAAU,YAAA,CAAa,GAAA,CAAI,SAAS,GAAA,CAAI,QAAQ,KAAK,EAAE,CAAA;AAC7D,EAAA,KAAA,MAAW,CAAC,IAAA,EAAM,KAAK,CAAA,IAAK,OAAA,EAAS;AACnC,IAAA,IAAI,IAAA,CAAK,UAAA,CAAW,UAAU,CAAA,EAAG;AAC/B,MAAA,MAAA,CAAO,IAAI,CAAA,GAAI,KAAA;AAAA,IACjB;AAAA,EACF;AACA,EAAA,OAAO,MAAA;AACT;AAEA,SAAS,WAAW,MAAA,EAAwB;AAC1C,EAAA,MAAM,UAAA,GAAa,MAAA,CAAO,IAAA,CAAK,MAAM,EAAE,IAAA,CAAK,CAAC,IAAA,EAAM,KAAA,KAAU,aAAA,CAAc,IAAI,CAAA,GAAI,aAAA,CAAc,KAAK,CAAC,CAAA;AACvG,EAAA,OAAO,UAAA,CAAW,IAAI,CAAC,GAAA,KAAQ,OAAO,GAAG,CAAC,CAAA,CAAE,IAAA,CAAK,EAAE,CAAA;AACrD;AAEA,SAAS,WAAA,CAAY,SAAA,EAAmB,MAAA,EAAqB,MAAA,EAAgB,GAAA,EAAgD;AAC3H,EAAA,MAAM,aAAa,IAAA,CAAK,IAAA,CAAK,MAAA,CAAO,KAAA,CAAM,SAAS,UAAU,CAAA;AAC7D,EAAA,IAAI,eAAe,CAAA,EAAG;AACpB,IAAA,MAAA,CAAO,MAAA,CAAO,IAAI,CAAA,GAAI,MAAA,CAAO,KAAA;AAC7B,IAAA,OAAO,CAAC,MAAM,CAAA;AAAA,EAChB;AAEA,EAAA,MAAM,UAAyB,EAAC;AAChC,EAAA,KAAA,IAAS,KAAA,GAAQ,CAAA,EAAG,KAAA,GAAQ,UAAA,EAAY,KAAA,EAAA,EAAS;AAC/C,IAAA,MAAM,IAAA,GAAO,CAAA,EAAG,MAAA,CAAO,IAAI,IAAI,KAAK,CAAA,CAAA;AACpC,IAAA,MAAM,QAAQ,KAAA,GAAQ,UAAA;AACtB,IAAA,MAAM,QAAQ,MAAA,CAAO,KAAA,CAAM,SAAA,CAAU,KAAA,EAAO,QAAQ,UAAU,CAAA;AAC9D,IAAA,OAAA,CAAQ,IAAA,CAAK;AAAA,MACX,GAAG,MAAA;AAAA,MACH,IAAA;AAAA,MACA;AAAA,KACD,CAAA;AACD,IAAA,MAAA,CAAO,IAAI,CAAA,GAAI,KAAA;AAAA,EACjB;AAEA,EAAA,GAAA,CAAI,QAAQ,KAAA,GAAQ,CAAA,SAAA,EAAY,SAAA,CAAU,WAAA,EAAa,CAAA,OAAA,CAAA,EAAW;AAAA,IAChE,OAAA,EAAS,CAAA,EAAG,SAAS,CAAA,wBAAA,EAA2B,mBAAmB,CAAA,OAAA,CAAA;AAAA,IACnE,eAAA,EAAiB,2BAAA;AAAA,IACjB,SAAA,EAAW,OAAO,KAAA,CAAM,MAAA;AAAA,IACxB,UAAA;AAAA,IACA,MAAA,EAAQ,QAAQ,GAAA,CAAI,CAAC,UAAU,KAAA,CAAM,KAAA,CAAM,SAAS,2BAA2B;AAAA,GAChF,CAAA;AAED,EAAA,OAAO,OAAA;AACT;AAEA,SAAS,eAAA,CAAgB,QAAgB,aAAA,EAAiE;AACxG,EAAA,MAAM,gBAA6C,EAAC;AACpD,EAAA,KAAA,MAAW,QAAQ,MAAA,EAAQ;AACzB,IAAA,aAAA,CAAc,IAAI,CAAA,GAAI;AAAA,MACpB,IAAA;AAAA,MACA,KAAA,EAAO,EAAA;AAAA,MACP,UAAA,EAAY;AAAA,QACV,GAAG,aAAA;AAAA,QACH,MAAA,EAAQ;AAAA;AACV,KACF;AAAA,EACF;AACA,EAAA,OAAO,aAAA;AACT;AAEA,IAAM,eACJ,CAAC,SAAA,KACD,CAAC,UAAA,EAAoB,eAAoC,GAAA,KAAoC;AAC3F,EAAA,MAAM,MAAA,GAAS,kBAAA,CAAmB,UAAA,EAAY,GAAG,CAAA;AAEjD,EAAA,OAAO;AAAA,IACL,QAAA,GAAmB;AACjB,MAAA,OAAO,WAAW,MAAM,CAAA;AAAA,IAC1B,CAAA;AAAA,IACA,SAAA,GAAqB;AACnB,MAAA,OAAO,MAAA,CAAO,IAAA,CAAK,MAAM,CAAA,CAAE,MAAA,GAAS,CAAA;AAAA,IACtC,CAAA;AAAA,IACA,KAAA,CAAM,OAAe,OAAA,EAAuD;AAC1E,MAAA,MAAM,aAAA,GAAgB,eAAA,CAAgB,MAAA,EAAQ,aAAa,CAAA;AAC3D,MAAA,KAAA,MAAW,QAAQ,MAAA,EAAQ;AACzB,QAAA,OAAO,OAAO,IAAI,CAAA;AAAA,MACpB;AAEA,MAAA,MAAM,OAAA,GAAuC,aAAA;AAC7C,MAAA,MAAM,OAAA,GAAU,WAAA;AAAA,QACd,SAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAM,UAAA;AAAA,UACN,KAAA;AAAA,UACA,UAAA,EAAY;AAAA,YACV,GAAG,aAAA;AAAA,YACH,GAAG;AAAA;AACL,SACF;AAAA,QACA,MAAA;AAAA,QACA;AAAA,OACF;AACA,MAAA,KAAA,MAAW,SAAS,OAAA,EAAS;AAC3B,QAAA,OAAA,CAAQ,KAAA,CAAM,IAAI,CAAA,GAAI,KAAA;AAAA,MACxB;AACA,MAAA,OAAO,MAAA,CAAO,OAAO,OAAO,CAAA;AAAA,IAC9B,CAAA;AAAA,IACA,KAAA,GAAuB;AACrB,MAAA,MAAM,aAAA,GAAgB,eAAA,CAAgB,MAAA,EAAQ,aAAa,CAAA;AAC3D,MAAA,KAAA,MAAW,QAAQ,MAAA,EAAQ;AACzB,QAAA,OAAO,OAAO,IAAI,CAAA;AAAA,MACpB;AACA,MAAA,OAAO,MAAA,CAAO,OAAO,aAAa,CAAA;AAAA,IACpC,CAAA;AAAA,IACA,WAAW,OAAA,EAA8B;AACvC,MAAA,KAAA,MAAW,UAAU,OAAA,EAAS;AAC5B,QAAA,GAAA,CAAI,UAAU,MAAA,CAAO,IAAA,EAAM,MAAA,CAAO,KAAA,EAAO,OAAO,UAAU,CAAA;AAAA,MAC5D;AAAA,IACF;AAAA,GACF;AACF,CAAA;AAEK,IAAM,kBAAA,GAAqB,aAAa,SAAS,CAAA;AACjD,IAAM,kBAAA,GAAqB,aAAa,SAAS,CAAA;;;ACjHxD,IAAM,qBAAA,GAAwB,aAAA;AAC9B,IAAM,oBAAA,GAAuB,aAAA;AAC7B,IAAM,uBAAA,GAA0B,CAAA,GAAI,EAAA,GAAK,EAAA,GAAK,EAAA;AAC9C,IAAM,wBAAwB,EAAA,GAAK,CAAA;AAEnC,SAAS,mBAAA,GAA+B;AACtC,EAAA,OAAO,OAAO,OAAA,KAAY,WAAA,IAAe,OAAA,CAAQ,KAAK,QAAA,KAAa,YAAA;AACrE;AAEA,SAAS,oBAAA,GAA2C;AAClD,EAAA,IAAI,OAAO,YAAY,WAAA,EAAa;AAClC,IAAA,OAAO,MAAA;AAAA,EACT;AACA,EAAA,OAAO,QAAQ,GAAA,EAAK,kBAAA,IAAsB,QAAQ,GAAA,EAAK,kBAAA,IAAsB,QAAQ,GAAA,EAAK,WAAA;AAC5F;AAEA,SAAS,uBAAuB,OAAA,EAAmD;AACjF,EAAA,OACE,OAAO,OAAA,KAAY,QAAA,IACnB,OAAA,KAAY,IAAA,IACZ,kBAAkB,OAAA,IAClB,KAAA,CAAM,OAAA,CAAS,OAAA,CAAuC,YAAY,CAAA;AAEtE;AAEA,SAAS,sBAAsB,aAAA,EAAiC;AAC9D,EAAA,MAAM,QAAA,GAAW,CAAC,aAAa,CAAA;AAC/B,EAAA,IAAI,CAAC,QAAA,CAAS,QAAA,CAAS,qBAAqB,CAAA,EAAG;AAC7C,IAAA,QAAA,CAAS,KAAK,qBAAqB,CAAA;AAAA,EACrC;AACA,EAAA,IAAI,CAAC,QAAA,CAAS,QAAA,CAAS,oBAAoB,CAAA,EAAG;AAC5C,IAAA,QAAA,CAAS,KAAK,oBAAoB,CAAA;AAAA,EACpC;AACA,EAAA,OAAO,QAAA;AACT;AAEA,SAAS,YAAY,OAAA,EAAwB;AAC3C,EAAA,OAAO,IAAI,KAAA,CAAM,CAAA,6BAAA,EAAgC,OAAO,CAAA,CAAE,CAAA;AAC5D;AAEA,SAAS,iBAAiB,MAAA,EAAyB;AACjD,EAAA,MAAM,QAAA,GAAW,UAAU,oBAAA,EAAqB;AAChD,EAAA,IAAI,CAAC,QAAA,EAAU;AACb,IAAA,MAAM,WAAA;AAAA,MACJ;AAAA,KACF;AAAA,EACF;AACA,EAAA,OAAO,QAAA;AACT;AAEA,SAAS,SAAS,KAAA,EAAgD;AAChE,EAAA,IAAI,CAAC,KAAA,IAAS,OAAO,KAAA,KAAU,QAAA,EAAU;AACvC,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,OAAO,KAAA;AACT;AAEA,SAAS,wBAAwB,OAAA,EAAoC;AACnE,EAAA,MAAM,KAAA,GAAQ,QAAQ,OAAA,EAAS,KAAA;AAC/B,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,KAAA,CAAM,WAAW,CAAA,EAAG;AACnD,IAAA,MAAM,YAAY,6EAA6E,CAAA;AAAA,EACjG;AACA,EAAA,OAAO,KAAA;AACT;AAEA,eAAe,oBAAA,CACb,aAAA,EACA,OAAA,EACA,IAAA,EACiB;AACjB,EAAA,IAAI,CAAC,aAAA,EAAe;AAClB,IAAA,OAAO,GAAA;AAAA,EACT;AACA,EAAA,IAAI,OAAO,kBAAkB,QAAA,EAAU;AACrC,IAAA,OAAO,aAAA;AAAA,EACT;AACA,EAAA,OAAO,aAAA,CAAc,SAAS,IAAI,CAAA;AACpC;AAEA,SAAS,yBAAA,CAA0B,YAAA,EAAsB,UAAA,EAAoB,QAAA,EAA2B;AACtG,EAAA,OAAO,QAAA,GAAW,CAAA,EAAG,oBAAoB,CAAA,EAAG,YAAY,CAAA,CAAA,EAAI,UAAU,CAAA,CAAA,GAAK,CAAA,EAAG,YAAY,CAAA,CAAA,EAAI,UAAU,CAAA,CAAA;AAC1G;AAEA,eAAe,cAAA,CACb,GAAA,EACA,IAAA,EACA,KAAA,EACA,UAAA,EACe;AACf,EAAA,MAAM,MAAA,GAAS,IAAI,OAAA,CAAQ,MAAA;AAC3B,EAAA,IAAI,MAAA,IAAU,OAAO,GAAA,CAAI,eAAA,KAAoB,UAAA,EAAY;AACvD,IAAA,MAAM,GAAA,CAAI,eAAA,CAAgB,IAAA,EAAM,KAAA,EAAO,QAAQ,UAAU,CAAA;AACzD,IAAA;AAAA,EACF;AACA,EAAA,GAAA,CAAI,SAAA,CAAU,IAAA,EAAM,KAAA,EAAO,UAAU,CAAA;AACvC;AAEA,SAAS,gBAAmB,KAAA,EAAyB;AACnD,EAAA,IAAI;AACF,IAAA,OAAO,IAAA,CAAK,MAAM,KAAK,CAAA;AAAA,EACzB,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,IAAA;AAAA,EACT;AACF;AAEA,SAAS,kBAAkB,MAAA,EAAqD;AAC9E,EAAA,IAAI,MAAA,EAAQ,aAAa,MAAA,EAAW;AAClC,IAAA,OAAO,MAAA,CAAO,QAAA;AAAA,EAChB;AACA,EAAA,OAAO,mBAAA,EAAoB;AAC7B;AAEO,SAAS,mBAAmB,OAAA,EAA+B;AAChE,EAAA,MAAM,gBAAgB,OAAO,OAAA,CAAQ,OAAA,KAAY,QAAA,GAAW,QAAQ,OAAA,GAAU,MAAA;AAC9E,EAAA,MAAM,eAAA,GACJ,OAAO,OAAA,CAAQ,OAAA,KAAY,QAAA,IAAY,QAAQ,OAAA,KAAY,IAAA,GAAO,OAAA,CAAQ,OAAA,CAAQ,QAAA,GAAW,MAAA;AAE/F,EAAA,MAAM,SACJ,OAAA,CAAQ,QAAA,EAAU,qBAAqB,MAAA,GACnC,OAAA,CAAQ,SAAS,gBAAA,GACjB,eAAA,KAAoB,UAClB,IAAA,GACA,eAAA,KAAoB,SAClB,KAAA,GACA,aAAA,GACE,cAAc,UAAA,CAAW,UAAU,IACnC,mBAAA,EAAoB;AAEhC,EAAA,MAAM,kBAAA,GAAqB,SAAS,oBAAA,GAAuB,EAAA;AAC3D,EAAA,MAAM,qBAAA,GAAwB,CAAC,CAAC,OAAA,CAAQ,UAAU,qBAAA,EAAuB,OAAA;AACzE,EAAA,MAAM,MAAA,GAAS,qBAAA,GACX,OAAA,CAAQ,QAAA,EAAU,qBAAA,EAAuB,MAAA,KAAW,aAAA,GAAgB,IAAI,GAAA,CAAI,aAAa,CAAA,CAAE,QAAA,GAAW,MAAA,CAAA,GACtG,MAAA;AAEJ,EAAA,IAAI,yBAAyB,CAAC,MAAA,IAAU,CAAC,sBAAA,CAAuB,OAAA,CAAQ,OAAO,CAAA,EAAG;AAChF,IAAA,MAAM,YAAY,mEAAmE,CAAA;AAAA,EACvF;AAEA,EAAA,SAAS,YAAA,CAAa,UAAA,EAAoB,kBAAA,GAAmD,EAAC,EAAqB;AACjH,IAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,QAAA,EAAU,YAAA,IAAgB,qBAAA;AACjD,IAAA,MAAM,IAAA,GAAO,OAAA,CAAQ,QAAA,EAAU,OAAA,GAAU,UAAU,GAAG,IAAA,IAAQ,CAAA,EAAG,MAAM,CAAA,CAAA,EAAI,UAAU,CAAA,CAAA;AACrF,IAAA,MAAM,aAAa,OAAA,CAAQ,QAAA,EAAU,UAAU,UAAU,CAAA,EAAG,cAAc,EAAC;AAE3E,IAAA,OAAO;AAAA,MACL,IAAA,EAAM,CAAA,EAAG,kBAAkB,CAAA,EAAG,IAAI,CAAA,CAAA;AAAA,MAClC,UAAA,EAAY;AAAA,QACV,MAAA,EAAQ,CAAC,CAAC,kBAAA;AAAA,QACV,QAAA,EAAU,KAAA;AAAA,QACV,IAAA,EAAM,GAAA;AAAA,QACN,QAAA,EAAU,IAAA;AAAA,QACV,GAAI,qBAAA,GAAwB,EAAE,MAAA,KAAW,EAAC;AAAA,QAC1C,GAAG,QAAQ,QAAA,EAAU,uBAAA;AAAA,QACrB,GAAG,kBAAA;AAAA,QACH,GAAG;AAAA;AACL,KACF;AAAA,EACF;AAEA,EAAA,OAAO,YAAA;AACT;AAEO,SAAS,WAAW,OAAA,EAAkD;AAC3E,EAAA,MAAM,YAAA,GAAe,mBAAmB,OAAO,CAAA;AAC/C,EAAA,MAAM,YAAA,GAAe,aAAa,eAAA,EAAiB,EAAE,QAAQ,OAAA,CAAQ,OAAA,EAAS,SAAA,IAAa,uBAAA,EAAyB,CAAA;AACpH,EAAA,MAAM,WAAA,GAAc,YAAA,CAAa,cAAA,EAAgB,EAAE,MAAA,EAAQ,QAAQ,OAAA,EAAS,WAAA,EAAa,MAAA,IAAU,qBAAA,EAAuB,CAAA;AAC1H,EAAA,MAAM,WAAA,GAAc,YAAA,CAAa,cAAA,EAAgB,EAAE,MAAA,EAAQ,QAAQ,OAAA,EAAS,WAAA,EAAa,MAAA,IAAU,qBAAA,EAAuB,CAAA;AAC1H,EAAA,MAAM,iBAAA,GAAoB,aAAa,eAAe,CAAA;AAEtD,EAAA,OAAO;AAAA,IACL,YAAA,EAAc;AAAA,MACZ,MAAM,YAAA,CAAa,IAAA;AAAA,MACnB,YAAY,YAAA,CAAa;AAAA,KAC3B;AAAA,IACA,WAAA,EAAa;AAAA,MACX,MAAM,WAAA,CAAY,IAAA;AAAA,MAClB,YAAY,WAAA,CAAY;AAAA,KAC1B;AAAA,IACA,iBAAA,EAAmB;AAAA,MACjB,MAAM,iBAAA,CAAkB,IAAA;AAAA,MACxB,YAAY,iBAAA,CAAkB;AAAA,KAChC;AAAA,IACA,WAAA,EAAa;AAAA,MACX,MAAM,WAAA,CAAY,IAAA;AAAA,MAClB,YAAY,WAAA,CAAY;AAAA;AAC1B,GACF;AACF;AAEA,eAAsB,cAAA,CACpB,GAAA,EACA,OAAA,EACA,cAAA,EACe;AACf,EAAA,MAAM,iBAAA,GAAoB,GAAA,CAAI,OAAA,CAAQ,OAAA,EAAS,OAAA,EAAS,WAAA;AACxD,EAAA,IAAI,CAAC,mBAAmB,OAAA,EAAS;AAC/B,IAAA;AAAA,EACF;AAEA,EAAA,MAAM,UAAU,MAAM,oBAAA;AAAA,IACpB,iBAAA,CAAkB,OAAA;AAAA,IAClB,OAAA,CAAQ,OAAA;AAAA,IACR,OAAA,CAAQ;AAAA,GACV;AAEA,EAAA,MAAM,WAAA,GAAc;AAAA,IAClB,SAAS,OAAA,CAAQ,OAAA;AAAA,IACjB,MAAM,OAAA,CAAQ,IAAA;AAAA,IACd,SAAA,EAAW,KAAK,GAAA,EAAI;AAAA,IACpB;AAAA,GACF;AAEA,EAAA,MAAM,cAAA,GAAiB,GAAA,CAAI,OAAA,CAAQ,WAAA,CAAY,WAAA,CAAY,UAAA;AAC3D,EAAA,MAAM,MAAA,GAAS,cAAA,GAAiB,MAAA,GAAY,cAAA,CAAe,MAAA;AAC3D,EAAA,MAAM,OAAA,GAA+B;AAAA,IACnC,GAAG,cAAA;AAAA,IACH;AAAA,GACF;AACA,EAAA,MAAM,YAAY,IAAA,CAAK,GAAA,EAAI,GAAA,CAAM,OAAA,CAAQ,UAAU,EAAA,IAAM,GAAA;AACzD,EAAA,MAAM,QAAA,GAAW,kBAAkB,QAAA,IAAY,SAAA;AAC/C,EAAA,MAAM,MAAA,GAAS,gBAAA,CAAiB,GAAA,CAAI,OAAA,CAAQ,MAAM,CAAA;AAElD,EAAA,IAAI,OAAA;AACJ,EAAA,IAAI,aAAa,KAAA,EAAO;AACtB,IAAA,OAAA,GAAU,MAAM,YAAA,CAAa,WAAA,EAAa,MAAA,EAAQ,OAAA,CAAQ,UAAU,qBAAqB,CAAA;AAAA,EAC3F,CAAA,MAAA,IAAW,aAAa,KAAA,EAAO;AAC7B,IAAA,MAAM,YAAY,2DAA2D,CAAA;AAAA,EAC/E,CAAA,MAAO;AACL,IAAA,MAAM,YAAY,MAAM,iBAAA;AAAA,MACtB,MAAA;AAAA,MACA,KAAK,SAAA,CAAU;AAAA,QACb,GAAG,WAAA;AAAA,QACH;AAAA,OACD;AAAA,KACH;AACA,IAAA,OAAA,GAAU,uBAAA;AAAA,MACR,KAAK,SAAA,CAAU;AAAA,QACb,OAAA,EAAS,WAAA;AAAA,QACT,SAAA;AAAA,QACA;AAAA,OACD;AAAA,KACH;AAAA,EACF;AAEA,EAAA,IAAI,OAAA,CAAQ,SAAS,IAAA,EAAM;AACzB,IAAA,MAAM,KAAA,GAAQ,mBAAmB,GAAA,CAAI,OAAA,CAAQ,YAAY,WAAA,CAAY,IAAA,EAAM,SAAS,GAAG,CAAA;AACvF,IAAA,MAAM,OAAA,GAAU,KAAA,CAAM,KAAA,CAAM,OAAA,EAAS,OAAO,CAAA;AAC5C,IAAA,KAAA,CAAM,WAAW,OAAO,CAAA;AAAA,EAC1B,CAAA,MAAO;AACL,IAAA,MAAM,KAAA,GAAQ,mBAAmB,GAAA,CAAI,OAAA,CAAQ,YAAY,WAAA,CAAY,IAAA,EAAM,SAAS,GAAG,CAAA;AACvF,IAAA,IAAI,KAAA,CAAM,WAAU,EAAG;AACrB,MAAA,KAAA,CAAM,UAAA,CAAW,KAAA,CAAM,KAAA,EAAO,CAAA;AAAA,IAChC;AACA,IAAA,GAAA,CAAI,UAAU,GAAA,CAAI,OAAA,CAAQ,YAAY,WAAA,CAAY,IAAA,EAAM,SAAS,OAAO,CAAA;AAAA,EAC1E;AACF;AAEA,eAAsB,gBAAA,CACpB,GAAA,EACA,OAAA,EACA,cAAA,EACA,SAAA,EACe;AACf,EAAA,IAAI,cAAA,KAAmB,UAAa,OAAO,GAAA,CAAI,oBAAoB,UAAA,IAAc,GAAA,CAAI,QAAQ,MAAA,EAAQ;AACnG,IAAA,MAAM,YAAA,GAAe,MAAM,GAAA,CAAI,eAAA,CAAgB,GAAA,CAAI,OAAA,CAAQ,WAAA,CAAY,iBAAA,CAAkB,IAAA,EAAM,GAAA,CAAI,OAAA,CAAQ,MAAM,CAAA;AACjH,IAAA,cAAA,GAAiB,CAAC,CAAC,YAAA;AAAA,EACrB;AAEA,EAAA,MAAM,yBAAyB,cAAA,IAAkB,KAAA;AACjD,EAAA,MAAM,KAAA,GAAQ,wBAAwB,OAAO,CAAA;AAC7C,EAAA,MAAM,OAAA,GAAU,GAAA,CAAI,OAAA,CAAQ,WAAA,CAAY,YAAA,CAAa,UAAA;AACrD,EAAA,MAAM,MAAA,GAAS,sBAAA,GAAyB,MAAA,GAAY,GAAA,CAAI,QAAQ,aAAA,EAAe,SAAA;AAC/E,EAAA,MAAM,eAAe,GAAA,EAAK,GAAA,CAAI,QAAQ,WAAA,CAAY,YAAA,CAAa,MAAM,KAAA,EAAO;AAAA,IAC1E,GAAG,OAAA;AAAA,IACH,MAAA;AAAA,IACA,GAAG;AAAA,GACJ,CAAA;AAED,EAAA,IAAI,sBAAA,EAAwB;AAC1B,IAAA,MAAM,cAAA;AAAA,MACJ,GAAA;AAAA,MACA,GAAA,CAAI,OAAA,CAAQ,WAAA,CAAY,iBAAA,CAAkB,IAAA;AAAA,MAC1C,MAAA;AAAA,MACA,GAAA,CAAI,OAAA,CAAQ,WAAA,CAAY,iBAAA,CAAkB;AAAA,KAC5C;AAAA,EACF;AAEA,EAAA,MAAM,cAAA,CAAe,GAAA,EAAK,OAAA,EAAS,sBAAsB,CAAA;AACzD,EAAA,GAAA,CAAI,OAAA,CAAQ,gBAAgB,OAAO,CAAA;AACrC;AAKO,SAAS,YAAA,CAAa,KAAiC,MAAA,EAAgC;AAC5F,EAAA,GAAA,CAAI,SAAA,CAAU,MAAA,CAAO,IAAA,EAAM,EAAA,EAAI;AAAA,IAC7B,GAAG,MAAA,CAAO,UAAA;AAAA,IACV,MAAA,EAAQ;AAAA,GACT,CAAA;AACH;AAEO,SAAS,mBAAA,CAAoB,KAAiC,kBAAA,EAAoC;AACvG,EAAA,YAAA,CAAa,GAAA,EAAK,GAAA,CAAI,OAAA,CAAQ,WAAA,CAAY,YAAY,CAAA;AACtD,EAAA,YAAA,CAAa,GAAA,EAAK,GAAA,CAAI,OAAA,CAAQ,WAAA,CAAY,WAAW,CAAA;AAErD,EAAA,IAAI,GAAA,CAAI,OAAA,CAAQ,OAAA,EAAS,OAAA,EAAS,kBAAA,EAAoB;AACpD,IAAA,YAAA,CAAa,GAAA,EAAK,GAAA,CAAI,OAAA,CAAQ,WAAA,CAAY,WAAW,CAAA;AACrD,IAAA,MAAM,YAAA,GAAe,kBAAA;AAAA,MACnB,GAAA,CAAI,OAAA,CAAQ,WAAA,CAAY,WAAA,CAAY,IAAA;AAAA,MACpC,GAAA,CAAI,OAAA,CAAQ,WAAA,CAAY,WAAA,CAAY,UAAA;AAAA,MACpC;AAAA,KACF;AACA,IAAA,YAAA,CAAa,UAAA,CAAW,YAAA,CAAa,KAAA,EAAO,CAAA;AAAA,EAC9C;AAEA,EAAA,MAAM,YAAA,GAAe,kBAAA;AAAA,IACnB,GAAA,CAAI,OAAA,CAAQ,WAAA,CAAY,WAAA,CAAY,IAAA;AAAA,IACpC,GAAA,CAAI,OAAA,CAAQ,WAAA,CAAY,WAAA,CAAY,UAAA;AAAA,IACpC;AAAA,GACF;AACA,EAAA,YAAA,CAAa,UAAA,CAAW,YAAA,CAAa,KAAA,EAAO,CAAA;AAE5C,EAAA,IAAI,CAAC,kBAAA,EAAoB;AACvB,IAAA,YAAA,CAAa,GAAA,EAAK,GAAA,CAAI,OAAA,CAAQ,WAAA,CAAY,iBAAiB,CAAA;AAAA,EAC7D;AACF;AAEO,IAAM,gBAAA,GAAmB,CAC9BG,QAAAA,EACA,MAAA,KAOkB;AAClB,EAAA,MAAM,OAAA,GAAA,CAAWA,QAAAA,YAAmB,OAAA,IAAW,EAAE,SAAA,IAAaA,YAAWA,QAAAA,GAAUA,QAAAA,CAAQ,OAAA,EAAS,GAAA,CAAI,QAAQ,CAAA;AAChH,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,MAAM,EAAE,UAAA,GAAa,eAAA,EAAiB,eAAe,aAAA,EAAc,GAAI,UAAU,EAAC;AAClF,EAAA,MAAM,YAAA,GAAe,aAAa,OAAO,CAAA;AACzC,EAAA,MAAM,SAAA,GAAY,CAAC,IAAA,KACjB,YAAA,CAAa,GAAA,CAAI,IAAI,CAAA,IAAK,YAAA,CAAa,GAAA,CAAI,CAAA,EAAG,oBAAoB,CAAA,EAAG,IAAI,CAAA,CAAE,CAAA;AAC7E,EAAA,MAAM,oBAAA,GAAuB,KAAA,CAAM,IAAA,iBAAK,IAAI,GAAA,CAAI;AAAA,IAC9C,UAAA;AAAA,IACA,UAAA,CAAW,OAAA,CAAQ,IAAA,EAAM,GAAG,CAAA;AAAA,IAC5B,UAAA,CAAW,OAAA,CAAQ,IAAA,EAAM,GAAG;AAAA,GAC7B,CAAC,CAAA,CAAE,MAAA,CAAO,OAAO,CAAA;AAClB,EAAA,KAAA,MAAW,iBAAiB,oBAAA,EAAsB;AAChD,IAAA,MAAM,YAAA,GACJ,SAAA,CAAU,CAAA,EAAG,YAAY,CAAA,CAAA,EAAI,aAAa,CAAA,CAAE,CAAA,IAAK,SAAA,CAAU,CAAA,EAAG,YAAY,CAAA,CAAA,EAAI,aAAa,CAAA,CAAE,CAAA;AAC/F,IAAA,IAAI,YAAA,EAAc;AAChB,MAAA,OAAO,YAAA;AAAA,IACT;AAAA,EACF;AACA,EAAA,OAAO,IAAA;AACT,CAAA;AAEO,IAAM,cAAA,GAAiB,OAI5BA,QAAAA,EACA,MAAA,KAMW;AACX,EAAA,MAAM,UAAUA,QAAAA,YAAmB,OAAA,IAAW,EAAE,SAAA,IAAaA,QAAAA,CAAAA,GAAWA,WAAUA,QAAAA,CAAQ,OAAA;AAC1F,EAAA,MAAM,YAAA,GAAe,OAAA,CAAQ,GAAA,CAAI,QAAQ,CAAA;AACzC,EAAA,IAAI,CAAC,YAAA,EAAc;AACjB,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,MAAM,YAAA,GAAe,aAAa,YAAY,CAAA;AAC9C,EAAA,MAAM,UAAA,GAAa,QAAQ,UAAA,IAAc,cAAA;AACzC,EAAA,MAAM,eAAA,GAAkB,QAAQ,YAAA,IAAgB,qBAAA;AAChD,EAAA,MAAM,QAAA,GAAW,QAAQ,QAAA,IAAY,SAAA;AACrC,EAAA,MAAM,cAAA,GAAiB,sBAAsB,eAAe,CAAA;AAC5D,EAAA,MAAM,QAAA,GAAW,kBAAkB,MAAM,CAAA;AACzC,EAAA,MAAM,MAAA,GAAS,gBAAA,CAAiB,MAAA,EAAQ,MAAM,CAAA;AAE9C,EAAA,IAAI,WAAA;AAEJ,EAAA,KAAA,MAAW,UAAU,cAAA,EAAgB;AACnC,IAAA,MAAM,SAAA,GAAY,yBAAA,CAA0B,MAAA,EAAQ,UAAA,EAAY,QAAQ,CAAA;AACxE,IAAA,MAAM,WAAA,GAAc,YAAA,CAAa,GAAA,CAAI,SAAS,CAAA;AAC9C,IAAA,IAAI,WAAA,EAAa;AACf,MAAA,WAAA,GAAc,WAAA;AACd,MAAA;AAAA,IACF;AAAA,EACF;AAEA,EAAA,IAAI,CAAC,WAAA,EAAa;AAChB,IAAA,MAAM,sBAA+D,EAAC;AACtE,IAAA,KAAA,MAAW,UAAU,cAAA,EAAgB;AACnC,MAAA,MAAM,SAAA,GAAY,yBAAA,CAA0B,MAAA,EAAQ,UAAA,EAAY,QAAQ,CAAA;AACxE,MAAA,KAAA,MAAW,CAAC,IAAA,EAAM,KAAK,CAAA,IAAK,YAAA,CAAa,SAAQ,EAAG;AAClD,QAAA,IAAI,CAAC,IAAA,CAAK,UAAA,CAAW,CAAA,EAAG,SAAS,GAAG,CAAA,EAAG;AACrC,UAAA;AAAA,QACF;AACA,QAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,GAAG,CAAA;AAC5B,QAAA,MAAM,QAAA,GAAW,KAAA,CAAM,KAAA,CAAM,MAAA,GAAS,CAAC,CAAA;AACvC,QAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,QAAA,IAAY,GAAA,EAAK,EAAE,CAAA;AAC1C,QAAA,IAAI,CAAC,MAAA,CAAO,KAAA,CAAM,KAAK,CAAA,EAAG;AACxB,UAAA,mBAAA,CAAoB,IAAA,CAAK,EAAE,KAAA,EAAO,KAAA,EAAO,CAAA;AAAA,QAC3C;AAAA,MACF;AACA,MAAA,IAAI,mBAAA,CAAoB,SAAS,CAAA,EAAG;AAClC,QAAA;AAAA,MACF;AAAA,IACF;AAEA,IAAA,IAAI,mBAAA,CAAoB,SAAS,CAAA,EAAG;AAClC,MAAA,mBAAA,CAAoB,KAAK,CAAC,IAAA,EAAM,UAAU,IAAA,CAAK,KAAA,GAAQ,MAAM,KAAK,CAAA;AAClE,MAAA,WAAA,GAAc,mBAAA,CAAoB,IAAI,CAAC,KAAA,KAAU,MAAM,KAAK,CAAA,CAAE,KAAK,EAAE,CAAA;AAAA,IACvE;AAAA,EACF;AAEA,EAAA,IAAI,CAAC,WAAA,EAAa;AAChB,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,IAAI,aAAa,KAAA,EAAO;AACtB,IAAA,MAAM,WAAA;AAAA,MACJ;AAAA,KACF;AAAA,EACF;AAEA,EAAA,IAAI,aAAa,KAAA,EAAO;AACtB,IAAA,MAAM,OAAA,GAAU,MAAM,cAAA,CAAwC,WAAA,EAAa,MAAM,CAAA;AACjF,IAAA,IAAI,CAAC,OAAA,EAAS;AACZ,MAAA,OAAO,IAAA;AAAA,IACT;AACA,IAAA,MAAM,aAAA,GAAgB,QAAA,CAAS,OAAA,CAAQ,OAAO,CAAA;AAC9C,IAAA,MAAM,UAAA,GAAa,QAAA,CAAS,OAAA,CAAQ,IAAI,CAAA;AACxC,IAAA,MAAM,YAAY,OAAA,CAAQ,SAAA;AAC1B,IAAA,IAAI,CAAC,aAAA,IAAiB,CAAC,UAAA,IAAc,OAAO,cAAc,QAAA,EAAU;AAClE,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,IAAI,QAAQ,OAAA,EAAS;AACnB,MAAA,MAAM,gBAAgB,OAAO,OAAA,CAAQ,OAAA,KAAY,QAAA,GAAW,QAAQ,OAAA,GAAU,GAAA;AAC9E,MAAA,MAAM,eAAA,GACJ,OAAO,MAAA,CAAO,OAAA,KAAY,QAAA,GACtB,MAAA,CAAO,OAAA,GACP,MAAM,MAAA,CAAO,OAAA,CAAQ,aAAA,EAA+B,UAAuB,CAAA;AACjF,MAAA,IAAI,kBAAkB,eAAA,EAAiB;AACrC,QAAA,OAAO,IAAA;AAAA,MACT;AAAA,IACF;AAEA,IAAA,OAAO;AAAA,MACL,OAAA,EAAS,aAAA;AAAA,MACT,IAAA,EAAM,UAAA;AAAA,MACN,SAAA;AAAA,MACA,SAAS,OAAO,OAAA,CAAQ,OAAA,KAAY,QAAA,GAAW,QAAQ,OAAA,GAAU;AAAA,KACnE;AAAA,EACF;AAEA,EAAA,MAAM,cAAA,GAAiB,eAAA,CASpB,uBAAA,CAAwB,WAAW,CAAC,CAAA;AAEvC,EAAA,IAAI,CAAC,cAAA,EAAgB;AACnB,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,MAAM,oBAAoB,MAAM,iBAAA;AAAA,IAC9B,MAAA;AAAA,IACA,KAAK,SAAA,CAAU;AAAA,MACb,GAAG,cAAA,CAAe,OAAA;AAAA,MAClB,WAAW,cAAA,CAAe;AAAA,KAC3B;AAAA,GACH;AAEA,EAAA,IAAI,iBAAA,KAAsB,eAAe,SAAA,EAAW;AAClD,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,IAAI,cAAA,CAAe,SAAA,IAAa,IAAA,CAAK,GAAA,EAAI,EAAG;AAC1C,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,MAAM,kBAAkB,cAAA,CAAe,OAAA;AACvC,EAAA,IAAI,QAAQ,OAAA,EAAS;AACnB,IAAA,MAAM,aAAA,GAAgB,gBAAgB,OAAA,IAAW,GAAA;AACjD,IAAA,MAAM,eAAA,GACJ,OAAO,MAAA,CAAO,OAAA,KAAY,QAAA,GACtB,MAAA,CAAO,OAAA,GACP,MAAM,MAAA,CAAO,OAAA,CAAQ,eAAA,CAAgB,OAAA,EAAS,gBAAgB,IAAI,CAAA;AACxE,IAAA,IAAI,kBAAkB,eAAA,EAAiB;AACrC,MAAA,OAAO,IAAA;AAAA,IACT;AAAA,EACF;AAEA,EAAA,MAAM,aAAA,GAAgB,QAAA,CAAS,eAAA,CAAgB,OAAO,CAAA;AACtD,EAAA,MAAM,UAAA,GAAa,QAAA,CAAS,eAAA,CAAgB,IAAI,CAAA;AAChD,EAAA,IAAI,CAAC,aAAA,IAAiB,CAAC,UAAA,EAAY;AACjC,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,OAAO;AAAA,IACL,OAAA,EAAS,aAAA;AAAA,IACT,IAAA,EAAM,UAAA;AAAA,IACN,WAAW,eAAA,CAAgB,SAAA;AAAA,IAC3B,SAAS,eAAA,CAAgB;AAAA,GAC3B;AACF,CAAA;;;AC3hBA,IAAM,qBAAA,GAAwB,UAAA;AAE9B,IAAM,4BAA4B,CAAC,cAAA,EAAgB,cAAA,EAAgB,WAAA,EAAa,aAAa,QAAQ,CAAA;AACrG,IAAM,4BAAA,GAA+B,CAAC,cAAA,EAAgB,cAAc,CAAA;AACpE,IAAM,+BAAA,GAAkC,CAAC,6BAA6B,CAAA;AACtE,IAAM,+BAAA,GAAkC,CAAC,4BAA4B,CAAA;AACrE,IAAM,wBAAA,GAA2B,CAAC,iBAAA,EAAmB,iBAAiB,CAAA;AACtE,IAAM,wBAAA,GAA2B,CAAC,UAAU,CAAA;AAC5C,IAAM,0BAAA,GAA6B,CAAC,mBAAA,EAAqB,YAAY,CAAA;AAYrE,IAAM,aAAA,GAAqF;AAAA,EACzF,OAAA,EAAS,EAAE,OAAA,EAAS,IAAA,EAAM,OAAA,EAAS,IAAA,EAAM,UAAA,EAAY,IAAA,EAAM,UAAA,EAAY,KAAA,EAAO,WAAA,EAAa,IAAA,EAAM,mBAAmB,IAAA,EAAK;AAAA,EACzH,IAAA,EAAM,EAAE,OAAA,EAAS,IAAA,EAAM,OAAA,EAAS,IAAA,EAAM,UAAA,EAAY,IAAA,EAAM,UAAA,EAAY,IAAA,EAAM,MAAA,EAAQ,IAAA,EAAK;AAAA,EACvF,OAAA,EAAS,EAAE,OAAA,EAAS,IAAA,EAAM,OAAA,EAAS,IAAA,EAAM,UAAA,EAAY,IAAA,EAAM,UAAA,EAAY,KAAA,EAAO,WAAA,EAAa,IAAA,EAAK;AAAA,EAChG,IAAA,EAAM,EAAE,OAAA,EAAS,IAAA,EAAM,OAAA,EAAS,IAAA,EAAM,UAAA,EAAY,KAAA,EAAO,UAAA,EAAY,IAAA,EAAM,WAAA,EAAa,IAAA,EAAK;AAAA,EAC7F,OAAA,EAAS,EAAE,OAAA,EAAS,KAAA,EAAO,SAAS,KAAA,EAAO,UAAA,EAAY,KAAA,EAAO,UAAA,EAAY,KAAA;AAC5E,CAAA;AA+CA,SAAS,qBAAqB,KAAA,EAA2C;AACvE,EAAA,OAAO,QAAQ,KAAA,GAAQ,MAAA;AACzB;AAEA,SAAS,iBAAA,CACP,eACA,WAAA,EACwB;AACxB,EAAA,OAAO,EAAE,GAAI,aAAA,IAAiB,IAAK,GAAI,WAAA,IAAe,EAAC,EAAG;AAC5D;AAEO,SAAS,mBAAA,CACd,SACA,SAAA,EACS;AACT,EAAA,MAAM,mBAAA,GAAsB,UAAU,WAAA,EAAY;AAClD,EAAA,OAAO,MAAA,CAAO,KAAK,OAAO,CAAA,CAAE,KAAK,CAAA,GAAA,KAAO,GAAA,CAAI,WAAA,EAAY,KAAM,mBAAmB,CAAA;AACnF;AAEO,SAAS,kBAAA,CACd,SACA,UAAA,EACoB;AACpB,EAAA,KAAA,MAAW,aAAa,UAAA,EAAY;AAClC,IAAA,MAAM,MAAA,GAAS,oBAAA,CAAqB,OAAA,CAAQ,SAAS,CAAC,CAAA;AACtD,IAAA,IAAI,QAAQ,OAAO,MAAA;AAAA,EACrB;AAEA,EAAA,MAAM,iBAAA,GAAoB,IAAI,GAAA,CAAI,UAAA,CAAW,IAAI,CAAA,SAAA,KAAa,SAAA,CAAU,WAAA,EAAa,CAAC,CAAA;AACtF,EAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,OAAO,CAAA,EAAG;AAClD,IAAA,IAAI,CAAC,iBAAA,CAAkB,GAAA,CAAI,GAAA,CAAI,WAAA,EAAa,CAAA,EAAG;AAC7C,MAAA;AAAA,IACF;AACA,IAAA,MAAM,UAAA,GAAa,qBAAqB,KAAK,CAAA;AAC7C,IAAA,IAAI,YAAY,OAAO,UAAA;AAAA,EACzB;AAEA,EAAA,OAAO,MAAA;AACT;AAEA,SAAS,yBAAyB,IAAA,EAAuB;AACvD,EAAA,OAAO,IAAA,CAAK,aAAY,KAAM,eAAA;AAChC;AAEA,SAAS,qBAAqB,KAAA,EAAuB;AACnD,EAAA,MAAM,OAAA,GAAU,MAAM,IAAA,EAAK;AAC3B,EAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,KAAA,CAAM,kBAAkB,CAAA;AAC9C,EAAA,OAAO,KAAA,GAAQ,CAAC,CAAA,EAAG,IAAA,EAAK,IAAK,OAAA;AAC/B;AAEA,SAAS,0CACP,OAAA,EACoB;AACpB,EAAA,MAAM,aAAA,GAAgB,kBAAA,CAAmB,OAAA,EAAS,CAAC,eAAe,CAAC,CAAA;AACnE,EAAA,IAAI,CAAC,aAAA,EAAe;AAClB,IAAA,OAAO,MAAA;AAAA,EACT;AAEA,EAAA,MAAM,KAAA,GAAQ,qBAAqB,aAAa,CAAA;AAChD,EAAA,OAAO,QAAQ,KAAA,GAAQ,MAAA;AACzB;AAEA,SAAS,oCACP,OAAA,EACoB;AACpB,EAAA,MAAM,MAAA,GAAS,kBAAA,CAAmB,OAAA,EAAS,CAAC,QAAQ,CAAC,CAAA;AACrD,EAAA,IAAI,CAAC,MAAA,EAAQ;AACX,IAAA,OAAO,MAAA;AAAA,EACT;AAEA,EAAA,OAAO,iBAAiB,IAAI,OAAA,CAAQ,EAAE,MAAA,EAAQ,CAAC,CAAA,IAAK,MAAA;AACtD;AAEA,SAAS,mBAAmB,OAAA,EAA6C;AACvE,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,OAAO,MAAA;AAAA,EACT;AACA,EAAA,OAAO,OAAO,OAAA,KAAY,QAAA,GAAW,OAAA,GAAU,OAAA,CAAQ,IAAA;AACzD;AAEO,SAAS,6BAAA,CACd,MAAA,EACA,OAAA,EACA,QAAA,EACgC;AAChC,EAAA,OAAO;AAAA,IACL,MAAA,EAAQ,OAAA,EAAS,MAAA,IAAU,MAAA,CAAO,MAAA;AAAA,IAClC,MAAA,EAAQ,OAAA,EAAS,MAAA,IAAU,MAAA,CAAO,UAAU,QAAA,EAAU,MAAA;AAAA,IACtD,MAAA,EAAQ,OAAA,EAAS,MAAA,IAAU,MAAA,CAAO,MAAA;AAAA,IAClC,cAAA,EAAgB,OAAA,EAAS,cAAA,IAAkB,MAAA,CAAO,cAAA;AAAA,IAClD,OAAA,EAAS,OAAA,EAAS,OAAA,IAAW,MAAA,CAAO,OAAA;AAAA,IACpC,YAAA,EAAc,OAAA,EAAS,YAAA,IAAgB,MAAA,CAAO,YAAA;AAAA,IAC9C,UAAA,EAAY,OAAA,EAAS,UAAA,IAAc,MAAA,CAAO,cAAc,QAAA,EAAU,UAAA;AAAA,IAClE,WAAA,EAAa,OAAA,EAAS,WAAA,IAAe,MAAA,CAAO,WAAA;AAAA,IAC5C,MAAA,EAAQ,OAAA,EAAS,MAAA,IAAU,MAAA,CAAO,MAAA;AAAA,IAClC,YAAA,EAAc,OAAA,EAAS,YAAA,IAAgB,MAAA,CAAO,YAAA;AAAA,IAC9C,KAAA,EAAO,OAAA,EAAS,KAAA,IAAS,MAAA,CAAO,KAAA;AAAA,IAChC,OAAA,EAAS,OAAA,EAAS,OAAA,IAAW,MAAA,CAAO,OAAA;AAAA,IACpC,YAAA,EAAc,OAAA,CAAQ,MAAA,CAAO,YAAA,IAAgB,SAAS,YAAY,CAAA;AAAA,IAClE,eAAe,MAAA,CAAO,OAAA;AAAA,IACtB,aAAa,OAAA,EAAS;AAAA,GACxB;AACF;AAEO,SAAS,0BAAA,CACd,OAAA,EACA,cAAA,EACA,MAAA,EACA,SACA,MAAA,EAIwB;AACxB,EAAA,MAAM,KAAA,GAAQ,cAAc,OAAO,CAAA;AACnC,EAAA,OAAO,yBAAA,CAA0B;AAAA,IAC/B,OAAA;AAAA,IACA,cAAA;AAAA,IACA,GAAG,6BAAA,CAA8B,MAAA,EAAQ,OAAA,EAAS;AAAA,MAChD,MAAA,EAAQ,QAAQ,MAAA,IAAU,MAAA;AAAA,MAC1B,UAAA,EAAY,MAAA,EAAQ,UAAA,KAAe,KAAA,CAAM,oBAAoB,IAAA,GAAO,MAAA;AAAA,KACrE,CAAA;AAAA,IACD,WAAA,EAAa,MAAA,EAAQ,WAAA,KAAgB,KAAA,CAAM,cAAc,kBAAA,GAAqB,MAAA,CAAA;AAAA,IAC9E,MAAA,EAAQ,MAAA,EAAQ,MAAA,KAAW,KAAA,CAAM,SAAS,kBAAA,GAAqB,MAAA;AAAA,GAChE,CAAA;AACH;AAEO,SAAS,wBAAA,CACd,SACA,MAAA,EACM;AACN,EAAA,MAAM,cAAA,GAAiB,qBAAqB,MAAM,CAAA;AAClD,EAAA,IAAI,cAAA,IAAkB,CAAC,mBAAA,CAAoB,OAAA,EAAS,cAAc,CAAA,EAAG;AACnE,IAAA,OAAA,CAAQ,cAAc,CAAA,GAAI,cAAA;AAAA,EAC5B;AACF;AAEO,SAAS,6BAAA,CACd,SACA,KAAA,EAIM;AACN,EAAA,MAAM,kBAAA,GAAqB,iBAAA,CAAkB,KAAA,CAAM,aAAA,EAAe,MAAM,WAAW,CAAA;AACnF,EAAA,MAAM,KAAA,GAAQ,aAAA,CAAc,KAAA,CAAM,OAAO,CAAA;AACzC,EAAA,MAAM,cAAA,GAAiB,oBAAA,CAAqB,KAAA,CAAM,MAAM,CAAA;AACxD,EAAA,IAAI,cAAA,EAAgB;AAClB,IAAA,kBAAA,CAAmB,MAAA,GAAS,cAAA;AAAA,EAC9B;AAEA,EAAA,MAAM,uBACJ,oBAAA,CAAqB,KAAA,CAAM,YAAY,CAAA,IACvC,kBAAA,CAAmB,oBAAoB,+BAA+B,CAAA;AACxE,EAAA,MAAM,mBAAA,GACJ,oBAAA,IAAwB,mCAAA,CAAoC,kBAAkB,CAAA;AAChF,EAAA,MAAM,iBAAA,GAAoB,kBAAA,CAAmB,kBAAA,EAAoB,CAAC,QAAQ,CAAC,CAAA;AAE3E,EAAA,IAAI,cAAA,IAAkB,CAAC,mBAAA,CAAoB,OAAA,EAAS,QAAQ,CAAA,EAAG;AAC7D,IAAA,OAAA,CAAQ,MAAA,GAAS,cAAA;AAAA,EACnB,WAAW,iBAAA,IAAqB,CAAC,mBAAA,CAAoB,OAAA,EAAS,QAAQ,CAAA,EAAG;AACvE,IAAA,OAAA,CAAQ,MAAA,GAAS,iBAAA;AAAA,EACnB;AAEA,EAAA,MAAM,uBAAuB,MAAM;AACjC,IAAA,MAAM,UAAA,GAAa,oBAAA,CAAqB,KAAA,CAAM,WAAW,CAAA;AACzD,IAAA,IAAI,UAAA,EAAY;AACd,MAAA,OAAO,qBAAqB,UAAU,CAAA;AAAA,IACxC;AACA,IAAA,MAAM,QAAA,GAAW,kBAAA,CAAmB,kBAAA,EAAoB,+BAA+B,CAAA;AACvF,IAAA,OAAO,QAAA,GAAW,oBAAA,CAAqB,QAAQ,CAAA,GAAI,MAAA;AAAA,EACrD,CAAA,GAAG;AACH,EAAA,MAAM,kBAAA,GACJ,mBAAA,IAAuB,yCAAA,CAA0C,kBAAkB,CAAA;AAErF,EAAA,IAAI,MAAM,UAAA,IAAc,kBAAA,IAAsB,CAAC,mBAAA,CAAoB,OAAA,EAAS,eAAe,CAAA,EAAG;AAC5F,IAAA,OAAA,CAAQ,aAAA,GAAgB,UAAU,kBAAkB,CAAA,CAAA;AAAA,EACtD;AAEA,EAAA,IAAI,MAAM,UAAA,EAAY;AACpB,IAAA,IAAI,mBAAA,IAAuB,CAAC,mBAAA,CAAoB,OAAA,EAAS,6BAA6B,CAAA,EAAG;AACvF,MAAA,OAAA,CAAQ,6BAA6B,CAAA,GAAI,mBAAA;AAAA,IAC3C;AACA,IAAA,IAAI,kBAAA,IAAsB,CAAC,mBAAA,CAAoB,OAAA,EAAS,4BAA4B,CAAA,EAAG;AACrF,MAAA,OAAA,CAAQ,4BAA4B,CAAA,GAAI,kBAAA;AAAA,IAC1C;AAAA,EACF,WAAW,mBAAA,IAAuB,CAAC,mBAAA,CAAoB,OAAA,EAAS,6BAA6B,CAAA,EAAG;AAC9F,IAAA,OAAA,CAAQ,6BAA6B,CAAA,GAAI,mBAAA;AAAA,EAC3C;AACF;AAEO,SAAS,uBAAA,CACd,SACA,KAAA,EACM;AACN,EAAA,MAAM,kBAAA,GAAqB,iBAAA,CAAkB,KAAA,CAAM,aAAA,EAAe,MAAM,WAAW,CAAA;AAEnF,EAAA,MAAM,QACJ,oBAAA,CAAqB,KAAA,CAAM,KAAK,CAAA,IAChC,kBAAA,CAAmB,oBAAoB,wBAAwB,CAAA;AACjE,EAAA,IAAI,KAAA,IAAS,CAAC,mBAAA,CAAoB,OAAA,EAAS,UAAU,CAAA,EAAG;AACtD,IAAA,OAAA,CAAQ,UAAU,CAAA,GAAI,KAAA;AAAA,EACxB;AAEA,EAAA,MAAM,UACJ,oBAAA,CAAqB,KAAA,CAAM,OAAO,CAAA,IAClC,kBAAA,CAAmB,oBAAoB,0BAA0B,CAAA;AACnE,EAAA,IAAI,OAAA,EAAS;AACX,IAAA,IAAI,CAAC,mBAAA,CAAoB,OAAA,EAAS,mBAAmB,CAAA,EAAG;AACtD,MAAA,OAAA,CAAQ,mBAAmB,CAAA,GAAI,OAAA;AAAA,IACjC;AACA,IAAA,IAAI,CAAC,mBAAA,CAAoB,OAAA,EAAS,YAAY,CAAA,EAAG;AAC/C,MAAA,OAAA,CAAQ,YAAY,CAAA,GAAI,OAAA;AAAA,IAC1B;AAAA,EACF;AACF;AAwCO,SAAS,0BACd,KAAA,EACwB;AACxB,EAAA,MAAM,YAAA,GAAe,OAAA,CAAQ,KAAA,CAAM,YAAY,CAAA;AAC/C,EAAA,MAAM,kBAAA,GAAqB,iBAAA,CAAkB,KAAA,CAAM,aAAA,EAAe,MAAM,WAAW,CAAA;AACnF,EAAA,MAAM,KAAA,GAAQ,aAAA,CAAc,KAAA,CAAM,OAAO,CAAA;AAEzC,EAAA,MAAM,YAAA,GAAe,kBAAA,CAAmB,kBAAA,EAAoB,wBAAwB,CAAA;AACpF,EAAA,MAAM,WAAA,GAAc,oBAAA,CAAqB,KAAA,CAAM,MAAM,CAAA,IAAK,YAAA;AAC1D,EAAA,MAAM,cACJ,oBAAA,CAAqB,KAAA,CAAM,MAAM,CAAA,IACjC,kBAAA,CAAmB,oBAAoB,yBAAyB,CAAA;AAClE,EAAA,MAAM,cAAA,GACJ,kBAAA,CAAmB,kBAAA,EAAoB,4BAA4B,CAAA,IAAK,WAAA;AAE1E,EAAA,MAAM,OAAA,GAAkC;AAAA,IACtC,gBAAgB,KAAA,CAAM;AAAA,GACxB;AAEA,EAAA,IAAI,MAAM,WAAA,EAAa;AACrB,IAAA,OAAA,CAAQ,cAAc,CAAA,GAAI,KAAA,CAAM,WAAA,IAAe,kBAAA;AAAA,EACjD;AAEA,EAAA,IAAI,KAAA,CAAM,MAAA,IAAU,KAAA,CAAM,MAAA,EAAQ;AAChC,IAAA,OAAA,CAAQ,MAAA,GAAS,MAAM,MAAA,IAAU,kBAAA;AAAA,EACnC;AAEA,EAAA,IAAI,MAAM,OAAA,EAAS;AACjB,IAAA,IAAI,oBAAA,CAAqB,KAAA,CAAM,MAAM,CAAA,EAAG;AACtC,MAAA,OAAA,CAAQ,WAAW,CAAA,GAAI,KAAA,CAAM,MAAA,IAAU,EAAA;AAAA,IACzC;AACA,IAAA,IAAI,oBAAA,CAAqB,KAAA,CAAM,cAAc,CAAA,EAAG;AAC9C,MAAA,OAAA,CAAQ,mBAAmB,CAAA,GAAI,KAAA,CAAM,cAAA,IAAkB,EAAA;AAAA,IACzD;AACA,IAAA,IAAI,WAAA,EAAa;AACf,MAAA,OAAA,CAAQ,iBAAiB,CAAA,GAAI,WAAA;AAAA,IAC/B;AAEA,IAAA,MAAM,WAAA,GAAc,kBAAA,CAAmB,KAAA,CAAM,OAAO,CAAA;AACpD,IAAA,IAAI,WAAA,EAAa;AACf,MAAA,OAAA,CAAQ,gBAAgB,CAAA,GAAI,WAAA;AAAA,IAC9B;AAEA,IAAA,IAAI,OAAO,KAAA,CAAM,UAAA,KAAe,SAAA,EAAW;AACzC,MAAA,OAAA,CAAQ,eAAe,CAAA,GAAI,KAAA,CAAM,UAAA,GAAa,MAAA,GAAS,OAAA;AAAA,IACzD,CAAA,MAAA,IAAW,MAAM,iBAAA,EAAmB;AAClC,MAAA,OAAA,CAAQ,eAAe,CAAA,GAAI,MAAA;AAAA,IAC7B;AAEA,IAAA,IAAI,oBAAA,CAAqB,KAAA,CAAM,YAAY,CAAA,EAAG;AAC5C,MAAA,OAAA,CAAQ,iBAAiB,CAAA,GAAI,KAAA,CAAM,YAAA,IAAgB,EAAA;AAAA,IACrD;AAAA,EACF;AAEA,EAAA,IAAI,KAAA,CAAM,OAAA,KAAY,WAAA,IAAe,cAAA,CAAA,EAAiB;AACpD,IAAA,wBAAA,CAAyB,SAAS,cAAc,CAAA;AAAA,EAClD;AAEA,EAAA,6BAAA,CAA8B,SAAS,KAAK,CAAA;AAC5C,EAAA,uBAAA,CAAwB,SAAS,KAAK,CAAA;AAEtC,EAAA,MAAM,wBAAA,GAA2B,IAAI,GAAA,CAAI,wBAAA,CAAyB,IAAI,CAAA,GAAA,KAAO,GAAA,CAAI,WAAA,EAAa,CAAC,CAAA;AAC/F,EAAA,MAAA,CAAO,OAAA,CAAQ,kBAAkB,CAAA,CAAE,OAAA,CAAQ,CAAC,CAAC,GAAA,EAAK,KAAK,CAAA,KAAM;AAC3D,IAAA,IAAI,wBAAA,CAAyB,GAAA,CAAI,GAAA,CAAI,WAAA,EAAa,CAAA,EAAG;AACnD,MAAA;AAAA,IACF;AACA,IAAA,IAAI,YAAA,IAAgB,wBAAA,CAAyB,GAAG,CAAA,EAAG;AACjD,MAAA;AAAA,IACF;AACA,IAAA,MAAM,UAAA,GAAa,qBAAqB,KAAK,CAAA;AAC7C,IAAA,IAAI,UAAA,EAAY;AACd,MAAA,OAAA,CAAQ,GAAG,CAAA,GAAI,UAAA;AAAA,IACjB;AAAA,EACF,CAAC,CAAA;AAED,EAAA,IAAI,YAAA,EAAc;AAChB,IAAA,OAAA,CAAQ,eAAe,CAAA,GAAI,qBAAA;AAAA,EAC7B;AAEA,EAAA,OAAO,OAAA;AACT;;;ACrZA,IAAM,QAAA,GAAW,oBAAA;AAqEjB,SAAS,0BAAA,CAA2B,SAAiB,WAAA,EAAqC;AACxF,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,IAAI,WAAA,EAAa,WAAA,EAAY,CAAE,QAAA,CAAS,kBAAkB,CAAA,EAAG;AAC3D,IAAA,IAAI;AACF,MAAA,OAAO,IAAA,CAAK,MAAM,OAAO,CAAA;AAAA,IAC3B,CAAA,CAAA,MAAQ;AACN,MAAA,OAAO,OAAA;AAAA,IACT;AAAA,EACF;AACA,EAAA,MAAM,OAAA,GAAU,QAAQ,IAAA,EAAK;AAC7B,EAAA,IAAK,OAAA,CAAQ,UAAA,CAAW,GAAG,CAAA,IAAK,QAAQ,QAAA,CAAS,GAAG,CAAA,IAAO,OAAA,CAAQ,WAAW,GAAG,CAAA,IAAK,OAAA,CAAQ,QAAA,CAAS,GAAG,CAAA,EAAI;AAC5G,IAAA,IAAI;AACF,MAAA,OAAO,IAAA,CAAK,MAAM,OAAO,CAAA;AAAA,IAC3B,CAAA,CAAA,MAAQ;AACN,MAAA,OAAO,OAAA;AAAA,IACT;AAAA,EACF;AACA,EAAA,OAAO,OAAA;AACT;AAEA,SAAS,qBAAqB,KAAA,EAA4C;AACxE,EAAA,IAAI,CAAC,OAAO,OAAO,EAAA;AACnB,EAAA,MAAM,MAAA,GAAS,IAAI,eAAA,EAAgB;AACnC,EAAA,KAAA,MAAW,CAAC,GAAA,EAAK,QAAQ,KAAK,MAAA,CAAO,OAAA,CAAQ,KAAK,CAAA,EAAG;AACnD,IAAA,MAAM,SAAS,KAAA,CAAM,OAAA,CAAQ,QAAQ,CAAA,GAAI,QAAA,GAAW,CAAC,QAAQ,CAAA;AAC7D,IAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AAC1B,MAAA,IAAI,UAAU,MAAA,EAAW;AACzB,MAAA,MAAA,CAAO,OAAO,GAAA,EAAK,KAAA,KAAU,OAAO,EAAA,GAAK,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA,IACxD;AAAA,EACF;AACA,EAAA,MAAM,UAAA,GAAa,OAAO,QAAA,EAAS;AACnC,EAAA,OAAO,UAAA,GAAa,CAAA,CAAA,EAAI,UAAU,CAAA,CAAA,GAAK,EAAA;AACzC;AAEA,SAAS,WAAW,IAAA,EAA6C;AAC/D,EAAA,OACE,IAAA,KAAS,UACT,IAAA,KAAS,IAAA,IACT,EAAE,IAAA,YAAgB,QAAA,CAAA,IAClB,EAAE,IAAA,YAAgB,IAAA,CAAA,IAClB,EAAE,gBAAgB,eAAA,CAAA,IAClB,EAAE,gBAAgB,WAAA,CAAA,IAClB,CAAC,YAAY,MAAA,CAAO,IAAI,CAAA,IACxB,OAAO,IAAA,KAAS,QAAA;AAEpB;AAEO,SAAS,mBAAA,CACd,QACA,cAAA,EAImF;AACnF,EAAA,OAAO,OAAoB,OAAA,KAAqE;AAC9F,IAAA,MAAM,OAAA,GAAU,MAAM,cAAA,EAAe;AACrC,IAAA,MAAM,MAAA,GAAS,QAAQ,MAAA,IAAU,KAAA;AACjC,IAAA,MAAM,YAAA,GAAe,QAAQ,YAAA,IAAgB,MAAA;AAC7C,IAAA,MAAM,OAAA,GAAU,QAAQ,OAAA,IAAW,IAAA;AACnC,IAAA,MAAM,WAAA,GAAc,OAAA,CAAQ,GAAA,EAAK,IAAA,EAAK;AACtC,IAAA,MAAM,gBAAA,GAAqE;AAAA,MACzE,IAAI,MAAA,CAAO,OAAA;AAAA,MACX,MAAM,MAAA,CAAO,OAAA;AAAA,MACb,MAAM,MAAA,CAAO,OAAA;AAAA,MACb,SAAS,MAAA,CAAO;AAAA,KAClB;AAEA,IAAA,MAAM,WAAA,GAAc,oBAAA,CAAqB,OAAA,CAAQ,KAAK,CAAA;AACtD,IAAA,IAAI,SAAA;AACJ,IAAA,IAAI,WAAA,EAAa;AAGf,MAAA,IAAI;AACF,QAAA,MAAMC,OAAAA,GAAS,IAAI,GAAA,CAAI,WAAW,CAAA;AAClC,QAAA,IAAIA,OAAAA,CAAO,QAAA,KAAa,OAAA,IAAWA,OAAAA,CAAO,aAAa,QAAA,EAAU;AAC/D,UAAA,MAAM,IAAI,MAAM,aAAa,CAAA;AAAA,QAC/B;AAAA,MACF,CAAA,CAAA,MAAQ;AACN,QAAA,MAAM,IAAI,KAAA;AAAA,UACR,CAAA,kEAAA,EAAqE,IAAA,CAAK,SAAA,CAAU,OAAA,CAAQ,GAAG,CAAC,CAAA,CAAA;AAAA,SAClG;AAAA,MACF;AACA,MAAA,SAAA,GAAY,CAAA,EAAG,WAAW,CAAA,EAAG,WAAW,CAAA,CAAA;AAAA,IAC1C,CAAA,MAAO;AACL,MAAA,MAAM,eAAA,GAAkB,iBAAiB,OAAO,CAAA;AAChD,MAAA,IAAI,CAAC,eAAA,EAAiB;AACpB,QAAA,MAAM,IAAI,KAAA;AAAA,UACR,UAAU,OAAO,CAAA,kHAAA;AAAA,SACnB;AAAA,MACF;AAEA,MAAA,MAAM,iBAAA,GAAoB,8BAA8B,eAAA,EAAiB;AAAA,QACvE,KAAA,EAAO,UAAU,OAAO,CAAA,SAAA;AAAA,OACzB,CAAA;AACD,MAAA,MAAM,IAAA,GAAO,OAAA,CAAQ,IAAA,EAAM,IAAA,EAAK;AAChC,MAAA,IAAI,CAAC,IAAA,EAAM;AACT,QAAA,MAAM,IAAI,MAAM,0EAA0E,CAAA;AAAA,MAC5F;AACA,MAAA,MAAM,iBAAiB,IAAA,CAAK,UAAA,CAAW,GAAG,CAAA,GAAI,IAAA,GAAO,IAAI,IAAI,CAAA,CAAA;AAC7D,MAAA,SAAA,GAAY,CAAA,EAAG,iBAAiB,CAAA,EAAG,cAAc,GAAG,WAAW,CAAA,CAAA;AAAA,IACjE;AAEA,IAAA,MAAM,cAAA,GACJ,YAAY,MAAA,GACR,MAAA,GACA,YAAY,MAAA,GACV,MAAA,GACA,OAAA,KAAY,SAAA,GACV,SAAA,GACA,SAAA;AACV,IAAA,MAAM,UAAU,yBAAA,CAA0B;AAAA,MACxC,OAAA,EAAS,cAAA;AAAA,MACT,cAAA,EAAgB,oBAAoB,QAAQ,CAAA;AAAA,MAC5C,MAAA,EAAQ,OAAA,CAAQ,MAAA,IAAU,MAAA,CAAO,MAAA;AAAA,MACjC,QAAQ,MAAA,CAAO,MAAA;AAAA,MACf,QAAQ,OAAA,EAAS,MAAA;AAAA,MACjB,gBAAgB,OAAA,EAAS,cAAA;AAAA,MACzB,SAAS,MAAA,CAAO,OAAA;AAAA,MAChB,OAAO,MAAA,CAAO,KAAA;AAAA,MACd,SAAS,MAAA,CAAO,OAAA;AAAA,MAChB,aAAa,OAAA,EAAS,WAAA;AAAA,MACtB,QAAQ,OAAA,EAAS,MAAA;AAAA,MACjB,cAAc,OAAA,EAAS,YAAA;AAAA,MACvB,cAAc,OAAA,EAAS,YAAA;AAAA,MACvB,aAAA,EAAe;AAAA,QACb,GAAI,MAAA,CAAO,OAAA,IAAW,EAAC;AAAA,QACvB,GAAI,OAAA,EAAS,OAAA,IAAW;AAAC,OAC3B;AAAA,MACA,aAAa,OAAA,CAAQ,OAAA;AAAA,MACrB,MAAA,EAAQ,OAAA,KAAY,MAAA,GAAS,kBAAA,GAAqB,MAAA;AAAA,MAClD,aACE,OAAA,KAAY,MAAA,IAAU,YAAY,IAAA,IAAQ,OAAA,KAAY,YAClD,kBAAA,GACA,MAAA;AAAA,MACN,UAAA,EAAY,OAAA,KAAY,IAAA,GAAO,IAAA,GAAO;AAAA,KACvC,CAAA;AAED,IAAA,MAAM,kBAAA,GAAqB,UAAA,CAAW,OAAA,CAAQ,IAAI,CAAA;AAClD,IAAA,IAAI,kBAAA,IAAsB,CAAC,mBAAA,CAAoB,OAAA,EAAS,cAAc,CAAA,EAAG;AACvE,MAAA,OAAA,CAAQ,cAAc,CAAA,GAAI,kBAAA;AAAA,IAC5B;AAEA,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,SAAA,EAAW;AAAA,MACtC,MAAA;AAAA,MACA,OAAA;AAAA,MACA,IAAA,EACE,OAAA,CAAQ,IAAA,KAAS,MAAA,IAAa,QAAQ,IAAA,KAAS,IAAA,GAC3C,MAAA,GACA,kBAAA,GACE,IAAA,CAAK,SAAA,CAAU,OAAA,CAAQ,IAAI,IAC1B,OAAA,CAAQ,IAAA;AAAA,MACjB,QAAQ,OAAA,CAAQ,MAAA;AAAA,MAChB,aAAa,OAAA,CAAQ;AAAA,KACtB,CAAA;AAED,IAAA,IAAI,iBAAiB,UAAA,EAAY;AAC/B,MAAA,OAAO;AAAA,QACL,IAAI,QAAA,CAAS,EAAA;AAAA,QACb,QAAQ,QAAA,CAAS,MAAA;AAAA,QACjB,YAAY,QAAA,CAAS,UAAA;AAAA,QACrB,SAAS,QAAA,CAAS,OAAA;AAAA,QAClB,IAAA,EAAM,IAAA;AAAA,QACN,GAAA,EAAK;AAAA,OACP;AAAA,IACF;AAEA,IAAA,MAAM,OAAA,GAAU,MAAM,QAAA,CAAS,IAAA,EAAK;AACpC,IAAA,MAAM,MAAA,GACJ,YAAA,KAAiB,MAAA,GACb,OAAA,GACA,0BAAA,CAA2B,SAAS,QAAA,CAAS,OAAA,CAAQ,GAAA,CAAI,cAAc,CAAC,CAAA;AAE9E,IAAA,OAAO;AAAA,MACL,IAAI,QAAA,CAAS,EAAA;AAAA,MACb,QAAQ,QAAA,CAAS,MAAA;AAAA,MACjB,YAAY,QAAA,CAAS,UAAA;AAAA,MACrB,SAAS,QAAA,CAAS,OAAA;AAAA,MAClB,IAAA,EAAM,MAAA;AAAA,MACN,GAAA,EAAK;AAAA,KACP;AAAA,EACF,CAAA;AACF;;;ACvOA,IAAM,cAAA,GAAiB,gBAAA;AACvB,IAAMC,SAAAA,GAAW,oBAAA;AACjB,IAAM,gBAAA,GAAmB,oBAAoBA,SAAQ,CAAA;AACrD,SAAS,iBAAA,CAAkB,SAAiB,WAAA,EAA4B;AACtE,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,OAAO,EAAE,MAAA,EAAQ,IAAA,EAAiB,WAAA,EAAa,KAAA,EAAM;AAAA,EACvD;AAEA,EAAA,MAAM,0BACJ,WAAA,EAAa,WAAA,EAAY,CAAE,QAAA,CAAS,kBAAkB,CAAA,IAAK,KAAA;AAC7D,EAAA,MAAM,SAAA,GACJ,2BAA2B,OAAA,CAAQ,UAAA,CAAW,GAAG,CAAA,IAAK,OAAA,CAAQ,WAAW,GAAG,CAAA;AAE9E,EAAA,IAAI,CAAC,SAAA,EAAW;AACd,IAAA,OAAO,EAAE,MAAA,EAAQ,OAAA,EAAoB,WAAA,EAAa,KAAA,EAAM;AAAA,EAC1D;AAEA,EAAA,IAAI;AACF,IAAA,OAAO,EAAE,MAAA,EAAQ,IAAA,CAAK,MAAM,OAAO,CAAA,EAAc,aAAa,KAAA,EAAM;AAAA,EACtE,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,EAAE,MAAA,EAAQ,OAAA,EAAoB,WAAA,EAAa,IAAA,EAAK;AAAA,EACzD;AACF;AAEA,SAASP,UAAS,KAAA,EAAkD;AAClE,EAAA,OAAO,OAAA,CAAQ,KAAK,CAAA,IAAK,OAAO,UAAU,QAAA,IAAY,CAAC,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA;AAC5E;AAEA,SAAS,eAAe,KAAA,EAAoC;AAC1D,EAAA,OAAO,OAAO,KAAA,KAAU,QAAA,IAAY,KAAA,CAAM,IAAA,GAAO,MAAA,GAAS,CAAA,GAAI,KAAA,CAAM,IAAA,EAAK,GAAI,MAAA;AAC/E;AAEA,SAASQ,+BAA8B,OAAA,EAAkD;AACvF,EAAA,IAAI,CAACR,SAAAA,CAAS,OAAO,CAAA,EAAG,OAAO,IAAA;AAC/B,EAAA,OAAOA,SAAAA,CAAS,OAAA,CAAQ,KAAK,CAAA,GAAI,QAAQ,KAAA,GAAQ,OAAA;AACnD;AAEA,SAAS,iBAAiB,OAAA,EAAsC;AAC9D,EAAA,OACE,OAAA,CAAQ,GAAA,CAAI,cAAc,CAAA,IAC1B,OAAA,CAAQ,GAAA,CAAI,kBAAkB,CAAA,IAC9B,OAAA,CAAQ,GAAA,CAAI,qBAAqB,CAAA,IACjC,MAAA;AAEJ;AAEA,SAAS,mBAAA,CAAoB,SAAkB,QAAA,EAAkB;AAC/D,EAAA,MAAM,iBAAA,GAAoBQ,+BAA8B,OAAO,CAAA;AAC/D,EAAA,IAAI,iBAAA,EAAmB;AACrB,IAAA,MAAM,oBAAoB,CAAC,iBAAA,CAAkB,SAAS,iBAAA,CAAkB,KAAA,EAAO,kBAAkB,OAAO,CAAA;AACxG,IAAA,KAAA,MAAW,aAAa,iBAAA,EAAmB;AACzC,MAAA,MAAM,QAAA,GAAW,eAAe,SAAS,CAAA;AACzC,MAAA,IAAI,UAAU,OAAO,QAAA;AAAA,IACvB;AAAA,EACF;AAEA,EAAA,MAAM,UAAA,GAAa,eAAe,OAAO,CAAA;AACzC,EAAA,IAAI,YAAY,OAAO,UAAA;AAEvB,EAAA,OAAO,QAAA;AACT;AAEA,SAAS,iBAAiB,OAAA,EAAsC;AAC9D,EAAA,MAAM,iBAAA,GAAoBA,+BAA8B,OAAO,CAAA;AAC/D,EAAA,OAAO,iBAAA,GAAoB,cAAA,CAAe,iBAAA,CAAkB,IAAI,CAAA,GAAI,MAAA;AACtE;AAEA,SAAS,iBAAA,CAAkB,UAAoB,OAAA,EAAiC;AAC9E,EAAA,MAAM,aAAA,GAAgB,cAAA,CAAe,QAAA,CAAS,UAAU,CAAA;AACxD,EAAA,IAAI,eAAe,OAAO,aAAA;AAC1B,EAAA,MAAM,aAAA,GAAgBR,SAAAA,CAAS,OAAO,CAAA,GAAI,OAAA,GAAU,IAAA;AACpD,EAAA,OAAO,aAAA,GAAgB,cAAA,CAAe,aAAA,CAAc,UAAU,KAAK,IAAA,GAAO,IAAA;AAC5E;AAEA,SAAS,iBAAiB,KAAA,EAAsD;AAC9E,EAAA,OAAO,MAAM,SAAA,EAAU;AACzB;AAUA,SAAS,cAAc,KAAA,EAAwB;AAC7C,EAAA,IAAI,KAAA,KAAU,IAAA,IAAQ,KAAA,KAAU,MAAA,EAAW,OAAO,MAAA;AAClD,EAAA,IAAI,OAAO,KAAA,KAAU,SAAA,EAAW,OAAO,QAAQ,MAAA,GAAS,OAAA;AACxD,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,EAAU,OAAO,MAAA,CAAO,SAAS,KAAK,CAAA,GAAI,MAAA,CAAO,KAAK,CAAA,GAAI,MAAA;AAC/E,EAAA,OAAO,OAAO,KAAK,CAAA;AACrB;AAEA,SAAS,aAAa,MAAA,EAA2B;AAC/C,EAAA,OAAO,IAAI,MAAA,CAAO,GAAA,CAAI,aAAa,CAAA,CAAE,IAAA,CAAK,GAAG,CAAC,CAAA,CAAA,CAAA;AAChD;AAEA,SAAS,wBAAwB,KAAA,EAAwB;AACvD,EAAA,IAAI,MAAM,OAAA,CAAQ,KAAK,CAAA,EAAG,OAAO,aAAa,KAAK,CAAA;AACnD,EAAA,IAAI,SAAS,OAAO,KAAA,KAAU,UAAU,OAAO,IAAA,CAAK,UAAU,KAAK,CAAA;AACnE,EAAA,OAAO,cAAc,KAAK,CAAA;AAC5B;AAEA,SAAS,sBAAsB,MAAA,EAAiC;AAC9D,EAAA,MAAM,QAAQ,MAAA,CAAO,KAAA;AACrB,EAAA,QAAQ,OAAO,QAAA;AAAU,IACvB,KAAK,IAAA,EAAM;AACT,MAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACzB,QAAA,MAAM,IAAI,kBAAA,CAAmB;AAAA,UAC3B,IAAA,EAAM,eAAA;AAAA,UACN,OAAA,EAAS,CAAA,YAAA,EAAe,MAAA,CAAO,MAAM,CAAA,4CAAA,CAAA;AAAA,UACrC,MAAA,EAAQ;AAAA,SACT,CAAA;AAAA,MACH;AACA,MAAA,OAAO,CAAA,GAAA,EAAM,YAAA,CAAa,KAAK,CAAC,CAAA,CAAA;AAAA,IAClC;AAAA,IACA,KAAK,IAAA;AACH,MAAA,OAAO,CAAA,GAAA,EAAM,aAAA,CAAc,KAAK,CAAC,CAAA,CAAA;AAAA,IACnC,KAAK,IAAA;AAAA,IACL,KAAK,KAAA;AAAA,IACL,KAAK,IAAA;AAAA,IACL,KAAK,KAAA;AAAA,IACL,KAAK,IAAA;AAAA,IACL,KAAK,KAAA;AAAA,IACL,KAAK,MAAA;AAAA,IACL,KAAK,OAAA;AACH,MAAA,OAAO,GAAG,MAAA,CAAO,QAAQ,CAAA,CAAA,EAAI,aAAA,CAAc,KAAK,CAAC,CAAA,CAAA;AAAA;AAEvD;AAEA,SAAS,oBAAoB,OAAA,EAAsD;AACjF,EAAA,MAAM,YAAA,GAAA,CAAgB,OAAA,CAAQ,aAAA,IAAiB,OAAA,CAAQ,UAAU,IAAA,EAAK;AACtE,EAAA,IAAI,CAAC,YAAA,EAAc;AACjB,IAAA,MAAM,IAAI,kBAAA,CAAmB;AAAA,MAC3B,IAAA,EAAM,eAAA;AAAA,MACN,OAAA,EAAS,8BAAA;AAAA,MACT,MAAA,EAAQ,CAAA;AAAA,MACR,QAAA,EAAU,cAAA;AAAA,MACV,MAAA,EAAQ;AAAA,KACT,CAAA;AAAA,EACH;AAEA,EAAA,MAAM,KAAA,GAAQ,IAAI,eAAA,EAAgB;AAClC,EAAA,IAAI,QAAQ,MAAA,EAAQ,KAAA,CAAM,GAAA,CAAI,QAAA,EAAU,QAAQ,MAAM,CAAA;AACtD,EAAA,IAAI,QAAQ,MAAA,EAAQ,KAAA,CAAM,GAAA,CAAI,QAAA,EAAU,QAAQ,MAAM,CAAA;AACtD,EAAA,IAAI,QAAQ,KAAA,EAAO,KAAA,CAAM,GAAA,CAAI,OAAA,EAAS,QAAQ,KAAK,CAAA;AACnD,EAAA,IAAI,OAAA,CAAQ,IAAA,EAAM,KAAA,CAAM,GAAA,CAAI,QAAQ,MAAM,CAAA;AAC1C,EAAA,IAAI,OAAO,OAAA,CAAQ,KAAA,KAAU,QAAA,EAAU,KAAA,CAAM,IAAI,OAAA,EAAS,MAAA,CAAO,OAAA,CAAQ,KAAK,CAAC,CAAA;AAC/E,EAAA,IAAI,OAAO,OAAA,CAAQ,MAAA,KAAW,QAAA,EAAU,KAAA,CAAM,IAAI,QAAA,EAAU,MAAA,CAAO,OAAA,CAAQ,MAAM,CAAC,CAAA;AAClF,EAAA,IAAI,OAAA,CAAQ,OAAO,MAAA,EAAQ;AACzB,IAAA,KAAA,CAAM,GAAA;AAAA,MACJ,OAAA;AAAA,MACA,OAAA,CAAQ,KAAA,CAAM,SAAA,KAAc,KAAA,GACxB,CAAA,EAAG,QAAQ,KAAA,CAAM,MAAM,CAAA,KAAA,CAAA,GACvB,OAAA,CAAQ,KAAA,CAAM;AAAA,KACpB;AAAA,EACF;AAEA,EAAA,IAAI,QAAQ,IAAA,EAAM;AAChB,IAAA,KAAA,MAAW,CAAC,KAAK,KAAK,CAAA,IAAK,OAAO,OAAA,CAAQ,OAAA,CAAQ,IAAI,CAAA,EAAG;AACvD,MAAA,KAAA,CAAM,GAAA,CAAI,GAAA,EAAK,uBAAA,CAAwB,KAAK,CAAC,CAAA;AAAA,IAC/C;AAAA,EACF;AAEA,EAAA,IAAI,OAAA,CAAQ,SAAS,MAAA,EAAQ;AAC3B,IAAA,KAAA,MAAW,MAAA,IAAU,QAAQ,OAAA,EAAS;AACpC,MAAA,IAAI,OAAA,CAAQ,IAAA,IAAQ,MAAA,CAAO,SAAA,CAAU,cAAA,CAAe,KAAK,OAAA,CAAQ,IAAA,EAAM,MAAA,CAAO,MAAM,CAAA,EAAG;AACrF,QAAA,MAAM,IAAI,kBAAA,CAAmB;AAAA,UAC3B,IAAA,EAAM,eAAA;AAAA,UACN,SAAS,CAAA,YAAA,EAAe,MAAA,CAAO,MAAM,CAAA,+BAAA,EAAkC,OAAO,MAAM,CAAA,aAAA,CAAA;AAAA,UACpF,MAAA,EAAQ;AAAA,SACT,CAAA;AAAA,MACH;AACA,MAAA,KAAA,CAAM,MAAA,CAAO,MAAA,CAAO,MAAA,EAAQ,qBAAA,CAAsB,MAAM,CAAC,CAAA;AAAA,IAC3D;AAAA,EACF;AAEA,EAAA,MAAM,QAAA,GAAW,CAAA,KAAA,EAAQ,kBAAA,CAAmB,YAAY,CAAC,CAAA,CAAA;AACzD,EAAA,MAAM,SAAA,GAAY,MAAM,QAAA,EAAS;AACjC,EAAA,MAAM,YAAY,SAAA,GAAY,CAAA,EAAG,QAAQ,CAAA,CAAA,EAAI,SAAS,CAAA,CAAA,GAAK,QAAA;AAC3D,EAAA,OAAO,SAAA;AACT;AAEA,SAAS,YAAA,CACP,QACA,OAAA,EACwB;AACxB,EAAA,OAAO,0BAAA,CAA2B,SAAA,EAAW,gBAAA,EAAkB,MAAA,EAAQ,OAAA,EAAS;AAAA,IAC9E,MAAA,EAAQ,OAAA,EAAS,MAAA,IAAU,MAAA,CAAO,MAAA,IAAU,cAAA;AAAA,IAC5C,UAAA,EAAY,SAAS,UAAA,IAAc;AAAA,GACpC,CAAA;AACH;AAEA,SAAS,oBAAA,CACP,KAAA,EACA,QAAA,EACA,MAAA,EAC0B;AAC1B,EAAA,MAAM,UAAU,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK,CAAA;AACrE,EAAA,MAAM,YAAA,GACJ,KAAA,YAAiB,kBAAA,GACb,KAAA,GACA,IAAI,kBAAA,CAAmB;AAAA,IACrB,IAAA,EAAM,aAAA;AAAA,IACN,OAAA;AAAA,IACA,MAAA,EAAQ,CAAA;AAAA,IACR,QAAA;AAAA,IACA,MAAA;AAAA,IACA,KAAA,EAAO,OAAA;AAAA,IACP,IAAA,EAAM;AAAA,GACP,CAAA;AAEP,EAAA,OAAO;AAAA,IACL,EAAA,EAAI,KAAA;AAAA,IACJ,MAAA,EAAQ,CAAA;AAAA,IACR,UAAA,EAAY,IAAA;AAAA,IACZ,IAAA,EAAM,IAAA;AAAA,IACN,OAAO,YAAA,CAAa,OAAA;AAAA,IACpB,YAAA,EAAc,gBAAA;AAAA,MACZ,IAAI,kBAAA,CAAmB;AAAA,QACrB,MAAM,YAAA,CAAa,IAAA;AAAA,QACnB,SAAS,YAAA,CAAa,OAAA;AAAA,QACtB,QAAQ,YAAA,CAAa,MAAA;AAAA,QACrB,QAAA;AAAA,QACA,MAAA;AAAA,QACA,WAAW,YAAA,CAAa,SAAA;AAAA,QACxB,MAAM,YAAA,CAAa,IAAA;AAAA,QACnB,OAAO,YAAA,CAAa;AAAA,OACrB;AAAA,KACH;AAAA,IACA,GAAA,EAAK;AAAA,GACP;AACF;AAEA,SAAS,sBAAsB,KAAA,EAAuB;AACpD,EAAA,OAAO,8BAA8B,KAAA,EAAO;AAAA,IAC1C,cAAA,EAAgB;AAAA,GACjB,CAAA;AACH;AAEA,SAAS,iBAAiB,IAAA,EAAe;AACvC,EAAA,IAAI,CAAC,MAAM,OAAO,GAAA;AAClB,EAAA,IAAI,CAAC,IAAA,CAAK,UAAA,CAAW,GAAG,CAAA,EAAG;AACzB,IAAA,MAAM,IAAI,kBAAA,CAAmB;AAAA,MAC3B,IAAA,EAAM,aAAA;AAAA,MACN,OAAA,EAAS,CAAA,wDAAA,EAA2D,IAAA,CAAK,SAAA,CAAU,IAAI,CAAC,CAAA,CAAA,CAAA;AAAA,MACxF,MAAA,EAAQ,CAAA;AAAA,MACR,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AACA,EAAA,OAAO,IAAA;AACT;AAEA,SAAS,sBAAA,CACP,aACA,OAAA,EACwB;AACxB,EAAA,MAAM,MAAA,GAAS;AAAA,IACb,GAAG,WAAA;AAAA,IACH,GAAI,WAAW;AAAC,GAClB;AAEA,EAAA,IAAI,CAAC,MAAA,CAAO,cAAc,KAAK,CAAC,MAAA,CAAO,cAAc,CAAA,EAAG;AACtD,IAAA,MAAA,CAAO,cAAc,CAAA,GAAI,gBAAA;AAAA,EAC3B;AAEA,EAAA,OAAO,MAAA;AACT;AAEA,eAAe,sBAAA,CACb,OAAA,EACA,cAAA,EACA,OAAA,EACwC;AACxC,EAAA,MAAM,IAAA,GAAO,gBAAA,CAAiB,OAAA,EAAS,IAAI,CAAA;AAC3C,EAAA,MAAM,GAAA,GAAM,qBAAA,CAAsB,OAAA,EAAS,IAAI,CAAA;AAE/C,EAAA,IAAI;AACF,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,GAAA,EAAK;AAAA,MAChC,MAAA,EAAQ,KAAA;AAAA,MACR,OAAA,EAAS,sBAAA,CAAuB,cAAA,EAAgB,OAAA,EAAS,OAAO,CAAA;AAAA,MAChE,QAAQ,OAAA,EAAS;AAAA,KAClB,CAAA;AACD,IAAA,MAAM,OAAA,GAAU,MAAM,QAAA,CAAS,IAAA,EAAK;AACpC,IAAA,MAAM,SAAA,GAAY,gBAAA,CAAiB,QAAA,CAAS,OAAO,CAAA;AACnD,IAAA,MAAM,UAAA,GAAa,iBAAA;AAAA,MACjB,OAAA,IAAW,EAAA;AAAA,MACX,QAAA,CAAS,OAAA,CAAQ,GAAA,CAAI,cAAc;AAAA,KACrC;AAEA,IAAA,IAAI,WAAW,WAAA,EAAa;AAC1B,MAAA,MAAM,gBAAA,GAAmB,IAAI,kBAAA,CAAmB;AAAA,QAC9C,IAAA,EAAM,cAAA;AAAA,QACN,OAAA,EAAS,uCAAA;AAAA,QACT,QAAQ,QAAA,CAAS,MAAA;AAAA,QACjB,MAAA,EAAQ,KAAA;AAAA,QACR,SAAA;AAAA,QACA,IAAA,EAAM,iDAAA;AAAA,QACN,KAAA,EAAO,OAAA,CAAQ,KAAA,CAAM,CAAA,EAAG,GAAG;AAAA,OAC5B,CAAA;AACD,MAAA,OAAO;AAAA,QACL,EAAA,EAAI,KAAA;AAAA,QACJ,SAAA,EAAW,IAAA;AAAA,QACX,QAAQ,QAAA,CAAS,MAAA;AAAA,QACjB,UAAA,EAAY,iBAAA,CAAkB,QAAA,EAAU,UAAA,CAAW,MAAM,CAAA;AAAA,QACzD,OAAA;AAAA,QACA,GAAA;AAAA,QACA,OAAO,gBAAA,CAAiB,OAAA;AAAA,QACxB,YAAA,EAAc,iBAAiB,gBAAgB,CAAA;AAAA,QAC/C,KAAK,UAAA,CAAW;AAAA,OAClB;AAAA,IACF;AAEA,IAAA,MAAM,SAAS,UAAA,CAAW,MAAA;AAC1B,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,MAAA,MAAM,SAAA,GAAY,IAAI,kBAAA,CAAmB;AAAA,QACvC,IAAA,EAAM,YAAA;AAAA,QACN,OAAA,EAAS,mBAAA;AAAA,UACP,MAAA;AAAA,UACA,CAAA,mBAAA,EAAsB,IAAI,CAAA,oBAAA,EAAuB,QAAA,CAAS,MAAM,CAAA;AAAA,SAClE;AAAA,QACA,QAAQ,QAAA,CAAS,MAAA;AAAA,QACjB,MAAA,EAAQ,KAAA;AAAA,QACR,SAAA;AAAA,QACA,IAAA,EAAM,iBAAiB,MAAM;AAAA,OAC9B,CAAA;AAED,MAAA,OAAO;AAAA,QACL,EAAA,EAAI,KAAA;AAAA,QACJ,SAAA,EAAW,IAAA;AAAA,QACX,QAAQ,QAAA,CAAS,MAAA;AAAA,QACjB,UAAA,EAAY,iBAAA,CAAkB,QAAA,EAAU,MAAM,CAAA;AAAA,QAC9C,OAAA;AAAA,QACA,GAAA;AAAA,QACA,OAAO,SAAA,CAAU,OAAA;AAAA,QACjB,YAAA,EAAc,iBAAiB,SAAS,CAAA;AAAA,QACxC,GAAA,EAAK;AAAA,OACP;AAAA,IACF;AAEA,IAAA,OAAO;AAAA,MACL,EAAA,EAAI,IAAA;AAAA,MACJ,SAAA,EAAW,IAAA;AAAA,MACX,QAAQ,QAAA,CAAS,MAAA;AAAA,MACjB,UAAA,EAAY,iBAAA,CAAkB,QAAA,EAAU,MAAM,CAAA;AAAA,MAC9C,OAAA;AAAA,MACA,GAAA;AAAA,MACA,KAAA,EAAO,KAAA,CAAA;AAAA,MACP,YAAA,EAAc,IAAA;AAAA,MACd,GAAA,EAAK;AAAA,KACP;AAAA,EACF,SAAS,SAAA,EAAW;AAClB,IAAA,MAAM,UAAU,SAAA,YAAqB,KAAA,GAAQ,SAAA,CAAU,OAAA,GAAU,OAAO,SAAS,CAAA;AACjF,IAAA,MAAM,YAAA,GAAe,IAAI,kBAAA,CAAmB;AAAA,MAC1C,IAAA,EAAM,eAAA;AAAA,MACN,OAAA,EAAS,CAAA,2CAAA,EAA8C,GAAG,CAAA,EAAA,EAAK,OAAO,CAAA,CAAA;AAAA,MACtE,MAAA,EAAQ,KAAA;AAAA,MACR,KAAA,EAAO,OAAA;AAAA,MACP,IAAA,EAAM;AAAA,KACP,CAAA;AACD,IAAA,OAAO;AAAA,MACL,EAAA,EAAI,KAAA;AAAA,MACJ,SAAA,EAAW,KAAA;AAAA,MACX,MAAA,EAAQ,CAAA;AAAA,MACR,UAAA,EAAY,IAAA;AAAA,MACZ,OAAA;AAAA,MACA,GAAA;AAAA,MACA,OAAO,YAAA,CAAa,OAAA;AAAA,MACpB,YAAA,EAAc,iBAAiB,YAAY,CAAA;AAAA,MAC3C,GAAA,EAAK;AAAA,KACP;AAAA,EACF;AACF;AAEA,eAAsB,sBAAA,CACpB,SACA,OAAA,EACwC;AACxC,EAAA,MAAM,iBAAA,GAAoB,8BAA8B,OAAO,CAAA;AAC/D,EAAA,OAAO,uBAAuB,iBAAA,EAAmB,EAAE,cAAA,EAAgB,gBAAA,IAAoB,OAAO,CAAA;AAChG;AAEA,eAAe,UAAA,CACb,MAAA,EACA,QAAA,EACA,MAAA,EACA,SACA,OAAA,EACmC;AACnC,EAAA,IAAI,OAAA;AACJ,EAAA,IAAI;AACF,IAAA,OAAA,GAAU,qBAAA,CAAsB,OAAA,EAAS,OAAA,IAAW,MAAA,CAAO,OAAO,CAAA;AAAA,EACpE,SAAS,KAAA,EAAO;AACd,IAAA,OAAO,oBAAA,CAAwB,KAAA,EAAO,QAAA,EAAU,MAAM,CAAA;AAAA,EACxD;AAEA,EAAA,MAAM,GAAA,GAAM,qBAAA,CAAsB,OAAA,EAAS,QAAQ,CAAA;AACnD,EAAA,MAAM,OAAA,GAAU,YAAA,CAAa,MAAA,EAAQ,OAAO,CAAA;AAE5C,EAAA,IAAI;AACF,IAAA,MAAM,WAAA,GAA2B;AAAA,MAC/B,MAAA;AAAA,MACA;AAAA,KACF;AACA,IAAA,IAAI,WAAW,KAAA,EAAO;AACpB,MAAA,WAAA,CAAY,IAAA,GAAO,IAAA,CAAK,SAAA,CAAU,OAAO,CAAA;AAAA,IAC3C;AAEA,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,GAAA,EAAK,WAAW,CAAA;AAE7C,IAAA,MAAM,OAAA,GAAU,MAAM,QAAA,CAAS,IAAA,EAAK;AACpC,IAAA,MAAM,SAAA,GAAY,gBAAA,CAAiB,QAAA,CAAS,OAAO,CAAA;AACnD,IAAA,MAAM,UAAA,GAAa,iBAAA;AAAA,MACjB,OAAA,IAAW,EAAA;AAAA,MACX,QAAA,CAAS,OAAA,CAAQ,GAAA,CAAI,cAAc;AAAA,KACrC;AAEA,IAAA,IAAI,WAAW,WAAA,EAAa;AAC1B,MAAA,MAAM,gBAAA,GAAmB,IAAI,kBAAA,CAAmB;AAAA,QAC9C,IAAA,EAAM,cAAA;AAAA,QACN,OAAA,EAAS,iCAAA;AAAA,QACT,QAAQ,QAAA,CAAS,MAAA;AAAA,QACjB,QAAA;AAAA,QACA,MAAA;AAAA,QACA,SAAA;AAAA,QACA,IAAA,EAAM,iDAAA;AAAA,QACN,KAAA,EAAO,OAAA,CAAQ,KAAA,CAAM,CAAA,EAAG,GAAG;AAAA,OAC5B,CAAA;AACD,MAAA,OAAO;AAAA,QACL,EAAA,EAAI,KAAA;AAAA,QACJ,QAAQ,QAAA,CAAS,MAAA;AAAA,QACjB,UAAA,EAAY,iBAAA,CAAkB,QAAA,EAAU,UAAA,CAAW,MAAM,CAAA;AAAA,QACzD,IAAA,EAAM,IAAA;AAAA,QACN,OAAO,gBAAA,CAAiB,OAAA;AAAA,QACxB,YAAA,EAAc,iBAAiB,gBAAgB,CAAA;AAAA,QAC/C,KAAK,UAAA,CAAW;AAAA,OAClB;AAAA,IACF;AAEA,IAAA,MAAM,SAAS,UAAA,CAAW,MAAA;AAC1B,IAAA,MAAM,aAAA,GAAgBA,SAAAA,CAAS,MAAM,CAAA,GAAI,MAAA,GAAS,IAAA;AAElD,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,MAAA,MAAM,SAAA,GAAY,IAAI,kBAAA,CAAmB;AAAA,QACvC,IAAA,EAAM,YAAA;AAAA,QACN,OAAA,EAAS,mBAAA;AAAA,UACP,MAAA;AAAA,UACA,kBAAkB,MAAM,CAAA,CAAA,EAAI,QAAQ,CAAA,oBAAA,EAAuB,SAAS,MAAM,CAAA;AAAA,SAC5E;AAAA,QACA,QAAQ,QAAA,CAAS,MAAA;AAAA,QACjB,QAAA;AAAA,QACA,MAAA;AAAA,QACA,SAAA;AAAA,QACA,IAAA,EAAM,iBAAiB,MAAM;AAAA,OAC9B,CAAA;AAED,MAAA,OAAO;AAAA,QACL,EAAA,EAAI,KAAA;AAAA,QACJ,QAAQ,QAAA,CAAS,MAAA;AAAA,QACjB,UAAA,EAAY,iBAAA,CAAkB,QAAA,EAAU,MAAM,CAAA;AAAA,QAC9C,IAAA,EAAM,IAAA;AAAA,QACN,OAAO,SAAA,CAAU,OAAA;AAAA,QACjB,YAAA,EAAc,iBAAiB,SAAS,CAAA;AAAA,QACxC,GAAA,EAAK;AAAA,OACP;AAAA,IACF;AAIA,IAAA,MAAM,WAAA,GACJ,aAAA,IAAiB,MAAA,IAAU,aAAA,GACtB,cAAc,IAAA,GACd,MAAA;AACP,IAAA,MAAM,YAAA,GACJ,aAAA,IAAiB,OAAA,IAAW,aAAA,GACxB,OAAO,aAAA,CAAc,KAAA,KAAU,QAAA,IAAY,aAAA,CAAc,KAAA,KAAU,IAAA,GAChE,aAAA,CAAc,QACf,KAAA,CAAA,GACF,KAAA,CAAA;AAEN,IAAA,OAAO;AAAA,MACL,EAAA,EAAI,IAAA;AAAA,MACJ,QAAQ,QAAA,CAAS,MAAA;AAAA,MACjB,UAAA,EAAY,iBAAA,CAAkB,QAAA,EAAU,MAAM,CAAA;AAAA,MAC9C,MAAM,WAAA,IAAe,IAAA;AAAA,MACrB,KAAA,EAAO,YAAA;AAAA,MACP,KAAA,EAAO,KAAA,CAAA;AAAA,MACP,YAAA,EAAc,IAAA;AAAA,MACd,GAAA,EAAK;AAAA,KACP;AAAA,EACF,SAAS,SAAA,EAAW;AAClB,IAAA,MAAM,UAAU,SAAA,YAAqB,KAAA,GAAQ,SAAA,CAAU,OAAA,GAAU,OAAO,SAAS,CAAA;AACjF,IAAA,MAAM,YAAA,GAAe,IAAI,kBAAA,CAAmB;AAAA,MAC1C,IAAA,EAAM,eAAA;AAAA,MACN,SAAS,CAAA,4BAAA,EAA+B,MAAM,CAAA,CAAA,EAAI,QAAQ,KAAK,OAAO,CAAA,CAAA;AAAA,MACtE,QAAA;AAAA,MACA,MAAA;AAAA,MACA,KAAA,EAAO,OAAA;AAAA,MACP,IAAA,EAAM;AAAA,KACP,CAAA;AACD,IAAA,OAAO;AAAA,MACL,EAAA,EAAI,KAAA;AAAA,MACJ,MAAA,EAAQ,CAAA;AAAA,MACR,UAAA,EAAY,IAAA;AAAA,MACZ,IAAA,EAAM,IAAA;AAAA,MACN,OAAO,YAAA,CAAa,OAAA;AAAA,MACpB,YAAA,EAAc,iBAAiB,YAAY,CAAA;AAAA,MAC3C,GAAA,EAAK;AAAA,KACP;AAAA,EACF;AACF;AAqCO,SAAS,yBAAA,CACd,MAAA,GAAmC,EAAC,EACf;AACrB,EAAA,MAAM,iBAAA,GAAoB,qBAAA,CAAsB,MAAA,CAAO,OAAO,CAAA;AAC9D,EAAA,MAAM,gBAAA,GAA6C;AAAA,IACjD,GAAG,MAAA;AAAA,IACH,OAAA,EAAS;AAAA,GACX;AAEA,EAAA,OAAO;AAAA,IACL,OAAA,EAAS,iBAAA;AAAA,IACT,aAAa,OAAA,EAAS;AACpB,MAAA,OAAO,YAAA,CAAa,kBAAkB,OAAO,CAAA;AAAA,IAC/C,CAAA;AAAA,IACA,MAAM,mBAAmB,OAAA,EAAS;AAChC,MAAA,OAAO,OAAA;AAAA,IACT,CAAA;AAAA,IACA,iBAAiB,OAAA,EAAS;AACxB,MAAA,OAAO,sBAAA;AAAA,QACL,iBAAA;AAAA,QACA,aAAa,gBAAgB,CAAA;AAAA,QAC7B;AAAA,OACF;AAAA,IACF,CAAA;AAAA,IACA,YAAA,CAAa,SAAS,OAAA,EAAS;AAC7B,MAAA,OAAO,UAAA,CAAW,gBAAA,EAAkB,gBAAA,EAAkB,MAAA,EAAQ,SAAS,OAAO,CAAA;AAAA,IAChF,CAAA;AAAA,IACA,aAAA,CAAc,SAAS,OAAA,EAAS;AAC9B,MAAA,OAAO,UAAA,CAAW,gBAAA,EAAkB,iBAAA,EAAmB,KAAA,EAAO,SAAS,OAAO,CAAA;AAAA,IAChF,CAAA;AAAA,IACA,aAAA,CAAc,SAAS,OAAA,EAAS;AAC9B,MAAA,OAAO,UAAA,CAAW,gBAAA,EAAkB,iBAAA,EAAmB,MAAA,EAAQ,SAAS,OAAO,CAAA;AAAA,IACjF,CAAA;AAAA,IACA,aAAA,CAAc,SAAS,OAAA,EAAS;AAC9B,MAAA,OAAO,UAAA,CAAW,gBAAA,EAAkB,iBAAA,EAAmB,QAAA,EAAU,SAAS,OAAO,CAAA;AAAA,IACnF,CAAA;AAAA,IACA,UAAA,CAAW,SAAS,OAAA,EAAS;AAC3B,MAAA,IAAI,SAAS,GAAA,EAAK;AAChB,QAAA,MAAM,QAAA,GAAW,oBAAoB,OAAO,CAAA;AAC5C,QAAA,OAAO,UAAA,CAAW,gBAAA,EAAkB,QAAA,EAAU,KAAA,EAAO,MAAM,OAAO,CAAA;AAAA,MACpE;AACA,MAAA,OAAO,UAAA,CAAW,gBAAA,EAAkB,cAAA,EAAgB,MAAA,EAAQ,SAAS,OAAO,CAAA;AAAA,IAC9E,CAAA;AAAA,IACA,YAAA,CAAa,SAAS,OAAA,EAAS;AAC7B,MAAA,OAAO,UAAA,CAAW,gBAAA,EAAkB,gBAAA,EAAkB,MAAA,EAAQ,SAAS,OAAO,CAAA;AAAA,IAChF;AAAA,GACF;AACF;AAOA,SAAS,uBAAA,CACP,MACA,QAAA,EACsC;AACtC,EAAA,IAAI,CAAC,IAAA,IAAQ,CAAC,QAAA,EAAU,OAAO,MAAA;AAC/B,EAAA,OAAO;AAAA,IACL,GAAG,IAAA;AAAA,IACH,GAAG,QAAA;AAAA,IACH,SACE,IAAA,EAAM,OAAA,IAAW,QAAA,EAAU,OAAA,GACvB,EAAE,GAAI,IAAA,EAAM,OAAA,IAAW,IAAK,GAAI,QAAA,EAAU,OAAA,IAAW,IAAI,GACzD;AAAA,GACR;AACF;AAOO,SAAS,6BAAA,CACd,WACA,cAAA,EACqB;AACrB,EAAA,MAAM,qBAAqB,OACzB,OAAA,KAEA,wBAAwB,MAAM,cAAA,IAAkB,OAAO,CAAA;AAEzD,EAAA,OAAO;AAAA,IACL,SAAS,SAAA,CAAU,OAAA;AAAA,IACnB,aAAa,OAAA,EAAS;AACpB,MAAA,OAAO,SAAA,CAAU,aAAa,OAAO,CAAA;AAAA,IACvC,CAAA;AAAA,IACA,kBAAA;AAAA,IACA,MAAM,iBAAiB,OAAA,EAAS;AAC9B,MAAA,MAAM,OAAA,GAAU,MAAM,kBAAA,EAAmB;AACzC,MAAA,MAAM,cAAA,GAAiB,SAAA,CAAU,YAAA,CAAa,OAAO,CAAA;AACrD,MAAA,OAAO,UAAU,gBAAA,CAAiB;AAAA,QAChC,GAAG,OAAA;AAAA,QACH,OAAA,EAAS;AAAA,UACP,GAAG,cAAA;AAAA,UACH,GAAI,OAAA,EAAS,OAAA,IAAW;AAAC;AAC3B,OACD,CAAA;AAAA,IACH,CAAA;AAAA,IACA,MAAM,YAAA,CAAa,OAAA,EAAS,OAAA,EAAS;AACnC,MAAA,OAAO,UAAU,YAAA,CAAa,OAAA,EAAS,MAAM,kBAAA,CAAmB,OAAO,CAAC,CAAA;AAAA,IAC1E,CAAA;AAAA,IACA,MAAM,aAAA,CAAc,OAAA,EAAS,OAAA,EAAS;AACpC,MAAA,OAAO,UAAU,aAAA,CAAc,OAAA,EAAS,MAAM,kBAAA,CAAmB,OAAO,CAAC,CAAA;AAAA,IAC3E,CAAA;AAAA,IACA,MAAM,aAAA,CAAc,OAAA,EAAS,OAAA,EAAS;AACpC,MAAA,OAAO,UAAU,aAAA,CAAc,OAAA,EAAS,MAAM,kBAAA,CAAmB,OAAO,CAAC,CAAA;AAAA,IAC3E,CAAA;AAAA,IACA,MAAM,aAAA,CAAc,OAAA,EAAS,OAAA,EAAS;AACpC,MAAA,OAAO,UAAU,aAAA,CAAc,OAAA,EAAS,MAAM,kBAAA,CAAmB,OAAO,CAAC,CAAA;AAAA,IAC3E,CAAA;AAAA,IACA,MAAM,UAAA,CAAW,OAAA,EAAS,OAAA,EAAS;AACjC,MAAA,OAAO,UAAU,UAAA,CAAW,OAAA,EAAS,MAAM,kBAAA,CAAmB,OAAO,CAAC,CAAA;AAAA,IACxE,CAAA;AAAA,IACA,MAAM,YAAA,CAAa,OAAA,EAAS,OAAA,EAAS;AACnC,MAAA,OAAO,UAAU,YAAA,CAAa,OAAA,EAAS,MAAM,kBAAA,CAAmB,OAAO,CAAC,CAAA;AAAA,IAC1E;AAAA,GACF;AACF;;;AChrBO,IAAM,mCAAmC,EAAA,GAAK;AAC9C,IAAM,gCAAA,GAAmC;AACzC,IAAM,kCAAA,GAAqC;AAC3C,IAAM,wCAAA,GAA2C;AAEjD,IAAM,wBAAA,GAA2B;AAAA,EACtC,iBAAA,EAAmB,gCAAA;AAAA,EACnB,iBAAA,EAAmB,gCAAA;AAAA,EACnB,oBAAA,EAAsB,kCAAA;AAAA,EACtB,yBAAA,EAA2B;AAC7B;AAEA,SAAS,+BAA+B,MAAA,EAAiB;AACvD,EAAA,MAAM,UAAA,GAAa,QAAQ,IAAA,EAAK;AAChC,EAAA,OAAO,UAAA,IAAc,UAAA,CAAW,MAAA,GAAS,CAAA,GACrC,UAAA,GACA,4CAAA;AACN;AAEO,SAAS,iCAAA,CACd,WACA,MAAA,EAC+B;AAC/B,EAAA,MAAM,KAAA,GAAQ,+BAA+B,MAAM,CAAA;AACnD,EAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,SAAS,CAAA,EAAG;AAC7B,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,EAAG,KAAK,CAAA,6BAAA,CAA+B,CAAA;AAAA,EACzD;AAEA,EAAA,IAAI,SAAA,CAAU,SAAS,kCAAA,EAAoC;AACzD,IAAA,MAAM,IAAI,KAAA;AAAA,MACR,CAAA,EAAG,KAAK,CAAA,0BAAA,EAA6B,kCAAkC,CAAA,SAAA;AAAA,KACzE;AAAA,EACF;AAEA,EAAA,SAAA,CAAU,OAAA,CAAQ,CAAC,QAAA,EAAU,KAAA,KAAU;AACrC,IAAA,IAAI,OAAO,aAAa,QAAA,EAAU;AAChC,MAAA,MAAM,IAAI,KAAA;AAAA,QACR,GAAG,KAAK,CAAA,qCAAA,EAAwC,OAAO,QAAQ,aAAa,KAAK,CAAA,CAAA;AAAA,OACnF;AAAA,IACF;AAEA,IAAA,IAAI,QAAA,CAAS,SAAS,wCAAA,EAA0C;AAC9D,MAAA,MAAM,IAAI,KAAA;AAAA,QACR,CAAA,EAAG,KAAK,CAAA,oCAAA,EAAuC,wCAAwC,yBAAyB,QAAA,CAAS,MAAM,wBAAwB,KAAK,CAAA,CAAA;AAAA,OAC9J;AAAA,IACF;AAAA,EACF,CAAC,CAAA;AACH;;;ACZA,IAAI,6BAAA;AAEJ,SAASA,UAAS,KAAA,EAAgD;AAChE,EAAA,OAAO,OAAA,CAAQ,KAAK,CAAA,IAAK,OAAO,UAAU,QAAA,IAAY,CAAC,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA;AAC5E;AAEA,SAAS,WAAW,KAAA,EAA0D;AAC5E,EAAA,OAAO,OAAO,KAAA,KAAU,UAAA;AAC1B;AAEA,SAAS,oBAAoB,KAAA,EAAoC;AAC/D,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,EAAU,OAAO,MAAA;AACtC,EAAA,OAAO,KAAA;AACT;AAEA,SAAS,YAAA,GAAe;AACtB,EAAA,OAAA,iBAAO,IAAI,IAAA,EAAK,EAAE,WAAA,EAAY;AAChC;AAEA,SAAS,mBAAA,CACP,OAAA,EACA,KAAA,EACA,KAAA,GAAsE,EAAC,EACvE;AACA,EAAA,IAAI,CAAC,OAAA,EAAS;AACd,EAAA,IAAI;AACF,IAAA,OAAA,CAAQ;AAAA,MACN,KAAA;AAAA,MACA,WAAW,YAAA,EAAa;AAAA,MACxB,GAAG;AAAA,KACJ,CAAA;AAAA,EACH,CAAA,CAAA,MAAQ;AAAA,EAER;AACF;AAEA,SAAS,mBAAA,CACP,OACA,QAAA,EACiC;AACjC,EAAA,OAAO;AAAA,IACL,GAAG,KAAA;AAAA,IACH,MAAA,EAAQ,KAAA,CAAM,MAAA,IAAU,QAAA,EAAU,MAAA;AAAA,IAClC,gBAAA,EAAkB,KAAA,CAAM,gBAAA,IAAoB,QAAA,EAAU;AAAA,GACxD;AACF;AAEA,SAAS,oBACP,OAAA,EACgD;AAChD,EAAA,IAAI,CAAC,SAAS,OAAO,MAAA;AACrB,EAAA,OAAO;AAAA,IACL,UAAU,OAAA,CAAQ,QAAA;AAAA,IAClB,SAAS,OAAA,CAAQ,OAAA;AAAA,IACjB,KAAA,EAAO,OAAA,IAAW,OAAA,GAAU,OAAA,CAAQ,KAAA,GAAQ;AAAA,GAC9C;AACF;AAEA,eAAe,6BAAA,GAAiE;AAC9E,EAAA,IAAI,CAAC,6BAAA,EAA+B;AAClC,IAAA,6BAAA,GAAA,CAAiC,YAAY;AAC3C,MAAA,IAAI;AACF,QAAA,MAAM,MAAA,GAAS,MAAM,OAAO,qBAAqB,CAAA;AACjD,QAAA,IAAI,CAAC,UAAA,CAAW,MAAA,CAAO,MAAM,CAAA,EAAG;AAC9B,UAAA,MAAM,IAAI,MAAM,4BAA4B,CAAA;AAAA,QAC9C;AACA,QAAA,OAAO;AAAA,UACL,QAAQ,MAAA,CAAO,MAAA;AAAA,UACf,aAAa,UAAA,CAAW,MAAA,CAAO,WAAW,CAAA,GACrC,OAAO,WAAA,GACR,KAAA,CAAA;AAAA,UACJ,QAAQ,UAAA,CAAW,MAAA,CAAO,MAAM,CAAA,GAC3B,OAAO,MAAA,GACR,KAAA;AAAA,SACN;AAAA,MACF,SAAS,KAAA,EAAO;AACd,QAAA,MAAM,UAAU,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK,CAAA;AACrE,QAAA,MAAM,IAAI,KAAA;AAAA,UACR,6IAA6I,OAAO,CAAA;AAAA,SACtJ;AAAA,MACF;AAAA,IACF,CAAA,GAAG;AAAA,EACL;AAEA,EAAA,IAAI,CAAC,6BAAA,EAA+B;AAClC,IAAA,MAAM,IAAI,MAAM,kDAAkD,CAAA;AAAA,EACpE;AAEA,EAAA,OAAO,6BAAA;AACT;AAEA,eAAe,yBAAyB,KAAA,EAA0D;AAChG,EAAA,IAAI,KAAA,CAAM,WAAW,IAAA,EAAM;AACzB,IAAA,OAAO,KAAA,CAAM,OAAA;AAAA,EACf;AACA,EAAA,IAAI,CAAC,MAAM,SAAA,EAAW;AACpB,IAAA,MAAM,IAAI,MAAM,8DAA8D,CAAA;AAAA,EAChF;AAEA,EAAA,IAAI;AACF,IAAA,MAAM,WAAA,GAAc,MAAM,OAAO,OAAO,CAAA;AACxC,IAAA,IAAI,OAAO,WAAA,CAAY,aAAA,KAAkB,UAAA,EAAY;AACnD,MAAA,MAAM,IAAI,MAAM,gDAAgD,CAAA;AAAA,IAClE;AACA,IAAA,OAAO,WAAA,CAAY,aAAA;AAAA,MACjB,KAAA,CAAM,SAAA;AAAA,MACN,KAAA,CAAM,SAAS;AAAC,KAClB;AAAA,EACF,SAAS,KAAA,EAAO;AACd,IAAA,MAAM,UAAU,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK,CAAA;AACrE,IAAA,MAAM,IAAI,KAAA;AAAA,MACR,gHAAgH,OAAO,CAAA;AAAA,KACzH;AAAA,EACF;AACF;AAEO,SAAS,yBAAA,CAGd,SAAA,EACA,KAAA,EACA,SAAA,GAAsF,EAAC,EACtD;AACjC,EAAA,OAAO;AAAA,IACL,GAAG,SAAA;AAAA,IACH,SAAA;AAAA,IACA;AAAA,GACF;AACF;AAEO,SAAS,wBAGd,UAAA,EACwC;AACxC,EAAA,MAAM,QAAyD,CAAC,KAAA,EAAO,cACrE,yBAAA,CAA0B,UAAA,CAAW,WAAW,KAAA,EAAO;AAAA,IACrD,GAAG,UAAA,CAAW,QAAA;AAAA,IACd,GAAG;AAAA,GACJ,CAAA;AAEH,EAAA,OAAO;AAAA,IACL,WAAW,UAAA,CAAW,SAAA;AAAA,IACtB,KAAA;AAAA,IACA,gBAAA,EAAkB,CAAC,KAAA,KAAoE;AACrF,MAAA,MAAM,WAAA,GAAc,KAAA,CAAM,WAAA,IAAe,UAAA,CAAW,WAAA;AACpD,MAAA,MAAM,eAAA,GAAkB,KAAA,CAAM,eAAA,IAAmB,UAAA,CAAW,eAAA;AAC5D,MAAA,IAAI,CAAC,WAAA,EAAa;AAChB,QAAA,MAAM,IAAI,MAAM,+DAA+D,CAAA;AAAA,MACjF;AACA,MAAA,IAAI,CAAC,eAAA,EAAiB;AACpB,QAAA,MAAM,IAAI,MAAM,mEAAmE,CAAA;AAAA,MACrF;AAEA,MAAA,MAAM,EAAE,KAAA,EAAO,KAAA,EAAO,cAAA,EAAgB,GAAG,MAAK,GAAI,KAAA;AAClD,MAAA,OAAO;AAAA,QACL,GAAG,IAAA;AAAA,QACH,WAAA;AAAA,QACA,eAAA;AAAA,QACA,KAAA,EAAO,KAAA,CAAM,KAAA,EAAO,cAAc;AAAA,OACpC;AAAA,IACF,CAAA;AAAA,IACA,gBAAA,EAAkB,CAAC,KAAA,KAAoE;AACrF,MAAA,MAAM,EAAE,KAAA,EAAO,KAAA,EAAO,cAAA,EAAgB,GAAG,MAAK,GAAI,KAAA;AAClD,MAAA,OAAO;AAAA,QACL,GAAG,IAAA;AAAA,QACH,KAAA,EAAO,KAAA,CAAM,KAAA,EAAO,cAAc;AAAA,OACpC;AAAA,IACF;AAAA,GACF;AACF;AAEA,eAAsB,sBAAA,CACpB,OACA,OAAA,EACuC;AACvC,EAAA,IAAI,CAACA,SAAAA,CAAS,KAAK,CAAA,EAAG;AACpB,IAAA,MAAM,IAAI,MAAM,uCAAuC,CAAA;AAAA,EACzD;AAEA,EAAA,MAAM,cAAA,GAAiB,oBAAoB,OAAO,CAAA;AAClD,EAAA,MAAM,KAAA,GAAQ,KAAK,GAAA,EAAI;AACvB,EAAA,mBAAA,CAAoB,cAAA,EAAgB,SAAS,cAAA,EAAgB;AAAA,IAC3D,OAAO,cAAA,EAAgB,KAAA;AAAA,IACvB,OAAA,EAAS;AAAA,GACV,CAAA;AAED,EAAA,IAAI;AACF,IAAA,MAAM,eAAA,GAAkB,mBAAA,CAAoB,KAAA,EAAO,cAAA,EAAgB,QAAQ,CAAA;AAC3E,IAAA,MAAM,OAAA,GAAU,MAAM,wBAAA,CAAyB,eAAe,CAAA;AAC9D,IAAA,MAAM,YAAA,GAAe,MAAM,6BAAA,EAA8B;AACzD,IAAA,MAAM,SAAA,GAAY,MAAM,YAAA,CAAa,MAAA,CAAO,OAAO,CAAA;AACnD,IAAA,MAAM,eAAe,OAAO,SAAA,KAAc,WAAW,SAAA,GAAY,MAAA,CAAO,aAAa,EAAE,CAAA;AACvF,IAAA,IAAI,CAAC,YAAA,CAAa,IAAA,EAAK,EAAG;AACxB,MAAA,MAAM,IAAI,MAAM,oDAAoD,CAAA;AAAA,IACtE;AAEA,IAAA,IAAI,IAAA,GAAO,YAAA;AACX,IAAA,IAAI,eAAA,CAAgB,MAAA,IAAU,YAAA,CAAa,MAAA,EAAQ;AACjD,MAAA,MAAM,WAAA,GAAc,MAAM,YAAA,CAAa,MAAA,CAAO,YAAY,CAAA;AAC1D,MAAA,IAAI,OAAO,WAAA,KAAgB,QAAA,IAAY,YAAY,IAAA,EAAK,CAAE,SAAS,CAAA,EAAG;AACpE,QAAA,IAAA,GAAO,WAAA;AAAA,MACT;AAAA,IACF;AAEA,IAAA,MAAM,YAAA,GAAe,mBAAA,CAAoB,eAAA,CAAgB,IAAI,CAAA;AAC7D,IAAA,IAAI,iBAAiB,KAAA,CAAA,EAAW;AAC9B,MAAA,mBAAA,CAAoB,cAAA,EAAgB,SAAS,gBAAA,EAAkB;AAAA,QAC7D,OAAO,cAAA,EAAgB,KAAA;AAAA,QACvB,UAAA,EAAY,IAAA,CAAK,GAAA,EAAI,GAAI,KAAA;AAAA,QACzB,OAAA,EAAS;AAAA,OACV,CAAA;AACD,MAAA,OAAO;AAAA,QACL,IAAA;AAAA,QACA,IAAA,EAAM;AAAA,OACR;AAAA,IACF;AAEA,IAAA,IAAI,eAAA,CAAgB,gBAAA,KAAqB,KAAA,IAAS,CAAC,aAAa,WAAA,EAAa;AAC3E,MAAA,mBAAA,CAAoB,cAAA,EAAgB,SAAS,gBAAA,EAAkB;AAAA,QAC7D,OAAO,cAAA,EAAgB,KAAA;AAAA,QACvB,UAAA,EAAY,IAAA,CAAK,GAAA,EAAI,GAAI,KAAA;AAAA,QACzB,OAAA,EAAS;AAAA,OACV,CAAA;AACD,MAAA,OAAO,EAAE,IAAA,EAAK;AAAA,IAChB;AAEA,IAAA,MAAM,cAAA,GAAiB,MAAM,YAAA,CAAa,WAAA,CAAY,IAAI,CAAA;AAC1D,IAAA,MAAM,SAAA,GAAY,oBAAoB,cAAc,CAAA;AACpD,IAAA,mBAAA,CAAoB,cAAA,EAAgB,SAAS,gBAAA,EAAkB;AAAA,MAC7D,OAAO,cAAA,EAAgB,KAAA;AAAA,MACvB,UAAA,EAAY,IAAA,CAAK,GAAA,EAAI,GAAI,KAAA;AAAA,MACzB,OAAA,EAAS,YAAY,8CAAA,GAAiD;AAAA,KACvE,CAAA;AACD,IAAA,IAAI,cAAc,KAAA,CAAA,EAAW;AAC3B,MAAA,OAAO,EAAE,IAAA,EAAK;AAAA,IAChB;AAEA,IAAA,OAAO;AAAA,MACL,IAAA;AAAA,MACA,IAAA,EAAM;AAAA,KACR;AAAA,EACF,SAAS,KAAA,EAAO;AACd,IAAA,MAAM,UAAU,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK,CAAA;AACrE,IAAA,mBAAA,CAAoB,cAAA,EAAgB,SAAS,cAAA,EAAgB;AAAA,MAC3D,OAAO,cAAA,EAAgB,KAAA;AAAA,MACvB,UAAA,EAAY,IAAA,CAAK,GAAA,EAAI,GAAI,KAAA;AAAA,MACzB,KAAA,EAAO,OAAA;AAAA,MACP,OAAA,EAAS;AAAA,KACV,CAAA;AACD,IAAA,MAAM,KAAA;AAAA,EACR;AACF;AAEA,eAAsB,8BAAA,CAGpB,KAAA,EACA,MAAA,EACA,OAAA,EACgC;AAChC,EAAA,MAAM,EAAE,KAAA,EAAO,GAAG,mBAAA,EAAoB,GAAI,KAAA;AAC1C,EAAA,IAAI,CAAC,KAAA,EAAO;AACV,IAAA,OAAO,mBAAA;AAAA,EACT;AAEA,EAAA,MAAM,QAAA,GAAW,MAAM,sBAAA,CAAuB,KAAA,EAAO,OAAO,CAAA;AAC5D,EAAA,MAAM,OAAA,GAAiC;AAAA,IACrC,GAAI;AAAA,GACN;AAEA,EAAA,OAAA,CAAQ,MAAA,CAAO,SAAS,CAAA,GAAI,QAAA,CAAS,IAAA;AAErC,EAAA,MAAM,gBAAA,GAAmB,OAAA,CAAQ,MAAA,CAAO,SAAS,CAAA;AACjD,EAAA,IACE,QAAA,CAAS,SAAS,MAAA,KACjB,gBAAA,KAAqB,UAAa,gBAAA,KAAqB,IAAA,IAAQ,qBAAqB,EAAA,CAAA,EACrF;AACA,IAAA,OAAA,CAAQ,MAAA,CAAO,SAAS,CAAA,GAAI,QAAA,CAAS,IAAA;AAAA,EACvC;AAEA,EAAA,IACE,MAAA,CAAO,cAAA,KACN,OAAA,CAAQ,MAAA,CAAO,cAAc,CAAA,KAAM,MAAA,IAAa,OAAA,CAAQ,MAAA,CAAO,cAAc,CAAA,KAAM,IAAA,CAAA,IACpFA,SAAAA,CAAS,KAAA,CAAM,KAAK,CAAA,EACpB;AACA,IAAA,MAAM,gBAAA,GAAmB,MAAA,CAAO,IAAA,CAAK,KAAA,CAAM,KAAK,CAAA;AAChD,IAAA,IAAI,gBAAA,CAAiB,SAAS,CAAA,EAAG;AAC/B,MAAA,OAAA,CAAQ,MAAA,CAAO,cAAc,CAAA,GAAI,gBAAA;AAAA,IACnC;AAAA,EACF;AAEA,EAAA,OAAO,OAAA;AACT;;;AC9PA,IAAM,qBAAA,GAAwB,gCAAA;AAC9B,IAAMO,SAAAA,GAAW,yBAAA;AACjB,IAAME,iBAAAA,GAAmB,oBAAoBF,SAAQ,CAAA;AAuBrD,SAAS,iBAAiB,OAAA,EAA0B;AAClD,EAAA,OAAA,CAAQ,OAAA,IAAW,qBAAA,EAAuB,OAAA,CAAQ,KAAA,EAAO,EAAE,CAAA;AAC7D;AAEA,SAASP,UAAS,KAAA,EAAkD;AAClE,EAAA,OAAO,OAAA,CAAQ,KAAK,CAAA,IAAK,OAAO,UAAU,QAAA,IAAY,CAAC,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA;AAC5E;AAEA,SAASU,kBAAAA,CAAkB,SAAiB,WAAA,EAA4B;AACtE,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,OAAO,EAAE,MAAA,EAAQ,IAAA,EAAiB,WAAA,EAAa,KAAA,EAAM;AAAA,EACvD;AAEA,EAAA,MAAM,0BACJ,WAAA,EAAa,WAAA,EAAY,CAAE,QAAA,CAAS,kBAAkB,CAAA,IAAK,KAAA;AAC7D,EAAA,MAAM,SAAA,GACJ,2BAA2B,OAAA,CAAQ,UAAA,CAAW,GAAG,CAAA,IAAK,OAAA,CAAQ,WAAW,GAAG,CAAA;AAE9E,EAAA,IAAI,CAAC,SAAA,EAAW;AACd,IAAA,OAAO,EAAE,MAAA,EAAQ,OAAA,EAAoB,WAAA,EAAa,KAAA,EAAM;AAAA,EAC1D;AAEA,EAAA,IAAI;AACF,IAAA,OAAO,EAAE,MAAA,EAAQ,IAAA,CAAK,MAAM,OAAO,CAAA,EAAc,aAAa,KAAA,EAAM;AAAA,EACtE,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,EAAE,MAAA,EAAQ,OAAA,EAAoB,WAAA,EAAa,IAAA,EAAK;AAAA,EACzD;AACF;AAEA,SAASC,kBAAiB,OAAA,EAAsC;AAC9D,EAAA,OACE,OAAA,CAAQ,GAAA,CAAI,cAAc,CAAA,IAC1B,OAAA,CAAQ,GAAA,CAAI,kBAAkB,CAAA,IAC9B,OAAA,CAAQ,GAAA,CAAI,qBAAqB,CAAA,IACjC,MAAA;AAEJ;AAEA,SAASC,oBAAAA,CAAoB,SAAkB,QAAA,EAAkB;AAC/D,EAAA,IAAIZ,SAAAA,CAAS,OAAO,CAAA,EAAG;AACrB,IAAA,MAAM,oBAAoB,CAAC,OAAA,CAAQ,OAAO,OAAA,CAAQ,OAAA,EAAS,QAAQ,OAAO,CAAA;AAC1E,IAAA,KAAA,MAAW,aAAa,iBAAA,EAAmB;AACzC,MAAA,IAAI,OAAO,SAAA,KAAc,QAAA,IAAY,UAAU,IAAA,EAAK,CAAE,SAAS,CAAA,EAAG;AAChE,QAAA,OAAO,UAAU,IAAA,EAAK;AAAA,MACxB;AAAA,IACF;AAAA,EACF;AAEA,EAAA,IAAI,OAAO,OAAA,KAAY,QAAA,IAAY,QAAQ,IAAA,EAAK,CAAE,SAAS,CAAA,EAAG;AAC5D,IAAA,OAAO,QAAQ,IAAA,EAAK;AAAA,EACtB;AAEA,EAAA,OAAO,QAAA;AACT;AAEA,SAAS,eAAe,KAAA,EAAmD;AACzE,EAAA,OAAO;AAAA,IACL,MAAM,KAAA,CAAM,IAAA;AAAA,IACZ,SAAS,KAAA,CAAM,OAAA;AAAA,IACf,QAAQ,KAAA,CAAM,MAAA;AAAA,IACd,UAAU,KAAA,CAAM,QAAA;AAAA,IAChB,QAAQ,KAAA,CAAM,MAAA;AAAA,IACd,WAAW,KAAA,CAAM,SAAA;AAAA,IACjB,MAAM,KAAA,CAAM,IAAA;AAAA,IACZ,OAAO,KAAA,CAAM;AAAA,GACf;AACF;AAEA,SAAS,gBAAA,CACP,MACA,QAAA,EACmC;AACnC,EAAA,IAAI,CAAC,IAAA,IAAQ,CAAC,QAAA,EAAU,OAAO,MAAA;AAC/B,EAAA,OAAO;AAAA,IACL,GAAG,IAAA;AAAA,IACH,GAAG,QAAA;AAAA,IACH,OAAA,EAAS;AAAA,MACP,GAAI,IAAA,EAAM,OAAA,IAAW,EAAC;AAAA,MACtB,GAAI,QAAA,EAAU,OAAA,IAAW;AAAC;AAC5B,GACF;AACF;AAEA,SAAS,gBAAA,CACP,MAAA,EACA,MAAA,EACA,SAAA,EACA,SAAA,EACM;AACN,EAAA,IAAI,EAAE,aAAa,MAAA,CAAA,EAAS;AAC1B,IAAA;AAAA,EACF;AACA,EAAA,MAAM,KAAA,GAAQ,OAAO,SAAS,CAAA;AAC9B,EAAA,IAAI,UAAU,MAAA,EAAW;AACvB,IAAA,MAAA,CAAO,SAAS,CAAA,GAAI,KAAA;AAAA,EACtB;AACF;AAEA,SAAS,uCAAuC,KAAA,EAAyB;AACvE,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,KAAA,IAAS,IAAA,EAAM;AAC9C,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACxB,IAAA,OAAO,KAAA,CAAM,GAAA,CAAI,CAAA,IAAA,KAAQ,sCAAA,CAAuC,IAAI,CAAC,CAAA;AAAA,EACvE;AAEA,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,MAAM,UAAA,GAAa,EAAE,GAAI,KAAA,EAAkC;AAC3D,EAAA,gBAAA,CAAiB,UAAA,EAAY,UAAA,EAAY,UAAA,EAAY,SAAS,CAAA;AAC9D,EAAA,OAAO,UAAA,CAAW,OAAA;AAClB,EAAA,OAAO,UAAA;AACT;AAEA,SAAS,mCAAmC,OAAA,EAA2D;AACrG,EAAA,MAAM,UAAA,GAAa,EAAE,GAAG,OAAA,EAAQ;AAEhC,EAAA,gBAAA,CAAiB,UAAA,EAAY,OAAA,EAAS,cAAA,EAAgB,aAAa,CAAA;AACnE,EAAA,gBAAA,CAAiB,UAAA,EAAY,OAAA,EAAS,YAAA,EAAc,WAAW,CAAA;AAC/D,EAAA,gBAAA,CAAiB,UAAA,EAAY,OAAA,EAAS,kBAAA,EAAoB,iBAAiB,CAAA;AAC3E,EAAA,gBAAA,CAAiB,UAAA,EAAY,OAAA,EAAS,eAAA,EAAiB,cAAc,CAAA;AACrE,EAAA,gBAAA,CAAiB,UAAA,EAAY,OAAA,EAAS,eAAA,EAAiB,cAAc,CAAA;AACrE,EAAA,gBAAA,CAAiB,UAAA,EAAY,OAAA,EAAS,mBAAA,EAAqB,kBAAkB,CAAA;AAC7E,EAAA,gBAAA,CAAiB,UAAA,EAAY,OAAA,EAAS,yBAAA,EAA2B,uBAAuB,CAAA;AACxF,EAAA,gBAAA,CAAiB,UAAA,EAAY,OAAA,EAAS,WAAA,EAAa,UAAU,CAAA;AAE7D,EAAA,IAAI,MAAA,CAAO,MAAA,CAAO,OAAA,EAAS,aAAa,CAAA,EAAG;AACzC,IAAA,UAAA,CAAW,WAAA,GAAc,sCAAA,CAAuC,OAAA,CAAQ,WAAW,CAAA;AAAA,EACrF;AAEA,EAAA,OAAO,UAAA,CAAW,WAAA;AAClB,EAAA,OAAO,UAAA,CAAW,SAAA;AAClB,EAAA,OAAO,UAAA,CAAW,eAAA;AAClB,EAAA,OAAO,UAAA,CAAW,YAAA;AAClB,EAAA,OAAO,UAAA,CAAW,YAAA;AAClB,EAAA,OAAO,UAAA,CAAW,gBAAA;AAClB,EAAA,OAAO,UAAA,CAAW,qBAAA;AAClB,EAAA,OAAO,UAAA,CAAW,QAAA;AAElB,EAAA,OAAO,UAAA;AACT;AAEA,SAAS,uCAEN,KAAA,EAAuB;AACxB,EAAA,MAAM,OAAA,GAAU,KAAA;AAChB,EAAA,MAAM,aAAA,GAAgB,EAAE,GAAG,OAAA,EAAQ;AAEnC,EAAA,gBAAA,CAAiB,aAAA,EAAe,OAAA,EAAS,aAAA,EAAe,cAAc,CAAA;AACtE,EAAA,gBAAA,CAAiB,aAAA,EAAe,OAAA,EAAS,WAAA,EAAa,YAAY,CAAA;AAClE,EAAA,gBAAA,CAAiB,aAAA,EAAe,OAAA,EAAS,iBAAA,EAAmB,kBAAkB,CAAA;AAC9E,EAAA,gBAAA,CAAiB,aAAA,EAAe,OAAA,EAAS,cAAA,EAAgB,eAAe,CAAA;AACxE,EAAA,gBAAA,CAAiB,aAAA,EAAe,OAAA,EAAS,cAAA,EAAgB,eAAe,CAAA;AACxE,EAAA,gBAAA,CAAiB,aAAA,EAAe,OAAA,EAAS,kBAAA,EAAoB,mBAAmB,CAAA;AAChF,EAAA,gBAAA,CAAiB,aAAA,EAAe,OAAA,EAAS,uBAAA,EAAyB,yBAAyB,CAAA;AAC3F,EAAA,gBAAA,CAAiB,aAAA,EAAe,OAAA,EAAS,UAAA,EAAY,WAAW,CAAA;AAEhE,EAAA,OAAO,aAAA;AACT;AAEA,SAAS,uCAAuC,OAAA,EAA2D;AACzG,EAAA,MAAM,UAAA,GAAa,EAAE,GAAG,OAAA,EAAQ;AAEhC,EAAA,gBAAA,CAAiB,UAAA,EAAY,OAAA,EAAS,aAAA,EAAe,YAAY,CAAA;AACjE,EAAA,gBAAA,CAAiB,UAAA,EAAY,OAAA,EAAS,iBAAA,EAAmB,gBAAgB,CAAA;AACzE,EAAA,gBAAA,CAAiB,UAAA,EAAY,OAAA,EAAS,kBAAA,EAAoB,iBAAiB,CAAA;AAC3E,EAAA,gBAAA,CAAiB,UAAA,EAAY,OAAA,EAAS,SAAA,EAAW,QAAQ,CAAA;AACzD,EAAA,gBAAA,CAAiB,UAAA,EAAY,OAAA,EAAS,iBAAA,EAAmB,gBAAgB,CAAA;AACzE,EAAA,gBAAA,CAAiB,UAAA,EAAY,OAAA,EAAS,eAAA,EAAiB,cAAc,CAAA;AACrE,EAAA,gBAAA,CAAiB,UAAA,EAAY,OAAA,EAAS,yBAAA,EAA2B,uBAAuB,CAAA;AAExF,EAAA,IAAI,MAAA,CAAO,MAAA,CAAO,OAAA,EAAS,aAAa,CAAA,EAAG;AACzC,IAAA,UAAA,CAAW,WAAA,GAAc,sCAAA,CAAuC,OAAA,CAAQ,WAAW,CAAA;AAAA,EACrF;AAEA,EAAA,OAAO,UAAA,CAAW,UAAA;AAClB,EAAA,OAAO,UAAA,CAAW,cAAA;AAClB,EAAA,OAAO,UAAA,CAAW,eAAA;AAClB,EAAA,OAAO,UAAA,CAAW,MAAA;AAClB,EAAA,OAAO,UAAA,CAAW,cAAA;AAClB,EAAA,OAAO,UAAA,CAAW,YAAA;AAClB,EAAA,OAAO,UAAA,CAAW,qBAAA;AAElB,EAAA,OAAO,UAAA;AACT;AAEA,SAAS,sBACP,aAAA,EACuB;AACvB,EAAA,IAAI,aAAA,CAAc,MAAA,KAAW,GAAA,IAAO,aAAA,CAAc,QAAQ,IAAA,EAAM;AAC9D,IAAA,OAAO;AAAA,MACL,EAAA,EAAI,KAAA;AAAA,MACJ,MAAA,EAAQ,cAAA;AAAA,MACR,MAAA,EAAQ,GAAA;AAAA,MACR,KAAA,EAAO,cAAc,KAAA,IAAS,cAAA;AAAA,MAC9B;AAAA,KACF;AAAA,EACF;AAEA,EAAA,OAAO;AAAA,IACL,EAAA,EAAI,KAAA;AAAA,IACJ,MAAA,EAAQ,gBAAA;AAAA,IACR,QAAQ,aAAA,CAAc,MAAA;AAAA,IACtB,KAAA,EAAO,cAAc,KAAA,IAAS,mCAAA;AAAA,IAC9B;AAAA,GACF;AACF;AAEA,SAAS,wBAAA,CACP,kBACA,aAAA,EACuB;AACvB,EAAA,IAAI,gBAAA,CAAiB,WAAW,GAAA,EAAK;AACnC,IAAA,OAAO;AAAA,MACL,EAAA,EAAI,KAAA;AAAA,MACJ,MAAA,EAAQ,cAAA;AAAA,MACR,MAAA,EAAQ,GAAA;AAAA,MACR,KAAA,EAAO,iBAAiB,KAAA,IAAS,cAAA;AAAA,MACjC,aAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF;AAEA,EAAA,IAAI,gBAAA,CAAiB,WAAW,GAAA,EAAK;AACnC,IAAA,OAAO;AAAA,MACL,EAAA,EAAI,KAAA;AAAA,MACJ,MAAA,EAAQ,WAAA;AAAA,MACR,MAAA,EAAQ,GAAA;AAAA,MACR,KAAA,EAAO,iBAAiB,KAAA,IAAS,WAAA;AAAA,MACjC,aAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF;AAEA,EAAA,OAAO;AAAA,IACL,EAAA,EAAI,KAAA;AAAA,IACJ,MAAA,EAAQ,gBAAA;AAAA,IACR,QAAQ,gBAAA,CAAiB,MAAA;AAAA,IACzB,KAAA,EAAO,iBAAiB,KAAA,IAAS,oCAAA;AAAA,IACjC,aAAA;AAAA,IACA;AAAA,GACF;AACF;AAEA,SAAS,oBAA0E,KAAA,EAAU;AAC3F,EAAA,IAAI,CAAC,KAAA,EAAO;AACV,IAAA,OAAO;AAAA,MACL,OAAA,EAAS,MAAA;AAAA,MACT,YAAA,EAAc;AAAA,KAChB;AAAA,EACF;AAEA,EAAA,MAAM,EAAE,YAAA,EAAc,GAAG,IAAA,EAAK,GAAI,KAAA;AAClC,EAAA,MAAM,cAAA,GAAiB,MAAA,CAAO,IAAA,CAAK,IAAI,EAAE,MAAA,GAAS,CAAA;AAClD,EAAA,OAAO;AAAA,IACL,OAAA,EAAS,iBAAiB,IAAA,GAAO,MAAA;AAAA,IACjC;AAAA,GACF;AACF;AAEA,SAASa,aAAAA,CACP,QACA,OAAA,EACwB;AACxB,EAAA,OAAO,0BAAA,CAA2B,MAAA,EAAQJ,iBAAAA,EAAkB,MAAA,EAAQ,OAAO,CAAA;AAC7E;AAEA,SAAS,gBAAA,CAAiB,YAAA,EAA+B,GAAA,EAAa,KAAA,EAA6B;AACjG,EAAA,IAAI,KAAA,KAAU,MAAA,IAAa,KAAA,KAAU,IAAA,EAAM;AAC3C,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACxB,IAAA,KAAA,CAAM,QAAQ,CAAA,IAAA,KAAQ;AACpB,MAAA,YAAA,CAAa,MAAA,CAAO,GAAA,EAAK,MAAA,CAAO,IAAI,CAAC,CAAA;AAAA,IACvC,CAAC,CAAA;AACD,IAAA;AAAA,EACF;AACA,EAAA,YAAA,CAAa,MAAA,CAAO,GAAA,EAAK,MAAA,CAAO,KAAK,CAAC,CAAA;AACxC;AAEA,SAAS,eAAA,CACP,OAAA,EACA,QAAA,EACA,KAAA,EACA;AACA,EAAA,MAAM,GAAA,GAAM,CAAA,EAAG,OAAO,CAAA,EAAG,QAAQ,CAAA,CAAA;AACjC,EAAA,IAAI,CAAC,SAAS,MAAA,CAAO,IAAA,CAAK,KAAK,CAAA,CAAE,MAAA,KAAW,GAAG,OAAO,GAAA;AACtD,EAAA,MAAM,YAAA,GAAe,IAAI,eAAA,EAAgB;AACzC,EAAA,MAAA,CAAO,OAAA,CAAQ,KAAK,CAAA,CAAE,OAAA,CAAQ,CAAC,CAAC,GAAA,EAAK,KAAK,CAAA,KAAM,gBAAA,CAAiB,YAAA,EAAc,GAAA,EAAK,KAAK,CAAC,CAAA;AAC1F,EAAA,MAAM,SAAA,GAAY,aAAa,QAAA,EAAS;AACxC,EAAA,OAAO,SAAA,GAAY,CAAA,EAAG,GAAG,CAAA,CAAA,EAAI,SAAS,CAAA,CAAA,GAAK,GAAA;AAC7C;AAEA,SAAS,mBAAmB,QAAA,EAAoD;AAC9E,EAAA,IAAI,QAAA,CAAS,UAAA,CAAW,kBAAkB,CAAA,EAAG;AAC3C,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,QAAQ,QAAA;AAAU,IAChB,KAAK,cAAA;AAAA,IACL,KAAK,gBAAA;AAAA,IACL,KAAK,eAAA;AAAA,IACL,KAAK,sBAAA;AAAA,IACL,KAAK,qBAAA;AAAA,IACL,KAAK,aAAA;AAAA,IACL,KAAK,aAAA;AAAA,IACL,KAAK,uBAAA;AAAA,IACL,KAAK,gBAAA;AAAA,IACL,KAAK,oCAAA;AAAA,IACL,KAAK,6BAAA;AAAA,IACL,KAAK,uBAAA;AAAA,IACL,KAAK,mBAAA;AAAA,IACL,KAAK,2BAAA;AAAA,IACL,KAAK,uBAAA;AAAA,IACL,KAAK,kBAAA;AAAA,IACL,KAAK,2BAAA;AAAA,IACL,KAAK,0BAAA;AAAA,IACL,KAAK,2BAAA;AAAA,IACL,KAAK,4BAAA;AAAA,IACL,KAAK,mBAAA;AAAA,IACL,KAAK,cAAA;AAAA,IACL,KAAK,eAAA;AAAA,IACL,KAAK,qCAAA;AAAA,IACL,KAAK,oBAAA;AAAA,IACL,KAAK,8BAAA;AAAA,IACL,KAAK,gCAAA;AAAA,IACL,KAAK,qCAAA;AAAA,IACL,KAAK,4BAAA;AAAA,IACL,KAAK,iCAAA;AAAA,IACL,KAAK,SAAA;AAAA,IACL,KAAK,KAAA;AAAA,IACL,KAAK,QAAA;AACH,MAAA,OAAO,KAAA;AAAA,IACT;AACE,MAAA,OAAO,MAAA;AAAA;AAEb;AAEA,eAAe,gBAAA,CACb,MAAA,EACA,OAAA,EACA,IAAA,EACA,OACA,OAAA,EAC8B;AAC9B,EAAA,MAAM,OAAA,GAAU,gBAAA,CAAiB,OAAA,EAAS,OAAA,IAAW,OAAO,OAAO,CAAA;AACnE,EAAA,MAAM,GAAA,GAAM,eAAA,CAAgB,OAAA,EAAS,OAAA,CAAQ,UAAU,KAAK,CAAA;AAC5D,EAAA,MAAM,OAAA,GAAUI,aAAAA,CAAa,MAAA,EAAQ,OAAO,CAAA;AAC5C,EAAA,MAAM,WAAA,GAAc,OAAA,EAAS,WAAA,IAAe,MAAA,CAAO,WAAA,IAAe,SAAA;AAClE,EAAA,MAAM,WAAA,GAA2B;AAAA,IAC/B,QAAQ,OAAA,CAAQ,MAAA;AAAA,IAChB,OAAA;AAAA,IACA,WAAA;AAAA,IACA,QAAQ,OAAA,EAAS;AAAA,GACnB;AAEA,EAAA,IAAI,OAAA,CAAQ,WAAW,KAAA,EAAO;AAC5B,IAAA,WAAA,CAAY,IAAA,GAAO,IAAA,CAAK,SAAA,CAAU,IAAA,IAAQ,EAAE,CAAA;AAAA,EAC9C;AAEA,EAAA,MAAM,OAAA,GAAU,MAAA,CAAO,KAAA,IAAS,UAAA,CAAW,KAAA;AAC3C,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,MAAM,UAAU,cAAA,CAAe;AAAA,MAC7B,IAAA,EAAM,eAAA;AAAA,MACN,OAAA,EAAS,mDAAA;AAAA,MACT,MAAA,EAAQ,CAAA;AAAA,MACR,UAAU,OAAA,CAAQ,QAAA;AAAA,MAClB,QAAQ,OAAA,CAAQ,MAAA;AAAA,MAChB,IAAA,EAAM;AAAA,KACP,CAAA;AACD,IAAA,OAAO;AAAA,MACL,EAAA,EAAI,KAAA;AAAA,MACJ,MAAA,EAAQ,CAAA;AAAA,MACR,IAAA,EAAM,IAAA;AAAA,MACN,OAAO,OAAA,CAAQ,OAAA;AAAA,MACf,YAAA,EAAc,OAAA;AAAA,MACd,GAAA,EAAK;AAAA,KACP;AAAA,EACF;AAEA,EAAA,IAAI;AACF,IAAA,MAAM,QAAA,GAAW,MAAM,OAAA,CAAQ,GAAA,EAAK,WAAW,CAAA;AAC/C,IAAA,MAAM,OAAA,GAAU,MAAM,QAAA,CAAS,IAAA,EAAK;AACpC,IAAA,MAAM,SAAA,GAAYF,iBAAAA,CAAiB,QAAA,CAAS,OAAO,CAAA;AACnD,IAAA,MAAM,UAAA,GAAaD,mBAAkB,OAAA,IAAW,EAAA,EAAI,SAAS,OAAA,CAAQ,GAAA,CAAI,cAAc,CAAC,CAAA;AAExF,IAAA,IAAI,WAAW,WAAA,EAAa;AAC1B,MAAA,MAAM,UAAU,cAAA,CAAe;AAAA,QAC7B,IAAA,EAAM,cAAA;AAAA,QACN,OAAA,EAAS,qCAAA;AAAA,QACT,QAAQ,QAAA,CAAS,MAAA;AAAA,QACjB,UAAU,OAAA,CAAQ,QAAA;AAAA,QAClB,QAAQ,OAAA,CAAQ,MAAA;AAAA,QAChB,SAAA;AAAA,QACA,IAAA,EAAM,uDAAA;AAAA,QACN,KAAA,EAAO,OAAA,CAAQ,KAAA,CAAM,CAAA,EAAG,GAAG;AAAA,OAC5B,CAAA;AACD,MAAA,OAAO;AAAA,QACL,EAAA,EAAI,KAAA;AAAA,QACJ,QAAQ,QAAA,CAAS,MAAA;AAAA,QACjB,IAAA,EAAM,IAAA;AAAA,QACN,OAAO,OAAA,CAAQ,OAAA;AAAA,QACf,YAAA,EAAc,OAAA;AAAA,QACd,KAAK,UAAA,CAAW;AAAA,OAClB;AAAA,IACF;AAEA,IAAA,MAAM,SAAS,UAAA,CAAW,MAAA;AAE1B,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,MAAA,MAAM,UAAU,cAAA,CAAe;AAAA,QAC7B,IAAA,EAAM,YAAA;AAAA,QACN,OAAA,EAASE,oBAAAA;AAAA,UACP,MAAA;AAAA,UACA,CAAA,cAAA,EAAiB,QAAQ,MAAM,CAAA,CAAA,EAAI,QAAQ,QAAQ,CAAA,oBAAA,EAAuB,SAAS,MAAM,CAAA;AAAA,SAC3F;AAAA,QACA,QAAQ,QAAA,CAAS,MAAA;AAAA,QACjB,UAAU,OAAA,CAAQ,QAAA;AAAA,QAClB,QAAQ,OAAA,CAAQ,MAAA;AAAA,QAChB;AAAA,OACD,CAAA;AACD,MAAA,OAAO;AAAA,QACL,EAAA,EAAI,KAAA;AAAA,QACJ,QAAQ,QAAA,CAAS,MAAA;AAAA,QACjB,IAAA,EAAM,IAAA;AAAA,QACN,OAAO,OAAA,CAAQ,OAAA;AAAA,QACf,YAAA,EAAc,OAAA;AAAA,QACd,GAAA,EAAK;AAAA,OACP;AAAA,IACF;AAEA,IAAA,OAAO;AAAA,MACL,EAAA,EAAI,IAAA;AAAA,MACJ,QAAQ,QAAA,CAAS,MAAA;AAAA,MACjB,MAAO,MAAA,IAAgB,IAAA;AAAA,MACvB,KAAA,EAAO,IAAA;AAAA,MACP,YAAA,EAAc,IAAA;AAAA,MACd,GAAA,EAAK;AAAA,KACP;AAAA,EACF,SAAS,SAAA,EAAW;AAClB,IAAA,MAAM,UAAU,SAAA,YAAqB,KAAA,GAAQ,SAAA,CAAU,OAAA,GAAU,OAAO,SAAS,CAAA;AACjF,IAAA,MAAM,UAAU,cAAA,CAAe;AAAA,MAC7B,IAAA,EAAM,eAAA;AAAA,MACN,OAAA,EAAS,+BAA+B,OAAA,CAAQ,MAAM,IAAI,OAAA,CAAQ,QAAQ,KAAK,OAAO,CAAA,CAAA;AAAA,MACtF,MAAA,EAAQ,CAAA;AAAA,MACR,UAAU,OAAA,CAAQ,QAAA;AAAA,MAClB,QAAQ,OAAA,CAAQ,MAAA;AAAA,MAChB,KAAA,EAAO,OAAA;AAAA,MACP,IAAA,EAAM;AAAA,KACP,CAAA;AACD,IAAA,OAAO;AAAA,MACL,EAAA,EAAI,KAAA;AAAA,MACJ,MAAA,EAAQ,CAAA;AAAA,MACR,IAAA,EAAM,IAAA;AAAA,MACN,OAAO,OAAA,CAAQ,OAAA;AAAA,MACf,YAAA,EAAc,OAAA;AAAA,MACd,GAAA,EAAK;AAAA,KACP;AAAA,EACF;AACF;AAEA,SAAS,8BAAA,CACP,MAAA,EACA,OAAA,EACA,KAAA,EACA,OAAA,EACA;AACA,EAAA,MAAM,EAAE,OAAA,EAAS,YAAA,EAAa,GAAI,oBAAoB,KAAK,CAAA;AAC3D,EAAA,MAAM,aAAA,GAAgB,gBAAA,CAAiB,YAAA,EAAc,OAAO,CAAA;AAC5D,EAAA,OAAO,iBAA0B,MAAA,EAAQ,OAAA,EAAS,WAAW,EAAC,EAAG,QAAW,aAAa,CAAA;AAC3F;AAEA,SAAS,4BAAA,CACP,MAAA,EACA,OAAA,EACA,KAAA,EACA,OAAA,EACA;AACA,EAAA,MAAM,EAAE,YAAA,EAAa,GAAI,mBAAA,CAAoB,KAAK,CAAA;AAClD,EAAA,MAAM,aAAA,GAAgB,gBAAA,CAAiB,YAAA,EAAc,OAAO,CAAA;AAC5D,EAAA,OAAO,iBAA0B,MAAA,EAAQ,OAAA,EAAS,EAAC,EAAG,QAAW,aAAa,CAAA;AAChF;AAEA,SAAS,6BAAA,CACP,MAAA,EACA,OAAA,EACA,KAAA,EACA,OAAA,EACA;AACA,EAAA,MAAM,EAAE,YAAA,EAAa,GAAI,mBAAA,CAAoB,KAAK,CAAA;AAClD,EAAA,MAAM,aAAA,GAAgB,gBAAA,CAAiB,YAAA,EAAc,OAAO,CAAA;AAC5D,EAAA,OAAO,gBAAA,CAA0B,MAAA,EAAQ,OAAA,EAAS,MAAA,EAAW,QAAW,aAAa,CAAA;AACvF;AAEA,SAAS,kCAAA,CAIP,MAAA,EACA,OAAA,EACA,KAAA,EACA,OAAA,EACA;AACA,EAAA,MAAM,EAAE,OAAA,EAAS,YAAA,EAAa,GAAI,oBAAoB,KAAK,CAAA;AAC3D,EAAA,MAAM,aAAA,GAAgB,gBAAA,CAAiB,YAAA,EAAc,OAAO,CAAA;AAC5D,EAAA,MAAM,QAAS,OAAA,EAA0E,KAAA;AACzF,EAAA,OAAO,gBAAA;AAAA,IACL,MAAA;AAAA,IACA,OAAA;AAAA,IACA,MAAA;AAAA,IACA,KAAA;AAAA,IACA;AAAA,GACF;AACF;AAKO,SAAS,iBACd,MAAA,GAAiC,EAAC,EAClC,cAAA,GAAmD,EAAC,EAC1B;AAC1B,EAAA,MAAM,iBAAA,GAAoB,gBAAA,CAAiB,MAAA,CAAO,OAAO,CAAA;AACzD,EAAA,MAAM,cAAA,GAAyC;AAAA,IAC7C,GAAG,MAAA;AAAA,IACH,OAAA,EAAS;AAAA,GACX;AAEA,EAAA,MAAMP,QAAAA,GAAU,OACd,KAAA,EACA,OAAA,KACiC;AACjC,IAAA,MAAM,MAAA,GAAS,MAAM,MAAA,KAAW,KAAA,CAAM,SAAS,MAAA,GAAY,MAAA,GAAS,kBAAA,CAAmB,KAAA,CAAM,QAAQ,CAAA,CAAA;AACrG,IAAA,MAAM,cAAA,GAAiB,MAAM,cAAA,CAAe,kBAAA,IAAqB;AACjE,IAAA,MAAM,aAAA,GAAgB,gBAAA;AAAA,MACpB,gBAAA,CAAiB,cAAA,EAAgB,KAAA,CAAM,YAAY,CAAA;AAAA,MACnD;AAAA,KACF;AACA,IAAA,OAAO,MAAM,gBAAA;AAAA,MACX,cAAA;AAAA,MACA,EAAE,QAAA,EAAU,KAAA,CAAM,QAAA,EAAU,MAAA,EAAO;AAAA,MACnC,KAAA,CAAM,IAAA;AAAA,MACN,KAAA,CAAM,KAAA;AAAA,MACN;AAAA,KACF;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,WAAA,GAAc,CAClB,QAAA,EACA,KAAA,EACA,OAAA,KACG;AACH,IAAA,MAAM,EAAE,OAAA,EAAS,YAAA,EAAa,GAAI,oBAAoB,KAAK,CAAA;AAC3D,IAAA,OAAOA,QAAAA;AAAA,MACL;AAAA,QACE,QAAA;AAAA,QACA,MAAA,EAAQ,MAAA;AAAA,QACR,IAAA,EAAM,WAAW,EAAC;AAAA,QAClB;AAAA,OACF;AAAA,MACA;AAAA,KACF;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,UAAA,GAAa,CACjB,QAAA,EACA,KAAA,EACA,OAAA,KACG;AACH,IAAA,MAAM,EAAE,YAAA,EAAa,GAAI,mBAAA,CAAoB,KAAK,CAAA;AAClD,IAAA,OAAOA,QAAAA;AAAA,MACL;AAAA,QACE,QAAA;AAAA,QACA,MAAA,EAAQ,KAAA;AAAA,QACR;AAAA,OACF;AAAA,MACA;AAAA,KACF;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,YAAA,GAAe,CAInB,QAAA,EACA,KAAA,EAGA,OAAA,KACG;AACH,IAAA,MAAM,EAAE,OAAA,EAAS,YAAA,EAAa,GAAI,oBAAoB,KAAK,CAAA;AAC3D,IAAA,MAAM,QAAS,OAAA,EAA4C,KAAA;AAG3D,IAAA,OAAOA,QAAAA;AAAA,MACL;AAAA,QACE,QAAA;AAAA,QACA,MAAA,EAAQ,KAAA;AAAA,QACR,KAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA;AAAA,KACF;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,mBAAA,GAAsB,CAAC,KAAA,MAAmC;AAAA,IAC9D,GAAG,cAAA,CAAe,UAAA;AAAA,IAClB;AAAA,GACF,CAAA;AAEA,EAAA,MAAM,wBAAA,GAA2B,CAG/B,KAAA,EACA,KAAA,KAEA,+BAA+B,KAAA,EAAO;AAAA,IACpC,SAAA,EAAW,UAAA;AAAA,IACX,SAAA,EAAW;AAAA,GACb,EAAG,mBAAA,CAAoB,KAAK,CAAC,CAAA;AAE/B,EAAA,MAAM,mCAAmC,CAGvC,KAAA,EACA,UAEA,8BAAA,CAA+B,sCAAA,CAAuC,KAAK,CAAA,EAAG;AAAA,IAC5E,SAAA,EAAW,cAAA;AAAA,IACX,SAAA,EAAW,cAAA;AAAA,IACX,cAAA,EAAgB;AAAA,KACf,mBAAA,CAAoB,KAAK,CAAC,CAAA,CAAE,KAAK,CAAA,OAAA,KAAW;AAC7C,IAAA,MAAM,iBAAA,GAAoB,mCAAmC,OAAkC,CAAA;AAC/F,IAAA,IAAI,eAAe,OAAA,IAAW,OAAA,CAAQ,cAAc,MAAA,IAAa,OAAA,CAAQ,cAAc,IAAA,EAAM;AAC3F,MAAA,iCAAA;AAAA,QACE,OAAA,CAAQ,SAAA;AAAA,QACR,GAAG,KAAK,CAAA,UAAA;AAAA,OACV;AAAA,IACF;AACA,IAAA,OAAO,iBAAA;AAAA,EACT,CAAC,CAAA;AAEH,EAAA,MAAM,cAAA,GAAuD,OAAO,KAAA,EAAO,OAAA,KAAY;AACrF,IAAA,MAAM,eAAe,KAAA,EAAO,YAAA,GACxB,EAAE,YAAA,EAAc,KAAA,CAAM,cAAa,GACnC,MAAA;AACJ,IAAA,MAAM,gBAAgB,MAAM,UAAA;AAAA,MAC1B,cAAA;AAAA,MACA,YAAA;AAAA,MACA;AAAA,KACF;AAEA,IAAA,IAAI,CAAC,aAAA,CAAc,EAAA,IAAM,aAAA,CAAc,QAAQ,IAAA,EAAM;AACnD,MAAA,OAAO,sBAAsB,aAAa,CAAA;AAAA,IAC5C;AAEA,IAAA,OAAO;AAAA,MACL,EAAA,EAAI,IAAA;AAAA,MACJ,SAAS,aAAA,CAAc;AAAA,KACzB;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,OAAA,GAAyC,OAAO,KAAA,EAAO,OAAA,KAAY;AACvE,IAAA,MAAM,gBAAgB,MAAM,UAAA;AAAA,MAC1B,cAAA;AAAA,MACA,KAAA;AAAA,MACA;AAAA,KACF;AAEA,IAAA,IAAI,CAAC,cAAc,EAAA,EAAI;AACrB,MAAA,OAAO;AAAA,QACL,GAAG,aAAA;AAAA,QACH,IAAA,EAAM;AAAA,OACR;AAAA,IACF;AAEA,IAAA,OAAO;AAAA,MACL,GAAG,aAAA;AAAA,MACH,IAAA,EAAM;AAAA,QACJ,IAAA,EAAM,aAAA,CAAc,IAAA,EAAM,IAAA,IAAQ;AAAA;AACpC,KACF;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,iBAAA,GAAoB,OACxB,QAAA,EACA,KAAA,EACA,OAAA,KACmC;AACnC,IAAA,MAAM,eAAe,MAAM,cAAA;AAAA,MACzB,OAAO,YAAA,GAAe,EAAE,YAAA,EAAc,KAAA,CAAM,cAAa,GAAI,MAAA;AAAA,MAC7D;AAAA,KACF;AAEA,IAAA,IAAI,CAAC,aAAa,EAAA,EAAI;AACpB,MAAA,OAAO,YAAA;AAAA,IACT;AAEA,IAAA,MAAM,mBAAmB,MAAM,WAAA;AAAA,MAC7B,QAAA;AAAA,MACA,KAAA;AAAA,MACA;AAAA,KACF;AAEA,IAAA,IAAI,CAAC,iBAAiB,EAAA,EAAI;AACxB,MAAA,OAAO,yBAAyB,gBAAA,EAAkB;AAAA,QAChD,EAAA,EAAI,IAAA;AAAA,QACJ,MAAA,EAAQ,GAAA;AAAA,QACR,MAAM,YAAA,CAAa,OAAA;AAAA,QACnB,KAAA,EAAO,IAAA;AAAA,QACP,YAAA,EAAc,IAAA;AAAA,QACd,KAAK,YAAA,CAAa;AAAA,OACnB,CAAA;AAAA,IACH;AAEA,IAAA,IAAI,CAAC,gBAAA,CAAiB,IAAA,EAAM,OAAA,EAAS;AACnC,MAAA,OAAO;AAAA,QACL,EAAA,EAAI,KAAA;AAAA,QACJ,MAAA,EAAQ,WAAA;AAAA,QACR,MAAA,EAAQ,GAAA;AAAA,QACR,KAAA,EAAO,gBAAA,CAAiB,IAAA,EAAM,KAAA,IAAS,WAAA;AAAA,QACvC,aAAA,EAAe;AAAA,UACb,EAAA,EAAI,IAAA;AAAA,UACJ,MAAA,EAAQ,GAAA;AAAA,UACR,MAAM,YAAA,CAAa,OAAA;AAAA,UACnB,KAAA,EAAO,IAAA;AAAA,UACP,YAAA,EAAc,IAAA;AAAA,UACd,KAAK,YAAA,CAAa;AAAA,SACpB;AAAA,QACA;AAAA,OACF;AAAA,IACF;AAEA,IAAA,OAAO,YAAA;AAAA,EACT,CAAA;AAEA,EAAA,MAAM,0BAAA,GAA0E,OAAO,KAAA,EAAO,OAAA,KAAY;AACxG,IAAA,MAAM,UAAU,MAAM,YAAA;AAAA,MACpB,aAAA;AAAA,MACA,KAAA;AAAA,MACA;AAAA,KACF;AACA,IAAA,IAAI,OAAA,CAAQ,MAAM,OAAA,CAAQ,MAAA,KAAW,OAAO,OAAA,CAAQ,YAAA,EAAc,SAAS,YAAA,EAAc;AACvF,MAAA,OAAO,OAAA;AAAA,IACT;AACA,IAAA,OAAO,YAAA;AAAA,MACL,aAAA;AAAA,MACA,KAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,kBAAA,GAAmD,OAAO,KAAA,EAAO,OAAA,KAAY;AACjF,IAAA,MAAM,OAAA,GAAU,MAAM,UAAA,CAAqC,SAAA,EAAW,OAAO,OAAO,CAAA;AACpF,IAAA,IAAI,OAAA,CAAQ,MAAM,OAAA,CAAQ,MAAA,KAAW,OAAO,OAAA,CAAQ,YAAA,EAAc,SAAS,YAAA,EAAc;AACvF,MAAA,OAAO,OAAA;AAAA,IACT;AAEA,IAAA,MAAM,QAAA,GAAW,MAAM,UAAA,CAAiC,KAAA,EAAO,OAAO,OAAO,CAAA;AAC7E,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,MAAA,OAAO;AAAA,QACL,GAAG,QAAA;AAAA,QACH,IAAA,EAAM;AAAA,OACR;AAAA,IACF;AAEA,IAAA,MAAM,cAAA,GACJL,SAAAA,CAAS,QAAA,CAAS,IAAI,KAAK,OAAO,QAAA,CAAS,IAAA,CAAK,EAAA,KAAO,SAAA,GAClD,QAAA,CAAS,IAAA,CAAK,EAAA,GAAK,OAAO,OAAA,GAC3B,IAAA;AAEN,IAAA,OAAO;AAAA,MACL,GAAG,QAAA;AAAA,MACH,IAAA,EAAM;AAAA,QACJ,MAAA,EAAQ;AAAA;AACV,KACF;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,OAAA,GAAU,CACd,KAAA,EACA,OAAA,KAEA,4BAAA;AAAA,IACE,cAAA;AAAA,IACA,EAAE,QAAA,EAAU,WAAA,EAAa,MAAA,EAAQ,MAAA,EAAO;AAAA,IACxC,KAAA;AAAA,IACA;AAAA,GACF;AAEF,EAAA,MAAM,cAAA,GAAiB,CACrB,KAAA,EACA,OAAA,KAEA,4BAAA;AAAA,IACE,cAAA;AAAA,IACA,EAAE,QAAA,EAAU,kBAAA,EAAoB,MAAA,EAAQ,MAAA,EAAO;AAAA,IAC/C,KAAA;AAAA,IACA;AAAA,GACF;AAEF,EAAA,MAAM,mBAAA,GAAsB,CAC1B,KAAA,EACA,OAAA,KAEA,4BAAA;AAAA,IACE,cAAA;AAAA,IACA,EAAE,QAAA,EAAU,wBAAA,EAA0B,MAAA,EAAQ,MAAA,EAAO;AAAA,IACrD,KAAA;AAAA,IACA;AAAA,GACF;AAEF,EAAA,MAAM,aAAA,GAAgB,CACpB,KAAA,EACA,OAAA,KAEA,8BAAA;AAAA,IACE,cAAA;AAAA,IACA,EAAE,QAAA,EAAU,iBAAA,EAAmB,MAAA,EAAQ,MAAA,EAAO;AAAA,IAC9C,KAAA;AAAA,IACA;AAAA,GACF;AAEF,EAAA,MAAM,UAAA,GAAa,CACjB,KAAA,EACA,OAAA,KACG;AACH,IAAA,MAAM,EAAE,OAAA,EAAS,YAAA,EAAa,GAAI,oBAAoB,KAAK,CAAA;AAC3D,IAAA,MAAM,aAAA,GAAgB,gBAAA,CAAiB,YAAA,EAAc,OAAO,CAAA;AAC5D,IAAA,OAAO,gBAAA;AAAA,MACL,cAAA;AAAA,MACA,EAAE,QAAA,EAAU,cAAA,EAAgB,MAAA,EAAQ,MAAA,EAAO;AAAA,MAC3C,WAAW,EAAC;AAAA,MACZ,MAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,kBAAA,GAAqB,CACzB,KAAA,EACA,OAAA,KACG;AACH,IAAA,MAAM,EAAE,OAAA,EAAS,YAAA,EAAa,GAAI,oBAAoB,KAAK,CAAA;AAC3D,IAAA,MAAM,aAAA,GAAgB,gBAAA,CAAiB,YAAA,EAAc,OAAO,CAAA;AAC5D,IAAA,MAAM,KAAA,GAAS,WAAW,EAAC;AAC3B,IAAA,OAAO,gBAAA;AAAA,MACL,cAAA;AAAA,MACA,EAAE,QAAA,EAAU,uBAAA,EAAyB,MAAA,EAAQ,KAAA,EAAM;AAAA,MACnD,MAAA;AAAA,MACA;AAAA,QACE,OAAO,KAAA,CAAM,KAAA;AAAA,QACb,aAAa,KAAA,CAAM;AAAA,OACrB;AAAA,MACA;AAAA,KACF;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,yBAAA,GAA4B,CAChC,KAAA,EACA,OAAA,KACG;AACH,IAAA,MAAM,EAAE,OAAA,EAAS,YAAA,EAAa,GAAI,oBAAoB,KAAK,CAAA;AAC3D,IAAA,MAAM,aAAA,GAAgB,gBAAA,CAAiB,YAAA,EAAc,OAAO,CAAA;AAC5D,IAAA,MAAM,KAAA,GAAQ,OAAA;AACd,IAAA,MAAM,KAAA,GAAQ,KAAA,EAAO,KAAA,EAAO,IAAA,EAAK;AACjC,IAAA,IAAI,CAAC,KAAA,EAAO;AACV,MAAA,MAAM,IAAI,MAAM,sDAAsD,CAAA;AAAA,IACxE;AACA,IAAA,MAAM,QAAA,GAAW,CAAA,gBAAA,EAAmB,kBAAA,CAAmB,KAAK,CAAC,CAAA,CAAA;AAC7D,IAAA,OAAO,gBAAA;AAAA,MACL,cAAA;AAAA,MACA,EAAE,QAAA,EAAU,MAAA,EAAQ,KAAA,EAAM;AAAA,MAC1B,MAAA;AAAA,MACA,OAAO,WAAA,GAAc,EAAE,WAAA,EAAa,KAAA,CAAM,aAAY,GAAI,MAAA;AAAA,MAC1D;AAAA,KACF;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,YAAA,GAA+C;AAAA,IACnD,MAAA,EAAQ,CAAC,KAAA,EAAO,OAAA,KACd,8BAAA;AAAA,MAIE,cAAA;AAAA,MACA,EAAE,QAAA,EAAU,sBAAA,EAAwB,MAAA,EAAQ,MAAA,EAAO;AAAA,MACnD,KAAA;AAAA,MACA;AAAA,KACF;AAAA,IACF,MAAA,EAAQ,CAAC,KAAA,EAAO,OAAA,KACd,8BAAA;AAAA,MAIE,cAAA;AAAA,MACA,EAAE,QAAA,EAAU,sBAAA,EAAwB,MAAA,EAAQ,MAAA,EAAO;AAAA,MACnD,KAAA;AAAA,MACA;AAAA,KACF;AAAA,IACF,MAAA,EAAQ,CAAC,KAAA,EAAO,OAAA,KACd,8BAAA;AAAA,MAIE,cAAA;AAAA,MACA,EAAE,QAAA,EAAU,sBAAA,EAAwB,MAAA,EAAQ,MAAA,EAAO;AAAA,MACnD,KAAA;AAAA,MACA;AAAA,KACF;AAAA,IACF,SAAA,EAAW,CAAC,KAAA,EAAO,OAAA,KACjB,8BAAA;AAAA,MAIE,cAAA;AAAA,MACA,EAAE,QAAA,EAAU,0BAAA,EAA4B,MAAA,EAAQ,MAAA,EAAO;AAAA,MACvD,KAAA;AAAA,MACA;AAAA,KACF;AAAA,IACF,IAAA,EAAM,CAAC,KAAA,EAAO,OAAA,KACZ,UAAA;AAAA,MACE,oBAAA;AAAA,MACA,KAAA;AAAA,MACA;AAAA,KACF;AAAA,IACF,OAAA,EAAS,CAAC,KAAA,EAAO,OAAA,KACf,kCAAA;AAAA,MAKE,cAAA;AAAA,MACA,EAAE,QAAA,EAAU,qCAAA,EAAuC,MAAA,EAAQ,KAAA,EAAM;AAAA,MACjE,KAAA;AAAA,MACA;AAAA,KACF;AAAA,IACF,SAAA,EAAW,CAAC,KAAA,EAAO,OAAA,KACjB,8BAAA;AAAA,MAIE,cAAA;AAAA,MACA,EAAE,QAAA,EAAU,0BAAA,EAA4B,MAAA,EAAQ,MAAA,EAAO;AAAA,MACvD,KAAA;AAAA,MACA;AAAA,KACF;AAAA,IACF,KAAA,EAAO,CAAC,KAAA,EAAO,OAAA,KACb,8BAAA;AAAA,MAIE,cAAA;AAAA,MACA,EAAE,QAAA,EAAU,qBAAA,EAAuB,MAAA,EAAQ,MAAA,EAAO;AAAA,MAClD,KAAA;AAAA,MACA;AAAA,KACF;AAAA,IACF,mBAAA,EAAqB,CAAC,KAAA,EAAO,OAAA,KAC3B,kCAAA;AAAA,MAIE,cAAA;AAAA,MACA,EAAE,QAAA,EAAU,qCAAA,EAAuC,MAAA,EAAQ,KAAA,EAAM;AAAA,MACjE,KAAA;AAAA,MACA;AAAA,KACF;AAAA,IACF,aAAA,EAAe,CAAC,KAAA,EAAO,OAAA,KACrB,WAAA;AAAA,MACE,8BAAA;AAAA,MACA,KAAA;AAAA,MACA;AAAA,KACF;AAAA,IACF,mBAAmB,CAAC,KAAA,EAAO,YACzB,iBAAA,CAAkB,8BAAA,EAAgC,OAAO,OAAO,CAAA;AAAA,IAClE,UAAA,EAAY;AAAA,MACV,MAAA,EAAQ,CAAC,KAAA,EAAO,OAAA,KACd,8BAAA;AAAA,QAIE,cAAA;AAAA,QACA,EAAE,QAAA,EAAU,iCAAA,EAAmC,MAAA,EAAQ,MAAA,EAAO;AAAA,QAC9D,KAAA;AAAA,QACA;AAAA,OACF;AAAA,MACF,MAAA,EAAQ,CAAC,KAAA,EAAO,OAAA,KACd,8BAAA;AAAA,QAIE,cAAA;AAAA,QACA,EAAE,QAAA,EAAU,iCAAA,EAAmC,MAAA,EAAQ,MAAA,EAAO;AAAA,QAC9D,KAAA;AAAA,QACA;AAAA,OACF;AAAA,MACF,GAAA,EAAK,CAAC,KAAA,EAAO,OAAA,KACX,kCAAA;AAAA,QAIE,cAAA;AAAA,QACA,EAAE,QAAA,EAAU,8BAAA,EAAgC,MAAA,EAAQ,KAAA,EAAM;AAAA,QAC1D,KAAA;AAAA,QACA;AAAA,OACF;AAAA,MACF,MAAA,EAAQ,CAAC,KAAA,EAAO,OAAA,KACd,8BAAA;AAAA,QAIE,cAAA;AAAA,QACA,EAAE,QAAA,EAAU,iCAAA,EAAmC,MAAA,EAAQ,MAAA,EAAO;AAAA,QAC9D,KAAA;AAAA,QACA;AAAA,OACF;AAAA,MACF,IAAA,EAAM,CAAC,KAAA,EAAO,OAAA,KACZ,kCAAA;AAAA,QAIE,cAAA;AAAA,QACA,EAAE,QAAA,EAAU,gCAAA,EAAkC,MAAA,EAAQ,KAAA,EAAM;AAAA,QAC5D,KAAA;AAAA,QACA;AAAA;AACF,KACJ;AAAA,IACA,MAAA,EAAQ;AAAA,MACN,MAAA,EAAQ,CAAC,KAAA,EAAO,OAAA,KACd,8BAAA;AAAA,QAIE,cAAA;AAAA,QACA,EAAE,QAAA,EAAU,6BAAA,EAA+B,MAAA,EAAQ,MAAA,EAAO;AAAA,QAC1D,KAAA;AAAA,QACA;AAAA,OACF;AAAA,MACF,UAAA,EAAY,CAAC,KAAA,EAAO,OAAA,KAClB,8BAAA;AAAA,QAIE,cAAA;AAAA,QACA,EAAE,QAAA,EAAU,kCAAA,EAAoC,MAAA,EAAQ,MAAA,EAAO;AAAA,QAC/D,KAAA;AAAA,QACA;AAAA,OACF;AAAA,MACF,MAAA,EAAQ,CAAC,KAAA,EAAO,OAAA,KACd,8BAAA;AAAA,QAIE,cAAA;AAAA,QACA,EAAE,QAAA,EAAU,6BAAA,EAA+B,MAAA,EAAQ,MAAA,EAAO;AAAA,QAC1D,KAAA;AAAA,QACA;AAAA,OACF;AAAA,MACF,SAAA,EAAW,CAAC,KAAA,EAAO,OAAA,KACjB,6BAAA;AAAA,QACE,cAAA;AAAA,QACA,EAAE,QAAA,EAAU,iCAAA,EAAmC,MAAA,EAAQ,KAAA,EAAM;AAAA,QAC7D,KAAA;AAAA,QACA;AAAA,OACF;AAAA,MACF,IAAA,EAAM,CAAC,KAAA,EAAO,OAAA,KACZ,kCAAA;AAAA,QAIE,cAAA;AAAA,QACA,EAAE,QAAA,EAAU,4BAAA,EAA8B,MAAA,EAAQ,KAAA,EAAM;AAAA,QACxD,KAAA;AAAA,QACA;AAAA;AACF;AACJ,GACF;AAEA,EAAA,MAAM,oBAAoB,MAAA,CAAO,MAAA;AAAA,IAC/B,CACE,OACA,OAAA,KAEA,8BAAA;AAAA,MAIE,cAAA;AAAA,MACA,EAAE,QAAA,EAAU,iBAAA,EAAmB,MAAA,EAAQ,MAAA,EAAO;AAAA,MAC9C,KAAA;AAAA,MACA;AAAA,KACF;AAAA,IACF;AAAA,MACE,KAAA,EAAO;AAAA;AACT,GACF;AAEA,EAAA,MAAM,oBAAA,GAAgE,CACpE,KAAA,EACA,OAAA,KACG;AACH,IAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACxB,MAAA,IAAI,KAAA,CAAM,WAAW,CAAA,EAAG;AACtB,QAAA,MAAM,IAAI,MAAM,oDAAoD,CAAA;AAAA,MACtE;AACA,MAAA,IAAI,KAAA,CAAM,WAAW,CAAA,EAAG;AACtB,QAAA,OAAO,aAAA,CAAc,KAAA,CAAM,CAAC,CAAA,EAAG,OAAO,CAAA;AAAA,MACxC;AACA,MAAA,OAAO,cAAA,CAAe,QAAW,OAAO,CAAA;AAAA,IAC1C;AAEA,IAAA,MAAM,MAAA,GAAS,KAAA;AAIf,IAAA,MAAM,SAAS,KAAA,CAAM,OAAA,CAAQ,MAAA,CAAO,MAAM,IACtC,MAAA,CAAO,MAAA,CAAO,MAAA,CAAO,CAAAc,WAASA,MAAAA,CAAM,IAAA,EAAK,CAAE,MAAA,GAAS,CAAC,CAAA,GACrD,MAAA;AAEJ,IAAA,IAAI,MAAA,IAAU,MAAA,CAAO,MAAA,GAAS,CAAA,EAAG;AAC/B,MAAA,OAAO,cAAA;AAAA,QACL,OAAO,YAAA,GAAe,EAAE,YAAA,EAAc,MAAA,CAAO,cAAa,GAAI,MAAA;AAAA,QAC9D;AAAA,OACF;AAAA,IACF;AAEA,IAAA,IAAI,MAAA,IAAU,MAAA,CAAO,MAAA,KAAW,CAAA,EAAG;AACjC,MAAA,OAAO,aAAA;AAAA,QACL,EAAE,KAAA,EAAO,MAAA,CAAO,CAAC,CAAA,EAAG,YAAA,EAAc,OAAO,YAAA,EAAa;AAAA,QACtD;AAAA,OACF;AAAA,IACF;AAEA,IAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,KAAA,EAAO,IAAA,EAAK;AACjC,IAAA,IAAI,CAAC,KAAA,EAAO;AACV,MAAA,MAAM,IAAI,MAAM,qEAAqE,CAAA;AAAA,IACvF;AAEA,IAAA,OAAO,aAAA;AAAA,MACL;AAAA,QACE,KAAA;AAAA,QACA,cAAc,MAAA,CAAO;AAAA,OACvB;AAAA,MACA;AAAA,KACF;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,6BAAA,GAA0F,CAC9F,KAAA,EACA,OAAA,KACG;AACH,IAAA,MAAM,aAAA,GAAgB,CAAC,MAAA,KAAuC;AAC5D,MAAA,MAAM,OAAA,GAAU,MAAA,CAAO,MAAA,IAAU,EAAE,EAAE,IAAA,EAAK;AAC1C,MAAA,IAAI,CAAC,OAAA,EAAS;AACZ,QAAA,MAAM,IAAI,MAAM,uDAAuD,CAAA;AAAA,MACzE;AACA,MAAA,OAAO,OAAA;AAAA,IACT,CAAA;AAEA,IAAA,MAAM,yBAAA,GAA4B,CAChCC,SAAAA,KACyC;AACzC,MAAA,MAAM,aAAA,GAAgB,CAAC,GAAG,IAAI,GAAA,CAAIA,SAAAA,CAAS,GAAA,CAAI,CAAA,OAAA,KAAW,aAAA,CAAc,OAAA,CAAQ,MAAM,CAAC,CAAC,CAAC,CAAA;AACzF,MAAA,IAAI,aAAA,CAAc,WAAW,CAAA,EAAG;AAC9B,QAAA,MAAM,IAAI,MAAM,2EAA2E,CAAA;AAAA,MAC7F;AACA,MAAA,OAAO,EAAE,MAAA,EAAQ,aAAA,CAAc,CAAC,CAAA,EAAE;AAAA,IACpC,CAAA;AAEA,IAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACxB,MAAA,IAAI,KAAA,CAAM,WAAW,CAAA,EAAG;AACtB,QAAA,MAAM,IAAI,MAAM,8DAA8D,CAAA;AAAA,MAChF;AACA,MAAA,IAAI,KAAA,CAAM,WAAW,CAAA,EAAG;AACtB,QAAA,OAAO,WAAA;AAAA,UACL,4BAAA;AAAA,UACA;AAAA,YACE,GAAG,MAAM,CAAC,CAAA;AAAA,YACV,MAAA,EAAQ,aAAA,CAAc,KAAA,CAAM,CAAC,EAAE,MAAM;AAAA,WACvC;AAAA,UACA;AAAA,SACF;AAAA,MACF;AACA,MAAA,OAAO,WAAA;AAAA,QACL,6BAAA;AAAA,QACA,0BAA0B,KAAK,CAAA;AAAA,QAC/B;AAAA,OACF;AAAA,IACF;AAEA,IAAA,MAAM,MAAA,GAAS,KAAA;AAKf,IAAA,MAAM,WAAW,MAAA,CAAO,QAAA;AAExB,IAAA,IAAI,QAAA,IAAY,QAAA,CAAS,MAAA,KAAW,CAAA,EAAG;AACrC,MAAA,MAAM,IAAI,MAAM,8DAA8D,CAAA;AAAA,IAChF;AAEA,IAAA,IAAI,QAAA,IAAY,QAAA,CAAS,MAAA,KAAW,CAAA,EAAG;AACrC,MAAA,OAAO,WAAA;AAAA,QACL,4BAAA;AAAA,QACA;AAAA,UACE,GAAG,SAAS,CAAC,CAAA;AAAA,UACb,MAAA,EAAQ,aAAA,CAAc,QAAA,CAAS,CAAC,EAAE,MAAM,CAAA;AAAA,UACxC,cAAc,MAAA,CAAO;AAAA,SACvB;AAAA,QACA;AAAA,OACF;AAAA,IACF;AAEA,IAAA,IAAI,QAAA,IAAY,QAAA,CAAS,MAAA,GAAS,CAAA,EAAG;AACnC,MAAA,OAAO,WAAA;AAAA,QACL,6BAAA;AAAA,QACA;AAAA,UACE,GAAG,0BAA0B,QAAQ,CAAA;AAAA,UACrC,cAAc,MAAA,CAAO;AAAA,SACvB;AAAA,QACA;AAAA,OACF;AAAA,IACF;AAEA,IAAA,MAAM,gBAAA,GAAmB,aAAA,CAAc,MAAA,CAAO,MAAM,CAAA;AAEpD,IAAA,IAAI,CAAC,OAAO,YAAA,EAAc;AACxB,MAAA,OAAO,WAAA;AAAA,QACL,6BAAA;AAAA,QACA;AAAA,UACE,MAAA,EAAQ,gBAAA;AAAA,UACR,cAAc,MAAA,CAAO;AAAA,SACvB;AAAA,QACA;AAAA,OACF;AAAA,IACF;AACA,IAAA,OAAO,WAAA;AAAA,MACL,4BAAA;AAAA,MACA;AAAA,QACE,GAAG,MAAA;AAAA,QACH,MAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,KACF;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,IAAA,GAA2B;AAAA,IAC/B,YAAY,CAAC,KAAA,EAAO,YAAY,UAAA,CAAW,cAAA,EAAgB,OAAO,OAAO,CAAA;AAAA,IACzE,OAAA;AAAA,IACA,cAAA;AAAA,IACA,OAAA;AAAA,IACA,gBAAgB,CAAC,KAAA,EAAO,YAAY,WAAA,CAAY,kBAAA,EAAoB,OAAO,OAAO,CAAA;AAAA,IAClF,aAAA,EAAe,iBAAA;AAAA,IACf,aAAa,CAAC,KAAA,EAAO,YAAY,WAAA,CAAY,eAAA,EAAiB,OAAO,OAAO,CAAA;AAAA,IAC5E,WAAA,EAAa,CAAC,KAAA,EAAO,OAAA,KAAY;AAC/B,MAAA,MAAM,UAAA,GAA0C;AAAA,QAC9C,KAAA,EAAO;AAAA,UACL,OAAO,KAAA,CAAM,KAAA;AAAA,UACb,aAAa,KAAA,CAAM;AAAA,SACrB;AAAA,QACA,cAAc,KAAA,CAAM;AAAA,OACtB;AACA,MAAA,OAAO,YAAA;AAAA,QACL,eAAA;AAAA,QACA,UAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF,CAAA;AAAA,IACA,uBAAuB,CAAC,KAAA,EAAO,YAAY,WAAA,CAAY,0BAAA,EAA4B,OAAO,OAAO,CAAA;AAAA,IACjG,aAAa,CAAC,KAAA,EAAO,YAAY,WAAA,CAAY,eAAA,EAAiB,OAAO,OAAO,CAAA;AAAA,IAC5E,mBAAmB,CAAC,KAAA,EAAO,YAAY,YAAA,CAAa,sBAAA,EAAwB,OAAO,OAAO,CAAA;AAAA,IAC1F,kBAAkB,CAAC,KAAA,EAAO,YAAY,YAAA,CAAa,qBAAA,EAAuB,OAAO,OAAO,CAAA;AAAA,IACxF,gBAAgB,CAAC,KAAA,EAAO,YAAY,WAAA,CAAY,kBAAA,EAAoB,OAAO,OAAO,CAAA;AAAA,IAClF,IAAA,EAAM;AAAA,MACJ,QAAQ,CAAC,KAAA,EAAO,YAAY,WAAA,CAAY,cAAA,EAAgB,OAAO,OAAO,CAAA;AAAA,MACtE,QAAQ,CAAC,KAAA,EAAO,YAAY,WAAA,CAAY,cAAA,EAAgB,OAAO,OAAO,CAAA;AAAA,MACtE,KAAA,EAAO;AAAA,QACL,IAAA,EAAM;AAAA;AACR,KACF;AAAA,IACA,OAAA,EAAS;AAAA,MACP,MAAM,CAAC,KAAA,EAAO,YAAY,UAAA,CAAW,gBAAA,EAAkB,OAAO,OAAO,CAAA;AAAA,MACrE,MAAA,EAAQ,oBAAA;AAAA,MACR,WAAA,EAAa;AAAA,KACf;AAAA,IACA,MAAA,EAAQ;AAAA,MACN,MAAM,CAAC,KAAA,EAAO,YAAY,WAAA,CAAY,cAAA,EAAgB,OAAO,OAAO;AAAA,KACtE;AAAA,IACA,OAAA,EAAS;AAAA,MACP,MAAM,CAAC,KAAA,EAAO,YAAY,UAAA,CAAW,gBAAA,EAAkB,OAAO,OAAO,CAAA;AAAA,MACrE,QAAQ,CAAC,KAAA,EAAO,YAAY,WAAA,CAAY,iBAAA,EAAmB,OAAO,OAAO;AAAA,KAC3E;AAAA,IACA,UAAA,EAAY;AAAA,MACV,QAAA,EAAU;AAAA,KACZ;AAAA,IACA,cAAc,CAAC,KAAA,EAAO,YAAY,WAAA,CAAY,gBAAA,EAAkB,OAAO,OAAO,CAAA;AAAA,IAC9E,gBAAgB,CAAC,KAAA,EAAO,YAAY,WAAA,CAAY,mBAAA,EAAqB,OAAO,OAAO,CAAA;AAAA,IACnF,MAAA,EAAQ,kBAAA;AAAA,IACR,IAAI,CAAC,KAAA,EAAO,YAAY,UAAA,CAAW,KAAA,EAAO,OAAO,OAAO,CAAA;AAAA,IACxD,OAAO,CAAC,KAAA,EAAO,YAAY,UAAA,CAAW,QAAA,EAAU,OAAO,OAAO,CAAA;AAAA,IAC9D,SAAA,EAAW;AAAA,MACT,YAAY,CAAC,KAAA,EAAO,YAAY,WAAA,CAAY,0BAAA,EAA4B,OAAO,OAAO,CAAA;AAAA,MACtF,YAAY,CAAC,KAAA,EAAO,YAAY,WAAA,CAAY,yBAAA,EAA2B,OAAO,OAAO,CAAA;AAAA,MACrF,SAAS,CAAC,KAAA,EAAO,YAAY,WAAA,CAAY,sBAAA,EAAwB,OAAO,OAAO,CAAA;AAAA,MAC/E,WAAW,CAAC,KAAA,EAAO,YAAY,WAAA,CAAY,wBAAA,EAA0B,OAAO,OAAO,CAAA;AAAA,MACnF,kBAAkB,CAAC,KAAA,EAAO,YAAY,WAAA,CAAY,gCAAA,EAAkC,OAAO,OAAO,CAAA;AAAA,MAClG,mBAAA,EAAqB,CAAC,KAAA,EAAO,OAAA,KAC3B,8BAAA;AAAA,QAIE,cAAA;AAAA,QACA,EAAE,QAAA,EAAU,mCAAA,EAAqC,MAAA,EAAQ,MAAA,EAAO;AAAA,QAChE,KAAA;AAAA,QACA;AAAA,OACF;AAAA,MACF,QAAQ,CAAC,KAAA,EAAO,YAAY,WAAA,CAAY,oBAAA,EAAsB,OAAO,OAAO,CAAA;AAAA,MAC5E,SAAS,CAAC,KAAA,EAAO,YAAY,WAAA,CAAY,qBAAA,EAAuB,OAAO,OAAO;AAAA,KAChF;AAAA,IACA,OAAA,EAAS;AAAA,MACP,yBAAyB,CAAC,KAAA,EAAO,YAC/B,UAAA,CAAW,oCAAA,EAAsC,OAAO,OAAO,CAAA;AAAA,MACjE,6BAA6B,CAAC,KAAA,EAAO,YACnC,WAAA,CAAY,wCAAA,EAA0C,OAAO,OAAO,CAAA;AAAA,MACtE,oBAAoB,CAAC,KAAA,EAAO,YAC1B,WAAA,CAAY,8BAAA,EAAgC,OAAO,OAAO,CAAA;AAAA,MAC5D,sBAAsB,CAAC,KAAA,EAAO,YAC5B,WAAA,CAAY,gCAAA,EAAkC,OAAO,OAAO,CAAA;AAAA,MAC9D,kBAAkB,CAAC,KAAA,EAAO,YAAY,UAAA,CAAW,6BAAA,EAA+B,OAAO,OAAO,CAAA;AAAA,MAC9F,eAAe,CAAC,KAAA,EAAO,YAAY,WAAA,CAAY,yBAAA,EAA2B,OAAO,OAAO,CAAA;AAAA,MACxF,eAAe,CAAC,KAAA,EAAO,YAAY,WAAA,CAAY,yBAAA,EAA2B,OAAO,OAAO,CAAA;AAAA,MACxF,mBAAmB,CAAC,KAAA,EAAO,YAAY,UAAA,CAAW,uBAAA,EAAyB,OAAO,OAAO;AAAA,KAC3F;AAAA,IACA,KAAA,EAAO;AAAA,MACL,IAAA,EAAM;AAAA,QACJ,KAAK,CAAC,KAAA,EAAO,YAAY,WAAA,CAAY,iBAAA,EAAmB,OAAO,OAAO;AAAA,OACxE;AAAA,MACA,IAAA,EAAM;AAAA,QACJ,MAAM,CAAC,KAAA,EAAO,YAAY,YAAA,CAAa,mBAAA,EAAqB,OAAO,OAAO,CAAA;AAAA,QAC1E,QAAQ,CAAC,KAAA,EAAO,YAAY,WAAA,CAAY,oBAAA,EAAsB,OAAO,OAAO,CAAA;AAAA,QAC5E,OAAO,CAAC,KAAA,EAAO,YAAY,WAAA,CAAY,mBAAA,EAAqB,OAAO,OAAO,CAAA;AAAA,QAC1E,KAAK,CAAC,KAAA,EAAO,YAAY,WAAA,CAAY,iBAAA,EAAmB,OAAO,OAAO,CAAA;AAAA,QACtE,aAAa,CAAC,KAAA,EAAO,YAAY,WAAA,CAAY,yBAAA,EAA2B,OAAO,OAAO,CAAA;AAAA,QACtF,mBAAmB,CAAC,KAAA,EAAO,YAAY,WAAA,CAAY,2BAAA,EAA6B,OAAO,OAAO,CAAA;AAAA,QAC9F,QAAQ,CAAC,KAAA,EAAO,YAAY,WAAA,CAAY,oBAAA,EAAsB,OAAO,OAAO,CAAA;AAAA,QAC5E,aAAa,CAAC,KAAA,EAAO,YAAY,WAAA,CAAY,0BAAA,EAA4B,OAAO,OAAO,CAAA;AAAA,QACvF,OAAA,EAAS;AAAA,UACP,MAAM,CAAC,KAAA,EAAO,YAAY,WAAA,CAAY,2BAAA,EAA6B,OAAO,OAAO,CAAA;AAAA,UACjF,MAAA,EAAQ;AAAA;AACV,OACF;AAAA,MACA,eAAe,CAAC,KAAA,EAAO,YACrB,WAAA,CAA8C,uBAAA,EAAyB,OAAO,OAAO,CAAA;AAAA,MACvF,mBAAmB,CAAC,KAAA,EAAO,YACzB,iBAAA,CAAkB,uBAAA,EAAyB,OAAO,OAAO,CAAA;AAAA,MAC3D,MAAA,EAAQ;AAAA,QACN,QAAQ,CAAC,KAAA,EAAO,YAAY,WAAA,CAAY,uBAAA,EAAyB,OAAO,OAAO;AAAA,OACjF;AAAA,MACA,YAAA,EAAc;AAAA,QACZ,QAAQ,CAAC,KAAA,EAAO,YAAY,WAAA,CAAY,6BAAA,EAA+B,OAAO,OAAO,CAAA;AAAA,QACrF,MAAM,CAAC,KAAA,EAAO,YAAY,YAAA,CAAa,2BAAA,EAA6B,OAAO,OAAO;AAAA,OACpF;AAAA,MACA,QAAA,EAAU;AAAA,QACR,MAAM,CAAC,KAAA,EAAO,YAAY,YAAA,CAAa,uBAAA,EAAyB,OAAO,OAAO;AAAA,OAChF;AAAA,MACA,KAAA,EAAO;AAAA,QACL,MAAM,CAAC,KAAA,EAAO,YAAY,YAAA,CAAa,mBAAA,EAAqB,OAAO,OAAO,CAAA;AAAA,QAC1E,KAAK,CAAC,KAAA,EAAO,YAAY,YAAA,CAAa,kBAAA,EAAoB,OAAO,OAAO,CAAA;AAAA,QACxE,MAAA,EAAQ,OAAO,KAAA,EAAO,OAAA,KACpB,WAAA;AAAA,UACE,qBAAA;AAAA,UACA,MAAM,wBAAA,CAAyB,qBAAA,EAAuB,KAAK,CAAA;AAAA,UAC3D;AAAA,SACF;AAAA,QACF,MAAA,EAAQ,OAAO,KAAA,EAAO,OAAA,KACpB,WAAA;AAAA,UACE,qBAAA;AAAA,UACA,MAAM,wBAAA,CAAyB,qBAAA,EAAuB,KAAK,CAAA;AAAA,UAC3D;AAAA,SACF;AAAA,QACF,QAAQ,CAAC,KAAA,EAAO,YAAY,WAAA,CAAY,qBAAA,EAAuB,OAAO,OAAO,CAAA;AAAA,QAC7E,OAAA,EAAS;AAAA,UACP,MAAM,CAAC,KAAA,EAAO,YAAY,YAAA,CAAa,2BAAA,EAA6B,OAAO,OAAO,CAAA;AAAA,UAClF,KAAK,CAAC,KAAA,EAAO,YAAY,YAAA,CAAa,0BAAA,EAA4B,OAAO,OAAO,CAAA;AAAA,UAChF,QAAQ,CAAC,KAAA,EAAO,YAAY,WAAA,CAAY,6BAAA,EAA+B,OAAO,OAAO,CAAA;AAAA,UACrF,QAAQ,CAAC,KAAA,EAAO,YAAY,WAAA,CAAY,6BAAA,EAA+B,OAAO,OAAO,CAAA;AAAA,UACrF,QAAQ,CAAC,KAAA,EAAO,YAAY,WAAA,CAAY,6BAAA,EAA+B,OAAO,OAAO;AAAA,SACvF;AAAA,QACA,QAAA,EAAU;AAAA,UACR,MAAM,CAAC,KAAA,EAAO,YAAY,YAAA,CAAa,4BAAA,EAA8B,OAAO,OAAO,CAAA;AAAA,UACnF,KAAK,CAAC,KAAA,EAAO,YAAY,YAAA,CAAa,2BAAA,EAA6B,OAAO,OAAO,CAAA;AAAA,UACjF,MAAA,EAAQ,OAAO,KAAA,EAAO,OAAA,KACpB,WAAA;AAAA,YACE,8BAAA;AAAA,YACA,MAAM,gCAAA,CAAiC,8BAAA,EAAgC,KAAK,CAAA;AAAA,YAC5E;AAAA,WACF;AAAA,UACF,MAAA,EAAQ,OAAO,KAAA,EAAO,OAAA,KACpB,WAAA;AAAA,YACE,8BAAA;AAAA,YACA,MAAM,gCAAA,CAAiC,8BAAA,EAAgC,KAAK,CAAA;AAAA,YAC5E;AAAA,WACF;AAAA,UACF,QAAQ,CAAC,KAAA,EAAO,YAAY,WAAA,CAAY,8BAAA,EAAgC,OAAO,OAAO,CAAA;AAAA,UACtF,IAAA,EAAM,CAAC,KAAA,EAAO,OAAA,KACZ,WAAA;AAAA,YACE,4BAAA;AAAA,YACA,sCAAA,CAAuC,mBAAA,CAAoB,KAAK,CAAA,CAAE,OAAkC,CAAA;AAAA,YACpG;AAAA;AACF,SACJ;AAAA,QACA,SAAA,EAAW;AAAA,UACT,MAAM,CAAC,KAAA,EAAO,YAAY,YAAA,CAAa,8BAAA,EAAgC,OAAO,OAAO;AAAA;AACvF,OACF;AAAA,MACA,aAAA,EAAe;AAAA,QACb,KAAK,CAAC,KAAA,EAAO,YAAY,YAAA,CAAa,2BAAA,EAA6B,OAAO,OAAO,CAAA;AAAA,QACjF,MAAA,EAAQ,OAAO,KAAA,EAAO,OAAA,KACpB,WAAA;AAAA,UACE,8BAAA;AAAA,UACA,MAAM,gCAAA,CAAiC,8BAAA,EAAgC,KAAK,CAAA;AAAA,UAC5E;AAAA,SACF;AAAA,QACF,QAAQ,CAAC,KAAA,EAAO,YAAY,WAAA,CAAY,8BAAA,EAAgC,OAAO,OAAO,CAAA;AAAA,QACtF,MAAM,CAAC,KAAA,EAAO,YAAY,YAAA,CAAa,4BAAA,EAA8B,OAAO,OAAO,CAAA;AAAA,QACnF,MAAA,EAAQ,OAAO,KAAA,EAAO,OAAA,KACpB,WAAA;AAAA,UACE,8BAAA;AAAA,UACA,MAAM,gCAAA,CAAiC,8BAAA,EAAgC,KAAK,CAAA;AAAA,UAC5E;AAAA,SACF;AAAA,QACF,IAAA,EAAM,CAAC,KAAA,EAAO,OAAA,KACZ,WAAA;AAAA,UACE,4BAAA;AAAA,UACA,sCAAA,CAAuC,mBAAA,CAAoB,KAAK,CAAA,CAAE,OAAkC,CAAA;AAAA,UACpG;AAAA;AACF,OACJ;AAAA,MACA,cAAA,EAAgB;AAAA,QACd,MAAM,CAAC,KAAA,EAAO,YAAY,YAAA,CAAa,8BAAA,EAAgC,OAAO,OAAO;AAAA;AACvF,KACF;AAAA,IACA,MAAA,EAAQ;AAAA,MACN,QAAQ,CAAC,KAAA,EAAO,YAAY,WAAA,CAAY,iBAAA,EAAmB,OAAO,OAAO,CAAA;AAAA,MACzE,KAAK,CAAC,KAAA,EAAO,YAAY,YAAA,CAAa,cAAA,EAAgB,OAAO,OAAO,CAAA;AAAA,MACpE,QAAQ,CAAC,KAAA,EAAO,YAAY,WAAA,CAAY,iBAAA,EAAmB,OAAO,OAAO,CAAA;AAAA,MACzE,QAAQ,CAAC,KAAA,EAAO,YAAY,WAAA,CAAY,iBAAA,EAAmB,OAAO,OAAO,CAAA;AAAA,MACzE,MAAM,CAAC,KAAA,EAAO,YAAY,YAAA,CAAa,eAAA,EAAiB,OAAO,OAAO,CAAA;AAAA,MACtE,QAAQ,CAAC,KAAA,EAAO,YAAY,WAAA,CAAY,iBAAA,EAAmB,OAAO,OAAO,CAAA;AAAA,MACzE,gBAAA,EAAkB,CAAC,KAAA,EAAO,OAAA,KACxB,4BAAA;AAAA,QACE,cAAA;AAAA,QACA,EAAE,QAAA,EAAU,sCAAA,EAAwC,MAAA,EAAQ,MAAA,EAAO;AAAA,QACnE,KAAA;AAAA,QACA;AAAA;AACF,KACJ;AAAA,IACA,MAAA,EAAQ;AAAA,MACN,OAAO,CAAC,KAAA,EAAO,YAAY,WAAA,CAAY,gBAAA,EAAkB,OAAO,OAAO,CAAA;AAAA,MACvE,UAAU,CAAC,KAAA,EAAO,YAAY,WAAA,CAAY,mBAAA,EAAqB,OAAO,OAAO,CAAA;AAAA,MAC7E,QAAQ,CAAC,KAAA,EAAO,YAAY,WAAA,CAAY,iBAAA,EAAmB,OAAO,OAAO;AAAA,KAC3E;AAAA,IACA,MAAA,EAAQ;AAAA,MACN,OAAO,CAAC,KAAA,EAAO,YAAY,WAAA,CAAY,gBAAA,EAAkB,OAAO,OAAO;AAAA,KACzE;AAAA,IACA,YAAA;AAAA,IACA,QAAA,EAAU;AAAA,MACR,QAAA,EAAU,CAAC,KAAA,EAAO,OAAA,KAAY;AAC5B,QAAA,MAAM,EAAE,OAAA,EAAS,YAAA,EAAa,GAAI,oBAAoB,KAAK,CAAA;AAC3D,QAAA,MAAM,MAAA,GAAS,OAAA;AAKf,QAAA,MAAM,WAAW,MAAA,CAAO,MAAA,EAAQ,QAAA,IAAY,EAAE,EAAE,IAAA,EAAK;AACrD,QAAA,IAAI,CAAC,QAAA,EAAU;AACb,UAAA,MAAM,IAAI,MAAM,uDAAuD,CAAA;AAAA,QACzE;AACA,QAAA,MAAM,OAAO,MAAA,CAAO,MAAA,EAAQ,IAAA,IAAQ,EAAE,EAAE,IAAA,EAAK;AAC7C,QAAA,MAAM,QAAQ,MAAA,CAAO,MAAA,EAAQ,KAAA,IAAS,EAAE,EAAE,IAAA,EAAK;AAC/C,QAAA,IAAI,CAAC,IAAA,IAAQ,CAAC,KAAA,EAAO;AACnB,UAAA,MAAM,IAAI,MAAM,4DAA4D,CAAA;AAAA,QAC9E;AACA,QAAA,MAAM,QAAA,GAAW,CAAA,UAAA,EAAa,kBAAA,CAAmB,QAAQ,CAAC,CAAA,CAAA;AAC1D,QAAA,OAAOV,QAAAA,CAAQ;AAAA,UACb,QAAA;AAAA,UACA,MAAA,EAAQ,KAAA;AAAA,UACR,KAAA,EAAO;AAAA,YACL,IAAA;AAAA,YACA;AAAA,WACF;AAAA,UACA;AAAA,WACC,OAAO,CAAA;AAAA,MACZ;AAAA;AACF,GACF;AAEA,EAAA,OAAO;AAAA,IACL,OAAA,EAAS,iBAAA;AAAA,IACT,OAAA,EAAAA,QAAAA;AAAA,IACA,MAAA,EAAQ;AAAA,MACN,KAAA,EAAO,CACL,KAAA,EACA,OAAA,KAEA,8BAAA;AAAA,QAIE,cAAA;AAAA,QACA,EAAE,QAAA,EAAU,gBAAA,EAAkB,MAAA,EAAQ,MAAA,EAAO;AAAA,QAC7C,KAAA;AAAA,QACA;AAAA,OACF;AAAA,MACF,QAAA,EAAU,CACR,KAAA,EACA,OAAA,KAEA,8BAAA;AAAA,QAIE,cAAA;AAAA,QACA,EAAE,QAAA,EAAU,mBAAA,EAAqB,MAAA,EAAQ,MAAA,EAAO;AAAA,QAChD,KAAA;AAAA,QACA;AAAA,OACF;AAAA,MACF,MAAA,EAAQ,CACN,KAAA,EACA,OAAA,KAEA,8BAAA;AAAA,QAIE,cAAA;AAAA,QACA,EAAE,QAAA,EAAU,iBAAA,EAAmB,MAAA,EAAQ,MAAA,EAAO;AAAA,QAC9C,KAAA;AAAA,QACA;AAAA;AACF,KACJ;AAAA,IACA,MAAA,EAAQ;AAAA,MACN,KAAA,EAAO,CACL,KAAA,EACA,OAAA,KAEA,8BAAA;AAAA,QAIE,cAAA;AAAA,QACA,EAAE,QAAA,EAAU,gBAAA,EAAkB,MAAA,EAAQ,MAAA,EAAO;AAAA,QAC7C,KAAA;AAAA,QACA;AAAA;AACF,KACJ;AAAA,IACA,OAAA;AAAA,IACA,MAAA,EAAQ,OAAA;AAAA,IACR,UAAA,EAAY,CAAC,KAAA,EAAwC,OAAA,KACnD,6BAAA;AAAA,MACE,cAAA;AAAA,MACA,EAAE,QAAA,EAAU,cAAA,EAAgB,MAAA,EAAQ,KAAA,EAAM;AAAA,MAC1C,KAAA;AAAA,MACA;AAAA,KACF;AAAA,IACF,OAAA;AAAA,IACA,cAAA;AAAA,IACA,YAAA,EAAc,CAAC,KAAA,EAAwC,OAAA,KACrD,6BAAA;AAAA,MACE,cAAA;AAAA,MACA,EAAE,QAAA,EAAU,gBAAA,EAAkB,MAAA,EAAQ,KAAA,EAAM;AAAA,MAC5C,KAAA;AAAA,MACA;AAAA,KACF;AAAA,IACF,aAAA;AAAA,IACA,YAAA,EAAc,aAAA;AAAA,IACd,cAAA;AAAA,IACA,aAAA,EAAe,cAAA;AAAA,IACf,mBAAA;AAAA,IACA,kBAAA,EAAoB,mBAAA;AAAA,IACpB,cAAA,EAAgB,CACd,KAAA,EACA,OAAA,KAEA,8BAAA;AAAA,MAIE,cAAA;AAAA,MACA,EAAE,QAAA,EAAU,kBAAA,EAAoB,MAAA,EAAQ,MAAA,EAAO;AAAA,MAC/C,KAAA;AAAA,MACA;AAAA,KACF;AAAA,IACF,aAAA,EAAe,CACb,KAAA,EACA,OAAA,KAEA,8BAAA;AAAA,MAIE,cAAA;AAAA,MACA,EAAE,QAAA,EAAU,iBAAA,EAAmB,MAAA,EAAQ,MAAA,EAAO;AAAA,MAC9C,KAAA;AAAA,MACA;AAAA,KACF;AAAA,IACF,yBAAA;AAAA,IACA,WAAA,EAAa,CACX,KAAA,EACA,OAAA,KACG;AACH,MAAA,MAAM,EAAE,OAAA,EAAS,YAAA,EAAa,GAAI,oBAAoB,KAAK,CAAA;AAC3D,MAAA,MAAM,aAAA,GAAgB,gBAAA,CAAiB,YAAA,EAAc,OAAO,CAAA;AAC5D,MAAA,MAAM,KAAA,GAAQ,OAAA;AACd,MAAA,OAAO,gBAAA;AAAA,QACL,cAAA;AAAA,QACA,EAAE,QAAA,EAAU,eAAA,EAAiB,MAAA,EAAQ,KAAA,EAAM;AAAA,QAC3C,MAAA;AAAA,QACA,KAAA,GACI;AAAA,UACE,OAAO,KAAA,CAAM,KAAA;AAAA,UACb,aAAa,KAAA,CAAM;AAAA,SACrB,GACA,MAAA;AAAA,QACJ;AAAA,OACF;AAAA,IACF,CAAA;AAAA,IACA,qBAAA,EAAuB,CACrB,KAAA,EACA,OAAA,KAEA,8BAAA;AAAA,MAIE,cAAA;AAAA,MACA,EAAE,QAAA,EAAU,0BAAA,EAA4B,MAAA,EAAQ,MAAA,EAAO;AAAA,MACvD,KAAA;AAAA,MACA;AAAA,KACF;AAAA,IACF,WAAA,EAAa,CACX,KAAA,EACA,OAAA,KAEA,8BAAA;AAAA,MAIE,cAAA;AAAA,MACA,EAAE,QAAA,EAAU,eAAA,EAAiB,MAAA,EAAQ,MAAA,EAAO;AAAA,MAC5C,KAAA;AAAA,MACA;AAAA,KACF;AAAA,IACF,cAAA,EAAgB,CACd,KAAA,EACA,OAAA,KAEA,8BAAA;AAAA,MAIE,cAAA;AAAA,MACA,EAAE,QAAA,EAAU,kBAAA,EAAoB,MAAA,EAAQ,MAAA,EAAO;AAAA,MAC/C,KAAA;AAAA,MACA;AAAA,KACF;AAAA,IACF,UAAA,EAAY,CACV,KAAA,EACA,OAAA,KAEA,8BAAA;AAAA,MAIE,cAAA;AAAA,MACA,EAAE,QAAA,EAAU,cAAA,EAAgB,MAAA,EAAQ,MAAA,EAAO;AAAA,MAC3C,KAAA;AAAA,MACA;AAAA,KACF;AAAA,IACF,UAAA;AAAA,IACA,kBAAA;AAAA,IACA,UAAA,EAAY,CACV,KAAA,EACA,OAAA,KAEA,8BAAA;AAAA,MAIE,cAAA;AAAA,MACA,EAAE,QAAA,EAAU,cAAA,EAAgB,MAAA,EAAQ,MAAA,EAAO;AAAA,MAC3C,KAAA;AAAA,MACA;AAAA,KACF;AAAA,IACF,YAAA,EAAc,CAAC,KAAA,EAAwC,OAAA,KACrD,6BAAA;AAAA,MACE,cAAA;AAAA,MACA,EAAE,QAAA,EAAU,gBAAA,EAAkB,MAAA,EAAQ,KAAA,EAAM;AAAA,MAC5C,KAAA;AAAA,MACA;AAAA,KACF;AAAA,IACF,aAAA,EAAe,CACb,KAAA,EACA,OAAA,KAEA,8BAAA;AAAA,MAIE,cAAA;AAAA,MACA,EAAE,QAAA,EAAU,iBAAA,EAAmB,MAAA,EAAQ,MAAA,EAAO;AAAA,MAC9C,KAAA;AAAA,MACA;AAAA,KACF;AAAA,IACF,YAAA,EAAc,CACZ,KAAA,EACA,OAAA,KAEA,8BAAA;AAAA,MAIE,cAAA;AAAA,MACA,EAAE,QAAA,EAAU,gBAAA,EAAkB,MAAA,EAAQ,MAAA,EAAO;AAAA,MAC7C,KAAA;AAAA,MACA;AAAA,KACF;AAAA,IACF,cAAA,EAAgB,CACd,KAAA,EACA,OAAA,KAEA,8BAAA;AAAA,MAIE,cAAA;AAAA,MACA,EAAE,QAAA,EAAU,mBAAA,EAAqB,MAAA,EAAQ,MAAA,EAAO;AAAA,MAChD,KAAA;AAAA,MACA;AAAA,KACF;AAAA,IACF,YAAA;AAAA,IACA;AAAA,GACF;AACF;;;AC7xDA,IAAM,OAAA,GAAU,IAAA;AAChB,IAAM,UAAA,GAAa,cAAA;AAEnB,eAAsB,2BACpB,MAAA,EACA,MAAA,EACA,YACA,IAAA,EACA,aAAA,EACA,QACA,UAAA,EACmB;AACnB,EAAA,IAAI,MAAA,CAAO,MAAA,IAAU,MAAA,IAAU,MAAA,CAAO,WAAW,MAAA,EAAQ;AACvD,IAAA,MAAM,IAAI,KAAA;AAAA,MACR,CAAA,mEAAA,EAAsE,MAAA,CAAO,MAAM,CAAA,qBAAA,EAAwB,MAAM,CAAA;AAAA,KACnH;AAAA,EACF;AACA,EAAA,MAAM,MAAA,GAAS,wBAAA,CAAyB,MAAA,EAAQ,MAAA,EAAQ,UAAU,CAAA;AAClE,EAAA,MAAM,KAAA,GAAQ,MAAM,iBAAA,CAAkB,IAAI,CAAA;AAC1C,EAAA,MAAM,WAAA,GAAc,MAAM,SAAA,CAAU,KAAK,CAAA;AACzC,EAAA,MAAM,OAAA,GAAU,IAAI,OAAA,CAAQ,aAAa,CAAA;AACzC,EAAA,IAAI,UAAA,CAAW,IAAI,CAAA,IAAK,IAAA,CAAK,QAAQ,CAAC,OAAA,CAAQ,GAAA,CAAI,cAAc,CAAA,EAAG;AACjE,IAAA,OAAA,CAAQ,GAAA,CAAI,cAAA,EAAgB,IAAA,CAAK,IAAI,CAAA;AAAA,EACvC;AAEA,EAAA,MAAM,SAAS,MAAM,uBAAA,CAAwB,MAAA,EAAQ,MAAA,EAAQ,SAAS,WAAW,CAAA;AACjF,EAAA,IAAI,OAAO,mBAAmB,WAAA,EAAa;AACzC,IAAA,OAAO,WAAW,MAAA,CAAO,QAAA,IAAY,MAAA,EAAQ,IAAA,EAAM,QAAQ,UAAU,CAAA;AAAA,EACvE;AAEA,EAAA,UAAA,CAAW,EAAE,MAAA,EAAQ,CAAA,EAAG,CAAA;AACxB,EAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,MAAA,EAAQ;AAAA,IACnC,MAAA,EAAQ,KAAA;AAAA,IACR,SAAS,MAAA,CAAO,cAAA;AAAA,IAChB,IAAA;AAAA,IACA;AAAA,GACD,CAAA;AACD,EAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,8CAAA,EAAiD,QAAA,CAAS,MAAM,CAAA,CAAE,CAAA;AAAA,EACpF;AACA,EAAA,UAAA,CAAW,EAAE,MAAA,EAAQ,KAAA,CAAM,UAAA,EAAY,CAAA;AACvC,EAAA,OAAO,QAAA;AACT;AAEA,SAAS,wBAAA,CACP,MAAA,EACA,MAAA,EACA,UAAA,EACK;AACL,EAAA,MAAM,cAAA,GAAiB,OAAO,MAAA,IAAU,MAAA;AACxC,EAAA,IAAI,CAAC,cAAA,EAAgB,IAAA,EAAK,EAAG;AAC3B,IAAA,MAAM,IAAI,KAAA;AAAA,MACR;AAAA,KACF;AAAA,EACF;AACA,EAAA,IAAI,CAAC,UAAA,CAAW,IAAA,EAAK,EAAG;AACtB,IAAA,MAAM,IAAI,MAAM,+DAA+D,CAAA;AAAA,EACjF;AAEA,EAAA,IAAI,QAAA;AACJ,EAAA,IAAI;AACF,IAAA,QAAA,GAAW,IAAI,GAAA,CAAI,MAAA,CAAO,QAAQ,CAAA;AAAA,EACpC,SAAS,KAAA,EAAO;AACd,IAAA,MAAM,IAAI,KAAA;AAAA,MACR,wEAAwE,KAAA,YAAiB,KAAA,GAAQ,MAAM,OAAA,GAAU,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA,KAChI;AAAA,EACF;AACA,EAAA,IAAI,QAAA,CAAS,MAAA,IAAU,QAAA,CAAS,IAAA,EAAM;AACpC,IAAA,MAAM,IAAI,MAAM,kFAAkF,CAAA;AAAA,EACpG;AAEA,EAAA,MAAM,YAAA,GAAe,QAAA,CAAS,QAAA,CAAS,OAAA,CAAQ,QAAQ,EAAE,CAAA;AACzD,EAAA,MAAM,SAAA,GAAY,MAAA,CAAO,cAAA,KAAmB,KAAA,GACxC,CAAC,YAAA,EAAc,UAAU,CAAA,GACzB,CAAC,YAAA,EAAc,cAAA,EAAgB,UAAU,CAAA;AAC7C,EAAA,IAAI,MAAA,CAAO,mBAAmB,KAAA,EAAO;AACnC,IAAA,QAAA,CAAS,QAAA,GAAW,CAAA,EAAG,cAAc,CAAA,CAAA,EAAI,SAAS,QAAQ,CAAA,CAAA;AAAA,EAC5D;AACA,EAAA,QAAA,CAAS,QAAA,GAAW,UACjB,MAAA,CAAO,OAAO,EACd,OAAA,CAAQ,CAAA,IAAA,KAAQ,KAAK,KAAA,CAAM,GAAG,CAAC,CAAA,CAC/B,GAAA,CAAI,SAAS,CAAA,CACb,IAAA,CAAK,GAAG,CAAA,CACR,OAAA,CAAQ,WAAW,KAAK,CAAA;AAC3B,EAAA,OAAO,QAAA;AACT;AAEA,eAAe,uBAAA,CACb,MAAA,EACA,MAAA,EACA,YAAA,EACA,WAAA,EACqD;AACrD,EAAA,MAAM,WAAA,GAAc,MAAA,CAAO,WAAA,CAAY,IAAA,EAAK;AAC5C,EAAA,MAAM,eAAA,GAAkB,MAAA,CAAO,eAAA,CAAgB,IAAA,EAAK;AACpD,EAAA,IAAI,CAAC,WAAA,IAAe,CAAC,eAAA,EAAiB;AACpC,IAAA,MAAM,IAAI,KAAA;AAAA,MACR;AAAA,KACF;AAAA,EACF;AAEA,EAAA,MAAM,GAAA,uBAAU,IAAA,EAAK;AACrB,EAAA,MAAM,OAAA,GAAU,cAAc,GAAG,CAAA;AACjC,EAAA,MAAM,SAAA,GAAY,OAAA,CAAQ,KAAA,CAAM,CAAA,EAAG,CAAC,CAAA;AACpC,EAAA,MAAM,MAAA,GAAS,MAAA,CAAO,MAAA,EAAQ,IAAA,EAAK,IAAK,MAAA;AACxC,EAAA,MAAM,UAAkC,EAAC;AACzC,EAAA,YAAA,CAAa,OAAA,CAAQ,CAAC,KAAA,EAAO,GAAA,KAAQ;AACnC,IAAA,IAAI,IAAI,WAAA,EAAY,KAAM,mBAAmB,GAAA,CAAI,WAAA,OAAkB,MAAA,EAAQ;AACzE,MAAA,OAAA,CAAQ,GAAA,CAAI,aAAa,CAAA,GAAI,MAAM,IAAA,EAAK,CAAE,OAAA,CAAQ,MAAA,EAAQ,GAAG,CAAA;AAAA,IAC/D;AAAA,EACF,CAAC,CAAA;AACD,EAAA,OAAA,CAAQ,sBAAsB,CAAA,GAAI,WAAA;AAClC,EAAA,OAAA,CAAQ,YAAY,CAAA,GAAI,OAAA;AACxB,EAAA,IAAI,MAAA,CAAO,YAAA,EAAc,IAAA,EAAK,EAAG;AAC/B,IAAA,OAAA,CAAQ,sBAAsB,CAAA,GAAI,MAAA,CAAO,YAAA,CAAa,IAAA,EAAK;AAAA,EAC7D;AAEA,EAAA,MAAM,gBAAA,GAAmB,MAAA,CAAO,IAAA,CAAK,OAAO,EACzC,IAAA,EAAK,CACL,GAAA,CAAI,CAAA,GAAA,KAAO,CAAA,EAAG,GAAG,CAAA,CAAA,EAAI,OAAA,CAAQ,GAAG,CAAC;AAAA,CAAI,CAAA,CACrC,KAAK,EAAE,CAAA;AACV,EAAA,MAAM,aAAA,GAAgB,OAAO,IAAA,CAAK,OAAO,EAAE,IAAA,EAAK,CAAE,KAAK,GAAG,CAAA;AAC1D,EAAA,MAAM,gBAAA,GAAmB;AAAA,IACvB,KAAA;AAAA,IACA,MAAA,CAAO,QAAA;AAAA,IACP,EAAA;AAAA,IACA,CAAA,KAAA,EAAQ,OAAO,IAAI;AAAA,EAAK,gBAAgB,CAAA,CAAA;AAAA,IACxC,QAAQ,aAAa,CAAA,CAAA;AAAA,IACrB;AAAA,GACF,CAAE,KAAK,IAAI,CAAA;AACX,EAAA,MAAM,eAAA,GAAkB,GAAG,SAAS,CAAA,CAAA,EAAI,MAAM,CAAA,CAAA,EAAI,OAAO,IAAI,UAAU,CAAA,CAAA;AACvE,EAAA,MAAM,YAAA,GAAe;AAAA,IACnB,kBAAA;AAAA,IACA,OAAA;AAAA,IACA,eAAA;AAAA,IACA,MAAM,UAAU,gBAAgB;AAAA,GAClC,CAAE,KAAK,IAAI,CAAA;AACX,EAAA,MAAM,UAAU,MAAM,IAAA,CAAK,CAAA,IAAA,EAAO,eAAe,IAAI,SAAS,CAAA;AAC9D,EAAA,MAAM,SAAA,GAAY,MAAM,IAAA,CAAK,OAAA,EAAS,MAAM,CAAA;AAC5C,EAAA,MAAM,UAAA,GAAa,MAAM,IAAA,CAAK,SAAA,EAAW,OAAO,CAAA;AAChD,EAAA,MAAM,UAAA,GAAa,MAAM,IAAA,CAAK,UAAA,EAAY,UAAU,CAAA;AACpD,EAAA,MAAM,SAAA,GAAY,MAAM,OAAA,CAAQ,UAAA,EAAY,YAAY,CAAA;AACxD,EAAA,OAAA,CAAQ,aAAA,GAAgB,+BAA+B,WAAW,CAAA,CAAA,EAAI,eAAe,CAAA,qBAAA,EAAwB,aAAa,eAAe,SAAS,CAAA,CAAA;AAElJ,EAAA,OAAO,EAAE,gBAAgB,OAAA,EAAQ;AACnC;AAEA,eAAe,UAAA,CACb,GAAA,EACA,MAAA,EACA,IAAA,EACA,QACA,UAAA,EACmB;AACnB,EAAA,MAAM,GAAA,GAAM,cAAA;AACZ,EAAA,IAAI,QAAQ,MAAA,EAAW;AACrB,IAAA,OAAO,OAAA,CAAQ,MAAA,CAAO,IAAI,KAAA,CAAM,gFAAgF,CAAC,CAAA;AAAA,EACnH;AACA,EAAA,OAAO,IAAI,OAAA,CAAQ,CAACN,QAAAA,EAAS,MAAA,KAAW;AACtC,IAAA,MAAM,GAAA,GAAM,IAAI,GAAA,EAAI;AACpB,IAAA,MAAM,KAAA,GAAQ,MAAM,GAAA,CAAI,KAAA,EAAM;AAC9B,IAAA,GAAA,CAAI,IAAA,CAAK,OAAO,GAAG,CAAA;AACnB,IAAA,MAAA,CAAO,OAAA,CAAQ,MAAA,CAAO,cAAc,CAAA,CAAE,QAAQ,CAAC,CAAC,GAAA,EAAK,KAAK,CAAA,KAAM,GAAA,CAAI,gBAAA,CAAiB,GAAA,EAAK,KAAK,CAAC,CAAA;AAChG,IAAA,GAAA,CAAI,MAAA,CAAO,aAAa,CAAA,KAAA,KAAS,UAAA,CAAW,EAAE,MAAA,EAAQ,KAAA,CAAM,QAAQ,CAAA;AACpE,IAAA,GAAA,CAAI,SAAS,MAAM;AACjB,MAAA,MAAA,EAAQ,mBAAA,CAAoB,SAAS,KAAK,CAAA;AAC1C,MAAA,IAAI,GAAA,CAAI,MAAA,GAAS,GAAA,IAAO,GAAA,CAAI,UAAU,GAAA,EAAK;AACzC,QAAA,MAAA,CAAO,IAAI,KAAA,CAAM,CAAA,8CAAA,EAAiD,GAAA,CAAI,MAAM,EAAE,CAAC,CAAA;AAC/E,QAAA;AAAA,MACF;AACA,MAAA,UAAA,CAAW,EAAE,MAAA,EAAQ,QAAA,CAAS,IAAI,GAAG,CAAA;AACrC,MAAAA,QAAAA,CAAQ,IAAI,QAAA,CAAS,GAAA,CAAI,QAAA,EAAuD;AAAA,QAC9E,QAAQ,GAAA,CAAI,MAAA;AAAA,QACZ,YAAY,GAAA,CAAI,UAAA;AAAA,QAChB,OAAA,EAAS,eAAA,CAAgB,GAAA,CAAI,qBAAA,EAAuB;AAAA,OACrD,CAAC,CAAA;AAAA,IACJ,CAAA;AACA,IAAA,GAAA,CAAI,UAAU,MAAM;AAClB,MAAA,MAAA,EAAQ,mBAAA,CAAoB,SAAS,KAAK,CAAA;AAC1C,MAAA,MAAA,CAAO,IAAI,KAAA,CAAM,wDAAwD,CAAC,CAAA;AAAA,IAC5E,CAAA;AACA,IAAA,GAAA,CAAI,UAAU,MAAM;AAClB,MAAA,MAAA,EAAQ,mBAAA,CAAoB,SAAS,KAAK,CAAA;AAC1C,MAAA,MAAA,CAAO,IAAI,YAAA,CAAa,gBAAA,EAAkB,YAAY,CAAC,CAAA;AAAA,IACzD,CAAA;AACA,IAAA,IAAI,MAAA,EAAQ;AACV,MAAA,IAAI,OAAO,OAAA,EAAS;AAClB,QAAA,KAAA,EAAM;AACN,QAAA;AAAA,MACF;AACA,MAAA,MAAA,CAAO,iBAAiB,OAAA,EAAS,KAAA,EAAO,EAAE,IAAA,EAAM,MAAM,CAAA;AAAA,IACxD;AACA,IAAA,GAAA,CAAI,KAAK,IAAI,CAAA;AAAA,EACf,CAAC,CAAA;AACH;AAEA,SAAS,WAAW,IAAA,EAA0C;AAC5D,EAAA,OAAO,OAAO,IAAA,KAAS,WAAA,IAAe,IAAA,YAAgB,IAAA;AACxD;AAEA,eAAe,kBAAkB,IAAA,EAAkD;AACjF,EAAA,IAAI,UAAA,CAAW,IAAI,CAAA,EAAG,OAAO,KAAK,WAAA,EAAY;AAC9C,EAAA,IAAI,IAAA,YAAgB,aAAa,OAAO,IAAA;AACxC,EAAA,IAAI,WAAA,CAAY,MAAA,CAAO,IAAI,CAAA,EAAG;AAC5B,IAAA,OAAO,IAAA,CAAK,OAAO,KAAA,CAAM,IAAA,CAAK,YAAY,IAAA,CAAK,UAAA,GAAa,KAAK,UAAU,CAAA;AAAA,EAC7E;AACA,EAAA,MAAM,IAAI,MAAM,+EAA+E,CAAA;AACjG;AAEA,SAAS,SAAS,IAAA,EAAoC;AACpD,EAAA,IAAI,UAAA,CAAW,IAAI,CAAA,EAAG,OAAO,IAAA,CAAK,IAAA;AAClC,EAAA,IAAI,IAAA,YAAgB,WAAA,EAAa,OAAO,IAAA,CAAK,UAAA;AAC7C,EAAA,IAAI,WAAA,CAAY,MAAA,CAAO,IAAI,CAAA,SAAU,IAAA,CAAK,UAAA;AAC1C,EAAA,OAAO,CAAA;AACT;AAEA,SAAS,UAAU,KAAA,EAAuB;AACxC,EAAA,OAAO,mBAAmB,KAAK,CAAA,CAAE,OAAA,CAAQ,UAAA,EAAY,eAAa,CAAA,CAAA,EAAI,SAAA,CAAU,UAAA,CAAW,CAAC,EAAE,QAAA,CAAS,EAAE,CAAA,CAAE,WAAA,EAAa,CAAA,CAAE,CAAA;AAC5H;AAEA,SAAS,cAAc,IAAA,EAAoB;AACzC,EAAA,OAAO,IAAA,CAAK,WAAA,EAAY,CAAE,OAAA,CAAQ,iBAAiB,EAAE,CAAA;AACvD;AAEA,eAAe,UAAU,KAAA,EAA8C;AACrE,EAAA,MAAM,KAAA,GAAQ,OAAO,KAAA,KAAU,QAAA,GAAW,IAAI,WAAA,EAAY,CAAE,MAAA,CAAO,KAAK,CAAA,GAAI,KAAA;AAC5E,EAAA,MAAM,SAAS,MAAM,MAAA,CAAO,MAAA,CAAO,MAAA,CAAO,WAAW,KAAK,CAAA;AAC1D,EAAA,OAAO,KAAA,CAAM,IAAI,UAAA,CAAW,MAAM,CAAC,CAAA;AACrC;AAEA,eAAe,IAAA,CAAK,KAA2B,KAAA,EAAqC;AAClF,EAAA,MAAM,QAAA,GAAW,OAAO,GAAA,KAAQ,QAAA,GAAW,IAAI,WAAA,EAAY,CAAE,MAAA,CAAO,GAAG,CAAA,GAAI,GAAA;AAC3E,EAAA,MAAM,SAAA,GAAY,MAAM,MAAA,CAAO,MAAA,CAAO,SAAA;AAAA,IACpC,KAAA;AAAA,IACA,QAAA;AAAA,IACA,EAAE,IAAA,EAAM,MAAA,EAAQ,IAAA,EAAM,SAAA,EAAU;AAAA,IAChC,KAAA;AAAA,IACA,CAAC,MAAM;AAAA,GACT;AACA,EAAA,OAAO,MAAA,CAAO,MAAA,CAAO,IAAA,CAAK,MAAA,EAAQ,SAAA,EAAW,IAAI,WAAA,EAAY,CAAE,MAAA,CAAO,KAAK,CAAC,CAAA;AAC9E;AAEA,eAAe,OAAA,CAAQ,KAAkB,KAAA,EAAgC;AACvE,EAAA,OAAO,KAAA,CAAM,IAAI,UAAA,CAAW,MAAM,KAAK,GAAA,EAAK,KAAK,CAAC,CAAC,CAAA;AACrD;AAEA,SAAS,MAAM,KAAA,EAA2B;AACxC,EAAA,OAAO,KAAA,CAAM,IAAA,CAAK,KAAA,EAAO,CAAA,IAAA,KAAQ,KAAK,QAAA,CAAS,EAAE,CAAA,CAAE,QAAA,CAAS,CAAA,EAAG,GAAG,CAAC,CAAA,CAAE,KAAK,EAAE,CAAA;AAC9E;AAEA,SAAS,gBAAgB,UAAA,EAA6B;AACpD,EAAA,MAAM,OAAA,GAAU,IAAI,OAAA,EAAQ;AAC5B,EAAA,UAAA,CAAW,MAAK,CAAE,KAAA,CAAM,SAAS,CAAA,CAAE,QAAQ,CAAA,IAAA,KAAQ;AACjD,IAAA,MAAM,SAAA,GAAY,IAAA,CAAK,OAAA,CAAQ,GAAG,CAAA;AAClC,IAAA,IAAI,YAAY,CAAA,EAAG;AACjB,MAAA,OAAA,CAAQ,GAAA,CAAI,IAAA,CAAK,KAAA,CAAM,CAAA,EAAG,SAAS,CAAA,CAAE,IAAA,EAAK,EAAG,IAAA,CAAK,KAAA,CAAM,SAAA,GAAY,CAAC,CAAA,CAAE,MAAM,CAAA;AAAA,IAC/E;AAAA,EACF,CAAC,CAAA;AACD,EAAA,OAAO,OAAA;AACT;;;AC1QO,IAAM,iCAAA,GAAoC,KAAK,IAAA,GAAO;AAEtD,IAAM,iCAAA,GAAoC,IAAI,IAAA,GAAO;AAC5D,IAAM,6BAAA,GAAgC,IAAI,IAAA,GAAO,IAAA;AA4OjD,SAAS,kBAAA,CACP,eACA,YAAA,EACwB;AACxB,EAAA,MAAM,OAAA,GAAkC,EAAE,GAAG,aAAA,EAAc;AAC3D,EAAA,IAAI,QAAQ,YAAY,CAAA,CAAE,OAAA,CAAQ,CAAC,OAAO,GAAA,KAAQ;AAChD,IAAA,OAAA,CAAQ,GAAG,CAAA,GAAI,KAAA;AAAA,EACjB,CAAC,CAAA;AACD,EAAA,OAAO,OAAA;AACT;AAEO,SAAS,uBAAA,CACd,IAAA,EACA,MAAA,GAAkC,IAClC,SAAA,EACyB;AACzB,EAAA,MAAM,eAAA,GAAkB,OACtB,KAAA,EACA,OAAA,EACA,OAAA,KAC2C;AAC3C,IAAA,MAAM,cAAA,GAAiB,OAAA,CAAQ,GAAA,CAAI,CAAC,QAAQ,KAAA,KAAiC;AAC3E,MAAA,MAAM,aAAa,uBAAA,CAAwB,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,SAAS,MAAM,CAAA;AAChF,MAAA,OAAO;AAAA,QACL,MAAA;AAAA,QACA,aAAA,EAAe;AAAA,UACb,OAAO,KAAA,CAAM,KAAA;AAAA,UACb,QAAQ,KAAA,CAAM,MAAA;AAAA,UACd,WAAA,EAAa,UAAA;AAAA,UACb,IAAA,EAAM,KAAA,CAAM,IAAA,IAAQ,MAAA,CAAO,QAAA;AAAA,UAC3B,aAAA,EAAe,KAAA,CAAM,aAAA,IAAiB,MAAA,CAAO,QAAA;AAAA,UAC7C,WAAA,EAAa,KAAA,CAAM,WAAA,IAAe,KAAA,CAAM,UAAA;AAAA,UACxC,SAAA,EAAW,KAAA,CAAM,SAAA,IAAa,MAAA,CAAO,WAAA;AAAA,UACrC,YAAA,EAAc,KAAA,CAAM,YAAA,IAAgB,MAAA,CAAO,WAAA;AAAA,UAC3C,YAAY,MAAA,CAAO,SAAA;AAAA,UACnB,QAAQ,KAAA,CAAM,MAAA;AAAA,UACd,UAAU,KAAA,CAAM,QAAA;AAAA,UAChB,wBAAwB,KAAA,CAAM,sBAAA;AAAA,UAC9B,KAAK,KAAA,CAAM,GAAA;AAAA,UACX,eAAe,KAAA,CAAM,aAAA;AAAA,UACrB,YAAY,KAAA,CAAM,UAAA;AAAA,UAClB,oBAAoB,KAAA,CAAM;AAAA;AAC5B,OACF;AAAA,IACF,CAAC,CAAA;AAED,IAAA,KAAA,CAAM,aAAa,sBAAA,CAAuB,WAAA,EAAa,SAAS,CAAA,EAAG,CAAA,EAAG,CAAC,CAAC,CAAA;AAExE,IAAA,MAAM,UAAA,GACJ,cAAA,CAAe,MAAA,KAAW,CAAA,GACtB,CAAC,MAAM,IAAA,CAAK,sBAAA,CAAuB,cAAA,CAAe,CAAC,CAAA,CAAE,aAAA,EAAe,OAAO,CAAC,CAAA,GAAA,CAC3E,MAAM,IAAA,CAAK,uBAAA,CAAwB,EAAE,KAAA,EAAO,cAAA,CAAe,GAAA,CAAI,CAAAM,QAAAA,KAAWA,QAAAA,CAAQ,aAAa,CAAA,EAAE,EAAG,OAAO,CAAA,EAAG,KAAA;AAErH,IAAA,MAAM,kBAAkB,IAAI,KAAA,CAAM,eAAe,MAAM,CAAA,CAAE,KAAK,CAAC,CAAA;AAC/D,IAAA,MAAM,WAAwC,EAAC;AAE/C,IAAA,KAAA,IAAS,QAAQ,CAAA,EAAG,KAAA,GAAQ,cAAA,CAAe,MAAA,EAAQ,SAAS,CAAA,EAAG;AAC7D,MAAA,MAAMA,QAAAA,GAAU,eAAe,KAAK,CAAA;AACpC,MAAA,MAAM,SAAA,GAAY,WAAW,KAAK,CAAA;AAClC,MAAA,MAAM,iBAAA,GAAoB,CAAC,QAAA,KAAiC;AAC1D,QAAA,eAAA,CAAgB,KAAK,IAAI,QAAA,CAAS,MAAA;AAClC,QAAA,KAAA,CAAM,UAAA,GAAa,sBAAA,CAAuB,WAAA,EAAa,OAAA,EAAS,KAAA,EAAO,SAAS,MAAA,EAAQ,GAAA,CAAI,eAAe,CAAC,CAAC,CAAA;AAAA,MAC/G,CAAA;AACA,MAAA,MAAM,QAAA,GAAW,MAAA,CAAO,YAAA,GACpB,MAAM,0BAAA;AAAA,QACJ,MAAA,CAAO,YAAA;AAAA,QACP,UAAU,MAAA,CAAO,MAAA;AAAA,QACjB,UAAU,MAAA,CAAO,WAAA;AAAA,QACjBA,SAAQ,MAAA,CAAO,MAAA;AAAA,QACf,mBAAmB,SAAA,CAAU,MAAA,CAAO,WAAW,EAAC,EAAG,MAAM,aAAa,CAAA;AAAA,QACtE,OAAA,EAAS,MAAA;AAAA,QACT;AAAA,UAEF,MAAM,aAAA;AAAA,QACJ,UAAU,MAAA,CAAO,GAAA;AAAA,QACjB,SAAA,CAAU,MAAA,CAAO,OAAA,IAAW,EAAC;AAAA,QAC7BA,QAAAA,CAAQ,MAAA;AAAA,QACR,KAAA;AAAA,QACA,OAAA;AAAA,QACA;AAAA,OACF;AACJ,MAAA,QAAA,CAAS,IAAA,CAAK;AAAA,QACZ,MAAM,SAAA,CAAU,IAAA;AAAA,QAChB,QAAQ,SAAA,CAAU,MAAA;AAAA,QAClB,MAAA,EAAQA,SAAQ,MAAA,CAAO,MAAA;AAAA,QACvB,QAAA,EAAUA,SAAQ,MAAA,CAAO,QAAA;AAAA,QACzB,WAAA,EAAaA,SAAQ,aAAA,CAAc,WAAA;AAAA,QACnC;AAAA,OACD,CAAA;AACD,MAAA,eAAA,CAAgB,KAAK,CAAA,GAAIA,QAAAA,CAAQ,MAAA,CAAO,SAAA;AACxC,MAAA,KAAA,CAAM,UAAA,GAAa,sBAAA,CAAuB,UAAA,EAAY,OAAA,EAAS,KAAA,EAAOA,QAAAA,CAAQ,MAAA,CAAO,SAAA,EAAW,GAAA,CAAI,eAAe,CAAC,CAAC,CAAA;AAAA,IACvH;AAEA,IAAA,OAAO;AAAA,MACL,KAAA,EAAO,QAAA;AAAA,MACP,OAAO,QAAA,CAAS;AAAA,KAClB;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,eAAA,GAA8D,OAAO,KAAA,EAAO,OAAA,KAAY;AAC5F,IAAA,IAAI,CAAC,SAAA,EAAW;AACd,MAAA,MAAM,IAAI,MAAM,sEAAsE,CAAA;AAAA,IACxF;AACA,IAAA,MAAM,OAAA,GAAU,uBAAuB,KAAK,CAAA;AAC5C,IAAA,yBAAA,CAA0B,SAAS,KAAK,CAAA;AACxC,IAAA,MAAM,WAAW,IAAA,CAAK,GAAA;AAAA,MACpB,MAAM,sBAAA,IAA0B,iCAAA;AAAA,MAChC;AAAA,KACF;AAEA,IAAA,KAAA,CAAM,aAAa,sBAAA,CAAuB,WAAA,EAAa,SAAS,CAAA,EAAG,CAAA,EAAG,CAAC,CAAC,CAAA;AAExE,IAAA,MAAM,kBAAkB,IAAI,KAAA,CAAM,QAAQ,MAAM,CAAA,CAAE,KAAK,CAAC,CAAA;AACxD,IAAA,MAAM,WAAwC,EAAC;AAE/C,IAAA,KAAA,IAAS,QAAQ,CAAA,EAAG,KAAA,GAAQ,OAAA,CAAQ,MAAA,EAAQ,SAAS,CAAA,EAAG;AACtD,MAAA,MAAM,MAAA,GAAS,QAAQ,KAAK,CAAA;AAC5B,MAAA,MAAM,aAAa,uBAAA,CAAwB,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,SAAS,MAAM,CAAA;AAChF,MAAA,MAAM,SAAA,GAAY,MAAM,IAAA,CAAK,sBAAA;AAAA,QAC3B;AAAA,UACE,OAAO,KAAA,CAAM,KAAA;AAAA,UACb,QAAQ,KAAA,CAAM,MAAA;AAAA,UACd,WAAA,EAAa,UAAA;AAAA,UACb,IAAA,EAAM,KAAA,CAAM,IAAA,IAAQ,MAAA,CAAO,QAAA;AAAA,UAC3B,aAAA,EAAe,KAAA,CAAM,aAAA,IAAiB,MAAA,CAAO,QAAA;AAAA,UAC7C,WAAA,EAAa,KAAA,CAAM,WAAA,IAAe,KAAA,CAAM,UAAA;AAAA,UACxC,SAAA,EAAW,KAAA,CAAM,SAAA,IAAa,MAAA,CAAO,WAAA;AAAA,UACrC,YAAA,EAAc,KAAA,CAAM,YAAA,IAAgB,MAAA,CAAO,WAAA;AAAA,UAC3C,YAAY,MAAA,CAAO,SAAA;AAAA,UACnB,QAAQ,KAAA,CAAM,MAAA;AAAA,UACd,UAAU,KAAA,CAAM,QAAA;AAAA,UAChB,wBAAwB,KAAA,CAAM,sBAAA;AAAA,UAC9B,KAAK,KAAA,CAAM,GAAA;AAAA,UACX,eAAe,KAAA,CAAM,aAAA;AAAA,UACrB,YAAY,KAAA,CAAM,UAAA;AAAA,UAClB,oBAAoB,KAAA,CAAM;AAAA,SAC5B;AAAA,QACA;AAAA,OACF;AAEA,MAAA,MAAM,MAAA,GAAS,UAAU,IAAA,CAAK,EAAA;AAC9B,MAAA,IAAI,QAAA,GAAW,EAAA;AACf,MAAA,IAAI;AACF,QAAA,MAAM,OAAA,GAAU,MAAM,SAAA,CAAU,MAAA;AAAA,UAC9B;AAAA,YACE,OAAA,EAAS,MAAA;AAAA,YACT,YAAA,EAAc,KAAA,CAAM,YAAA,IAAgB,MAAA,CAAO,WAAA;AAAA,YAC3C,wBAAwB,KAAA,CAAM,sBAAA;AAAA,YAC9B,KAAK,KAAA,CAAM,GAAA;AAAA,YACX,eAAe,KAAA,CAAM,aAAA;AAAA,YACrB,YAAY,KAAA,CAAM,UAAA;AAAA,YAClB,oBAAoB,KAAA,CAAM;AAAA,WAC5B;AAAA,UACA;AAAA,SACF;AACA,QAAA,QAAA,GAAW,eAAA,CAAgB,OAAA,EAAS,CAAC,WAAA,EAAa,UAAU,CAAC,CAAA;AAC7D,QAAA,IAAI,CAAC,QAAA,EAAU;AACb,UAAA,MAAM,IAAI,MAAM,kEAAkE,CAAA;AAAA,QACpF;AAEA,QAAA,MAAM,SAAA,GAAY,KAAK,GAAA,CAAI,CAAA,EAAG,KAAK,IAAA,CAAK,MAAA,CAAO,SAAA,GAAY,QAAQ,CAAC,CAAA;AACpE,QAAA,MAAM,iBAA+D,EAAC;AACtE,QAAA,IAAI,UAAA,GAAa,CAAA;AAEjB,QAAA,KAAA,IAAS,UAAA,GAAa,CAAA,EAAG,UAAA,IAAc,SAAA,EAAW,cAAc,CAAA,EAAG;AACjE,UAAA,MAAM,KAAA,GAAA,CAAS,aAAa,CAAA,IAAK,QAAA;AACjC,UAAA,MAAM,MAAM,IAAA,CAAK,GAAA,CAAI,KAAA,GAAQ,QAAA,EAAU,OAAO,SAAS,CAAA;AACvD,UAAA,MAAM,KAAA,GAAQ,iBAAA,CAAkB,MAAA,CAAO,MAAA,EAAQ,OAAO,GAAG,CAAA;AACzD,UAAA,MAAM,MAAA,GAAS,MAAM,SAAA,CAAU,QAAA;AAAA,YAC7B;AAAA,cACE,OAAA,EAAS,MAAA;AAAA,cACT,SAAA,EAAW,QAAA;AAAA,cACX,WAAA,EAAa;AAAA,aACf;AAAA,YACA;AAAA,WACF;AACA,UAAA,MAAM,OAAA,GAAU,eAAA,CAAgB,MAAA,EAAQ,CAAC,KAAK,CAAC,CAAA;AAC/C,UAAA,IAAI,CAAC,OAAA,EAAS;AACZ,YAAA,MAAM,IAAI,KAAA,CAAM,CAAA,8DAAA,EAAiE,UAAU,CAAA,CAAE,CAAA;AAAA,UAC/F;AACA,UAAA,MAAM,WAAA,GAAc,iBAAiB,MAAM,CAAA;AAC3C,UAAA,MAAM,WAAW,MAAM,aAAA;AAAA,YACrB,OAAA;AAAA,YACA,WAAA;AAAA,YACA;AAAA,cACE,MAAA,EAAQ,KAAA;AAAA,cACR,UAAU,MAAA,CAAO,QAAA;AAAA,cACjB,WAAW,GAAA,GAAM,KAAA;AAAA,cACjB,aAAa,MAAA,CAAO;AAAA,aACtB;AAAA,YACA,KAAA;AAAA,YACA,OAAA;AAAA,YACA,CAAC,QAAA,KAAa;AACZ,cAAA,MAAM,MAAA,GAAS,aAAa,QAAA,CAAS,MAAA;AACrC,cAAA,eAAA,CAAgB,KAAK,CAAA,GAAI,MAAA;AACzB,cAAA,KAAA,CAAM,UAAA;AAAA,gBACJ,uBAAuB,WAAA,EAAa,OAAA,EAAS,OAAO,MAAA,EAAQ,GAAA,CAAI,eAAe,CAAA,EAAG;AAAA,kBAChF,QAAA;AAAA,kBACA,UAAA;AAAA,kBACA;AAAA,iBACD;AAAA,eACH;AAAA,YACF;AAAA,WACF;AACA,UAAA,MAAM,IAAA,GAAO,YAAY,QAAQ,CAAA;AACjC,UAAA,IAAI,CAAC,IAAA,EAAM;AACT,YAAA,MAAM,IAAI,KAAA,CAAM,CAAA,0DAAA,EAA6D,UAAU,CAAA,CAAE,CAAA;AAAA,UAC3F;AACA,UAAA,cAAA,CAAe,IAAA,CAAK,EAAE,WAAA,EAAa,UAAA,EAAY,MAAM,CAAA;AACrD,UAAA,UAAA,GAAa,GAAA;AACb,UAAA,eAAA,CAAgB,KAAK,CAAA,GAAI,UAAA;AACzB,UAAA,KAAA,CAAM,UAAA;AAAA,YACJ,uBAAuB,WAAA,EAAa,OAAA,EAAS,OAAO,UAAA,EAAY,GAAA,CAAI,eAAe,CAAA,EAAG;AAAA,cACpF,QAAA;AAAA,cACA,UAAA;AAAA,cACA;AAAA,aACD;AAAA,WACH;AAAA,QACF;AAEA,QAAA,MAAM,SAAA,GAAY,MAAM,SAAA,CAAU,QAAA;AAAA,UAChC;AAAA,YACE,OAAA,EAAS,MAAA;AAAA,YACT,SAAA,EAAW,QAAA;AAAA,YACX,KAAA,EAAO;AAAA,WACT;AAAA,UACA;AAAA,SACF;AAEA,QAAA,QAAA,CAAS,IAAA,CAAK;AAAA,UACZ,IAAA,EAAM,SAAA,CAAU,IAAA,IAAQ,SAAA,CAAU,IAAA;AAAA,UAClC,QAAQ,SAAA,CAAU,MAAA;AAAA,UAClB,QAAQ,MAAA,CAAO,MAAA;AAAA,UACf,UAAU,MAAA,CAAO,QAAA;AAAA,UACjB,WAAA,EAAa,UAAA;AAAA,UACb,UAAU,IAAI,QAAA,CAAS,MAAM,EAAE,MAAA,EAAQ,KAAK;AAAA,SAC7C,CAAA;AACD,QAAA,eAAA,CAAgB,KAAK,IAAI,MAAA,CAAO,SAAA;AAChC,QAAA,KAAA,CAAM,UAAA;AAAA,UACJ,sBAAA,CAAuB,YAAY,OAAA,EAAS,KAAA,EAAO,OAAO,SAAA,EAAW,GAAA,CAAI,eAAe,CAAA,EAAG;AAAA,YACzF,QAAA;AAAA,YACA,UAAA,EAAY,SAAA;AAAA,YACZ;AAAA,WACD;AAAA,SACH;AAAA,MACF,SAAS,KAAA,EAAO;AACd,QAAA,IAAI,QAAA,EAAU;AACZ,UAAA,IAAI;AACF,YAAA,MAAM,SAAA,CAAU,MAAM,EAAE,OAAA,EAAS,QAAQ,SAAA,EAAW,QAAA,IAAY,OAAO,CAAA;AAAA,UACzE,CAAA,CAAA,MAAQ;AAAA,UAER;AAAA,QACF;AACA,QAAA,MAAM,KAAA;AAAA,MACR;AAAA,IACF;AAEA,IAAA,OAAO;AAAA,MACL,KAAA,EAAO,QAAA;AAAA,MACP,OAAO,QAAA,CAAS;AAAA,KAClB;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,MAAA,GAA4C,OAAO,KAAA,EAAO,OAAA,KAAY;AAC1E,IAAA,MAAM,OAAA,GAAU,uBAAuB,KAAK,CAAA;AAC5C,IAAA,yBAAA,CAA0B,SAAS,KAAK,CAAA;AAExC,IAAA,MAAM,SAAA,GAAY,MAAM,uBAAA,IAA2B,iCAAA;AACnD,IAAA,MAAM,eACJ,OAAA,CAAQ,SAAS,CAAA,IACjB,CAAC,MAAM,cAAA,IACP,CAAC,MAAA,CAAO,YAAA,KACP,MAAM,cAAA,IAAkB,OAAA,CAAQ,KAAK,CAAA,MAAA,KAAU,MAAA,CAAO,aAAa,SAAS,CAAA,CAAA;AAE/E,IAAA,IAAI,YAAA,EAAc;AAChB,MAAA,MAAM,mBAAmB,OAAA,CAAQ,MAAA;AAAA,QAC/B,CAAA,MAAA,KAAU,KAAA,CAAM,cAAA,IAAkB,MAAA,CAAO,SAAA,IAAa;AAAA,OACxD;AACA,MAAA,MAAM,gBAAgB,OAAA,CAAQ,MAAA;AAAA,QAC5B,CAAA,MAAA,KAAU,EAAE,KAAA,CAAM,cAAA,IAAkB,OAAO,SAAA,IAAa,SAAA;AAAA,OAC1D;AAEA,MAAA,IAAI,gBAAA,CAAiB,MAAA,KAAW,OAAA,CAAQ,MAAA,EAAQ;AAC9C,QAAA,OAAO,eAAA,CAAgB,OAAO,OAAO,CAAA;AAAA,MACvC;AAGA,MAAA,MAAM,eAAA,GAAkB,gBAAA,CAAiB,MAAA,GAAS,CAAA,GAC9C,MAAM,eAAA,CAAgB,EAAE,GAAG,KAAA,EAAO,KAAA,EAAO,gBAAA,CAAiB,GAAA,CAAI,CAAA,MAAA,KAAU,MAAA,CAAO,MAAM,CAAA,EAAG,QAAA,EAAU,gBAAA,CAAiB,MAAA,EAAO,EAAG,OAAO,CAAA,GACpI,EAAE,KAAA,EAAO,EAAa,CAAA;AAC1B,MAAA,MAAM,YAAA,GAAe,aAAA,CAAc,MAAA,GAAS,CAAA,GACxC,MAAM,eAAA;AAAA,QACJ,EAAE,GAAG,KAAA,EAAO,KAAA,EAAO,aAAA,CAAc,GAAA,CAAI,CAAA,MAAA,KAAU,MAAA,CAAO,MAAM,CAAA,EAAG,QAAA,EAAU,aAAA,CAAc,MAAA,EAAO;AAAA,QAC9F,aAAA;AAAA,QACA;AAAA,UAEF,EAAE,KAAA,EAAO,EAAa,CAAA;AAC1B,MAAA,MAAM,QAAQ,CAAC,GAAG,gBAAgB,KAAA,EAAO,GAAG,aAAa,KAAK,CAAA;AAC9D,MAAA,OAAO,EAAE,KAAA,EAAO,KAAA,EAAO,KAAA,CAAM,MAAA,EAAO;AAAA,IACtC;AAEA,IAAA,OAAO,eAAA,CAAgB,KAAA,EAAO,OAAA,EAAS,OAAO,CAAA;AAAA,EAChD,CAAA;AAEA,EAAA,MAAM,QAAA,IAAY,CAChB,KAAA,EACA,cAAA,EACA,YAAA,KACmC;AACnC,IAAA,MAAM,EAAE,SAAS,KAAA,EAAO,OAAA,KAAY,qBAAA,CAAsB,KAAA,EAAO,gBAAgB,YAAY,CAAA;AAC7F,IAAA,MAAM,SAAA,GAAY,QAAQ,GAAA,CAAI,CAAA,MAAA,KAAU,KAAK,mBAAA,CAAoB,MAAA,EAAQ,KAAA,EAAO,OAAO,CAAC,CAAA;AACxF,IAAA,OAAO,MAAM,OAAA,CAAQ,KAAK,CAAA,IAAML,SAAAA,CAAS,KAAK,CAAA,IAAK,KAAA,CAAM,OAAA,CAAQ,KAAA,CAAM,OAAO,CAAA,GAC1E,OAAA,CAAQ,IAAI,SAAS,CAAA,GACrB,UAAU,CAAC,CAAA;AAAA,EACjB,CAAA,CAAA;AAEA,EAAA,MAAM,UAAA,IAAc,CAClB,KAAA,EACA,OAAA,KACyE;AACzE,IAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACxB,MAAA,OAAO,OAAA,CAAQ,GAAA,CAAI,KAAA,CAAM,GAAA,CAAI,CAAA,MAAA,KAAU,KAAK,iBAAA,CAAkB,MAAA,EAAQ,OAAO,CAAC,CAAC,CAAA;AAAA,IACjF;AACA,IAAA,OAAO,IAAA,CAAK,iBAAA,CAAkB,KAAA,EAAiB,OAAO,CAAA;AAAA,EACxD,CAAA,CAAA;AAEA,EAAA,OAAO;AAAA,IACL,MAAA;AAAA,IACA,eAAA;AAAA,IACA,QAAA;AAAA,IAEA,IAAA,CAAK,OAAO,OAAA,EAAS;AACnB,MAAA,MAAM,SAAS,kBAAA,CAAmB,KAAA,CAAM,UAAU,EAAA,EAAI,KAAA,EAAO,SAAS,MAAM,CAAA;AAC5E,MAAA,OAAO,IAAA,CAAK,gBAAA;AAAA,QACV;AAAA,UACE,OAAO,KAAA,CAAM,KAAA;AAAA,UACb;AAAA,SACF;AAAA,QACA;AAAA,OACF;AAAA,IACF,CAAA;AAAA,IAEA,MAAA,EAAQ;AAAA,GACV;AACF;AAEO,SAAS,mBACd,IAAA,EACA,KAAA,EAWA,OAAA,EACA,MAAA,GAAkC,EAAC,EAC3B;AACR,EAAA,MAAM,OAAA,GAAU,iBAAA,CAAkB,KAAA,EAAO,OAAA,EAAS,MAAM,CAAA;AACxD,EAAA,MAAM,UAAA,GAAa,KAAA,CAAM,UAAA,IAAc,MAAA,CAAO,UAAA;AAC9C,EAAA,MAAM,SAAS,OAAO,UAAA,KAAe,UAAA,GACjC,UAAA,CAAW,OAAO,CAAA,GAClB,UAAA;AACJ,EAAA,OAAO,eAAA,CAAgB,sBAAsB,MAAA,IAAU,EAAA,EAAI,OAAO,CAAA,EAAG,qBAAA,CAAsB,IAAA,EAAM,OAAO,CAAC,CAAA;AAC3G;AAEA,SAAS,uBAAA,CACP,KAAA,EACA,MAAA,EACA,KAAA,EACA,SACA,MAAA,EACQ;AACR,EAAA,MAAM,WAAA,GAAc,KAAA,CAAM,WAAA,IAAe,KAAA,CAAM,UAAA;AAC/C,EAAA,MAAM,cAAc,KAAA,CAAM,kBAAA;AAC1B,EAAA,MAAM,eAAe,MAAA,CAAO,QAAA;AAC5B,EAAA,MAAM,OAAA,GAAU,iBAAA,CAAkB,KAAA,EAAO,OAAA,EAAS,MAAM,CAAA;AACxD,EAAA,MAAM,GAAA,GAAM,WAAA,GACR,qBAAA,CAAsB,WAAA,EAAa;AAAA,IACjC,GAAG,OAAA;AAAA,IACH,IAAA,EAAM;AAAA,MACJ,GAAG,OAAA,CAAQ,IAAA;AAAA,MACX,KAAA;AAAA,MACA,UAAU,MAAA,CAAO,QAAA;AAAA,MACjB,MAAM,MAAA,CAAO;AAAA;AACf,GACD,IACD,WAAA,IAAe,YAAA;AACnB,EAAA,OAAO,kBAAA,CAAmB,GAAA,EAAK,KAAA,EAAO,OAAA,EAAS,MAAM,CAAA;AACvD;AAEA,SAAS,uBAAuB,KAAA,EAA+D;AAC7F,EAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,KAAA,CAAM,KAAK,CAAA;AACjC,EAAA,IAAI,KAAA,CAAM,WAAW,CAAA,EAAG;AACtB,IAAA,MAAM,IAAI,MAAM,uDAAuD,CAAA;AAAA,EACzE;AACA,EAAA,OAAO,KAAA,CAAM,GAAA,CAAI,CAAC,MAAA,EAAQ,KAAA,KAAU;AAClC,IAAA,MAAM,QAAA,GAAW,MAAM,QAAA,IAAY,UAAA,CAAW,MAAM,CAAA,IAAK,CAAA,KAAA,EAAQ,QAAQ,CAAC,CAAA,CAAA;AAC1E,IAAA,MAAM,SAAA,GAAY,WAAW,MAAM,CAAA;AACnC,IAAA,MAAM,cAAc,KAAA,CAAM,YAAA,IAAgB,KAAA,CAAM,SAAA,IAAa,kBAAkB,MAAM,CAAA;AACrF,IAAA,OAAO;AAAA,MACL,MAAA;AAAA,MACA,QAAA;AAAA,MACA,SAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF,CAAC,CAAA;AACH;AAEA,SAAS,yBAAA,CAA0B,SAA4C,KAAA,EAA2C;AACxH,EAAA,MAAM,QAAA,GAAW,MAAM,QAAA,IAAY,CAAA;AACnC,EAAA,IAAI,OAAA,CAAQ,SAAS,QAAA,EAAU;AAC7B,IAAA,MAAM,IAAI,MAAM,CAAA,2CAAA,EAA8C,QAAQ,QAAQ,QAAA,KAAa,CAAA,GAAI,EAAA,GAAK,GAAG,CAAA,cAAA,CAAgB,CAAA;AAAA,EACzH;AAEA,EAAA,MAAM,gBAAA,GAAmB,KAAA,CAAM,gBAAA,KAC7B,KAAA,CAAM,aAAA,KAAkB,MAAA,GAAY,MAAA,GAAY,IAAA,CAAK,KAAA,CAAM,KAAA,CAAM,aAAA,GAAgB,IAAA,GAAO,IAAI,CAAA,CAAA;AAE9F,EAAA,IAAI,qBAAqB,MAAA,EAAW;AAClC,IAAA,MAAM,WAAW,OAAA,CAAQ,IAAA,CAAK,CAAA,MAAA,KAAU,MAAA,CAAO,YAAY,gBAAgB,CAAA;AAC3E,IAAA,IAAI,QAAA,EAAU;AACZ,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,oCAAA,EAAuC,SAAS,QAAQ,CAAA,eAAA,EAAkB,gBAAgB,CAAA,MAAA,CAAQ,CAAA;AAAA,IACpH;AAAA,EACF;AAEA,EAAA,MAAM,iBAAA,GAAoB,mBAAA,CAAoB,KAAA,CAAM,iBAAA,IAAqB,MAAM,UAAU,CAAA;AACzF,EAAA,IAAI,iBAAA,CAAkB,OAAO,CAAA,EAAG;AAC9B,IAAA,MAAM,OAAA,GAAU,OAAA,CAAQ,IAAA,CAAK,CAAA,MAAA,KAAU,CAAC,iBAAA,CAAkB,GAAA,CAAI,aAAA,CAAc,MAAA,CAAO,QAAQ,CAAC,CAAC,CAAA;AAC7F,IAAA,IAAI,OAAA,EAAS;AACX,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,oCAAA,EAAuC,OAAA,CAAQ,QAAQ,CAAA,0BAAA,CAA4B,CAAA;AAAA,IACrG;AAAA,EACF;AACF;AAEA,eAAe,cACb,GAAA,EACA,aAAA,EACA,MAAA,EACA,KAAA,EACA,SACA,UAAA,EACmB;AACnB,EAAA,MAAM,OAAA,GAAU,IAAI,OAAA,CAAQ,aAAa,CAAA;AACzC,EAAA,IAAI,OAAA,CAAQ,KAAA,CAAM,aAAa,CAAA,CAAE,OAAA,CAAQ,CAAC,KAAA,EAAO,GAAA,KAAQ,OAAA,CAAQ,GAAA,CAAI,GAAA,EAAK,KAAK,CAAC,CAAA;AAChF,EAAA,IAAI,OAAO,WAAA,IAAe,CAAC,OAAA,CAAQ,GAAA,CAAI,cAAc,CAAA,EAAG;AACtD,IAAA,OAAA,CAAQ,GAAA,CAAI,cAAA,EAAgB,MAAA,CAAO,WAAW,CAAA;AAAA,EAChD;AACA,EAAA,IAAI,OAAO,mBAAmB,WAAA,EAAa;AACzC,IAAA,OAAO,oBAAA,CAAqB,GAAA,EAAK,MAAA,EAAQ,OAAA,EAAS,SAAS,UAAU,CAAA;AAAA,EACvE;AACA,EAAA,UAAA,CAAW,EAAE,MAAA,EAAQ,CAAA,EAAG,CAAA;AACxB,EAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,GAAA,EAAK;AAAA,IAChC,MAAA,EAAQ,KAAA;AAAA,IACR,OAAA;AAAA,IACA,MAAM,MAAA,CAAO,MAAA;AAAA,IACb,QAAQ,OAAA,EAAS;AAAA,GAClB,CAAA;AACD,EAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,8CAAA,EAAiD,QAAA,CAAS,MAAM,CAAA,CAAE,CAAA;AAAA,EACpF;AACA,EAAA,UAAA,CAAW,EAAE,MAAA,EAAQ,MAAA,CAAO,SAAA,EAAW,CAAA;AACvC,EAAA,OAAO,QAAA;AACT;AAEA,SAAS,oBAAA,CACP,GAAA,EACA,MAAA,EACA,OAAA,EACA,SACA,UAAA,EACmB;AACnB,EAAA,MAAM,GAAA,GAAM,cAAA;AACZ,EAAA,IAAI,QAAQ,MAAA,EAAW;AACrB,IAAA,OAAO,OAAA,CAAQ,MAAA,CAAO,IAAI,KAAA,CAAM,oEAAoE,CAAC,CAAA;AAAA,EACvG;AACA,EAAA,OAAO,IAAI,OAAA,CAAQ,CAACD,QAAAA,EAAS,MAAA,KAAW;AACtC,IAAA,MAAM,GAAA,GAAM,IAAI,GAAA,EAAI;AACpB,IAAA,MAAM,KAAA,GAAQ,MAAM,GAAA,CAAI,KAAA,EAAM;AAC9B,IAAA,GAAA,CAAI,IAAA,CAAK,OAAO,GAAG,CAAA;AACnB,IAAA,OAAA,CAAQ,OAAA,CAAQ,CAAC,KAAA,EAAO,GAAA,KAAQ,IAAI,gBAAA,CAAiB,GAAA,EAAK,KAAK,CAAC,CAAA;AAChE,IAAA,GAAA,CAAI,MAAA,CAAO,UAAA,GAAa,CAAC,KAAA,KAAyC;AAChE,MAAA,UAAA,CAAW,EAAE,MAAA,EAAQ,KAAA,CAAM,MAAA,EAAQ,CAAA;AAAA,IACrC,CAAA;AACA,IAAA,GAAA,CAAI,SAAS,MAAM;AACjB,MAAA,IAAI,SAAS,MAAA,EAAQ;AACnB,QAAA,OAAA,CAAQ,MAAA,CAAO,mBAAA,CAAoB,OAAA,EAAS,KAAK,CAAA;AAAA,MACnD;AACA,MAAA,IAAI,GAAA,CAAI,MAAA,GAAS,GAAA,IAAO,GAAA,CAAI,UAAU,GAAA,EAAK;AACzC,QAAA,MAAA,CAAO,IAAI,KAAA,CAAM,CAAA,8CAAA,EAAiD,GAAA,CAAI,MAAM,EAAE,CAAC,CAAA;AAC/E,QAAA;AAAA,MACF;AACA,MAAA,UAAA,CAAW,EAAE,MAAA,EAAQ,MAAA,CAAO,SAAA,EAAW,CAAA;AACvC,MAAAA,QAAAA,CAAQ,IAAI,QAAA,CAAS,GAAA,CAAI,QAAA,EAAuD;AAAA,QAC9E,QAAQ,GAAA,CAAI,MAAA;AAAA,QACZ,YAAY,GAAA,CAAI,UAAA;AAAA,QAChB,OAAA,EAASiB,gBAAAA,CAAgB,GAAA,CAAI,qBAAA,EAAuB;AAAA,OACrD,CAAC,CAAA;AAAA,IACJ,CAAA;AACA,IAAA,GAAA,CAAI,UAAU,MAAM;AAClB,MAAA,IAAI,SAAS,MAAA,EAAQ;AACnB,QAAA,OAAA,CAAQ,MAAA,CAAO,mBAAA,CAAoB,OAAA,EAAS,KAAK,CAAA;AAAA,MACnD;AACA,MAAA,MAAA,CAAO,IAAI,KAAA,CAAM,wDAAwD,CAAC,CAAA;AAAA,IAC5E,CAAA;AACA,IAAA,GAAA,CAAI,UAAU,MAAM;AAClB,MAAA,IAAI,SAAS,MAAA,EAAQ;AACnB,QAAA,OAAA,CAAQ,MAAA,CAAO,mBAAA,CAAoB,OAAA,EAAS,KAAK,CAAA;AAAA,MACnD;AACA,MAAA,MAAA,CAAO,IAAI,YAAA,CAAa,gBAAA,EAAkB,YAAY,CAAC,CAAA;AAAA,IACzD,CAAA;AACA,IAAA,IAAI,SAAS,MAAA,EAAQ;AACnB,MAAA,IAAI,OAAA,CAAQ,OAAO,OAAA,EAAS;AAC1B,QAAA,KAAA,EAAM;AACN,QAAA;AAAA,MACF;AACA,MAAA,OAAA,CAAQ,OAAO,gBAAA,CAAiB,OAAA,EAAS,OAAO,EAAE,IAAA,EAAM,MAAM,CAAA;AAAA,IAChE;AACA,IAAA,GAAA,CAAI,IAAA,CAAK,OAAO,MAAM,CAAA;AAAA,EACxB,CAAC,CAAA;AACH;AAEA,SAAS,qBAAA,CACP,KAAA,EACA,cAAA,EACA,YAAA,EAKA;AACA,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,IAAA,OAAO,EAAE,SAAS,CAAC,KAAK,GAAG,KAAA,EAAO,cAAA,EAAsD,SAAS,YAAA,EAAa;AAAA,EAChH;AACA,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACxB,IAAA,OAAO,EAAE,SAAS,CAAC,GAAG,KAAK,CAAA,EAAG,KAAA,EAAO,cAAA,EAAsD,OAAA,EAAS,YAAA,EAAa;AAAA,EACnH;AACA,EAAA,MAAM,aAAA,GAAgB,KAAA;AACtB,EAAA,MAAM,EAAE,MAAA,EAAQ,OAAA,EAAS,GAAG,OAAM,GAAI,aAAA;AACtC,EAAA,OAAO;AAAA,IACL,OAAA,EAAS,OAAA,GAAU,CAAC,GAAG,OAAO,IAAI,MAAA,GAAS,CAAC,MAAM,CAAA,GAAI,EAAC;AAAA,IACvD,KAAA;AAAA,IACA,OAAA,EAAS;AAAA,GACX;AACF;AAEA,SAAS,iBAAA,CACP,KAAA,EAUA,OAAA,EACA,MAAA,EAC0B;AAC1B,EAAA,MAAM,iBAAiB,KAAA,CAAM,cAAA,IAAkB,KAAA,CAAM,eAAA,IAAmB,SAAS,cAAA,IAAkB,MAAA;AACnG,EAAA,MAAM,SAAS,KAAA,CAAM,MAAA,IAAU,KAAA,CAAM,OAAA,IAAW,SAAS,MAAA,IAAU,MAAA;AACnE,EAAA,MAAM,UAAA,GAAa,KAAA,CAAM,UAAA,IAAc,KAAA,CAAM,WAAA,IAAe,MAAA;AAC5D,EAAA,MAAM,IAAA,GAAO;AAAA,IACX,GAAI,MAAA,CAAO,IAAA,IAAQ,EAAC;AAAA,IACpB,GAAI,KAAA,CAAM,IAAA,IAAQ;AAAC,GACrB;AACA,EAAA,IAAI,mBAAmB,MAAA,EAAW;AAChC,IAAA,IAAA,CAAK,cAAA,GAAiB,cAAA;AACtB,IAAA,IAAA,CAAK,eAAA,GAAkB,cAAA;AAAA,EACzB;AACA,EAAA,IAAI,WAAW,MAAA,EAAW;AACxB,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AACd,IAAA,IAAA,CAAK,OAAA,GAAU,MAAA;AAAA,EACjB;AACA,EAAA,IAAI,eAAe,MAAA,EAAW;AAC5B,IAAA,IAAA,CAAK,UAAA,GAAa,UAAA;AAClB,IAAA,IAAA,CAAK,WAAA,GAAc,UAAA;AAAA,EACrB;AACA,EAAA,OAAO;AAAA,IACL,IAAA;AAAA,IACA,GAAA,EAAK;AAAA,MACH,GAAG,cAAA,EAAe;AAAA,MAClB,GAAI,MAAA,CAAO,GAAA,IAAO,EAAC;AAAA,MACnB,GAAI,KAAA,CAAM,GAAA,IAAO;AAAC,KACpB;AAAA,IACA,cAAA;AAAA,IACA,eAAA,EAAiB,cAAA;AAAA,IACjB,MAAA;AAAA,IACA,OAAA,EAAS,MAAA;AAAA,IACT,UAAA;AAAA,IACA,WAAA,EAAa;AAAA,GACf;AACF;AAEA,SAAS,qBAAA,CAAsB,UAAkB,OAAA,EAA2C;AAC1F,EAAA,OAAO,SAAS,OAAA,CAAQ,4BAAA,EAA8B,CAAC,MAAA,EAAQ,YAAgC,UAAA,KAAmC;AAChI,IAAA,MAAM,KAAA,GAAA,CAAS,UAAA,IAAc,UAAA,IAAc,EAAA,EAAI,IAAA,EAAK;AACpD,IAAA,IAAI,CAAC,OAAO,OAAO,EAAA;AACnB,IAAA,MAAM,KAAA,GAAQ,oBAAA,CAAqB,KAAA,EAAO,OAAO,CAAA;AACjD,IAAA,OAAO,UAAU,MAAA,IAAa,KAAA,KAAU,IAAA,GAAO,EAAA,GAAK,OAAO,KAAK,CAAA;AAAA,EAClE,CAAC,CAAA;AACH;AAEA,SAAS,oBAAA,CAAqB,OAAe,OAAA,EAA+D;AAC1G,EAAA,IAAI,KAAA,CAAM,UAAA,CAAW,MAAM,CAAA,EAAG;AAC5B,IAAA,OAAO,OAAA,CAAQ,GAAA,CAAI,KAAA,CAAM,KAAA,CAAM,CAAC,CAAC,CAAA;AAAA,EACnC;AACA,EAAA,IAAI,KAAA,IAAS,QAAQ,IAAA,EAAM;AACzB,IAAA,OAAO,OAAA,CAAQ,KAAK,KAAK,CAAA;AAAA,EAC3B;AACA,EAAA,OAAO,OAAA,CAAQ,IAAI,KAAK,CAAA;AAC1B;AAEA,SAAS,mBAAmB,KAAA,EAAkC;AAC5D,EAAA,OAAO,KAAA,CACJ,GAAA,CAAI,CAAA,IAAA,KAAQ,IAAA,CAAK,MAAK,CAAE,OAAA,CAAQ,YAAA,EAAc,EAAE,CAAC,CAAA,CACjD,MAAA,CAAO,OAAO,CAAA,CACd,KAAK,GAAG,CAAA;AACb;AAEA,SAAS,QAAQ,KAAA,EAA2E;AAC1F,EAAA,IAAI,cAAA,CAAe,KAAK,CAAA,EAAG,OAAO,CAAC,KAAK,CAAA;AACxC,EAAA,OAAO,KAAA,CAAM,KAAK,KAAK,CAAA;AACzB;AAEA,SAAS,eAAe,KAAA,EAAoD;AAC1E,EAAA,OAAO,KAAA,YAAiB,IAAA,IAAQ,KAAA,YAAiB,WAAA,IAAe,KAAA,YAAiB,UAAA;AACnF;AAEA,SAAS,WAAW,MAAA,EAAuD;AACzE,EAAA,OAAOhB,SAAAA,CAAS,MAAM,CAAA,IAAK,OAAO,OAAO,IAAA,KAAS,QAAA,IAAY,MAAA,CAAO,IAAA,CAAK,IAAA,EAAK,GAC3E,MAAA,CAAO,IAAA,CAAK,MAAK,GACjB,MAAA;AACN;AAEA,SAAS,WAAW,MAAA,EAA2C;AAC7D,EAAA,IAAI,MAAA,YAAkB,IAAA,EAAM,OAAO,MAAA,CAAO,IAAA;AAC1C,EAAA,OAAO,MAAA,CAAO,UAAA;AAChB;AAEA,SAAS,kBAAkB,MAAA,EAAuD;AAChF,EAAA,OAAO,MAAA,YAAkB,QAAQ,MAAA,CAAO,IAAA,CAAK,MAAK,GAAI,MAAA,CAAO,IAAA,CAAK,IAAA,EAAK,GAAI,MAAA;AAC7E;AAEA,SAAS,oBAAoB,UAAA,EAAwD;AACnF,EAAA,OAAO,IAAI,GAAA,CAAA,CAAK,UAAA,IAAc,EAAC,EAAG,IAAI,CAAA,SAAA,KAAa,SAAA,CAAU,OAAA,CAAQ,KAAA,EAAO,EAAE,CAAA,CAAE,WAAA,EAAa,CAAA,CAAE,MAAA,CAAO,OAAO,CAAC,CAAA;AAChH;AAEA,SAAS,cAAc,QAAA,EAA0B;AAC/C,EAAA,MAAM,OAAA,GAAU,QAAA,CAAS,WAAA,CAAY,GAAG,CAAA;AACxC,EAAA,OAAO,OAAA,KAAY,KAAK,EAAA,GAAK,QAAA,CAAS,MAAM,OAAA,GAAU,CAAC,EAAE,WAAA,EAAY;AACvE;AAEA,SAAS,uBACP,KAAA,EACA,OAAA,EACA,SAAA,EACA,MAAA,EACA,iBACA,aAAA,EAC6B;AAC7B,EAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,SAAS,CAAA,EAAG,SAAA,IAAa,CAAA;AAC/C,EAAA,MAAM,cAAA,GAAiB,QAAQ,MAAA,CAAO,CAAC,YAAY,MAAA,KAAW,UAAA,GAAa,MAAA,CAAO,SAAA,EAAW,CAAC,CAAA;AAC9F,EAAA,OAAO;AAAA,IACL,KAAA;AAAA,IACA,SAAA;AAAA,IACA,WAAW,OAAA,CAAQ,MAAA;AAAA,IACnB,QAAA,EAAU,OAAA,CAAQ,SAAS,CAAA,EAAG,QAAA,IAAY,EAAA;AAAA,IAC1C,MAAA;AAAA,IACA,KAAA;AAAA,IACA,OAAA,EAAS,QAAQ,CAAA,GAAI,IAAA,CAAK,MAAO,MAAA,GAAS,KAAA,GAAS,GAAG,CAAA,GAAI,GAAA;AAAA,IAC1D,eAAA;AAAA,IACA,cAAA;AAAA,IACA,gBAAA,EAAkB,iBAAiB,CAAA,GAAI,IAAA,CAAK,MAAO,eAAA,GAAkB,cAAA,GAAkB,GAAG,CAAA,GAAI,GAAA;AAAA,IAC9F,GAAI,aAAA,GAAgB,EAAE,SAAA,EAAW,aAAA,KAAkB;AAAC,GACtD;AACF;AAEA,SAAS,iBAAA,CACP,MAAA,EACA,KAAA,EACA,GAAA,EAC2B;AAC3B,EAAA,IAAI,kBAAkB,IAAA,EAAM;AAC1B,IAAA,OAAO,MAAA,CAAO,KAAA,CAAM,KAAA,EAAO,GAAG,CAAA;AAAA,EAChC;AACA,EAAA,IAAI,kBAAkB,WAAA,EAAa;AACjC,IAAA,OAAO,MAAA,CAAO,KAAA,CAAM,KAAA,EAAO,GAAG,CAAA;AAAA,EAChC;AACA,EAAA,OAAO,MAAA,CAAO,KAAA,CAAM,KAAA,EAAO,GAAG,CAAA;AAChC;AAEA,SAAS,eAAA,CAAgB,OAAgB,IAAA,EAAiC;AACxE,EAAA,IAAI,CAACA,SAAAA,CAAS,KAAK,CAAA,EAAG,OAAO,EAAA;AAC7B,EAAA,KAAA,MAAW,OAAO,IAAA,EAAM;AACtB,IAAA,MAAM,SAAA,GAAY,MAAM,GAAG,CAAA;AAC3B,IAAA,IAAI,OAAO,SAAA,KAAc,QAAA,IAAY,SAAA,CAAU,MAAK,EAAG;AACrD,MAAA,OAAO,UAAU,IAAA,EAAK;AAAA,IACxB;AAAA,EACF;AACA,EAAA,OAAO,EAAA;AACT;AAEA,SAAS,iBAAiB,KAAA,EAAwC;AAChE,EAAA,IAAI,CAACA,SAAAA,CAAS,KAAK,CAAA,SAAU,EAAC;AAC9B,EAAA,MAAM,UAAU,KAAA,CAAM,OAAA;AACtB,EAAA,IAAI,CAACA,SAAAA,CAAS,OAAO,CAAA,SAAU,EAAC;AAChC,EAAA,MAAM,SAAiC,EAAC;AACxC,EAAA,KAAA,MAAW,CAAC,GAAA,EAAKiB,YAAW,KAAK,MAAA,CAAO,OAAA,CAAQ,OAAO,CAAA,EAAG;AACxD,IAAA,IAAI,OAAOA,iBAAgB,QAAA,EAAU;AACnC,MAAA,MAAA,CAAO,GAAG,CAAA,GAAIA,YAAAA;AAAA,IAChB;AAAA,EACF;AACA,EAAA,OAAO,MAAA;AACT;AAEA,SAAS,YAAY,QAAA,EAA4B;AAC/C,EAAA,MAAM,IAAA,GAAO,QAAA,CAAS,OAAA,CAAQ,GAAA,CAAI,MAAM,KAAK,QAAA,CAAS,OAAA,CAAQ,GAAA,CAAI,MAAM,CAAA,IAAK,EAAA;AAC7E,EAAA,OAAO,KAAK,IAAA,EAAK;AACnB;AAEA,SAAS,IAAI,MAAA,EAAmC;AAC9C,EAAA,OAAO,OAAO,MAAA,CAAO,CAAC,OAAO,KAAA,KAAU,KAAA,GAAQ,OAAO,CAAC,CAAA;AACzD;AAEA,SAASD,iBAAgB,GAAA,EAAsB;AAC7C,EAAA,MAAM,OAAA,GAAU,IAAI,OAAA,EAAQ;AAC5B,EAAA,KAAA,MAAW,QAAQ,GAAA,CAAI,IAAA,EAAK,CAAE,KAAA,CAAM,SAAS,CAAA,EAAG;AAC9C,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,OAAA,CAAQ,GAAG,CAAA;AAC9B,IAAA,IAAI,UAAU,EAAA,EAAI;AAClB,IAAA,OAAA,CAAQ,GAAA,CAAI,IAAA,CAAK,KAAA,CAAM,CAAA,EAAG,KAAK,CAAA,CAAE,IAAA,EAAK,EAAG,IAAA,CAAK,KAAA,CAAM,KAAA,GAAQ,CAAC,CAAA,CAAE,MAAM,CAAA;AAAA,EACvE;AACA,EAAA,OAAO,OAAA;AACT;AAEA,SAAS,cAAA,GAAmC;AAC1C,EAAA,MAAM,cAAe,UAAA,CAAwD,OAAA;AAC7E,EAAA,OAAO,WAAA,EAAa,OAAO,EAAC;AAC9B;AAEA,SAAShB,UAAS,KAAA,EAAkD;AAClE,EAAA,OAAO,OAAA,CAAQ,KAAK,CAAA,IAAK,OAAO,KAAA,KAAU,QAAA;AAC5C;;;AC99BA,SAAS,YACP,OAAA,EACA,MAAA,EACA,QAAA,EACA,MAAA,EACA,OACA,GAAA,EACO;AACP,EAAA,MAAM,KAAA,GAAQ,IAAI,KAAA,CAAM,OAAO,CAAA;AAS/B,EAAA,KAAA,CAAM,IAAA,GAAO,oBAAA;AACb,EAAA,KAAA,CAAM,IAAA,GAAO,MAAA,KAAW,CAAA,GAAI,eAAA,GAAkB,YAAA;AAC9C,EAAA,KAAA,CAAM,MAAA,GAAS,MAAA;AACf,EAAA,KAAA,CAAM,QAAA,GAAW,QAAA;AACjB,EAAA,KAAA,CAAM,MAAA,GAAS,MAAA;AACf,EAAA,KAAA,CAAM,KAAA,GAAQ,KAAA;AACd,EAAA,KAAA,CAAM,GAAA,GAAM,GAAA;AACZ,EAAA,MAAM,KAAA;AACR;AAoIA,SAASA,UAAS,KAAA,EAAkD;AAClE,EAAA,OAAO,OAAA,CAAQ,KAAK,CAAA,IAAK,OAAO,UAAU,QAAA,IAAY,CAAC,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA;AAC5E;AAEA,SAAS,OAAO,IAAA,EAAyC;AACvD,EAAA,OAAO,IAAA;AACT;AAEA,SAAS,WAAA,CAAY,MAAc,KAAA,EAAwB;AACzD,EAAA,IAAI,CAAC,OAAO,OAAO,IAAA;AACnB,EAAA,MAAM,MAAA,GAAS,IAAI,eAAA,EAAgB;AACnC,EAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,KAAK,CAAA,EAAG;AAChD,IAAA,IAAI,KAAA,KAAU,MAAA,IAAa,KAAA,KAAU,IAAA,IAAQ,UAAU,EAAA,EAAI;AAC3D,IAAA,MAAA,CAAO,GAAA,CAAI,GAAA,EAAK,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA,EAC/B;AACA,EAAA,MAAM,IAAA,GAAO,OAAO,QAAA,EAAS;AAC7B,EAAA,OAAO,IAAA,GAAO,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,IAAI,CAAA,CAAA,GAAK,IAAA;AACpC;AAEA,SAAS,iBAAoB,OAAA,EAAqB;AAChD,EAAA,IAAIA,SAAAA,CAAS,OAAO,CAAA,IAAK,MAAA,IAAU,OAAA,EAAS;AAC1C,IAAA,OAAO,OAAA,CAAQ,IAAA;AAAA,EACjB;AACA,EAAA,OAAO,OAAA;AACT;AAEA,SAAS,WAAW,GAAA,EAAqB;AACvC,EAAA,MAAM,OAAA,GAAU,IAAI,IAAA,EAAK;AACzB,EAAA,IAAI,CAAC,OAAA,IAAW,OAAA,KAAY,WAAA,IAAe,YAAY,MAAA,EAAQ;AAC7D,IAAA,WAAA,CAAY,+BAAA,EAAiC,GAAA,EAAK,sBAAA,EAAwB,QAAQ,CAAA;AAAA,EACpF;AACA,EAAA,OAAO,OAAA;AACT;AAEA,SAAS,cAAA,CAAe,SAAkB,QAAA,EAA0B;AAClE,EAAA,IAAIA,SAAAA,CAAS,OAAO,CAAA,EAAG;AACrB,IAAA,MAAM,OAAA,GAAU,OAAA,CAAQ,OAAA,IAAW,OAAA,CAAQ,SAAS,OAAA,CAAQ,OAAA;AAC5D,IAAA,IAAI,OAAO,YAAY,QAAA,IAAY,OAAA,CAAQ,MAAK,EAAG,OAAO,QAAQ,IAAA,EAAK;AAAA,EACzE;AACA,EAAA,IAAI,OAAO,YAAY,QAAA,IAAY,OAAA,CAAQ,MAAK,EAAG,OAAO,QAAQ,IAAA,EAAK;AACvE,EAAA,OAAO,QAAA;AACT;AAEA,eAAe,mBACb,OAAA,EACA,IAAA,EACA,MAAA,EACA,OAAA,EACA,SACA,OAAA,EACY;AACZ,EAAA,MAAM,eAAA,GAAkB,MAAM,OAAA,CAAQ,kBAAA,CAAmB,OAAO,CAAA;AAChE,EAAA,MAAM,QAAA,GAAW,OAAO,IAAI,CAAA;AAC5B,EAAA,MAAM,UAAU,eAAA,EAAiB,OAAA,GAC7B,8BAA8B,eAAA,CAAgB,OAAO,IACrD,OAAA,CAAQ,OAAA;AACZ,EAAA,MAAM,GAAA,GAAM,qBAAA,CAAsB,OAAA,EAAS,QAAQ,CAAA;AAEnD,EAAA,MAAM,OAAA,GAAU,OAAA,CAAQ,YAAA,CAAa,eAAe,CAAA;AACpD,EAAA,MAAM,IAAA,GAAoB;AAAA,IACxB,MAAA;AAAA,IACA,OAAA;AAAA,IACA,QAAQ,eAAA,EAAiB;AAAA,GAC3B;AACA,EAAA,IAAI,OAAA,KAAY,MAAA,IAAa,MAAA,KAAW,KAAA,EAAO;AAC7C,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA,CAAK,SAAA,CAAU,OAAO,CAAA;AAAA,EACpC;AAEA,EAAA,IAAI,QAAA;AACJ,EAAA,IAAI;AACF,IAAA,QAAA,GAAW,MAAM,KAAA,CAAM,GAAA,EAAK,IAAI,CAAA;AAAA,EAClC,SAAS,KAAA,EAAO;AACd,IAAA,WAAA;AAAA,MACE,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,sBAAA;AAAA,MACzC,CAAA;AAAA,MACA,IAAA;AAAA,MACA,MAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF;AAEA,EAAA,MAAM,OAAA,GAAU,MAAM,QAAA,CAAS,IAAA,EAAK;AACpC,EAAA,IAAI,MAAA,GAAkB,IAAA;AACtB,EAAA,IAAI,OAAA,EAAS;AACX,IAAA,IAAI;AACF,MAAA,MAAA,GAAS,IAAA,CAAK,MAAM,OAAO,CAAA;AAAA,IAC7B,CAAA,CAAA,MAAQ;AACN,MAAA,MAAA,GAAS,OAAA;AAAA,IACX;AAAA,EACF;AAEA,EAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,IAAA,WAAA;AAAA,MACE,cAAA,CAAe,QAAQ,CAAA,OAAA,EAAU,MAAM,IAAI,IAAI,CAAA,SAAA,EAAY,QAAA,CAAS,MAAM,CAAA,CAAA,CAAG,CAAA;AAAA,MAC7E,QAAA,CAAS,MAAA;AAAA,MACT,IAAA;AAAA,MACA,MAAA;AAAA,MACA,MAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF;AAEA,EAAA,OAAO,iBAAoB,MAAM,CAAA;AACnC;AAKO,SAAS,yBAAA,CACd,SACA,cAAA,EAC8B;AAC9B,EAAA,MAAM,eAAA,GAAkB,MAAM,MAAA,CAAO,OAAA,CAAQ,WAAW,EAAE,CAAA,CAAE,OAAA,CAAQ,MAAA,EAAQ,EAAE,CAAA;AAE9E,EAAA,OAAO;AAAA,IACL,MAAM,IAAA,CAAK,KAAA,EAAO,OAAA,EAAS;AACzB,MAAA,MAAM,IAAA,GAAO,YAAY,gBAAA,EAAkB;AAAA,QACzC,KAAA,EAAO,OAAO,KAAA,IAAS,EAAA;AAAA,QACvB,aAAa,KAAA,EAAO,WAAA;AAAA,QACpB,MAAA,EAAQ,OAAO,MAAA,IAAU;AAAA,OAC1B,CAAA;AACD,MAAA,MAAM,IAAA,GAAO,MAAM,kBAAA,CAGhB,OAAA,EAAS,MAAM,KAAA,EAAO,MAAA,EAAW,OAAuB,CAAA;AAE3D,MAAA,MAAM,WAAW,IAAA,EAAM,OAAA,IAAW,EAAC,EAAG,GAAA,CAAI,CAAC,GAAA,MAAS;AAAA,QAClD,GAAG,GAAA;AAAA,QACH,GAAA,EAAK,GAAA,CAAI,GAAA,IAAO,GAAA,CAAI;AAAA,OACtB,CAAE,CAAA;AACF,MAAA,OAAO;AAAA,QACL,OAAA;AAAA,QACA,WAAA,EAAa,MAAM,WAAA,IAAe;AAAA,OACpC;AAAA,IACF,CAAA;AAAA,IAEA,MAAM,MAAA,CAAO,KAAA,EAAO,OAAA,EAAS;AAC3B,MAAA,MAAM,IAAA,GAAO,MAAM,kBAAA,CAIhB,OAAA,EAAS,kBAAkB,MAAA,EAAQ,KAAA,EAAO,OAAuB,CAAA;AACpE,MAAA,OAAO;AAAA,QACL,MAAA,EAAQ,MAAA,CAAO,IAAA,EAAM,MAAA,IAAU,CAAC,CAAA;AAAA,QAChC,WAAA,EAAa,MAAA,CAAO,IAAA,EAAM,WAAA,IAAe,MAAM,WAAW,CAAA;AAAA,QAC1D,MAAA,EAAQ,MAAA,CAAO,IAAA,EAAM,MAAA,IAAU,SAAS;AAAA,OAC1C;AAAA,IACF,CAAA;AAAA,IAEA,MAAM,OAAA,CAAQ,GAAA,EAAK,KAAA,EAAO,OAAA,EAAS;AACjC,MAAA,MAAM,SAAA,GAAY,WAAW,GAAG,CAAA;AAChC,MAAA,MAAM,IAAA,GAAO,CAAA,eAAA,EAAkB,kBAAA,CAAmB,SAAS,CAAC,CAAA,QAAA,CAAA;AAC5D,MAAA,MAAM,IAAA,GAAO,MAAM,kBAAA,CAKhB,OAAA,EAAS,MAAM,MAAA,EAAQ,KAAA,EAAO,OAAuB,CAAA;AACxD,MAAA,OAAO;AAAA,QACL,MAAA,EAAQ,MAAA,CAAO,IAAA,EAAM,MAAA,IAAU,CAAC,CAAA;AAAA,QAChC,WAAA,EAAa,MAAA,CAAO,IAAA,EAAM,WAAA,IAAe,MAAM,WAAW,CAAA;AAAA,QAC1D,MAAA,EAAQ,MAAA,CAAO,IAAA,EAAM,MAAA,IAAU,SAAS,CAAA;AAAA,QACxC,GAAA,EAAK,MAAA,CAAO,IAAA,EAAM,GAAA,IAAO,SAAS;AAAA,OACpC;AAAA,IACF,CAAA;AAAA,IAEA,MAAM,MAAA,CAAO,GAAA,EAAK,OAAA,EAAS;AACzB,MAAA,MAAM,SAAA,GAAY,WAAW,GAAG,CAAA;AAChC,MAAA,MAAM,kBAAA;AAAA,QACJ,OAAA;AAAA,QACA,CAAA,eAAA,EAAkB,kBAAA,CAAmB,SAAS,CAAC,CAAA,CAAA;AAAA,QAC/C,QAAA;AAAA,QACA,MAAA;AAAA,QACA,OAEF,CAAA;AAAA,IACF,CAAA;AAAA,IAEA,WAAA,CAAY,KAAK,OAAA,EAAS;AACxB,MAAA,MAAM,SAAA,GAAY,WAAW,GAAG,CAAA;AAChC,MAAA,MAAM,OAAO,CAAA,EAAG,eAAA,EAAiB,CAAA,eAAA,EAAkB,kBAAA,CAAmB,SAAS,CAAC,CAAA,SAAA,CAAA;AAChF,MAAA,OAAO,OAAA,EAAS,SACZ,CAAA,EAAG,IAAI,YAAY,kBAAA,CAAmB,OAAA,CAAQ,MAAM,CAAC,CAAA,CAAA,GACrD,IAAA;AAAA,IACN,CAAA;AAAA,IAEA,IAAA,EAAM;AAAA,MACJ,MAAM,IAAA,CAAK,KAAA,EAAO,OAAA,EAAS;AACzB,QAAA,MAAM,IAAA,GAAO,WAAA,CAAY,qBAAA,EAAuB,KAAA,IAAS,EAAE,CAAA;AAC3D,QAAA,MAAM,IAAA,GAAO,MAAM,kBAAA,CAEjB,OAAA,EAAS,MAAM,KAAA,EAAO,MAAA,EAAW,OAAuB,CAAA;AAC1D,QAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,IAAI,CAAA,EAAG,OAAO,IAAA;AAChC,QAAA,IAAIA,SAAAA,CAAS,IAAI,CAAA,IAAK,KAAA,CAAM,QAAQ,IAAA,CAAK,IAAI,CAAA,EAAG,OAAO,IAAA,CAAK,IAAA;AAC5D,QAAA,OAAO,EAAC;AAAA,MACV,CAAA;AAAA,MACA,MAAM,GAAA,CAAI,KAAA,EAAO,OAAA,EAAS;AACxB,QAAA,OAAO,kBAAA;AAAA,UACL,OAAA;AAAA,UACA,CAAA,oBAAA,EAAuB,kBAAA,CAAmB,MAAA,CAAO,KAAK,CAAC,CAAC,CAAA,CAAA;AAAA,UACxD,KAAA;AAAA,UACA,MAAA;AAAA,UACA,OAEF,CAAA;AAAA,MACF,CAAA;AAAA,MACA,MAAM,MAAA,CAAO,KAAA,EAAO,OAAA,EAAS;AAC3B,QAAA,OAAO,kBAAA;AAAA,UACL,OAAA;AAAA,UACA,CAAA,oBAAA,EAAuB,kBAAA,CAAmB,MAAA,CAAO,KAAK,CAAC,CAAC,CAAA,OAAA,CAAA;AAAA,UACxD,MAAA;AAAA,UACA,EAAC;AAAA,UACD,OAEF,CAAA;AAAA,MACF,CAAA;AAAA,MACA,MAAM,MAAA,CAAO,KAAA,EAAO,OAAA,EAAS;AAC3B,QAAA,MAAM,kBAAA;AAAA,UACJ,OAAA;AAAA,UACA,CAAA,oBAAA,EAAuB,kBAAA,CAAmB,MAAA,CAAO,KAAK,CAAC,CAAC,CAAA,CAAA;AAAA,UACxD,QAAA;AAAA,UACA,MAAA;AAAA,UACA,OAEF,CAAA;AAAA,MACF,CAAA;AAAA,MACA,MAAM,aAAA,CAAc,KAAA,EAAO,OAAA,EAAS;AAClC,QAAA,MAAM,OAAO,MAAM,kBAAA;AAAA,UACjB,OAAA;AAAA,UACA,CAAA,oBAAA,EAAuB,kBAAA,CAAmB,MAAA,CAAO,KAAK,CAAC,CAAC,CAAA,QAAA,CAAA;AAAA,UACxD,KAAA;AAAA,UACA,MAAA;AAAA,UACA,OAEF,CAAA;AACA,QAAA,OAAO,MAAA,CAAO,IAAA,EAAM,GAAA,IAAO,EAAE,CAAA;AAAA,MAC/B;AAAA,KACF;AAAA,IAEA,SAAA,EAAW;AAAA,MACT,MAAM,KAAK,OAAA,EAAS;AAClB,QAAA,MAAM,IAAA,GAAO,MAAM,kBAAA,CAEjB,OAAA,EAAS,4BAA4B,KAAA,EAAO,MAAA,EAAW,OAAuB,CAAA;AAChF,QAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,IAAI,CAAA,EAAG,OAAO,IAAA;AAChC,QAAA,IAAIA,SAAAA,CAAS,IAAI,CAAA,IAAK,KAAA,CAAM,QAAQ,IAAA,CAAK,SAAS,CAAA,EAAG,OAAO,IAAA,CAAK,SAAA;AACjE,QAAA,OAAO,EAAC;AAAA,MACV,CAAA;AAAA,MACA,MAAM,MAAA,CAAO,KAAA,EAAO,OAAA,EAAS;AAC3B,QAAA,OAAO,kBAAA;AAAA,UACL,OAAA;AAAA,UACA,0BAAA;AAAA,UACA,MAAA;AAAA,UACA,KAAA;AAAA,UACA,OAEF,CAAA;AAAA,MACF,CAAA;AAAA,MACA,MAAM,MAAA,CAAO,EAAA,EAAI,KAAA,EAAO,OAAA,EAAS;AAC/B,QAAA,OAAO,kBAAA;AAAA,UACL,OAAA;AAAA,UACA,CAAA,yBAAA,EAA4B,kBAAA,CAAmB,MAAA,CAAO,EAAE,CAAC,CAAC,CAAA,CAAA;AAAA,UAC1D,OAAA;AAAA,UACA,KAAA;AAAA,UACA,OAEF,CAAA;AAAA,MACF,CAAA;AAAA,MACA,MAAM,MAAA,CAAO,EAAA,EAAI,OAAA,EAAS;AACxB,QAAA,MAAM,kBAAA;AAAA,UACJ,OAAA;AAAA,UACA,CAAA,yBAAA,EAA4B,kBAAA,CAAmB,MAAA,CAAO,EAAE,CAAC,CAAC,CAAA,CAAA;AAAA,UAC1D,QAAA;AAAA,UACA,MAAA;AAAA,UACA,OAEF,CAAA;AAAA,MACF;AAAA;AACF,GACF;AACF;;;AClaO,IAAM,kBAAA,GAAqB;AAAA,EAChC,SAAA,EAAW,SAAA;AAAA,EACX,QAAA,EAAU,UAAA;AAAA,EACV,aAAA,EAAe;AAAA,IACb,GAAA,EAAK,8BAAA;AAAA,IACL,MAAA,EAAQ;AAAA,GACV;AAAA,EACA,OAAA,EAAS;AAAA,IACP;AAAA,MACE,IAAA,EAAM,qBAAA;AAAA,MACN,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,mBAAA;AAAA,MACN,gBAAA,EAAkB,KAAA;AAAA,MAClB,YAAA,EAAc;AAAA,KAChB;AAAA,IACA;AAAA,MACE,IAAA,EAAM,sBAAA;AAAA,MACN,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,mBAAA;AAAA,MACN,WAAA,EAAa,6BAAA;AAAA,MACb,gBAAA,EAAkB,KAAA;AAAA,MAClB,YAAA,EAAc;AAAA,KAChB;AAAA,IACA;AAAA,MACE,IAAA,EAAM,sBAAA;AAAA,MACN,MAAA,EAAQ,OAAA;AAAA,MACR,IAAA,EAAM,wBAAA;AAAA,MACN,UAAA,EAAY,CAAC,IAAI,CAAA;AAAA,MACjB,WAAA,EAAa,6BAAA;AAAA,MACb,gBAAA,EAAkB,KAAA;AAAA,MAClB,YAAA,EAAc;AAAA,KAChB;AAAA,IACA;AAAA,MACE,IAAA,EAAM,sBAAA;AAAA,MACN,MAAA,EAAQ,QAAA;AAAA,MACR,IAAA,EAAM,wBAAA;AAAA,MACN,UAAA,EAAY,CAAC,IAAI,CAAA;AAAA,MACjB,gBAAA,EAAkB,KAAA;AAAA,MAClB,YAAA,EAAc;AAAA,KAChB;AAAA,IACA;AAAA,MACE,IAAA,EAAM,wBAAA;AAAA,MACN,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,sBAAA;AAAA,MACN,gBAAA,EAAkB,KAAA;AAAA,MAClB,YAAA,EAAc;AAAA,KAChB;AAAA,IACA;AAAA,MACE,IAAA,EAAM,aAAA;AAAA,MACN,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,gBAAA;AAAA,MACN,gBAAA,EAAkB,QAAA;AAAA,MAClB,YAAA,EAAc,uBAAA;AAAA,MACd,IAAA,EAAM;AAAA,KACR;AAAA,IACA;AAAA,MACE,IAAA,EAAM,eAAA;AAAA,MACN,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,gBAAA;AAAA,MACN,WAAA,EAAa,4BAAA;AAAA,MACb,gBAAA,EAAkB,QAAA;AAAA,MAClB,YAAA,EAAc;AAAA,KAChB;AAAA,IACA;AAAA,MACE,IAAA,EAAM,gBAAA;AAAA,MACN,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,8BAAA;AAAA,MACN,UAAA,EAAY,CAAC,KAAK,CAAA;AAAA,MAClB,WAAA,EAAa,6BAAA;AAAA,MACb,gBAAA,EAAkB,QAAA;AAAA,MAClB,YAAA,EAAc;AAAA,KAChB;AAAA,IACA;AAAA,MACE,IAAA,EAAM,eAAA;AAAA,MACN,MAAA,EAAQ,QAAA;AAAA,MACR,IAAA,EAAM,sBAAA;AAAA,MACN,UAAA,EAAY,CAAC,KAAK,CAAA;AAAA,MAClB,gBAAA,EAAkB,QAAA;AAAA,MAClB,YAAA,EAAc;AAAA,KAChB;AAAA,IACA;AAAA,MACE,IAAA,EAAM,kBAAA;AAAA,MACN,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,qBAAA;AAAA,MACN,gBAAA,EAAkB,QAAA;AAAA,MAClB,YAAA,EAAc;AAAA,KAChB;AAAA,IACA;AAAA,MACE,IAAA,EAAM,uBAAA;AAAA,MACN,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,0BAAA;AAAA,MACN,gBAAA,EAAkB,QAAA;AAAA,MAClB,YAAA,EAAc;AAAA,KAChB;AAAA,IACA;AAAA,MACE,IAAA,EAAM,wBAAA;AAAA,MACN,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,2BAAA;AAAA,MACN,WAAA,EAAa,+BAAA;AAAA,MACb,gBAAA,EAAkB,QAAA;AAAA,MAClB,YAAA,EAAc;AAAA,KAChB;AAAA,IACA;AAAA,MACE,IAAA,EAAM,yBAAA;AAAA,MACN,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,4BAAA;AAAA,MACN,WAAA,EAAa,gCAAA;AAAA,MACb,gBAAA,EAAkB,QAAA;AAAA,MAClB,YAAA,EAAc;AAAA,KAChB;AAAA,IACA;AAAA,MACE,IAAA,EAAM,kBAAA;AAAA,MACN,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,qBAAA;AAAA,MACN,WAAA,EAAa,yBAAA;AAAA,MACb,gBAAA,EAAkB,QAAA;AAAA,MAClB,YAAA,EAAc;AAAA,KAChB;AAAA,IACA;AAAA,MACE,IAAA,EAAM,gBAAA;AAAA,MACN,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,0BAAA;AAAA,MACN,UAAA,EAAY,CAAC,SAAS,CAAA;AAAA,MACtB,gBAAA,EAAkB,QAAA;AAAA,MAClB,YAAA,EAAc;AAAA,KAChB;AAAA,IACA;AAAA,MACE,IAAA,EAAM,mBAAA;AAAA,MACN,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,8BAAA;AAAA,MACN,UAAA,EAAY,CAAC,SAAS,CAAA;AAAA,MACtB,WAAA,EAAa,CAAC,SAAS,CAAA;AAAA,MACvB,gBAAA,EAAkB,QAAA;AAAA,MAClB,YAAA,EAAc;AAAA,KAChB;AAAA,IACA;AAAA,MACE,IAAA,EAAM,qBAAA;AAAA,MACN,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,gCAAA;AAAA,MACN,UAAA,EAAY,CAAC,SAAS,CAAA;AAAA,MACtB,WAAA,EAAa,CAAC,SAAS,CAAA;AAAA,MACvB,gBAAA,EAAkB,KAAA;AAAA,MAClB,YAAA,EAAc,UAAA;AAAA,MACd,MAAA,EAAQ;AAAA,KACV;AAAA,IACA;AAAA,MACE,IAAA,EAAM,mBAAA;AAAA,MACN,MAAA,EAAQ,OAAA;AAAA,MACR,IAAA,EAAM,0BAAA;AAAA,MACN,UAAA,EAAY,CAAC,SAAS,CAAA;AAAA,MACtB,WAAA,EAAa,0BAAA;AAAA,MACb,gBAAA,EAAkB,QAAA;AAAA,MAClB,YAAA,EAAc;AAAA,KAChB;AAAA,IACA;AAAA,MACE,IAAA,EAAM,mBAAA;AAAA,MACN,MAAA,EAAQ,QAAA;AAAA,MACR,IAAA,EAAM,0BAAA;AAAA,MACN,UAAA,EAAY,CAAC,SAAS,CAAA;AAAA,MACtB,gBAAA,EAAkB,QAAA;AAAA,MAClB,YAAA,EAAc;AAAA,KAChB;AAAA,IACA;AAAA,MACE,IAAA,EAAM,0BAAA;AAAA,MACN,MAAA,EAAQ,OAAA;AAAA,MACR,IAAA,EAAM,qCAAA;AAAA,MACN,UAAA,EAAY,CAAC,SAAS,CAAA;AAAA,MACtB,WAAA,EAAa,iCAAA;AAAA,MACb,gBAAA,EAAkB,QAAA;AAAA,MAClB,YAAA,EAAc;AAAA,KAChB;AAAA,IACA;AAAA,MACE,IAAA,EAAM,2BAAA;AAAA,MACN,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,qCAAA;AAAA,MACN,UAAA,EAAY,CAAC,SAAS,CAAA;AAAA,MACtB,WAAA,EAAa,iCAAA;AAAA,MACb,gBAAA,EAAkB,QAAA;AAAA,MAClB,YAAA,EAAc;AAAA,KAChB;AAAA,IACA;AAAA,MACE,IAAA,EAAM,8BAAA;AAAA,MACN,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,gCAAA;AAAA,MACN,WAAA,EAAa,qCAAA;AAAA,MACb,gBAAA,EAAkB,QAAA;AAAA,MAClB,YAAA,EAAc;AAAA,KAChB;AAAA,IACA;AAAA,MACE,IAAA,EAAM,qBAAA;AAAA,MACN,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,yBAAA;AAAA,MACN,WAAA,EAAa,4BAAA;AAAA,MACb,gBAAA,EAAkB,QAAA;AAAA,MAClB,YAAA,EAAc;AAAA,KAChB;AAAA,IACA;AAAA,MACE,IAAA,EAAM,mBAAA;AAAA,MACN,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,uBAAA;AAAA,MACN,WAAA,EAAa,0BAAA;AAAA,MACb,gBAAA,EAAkB,QAAA;AAAA,MAClB,YAAA,EAAc;AAAA,KAChB;AAAA,IACA;AAAA,MACE,IAAA,EAAM,oBAAA;AAAA,MACN,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,uBAAA;AAAA,MACN,WAAA,EAAa,2BAAA;AAAA,MACb,gBAAA,EAAkB,QAAA;AAAA,MAClB,YAAA,EAAc;AAAA,KAChB;AAAA,IACA;AAAA,MACE,IAAA,EAAM,sBAAA;AAAA,MACN,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,yCAAA;AAAA,MACN,UAAA,EAAY,CAAC,SAAS,CAAA;AAAA,MACtB,WAAA,EAAa,6BAAA;AAAA,MACb,gBAAA,EAAkB,QAAA;AAAA,MAClB,YAAA,EAAc;AAAA,KAChB;AAAA,IACA;AAAA,MACE,IAAA,EAAM,yBAAA;AAAA,MACN,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,iCAAA;AAAA,MACN,UAAA,EAAY,CAAC,SAAS,CAAA;AAAA,MACtB,gBAAA,EAAkB,QAAA;AAAA,MAClB,YAAA,EAAc,6BAAA;AAAA,MACd,MAAA,EAAQ;AAAA,KACV;AAAA,IACA;AAAA,MACE,IAAA,EAAM,iBAAA;AAAA,MACN,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,+BAAA;AAAA,MACN,UAAA,EAAY,CAAC,SAAS,CAAA;AAAA,MACtB,WAAA,EAAa,wBAAA;AAAA,MACb,gBAAA,EAAkB,QAAA;AAAA,MAClB,YAAA,EAAc;AAAA,KAChB;AAAA,IACA;AAAA,MACE,IAAA,EAAM,wBAAA;AAAA,MACN,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,4BAAA;AAAA,MACN,WAAA,EAAa,+BAAA;AAAA,MACb,gBAAA,EAAkB,QAAA;AAAA,MAClB,YAAA,EAAc;AAAA,KAChB;AAAA,IACA;AAAA,MACE,IAAA,EAAM,wBAAA;AAAA,MACN,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,4BAAA;AAAA,MACN,WAAA,EAAa,+BAAA;AAAA,MACb,gBAAA,EAAkB,QAAA;AAAA,MAClB,YAAA,EAAc;AAAA,KAChB;AAAA,IACA;AAAA,MACE,IAAA,EAAM,oBAAA;AAAA,MACN,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,kCAAA;AAAA,MACN,UAAA,EAAY,CAAC,SAAS,CAAA;AAAA,MACtB,gBAAA,EAAkB,QAAA;AAAA,MAClB,YAAA,EAAc;AAAA,KAChB;AAAA,IACA;AAAA,MACE,IAAA,EAAM,kBAAA;AAAA,MACN,MAAA,EAAQ,QAAA;AAAA,MACR,IAAA,EAAM,gCAAA;AAAA,MACN,UAAA,EAAY,CAAC,SAAS,CAAA;AAAA,MACtB,gBAAA,EAAkB,QAAA;AAAA,MAClB,YAAA,EAAc;AAAA,KAChB;AAAA,IACA;AAAA,MACE,IAAA,EAAM,yBAAA;AAAA,MACN,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,qCAAA;AAAA,MACN,UAAA,EAAY,CAAC,SAAS,CAAA;AAAA,MACtB,gBAAA,EAAkB,QAAA;AAAA,MAClB,YAAA,EAAc;AAAA,KAChB;AAAA,IACA;AAAA,MACE,IAAA,EAAM,wBAAA;AAAA,MACN,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,oCAAA;AAAA,MACN,UAAA,EAAY,CAAC,SAAS,CAAA;AAAA,MACtB,WAAA,EAAa,CAAC,SAAS,CAAA;AAAA,MACvB,gBAAA,EAAkB,QAAA;AAAA,MAClB,YAAA,EAAc;AAAA,KAChB;AAAA,IACA;AAAA,MACE,IAAA,EAAM,yBAAA;AAAA,MACN,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,mCAAA;AAAA,MACN,UAAA,EAAY,CAAC,SAAS,CAAA;AAAA,MACtB,gBAAA,EAAkB,QAAA;AAAA,MAClB,YAAA,EAAc;AAAA,KAChB;AAAA,IACA;AAAA,MACE,IAAA,EAAM,2BAAA;AAAA,MACN,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,wDAAA;AAAA,MACN,UAAA,EAAY,CAAC,SAAA,EAAW,YAAY,CAAA;AAAA,MACpC,gBAAA,EAAkB,QAAA;AAAA,MAClB,YAAA,EAAc;AAAA,KAChB;AAAA,IACA;AAAA,MACE,IAAA,EAAM,0BAAA;AAAA,MACN,MAAA,EAAQ,QAAA;AAAA,MACR,IAAA,EAAM,gDAAA;AAAA,MACN,UAAA,EAAY,CAAC,SAAA,EAAW,YAAY,CAAA;AAAA,MACpC,gBAAA,EAAkB,QAAA;AAAA,MAClB,YAAA,EAAc;AAAA,KAChB;AAAA,IACA;AAAA,MACE,IAAA,EAAM,yBAAA;AAAA,MACN,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,oCAAA;AAAA,MACN,UAAA,EAAY,CAAC,SAAS,CAAA;AAAA,MACtB,WAAA,EAAa,CAAC,YAAY,CAAA;AAAA,MAC1B,gBAAA,EAAkB,QAAA;AAAA,MAClB,YAAA,EAAc;AAAA,KAChB;AAAA,IACA;AAAA,MACE,IAAA,EAAM,yBAAA;AAAA,MACN,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,oCAAA;AAAA,MACN,UAAA,EAAY,CAAC,SAAS,CAAA;AAAA,MACtB,WAAA,EAAa,6BAAA;AAAA,MACb,gBAAA,EAAkB,QAAA;AAAA,MAClB,YAAA,EAAc;AAAA,KAChB;AAAA,IACA;AAAA,MACE,IAAA,EAAM,oBAAA;AAAA,MACN,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,uBAAA;AAAA,MACN,WAAA,EAAa,2BAAA;AAAA,MACb,gBAAA,EAAkB,QAAA;AAAA,MAClB,YAAA,EAAc;AAAA,KAChB;AAAA,IACA;AAAA,MACE,IAAA,EAAM,oBAAA;AAAA,MACN,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,uBAAA;AAAA,MACN,WAAA,EAAa,2BAAA;AAAA,MACb,gBAAA,EAAkB,QAAA;AAAA,MAClB,YAAA,EAAc;AAAA,KAChB;AAAA,IACA;AAAA,MACE,IAAA,EAAM,wBAAA;AAAA,MACN,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,2BAAA;AAAA,MACN,WAAA,EAAa,8BAAA;AAAA,MACb,gBAAA,EAAkB,QAAA;AAAA,MAClB,YAAA,EAAc;AAAA,KAChB;AAAA,IACA;AAAA,MACE,IAAA,EAAM,wBAAA;AAAA,MACN,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,4BAAA;AAAA,MACN,WAAA,EAAa,+BAAA;AAAA,MACb,gBAAA,EAAkB,QAAA;AAAA,MAClB,YAAA,EAAc;AAAA,KAChB;AAAA,IACA;AAAA,MACE,IAAA,EAAM,yBAAA;AAAA,MACN,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,6BAAA;AAAA,MACN,WAAA,EAAa,gCAAA;AAAA,MACb,gBAAA,EAAkB,QAAA;AAAA,MAClB,YAAA,EAAc;AAAA,KAChB;AAAA,IACA;AAAA,MACE,IAAA,EAAM,wBAAA;AAAA,MACN,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,4BAAA;AAAA,MACN,WAAA,EAAa,+BAAA;AAAA,MACb,gBAAA,EAAkB,QAAA;AAAA,MAClB,YAAA,EAAc;AAAA,KAChB;AAAA,IACA;AAAA,MACE,IAAA,EAAM,oBAAA;AAAA,MACN,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,kBAAA;AAAA,MACN,WAAA,EAAa,2BAAA;AAAA,MACb,gBAAA,EAAkB,QAAA;AAAA,MAClB,YAAA,EAAc;AAAA,KAChB;AAAA,IACA;AAAA,MACE,IAAA,EAAM,mBAAA;AAAA,MACN,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,uBAAA;AAAA,MACN,WAAA,EAAa,sBAAA;AAAA,MACb,gBAAA,EAAkB,QAAA;AAAA,MAClB,YAAA,EAAc;AAAA,KAChB;AAAA,IACA;AAAA,MACE,IAAA,EAAM,qBAAA;AAAA,MACN,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,yBAAA;AAAA,MACN,WAAA,EAAa,sBAAA;AAAA,MACb,gBAAA,EAAkB,QAAA;AAAA,MAClB,YAAA,EAAc;AAAA,KAChB;AAAA,IACA;AAAA,MACE,IAAA,EAAM,uBAAA;AAAA,MACN,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,2BAAA;AAAA,MACN,WAAA,EAAa,8BAAA;AAAA,MACb,gBAAA,EAAkB,QAAA;AAAA,MAClB,YAAA,EAAc;AAAA,KAChB;AAAA,IACA;AAAA,MACE,IAAA,EAAM,qBAAA;AAAA,MACN,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,yBAAA;AAAA,MACN,WAAA,EAAa,4BAAA;AAAA,MACb,gBAAA,EAAkB,QAAA;AAAA,MAClB,YAAA,EAAc;AAAA,KAChB;AAAA,IACA;AAAA,MACE,IAAA,EAAM,mBAAA;AAAA,MACN,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,uBAAA;AAAA,MACN,WAAA,EAAa,0BAAA;AAAA,MACb,gBAAA,EAAkB,QAAA;AAAA,MAClB,YAAA,EAAc;AAAA,KAChB;AAAA,IACA;AAAA,MACE,IAAA,EAAM,qBAAA;AAAA,MACN,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,sBAAA;AAAA,MACN,WAAA,EAAa,sBAAA;AAAA,MACb,gBAAA,EAAkB,QAAA;AAAA,MAClB,YAAA,EAAc;AAAA,KAChB;AAAA,IACA;AAAA,MACE,IAAA,EAAM,2BAAA;AAAA,MACN,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,6BAAA;AAAA,MACN,WAAA,EAAa,+BAAA;AAAA,MACb,gBAAA,EAAkB,QAAA;AAAA,MAClB,YAAA,EAAc;AAAA,KAChB;AAAA,IACA;AAAA,MACE,IAAA,EAAM,qBAAA;AAAA,MACN,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,yBAAA;AAAA,MACN,WAAA,EAAa,sBAAA;AAAA,MACb,gBAAA,EAAkB,QAAA;AAAA,MAClB,YAAA,EAAc;AAAA,KAChB;AAAA,IACA;AAAA,MACE,IAAA,EAAM,8BAAA;AAAA,MACN,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,6BAAA;AAAA,MACN,WAAA,EAAa,6BAAA;AAAA,MACb,gBAAA,EAAkB,QAAA;AAAA,MAClB,YAAA,EAAc;AAAA,KAChB;AAAA,IACA;AAAA,MACE,IAAA,EAAM,+BAAA;AAAA,MACN,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,8BAAA;AAAA,MACN,WAAA,EAAa,gCAAA;AAAA,MACb,gBAAA,EAAkB,QAAA;AAAA,MAClB,YAAA,EAAc;AAAA,KAChB;AAAA,IACA;AAAA,MACE,IAAA,EAAM,2BAAA;AAAA,MACN,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,2BAAA;AAAA,MACN,WAAA,EAAa,iCAAA;AAAA,MACb,gBAAA,EAAkB,QAAA;AAAA,MAClB,YAAA,EAAc;AAAA,KAChB;AAAA,IACA;AAAA,MACE,IAAA,EAAM,6BAAA;AAAA,MACN,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,mCAAA;AAAA,MACN,WAAA,EAAa,qCAAA;AAAA,MACb,gBAAA,EAAkB,QAAA;AAAA,MAClB,YAAA,EAAc;AAAA,KAChB;AAAA,IACA;AAAA,MACE,IAAA,EAAM,4BAAA;AAAA,MACN,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,kCAAA;AAAA,MACN,WAAA,EAAa,qCAAA;AAAA,MACb,gBAAA,EAAkB,QAAA;AAAA,MAClB,YAAA,EAAc;AAAA,KAChB;AAAA,IACA;AAAA,MACE,IAAA,EAAM,2BAAA;AAAA,MACN,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,yBAAA;AAAA,MACN,WAAA,EAAa,kCAAA;AAAA,MACb,gBAAA,EAAkB,QAAA;AAAA,MAClB,YAAA,EAAc;AAAA,KAChB;AAAA,IACA;AAAA,MACE,IAAA,EAAM,2BAAA;AAAA,MACN,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,gCAAA;AAAA,MACN,WAAA,EAAa,kCAAA;AAAA,MACb,gBAAA,EAAkB,QAAA;AAAA,MAClB,YAAA,EAAc;AAAA,KAChB;AAAA,IACA;AAAA,MACE,IAAA,EAAM,2BAAA;AAAA,MACN,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,gCAAA;AAAA,MACN,WAAA,EAAa,kCAAA;AAAA,MACb,gBAAA,EAAkB,QAAA;AAAA,MAClB,YAAA,EAAc;AAAA,KAChB;AAAA,IACA;AAAA,MACE,IAAA,EAAM,oBAAA;AAAA,MACN,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,uBAAA;AAAA,MACN,WAAA,EAAa,0CAAA;AAAA,MACb,gBAAA,EAAkB,QAAA;AAAA,MAClB,YAAA,EAAc;AAAA,KAChB;AAAA,IACA;AAAA,MACE,IAAA,EAAM,qBAAA;AAAA,MACN,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,yBAAA;AAAA,MACN,WAAA,EAAa,0BAAA;AAAA,MACb,gBAAA,EAAkB,QAAA;AAAA,MAClB,YAAA,EAAc;AAAA,KAChB;AAAA,IACA;AAAA,MACE,IAAA,EAAM,qBAAA;AAAA,MACN,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,yBAAA;AAAA,MACN,WAAA,EAAa,0BAAA;AAAA,MACb,gBAAA,EAAkB,QAAA;AAAA,MAClB,YAAA,EAAc;AAAA,KAChB;AAAA,IACA;AAAA,MACE,IAAA,EAAM,2BAAA;AAAA,MACN,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,4BAAA;AAAA,MACN,WAAA,EAAa,+BAAA;AAAA,MACb,gBAAA,EAAkB,QAAA;AAAA,MAClB,YAAA,EAAc;AAAA,KAChB;AAAA,IACA;AAAA,MACE,IAAA,EAAM,2BAAA;AAAA,MACN,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,gCAAA;AAAA,MACN,WAAA,EAAa,kCAAA;AAAA,MACb,gBAAA,EAAkB,QAAA;AAAA,MAClB,YAAA,EAAc;AAAA,KAChB;AAAA,IACA;AAAA,MACE,IAAA,EAAM,8BAAA;AAAA,MACN,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,mCAAA;AAAA,MACN,WAAA,EAAa,+BAAA;AAAA,MACb,gBAAA,EAAkB,QAAA;AAAA,MAClB,YAAA,EAAc;AAAA,KAChB;AAAA,IACA;AAAA,MACE,IAAA,EAAM,wBAAA;AAAA,MACN,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,yBAAA;AAAA,MACN,WAAA,EAAa,4BAAA;AAAA,MACb,gBAAA,EAAkB,QAAA;AAAA,MAClB,YAAA,EAAc;AAAA,KAChB;AAAA,IACA;AAAA,MACE,IAAA,EAAM,wBAAA;AAAA,MACN,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,6BAAA;AAAA,MACN,WAAA,EAAa,+BAAA;AAAA,MACb,gBAAA,EAAkB,QAAA;AAAA,MAClB,YAAA,EAAc;AAAA,KAChB;AAAA,IACA;AAAA,MACE,IAAA,EAAM,2BAAA;AAAA,MACN,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,gCAAA;AAAA,MACN,WAAA,EAAa,4BAAA;AAAA,MACb,gBAAA,EAAkB,QAAA;AAAA,MAClB,YAAA,EAAc;AAAA,KAChB;AAAA,IACA;AAAA,MACE,IAAA,EAAM,8BAAA;AAAA,MACN,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,gCAAA;AAAA,MACN,WAAA,EAAa,iCAAA;AAAA,MACb,gBAAA,EAAkB,QAAA;AAAA,MAClB,YAAA,EAAc;AAAA,KAChB;AAAA,IACA;AAAA,MACE,IAAA,EAAM,8BAAA;AAAA,MACN,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,oCAAA;AAAA,MACN,WAAA,EAAa,oCAAA;AAAA,MACb,gBAAA,EAAkB,QAAA;AAAA,MAClB,YAAA,EAAc;AAAA,KAChB;AAAA,IACA;AAAA,MACE,IAAA,EAAM,iCAAA;AAAA,MACN,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,uCAAA;AAAA,MACN,WAAA,EAAa,iCAAA;AAAA,MACb,gBAAA,EAAkB,QAAA;AAAA,MAClB,YAAA,EAAc;AAAA,KAChB;AAAA,IACA;AAAA,MACE,IAAA,EAAM,sBAAA;AAAA,MACN,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,uBAAA;AAAA,MACN,WAAA,EAAa,0BAAA;AAAA,MACb,gBAAA,EAAkB,QAAA;AAAA,MAClB,YAAA,EAAc;AAAA,KAChB;AAAA,IACA;AAAA,MACE,IAAA,EAAM,sBAAA;AAAA,MACN,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,2BAAA;AAAA,MACN,WAAA,EAAa,6BAAA;AAAA,MACb,gBAAA,EAAkB,QAAA;AAAA,MAClB,YAAA,EAAc;AAAA,KAChB;AAAA,IACA;AAAA,MACE,IAAA,EAAM,yBAAA;AAAA,MACN,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,8BAAA;AAAA,MACN,WAAA,EAAa,0BAAA;AAAA,MACb,gBAAA,EAAkB,QAAA;AAAA,MAClB,YAAA,EAAc;AAAA,KAChB;AAAA,IACA;AAAA,MACE,IAAA,EAAM,8BAAA;AAAA,MACN,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,2BAAA;AAAA,MACN,WAAA,EAAa,+BAAA;AAAA,MACb,gBAAA,EAAkB,QAAA;AAAA,MAClB,YAAA,EAAc;AAAA,KAChB;AAAA,IACA;AAAA,MACE,IAAA,EAAM,0BAAA;AAAA,MACN,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,8BAAA;AAAA,MACN,WAAA,EAAa,iCAAA;AAAA,MACb,gBAAA,EAAkB,QAAA;AAAA,MAClB,YAAA,EAAc;AAAA,KAChB;AAAA,IACA;AAAA,MACE,IAAA,EAAM,gCAAA;AAAA,MACN,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,6BAAA;AAAA,MACN,WAAA,EAAa,iCAAA;AAAA,MACb,gBAAA,EAAkB,QAAA;AAAA,MAClB,YAAA,EAAc;AAAA,KAChB;AAAA,IACA;AAAA,MACE,IAAA,EAAM,6BAAA;AAAA,MACN,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,0BAAA;AAAA,MACN,WAAA,EAAa,8BAAA;AAAA,MACb,gBAAA,EAAkB,QAAA;AAAA,MAClB,YAAA,EAAc;AAAA,KAChB;AAAA,IACA;AAAA,MACE,IAAA,EAAM,2BAAA;AAAA,MACN,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,+BAAA;AAAA,MACN,WAAA,EAAa,kCAAA;AAAA,MACb,gBAAA,EAAkB,QAAA;AAAA,MAClB,YAAA,EAAc;AAAA,KAChB;AAAA,IACA;AAAA,MACE,IAAA,EAAM,wBAAA;AAAA,MACN,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,qBAAA;AAAA,MACN,WAAA,EAAa,0BAAA;AAAA,MACb,gBAAA,EAAkB,QAAA;AAAA,MAClB,YAAA,EAAc;AAAA;AAChB;AAEJ;AA6nBO,IAAM,sBAAA,GAAyB;AAAA,EACpC,UAAA,EAAY,aAAA;AAAA,EACZ,YAAA,EAAc,eAAA;AAAA,EACd,SAAA,EAAW,YAAA;AAAA,EACX,WAAA,EAAa,cAAA;AAAA,EACb,qBAAA,EAAuB,yBAAA;AAAA,EACvB,YAAA,EAAc;AAChB;AA8BO,IAAM,kBAAA,GAAN,cAAiC,KAAA,CAAM;AAAA,EACnC,IAAA;AAAA,EACA,UAAA;AAAA,EACA,IAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA,MAAA;AAAA,EACA,QAAA;AAAA,EACA,MAAA;AAAA,EACA,SAAA;AAAA,EACA,IAAA;AAAA,EACA,WAAA;AAAA,EACA,GAAA;AAAA,EACA,UAAA;AAAA,EACA,uBAAA;AAAA,EAET,YAAY,KAAA,EAAgC;AAC1C,IAAA,KAAA,CAAM,MAAM,OAAA,EAAS,EAAE,KAAA,EAAO,KAAA,CAAM,OAAO,CAAA;AAC3C,IAAA,IAAA,CAAK,IAAA,GAAO,oBAAA;AACZ,IAAA,IAAA,CAAK,OAAO,KAAA,CAAM,IAAA;AAClB,IAAA,IAAA,CAAK,SAAS,KAAA,CAAM,MAAA;AACpB,IAAA,IAAA,CAAK,WAAW,KAAA,CAAM,QAAA;AACtB,IAAA,IAAA,CAAK,SAAS,KAAA,CAAM,MAAA;AACpB,IAAA,IAAA,CAAK,YAAY,KAAA,CAAM,SAAA;AACvB,IAAA,IAAA,CAAK,OAAO,KAAA,CAAM,IAAA;AAClB,IAAA,IAAA,CAAK,WAAA,GAAc,aAAA,CAAc,KAAA,CAAM,KAAK,CAAA;AAC5C,IAAA,IAAA,CAAK,GAAA,GAAM,MAAM,GAAA,IAAO,IAAA;AACxB,IAAA,IAAA,CAAK,UAAA,GAAa,2BAA2B,KAAK,CAAA;AAClD,IAAA,IAAA,CAAK,0BAA0B,IAAA,CAAK,UAAA;AACpC,IAAA,IAAA,CAAK,UAAA,GAAa,KAAK,UAAA,CAAW,IAAA;AAClC,IAAA,IAAA,CAAK,IAAA,GAAO,KAAK,UAAA,CAAW,IAAA;AAC5B,IAAA,IAAA,CAAK,QAAA,GAAW,KAAK,UAAA,CAAW,QAAA;AAChC,IAAA,IAAA,CAAK,SAAA,GAAY,KAAK,UAAA,CAAW,SAAA;AACjC,IAAA,MAAA,CAAO,cAAA,CAAe,MAAM,yBAAA,EAA2B;AAAA,MACrD,OAAO,IAAA,CAAK,UAAA;AAAA,MACZ,UAAA,EAAY,KAAA;AAAA,MACZ,YAAA,EAAc,KAAA;AAAA,MACd,QAAA,EAAU;AAAA,KACX,CAAA;AAAA,EACH;AAAA,EAEA,SAAA,GAAuC;AACrC,IAAA,OAAO;AAAA,MACL,MAAM,IAAA,CAAK,IAAA;AAAA,MACX,YAAY,IAAA,CAAK,UAAA;AAAA,MACjB,MAAM,IAAA,CAAK,IAAA;AAAA,MACX,UAAU,IAAA,CAAK,QAAA;AAAA,MACf,WAAW,IAAA,CAAK,SAAA;AAAA,MAChB,SAAS,IAAA,CAAK,OAAA;AAAA,MACd,QAAQ,IAAA,CAAK,MAAA;AAAA,MACb,UAAU,IAAA,CAAK,QAAA;AAAA,MACf,QAAQ,IAAA,CAAK,MAAA;AAAA,MACb,WAAW,IAAA,CAAK,SAAA;AAAA,MAChB,MAAM,IAAA,CAAK,IAAA;AAAA,MACX,OAAO,IAAA,CAAK,WAAA;AAAA,MACZ,KAAK,IAAA,CAAK;AAAA,KACZ;AAAA,EACF;AACF;AAuVA,SAASA,WAAS,KAAA,EAAkD;AAClE,EAAA,OAAO,OAAA,CAAQ,KAAK,CAAA,IAAK,OAAO,UAAU,QAAA,IAAY,CAAC,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA;AAC5E;AAEA,SAAS,cAAc,KAAA,EAAoC;AACzD,EAAA,IAAI,KAAA,KAAU,MAAA,IAAa,KAAA,KAAU,IAAA,EAAM,OAAO,MAAA;AAClD,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,EAAU,OAAO,KAAA;AACtC,EAAA,IAAI,KAAA,YAAiB,SAAS,KAAA,CAAM,OAAA,CAAQ,MAAK,EAAG,OAAO,KAAA,CAAM,OAAA,CAAQ,IAAA,EAAK;AAC9E,EAAA,IAAI;AACF,IAAA,OAAO,IAAA,CAAK,UAAU,KAAK,CAAA;AAAA,EAC7B,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,OAAO,KAAK,CAAA;AAAA,EACrB;AACF;AAEA,SAAS,mBAAmB,IAAA,EAAsD;AAChF,EAAA,IAAI,IAAA,KAAS,eAAe,OAAO,aAAA;AACnC,EAAA,IAAI,IAAA,KAAS,iBAAiB,OAAO,eAAA;AACrC,EAAA,IAAI,IAAA,KAAS,cAAA,IAAkB,IAAA,KAAS,yBAAA,EAA2B,OAAO,cAAA;AAC1E,EAAA,IAAI,IAAA,KAAS,cAAc,OAAO,YAAA;AAClC,EAAA,OAAO,eAAA;AACT;AAEA,SAAS,WAAA,CAAY,SAAkB,KAAA,EAA8C;AACnF,EAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,IAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,GAAA,CAAI,IAAI,CAAA;AAC9B,IAAA,IAAI,KAAA,EAAO,IAAA,EAAK,EAAG,OAAO,MAAM,IAAA,EAAK;AAAA,EACvC;AACA,EAAA,OAAO,MAAA;AACT;AAEA,SAAS,4BAAA,CACP,UACA,MAAA,EACQ;AACR,EAAA,MAAM,eAAe,MAAA,CAAO,QAAQ,EAAE,KAAA,CAAM,GAAG,EAAE,CAAC,CAAA;AAClD,EAAA,KAAA,MAAW,SAAA,IAAa,mBAAmB,OAAA,EAAS;AAClD,IAAA,IAAI,SAAA,CAAU,WAAW,MAAA,EAAQ;AACjC,IAAA,MAAM,OAAA,GAAU,CAAA,CAAA,EAAI,SAAA,CAAU,IAAA,CAAK,OAAA,CAAQ,qBAAA,EAAuB,MAAM,CAAA,CAAE,OAAA,CAAQ,gBAAA,EAAkB,OAAO,CAAC,CAAA,CAAA,CAAA;AAC5G,IAAA,IAAI,IAAI,MAAA,CAAO,OAAO,CAAA,CAAE,IAAA,CAAK,YAAY,CAAA,EAAG;AAC1C,MAAA,OAAO,SAAA,CAAU,IAAA;AAAA,IACnB;AAAA,EACF;AACA,EAAA,OAAO,CAAA,QAAA,EAAW,MAAA,CAAO,WAAA,EAAa,CAAA,CAAA;AACxC;AAEA,SAAS,2BAA2B,KAAA,EAAuD;AACzF,EAAA,OAAO,oBAAA;AAAA,IACL;AAAA,MACE,IAAA,EAAM,IAAA;AAAA,MACN,KAAA,EAAO;AAAA,QACL,SAAS,KAAA,CAAM,OAAA;AAAA,QACf,WAAA,EAAa,kBAAA,CAAmB,KAAA,CAAM,IAAI,CAAA;AAAA,QAC1C,QAAQ,KAAA,CAAM,MAAA;AAAA,QACd,GAAA,EAAK,KAAA,CAAM,GAAA,IAAO,KAAA,CAAM,KAAA,IAAS;AAAA,OACnC;AAAA,MACA,YAAA,EAAc;AAAA,QACZ,IAAA,EAAM,kBAAA,CAAmB,KAAA,CAAM,IAAI,CAAA;AAAA,QACnC,SAAS,KAAA,CAAM,OAAA;AAAA,QACf,QAAQ,KAAA,CAAM,MAAA;AAAA,QACd,UAAU,KAAA,CAAM,QAAA;AAAA,QAChB,QAAQ,KAAA,CAAM,MAAA;AAAA,QACd,WAAW,KAAA,CAAM,SAAA;AAAA,QACjB,MAAM,KAAA,CAAM,IAAA;AAAA,QACZ,KAAA,EAAO,aAAA,CAAc,KAAA,CAAM,KAAK;AAAA,OAClC;AAAA,MACA,GAAA,EAAK,KAAA,CAAM,GAAA,IAAO,KAAA,CAAM,KAAA,IAAS,IAAA;AAAA,MACjC,QAAQ,KAAA,CAAM;AAAA,KAChB;AAAA,IACA,EAAE,SAAA,EAAW,4BAAA,CAA6B,MAAM,QAAA,EAAU,KAAA,CAAM,MAAM,CAAA;AAAE,GAC1E;AACF;AAEO,SAAS,yBAAyB,KAAA,EAAoD;AAC3F,EAAA,OAAO,IAAI,mBAAmB,KAAK,CAAA;AACrC;AAEA,eAAe,kBAAA,CACb,KAAA,EACA,OAAA,EACA,cAAA,EACe;AACf,EAAA,MAAM,WAAW,CAAC,cAAA,EAAgB,OAAA,EAAS,OAAA,EAAS,OAAO,CAAA,CAAE,MAAA;AAAA,IAC3D,CAAC,OAAA,KAAkD,OAAO,OAAA,KAAY;AAAA,GACxE;AACA,EAAA,KAAA,MAAW,WAAW,QAAA,EAAU;AAC9B,IAAA,IAAI;AACF,MAAA,MAAM,QAAQ,KAAK,CAAA;AAAA,IACrB,CAAA,CAAA,MAAQ;AAAA,IAER;AAAA,EACF;AACF;AAEA,eAAe,kBAAA,CACb,KAAA,EACA,OAAA,EACA,cAAA,EACgB;AAChB,EAAA,MAAM,KAAA,GAAQ,yBAAyB,KAAK,CAAA;AAC5C,EAAA,MAAM,kBAAA,CAAmB,KAAA,EAAO,OAAA,EAAS,cAAc,CAAA;AACvD,EAAA,MAAM,KAAA;AACR;AAEA,SAASU,kBAAAA,CAAkB,SAAiB,WAAA,EAA4B;AACtE,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,OAAO,EAAE,MAAA,EAAQ,IAAA,EAAiB,WAAA,EAAa,KAAA,EAAM;AAAA,EACvD;AAEA,EAAA,MAAM,0BACJ,WAAA,EAAa,WAAA,EAAY,CAAE,QAAA,CAAS,kBAAkB,CAAA,IAAK,KAAA;AAC7D,EAAA,MAAM,SAAA,GACJ,2BAA2B,OAAA,CAAQ,UAAA,CAAW,GAAG,CAAA,IAAK,OAAA,CAAQ,WAAW,GAAG,CAAA;AAE9E,EAAA,IAAI,CAAC,SAAA,EAAW;AACd,IAAA,OAAO,EAAE,MAAA,EAAQ,OAAA,EAAoB,WAAA,EAAa,KAAA,EAAM;AAAA,EAC1D;AAEA,EAAA,IAAI;AACF,IAAA,OAAO,EAAE,MAAA,EAAQ,IAAA,CAAK,MAAM,OAAO,CAAA,EAAc,aAAa,KAAA,EAAM;AAAA,EACtE,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,EAAE,MAAA,EAAQ,OAAA,EAAoB,WAAA,EAAa,IAAA,EAAK;AAAA,EACzD;AACF;AAEA,SAASQ,YAAAA,CAAY,MAAc,KAAA,EAAwB;AACzD,EAAA,IAAI,CAAC,OAAO,OAAO,IAAA;AACnB,EAAA,MAAM,MAAA,GAAS,IAAI,eAAA,EAAgB;AACnC,EAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,KAAK,CAAA,EAAG;AAChD,IAAA,IAAI,KAAA,KAAU,MAAA,IAAa,KAAA,KAAU,IAAA,EAAM;AAC3C,IAAA,MAAA,CAAO,GAAA,CAAI,GAAA,EAAK,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA,EAC/B;AACA,EAAA,MAAM,SAAA,GAAY,OAAO,QAAA,EAAS;AAClC,EAAA,OAAO,SAAA,GAAY,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,SAAS,CAAA,CAAA,GAAK,IAAA;AAC9C;AAEA,SAAS,YAAY,IAAA,EAAyC;AAC5D,EAAA,OAAO,IAAA;AACT;AAEA,SAAS,0BAAA,CACP,UACA,cAAA,EAC2B;AAC3B,EAAA,IAAI,CAAC,gBAAgB,aAAA,EAAe;AAClC,IAAA,OAAO,QAAA;AAAA,EACT;AAEA,EAAA,MAAM,CAAC,UAAU,SAAS,CAAA,GAAI,OAAO,QAAQ,CAAA,CAAE,KAAA,CAAM,GAAA,EAAK,CAAC,CAAA;AAC3D,EAAA,MAAM,eAAA,GAAkB,QAAA,CAAS,UAAA,CAAW,WAAW,CAAA,GACnD,QAAA,CAAS,KAAA,CAAM,UAAA,CAAW,MAAM,CAAA,GAChC,QAAA,KAAa,UAAA,GACX,GAAA,GACA,QAAA;AACN,EAAA,MAAM,eAAe,eAAA,CAAgB,UAAA,CAAW,GAAG,CAAA,GAAI,eAAA,GAAkB,IAAI,eAAe,CAAA,CAAA;AAC5F,EAAA,OAAO,YAAY,SAAA,GAAY,CAAA,EAAG,YAAY,CAAA,CAAA,EAAI,SAAS,KAAK,YAAY,CAAA;AAC9E;AAEA,SAAS,aAAA,CAAc,IAAA,EAAc,IAAA,EAAc,KAAA,EAAuB;AACxE,EAAA,OAAO,KAAK,OAAA,CAAQ,CAAA,CAAA,EAAI,IAAI,CAAA,CAAA,CAAA,EAAK,kBAAA,CAAmB,KAAK,CAAC,CAAA;AAC5D;AAEA,SAASN,oBAAAA,CAAoB,SAAkB,QAAA,EAA0B;AACvE,EAAA,IAAIZ,UAAAA,CAAS,OAAO,CAAA,EAAG;AACrB,IAAA,MAAM,OAAA,GAAU,OAAA,CAAQ,OAAA,IAAW,OAAA,CAAQ,SAAS,OAAA,CAAQ,OAAA;AAC5D,IAAA,IAAI,OAAO,OAAA,KAAY,QAAA,IAAY,OAAA,CAAQ,MAAK,EAAG;AACjD,MAAA,OAAO,QAAQ,IAAA,EAAK;AAAA,IACtB;AAAA,EACF;AACA,EAAA,IAAI,OAAO,OAAA,KAAY,QAAA,IAAY,OAAA,CAAQ,MAAK,EAAG;AACjD,IAAA,OAAO,QAAQ,IAAA,EAAK;AAAA,EACtB;AACA,EAAA,OAAO,QAAA;AACT;AAEA,SAASmB,kBAAiB,OAAA,EAAsC;AAC9D,EAAA,IAAI,CAACnB,UAAAA,CAAS,OAAO,CAAA,EAAG,OAAO,MAAA;AAC/B,EAAA,MAAM,IAAA,GAAO,OAAA,CAAQ,IAAA,IAAQ,OAAA,CAAQ,UAAA;AACrC,EAAA,OAAO,OAAO,SAAS,QAAA,IAAY,IAAA,CAAK,MAAK,GAAI,IAAA,CAAK,MAAK,GAAI,MAAA;AACjE;AAEA,SAAS,kBAAkB,OAAA,EAAsC;AAC/D,EAAA,IAAI,CAACA,UAAAA,CAAS,OAAO,CAAA,EAAG,OAAO,MAAA;AAC/B,EAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,KAAA,IAAS,OAAA,CAAQ,MAAA;AACvC,EAAA,OAAO,OAAO,UAAU,QAAA,IAAY,KAAA,CAAM,MAAK,GAAI,KAAA,CAAM,MAAK,GAAI,MAAA;AACpE;AAEA,SAAS,uBAAuB,KAAA,EAAwC;AACtE,EAAA,IAAI,oBAAA,CAAqB,KAAK,CAAA,EAAG;AAC/B,IAAA,IAAI,KAAA,CAAM,IAAA,KAAS,aAAA,EAAe,OAAO,aAAA;AACzC,IAAA,IAAI,KAAA,CAAM,IAAA,KAAS,eAAA,EAAiB,OAAO,eAAA;AAC3C,IAAA,IAAI,KAAA,CAAM,IAAA,KAAS,cAAA,EAAgB,OAAO,cAAA;AAC1C,IAAA,IAAI,KAAA,CAAM,IAAA,KAAS,YAAA,EAAc,OAAO,YAAA;AAAA,EAC1C;AACA,EAAA,OAAO,eAAA;AACT;AAEA,eAAe,oBACb,OAAA,EACA,QAAA,EACA,QACA,QAAA,EACA,OAAA,EACA,SACA,cAAA,EACY;AACZ,EAAA,MAAM,eAAA,GAAkB,MAAM,OAAA,CAAQ,kBAAA,CAAmB,OAAO,CAAA;AAChE,EAAA,IAAI,GAAA;AACJ,EAAA,IAAI,OAAA;AACJ,EAAA,IAAI;AACF,IAAA,MAAM,OAAA,GAAU,eAAA,EAAiB,OAAA,GAC7B,6BAAA,CAA8B,eAAA,CAAgB,OAAO,CAAA,GACrD,cAAA,EAAgB,OAAA,GACd,6BAAA,CAA8B,cAAA,CAAe,OAAO,IACpD,OAAA,CAAQ,OAAA;AACd,IAAA,GAAA,GAAM,qBAAA,CAAsB,OAAA,EAAS,0BAAA,CAA2B,QAAA,EAAU,cAAc,CAAC,CAAA;AACzF,IAAA,OAAA,GAAU,OAAA,CAAQ,aAAa,eAAe,CAAA;AAAA,EAChD,SAAS,KAAA,EAAO;AACd,IAAA,OAAO,kBAAA;AAAA,MACL;AAAA,QACE,IAAA,EAAM,uBAAuB,KAAK,CAAA;AAAA,QAClC,OAAA,EAAS,iBAAiB,KAAA,GACtB,KAAA,CAAM,UACN,CAAA,eAAA,EAAkB,MAAM,IAAI,QAAQ,CAAA,kCAAA,CAAA;AAAA,QACxC,MAAA,EAAQ,oBAAA,CAAqB,KAAK,CAAA,GAAI,MAAM,MAAA,GAAS,CAAA;AAAA,QACrD,QAAA;AAAA,QACA,MAAA;AAAA,QACA,GAAA,EAAK,KAAA;AAAA,QACL,SAAA,EAAW,oBAAA,CAAqB,KAAK,CAAA,GAAI,MAAM,SAAA,GAAY,MAAA;AAAA,QAC3D,IAAA,EAAM,oBAAA,CAAqB,KAAK,CAAA,GAAI,MAAM,IAAA,GAAO,MAAA;AAAA,QACjD,KAAA,EAAO;AAAA,OACT;AAAA,MACA,eAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF;AACA,EAAA,MAAM,WAAA,GAA2B;AAAA,IAC/B,MAAA;AAAA,IACA,OAAA;AAAA,IACA,QAAQ,eAAA,EAAiB;AAAA,GAC3B;AACA,EAAA,IAAI,OAAA,KAAY,MAAA,IAAa,MAAA,KAAW,KAAA,EAAO;AAC7C,IAAA,WAAA,CAAY,IAAA,GAAO,IAAA,CAAK,SAAA,CAAU,OAAO,CAAA;AAAA,EAC3C;AAEA,EAAA,IAAI,QAAA;AACJ,EAAA,IAAI;AACF,IAAA,QAAA,GAAW,MAAM,KAAA,CAAM,GAAA,EAAK,WAAW,CAAA;AAAA,EACzC,SAAS,KAAA,EAAO;AACd,IAAA,MAAM,UAAU,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK,CAAA;AACrE,IAAA,OAAO,kBAAA;AAAA,MACL;AAAA,QACE,IAAA,EAAM,eAAA;AAAA,QACN,SAAS,CAAA,2CAAA,EAA8C,MAAM,CAAA,CAAA,EAAI,QAAQ,KAAK,OAAO,CAAA,CAAA;AAAA,QACrF,MAAA,EAAQ,CAAA;AAAA,QACR,QAAA;AAAA,QACA,MAAA;AAAA,QACA,KAAA,EAAO;AAAA,OACT;AAAA,MACA,eAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF;AAEA,EAAA,IAAI,OAAA;AACJ,EAAA,IAAI;AACF,IAAA,OAAA,GAAU,MAAM,SAAS,IAAA,EAAK;AAAA,EAChC,SAAS,KAAA,EAAO;AACd,IAAA,OAAO,kBAAA;AAAA,MACL;AAAA,QACE,IAAA,EAAM,eAAA;AAAA,QACN,OAAA,EAAS,CAAA,eAAA,EAAkB,MAAM,CAAA,CAAA,EAAI,QAAQ,CAAA,gCAAA,CAAA;AAAA,QAC7C,QAAQ,QAAA,CAAS,MAAA;AAAA,QACjB,QAAA;AAAA,QACA,MAAA;AAAA,QACA,SAAA,EAAW,YAAY,QAAA,CAAS,OAAA,EAAS,CAAC,qBAAA,EAAuB,cAAA,EAAgB,YAAY,CAAC,CAAA;AAAA,QAC9F,KAAA,EAAO;AAAA,OACT;AAAA,MACA,eAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF;AACA,EAAA,MAAM,UAAA,GAAaU,mBAAkB,OAAA,IAAW,EAAA,EAAI,SAAS,OAAA,CAAQ,GAAA,CAAI,cAAc,CAAC,CAAA;AACxF,EAAA,MAAM,SAAA,GAAY,YAAY,QAAA,CAAS,OAAA,EAAS,CAAC,qBAAA,EAAuB,cAAA,EAAgB,YAAY,CAAC,CAAA;AACrG,EAAA,IAAI,WAAW,WAAA,EAAa;AAC1B,IAAA,OAAO,kBAAA;AAAA,MACL;AAAA,QACE,IAAA,EAAM,cAAA;AAAA,QACN,OAAA,EAAS,CAAA,eAAA,EAAkB,MAAM,CAAA,CAAA,EAAI,QAAQ,CAAA,wBAAA,CAAA;AAAA,QAC7C,QAAQ,QAAA,CAAS,MAAA;AAAA,QACjB,QAAA;AAAA,QACA,MAAA;AAAA,QACA,SAAA;AAAA,QACA,KAAK,UAAA,CAAW;AAAA,OAClB;AAAA,MACA,eAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF;AAEA,EAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,IAAA,OAAO,kBAAA;AAAA,MACL;AAAA,QACE,IAAA,EAAM,YAAA;AAAA,QACN,OAAA,EAASE,oBAAAA;AAAA,UACP,UAAA,CAAW,MAAA;AAAA,UACX,kBAAkB,MAAM,CAAA,CAAA,EAAI,QAAQ,CAAA,oBAAA,EAAuB,SAAS,MAAM,CAAA;AAAA,SAC5E;AAAA,QACA,QAAQ,QAAA,CAAS,MAAA;AAAA,QACjB,QAAA;AAAA,QACA,MAAA;AAAA,QACA,SAAA;AAAA,QACA,IAAA,EAAMO,iBAAAA,CAAiB,UAAA,CAAW,MAAM,CAAA;AAAA,QACxC,KAAA,EAAO,iBAAA,CAAkB,UAAA,CAAW,MAAM,CAAA;AAAA,QAC1C,KAAK,UAAA,CAAW;AAAA,OAClB;AAAA,MACA,eAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF;AAEA,EAAA,IAAI,aAAa,QAAA,EAAU;AACzB,IAAA,IAAI,CAACnB,WAAS,UAAA,CAAW,MAAM,KAAK,EAAE,MAAA,IAAU,WAAW,MAAA,CAAA,EAAS;AAClE,MAAA,OAAO,kBAAA;AAAA,QACL;AAAA,UACE,IAAA,EAAM,yBAAA;AAAA,UACN,OAAA,EAAS,CAAA,eAAA,EAAkB,MAAM,CAAA,CAAA,EAAI,QAAQ,CAAA,oCAAA,CAAA;AAAA,UAC7C,QAAQ,QAAA,CAAS,MAAA;AAAA,UACjB,QAAA;AAAA,UACA,MAAA;AAAA,UACA,SAAA;AAAA,UACA,KAAK,UAAA,CAAW;AAAA,SAClB;AAAA,QACA,eAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF;AACA,IAAA,OAAO,WAAW,MAAA,CAAO,IAAA;AAAA,EAC3B;AAEA,EAAA,OAAO,UAAA,CAAW,MAAA;AACpB;AAEA,eAAe,yBAAA,CACb,OAAA,EACA,QAAA,EACA,MAAA,EACA,SACA,cAAA,EACmB;AACnB,EAAA,MAAM,eAAA,GAAkB,MAAM,OAAA,CAAQ,kBAAA,CAAmB,OAAO,CAAA;AAChE,EAAA,IAAI,GAAA;AACJ,EAAA,IAAI,OAAA;AACJ,EAAA,IAAI;AACF,IAAA,MAAM,OAAA,GAAU,eAAA,EAAiB,OAAA,GAC7B,6BAAA,CAA8B,eAAA,CAAgB,OAAO,CAAA,GACrD,cAAA,EAAgB,OAAA,GACd,6BAAA,CAA8B,cAAA,CAAe,OAAO,IACpD,OAAA,CAAQ,OAAA;AACd,IAAA,GAAA,GAAM,qBAAA,CAAsB,OAAA,EAAS,0BAAA,CAA2B,QAAA,EAAU,cAAc,CAAC,CAAA;AACzF,IAAA,OAAA,GAAU,OAAA,CAAQ,aAAa,eAAe,CAAA;AAAA,EAChD,SAAS,KAAA,EAAO;AACd,IAAA,OAAO,kBAAA;AAAA,MACL;AAAA,QACE,IAAA,EAAM,uBAAuB,KAAK,CAAA;AAAA,QAClC,OAAA,EAAS,iBAAiB,KAAA,GACtB,KAAA,CAAM,UACN,CAAA,eAAA,EAAkB,MAAM,IAAI,QAAQ,CAAA,kCAAA,CAAA;AAAA,QACxC,MAAA,EAAQ,oBAAA,CAAqB,KAAK,CAAA,GAAI,MAAM,MAAA,GAAS,CAAA;AAAA,QACrD,QAAA;AAAA,QACA,MAAA;AAAA,QACA,GAAA,EAAK,KAAA;AAAA,QACL,SAAA,EAAW,oBAAA,CAAqB,KAAK,CAAA,GAAI,MAAM,SAAA,GAAY,MAAA;AAAA,QAC3D,IAAA,EAAM,oBAAA,CAAqB,KAAK,CAAA,GAAI,MAAM,IAAA,GAAO,MAAA;AAAA,QACjD,KAAA,EAAO;AAAA,OACT;AAAA,MACA,eAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF;AAEA,EAAA,IAAI,QAAA;AACJ,EAAA,IAAI;AACF,IAAA,QAAA,GAAW,MAAM,MAAM,GAAA,EAAK;AAAA,MAC1B,MAAA;AAAA,MACA,OAAA;AAAA,MACA,QAAQ,eAAA,EAAiB;AAAA,KAC1B,CAAA;AAAA,EACH,SAAS,KAAA,EAAO;AACd,IAAA,MAAM,UAAU,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK,CAAA;AACrE,IAAA,OAAO,kBAAA;AAAA,MACL;AAAA,QACE,IAAA,EAAM,eAAA;AAAA,QACN,SAAS,CAAA,2CAAA,EAA8C,MAAM,CAAA,CAAA,EAAI,QAAQ,KAAK,OAAO,CAAA,CAAA;AAAA,QACrF,MAAA,EAAQ,CAAA;AAAA,QACR,QAAA;AAAA,QACA,MAAA;AAAA,QACA,KAAA,EAAO;AAAA,OACT;AAAA,MACA,eAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF;AAEA,EAAA,IAAI,SAAS,EAAA,EAAI;AACf,IAAA,OAAO,QAAA;AAAA,EACT;AAEA,EAAA,MAAM,SAAA,GAAY,YAAY,QAAA,CAAS,OAAA,EAAS,CAAC,qBAAA,EAAuB,cAAA,EAAgB,YAAY,CAAC,CAAA;AACrG,EAAA,IAAI,YAAA,GAAwB,IAAA;AAC5B,EAAA,IAAI;AACF,IAAA,MAAM,OAAA,GAAU,MAAM,QAAA,CAAS,IAAA,EAAK;AACpC,IAAA,MAAM,UAAA,GAAaU,mBAAkB,OAAA,IAAW,EAAA,EAAI,SAAS,OAAA,CAAQ,GAAA,CAAI,cAAc,CAAC,CAAA;AACxF,IAAA,YAAA,GAAe,UAAA,CAAW,MAAA;AAAA,EAC5B,SAAS,KAAA,EAAO;AACd,IAAA,OAAO,kBAAA;AAAA,MACL;AAAA,QACE,IAAA,EAAM,eAAA;AAAA,QACN,OAAA,EAAS,CAAA,eAAA,EAAkB,MAAM,CAAA,CAAA,EAAI,QAAQ,CAAA,sCAAA,CAAA;AAAA,QAC7C,QAAQ,QAAA,CAAS,MAAA;AAAA,QACjB,QAAA;AAAA,QACA,MAAA;AAAA,QACA,SAAA;AAAA,QACA,KAAA,EAAO;AAAA,OACT;AAAA,MACA,eAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF;AAEA,EAAA,OAAO,kBAAA;AAAA,IACL;AAAA,MACE,IAAA,EAAM,YAAA;AAAA,MACN,OAAA,EAASE,oBAAAA;AAAA,QACP,YAAA;AAAA,QACA,kBAAkB,MAAM,CAAA,CAAA,EAAI,QAAQ,CAAA,oBAAA,EAAuB,SAAS,MAAM,CAAA;AAAA,OAC5E;AAAA,MACA,QAAQ,QAAA,CAAS,MAAA;AAAA,MACjB,QAAA;AAAA,MACA,MAAA;AAAA,MACA,SAAA;AAAA,MACA,IAAA,EAAMO,kBAAiB,YAAY,CAAA;AAAA,MACnC,KAAA,EAAO,kBAAkB,YAAY,CAAA;AAAA,MACrC,GAAA,EAAK;AAAA,KACP;AAAA,IACA,eAAA;AAAA,IACA;AAAA,GACF;AACF;AAEA,SAASC,YAAW,IAAA,EAA0C;AAC5D,EAAA,OAAO,OAAO,IAAA,KAAS,WAAA,IAAe,IAAA,YAAgB,IAAA;AACxD;AAEA,SAAS,qBAAqB,IAAA,EAAgE;AAC5F,EAAA,OAAO,OAAO,cAAA,KAAmB,WAAA,IAAe,IAAA,YAAgB,cAAA;AAClE;AAEA,eAAe,sBAAA,CACb,SAAA,EACA,aAAA,EACA,IAAA,EACA,OAAA,EACmB;AACnB,EAAA,MAAM,OAAA,GAAU,IAAI,OAAA,CAAQ,aAAa,CAAA;AACzC,EAAA,MAAA,CAAO,QAAQ,OAAA,EAAS,OAAA,IAAW,EAAE,EAAE,OAAA,CAAQ,CAAC,CAAC,GAAA,EAAK,KAAK,CAAA,KAAM,OAAA,CAAQ,GAAA,CAAI,GAAA,EAAK,KAAK,CAAC,CAAA;AACxF,EAAA,IAAI,CAAC,QAAQ,GAAA,CAAI,cAAc,KAAKA,WAAAA,CAAW,IAAI,CAAA,IAAK,IAAA,CAAK,IAAA,EAAM;AACjE,IAAA,OAAA,CAAQ,GAAA,CAAI,cAAA,EAAgB,IAAA,CAAK,IAAI,CAAA;AAAA,EACvC;AAEA,EAAA,MAAM,IAAA,GAA0C;AAAA,IAC9C,MAAA,EAAQ,KAAA;AAAA,IACR,OAAA;AAAA,IACA,IAAA;AAAA,IACA,QAAQ,OAAA,EAAS;AAAA,GACnB;AACA,EAAA,IAAI,oBAAA,CAAqB,IAAI,CAAA,EAAG;AAC9B,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AAAA,EAChB;AACA,EAAA,OAAO,KAAA,CAAM,WAAW,IAAI,CAAA;AAC9B;AAEA,SAAS,oBAAoB,MAAA,EAA8D;AACzF,EAAA,MAAM,UAAkC,EAAE,GAAI,MAAA,CAAO,OAAA,IAAW,EAAC,EAAG;AACpE,EAAA,OAAO;AAAA,IACL,GAAG,MAAA;AAAA,IACH,MAAA,EAAQ,KAAA;AAAA,IACR,OAAA;AAAA,IACA,WAAW,MAAA,CAAO,UAAA;AAAA,IAClB,GAAA,CAAI,MAAM,OAAA,EAAS;AACjB,MAAA,OAAO,sBAAA,CAAuB,MAAA,CAAO,GAAA,EAAK,OAAA,EAAS,MAAM,OAAO,CAAA;AAAA,IAClE;AAAA,GACF;AACF;AAEA,SAAS,mBAAmB,QAAA,EAAqE;AAC/F,EAAA,OAAO;AAAA,IACL,GAAG,QAAA;AAAA,IACH,MAAA,EAAQ,mBAAA,CAAoB,QAAA,CAAS,MAAM;AAAA,GAC7C;AACF;AAEA,SAAS,oBACP,QAAA,EACsC;AACtC,EAAA,OAAO;AAAA,IACL,KAAA,EAAO,QAAA,CAAS,KAAA,CAAM,GAAA,CAAI,kBAAkB;AAAA,GAC9C;AACF;AAEA,SAAS,0BAA0B,KAAA,EAAsE;AACvG,EAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,KAAA,IAAS,KAAA,CAAM,IAAA;AACnC,EAAA,MAAM,WAAA,GAAc,KAAA,CAAM,WAAA,IAAe,KAAA,CAAM,UAAA;AAC/C,EAAA,IAAI,CAAC,KAAA,EAAO,IAAA,EAAK,EAAG;AAClB,IAAA,MAAM,IAAI,MAAM,mDAAmD,CAAA;AAAA,EACrE;AACA,EAAA,IAAI,CAAC,WAAA,EAAa,IAAA,EAAK,EAAG;AACxB,IAAA,MAAM,IAAI,MAAM,+DAA+D,CAAA;AAAA,EACjF;AACA,EAAA,MAAM,QAAA,GAAW,KAAA,CAAM,QAAA,EAAU,IAAA,EAAK;AACtC,EAAA,MAAM,YAAA,GAAe,KAAA,CAAM,YAAA,EAAc,IAAA,EAAK;AAC9C,EAAA,OAAO;AAAA,IACL,KAAA;AAAA,IACA,QAAQ,KAAA,CAAM,MAAA;AAAA,IACd,WAAA;AAAA,IACA,IAAA,EAAM,MAAM,IAAA,IAAQ,QAAA;AAAA,IACpB,aAAA,EAAe,KAAA,CAAM,aAAA,IAAiB,YAAA,IAAgB,QAAA;AAAA,IACtD,WAAA,EAAa,KAAA,CAAM,WAAA,IAAe,KAAA,CAAM,UAAA;AAAA,IACxC,SAAA,EAAW,KAAA,CAAM,SAAA,IAAa,KAAA,CAAM,QAAA;AAAA,IACpC,YAAA,EAAc,KAAA,CAAM,YAAA,IAAgB,KAAA,CAAM,WAAA;AAAA,IAC1C,UAAA,EAAY,KAAA,CAAM,UAAA,IAAc,KAAA,CAAM,SAAA;AAAA,IACtC,OAAA,EAAS,KAAA,CAAM,OAAA,IAAW,KAAA,CAAM,MAAA;AAAA,IAChC,QAAQ,KAAA,CAAM,MAAA;AAAA,IACd,YAAY,KAAA,CAAM,UAAA;AAAA,IAClB,UAAU,KAAA,CAAM,QAAA;AAAA,IAChB,wBAAwB,KAAA,CAAM,sBAAA;AAAA,IAC9B,KAAK,KAAA,CAAM,GAAA;AAAA,IACX,eAAe,KAAA,CAAM,aAAA;AAAA,IACrB,YAAY,KAAA,CAAM,UAAA;AAAA,IAClB,oBAAoB,KAAA,CAAM;AAAA,GAC5B;AACF;AAEA,eAAe,+BAAA,CACb,OAAA,EACA,QAAA,EACA,IAAA,EACA,SACA,cAAA,EACY;AACZ,EAAA,MAAM,eAAA,GAAkB,MAAM,OAAA,CAAQ,kBAAA,CAAmB,OAAO,CAAA;AAChE,EAAA,IAAI,GAAA;AACJ,EAAA,IAAI,OAAA;AACJ,EAAA,IAAI;AACF,IAAA,MAAM,OAAA,GAAU,eAAA,EAAiB,OAAA,GAC7B,6BAAA,CAA8B,eAAA,CAAgB,OAAO,CAAA,GACrD,cAAA,EAAgB,OAAA,GACd,6BAAA,CAA8B,cAAA,CAAe,OAAO,IACpD,OAAA,CAAQ,OAAA;AACd,IAAA,GAAA,GAAM,qBAAA,CAAsB,OAAA,EAAS,0BAAA,CAA2B,QAAA,EAAU,cAAc,CAAC,CAAA;AACzF,IAAA,OAAA,GAAU,OAAA,CAAQ,aAAa,eAAe,CAAA;AAAA,EAChD,SAAS,KAAA,EAAO;AACd,IAAA,OAAO,kBAAA;AAAA,MACL;AAAA,QACE,IAAA,EAAM,uBAAuB,KAAK,CAAA;AAAA,QAClC,SAAS,KAAA,YAAiB,KAAA,GACtB,KAAA,CAAM,OAAA,GACN,sBAAsB,QAAQ,CAAA,kCAAA,CAAA;AAAA,QAClC,MAAA,EAAQ,oBAAA,CAAqB,KAAK,CAAA,GAAI,MAAM,MAAA,GAAS,CAAA;AAAA,QACrD,QAAA;AAAA,QACA,MAAA,EAAQ,KAAA;AAAA,QACR,GAAA,EAAK,KAAA;AAAA,QACL,SAAA,EAAW,oBAAA,CAAqB,KAAK,CAAA,GAAI,MAAM,SAAA,GAAY,MAAA;AAAA,QAC3D,IAAA,EAAM,oBAAA,CAAqB,KAAK,CAAA,GAAI,MAAM,IAAA,GAAO,MAAA;AAAA,QACjD,KAAA,EAAO;AAAA,OACT;AAAA,MACA,eAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF;AAEA,EAAA,OAAO,QAAQ,cAAc,CAAA;AAC7B,EAAA,OAAO,QAAQ,cAAc,CAAA;AAC7B,EAAA,IAAIA,WAAAA,CAAW,IAAI,CAAA,IAAK,IAAA,CAAK,IAAA,EAAM;AACjC,IAAA,OAAA,CAAQ,cAAc,IAAI,IAAA,CAAK,IAAA;AAAA,EACjC;AAEA,EAAA,MAAM,WAAA,GAAiD;AAAA,IACrD,MAAA,EAAQ,KAAA;AAAA,IACR,OAAA;AAAA,IACA,IAAA;AAAA,IACA,QAAQ,eAAA,EAAiB;AAAA,GAC3B;AACA,EAAA,IAAI,oBAAA,CAAqB,IAAI,CAAA,EAAG;AAC9B,IAAA,WAAA,CAAY,MAAA,GAAS,MAAA;AAAA,EACvB;AAEA,EAAA,IAAI,QAAA;AACJ,EAAA,IAAI;AACF,IAAA,QAAA,GAAW,MAAM,KAAA,CAAM,GAAA,EAAK,WAAW,CAAA;AAAA,EACzC,SAAS,KAAA,EAAO;AACd,IAAA,MAAM,UAAU,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK,CAAA;AACrE,IAAA,OAAO,kBAAA;AAAA,MACL;AAAA,QACE,IAAA,EAAM,eAAA;AAAA,QACN,OAAA,EAAS,CAAA,+CAAA,EAAkD,QAAQ,CAAA,EAAA,EAAK,OAAO,CAAA,CAAA;AAAA,QAC/E,MAAA,EAAQ,CAAA;AAAA,QACR,QAAA;AAAA,QACA,MAAA,EAAQ,KAAA;AAAA,QACR,KAAA,EAAO;AAAA,OACT;AAAA,MACA,eAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF;AAEA,EAAA,IAAI,OAAA;AACJ,EAAA,IAAI;AACF,IAAA,OAAA,GAAU,MAAM,SAAS,IAAA,EAAK;AAAA,EAChC,SAAS,KAAA,EAAO;AACd,IAAA,OAAO,kBAAA;AAAA,MACL;AAAA,QACE,IAAA,EAAM,eAAA;AAAA,QACN,OAAA,EAAS,sBAAsB,QAAQ,CAAA,gCAAA,CAAA;AAAA,QACvC,QAAQ,QAAA,CAAS,MAAA;AAAA,QACjB,QAAA;AAAA,QACA,MAAA,EAAQ,KAAA;AAAA,QACR,SAAA,EAAW,YAAY,QAAA,CAAS,OAAA,EAAS,CAAC,qBAAA,EAAuB,cAAA,EAAgB,YAAY,CAAC,CAAA;AAAA,QAC9F,KAAA,EAAO;AAAA,OACT;AAAA,MACA,eAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF;AAEA,EAAA,MAAM,UAAA,GAAaV,mBAAkB,OAAA,IAAW,EAAA,EAAI,SAAS,OAAA,CAAQ,GAAA,CAAI,cAAc,CAAC,CAAA;AACxF,EAAA,MAAM,SAAA,GAAY,YAAY,QAAA,CAAS,OAAA,EAAS,CAAC,qBAAA,EAAuB,cAAA,EAAgB,YAAY,CAAC,CAAA;AACrG,EAAA,IAAI,WAAW,WAAA,EAAa;AAC1B,IAAA,OAAO,kBAAA;AAAA,MACL;AAAA,QACE,IAAA,EAAM,cAAA;AAAA,QACN,OAAA,EAAS,sBAAsB,QAAQ,CAAA,wBAAA,CAAA;AAAA,QACvC,QAAQ,QAAA,CAAS,MAAA;AAAA,QACjB,QAAA;AAAA,QACA,MAAA,EAAQ,KAAA;AAAA,QACR,SAAA;AAAA,QACA,KAAK,UAAA,CAAW;AAAA,OAClB;AAAA,MACA,eAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF;AACA,EAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,IAAA,OAAO,kBAAA;AAAA,MACL;AAAA,QACE,IAAA,EAAM,YAAA;AAAA,QACN,OAAA,EAASE,oBAAAA;AAAA,UACP,UAAA,CAAW,MAAA;AAAA,UACX,CAAA,mBAAA,EAAsB,QAAQ,CAAA,oBAAA,EAAuB,QAAA,CAAS,MAAM,CAAA;AAAA,SACtE;AAAA,QACA,QAAQ,QAAA,CAAS,MAAA;AAAA,QACjB,QAAA;AAAA,QACA,MAAA,EAAQ,KAAA;AAAA,QACR,SAAA;AAAA,QACA,IAAA,EAAMO,iBAAAA,CAAiB,UAAA,CAAW,MAAM,CAAA;AAAA,QACxC,KAAA,EAAO,iBAAA,CAAkB,UAAA,CAAW,MAAM,CAAA;AAAA,QAC1C,KAAK,UAAA,CAAW;AAAA,OAClB;AAAA,MACA,eAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF;AACA,EAAA,IAAI,CAACnB,WAAS,UAAA,CAAW,MAAM,KAAK,EAAE,MAAA,IAAU,WAAW,MAAA,CAAA,EAAS;AAClE,IAAA,OAAO,kBAAA;AAAA,MACL;AAAA,QACE,IAAA,EAAM,yBAAA;AAAA,QACN,OAAA,EAAS,sBAAsB,QAAQ,CAAA,oCAAA,CAAA;AAAA,QACvC,QAAQ,QAAA,CAAS,MAAA;AAAA,QACjB,QAAA;AAAA,QACA,MAAA,EAAQ,KAAA;AAAA,QACR,SAAA;AAAA,QACA,KAAK,UAAA,CAAW;AAAA,OAClB;AAAA,MACA,eAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF;AACA,EAAA,OAAO,WAAW,MAAA,CAAO,IAAA;AAC3B;AAEO,SAAS,mBAAA,CACd,SACA,cAAA,EACqB;AACrB,EAAA,MAAM,sBAAA,GAAyB,cAAA;AAC/B,EAAA,MAAM,OAAA,GAAU,CACd,IAAA,EACA,MAAA,EACA,SACA,OAAA,KACG,mBAAA;AAAA,IACH,OAAA;AAAA,IACA,YAAY,IAAI,CAAA;AAAA,IAChB,MAAA;AAAA,IACA,KAAA;AAAA,IACA,OAAA;AAAA,IACA,OAAA;AAAA,IACA;AAAA,GACF;AACA,EAAA,MAAMqB,WAAAA,GAAa,CACjB,IAAA,EACA,MAAA,EACA,SACA,OAAA,KACG,mBAAA;AAAA,IACH,OAAA;AAAA,IACA,YAAY,IAAI,CAAA;AAAA,IAChB,MAAA;AAAA,IACA,QAAA;AAAA,IACA,OAAA;AAAA,IACE,OAAA;AAAA,IACA;AAAA,GACJ;AACA,EAAA,MAAM,yBAAA,GAA4B,CAChC,MAAA,EACA,MAAA,EACA,OACA,OAAA,KACGA,WAAAA;AAAA,IACH,aAAA,CAAc,qCAAA,EAAuC,SAAA,EAAW,MAAM,CAAA;AAAA,IACtE,MAAA;AAAA,IACA,KAAA;AAAA,IACA;AAAA,GACF;AACA,EAAA,MAAM,IAAA,GAAgC;AAAA,IACpC,oBAAoB,OAAA,EAAS;AAC3B,MAAA,OAAO,OAAA,CAAQ,mBAAA,EAAqB,KAAA,EAAO,MAAA,EAAW,OAAO,CAAA;AAAA,IAC/D,CAAA;AAAA,IACA,oBAAA,CAAqB,OAAO,OAAA,EAAS;AACnC,MAAA,OAAO,OAAA,CAAQ,mBAAA,EAAqB,MAAA,EAAQ,KAAA,EAAO,OAAO,CAAA;AAAA,IAC5D,CAAA;AAAA,IACA,oBAAA,CAAqB,EAAA,EAAI,KAAA,EAAO,OAAA,EAAS;AACvC,MAAA,OAAO,OAAA,CAAQ,cAAc,wBAAA,EAA0B,IAAA,EAAM,EAAE,CAAA,EAAG,OAAA,EAAS,OAAO,OAAO,CAAA;AAAA,IAC3F,CAAA;AAAA,IACA,oBAAA,CAAqB,IAAI,OAAA,EAAS;AAChC,MAAA,OAAO,OAAA,CAAQ,cAAc,wBAAA,EAA0B,IAAA,EAAM,EAAE,CAAA,EAAG,QAAA,EAAU,QAAW,OAAO,CAAA;AAAA,IAChG,CAAA;AAAA,IACA,uBAAuB,OAAA,EAAS;AAC9B,MAAA,OAAO,OAAA,CAAQ,sBAAA,EAAwB,KAAA,EAAO,MAAA,EAAW,OAAO,CAAA;AAAA,IAClE,CAAA;AAAA,IACA,sBAAA,CAAuB,OAAO,OAAA,EAAS;AACrC,MAAA,OAAOA,WAAAA,CAAW,2BAAA,EAA6B,MAAA,EAAQ,KAAA,EAAO,OAAO,CAAA;AAAA,IACvE,CAAA;AAAA,IACA,uBAAA,CAAwB,OAAO,OAAA,EAAS;AACtC,MAAA,OAAOA,WAAAA,CAAW,4BAAA,EAA8B,MAAA,EAAQ,KAAA,EAAO,OAAO,CAAA;AAAA,IACxE,CAAA;AAAA,IACA,gBAAA,CAAiB,OAAO,OAAA,EAAS;AAC/B,MAAA,OAAOA,WAAAA,CAAW,qBAAA,EAAuB,MAAA,EAAQ,KAAA,EAAO,OAAO,CAAA;AAAA,IACjE,CAAA;AAAA,IACA,cAAA,CAAe,QAAQ,OAAA,EAAS;AAC9B,MAAA,OAAOA,WAAAA,CAAW,cAAc,0BAAA,EAA4B,SAAA,EAAW,MAAM,CAAA,EAAG,KAAA,EAAO,QAAW,OAAO,CAAA;AAAA,IAC3G,CAAA;AAAA,IACA,iBAAA,CAAkB,MAAA,EAAQ,KAAA,EAAO,OAAA,EAAS;AACxC,MAAA,MAAM,IAAA,GAAOH,YAAAA;AAAA,QACX,aAAA,CAAc,8BAAA,EAAgC,SAAA,EAAW,MAAM,CAAA;AAAA,QAC/D;AAAA,OACF;AACA,MAAA,OAAOG,WAAAA,CAAW,IAAA,EAAM,KAAA,EAAO,MAAA,EAAW,OAAO,CAAA;AAAA,IACnD,CAAA;AAAA,IACA,mBAAA,CAAoB,MAAA,EAAQ,KAAA,EAAO,OAAA,EAAS;AAC1C,MAAA,MAAM,IAAA,GAAOH,YAAAA;AAAA,QACX,aAAA,CAAc,gCAAA,EAAkC,SAAA,EAAW,MAAM,CAAA;AAAA,QACjE;AAAA,OACF;AACA,MAAA,OAAO,0BAA0B,OAAA,EAAS,WAAA,CAAY,IAAI,CAAA,EAAG,KAAA,EAAO,SAAS,sBAAsB,CAAA;AAAA,IACrG,CAAA;AAAA,IACA,iBAAA,CAAkB,MAAA,EAAQ,KAAA,EAAO,OAAA,EAAS;AACxC,MAAA,OAAOG,WAAAA,CAAW,cAAc,0BAAA,EAA4B,SAAA,EAAW,MAAM,CAAA,EAAG,OAAA,EAAS,OAAO,OAAO,CAAA;AAAA,IACzG,CAAA;AAAA,IACA,iBAAA,CAAkB,QAAQ,OAAA,EAAS;AACjC,MAAA,OAAOA,WAAAA,CAAW,cAAc,0BAAA,EAA4B,SAAA,EAAW,MAAM,CAAA,EAAG,QAAA,EAAU,QAAW,OAAO,CAAA;AAAA,IAC9G,CAAA;AAAA,IACA,wBAAA,CAAyB,MAAA,EAAQ,KAAA,EAAO,OAAA,EAAS;AAC/C,MAAA,OAAO,yBAAA,CAA0B,MAAA,EAAQ,OAAA,EAAS,KAAA,EAAO,OAAO,CAAA;AAAA,IAClE,CAAA;AAAA,IACA,mBAAA,CAAoB,OAAO,OAAA,EAAS;AAClC,MAAA,OAAOA,WAAAA,CAAW,yBAAA,EAA2B,MAAA,EAAQ,KAAA,EAAO,OAAO,CAAA;AAAA,IACrE,CAAA;AAAA,IACA,iBAAA,CAAkB,OAAO,OAAA,EAAS;AAChC,MAAA,OAAOA,WAAAA,CAAW,uBAAA,EAAyB,MAAA,EAAQ,KAAA,EAAO,OAAO,CAAA;AAAA,IACnE;AAAA,GACF;AACA,EAAA,MAAM,SAAA,GAA6C;AAAA,IACjD,MAAA,CAAO,OAAO,OAAA,EAAS;AACrB,MAAA,OAAOA,WAAAA,CAAW,2BAAA,EAA6B,MAAA,EAAQ,KAAA,EAAO,OAAO,CAAA;AAAA,IACvE,CAAA;AAAA,IACA,QAAA,CAAS,OAAO,OAAA,EAAS;AACvB,MAAA,OAAOA,WAAAA,CAAW,8BAAA,EAAgC,MAAA,EAAQ,KAAA,EAAO,OAAO,CAAA;AAAA,IAC1E,CAAA;AAAA,IACA,QAAA,CAAS,OAAO,OAAA,EAAS;AACvB,MAAA,OAAOA,WAAAA,CAAW,6BAAA,EAA+B,MAAA,EAAQ,KAAA,EAAO,OAAO,CAAA;AAAA,IACzE,CAAA;AAAA,IACA,KAAA,CAAM,OAAO,OAAA,EAAS;AACpB,MAAA,OAAOA,WAAAA,CAAW,0BAAA,EAA4B,MAAA,EAAQ,KAAA,EAAO,OAAO,CAAA;AAAA,IACtE,CAAA;AAAA,IACA,SAAA,CAAU,OAAO,OAAA,EAAS;AACxB,MAAA,OAAOA,WAAAA,CAAW,+BAAA,EAAiC,MAAA,EAAQ,KAAA,EAAO,OAAO,CAAA;AAAA,IAC3E;AAAA,GACF;AACA,EAAA,MAAM,UAAA,GAAa,uBAAA,CAAwB,IAAA,EAAM,cAAA,EAAgB,SAAS,CAAA;AAC1E,EAAA,MAAM,UAAA,IAAc,CAClB,KAAA,EACA,OAAA,KACG;AACH,IAAA,IAAIrB,UAAAA,CAAS,KAAK,CAAA,IAAK,OAAA,IAAW,KAAA,EAAO;AACvC,MAAA,OAAO,UAAA,CAAW,MAAA,CAAO,KAAA,EAAsE,OAAO,CAAA;AAAA,IACxG;AACA,IAAA,OAAO,IAAA,CAAK,sBAAA;AAAA,MACV,0BAA0B,KAAuC,CAAA;AAAA,MACjE;AAAA,KACF,CAAE,KAAK,kBAAkB,CAAA;AAAA,EAC3B,CAAA,CAAA;AACA,EAAA,MAAM,cAAc,CAAC,KAAA,EAAmC,YACtD,UAAA,CAAW,MAAA,CAAO,OAAsE,OAAO,CAAA,CAAA;AAGjG,EAAA,MAAM,IAAA,GAAmC;AAAA,IACvC,GAAG,UAAA;AAAA,IACH,MAAA,EAAQ,UAAA;AAAA,IACR,UAAA,CAAW,OAAO,OAAA,EAAS;AACzB,MAAA,OAAO,IAAA,CAAK,uBAAA;AAAA,QACV,EAAE,KAAA,EAAO,KAAA,CAAM,KAAA,CAAM,GAAA,CAAI,yBAAyB,CAAA,EAAE;AAAA,QACpD;AAAA,OACF,CAAE,KAAK,mBAAmB,CAAA;AAAA,IAC5B,CAAA;AAAA,IACA,aAAA,CAAc,MAAA,EAAQ,KAAA,EAAO,OAAA,EAAS;AACpC,MAAA,OAAOqB,WAAAA,CAAW,aAAA,CAAc,yCAAA,EAA2C,SAAA,EAAW,MAAM,GAAG,MAAA,EAAQ,KAAA,IAAS,EAAC,EAAG,OAAO,CAAA;AAAA,IAC7H,CAAA;AAAA,IACA,YAAA,CAAa,MAAA,EAAQ,IAAA,EAAM,OAAA,EAAS;AAClC,MAAA,OAAO,+BAAA;AAAA,QACL,OAAA;AAAA,QACA,WAAA,CAAY,aAAA,CAAc,iCAAA,EAAmC,SAAA,EAAW,MAAM,CAAC,CAAA;AAAA,QAC/E,IAAA;AAAA,QACA,OAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF,CAAA;AAAA,IACA,MAAA,CAAO,OAAO,OAAA,EAAS;AACrB,MAAA,OAAOA,WAAAA,CAAW,uBAAA,EAAyB,MAAA,EAAQ,KAAA,EAAO,OAAO,CAAA;AAAA,IACnE,CAAA;AAAA,IACA,GAAA,CAAI,QAAQ,OAAA,EAAS;AACnB,MAAA,OAAO,IAAA,CAAK,cAAA,CAAe,MAAA,EAAQ,OAAO,CAAA;AAAA,IAC5C,CAAA;AAAA,IACA,MAAA,CAAO,MAAA,EAAQ,KAAA,EAAO,OAAA,EAAS;AAC7B,MAAA,OAAO,IAAA,CAAK,iBAAA,CAAkB,MAAA,EAAQ,KAAA,EAAO,OAAO,CAAA;AAAA,IACtD,CAAA;AAAA,IACA,MAAA,EAAQ,UAAA;AAAA,IACR,UAAA,CAAW,OAAO,OAAA,EAAS;AACzB,MAAA,OAAOA,WAAAA,CAAW,4BAAA,EAA8B,MAAA,EAAQ,KAAA,EAAO,OAAO,CAAA;AAAA,IACxE,CAAA;AAAA,IACA,UAAA,CAAW,OAAO,OAAA,EAAS;AACzB,MAAA,OAAOA,WAAAA,CAAW,4BAAA,EAA8B,MAAA,EAAQ,KAAA,EAAO,OAAO,CAAA;AAAA,IACxE,CAAA;AAAA,IACA,OAAA,CAAQ,QAAQ,OAAA,EAAS;AACvB,MAAA,OAAOA,WAAAA,CAAW,cAAc,kCAAA,EAAoC,SAAA,EAAW,MAAM,CAAA,EAAG,MAAA,EAAQ,EAAC,EAAG,OAAO,CAAA;AAAA,IAC7G,CAAA;AAAA,IACA,KAAA,CAAM,QAAQ,OAAA,EAAS;AACrB,MAAA,OAAOA,WAAAA,CAAW,cAAc,gCAAA,EAAkC,SAAA,EAAW,MAAM,CAAA,EAAG,QAAA,EAAU,QAAW,OAAO,CAAA;AAAA,IACpH,CAAA;AAAA,IACA,IAAA,CAAK,MAAA,EAAQ,KAAA,EAAO,OAAA,EAAS;AAC3B,MAAA,OAAOA,WAAAA,CAAW,cAAc,+BAAA,EAAiC,SAAA,EAAW,MAAM,CAAA,EAAG,MAAA,EAAQ,OAAO,OAAO,CAAA;AAAA,IAC7G,CAAA;AAAA,IACA,GAAA,CAAI,MAAA,EAAQ,KAAA,EAAO,OAAA,EAAS;AAC1B,MAAA,OAAO,IAAA,CAAK,iBAAA,CAAkB,MAAA,EAAQ,KAAA,EAAO,OAAO,CAAA;AAAA,IACtD,CAAA;AAAA,IACA,SAAA,CAAU,QAAQ,OAAA,EAAS;AACzB,MAAA,OAAOA,WAAAA,CAAW,cAAc,qCAAA,EAAuC,SAAA,EAAW,MAAM,CAAA,EAAG,KAAA,EAAO,QAAW,OAAO,CAAA;AAAA,IACtH,CAAA;AAAA,IACA,QAAA,CAAS,MAAA,EAAQ,KAAA,EAAO,OAAA,EAAS;AAC/B,MAAA,MAAM,IAAA,GAAOH,YAAAA;AAAA,QACX,aAAA,CAAc,oCAAA,EAAsC,SAAA,EAAW,MAAM,CAAA;AAAA,QACrE;AAAA,OACF;AACA,MAAA,OAAOG,WAAAA,CAAW,IAAA,EAAM,KAAA,EAAO,MAAA,EAAW,OAAO,CAAA;AAAA,IACnD,CAAA;AAAA,IACA,KAAA,CAAM,MAAA,EAAQ,KAAA,EAAO,OAAA,EAAS;AAC5B,MAAA,OAAO,IAAA,CAAK,mBAAA,CAAoB,MAAA,EAAQ,KAAA,EAAO,OAAO,CAAA;AAAA,IACxD,CAAA;AAAA,IACA,QAAA,CAAS,QAAQ,OAAA,EAAS;AACxB,MAAA,OAAOA,WAAAA,CAAW,cAAc,mCAAA,EAAqC,SAAA,EAAW,MAAM,CAAA,EAAG,KAAA,EAAO,QAAW,OAAO,CAAA;AAAA,IACpH,CAAA;AAAA,IACA,cAAA,CAAe,MAAA,EAAQ,SAAA,EAAW,OAAA,EAAS;AACzC,MAAA,OAAOA,WAAAA;AAAA,QACL,aAAA;AAAA,UACE,aAAA,CAAc,wDAAA,EAA0D,SAAA,EAAW,MAAM,CAAA;AAAA,UACzF,YAAA;AAAA,UACA;AAAA,SACF;AAAA,QACA,MAAA;AAAA,QACA,EAAC;AAAA,QACD;AAAA,OACF;AAAA,IACF,CAAA;AAAA,IACA,aAAA,CAAc,MAAA,EAAQ,SAAA,EAAW,OAAA,EAAS;AACxC,MAAA,OAAOA,WAAAA;AAAA,QACL,aAAA;AAAA,UACE,aAAA,CAAc,gDAAA,EAAkD,SAAA,EAAW,MAAM,CAAA;AAAA,UACjF,YAAA;AAAA,UACA;AAAA,SACF;AAAA,QACA,QAAA;AAAA,QACA,MAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF,CAAA;AAAA,IACA,SAAA,EAAW;AAAA,MACT,GAAA,CAAI,MAAA,EAAQ,KAAA,EAAO,OAAA,EAAS;AAC1B,QAAA,MAAM,IAAA,GAAOH,YAAAA;AAAA,UACX,aAAA,CAAc,oCAAA,EAAsC,SAAA,EAAW,MAAM,CAAA;AAAA,UACrE;AAAA,SACF;AACA,QAAA,OAAOG,WAAAA,CAAW,IAAA,EAAM,KAAA,EAAO,MAAA,EAAW,OAAO,CAAA;AAAA,MACnD,CAAA;AAAA,MACA,GAAA,CAAI,MAAA,EAAQ,KAAA,EAAO,OAAA,EAAS;AAC1B,QAAA,OAAOA,WAAAA,CAAW,cAAc,oCAAA,EAAsC,SAAA,EAAW,MAAM,CAAA,EAAG,MAAA,EAAQ,OAAO,OAAO,CAAA;AAAA,MAClH;AAAA,KACF;AAAA,IACA,UAAA,EAAY;AAAA,MACV,MAAA,CAAO,MAAA,EAAQ,KAAA,EAAO,OAAA,EAAS;AAC7B,QAAA,OAAO,IAAA,CAAK,wBAAA,CAAyB,MAAA,EAAQ,KAAA,EAAO,OAAO,CAAA;AAAA,MAC7D,CAAA;AAAA,MACA,GAAA,CAAI,MAAA,EAAQ,KAAA,EAAO,OAAA,EAAS;AAC1B,QAAA,OAAO,yBAAA,CAA0B,MAAA,EAAQ,MAAA,EAAQ,KAAA,EAAO,OAAO,CAAA;AAAA,MACjE,CAAA;AAAA,MACA,OAAA,CAAQ,OAAO,OAAA,EAAS;AACtB,QAAA,OAAOA,WAAAA,CAAW,gCAAA,EAAkC,MAAA,EAAQ,KAAA,EAAO,OAAO,CAAA;AAAA,MAC5E;AAAA;AACF,GACF;AACA,EAAA,MAAM,WAAA,GAAiD;AAAA,IACrD,KAAK,OAAA,EAAS;AACZ,MAAA,OAAO,IAAA,CAAK,uBAAuB,OAAO,CAAA;AAAA,IAC5C;AAAA,GACF;AACA,EAAA,MAAM,OAAA,GAAyC;AAAA,IAC7C,KAAK,OAAA,EAAS;AACZ,MAAA,OAAO,IAAA,CAAK,oBAAoB,OAAO,CAAA;AAAA,IACzC,CAAA;AAAA,IACA,MAAA,CAAO,OAAO,OAAA,EAAS;AACrB,MAAA,OAAO,IAAA,CAAK,oBAAA,CAAqB,KAAA,EAAO,OAAO,CAAA;AAAA,IACjD,CAAA;AAAA,IACA,MAAA,CAAO,EAAA,EAAI,KAAA,EAAO,OAAA,EAAS;AACzB,MAAA,OAAO,IAAA,CAAK,oBAAA,CAAqB,EAAA,EAAI,KAAA,EAAO,OAAO,CAAA;AAAA,IACrD,CAAA;AAAA,IACA,MAAA,CAAO,IAAI,OAAA,EAAS;AAClB,MAAA,OAAO,IAAA,CAAK,oBAAA,CAAqB,EAAA,EAAI,OAAO,CAAA;AAAA,IAC9C;AAAA,GACF;AACA,EAAA,MAAM,MAAA,GAAuC;AAAA,IAC3C,IAAA,CAAK,OAAO,OAAA,EAAS;AACnB,MAAA,OAAOA,WAAAA,CAAW,uBAAA,EAAyB,MAAA,EAAQ,KAAA,EAAO,OAAO,CAAA;AAAA,IACnE,CAAA;AAAA,IACA,IAAA,CAAK,OAAO,OAAA,EAAS;AACnB,MAAA,OAAOA,WAAAA,CAAW,uBAAA,EAAyB,MAAA,EAAQ,KAAA,EAAO,OAAO,CAAA;AAAA,IACnE,CAAA;AAAA,IACA,MAAA,CAAO,OAAO,OAAA,EAAS;AACrB,MAAA,OAAO,IAAA,CAAK,mBAAA,CAAoB,KAAA,EAAO,OAAO,CAAA;AAAA,IAChD,CAAA;AAAA,IACA,IAAA,CAAK,OAAO,OAAA,EAAS;AACnB,MAAA,OAAO,IAAA,CAAK,iBAAA,CAAkB,KAAA,EAAO,OAAO,CAAA;AAAA,IAC9C;AAAA,GACF;AACA,EAAA,MAAM,UAAA,GAA+C;AAAA,IACnD,IAAA,CAAK,OAAO,OAAA,EAAS;AACnB,MAAA,OAAOA,WAAAA,CAAW,2BAAA,EAA6B,MAAA,EAAQ,KAAA,EAAO,OAAO,CAAA;AAAA,IACvE,CAAA;AAAA,IACA,KAAA,CAAM,OAAO,OAAA,EAAS;AACpB,MAAA,OAAOA,WAAAA,CAAW,4BAAA,EAA8B,MAAA,EAAQ,KAAA,EAAO,OAAO,CAAA;AAAA,IACxE,CAAA;AAAA,IACA,MAAA,CAAO,OAAO,OAAA,EAAS;AACrB,MAAA,OAAOA,WAAAA,CAAW,6BAAA,EAA+B,MAAA,EAAQ,KAAA,EAAO,OAAO,CAAA;AAAA,IACzE,CAAA;AAAA,IACA,KAAA,CAAM,OAAO,OAAA,EAAS;AACpB,MAAA,OAAOA,WAAAA,CAAW,4BAAA,EAA8B,MAAA,EAAQ,KAAA,EAAO,OAAO,CAAA;AAAA,IACxE;AAAA,GACF;AACA,EAAA,MAAM,YAAA,GAAmD;AAAA,IACvD,MAAA,CAAO,OAAO,OAAA,EAAS;AACrB,MAAA,OAAOA,WAAAA,CAAW,yBAAA,EAA2B,MAAA,EAAQ,KAAA,EAAO,OAAO,CAAA;AAAA,IACrE,CAAA;AAAA,IACA,MAAA,CAAO,OAAO,OAAA,EAAS;AACrB,MAAA,OAAOA,WAAAA,CAAW,gCAAA,EAAkC,MAAA,EAAQ,KAAA,EAAO,OAAO,CAAA;AAAA,IAC5E,CAAA;AAAA,IACA,MAAA,CAAO,OAAO,OAAA,EAAS;AACrB,MAAA,OAAOA,WAAAA,CAAW,gCAAA,EAAkC,MAAA,EAAQ,KAAA,EAAO,OAAO,CAAA;AAAA,IAC5E;AAAA,GACF;AACA,EAAA,MAAM,MAAA,GAAuC;AAAA,IAC3C,IAAA,CAAK,OAAO,OAAA,EAAS;AACnB,MAAA,OAAOA,WAAAA,CAAW,kBAAA,EAAoB,MAAA,EAAQ,KAAA,EAAO,OAAO,CAAA;AAAA,IAC9D,CAAA;AAAA,IACA,IAAA,CAAK,OAAO,OAAA,EAAS;AACnB,MAAA,OAAOA,WAAAA,CAAW,uBAAA,EAAyB,MAAA,EAAQ,KAAA,EAAO,OAAO,CAAA;AAAA,IACnE,CAAA;AAAA,IACA,MAAA,CAAO,OAAO,OAAA,EAAS;AACrB,MAAA,OAAOA,WAAAA,CAAW,yBAAA,EAA2B,MAAA,EAAQ,KAAA,EAAO,OAAO,CAAA;AAAA,IACrE,CAAA;AAAA,IACA,QAAA,CAAS,OAAO,OAAA,EAAS;AACvB,MAAA,OAAOA,WAAAA,CAAW,2BAAA,EAA6B,MAAA,EAAQ,KAAA,EAAO,OAAO,CAAA;AAAA,IACvE,CAAA;AAAA,IACA,MAAA,CAAO,OAAO,OAAA,EAAS;AACrB,MAAA,OAAOA,WAAAA,CAAW,yBAAA,EAA2B,MAAA,EAAQ,KAAA,EAAO,OAAO,CAAA;AAAA,IACrE,CAAA;AAAA,IACA,IAAA,CAAK,OAAO,OAAA,EAAS;AACnB,MAAA,OAAOA,WAAAA,CAAW,uBAAA,EAAyB,MAAA,EAAQ,KAAA,EAAO,OAAO,CAAA;AAAA,IACnE,CAAA;AAAA,IACA,GAAA,CAAI,OAAO,OAAA,EAAS;AAClB,MAAA,OAAOA,WAAAA,CAAW,sBAAA,EAAwB,MAAA,EAAQ,KAAA,EAAO,OAAO,CAAA;AAAA,IAClE,CAAA;AAAA,IACA,SAAA,CAAU,OAAO,OAAA,EAAS;AACxB,MAAA,OAAOA,WAAAA,CAAW,6BAAA,EAA+B,MAAA,EAAQ,KAAA,EAAO,OAAO,CAAA;AAAA,IACzE,CAAA;AAAA,IACA,MAAA,CAAO,OAAO,OAAA,EAAS;AACrB,MAAA,OAAOA,WAAAA,CAAW,yBAAA,EAA2B,MAAA,EAAQ,KAAA,EAAO,OAAO,CAAA;AAAA,IACrE,CAAA;AAAA,IACA,SAAA,CAAU,OAAO,OAAA,EAAS;AACxB,MAAA,OAAOA,WAAAA,CAAW,6BAAA,EAA+B,MAAA,EAAQ,KAAA,EAAO,OAAO,CAAA;AAAA,IACzE,CAAA;AAAA,IACA,QAAA,CAAS,OAAO,OAAA,EAAS;AACvB,MAAA,OAAOA,WAAAA,CAAW,2BAAA,EAA6B,MAAA,EAAQ,KAAA,EAAO,OAAO,CAAA;AAAA,IACvE,CAAA;AAAA,IACA,cAAA,CAAe,OAAO,OAAA,EAAS;AAC7B,MAAA,OAAOA,WAAAA,CAAW,mCAAA,EAAqC,MAAA,EAAQ,KAAA,EAAO,OAAO,CAAA;AAAA,IAC/E,CAAA;AAAA,IACA,aAAA,CAAc,OAAO,OAAA,EAAS;AAC5B,MAAA,OAAOA,WAAAA,CAAW,kCAAA,EAAoC,MAAA,EAAQ,KAAA,EAAO,OAAO,CAAA;AAAA,IAC9E,CAAA;AAAA,IACA,UAAA,CAAW,OAAO,OAAA,EAAS;AACzB,MAAA,OAAOA,WAAAA,CAAW,8BAAA,EAAgC,MAAA,EAAQ,KAAA,EAAO,OAAO,CAAA;AAAA,IAC1E,CAAA;AAAA,IACA,MAAA,EAAQ;AAAA,GACV;AACA,EAAA,MAAM,MAAA,GAAuC;AAAA,IAC3C,IAAA,CAAK,OAAO,OAAA,EAAS;AACnB,MAAA,OAAOA,WAAAA,CAAW,uBAAA,EAAyB,MAAA,EAAQ,KAAA,EAAO,OAAO,CAAA;AAAA,IACnE,CAAA;AAAA,IACA,MAAA,CAAO,OAAO,OAAA,EAAS;AACrB,MAAA,OAAOA,WAAAA,CAAW,yBAAA,EAA2B,MAAA,EAAQ,KAAA,EAAO,OAAO,CAAA;AAAA,IACrE,CAAA;AAAA,IACA,MAAA,CAAO,OAAO,OAAA,EAAS;AACrB,MAAA,OAAOA,WAAAA,CAAW,yBAAA,EAA2B,MAAA,EAAQ,KAAA,EAAO,OAAO,CAAA;AAAA,IACrE,CAAA;AAAA,IACA,SAAA,EAAW;AAAA,MACT,GAAA,CAAI,OAAO,OAAA,EAAS;AAClB,QAAA,OAAOA,WAAAA,CAAW,4BAAA,EAA8B,MAAA,EAAQ,KAAA,EAAO,OAAO,CAAA;AAAA,MACxE,CAAA;AAAA,MACA,GAAA,CAAI,OAAO,OAAA,EAAS;AAClB,QAAA,OAAOA,WAAAA,CAAW,gCAAA,EAAkC,MAAA,EAAQ,KAAA,EAAO,OAAO,CAAA;AAAA,MAC5E,CAAA;AAAA,MACA,MAAA,CAAO,OAAO,OAAA,EAAS;AACrB,QAAA,OAAOA,WAAAA,CAAW,mCAAA,EAAqC,MAAA,EAAQ,KAAA,EAAO,OAAO,CAAA;AAAA,MAC/E;AAAA,KACF;AAAA,IACA,MAAA,EAAQ;AAAA,MACN,GAAA,CAAI,OAAO,OAAA,EAAS;AAClB,QAAA,OAAOA,WAAAA,CAAW,yBAAA,EAA2B,MAAA,EAAQ,KAAA,EAAO,OAAO,CAAA;AAAA,MACrE,CAAA;AAAA,MACA,GAAA,CAAI,OAAO,OAAA,EAAS;AAClB,QAAA,OAAOA,WAAAA,CAAW,6BAAA,EAA+B,MAAA,EAAQ,KAAA,EAAO,OAAO,CAAA;AAAA,MACzE,CAAA;AAAA,MACA,MAAA,CAAO,OAAO,OAAA,EAAS;AACrB,QAAA,OAAOA,WAAAA,CAAW,gCAAA,EAAkC,MAAA,EAAQ,KAAA,EAAO,OAAO,CAAA;AAAA,MAC5E;AAAA,KACF;AAAA,IACA,YAAA,EAAc;AAAA,MACZ,GAAA,CAAI,OAAO,OAAA,EAAS;AAClB,QAAA,OAAOA,WAAAA,CAAW,gCAAA,EAAkC,MAAA,EAAQ,KAAA,EAAO,OAAO,CAAA;AAAA,MAC5E,CAAA;AAAA,MACA,GAAA,CAAI,OAAO,OAAA,EAAS;AAClB,QAAA,OAAOA,WAAAA,CAAW,oCAAA,EAAsC,MAAA,EAAQ,KAAA,EAAO,OAAO,CAAA;AAAA,MAChF,CAAA;AAAA,MACA,MAAA,CAAO,OAAO,OAAA,EAAS;AACrB,QAAA,OAAOA,WAAAA,CAAW,uCAAA,EAAyC,MAAA,EAAQ,KAAA,EAAO,OAAO,CAAA;AAAA,MACnF;AAAA,KACF;AAAA,IACA,IAAA,EAAM;AAAA,MACJ,GAAA,CAAI,OAAO,OAAA,EAAS;AAClB,QAAA,OAAOA,WAAAA,CAAW,uBAAA,EAAyB,MAAA,EAAQ,KAAA,EAAO,OAAO,CAAA;AAAA,MACnE,CAAA;AAAA,MACA,GAAA,CAAI,OAAO,OAAA,EAAS;AAClB,QAAA,OAAOA,WAAAA,CAAW,2BAAA,EAA6B,MAAA,EAAQ,KAAA,EAAO,OAAO,CAAA;AAAA,MACvE,CAAA;AAAA,MACA,MAAA,CAAO,OAAO,OAAA,EAAS;AACrB,QAAA,OAAOA,WAAAA,CAAW,8BAAA,EAAgC,MAAA,EAAQ,KAAA,EAAO,OAAO,CAAA;AAAA,MAC1E;AAAA;AACF,GACF;AACA,EAAA,MAAM,KAAA,GAAqC;AAAA,IACzC,IAAA,CAAK,OAAO,OAAA,EAAS;AACnB,MAAA,OAAOA,WAAAA,CAAW,qBAAA,EAAuB,MAAA,EAAQ,KAAA,EAAO,OAAO,CAAA;AAAA,IACjE;AAAA,GACF;AACA,EAAA,MAAM,MAAA,GAAS,yBAAA,CAA0B,OAA+B,CAAA;AACxE,EAAA,OAAO;AAAA,IACL,GAAG,IAAA;AAAA,IACH,WAAA;AAAA,IACA,OAAA;AAAA,IACA,IAAA;AAAA,IACA,MAAA;AAAA,IACA,UAAA;AAAA,IACA,MAAA;AAAA,IACA,MAAA;AAAA,IACA,SAAA;AAAA,IACA,KAAA;AAAA,IACA,MAAA;AAAA,IACA,QAAQ,IAAA,CAAK;AAAA,GACf;AACF;;;ACxzFA,IAAMd,SAAAA,GAAW,yBAAA;AACjB,IAAME,iBAAAA,GAAmB,oBAAoBF,SAAQ,CAAA;AAC9C,IAAM,eAAA,GAAN,cAA8B,KAAA,CAAM;AAAA,EACzC,MAAA;AAAA,EACA,QAAA;AAAA,EACA,MAAA;AAAA,EACA,SAAA;AAAA,EACA,IAAA;AAAA,EAEA,YAAY,KAAA,EAOT;AACD,IAAA,KAAA,CAAM,MAAM,OAAO,CAAA;AACnB,IAAA,IAAA,CAAK,IAAA,GAAO,iBAAA;AACZ,IAAA,IAAA,CAAK,SAAS,KAAA,CAAM,MAAA;AACpB,IAAA,IAAA,CAAK,WAAW,KAAA,CAAM,QAAA;AACtB,IAAA,IAAA,CAAK,SAAS,KAAA,CAAM,MAAA;AACpB,IAAA,IAAA,CAAK,YAAY,KAAA,CAAM,SAAA;AACvB,IAAA,IAAA,CAAK,OAAO,KAAA,CAAM,IAAA;AAAA,EACpB;AACF;AAuBA,SAAS,sBAAsB,KAAA,EAAoC;AACjE,EAAA,IAAI,CAAC,KAAA,EAAO;AACV,IAAA,OAAO,MAAA;AAAA,EACT;AAEA,EAAA,MAAM,SAAS,IAAI,GAAA,CAAI,cAAA,CAAe,KAAA,EAAO,2BAA2B,CAAC,CAAA;AACzE,EAAA,MAAA,CAAO,QAAA,GAAW,MAAA,CAAO,QAAA,KAAa,MAAA,GAAS,QAAA,GAAW,OAAA;AAC1D,EAAA,MAAA,CAAO,QAAA,GAAW,MAAA,CAAO,QAAA,CAAS,OAAA,CAAQ,mBAAmB,WAAW,CAAA;AACxE,EAAA,OAAO,OAAO,QAAA,EAAS;AACzB;AAEA,SAAS,cAAA,CAAe,OAAe,KAAA,EAAuB;AAC5D,EAAA,MAAM,UAAA,GAAa,MAAM,IAAA,EAAK;AAC9B,EAAA,IAAI,CAAC,UAAA,EAAY;AACf,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,EAAG,KAAK,CAAA,aAAA,CAAe,CAAA;AAAA,EACzC;AAEA,EAAA,IAAI,MAAA;AACJ,EAAA,IAAI;AACF,IAAA,MAAA,GAAS,IAAI,IAAI,UAAU,CAAA;AAAA,EAC7B,CAAA,CAAA,MAAQ;AACN,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,EAAG,KAAK,CAAA,oCAAA,CAAsC,CAAA;AAAA,EAChE;AAEA,EAAA,IAAI,MAAA,CAAO,QAAA,KAAa,KAAA,IAAS,MAAA,CAAO,aAAa,MAAA,EAAQ;AAC3D,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,EAAG,KAAK,CAAA,oBAAA,CAAsB,CAAA;AAAA,EAChD;AAEA,EAAA,MAAA,CAAO,QAAA,GAAW,MAAA,CAAO,QAAA,CAAS,OAAA,CAAQ,QAAQ,EAAE,CAAA;AACpD,EAAA,OAAO,MAAA,CAAO,QAAA,EAAS,CAAE,OAAA,CAAQ,OAAO,EAAE,CAAA;AAC5C;AAEA,SAASP,WAAS,KAAA,EAAkD;AAClE,EAAA,OAAO,OAAA,CAAQ,KAAK,CAAA,IAAK,OAAO,UAAU,QAAA,IAAY,CAAC,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA;AAC5E;AAEA,SAASU,kBAAAA,CAAkB,SAAiB,WAAA,EAA4B;AACtE,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,OAAO,EAAE,MAAA,EAAQ,IAAA,EAAiB,WAAA,EAAa,KAAA,EAAM;AAAA,EACvD;AAEA,EAAA,MAAM,0BACJ,WAAA,EAAa,WAAA,EAAY,CAAE,QAAA,CAAS,kBAAkB,CAAA,IAAK,KAAA;AAC7D,EAAA,MAAM,SAAA,GACJ,2BAA2B,OAAA,CAAQ,UAAA,CAAW,GAAG,CAAA,IAAK,OAAA,CAAQ,WAAW,GAAG,CAAA;AAE9E,EAAA,IAAI,CAAC,SAAA,EAAW;AACd,IAAA,OAAO,EAAE,MAAA,EAAQ,OAAA,EAAoB,WAAA,EAAa,KAAA,EAAM;AAAA,EAC1D;AAEA,EAAA,IAAI;AACF,IAAA,OAAO,EAAE,MAAA,EAAQ,IAAA,CAAK,MAAM,OAAO,CAAA,EAAc,aAAa,KAAA,EAAM;AAAA,EACtE,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,EAAE,MAAA,EAAQ,OAAA,EAAoB,WAAA,EAAa,IAAA,EAAK;AAAA,EACzD;AACF;AAEA,SAASC,kBAAiB,OAAA,EAAsC;AAC9D,EAAA,OACE,OAAA,CAAQ,GAAA,CAAI,cAAc,CAAA,IAC1B,OAAA,CAAQ,GAAA,CAAI,kBAAkB,CAAA,IAC9B,OAAA,CAAQ,GAAA,CAAI,qBAAqB,CAAA,IACjC,MAAA;AAEJ;AAEA,SAASC,oBAAAA,CAAoB,SAAkB,QAAA,EAA0B;AACvE,EAAA,IAAIZ,UAAAA,CAAS,OAAO,CAAA,EAAG;AACrB,IAAA,KAAA,MAAW,SAAA,IAAa,CAAC,OAAA,CAAQ,KAAA,EAAO,QAAQ,OAAA,EAAS,OAAA,CAAQ,OAAO,CAAA,EAAG;AACzE,MAAA,IAAI,OAAO,SAAA,KAAc,QAAA,IAAY,UAAU,IAAA,EAAK,CAAE,SAAS,CAAA,EAAG;AAChE,QAAA,OAAO,UAAU,IAAA,EAAK;AAAA,MACxB;AAAA,IACF;AAAA,EACF;AAEA,EAAA,IAAI,OAAO,OAAA,KAAY,QAAA,IAAY,QAAQ,IAAA,EAAK,CAAE,SAAS,CAAA,EAAG;AAC5D,IAAA,OAAO,QAAQ,IAAA,EAAK;AAAA,EACtB;AAEA,EAAA,OAAO,QAAA;AACT;AAEA,SAAS,iBAAA,CAAkB,OAAe,KAAA,EAAuB;AAC/D,EAAA,MAAM,UAAA,GAAa,MAAM,IAAA,EAAK;AAC9B,EAAA,IAAI,CAAC,UAAA,EAAY;AACf,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,EAAG,KAAK,CAAA,aAAA,CAAe,CAAA;AAAA,EACzC;AACA,EAAA,OAAO,mBAAmB,UAAU,CAAA;AACtC;AAEA,SAAS,YAAY,KAAA,EAAyC;AAC5D,EAAA,IAAI,CAAC,KAAA,EAAO;AACV,IAAA,OAAO,EAAA;AAAA,EACT;AAEA,EAAA,MAAM,MAAA,GAAS,IAAI,eAAA,EAAgB;AACnC,EAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,KAAK,CAAA,EAAG;AAChD,IAAA,IAAI,KAAA,KAAU,MAAA,IAAa,KAAA,KAAU,IAAA,EAAM;AACzC,MAAA;AAAA,IACF;AACA,IAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACxB,MAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,QAAA,IAAI,IAAA,KAAS,MAAA,IAAa,IAAA,KAAS,IAAA,EAAM;AACvC,UAAA,MAAA,CAAO,MAAA,CAAO,GAAA,EAAK,MAAA,CAAO,IAAI,CAAC,CAAA;AAAA,QACjC;AAAA,MACF;AACA,MAAA;AAAA,IACF;AACA,IAAA,MAAA,CAAO,GAAA,CAAI,GAAA,EAAK,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA,EAC/B;AAEA,EAAA,MAAM,OAAA,GAAU,OAAO,QAAA,EAAS;AAChC,EAAA,OAAO,OAAA,GAAU,CAAA,CAAA,EAAI,OAAO,CAAA,CAAA,GAAK,EAAA;AACnC;AAEA,SAAS,YAAA,CACP,OAAA,EACA,GAAA,EACA,SAAA,EACyB;AACzB,EAAA,IAAI;AACF,IAAA,OAAO,IAAK,OAAA,CAGkB,GAAA,EAAK,SAAS,CAAA;AAAA,EAC9C,SAAS,KAAA,EAAO;AACd,IAAA,IAAI,iBAAiB,SAAA,EAAW;AAC9B,MAAA,OAAQ,OAAA,CAGsB,KAAK,SAAS,CAAA;AAAA,IAC9C;AACA,IAAA,MAAM,KAAA;AAAA,EACR;AACF;AAEA,SAASa,aAAAA,CACP,QACA,OAAA,EACwB;AACxB,EAAA,OAAO,0BAAA,CAA2B,MAAA,EAAQJ,iBAAAA,EAAkB,MAAA,EAAQ,OAAO,CAAA;AAC7E;AAEA,SAAS,YAAA,CAAa,MAAmB,IAAA,EAA4B;AACnE,EAAA,OAAO;AAAA,IACL,GAAG,IAAA;AAAA,IACH,MAAM,IAAA,KAAS,MAAA,GAAY,MAAA,GAAY,IAAA,CAAK,UAAU,IAAI,CAAA;AAAA,IAC1D,OAAA,EAAS;AAAA,MACP,cAAA,EAAgB,kBAAA;AAAA,MAChB,GAAI,IAAA,CAAK;AAAA;AACX,GACF;AACF;AAEA,eAAe,QACb,MAAA,EACA,cAAA,EACA,MAAA,EACA,QAAA,EACA,SACA,IAAA,EACY;AACZ,EAAA,IAAI,CAAC,OAAO,OAAA,EAAS;AACnB,IAAA,MAAM,IAAI,KAAA;AAAA,MACR;AAAA,KACF;AAAA,EACF;AACA,EAAA,MAAM,GAAA,GAAM,CAAA,EAAG,MAAA,CAAO,OAAO,GAAG,QAAQ,CAAA,CAAA;AACxC,EAAA,MAAM,cAAA,GAAiB,MAAM,cAAA,CAAe,kBAAA,IAAqB;AACjE,EAAA,MAAM,eAAA,GAAkB;AAAA,IACtB,GAAG,cAAA;AAAA,IACH,GAAG,OAAA;AAAA,IACH,SACE,cAAA,EAAgB,OAAA,IAAW,OAAA,EAAS,OAAA,GAChC,EAAE,GAAI,cAAA,EAAgB,OAAA,IAAW,IAAK,GAAI,OAAA,EAAS,OAAA,IAAW,IAAI,GAClE;AAAA,GACR;AACA,EAAA,MAAM,IAAA,GAAoB;AAAA,IACxB,MAAA;AAAA,IACA,OAAA,EAASI,aAAAA,CAAa,MAAA,EAAQ,eAAe,CAAA;AAAA,IAC7C,QAAQ,eAAA,CAAgB;AAAA,GAC1B;AACA,EAAA,MAAM,SAAA,GACJ,SAAS,MAAA,IAAa,MAAA,KAAW,QAC7B,IAAA,GACA,YAAA,CAAa,MAAM,IAAI,CAAA;AAE7B,EAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,GAAA,EAAK,SAAS,CAAA;AAC3C,EAAA,MAAM,OAAA,GAAU,MAAM,QAAA,CAAS,IAAA,EAAK;AACpC,EAAA,MAAM,EAAE,QAAO,GAAIH,kBAAAA,CAAkB,SAAS,QAAA,CAAS,OAAA,CAAQ,GAAA,CAAI,cAAc,CAAC,CAAA;AAElF,EAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,IAAA,MAAM,IAAI,eAAA,CAAgB;AAAA,MACxB,OAAA,EAASE,oBAAAA,CAAoB,MAAA,EAAQ,CAAA,YAAA,EAAe,MAAM,IAAI,QAAQ,CAAA,aAAA,EAAgB,QAAA,CAAS,MAAM,CAAA,CAAE,CAAA;AAAA,MACvG,QAAQ,QAAA,CAAS,MAAA;AAAA,MACjB,QAAA;AAAA,MACA,MAAA;AAAA,MACA,SAAA,EAAWD,iBAAAA,CAAiB,QAAA,CAAS,OAAO,CAAA;AAAA,MAC5C,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAEA,EAAA,OAAO,MAAA;AACT;AAEA,SAAS,mBAAgD,OAAA,EAAuB;AAC9E,EAAA,OAAO,OAAA,CAAQ,IAAA;AACjB;AAEA,SAAS,wBAAA,CACP,QACA,OAAA,EAC8B;AAC9B,EAAA,IAAI,CAAC,OAAO,KAAA,EAAO;AACjB,IAAA,MAAM,IAAI,KAAA;AAAA,MACR;AAAA,KACF;AAAA,EACF;AAEA,EAAA,MAAM,SAAA,GACJ,MAAA,CAAO,gBAAA,IACL,UAAA,CAAqE,SAAA;AAEzE,EAAA,IAAI,CAAC,SAAA,EAAW;AACd,IAAA,MAAM,IAAI,KAAA;AAAA,MACR;AAAA,KACF;AAAA,EACF;AAEA,EAAA,MAAM,SAAS,YAAA,CAAa,SAAA,EAAW,MAAA,CAAO,KAAA,EAAO,SAAS,SAAS,CAAA;AAEvE,EAAA,MAAM,IAAA,GAAO,CAAC,OAAA,KAAuC;AACnD,IAAA,MAAA,CAAO,IAAA,CAAK,IAAA,CAAK,SAAA,CAAU,OAAO,CAAC,CAAA;AAAA,EACrC,CAAA;AAEA,EAAA,IAAI,SAAS,SAAA,EAAW;AACtB,IAAA,MAAM,QAAA,GAAW,CAAC,KAAA,KAAmB;AACnC,MAAA,MAAM,YAAA,GAAe,KAAA;AACrB,MAAA,MAAM,MAAM,YAAA,EAAc,IAAA;AAC1B,MAAA,IAAI,OAAO,QAAQ,QAAA,EAAU;AAC3B,QAAA;AAAA,MACF;AACA,MAAA,IAAI;AACF,QAAA,OAAA,CAAQ,SAAA,GAAY,IAAA,CAAK,KAAA,CAAM,GAAG,CAAsD,CAAA;AAAA,MAC1F,CAAA,CAAA,MAAQ;AACN,QAAA,OAAA,CAAQ,YAAY,EAAE,IAAA,EAAM,OAAA,EAAS,KAAA,EAAO,2DAA2D,CAAA;AAAA,MACzG;AAAA,IACF,CAAA;AAEA,IAAA,IAAI,OAAO,MAAA,CAAO,gBAAA,KAAqB,UAAA,EAAY;AACjD,MAAA,MAAA,CAAO,gBAAA,CAAiB,WAAW,QAAQ,CAAA;AAAA,IAC7C,CAAA,MAAO;AACL,MAAA,MAAA,CAAO,SAAA,GAAY,QAAA;AAAA,IACrB;AAAA,EACF;AAEA,EAAA,MAAM,KAAA,GAAQ,CAAC,OAAA,KAA8E;AAC3F,IAAA,IAAA,CAAK;AAAA,MACH,IAAA,EAAM,YAAA;AAAA,MACN,OAAO,OAAA,EAAS,KAAA;AAAA,MAChB,oBAAoB,OAAA,EAAS;AAAA,KAC9B,CAAA;AAAA,EACH,CAAA;AAEA,EAAA,IAAI,SAAS,KAAA,EAAO;AAClB,IAAA,MAAM,MAAA,GAAS,MAAM,KAAA,CAAM;AAAA,MACzB,KAAA,EAAO,OAAA,CAAQ,KAAA,EAAO,KAAA,IAAS,MAAA;AAAA,MAC/B,kBAAA,EAAoB,OAAA,CAAQ,KAAA,EAAO,kBAAA,IAAsB;AAAA,KAC1D,CAAA;AACD,IAAA,IAAI,OAAO,MAAA,CAAO,gBAAA,KAAqB,UAAA,EAAY;AACjD,MAAA,MAAA,CAAO,gBAAA,CAAiB,QAAQ,MAAM,CAAA;AAAA,IACxC,CAAA,MAAO;AACL,MAAA,MAAA,CAAO,MAAA,GAAS,MAAA;AAAA,IAClB;AAAA,EACF;AAEA,EAAA,OAAO;AAAA,IACL,MAAA;AAAA,IACA,IAAA;AAAA,IACA,KAAA;AAAA,IACA,SAAA,CAAU,QAAQ,OAAA,EAAS;AACzB,MAAA,IAAA,CAAK;AAAA,QACH,IAAA,EAAM,gBAAA;AAAA,QACN,OAAA,EAAS,MAAA;AAAA,QACT,UAAU,OAAA,IAAW;AAAA,OACtB,CAAA;AAAA,IACH,CAAA;AAAA,IACA,YAAY,MAAA,EAAQ;AAClB,MAAA,IAAA,CAAK;AAAA,QACH,IAAA,EAAM,kBAAA;AAAA,QACN,OAAA,EAAS;AAAA,OACV,CAAA;AAAA,IACH,CAAA;AAAA,IACA,OAAO,KAAA,EAAqC;AAC1C,MAAA,IAAA,CAAK;AAAA,QACH,IAAA,EAAM,aAAA;AAAA,QACN;AAAA,OACD,CAAA;AAAA,IACH,CAAA;AAAA,IACA,YAAY,MAAA,EAAQ;AAClB,MAAA,IAAA,CAAK;AAAA,QACH,IAAA,EAAM,mBAAA;AAAA,QACN,OAAA,EAAS;AAAA,OACV,CAAA;AAAA,IACH,CAAA;AAAA,IACA,WAAW,MAAA,EAAQ;AACjB,MAAA,IAAA,CAAK;AAAA,QACH,IAAA,EAAM,kBAAA;AAAA,QACN,OAAA,EAAS;AAAA,OACV,CAAA;AAAA,IACH,CAAA;AAAA,IACA,kBAAkB,YAAA,EAAc;AAC9B,MAAA,IAAA,CAAK;AAAA,QACH,IAAA,EAAM,yBAAA;AAAA,QACN,gBAAgB,YAAA,IAAgB;AAAA,OACjC,CAAA;AAAA,IACH,CAAA;AAAA,IACA,QAAA,CAAS,QAAQ,KAAA,EAAO;AACtB,MAAA,IAAA,CAAK;AAAA,QACH,IAAA,EAAM,iBAAA;AAAA,QACN,OAAA,EAAS,MAAA;AAAA,QACT,UAAA,EAAY,OAAO,UAAA,IAAc,MAAA;AAAA,QACjC,GAAA,EAAK,OAAO,GAAA,IAAO;AAAA,OACpB,CAAA;AAAA,IACH,CAAA;AAAA,IACA,KAAK,EAAA,GAAA,iBAAK,IAAI,IAAA,EAAK,EAAE,aAAY,EAAG;AAClC,MAAA,IAAA,CAAK;AAAA,QACH,IAAA,EAAM,MAAA;AAAA,QACN;AAAA,OACD,CAAA;AAAA,IACH,CAAA;AAAA,IACA,KAAA,CAAM,MAAM,MAAA,EAAQ;AAClB,MAAA,MAAA,CAAO,KAAA,CAAM,MAAM,MAAM,CAAA;AAAA,IAC3B;AAAA,GACF;AACF;AAEO,SAAS,gBAAA,CACd,MAAA,EACA,cAAA,GAAmD,EAAC,EAClC;AAClB,EAAA,MAAM,IAAA,GAAO,CACX,MAAA,EACA,QAAA,EACA,OAAA,EACA,IAAA,KACe,OAAA,CAAW,MAAA,EAAQ,cAAA,EAAgB,MAAA,EAAQ,QAAA,EAAU,OAAA,EAAS,IAAI,CAAA;AAEnF,EAAA,MAAM,QAAA,GAAqC;AAAA,IACzC,KAAK,OAAA,EAAS;AACZ,MAAA,MAAM,eAAA,GAAkB,MAAA,CAAO,eAAA,IAAmB,qBAAA,CAAsB,OAAO,KAAK,CAAA;AACpF,MAAA,IAAI,CAAC,eAAA,EAAiB;AACpB,QAAA,MAAM,IAAI,KAAA;AAAA,UACR;AAAA,SACF;AAAA,MACF;AAEA,MAAA,OAAO,OAAA;AAAA,QACL;AAAA,UACE,GAAG,MAAA;AAAA,UACH,OAAA,EAAS;AAAA,SACX;AAAA,QACA,cAAA;AAAA,QACA,KAAA;AAAA,QACA,EAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF,CAAA;AAAA,IACA,QAAQ,OAAA,EAAS;AACf,MAAA,OAAO,wBAAA,CAAyB,QAAQ,OAAO,CAAA;AAAA,IACjD;AAAA,GACF;AAEA,EAAA,OAAO;AAAA,IACL,IAAA,EAAM;AAAA,MACJ,IAAA,CAAK,OAAkC,OAAA,EAAiC;AACtE,QAAA,OAAO,IAAA;AAAA,UACL,KAAA;AAAA,UACA,CAAA,MAAA,EAAS,WAAA,CAAY,KAA4C,CAAC,CAAA,CAAA;AAAA,UAClE;AAAA,SACF;AAAA,MACF,CAAA;AAAA,MACA,MAAA,CAAO,OAAoC,OAAA,EAAiC;AAC1E,QAAA,OAAO,IAAA,CAAoC,MAAA,EAAQ,QAAA,EAAU,OAAA,EAAS,KAAK,CAAA;AAAA,MAC7E,CAAA;AAAA,MACA,GAAA,CAAI,QAAgB,OAAA,EAAiC;AACnD,QAAA,OAAO,IAAA;AAAA,UACL,KAAA;AAAA,UACA,CAAA,OAAA,EAAU,iBAAA,CAAkB,MAAA,EAAQ,cAAc,CAAC,CAAA,CAAA;AAAA,UACnD;AAAA,SACF;AAAA,MACF,CAAA;AAAA,MACA,MAAA,CAAO,MAAA,EAAgB,KAAA,EAAoC,OAAA,EAAiC;AAC1F,QAAA,OAAO,IAAA;AAAA,UACL,OAAA;AAAA,UACA,CAAA,OAAA,EAAU,iBAAA,CAAkB,MAAA,EAAQ,cAAc,CAAC,CAAA,CAAA;AAAA,UACnD,OAAA;AAAA,UACA;AAAA,SACF;AAAA,MACF,CAAA;AAAA,MACA,OAAA,CAAQ,QAAgB,OAAA,EAAiC;AACvD,QAAA,OAAO,IAAA;AAAA,UACL,MAAA;AAAA,UACA,CAAA,OAAA,EAAU,iBAAA,CAAkB,MAAA,EAAQ,cAAc,CAAC,CAAA,QAAA,CAAA;AAAA,UACnD;AAAA,SACF;AAAA,MACF,CAAA;AAAA,MACA,UAAA,EAAY;AAAA,QACV,IAAA,CAAK,MAAA,EAAgB,KAAA,EAAuC,OAAA,EAAiC;AAC3F,UAAA,OAAO,IAAA;AAAA,YACL,MAAA;AAAA,YACA,CAAA,OAAA,EAAU,iBAAA,CAAkB,MAAA,EAAQ,cAAc,CAAC,CAAA,YAAA,CAAA;AAAA,YACnD,OAAA;AAAA,YACA,SAAS;AAAC,WACZ;AAAA,QACF;AAAA,OACF;AAAA,MACA,MAAA,EAAQ;AAAA,QACN,IAAA,CAAK,QAAgB,OAAA,EAAiC;AACpD,UAAA,OAAO,IAAA;AAAA,YACL,KAAA;AAAA,YACA,CAAA,OAAA,EAAU,iBAAA,CAAkB,MAAA,EAAQ,cAAc,CAAC,CAAA,QAAA,CAAA;AAAA,YACnD;AAAA,WACF;AAAA,QACF,CAAA;AAAA,QACA,GAAA,CAAI,MAAA,EAAgB,KAAA,EAAoC,OAAA,EAAiC;AACvF,UAAA,OAAO,IAAA;AAAA,YACL,MAAA;AAAA,YACA,CAAA,OAAA,EAAU,iBAAA,CAAkB,MAAA,EAAQ,cAAc,CAAC,CAAA,QAAA,CAAA;AAAA,YACnD,OAAA;AAAA,YACA;AAAA,WACF;AAAA,QACF,CAAA;AAAA,QACA,MAAA,CAAO,MAAA,EAAgB,MAAA,EAAgB,OAAA,EAAiC;AACtE,UAAA,OAAO,IAAA;AAAA,YACL,QAAA;AAAA,YACA,CAAA,OAAA,EAAU,kBAAkB,MAAA,EAAQ,cAAc,CAAC,CAAA,SAAA,EAAY,iBAAA,CAAkB,MAAA,EAAQ,cAAc,CAAC,CAAA,CAAA;AAAA,YACxG;AAAA,WACF;AAAA,QACF;AAAA,OACF;AAAA,MACA,OAAA,EAAS;AAAA,QACP,IAAA,CAAK,MAAA,EAAgB,KAAA,EAAqC,OAAA,EAAiC;AACzF,UAAA,OAAO,IAAA;AAAA,YACL,KAAA;AAAA,YACA,CAAA,OAAA,EAAU,kBAAkB,MAAA,EAAQ,cAAc,CAAC,CAAA,SAAA,EAAY,WAAA,CAAY,KAA4C,CAAC,CAAA,CAAA;AAAA,YACxH;AAAA,WACF;AAAA,QACF,CAAA;AAAA,QACA,IAAA,CAAK,MAAA,EAAgB,KAAA,EAAqC,OAAA,EAAiC;AACzF,UAAA,OAAO,IAAA;AAAA,YACL,MAAA;AAAA,YACA,CAAA,OAAA,EAAU,iBAAA,CAAkB,MAAA,EAAQ,cAAc,CAAC,CAAA,SAAA,CAAA;AAAA,YACnD,OAAA;AAAA,YACA;AAAA,WACF;AAAA,QACF,CAAA;AAAA,QACA,MAAA,CAAO,MAAA,EAAgB,SAAA,EAAmB,KAAA,EAAqC,OAAA,EAAiC;AAC9G,UAAA,OAAO,IAAA;AAAA,YACL,OAAA;AAAA,YACA,CAAA,OAAA,EAAU,kBAAkB,MAAA,EAAQ,cAAc,CAAC,CAAA,UAAA,EAAa,iBAAA,CAAkB,SAAA,EAAW,iBAAiB,CAAC,CAAA,CAAA;AAAA,YAC/G,OAAA;AAAA,YACA;AAAA,WACF;AAAA,QACF,CAAA;AAAA,QACA,MAAA,CAAO,MAAA,EAAgB,SAAA,EAAmB,OAAA,EAAiC;AACzE,UAAA,OAAO,IAAA;AAAA,YACL,QAAA;AAAA,YACA,CAAA,OAAA,EAAU,kBAAkB,MAAA,EAAQ,cAAc,CAAC,CAAA,UAAA,EAAa,iBAAA,CAAkB,SAAA,EAAW,iBAAiB,CAAC,CAAA,CAAA;AAAA,YAC/G;AAAA,WACF;AAAA,QACF;AAAA;AACF,KACF;AAAA,IACA,OAAA,EAAS;AAAA,MACP,QAAA,EAAU;AAAA,QACR,GAAA,CAAI,SAAA,EAAmB,KAAA,EAAqC,OAAA,EAAiC;AAC3F,UAAA,OAAO,IAAA;AAAA,YACL,MAAA;AAAA,YACA,CAAA,UAAA,EAAa,iBAAA,CAAkB,SAAA,EAAW,iBAAiB,CAAC,CAAA,UAAA,CAAA;AAAA,YAC5D,OAAA;AAAA,YACA;AAAA,WACF;AAAA,QACF,CAAA;AAAA,QACA,MAAA,CAAO,SAAA,EAAmB,KAAA,EAAe,OAAA,EAAiC;AACxE,UAAA,OAAO,IAAA;AAAA,YACL,QAAA;AAAA,YACA,CAAA,UAAA,EAAa,kBAAkB,SAAA,EAAW,iBAAiB,CAAC,CAAA,WAAA,EAAc,iBAAA,CAAkB,KAAA,EAAO,gBAAgB,CAAC,CAAA,CAAA;AAAA,YACpH;AAAA,WACF;AAAA,QACF;AAAA,OACF;AAAA,MACA,MAAA,CAAO,OAAwC,OAAA,EAAiC;AAC9E,QAAA,OAAO,IAAA;AAAA,UACL,MAAA;AAAA,UACA,kBAAA;AAAA,UACA,OAAA;AAAA,UACA;AAAA,SACF;AAAA,MACF;AAAA,KACF;AAAA,IACA;AAAA,GACF;AACF;AAEO,IAAM,eAAA,GAAkB;AAAA,EAC7B,SAAA,EAAW,MAAA;AAAA,EACX,QAAA,EAAU,OAAA;AAAA,EACV,OAAA,EAAS;AAAA,IACP,EAAE,IAAA,EAAM,WAAA,EAAa,MAAA,EAAQ,KAAA,EAAO,MAAM,aAAA,EAAc;AAAA,IACxD,EAAE,IAAA,EAAM,YAAA,EAAc,MAAA,EAAQ,MAAA,EAAQ,MAAM,aAAA,EAAc;AAAA,IAC1D,EAAE,IAAA,EAAM,SAAA,EAAW,MAAA,EAAQ,KAAA,EAAO,MAAM,uBAAA,EAAwB;AAAA,IAChE,EAAE,IAAA,EAAM,YAAA,EAAc,MAAA,EAAQ,OAAA,EAAS,MAAM,uBAAA,EAAwB;AAAA,IACrE,EAAE,IAAA,EAAM,aAAA,EAAe,MAAA,EAAQ,MAAA,EAAQ,MAAM,+BAAA,EAAgC;AAAA,IAC7E,EAAE,IAAA,EAAM,kBAAA,EAAoB,MAAA,EAAQ,KAAA,EAAO,MAAM,gCAAA,EAAiC;AAAA,IAClF,EAAE,IAAA,EAAM,iBAAA,EAAmB,MAAA,EAAQ,MAAA,EAAQ,MAAM,gCAAA,EAAiC;AAAA,IAClF,EAAE,IAAA,EAAM,mBAAA,EAAqB,MAAA,EAAQ,OAAA,EAAS,MAAM,6CAAA,EAA8C;AAAA,IAClG,EAAE,IAAA,EAAM,mBAAA,EAAqB,MAAA,EAAQ,QAAA,EAAU,MAAM,6CAAA,EAA8C;AAAA,IACnG,EAAE,IAAA,EAAM,mBAAA,EAAqB,MAAA,EAAQ,MAAA,EAAQ,MAAM,mCAAA,EAAoC;AAAA,IACvF,EAAE,IAAA,EAAM,iBAAA,EAAmB,MAAA,EAAQ,KAAA,EAAO,MAAM,+BAAA,EAAgC;AAAA,IAChF,EAAE,IAAA,EAAM,gBAAA,EAAkB,MAAA,EAAQ,MAAA,EAAQ,MAAM,+BAAA,EAAgC;AAAA,IAChF,EAAE,IAAA,EAAM,kBAAA,EAAoB,MAAA,EAAQ,QAAA,EAAU,MAAM,yCAAA,EAA0C;AAAA,IAC9F,EAAE,IAAA,EAAM,aAAA,EAAe,MAAA,EAAQ,MAAA,EAAQ,MAAM,uCAAA,EAAwC;AAAA,IACrF,EAAE,IAAA,EAAM,gBAAA,EAAkB,MAAA,EAAQ,QAAA,EAAU,MAAM,+CAAA,EAAgD;AAAA,IAClG,EAAE,IAAA,EAAM,gBAAA,EAAkB,MAAA,EAAQ,MAAA,EAAQ,MAAM,uBAAA,EAAwB;AAAA,IACxE,EAAE,IAAA,EAAM,iBAAA,EAAmB,MAAA,EAAQ,KAAA,EAAO,MAAM,WAAA,EAAY;AAAA,IAC5D,EAAE,IAAA,EAAM,iBAAA,EAAmB,MAAA,EAAQ,KAAA,EAAO,MAAM,cAAA;AAAe;AAEnE;AAEO,SAAS,eAAe,OAAA,EAAwD;AACrF,EAAA,OAAO,mBAAmB,OAAO,CAAA;AACnC;AAEO,SAAS,kBAAkB,OAAA,EAA8D;AAC9F,EAAA,OAAO,mBAAmB,OAAO,CAAA;AACnC;;;AC1lBA,IAAM,oBAAA,GAAuB,kBAAA;AAuM7B,SAAS,gBAAgB,UAAA,EAAgE;AACvF,EAAA,OAAO,WAAW,GAAA,CAAI,CAAA,SAAA,MAAc,EAAE,GAAG,WAAU,CAAE,CAAA;AACvD;AAEO,SAAS,0BACd,KAAA,EAC4B;AAC5B,EAAA,OAAO;AAAA,IACL,UAAA,EAAY,eAAA,CAAgB,KAAA,CAAM,UAAU,CAAA;AAAA,IAC5C,OAAO,KAAA,CAAM,KAAA;AAAA,IACb,QAAQ,KAAA,CAAM,MAAA;AAAA,IACd,OAAO,KAAA,CAAM,KAAA,GAAQ,EAAE,GAAG,KAAA,CAAM,OAAM,GAAI,MAAA;AAAA,IAC1C,aAAa,KAAA,CAAM,WAAA;AAAA,IACnB,UAAU,KAAA,CAAM,QAAA;AAAA,IAChB,YAAY,KAAA,CAAM;AAAA,GACpB;AACF;AAEO,SAAS,wBACd,KAAA,EAC0B;AAC1B,EAAA,OAAO;AAAA,IACL,OAAA,EAAS,MAAM,OAAA,CAAQ,GAAA,CAAI,aAAW,EAAE,GAAG,QAAO,CAAE,CAAA;AAAA,IACpD,OAAO,KAAA,CAAM,KAAA;AAAA,IACb,QAAQ,KAAA,CAAM,MAAA;AAAA,IACd,OAAO,KAAA,CAAM,KAAA,GAAQ,EAAE,GAAG,KAAA,CAAM,OAAM,GAAI;AAAA,GAC5C;AACF;AAEA,SAAS,qBAAqB,IAAA,EAA6D;AACzF,EAAA,IAAI,IAAA,CAAK,SAAS,OAAA,EAAS;AACzB,IAAA,OAAO;AAAA,MACL,IAAA,EAAM,aAAA;AAAA,MACN,QAAA,EAAU,gBAAA;AAAA,MACV,SAAS,IAAA,CAAK;AAAA,KAChB;AAAA,EACF;AAEA,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,IAAA,CAAK,OAAA,CAAQ,MAAA,KAAW,SAAY,kBAAA,GAAqB,gBAAA;AAAA,IAC/D,QAAA,EAAU,gBAAA;AAAA,IACV,SAAS,IAAA,CAAK;AAAA,GAChB;AACF;AAEA,SAAS,sBAAsB,SAAA,EAAuC;AACpE,EAAA,OAAO,SAAA,IAAa,mBAAA;AACtB;AAEO,SAAS,oBAAoB,KAAA,EAKX;AACvB,EAAA,OAAO;AAAA,IACL,OAAA,EAAS,CAAA;AAAA,IACT,IAAA,EAAM,QAAA;AAAA,IACN,WAAW,KAAA,CAAM,SAAA;AAAA,IACjB,KAAA,EAAO;AAAA,MACL,SAAS,KAAA,CAAM,OAAA;AAAA,MACf,KAAA,EAAO,yBAAA,CAA0B,KAAA,CAAM,KAAK;AAAA,KAC9C;AAAA,IACA,SAAA,EAAW,oBAAA,CAAqB,KAAA,CAAM,IAAI;AAAA,GAC5C;AACF;AAEO,SAAS,8BAGd,KAAA,EASuC;AACvC,EAAA,OAAO;AAAA,IACL,OAAA,EAAS,CAAA;AAAA,IACT,IAAA,EAAM,UAAA;AAAA,IACN,WAAW,KAAA,CAAM,SAAA;AAAA,IACjB,KAAA,EAAO;AAAA,MACL,MAAA,EAAQ,MAAM,OAAA,CAAQ,MAAA;AAAA,MACtB,KAAA,EAAO,MAAM,OAAA,CAAQ,KAAA;AAAA,MACrB,OAAA,EAAS,MAAM,OAAA,CAAQ,OAAA;AAAA,MACvB,KAAA,EAAO,MAAM,OAAA,CAAQ;AAAA,KACvB;AAAA,IACA,QAAA,EAAU;AAAA,MACR,SAAS,KAAA,CAAM,eAAA;AAAA,MACf,SAAA,EAAW,yBAAA,CAA0B,KAAA,CAAM,SAAS,CAAA;AAAA,MACpD,cAAA,EAAgB,yBAAA,CAA0B,KAAA,CAAM,cAAc;AAAA,KAChE;AAAA,IACA,SAAA,EAAW,uBAAA,CAAsC,KAAA,CAAM,IAAI;AAAA,GAC7D;AACF;AAEO,SAAS,4BAGd,KAAA,EASuC;AACvC,EAAA,OAAO;AAAA,IACL,OAAA,EAAS,CAAA;AAAA,IACT,IAAA,EAAM,UAAA;AAAA,IACN,WAAW,KAAA,CAAM,SAAA;AAAA,IACjB,KAAA,EAAO;AAAA,MACL,MAAA,EAAQ,MAAM,OAAA,CAAQ,MAAA;AAAA,MACtB,KAAA,EAAO,MAAM,OAAA,CAAQ,KAAA;AAAA,MACrB,OAAA,EAAS,MAAM,OAAA,CAAQ,OAAA;AAAA,MACvB,KAAA,EAAO,MAAM,OAAA,CAAQ;AAAA,KACvB;AAAA,IACA,QAAA,EAAU;AAAA,MACR,SAAS,KAAA,CAAM,eAAA;AAAA,MACf,SAAA,EAAW,yBAAA,CAA0B,KAAA,CAAM,SAAS,CAAA;AAAA,MACpD,cAAA,EAAgB,yBAAA,CAA0B,KAAA,CAAM,cAAc;AAAA,KAChE;AAAA,IACA,SAAA,EAAW;AAAA,MACT,IAAA,EAAM,kBAAA;AAAA,MACN,QAAA,EAAU,gBAAA;AAAA,MACV,SAAS,KAAA,CAAM;AAAA;AACjB,GACF;AACF;AAEA,SAAS,wBAIP,IAAA,EAC4C;AAC5C,EAAA,IAAI,IAAA,CAAK,SAAS,OAAA,EAAS;AACzB,IAAA,OAAO;AAAA,MACL,IAAA,EAAM,gBAAA;AAAA,MACN,QAAA,EAAU,gBAAA;AAAA,MACV,SAAS,IAAA,CAAK;AAAA,KAChB;AAAA,EACF;AAEA,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,IAAA,CAAK,OAAA,CAAQ,MAAA,KAAW,SAAY,kBAAA,GAAqB,gBAAA;AAAA,IAC/D,QAAA,EAAU,gBAAA;AAAA,IACV,SAAS,IAAA,CAAK;AAAA,GAChB;AACF;AAEO,SAAS,oBAAoB,OAAA,EAAoD;AACtF,EAAA,OAAO;AAAA,IACL,OAAA,EAAS,CAAA;AAAA,IACT,IAAA,EAAM,QAAA;AAAA,IACN,WAAW,OAAA,CAAQ,UAAA;AAAA,IACnB,KAAA,EAAO;AAAA,MACL,QAAQ,OAAA,CAAQ,WAAA;AAAA,MAChB,WAAW,OAAA,CAAQ,OAAA;AAAA,MACnB,OAAO,OAAA,CAAQ,KAAA;AAAA,MACf,MAAM,OAAA,CAAQ,IAAA;AAAA,MACd,eAAe,OAAA,CAAQ;AAAA,KACzB;AAAA,IACA,SAAA,EAAW;AAAA,MACT,IAAA,EAAM,QAAA;AAAA,MACN,QAAA,EAAU,iBAAA;AAAA,MACV;AAAA;AACF,GACF;AACF;AAEO,SAAS,oBAAoB,OAAA,EAAoD;AACtF,EAAA,OAAO;AAAA,IACL,OAAA,EAAS,CAAA;AAAA,IACT,IAAA,EAAM,QAAA;AAAA,IACN,WAAW,OAAA,CAAQ,UAAA;AAAA,IACnB,KAAA,EAAO;AAAA,MACL,QAAQ,OAAA,CAAQ,WAAA;AAAA,MAChB,YAAY,OAAA,CAAQ,WAAA;AAAA,MACpB,YAAY,OAAA,CAAQ,WAAA;AAAA,MACpB,WAAW,OAAA,CAAQ,OAAA;AAAA,MACnB,OAAO,OAAA,CAAQ,KAAA;AAAA,MACf,MAAM,OAAA,CAAQ,IAAA;AAAA,MACd,eAAe,OAAA,CAAQ;AAAA,KACzB;AAAA,IACA,SAAA,EAAW;AAAA,MACT,IAAA,EAAM,QAAA;AAAA,MACN,QAAA,EAAU,iBAAA;AAAA,MACV;AAAA;AACF,GACF;AACF;AAEO,SAAS,oBAAoB,KAAA,EAGX;AACvB,EAAA,OAAO;AAAA,IACL,OAAA,EAAS,CAAA;AAAA,IACT,IAAA,EAAM,QAAA;AAAA,IACN,SAAA,EAAW,qBAAA,CAAsB,KAAA,CAAM,OAAA,CAAQ,UAAU,CAAA;AAAA,IACzD,KAAA,EAAO;AAAA,MACL,MAAA,EAAQ,MAAM,OAAA,CAAQ,WAAA;AAAA,MACtB,KAAA,EAAO,yBAAA,CAA0B,KAAA,CAAM,KAAK,CAAA;AAAA,MAC5C,SAAA,EAAW,MAAM,OAAA,CAAQ;AAAA,KAC3B;AAAA,IACA,SAAA,EAAW;AAAA,MACT,IAAA,EAAM,QAAA;AAAA,MACN,QAAA,EAAU,iBAAA;AAAA,MACV,SAAS,KAAA,CAAM;AAAA;AACjB,GACF;AACF;AAEO,SAAS,oBAAoB,KAAA,EAGX;AACvB,EAAA,OAAO;AAAA,IACL,OAAA,EAAS,CAAA;AAAA,IACT,IAAA,EAAM,QAAA;AAAA,IACN,SAAA,EAAW,MAAM,OAAA,CAAQ,UAAA;AAAA,IACzB,KAAA,EAAO;AAAA,MACL,UAAA,EAAY,MAAM,OAAA,CAAQ,WAAA;AAAA,MAC1B,KAAA,EAAO,yBAAA,CAA0B,KAAA,CAAM,KAAK,CAAA;AAAA,MAC5C,SAAA,EAAW,MAAM,OAAA,CAAQ;AAAA,KAC3B;AAAA,IACA,SAAA,EAAW;AAAA,MACT,IAAA,EAAM,QAAA;AAAA,MACN,QAAA,EAAU,iBAAA;AAAA,MACV,SAAS,KAAA,CAAM;AAAA;AACjB,GACF;AACF;AAEO,SAAS,iBAAiB,KAAA,EAOX;AACpB,EAAA,OAAO;AAAA,IACL,OAAA,EAAS,CAAA;AAAA,IACT,IAAA,EAAM,KAAA;AAAA,IACN,cAAc,KAAA,CAAM,YAAA;AAAA,IACpB,KAAA,EAAO;AAAA,MACL,MAAM,KAAA,CAAM,IAAA;AAAA,MACZ,QAAQ,KAAA,CAAM,eAAA;AAAA,MACd,KAAA,EAAO,uBAAA,CAAwB,KAAA,CAAM,KAAK;AAAA,KAC5C;AAAA,IACA,SAAA,EAAW;AAAA,MACT,IAAA,EAAM,KAAA,CAAM,QAAA,KAAa,cAAA,GAAiB,UAAA,GAAa,SAAA;AAAA,MACvD,UAAU,KAAA,CAAM,QAAA;AAAA,MAChB,SAAS,KAAA,CAAM;AAAA;AACjB,GACF;AACF;AAEO,SAAS,sBAAsB,KAAA,EAAuC;AAC3E,EAAA,OAAO;AAAA,IACL,OAAA,EAAS,CAAA;AAAA,IACT,IAAA,EAAM,OAAA;AAAA,IACN,KAAA,EAAO;AAAA,MACL;AAAA,KACF;AAAA,IACA,SAAA,EAAW;AAAA,MACT,IAAA,EAAM,WAAA;AAAA,MACN,QAAA,EAAU,gBAAA;AAAA,MACV,OAAA,EAAS;AAAA,QACP;AAAA;AACF;AACF,GACF;AACF;AAEO,SAAS,oBAAA,CACd,QACA,GAAA,EACM;AACN,EAAA,IAAI,CAAC,GAAA,EAAK;AACR,IAAA;AAAA,EACF;AACA,EAAA,IAAI,CAAC,MAAA,IAAW,OAAO,WAAW,QAAA,IAAY,OAAO,WAAW,UAAA,EAAa;AAC3E,IAAA;AAAA,EACF;AACA,EAAA,MAAA,CAAO,cAAA,CAAe,QAAQ,oBAAA,EAAsB;AAAA,IAClD,KAAA,EAAO,GAAA;AAAA,IACP,UAAA,EAAY,KAAA;AAAA,IACZ,YAAA,EAAc,IAAA;AAAA,IACd,QAAA,EAAU;AAAA,GACX,CAAA;AACH;AAEO,SAAS,kBACd,KAAA,EAC4B;AAC5B,EAAA,IAAI,CAAC,KAAA,IAAU,OAAO,UAAU,QAAA,IAAY,OAAO,UAAU,UAAA,EAAa;AACxE,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,OAAS,KAAA,CAAkC,oBAAoB,CAAA,IAAyC,IAAA;AAC1G;;;ACjgBA,IAAM,+BAAA,GAAkC;AAAA,EACtC,gBAAA;AAAA,EACA,eAAA;AAAA,EACA,uBAAA;AAAA,EACA,sBAAA;AAAA,EACA,mBAAA;AAAA,EACA,kBAAA;AAAA,EACA,eAAA;AAAA,EACA,cAAA;AAAA,EACA,sBAAA;AAAA,EACA,qBAAA;AAAA,EACA,kBAAA;AAAA,EACA,iBAAA;AAAA,EACA,oCAAA;AAAA,EACA,kCAAA;AAAA,EACA,eAAA;AAAA,EACA;AACF,CAAA;AAoCA,SAAS,6BAA6B,KAAA,EAAgD;AACpF,EAAA,MAAM,OAAA,GAAU,MAAM,IAAA,EAAK;AAC3B,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,IAAI,IAAA,GAAO,OAAA,CAAQ,OAAA,CAAQ,QAAA,EAAU,EAAE,CAAA;AACvC,EAAA,IAAI,IAAA,CAAK,UAAA,CAAW,QAAQ,CAAA,EAAG;AAC7B,IAAA,IAAA,GAAO,IAAA,CAAK,MAAM,CAAC,CAAA;AAAA,EACrB;AAEA,EAAA,IAAI,YAAA;AACJ,EAAA,IAAI,QAAA,GAAW,IAAA;AACf,EAAA,MAAM,YAAA,GAAe,IAAA,CAAK,KAAA,CAAM,oBAAoB,CAAA;AACpD,EAAA,IAAI,YAAA,EAAc;AAChB,IAAA,YAAA,GAAe,YAAA,CAAa,CAAC,CAAA,CAAE,IAAA,EAAK,IAAK,MAAA;AACzC,IAAA,QAAA,GAAW,YAAA,CAAa,CAAC,CAAA,CAAE,IAAA,EAAK;AAAA,EAClC;AAEA,EAAA,MAAM,aAAA,GAAgB,QAAA,CAAS,KAAA,CAAM,oBAAoB,CAAA;AACzD,EAAA,IAAI,CAAC,aAAA,EAAe;AAClB,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,MAAM,WAAW,aAAA,CAAc,CAAC,CAAA,CAAE,OAAA,CAAQ,cAAc,EAAE,CAAA;AAC1D,EAAA,MAAM,IAAA,GAAO,MAAA,CAAO,aAAA,CAAc,CAAC,CAAC,CAAA;AACpC,EAAA,MAAM,MAAA,GAAS,MAAA,CAAO,aAAA,CAAc,CAAC,CAAC,CAAA;AACtC,EAAA,IAAI,CAAC,OAAO,QAAA,CAAS,IAAI,KAAK,CAAC,MAAA,CAAO,QAAA,CAAS,MAAM,CAAA,EAAG;AACtD,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,MAAM,cAAA,GAAiB,QAAA,CAAS,OAAA,CAAQ,KAAA,EAAO,GAAG,CAAA;AAClD,EAAA,MAAM,WAAW,cAAA,CAAe,KAAA,CAAM,GAAG,CAAA,CAAE,EAAA,CAAG,EAAE,CAAA,IAAK,QAAA;AACrD,EAAA,OAAO;AAAA,IACL,QAAA;AAAA,IACA,QAAA;AAAA,IACA,IAAA;AAAA,IACA,MAAA;AAAA,IACA,KAAA,EAAO,OAAA;AAAA,IACP;AAAA,GACF;AACF;AAEA,SAAS,yBAAA,GAA6D;AACpE,EAAA,MAAM,KAAA,GAAQ,IAAI,KAAA,EAAM,CAAE,KAAA;AAC1B,EAAA,IAAI,CAAC,OAAO,OAAO,IAAA;AACnB,EAAA,MAAM,MAAA,GAAS,KAAA,CACZ,KAAA,CAAM,IAAI,EACV,KAAA,CAAM,CAAC,CAAA,CACP,GAAA,CAAI,WAAS,KAAA,CAAM,IAAA,EAAM,CAAA,CACzB,OAAO,OAAO,CAAA;AAEjB,EAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AAC1B,IAAA,IAAI,gCAAgC,IAAA,CAAK,CAAA,OAAA,KAAW,MAAM,QAAA,CAAS,OAAO,CAAC,CAAA,EAAG;AAC5E,MAAA;AAAA,IACF;AACA,IAAA,MAAM,QAAA,GAAW,6BAA6B,KAAK,CAAA;AACnD,IAAA,IAAI,UAAU,OAAO,QAAA;AAAA,EACvB;AAEA,EAAA,MAAM,QAAA,GAAW,OAAO,IAAA,CAAK,CAAA,KAAA,KAAS,CAAC,KAAA,CAAM,QAAA,CAAS,2BAA2B,CAAC,CAAA;AAClF,EAAA,OAAO,QAAA,GAAW,4BAAA,CAA6B,QAAQ,CAAA,GAAI,IAAA;AAC7D;AAEA,SAAS,wBAAwB,KAAA,EAAoC;AACnE,EAAA,MAAM,MAAA,GAAS,KAAA,CAAM,KAAA,IAAS,KAAA,CAAM,YAAA,IAAgB,SAAA;AACpD,EAAA,MAAM,YAAA,GAAe,KAAA,CAAM,OAAA,EAAS,KAAA,GAAQ,OAAA,GAAU,IAAA;AACtD,EAAA,MAAM,MAAA,GAAS,CAAA,mBAAA,EAAsB,KAAA,CAAM,SAAA,CAAU,aAAa,CAAA,CAAA,EAAI,KAAA,CAAM,QAAQ,IAAI,MAAM,CAAA,CAAA,EAAI,KAAA,CAAM,UAAU,MAAM,YAAY,CAAA,CAAA;AACpI,EAAA,OAAA,CAAQ,IAAA,CAAK,QAAQ,KAAK,CAAA;AAC5B;AAEO,SAAS,qBAAqB,MAAA,EAA6D;AAChG,EAAA,OAAO,MAAA,EAAQ,iBAAgB,IAAK,IAAA;AACtC;AAEO,SAAS,wBAAA,CACd,QACA,eAAA,EAC0B;AAC1B,EAAA,IAAI,iBAAiB,eAAA,IAAmB,MAAA;AAExC,EAAA,OAAO;AAAA,IACL,QAAQ,QAAA,EAAU;AAChB,MAAA,IAAI,QAAA,EAAU;AACZ,QAAA,cAAA,GAAiB,QAAA;AACjB,QAAA,OAAO,QAAA;AAAA,MACT;AACA,MAAA,IAAI,mBAAmB,MAAA,EAAW;AAChC,QAAA,OAAO,cAAA;AAAA,MACT;AACA,MAAA,MAAM,gBAAA,GAAmB,qBAAqB,MAAM,CAAA;AACpD,MAAA,IAAI,gBAAA,EAAkB;AACpB,QAAA,cAAA,GAAiB,gBAAA;AAAA,MACnB;AACA,MAAA,OAAO,gBAAA;AAAA,IACT;AAAA,GACF;AACF;AAEO,SAAS,kBACd,QAAA,EAC+B;AAC/B,EAAA,MAAM,cAAc,QAAA,EAAU,YAAA;AAC9B,EAAA,IAAI,CAAC,WAAA,EAAa;AAChB,IAAA,OAAO,MAAA;AAAA,EACT;AAEA,EAAA,MAAM,SACJ,OAAO,WAAA,KAAgB,YAAY,WAAA,CAAY,MAAA,GAAS,YAAY,MAAA,GAAS,uBAAA;AAE/E,EAAA,MAAM,IAAA,GAAO,CAAC,KAAA,KAAiC;AAC7C,IAAA,IAAI;AACF,MAAA,MAAA,CAAO,KAAK,CAAA;AAAA,IACd,SAAS,KAAA,EAAO;AACd,MAAA,OAAA,CAAQ,IAAA,CAAK,oCAAoC,KAAK,CAAA;AAAA,IACxD;AAAA,EACF,CAAA;AAEA,EAAA,OAAO;AAAA,IACL,eAAA,EAAiB,yBAAA;AAAA,IACjB,cAAA,CACE,OAAA,EACA,MAAA,EACA,UAAA,EACA,QAAA,EACA;AACA,MAAA,IAAA,CAAK;AAAA,QACH,SAAA,EAAA,iBAAW,IAAI,IAAA,EAAK,EAAE,WAAA,EAAY;AAAA,QAClC,UAAA;AAAA,QACA,WAAW,OAAA,CAAQ,SAAA;AAAA,QACnB,UAAU,OAAA,CAAQ,QAAA;AAAA,QAClB,OAAO,OAAA,CAAQ,KAAA;AAAA,QACf,cAAc,OAAA,CAAQ,YAAA;AAAA,QACtB,KAAK,OAAA,CAAQ,GAAA;AAAA,QACb,SAAS,OAAA,CAAQ,OAAA;AAAA,QACjB,KAAK,OAAA,CAAQ,GAAA;AAAA,QACb,SAAS,OAAA,CAAQ,OAAA;AAAA,QACjB,QAAA;AAAA,QACA,OAAA,EAAS;AAAA,UACP,QAAQ,MAAA,CAAO,MAAA;AAAA,UACf,OAAO,MAAA,CAAO,KAAA;AAAA,UACd,YAAA,EAAc,OAAO,YAAA,IAAgB,IAAA;AAAA,UACrC,KAAA,EAAO,OAAO,KAAA,IAAS,IAAA;AAAA,UACvB,MAAM,MAAA,CAAO,IAAA;AAAA,UACb,KAAK,MAAA,CAAO;AAAA;AACd,OACD,CAAA;AAAA,IACH,CAAA;AAAA,IACA,cAAA,CACE,OAAA,EACA,KAAA,EACA,UAAA,EACA,QAAA,EACA;AACA,MAAA,IAAA,CAAK;AAAA,QACH,SAAA,EAAA,iBAAW,IAAI,IAAA,EAAK,EAAE,WAAA,EAAY;AAAA,QAClC,UAAA;AAAA,QACA,WAAW,OAAA,CAAQ,SAAA;AAAA,QACnB,UAAU,OAAA,CAAQ,QAAA;AAAA,QAClB,OAAO,OAAA,CAAQ,KAAA;AAAA,QACf,cAAc,OAAA,CAAQ,YAAA;AAAA,QACtB,KAAK,OAAA,CAAQ,GAAA;AAAA,QACb,SAAS,OAAA,CAAQ,OAAA;AAAA,QACjB,KAAK,OAAA,CAAQ,GAAA;AAAA,QACb,SAAS,OAAA,CAAQ,OAAA;AAAA,QACjB,QAAA;AAAA,QACA,WAAA,EAAa;AAAA,OACd,CAAA;AAAA,IACH;AAAA,GACF;AACF;AAEA,eAAsB,qBAAA,CACpB,MAAA,EACA,OAAA,EACA,MAAA,EACA,gBAAA,EAC0B;AAC1B,EAAA,MAAM,QAAA,GAAW,MAAA,GAAU,gBAAA,IAAoB,MAAA,CAAO,iBAAgB,GAAK,IAAA;AAC3E,EAAA,MAAM,SAAA,GAAY,MAAA,GAAS,IAAA,CAAK,GAAA,EAAI,GAAI,CAAA;AACxC,EAAA,IAAI;AACF,IAAA,MAAM,MAAA,GAAS,MAAM,MAAA,EAAO;AAC5B,IAAA,oBAAA,CAAqB,MAAA,EAAQ,QAAQ,GAAG,CAAA;AACxC,IAAA,IAAI,MAAA,EAAQ;AACV,MAAA,MAAA,CAAO,eAAe,OAAA,EAAS,MAAA,EAAQ,KAAK,GAAA,EAAI,GAAI,WAAW,QAAQ,CAAA;AAAA,IACzE;AACA,IAAA,OAAO,MAAA;AAAA,EACT,SAAS,KAAA,EAAO;AACd,IAAA,oBAAA,CAAqB,KAAA,EAAO,QAAQ,GAAG,CAAA;AACvC,IAAA,IAAI,MAAA,EAAQ;AACV,MAAA,MAAA,CAAO,eAAe,OAAA,EAAS,KAAA,EAAO,KAAK,GAAA,EAAI,GAAI,WAAW,QAAQ,CAAA;AAAA,IACxE;AACA,IAAA,MAAM,KAAA;AAAA,EACR;AACF;;;AC7PA,SAAS,sBAAsB,KAAA,EAA+C;AAC5E,EAAA,MAAM,UAAA,GAAa,OAAO,IAAA,EAAK;AAC/B,EAAA,OAAO,aAAa,UAAA,GAAa,MAAA;AACnC;AAEO,SAAS,oBAAoB,KAAA,EAA4C;AAC9E,EAAA,IAAI,CAAC,KAAA,IAAS,OAAO,KAAA,KAAU,QAAA,EAAU;AACvC,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,MAAM,SAAA,GAAY,KAAA;AAClB,EAAA,OAAO,OAAA,CAAQ,UAAU,IAAA,IAAQ,KAAA,CAAM,QAAQ,SAAA,CAAU,IAAA,CAAK,UAAU,CAAC,CAAA;AAC3E;AAEO,SAAS,iCAAA,CACd,MAAA,EACA,OAAA,GAAoD,EAAC,EAC7C;AACR,EAAA,MAAM,iBAAA,GAAoB,qBAAA,CAAsB,MAAA,CAAO,IAAA,CAAK,SAAS,CAAA;AACrE,EAAA,IAAI,iBAAA,EAAmB;AACrB,IAAA,OAAO,iBAAA;AAAA,EACT;AAEA,EAAA,MAAM,aAAa,qBAAA,CAAsB,MAAA,CAAO,IAAA,CAAK,MAAA,IAAU,QAAQ,cAAc,CAAA;AACrF,EAAA,MAAM,YAAY,qBAAA,CAAsB,MAAA,CAAO,IAAA,CAAK,KAAA,IAAS,QAAQ,aAAa,CAAA;AAElF,EAAA,IAAI,CAAC,SAAA,EAAW;AACd,IAAA,MAAM,IAAI,KAAA;AAAA,MACR;AAAA,KACF;AAAA,EACF;AAEA,EAAA,OAAO,UAAA,GAAa,CAAA,EAAG,UAAU,CAAA,CAAA,EAAI,SAAS,CAAA,CAAA,GAAK,SAAA;AACrD;;;ACmOA,IAAM,eAAA,GAAkB,GAAA;AAuCxB,SAAS,gBACJ,OAAA,EACY;AACf,EAAA,OAAO,OAAA,CAAQ,MAAA,CAAsB,CAAC,GAAA,EAAK,IAAA,KAAS;AAClD,IAAA,IAAI,CAAC,MAAM,OAAO,GAAA;AAClB,IAAA,MAAM,SAAS,EAAE,GAAI,OAAO,EAAC,EAAI,GAAG,IAAA,EAAK;AACzC,IAAA,IAAI,GAAA,EAAK,OAAA,IAAW,IAAA,CAAK,OAAA,EAAS;AAChC,MAAA,MAAA,CAAO,OAAA,GAAU;AAAA,QACf,GAAI,GAAA,EAAK,OAAA,IAAW,EAAC;AAAA,QACrB,GAAI,IAAA,CAAK,OAAA,IAAW;AAAC,OACvB;AAAA,IACF;AACA,IAAA,OAAO,MAAA;AAAA,EACT,GAAG,MAAS,CAAA;AACd;AAEA,SAAS,mBAAmB,KAAA,EAAkC;AAC5D,EAAA,OAAO,KAAA;AACT;AAEA,SAAS,wBAAwB,MAAA,EAAuC;AACtE,EAAA,OAAO,MAAA;AACT;AAEA,SAAS,4BAA4B,OAAA,EAA4D;AAC/F,EAAA,IAAI,YAAY,MAAA,EAAW;AACzB,IAAA,OAAO,MAAA;AAAA,EACT;AACA,EAAA,IAAI,OAAO,YAAY,QAAA,EAAU;AAC/B,IAAA,OAAO,OAAA;AAAA,EACT;AACA,EAAA,OAAO,CAAC,GAAG,OAAO,CAAA;AACpB;AAEA,SAAS,mBAAA,CAIP,QAAA,EAKA,cAAA,GAA2C,eAAA,EAC3C,QACA,eAAA,EAC4B;AAC5B,EAAA,IAAI,eAAA,GAAiD,cAAA,KAAmB,IAAA,GAAO,MAAA,GAAY,cAAA;AAC3F,EAAA,IAAI,eAAA;AACJ,EAAA,IAAI,OAAA,GAAgD,IAAA;AACpD,EAAA,MAAM,aAAA,GAAgB,wBAAA,CAAyB,MAAA,EAAQ,eAAe,CAAA;AAEtE,EAAA,MAAM,GAAA,GAAM,CACV,OAAA,EACA,OAAA,EACA,QAAA,KACG;AACH,IAAA,MAAM,iBAAiB,OAAA,IAAW,eAAA;AAClC,IAAA,MAAM,iBAAiB,OAAA,IAAW,eAAA;AAClC,IAAA,IAAI,CAAC,OAAA,EAAS;AACZ,MAAA,OAAA,GAAU,QAAA;AAAA,QACR,4BAA4B,cAAc,CAAA;AAAA,QAC1C,cAAA;AAAA,QACA,aAAA,CAAc,QAAQ,QAAQ;AAAA,OAChC;AAAA,IACF;AACA,IAAA,OAAO,OAAA;AAAA,EACT,CAAA;AAEA,EAAA,MAAM,aAAA,GAA4C;AAAA,IAChD,MAAA,CAAO,SAA6B,OAAA,EAAoC;AACtE,MAAA,eAAA,GAAkB,OAAA;AAClB,MAAA,eAAA,GAAkB,OAAA,IAAW,eAAA;AAC7B,MAAA,OAAO,GAAA,CAAI,OAAA,EAAS,OAAA,EAAS,oBAAA,CAAqB,MAAM,CAAC,CAAA;AAAA,IAC3D,CAAA;AAAA,IACA,SAAA,CAAU,SAA6B,OAAA,EAAoC;AACzE,MAAA,OAAO,aAAA,CAAc,MAAA,CAAO,OAAA,EAAS,OAAO,CAAA;AAAA,IAC9C,CAAA;AAAA,IACA,MAAA,CAAO,SAA6B,OAAA,EAAoC;AACtE,MAAA,eAAA,GAAkB,OAAA;AAClB,MAAA,eAAA,GAAkB,OAAA,IAAW,eAAA;AAC7B,MAAA,OAAO,GAAA,CAAI,SAAS,OAAA,EAAS,oBAAA,CAAqB,MAAM,CAAC,CAAA,CAAE,KAAK,cAAc,CAAA;AAAA,IAChF,CAAA;AAAA,IACA,WAAA,CAAY,SAA6B,OAAA,EAAoC;AAC3E,MAAA,OAAO,aAAA,CAAc,MAAA,CAAO,OAAA,EAAS,OAAO,CAAA;AAAA,IAC9C,CAAA;AAAA,IACA,IAAA,CAAK,aAAa,UAAA,EAAY;AAC5B,MAAA,OAAO,IAAI,eAAA,EAAiB,eAAe,CAAA,CAAE,IAAA,CAAK,aAAa,UAAU,CAAA;AAAA,IAC3E,CAAA;AAAA,IACA,MAAM,UAAA,EAAY;AAChB,MAAA,OAAO,GAAA,CAAI,eAAA,EAAiB,eAAe,CAAA,CAAE,MAAM,UAAU,CAAA;AAAA,IAC/D,CAAA;AAAA,IACA,QAAQ,SAAA,EAAW;AACjB,MAAA,OAAO,GAAA,CAAI,eAAA,EAAiB,eAAe,CAAA,CAAE,QAAQ,SAAS,CAAA;AAAA,IAChE;AAAA,GACF;AAEA,EAAA,OAAO,aAAA;AACT;AAiKA,SAAS,cAAc,KAAA,EAA8C;AACnE,EAAA,MAAM,SAAA,GAAY,MAAM,UAAA,CAAW,IAAA;AAAA,IACjC,CAAA,SAAA,KACE,UAAU,QAAA,KAAa,IAAA,KACtB,UAAU,MAAA,KAAW,aAAA,IAAiB,UAAU,MAAA,KAAW,IAAA;AAAA,GAChE;AACA,EAAA,OAAO,SAAA,EAAW,OAAO,QAAA,EAAS;AACpC;AAEA,SAASW,sBAAqB,KAAA,EAA0E;AACtG,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACxB,IAAA,OAAO,KAAA,CAAM,KAAK,GAAG,CAAA;AAAA,EACvB;AACA,EAAA,OAAO,OAAO,KAAK,CAAA;AACrB;AAEA,SAAS,mBAAA,CACP,KAAA,EACA,YAAA,EAMA,IAAA,EACwB;AACxB,EAAA,OAAO;AAAA,IACL,EAAA,CAAG,QAAsC,KAAA,EAA6B;AACpE,MAAA,MAAM,UAAA,GAAa,OAAO,MAAM,CAAA;AAChC,MAAA,IAAI,2BAAA,CAA4B,UAAA,EAAY,KAAK,CAAA,EAAG;AAClD,QAAA,YAAA,CAAa,MAAM,UAAA,EAAY,KAAA,EAAO,EAAE,UAAA,EAAY,QAAQ,CAAA;AAAA,MAC9D,CAAA,MAAO;AACL,QAAA,YAAA,CAAa,IAAA,EAAM,YAAY,KAAK,CAAA;AAAA,MACtC;AACA,MAAA,OAAO,IAAA;AAAA,IACT,CAAA;AAAA,IACA,MAAA,CAAO,MAAA,EAAsC,KAAA,EAA6B,IAAA,EAA+B;AACvG,MAAA,YAAA,CAAa,IAAA,EAAM,OAAO,MAAM,CAAA,EAAG,OAAO,EAAE,SAAA,EAAW,MAAM,CAAA;AAC7D,MAAA,OAAO,IAAA;AAAA,IACT,CAAA;AAAA,IACA,MAAA,CAAO,QAAsC,KAAA,EAAe;AAC1D,MAAA,YAAA,CAAa,IAAA,EAAM,OAAO,MAAM,CAAA,EAAG,OAAO,EAAE,SAAA,EAAW,QAAQ,CAAA;AAC/D,MAAA,OAAO,IAAA;AAAA,IACT,CAAA;AAAA,IACA,MAAM,OAAA,EAA8E;AAClF,MAAA,MAAA,CAAO,OAAA,CAAQ,OAA2D,CAAA,CAAE,OAAA,CAAQ,CAAC,CAAC,MAAA,EAAQ,KAAK,CAAA,KAAM;AACvG,QAAA,IAAI,UAAU,MAAA,EAAW;AACvB,UAAA;AAAA,QACF;AACA,QAAA,IAAI,2BAAA,CAA4B,MAAA,EAAQ,KAAK,CAAA,EAAG;AAC9C,UAAA,YAAA,CAAa,MAAM,MAAA,EAAQ,KAAA,EAAO,EAAE,UAAA,EAAY,QAAQ,CAAA;AAAA,QAC1D,CAAA,MAAO;AACL,UAAA,YAAA,CAAa,IAAA,EAAM,QAAQ,KAAK,CAAA;AAAA,QAClC;AAAA,MACF,CAAC,CAAA;AACD,MAAA,OAAO,IAAA;AAAA,IACT,CAAA;AAAA,IACA,KAAA,CAAM,MAAc,EAAA,EAAY;AAC9B,MAAA,KAAA,CAAM,MAAA,GAAS,IAAA;AACf,MAAA,KAAA,CAAM,KAAA,GAAQ,KAAK,IAAA,GAAO,CAAA;AAC1B,MAAA,OAAO,IAAA;AAAA,IACT,CAAA;AAAA,IACA,MAAM,KAAA,EAAe;AACnB,MAAA,KAAA,CAAM,KAAA,GAAQ,KAAA;AACd,MAAA,OAAO,IAAA;AAAA,IACT,CAAA;AAAA,IACA,OAAO,KAAA,EAAe;AACpB,MAAA,KAAA,CAAM,MAAA,GAAS,KAAA;AACf,MAAA,OAAO,IAAA;AAAA,IACT,CAAA;AAAA,IACA,YAAY,KAAA,EAAe;AACzB,MAAA,KAAA,CAAM,WAAA,GAAc,KAAA;AACpB,MAAA,OAAO,IAAA;AAAA,IACT,CAAA;AAAA,IACA,SAAS,KAAA,EAAe;AACtB,MAAA,KAAA,CAAM,QAAA,GAAW,KAAA;AACjB,MAAA,OAAO,IAAA;AAAA,IACT,CAAA;AAAA,IACA,WAAW,KAAA,EAAe;AACxB,MAAA,KAAA,CAAM,UAAA,GAAa,KAAA;AACnB,MAAA,OAAO,IAAA;AAAA,IACT,CAAA;AAAA,IACA,KAAA,CAAM,QAAsC,OAAA,EAAwB;AAClE,MAAA,KAAA,CAAM,KAAA,GAAQ;AAAA,QACZ,KAAA,EAAO,OAAO,MAAM,CAAA;AAAA,QACpB,SAAA,EAAW,OAAA,EAAS,SAAA,KAAc,KAAA,GAAQ,YAAA,GAAe;AAAA,OAC3D;AACA,MAAA,OAAO,IAAA;AAAA,IACT,CAAA;AAAA,IACA,EAAA,CAAG,QAAsC,KAAA,EAA6B;AACpE,MAAA,YAAA,CAAa,IAAA,EAAM,MAAA,CAAO,MAAM,CAAA,EAAG,KAAK,CAAA;AACxC,MAAA,OAAO,IAAA;AAAA,IACT,CAAA;AAAA,IACA,GAAA,CAAI,QAAsC,KAAA,EAA6B;AACrE,MAAA,YAAA,CAAa,KAAA,EAAO,MAAA,CAAO,MAAM,CAAA,EAAG,KAAK,CAAA;AACzC,MAAA,OAAO,IAAA;AAAA,IACT,CAAA;AAAA,IACA,EAAA,CAAG,QAAsC,KAAA,EAA6B;AACpE,MAAA,YAAA,CAAa,IAAA,EAAM,MAAA,CAAO,MAAM,CAAA,EAAG,KAAK,CAAA;AACxC,MAAA,OAAO,IAAA;AAAA,IACT,CAAA;AAAA,IACA,GAAA,CAAI,QAAsC,KAAA,EAA6B;AACrE,MAAA,YAAA,CAAa,KAAA,EAAO,MAAA,CAAO,MAAM,CAAA,EAAG,KAAK,CAAA;AACzC,MAAA,OAAO,IAAA;AAAA,IACT,CAAA;AAAA,IACA,GAAA,CAAI,QAAsC,KAAA,EAA6B;AACrE,MAAA,YAAA,CAAa,KAAA,EAAO,MAAA,CAAO,MAAM,CAAA,EAAG,KAAK,CAAA;AACzC,MAAA,OAAO,IAAA;AAAA,IACT,CAAA;AAAA,IACA,IAAA,CAAK,QAAsC,KAAA,EAA6B;AACtE,MAAA,YAAA,CAAa,MAAA,EAAQ,MAAA,CAAO,MAAM,CAAA,EAAG,KAAK,CAAA;AAC1C,MAAA,OAAO,IAAA;AAAA,IACT,CAAA;AAAA,IACA,KAAA,CAAM,QAAsC,KAAA,EAA6B;AACvE,MAAA,YAAA,CAAa,OAAA,EAAS,MAAA,CAAO,MAAM,CAAA,EAAG,KAAK,CAAA;AAC3C,MAAA,OAAO,IAAA;AAAA,IACT,CAAA;AAAA,IACA,EAAA,CAAG,QAAsC,KAAA,EAA6B;AACpE,MAAA,YAAA,CAAa,IAAA,EAAM,MAAA,CAAO,MAAM,CAAA,EAAG,KAAK,CAAA;AACxC,MAAA,OAAO,IAAA;AAAA,IACT,CAAA;AAAA,IACA,EAAA,CAAG,QAAsC,MAAA,EAAmC;AAC1E,MAAA,YAAA,CAAa,IAAA,EAAM,MAAA,CAAO,MAAM,CAAA,EAAG,MAAM,CAAA;AACzC,MAAA,OAAO,IAAA;AAAA,IACT,CAAA;AAAA,IACA,QAAA,CAAS,QAAsC,MAAA,EAAmC;AAChF,MAAA,YAAA,CAAa,UAAA,EAAY,MAAA,CAAO,MAAM,CAAA,EAAG,MAAM,CAAA;AAC/C,MAAA,OAAO,IAAA;AAAA,IACT,CAAA;AAAA,IACA,WAAA,CAAY,QAAsC,MAAA,EAAmC;AACnF,MAAA,YAAA,CAAa,aAAA,EAAe,MAAA,CAAO,MAAM,CAAA,EAAG,MAAM,CAAA;AAClD,MAAA,OAAO,IAAA;AAAA,IACT,CAAA;AAAA,IACA,GAAA,CACE,kBAAA,EACA,QAAA,EACA,KAAA,EACA;AACA,MAAA,MAAM,UAAA,GAAa,OAAO,kBAAkB,CAAA;AAC5C,MAAA,IAAI,QAAA,IAAY,IAAA,IAAQ,KAAA,KAAU,MAAA,EAAW;AAC3C,QAAA,YAAA,CAAa,KAAA,EAAO,MAAA,EAAW,CAAA,EAAG,UAAU,CAAA,CAAA,EAAI,QAAQ,CAAA,CAAA,EAAIA,qBAAAA,CAAqB,KAAK,CAAC,CAAA,CAAE,CAAA;AAAA,MAC3F,CAAA,MAAO;AACL,QAAA,YAAA,CAAa,KAAA,EAAO,QAAW,UAAU,CAAA;AAAA,MAC3C;AACA,MAAA,OAAO,IAAA;AAAA,IACT,CAAA;AAAA,IACA,GAAG,UAAA,EAAoB;AACrB,MAAA,YAAA,CAAa,IAAA,EAAM,QAAW,UAAU,CAAA;AACxC,MAAA,OAAO,IAAA;AAAA,IACT;AAAA,GACF;AACF;AAEA,SAAS,YAAY,OAAA,EAA6B;AAChD,EAAA,IAAI,CAAC,SAAS,OAAO,MAAA;AACrB,EAAA,IAAI,OAAO,YAAY,QAAA,EAAU;AAC/B,IAAA,OAAO,OAAA;AAAA,EACT;AACA,EAAA,OAAO,OAAA,CAAQ,KAAK,GAAG,CAAA;AACzB;AAEA,SAAS,sBAAA,CACP,SACA,IAAA,EACA;AACA,EAAA,MAAM,SAAA,GAAY,CAChB,QAAA,EACA,MAAA,EACA,KAAA,KACG;AACH,IAAA,OAAA,CAAQ,IAAA,CAAK,EAAE,MAAA,EAAQ,QAAA,EAAU,OAAO,CAAA;AAAA,EAC1C,CAAA;AAEA,EAAA,OAAO;AAAA,IACL,EAAA,CAAG,QAAgB,KAAA,EAA6B;AAC9C,MAAA,SAAA,CAAU,IAAA,EAAM,QAAQ,KAAK,CAAA;AAC7B,MAAA,OAAO,IAAA;AAAA,IACT,CAAA;AAAA,IACA,GAAA,CAAI,QAAgB,KAAA,EAA6B;AAC/C,MAAA,SAAA,CAAU,KAAA,EAAO,QAAQ,KAAK,CAAA;AAC9B,MAAA,OAAO,IAAA;AAAA,IACT,CAAA;AAAA,IACA,EAAA,CAAG,QAAgB,KAAA,EAA6B;AAC9C,MAAA,SAAA,CAAU,IAAA,EAAM,QAAQ,KAAK,CAAA;AAC7B,MAAA,OAAO,IAAA;AAAA,IACT,CAAA;AAAA,IACA,GAAA,CAAI,QAAgB,KAAA,EAA6B;AAC/C,MAAA,SAAA,CAAU,KAAA,EAAO,QAAQ,KAAK,CAAA;AAC9B,MAAA,OAAO,IAAA;AAAA,IACT,CAAA;AAAA,IACA,EAAA,CAAG,QAAgB,KAAA,EAA6B;AAC9C,MAAA,SAAA,CAAU,IAAA,EAAM,QAAQ,KAAK,CAAA;AAC7B,MAAA,OAAO,IAAA;AAAA,IACT,CAAA;AAAA,IACA,GAAA,CAAI,QAAgB,KAAA,EAA6B;AAC/C,MAAA,SAAA,CAAU,KAAA,EAAO,QAAQ,KAAK,CAAA;AAC9B,MAAA,OAAO,IAAA;AAAA,IACT,CAAA;AAAA,IACA,IAAA,CAAK,QAAgB,KAAA,EAA6B;AAChD,MAAA,SAAA,CAAU,MAAA,EAAQ,QAAQ,KAAK,CAAA;AAC/B,MAAA,OAAO,IAAA;AAAA,IACT,CAAA;AAAA,IACA,KAAA,CAAM,QAAgB,KAAA,EAA6B;AACjD,MAAA,SAAA,CAAU,OAAA,EAAS,QAAQ,KAAK,CAAA;AAChC,MAAA,OAAO,IAAA;AAAA,IACT,CAAA;AAAA,IACA,EAAA,CAAG,QAAgB,KAAA,EAA6B;AAC9C,MAAA,SAAA,CAAU,IAAA,EAAM,QAAQ,KAAK,CAAA;AAC7B,MAAA,OAAO,IAAA;AAAA,IACT,CAAA;AAAA,IACA,EAAA,CAAG,QAAgB,MAAA,EAAmC;AACpD,MAAA,SAAA,CAAU,IAAA,EAAM,QAAQ,MAAM,CAAA;AAC9B,MAAA,OAAO,IAAA;AAAA,IACT;AAAA,GACF;AACF;AAEA,SAAS,gBAAA,CACP,cACA,IAAA,EACA,WAAA,EACA,QACA,mBAAA,EACA,MAAA,EACA,eAAA,EACA,eAAA,GAAkB,KAAA,EACI;AACtB,EAAA,MAAM,KAAA,GAKF;AAAA,IACF,SAAS;AAAC,GACZ;AAEA,EAAA,IAAI,eAAA;AACJ,EAAA,IAAI,eAAA;AACJ,EAAA,IAAI,OAAA,GAA+C,IAAA;AACnD,EAAA,MAAM,aAAA,GAAgB,wBAAA,CAAyB,MAAA,EAAQ,eAAe,CAAA;AAEtE,EAAA,MAAM,UAAA,GAAa,OACjB,OAAA,EACA,OAAA,EACA,QAAA,KACyC;AACzC,IAAA,MAAM,aAAA,GAAgB,YAAA,CAAa,WAAA,EAAa,OAAO,CAAA;AACvD,IAAA,MAAM,yBAAA,GAA4B,4BAA4B,OAAO,CAAA;AACrE,IAAA,MAAM,OAAA,GAA4B;AAAA,MAChC,QAAA,EAAU,YAAA;AAAA,MACV,IAAA;AAAA,MACA,QAAQ,aAAA,EAAe,MAAA;AAAA,MACvB,MAAA,EAAQ,YAAY,OAAO,CAAA;AAAA,MAC3B,OAAA,EAAS,MAAM,OAAA,CAAQ,MAAA,GAAS,CAAC,GAAG,KAAA,CAAM,OAAO,CAAA,GAAI,MAAA;AAAA,MACrD,OAAO,aAAA,EAAe,KAAA;AAAA,MACtB,MAAM,aAAA,EAAe,IAAA;AAAA,MACrB,OAAO,KAAA,CAAM,KAAA;AAAA,MACb,QAAQ,KAAA,CAAM,MAAA;AAAA,MACd,OAAO,KAAA,CAAM;AAAA,KACf;AACA,IAAA,MAAM,QAAA,GAA8C,aAAA,EAAe,GAAA,GAC/D,CAAA,KAAA,EAAQ,YAAY,CAAA,CAAA,GACpB,cAAA;AACJ,IAAA,MAAM,GAAA,GAAM,iBAAiB,OAAO,CAAA;AACpC,IAAA,MAAM,QAAA,GAAW,kBACb,gBAAA,CAAiB;AAAA,MACf,YAAA;AAAA,MACA,IAAA;AAAA,MACA,eAAA,EAAiB,yBAAA;AAAA,MACjB,KAAA;AAAA,MACA,OAAA;AAAA,MACA;AAAA,KACD,CAAA,GACD,MAAA;AACJ,IAAA,OAAO,qBAAA;AAAA,MACL,MAAA;AAAA,MACA;AAAA,QACE,SAAA,EAAW,KAAA;AAAA,QACX,QAAA;AAAA,QACA,YAAA;AAAA,QACA,GAAA;AAAA,QACA,OAAA;AAAA,QACA,GAAA,EAAK,QAAA;AAAA,QACL,OAAA,EAAS;AAAA,OACX;AAAA,MACA,YAAY;AACV,QAAA,MAAM,QAAA,GAAW,MAAM,MAAA,CAAO,UAAA,CAA0B,SAAS,aAAa,CAAA;AAC9E,QAAA,OAAO,mBAAA,CAAoB,QAAA,EAAU,EAAE,SAAA,EAAW,OAAO,CAAA;AAAA,MAC3D,CAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,GAAA,GAAM,CACV,OAAA,EACA,OAAA,EACA,QAAA,KACG;AACH,IAAA,MAAM,iBAAiB,OAAA,IAAW,eAAA;AAClC,IAAA,MAAM,iBAAiB,OAAA,IAAW,eAAA;AAClC,IAAA,IAAI,CAAC,OAAA,EAAS;AACZ,MAAA,OAAA,GAAU,WAAgB,cAAA,EAAgB,cAAA,EAAgB,aAAA,CAAc,OAAA,CAAQ,QAAQ,CAAC,CAAA;AAAA,IAC3F;AACA,IAAA,OAAO,OAAA;AAAA,EACT,CAAA;AAEA,EAAA,MAAM,UAAU,EAAC;AACjB,EAAA,MAAM,aAAA,GAAgB,sBAAA,CAAuB,KAAA,CAAM,OAAA,EAAS,OAAO,CAAA;AAEnE,EAAA,MAAA,CAAO,MAAA,CAAO,SAAS,aAAA,EAAe;AAAA,IACpC,MAAA,CAAO,SAA6B,OAAA,EAAgC;AAClE,MAAA,eAAA,GAAkB,OAAA;AAClB,MAAA,eAAA,GAAkB,OAAA,IAAW,eAAA;AAC7B,MAAA,OAAO,GAAA,CAAI,OAAA,EAAS,OAAA,EAAS,oBAAA,CAAqB,MAAM,CAAC,CAAA;AAAA,IAC3D,CAAA;AAAA,IACA,MAAM,MAAA,CAAgB,OAAA,EAA6B,OAAA,EAAgC;AACjF,MAAA,MAAM,SAAS,MAAM,GAAA,CAAI,SAAS,OAAA,EAAS,oBAAA,CAAqB,MAAM,CAAC,CAAA;AACvE,MAAA,OAAO,eAAe,MAAM,CAAA;AAAA,IAC9B,CAAA;AAAA,IACA,WAAA,CAAqB,SAA6B,OAAA,EAAgC;AAChF,MAAA,OAAO,OAAA,CAAQ,MAAA,CAA6B,OAAA,EAAS,OAAO,CAAA;AAAA,IAC9D,CAAA;AAAA,IACA,KAAA,CAAM,QAAgB,OAAA,EAA2B;AAC/C,MAAA,KAAA,CAAM,QAAQ,EAAE,MAAA,EAAQ,SAAA,EAAW,OAAA,EAAS,aAAa,IAAA,EAAK;AAC9D,MAAA,OAAO,OAAA;AAAA,IACT,CAAA;AAAA,IACA,MAAM,KAAA,EAAe;AACnB,MAAA,KAAA,CAAM,KAAA,GAAQ,KAAA;AACd,MAAA,OAAO,OAAA;AAAA,IACT,CAAA;AAAA,IACA,OAAO,KAAA,EAAe;AACpB,MAAA,KAAA,CAAM,MAAA,GAAS,KAAA;AACf,MAAA,OAAO,OAAA;AAAA,IACT,CAAA;AAAA,IACA,KAAA,CAAM,MAAc,EAAA,EAAY;AAC9B,MAAA,KAAA,CAAM,MAAA,GAAS,IAAA;AACf,MAAA,KAAA,CAAM,KAAA,GAAQ,KAAK,IAAA,GAAO,CAAA;AAC1B,MAAA,OAAO,OAAA;AAAA,IACT,CAAA;AAAA,IACA,IAAA,CACE,aACA,UAAA,EACA;AACA,MAAA,OAAO,IAAI,eAAA,EAAiB,eAAe,CAAA,CAAE,IAAA,CAAK,aAAa,UAAU,CAAA;AAAA,IAC3E,CAAA;AAAA,IACA,MAAiB,UAAA,EAAsD;AACrE,MAAA,OAAO,GAAA,CAAI,eAAA,EAAiB,eAAe,CAAA,CAAE,MAAM,UAAU,CAAA;AAAA,IAC/D,CAAA;AAAA,IACA,QAAQ,SAAA,EAAwB;AAC9B,MAAA,OAAO,GAAA,CAAI,eAAA,EAAiB,eAAe,CAAA,CAAE,QAAQ,SAAS,CAAA;AAAA,IAChE;AAAA,GACD,CAAA;AAED,EAAA,OAAO,OAAA;AACT;AAEA,SAAS,kBAAA,CAMP,SAAA,EACA,MAAA,EACA,mBAAA,EACA,QACA,QAAA,EACkD;AAClD,EAAA,MAAM,KAAA,GAA2B;AAAA,IAC/B,YAAY;AAAC,GACf;AACA,EAAA,MAAM,eAAA,GAAkB,OAAA,CAAQ,QAAA,EAAU,QAAQ,CAAA;AAElD,EAAA,MAAM,YAAA,GAAe,CACnB,QAAA,EACA,MAAA,EACA,OACA,KAAA,KACG;AACH,IAAA,MAAM,SAAA,GAAoC,EAAE,QAAA,EAAS;AACrD,IAAA,IAAI,MAAA,EAAQ;AACV,MAAA,SAAA,CAAU,MAAA,GAAS,MAAA;AACnB,MAAA,IAAI,aAAa,IAAA,EAAM;AAErB,QAAA,SAAA,CAAU,SAAA,GAAY,MAAA;AAAA,MACxB;AAAA,IACF;AACA,IAAA,IAAI,UAAU,MAAA,EAAW;AACvB,MAAA,SAAA,CAAU,KAAA,GAAQ,KAAA;AAClB,MAAA,IAAI,aAAa,IAAA,EAAM;AACrB,QAAA,SAAA,CAAU,QAAA,GAAW,KAAA;AAAA,MACvB;AAAA,IACF;AACA,IAAA,IAAI,OAAO,SAAA,EAAW;AACpB,MAAA,SAAA,CAAU,aAAa,KAAA,CAAM,SAAA;AAC7B,MAAA,IAAI,aAAa,IAAA,EAAM;AACrB,QAAA,SAAA,CAAU,gBAAgB,KAAA,CAAM,SAAA;AAAA,MAClC;AAAA,IACF;AACA,IAAA,IAAI,OAAO,UAAA,EAAY;AACrB,MAAA,SAAA,CAAU,cAAc,KAAA,CAAM,UAAA;AAC9B,MAAA,IAAI,aAAa,IAAA,EAAM;AACrB,QAAA,SAAA,CAAU,iBAAiB,KAAA,CAAM,UAAA;AAAA,MACnC;AAAA,IACF;AACA,IAAA,KAAA,CAAM,UAAA,CAAW,KAAK,SAAS,CAAA;AAAA,EACjC,CAAA;AAEA,EAAA,MAAM,gBAAgB,OAA0B;AAAA,IAC9C,UAAA,EAAY,MAAM,UAAA,CAAW,GAAA,CAAI,gBAAc,EAAE,GAAG,WAAU,CAAE,CAAA;AAAA,IAChE,OAAO,KAAA,CAAM,KAAA;AAAA,IACb,QAAQ,KAAA,CAAM,MAAA;AAAA,IACd,OAAO,KAAA,CAAM,KAAA,GAAQ,EAAE,GAAG,KAAA,CAAM,OAAM,GAAI,MAAA;AAAA,IAC1C,aAAa,KAAA,CAAM,WAAA;AAAA,IACnB,UAAU,KAAA,CAAM,QAAA;AAAA,IAChB,YAAY,KAAA,CAAM;AAAA,GACpB,CAAA;AAEA,EAAA,MAAM,UAAU,EAAC;AAEjB,EAAA,MAAM,aAAA,GAAgB,mBAAA;AAAA,IACpB,KAAA;AAAA,IACA,YAAA;AAAA,IACA;AAAA,GACF;AAEA,EAAA,MAAM,SAAA,GAAY,OAChB,OAAA,GAA6B,eAAA,EAC7B,SACA,cAAA,GAAoC,aAAA,EAAc,EAClD,QAAA,EACA,eAAA,KACG;AACH,IAAA,MAAM,cAAA,GAAiB,2BAAA,CAA4B,OAAO,CAAA,IAAK,eAAA;AAC/D,IAAA,MAAM,iBAAA,GAAoB,uBAAA,CAAwB,SAAA,EAAW,OAAA,EAAS,MAAM,CAAA;AAC5E,IAAA,MAAM,OAAO,yBAAA,CAA0B;AAAA,MACrC,SAAA,EAAW,iBAAA;AAAA,MACX,OAAA,EAAS,cAAA;AAAA,MACT,KAAA,EAAO,cAAA;AAAA,MACP,OAAA;AAAA,MACA;AAAA,KACD,CAAA;AACD,IAAA,MAAM,QAAA,GAAW,kBACZ,eAAA,GAAkB;AAAA,MACjB,SAAA,EAAW,iBAAA;AAAA,MACX,OAAA,EAAS,cAAA;AAAA,MACT,cAAA;AAAA,MACA;AAAA,KACD,KAAK,mBAAA,CAAoB;AAAA,MACxB,SAAA,EAAW,iBAAA;AAAA,MACX,OAAA,EAAS,cAAA;AAAA,MACT,KAAA,EAAO,cAAA;AAAA,MACP;AAAA,KACD,CAAA,GACD,MAAA;AAEJ,IAAA,IAAI,IAAA,CAAK,SAAS,OAAA,EAAS;AACzB,MAAA,OAAO,WAAA;AAAA,QAAY,QAAA;AAAA,QAAU,MAC3B,qBAAA;AAAA,UACE,MAAA;AAAA,UACA;AAAA,YACE,SAAA,EAAW,QAAA;AAAA,YACX,QAAA,EAAU,gBAAA;AAAA,YACV,KAAA,EAAO,iBAAA;AAAA,YACP,KAAK,IAAA,CAAK,KAAA;AAAA,YACV,SAAS,IAAA,CAAK,OAAA;AAAA,YACd,GAAA,EAAK,QAAA;AAAA,YACL;AAAA,WACF;AAAA,UACA,YAAY;AACV,YAAA,MAAM,gBAAgB,MAAM,MAAA,CAAO,YAAA,CAAgB,IAAA,CAAK,SAAS,OAAO,CAAA;AACxE,YAAA,OAAO,oBAAoB,aAAA,EAAe,EAAE,OAAO,iBAAA,EAAmB,SAAA,EAAW,UAAU,CAAA;AAAA,UAC7F,CAAA;AAAA,UACA;AAAA;AACF,OACF;AAAA,IACF;AAEA,IAAA,MAAM,MAAM,qBAAA,CAAsB;AAAA,MAChC,SAAA,EAAW,iBAAA;AAAA,MACX,GAAG,IAAA,CAAK;AAAA,KACT,CAAA;AACD,IAAA,OAAO,WAAA;AAAA,MAAY,QAAA;AAAA,MAAU,MAC3B,qBAAA;AAAA,QACE,MAAA;AAAA,QACA;AAAA,UACE,SAAA,EAAW,QAAA;AAAA,UACX,QAAA,EAAU,gBAAA;AAAA,UACV,KAAA,EAAO,iBAAA;AAAA,UACP,GAAA;AAAA,UACA,SAAS,IAAA,CAAK,OAAA;AAAA,UACd,GAAA,EAAK,QAAA;AAAA,UACL;AAAA,SACF;AAAA,QACA,YAAY;AACV,UAAA,MAAM,WAAW,MAAM,MAAA,CAAO,YAAA,CAAgB,IAAA,CAAK,SAAS,OAAO,CAAA;AACnE,UAAA,OAAO,oBAAoB,QAAA,EAAU,EAAE,OAAO,iBAAA,EAAmB,SAAA,EAAW,UAAU,CAAA;AAAA,QACxF,CAAA;AAAA,QACA;AAAA;AACF,KACF;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,iBAAA,GAAoB,CACxB,OAAA,EACA,OAAA,EACA,eAAA,KACkC;AAClC,IAAA,MAAM,QAAQ,EAAC;AACf,IAAA,MAAM,aAAA,GAAgB,wBAAA,CAAyB,MAAA,EAAQ,eAAe,CAAA;AACtE,IAAA,MAAMC,cAAAA,GAAgB,mBAAA;AAAA,MACpB,KAAA;AAAA,MACA,YAAA;AAAA,MACA;AAAA,KACF;AACA,IAAA,MAAA,CAAO,MAAA,CAAO,OAAOA,cAAAA,EAAe;AAAA,MAClC,MAAM,MAAA,CAAwB,IAAA,EAA0B,IAAA,EAAiC;AACvF,QAAA,MAAM,IAAI,MAAM,SAAA;AAAA,UACd,IAAA,IAAQ,OAAA;AAAA,UACR,IAAA,IAAQ,OAAA;AAAA,UACR,aAAA,EAAc;AAAA,UACd,aAAA,CAAc,OAAA,CAAQ,oBAAA,CAAqB,MAAM,CAAC;AAAA,SACpD;AACA,QAAA,OAAO,eAAe,CAAC,CAAA;AAAA,MACzB,CAAA;AAAA,MACA,WAAA,CAA6B,MAA0B,IAAA,EAAiC;AACtF,QAAA,OAAO,KAAA,CAAM,MAAA,CAA6B,IAAA,EAAM,IAAI,CAAA;AAAA,MACtD,CAAA;AAAA,MACA,IAAA,CACE,aACA,UAAA,EACA;AACA,QAAA,OAAO,SAAA;AAAA,UACL,OAAA;AAAA,UACA,OAAA;AAAA,UACA,aAAA,EAAc;AAAA,UACd,cAAc,OAAA;AAAQ,SACxB,CAAE,IAAA,CAAK,WAAA,EAAa,UAAU,CAAA;AAAA,MAChC,CAAA;AAAA,MACA,MAAiB,UAAA,EAAsD;AACrE,QAAA,OAAO,SAAA,CAAyB,SAAS,OAAA,EAAS,aAAA,IAAiB,aAAA,CAAc,OAAA,EAAS,CAAA,CAAE,KAAA;AAAA,UAC1F;AAAA,SACF;AAAA,MACF,CAAA;AAAA,MACA,QAAQ,SAAA,EAAwB;AAC9B,QAAA,OAAO,SAAA,CAAyB,SAAS,OAAA,EAAS,aAAA,IAAiB,aAAA,CAAc,OAAA,EAAS,CAAA,CAAE,OAAA;AAAA,UAC1F;AAAA,SACF;AAAA,MACF;AAAA,KACD,CAAA;AACD,IAAA,OAAO,KAAA;AAAA,EACT,CAAA;AAEA,EAAA,MAAA,CAAO,MAAA,CAAO,SAAS,aAAA,EAAe;AAAA,IACpC,KAAA,GAAQ;AACN,MAAA,KAAA,CAAM,aAAa,EAAC;AACpB,MAAA,KAAA,CAAM,KAAA,GAAQ,MAAA;AACd,MAAA,KAAA,CAAM,MAAA,GAAS,MAAA;AACf,MAAA,KAAA,CAAM,KAAA,GAAQ,MAAA;AACd,MAAA,KAAA,CAAM,WAAA,GAAc,MAAA;AACpB,MAAA,KAAA,CAAM,QAAA,GAAW,MAAA;AACjB,MAAA,KAAA,CAAM,UAAA,GAAa,MAAA;AACnB,MAAA,OAAO,OAAA;AAAA,IACT,CAAA;AAAA,IACA,MAAA,CAAgB,OAAA,GAA6B,eAAA,EAAiB,OAAA,EAAoC;AAChG,MAAA,OAAO,iBAAA,CAAqB,OAAA,EAAS,OAAA,EAAS,oBAAA,CAAqB,MAAM,CAAC,CAAA;AAAA,IAC5E,CAAA;AAAA,IACA,MAAM,SACJ,OAAA,EAGA;AACA,MAAA,MAAM,OAAA,GAAU,kBAAA,CAAmB,OAAA,CAAQ,MAAM,CAAA;AACjD,MAAA,MAAM,YAAY,aAAA,EAAc;AAChC,MAAA,MAAM,iBAAiB,aAAA,EAAc;AACrC,MAAA,MAAM,QAAA,GAAW,qBAAqB,MAAM,CAAA;AAC5C,MAAA,MAAM,aAAA,GAAgB,YAAA,CAAa,OAAA,CAAQ,KAAK,CAAA;AAChD,MAAA,IAAI,eAAe,MAAA,EAAQ;AACzB,QAAA,cAAA,CAAe,UAAA,CAAW,IAAA,CAAK,GAAG,aAAa,CAAA;AAAA,MACjD;AACA,MAAA,IAAI,OAAA,CAAQ,YAAY,MAAA,EAAW;AACjC,QAAA,cAAA,CAAe,KAAA,GAAQ,cAAA,CAAoB,OAAA,CAAQ,OAAO,CAAA;AAAA,MAC5D;AACA,MAAA,IAAI,OAAA,CAAQ,UAAU,MAAA,EAAW;AAC/B,QAAA,cAAA,CAAe,QAAQ,OAAA,CAAQ,KAAA;AAAA,MACjC;AACA,MAAA,IACE,QAAA,EAAU,WAAA,IACV,0BAAA,CAA2B,SAAS,KACpC,CAAC,6BAAA,CAA8B,OAAA,CAAQ,MAAM,CAAA,IAC7C,CAAC,uCAAA,CAAwC,OAAA,CAAQ,KAAK,CAAA,EACtD;AACA,QAAA,MAAM,iBAAA,GAAoB,uBAAA,CAAwB,SAAA,EAAW,MAAS,CAAA;AACtE,QAAA,MAAM,OAAA,GAAkD;AAAA,UACtD,UAAA,EAAY,iBAAA;AAAA,UACZ,QAAQ,OAAA,CAAQ;AAAA,SAClB;AACA,QAAA,IAAI,OAAA,CAAQ,UAAU,MAAA,EAAW;AAC/B,UAAA,OAAA,CAAQ,KAAA,GAAQ,yBAAA,CAA0B,OAAA,CAAQ,KAAK,CAAA;AAAA,QACzD;AACA,QAAA,MAAM,QAAA,GAAW,kBAAA,CAAwB,cAAA,CAAe,KAAK,CAAA;AAC7D,QAAA,IAAI,aAAa,MAAA,EAAW;AAC1B,UAAA,OAAA,CAAQ,OAAA,GAAU,QAAA;AAAA,QACpB;AACA,QAAA,IAAI,cAAA,CAAe,UAAU,MAAA,EAAW;AACtC,UAAA,OAAA,CAAQ,QAAQ,cAAA,CAAe,KAAA;AAAA,QACjC;AACA,QAAA,MAAM,MAAM,qBAAA,CAAsB;AAAA,UAChC,SAAA,EAAW,iBAAA;AAAA,UACX,OAAA;AAAA,UACA,YAAY,cAAA,CAAe,UAAA;AAAA,UAC3B,OAAO,cAAA,CAAe,KAAA;AAAA,UACtB,OAAO,cAAA,CAAe;AAAA,SACvB,CAAA;AACD,QAAA,MAAM,QAAA,GAAW,kBACb,2BAAA,CAA4B;AAAA,UAC1B,SAAA,EAAW,iBAAA;AAAA,UACX,OAAA;AAAA,UACA,eAAA,EAAiB,OAAA;AAAA,UACjB,SAAA;AAAA,UACA,cAAA;AAAA,UACA;AAAA,SACD,CAAA,GACD,MAAA;AACJ,QAAA,OAAO,WAAA;AAAA,UAAY,QAAA;AAAA,UAAU,MAC3B,qBAAA;AAAA,YACE,MAAA;AAAA,YACA;AAAA,cACE,SAAA,EAAW,QAAA;AAAA,cACX,QAAA,EAAU,gBAAA;AAAA,cACV,KAAA,EAAO,iBAAA;AAAA,cACP,GAAA;AAAA,cACA,OAAA;AAAA,cACA,GAAA,EAAK;AAAA,aACP;AAAA,YACA,YAAY;AACV,cAAA,MAAM,QAAA,GAAW,MAAM,MAAA,CAAO,YAAA;AAAA,gBAC5B;AAAA,eACF;AACA,cAAA,OAAO,oBAAoB,QAAA,EAAU,EAAE,OAAO,iBAAA,EAAmB,SAAA,EAAW,UAAU,CAAA;AAAA,YACxF,CAAA;AAAA,YACA;AAAA;AACF,SACF;AAAA,MACF;AACA,MAAA,OAAO,SAAA;AAAA,QACL,OAAA;AAAA,QACA,MAAA;AAAA,QACA,cAAA;AAAA,QACA,QAAA;AAAA,QACA,eAAA,GACI,CAAC,EAAE,SAAA,EAAW,mBAAmB,cAAA,EAAgB,WAAA,EAAa,IAAA,EAAK,KACjE,6BAAA,CAA8B;AAAA,UAC5B,SAAA,EAAW,iBAAA;AAAA,UACX,OAAA;AAAA,UACA,eAAA,EAAiB,OAAA;AAAA,UACjB,SAAA;AAAA,UACA,cAAA,EAAgB,WAAA;AAAA,UAChB;AAAA,SACD,CAAA,GACH;AAAA,OACN;AAAA,IACF,CAAA;AAAA,IACA,MAAA,CAAO,QAA2B,OAAA,EAAoC;AACpE,MAAA,MAAM,gBAAA,GAAmB,qBAAqB,MAAM,CAAA;AACpD,MAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,MAAM,CAAA,EAAG;AACzB,QAAA,MAAM,iBAAA,GAAoB,OACxB,OAAA,EACA,aAAA,EACA,QAAA,KACG;AACH,UAAA,MAAM,aAAA,GAAgB,YAAA,CAAa,OAAA,EAAS,aAAa,CAAA;AACzD,UAAA,MAAM,iBAAA,GAAoB,uBAAA,CAAwB,SAAA,EAAW,aAAA,EAAe,MAAM,CAAA;AAClF,UAAA,MAAM,OAAA,GAA+B;AAAA,YACnC,UAAA,EAAY,iBAAA;AAAA,YACZ,WAAA,EAAa,wBAAwB,MAAM;AAAA,WAC7C;AACA,UAAA,IAAI,OAAA,UAAiB,OAAA,GAAU,OAAA;AAC/B,UAAA,IAAI,aAAA,EAAe,KAAA,EAAO,OAAA,CAAQ,KAAA,GAAQ,aAAA,CAAc,KAAA;AACxD,UAAA,IAAI,aAAA,EAAe,IAAA,EAAM,OAAA,CAAQ,IAAA,GAAO,aAAA,CAAc,IAAA;AACtD,UAAA,IAAI,aAAA,EAAe,kBAAkB,MAAA,EAAW;AAC9C,YAAA,OAAA,CAAQ,kBAAkB,aAAA,CAAc,aAAA;AAAA,UAC1C;AACA,UAAA,MAAM,GAAA,GAAM,oBAAoB,OAAO,CAAA;AACvC,UAAA,MAAM,QAAA,GAAW,eAAA,GAAkB,mBAAA,CAAoB,OAAO,CAAA,GAAI,MAAA;AAClE,UAAA,OAAO,qBAAA;AAAA,YACL,MAAA;AAAA,YACA;AAAA,cACE,SAAA,EAAW,QAAA;AAAA,cACX,QAAA,EAAU,iBAAA;AAAA,cACV,KAAA,EAAO,iBAAA;AAAA,cACP,GAAA;AAAA,cACA,OAAA;AAAA,cACA,GAAA,EAAK,QAAA;AAAA,cACL,OAAA,EAAS;AAAA,aACX;AAAA,YACA,YAAY;AACV,cAAA,MAAM,QAAA,GAAW,MAAM,MAAA,CAAO,aAAA,CAAqB,SAAS,aAAa,CAAA;AACzE,cAAA,OAAO,oBAAoB,QAAA,EAAU,EAAE,OAAO,iBAAA,EAAmB,SAAA,EAAW,UAAU,CAAA;AAAA,YACxF,CAAA;AAAA,YACA;AAAA,WACF;AAAA,QACF,CAAA;AACA,QAAA,OAAO,mBAAA,CAA2B,iBAAA,EAAmB,eAAA,EAAiB,MAAA,EAAQ,gBAAgB,CAAA;AAAA,MAChG;AACA,MAAA,MAAM,gBAAA,GAAmB,OACvB,OAAA,EACA,aAAA,EACA,QAAA,KACG;AACH,QAAA,MAAM,aAAA,GAAgB,YAAA,CAAa,OAAA,EAAS,aAAa,CAAA;AACzD,QAAA,MAAM,iBAAA,GAAoB,uBAAA,CAAwB,SAAA,EAAW,aAAA,EAAe,MAAM,CAAA;AAClF,QAAA,MAAM,OAAA,GAA+B;AAAA,UACnC,UAAA,EAAY,iBAAA;AAAA,UACZ,WAAA,EAAa,mBAAmB,MAAM;AAAA,SACxC;AACA,QAAA,IAAI,OAAA,UAAiB,OAAA,GAAU,OAAA;AAC/B,QAAA,IAAI,aAAA,EAAe,KAAA,EAAO,OAAA,CAAQ,KAAA,GAAQ,aAAA,CAAc,KAAA;AACxD,QAAA,IAAI,aAAA,EAAe,IAAA,EAAM,OAAA,CAAQ,IAAA,GAAO,aAAA,CAAc,IAAA;AACtD,QAAA,IAAI,aAAA,EAAe,kBAAkB,MAAA,EAAW;AAC9C,UAAA,OAAA,CAAQ,kBAAkB,aAAA,CAAc,aAAA;AAAA,QAC1C;AACA,QAAA,MAAM,GAAA,GAAM,oBAAoB,OAAO,CAAA;AACvC,QAAA,MAAM,QAAA,GAAW,eAAA,GAAkB,mBAAA,CAAoB,OAAO,CAAA,GAAI,MAAA;AAClE,QAAA,OAAO,qBAAA;AAAA,UACL,MAAA;AAAA,UACA;AAAA,YACE,SAAA,EAAW,QAAA;AAAA,YACX,QAAA,EAAU,iBAAA;AAAA,YACV,KAAA,EAAO,iBAAA;AAAA,YACP,GAAA;AAAA,YACA,OAAA;AAAA,YACA,GAAA,EAAK,QAAA;AAAA,YACL,OAAA,EAAS;AAAA,WACX;AAAA,UACA,YAAY;AACV,YAAA,MAAM,QAAA,GAAW,MAAM,MAAA,CAAO,aAAA,CAAmB,SAAS,aAAa,CAAA;AACvE,YAAA,OAAO,oBAAoB,QAAA,EAAU,EAAE,OAAO,iBAAA,EAAmB,SAAA,EAAW,UAAU,CAAA;AAAA,UACxF,CAAA;AAAA,UACA;AAAA,SACF;AAAA,MACF,CAAA;AACA,MAAA,OAAO,mBAAA,CAAyB,gBAAA,EAAkB,eAAA,EAAiB,MAAA,EAAQ,gBAAgB,CAAA;AAAA,IAC7F,CAAA;AAAA,IACA,MAAA,CACE,QACA,OAAA,EACA;AACA,MAAA,MAAM,gBAAA,GAAmB,qBAAqB,MAAM,CAAA;AACpD,MAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,MAAM,CAAA,EAAG;AACzB,QAAA,MAAM,iBAAA,GAAoB,OACxB,OAAA,EACA,aAAA,EACA,QAAA,KACG;AACH,UAAA,MAAM,aAAA,GAAgB,YAAA,CAAa,OAAA,EAAS,aAAa,CAAA;AACzD,UAAA,MAAM,iBAAA,GAAoB,uBAAA,CAAwB,SAAA,EAAW,aAAA,EAAe,MAAM,CAAA;AAClF,UAAA,MAAM,OAAA,GAA+B;AAAA,YACnC,UAAA,EAAY,iBAAA;AAAA,YACZ,WAAA,EAAa,wBAAwB,MAAM,CAAA;AAAA,YAC3C,aAAa,OAAA,EAAS,UAAA,GAAa,kBAAA,CAAmB,OAAA,CAAQ,UAAU,CAAA,GAAI;AAAA,WAC9E;AACA,UAAA,IAAI,OAAA,UAAiB,OAAA,GAAU,OAAA;AAC/B,UAAA,IAAI,OAAA,EAAS,UAAA,EAAY,OAAA,CAAQ,WAAA,GAAc,OAAA,CAAQ,UAAA;AACvD,UAAA,IAAI,aAAA,EAAe,KAAA,EAAO,OAAA,CAAQ,KAAA,GAAQ,aAAA,CAAc,KAAA;AACxD,UAAA,IAAI,aAAA,EAAe,IAAA,EAAM,OAAA,CAAQ,IAAA,GAAO,aAAA,CAAc,IAAA;AACtD,UAAA,IAAI,aAAA,EAAe,kBAAkB,MAAA,EAAW;AAC9C,YAAA,OAAA,CAAQ,kBAAkB,aAAA,CAAc,aAAA;AAAA,UAC1C;AACA,UAAA,MAAM,GAAA,GAAM,oBAAoB,OAAO,CAAA;AACvC,UAAA,MAAM,QAAA,GAAW,eAAA,GAAkB,mBAAA,CAAoB,OAAO,CAAA,GAAI,MAAA;AAClE,UAAA,OAAO,qBAAA;AAAA,YACL,MAAA;AAAA,YACA;AAAA,cACE,SAAA,EAAW,QAAA;AAAA,cACX,QAAA,EAAU,iBAAA;AAAA,cACV,KAAA,EAAO,iBAAA;AAAA,cACP,GAAA;AAAA,cACA,OAAA;AAAA,cACA,GAAA,EAAK,QAAA;AAAA,cACL,OAAA,EAAS;AAAA,aACX;AAAA,YACA,YAAY;AACV,cAAA,MAAM,QAAA,GAAW,MAAM,MAAA,CAAO,aAAA,CAAqB,SAAS,aAAa,CAAA;AACzE,cAAA,OAAO,oBAAoB,QAAA,EAAU,EAAE,OAAO,iBAAA,EAAmB,SAAA,EAAW,UAAU,CAAA;AAAA,YACxF,CAAA;AAAA,YACA;AAAA,WACF;AAAA,QACF,CAAA;AACA,QAAA,OAAO,mBAAA,CAA2B,iBAAA,EAAmB,eAAA,EAAiB,MAAA,EAAQ,gBAAgB,CAAA;AAAA,MAChG;AACA,MAAA,MAAM,gBAAA,GAAmB,OACvB,OAAA,EACA,aAAA,EACA,QAAA,KACG;AACH,QAAA,MAAM,aAAA,GAAgB,YAAA,CAAa,OAAA,EAAS,aAAa,CAAA;AACzD,QAAA,MAAM,iBAAA,GAAoB,uBAAA,CAAwB,SAAA,EAAW,aAAA,EAAe,MAAM,CAAA;AAClF,QAAA,MAAM,OAAA,GAA+B;AAAA,UACnC,UAAA,EAAY,iBAAA;AAAA,UACZ,WAAA,EAAa,mBAAmB,MAAM,CAAA;AAAA,UACtC,aAAa,OAAA,EAAS,UAAA,GAAa,kBAAA,CAAmB,OAAA,CAAQ,UAAU,CAAA,GAAI;AAAA,SAC9E;AACA,QAAA,IAAI,OAAA,UAAiB,OAAA,GAAU,OAAA;AAC/B,QAAA,IAAI,OAAA,EAAS,UAAA,EAAY,OAAA,CAAQ,WAAA,GAAc,OAAA,CAAQ,UAAA;AACvD,QAAA,IAAI,aAAA,EAAe,KAAA,EAAO,OAAA,CAAQ,KAAA,GAAQ,aAAA,CAAc,KAAA;AACxD,QAAA,IAAI,aAAA,EAAe,IAAA,EAAM,OAAA,CAAQ,IAAA,GAAO,aAAA,CAAc,IAAA;AACtD,QAAA,IAAI,aAAA,EAAe,kBAAkB,MAAA,EAAW;AAC9C,UAAA,OAAA,CAAQ,kBAAkB,aAAA,CAAc,aAAA;AAAA,QAC1C;AACA,QAAA,MAAM,GAAA,GAAM,oBAAoB,OAAO,CAAA;AACvC,QAAA,MAAM,QAAA,GAAW,eAAA,GAAkB,mBAAA,CAAoB,OAAO,CAAA,GAAI,MAAA;AAClE,QAAA,OAAO,qBAAA;AAAA,UACL,MAAA;AAAA,UACA;AAAA,YACE,SAAA,EAAW,QAAA;AAAA,YACX,QAAA,EAAU,iBAAA;AAAA,YACV,KAAA,EAAO,iBAAA;AAAA,YACP,GAAA;AAAA,YACA,OAAA;AAAA,YACA,GAAA,EAAK,QAAA;AAAA,YACL,OAAA,EAAS;AAAA,WACX;AAAA,UACA,YAAY;AACV,YAAA,MAAM,QAAA,GAAW,MAAM,MAAA,CAAO,aAAA,CAAmB,SAAS,aAAa,CAAA;AACvE,YAAA,OAAO,oBAAoB,QAAA,EAAU,EAAE,OAAO,iBAAA,EAAmB,SAAA,EAAW,UAAU,CAAA;AAAA,UACxF,CAAA;AAAA,UACA;AAAA,SACF;AAAA,MACF,CAAA;AACA,MAAA,OAAO,mBAAA,CAAyB,gBAAA,EAAkB,eAAA,EAAiB,MAAA,EAAQ,gBAAgB,CAAA;AAAA,IAC7F,CAAA;AAAA,IACA,MAAA,CAAO,QAAgB,OAAA,EAAoC;AACzD,MAAA,MAAM,gBAAA,GAAmB,qBAAqB,MAAM,CAAA;AACpD,MAAA,MAAM,aAAA,GAAgB,OACpB,OAAA,EACA,aAAA,EACA,QAAA,KACG;AACH,QAAA,MAAM,iBAAiB,aAAA,EAAc;AACrC,QAAA,MAAM,OAAA,GAAU,eAAe,UAAA,CAAW,MAAA,GAAS,CAAC,GAAG,cAAA,CAAe,UAAU,CAAA,GAAI,MAAA;AACpF,QAAA,MAAM,aAAA,GAAgB,YAAA,CAAa,OAAA,EAAS,aAAa,CAAA;AACzD,QAAA,MAAM,iBAAA,GAAoB,uBAAA,CAAwB,SAAA,EAAW,aAAA,EAAe,MAAM,CAAA;AAClF,QAAA,MAAM,OAAA,GAA+B;AAAA,UACnC,UAAA,EAAY,iBAAA;AAAA,UACZ,WAAA,EAAa,mBAAmB,MAAM,CAAA;AAAA,UACtC,UAAA,EAAY,OAAA;AAAA,UACZ,WAAA,EAAa,eAAe,UAAA,IAAc;AAAA,SAC5C;AACA,QAAA,IAAI,cAAA,CAAe,KAAA,EAAO,OAAA,CAAQ,OAAA,GAAU,cAAA,CAAe,KAAA;AAC3D,QAAA,IAAI,cAAA,CAAe,WAAA,KAAgB,MAAA,EAAW,OAAA,CAAQ,eAAe,cAAA,CAAe,WAAA;AACpF,QAAA,IAAI,cAAA,CAAe,QAAA,KAAa,MAAA,EAAW,OAAA,CAAQ,YAAY,cAAA,CAAe,QAAA;AAC9E,QAAA,IAAI,cAAA,CAAe,UAAA,KAAe,MAAA,EAAW,OAAA,CAAQ,cAAc,cAAA,CAAe,UAAA;AAClF,QAAA,IAAI,OAAA,UAAiB,OAAA,GAAU,OAAA;AAC/B,QAAA,MAAM,GAAA,GAAM,oBAAoB,OAAO,CAAA;AACvC,QAAA,MAAM,QAAA,GAAW,kBACb,mBAAA,CAAoB;AAAA,UAClB,KAAA,EAAO,cAAA;AAAA,UACP;AAAA,SACD,CAAA,GACD,MAAA;AACJ,QAAA,OAAO,qBAAA;AAAA,UACL,MAAA;AAAA,UACA;AAAA,YACE,SAAA,EAAW,QAAA;AAAA,YACX,QAAA,EAAU,iBAAA;AAAA,YACV,KAAA,EAAO,iBAAA;AAAA,YACP,GAAA;AAAA,YACA,OAAA;AAAA,YACA,GAAA,EAAK,QAAA;AAAA,YACL,OAAA,EAAS;AAAA,WACX;AAAA,UACA,YAAY;AACV,YAAA,MAAM,QAAA,GAAW,MAAM,MAAA,CAAO,aAAA,CAAqB,SAAS,aAAa,CAAA;AACzE,YAAA,OAAO,oBAAoB,QAAA,EAAU,EAAE,OAAO,iBAAA,EAAmB,SAAA,EAAW,UAAU,CAAA;AAAA,UACxF,CAAA;AAAA,UACA;AAAA,SACF;AAAA,MACF,CAAA;AACA,MAAA,MAAM,QAAA,GAAW,mBAAA,CAA2B,aAAA,EAAe,IAAA,EAAM,QAAQ,gBAAgB,CAAA;AACzF,MAAA,MAAM,cAAc,EAAC;AACrB,MAAA,MAAMA,cAAAA,GAAgB,mBAAA,CAA2C,KAAA,EAAO,YAAA,EAAc,WAAW,CAAA;AACjG,MAAA,MAAA,CAAO,MAAA,CAAO,WAAA,EAAaA,cAAAA,EAAe,QAAQ,CAAA;AAClD,MAAA,OAAO,WAAA;AAAA,IACT,CAAA;AAAA,IACA,OAAO,OAAA,EAA8D;AACnE,MAAA,MAAM,OAAA,GAAU,MAAM,UAAA,CAAW,MAAA,GAAS,CAAC,GAAG,KAAA,CAAM,UAAU,CAAA,GAAI,MAAA;AAClE,MAAA,MAAM,UAAA,GAAa,OAAA,EAAS,UAAA,IAAc,aAAA,CAAc,KAAK,CAAA;AAC7D,MAAA,IAAI,CAAC,UAAA,IAAc,CAAC,OAAA,EAAS,MAAA,EAAQ;AACnC,QAAA,MAAM,IAAI,MAAM,uFAAuF,CAAA;AAAA,MACzG;AACA,MAAA,MAAM,gBAAA,GAAmB,qBAAqB,MAAM,CAAA;AACpD,MAAA,MAAM,aAAA,GAAgB,OACpB,OAAA,EACA,aAAA,EACA,QAAA,KACG;AACH,QAAA,MAAM,iBAAiB,aAAA,EAAc;AACrC,QAAA,MAAM,UAAA,GAAgC;AAAA,UACpC,GAAG,cAAA;AAAA,UACH,UAAA,EAAY,OAAA,GAAU,OAAA,CAAQ,GAAA,CAAI,CAAA,SAAA,MAAc,EAAE,GAAG,SAAA,EAAU,CAAE,CAAA,GAAI;AAAC,SACxE;AACA,QAAA,MAAM,aAAA,GAAgB,YAAA,CAAa,OAAA,EAAS,aAAa,CAAA;AACzD,QAAA,MAAM,iBAAA,GAAoB,uBAAA,CAAwB,SAAA,EAAW,aAAA,EAAe,MAAM,CAAA;AAClF,QAAA,MAAM,OAAA,GAA+B;AAAA,UACnC,UAAA,EAAY,iBAAA;AAAA,UACZ,WAAA,EAAa,UAAA;AAAA,UACb,UAAA,EAAY;AAAA,SACd;AACA,QAAA,IAAI,cAAA,CAAe,KAAA,EAAO,OAAA,CAAQ,OAAA,GAAU,cAAA,CAAe,KAAA;AAC3D,QAAA,IAAI,cAAA,CAAe,WAAA,KAAgB,MAAA,EAAW,OAAA,CAAQ,eAAe,cAAA,CAAe,WAAA;AACpF,QAAA,IAAI,cAAA,CAAe,QAAA,KAAa,MAAA,EAAW,OAAA,CAAQ,YAAY,cAAA,CAAe,QAAA;AAC9E,QAAA,IAAI,cAAA,CAAe,UAAA,KAAe,MAAA,EAAW,OAAA,CAAQ,cAAc,cAAA,CAAe,UAAA;AAClF,QAAA,IAAI,OAAA,UAAiB,OAAA,GAAU,OAAA;AAC/B,QAAA,MAAM,GAAA,GAAM,oBAAoB,OAAO,CAAA;AACvC,QAAA,MAAM,QAAA,GAAW,kBACb,mBAAA,CAAoB;AAAA,UAClB,KAAA,EAAO,UAAA;AAAA,UACP;AAAA,SACD,CAAA,GACD,MAAA;AACJ,QAAA,OAAO,qBAAA;AAAA,UACL,MAAA;AAAA,UACA;AAAA,YACE,SAAA,EAAW,QAAA;AAAA,YACX,QAAA,EAAU,iBAAA;AAAA,YACV,KAAA,EAAO,iBAAA;AAAA,YACP,GAAA;AAAA,YACA,OAAA;AAAA,YACA,GAAA,EAAK,QAAA;AAAA,YACL,OAAA,EAAS;AAAA,WACX;AAAA,UACA,YAAY;AACV,YAAA,MAAM,QAAA,GAAW,MAAM,MAAA,CAAO,aAAA,CAA0B,SAAS,aAAa,CAAA;AAC9E,YAAA,OAAO,oBAAoB,QAAA,EAAU,EAAE,OAAO,iBAAA,EAAmB,SAAA,EAAW,UAAU,CAAA;AAAA,UACxF,CAAA;AAAA,UACA;AAAA,SACF;AAAA,MACF,CAAA;AACA,MAAA,OAAO,mBAAA,CAAgC,aAAA,EAAe,IAAA,EAAM,MAAA,EAAQ,gBAAgB,CAAA;AAAA,IACtF,CAAA;AAAA,IACA,MAAM,MAAA,CAAgB,OAAA,EAA6B,OAAA,EAAoC;AACrF,MAAA,MAAM,WAAW,MAAM,SAAA;AAAA,QACrB,OAAA,IAAW,eAAA;AAAA,QACX,OAAA;AAAA,QACA,aAAA,EAAc;AAAA,QACd,qBAAqB,MAAM;AAAA,OAC7B;AACA,MAAA,OAAO,eAAe,QAAQ,CAAA;AAAA,IAChC,CAAA;AAAA,IACA,MAAM,WAAA,CAAqB,OAAA,EAA6B,OAAA,EAAoC;AAC1F,MAAA,OAAO,OAAA,CAAQ,MAAA,CAA6B,OAAA,EAAS,OAAO,CAAA;AAAA,IAC9D;AAAA,GACD,CAAA;AAED,EAAA,OAAO,OAAA;AACT;AAEA,SAAS,kBAAA,CACP,MAAA,EACA,mBAAA,EACA,QAAA,EACA,MAAA,EACA;AACA,EAAA,MAAM,eAAA,GAAkB,OAAA,CAAQ,QAAA,EAAU,QAAQ,CAAA;AAClD,EAAA,OAAO,eAAe,KAAA,CACpB,KAAA,EACA,OAAA,EAC8B;AAC9B,IAAA,MAAM,eAAA,GAAkB,MAAM,IAAA,EAAK;AACnC,IAAA,IAAI,CAAC,eAAA,EAAiB;AACpB,MAAA,MAAM,IAAI,MAAM,mCAAmC,CAAA;AAAA,IACrD;AACA,IAAA,MAAM,OAAA,GAAU,EAAE,KAAA,EAAO,eAAA,EAAgB;AACzC,IAAA,MAAM,QAAA,GAAW,qBAAqB,MAAM,CAAA;AAC5C,IAAA,OAAO,WAAA;AAAA,MAAY,QAAA;AAAA,MAAU,MAC3B,qBAAA;AAAA,QACE,MAAA;AAAA,QACA;AAAA,UACE,SAAA,EAAW,OAAA;AAAA,UACX,QAAA,EAAU,gBAAA;AAAA,UACV,GAAA,EAAK,eAAA;AAAA,UACL,OAAA;AAAA,UACA,GAAA,EAAK,eAAA,GAAkB,qBAAA,CAAsB,eAAe,CAAA,GAAI,MAAA;AAAA,UAChE;AAAA,SACF;AAAA,QACA,YAAY;AACV,UAAA,MAAM,QAAA,GAAW,MAAM,MAAA,CAAO,YAAA,CAAoB,SAAS,OAAO,CAAA;AAClE,UAAA,OAAO,mBAAA,CAAoB,QAAA,EAAU,EAAE,SAAA,EAAW,SAAS,CAAA;AAAA,QAC7D,CAAA;AAAA,QACA;AAAA;AACF,KACF;AAAA,EACF,CAAA;AACF;AAuFA,SAAS,oBACP,OAAA,EACoC;AACpC,EAAA,MAAM,UAAkC,EAAC;AACzC,EAAA,IAAI,OAAA,CAAQ,UAAU,IAAA,EAAM;AAC1B,IAAA,OAAA,CAAQ,WAAW,IAAI,OAAA,CAAQ,MAAA;AAAA,EACjC;AACA,EAAA,IAAI,OAAA,CAAQ,kBAAkB,IAAA,EAAM;AAClC,IAAA,OAAA,CAAQ,mBAAmB,IAAI,OAAA,CAAQ,cAAA;AAAA,EACzC;AACA,EAAA,MAAA,CAAO,MAAA,CAAO,OAAA,EAAS,OAAA,CAAQ,OAAO,CAAA;AACtC,EAAA,OAAO,OAAO,IAAA,CAAK,OAAO,CAAA,CAAE,MAAA,GAAS,IAAI,OAAA,GAAU,MAAA;AACrD;AAEA,SAAS,yBAAA,CACP,MACA,cAAA,EACoC;AACpC,EAAA,IAAI,CAAC,IAAA,IAAQ,cAAA,KAAmB,MAAA,EAAW;AACzC,IAAA,OAAO,MAAA;AAAA,EACT;AAEA,EAAA,MAAM,UAAA,GAAqC;AAAA,IACzC,GAAI,QAAQ;AAAC,GACf;AACA,EAAA,MAAM,eAAA,GAAkB,iBACpB,6BAAA,CAA8B,cAAA,EAAgB,EAAE,KAAA,EAAO,sBAAA,EAAwB,CAAA,GAC/E,MAAA;AAEJ,EAAA,IAAI,oBAAoB,MAAA,EAAW;AACjC,IAAA,UAAA,CAAW,OAAA,GAAU,eAAA;AAAA,EACvB;AACA,EAAA,OAAO,UAAA;AACT;AAEO,SAAS,yBAGd,MAAA,EACmC;AACnC,EAAA,MAAM,oBAAA,GAAuB,yBAAA,CAA0B,MAAA,CAAO,IAAA,EAAM,OAAO,OAAO,CAAA;AAClF,EAAA,MAAM,mBAAmB,yBAAA,CAA0B;AAAA,IACjD,SAAS,MAAA,CAAO,OAAA;AAAA,IAChB,QAAQ,MAAA,CAAO,MAAA;AAAA,IACf,MAAA,EAAQ,OAAO,MAAA,IAAU,MAAA;AAAA,IACzB,OAAO,MAAA,CAAO,KAAA;AAAA,IACd,SAAS,MAAA,CAAO,OAAA;AAAA,IAChB,SAAS,MAAA,CAAO,OAAA;AAAA,IAChB,SAAS,MAAA,CAAO;AAAA,GACjB,CAAA;AACD,EAAA,OAAO,OAAO,MAAA,CAAO;AAAA,IACnB,MAAA;AAAA,IACA,gBAAA;AAAA,IACA,qBAAqB,qBAAA,EAAsB;AAAA,IAC3C,WAAA,EAAa,iBAAA,CAAkB,MAAA,CAAO,QAAQ,CAAA;AAAA,IAC9C;AAAA,GACD,CAAA;AACH;AAEO,SAAS,wBAAA,CAGd,MACA,cAAA,EAC+B;AAC/B,EAAA,MAAM,EAAE,MAAA,EAAQ,mBAAA,EAAqB,oBAAA,EAAsB,aAAY,GAAI,IAAA;AAC3E,EAAA,MAAM,OAAA,GAAU,6BAAA,CAA8B,IAAA,CAAK,gBAAA,EAAkB,YAAY;AAC/E,IAAA,MAAM,OAAA,GAAU,MAAM,cAAA,EAAe;AACrC,IAAA,OAAO,OAAA,GACH;AAAA,MACE,SAAS,OAAA,CAAQ,OAAA;AAAA,MACjB,QAAQ,OAAA,CAAQ,MAAA;AAAA,MAChB,gBAAgB,OAAA,CAAQ,cAAA;AAAA,MACxB,aAAa,OAAA,CAAQ,WAAA;AAAA,MACrB,QAAQ,OAAA,CAAQ,MAAA;AAAA,MAChB,cAAc,OAAA,CAAQ,YAAA;AAAA,MACtB,cAAc,OAAA,CAAQ;AAAA,KACxB,GACA,MAAA;AAAA,EACN,CAAC,CAAA;AACD,EAAA,MAAM,OAAO,gBAAA,CAAiB;AAAA,IAC5B,GAAI,wBAAwB;AAAC,GAC/B,EAAG;AAAA,IACD,MAAM,kBAAA,GAAqB;AACzB,MAAA,MAAM,OAAA,GAAU,MAAM,cAAA,EAAe;AACrC,MAAA,OAAO,OAAA,GACH;AAAA,QACE,OAAA,EAAS,oBAAoB,OAAO,CAAA;AAAA,QACpC,WAAA,EAAa,QAAQ,WAAA,IAAe,MAAA;AAAA,QACpC,MAAA,EAAQ,QAAQ,MAAA,IAAU,MAAA;AAAA,QAC1B,YAAA,EAAc,QAAQ,YAAA,IAAgB,MAAA;AAAA,QACtC,cAAc,OAAA,CAAQ;AAAA,OACxB,GACA,MAAA;AAAA,IACN;AAAA,GACD,CAAA;AAgBD,EAAA,SAAS,IAAA,CAKP,cACA,OAAA,EACwC;AACxC,IAAA,IAAI,mBAAA,CAAoB,YAAY,CAAA,EAAG;AACrC,MAAA,IAAI,OAAA,EAAS,WAAW,MAAA,EAAW;AACjC,QAAA,MAAM,IAAI,KAAA;AAAA,UACR;AAAA,SACF;AAAA,MACF;AACA,MAAA,OAAO,kBAAA;AAAA,QACL,kCAAkC,YAAY,CAAA;AAAA,QAC9C,OAAA;AAAA,QACA,mBAAA;AAAA,QACA,WAAA;AAAA,QACA,MAAA,CAAO;AAAA,OACT;AAAA,IACF;AAEA,IAAA,MAAM,iBAAA,GAAoB,uBAAA,CAAwB,YAAA,EAAwB,OAAA,EAAS,MAAM,CAAA;AACzF,IAAA,OAAO,kBAAA;AAAA,MACL,iBAAA;AAAA,MACA,OAAA;AAAA,MACA,mBAAA;AAAA,MACA,WAAA;AAAA,MACA,MAAA,CAAO;AAAA,KACT;AAAA,EACF;AACA,EAAA,MAAM,GAAA,GAA4C,CAChD,EAAA,EACA,IAAA,EACA,OAAA,KACG;AACH,IAAA,MAAM,YAAA,GAAe,GAAG,IAAA,EAAK;AAC7B,IAAA,IAAI,CAAC,YAAA,EAAc;AACjB,MAAA,MAAM,IAAI,MAAM,8BAA8B,CAAA;AAAA,IAChD;AACA,IAAA,OAAO,gBAAA;AAAA,MACL,YAAA;AAAA,MACA,IAAA;AAAA,MACA,OAAA;AAAA,MACA,OAAA;AAAA,MACA,mBAAA;AAAA,MACA,WAAA;AAAA,MACA,qBAAqB,WAAW,CAAA;AAAA,MAChC,OAAA,CAAQ,MAAA,CAAO,QAAA,EAAU,QAAQ;AAAA,KACnC;AAAA,EACF,CAAA;AACA,EAAA,MAAM,KAAA,GAAQ,kBAAA;AAAA,IACZ,OAAA;AAAA,IACA,mBAAA;AAAA,IACA,MAAA,CAAO,QAAA;AAAA,IACP;AAAA,GACF;AACA,EAAA,MAAM,aAAA,GAAgB,IAAA;AACtB,EAAA,MAAM,EAAA,GAAK;AAAA,IACT,IAAA;AAAA,IACA,MAAA,CACE1B,MAAAA,EACA,KAAA,EACA,MAAA,EACA;AACA,MAAA,IAAI,KAAA,IAAS,OAAO,KAAA,KAAU,QAAA,IAAY,CAAC,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AAC/D,QAAA,OAAO,aAAA,CAAmBA,MAAK,CAAA,CAAE,MAAA,CAAO,QAAW,KAAiC,CAAA;AAAA,MACtF;AACA,MAAA,OAAO,aAAA,CAAmBA,MAAK,CAAA,CAAE,MAAA,CAAO,OAAO,MAAM,CAAA;AAAA,IACvD,CAAA;AAAA,IACA,MAAA,CACEA,MAAAA,EACA,MAAA,EACA,OAAA,EACA;AACA,MAAA,OAAO,MAAM,OAAA,CAAQ,MAAM,CAAA,GACvB,aAAA,CAA4CA,MAAK,CAAA,CAAE,MAAA,CAAO,MAAA,EAAQ,OAAO,IACzE,aAAA,CAA4CA,MAAK,CAAA,CAAE,MAAA,CAAO,QAAQ,OAAO,CAAA;AAAA,IAC/E,CAAA;AAAA,IACA,MAAA,CACEA,MAAAA,EACA,MAAA,EACA,OAAA,EAIA;AACA,MAAA,OAAO,MAAM,OAAA,CAAQ,MAAM,CAAA,GACvB,aAAA,CAAmCA,MAAK,CAAA,CAAE,MAAA,CAAO,MAAA,EAAQ,OAAO,IAChE,aAAA,CAAmCA,MAAK,CAAA,CAAE,MAAA,CAAO,QAAQ,OAAO,CAAA;AAAA,IACtE,CAAA;AAAA,IACA,MAAA,CACEA,MAAAA,EACA,MAAA,EACA,OAAA,EACA;AACA,MAAA,OAAO,aAAA,CAAmCA,MAAK,CAAA,CAAE,MAAA,CAAO,QAAQ,OAAO,CAAA;AAAA,IACzE,CAAA;AAAA,IACA,MAAA,CACEA,QACA,OAAA,EACA;AACA,MAAA,OAAO,aAAA,CAAmBA,MAAK,CAAA,CAAE,MAAA,CAAO,OAAO,CAAA;AAAA,IACjD,CAAA;AAAA,IACA,GAAA;AAAA,IACA;AAAA,GACF;AACA,EAAA,MAAM,OAAO,gBAAA,CAAiB;AAAA,IAC5B,SAAS,MAAA,CAAO,OAAA;AAAA,IAChB,QAAQ,MAAA,CAAO,MAAA;AAAA,IACf,MAAA,EAAQ,OAAO,MAAA,IAAU,MAAA;AAAA,IACzB,SAAS,MAAA,CAAO,OAAA;AAAA,IAChB,OAAO,MAAA,CAAO,SAAA;AAAA,IACd,gBAAA,EAAkB,MAAA,CAAO,IAAA,EAAM,gBAAA,IAAoB;AAAA,GACrD,EAAG;AAAA,IACD,MAAM,kBAAA,GAAqB;AACzB,MAAA,MAAM,OAAA,GAAU,MAAM,cAAA,EAAe;AACrC,MAAA,OAAO,OAAA,GACH;AAAA,QACE,OAAA,EAAS,oBAAoB,OAAO,CAAA;AAAA,QACpC,aAAa,OAAA,CAAQ,WAAA;AAAA,QACrB,QAAQ,OAAA,CAAQ,MAAA;AAAA,QAChB,cAAc,OAAA,CAAQ,YAAA;AAAA,QACtB,cAAc,OAAA,CAAQ;AAAA,OACxB,GACA,MAAA;AAAA,IACN;AAAA,GACD,CAAA;AACD,EAAA,MAAMQ,QAAAA,GAAU,mBAAA,CAAoB,MAAA,EAAQ,cAAc,CAAA;AAC1D,EAAA,MAAM,OAAA,GAAU,oBAAoB,OAAA,EAAS;AAAA,IAC3C,GAAG,MAAA,CAAO,OAAA;AAAA,IACV,GAAI,OAAO,UAAA,GACP;AAAA,MACE,SAAS,MAAA,CAAO,UAAA;AAAA,MAChB,aAAA,EAAe;AAAA,QAEjB;AAAC,GACN,CAAA;AAED,EAAA,OAAO;AAAA,IACL,IAAA;AAAA,IACA,EAAA;AAAA,IACA,GAAA;AAAA,IACA,KAAA;AAAA,IACA,OAAA,EAAAA,QAAAA;AAAA,IACA,kBAAkB,OAAA,CAAQ,gBAAA;AAAA,IAC1B,MAAM,IAAA,CAAK,IAAA;AAAA,IACX,IAAA;AAAA,IACA;AAAA,GACF;AACF;;;AC/1DA,IAAME,SAAAA,GAAW,4BAAA;AACjB,IAAME,iBAAAA,GAAmB,oBAAoBF,SAAQ,CAAA;AAgC9C,IAAM,kBAAA,GAAN,cAAiC,KAAA,CAAM;AAAA,EAC5C,MAAA;AAAA,EACA,QAAA;AAAA,EACA,MAAA;AAAA,EACA,IAAA;AAAA,EAEA,YAAY,KAAA,EAMT;AACD,IAAA,KAAA,CAAM,MAAM,OAAO,CAAA;AACnB,IAAA,IAAA,CAAK,IAAA,GAAO,oBAAA;AACZ,IAAA,IAAA,CAAK,SAAS,KAAA,CAAM,MAAA;AACpB,IAAA,IAAA,CAAK,WAAW,KAAA,CAAM,QAAA;AACtB,IAAA,IAAA,CAAK,SAAS,KAAA,CAAM,MAAA;AACpB,IAAA,IAAA,CAAK,OAAO,KAAA,CAAM,IAAA;AAAA,EACpB;AACF;AA8DO,IAAM,kBAAA,GAAqB;AAAA,EAChC,SAAA,EAAW,SAAA;AAAA,EACX,YAAA,EAAc,QAAA;AAAA,EACd,OAAA,EAAS;AAAA,IACP,EAAE,IAAA,EAAM,iBAAA,EAAmB,MAAA,EAAQ,KAAA,EAAO,MAAM,0BAAA,EAA2B;AAAA,IAC3E,EAAE,IAAA,EAAM,gBAAA,EAAkB,MAAA,EAAQ,MAAA,EAAQ,MAAM,uBAAA,EAAwB;AAAA,IACxE,EAAE,IAAA,EAAM,eAAA,EAAiB,MAAA,EAAQ,KAAA,EAAO,MAAM,uBAAA,EAAwB;AAAA,IACtE,EAAE,IAAA,EAAM,gBAAA,EAAkB,MAAA,EAAQ,MAAA,EAAQ,MAAM,uBAAA,EAAwB;AAAA,IACxE,EAAE,IAAA,EAAM,aAAA,EAAe,MAAA,EAAQ,KAAA,EAAO,MAAM,4BAAA,EAA6B;AAAA,IACzE,EAAE,IAAA,EAAM,gBAAA,EAAkB,MAAA,EAAQ,OAAA,EAAS,MAAM,4BAAA,EAA6B;AAAA,IAC9E,EAAE,IAAA,EAAM,gBAAA,EAAkB,MAAA,EAAQ,QAAA,EAAU,MAAM,4BAAA,EAA6B;AAAA,IAC/E,EAAE,IAAA,EAAM,cAAA,EAAgB,MAAA,EAAQ,KAAA,EAAO,MAAM,sBAAA,EAAuB;AAAA,IACpE,EAAE,IAAA,EAAM,eAAA,EAAiB,MAAA,EAAQ,MAAA,EAAQ,MAAM,sBAAA,EAAuB;AAAA,IACtE,EAAE,IAAA,EAAM,YAAA,EAAc,MAAA,EAAQ,KAAA,EAAO,MAAM,2BAAA,EAA4B;AAAA,IACvE,EAAE,IAAA,EAAM,eAAA,EAAiB,MAAA,EAAQ,MAAA,EAAQ,MAAM,kCAAA,EAAmC;AAAA,IAClF,EAAE,IAAA,EAAM,kBAAA,EAAoB,MAAA,EAAQ,KAAA,EAAO,MAAM,2BAAA,EAA4B;AAAA,IAC7E,EAAE,IAAA,EAAM,mBAAA,EAAqB,MAAA,EAAQ,MAAA,EAAQ,MAAM,2BAAA,EAA4B;AAAA,IAC/E,EAAE,IAAA,EAAM,gBAAA,EAAkB,MAAA,EAAQ,KAAA,EAAO,MAAM,gCAAA,EAAiC;AAAA,IAChF,EAAE,IAAA,EAAM,mBAAA,EAAqB,MAAA,EAAQ,OAAA,EAAS,MAAM,gCAAA,EAAiC;AAAA,IACrF,EAAE,IAAA,EAAM,mBAAA,EAAqB,MAAA,EAAQ,QAAA,EAAU,MAAM,gCAAA,EAAiC;AAAA,IACtF,EAAE,IAAA,EAAM,aAAA,EAAe,MAAA,EAAQ,KAAA,EAAO,MAAM,qBAAA,EAAsB;AAAA,IAClE,EAAE,IAAA,EAAM,cAAA,EAAgB,MAAA,EAAQ,MAAA,EAAQ,MAAM,qBAAA,EAAsB;AAAA,IACpE,EAAE,IAAA,EAAM,WAAA,EAAa,MAAA,EAAQ,KAAA,EAAO,MAAM,0BAAA,EAA2B;AAAA,IACrE,EAAE,IAAA,EAAM,cAAA,EAAgB,MAAA,EAAQ,MAAA,EAAQ,MAAM,iCAAA,EAAkC;AAAA,IAChF,EAAE,IAAA,EAAM,mBAAA,EAAqB,MAAA,EAAQ,KAAA,EAAO,MAAM,2BAAA,EAA4B;AAAA,IAC9E,EAAE,IAAA,EAAM,oBAAA,EAAsB,MAAA,EAAQ,MAAA,EAAQ,MAAM,2BAAA,EAA4B;AAAA,IAChF,EAAE,IAAA,EAAM,iBAAA,EAAmB,MAAA,EAAQ,KAAA,EAAO,MAAM,gCAAA,EAAiC;AAAA,IACjF,EAAE,IAAA,EAAM,oBAAA,EAAsB,MAAA,EAAQ,OAAA,EAAS,MAAM,gCAAA,EAAiC;AAAA,IACtF,EAAE,IAAA,EAAM,oBAAA,EAAsB,MAAA,EAAQ,MAAA,EAAQ,MAAM,uCAAA,EAAwC;AAAA,IAC5F,EAAE,IAAA,EAAM,cAAA,EAAgB,MAAA,EAAQ,KAAA,EAAO,MAAM,sBAAA,EAAuB;AAAA,IACpE,EAAE,IAAA,EAAM,YAAA,EAAc,MAAA,EAAQ,KAAA,EAAO,MAAM,2BAAA,EAA4B;AAAA,IACvE;AAAA,MACE,IAAA,EAAM,iBAAA;AAAA,MACN,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM;AAAA,KACR;AAAA,IACA;AAAA,MACE,IAAA,EAAM,kBAAA;AAAA,MACN,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM;AAAA,KACR;AAAA,IACA;AAAA,MACE,IAAA,EAAM,eAAA;AAAA,MACN,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM;AAAA,KACR;AAAA,IACA;AAAA,MACE,IAAA,EAAM,kBAAA;AAAA,MACN,MAAA,EAAQ,OAAA;AAAA,MACR,IAAA,EAAM;AAAA,KACR;AAAA,IACA;AAAA,MACE,IAAA,EAAM,kBAAA;AAAA,MACN,MAAA,EAAQ,QAAA;AAAA,MACR,IAAA,EAAM;AAAA,KACR;AAAA,IACA;AAAA,MACE,IAAA,EAAM,mBAAA;AAAA,MACN,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM;AAAA,KACR;AAAA,IACA;AAAA,MACE,IAAA,EAAM,mBAAA;AAAA,MACN,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM;AAAA,KACR;AAAA,IACA;AAAA,MACE,IAAA,EAAM,uBAAA;AAAA,MACN,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM;AAAA,KACR;AAAA,IACA,EAAE,IAAA,EAAM,YAAA,EAAc,MAAA,EAAQ,KAAA,EAAO,MAAM,uBAAA,EAAwB;AAAA,IACnE,EAAE,IAAA,EAAM,eAAA,EAAiB,MAAA,EAAQ,KAAA,EAAO,MAAM,0BAAA,EAA2B;AAAA,IACzE;AAAA,MACE,IAAA,EAAM,iBAAA;AAAA,MACN,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM;AAAA,KACR;AAAA,IACA;AAAA,MACE,IAAA,EAAM,uBAAA;AAAA,MACN,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM;AAAA,KACR;AAAA,IACA,EAAE,IAAA,EAAM,iBAAA,EAAmB,MAAA,EAAQ,KAAA,EAAO,MAAM,gBAAA;AAAiB;AAErE;AAEA,SAASiB,cAAAA,CAAc,IAAA,EAAc,IAAA,EAAc,KAAA,EAAuB;AACxE,EAAA,OAAO,KAAK,OAAA,CAAQ,CAAA,CAAA,EAAI,IAAI,CAAA,CAAA,CAAA,EAAK,kBAAA,CAAmB,KAAK,CAAC,CAAA;AAC5D;AAEA,SAASN,YAAAA,CACP,MACA,KAAA,EACQ;AACR,EAAA,IAAI,CAAC,OAAO,OAAO,IAAA;AACnB,EAAA,MAAM,MAAA,GAAS,IAAI,eAAA,EAAgB;AACnC,EAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,KAAK,CAAA,EAAG;AAChD,IAAA,IAAI,KAAA,KAAU,MAAA,IAAa,KAAA,KAAU,IAAA,EAAM;AAC3C,IAAA,MAAA,CAAO,GAAA,CAAI,GAAA,EAAK,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA,EAC/B;AACA,EAAA,MAAM,UAAA,GAAa,OAAO,QAAA,EAAS;AACnC,EAAA,OAAO,UAAA,GAAa,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,UAAU,CAAA,CAAA,GAAK,IAAA;AAChD;AAEA,SAAS,gBAAgB,KAAA,EAA6E;AACpG,EAAA,MAAM,KAAA,GAAgC;AAAA,IACpC,cAAc,KAAA,CAAM;AAAA,GACtB;AACA,EAAA,IAAI,KAAA,CAAM,UAAA,EAAY,KAAA,CAAM,UAAA,GAAa,KAAA,CAAM,UAAA;AAC/C,EAAA,IAAI,YAAY,KAAA,IAAS,KAAA,CAAM,MAAA,EAAQ,KAAA,CAAM,SAAS,KAAA,CAAM,MAAA;AAC5D,EAAA,IAAI,YAAY,KAAA,IAAS,KAAA,CAAM,MAAA,EAAQ,KAAA,CAAM,SAAS,KAAA,CAAM,MAAA;AAC5D,EAAA,IAAI,OAAA,IAAW,SAAS,KAAA,CAAM,KAAA,KAAU,QAAW,KAAA,CAAM,KAAA,GAAQ,MAAA,CAAO,KAAA,CAAM,KAAK,CAAA;AACnF,EAAA,IAAI,QAAA,IAAY,SAAS,KAAA,CAAM,MAAA,KAAW,QAAW,KAAA,CAAM,MAAA,GAAS,MAAA,CAAO,KAAA,CAAM,MAAM,CAAA;AACvF,EAAA,OAAO,KAAA;AACT;AAEA,SAAS,kBAAqB,IAAA,EAAkB;AAC9C,EAAA,IAAI,IAAA,IAAQ,OAAO,IAAA,KAAS,QAAA,IAAY,UAAU,IAAA,EAAM;AACtD,IAAA,OAAQ,IAAA,CAAkC,IAAA;AAAA,EAC5C;AACA,EAAA,OAAO,IAAA;AACT;AAmHO,SAAS,oBAAoB,MAAA,EAAwD;AAC1F,EAAA,MAAM,OAAA,GAAU,6BAAA,CAA8B,MAAA,CAAO,OAAA,EAAS;AAAA,IAC5D,KAAA,EAAO;AAAA,GACR,CAAA;AACD,EAAA,MAAM,YAAY,MAAA,CAAO,SAAA,IAAa,UAAA,CAAW,KAAA,CAAM,KAAK,UAAU,CAAA;AAEtE,EAAA,eAAe,KACb,MAAA,EACA,IAAA,EACA,IAAA,EACA,OAAA,EACA,eAAgC,MAAA,EACpB;AACZ,IAAA,MAAM,UAAU,yBAAA,CAA0B;AAAA,MACxC,OAAA,EAAS,SAAA;AAAA,MACT,cAAA,EAAgBT,iBAAAA;AAAA,MAChB,MAAA,EAAQ,OAAA,EAAS,MAAA,IAAU,MAAA,CAAO,MAAA;AAAA,MAClC,QAAQ,MAAA,CAAO,MAAA;AAAA,MACf,aAAA,EAAe;AAAA,QACb,GAAI,MAAA,CAAO,OAAA,IAAW;AAAC,OACzB;AAAA,MACA,aAAa,OAAA,EAAS,OAAA;AAAA,MACtB,WAAA,EAAa;AAAA,KACd,CAAA;AAED,IAAA,IAAI,WAAA;AACJ,IAAA,IAAI,IAAA,KAAS,MAAA,IAAa,IAAA,KAAS,IAAA,EAAM;AACvC,MAAA,IACE,OAAO,IAAA,KAAS,QAAA,IAChB,IAAA,YAAgB,QAChB,IAAA,YAAgB,WAAA,IAChB,WAAA,CAAY,MAAA,CAAO,IAAI,CAAA,IACvB,IAAA,YAAgB,QAAA,IAChB,gBAAgB,eAAA,EAChB;AACA,QAAA,WAAA,GAAc,IAAA;AAAA,MAChB,CAAA,MAAO;AACL,QAAA,WAAA,GAAc,IAAA,CAAK,UAAU,IAAI,CAAA;AACjC,QAAA,IAAI,CAAC,mBAAA,CAAoB,OAAA,EAAS,cAAc,CAAA,EAAG;AACjD,UAAA,OAAA,CAAQ,cAAc,CAAA,GAAI,kBAAA;AAAA,QAC5B;AAAA,MACF;AAAA,IACF;AAEA,IAAA,MAAM,SAAA,GAAY,CAAA,EAAG,OAAO,CAAA,EAAG,IAAA,CAAK,UAAA,CAAW,GAAG,CAAA,GAAI,IAAA,GAAO,CAAA,CAAA,EAAI,IAAI,CAAA,CAAE,CAAA,CAAA;AACvE,IAAA,MAAM,QAAA,GAAW,MAAM,SAAA,CAAU,SAAA,EAAW;AAAA,MAC1C,MAAA;AAAA,MACA,OAAA;AAAA,MACA,IAAA,EAAM,WAAA;AAAA,MACN,QAAQ,OAAA,EAAS;AAAA,KAClB,CAAA;AAED,IAAA,IAAI,iBAAiB,MAAA,EAAQ;AAC3B,MAAA,MAAM,IAAA,GAAO,MAAM,QAAA,CAAS,IAAA,EAAK;AACjC,MAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,QAAA,MAAM,IAAI,kBAAA,CAAmB;AAAA,UAC3B,OAAA,EAAS,CAAA,wBAAA,EAA2B,QAAA,CAAS,MAAM,CAAA,CAAA,CAAA;AAAA,UACnD,QAAQ,QAAA,CAAS,MAAA;AAAA,UACjB,QAAA,EAAU,IAAA;AAAA,UACV,MAAA;AAAA,UACA,IAAA,EAAM;AAAA,SACP,CAAA;AAAA,MACH;AACA,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,MAAM,OAAA,GAAU,MAAM,QAAA,CAAS,IAAA,EAAK;AACpC,IAAA,IAAI,MAAA,GAAkB,OAAA;AACtB,IAAA,IAAI,OAAA,EAAS;AACX,MAAA,IAAI;AACF,QAAA,MAAA,GAAS,IAAA,CAAK,MAAM,OAAO,CAAA;AAAA,MAC7B,CAAA,CAAA,MAAQ;AACN,QAAA,MAAA,GAAS,OAAA;AAAA,MACX;AAAA,IACF,CAAA,MAAO;AACL,MAAA,MAAA,GAAS,IAAA;AAAA,IACX;AAEA,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,MAAA,MAAM,OAAA,GACJ,MAAA,IACA,OAAO,MAAA,KAAW,YAClB,SAAA,IAAa,MAAA,IACb,OAAQ,MAAA,CAAgC,YAAY,QAAA,GAC/C,MAAA,CAA+B,OAAA,GAChC,CAAA,wBAAA,EAA2B,SAAS,MAAM,CAAA,CAAA,CAAA;AAChD,MAAA,MAAM,IAAI,kBAAA,CAAmB;AAAA,QAC3B,OAAA;AAAA,QACA,QAAQ,QAAA,CAAS,MAAA;AAAA,QACjB,QAAA,EAAU,IAAA;AAAA,QACV,MAAA;AAAA,QACA,IAAA,EAAM;AAAA,OACP,CAAA;AAAA,IACH;AAEA,IAAA,OAAO,kBAAqB,MAAM,CAAA;AAAA,EACpC;AAEA,EAAA,OAAO;AAAA,IACL,eAAA,CAAgB,OAAO,OAAA,EAAS;AAC9B,MAAA,OAAO,IAAA;AAAA,QACL,KAAA;AAAA,QACAS,YAAAA,CAAY,0BAAA,EAA4B,eAAA,CAAgB,KAAK,CAAC,CAAA;AAAA,QAC9D,MAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF,CAAA;AAAA,IACA,cAAA,CAAe,MAAM,OAAA,EAAS;AAC5B,MAAA,OAAO,IAAA,CAAK,MAAA,EAAQ,uBAAA,EAAyB,IAAA,EAAM,OAAO,CAAA;AAAA,IAC5D,CAAA;AAAA,IACA,aAAA,CAAc,OAAO,OAAA,EAAS;AAC5B,MAAA,OAAO,IAAA;AAAA,QACL,KAAA;AAAA,QACAA,YAAAA,CAAY,uBAAA,EAAyB,eAAA,CAAgB,KAAK,CAAC,CAAA;AAAA,QAC3D,MAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF,CAAA;AAAA,IACA,cAAA,CAAe,OAAO,OAAA,EAAS;AAC7B,MAAA,OAAO,IAAA;AAAA,QACL,MAAA;AAAA,QACA,uBAAA;AAAA,QACA;AAAA,UACE,cAAc,KAAA,CAAM,YAAA;AAAA,UACpB,YAAY,KAAA,CAAM,UAAA;AAAA,UAClB,OAAO,KAAA,CAAM,KAAA;AAAA,UACb,MAAM,KAAA,CAAM,IAAA;AAAA,UACZ,QAAA,EAAU,KAAA,CAAM,QAAA,IAAY,EAAC;AAAA,UAC7B,gBAAgB,KAAA,CAAM;AAAA,SACxB;AAAA,QACA;AAAA,OACF;AAAA,IACF,CAAA;AAAA,IACA,WAAA,CAAY,EAAA,EAAI,KAAA,EAAO,OAAA,EAAS;AAC9B,MAAA,OAAO,IAAA;AAAA,QACL,KAAA;AAAA,QACAA,YAAAA;AAAA,UACEM,cAAAA,CAAc,4BAAA,EAA8B,IAAA,EAAM,EAAE,CAAA;AAAA,UACpD,gBAAgB,KAAK;AAAA,SACvB;AAAA,QACA,MAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF,CAAA;AAAA,IACA,cAAA,CAAe,EAAA,EAAI,KAAA,EAAO,OAAA,EAAS;AACjC,MAAA,OAAO,IAAA;AAAA,QACL,OAAA;AAAA,QACAA,cAAAA,CAAc,4BAAA,EAA8B,IAAA,EAAM,EAAE,CAAA;AAAA,QACpD;AAAA,UACE,cAAc,KAAA,CAAM,YAAA;AAAA,UACpB,YAAY,KAAA,CAAM,UAAA;AAAA,UAClB,OAAO,KAAA,CAAM,KAAA;AAAA,UACb,MAAM,KAAA,CAAM;AAAA,SACd;AAAA,QACA;AAAA,OACF;AAAA,IACF,CAAA;AAAA,IACA,cAAA,CAAe,EAAA,EAAI,KAAA,EAAO,OAAA,EAAS;AACjC,MAAA,OAAO,IAAA;AAAA,QACL,QAAA;AAAA,QACAN,YAAAA;AAAA,UACEM,cAAAA,CAAc,4BAAA,EAA8B,IAAA,EAAM,EAAE,CAAA;AAAA,UACpD,gBAAgB,KAAK;AAAA,SACvB;AAAA,QACA,MAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF,CAAA;AAAA,IACA,YAAA,CAAa,OAAO,OAAA,EAAS;AAC3B,MAAA,OAAO,IAAA;AAAA,QACL,KAAA;AAAA,QACAN,YAAAA,CAAY,sBAAA,EAAwB,eAAA,CAAgB,KAAK,CAAC,CAAA;AAAA,QAC1D,MAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF,CAAA;AAAA,IACA,aAAA,CAAc,MAAM,OAAA,EAAS;AAC3B,MAAA,OAAO,IAAA,CAAK,MAAA,EAAQ,sBAAA,EAAwB,IAAA,EAAM,OAAO,CAAA;AAAA,IAC3D,CAAA;AAAA,IACA,UAAA,CAAW,EAAA,EAAI,KAAA,EAAO,OAAA,EAAS;AAC7B,MAAA,OAAO,IAAA;AAAA,QACL,KAAA;AAAA,QACAA,YAAAA;AAAA,UACEM,cAAAA,CAAc,2BAAA,EAA6B,IAAA,EAAM,EAAE,CAAA;AAAA,UACnD,gBAAgB,KAAK;AAAA,SACvB;AAAA,QACA,MAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF,CAAA;AAAA,IACA,aAAA,CAAc,EAAA,EAAI,KAAA,EAAO,OAAA,EAAS;AAChC,MAAA,OAAO,IAAA;AAAA,QACL,MAAA;AAAA,QACAN,YAAAA;AAAA,UACEM,cAAAA,CAAc,kCAAA,EAAoC,IAAA,EAAM,EAAE,CAAA;AAAA,UAC1D,gBAAgB,KAAK;AAAA,SACvB;AAAA,QACA,EAAC;AAAA,QACD;AAAA,OACF;AAAA,IACF,CAAA;AAAA,IACA,gBAAA,CAAiB,OAAO,OAAA,EAAS;AAC/B,MAAA,OAAO,IAAA;AAAA,QACL,KAAA;AAAA,QACAN,YAAAA,CAAY,2BAAA,EAA6B,eAAA,CAAgB,KAAK,CAAC,CAAA;AAAA,QAC/D,MAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF,CAAA;AAAA,IACA,iBAAA,CAAkB,MAAM,OAAA,EAAS;AAC/B,MAAA,OAAO,IAAA,CAAK,MAAA,EAAQ,2BAAA,EAA6B,IAAA,EAAM,OAAO,CAAA;AAAA,IAChE,CAAA;AAAA,IACA,cAAA,CAAe,EAAA,EAAI,KAAA,EAAO,OAAA,EAAS;AACjC,MAAA,OAAO,IAAA;AAAA,QACL,KAAA;AAAA,QACAA,YAAAA;AAAA,UACEM,cAAAA,CAAc,gCAAA,EAAkC,IAAA,EAAM,EAAE,CAAA;AAAA,UACxD,gBAAgB,KAAK;AAAA,SACvB;AAAA,QACA,MAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF,CAAA;AAAA,IACA,iBAAA,CAAkB,EAAA,EAAI,IAAA,EAAM,OAAA,EAAS;AACnC,MAAA,OAAO,IAAA;AAAA,QACL,OAAA;AAAA,QACAA,cAAAA,CAAc,gCAAA,EAAkC,IAAA,EAAM,EAAE,CAAA;AAAA,QACxD,IAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF,CAAA;AAAA,IACA,iBAAA,CAAkB,EAAA,EAAI,KAAA,EAAO,OAAA,EAAS;AACpC,MAAA,OAAO,IAAA;AAAA,QACL,QAAA;AAAA,QACAN,YAAAA;AAAA,UACEM,cAAAA,CAAc,gCAAA,EAAkC,IAAA,EAAM,EAAE,CAAA;AAAA,UACxD,gBAAgB,KAAK;AAAA,SACvB;AAAA,QACA,MAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF,CAAA;AAAA,IACA,WAAA,CAAY,OAAO,OAAA,EAAS;AAC1B,MAAA,OAAO,IAAA;AAAA,QACL,KAAA;AAAA,QACAN,YAAAA,CAAY,qBAAA,EAAuB,eAAA,CAAgB,KAAK,CAAC,CAAA;AAAA,QACzD,MAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF,CAAA;AAAA,IACA,YAAA,CAAa,MAAM,OAAA,EAAS;AAC1B,MAAA,OAAO,IAAA,CAAK,MAAA,EAAQ,qBAAA,EAAuB,IAAA,EAAM,OAAO,CAAA;AAAA,IAC1D,CAAA;AAAA,IACA,SAAA,CAAU,EAAA,EAAI,KAAA,EAAO,OAAA,EAAS;AAC5B,MAAA,OAAO,IAAA;AAAA,QACL,KAAA;AAAA,QACAA,YAAAA,CAAYM,cAAAA,CAAc,0BAAA,EAA4B,IAAA,EAAM,EAAE,CAAA,EAAG;AAAA,UAC/D,GAAG,gBAAgB,KAAK,CAAA;AAAA,UACxB,GAAI,MAAM,SAAA,GAAY,EAAE,WAAW,KAAA,CAAM,SAAA,KAAc;AAAC,SACzD,CAAA;AAAA,QACD,MAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF,CAAA;AAAA,IACA,YAAA,CAAa,EAAA,EAAI,KAAA,EAAO,OAAA,EAAS;AAC/B,MAAA,OAAO,IAAA;AAAA,QACL,MAAA;AAAA,QACAN,YAAAA,CAAYM,cAAAA,CAAc,iCAAA,EAAmC,IAAA,EAAM,EAAE,CAAA,EAAG;AAAA,UACtE,GAAG,gBAAgB,KAAK,CAAA;AAAA,UACxB,GAAI,MAAM,SAAA,GAAY,EAAE,WAAW,KAAA,CAAM,SAAA,KAAc;AAAC,SACzD,CAAA;AAAA,QACD,EAAC;AAAA,QACD;AAAA,OACF;AAAA,IACF,CAAA;AAAA,IACA,iBAAA,CAAkB,OAAO,OAAA,EAAS;AAChC,MAAA,OAAO,IAAA;AAAA,QACL,KAAA;AAAA,QACAN,YAAAA,CAAY,2BAAA,EAA6B,eAAA,CAAgB,KAAK,CAAC,CAAA;AAAA,QAC/D,MAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF,CAAA;AAAA,IACA,kBAAA,CAAmB,MAAM,OAAA,EAAS;AAChC,MAAA,OAAO,IAAA,CAAK,MAAA,EAAQ,2BAAA,EAA6B,IAAA,EAAM,OAAO,CAAA;AAAA,IAChE,CAAA;AAAA,IACA,eAAA,CAAgB,EAAA,EAAI,KAAA,EAAO,OAAA,EAAS;AAClC,MAAA,OAAO,IAAA;AAAA,QACL,KAAA;AAAA,QACAA,YAAAA,CAAYM,cAAAA,CAAc,gCAAA,EAAkC,IAAA,EAAM,EAAE,CAAA,EAAG;AAAA,UACrE,GAAG,gBAAgB,KAAK,CAAA;AAAA,UACxB,GAAI,MAAM,UAAA,GAAa,EAAE,YAAY,KAAA,CAAM,UAAA,KAAe;AAAC,SAC5D,CAAA;AAAA,QACD,MAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF,CAAA;AAAA,IACA,kBAAA,CAAmB,EAAA,EAAI,IAAA,EAAM,OAAA,EAAS;AACpC,MAAA,OAAO,IAAA;AAAA,QACL,OAAA;AAAA,QACAA,cAAAA,CAAc,gCAAA,EAAkC,IAAA,EAAM,EAAE,CAAA;AAAA,QACxD,IAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF,CAAA;AAAA,IACA,kBAAA,CAAmB,EAAA,EAAI,KAAA,EAAO,OAAA,EAAS;AACrC,MAAA,OAAO,IAAA;AAAA,QACL,MAAA;AAAA,QACAN,YAAAA,CAAYM,cAAAA,CAAc,uCAAA,EAAyC,IAAA,EAAM,EAAE,CAAA,EAAG;AAAA,UAC5E,GAAG,gBAAgB,KAAK,CAAA;AAAA,UACxB,YAAY,KAAA,CAAM;AAAA,SACnB,CAAA;AAAA,QACD,EAAC;AAAA,QACD;AAAA,OACF;AAAA,IACF,CAAA;AAAA,IACA,YAAA,CAAa,OAAO,OAAA,EAAS;AAC3B,MAAA,OAAO,IAAA;AAAA,QACL,KAAA;AAAA,QACAN,YAAAA,CAAY,sBAAA,EAAwB,eAAA,CAAgB,KAAK,CAAC,CAAA;AAAA,QAC1D,MAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF,CAAA;AAAA,IACA,UAAA,CAAW,EAAA,EAAI,KAAA,EAAO,OAAA,EAAS;AAC7B,MAAA,OAAO,IAAA;AAAA,QACL,KAAA;AAAA,QACAA,YAAAA;AAAA,UACEM,cAAAA,CAAc,2BAAA,EAA6B,IAAA,EAAM,EAAE,CAAA;AAAA,UACnD,gBAAgB,KAAK;AAAA,SACvB;AAAA,QACA,MAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF,CAAA;AAAA,IACA,eAAA,CAAgB,YAAY,OAAA,EAAS;AACnC,MAAA,OAAO,IAAA;AAAA,QACL,KAAA;AAAA,QACAA,cAAAA,CAAc,kDAAA,EAAoD,aAAA,EAAe,UAAU,CAAA;AAAA,QAC3F,MAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF,CAAA;AAAA,IACA,gBAAA,CAAiB,UAAA,EAAY,KAAA,EAAO,OAAA,EAAS;AAC3C,MAAA,OAAO,IAAA;AAAA,QACL,MAAA;AAAA,QACAA,cAAAA,CAAc,kDAAA,EAAoD,aAAA,EAAe,UAAU,CAAA;AAAA,QAC3F;AAAA,UACE,WAAW,KAAA,CAAM,SAAA;AAAA,UACjB,SAAS,KAAA,CAAM,OAAA;AAAA,UACf,UAAU,KAAA,CAAM,QAAA;AAAA,UAChB,MAAM,KAAA,CAAM,IAAA;AAAA,UACZ,QAAQ,KAAA,CAAM,MAAA;AAAA,UACd,gBAAgB,KAAA,CAAM,cAAA;AAAA,UACtB,mBAAmB,KAAA,CAAM,iBAAA;AAAA,UACzB,mBAAmB,KAAA,CAAM,iBAAA;AAAA,UACzB,QAAQ,KAAA,CAAM,MAAA;AAAA,UACd,QAAQ,KAAA,CAAM,MAAA;AAAA,UACd,UAAU,KAAA,CAAM;AAAA,SAClB;AAAA,QACA;AAAA,OACF;AAAA,IACF,CAAA;AAAA,IACA,aAAA,CAAc,UAAA,EAAY,YAAA,EAAc,OAAA,EAAS;AAC/C,MAAA,OAAO,IAAA;AAAA,QACL,KAAA;AAAA,QACAA,cAAAA;AAAA,UACEA,cAAAA;AAAA,YACE,kEAAA;AAAA,YACA,aAAA;AAAA,YACA;AAAA,WACF;AAAA,UACA,eAAA;AAAA,UACA;AAAA,SACF;AAAA,QACA,MAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF,CAAA;AAAA,IACA,gBAAA,CAAiB,UAAA,EAAY,YAAA,EAAc,KAAA,EAAO,OAAA,EAAS;AACzD,MAAA,OAAO,IAAA;AAAA,QACL,OAAA;AAAA,QACAA,cAAAA;AAAA,UACEA,cAAAA;AAAA,YACE,kEAAA;AAAA,YACA,aAAA;AAAA,YACA;AAAA,WACF;AAAA,UACA,eAAA;AAAA,UACA;AAAA,SACF;AAAA,QACA,KAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF,CAAA;AAAA,IACA,gBAAA,CAAiB,UAAA,EAAY,YAAA,EAAc,OAAA,EAAS;AAClD,MAAA,OAAO,IAAA;AAAA,QACL,QAAA;AAAA,QACAA,cAAAA;AAAA,UACEA,cAAAA;AAAA,YACE,kEAAA;AAAA,YACA,aAAA;AAAA,YACA;AAAA,WACF;AAAA,UACA,eAAA;AAAA,UACA;AAAA,SACF;AAAA,QACA,MAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF,CAAA;AAAA,IACA,iBAAA,CAAkB,UAAA,EAAY,YAAA,EAAc,KAAA,EAAO,OAAA,EAAS;AAC1D,MAAA,OAAO,IAAA;AAAA,QACL,MAAA;AAAA,QACAA,cAAAA;AAAA,UACEA,cAAAA;AAAA,YACE,4EAAA;AAAA,YACA,aAAA;AAAA,YACA;AAAA,WACF;AAAA,UACA,eAAA;AAAA,UACA;AAAA,SACF;AAAA,QACA;AAAA,UACE,cAAc,KAAA,CAAM,YAAA;AAAA,UACpB,YAAY,KAAA,CAAM,UAAA;AAAA,UAClB,YAAY,KAAA,CAAM;AAAA,SACpB;AAAA,QACA;AAAA,OACF;AAAA,IACF,CAAA;AAAA,IACA,iBAAA,CAAkB,YAAY,OAAA,EAAS;AACrC,MAAA,OAAO,IAAA;AAAA,QACL,KAAA;AAAA,QACAA,cAAAA;AAAA,UACE,qDAAA;AAAA,UACA,aAAA;AAAA,UACA;AAAA,SACF;AAAA,QACA,MAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF,CAAA;AAAA,IACA,qBAAA,CAAsB,UAAA,EAAY,KAAA,EAAO,OAAA,EAAS;AAChD,MAAA,OAAO,IAAA;AAAA,QACL,MAAA;AAAA,QACAN,YAAAA;AAAA,UACEM,cAAAA;AAAA,YACE,8DAAA;AAAA,YACA,aAAA;AAAA,YACA;AAAA,WACF;AAAA,UACA;AAAA,YACE,cAAc,KAAA,EAAO,YAAA;AAAA,YACrB,UAAU,KAAA,EAAO;AAAA;AACnB,SACF;AAAA,QACA,EAAC;AAAA,QACD;AAAA,OACF;AAAA,IACF,CAAA;AAAA,IACA,WAAW,OAAA,EAAS;AAClB,MAAA,OAAO,IAAA,CAAK,KAAA,EAAO,uBAAA,EAAyB,MAAA,EAAW,OAAO,CAAA;AAAA,IAChE,CAAA;AAAA,IACA,cAAc,OAAA,EAAS;AACrB,MAAA,OAAO,IAAA,CAAK,KAAA,EAAO,0BAAA,EAA4B,MAAA,EAAW,OAAO,CAAA;AAAA,IACnE,CAAA;AAAA,IACA,eAAA,CAAgB,OAAO,OAAA,EAAS;AAC9B,MAAA,OAAO,IAAA;AAAA,QACL,KAAA;AAAA,QACAN,aAAY,sCAAA,EAAwC;AAAA,UAClD,cAAc,KAAA,EAAO,YAAA;AAAA,UACrB,UAAU,KAAA,EAAO;AAAA,SAClB,CAAA;AAAA,QACD,MAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF,CAAA;AAAA,IACA,qBAAA,CAAsB,OAAO,OAAA,EAAS;AACpC,MAAA,MAAM,IAAA,GAAOM,cAAAA;AAAA,QACXA,cAAAA;AAAA,UACEA,cAAAA;AAAA,YACE,yFAAA;AAAA,YACA,UAAA;AAAA,YACA,KAAA,CAAM;AAAA,WACR;AAAA,UACA,aAAA;AAAA,UACA,KAAA,CAAM;AAAA,SACR;AAAA,QACA,eAAA;AAAA,QACA,KAAA,CAAM;AAAA,OACR;AACA,MAAA,OAAO,IAAA,CAAK,MAAA,EAAQ,IAAA,EAAM,KAAA,CAAM,IAAA,EAAM;AAAA,QACpC,GAAG,OAAA;AAAA,QACH,OAAA,EAAS;AAAA,UACP,GAAI,OAAA,EAAS,OAAA,IAAW,EAAC;AAAA,UACzB,GAAI,KAAA,CAAM,gBAAA,IAAoB;AAAC;AACjC,OACD,CAAA;AAAA,IACH,CAAA;AAAA,IACA,eAAA,CAAgB,WAAW,OAAA,EAAS;AAClC,MAAA,OAAO,IAAA;AAAA,QACL,KAAA;AAAA,QACAN,YAAAA,CAAY,gBAAA,EAAkB,EAAE,UAAA,EAAY,WAAW,CAAA;AAAA,QACvD,MAAA;AAAA,QACA,OAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF;AAAA,GACF;AACF;;;ACn0BA,IAAM,YAAA,GAAe,CAAC,YAAA,EAAc,wBAAwB,CAAA;AAC5D,IAAM,eAAA,GAAkB,CAAC,eAAA,EAAiB,oBAAA,EAAsB,+BAA+B,CAAA;AAC/F,IAAM,iBAAA,GAAoB,CAAC,iBAAA,EAAmB,6BAA6B,CAAA;AAC3E,IAAM,iBAAA,GAAoB,CAAC,iBAAA,EAAmB,6BAA6B,CAAA;AAC3E,IAAM,oBAAA,GAAuB,CAAC,oBAAA,EAAsB,gCAAgC,CAAA;AACpF,IAAM,oBAAA,GAAuB,CAAC,oBAAA,EAAsB,gCAAgC,CAAA;AACpF,IAAM,YAAA,GAAe,CAAC,gBAAA,EAAkB,4BAAA,EAA8B,0BAA0B,WAAW,CAAA;AAC3G,IAAM,eAAA,GAAkB,CAAC,eAAA,EAAiB,2BAA2B,CAAA;AACrE,IAAM,mBAAA,GAAsB,2BAAA;AAIrB,IAAM,wBAAA,GAAN,cAAuC,KAAA,CAAM;AAAA,EACzC,IAAA,GAAO,+BAAA;AAAA,EACP,OAAA;AAAA,EAET,WAAA,CAAY,OAAA,EAAwB,OAAA,GAAU,CAAA,OAAA,EAAU,OAAO,CAAA,mBAAA,CAAA,EAAuB;AACpF,IAAA,KAAA,CAAM,OAAO,CAAA;AACb,IAAA,IAAA,CAAK,IAAA,GAAO,0BAAA;AACZ,IAAA,IAAA,CAAK,OAAA,GAAU,OAAA;AAAA,EACjB;AACF;AAuIA,SAAS,YAAA,CACP,KACA,IAAA,EACoB;AACpB,EAAA,KAAA,MAAW,OAAO,IAAA,EAAM;AACtB,IAAA,MAAM,KAAA,GAAQ,GAAA,GAAM,GAAG,CAAA,EAAG,IAAA,EAAK;AAC/B,IAAA,IAAI,OAAO,OAAO,KAAA;AAAA,EACpB;AACA,EAAA,OAAO,MAAA;AACT;AAEA,SAAS,kBAAkB,KAAA,EAAsD;AAC/E,EAAA,MAAM,UAAA,GAAa,OAAO,IAAA,EAAK;AAC/B,EAAA,OAAO,UAAA,IAAc,MAAA;AACvB;AAEA,SAAS,UAAA,CAAW,SAAiB,IAAA,EAAsB;AACzD,EAAA,OAAO,CAAA,EAAG,OAAA,CAAQ,OAAA,CAAQ,MAAA,EAAQ,EAAE,CAAC,CAAA,CAAA,EAAI,IAAA,CAAK,OAAA,CAAQ,MAAA,EAAQ,EAAE,CAAC,CAAA,CAAA;AACnE;AAEA,SAAS,eAAe,OAAA,EAAyB;AAC/C,EAAA,MAAM,GAAA,GAAM,IAAI,GAAA,CAAI,OAAO,CAAA;AAC3B,EAAA,GAAA,CAAI,QAAA,GAAW,GAAA,CAAI,QAAA,KAAa,QAAA,GAAW,MAAA,GAAS,KAAA;AACpD,EAAA,GAAA,CAAI,WAAW,CAAA,EAAG,GAAA,CAAI,SAAS,OAAA,CAAQ,MAAA,EAAQ,EAAE,CAAC,CAAA,YAAA,CAAA;AAClD,EAAA,GAAA,CAAI,MAAA,GAAS,EAAA;AACb,EAAA,GAAA,CAAI,IAAA,GAAO,EAAA;AACX,EAAA,OAAO,IAAI,QAAA,EAAS;AACtB;AAEA,SAAS,YACP,MAAA,EAC2B;AAC3B,EAAA,MAAM,MAAM,MAAA,CAAO,GAAA;AACnB,EAAA,MAAM,YAAA,GAAe,iBAAA,CAAkB,MAAA,CAAO,GAAG,CAAA;AACjD,EAAA,MAAM,OAAA,GAAU,YAAA,CAAa,GAAA,EAAK,YAAY,CAAA;AAC9C,EAAA,MAAM,OAAO,YAAA,IAAgB,OAAA;AAC7B,EAAA,MAAM,kCAAkC,YAAA,KAAiB,MAAA;AACzD,EAAA,MAAM,cAAA,GAAiB,CACrB,QAAA,EACA,OAAA,EACA,SAEA,iBAAA,CAAkB,QAAQ,CAAA,KACzB,+BAAA,IAAmC,IAAA,GAAO,UAAA,CAAW,MAAM,IAAI,CAAA,GAAI,MAAA,CAAA,IACpE,YAAA,CAAa,GAAA,EAAK,OAAO,MACxB,IAAA,GAAO,UAAA,CAAW,IAAA,EAAM,IAAI,CAAA,GAAI,MAAA,CAAA;AAEnC,EAAA,MAAM,QAAQ,cAAA,CAAe,MAAA,CAAO,EAAA,EAAI,GAAA,EAAK,iBAAiB,IAAI,CAAA;AAClE,EAAA,MAAM,IAAA,GAA4B;AAAA,IAChC,EAAA,EAAI,KAAA;AAAA,IACJ,MAAM,cAAA,CAAe,MAAA,CAAO,IAAA,EAAM,GAAA,EAAK,mBAAmB,MAAM,CAAA;AAAA,IAChE,MAAM,cAAA,CAAe,MAAA,CAAO,IAAA,EAAM,GAAA,EAAK,mBAAmB,MAAM,CAAA;AAAA,IAChE,SAAS,cAAA,CAAe,MAAA,CAAO,OAAA,EAAS,GAAA,EAAK,sBAAsB,SAAS,CAAA;AAAA;AAAA,IAE5E,SACE,iBAAA,CAAkB,MAAA,CAAO,SAAS,GAAG,CAAA,IACrC,SACA,IAAA,IACA,MAAA;AAAA,IACF,QACE,iBAAA,CAAkB,MAAA,CAAO,MAAM,KAAK,CAAA,KACnC,mCAAmC,IAAA,GAAO,cAAA,CAAe,IAAI,CAAA,GAAI,MAAA,CAAA,IAClE,aAAa,GAAA,EAAK,oBAAoB,MACrC,IAAA,GAAO,cAAA,CAAe,IAAI,CAAA,GAAI,MAAA;AAAA,GACnC;AAEA,EAAA,IAAI,CAAC,IAAA,CAAK,EAAA,IAAM,CAAC,KAAK,IAAA,IAAQ,CAAC,IAAA,CAAK,IAAA,IAAQ,CAAC,IAAA,CAAK,OAAA,IAAW,CAAC,KAAK,OAAA,EAAS;AAC1E,IAAA,MAAM,IAAI,wBAAA,CAAyB,IAAA,EAAM,uEAAuE,CAAA;AAAA,EAClH;AAEA,EAAA,MAAM,MAAM,iBAAA,CAAkB,MAAA,CAAO,GAAG,CAAA,IAAK,YAAA,CAAa,KAAK,YAAY,CAAA;AAC3E,EAAA,IAAI,CAAC,GAAA,EAAK;AACR,IAAA,MAAM,IAAI,MAAM,qFAAqF,CAAA;AAAA,EACvG;AAEA,EAAA,MAAM,IAAA,GAAsC;AAAA,IAC1C,MAAA;AAAA,IACA,IAAA;AAAA,IACA,GAAA;AAAA,IACA,QAAQ,iBAAA,CAAkB,MAAA,CAAO,MAAM,CAAA,IAAK,YAAA,CAAa,KAAK,eAAe;AAAA,GAC/E;AACA,EAAA,OAAO;AAAA,IACL,GAAG,IAAA;AAAA,IACH,YAAA,EAAc,wBAAA,CAAyB,oBAAA,CAAqB,IAAI,CAAC;AAAA,GACnE;AACF;AAEA,SAAS,aAAA,CACP,MACA,QAAA,EACkC;AAClC,EAAA,IAAI,CAAC,IAAA,IAAQ,CAAC,QAAA,EAAU,OAAO,MAAA;AAC/B,EAAA,OAAO;AAAA,IACL,GAAG,IAAA;AAAA,IACH,GAAG,QAAA;AAAA,IACH,SACE,IAAA,EAAM,OAAA,IAAW,QAAA,EAAU,OAAA,GACvB,EAAE,GAAI,IAAA,EAAM,OAAA,IAAW,IAAK,GAAI,QAAA,EAAU,OAAA,IAAW,IAAI,GACzD;AAAA,GACR;AACF;AAEA,eAAe,wBAAA,CACb,MACA,WAAA,EAC2C;AAC3C,EAAA,MAAM,UAAA,GAAa,KAAK,MAAA,CAAO,OAAA;AAC/B,EAAA,MAAM,OAAO,OAAO,UAAA,KAAe,UAAA,GAAa,MAAM,YAAW,GAAI,UAAA;AACrE,EAAA,OAAO,aAAA,CAAc,MAAM,WAAW,CAAA;AACxC;AAEA,SAAS,qBACP,IAAA,EACA;AACA,EAAA,MAAM,EAAE,MAAA,EAAQ,IAAA,EAAK,GAAI,IAAA;AACzB,EAAA,MAAM,EAAE,KAAK,QAAA,EAAU,GAAG,aAAY,GAAI,MAAA,CAAO,QAAQ,EAAC;AAC1D,EAAA,MAAM,EAAE,KAAK,WAAA,EAAa,YAAA,EAAc,GAAG,cAAA,EAAe,GAAI,MAAA,CAAO,OAAA,IAAW,EAAC;AAIjF,EAAA,OAAO;AAAA,IACL,OAAA,EAAS,KAAK,EAAA,IAAM,mBAAA;AAAA,IACpB,QAAQ,IAAA,CAAK,GAAA;AAAA,IACb,QAAQ,IAAA,CAAK,MAAA;AAAA,IACb,OAAA,EACE,OAAO,MAAA,CAAO,OAAA,KAAY,QAAA,GACtB,EAAE,IAAA,EAAM,MAAA,CAAO,OAAA,EAAQ,GACvB,MAAA,CAAO,OAAA;AAAA,IACb,SAAS,MAAA,CAAO,OAAA;AAAA,IAChB,SAAS,IAAA,CAAK,IAAA;AAAA,IACd,SAAS,IAAA,CAAK,IAAA;AAAA,IACd,WAAW,IAAA,CAAK,MAAA;AAAA,IAChB,YAAY,IAAA,CAAK,OAAA;AAAA,IACjB,KAAA,EAAO,OAAO,EAAA,EAAI,KAAA;AAAA,IAClB,OAAA,EAAS,OAAO,EAAA,EAAI,OAAA;AAAA,IACpB,IAAA,EAAM,WAAA;AAAA,IACN,QAAQ,MAAA,CAAO,MAAA;AAAA,IACf,QAAA,EAAU;AAAA,MACR,YAAY,MAAA,CAAO,UAAA;AAAA,MACnB,cAAc,MAAA,CAAO,YAAA;AAAA,MACrB,UAAU,MAAA,CAAO,QAAA;AAAA,MACjB,aAAa,MAAA,CAAO;AAAA,KACtB;AAAA,IACA,OAAA,EAAS;AAAA,MACP,GAAG,cAAA;AAAA,MACH,GAAI,YAAA,GAAe,EAAE,YAAA,KAAiB;AAAC;AACzC,GACF;AACF;AAEA,SAAS,YAAA,CAAa,MAA2B,OAAA,EAA8B;AAC7E,EAAA,IAAI,CAAC,IAAA,CAAK,OAAO,GAAG,MAAM,IAAI,yBAAyB,OAAO,CAAA;AAChE;AAEA,SAAS,0BAAA,CACP,OAAA,EACA,IAAA,EACA,IAAA,GAA+B,EAAC,EACvB;AACT,EAAA,OAAO,IAAI,KAAA,CAAM,MAAM,MAAA,EAAW;AAAA,IAChC,GAAA,CAAI,SAAS,QAAA,EAAU;AACrB,MAAA,OAAO,2BAA2B,OAAA,EAAS,IAAA,EAAM,CAAC,GAAG,IAAA,EAAM,QAAQ,CAAC,CAAA;AAAA,IACtE,CAAA;AAAA,IACA,KAAA,GAAQ;AACN,MAAA,YAAA,CAAa,MAAM,OAAO,CAAA;AAC1B,MAAA,MAAM,IAAI,SAAA,CAAU,CAAA,wBAAA,EAA2B,IAAA,CAAK,GAAA,CAAI,MAAM,CAAA,CAAE,IAAA,CAAK,GAAG,CAAC,CAAA,iBAAA,CAAmB,CAAA;AAAA,IAC9F;AAAA,GACD,CAAA;AACH;AAEA,SAAS,gBAAA,CACP,MACA,WAAA,EACuB;AACvB,EAAA,MAAM,QAAA,GACJ,wBAAA;AAAA,IAAyB,IAAA,CAAK,YAAA;AAAA,IAAc,MAC1C,wBAAA,CAAyB,IAAA,EAAM,WAAW;AAAA,GAC5C;AACF,EAAA,MAAM,SAAA,GAAY,MAAY,YAAA,CAAa,IAAA,CAAK,MAAM,IAAI,CAAA;AAE1D,EAAA,MAAM,EAAE,KAAK,WAAA,EAAa,GAAG,gBAAe,GAAI,IAAA,CAAK,MAAA,CAAO,OAAA,IAAW,EAAC;AAExE,EAAA,MAAM,aAAA,GAA+C,IAAA,CAAK,IAAA,CAAK,OAAA,GAC3D,mBAAA,CAAoB;AAAA,IAClB,OAAA,EAAS,KAAK,IAAA,CAAK,OAAA;AAAA,IACnB,QAAQ,IAAA,CAAK,GAAA;AAAA,IACb,QAAQ,IAAA,CAAK,MAAA;AAAA,IACb,OAAA,EAAS;AAAA,MACP,GAAI,IAAA,CAAK,MAAA,CAAO,OAAA,IAAW,EAAC;AAAA,MAC5B,GAAI,cAAA,CAAe,OAAA,IAAW;AAAC,KACjC;AAAA,IACA,GAAG;AAAA,GACJ,CAAA,GACD,0BAAA,CAA2B,SAAA,EAAW,KAAK,IAAI,CAAA;AAEnD,EAAA,MAAM,MAAA,GAAgC;AAAA,IACpC,EAAA,EAAK,KAAK,IAAA,CAAK,EAAA,GAAK,SAAS,EAAA,GAAK,0BAAA,CAA2B,IAAA,EAAM,IAAA,CAAK,IAAI,CAAA;AAAA,IAC5E,IAAA,EAAO,KAAK,IAAA,CAAK,IAAA,GAAO,SAAS,IAAA,GAAO,0BAAA,CAA2B,MAAA,EAAQ,IAAA,CAAK,IAAI,CAAA;AAAA,IACpF,IAAA,EAAO,KAAK,IAAA,CAAK,IAAA,GAAO,SAAS,IAAA,GAAO,0BAAA,CAA2B,MAAA,EAAQ,IAAA,CAAK,IAAI,CAAA;AAAA,IACpF,OAAA,EAAU,KAAK,IAAA,CAAK,OAAA,GAChB,SAAS,OAAA,GACT,0BAAA,CAA2B,SAAA,EAAW,IAAA,CAAK,IAAI,CAAA;AAAA,IACnD,OAAA,EAAS,aAAA;AAAA,IACT,IAAA,GAAO,IAAI,IAAA,KAAoB;AAC7B,MAAA,SAAA,EAAU;AACV,MAAA,OAAO,OAAA,CAAQ,KAAA,CAAM,QAAA,CAAS,IAAA,EAAM,UAAU,IAAI,CAAA;AAAA,IACpD,CAAA,CAAA;AAAA,IACA,GAAA,GAAM,IAAI,IAAA,KAAoB;AAC5B,MAAA,SAAA,EAAU;AACV,MAAA,OAAO,OAAA,CAAQ,KAAA,CAAM,QAAA,CAAS,GAAA,EAAK,UAAU,IAAI,CAAA;AAAA,IACnD,CAAA,CAAA;AAAA,IACA,KAAA,CAAqB,OAAe,OAAA,EAAoC;AACtE,MAAA,SAAA,EAAU;AACV,MAAA,OAAO,QAAA,CAAS,KAAA,CAAW,KAAA,EAAO,OAAO,CAAA;AAAA,IAC3C,CAAA;AAAA,IACA,QAAqB,OAAA,EAA+B;AAElD,MAAA,IAAI,CAAC,OAAA,CAAQ,GAAA,EAAK,IAAA,EAAK,EAAG;AACxB,QAAA,YAAA,CAAa,IAAA,CAAK,IAAA,EAAM,OAAA,CAAQ,OAAA,IAAW,IAAI,CAAA;AAAA,MACjD;AACA,MAAA,OAAO,QAAA,CAAS,QAAW,OAAO,CAAA;AAAA,IACpC,CAAA;AAAA,IACA,iBAAiB,OAAA,EAA0C;AACzD,MAAA,SAAA,EAAU;AACV,MAAA,OAAO,QAAA,CAAS,iBAAiB,OAAO,CAAA;AAAA,IAC1C,CAAA;AAAA,IACA,YAAY,OAAA,EAA+B;AACzC,MAAA,OAAO,gBAAA,CAAiB,IAAA,EAAM,aAAA,CAAc,WAAA,EAAa,OAAO,CAAC,CAAA;AAAA,IACnE;AAAA,GACF;AAEA,EAAA,OAAO,MAAA,CAAO,OAAO,MAAM,CAAA;AAC7B;AAEO,SAAS,aAEd,MAAA,EAA4D;AAC5D,EAAA,OAAO,gBAAA,CAAiB,WAAA,CAAY,MAAM,CAAC,CAAA;AAC7C;;;ACpQO,IAAM,OAAA,GAAU;AAAA,EACrB,MAAA,EAAQ,EAAE,IAAA,EAAM,QAAA,EAAS;AAAA,EACzB,SAAA,EAAW,EAAE,IAAA,EAAM,WAAA,EAAY;AAAA,EAC/B,UAAA,EAAY,EAAE,IAAA,EAAM,YAAA,EAAa;AAAA,EACjC,QAAA,EAAU,EAAE,IAAA,EAAM,UAAA;AACpB;;;AC3KO,SAAS,YAKd,KAAA,EAA4D;AAC5D,EAAA,OAAO,KAAA;AACT;AAKO,SAAS,aAEd,MAAA,EAAmC;AACnC,EAAA,OAAO,EAAE,MAAA,EAAO;AAClB;AAKO,SAAS,eAEd,OAAA,EAAwC;AACxC,EAAA,OAAO,EAAE,OAAA,EAAQ;AACnB;AAKO,SAAS,eAEd,SAAA,EAA8C;AAC9C,EAAA,OAAO,SAAA;AACT;;;ACiBA,SAAS,oBAAoB,IAAA,EAAmD;AAC9E,EAAA,IAAI,IAAA,KAAS,aAAa,OAAO,MAAA;AACjC,EAAA,IAAI,IAAA,KAAS,QAAQ,OAAO,IAAA;AAC5B,EAAA,OAAO,EAAA;AACT;AAEA,SAASlB,WAAS,KAAA,EAA2C;AAC3D,EAAA,OAAO,OAAA,CAAQ,KAAK,CAAA,IAAK,OAAO,UAAU,QAAA,IAAY,CAAC,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA;AAC5E;AAEA,SAAS,gBAAA,CAAiB,OAAoB,GAAA,EAAsB;AAClE,EAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,QAAA;AAC5B,EAAA,OAAO,QAAA,GAAW,GAAG,CAAA,KAAM,IAAA;AAC7B;AAKO,SAAS,mBAAA,CAId,KAAA,EACA,MAAA,EACA,OAAA,EACkC;AAClC,EAAA,MAAM,MAAA,GAAS,MAAA;AACf,EAAA,IAAI,CAACA,UAAAA,CAAS,MAAM,CAAA,EAAG;AACrB,IAAA,OAAO,EAAC;AAAA,EACV;AAEA,EAAA,MAAM,IAAA,GAAO,SAAS,WAAA,IAAgB,cAAA;AACtC,EAAA,MAAM,YAAA,GAAe,oBAAoB,IAAI,CAAA;AAC7C,EAAA,MAAM,SAA2B,EAAC;AAElC,EAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,MAAM,CAAA,EAAG;AACjD,IAAA,IAAI,KAAA,KAAU,IAAA,IAAQ,gBAAA,CAAiB,KAAA,EAAO,GAAG,CAAA,EAAG;AAClD,MAAA,MAAA,CAAO,GAAG,CAAA,GAAI,YAAA;AACd,MAAA;AAAA,IACF;AACA,IAAA,MAAA,CAAO,GAAG,CAAA,GAAI,KAAA;AAAA,EAChB;AAEA,EAAA,OAAO,MAAA;AACT;AAKO,SAAS,cAAA,CACd,KAAA,EACA,UAAA,EACA,OAAA,EAC2B;AAC3B,EAAA,MAAM,iBAAA,GAAoB,SAAS,iBAAA,IAAqB,IAAA;AACxD,EAAA,MAAM,cAAA,GAAiB,SAAS,cAAA,IAAkB,IAAA;AAClD,EAAA,MAAM,SAA2B,EAAC;AAElC,EAAA,KAAA,MAAW,CAAC,GAAA,EAAK,QAAQ,KAAK,MAAA,CAAO,OAAA,CAAQ,UAA8B,CAAA,EAAG;AAC5E,IAAA,IAAI,QAAA,KAAa,UAAa,cAAA,EAAgB;AAC5C,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,qBAAqB,QAAA,KAAa,EAAA,IAAM,gBAAA,CAAiB,KAAA,EAAO,GAAG,CAAA,EAAG;AACxE,MAAA,MAAA,CAAO,GAAG,CAAA,GAAI,IAAA;AACd,MAAA;AAAA,IACF;AAEA,IAAA,MAAA,CAAO,GAAG,CAAA,GAAI,QAAA;AAAA,EAChB;AAEA,EAAA,OAAO,MAAA;AACT;AAwBO,SAAS,uBAAmD,KAAA,EAAyC;AAC1G,EAAA,OAAO;AAAA,IACL,KAAA;AAAA,IACA,UAAA,CAAW,QAAQ,OAAA,EAAS;AAC1B,MAAA,OAAO,mBAAA,CAAoB,KAAA,EAAO,MAAA,EAAQ,OAAO,CAAA;AAAA,IACnD,CAAA;AAAA,IACA,QAAA,CAAS,QAAQ,OAAA,EAAS;AACxB,MAAA,OAAO,cAAA,CAAe,KAAA,EAAO,MAAA,EAAQ,OAAO,CAAA;AAAA,IAC9C,CAAA;AAAA,IACA,QAAA,CAAS,QAAQ,OAAA,EAAS;AACxB,MAAA,OAAO,cAAA,CAAe,KAAA,EAAO,MAAA,EAAQ,OAAO,CAAA;AAAA,IAC9C;AAAA,GACF;AACF;;;AC7KO,IAAM,aAAA,0BAAuB,sBAAsB,CAAA;AAqD1D,SAAS,oBAQP,MAAA,EAQqF;AACrF,EAAA,OAAO;AAAA,IACL,CAAC,aAAa,GAAG,MAAA;AAAA,IACjB,QAAA,GAAW;AACT,MAAA,OAAO,mBAAA,CAAoB;AAAA,QACzB,GAAG,MAAA;AAAA,QACH,QAAA,EAAU;AAAA,OACX,CAAA;AAAA,IACH,CAAA;AAAA,IACA,KAAqC,UAAA,EAA6B;AAChE,MAAA,OAAO,mBAAA,CAAoB;AAAA,QACzB,GAAG,MAAA;AAAA,QACH;AAAA,OACD,CAAA;AAAA,IACH,CAAA;AAAA,IACA,SAAA,GAAY;AACV,MAAA,OAAO,mBAAA,CAAoB;AAAA,QACzB,GAAG,MAAA;AAAA,QACH,UAAA,EAAY;AAAA,OACb,CAAA;AAAA,IACH,CAAA;AAAA,IACA,SAAA,GAAY;AACV,MAAA,OAAO,mBAAA,CAAoB;AAAA,QACzB,GAAG,MAAA;AAAA,QACH,WAAA,EAAa;AAAA,OACd,CAAA;AAAA,IACH;AAAA,GACF;AACF;AAEO,SAAS,gBAAgB,KAAA,EAA2C;AACzE,EAAA,OAAO,KAAA,KAAU,IAAA,IAAQ,OAAO,KAAA,KAAU,YAAY,aAAA,IAAiB,KAAA;AACzE;AAEO,SAAS,gBACd,MAAA,EAC+B;AAC/B,EAAA,OAAO,OAAO,aAAa,CAAA;AAC7B;AAEO,SAAS,MAAA,GAAgF;AAC9F,EAAA,OAAO,mBAAA,CAAoB;AAAA,IACzB,IAAA,EAAM,QAAA;AAAA,IACN,QAAA,EAAU,KAAA;AAAA,IACV,UAAA,EAAY,KAAA;AAAA,IACZ,WAAA,EAAa;AAAA,GACd,CAAA;AACH;AAEO,SAAS,MAAA,GAAgF;AAC9F,EAAA,OAAO,mBAAA,CAAoB;AAAA,IACzB,IAAA,EAAM,QAAA;AAAA,IACN,QAAA,EAAU,KAAA;AAAA,IACV,UAAA,EAAY,KAAA;AAAA,IACZ,WAAA,EAAa;AAAA,GACd,CAAA;AACH;AAEO,SAAS,OAAA,GAAmF;AACjG,EAAA,OAAO,mBAAA,CAAoB;AAAA,IACzB,IAAA,EAAM,SAAA;AAAA,IACN,QAAA,EAAU,KAAA;AAAA,IACV,UAAA,EAAY,KAAA;AAAA,IACZ,WAAA,EAAa;AAAA,GACd,CAAA;AACH;AAEO,SAAS,KACd,MAAA,EACqE;AACrE,EAAA,OAAO,mBAAA,CAAoB;AAAA,IACzB,IAAA,EAAM,MAAA;AAAA,IACN,QAAA,EAAU,KAAA;AAAA,IACV,UAAA,EAAY,KAAA;AAAA,IACZ,WAAA,EAAa,KAAA;AAAA,IACb,UAAA,EAAY;AAAA,GACb,CAAA;AACH;AAEO,SAAS,YACd,MAAA,EACqF;AACrF,EAAA,IAAI,MAAA,CAAO,WAAW,CAAA,EAAG;AACvB,IAAA,MAAM,IAAI,MAAM,2CAA2C,CAAA;AAAA,EAC7D;AAEA,EAAA,OAAO,mBAAA,CAAoB;AAAA,IACzB,IAAA,EAAM,aAAA;AAAA,IACN,QAAA,EAAU,KAAA;AAAA,IACV,UAAA,EAAY,KAAA;AAAA,IACZ,WAAA,EAAa,KAAA;AAAA,IACb,UAAA,EAAY;AAAA,GACb,CAAA;AACH;;;ACzJA,SAAS,iBAAiB,IAAA,EAAgC;AACxD,EAAA,OAAO,SAAS,QAAA,IAAY,IAAA,KAAS,QAAA,IAAY,IAAA,KAAS,aAAa,IAAA,KAAS,aAAA;AAClF;AAEA,SAAS,iBAAiB,MAAA,EAAsC;AAC9D,EAAA,MAAM,MAAA,GAAS,gBAAgB,MAAM,CAAA;AAErC,EAAA,QAAQ,OAAO,IAAA;AAAM,IACnB,KAAK,SAAA;AACH,MAAA,OAAOyB,MAAE,OAAA,EAAQ;AAAA,IACnB,KAAK,QAAA;AACH,MAAA,OAAOA,MAAE,MAAA,EAAO;AAAA,IAClB,KAAK,MAAA;AACH,MAAA,OAAQ,MAAA,CAAO,UAAA,IAAcA,KAAA,CAAE,OAAA,EAAQ;AAAA,IACzC,KAAK,aAAA;AACH,MAAA,IAAI,CAAC,MAAA,CAAO,UAAA,IAAc,MAAA,CAAO,UAAA,CAAW,WAAW,CAAA,EAAG;AACxD,QAAA,OAAOA,MAAE,MAAA,EAAO;AAAA,MAClB;AACA,MAAA,OAAOA,KAAA,CAAE,IAAA,CAAK,MAAA,CAAO,UAAmC,CAAA;AAAA,IAC1D,KAAK,QAAA;AAAA,IACL;AACE,MAAA,OAAOA,MAAE,MAAA,EAAO;AAAA;AAEtB;AAEA,SAAS,aAAA,CAAc,QAAoB,MAAA,EAAsC;AAC/E,EAAA,MAAM,MAAA,GAAS,gBAAgB,MAAM,CAAA;AACrC,EAAA,OAAO,MAAA,CAAO,QAAA,GAAW,MAAA,CAAO,QAAA,EAAS,GAAI,MAAA;AAC/C;AAEA,SAAS,mBAAA,CAAoB,QAAoB,MAAA,EAAsC;AACrF,EAAA,MAAM,MAAA,GAAS,gBAAgB,MAAM,CAAA;AACrC,EAAA,OAAO,OAAO,QAAA,IAAY,MAAA,CAAO,UAAA,GAAa,MAAA,CAAO,UAAS,GAAI,MAAA;AACpE;AAEA,SAAS,sBAAsB,MAAA,EAAsC;AACnE,EAAA,MAAM,MAAA,GAAS,gBAAgB,MAAM,CAAA;AACrC,EAAA,MAAM,IAAA,GAAO,iBAAiB,MAAM,CAAA;AAEpC,EAAA,IAAI,MAAA;AACJ,EAAA,IAAI,MAAA,CAAO,QAAA,IAAY,gBAAA,CAAiB,MAAA,CAAO,IAAI,CAAA,EAAG;AACpD,IAAA,MAAA,GAASA,KAAA,CACN,KAAA,CAAM,CAAC,IAAA,EAAMA,MAAE,OAAA,CAAQ,EAAE,CAAC,CAAC,EAC3B,SAAA,CAAU,CAAA,KAAA,KAAS,KAAA,KAAU,EAAA,GAAK,OAAO,KAAK,CAAA;AAAA,EACnD,CAAA,MAAO;AACL,IAAA,MAAA,GAAS,aAAA,CAAc,MAAM,MAAM,CAAA;AAAA,EACrC;AAEA,EAAA,IAAI,MAAA,CAAO,QAAA,IAAY,MAAA,CAAO,UAAA,EAAY;AACxC,IAAA,MAAA,GAAS,OAAO,QAAA,EAAS;AAAA,EAC3B;AAEA,EAAA,OAAO,MAAA;AACT;AAEO,SAAS,sBAAA,CACd,OACA,OAAA,EAC8C;AAC9C,EAAA,MAAM,WAAuC,EAAC;AAC9C,EAAA,MAAM,cAA0C,EAAC;AACjD,EAAA,MAAM,cAA0C,EAAC;AACjD,EAAA,MAAM,YAAwC,EAAC;AAE/C,EAAA,KAAA,MAAW,CAAC,UAAA,EAAY,MAAM,KAAK,MAAA,CAAO,OAAA,CAAQ,OAAO,CAAA,EAAG;AAC1D,IAAA,MAAM,MAAA,GAAS,gBAAgB,MAAM,CAAA;AACrC,IAAA,MAAM,IAAA,GAAO,iBAAiB,MAAM,CAAA;AAEpC,IAAA,QAAA,CAAS,UAAU,CAAA,GAAI,aAAA,CAAc,IAAA,EAAM,MAAM,CAAA;AAEjD,IAAA,IAAI,OAAO,WAAA,EAAa;AACtB,MAAA;AAAA,IACF;AAEA,IAAA,WAAA,CAAY,UAAU,CAAA,GAAI,mBAAA,CAAoB,cAAc,IAAA,EAAM,MAAM,GAAG,MAAM,CAAA;AACjF,IAAA,WAAA,CAAY,UAAU,CAAA,GAAI,aAAA,CAAc,IAAA,EAAM,MAAM,EAAE,QAAA,EAAS;AAC/D,IAAA,SAAA,CAAU,UAAU,CAAA,GAAI,qBAAA,CAAsB,MAAM,CAAA;AAAA,EACtD;AAEA,EAAA,MAAM,SAAA,GAAYA,KAAA,CAAE,MAAA,CAAO,QAAQ,CAAA;AACnC,EAAA,MAAM,YAAA,GAAeA,KAAA,CAAE,MAAA,CAAO,WAAW,CAAA;AACzC,EAAA,MAAM,YAAA,GAAeA,KAAA,CAAE,MAAA,CAAO,WAAW,CAAA;AACzC,EAAA,MAAM,UAAA,GAAaA,KAAA,CAChB,MAAA,CAAO,SAAS,CAAA,CAChB,UAAU,CAAA,KAAA,KAAS,cAAA,CAAe,KAAA,EAAO,KAAc,CAAW,CAAA;AAErE,EAAA,OAAO;AAAA,IACL,GAAA,EAAK,SAAA;AAAA,IACL,MAAA,EAAQ,YAAA;AAAA,IACR,MAAA,EAAQ,YAAA;AAAA,IACR,IAAA,EAAM;AAAA,GACR;AACF;;;ACiEA,SAAS,mBAAmB,OAAA,EAAiD;AAC3E,EAAA,KAAA,MAAW,CAAC,UAAA,EAAY,MAAM,KAAK,MAAA,CAAO,OAAA,CAAQ,OAAO,CAAA,EAAG;AAC1D,IAAA,IAAI,CAAC,eAAA,CAAgB,MAAM,CAAA,EAAG;AAC5B,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,+BAAA,EAAkC,UAAU,CAAA,CAAA,CAAG,CAAA;AAAA,IACjE;AAAA,EACF;AACF;AAEA,SAAS,yBAAyB,UAAA,EAA4B;AAC5D,EAAA,MAAM,UAAA,GAAa,WAAW,IAAA,EAAK;AACnC,EAAA,IAAI,CAAC,UAAA,EAAY;AACf,IAAA,MAAM,IAAI,MAAM,8CAA8C,CAAA;AAAA,EAChE;AACA,EAAA,OAAO,UAAA;AACT;AAEA,SAAS,yBAAyB,UAAA,EAA4B;AAC5D,EAAA,MAAM,UAAA,GAAa,WAAW,IAAA,EAAK;AACnC,EAAA,IAAI,CAAC,UAAA,EAAY;AACf,IAAA,MAAM,IAAI,MAAM,iDAAiD,CAAA;AAAA,EACnE;AACA,EAAA,IAAI,UAAA,CAAW,QAAA,CAAS,GAAG,CAAA,EAAG;AAC5B,IAAA,MAAM,IAAI,KAAA;AAAA,MACR;AAAA,KACF;AAAA,EACF;AACA,EAAA,OAAO,UAAA;AACT;AAEA,SAAS,kBAAA,CAAmB,WAAA,EAAqB,UAAA,EAAqB,kBAAA,EAIpE;AACA,EAAA,MAAM,YAAA,GAAA,CAAgB,UAAA,IAAc,WAAA,EAAa,IAAA,EAAK;AACtD,EAAA,IAAI,CAAC,YAAA,EAAc;AACjB,IAAA,MAAM,IAAI,MAAM,mCAAmC,CAAA;AAAA,EACrD;AAEA,EAAA,MAAM,QAAA,GAAW,YAAA,CAAa,OAAA,CAAQ,GAAG,CAAA;AACzC,EAAA,MAAM,OAAA,GAAU,YAAA,CAAa,WAAA,CAAY,GAAG,CAAA;AAC5C,EAAA,IAAI,QAAA,GAAW,CAAA,IAAK,QAAA,KAAa,OAAA,EAAS;AACxC,IAAA,MAAM,eAAe,YAAA,CAAa,KAAA,CAAM,CAAA,EAAG,QAAQ,EAAE,IAAA,EAAK;AAC1D,IAAA,MAAM,cAAc,YAAA,CAAa,KAAA,CAAM,QAAA,GAAW,CAAC,EAAE,IAAA,EAAK;AAC1D,IAAA,IAAI,CAAC,YAAA,IAAgB,CAAC,WAAA,EAAa;AACjC,MAAA,MAAM,IAAI,MAAM,mEAAmE,CAAA;AAAA,IACrF;AACA,IAAA,IAAI,kBAAA,IAAsB,uBAAuB,YAAA,EAAc;AAC7D,MAAA,MAAM,IAAI,KAAA;AAAA,QACR,CAAA,cAAA,EAAiB,kBAAkB,CAAA,+BAAA,EAAkC,YAAY,CAAA,CAAA;AAAA,OACnF;AAAA,IACF;AAEA,IAAA,OAAO;AAAA,MACL,QAAQ,kBAAA,IAAsB,YAAA;AAAA,MAC9B,KAAA,EAAO,WAAA;AAAA,MACP,aAAA,EAAe,CAAA,EAAG,kBAAA,IAAsB,YAAY,IAAI,WAAW,CAAA;AAAA,KACrE;AAAA,EACF;AAEA,EAAA,IAAI,kBAAA,EAAoB;AACtB,IAAA,OAAO;AAAA,MACL,MAAA,EAAQ,kBAAA;AAAA,MACR,KAAA,EAAO,YAAA;AAAA,MACP,aAAA,EAAe,CAAA,EAAG,kBAAkB,CAAA,CAAA,EAAI,YAAY,CAAA;AAAA,KACtD;AAAA,EACF;AAEA,EAAA,OAAO;AAAA,IACL,KAAA,EAAO,YAAA;AAAA,IACP,aAAA,EAAe;AAAA,GACjB;AACF;AAEA,SAAS,iBAAiB,MAAA,EAA+C;AACvE,EAAA,MAAM,MAAA,GAAS,gBAAgB,MAAM,CAAA;AACrC,EAAA,OAAO;AAAA,IACL,MAAM,MAAA,CAAO,IAAA;AAAA,IACb,YAAY,MAAA,CAAO,UAAA;AAAA,IACnB,UAAU,MAAA,CAAO,QAAA;AAAA,IACjB,YAAY,MAAA,CAAO,UAAA;AAAA,IACnB,aAAa,MAAA,CAAO,WAAA;AAAA,IACpB,YAAY,MAAA,CAAO;AAAA,GACrB;AACF;AAEA,SAAS,iBAAiB,OAAA,EAAoE;AAC5F,EAAA,OAAO,MAAA,CAAO,WAAA;AAAA,IACZ,OAAO,OAAA,CAAQ,OAAO,CAAA,CAAE,GAAA,CAAI,CAAC,CAAC,UAAA,EAAY,MAAM,CAAA,KAAM,CAAC,UAAA,EAAY,eAAA,CAAgB,MAAM,CAAA,CAAE,QAAQ,CAAC;AAAA,GACtG;AACF;AAEA,SAAS,uBAAuB,OAAA,EAAgF;AAC9G,EAAA,OAAO,MAAA,CAAO,WAAA;AAAA,IACZ,MAAA,CAAO,OAAA,CAAQ,OAAO,CAAA,CAAE,IAAI,CAAC,CAAC,UAAA,EAAY,MAAM,MAAM,CAAC,UAAA,EAAY,gBAAA,CAAiB,MAAM,CAAC,CAAC;AAAA,GAC9F;AACF;AAEA,SAAS,aAAA,CAMP,IAAA,EACA,UAAA,EACA,UAAA,EACA,SACA,UAAA,EAC2D;AAC3D,EAAA,MAAM,MAAA,GAAS,kBAAA,CAAmB,IAAA,EAAM,UAAA,EAAY,UAAU,CAAA;AAC9D,EAAA,MAAM,QAAQ,WAAA,CAIZ;AAAA,IACA,IAAA,EAAM;AAAA,MACJ,QAAQ,MAAA,CAAO,MAAA;AAAA,MACf,OAAO,MAAA,CAAO,KAAA;AAAA,MACd,UAAA,EAAY,CAAC,GAAG,UAAU,CAAA;AAAA,MAC1B,QAAA,EAAU,iBAAiB,OAAO,CAAA;AAAA,MAClC,OAAA,EAAS,uBAAuB,OAAO;AAAA;AACzC,GACD,CAAA;AAED,EAAA,MAAM,OAAA,GAAU,sBAAA,CAId,KAAA,EAAsB,OAAO,CAAA;AAE/B,EAAA,OAAO,MAAA,CAAO,OAAO,KAAA,EAAO;AAAA,IAC1B,IAAA,EAAM,OAAA;AAAA,IACN,IAAA;AAAA,IACA,UAAA;AAAA,IACA,YAAY,MAAA,CAAO,MAAA;AAAA,IACnB,WAAW,MAAA,CAAO,KAAA;AAAA,IAClB,eAAe,MAAA,CAAO,aAAA;AAAA,IACtB,OAAA;AAAA,IACA;AAAA,GACD,CAAA;AACH;AAEA,SAAS,oBAAA,CAMP,IAAA,EACA,UAAA,EACA,UAAA,EACA,OAAA,EACsE;AACtE,EAAA,kBAAA,CAAmB,OAAO,CAAA;AAE1B,EAAA,OAAO;AAAA,IACL,IAAA;AAAA,IACA,UAAA;AAAA,IACA,UAAA;AAAA,IACA,OAAA;AAAA,IACA,KAAqC,SAAA,EAA4B;AAC/D,MAAA,MAAM,mBAAA,GAAsB,yBAAyB,SAAS,CAAA;AAC9D,MAAA,kBAAA,CAAmB,IAAA,EAAM,qBAAqB,UAAU,CAAA;AACxD,MAAA,OAAO,oBAAA,CAAqB,IAAA,EAAM,mBAAA,EAAwC,UAAA,EAAY,OAAO,CAAA;AAAA,IAC/F,CAAA;AAAA,IACA,OAAuC,cAAA,EAAiC;AACtE,MAAA,MAAM,oBAAA,GAAuB,yBAAyB,cAAc,CAAA;AACpE,MAAA,kBAAA,CAAmB,IAAA,EAAM,YAAY,oBAAoB,CAAA;AACzD,MAAA,OAAO,oBAAA,CAAqB,IAAA,EAAM,UAAA,EAAY,oBAAA,EAAyC,OAAO,CAAA;AAAA,IAChG,CAAA;AAAA,IACA,iBAAA,GAAoB;AAClB,MAAA,OAAO,cAAc,IAAA,EAAM,UAAA,EAAY,UAAA,EAAY,OAAA,EAAS,EAAE,CAAA;AAAA,IAChE,CAAA;AAAA,IACA,cAAc,IAAA,EAA8C;AAC1D,MAAA,OAAO,aAAA,CAAc,IAAA,EAAM,UAAA,EAAY,UAAA,EAAY,SAAS,IAAI,CAAA;AAAA,IAClE;AAAA,GACF;AACF;AAEA,SAASC,mBAAAA,CAKP,IAAA,EACA,UAAA,EACA,UAAA,EACqD;AACrD,EAAA,OAAO;AAAA,IACL,IAAA;AAAA,IACA,UAAA;AAAA,IACA,UAAA;AAAA,IACA,KAAqC,SAAA,EAA4B;AAC/D,MAAA,MAAM,mBAAA,GAAsB,yBAAyB,SAAS,CAAA;AAC9D,MAAA,kBAAA,CAAmB,IAAA,EAAM,qBAAqB,UAAU,CAAA;AACxD,MAAA,OAAOA,mBAAAA,CAAmB,IAAA,EAAM,mBAAA,EAAwC,UAAU,CAAA;AAAA,IACpF,CAAA;AAAA,IACA,OAAuC,cAAA,EAAiC;AACtE,MAAA,MAAM,oBAAA,GAAuB,yBAAyB,cAAc,CAAA;AACpE,MAAA,kBAAA,CAAmB,IAAA,EAAM,YAAY,oBAAoB,CAAA;AACzD,MAAA,OAAOA,mBAAAA,CAAmB,IAAA,EAAM,UAAA,EAAY,oBAAuC,CAAA;AAAA,IACrF,CAAA;AAAA,IACA,QAA2D,OAAA,EAAmB;AAC5E,MAAA,OAAO,oBAAA,CAAqB,IAAA,EAAM,UAAA,EAAY,UAAA,EAAY,OAAO,CAAA;AAAA,IACnE;AAAA,GACF;AACF;AAEO,SAAS,MAA4B,IAAA,EAAmD;AAC7F,EAAA,IAAI,CAAC,IAAA,CAAK,IAAA,EAAK,EAAG;AAChB,IAAA,MAAM,IAAI,MAAM,mCAAmC,CAAA;AAAA,EACrD;AAEA,EAAA,OAAOA,mBAAAA,CAAmB,IAAA,EAAM,MAAA,EAAW,MAAS,CAAA;AACtD;;;AC9UO,IAAM,oBAAA,GAAuB;AAAA,EAClC,OAAA,EAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAAA,CAAA;AAAA,EAwBT,KAAA,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAAA,CAAA;AAAA,EAQP,WAAA,EAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAAA,CAAA;AAAA,EAeb,WAAA,EAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAAA;AAqCf,CAAA;AAEA,SAAS,QAAA,CAAS,QAAgB7B,MAAAA,EAAuB;AACvD,EAAA,OAAO,CAAA,EAAG,MAAM,CAAA,CAAA,EAAIA,MAAK,CAAA,CAAA;AAC3B;AAEA,SAAS,eAAe,KAAA,EAAyB;AAC/C,EAAA,MAAM,IAAA,GAAO,KAAA,CACV,IAAA,CAAK,GAAG,CAAA,CACR,OAAA,CAAQ,iBAAA,EAAmB,GAAG,CAAA,CAC9B,OAAA,CAAQ,UAAA,EAAY,EAAE,CAAA;AACzB,EAAA,OAAO,IAAA,CAAK,MAAA,GAAS,CAAA,GAAI,IAAA,GAAO,UAAA;AAClC;AAEA,SAAS,WAAW,IAAA,EAA+C;AACjE,EAAA,QAAQ,IAAA;AAAM,IACZ,KAAK,GAAA;AACH,MAAA,OAAO,MAAA;AAAA,IACT,KAAK,GAAA;AACH,MAAA,OAAO,QAAA;AAAA,IACT,KAAK,GAAA;AACH,MAAA,OAAO,OAAA;AAAA,IACT,KAAK,GAAA;AACH,MAAA,OAAO,YAAA;AAAA,IACT,KAAK,GAAA;AACH,MAAA,OAAO,WAAA;AAAA,IACT;AACE,MAAA,OAAO,QAAA;AAAA;AAEb;AAEA,SAAS,iBAAiB,KAAA,EAAuB;AAC/C,EAAA,OAAO,KAAA,CAAM,OAAA,CAAQ,IAAA,EAAM,IAAI,CAAA;AACjC;AAEA,SAAS,0BAA0B,IAAA,EAAwB;AACzD,EAAA,MAAM,OAAO,IAAA,CAAK,KAAA,CAAM,CAAA,EAAG,EAAE,EAAE,IAAA,EAAK;AACpC,EAAA,IAAI,CAAC,IAAA,EAAM,OAAO,EAAC;AAEnB,EAAA,MAAM,SAAmB,EAAC;AAC1B,EAAA,IAAI,OAAA,GAAU,EAAA;AACd,EAAA,IAAI,QAAA,GAAW,KAAA;AACf,EAAA,IAAI,OAAA,GAAU,KAAA;AAEd,EAAA,KAAA,MAAW,QAAQ,IAAA,EAAM;AACvB,IAAA,IAAI,OAAA,EAAS;AACX,MAAA,OAAA,IAAW,IAAA;AACX,MAAA,OAAA,GAAU,KAAA;AACV,MAAA;AAAA,IACF;AACA,IAAA,IAAI,SAAS,IAAA,EAAM;AACjB,MAAA,OAAA,GAAU,IAAA;AACV,MAAA;AAAA,IACF;AACA,IAAA,IAAI,SAAS,GAAA,EAAK;AAChB,MAAA,QAAA,GAAW,CAAC,QAAA;AACZ,MAAA;AAAA,IACF;AACA,IAAA,IAAI,IAAA,KAAS,GAAA,IAAO,CAAC,QAAA,EAAU;AAC7B,MAAA,MAAA,CAAO,KAAK,OAAO,CAAA;AACnB,MAAA,OAAA,GAAU,EAAA;AACV,MAAA;AAAA,IACF;AACA,IAAA,OAAA,IAAW,IAAA;AAAA,EACb;AAEA,EAAA,MAAA,CAAO,KAAK,OAAO,CAAA;AACnB,EAAA,OAAO,MAAA,CAAO,GAAA,CAAI,CAAA,KAAA,KAAS,KAAA,CAAM,IAAA,EAAM,CAAA,CAAE,MAAA,CAAO,CAAA,KAAA,KAAS,KAAA,CAAM,MAAA,GAAS,CAAC,CAAA;AAC3E;AAEA,SAAS,kBAAkB,KAAA,EAA0B;AACnD,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACxB,IAAA,OAAO,KAAA,CACJ,IAAI,CAAA,IAAA,KAAS,OAAO,SAAS,QAAA,GAAW,IAAA,GAAO,OAAO,IAAI,CAAE,EAC5D,GAAA,CAAI,CAAA,IAAA,KAAQ,KAAK,IAAA,EAAM,EACvB,MAAA,CAAO,CAAA,IAAA,KAAQ,IAAA,CAAK,MAAA,GAAS,CAAC,CAAA;AAAA,EACnC;AAEA,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,IAAA,MAAM,OAAA,GAAU,MAAM,IAAA,EAAK;AAC3B,IAAA,IAAI,CAAC,OAAA,EAAS,OAAO,EAAC;AAEtB,IAAA,IAAI,QAAQ,UAAA,CAAW,GAAG,KAAK,OAAA,CAAQ,QAAA,CAAS,GAAG,CAAA,EAAG;AACpD,MAAA,IAAI;AACF,QAAA,MAAM,MAAA,GAAS,IAAA,CAAK,KAAA,CAAM,OAAO,CAAA;AACjC,QAAA,OAAO,kBAAkB,MAAM,CAAA;AAAA,MACjC,CAAA,CAAA,MAAQ;AAAA,MAER;AAAA,IACF;AAEA,IAAA,IAAI,QAAQ,UAAA,CAAW,GAAG,KAAK,OAAA,CAAQ,QAAA,CAAS,GAAG,CAAA,EAAG;AACpD,MAAA,OAAO,0BAA0B,OAAO,CAAA;AAAA,IAC1C;AAEA,IAAA,OAAO,OAAA,CACJ,KAAA,CAAM,GAAG,CAAA,CACT,IAAI,CAAA,IAAA,KAAQ,IAAA,CAAK,IAAA,EAAM,CAAA,CACvB,MAAA,CAAO,CAAA,IAAA,KAAQ,IAAA,CAAK,SAAS,CAAC,CAAA;AAAA,EACnC;AAEA,EAAA,OAAO,EAAC;AACV;AAEO,SAAS,gCAAgC,OAAA,EAAuC;AACrF,EAAA,MAAM,aAAuB,EAAC;AAC9B,EAAA,MAAM,IAAA,uBAAW,GAAA,EAAY;AAE7B,EAAA,KAAA,MAAW,KAAA,IAAS,OAAA,IAAW,EAAC,EAAG;AACjC,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,EAAK;AAC1B,IAAA,IAAI,CAAC,MAAA,IAAU,IAAA,CAAK,GAAA,CAAI,MAAM,CAAA,EAAG;AAC/B,MAAA;AAAA,IACF;AACA,IAAA,IAAA,CAAK,IAAI,MAAM,CAAA;AACf,IAAA,UAAA,CAAW,KAAK,MAAM,CAAA;AAAA,EACxB;AAEA,EAAA,OAAO,UAAA,CAAW,MAAA,GAAS,CAAA,GAAI,UAAA,GAAa,CAAC,QAAQ,CAAA;AACvD;AAEO,SAAS,wBAAwB,OAAA,EAAoC;AAC1E,EAAA,MAAM,UAAA,GAAa,gCAAgC,OAAO,CAAA;AAC1D,EAAA,MAAM,QAAA,GAAW,UAAA,CAAW,GAAA,CAAI,CAAA,MAAA,KAAU,CAAA,CAAA,EAAI,gBAAA,CAAiB,MAAM,CAAC,CAAA,CAAA,CAAG,CAAA,CAAE,IAAA,CAAK,IAAI,CAAA;AACpF,EAAA,OAAO,SAAS,QAAQ,CAAA,CAAA,CAAA;AAC1B;AAEA,SAAS,mBAAA,CAAoB,KAAa,OAAA,EAAoC;AAC5E,EAAA,MAAM,WAAA,GAAc,CAAA,EAAG,uBAAA,CAAwB,OAAO,CAAC,CAAA,QAAA,CAAA;AACvD,EAAA,OAAO,GAAA,CAAI,OAAA,CAAQ,gBAAA,EAAkB,WAAW,CAAA;AAClD;AAEO,SAAS,2BAA2B,OAAA,EAKzC;AACA,EAAA,OAAO;AAAA,IACL,OAAA,EAAS,mBAAA,CAAoB,oBAAA,CAAqB,OAAA,EAAS,OAAO,CAAA;AAAA,IAClE,OAAO,oBAAA,CAAqB,KAAA;AAAA,IAC5B,WAAA,EAAa,mBAAA,CAAoB,oBAAA,CAAqB,WAAA,EAAa,OAAO,CAAA;AAAA,IAC1E,WAAA,EAAa,mBAAA,CAAoB,oBAAA,CAAqB,WAAA,EAAa,OAAO;AAAA,GAC5E;AACF;AAEO,IAAM,mCAAN,MAAuC;AAAA,EAC3B,UAA+C,EAAC;AAAA,EAEjE,aAAA,CAAc,YAA8B,OAAA,EAAgC;AAC1E,IAAA,KAAA,MAAW,OAAO,UAAA,EAAY;AAC5B,MAAA,MAAMA,SAAQ,IAAA,CAAK,WAAA,CAAY,GAAA,CAAI,WAAA,EAAa,IAAI,UAAU,CAAA;AAC9D,MAAAA,MAAAA,CAAM,OAAA,CAAQ,GAAA,CAAI,WAAW,CAAA,GAAI;AAAA,QAC/B,MAAM,GAAA,CAAI,WAAA;AAAA,QACV,UAAU,GAAA,CAAI,SAAA;AAAA,QACd,SAAS,GAAA,CAAI,QAAA;AAAA,QACb,QAAA,EAAU,UAAA,CAAW,GAAA,CAAI,cAAc,CAAA;AAAA,QACvC,YAAY,GAAA,CAAI,WAAA;AAAA,QAChB,YAAA,EAAc,KAAA;AAAA,QACd,YAAY,GAAA,CAAI,WAAA;AAAA,QAChB,aAAa,GAAA,CAAI,YAAA;AAAA,QACjB,eAAA,EAAiB,IAAI,gBAAA,IAAoB,CAAA;AAAA,QACzC,UAAA,EAAY,OAAA,CAAQ,GAAA,CAAI,GAAA,CAAI,QAAQ;AAAA,OACtC;AAAA,IACF;AAAA,EACF;AAAA,EAEA,kBAAkB,cAAA,EAAsC;AACtD,IAAA,KAAA,MAAW,OAAO,cAAA,EAAgB;AAChC,MAAA,MAAMA,SAAQ,IAAA,CAAK,WAAA,CAAY,GAAA,CAAI,WAAA,EAAa,IAAI,UAAU,CAAA;AAC9D,MAAA,MAAM,iBAAA,GAAoB,iBAAA,CAAkB,GAAA,CAAI,OAAO,CAAA;AACvD,MAAA,GAAA,CAAI,OAAA,GAAU,iBAAA;AACd,MAAAA,OAAM,UAAA,GAAa,iBAAA;AACnB,MAAA,KAAA,MAAW,cAAc,iBAAA,EAAmB;AAC1C,QAAA,MAAM,MAAA,GAASA,MAAAA,CAAM,OAAA,CAAQ,UAAU,CAAA;AACvC,QAAA,IAAI,MAAA,EAAQ;AACV,UAAA,MAAA,CAAO,YAAA,GAAe,IAAA;AAAA,QACxB;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EAEA,kBAAkB,cAAA,EAAsC;AACtD,IAAA,KAAA,MAAW,OAAO,cAAA,EAAgB;AAChC,MAAA,MAAM,cAAc,IAAA,CAAK,WAAA,CAAY,GAAA,CAAI,aAAA,EAAe,IAAI,YAAY,CAAA;AACxE,MAAA,MAAM,cAAc,IAAA,CAAK,WAAA,CAAY,GAAA,CAAI,aAAA,EAAe,IAAI,YAAY,CAAA;AACxE,MAAA,MAAM,aAAA,GAAgB,iBAAA,CAAkB,GAAA,CAAI,cAAc,CAAA;AAC1D,MAAA,MAAM,aAAA,GAAgB,iBAAA,CAAkB,GAAA,CAAI,cAAc,CAAA;AAC1D,MAAA,GAAA,CAAI,cAAA,GAAiB,aAAA;AACrB,MAAA,GAAA,CAAI,cAAA,GAAiB,aAAA;AAErB,MAAA,MAAM,kBAAA,GAAwC,GAAA,CAAI,gBAAA,GAAmB,YAAA,GAAe,aAAA;AACpF,MAAA,IAAA,CAAK,eAAe,WAAA,EAAa,WAAA,CAAY,IAAI,eAAA,EAAiB,GAAA,CAAI,YAAY,CAAA,EAAG;AAAA,QACnF,MAAM,GAAA,CAAI,eAAA;AAAA,QACV,IAAA,EAAM,kBAAA;AAAA,QACN,aAAA;AAAA,QACA,cAAc,GAAA,CAAI,aAAA;AAAA,QAClB,aAAa,GAAA,CAAI,YAAA;AAAA,QACjB;AAAA,OACD,CAAA;AAED,MAAA,MAAM,kBAAA,GAAwC,GAAA,CAAI,gBAAA,GAAmB,YAAA,GAAe,aAAA;AACpF,MAAA,IAAA,CAAK,cAAA,CAAe,WAAA,EAAa,WAAA,CAAY,GAAA,CAAI,YAAY,CAAA,EAAG;AAAA,QAC9D,IAAA,EAAM,WAAA,CAAY,GAAA,CAAI,YAAA,EAAc,IAAI,eAAe,CAAA;AAAA,QACvD,IAAA,EAAM,kBAAA;AAAA,QACN,aAAA,EAAe,aAAA;AAAA,QACf,cAAc,GAAA,CAAI,aAAA;AAAA,QAClB,aAAa,GAAA,CAAI,YAAA;AAAA,QACjB,aAAA,EAAe;AAAA,OAChB,CAAA;AAAA,IACH;AAAA,EACF;AAAA,EAEA,kBAAkB,cAAA,EAAsC;AACtD,IAAA,MAAM,aAAA,uBAAoB,GAAA,EAA6B;AACvD,IAAA,KAAA,MAAW,MAAM,cAAA,EAAgB;AAC/B,MAAA,MAAM,GAAA,GAAM,QAAA,CAAS,EAAA,CAAG,aAAA,EAAe,GAAG,YAAY,CAAA;AACtD,MAAA,MAAM,OAAA,GAAU,aAAA,CAAc,GAAA,CAAI,GAAG,CAAA,IAAK;AAAA,QACxC,QAAQ,EAAA,CAAG,aAAA;AAAA,QACX,OAAO,EAAA,CAAG,YAAA;AAAA,QACV,aAAa;AAAC,OAChB;AACA,MAAA,OAAA,CAAQ,WAAA,CAAY,KAAK,EAAE,CAAA;AAC3B,MAAA,aAAA,CAAc,GAAA,CAAI,KAAK,OAAO,CAAA;AAAA,IAChC;AAEA,IAAA,KAAA,MAAW,SAAA,IAAa,aAAA,CAAc,MAAA,EAAO,EAAG;AAC9C,MAAA,MAAM,WAAA,GAAc,KAAK,OAAA,CAAQ,SAAA,CAAU,MAAM,CAAA,EAAG,MAAA,CAAO,UAAU,KAAK,CAAA;AAC1E,MAAA,IAAI,CAAC,WAAA,EAAa;AAElB,MAAA,MAAM,aAAa,WAAA,CAAY,UAAA;AAC/B,MAAA,IAAI,UAAU,WAAA,CAAY,MAAA,KAAW,CAAA,IAAK,UAAA,CAAW,WAAW,CAAA,EAAG;AAEnE,MAAA,MAAM,yBAAyB,KAAA,CAAM,IAAA;AAAA,QACnC,IAAI,IAAI,SAAA,CAAU,WAAA,CAAY,QAAQ,CAAA,EAAA,KAAM,EAAA,CAAG,cAAc,CAAC;AAAA,OAChE;AACA,MAAA,IACE,sBAAA,CAAuB,MAAA,KAAW,UAAA,CAAW,MAAA,IAC7C,CAAC,UAAA,CAAW,KAAA,CAAM,CAAA,MAAA,KAAU,sBAAA,CAAuB,QAAA,CAAS,MAAM,CAAC,CAAA,EACnE;AACA,QAAA;AAAA,MACF;AAEA,MAAA,MAAM,CAAC,KAAA,EAAO,MAAM,CAAA,GAAI,SAAA,CAAU,WAAA;AAClC,MAAA,MAAM,WAAA,GAAc,KAAK,OAAA,CAAQ,KAAA,CAAM,aAAa,CAAA,EAAG,MAAA,CAAO,MAAM,YAAY,CAAA;AAChF,MAAA,MAAM,YAAA,GAAe,KAAK,OAAA,CAAQ,MAAA,CAAO,aAAa,CAAA,EAAG,MAAA,CAAO,OAAO,YAAY,CAAA;AACnF,MAAA,IAAI,CAAC,WAAA,IAAe,CAAC,YAAA,EAAc;AACjC,QAAA;AAAA,MACF;AAEA,MAAA,IAAA,CAAK,cAAA,CAAe,WAAA,EAAa,WAAA,CAAY,MAAA,CAAO,YAAY,CAAA,EAAG;AAAA,QACjE,MAAM,WAAA,CAAY,SAAA,CAAU,OAAO,KAAA,CAAM,eAAA,EAAiB,OAAO,eAAe,CAAA;AAAA,QAChF,IAAA,EAAM,cAAA;AAAA,QACN,eAAe,KAAA,CAAM,cAAA;AAAA,QACrB,cAAc,MAAA,CAAO,aAAA;AAAA,QACrB,aAAa,MAAA,CAAO,YAAA;AAAA,QACpB,eAAe,MAAA,CAAO,cAAA;AAAA,QACtB,OAAA,EAAS;AAAA,UACP,QAAQ,SAAA,CAAU,MAAA;AAAA,UAClB,OAAO,SAAA,CAAU,KAAA;AAAA,UACjB,eAAe,KAAA,CAAM,cAAA;AAAA,UACrB,eAAe,MAAA,CAAO;AAAA;AACxB,OACD,CAAA;AAED,MAAA,IAAA,CAAK,cAAA,CAAe,YAAA,EAAc,WAAA,CAAY,KAAA,CAAM,YAAY,CAAA,EAAG;AAAA,QACjE,MAAM,WAAA,CAAY,SAAA,CAAU,OAAO,MAAA,CAAO,eAAA,EAAiB,MAAM,eAAe,CAAA;AAAA,QAChF,IAAA,EAAM,cAAA;AAAA,QACN,eAAe,MAAA,CAAO,cAAA;AAAA,QACtB,cAAc,KAAA,CAAM,aAAA;AAAA,QACpB,aAAa,KAAA,CAAM,YAAA;AAAA,QACnB,eAAe,KAAA,CAAM,cAAA;AAAA,QACrB,OAAA,EAAS;AAAA,UACP,QAAQ,SAAA,CAAU,MAAA;AAAA,UAClB,OAAO,SAAA,CAAU,KAAA;AAAA,UACjB,eAAe,MAAA,CAAO,cAAA;AAAA,UACtB,eAAe,KAAA,CAAM;AAAA;AACvB,OACD,CAAA;AAAA,IACH;AAAA,EACF;AAAA,EAEA,SAAA,GAAiD;AAC/C,IAAA,OAAO,IAAA,CAAK,OAAA;AAAA,EACd;AAAA,EAEQ,WAAA,CAAY,YAAoB,SAAA,EAAuC;AAC7E,IAAA,IAAI,CAAC,IAAA,CAAK,OAAA,CAAQ,UAAU,CAAA,EAAG;AAC7B,MAAA,IAAA,CAAK,OAAA,CAAQ,UAAU,CAAA,GAAI;AAAA,QACzB,IAAA,EAAM,UAAA;AAAA,QACN,QAAQ;AAAC,OACX;AAAA,IACF;AAEA,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,OAAA,CAAQ,UAAU,CAAA;AACtC,IAAA,IAAI,CAAC,MAAA,CAAO,MAAA,CAAO,SAAS,CAAA,EAAG;AAC7B,MAAA,MAAA,CAAO,MAAA,CAAO,SAAS,CAAA,GAAI;AAAA,QACzB,MAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAM,SAAA;AAAA,QACN,SAAS,EAAC;AAAA,QACV,YAAY,EAAC;AAAA,QACb,WAAW;AAAC,OACd;AAAA,IACF;AAEA,IAAA,OAAO,MAAA,CAAO,OAAO,SAAS,CAAA;AAAA,EAChC;AAAA,EAEQ,cAAA,CACNA,MAAAA,EACA,OAAA,EACA,QAAA,EACA;AACA,IAAA,IAAI,GAAA,GAAM,OAAA;AACV,IAAA,IAAI,MAAA,GAAS,CAAA;AACb,IAAA,OAAOA,MAAAA,CAAM,SAAA,CAAU,GAAG,CAAA,EAAG;AAC3B,MAAA,GAAA,GAAM,CAAA,EAAG,OAAO,CAAA,CAAA,EAAI,MAAM,CAAA,CAAA;AAC1B,MAAA,MAAA,IAAU,CAAA;AAAA,IACZ;AACA,IAAAA,MAAAA,CAAM,SAAA,CAAU,GAAG,CAAA,GAAI,QAAA;AAAA,EACzB;AACF,CAAA;;;AC5aA,IAAI,wBAAA;AAEJ,eAAe,qBAAA,GAAoD;AACjE,EAAA,IAAI,CAAC,wBAAA,EAA0B;AAC7B,IAAA,wBAAA,GAA2B,OAAO,IAAI,CAAA,CAAE,IAAA,CAAK,CAAA,MAAA,KAAU;AACrD,MAAA,MAAM,eAAA,GACH,MAAA,CAAwC,IAAA,IACxC,MAAA,CAAsD,OAAA,EAAS,IAAA;AAElE,MAAA,IAAI,CAAC,eAAA,EAAiB;AACpB,QAAA,MAAM,IAAI,KAAA;AAAA,UACR;AAAA,SACF;AAAA,MACF;AAEA,MAAA,OAAO,eAAA;AAAA,IACT,CAAC,CAAA;AAAA,EACH;AAEA,EAAA,OAAO,wBAAA;AACT;AAEA,IAAM,kBAAN,MAAsB;AAAA,EACpB,YAA6B,IAAA,EAAY;AAAZ,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AAAA,EAAa;AAAA,EAE1C,MAAM,aAAa,OAAA,EAA8C;AAC/D,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,IAAA,CAAK,MAAsB,oBAAA,CAAqB,OAAA,EAAS,CAAC,OAAO,CAAC,CAAA;AAC5F,IAAA,OAAO,MAAA,CAAO,IAAA;AAAA,EAChB;AAAA,EAEA,MAAM,UAAA,GAA6C;AACjD,IAAA,MAAM,SAAS,MAAM,IAAA,CAAK,IAAA,CAAK,KAAA,CAAoB,qBAAqB,KAAK,CAAA;AAC7E,IAAA,MAAM,OAAA,uBAAc,GAAA,EAAsB;AAC1C,IAAA,KAAA,MAAW,GAAA,IAAO,OAAO,IAAA,EAAM;AAC7B,MAAA,MAAM,WAAW,OAAA,CAAQ,GAAA,CAAI,GAAA,CAAI,QAAQ,KAAK,EAAC;AAC/C,MAAA,QAAA,CAAS,IAAA,CAAK,IAAI,UAAU,CAAA;AAC5B,MAAA,OAAA,CAAQ,GAAA,CAAI,GAAA,CAAI,QAAA,EAAU,QAAQ,CAAA;AAAA,IACpC;AACA,IAAA,OAAO,OAAA;AAAA,EACT;AAAA,EAEA,MAAM,iBAAiB,OAAA,EAAkD;AACvE,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,IAAA,CAAK,MAA0B,oBAAA,CAAqB,WAAA,EAAa,CAAC,OAAO,CAAC,CAAA;AACpG,IAAA,OAAO,MAAA,CAAO,IAAA;AAAA,EAChB;AAAA,EAEA,MAAM,iBAAiB,OAAA,EAAkD;AACvE,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,IAAA,CAAK,MAA0B,oBAAA,CAAqB,WAAA,EAAa,CAAC,OAAO,CAAC,CAAA;AACpG,IAAA,OAAO,MAAA,CAAO,IAAA;AAAA,EAChB;AACF,CAAA;AAEA,IAAM,gCAAN,MAA2E;AAAA,EAChE,OAAA,GAAU,YAAA;AAAA,EAEF,gBAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA;AAAA,EAEjB,YAAY,OAAA,EAA+C;AACzD,IAAA,IAAA,CAAK,mBAAmB,OAAA,CAAQ,gBAAA;AAChC,IAAA,IAAA,CAAK,QAAA,GAAW,QAAQ,QAAA,IAAY,UAAA;AACpC,IAAA,IAAA,CAAK,OAAA,GAAU,+BAAA,CAAgC,OAAA,CAAQ,OAAO,CAAA;AAAA,EAChE;AAAA,EAEA,MAAM,QAAQ,OAAA,EAAuE;AACnF,IAAA,MAAM,OAAA,GAAU,OAAA,EAAS,OAAA,IAAW,OAAA,CAAQ,OAAA,CAAQ,MAAA,GAAS,CAAA,GACzD,+BAAA,CAAgC,OAAA,CAAQ,OAAO,CAAA,GAC/C,IAAA,CAAK,OAAA;AACT,IAAA,MAAM,eAAA,GAAkB,MAAM,qBAAA,EAAsB;AACpD,IAAA,MAAM,IAAA,GAAO,IAAI,eAAA,CAAgB;AAAA,MAC/B,kBAAkB,IAAA,CAAK;AAAA,KACxB,CAAA;AACD,IAAA,MAAM,aAAA,GAAgB,IAAI,eAAA,CAAgB,IAAI,CAAA;AAE9C,IAAA,IAAI;AACF,MAAA,MAAM,CAAC,YAAY,OAAA,EAAS,cAAA,EAAgB,cAAc,CAAA,GAAI,MAAM,QAAQ,GAAA,CAAI;AAAA,QAC9E,aAAA,CAAc,aAAa,OAAO,CAAA;AAAA,QAClC,cAAc,UAAA,EAAW;AAAA,QACzB,aAAA,CAAc,iBAAiB,OAAO,CAAA;AAAA,QACtC,aAAA,CAAc,iBAAiB,OAAO;AAAA,OACvC,CAAA;AAED,MAAA,MAAM,SAAA,GAAY,IAAI,gCAAA,EAAiC;AACvD,MAAA,SAAA,CAAU,aAAA,CAAc,YAAY,OAAO,CAAA;AAC3C,MAAA,SAAA,CAAU,kBAAkB,cAAc,CAAA;AAC1C,MAAA,SAAA,CAAU,kBAAkB,cAAc,CAAA;AAC1C,MAAA,SAAA,CAAU,kBAAkB,cAAc,CAAA;AAE1C,MAAA,OAAO;AAAA,QACL,OAAA,EAAS,YAAA;AAAA,QACT,UAAU,IAAA,CAAK,QAAA;AAAA,QACf,WAAA,EAAA,iBAAa,IAAI,IAAA,EAAK,EAAE,WAAA,EAAY;AAAA,QACpC,OAAA,EAAS,UAAU,SAAA;AAAU,OAC/B;AAAA,IACF,CAAA,SAAE;AACA,MAAA,MAAM,KAAK,GAAA,EAAI;AAAA,IACjB;AAAA,EACF;AACF,CAAA;AAKO,SAAS,oCACd,OAAA,EAC6B;AAC7B,EAAA,OAAO,IAAI,8BAA8B,OAAO,CAAA;AAClD;;;ACrIO,IAAM,wBAAA,GAA2B,CAAC,QAAQ;AAEjD,SAAS,mBAAmB,KAAA,EAAuD;AACjF,EAAA,IAAI,CAAC,KAAA,EAAO;AACV,IAAA,OAAO,EAAC;AAAA,EACV;AAEA,EAAA,MAAM,SAAS,OAAO,KAAA,KAAU,QAAA,GAAW,CAAC,KAAK,CAAA,GAAI,KAAA;AACrD,EAAA,OAAO,MAAA,CAAO,QAAQ,CAAA,KAAA,KAAS,MAAA,CAAO,KAAK,CAAA,CAAE,KAAA,CAAM,GAAG,CAAC,CAAA;AACzD;AAMO,SAAS,yBACd,KAAA,EACU;AACV,EAAA,MAAM,UAAoB,EAAC;AAC3B,EAAA,MAAM,IAAA,uBAAW,GAAA,EAAY;AAE7B,EAAA,KAAA,MAAW,KAAA,IAAS,kBAAA,CAAmB,KAAK,CAAA,EAAG;AAC7C,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,EAAK;AAC1B,IAAA,IAAI,CAAC,MAAA,IAAU,IAAA,CAAK,GAAA,CAAI,MAAM,CAAA,EAAG;AAC/B,MAAA;AAAA,IACF;AACA,IAAA,IAAA,CAAK,IAAI,MAAM,CAAA;AACf,IAAA,OAAA,CAAQ,KAAK,MAAM,CAAA;AAAA,EACrB;AAEA,EAAA,OAAO,QAAQ,MAAA,GAAS,CAAA,GAAI,OAAA,GAAU,CAAC,GAAG,wBAAwB,CAAA;AACpE;AAKO,SAAS,uBAAuB,cAAA,EAAmD;AACxF,EAAA,IAAI,cAAA,CAAe,SAAS,UAAA,EAAY;AACtC,IAAA,OAAO,wBAAA,CAAyB,eAAe,OAAO,CAAA;AAAA,EACxD;AAEA,EAAA,OAAO,CAAC,GAAG,wBAAwB,CAAA;AACrC;;;ACtCA,SAAS,uBAAuB,KAAA,EAAmC;AACjE,EAAA,MAAM,OAAA,GAAU,MAAM,IAAA,EAAK;AAC3B,EAAA,OAAO,OAAA,CAAQ,MAAA,GAAS,CAAA,GAAI,OAAA,GAAU,MAAA;AACxC;AAEO,SAAS,wBACd,KAAA,EACU;AACV,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,IAAA,OAAO,KAAA,CAAM,IAAA;AAAA,MACX,IAAI,GAAA;AAAA,QACF,KAAA,CACG,KAAA,CAAM,GAAG,CAAA,CACT,GAAA,CAAI,sBAAsB,CAAA,CAC1B,MAAA,CAAO,CAAC,KAAA,KAA2B,OAAA,CAAQ,KAAK,CAAC;AAAA;AACtD,KACF;AAAA,EACF;AAEA,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACxB,IAAA,OAAO,KAAA,CAAM,IAAA;AAAA,MACX,IAAI,GAAA;AAAA,QACF,MACG,GAAA,CAAI,CAAA,KAAA,KAAS,OAAO,KAAA,KAAU,WAAW,sBAAA,CAAuB,KAAK,CAAA,GAAI,MAAS,EAClF,MAAA,CAAO,CAAC,KAAA,KAA2B,OAAA,CAAQ,KAAK,CAAC;AAAA;AACtD,KACF;AAAA,EACF;AAEA,EAAA,OAAO,EAAC;AACV;AAEA,SAAS,oBAAA,CACP,UAAA,EACA,SAAA,EACA,QAAA,EACS;AACT,EAAA,MAAM,cAAA,GAAiB,QAAA,CAAS,OAAA,CAAQ,GAAG,CAAA;AAC3C,EAAA,IAAI,iBAAiB,CAAA,EAAG;AACtB,IAAA,OAAO,SAAA,KAAc,QAAA;AAAA,EACvB;AAEA,EAAA,MAAM,iBAAiB,QAAA,CAAS,KAAA,CAAM,CAAA,EAAG,cAAc,EAAE,IAAA,EAAK;AAC9D,EAAA,MAAM,gBAAgB,QAAA,CAAS,KAAA,CAAM,cAAA,GAAiB,CAAC,EAAE,IAAA,EAAK;AAC9D,EAAA,OAAO,cAAA,KAAmB,cAAc,aAAA,KAAkB,SAAA;AAC5D;AAEA,SAAS,eAAA,CACP,UAAA,EACA,SAAA,EACA,MAAA,EACS;AACT,EAAA,MAAM,QAAA,GAAW,MAAA,CAAO,aAAA,CAAc,MAAA,KAAW,CAAA,IAC5C,MAAA,CAAO,aAAA,CAAc,IAAA,CAAK,CAAA,QAAA,KAAY,oBAAA,CAAqB,UAAA,EAAY,SAAA,EAAW,QAAQ,CAAC,CAAA;AAChG,EAAA,IAAI,CAAC,QAAA,EAAU;AACb,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,OAAO,CAAC,OAAO,aAAA,CAAc,IAAA,CAAK,cAAY,oBAAA,CAAqB,UAAA,EAAY,SAAA,EAAW,QAAQ,CAAC,CAAA;AACrG;AAEA,SAAS,gBAAgB,MAAA,EAAkD;AACzE,EAAA,OAAO,OAAO,aAAA,CAAc,MAAA,GAAS,CAAA,IAAK,MAAA,CAAO,cAAc,MAAA,GAAS,CAAA;AAC1E;AAEO,SAAS,2BAAA,CACd,UACA,MAAA,EACuB;AACvB,EAAA,IAAI,CAAC,eAAA,CAAgB,MAAM,CAAA,EAAG;AAC5B,IAAA,OAAO,QAAA;AAAA,EACT;AAEA,EAAA,MAAM,UAA+C,EAAC;AAEtD,EAAA,KAAA,MAAW,CAAC,YAAY,MAAM,CAAA,IAAK,OAAO,OAAA,CAAQ,QAAA,CAAS,OAAO,CAAA,EAAG;AACnE,IAAA,MAAM,SAAS,MAAA,CAAO,WAAA;AAAA,MACpB,MAAA,CAAO,OAAA,CAAQ,MAAA,CAAO,MAAM,EAAE,MAAA,CAAO,CAAC,CAAC,SAAS,CAAA,KAAM,eAAA,CAAgB,UAAA,EAAY,SAAA,EAAW,MAAM,CAAC;AAAA,KACtG;AAEA,IAAA,IAAI,MAAA,CAAO,IAAA,CAAK,MAAM,CAAA,CAAE,WAAW,CAAA,EAAG;AACpC,MAAA;AAAA,IACF;AAEA,IAAA,OAAA,CAAQ,UAAU,CAAA,GAAI;AAAA,MACpB,GAAG,MAAA;AAAA,MACH;AAAA,KACF;AAAA,EACF;AAEA,EAAA,IAAI,MAAA,CAAO,IAAA,CAAK,OAAO,CAAA,CAAE,WAAW,CAAA,EAAG;AACrC,IAAA,MAAM,YAAA,GAAe,MAAA,CAAO,aAAA,CAAc,MAAA,GAAS,CAAA,GAC/C,CAAA,eAAA,EAAkB,MAAA,CAAO,aAAA,CAAc,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,GACjD,EAAA;AACJ,IAAA,MAAM,YAAA,GAAe,MAAA,CAAO,aAAA,CAAc,MAAA,GAAS,CAAA,GAC/C,CAAA,eAAA,EAAkB,MAAA,CAAO,aAAA,CAAc,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,GACjD,EAAA;AACJ,IAAA,MAAM,IAAI,KAAA;AAAA,MACR,CAAA,iEAAA,EAAoE,YAAY,CAAA,EAAG,YAAY,CAAA;AAAA,KACjG;AAAA,EACF;AAEA,EAAA,OAAO;AAAA,IACL,GAAG,QAAA;AAAA,IACH;AAAA,GACF;AACF;;;ACtFA,IAAM,qCAAqB,IAAI,GAAA,CAAI,CAAC,WAAA,EAAa,aAAa,CAAC,CAAA;AAE/D,IAAM,yBAAA,GAA4B;AAAA,EAChC,kBAAA;AAAA,EACA,kBAAA;AAAA,EACA,qBAAA;AAAA,EACA,qBAAA;AAAA,EACA,mBAAA;AAAA,EACA;AACF,CAAA;AAEA,IAAM,sBAAA,GAAiD;AAAA,EACrD,KAAA,EAAO,+CAAA;AAAA,EACP,MAAA,EAAQ,kCAAA;AAAA,EACR,QAAA,EAAU,qBAAA;AAAA,EACV,QAAA,EAAU;AACZ,CAAA;AAEA,IAAM,qBAAA,GAAgD;AAAA,EACpD,KAAA,EAAO,+CAAA;AAAA,EACP,MAAA,EAAQ,kCAAA;AAAA,EACR,QAAA,EAAU,qBAAA;AAAA,EACV,QAAA,EAAU;AACZ,CAAA;AAEA,IAAM,qBAAA,GAA+C,eAAA;AACrD,IAAM,qBAAA,GAA+C,eAAA;AAErD,IAAM,cAAA,GAAwC;AAAA,EAC5C,SAAA,EAAW,QAAA;AAAA,EACX,UAAA,EAAY,OAAA;AAAA,EACZ,WAAA,EAAa,OAAA;AAAA,EACb,aAAA,EAAe,OAAA;AAAA,EACf,aAAA,EAAe;AACjB,CAAA;AAEA,IAAM,gBAAA,GAA0C;AAAA,EAC9C,aAAA,EAAe,IAAA;AAAA,EACf,YAAA,EAAc;AAChB,CAAA;AAEA,IAAM,0BAAA,GAAyD;AAAA,EAC7D,4BAAA,EAA8B,KAAA;AAAA,EAC9B,uBAAA,EAAyB;AAC3B,CAAA;AAEA,IAAM,uBAAA,GAAmD;AAAA,EACvD,aAAA,EAAe;AACjB,CAAA;AAEA,IAAM,qBAAA,GAAwB;AAAA,EAC5B,eAAe,EAAC;AAAA,EAChB,eAAe;AACjB,CAAA;AAEA,IAAM,qBAAA,GAAwB,CAAC,MAAA,EAAQ,YAAY,CAAA;AAEnD,IAAM,iCAAA,GAAoC;AAAA,EACxC,yBAAA;AAAA,EACA,cAAA;AAAA,EACA,QAAA;AAAA,EACA,cAAA;AAAA,EACA;AACF,CAAA;AAEA,IAAM,0BAAA,GAA6B,CAAC,qBAAA,EAAuB,iBAAA,EAAmB,YAAY,CAAA;AAE1F,IAAM,0BAAA,GAA6B,CAAC,8BAAA,EAAgC,YAAY,CAAA;AAEhF,IAAM,oBAAA,GAAuB,CAAC,YAAA,EAAc,oBAAA,EAAsB,sBAAsB,CAAA;AAExF,IAAM,wBAAA,GAA2B;AAAA,EAC/B,gBAAA;AAAA,EACA,wBAAA;AAAA,EACA;AACF,CAAA;AAEA,IAAM,yBAAA,GAA4B,CAAC,0BAA0B,CAAA;AAC7D,IAAM,sBAAA,GAAyB,CAAC,gCAAgC,CAAA;AAChE,IAAM,sBAAA,GAAyB,CAAC,gCAAgC,CAAA;AAChE,IAAM,qBAAA,GAAwB,CAAC,+BAA+B,CAAA;AAC9D,IAAM,sBAAA,GAAyB,CAAC,gCAAgC,CAAA;AAChE,IAAM,wBAAA,GAA2B,CAAC,kCAAkC,CAAA;AACpE,IAAM,wBAAA,GAA2B,CAAC,kCAAkC,CAAA;AACpE,IAAM,eAAA,GAAkB,CAAC,yBAAyB,CAAA;AAClD,IAAM,uBAAA,GAA0B,CAAC,iCAAiC,CAAA;AAClE,IAAM,wBAAA,GAA2B,CAAC,kCAAkC,CAAA;AACpE,IAAM,mBAAA,GAAsB,CAAC,6BAAA,EAA+B,8BAA8B,CAAA;AAC1F,IAAM,oBAAA,GAAuB,CAAC,8BAA8B,CAAA;AAC5D,IAAM,qBAAA,GAAwB,CAAC,+BAA+B,CAAA;AAC9D,IAAM,uBAAA,GAA0B,CAAC,iCAAiC,CAAA;AAClE,IAAM,uBAAA,GAA0B,CAAC,iCAAiC,CAAA;AAClE,IAAM,uBAAA,GAA0B,CAAC,iCAAiC,CAAA;AAClE,IAAM,sBAAA,GAAyB,CAAC,gCAAgC,CAAA;AAChE,IAAM,wBAAA,GAA2B,CAAC,0BAA0B,CAAA;AAC5D,IAAM,6BAAA,GAAgC,CAAC,uCAAuC,CAAA;AAC9E,IAAM,kCAAA,GAAqC,CAAC,4CAA4C,CAAA;AACxF,IAAM,oBAAA,GAAuB,wBAAA;AAE7B,IAAM,sBAAsB,CAAC,UAAA,EAAY,OAAA,EAAS,QAAA,EAAU,SAAS,OAAO,CAAA;AAC5E,IAAM,oBAAA,GAAuB,CAAC,cAAA,EAAgB,eAAe,CAAA;AAC7D,IAAM,oBAAA,GAAuB,CAAC,QAAA,EAAU,eAAe,CAAA;AACvD,IAAM,mBAAA,GAAsB,CAAC,QAAA,EAAU,WAAA,EAAa,cAAc,UAAU,CAAA;AAE5E,IAAM,qBAAA,GAA+E;AAAA,EACnF,MAAA,EAAQ,sBAAA;AAAA,EACR,eAAA,EAAiB;AACnB,CAAA;AAEA,SAAS,qBAAqB,QAAA,EAA0B;AACtD,EAAA,IAAI,QAAA,CAAS,UAAA,CAAW,GAAG,CAAA,IAAK,QAAA,CAAS,SAAS,GAAG,CAAA,IAAK,QAAA,CAAS,MAAA,IAAU,CAAA,EAAG;AAC9E,IAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA;AAClC,IAAA,OAAO,MACJ,OAAA,CAAQ,MAAA,EAAQ,IAAI,CAAA,CACpB,OAAA,CAAQ,QAAQ,IAAI,CAAA,CACpB,QAAQ,MAAA,EAAQ,GAAI,EACpB,OAAA,CAAQ,MAAA,EAAQ,GAAG,CAAA,CACnB,OAAA,CAAQ,SAAS,IAAI,CAAA;AAAA,EAC1B;AAEA,EAAA,IAAI,QAAA,CAAS,UAAA,CAAW,GAAG,CAAA,IAAK,QAAA,CAAS,SAAS,GAAG,CAAA,IAAK,QAAA,CAAS,MAAA,IAAU,CAAA,EAAG;AAC9E,IAAA,OAAO,QAAA,CAAS,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA;AAAA,EAC7B;AAEA,EAAA,MAAM,YAAA,GAAe,QAAA,CAAS,MAAA,CAAO,MAAM,CAAA;AAC3C,EAAA,MAAM,iBAAiB,YAAA,IAAgB,CAAA,GAAI,SAAS,KAAA,CAAM,CAAA,EAAG,YAAY,CAAA,GAAI,QAAA;AAC7E,EAAA,OAAO,eAAe,IAAA,EAAK;AAC7B;AAEA,SAAS,aAAa,IAAA,EAAwD;AAC5E,EAAA,MAAM,OAAA,GAAU,KAAK,IAAA,EAAK;AAC1B,EAAA,IAAI,CAAC,OAAA,IAAW,OAAA,CAAQ,UAAA,CAAW,GAAG,CAAA,EAAG;AACvC,IAAA,OAAO,MAAA;AAAA,EACT;AAEA,EAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,KAAA,CAAM,qDAAqD,CAAA;AACjF,EAAA,IAAI,CAAC,KAAA,EAAO;AACV,IAAA,OAAO,MAAA;AAAA,EACT;AAEA,EAAA,MAAM,GAAG,GAAA,EAAK,QAAQ,CAAA,GAAI,KAAA;AAC1B,EAAA,OAAO,CAAC,GAAA,EAAK,oBAAA,CAAqB,QAAA,CAAS,IAAA,EAAM,CAAC,CAAA;AACpD;AAEA,SAAS,sBAAsB,GAAA,EAAkC;AAC/D,EAAA,MAAM,OAAA,GAAU,OAAA,CAAQ,GAAA,CAAI,QAAA,EAAU,IAAA,EAAK;AAC3C,EAAA,MAAM,SAAA,GAAY;AAAA,IAChB,GAAG,qBAAA;AAAA,IACH,GAAI,OAAA,GAAU,CAAC,CAAA,KAAA,EAAQ,OAAO,IAAI,CAAA,KAAA,EAAQ,OAAO,CAAA,MAAA,CAAQ,CAAA,GAAI;AAAC,GAChE;AAEA,EAAA,MAAM,OAAA,uBAAc,GAAA,EAAoB;AAExC,EAAA,KAAA,MAAW,YAAY,SAAA,EAAW;AAChC,IAAA,MAAM,YAAA,GAAeE,YAAA,CAAQ,GAAA,EAAK,QAAQ,CAAA;AAC1C,IAAA,IAAI,CAAC4B,aAAA,CAAW,YAAY,CAAA,EAAG;AAC7B,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,OAAA,GAAUC,eAAA,CAAa,YAAA,EAAc,MAAM,CAAA;AACjD,IAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,KAAA,CAAM,QAAQ,CAAA;AACpC,IAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,MAAA,MAAM,MAAA,GAAS,aAAa,IAAI,CAAA;AAChC,MAAA,IAAI,CAAC,MAAA,EAAQ;AACX,QAAA;AAAA,MACF;AACA,MAAA,MAAM,CAAC,GAAA,EAAK,KAAK,CAAA,GAAI,MAAA;AACrB,MAAA,OAAA,CAAQ,GAAA,CAAI,KAAK,KAAK,CAAA;AAAA,IACxB;AAAA,EACF;AAEA,EAAA,OAAO,OAAA;AACT;AAEA,SAAS,gBAAgB,GAAA,EAAyB;AAChD,EAAA,MAAM,UAAA,GAAa,sBAAsB,GAAG,CAAA;AAC5C,EAAA,IAAI,UAAA,CAAW,SAAS,CAAA,EAAG;AACzB,IAAA,OAAO,MAAM;AAAA,IAAC,CAAA;AAAA,EAChB;AAEA,EAAA,MAAM,cAAc,IAAI,GAAA;AAAA,IACtB,MAAA,CAAO,IAAA,CAAK,OAAA,CAAQ,GAAG,CAAA,CAAE,MAAA,CAAO,CAAA,GAAA,KAAO,OAAA,CAAQ,GAAA,CAAI,GAAG,CAAA,KAAM,MAAS;AAAA,GACvE;AACA,EAAA,MAAM,MAAA,uBAAa,GAAA,EAAoB;AAEvC,EAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,CAAA,IAAK,UAAA,CAAW,SAAQ,EAAG;AAC/C,IAAA,IAAI,WAAA,CAAY,GAAA,CAAI,GAAG,CAAA,EAAG;AACxB,MAAA;AAAA,IACF;AACA,IAAA,MAAA,CAAO,GAAA,CAAI,KAAK,KAAK,CAAA;AAAA,EACvB;AAEA,EAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,CAAA,IAAK,MAAA,CAAO,SAAQ,EAAG;AAC3C,IAAA,OAAA,CAAQ,GAAA,CAAI,GAAG,CAAA,GAAI,KAAA;AAAA,EACrB;AAEA,EAAA,OAAO,MAAM;AACX,IAAA,KAAA,MAAW,GAAA,IAAO,MAAA,CAAO,IAAA,EAAK,EAAG;AAC/B,MAAA,OAAO,OAAA,CAAQ,IAAI,GAAG,CAAA;AAAA,IACxB;AAAA,EACF,CAAA;AACF;AAEA,SAAS,mBAAmB,GAAA,EAAiC;AAC3D,EAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,GAAA,CAAI,GAAG,CAAA;AAC7B,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,IAAA,OAAO,MAAA;AAAA,EACT;AAEA,EAAA,MAAM,OAAA,GAAU,MAAM,IAAA,EAAK;AAC3B,EAAA,OAAO,OAAA,CAAQ,MAAA,GAAS,CAAA,GAAI,OAAA,GAAU,MAAA;AACxC;AAEA,SAAS,qBACP,YAAA,EACoB;AACpB,EAAA,KAAA,MAAW,OAAO,YAAA,EAAc;AAC9B,IAAA,MAAM,KAAA,GAAQ,mBAAmB,GAAG,CAAA;AACpC,IAAA,IAAI,KAAA,EAAO;AACT,MAAA,OAAO,KAAA;AAAA,IACT;AAAA,EACF;AACA,EAAA,OAAO,MAAA;AACT;AAEA,SAAS,mBAAA,CACP,QAAA,EACA,aAAA,EACA,OAAA,EACe;AACf,EAAA,IAAI,CAAC,QAAA,EAAU;AACb,IAAA,OAAO,MAAA;AAAA,EACT;AACA,EAAA,IAAI,aAAA,CAAc,QAAA,CAAS,QAAa,CAAA,EAAG;AACzC,IAAA,OAAO,QAAA;AAAA,EACT;AACA,EAAA,MAAM,IAAI,KAAA;AAAA,IACR,CAAA,0BAAA,EAA6B,OAAA,CAAQ,IAAA,CAAK,IAAI,CAAC,CAAA,yBAAA,EAA4B,aAAA,CAAc,IAAA,CAAK,IAAI,CAAC,CAAA,YAAA,EAAe,QAAQ,CAAA,CAAA;AAAA,GAC5H;AACF;AAEA,SAAS,oBAAA,CACP,SACA,aAAA,EACe;AACf,EAAA,OAAO,mBAAA,CAAoB,oBAAA,CAAqB,OAAO,CAAA,EAAG,eAAe,OAAO,CAAA;AAClF;AAEA,SAAS,uBAAuB,OAAA,EAAiD;AAC/E,EAAA,MAAM,QAAA,GAAW,qBAAqB,OAAO,CAAA;AAC7C,EAAA,OAAO,QAAA,KAAa,MAAA,GAAY,MAAA,GAAYjC,iBAAAA,CAAiB,UAAU,KAAK,CAAA;AAC9E;AAEA,SAAS,oBAAuB,OAAA,EAA2C;AACzE,EAAA,MAAM,QAAA,GAAW,qBAAqB,OAAO,CAAA;AAC7C,EAAA,IAAI,aAAa,MAAA,EAAW;AAC1B,IAAA,OAAO,MAAA;AAAA,EACT;AACA,EAAA,IAAI;AACF,IAAA,OAAO,IAAA,CAAK,MAAM,QAAQ,CAAA;AAAA,EAC5B,SAAS,KAAA,EAAO;AACd,IAAA,MAAM,UAAU,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK,CAAA;AACrE,IAAA,MAAM,IAAI,KAAA;AAAA,MACR,6BAA6B,OAAA,CAAQ,IAAA,CAAK,IAAI,CAAC,6BAA6B,OAAO,CAAA;AAAA,KACrF;AAAA,EACF;AACF;AAEA,SAAS,uCAAuC,gBAAA,EAA8C;AAC5F,EAAA,IAAI;AACF,IAAA,MAAM,SAAA,GAAY,IAAI,GAAA,CAAI,gBAAgB,CAAA;AAC1C,IAAA,IAAI,CAAC,kBAAA,CAAmB,GAAA,CAAI,SAAA,CAAU,QAAQ,CAAA,EAAG;AAC/C,MAAA,OAAO,KAAA,CAAA;AAAA,IACT;AACA,IAAA,MAAM,WAAW,SAAA,CAAU,QAAA,CAAS,QAAQ,MAAA,EAAQ,EAAE,EAAE,IAAA,EAAK;AAC7D,IAAA,OAAO,QAAA,CAAS,MAAA,GAAS,CAAA,GAAI,kBAAA,CAAmB,QAAQ,CAAA,GAAI,KAAA,CAAA;AAAA,EAC9D,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,MAAA;AAAA,EACT;AACF;AAEA,SAAS,uBAAA,CACP,OACA,YAAA,EACoB;AACpB,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,IAAA,MAAM,OAAA,GAAU,MAAM,IAAA,EAAK;AAC3B,IAAA,IAAI,OAAA,CAAQ,SAAS,CAAA,EAAG;AACtB,MAAA,OAAO,OAAA;AAAA,IACT;AAAA,EACF;AAEA,EAAA,OAAO,qBAAqB,YAAY,CAAA;AAC1C;AAEA,SAAS,uBAAA,CACP,KAAA,EACA,UAAA,EACA,YAAA,EACQ;AACR,EAAA,MAAM,QAAA,GAAW,uBAAA,CAAwB,KAAA,EAAO,YAAY,CAAA;AAC5D,EAAA,IAAI,QAAA,EAAU;AACZ,IAAA,OAAO,QAAA;AAAA,EACT;AAEA,EAAA,MAAM,IAAI,KAAA;AAAA,IACR,CAAA,4BAAA,EAA+B,UAAU,CAAA,MAAA,EAAS,UAAU,gCAAgC,YAAA,CAAa,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA;AAAA,GACrH;AACF;AAEA,SAAS,8BAA8B,gBAAA,EAAkC;AACvE,EAAA,IAAI,SAAA;AACJ,EAAA,IAAI;AACF,IAAA,SAAA,GAAY,IAAI,IAAI,gBAAgB,CAAA;AAAA,EACtC,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,gBAAA;AAAA,EACT;AAEA,EAAA,IAAI,CAAC,kBAAA,CAAmB,GAAA,CAAI,SAAA,CAAU,QAAQ,CAAA,EAAG;AAC/C,IAAA,OAAO,gBAAA;AAAA,EACT;AAEA,EAAA,IAAI,CAAC,SAAA,CAAU,QAAA,IAAY,SAAA,CAAU,QAAA,EAAU;AAC7C,IAAA,OAAO,gBAAA;AAAA,EACT;AAEA,EAAA,MAAM,gBAAA,GAAmB,qBAAqB,0BAA0B,CAAA;AACxE,EAAA,IAAI,CAAC,gBAAA,EAAkB;AACrB,IAAA,OAAO,gBAAA;AAAA,EACT;AAEA,EAAA,SAAA,CAAU,QAAA,GAAW,gBAAA;AACrB,EAAA,OAAO,UAAU,QAAA,EAAS;AAC5B;AAEA,SAAS,oBAAA,CAAqB,UAAmB,QAAA,EAA4B;AAC3E,EAAA,IAAI,OAAO,aAAa,SAAA,EAAW;AACjC,IAAA,OAAO,QAAA;AAAA,EACT;AACA,EAAA,IAAI,OAAO,aAAa,QAAA,EAAU;AAChC,IAAA,OAAOA,iBAAAA,CAAiB,UAAU,QAAQ,CAAA;AAAA,EAC5C;AACA,EAAA,OAAO,QAAA;AACT;AAEA,SAAS,sBACP,KAAA,EACuB;AACvB,EAAA,OAAO;AAAA,IACL,aAAA,EAAe,oBAAA;AAAA,MACb,KAAA,EAAO,aAAA;AAAA,MACP,gBAAA,CAAiB;AAAA,KACnB;AAAA,IACA,YAAA,EAAc,oBAAA;AAAA,MACZ,KAAA,EAAO,YAAA;AAAA,MACP,gBAAA,CAAiB;AAAA;AACnB,GACF;AACF;AAEA,SAAS,2BACP,KAAA,EAC4B;AAC5B,EAAA,OAAO;AAAA,IACL,4BAAA,EAA8B,oBAAA;AAAA,MAC5B,KAAA,EAAO,4BAAA;AAAA,MACP,0BAAA,CAA2B;AAAA,KAC7B;AAAA,IACA,uBAAA,EAAyB,oBAAA;AAAA,MACvB,KAAA,EAAO,uBAAA;AAAA,MACP,0BAAA,CAA2B;AAAA;AAC7B,GACF;AACF;AAEA,SAAS,sBACP,KAAA,EACA;AACA,EAAA,OAAO;AAAA,IACL,aAAA,EAAe,uBAAA,CAAwB,KAAA,EAAO,aAAa,CAAA;AAAA,IAC3D,aAAA,EAAe,uBAAA,CAAwB,KAAA,EAAO,aAAa;AAAA,GAC7D;AACF;AAEA,SAAS,sBAAsB,MAAA,EAA4E;AACzG,EAAA,MAAM,MAAA,GAAS,QAAQ,MAAA,IAAU,qBAAA;AACjC,EAAA,OAAO;AAAA,IACL,MAAA,EAAQ,QAAQ,MAAA,IAAU,qBAAA;AAAA,IAC1B,MAAA;AAAA,IACA,OAAA,EAAS;AAAA,MACP,GAAG,sBAAsB,MAAM,CAAA;AAAA,MAC/B,GAAI,MAAA,EAAQ,OAAA,IAAW;AAAC,KAC1B;AAAA,IACA,cAAA,EAAgB;AAAA,MACd,GAAI,MAAA,EAAQ,cAAA,IAAkB;AAAC;AACjC,GACF;AACF;AAEA,SAAS,wBAAwB,QAAA,EAAiE;AAChG,EAAA,IAAI,QAAA,CAAS,IAAA,KAAS,UAAA,IAAc,QAAA,CAAS,SAAS,QAAA,EAAU;AAC9D,IAAA,MAAM,gBAAA,GAAmB,uBAAA;AAAA,MACvB,QAAA,CAAS,gBAAA;AAAA,MACT,2BAAA;AAAA,MACA;AAAA,KACF;AACA,IAAA,MAAM,WAAW,uBAAA,CAAwB,QAAA,CAAS,UAAU,0BAA0B,CAAA,IACjF,uCAAuC,gBAAgB,CAAA;AAE5D,IAAA,OAAO;AAAA,MACL,GAAG,QAAA;AAAA,MACH,gBAAA,EAAkB,8BAA8B,gBAAgB,CAAA;AAAA,MAChE,QAAA;AAAA,MACA,OAAA,EAAS,wBAAA,CAAyB,QAAA,CAAS,OAAO;AAAA,KACpD;AAAA,EACF;AAEA,EAAA,IAAI,QAAA,CAAS,IAAA,KAAS,UAAA,IAAc,QAAA,CAAS,SAAS,SAAA,EAAW;AAC/D,IAAA,MAAM,UAAA,GAAa,uBAAA;AAAA,MACjB,QAAA,CAAS,UAAA;AAAA,MACT,qBAAA;AAAA,MACA;AAAA,KACF;AACA,IAAA,MAAM,MAAA,GAAS,uBAAA;AAAA,MACb,QAAA,CAAS,MAAA;AAAA,MACT,iBAAA;AAAA,MACA;AAAA,KACF;AACA,IAAA,MAAM,QAAA,GAAW,uBAAA,CAAwB,QAAA,CAAS,QAAA,EAAU,0BAA0B,CAAA,IAAK,UAAA;AAE3F,IAAA,OAAO;AAAA,MACL,GAAG,QAAA;AAAA,MACH,UAAA;AAAA,MACA,MAAA;AAAA,MACA,QAAA;AAAA,MACA,OAAA,EAAS,wBAAA,CAAyB,QAAA,CAAS,OAAO;AAAA,KACpD;AAAA,EACF;AAEA,EAAA,IAAI,QAAA,CAAS,IAAA,KAAS,QAAA,IAAY,QAAA,CAAS,SAAS,QAAA,EAAU;AAC5D,IAAA,IAAI,CAAC,QAAA,CAAS,aAAA,EAAe,MAAA,EAAQ;AACnC,MAAA,MAAM,IAAI,KAAA;AAAA,QACR;AAAA,OACF;AAAA,IACF;AACA,IAAA,MAAM,QAAA,GAAW,uBAAA,CAAwB,QAAA,CAAS,QAAA,EAAU,EAAE,CAAA;AAC9D,IAAA,IAAI,CAAC,QAAA,EAAU;AACb,MAAA,MAAM,IAAI,KAAA;AAAA,QACR;AAAA,OACF;AAAA,IACF;AAEA,IAAA,OAAO;AAAA,MACL,IAAA,EAAM,QAAA;AAAA,MACN,IAAA,EAAM,QAAA;AAAA,MACN,aAAA,EAAe,QAAA,CAAS,aAAA,CAAc,KAAA,EAAM;AAAA,MAC5C,QAAA;AAAA,MACA,UAAA,EAAY,uBAAA,CAAwB,QAAA,CAAS,UAAA,EAAY,EAAE;AAAA,KAC7D;AAAA,EACF;AAEA,EAAA,OAAO,QAAA;AACT;AAEA,SAAS,wBAAwB,KAAA,EAAgD;AAC/E,EAAA,IAAI,CAAC,KAAA,IAAS,OAAO,KAAA,KAAU,QAAA,EAAU;AACvC,IAAA,OAAO,KAAA;AAAA,EACT;AACA,EAAA,MAAM,MAAA,GAAS,KAAA;AACf,EAAA,OAAO,OAAA,CAAQ,MAAA,CAAO,QAAA,IAAY,OAAO,MAAA,CAAO,QAAA,KAAa,QAAQ,CAAA,KAClE,MAAA,CAAO,MAAA,KAAW,MAAA,IAAa,OAAO,OAAO,MAAA,KAAW,QAAA,CAAA;AAC7D;AAEO,SAAS,yBAAyB,KAAA,EAA+D;AACtG,EAAA,OAAO;AAAA,IACL,QAAA,EAAU,uBAAA,CAAwB,KAAA,CAAM,QAAQ,CAAA;AAAA,IAChD,MAAA,EAAQ,qBAAA,CAAsB,KAAA,CAAM,MAAM,CAAA;AAAA,IAC1C,MAAA,EAAQ;AAAA,MACN,GAAG,cAAA;AAAA,MACH,GAAI,KAAA,CAAM,MAAA,IAAU;AAAC,KACvB;AAAA,IACA,MAAA,EAAQ;AAAA,MACN,GAAG,qBAAA;AAAA,MACH,GAAG,qBAAA,CAAsB,KAAA,CAAM,MAAM;AAAA,KACvC;AAAA,IACA,QAAA,EAAU,qBAAA,CAAsB,KAAA,CAAM,QAAQ,CAAA;AAAA,IAC9C,YAAA,EAAc,0BAAA,CAA2B,KAAA,CAAM,YAAY,CAAA;AAAA,IAC3D,QAAA,EAAU;AAAA,MACR,GAAG;AAAA;AACL,GACF;AACF;AAKO,SAAS,sBACd,MAAA,EACS;AACT,EAAA,OAAO,MAAA;AACT;AAKO,SAAS,uBAAA,CAAwB,GAAA,GAAc,OAAA,CAAQ,GAAA,EAAI,EAAuB;AACvF,EAAA,KAAA,MAAW,aAAa,yBAAA,EAA2B;AACjD,IAAA,MAAM,YAAA,GAAeI,YAAA,CAAQ,GAAA,EAAK,SAAS,CAAA;AAC3C,IAAA,IAAI4B,aAAA,CAAW,YAAY,CAAA,EAAG;AAC5B,MAAA,OAAO,YAAA;AAAA,IACT;AAAA,EACF;AACA,EAAA,OAAO,MAAA;AACT;AAEA,SAAS,oBAAoB,MAAA,EAAwC;AACnE,EAAA,MAAM,OAAA,uBAAc,GAAA,EAAa;AACjC,EAAA,MAAM,KAAA,GAAmB,CAAC,MAAM,CAAA;AAEhC,EAAA,OAAO,KAAA,CAAM,SAAS,CAAA,EAAG;AACvB,IAAA,MAAM,OAAA,GAAU,MAAM,KAAA,EAAM;AAC5B,IAAA,IAAI,CAAC,WAAW,OAAO,OAAA,KAAY,YAAY,OAAA,CAAQ,GAAA,CAAI,OAAO,CAAA,EAAG;AACnE,MAAA;AAAA,IACF;AACA,IAAA,OAAA,CAAQ,IAAI,OAAO,CAAA;AAEnB,IAAA,MAAM,MAAA,GAAS,OAAA;AACf,IAAA,IAAI,uBAAA,CAAwB,MAAM,CAAA,EAAG;AACnC,MAAA,OAAO,MAAA;AAAA,IACT;AAEA,IAAA,MAAM,gBAAgB,MAAA,CAAO,OAAA;AAC7B,IAAA,IAAI,aAAA,IAAiB,OAAO,aAAA,KAAkB,QAAA,EAAU;AACtD,MAAA,KAAA,CAAM,KAAK,aAAa,CAAA;AAAA,IAC1B;AAEA,IAAA,MAAM,oBAAoB,MAAA,CAAO,MAAA;AACjC,IAAA,IAAI,iBAAA,IAAqB,OAAO,iBAAA,KAAsB,QAAA,EAAU;AAC9D,MAAA,KAAA,CAAM,KAAK,iBAAiB,CAAA;AAAA,IAC9B;AAEA,IAAA,MAAM,aAAA,GAAgB,OAAO,gBAAgB,CAAA;AAC7C,IAAA,IAAI,aAAA,IAAiB,OAAO,aAAA,KAAkB,QAAA,EAAU;AACtD,MAAA,KAAA,CAAM,KAAK,aAAa,CAAA;AAAA,IAC1B;AAEA,IAAA,KAAA,MAAW,KAAA,IAAS,MAAA,CAAO,MAAA,CAAO,MAAM,CAAA,EAAG;AACzC,MAAA,IAAI,KAAA,IAAS,OAAO,KAAA,KAAU,QAAA,EAAU;AACtC,QAAA,KAAA,CAAM,KAAK,KAAK,CAAA;AAAA,MAClB;AAAA,IACF;AAAA,EACF;AAEA,EAAA,MAAM,IAAI,KAAA;AAAA,IACR;AAAA,GACF;AACF;AAEA,SAAS,mBAAmB,eAAA,EAA2C;AAGrE,EAAA,MAAM,gBAAgB,IAAI,QAAA;AAAA,IACxB,iBAAA;AAAA,IACA;AAAA,GACF;AACA,EAAA,OAAO,cAAc,eAAe,CAAA;AACtC;AAEA,SAAS,4BAAA,GAAkE;AACzE,EAAA,MAAM,MAAA,GAAS,oBAAA,CAAqB,sBAAA,EAAwB,oBAAoB,CAAA;AAChF,EAAA,MAAM,MAAA,GAAS,oBAAA,CAAqB,sBAAA,EAAwB,oBAAoB,CAAA;AAChF,EAAA,MAAM,WAAA,GAAc,qBAAqB,qBAAqB,CAAA;AAC9D,EAAA,MAAM,YAAA,GAAe,qBAAqB,sBAAsB,CAAA;AAChE,EAAA,MAAM,cAAA,GAAiB,qBAAqB,wBAAwB,CAAA;AACpE,EAAA,MAAM,cAAA,GAAiB,qBAAqB,wBAAwB,CAAA;AACpE,EAAA,MAAM,cAAA,GAAiB,oBAA4C,wBAAwB,CAAA;AAE3F,EAAA,IACE,MAAA,KAAW,MAAA,IACX,MAAA,KAAW,MAAA,IACX,WAAA,KAAgB,MAAA,IAChB,YAAA,KAAiB,MAAA,IACjB,cAAA,KAAmB,MAAA,IACnB,cAAA,KAAmB,MAAA,IACnB,mBAAmB,MAAA,EACnB;AACA,IAAA,OAAO,MAAA;AAAA,EACT;AAEA,EAAA,OAAO;AAAA,IACL,MAAA;AAAA,IACA,MAAA;AAAA,IACA,OAAA,EAAS;AAAA,MACP,GAAI,WAAA,GAAc,EAAE,KAAA,EAAO,WAAA,KAAgB,EAAC;AAAA,MAC5C,GAAI,YAAA,GAAe,EAAE,MAAA,EAAQ,YAAA,KAAiB,EAAC;AAAA,MAC/C,GAAI,cAAA,GAAiB,EAAE,QAAA,EAAU,cAAA,KAAmB,EAAC;AAAA,MACrD,GAAI,cAAA,GAAiB,EAAE,QAAA,EAAU,cAAA,KAAmB;AAAC,KACvD;AAAA,IACA;AAAA,GACF;AACF;AAEA,SAAS,4BAAA,GAAkE;AACzE,EAAA,MAAM,aAAA,GAAgB,qBAAqB,eAAe,CAAA;AAC1D,EAAA,MAAM,aAAA,GAAgB,qBAAqB,uBAAuB,CAAA;AAElE,EAAA,IAAI,aAAA,KAAkB,MAAA,IAAa,aAAA,KAAkB,MAAA,EAAW;AAC9D,IAAA,OAAO,MAAA;AAAA,EACT;AAEA,EAAA,OAAO;AAAA,IACL,GAAI,aAAA,KAAkB,MAAA,GAAY,EAAE,aAAA,KAAkB,EAAC;AAAA,IACvD,GAAI,aAAA,KAAkB,MAAA,GAAY,EAAE,aAAA,KAAkB;AAAC,GACzD;AACF;AAEA,SAAS,4BAAA,GAA2E;AAClF,EAAA,MAAM,SAAA,GAAY,oBAAA,CAAqB,mBAAA,EAAqB,mBAAmB,CAAA;AAC/E,EAAA,MAAM,UAAA,GAAa,oBAAA,CAAqB,oBAAA,EAAsB,mBAAmB,CAAA;AACjF,EAAA,MAAM,WAAA,GAAc,oBAAA,CAAqB,qBAAA,EAAuB,mBAAmB,CAAA;AACnF,EAAA,MAAM,aAAA,GAAgB,oBAAA,CAAqB,uBAAA,EAAyB,mBAAmB,CAAA;AACvF,EAAA,MAAM,aAAA,GAAgB,oBAAA,CAAqB,uBAAA,EAAyB,mBAAmB,CAAA;AAEvF,EAAA,IACE,SAAA,KAAc,UACd,UAAA,KAAe,MAAA,IACf,gBAAgB,MAAA,IAChB,aAAA,KAAkB,MAAA,IAClB,aAAA,KAAkB,MAAA,EAClB;AACA,IAAA,OAAO,MAAA;AAAA,EACT;AAEA,EAAA,OAAO;AAAA,IACL,GAAI,SAAA,GAAY,EAAE,SAAA,KAAc,EAAC;AAAA,IACjC,GAAI,UAAA,GAAa,EAAE,UAAA,KAAe,EAAC;AAAA,IACnC,GAAI,WAAA,GAAc,EAAE,WAAA,KAAgB,EAAC;AAAA,IACrC,GAAI,aAAA,GAAgB,EAAE,aAAA,KAAkB,EAAC;AAAA,IACzC,GAAI,aAAA,GAAgB,EAAE,aAAA,KAAkB;AAAC,GAC3C;AACF;AAEA,SAAS,4BAAA,GAA2E;AAClF,EAAA,MAAM,aAAA,GAAgB,uBAAuB,uBAAuB,CAAA;AACpE,EAAA,MAAM,YAAA,GAAe,uBAAuB,sBAAsB,CAAA;AAElE,EAAA,IAAI,aAAA,KAAkB,MAAA,IAAa,YAAA,KAAiB,MAAA,EAAW;AAC7D,IAAA,OAAO,MAAA;AAAA,EACT;AAEA,EAAA,OAAO;AAAA,IACL,GAAI,aAAA,KAAkB,MAAA,GAAY,EAAE,aAAA,KAAkB,EAAC;AAAA,IACvD,GAAI,YAAA,KAAiB,MAAA,GAAY,EAAE,YAAA,KAAiB;AAAC,GACvD;AACF;AAEA,SAAS,iCAAA,GAAqF;AAC5F,EAAA,MAAM,4BAAA,GAA+B,uBAAuB,6BAA6B,CAAA;AACzF,EAAA,MAAM,uBAAA,GAA0B,uBAAuB,kCAAkC,CAAA;AAEzF,EAAA,IAAI,4BAAA,KAAiC,MAAA,IAAa,uBAAA,KAA4B,MAAA,EAAW;AACvF,IAAA,OAAO,MAAA;AAAA,EACT;AAEA,EAAA,OAAO;AAAA,IACL,GAAI,4BAAA,KAAiC,MAAA,GAAY,EAAE,4BAAA,KAAiC,EAAC;AAAA,IACrF,GAAI,uBAAA,KAA4B,MAAA,GAAY,EAAE,uBAAA,KAA4B;AAAC,GAC7E;AACF;AAEA,SAAS,8BAAA,GAA2E;AAClF,EAAA,MAAM,sBAAA,GAAyB,qBAAqB,iCAAiC,CAAA;AACrF,EAAA,IAAI,sBAAA,EAAwB;AAC1B,IAAA,OAAO;AAAA,MACL,IAAA,EAAM,UAAA;AAAA,MACN,IAAA,EAAM,QAAA;AAAA,MACN,gBAAA,EAAkB,sBAAA;AAAA,MAClB,QAAA,EAAU,uBAAA,CAAwB,MAAA,EAAW,0BAA0B,CAAA;AAAA,MACvE,OAAA,EAAS,wBAAA,CAAyB,oBAAA,CAAqB,yBAAyB,CAAC;AAAA,KACnF;AAAA,EACF;AAEA,EAAA,MAAM,UAAA,GAAa,qBAAqB,oBAAoB,CAAA;AAC5D,EAAA,MAAM,MAAA,GAAS,qBAAqB,wBAAwB,CAAA;AAC5D,EAAA,IAAI,cAAc,MAAA,EAAQ;AACxB,IAAA,MAAM,OAAA,GAAU,oBAAA,CAAqB,wBAAA,EAA0B,mBAAmB,CAAA;AAClF,IAAA,OAAO;AAAA,MACL,IAAA,EAAM,UAAA;AAAA,MACN,IAAA,EAAM,SAAA;AAAA,MACN,UAAA;AAAA,MACA,MAAA;AAAA,MACA,QAAA,EAAU,uBAAA,CAAwB,MAAA,EAAW,0BAA0B,CAAA;AAAA,MACvE,OAAA,EAAS,wBAAA,CAAyB,oBAAA,CAAqB,yBAAyB,CAAC,CAAA;AAAA,MACjF;AAAA,KACF;AAAA,EACF;AAEA,EAAA,OAAO,MAAA;AACT;AAEA,SAAS,gCAAA,GAAsE;AAC7E,EAAA,MAAM,WAAW,8BAAA,EAA+B;AAChD,EAAA,IAAI,CAAC,QAAA,EAAU;AACb,IAAA,OAAO,MAAA;AAAA,EACT;AAEA,EAAA,OAAO;AAAA,IACL,QAAA;AAAA,IACA,QAAQ,4BAAA,EAA6B;AAAA,IACrC,QAAQ,4BAAA,EAA6B;AAAA,IACrC,QAAQ,4BAAA,EAA6B;AAAA,IACrC,UAAU,4BAAA,EAA6B;AAAA,IACvC,cAAc,iCAAA;AAAkC,GAClD;AACF;AAKA,eAAsB,mBAAA,CACpB,OAAA,GAAsC,EAAC,EACP;AAChC,EAAA,MAAM,GAAA,GAAM,OAAA,CAAQ,GAAA,IAAO,OAAA,CAAQ,GAAA,EAAI;AACvC,EAAA,MAAM,iBAAA,GAAoB,gBAAgB,GAAG,CAAA;AAC7C,EAAA,IAAI;AACF,IAAA,MAAM,YAAA,GAAe,QAAQ,UAAA,GACzB5B,YAAA,CAAQ,KAAK,OAAA,CAAQ,UAAU,CAAA,GAC/B,uBAAA,CAAwB,GAAG,CAAA;AAE/B,IAAA,IAAI,CAAC,YAAA,EAAc;AACjB,MAAA,MAAM,oBAAoB,gCAAA,EAAiC;AAC3D,MAAA,IAAI,iBAAA,EAAmB;AACrB,QAAA,OAAO;AAAA,UACL,UAAA,EAAY,oBAAA;AAAA,UACZ,MAAA,EAAQ,yBAAyB,iBAAiB;AAAA,SACpD;AAAA,MACF;AACA,MAAA,MAAM,IAAI,KAAA;AAAA,QACR,gCAAgC,GAAG,CAAA,mBAAA,EAAsB,yBAAA,CAA0B,IAAA,CAAK,IAAI,CAAC,CAAA,6GAAA;AAAA,OAC/F;AAAA,IACF;AAEA,IAAA,MAAM,SAAA,GAAY8B,kBAAc,YAAY,CAAA;AAC5C,IAAA,MAAM,MAAA,GAAS,MAAM,kBAAA,CAAmB,CAAA,EAAG,SAAA,CAAU,IAAI,CAAA,WAAA,EAAc,IAAA,CAAK,GAAA,EAAK,CAAA,CAAE,CAAA;AACnF,IAAA,MAAM,SAAA,GAAY,oBAAoB,MAAM,CAAA;AAE5C,IAAA,OAAO;AAAA,MACL,UAAA,EAAY,YAAA;AAAA,MACZ,MAAA,EAAQ,yBAAyB,SAAS;AAAA,KAC5C;AAAA,EACF,CAAA,SAAE;AACA,IAAA,iBAAA,EAAkB;AAAA,EACpB;AACF;;;ACnuBA,SAASC,oBAAmB,GAAA,EAAiC;AAC3D,EAAA,IAAI,OAAO,OAAA,KAAY,WAAA,IAAe,CAAC,QAAQ,GAAA,EAAK;AAClD,IAAA,OAAO,MAAA;AAAA,EACT;AAEA,EAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,GAAA,CAAI,GAAG,CAAA;AAC7B,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,IAAA,OAAO,MAAA;AAAA,EACT;AAEA,EAAA,MAAM,OAAA,GAAU,MAAM,IAAA,EAAK;AAC3B,EAAA,OAAO,OAAA,CAAQ,MAAA,GAAS,CAAA,GAAI,OAAA,GAAU,MAAA;AACxC;AAEA,SAAS,mBAAmB,GAAA,EAAoB;AAC9C,EAAA,MAAM,IAAI,KAAA;AAAA,IACR,CAAA,yBAAA,EAA4B,GAAG,CAAA,0BAAA,EAA6B,GAAG,CAAA,4BAAA;AAAA,GACjE;AACF;AAEA,SAAS,eAAA,CACP,GAAA,EACA,OAAA,EACA,QAAA,EACe;AACf,EAAA,MAAM,QAAA,GAAWA,oBAAmB,GAAG,CAAA;AACvC,EAAA,IAAI,aAAa,MAAA,EAAW;AAC1B,IAAA,IAAI,OAAA,EAAS,YAAY,MAAA,EAAW;AAClC,MAAA,OAAO,OAAA,CAAQ,OAAA;AAAA,IACjB;AACA,IAAA,IAAI,SAAS,QAAA,EAAU;AACrB,MAAA,OAAO,MAAA;AAAA,IACT;AACA,IAAA,OAAO,mBAAmB,GAAG,CAAA;AAAA,EAC/B;AAEA,EAAA,OAAO,SAAS,QAAQ,CAAA;AAC1B;AAEA,SAAS,gBAAA,CAAiB,KAAa,OAAA,EAAyD;AAC9F,EAAA,OAAO,eAAA,CAAgB,GAAA,EAAK,OAAA,EAAS,CAAA,KAAA,KAAS,KAAK,CAAA;AACrD;AAEA,SAAS,iBAAA,CAAkB,KAAa,OAAA,EAA2D;AACjG,EAAA,OAAO,gBAAgB,GAAA,EAAK,OAAA,EAAS,WAASnC,iBAAAA,CAAiB,KAAA,EAAO,KAAK,CAAC,CAAA;AAC9E;AAEA,SAAS,cAAA,CAAe,KAAa,OAAA,EAAyD;AAC5F,EAAA,OAAO,eAAA,CAAgB,GAAA,EAAK,OAAA,EAAS,CAAA,KAAA,KAAS;AAC5C,IAAA,MAAM,SAAA,GAAY,SAAS,SAAA,IAAa,GAAA;AACxC,IAAA,OAAO,KAAA,CACJ,MAAM,SAAS,CAAA,CACf,IAAI,CAAA,KAAA,KAAS,KAAA,CAAM,IAAA,EAAM,CAAA,CACzB,MAAA,CAAO,CAAC,KAAA,EAAO,KAAA,EAAO,YAAY,KAAA,CAAM,MAAA,GAAS,KAAK,OAAA,CAAQ,OAAA,CAAQ,KAAK,CAAA,KAAM,KAAK,CAAA;AAAA,EAC3F,CAAC,GAAG,KAAA,EAAM;AACZ;AAEA,SAAS,cAAA,CAAkB,KAAa,OAAA,EAAqD;AAC3F,EAAA,OAAO,eAAA,CAAgB,GAAA,EAAK,OAAA,EAAS,CAAA,KAAA,KAAS;AAC5C,IAAA,IAAI;AACF,MAAA,OAAO,IAAA,CAAK,MAAM,KAAK,CAAA;AAAA,IACzB,SAAS,KAAA,EAAO;AACd,MAAA,MAAM,UAAU,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK,CAAA;AACrE,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,yBAAA,EAA4B,GAAG,CAAA,0BAAA,EAA6B,OAAO,CAAA,CAAE,CAAA;AAAA,IACvF;AAAA,EACF,CAAC,CAAA;AACH;AAEA,SAAS,eAAA,CACP,GAAA,EACA,aAAA,EACA,OAAA,EACe;AACf,EAAA,OAAO,eAAA,CAAgB,GAAA,EAAK,OAAA,EAAS,CAAA,KAAA,KAAS;AAC5C,IAAA,IAAI,aAAA,CAAc,QAAA,CAAS,KAAU,CAAA,EAAG;AACtC,MAAA,OAAO,KAAA;AAAA,IACT;AAEA,IAAA,MAAM,IAAI,KAAA;AAAA,MACR,CAAA,yBAAA,EAA4B,GAAG,CAAA,iBAAA,EAAoB,aAAA,CAAc,KAAK,IAAI,CAAC,eAAe,KAAK,CAAA,CAAA;AAAA,KACjG;AAAA,EACF,CAAC,CAAA;AACH;AAOA,SAAS,kBAAA,CACP,KACA,OAAA,EACoB;AACpB,EAAA,OAAO,gBAAA,CAAiB,KAAK,OAAO,CAAA;AACtC;AAOA,SAAS,mBAAA,CACP,KACA,OAAA,EACqB;AACrB,EAAA,OAAO,iBAAA,CAAkB,KAAK,OAAO,CAAA;AACvC;AAOA,SAAS,gBAAA,CACP,KACA,OAAA,EACsB;AACtB,EAAA,OAAO,cAAA,CAAe,KAAK,OAAO,CAAA;AACpC;AAOA,SAAS,gBAAA,CACP,KACA,OAAA,EACe;AACf,EAAA,OAAO,cAAA,CAAe,KAAK,OAAO,CAAA;AACpC;AAYA,SAAS,iBAAA,CACP,GAAA,EACA,aAAA,EACA,OAAA,EACe;AACf,EAAA,OAAO,eAAA,CAAgB,GAAA,EAAK,aAAA,EAAe,OAAO,CAAA;AACpD;AAOO,IAAM,YAAA,GAAe,MAAA,CAAO,MAAA,CAAO,kBAAA,EAAoB;AAAA,EAC5D,OAAA,EAAS,mBAAA;AAAA,EACT,IAAA,EAAM,gBAAA;AAAA,EACN,IAAA,EAAM,gBAAA;AAAA,EACN,KAAA,EAAO;AACT,CAAC;;;ACxMM,SAAS,QAAQ,KAAA,EAAuB;AAC7C,EAAA,OAAO,KAAA,CACJ,WAAA,EAAY,CACZ,OAAA,CAAQ,aAAA,EAAe,GAAG,CAAA,CAC1B,OAAA,CAAQ,UAAA,EAAY,EAAE,CAAA,CACtB,KAAA,CAAM,GAAG,EAAE,CAAA;AAChB;;;ACHA,IAAM,kBAAA,GAAqB,4BAAA;AAC3B,IAAM,oBAAA,uBAA2B,GAAA,CAAI;AAAA,EACnC,OAAA;AAAA,EACA,MAAA;AAAA,EACA,OAAA;AAAA,EACA,OAAA;AAAA,EACA,OAAA;AAAA,EACA,UAAA;AAAA,EACA,UAAA;AAAA,EACA,SAAA;AAAA,EACA,QAAA;AAAA,EACA,IAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA,OAAA;AAAA,EACA,SAAA;AAAA,EACA,KAAA;AAAA,EACA,UAAA;AAAA,EACA,IAAA;AAAA,EACA,QAAA;AAAA,EACA,IAAA;AAAA,EACA,YAAA;AAAA,EACA,KAAA;AAAA,EACA,MAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA;AAAA,EACA,QAAA;AAAA,EACA,MAAA;AAAA,EACA,OAAA;AAAA,EACA,MAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA;AAAA,EACA,KAAA;AAAA,EACA,MAAA;AAAA,EACA,OAAA;AAAA,EACA,MAAA;AAAA,EACA,IAAA;AAAA,EACA,YAAA;AAAA,EACA,WAAA;AAAA,EACA,KAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,WAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA;AAAA,EACA,KAAA;AAAA,EACA,SAAA;AAAA,EACA,aAAA;AAAA,EACA,SAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA,QAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA;AAAA,EACA;AACF,CAAC,CAAA;AAED,SAAS,WAAW,KAAA,EAAyB;AAC3C,EAAA,OAAO,KAAA,CACJ,IAAA,EAAK,CACL,OAAA,CAAQ,oBAAA,EAAsB,OAAO,CAAA,CACrC,OAAA,CAAQ,2BAAA,EAA6B,OAAO,CAAA,CAC5C,OAAA,CAAQ,gBAAA,EAAkB,GAAG,CAAA,CAC7B,KAAA,CAAM,GAAG,CAAA,CACT,GAAA,CAAI,CAAA,IAAA,KAAQ,IAAA,CAAK,IAAA,EAAM,CAAA,CACvB,MAAA,CAAO,CAAA,IAAA,KAAQ,IAAA,CAAK,MAAA,GAAS,CAAC,CAAA;AACnC;AAEA,SAAS,WAAW,IAAA,EAAsB;AACxC,EAAA,OAAO,KAAK,MAAA,GAAS,CAAA,GAAI,CAAA,EAAG,IAAA,CAAK,CAAC,CAAA,CAAE,WAAA,EAAa,CAAA,EAAG,KAAK,KAAA,CAAM,CAAC,CAAA,CAAE,WAAA,EAAa,CAAA,CAAA,GAAK,IAAA;AACtF;AAEA,SAAS,qBAAA,CAAsB,WAAmB,QAAA,EAA0B;AAC1E,EAAA,MAAM,UAAA,GAAa,SAAA,CAAU,MAAA,GAAS,CAAA,GAAI,SAAA,GAAY,QAAA;AACtD,EAAA,MAAM,WAAW,QAAA,CAAS,IAAA,CAAK,UAAU,CAAA,GAAI,CAAA,CAAA,EAAI,UAAU,CAAA,CAAA,GAAK,UAAA;AAChE,EAAA,IAAI,oBAAA,CAAqB,GAAA,CAAI,QAAQ,CAAA,EAAG;AACtC,IAAA,OAAO,GAAG,QAAQ,CAAA,MAAA,CAAA;AAAA,EACpB;AACA,EAAA,OAAO,QAAA;AACT;AAEO,SAAS,gBAAA,CAAiB,OAAe,KAAA,EAA4B;AAC1E,EAAA,MAAM,KAAA,GAAQ,WAAW,KAAK,CAAA;AAC9B,EAAA,IAAI,KAAA,CAAM,WAAW,CAAA,EAAG;AACtB,IAAA,OAAO,EAAA;AAAA,EACT;AAEA,EAAA,QAAQ,KAAA;AAAO,IACb,KAAK,UAAA;AACH,MAAA,OAAO,KAAA;AAAA,IACT,KAAK,OAAA,EAAS;AACZ,MAAA,MAAM,CAAC,KAAA,EAAO,GAAG,IAAI,CAAA,GAAI,KAAA;AACzB,MAAA,OAAO,CAAA,EAAG,KAAA,CAAM,WAAA,EAAa,CAAA,EAAG,IAAA,CAAK,GAAA,CAAI,UAAU,CAAA,CAAE,IAAA,CAAK,EAAE,CAAC,CAAA,CAAA;AAAA,IAC/D;AAAA,IACA,KAAK,QAAA;AACH,MAAA,OAAO,KAAA,CAAM,GAAA,CAAI,UAAU,CAAA,CAAE,KAAK,EAAE,CAAA;AAAA,IACtC,KAAK,OAAA;AACH,MAAA,OAAO,KAAA,CAAM,IAAI,CAAA,IAAA,KAAQ,IAAA,CAAK,aAAa,CAAA,CAAE,KAAK,GAAG,CAAA;AAAA,IACvD,KAAK,OAAA;AACH,MAAA,OAAO,OAAA,CAAQ,KAAA,CAAM,IAAA,CAAK,GAAG,CAAC,CAAA;AAAA,IAChC;AACE,MAAA,OAAO,KAAA;AAAA;AAEb;AAEO,SAAS,gBAAA,CAAiB,KAAA,EAAe,KAAA,EAAoB,QAAA,GAAW,OAAA,EAAiB;AAC9F,EAAA,MAAM,WAAA,GAAc,gBAAA,CAAiB,KAAA,EAAO,KAAK,CAAA;AACjD,EAAA,MAAM,UAAA,GAAa,YAChB,OAAA,CAAQ,kBAAA,EAAoB,GAAG,CAAA,CAC/B,OAAA,CAAQ,YAAY,EAAE,CAAA;AACzB,EAAA,MAAM,aAAA,GAAgB,UAAA,CAAW,KAAK,CAAA,CAAE,KAAK,EAAE,CAAA;AAC/C,EAAA,OAAO,qBAAA;AAAA,IACL,UAAA,CAAW,MAAA,GAAS,CAAA,GAAI,UAAA,GAAa,aAAA;AAAA,IACrC;AAAA,GACF;AACF;AAEO,SAAS,uBAAuB,YAAA,EAA8B;AACnE,EAAA,IAAI,kBAAA,CAAmB,KAAK,YAAY,CAAA,IAAK,CAAC,oBAAA,CAAqB,GAAA,CAAI,YAAY,CAAA,EAAG;AACpF,IAAA,OAAO,YAAA;AAAA,EACT;AACA,EAAA,OAAO,CAAA,CAAA,EAAI,aAAa,OAAA,CAAQ,KAAA,EAAO,MAAM,CAAA,CAAE,OAAA,CAAQ,IAAA,EAAM,KAAK,CAAC,CAAA,CAAA,CAAA;AACrE;AAEO,SAAS,oBAAoB,KAAA,EAAuB;AACzD,EAAA,OAAO,CAAA,CAAA,EAAI,MAAM,OAAA,CAAQ,KAAA,EAAO,MAAM,CAAA,CAAE,OAAA,CAAQ,IAAA,EAAM,KAAK,CAAC,CAAA,CAAA,CAAA;AAC9D;;;ACtIA,IAAM,YAAA,uBAAmB,GAAA,CAAI;AAAA,EAC3B,MAAA;AAAA,EACA,MAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,UAAA;AAAA,EACA,SAAA;AAAA,EACA,MAAA;AAAA,EACA;AACF,CAAC,CAAA;AAED,IAAM,oBAAA,uBAA2B,GAAA,CAAI;AAAA,EACnC,MAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA,WAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA;AACF,CAAC,CAAA;AAED,IAAM,UAAA,uBAAiB,GAAA,CAAI;AAAA,EACzB,MAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA,mBAAA;AAAA,EACA,MAAA;AAAA,EACA,QAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA;AAAA,EACA,QAAA;AAAA,EACA,WAAA;AAAA,EACA,aAAA;AAAA,EACA,UAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA;AAAA,EACA,SAAA;AAAA,EACA,UAAA;AAAA,EACA,OAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA;AAAA,EACA,KAAA;AAAA,EACA,MAAA;AAAA,EACA,SAAA;AAAA,EACA,QAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA;AAAA,EACA,KAAA;AAAA,EACA,UAAA;AAAA,EACA,SAAA;AAAA,EACA;AACF,CAAC,CAAA;AAED,SAAS,mBAAmB,MAAA,EAAqC;AAC/D,EAAA,MAAM,aAAa,MAAA,CAAO,OAAA,IAAW,OAAO,QAAA,EAAU,WAAA,GAAc,IAAA,EAAK;AACzE,EAAA,IAAI,OAAO,eAAA,GAAkB,CAAA,IAAK,SAAA,CAAU,UAAA,CAAW,GAAG,CAAA,EAAG;AAC3D,IAAA,OAAO,SAAA,CAAU,MAAM,CAAC,CAAA;AAAA,EAC1B;AACA,EAAA,OAAO,SAAA;AACT;AAEA,SAAS,aAAA,CAAc,UAAkB,KAAA,EAAuB;AAC9D,EAAA,IAAI,OAAA,GAAU,QAAA;AACd,EAAA,KAAA,IAAS,KAAA,GAAQ,CAAA,EAAG,KAAA,GAAQ,KAAA,EAAO,SAAS,CAAA,EAAG;AAC7C,IAAA,OAAA,GAAU,SAAS,OAAO,CAAA,CAAA,CAAA;AAAA,EAC5B;AACA,EAAA,OAAO,OAAA;AACT;AAEA,SAAS,kBAAkB,MAAA,EAAqC;AAC9D,EAAA,MAAM,KAAA,GAAQ,mBAAmB,MAAM,CAAA;AAEvC,EAAA,IAAI,YAAA,CAAa,GAAA,CAAI,KAAK,CAAA,EAAG;AAC3B,IAAA,OAAO,QAAA;AAAA,EACT;AAEA,EAAA,IAAI,oBAAA,CAAqB,GAAA,CAAI,KAAK,CAAA,EAAG;AACnC,IAAA,OAAO,QAAA;AAAA,EACT;AAEA,EAAA,IAAI,KAAA,KAAU,MAAA,IAAU,KAAA,KAAU,SAAA,EAAW;AAC3C,IAAA,OAAO,SAAA;AAAA,EACT;AAEA,EAAA,IAAI,UAAU,OAAA,EAAS;AACrB,IAAA,OAAO,QAAA;AAAA,EACT;AAEA,EAAA,IAAI,KAAA,KAAU,MAAA,IAAU,KAAA,KAAU,OAAA,EAAS;AACzC,IAAA,OAAO,yBAAA;AAAA,EACT;AAEA,EAAA,IAAI,UAAA,CAAW,GAAA,CAAI,KAAK,CAAA,EAAG;AACzB,IAAA,OAAO,QAAA;AAAA,EACT;AAEA,EAAA,IAAI,MAAM,QAAA,CAAS,OAAO,KAAK,KAAA,CAAM,QAAA,CAAS,YAAY,CAAA,EAAG;AAC3D,IAAA,OAAO,QAAA;AAAA,EACT;AAEA,EAAA,OAAO,SAAA;AACT;AAEA,SAAS,qBAAqB,MAAA,EAAqC;AACjE,EAAA,IAAI,MAAA,CAAO,aAAa,MAAA,EAAQ;AAC9B,IAAA,MAAM,MAAA,GAAS,MAAA,CAAO,UAAA,IAAc,EAAC;AACrC,IAAA,IAAI,MAAA,CAAO,WAAW,CAAA,EAAG;AACvB,MAAA,OAAO,QAAA;AAAA,IACT;AACA,IAAA,OAAO,OAAO,GAAA,CAAI,CAAA,KAAA,KAAS,CAAA,CAAA,EAAI,KAAA,CAAM,QAAQ,KAAA,EAAO,MAAM,CAAA,CAAE,OAAA,CAAQ,MAAM,KAAK,CAAC,CAAA,CAAA,CAAG,CAAA,CAAE,KAAK,KAAK,CAAA;AAAA,EACjG;AAEA,EAAA,IAAI,MAAA,CAAO,aAAa,WAAA,EAAa;AACnC,IAAA,OAAO,yBAAA;AAAA,EACT;AAEA,EAAA,IAAI,MAAA,CAAO,aAAa,QAAA,IAAY,MAAA,CAAO,aAAa,OAAA,IAAW,MAAA,CAAO,aAAa,YAAA,EAAc;AACnG,IAAA,OAAO,QAAA;AAAA,EACT;AAEA,EAAA,OAAO,kBAAkB,MAAM,CAAA;AACjC;AAEO,SAAS,0BAA0B,MAAA,EAAqC;AAC7E,EAAA,MAAM,QAAA,GAAW,qBAAqB,MAAM,CAAA;AAC5C,EAAA,IAAI,CAAC,MAAA,CAAO,eAAA,IAAmB,MAAA,CAAO,mBAAmB,CAAA,EAAG;AAC1D,IAAA,OAAO,QAAA;AAAA,EACT;AACA,EAAA,OAAO,aAAA,CAAc,QAAA,EAAU,MAAA,CAAO,eAAe,CAAA;AACvD;;;AC1HA,SAAS,iBAAA,CAAkB,QAAgB,KAAA,EAAuC;AAChF,EAAA,OAAO;AAAA,IACL,CAAC,MAAM,GAAG,KAAA;AAAA,IACV,CAAC,CAAA,EAAG,MAAM,QAAQ,GAAG,gBAAA,CAAiB,OAAO,OAAO,CAAA;AAAA,IACpD,CAAC,CAAA,EAAG,MAAM,SAAS,GAAG,gBAAA,CAAiB,OAAO,QAAQ,CAAA;AAAA,IACtD,CAAC,CAAA,EAAG,MAAM,QAAQ,GAAG,gBAAA,CAAiB,OAAO,OAAO,CAAA;AAAA,IACpD,CAAC,CAAA,EAAG,MAAM,QAAQ,GAAG,gBAAA,CAAiB,OAAO,OAAO;AAAA,GACtD;AACF;AAEA,SAAS,cAAA,CAAe,UAAkB,QAAA,EAA0C;AAClF,EAAA,OAAO,QAAA,CAAS,OAAA,CAAQ,sBAAA,EAAwB,CAAC,QAAQ,KAAA,KAAU;AACjE,IAAA,IAAI,EAAE,SAAS,QAAA,CAAA,EAAW;AACxB,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,2BAAA,EAA8B,KAAK,CAAA,eAAA,EAAkB,QAAQ,CAAA,CAAA,CAAG,CAAA;AAAA,IAClF;AACA,IAAA,OAAO,SAAS,KAAK,CAAA;AAAA,EACvB,CAAC,CAAA;AACH;AAEA,SAAS,qBAAA,CACP,YACA,YAAA,EACwB;AACxB,EAAA,MAAM,QAAA,GAAmC;AAAA,IACvC,GAAG;AAAA,GACL;AACA,EAAA,MAAM,oBAAoB,IAAI,GAAA,CAAI,MAAA,CAAO,IAAA,CAAK,UAAU,CAAC,CAAA;AAEzD,EAAA,MAAM,UAAU,MAAA,CAAO,OAAA,CAAQ,YAAA,CAAa,cAAA,IAAkB,EAAE,CAAA;AAChE,EAAA,KAAA,IAAS,QAAQ,CAAA,EAAG,KAAA,GAAQ,OAAA,CAAQ,MAAA,EAAQ,SAAS,CAAA,EAAG;AACtD,IAAA,MAAM,CAAC,GAAA,EAAK,KAAK,CAAA,GAAI,QAAQ,KAAK,CAAA;AAClC,IAAA,IAAI,iBAAA,CAAkB,GAAA,CAAI,GAAG,CAAA,EAAG;AAC9B,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,OAAA,GAAU,KAAA;AACd,IAAA,KAAA,IAAS,KAAA,GAAQ,CAAA,EAAG,KAAA,GAAQ,CAAA,EAAG,SAAS,CAAA,EAAG;AACzC,MAAA,MAAM,IAAA,GAAO,cAAA,CAAe,OAAA,EAAS,QAAQ,CAAA;AAC7C,MAAA,IAAI,SAAS,OAAA,EAAS;AACpB,QAAA;AAAA,MACF;AACA,MAAA,OAAA,GAAU,IAAA;AAAA,IACZ;AACA,IAAA,QAAA,CAAS,GAAG,CAAA,GAAI,OAAA;AAAA,EAClB;AAEA,EAAA,OAAO,QAAA;AACT;AAEO,SAAS,gBAAA,CACd,QAAA,EACA,OAAA,EACA,YAAA,EACQ;AACR,EAAA,MAAM,UAAA,GAAqC;AAAA,IACzC,UAAU,OAAA,CAAQ,QAAA;AAAA,IAClB,MAAM,OAAA,CAAQ,IAAA;AAAA,IACd,GAAG,iBAAA,CAAkB,UAAA,EAAY,OAAA,CAAQ,QAAQ,CAAA;AAAA,IACjD,GAAG,iBAAA,CAAkB,QAAA,EAAU,OAAA,CAAQ,MAAM,CAAA;AAAA,IAC7C,GAAG,iBAAA,CAAkB,OAAA,EAAS,OAAA,CAAQ,KAAK;AAAA,GAC7C;AAEA,EAAA,MAAM,MAAA,GAAS,qBAAA,CAAsB,UAAA,EAAY,YAAY,CAAA;AAC7D,EAAA,OAAO,cAAA,CAAe,UAAU,MAAM,CAAA;AACxC;;;ACTO,SAAS,cAAc,SAAA,EAA2B;AACvD,EAAA,OAAO,SAAA,CAAU,OAAA,CAAQ,KAAA,EAAO,GAAG,CAAA;AACrC;AAEA,SAAS,2BAA2B,SAAA,EAA2B;AAC7D,EAAA,OAAO,SAAA,CAAU,OAAA,CAAQ,UAAA,EAAY,EAAE,CAAA;AACzC;AAEO,SAAS,kBAAA,CAAmB,UAAkB,UAAA,EAA4B;AAC/E,EAAA,MAAM,YAAA,GAAe,0BAAA;AAAA,IACnB,aAAA,CAAcoC,WAAM,QAAA,CAASA,UAAA,CAAM,QAAQ,QAAQ,CAAA,EAAG,UAAU,CAAC;AAAA,GACnE;AACA,EAAA,OAAO,aAAa,UAAA,CAAW,GAAG,CAAA,GAAI,YAAA,GAAe,KAAK,YAAY,CAAA,CAAA;AACxE;AAEO,SAAS,iBAAA,CACd,MAAA,EACA,MAAA,EACA,MAAA,EACQ;AACR,EAAA,OAAO,cAAc,gBAAA,CAAiB,MAAA,EAAQ,MAAA,EAAQ,MAAA,CAAO,MAAM,CAAC,CAAA;AACtE;AAEO,SAAS,gBAAgB,GAAA,EAAqB;AACnD,EAAA,OAAO,uBAAuB,GAAG,CAAA;AACnC;AAEO,SAAS,sBAAsB,QAAA,EAAyC;AAC7E,EAAA,MAAM,OAAA,GAAU,SAAS,OAAA,GACrB,CAAA;AAAA;AAAA,gBAAA,EAEY,mBAAA,CAAoB,QAAA,CAAS,OAAA,CAAQ,MAAM,CAAC,CAAA;AAAA,eAAA,EAC7C,mBAAA,CAAoB,QAAA,CAAS,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,wBAAA,EAClC,QAAA,CAAS,OAAA,CAAQ,aAAA,CAAc,GAAA,CAAI,CAAA,KAAA,KAAS,mBAAA,CAAoB,KAAK,CAAC,CAAA,CAAE,IAAA,CAAK,IAAI,CAAC,CAAA;AAAA,wBAAA,EAClF,QAAA,CAAS,OAAA,CAAQ,aAAA,CAAc,GAAA,CAAI,CAAA,KAAA,KAAS,mBAAA,CAAoB,KAAK,CAAC,CAAA,CAAE,IAAA,CAAK,IAAI,CAAC,CAAA;AAAA,OAAA,CAAA,GAEtG,EAAA;AAEJ,EAAA,OAAO,CAAA;AAAA,YAAA,EACK,mBAAA,CAAoB,QAAA,CAAS,IAAI,CAAC,CAAA;AAAA,sBAAA,EACxB,QAAA,CAAS,aAAA,CAAc,GAAA,CAAI,CAAA,KAAA,KAAS,mBAAA,CAAoB,KAAK,CAAC,CAAA,CAAE,IAAA,CAAK,IAAI,CAAC,CAAA;AAAA,oBAAA,EAC5E,mBAAA,CAAoB,QAAA,CAAS,YAAY,CAAC,CAAA;AAAA,mBAAA,EAC3C,mBAAA,CAAoB,QAAA,CAAS,WAAW,CAAC,CAAA;AAAA,sBAAA,EACtC,QAAA,CAAS,aAAA,CAAc,GAAA,CAAI,CAAA,KAAA,KAAS,mBAAA,CAAoB,KAAK,CAAC,CAAA,CAAE,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,EAAI,OAAO;AAAA,KAAA,CAAA;AAE7G;AAEO,SAAS,qBACd,UAAA,EACmB;AACnB,EAAA,MAAM,WAAA,GAAc,UAAA,CAAW,MAAA,CAC5B,GAAA,CAAI,CAAA,eAAA,KAAmB;AACtB,IAAA,MAAM,UAAA,GAAa,kBAAA,CAAmB,UAAA,CAAW,QAAA,EAAU,gBAAgB,QAAQ,CAAA;AACnF,IAAA,OAAO,CAAA,SAAA,EAAY,eAAA,CAAgB,eAAe,CAAA,SAAA,EAAY,UAAU,CAAA,CAAA,CAAA;AAAA,EAC1E,CAAC,CAAA,CACA,IAAA,CAAK,IAAI,CAAA;AAEZ,EAAA,MAAM,eAAe,UAAA,CAAW,MAAA,CAC7B,GAAA,CAAI,CAAA,eAAA,KAAmB,KAAK,eAAA,CAAgB,eAAA,CAAgB,SAAS,CAAC,KAAK,eAAA,CAAgB,eAAe,CAAA,CAAE,CAAA,CAC5G,KAAK,KAAK,CAAA;AAEb,EAAA,MAAM,OAAA,GAAU,CAAA;AAAA,EAChB,WAAA,GAAc;AAAA,EAAK,WAAW;AAAA,CAAA,GAAO,IAAI;AAAA,aAAA,EAC5B,WAAW,eAAe,CAAA;AAAA,EACvC,YAAY;AAAA;AAAA,CAAA;AAIZ,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,QAAA;AAAA,IACN,MAAM,UAAA,CAAW,QAAA;AAAA,IACjB;AAAA,GACF;AACF;AAEO,SAAS,uBACd,UAAA,EACmB;AACnB,EAAA,MAAM,WAAA,GAAc,UAAA,CAAW,OAAA,CAC5B,GAAA,CAAI,CAAA,gBAAA,KAAoB;AACvB,IAAA,MAAM,UAAA,GAAa,kBAAA,CAAmB,UAAA,CAAW,QAAA,EAAU,iBAAiB,QAAQ,CAAA;AACpF,IAAA,OAAO,CAAA,SAAA,EAAY,gBAAA,CAAiB,eAAe,CAAA,SAAA,EAAY,UAAU,CAAA,CAAA,CAAA;AAAA,EAC3E,CAAC,CAAA,CACA,IAAA,CAAK,IAAI,CAAA;AAEZ,EAAA,MAAM,gBAAgB,UAAA,CAAW,OAAA,CAC9B,GAAA,CAAI,CAAA,gBAAA,KAAoB,KAAK,eAAA,CAAgB,gBAAA,CAAiB,UAAU,CAAC,KAAK,gBAAA,CAAiB,eAAe,CAAA,CAAE,CAAA,CAChH,KAAK,KAAK,CAAA;AAEb,EAAA,MAAM,OAAA,GAAU,CAAA;AAAA,EAChB,WAAA,GAAc;AAAA,EAAK,WAAW;AAAA,CAAA,GAAO,IAAI;AAAA,aAAA,EAC5B,WAAW,iBAAiB,CAAA;AAAA,EACzC,aAAa;AAAA;AAAA,CAAA;AAIb,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,UAAA;AAAA,IACN,MAAM,UAAA,CAAW,QAAA;AAAA,IACjB;AAAA,GACF;AACF;AAEO,SAAS,sBAAA,CACd,cACA,YAAA,EACA,iBAAA,EACA,mBACA,YAAA,EACA,WAAA,EACA,YAAA,EACA,YAAA,EACA,aAAA,EACmB;AACnB,EAAA,MAAM,kBAAA,GAAqB,kBAAA,CAAmB,YAAA,EAAc,YAAY,CAAA;AACxE,EAAA,MAAM,OAAA,GAAU,CAAA;AAAA,SAAA,EACP,iBAAiB,YAAY,kBAAkB,CAAA;;AAAA;AAAA,iBAAA,EAGvC,aAAa,CAAA;AAAA,eAAA,EACf,mBAAA,CAAoB,WAAW,CAAC,CAAA;AAAA,YAAA,EACnC,mBAAA,CAAoB,YAAY,CAAC,CAAA;AAAA,gBAAA,EAC7B,mBAAA,CAAoB,YAAY,CAAC,CAAA;AAAA,gBAAA,EACjC,mBAAA,CAAoB,YAAY,CAAC,CAAA;AAAA;;AAAA,aAAA,EAGpC,iBAAiB,CAAA;AAAA,EAAA,EAC5B,eAAA,CAAgB,YAAY,CAAC,CAAA,EAAA,EAAK,iBAAiB;AAAA;AAAA,CAAA;AAIrD,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,UAAA;AAAA,IACN,IAAA,EAAM,YAAA;AAAA,IACN;AAAA,GACF;AACF;AAEA,SAAS,uBAAuB,KAAA,EAA4B;AAC1D,EAAA,MAAM,IAAA,uBAAW,GAAA,EAA+B;AAChD,EAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,IAAI,CAAA;AACnC,IAAA,IAAI,QAAA,EAAU;AACZ,MAAA,MAAM,IAAI,KAAA;AAAA,QACR;AAAA,UACE,CAAA,8CAAA,EAAiD,KAAK,IAAI,CAAA,CAAA;AAAA,UAC1D,CAAA,WAAA,EAAc,QAAA,CAAS,IAAI,CAAA,KAAA,EAAQ,KAAK,IAAI,CAAA,CAAA,CAAA;AAAA,UAC5C;AAAA,SACF,CAAE,KAAK,GAAG;AAAA,OACZ;AAAA,IACF;AACA,IAAA,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,IAAA,EAAM,IAAI,CAAA;AAAA,EAC1B;AACF;AAEA,SAAS,sBAAA,CAAuB,WAAmB,UAAA,EAA4B;AAC7E,EAAA,MAAM,cAAA,GAAiB,cAAc,SAAS,CAAA;AAC9C,EAAA,MAAM,UAAA,GAAaA,UAAA,CAAM,KAAA,CAAM,cAAc,CAAA;AAC7C,EAAA,MAAM,aAAA,GAAgB,gBAAA,CAAiB,UAAA,EAAY,OAAO,CAAA;AAC1D,EAAA,IAAI,CAAC,aAAA,EAAe;AAClB,IAAA,OAAO,cAAA;AAAA,EACT;AAEA,EAAA,MAAM,GAAA,GAAM,UAAA,CAAW,GAAA,CAAI,MAAA,GAAS,CAAA,GAAI,GAAG,UAAA,CAAW,GAAG,CAAA,CAAA,EAAI,aAAa,CAAA,CAAA,GAAK,aAAA;AAC/E,EAAA,OAAO,cAAcA,UAAA,CAAM,IAAA,CAAK,GAAA,EAAK,UAAA,CAAW,IAAI,CAAC,CAAA;AACvD;AAEA,SAAS,sCACP,WAAA,EACe;AACf,EAAA,MAAM,kBAAkB,WAAA,CAAY,GAAA,CAAI,iBAAe,EAAE,GAAG,YAAW,CAAE,CAAA;AACzE,EAAA,MAAM,UAAA,uBAAiB,GAAA,EAAsB;AAE7C,EAAA,KAAA,IAAS,QAAQ,CAAA,EAAG,KAAA,GAAQ,eAAA,CAAgB,MAAA,EAAQ,SAAS,CAAA,EAAG;AAC9D,IAAA,MAAM,UAAA,GAAa,gBAAgB,KAAK,CAAA;AACxC,IAAA,MAAM,UAAU,UAAA,CAAW,GAAA,CAAI,UAAA,CAAW,QAAQ,KAAK,EAAC;AACxD,IAAA,OAAA,CAAQ,KAAK,KAAK,CAAA;AAClB,IAAA,UAAA,CAAW,GAAA,CAAI,UAAA,CAAW,QAAA,EAAU,OAAO,CAAA;AAAA,EAC7C;AAEA,EAAA,IAAI,oBAAA,GAAuB,KAAA;AAC3B,EAAA,KAAA,MAAW,OAAA,IAAW,UAAA,CAAW,MAAA,EAAO,EAAG;AACzC,IAAA,IAAI,OAAA,CAAQ,UAAU,CAAA,EAAG;AACvB,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,WAAA,GAAc,IAAI,GAAA,CAAI,OAAA,CAAQ,GAAA,CAAI,WAAS,eAAA,CAAgB,KAAK,CAAA,CAAE,UAAU,CAAC,CAAA;AACnF,IAAA,IAAI,WAAA,CAAY,QAAQ,CAAA,EAAG;AACzB,MAAA;AAAA,IACF;AAEA,IAAA,KAAA,MAAW,SAAS,OAAA,EAAS;AAC3B,MAAA,MAAM,UAAA,GAAa,gBAAgB,KAAK,CAAA;AACxC,MAAA,UAAA,CAAW,QAAA,GAAW,sBAAA,CAAuB,UAAA,CAAW,QAAA,EAAU,WAAW,UAAU,CAAA;AAAA,IACzF;AACA,IAAA,oBAAA,GAAuB,IAAA;AAAA,EACzB;AAEA,EAAA,IAAI,CAAC,oBAAA,EAAsB;AACzB,IAAA,OAAO,eAAA;AAAA,EACT;AAEA,EAAA,MAAM,eAAA,uBAAsB,GAAA,EAAY;AACxC,EAAA,KAAA,MAAW,cAAc,eAAA,EAAiB;AACxC,IAAA,IAAI,eAAA,CAAgB,GAAA,CAAI,UAAA,CAAW,QAAQ,CAAA,EAAG;AAC5C,MAAA,MAAM,IAAI,KAAA;AAAA,QACR;AAAA,UACE,CAAA,8CAAA,EAAiD,WAAW,QAAQ,CAAA,CAAA;AAAA,UACpE,kEAAA;AAAA,UACA;AAAA,SACF,CAAE,KAAK,GAAG;AAAA,OACZ;AAAA,IACF;AACA,IAAA,eAAA,CAAgB,GAAA,CAAI,WAAW,QAAQ,CAAA;AAAA,EACzC;AAEA,EAAA,OAAO,eAAA;AACT;AAEO,SAAS,0BACd,KAAA,EACoB;AACpB,EAAA,MAAM,EAAE,QAAA,EAAU,MAAA,EAAQ,qBAAA,EAAuB,mBAAA,EAAAC,sBAAoB,GAAI,KAAA;AACzE,EAAA,MAAM,eAAe,QAAA,CAAS,OAAA;AAC9B,EAAA,MAAM,eAAe,QAAA,CAAS,QAAA;AAC9B,EAAA,MAAM,mBAA6B,EAAC;AAEpC,EAAA,KAAA,MAAW,cAAc,MAAA,CAAO,IAAA,CAAK,SAAS,OAAO,CAAA,CAAE,MAAK,EAAG;AAC7D,IAAA,MAAM,MAAA,GAAS,QAAA,CAAS,OAAA,CAAQ,UAAU,CAAA;AAC1C,IAAA,KAAA,MAAW,aAAa,MAAA,CAAO,IAAA,CAAK,OAAO,MAAM,CAAA,CAAE,MAAK,EAAG;AACzD,MAAA,gBAAA,CAAiB,IAAA;AAAA,QACf,qBAAA,CAAsB;AAAA,UACpB,YAAA;AAAA,UACA,YAAA;AAAA,UACA,UAAA;AAAA,UACA,SAAA;AAAA,UACA,KAAA,EAAO,MAAA,CAAO,MAAA,CAAO,SAAS;AAAA,SAC/B;AAAA,OACH;AAAA,IACF;AAAA,EACF;AAEA,EAAA,MAAM,sBAAA,GAAyB,sCAAsC,gBAAgB,CAAA;AAErF,EAAA,IAAI,iBAAA,GAAwD,OAAO,IAAA,CAAK,QAAA,CAAS,OAAO,CAAA,CACrF,IAAA,EAAK,CACL,GAAA,CAAI,CAAA,UAAA,MAAe;AAAA,IAClB,UAAA;AAAA,IACA,QAAA,EAAU,iBAAA;AAAA,MACR,MAAA,CAAO,OAAO,OAAA,CAAQ,MAAA;AAAA,MACtB;AAAA,QACE,QAAA,EAAU,YAAA;AAAA,QACV,IAAA,EAAM,QAAA;AAAA,QACN,QAAA,EAAU,YAAA;AAAA,QACV,MAAA,EAAQ,UAAA;AAAA,QACR,KAAA,EAAO;AAAA,OACT;AAAA,MACA;AAAA,KACF;AAAA,IACA,eAAA,EAAiB,gBAAA;AAAA,MACf,GAAG,UAAU,CAAA,OAAA,CAAA;AAAA,MACb,OAAO,MAAA,CAAO,WAAA;AAAA,MACd;AAAA,KACF;AAAA,IACA,QAAQ,sBAAA,CAAuB,MAAA,CAAO,CAAA,KAAA,KAAS,KAAA,CAAM,eAAe,UAAU;AAAA,GAChF,CAAE,CAAA;AAEJ,EAAA,iBAAA,GAAoB,sCAAsC,iBAAiB,CAAA;AAE3E,EAAA,MAAM,kBAAA,GAAmF;AAAA,IACvF,QAAA,EAAU,iBAAA;AAAA,MACR,MAAA,CAAO,OAAO,OAAA,CAAQ,QAAA;AAAA,MACtB;AAAA,QACE,QAAA,EAAU,YAAA;AAAA,QACV,IAAA,EAAM,UAAA;AAAA,QACN,QAAA,EAAU,YAAA;AAAA,QACV,MAAA,EAAQ,OAAA;AAAA,QACR,KAAA,EAAO;AAAA,OACT;AAAA,MACA;AAAA,KACF;AAAA,IACA,iBAAA,EAAmB,gBAAA;AAAA,MACjB,GAAG,YAAY,CAAA,SAAA,CAAA;AAAA,MACf,OAAO,MAAA,CAAO,aAAA;AAAA,MACd;AAAA,KACF;AAAA,IACA,OAAA,EAAS;AAAA,GACX;AAEA,EAAA,MAAM,QAA6B,EAAC;AAEpC,EAAA,KAAA,MAAW,mBAAmB,sBAAA,EAAwB;AACpD,IAAA,KAAA,CAAM,IAAA,CAAKA,oBAAAA,CAAoB,eAAe,CAAC,CAAA;AAAA,EACjD;AAEA,EAAA,KAAA,MAAW,oBAAoB,iBAAA,EAAmB;AAChD,IAAA,KAAA,CAAM,IAAA,CAAK,oBAAA,CAAqB,gBAAgB,CAAC,CAAA;AAAA,EACnD;AAEA,EAAA,KAAA,CAAM,IAAA,CAAK,sBAAA,CAAuB,kBAAkB,CAAC,CAAA;AAErD,EAAA,IAAI,MAAA,CAAO,SAAS,YAAA,EAAc;AAChC,IAAA,MAAM,YAAA,GAAe,iBAAA;AAAA,MACnB,MAAA,CAAO,OAAO,OAAA,CAAQ,QAAA;AAAA,MACtB;AAAA,QACE,QAAA,EAAU,YAAA;AAAA,QACV,IAAA,EAAM,UAAA;AAAA,QACN,QAAA,EAAU,YAAA;AAAA,QACV,MAAA,EAAQ,OAAA;AAAA,QACR,KAAA,EAAO;AAAA,OACT;AAAA,MACA;AAAA,KACF;AACA,IAAA,KAAA,CAAM,IAAA;AAAA,MACJ,sBAAA;AAAA,QACE,YAAA;AAAA,QACA,kBAAA,CAAmB,QAAA;AAAA,QACnB,kBAAA,CAAmB,iBAAA;AAAA,QACnB,gBAAA,CAAiB,UAAA,EAAY,MAAA,CAAO,MAAA,CAAO,eAAe,UAAU,CAAA;AAAA,QACpE,YAAA;AAAA,QACA,QAAA,CAAS,WAAA;AAAA,QACT,OAAO,MAAA,CAAO,MAAA;AAAA,QACd,OAAO,MAAA,CAAO,MAAA;AAAA,QACd,OAAO,QAAA,CAAS;AAAA;AAClB,KACF;AAAA,EACF;AAEA,EAAA,sBAAA,CAAuB,KAAK,CAAA;AAE5B,EAAA,OAAO;AAAA,IACL,QAAA;AAAA,IACA;AAAA,GACF;AACF;;;AC/WA,IAAM,iBAAA,uBAAwB,GAAA,CAAI;AAAA,EAChC,MAAA;AAAA,EACA,MAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,UAAA;AAAA,EACA,SAAA;AAAA,EACA,MAAA;AAAA,EACA;AACF,CAAC,CAAA;AAED,IAAM,6BAAa,IAAI,GAAA,CAAI,CAAC,MAAA,EAAQ,OAAO,CAAC,CAAA;AAC5C,IAAM,gCAAgB,IAAI,GAAA,CAAI,CAAC,MAAA,EAAQ,SAAS,CAAC,CAAA;AACjD,IAAM,YAAA,uBAAmB,GAAA,CAAI;AAAA,EAC3B,MAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA,WAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,OAAA;AAAA,EACA;AACF,CAAC,CAAA;AAED,SAASC,oBAAmB,MAAA,EAAqC;AAC/D,EAAA,MAAM,aAAa,MAAA,CAAO,OAAA,IAAW,OAAO,QAAA,EAAU,WAAA,GAAc,IAAA,EAAK;AACzE,EAAA,IAAI,OAAO,eAAA,GAAkB,CAAA,IAAK,SAAA,CAAU,UAAA,CAAW,GAAG,CAAA,EAAG;AAC3D,IAAA,OAAO,SAAA,CAAU,MAAM,CAAC,CAAA;AAAA,EAC1B;AACA,EAAA,OAAO,SAAA;AACT;AAEA,SAAS,oBAAoB,MAAA,EAG3B;AACA,EAAA,MAAM,KAAA,GAAQA,oBAAmB,MAAM,CAAA;AACvC,EAAA,IAAI,MAAA;AACJ,EAAA,IAAI,UAAA;AAEJ,EAAA,IAAI,MAAA,CAAO,aAAa,MAAA,IAAU,MAAA,CAAO,cAAc,MAAA,CAAO,UAAA,CAAW,SAAS,CAAA,EAAG;AACnF,IAAA,MAAA,GAAS,aAAA;AACT,IAAA,UAAA,GAAa,CAAA,aAAA,EAAgB,MAAA,CAAO,UAAA,CAAW,GAAA,CAAI,CAAA,KAAA,KAAS,mBAAA,CAAoB,KAAK,CAAC,CAAA,CAAE,IAAA,CAAK,IAAI,CAAC,CAAA,WAAA,CAAA;AAAA,EACpG,CAAA,MAAA,IAAW,MAAA,CAAO,eAAA,GAAkB,CAAA,IAAK,UAAA,CAAW,IAAI,KAAK,CAAA,IAAK,MAAA,CAAO,QAAA,KAAa,WAAA,EAAa;AACjG,IAAA,MAAA,GAAS,MAAA;AACT,IAAA,UAAA,GAAa,CAAA,KAAA,EAAQ,yBAAA,CAA0B,MAAM,CAAC,CAAA,GAAA,CAAA;AAAA,EACxD,CAAA,MAAA,IAAW,aAAA,CAAc,GAAA,CAAI,KAAK,CAAA,EAAG;AACnC,IAAA,MAAA,GAAS,SAAA;AACT,IAAA,UAAA,GAAa,WAAA;AAAA,EACf,CAAA,MAAA,IAAW,iBAAA,CAAkB,GAAA,CAAI,KAAK,CAAA,EAAG;AACvC,IAAA,MAAA,GAAS,QAAA;AACT,IAAA,UAAA,GAAa,UAAA;AAAA,EACf,CAAA,MAAA,IAAW,YAAA,CAAa,GAAA,CAAI,KAAK,CAAA,EAAG;AAClC,IAAA,MAAA,GAAS,QAAA;AACT,IAAA,UAAA,GAAa,UAAA;AAAA,EACf,CAAA,MAAO;AACL,IAAA,MAAA,GAAS,QAAA;AACT,IAAA,UAAA,GAAa,UAAA;AAAA,EACf;AAEA,EAAA,IAAI,OAAO,UAAA,EAAY;AACrB,IAAA,UAAA,GAAa,GAAG,UAAU,CAAA,WAAA,CAAA;AAAA,EAC5B;AACA,EAAA,IAAI,OAAO,UAAA,EAAY;AACrB,IAAA,UAAA,GAAa,GAAG,UAAU,CAAA,YAAA,CAAA;AAAA,EAC5B;AACA,EAAA,IAAI,OAAO,WAAA,EAAa;AACtB,IAAA,UAAA,GAAa,GAAG,UAAU,CAAA,YAAA,CAAA;AAAA,EAC5B;AAEA,EAAA,OAAO,EAAE,QAAQ,UAAA,EAAW;AAC9B;AAEA,SAAS,mBAAA,CACP,YACA,MAAA,EACmB;AACnB,EAAA,MAAM,aAAA,mBAAgB,IAAI,GAAA,CAAY,CAAC,OAAO,CAAC,CAAA;AAC/C,EAAA,MAAM,WAAA,GAAc,MAAA,CAAO,OAAA,CAAQ,UAAA,CAAW,KAAA,CAAM,OAAO,CAAA,CACxD,GAAA,CAAI,CAAC,CAAC,UAAA,EAAY,MAAM,CAAA,KAAM;AAC7B,IAAA,MAAM,YAAA,GAAe,uBAAuB,UAAU,CAAA;AACtD,IAAA,MAAM,QAAA,GAAW,oBAAoB,MAAM,CAAA;AAC3C,IAAA,aAAA,CAAc,GAAA,CAAI,SAAS,MAAM,CAAA;AACjC,IAAA,OAAO,CAAA,IAAA,EAAO,YAAY,CAAA,EAAA,EAAK,QAAA,CAAS,UAAU,CAAA,CAAA;AAAA,EACpD,CAAC,CAAA,CACA,IAAA,CAAK,KAAK,CAAA;AAEb,EAAA,MAAM,gBAAA,GAAmB,MAAM,IAAA,CAAK,aAAa,EAAE,IAAA,EAAK,CAAE,KAAK,IAAI,CAAA;AACnE,EAAA,MAAM,kBAAA,GAAqB,CAAA,EAAG,UAAA,CAAW,cAAc,CAAA,WAAA,CAAA;AACvD,EAAA,MAAM,qBAAA,GAAwB,CAAA,EAAG,UAAA,CAAW,cAAc,CAAA,cAAA,CAAA;AAC1D,EAAA,MAAM,qBAAA,GAAwB,CAAA,EAAG,UAAA,CAAW,cAAc,CAAA,cAAA,CAAA;AAC1D,EAAA,MAAM,mBAAA,GAAsB,CAAA,EAAG,UAAA,CAAW,cAAc,CAAA,YAAA,CAAA;AAExD,EAAA,MAAM,eAAA,GAAkB,MAAA,CAAO,OAAA,CAAQ,UAAA,CAAW,MAAM,SAAS,CAAA;AACjE,EAAA,MAAM,sBAAsB,MAAA,CAAO,QAAA,CAAS,aAAA,IAAiB,eAAA,CAAgB,SAAS,CAAA,GAClF;AAAA,cAAA,EACU,WAAW,cAAc,CAAA;AAAA;AAAA,EAEvC,gBACC,GAAA,CAAI,CAAC,CAACC,YAAAA,EAAa,aAAa,MAAM,CAAA,IAAA,EAAO,eAAA,CAAgBA,YAAW,CAAC,CAAA,EAAA,EAAK,sBAAsB,aAAa,CAAC,EAAE,CAAA,CACpH,IAAA,CAAK,KAAK,CAAC;AAAA;AAAA;AAAA,CAAA,GAIR,EAAA;AAEJ,EAAA,MAAM,OAAA,GAAU,YAAY,gBAAgB,CAAA;AAAA;;AAAA,aAAA,EAG/B,WAAW,cAAc,CAAA,SAAA,EAAY,mBAAA,CAAoB,UAAA,CAAW,SAAS,CAAC,CAAA;AAAA,UAAA,EACjF,mBAAA,CAAoB,UAAA,CAAW,UAAU,CAAC,CAAA;AAAA;AAAA,EAEpD,WAAW;AAAA;AAAA,EAAA,EAET,WAAW,KAAA,CAAM,UAAA,CAAW,SAAS,CAAA,GACnC,CAAA,YAAA,EAAe,WAAW,KAAA,CAAM,UAAA,CAAW,IAAI,CAAA,KAAA,KAAS,mBAAA,CAAoB,KAAK,CAAC,CAAA,CAAE,KAAK,IAAI,CAAC,MAC9F,sBAAsB;AAAA,EAC1B,mBAAA,GAAsB,CAAA,EAAG,mBAAmB,CAAA,CAAA,GAAK,EAAE;AAAA,YAAA,EACvC,UAAA,CAAW,WAAW,CAAA,gBAAA,EAAmB,UAAA,CAAW,cAAc,CAAA;AAAA,YAAA,EAClE,UAAA,CAAW,cAAc,CAAA,mBAAA,EAAsB,UAAA,CAAW,cAAc,CAAA;AAAA,YAAA,EACxE,UAAA,CAAW,cAAc,CAAA,mBAAA,EAAsB,UAAA,CAAW,cAAc,CAAA;AAAA,YAAA,EACxE,UAAA,CAAW,kBAAkB,CAAA,uBAAA,EAA0B,UAAA,CAAW,cAAc,CAAA;;AAAA,aAAA,EAE/E,kBAAkB,CAAA,GAAA,EAAM,UAAA,CAAW,cAAc,CAAA;AAAA,aAAA,EACjD,qBAAqB,CAAA,GAAA,EAAM,UAAA,CAAW,cAAc,CAAA;AAAA,aAAA,EACpD,qBAAqB,CAAA,GAAA,EAAM,UAAA,CAAW,cAAc,CAAA;AAAA,aAAA,EACpD,mBAAmB,CAAA,GAAA,EAAM,UAAA,CAAW,cAAc,CAAA;AAAA,CAAA;AAG/D,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,OAAA;AAAA,IACN,MAAM,UAAA,CAAW,QAAA;AAAA,IACjB;AAAA,GACF;AACF;AAEO,SAAS,yCAAA,CACd,UACA,MAAA,EACoB;AACpB,EAAA,MAAM,gBAAA,GAAmB,UAAA,IAAc,MAAA,GACnC,MAAA,GACA,yBAAyB,MAA+B,CAAA;AAC5D,EAAA,OAAO,yBAAA,CAA0B;AAAA,IAC/B,QAAA;AAAA,IACA,MAAA,EAAQ,gBAAA;AAAA,IACR,qBAAA,CAAsB,EAAE,YAAA,EAAc,YAAA,EAAc,YAAY,SAAA,EAAW,KAAA,EAAArC,QAAM,EAAG;AAClF,MAAA,MAAM,cAAA,GAAiB,gBAAA,CAAiB,SAAA,EAAW,UAAA,EAAY,OAAO,CAAA;AACtE,MAAA,OAAO;AAAA,QACL,UAAA;AAAA,QACA,SAAA;AAAA,QACA,QAAA,EAAU,iBAAA;AAAA,UACR,gBAAA,CAAiB,OAAO,OAAA,CAAQ,KAAA;AAAA,UAChC;AAAA,YACE,QAAA,EAAU,YAAA;AAAA,YACV,IAAA,EAAM,OAAA;AAAA,YACN,QAAA,EAAU,YAAA;AAAA,YACV,MAAA,EAAQ,UAAA;AAAA,YACR,KAAA,EAAO;AAAA,WACT;AAAA,UACA;AAAA,SACF;AAAA,QACA,WAAA,EAAa,CAAA,EAAG,gBAAA,CAAiB,CAAA,EAAG,UAAU,CAAA,CAAA,EAAI,SAAS,CAAA,CAAA,EAAI,gBAAA,CAAiB,MAAA,CAAO,SAAA,EAAW,OAAO,CAAC,CAAA,GAAA,CAAA;AAAA,QAC1G,cAAA,EAAgB,CAAA,EAAG,gBAAA,CAAiB,CAAA,EAAG,UAAU,CAAA,CAAA,EAAI,SAAS,CAAA,CAAA,EAAI,gBAAA,CAAiB,MAAA,CAAO,SAAA,EAAW,OAAO,CAAC,CAAA,MAAA,CAAA;AAAA,QAC7G,cAAA,EAAgB,CAAA,EAAG,gBAAA,CAAiB,CAAA,EAAG,UAAU,CAAA,CAAA,EAAI,SAAS,CAAA,CAAA,EAAI,gBAAA,CAAiB,MAAA,CAAO,SAAA,EAAW,OAAO,CAAC,CAAA,MAAA,CAAA;AAAA,QAC7G,kBAAA,EAAoB,CAAA,EAAG,gBAAA,CAAiB,CAAA,EAAG,UAAU,CAAA,CAAA,EAAI,SAAS,CAAA,CAAA,EAAI,gBAAA,CAAiB,MAAA,CAAO,SAAA,EAAW,OAAO,CAAC,CAAA,UAAA,CAAA;AAAA,QACjH,cAAA;AAAA,QACA,eAAA,EAAiB,cAAA;AAAA,QACjB,KAAA,EAAAA;AAAA,OACF;AAAA,IACF,CAAA;AAAA,IACA,mBAAA,EAAqB,CAAA,UAAA,KAAc,mBAAA,CAAoB,UAAA,EAAY,gBAAgB;AAAA,GACpF,CAAA;AACH;;;AC7KA,SAASmC,oBAAAA,CACP,YAAA,EACA,UAAA,EACA,MAAA,EACmB;AACnB,EAAA,MAAM,WAAA,GAAc,OAAO,MAAA,CAAO,UAAA,CAAW,MAAM,OAAO,CAAA,CACvD,IAAI,CAAA,MAAA,KAAU;AACb,IAAA,MAAM,YAAA,GAAe,sBAAA,CAAuB,MAAA,CAAO,IAAI,CAAA;AACvD,IAAA,MAAM,QAAA,GAAW,0BAA0B,MAAM,CAAA;AACjD,IAAA,MAAM,aAAa,MAAA,CAAO,UAAA;AAC1B,IAAA,MAAM,mBAAA,GAAsB,MAAA,CAAO,UAAA,GAAa,CAAA,EAAG,QAAQ,CAAA,OAAA,CAAA,GAAY,QAAA;AACvE,IAAA,OAAO,KAAK,YAAY,CAAA,EAAG,aAAa,GAAA,GAAM,EAAE,KAAK,mBAAmB,CAAA,CAAA;AAAA,EAC1E,CAAC,CAAA,CACA,IAAA,CAAK,IAAI,CAAA;AAEZ,EAAA,MAAM,aAAA,GAAgB,OAAO,MAAA,CAAO,UAAA,CAAW,MAAM,OAAO,CAAA,CACzD,GAAA,CAAI,CAAA,MAAA,KAAU,CAAA,MAAA,EAAS,eAAA,CAAgB,OAAO,IAAI,CAAC,KAAK,MAAA,CAAO,UAAA,GAAa,SAAS,OAAO,CAAA,CAAE,CAAA,CAC9F,IAAA,CAAK,KAAK,CAAA;AAEb,EAAA,MAAM,eAAA,GAAkB,MAAA,CAAO,OAAA,CAAQ,UAAA,CAAW,MAAM,SAAS,CAAA;AACjE,EAAA,MAAM,gBAAgB,MAAA,CAAO,QAAA,CAAS,aAAA,IAAiB,eAAA,CAAgB,SAAS,CAAA,GAC5E,CAAA;AAAA;AAAA,EAEJ,gBACC,GAAA,CAAI,CAAC,CAACE,YAAAA,EAAa,aAAa,MAAM,CAAA,MAAA,EAAS,eAAA,CAAgBA,YAAW,CAAC,CAAA,EAAA,EAAK,sBAAsB,aAAa,CAAC,EAAE,CAAA,CACtH,IAAA,CAAK,KAAK,CAAC;AAAA,KAAA,CAAA,GAER,EAAA;AAEJ,EAAA,MAAM,OAAA,GAAU,CAAA;;AAAA,iBAAA,EAEC,WAAW,WAAW,CAAA;AAAA,EACvC,WAAW;AAAA;;AAAA,YAAA,EAGC,UAAA,CAAW,cAAc,CAAA,WAAA,EAAc,UAAA,CAAW,WAAW,CAAA;AAAA,YAAA,EAC7D,UAAA,CAAW,cAAc,CAAA,WAAA,EAAc,UAAA,CAAW,cAAc,CAAA;;AAAA,aAAA,EAE/D,UAAA,CAAW,cAAc,CAAA,eAAA,EAAkB,UAAA,CAAW,WAAW,KAAK,UAAA,CAAW,cAAc,CAAA,EAAA,EAAK,UAAA,CAAW,cAAc,CAAA;AAAA;AAAA,cAAA,EAE5H,mBAAA,CAAoB,YAAY,CAAC,CAAA;AAAA,YAAA,EACnC,mBAAA,CAAoB,UAAA,CAAW,UAAU,CAAC,CAAA;AAAA,WAAA,EAC3C,mBAAA,CAAoB,UAAA,CAAW,SAAS,CAAC,CAAA;AAAA,eAAA,EACrC,mBAAA,CAAoB,GAAG,UAAA,CAAW,UAAU,IAAI,UAAA,CAAW,SAAS,EAAE,CAAC,CAAA;AAAA,iBAAA,EACrE,UAAA,CAAW,KAAA,CAAM,UAAA,CAAW,GAAA,CAAI,CAAA,KAAA,KAAS,mBAAA,CAAoB,KAAK,CAAC,CAAA,CAAE,IAAA,CAAK,IAAI,CAAC,CAAA;AAAA;AAAA,EAEhG,aAAa;AAAA,KAAA,EACR,aAAa;AAAA;AAAA;AAAA,CAAA;AAKlB,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,OAAA;AAAA,IACN,MAAM,UAAA,CAAW,QAAA;AAAA,IACjB;AAAA,GACF;AACF;AAKO,SAAS,6BAAA,CACd,UACA,MAAA,EACoB;AACpB,EAAA,MAAM,gBAAA,GAAmB,UAAA,IAAc,MAAA,GACnC,MAAA,GACA,yBAAyB,MAA+B,CAAA;AAC5D,EAAA,MAAM,gBAAA,GAAmB,2BAAA,CAA4B,QAAA,EAAU,gBAAA,CAAiB,MAAM,CAAA;AACtF,EAAA,IAAI,gBAAA,CAAiB,MAAA,CAAO,MAAA,KAAW,eAAA,EAAiB;AACtD,IAAA,OAAO,yCAAA,CAA0C,kBAAkB,gBAAgB,CAAA;AAAA,EACrF;AACA,EAAA,OAAO,yBAAA,CAA0B;AAAA,IAC/B,QAAA,EAAU,gBAAA;AAAA,IACV,MAAA,EAAQ,gBAAA;AAAA,IACR,qBAAA,CAAsB,EAAE,YAAA,EAAc,YAAA,EAAc,YAAY,SAAA,EAAW,KAAA,EAAArC,QAAM,EAAG;AAClF,MAAA,MAAM,cAAA,GAAiB,gBAAA;AAAA,QACrB,CAAA,EAAG,UAAU,CAAA,CAAA,EAAI,SAAS,CAAA,MAAA,CAAA;AAAA,QAC1B,iBAAiB,MAAA,CAAO,UAAA;AAAA,QACxB;AAAA,OACF;AACA,MAAA,OAAO;AAAA,QACL,UAAA;AAAA,QACA,SAAA;AAAA,QACA,QAAA,EAAU,iBAAA;AAAA,UACR,gBAAA,CAAiB,OAAO,OAAA,CAAQ,KAAA;AAAA,UAChC;AAAA,YACE,QAAA,EAAU,YAAA;AAAA,YACV,IAAA,EAAM,OAAA;AAAA,YACN,QAAA,EAAU,YAAA;AAAA,YACV,MAAA,EAAQ,UAAA;AAAA,YACR,KAAA,EAAO;AAAA,WACT;AAAA,UACA;AAAA,SACF;AAAA,QACA,WAAA,EAAa,CAAA,EAAG,gBAAA,CAAiB,CAAA,EAAG,UAAU,CAAA,CAAA,EAAI,SAAS,CAAA,CAAA,EAAI,gBAAA,CAAiB,MAAA,CAAO,SAAA,EAAW,OAAO,CAAC,CAAA,GAAA,CAAA;AAAA,QAC1G,cAAA,EAAgB,CAAA,EAAG,gBAAA,CAAiB,CAAA,EAAG,UAAU,CAAA,CAAA,EAAI,SAAS,CAAA,CAAA,EAAI,gBAAA,CAAiB,MAAA,CAAO,SAAA,EAAW,OAAO,CAAC,CAAA,MAAA,CAAA;AAAA,QAC7G,cAAA,EAAgB,CAAA,EAAG,gBAAA,CAAiB,CAAA,EAAG,UAAU,CAAA,CAAA,EAAI,SAAS,CAAA,CAAA,EAAI,gBAAA,CAAiB,MAAA,CAAO,SAAA,EAAW,OAAO,CAAC,CAAA,MAAA,CAAA;AAAA,QAC7G,cAAA;AAAA,QACA,eAAA,EAAiB,cAAA;AAAA,QACjB,KAAA,EAAAA;AAAA,OACF;AAAA,IACF,CAAA;AAAA,IACA,qBAAqB,CAAA,UAAA,KAAcmC,oBAAAA,CAAoB,gBAAA,CAAiB,QAAA,EAAU,YAAY,gBAAgB;AAAA,GAC/G,CAAA;AACH;;;ACnHA,IAAM,6BAAN,MAAiC;AAAA,EAC/B,YAA6B,MAAA,EAAsB;AAAtB,IAAA,IAAA,CAAA,MAAA,GAAA,MAAA;AAAA,EAAuB;AAAA,EAEpD,MAAM,UAA6C,KAAA,EAA6B;AAC9E,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,MAAA,CAAO,MAAS,KAAK,CAAA;AAC/C,IAAA,IAAI,OAAO,KAAA,IAAS,MAAA,CAAO,SAAS,GAAA,IAAO,MAAA,CAAO,UAAU,GAAA,EAAK;AAC/D,MAAA,MAAM,IAAI,MAAM,MAAA,CAAO,KAAA,EAAO,WAAW,CAAA,iCAAA,EAAoC,MAAA,CAAO,MAAM,CAAA,CAAE,CAAA;AAAA,IAC9F;AACA,IAAA,OAAO,MAAA,CAAO,QAAQ,EAAC;AAAA,EACzB;AAAA,EAEA,MAAM,aAAa,KAAA,EAA0C;AAC3D,IAAA,OAAO,IAAA,CAAK,UAA0B,KAAK,CAAA;AAAA,EAC7C;AAAA,EAEA,MAAM,WAAW,KAAA,EAA+C;AAC9D,IAAA,MAAM,IAAA,GAAO,MAAM,IAAA,CAAK,SAAA,CAAwB,KAAK,CAAA;AACrD,IAAA,MAAM,OAAA,uBAAc,GAAA,EAAsB;AAC1C,IAAA,KAAA,MAAW,OAAO,IAAA,EAAM;AACtB,MAAA,MAAM,WAAW,OAAA,CAAQ,GAAA,CAAI,GAAA,CAAI,QAAQ,KAAK,EAAC;AAC/C,MAAA,QAAA,CAAS,IAAA,CAAK,IAAI,UAAU,CAAA;AAC5B,MAAA,OAAA,CAAQ,GAAA,CAAI,GAAA,CAAI,QAAA,EAAU,QAAQ,CAAA;AAAA,IACpC;AACA,IAAA,OAAO,OAAA;AAAA,EACT;AAAA,EAEA,MAAM,iBAAiB,KAAA,EAA8C;AACnE,IAAA,OAAO,IAAA,CAAK,UAA8B,KAAK,CAAA;AAAA,EACjD;AAAA,EAEA,MAAM,iBAAiB,KAAA,EAA8C;AACnE,IAAA,OAAO,IAAA,CAAK,UAA8B,KAAK,CAAA;AAAA,EACjD;AACF,CAAA;AAEA,IAAM,6CAAN,MAAwF;AAAA,EAMtF,YAA6B,MAAA,EAAuC;AAAvC,IAAA,IAAA,CAAA,MAAA,GAAA,MAAA;AAC3B,IAAA,IAAA,CAAK,SAAS,YAAA,CAAa;AAAA,MACzB,EAAA,EAAI,EAAE,GAAA,EAAK,IAAA,CAAK,OAAO,UAAA,EAAW;AAAA,MAClC,GAAA,EAAK,KAAK,MAAA,CAAO,MAAA;AAAA,MACjB,OAAA,EAAS;AAAA,QACP,IAAA,EAAM,IAAA,CAAK,MAAA,CAAO,OAAA,IAAW;AAAA;AAC/B,KACD,CAAA;AACD,IAAA,IAAA,CAAK,OAAA,GAAU,wBAAA,CAAyB,IAAA,CAAK,MAAA,CAAO,OAAO,CAAA;AAAA,EAC7D;AAAA,EAdS,OAAA,GAAU,YAAA;AAAA,EAEF,MAAA;AAAA,EACA,OAAA;AAAA,EAajB,MAAM,QAAQ,OAAA,EAAuE;AACnF,IAAA,MAAM,OAAA,GACJ,OAAA,EAAS,OAAA,IAAW,OAAA,CAAQ,OAAA,CAAQ,MAAA,GAAS,CAAA,GACzC,wBAAA,CAAyB,OAAA,CAAQ,OAAO,CAAA,GACxC,IAAA,CAAK,OAAA;AAEX,IAAA,MAAM,aAAA,GAAgB,IAAI,0BAAA,CAA2B,IAAA,CAAK,MAAM,CAAA;AAChE,IAAA,MAAM,OAAA,GAAU,2BAA2B,OAAO,CAAA;AAElD,IAAA,MAAM,CAAC,YAAY,OAAA,EAAS,cAAA,EAAgB,cAAc,CAAA,GAAI,MAAM,QAAQ,GAAA,CAAI;AAAA,MAC9E,aAAA,CAAc,YAAA,CAAa,OAAA,CAAQ,OAAO,CAAA;AAAA,MAC1C,aAAA,CAAc,UAAA,CAAW,OAAA,CAAQ,KAAK,CAAA;AAAA,MACtC,aAAA,CAAc,gBAAA,CAAiB,OAAA,CAAQ,WAAW,CAAA;AAAA,MAClD,aAAA,CAAc,gBAAA,CAAiB,OAAA,CAAQ,WAAW;AAAA,KACnD,CAAA;AAED,IAAA,MAAM,SAAA,GAAY,IAAI,gCAAA,EAAiC;AACvD,IAAA,SAAA,CAAU,aAAA,CAAc,YAAY,OAAO,CAAA;AAC3C,IAAA,SAAA,CAAU,kBAAkB,cAAc,CAAA;AAC1C,IAAA,SAAA,CAAU,kBAAkB,cAAc,CAAA;AAC1C,IAAA,SAAA,CAAU,kBAAkB,cAAc,CAAA;AAE1C,IAAA,OAAO;AAAA,MACL,OAAA,EAAS,YAAA;AAAA,MACT,QAAA,EAAU,KAAK,MAAA,CAAO,QAAA;AAAA,MACtB,WAAA,EAAA,iBAAa,IAAI,IAAA,EAAK,EAAE,WAAA,EAAY;AAAA,MACpC,OAAA,EAAS,UAAU,SAAA;AAAU,KAC/B;AAAA,EACF;AACF,CAAA;AAEA,IAAM,8BAAN,MAAyE;AAAA,EAGvE,YAA6B,MAAA,EAAoC;AAApC,IAAA,IAAA,CAAA,MAAA,GAAA,MAAA;AAAA,EAAqC;AAAA,EAFzD,OAAA,GAAU,UAAA;AAAA,EAInB,MAAM,OAAA,GAA0C;AAC9C,IAAA,MAAM,IAAI,KAAA;AAAA,MACR,CAAA,kEAAA,EAAqE,IAAA,CAAK,MAAA,CAAO,QAAQ,CAAA,CAAA;AAAA,KAC3F;AAAA,EACF;AACF,CAAA;AAEA,SAAS,uBAAuB,MAAA,EAAmE;AACjG,EAAA,OAAO,mCAAA,CAAoC;AAAA,IACzC,kBAAkB,MAAA,CAAO,gBAAA;AAAA,IACzB,UAAU,MAAA,CAAO,QAAA;AAAA,IACjB,OAAA,EAAS,wBAAA,CAAyB,MAAA,CAAO,OAAO;AAAA,GACjD,CAAA;AACH;AAKO,SAAS,wBAAA,CACd,gBACA,iBAAA,EAC6B;AAC7B,EAAA,IAAI,cAAA,CAAe,IAAA,KAAS,UAAA,IAAc,cAAA,CAAe,SAAS,QAAA,EAAU;AAC1E,IAAA,OAAO,uBAAuB,cAAc,CAAA;AAAA,EAC9C;AAEA,EAAA,IAAI,cAAA,CAAe,IAAA,KAAS,UAAA,IAAc,cAAA,CAAe,SAAS,SAAA,EAAW;AAC3E,IAAA,OAAO,IAAI,2CAA2C,cAAc,CAAA;AAAA,EACtE;AAEA,EAAA,IAAI,cAAA,CAAe,SAAS,QAAA,EAAU;AACpC,IAAA,IAAI,CAAC,kBAAkB,uBAAA,EAAyB;AAC9C,MAAA,MAAM,IAAI,KAAA;AAAA,QACR;AAAA,OACF;AAAA,IACF;AACA,IAAA,OAAO,IAAI,4BAA4B,cAAc,CAAA;AAAA,EACvD;AAEA,EAAA,MAAM,IAAI,KAAA,CAAM,CAAA,qCAAA,EAAyC,cAAA,CAAqC,IAAA,IAAQ,SAAS,CAAA,CAAE,CAAA;AACnH;AC1IA,SAAS,qBAAqB,IAAA,EAAkC;AAC9D,EAAA,OAAO,IAAA,CAAK,IAAA,KAAS,OAAA,IAAW,IAAA,CAAK,IAAA,KAAS,QAAA;AAChD;AAEA,eAAe,WAAW,IAAA,EAAgC;AACxD,EAAA,IAAI;AACF,IAAA,MAAMG,cAAK,IAAI,CAAA;AACf,IAAA,OAAO,IAAA;AAAA,EACT,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,KAAA;AAAA,EACT;AACF;AAEA,eAAe,cAAA,CACb,OACA,GAAA,EAIC;AACD,EAAA,MAAM,eAAyB,EAAC;AAChC,EAAA,MAAM,eAA2C,EAAC;AAElD,EAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,IAAA,MAAM,YAAA,GAAepC,YAAAA,CAAQ,GAAA,EAAK,IAAA,CAAK,IAAI,CAAA;AAC3C,IAAA,IAAI,CAAC,oBAAA,CAAqB,IAAI,KAAK,MAAM,UAAA,CAAW,YAAY,CAAA,EAAG;AACjE,MAAA,YAAA,CAAa,IAAA,CAAK;AAAA,QAChB,MAAM,IAAA,CAAK,IAAA;AAAA,QACX,MAAM,IAAA,CAAK,IAAA;AAAA,QACX,MAAA,EAAQ;AAAA,OACT,CAAA;AACD,MAAA;AAAA,IACF;AACA,IAAA,MAAMqC,eAAMC,YAAA,CAAQ,YAAY,GAAG,EAAE,SAAA,EAAW,MAAM,CAAA;AACtD,IAAA,MAAMC,kBAAA,CAAU,YAAA,EAAc,IAAA,CAAK,OAAA,EAAS,MAAM,CAAA;AAClD,IAAA,YAAA,CAAa,IAAA,CAAK,KAAK,IAAI,CAAA;AAAA,EAC7B;AAEA,EAAA,OAAO;AAAA,IACL,YAAA;AAAA,IACA;AAAA,GACF;AACF;AAKA,eAAsB,kBAAA,CAAmB,OAAA,GAA+B,EAAC,EAAgC;AACvG,EAAA,MAAM,GAAA,GAAM,OAAA,CAAQ,GAAA,IAAO,OAAA,CAAQ,GAAA,EAAI;AACvC,EAAA,MAAM,aAAA,GAA4C;AAAA,IAChD,GAAA;AAAA,IACA,YAAY,OAAA,CAAQ;AAAA,GACtB;AAEA,EAAA,MAAM,EAAE,UAAA,EAAY,MAAA,EAAO,GAAI,MAAM,oBAAoB,aAAa,CAAA;AACtE,EAAA,MAAM,WAAW,OAAA,CAAQ,QAAA,IAAY,yBAAyB,MAAA,CAAO,QAAA,EAAU,OAAO,YAAY,CAAA;AAElG,EAAA,MAAM,QAAA,GAAW,MAAM,QAAA,CAAS,OAAA,CAAQ;AAAA,IACtC,OAAA,EAAS,sBAAA,CAAuB,MAAA,CAAO,QAAQ;AAAA,GAChD,CAAA;AAED,EAAA,MAAM,SAAA,GAAY,6BAAA,CAA8B,QAAA,EAAU,MAAM,CAAA;AAChE,EAAA,MAAM,WAAA,GAAc,OAAA,CAAQ,MAAA,GACxB,EAAE,cAAc,EAAC,EAAG,YAAA,EAAc,IAAG,GACrC,MAAM,cAAA,CAAe,SAAA,CAAU,OAAO,GAAG,CAAA;AAE7C,EAAA,OAAO;AAAA,IACL,GAAG,SAAA;AAAA,IACH,UAAA;AAAA,IACA,MAAA;AAAA,IACA,cAAc,WAAA,CAAY,YAAA;AAAA,IAC1B,cAAc,WAAA,CAAY;AAAA,GAC5B;AACF;;;ACrEA,IAAM,sBAAA,GAAyB,WAAA;AAExB,IAAM,4BAAA,GAA+B;AAAA,EAC1C,sBAAA,EAAwB,wBAAA;AAAA,EACxB,gBAAA,EAAkB,kBAAA;AAAA,EAClB,cAAA,EAAgB;AAClB;AAwLA,SAASC,YAAW,KAAA,EAAuB;AACzC,EAAA,OAAO,KAAA,CAAM,MAAA,GAAS,CAAA,GAAI,CAAA,EAAG,MAAM,CAAC,CAAA,EAAG,WAAA,EAAa,CAAA,EAAG,KAAA,CAAM,KAAA,CAAM,CAAC,CAAC,CAAA,CAAA,GAAK,KAAA;AAC5E;AAEA,SAAS,uBAAA,CACP,IAAA,EACA,KAAA,EACA,UAAA,EACQ;AACR,EAAA,MAAM,KAAA,GAAQ,CAAC,CAAA,EAAG,IAAI,IAAI,kBAAA,CAAmB,KAAK,CAAC,CAAA,CAAE,CAAA;AACrD,EAAA,MAAM,SAAA,uBAAgB,GAAA,CAAI;AAAA,IACxB,QAAA;AAAA,IACA,SAAA;AAAA,IACA,QAAA;AAAA,IACA,MAAA;AAAA,IACA,QAAA;AAAA,IACA,UAAA;AAAA,IACA,aAAA;AAAA,IACA;AAAA,GACD,CAAA;AAED,EAAA,IAAI,UAAA,CAAW,WAAW,MAAA,EAAW;AACnC,IAAA,KAAA,CAAM,KAAK,CAAA,QAAA,EAAW,IAAA,CAAK,MAAM,UAAA,CAAW,MAAM,CAAC,CAAA,CAAE,CAAA;AAAA,EACvD;AACA,EAAA,IAAI,UAAA,CAAW,mBAAmB,IAAA,EAAM;AACtC,IAAA,KAAA,CAAM,KAAK,CAAA,QAAA,EAAW,UAAA,CAAW,OAAA,CAAQ,WAAA,EAAa,CAAA,CAAE,CAAA;AAAA,EAC1D;AACA,EAAA,IAAI,WAAW,MAAA,EAAQ;AACrB,IAAA,KAAA,CAAM,IAAA,CAAK,CAAA,OAAA,EAAU,UAAA,CAAW,MAAM,CAAA,CAAE,CAAA;AAAA,EAC1C;AACA,EAAA,IAAI,WAAW,IAAA,EAAM;AACnB,IAAA,KAAA,CAAM,IAAA,CAAK,CAAA,KAAA,EAAQ,UAAA,CAAW,IAAI,CAAA,CAAE,CAAA;AAAA,EACtC;AACA,EAAA,IAAI,WAAW,MAAA,EAAQ;AACrB,IAAA,KAAA,CAAM,KAAK,QAAQ,CAAA;AAAA,EACrB;AACA,EAAA,IAAI,WAAW,QAAA,EAAU;AACvB,IAAA,KAAA,CAAM,KAAK,UAAU,CAAA;AAAA,EACvB;AACA,EAAA,IAAI,WAAW,WAAA,EAAa;AAC1B,IAAA,KAAA,CAAM,KAAK,aAAa,CAAA;AAAA,EAC1B;AACA,EAAA,IAAI,WAAW,QAAA,EAAU;AACvB,IAAA,KAAA,CAAM,KAAK,CAAA,SAAA,EAAYA,WAAAA,CAAW,UAAA,CAAW,QAAQ,CAAC,CAAA,CAAE,CAAA;AAAA,EAC1D;AAEA,EAAA,KAAA,MAAW,CAAC,GAAA,EAAK,QAAQ,KAAK,MAAA,CAAO,OAAA,CAAQ,UAAU,CAAA,EAAG;AACxD,IAAA,IAAI,SAAA,CAAU,IAAI,GAAG,CAAA,IAAK,aAAa,MAAA,IAAa,QAAA,KAAa,IAAA,IAAQ,QAAA,KAAa,KAAA,EAAO;AAC3F,MAAA;AAAA,IACF;AACA,IAAA,IAAI,aAAa,IAAA,EAAM;AACrB,MAAA,KAAA,CAAM,KAAK,GAAG,CAAA;AACd,MAAA;AAAA,IACF;AACA,IAAA,KAAA,CAAM,KAAK,CAAA,EAAG,GAAG,IAAI,MAAA,CAAO,QAAQ,CAAC,CAAA,CAAE,CAAA;AAAA,EACzC;AAEA,EAAA,OAAO,KAAA,CAAM,KAAK,IAAI,CAAA;AACxB;AAEA,SAAS,qBAAA,CAAsB,SAA8B,IAAA,EAAkC;AAC7F,EAAA,MAAM,YAAA,GAAe,OAAA,EAAS,GAAA,CAAI,QAAQ,CAAA;AAC1C,EAAA,IAAI,CAAC,YAAA,EAAc;AACjB,IAAA,OAAO,MAAA;AAAA,EACT;AACA,EAAA,OAAO,YAAA,CAAa,YAAY,CAAA,CAAE,GAAA,CAAI,IAAI,CAAA;AAC5C;AAEA,SAASvC,WAAS,KAAA,EAAkD;AAClE,EAAA,OAAO,OAAA,CAAQ,KAAK,CAAA,IAAK,OAAO,UAAU,QAAA,IAAY,CAAC,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA;AAC5E;AAEA,SAAS,wBAAwB,KAAA,EAA0C;AACzE,EAAA,IAAI,CAACA,UAAAA,CAAS,KAAK,CAAA,EAAG;AACpB,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,MAAM,UAAUA,UAAAA,CAAS,KAAA,CAAM,OAAO,CAAA,GAAI,MAAM,OAAA,GAAU,MAAA;AAC1D,EAAA,MAAM,OAAOA,UAAAA,CAAS,KAAA,CAAM,IAAI,CAAA,GAAI,MAAM,IAAA,GAAO,MAAA;AACjD,EAAA,IAAI,OAAA,IAAW,OAAO,OAAA,CAAQ,KAAA,KAAU,YAAY,OAAA,CAAQ,KAAA,CAAM,MAAA,GAAS,CAAA,IAAK,IAAA,EAAM;AACpF,IAAA,OAAO;AAAA,MACL,OAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF;AAEA,EAAA,OAAO,IAAA;AACT;AAEA,SAAS,iBAAiB,QAAA,EAA6C;AACrE,EAAA,OACE,wBAAwB,QAAQ,CAAA,KAC/BA,UAAAA,CAAS,QAAQ,IAAI,uBAAA,CAAwB,QAAA,CAAS,IAAI,CAAA,GAAI,UAC9DA,UAAAA,CAAS,QAAQ,IAAI,uBAAA,CAAwB,QAAA,CAAS,OAAO,CAAA,GAAI,IAAA,CAAA;AAEtE;AAEA,SAAS,uBAAuB,GAAA,EAAuC;AACrE,EAAA,IAAI,GAAA,CAAI,OAAA,CAAQ,eAAA,YAA2B,OAAA,EAAS;AAClD,IAAA,OAAO,IAAI,OAAA,CAAQ,eAAA;AAAA,EACrB;AAEA,EAAA,MAAM,OAAA,GAAU,IAAI,OAAA,EAAQ;AAC5B,EAAA,GAAA,CAAI,QAAQ,eAAA,GAAkB,OAAA;AAC9B,EAAA,OAAO,OAAA;AACT;AAEA,SAAS,iBAAiB,OAAA,EAAyB;AACjD,EAAA,OAAO,OAAA,CAAQ,OAAA,CAAQ,KAAA,EAAO,EAAE,CAAA;AAClC;AAEA,SAAS,kBAAkB,QAAA,EAAsC;AAC/D,EAAA,IAAI,CAAC,QAAA,IAAY,QAAA,KAAa,GAAA,EAAK;AACjC,IAAA,OAAO,sBAAA;AAAA,EACT;AAEA,EAAA,MAAM,aAAa,QAAA,CAAS,UAAA,CAAW,GAAG,CAAA,GAAI,QAAA,GAAW,IAAI,QAAQ,CAAA,CAAA;AACrE,EAAA,OAAO,UAAA,CAAW,QAAA,CAAS,GAAG,CAAA,IAAK,UAAA,CAAW,MAAA,GAAS,CAAA,GACnD,UAAA,CAAW,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA,GACtB,UAAA;AACN;AAEA,SAASwC,wBACP,OAAA,EACiE;AACjE,EAAA,OACE,OAAO,OAAA,KAAY,QAAA,IACnB,OAAA,KAAY,IAAA,IACZ,kBAAkB,OAAA,IAClB,KAAA,CAAM,OAAA,CAAS,OAAA,CAAuC,YAAY,CAAA;AAEtE;AAEA,SAAS,cAAcnC,QAAAA,EAAuB;AAC5C,EAAA,IAAI;AACF,IAAA,OAAO,IAAI,GAAA,CAAIA,QAAAA,CAAQ,GAAG,CAAA;AAAA,EAC5B,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,IAAI,IAAI,kBAAkB,CAAA;AAAA,EACnC;AACF;AAEA,SAAS,cAAA,CAAeA,UAAkB,GAAA,EAAyB;AACjE,EAAA,MAAM,aAAA,GAAgBA,QAAAA,CAAQ,OAAA,CAAQ,GAAA,CAAI,kBAAkB,CAAA,EAAG,KAAA,CAAM,GAAG,CAAA,CAAE,CAAC,CAAA,EAAG,IAAA,EAAK;AACnF,EAAA,MAAM,OAAO,aAAA,IAAiBA,QAAAA,CAAQ,QAAQ,GAAA,CAAI,MAAM,KAAK,GAAA,CAAI,IAAA;AACjE,EAAA,OAAO,IAAA,IAAQ,IAAA;AACjB;AAEA,SAAS,kBAAA,CACPA,QAAAA,EACA,kBAAA,EACA,GAAA,EACkB;AAClB,EAAA,IAAI,kBAAA,KAAuB,MAAA,IAAU,kBAAA,KAAuB,OAAA,EAAS;AACnE,IAAA,OAAO,kBAAA;AAAA,EACT;AAEA,EAAA,MAAM,cAAA,GAAiBA,QAAAA,CAAQ,OAAA,CAAQ,GAAA,CAAI,mBAAmB,CAAA,EAAG,KAAA,CAAM,GAAG,CAAA,CAAE,CAAC,CAAA,EAAG,IAAA,EAAK;AACrF,EAAA,IAAI,cAAA,KAAmB,MAAA,IAAU,cAAA,KAAmB,OAAA,EAAS;AAC3D,IAAA,OAAO,cAAA;AAAA,EACT;AAEA,EAAA,IAAI,GAAA,CAAI,QAAA,KAAa,OAAA,IAAW,GAAA,CAAI,aAAa,QAAA,EAAU;AACzD,IAAA,OAAO,GAAA,CAAI,QAAA,CAAS,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA;AAAA,EACjC;AAEA,EAAA,OAAO,MAAA;AACT;AAEA,SAAS,qBAAA,CACP,SACAA,QAAAA,EACe;AACf,EAAA,IAAI,OAAO,YAAY,QAAA,EAAU;AAC/B,IAAA,OAAO,iBAAiB,OAAO,CAAA;AAAA,EACjC;AAEA,EAAA,MAAM,UAAA,GAAa,cAAcA,QAAO,CAAA;AACxC,EAAA,MAAM,IAAA,GAAO,cAAA,CAAeA,QAAAA,EAAS,UAAU,CAAA;AAC/C,EAAA,IAAI,CAAC,IAAA,EAAM;AACT,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,IAAImC,uBAAAA,CAAuB,OAAO,CAAA,EAAG;AACnC,IAAA,MAAM,YAAA,GAAe,OAAA,CAAQ,YAAA,IAAgB,EAAC;AAC9C,IAAA,IAAI,aAAa,MAAA,GAAS,CAAA,IAAK,CAAC,YAAA,CAAa,QAAA,CAAS,IAAI,CAAA,EAAG;AAC3D,MAAA,OAAO,IAAA;AAAA,IACT;AAAA,EACF;AAEA,EAAA,MAAM,QAAA,GACJ,OAAO,OAAA,KAAY,QAAA,IAAY,YAAY,IAAA,GACvC,kBAAA,CAAmBnC,QAAAA,EAAS,OAAA,CAAQ,UAAU,UAAU,CAAA,GACxD,kBAAA,CAAmBA,QAAAA,EAAS,QAAW,UAAU,CAAA;AAEvD,EAAA,OAAO,CAAA,EAAG,QAAQ,CAAA,GAAA,EAAM,IAAI,CAAA,CAAA;AAC9B;AAEA,SAAS,UAAU,OAAA,EAAiD;AAClE,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,OAAO,MAAA;AAAA,EACT;AAEA,EAAA,IAAI;AACF,IAAA,OAAO,IAAI,GAAA,CAAI,OAAO,CAAA,CAAE,MAAA;AAAA,EAC1B,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,MAAA;AAAA,EACT;AACF;AAEA,eAAe,qBAAA,CACb,MAAA,EACA,OAAA,EACAA,QAAAA,EACmB;AACnB,EAAA,MAAM,QAAA,GACJ,OAAO,MAAA,CAAO,cAAA,KAAmB,UAAA,GAC7B,MAAM,MAAA,CAAO,cAAA,CAAeA,QAAO,CAAA,GAClC,MAAA,CAAO,cAAA,IAAkB,EAAC;AAEjC,EAAA,MAAM,MAAA,GAAS;AAAA,IACb,UAAU,OAAO,CAAA;AAAA,IACjB,GAAG;AAAA,GACL;AAEA,EAAA,OAAO,KAAA,CAAM,IAAA,CAAK,IAAI,GAAA,CAAI,OAAO,MAAA,CAAO,CAAC,KAAA,KAA2B,OAAO,UAAU,QAAA,IAAY,KAAA,CAAM,MAAA,GAAS,CAAC,CAAC,CAAC,CAAA;AACrH;AAEA,eAAe,uBAAA,CACb,QACAA,QAAAA,EACmB;AACnB,EAAA,MAAM,UAAA,GACJ,OAAO,MAAA,CAAO,gBAAA,KAAqB,UAAA,GAC/B,MAAM,MAAA,CAAO,gBAAA,CAAiBA,QAAO,CAAA,GACpC,MAAA,CAAO,gBAAA,IAAoB,EAAC;AAEnC,EAAA,MAAM,MAAA,GAAS;AAAA,IACb,GAAG,MAAA,CAAO,IAAA,CAAK,MAAA,CAAO,eAAA,IAAmB,EAAE,CAAA;AAAA,IAC3C,GAAG;AAAA,GACL;AAEA,EAAA,OAAO,KAAA,CAAM,IAAA,CAAK,IAAI,GAAA,CAAI,OAAO,MAAA,CAAO,CAAC,KAAA,KAA2B,OAAO,UAAU,QAAA,IAAY,KAAA,CAAM,MAAA,GAAS,CAAC,CAAC,CAAC,CAAA;AACrH;AAEA,SAAS,kBAAA,CAAmB,SAAkB,IAAA,EAA+B;AAC3E,EAAA,MAAM,OAAA,GAAU,IAAI,OAAA,CAAQ,IAAA,EAAM,OAAO,CAAA;AACzC,EAAA,IAAI,CAAC,OAAA,CAAQ,GAAA,CAAI,cAAc,CAAA,EAAG;AAChC,IAAA,OAAA,CAAQ,GAAA,CAAI,gBAAgB,iCAAiC,CAAA;AAAA,EAC/D;AACA,EAAA,OAAO,IAAI,QAAA,CAAS,IAAA,CAAK,SAAA,CAAU,OAAO,CAAA,EAAG;AAAA,IAC3C,GAAG,IAAA;AAAA,IACH;AAAA,GACD,CAAA;AACH;AAEA,SAAS,oBAAA,CAAqB,UAAoB,OAAA,EAA4B;AAC5E,EAAA,OAAO,IAAI,QAAA,CAAS,QAAA,CAAS,IAAA,EAAM;AAAA,IACjC,QAAQ,QAAA,CAAS,MAAA;AAAA,IACjB,YAAY,QAAA,CAAS,UAAA;AAAA,IACrB;AAAA,GACD,CAAA;AACH;AAEO,SAAS,uBACd,MAAA,EACS;AACT,EAAA,OAAO,MAAA;AACT;AAEO,SAAS,WACd,MAAA,EAC2B;AAC3B,EAAA,MAAM,kBAAA,GAAqB,iBAAA,CAAkB,MAAA,CAAO,QAAQ,CAAA;AAC5D,EAAA,MAAM,aAAA,GACJ,OAAO,MAAA,CAAO,OAAA,KAAY,WAAW,gBAAA,CAAiB,MAAA,CAAO,OAAO,CAAA,GAAI,MAAA;AAC1E,EAAA,MAAM,OAAA,GAA0C;AAAA,IAC9C,OAAA,EAAS,aAAA;AAAA,IACT,QAAA,EAAU,kBAAA;AAAA,IACV,QAAQ,MAAA,CAAO,MAAA;AAAA,IACf,OAAA,EAAS;AAAA,MACP,SAAS,MAAA,CAAO,OAAA;AAAA,MAChB,UAAU,MAAA,CAAO;AAAA;AACnB,GACF;AACA,EAAA,MAAM,gBAAA,GACJ,OAAO,MAAA,CAAO,QAAA,KAAa,aACvB,MAAA,CAAO,QAAA,CAAS,OAAO,CAAA,GACvB,MAAA,CAAO,QAAA;AAEb,EAAA,MAAM,UAAU,UAAA,CAAW;AAAA,IACzB,OAAA,EAAS,iBAAiB,MAAA,CAAO,OAAA;AAAA,IACjC,SAAS,MAAA,CAAO,OAAA;AAAA,IAChB,UAAU,MAAA,CAAO;AAAA,GAClB,CAAA;AAED,EAAA,MAAM,OAAO,EAAC;AAEd,EAAA,MAAM,mBAAA,GAAwE,CAAC,KAAA,GAAQ,EAAC,KAAM;AAC5F,IAAA,MAAM,eAAA,GAAkB,KAAA,CAAM,eAAA,IAAmB,IAAI,OAAA,EAAQ;AAC7D,IAAA,MAAM,iBAAiB,KAAA,CAAM,OAAA;AAC7B,IAAA,MAAM,WAAA,GAAc,KAAA,CAAM,OAAA,IAAW,IAAA,CAAK,OAAA;AAE1C,IAAA,MAAM,YAAY,KAAA,CAAM,SAAA,KAAc,CAAC,IAAA,EAAM,OAAO,UAAA,KAAe;AACjE,MAAA,eAAA,CAAgB,MAAA;AAAA,QACd,YAAA;AAAA,QACA,uBAAA,CAAwB,IAAA,EAAM,KAAA,EAAO,UAAU;AAAA,OACjD;AAAA,IACF,CAAA,CAAA;AAEA,IAAA,OAAO;AAAA,MACL,OAAA,EAAS,cAAA;AAAA,MACT,WAAW,KAAA,CAAM,SAAA,KAAc,CAAA,IAAA,KAAQ,qBAAA,CAAsB,gBAAgB,IAAI,CAAA,CAAA;AAAA,MACjF,SAAA;AAAA,MACA,QAAQ,KAAA,CAAM,MAAA;AAAA,MACd,iBAAiB,KAAA,CAAM,eAAA;AAAA,MACvB,iBAAiB,KAAA,CAAM,eAAA;AAAA,MACvB,OAAA,EAAS;AAAA,QACP,QAAQ,OAAA,CAAQ,MAAA;AAAA,QAChB,WAAA;AAAA,QACA,aAAA,EAAe;AAAA,UACb,SAAA,EAAW,OAAO,OAAA,EAAS;AAAA,SAC7B;AAAA,QACA,OAAA,EAAS;AAAA,UACP,OAAA,EAAS;AAAA,YACP,WAAA,EAAa,OAAO,OAAA,EAAS;AAAA,WAC/B;AAAA,UACA,OAAA,EAAS;AAAA,YACP,kBAAA,EAAoB;AAAA;AACtB,SACF;AAAA,QACA,eAAe,KAAA,CAAM;AAAA;AACvB,KACF;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,UAAA,GAAsD,OAC1D,KAAA,EACA,OAAA,EACA,gBACA,SAAA,KACG;AACH,IAAA,MAAM,aAAA,GAAgB,oBAAoB,KAAK,CAAA;AAC/C,IAAA,MAAM,gBAAA,CAAiB,aAAA,EAAe,OAAA,EAAS,cAAA,EAAgB,SAAS,CAAA;AAAA,EAC1E,CAAA;AAEA,EAAA,MAAM,YAAA,GAA0D,CAC9D,KAAA,EACA,kBAAA,KACG;AACH,IAAA,MAAM,aAAA,GAAgB,oBAAoB,KAAK,CAAA;AAC/C,IAAA,mBAAA,CAAoB,eAAe,kBAAkB,CAAA;AAAA,EACvD,CAAA;AAEA,EAAA,MAAM,oBAAA,GAA0E,OAAM,GAAA,KAAO;AAC3F,IAAA,MAAM,eAAA,GAAkB,uBAAuB,GAAG,CAAA;AAClD,IAAA,MAAM,UACJ,GAAA,CAAI,OAAA,CAAQ,cACZ,gBAAA,CAAiB,GAAA,CAAI,QAAQ,QAAQ,CAAA;AAEvC,IAAA,IAAI,GAAA,CAAI,QAAQ,YAAA,EAAc;AAC5B,MAAA,YAAA,CAAa;AAAA,QACX,SAAS,GAAA,CAAI,OAAA;AAAA,QACb;AAAA,OACD,CAAA;AAAA,IACH;AAEA,IAAA,IAAI,OAAA,EAAS;AACX,MAAA,MAAM,UAAA;AAAA,QACJ;AAAA,UACE,SAAS,GAAA,CAAI,OAAA;AAAA,UACb;AAAA,SACF;AAAA,QACA,OAAA;AAAA,QACA,IAAI,OAAA,CAAQ,cAAA;AAAA,QACZ,IAAI,OAAA,CAAQ;AAAA,OACd;AAAA,IACF;AAEA,IAAA,OAAO,eAAA;AAAA,EACT,CAAA;AAEA,EAAA,MAAM,aAAA,GAA4D,OAAM,GAAA,KAAO;AAC7E,IAAA,KAAA,MAAW,MAAA,IAAU,KAAK,OAAA,EAAS;AACjC,MAAA,KAAA,MAAW,IAAA,IAAQ,MAAA,CAAO,KAAA,EAAO,KAAA,IAAS,EAAC,EAAG;AAC5C,QAAA,IAAI,CAAC,IAAA,CAAK,OAAA,CAAQ,GAAG,CAAA,EAAG;AACtB,UAAA;AAAA,QACF;AACA,QAAA,MAAM,KAAK,OAAA,CAAQ;AAAA,UACjB,GAAG,GAAA;AAAA,UACH;AAAA,SACD,CAAA;AAAA,MACH;AAAA,IACF;AACA,IAAA,OAAO,GAAA;AAAA,EACT,CAAA;AAEA,EAAA,MAAM,qBAAA,GAA4E,OAAMA,QAAAA,KAAW;AACjG,IAAA,MAAM,UAAA,GAAa,cAAcA,QAAO,CAAA;AACxC,IAAA,MAAM,eAAA,GAAkB,qBAAA,CAAsB,MAAA,CAAO,OAAA,EAASA,QAAO,CAAA;AACrE,IAAA,IAAI,CAAC,eAAA,EAAiB;AACpB,MAAA,MAAM,IAAI,KAAA;AAAA,QACRmC,uBAAAA,CAAuB,MAAA,CAAO,OAAO,CAAA,GACjC,sEAAA,GACA;AAAA,OACN;AAAA,IACF;AAEA,IAAA,MAAM,iBAAiB,UAAA,CAAW;AAAA,MAChC,OAAA,EAAS,eAAA;AAAA,MACT,SAAS,MAAA,CAAO,OAAA;AAAA,MAChB,UAAU,MAAA,CAAO;AAAA,KAClB,CAAA;AACD,IAAA,MAAM,cAAA,GAAiB,MAAM,qBAAA,CAAsB,MAAA,EAAQ,iBAAiBnC,QAAO,CAAA;AACnF,IAAA,MAAM,gBAAA,GAAmB,MAAM,uBAAA,CAAwB,MAAA,EAAQA,QAAO,CAAA;AAEtE,IAAA,OAAO;AAAA,MACL,IAAA;AAAA,MACA,OAAA,EAAAA,QAAAA;AAAA,MACA,GAAA,EAAK,UAAA;AAAA,MACL,MAAM,UAAA,CAAW,QAAA;AAAA,MACjB,QAAA,EAAU,kBAAA;AAAA,MACV,OAAA,EAAS,eAAA;AAAA,MACT,MAAA,EAAQ,SAAA,CAAU,eAAe,CAAA,IAAK,eAAA;AAAA,MACtC,SAASA,QAAAA,CAAQ,OAAA;AAAA,MACjB,OAAA,EAAS,cAAA;AAAA,MACT,cAAA;AAAA,MACA,gBAAA;AAAA,MACA,OAAA,EAAS,MAAA;AAAA,MACT,OAAA,EAAS;AAAA,QACP,GAAG,OAAA;AAAA,QACH,OAAA,EAAS;AAAA,OACX;AAAA,MACA,UAAU,IAAA,CAAK,QAAA;AAAA,MACf,iBAAiB,IAAA,CAAK;AAAA,KACxB;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,OAAA,GAAgD,OAAMA,QAAAA,KAAW;AACrE,IAAA,MAAM,cAAA,GAAiB,MAAM,qBAAA,CAAsBA,QAAO,CAAA;AAE1D,IAAA,IAAI,OAAO,MAAA,CAAO,OAAA,KAAY,UAAA,EAAY;AACxC,MAAA,OAAO,kBAAA;AAAA,QACL;AAAA,UACE,EAAA,EAAI,KAAA;AAAA,UACJ,MAAM,4BAAA,CAA6B,sBAAA;AAAA,UACnC,KAAA,EAAO,sEAAA;AAAA,UACP,MAAM,cAAA,CAAe,IAAA;AAAA,UACrB,UAAU,cAAA,CAAe;AAAA,SAC3B;AAAA,QACA,EAAE,QAAQ,GAAA;AAAI,OAChB;AAAA,IACF;AAEA,IAAA,MAAM,MAAA,GAAS,MAAM,MAAA,CAAO,OAAA,CAAQ,cAAc,CAAA;AAClD,IAAA,IAAI,kBAAkB,QAAA,EAAU;AAC9B,MAAA,OAAO,MAAA;AAAA,IACT;AAEA,IAAA,MAAM,WACJ,MAAA,CAAO,QAAA,KACN,MAAA,CAAO,QAAA,KAAa,SACjB,kBAAA,CAAmB,MAAA,CAAO,QAAQ,CAAA,GAClC,IAAI,QAAA,CAAS,IAAA,EAAM,EAAE,MAAA,EAAQ,KAAK,CAAA,CAAA;AAExC,IAAA,MAAM,eAAA,GAAkB,IAAI,OAAA,CAAQ,QAAA,CAAS,OAAO,CAAA;AACpD,IAAA,MAAM,aAAA,CAAc;AAAA,MAClB,MAAM,cAAA,CAAe,IAAA;AAAA,MACrB,SAASA,QAAAA,CAAQ,OAAA;AAAA,MACjB,OAAA,EAAS;AAAA,QACP,eAAA;AAAA,QACA,UAAU,MAAA,CAAO,QAAA;AAAA,QACjB,YAAY,MAAA,CAAO,UAAA;AAAA,QACnB,cAAc,MAAA,CAAO,YAAA;AAAA,QACrB,gBAAgB,MAAA,CAAO,cAAA;AAAA,QACvB,iBAAiB,MAAA,CAAO;AAAA;AAC1B,KACD,CAAA;AAED,IAAA,OAAO,oBAAA,CAAqB,UAAU,eAAe,CAAA;AAAA,EACvD,CAAA;AAEA,EAAA,MAAM,MAAwC,MAAA,CAAO,MAAA;AAAA,IACnD;AAAA,MACE,oBAAA;AAAA,MACA,YAAA;AAAA,MACA,mBAAA;AAAA,MACA,cAAA;AAAA,MACA,gBAAA;AAAA,MACA,qBAAA;AAAA,MACA,aAAA;AAAA,MACA;AAAA,KACF;AAAA,IACA,MAAA,CAAO,OAAO;AAAC,GACjB;AAEA,EAAA,MAAM,YAAA,GAAe;AAAA,IACnB,GAAG,IAAA,CAAK,OAAA,EAAS,MAAA,CAA+B,CAAC,KAAK,MAAA,KAAW;AAC/D,MAAA,IAAI,OAAO,YAAA,EAAc;AACvB,QAAA,OAAO;AAAA,UACL,GAAG,GAAA;AAAA,UACH,GAAG,MAAA,CAAO;AAAA,SACZ;AAAA,MACF;AACA,MAAA,OAAO,GAAA;AAAA,IACT,CAAA,EAAG,EAAE,CAAA;AAAA,IACL,GAAI,MAAA,CAAO,UAAA,IAAc,EAAC;AAAA,IAC1B,GAAG;AAAA,GACL;AAEA,EAAA,MAAA,CAAO,OAAO,IAAA,EAAM;AAAA,IAClB,MAAA;AAAA,IACA,OAAA,EAAS,MAAA;AAAA,IACT,OAAA;AAAA,IACA,QAAA,EAAU,gBAAA;AAAA,IACV,eAAA,EAAkB,MAAA,CAAO,eAAA,IAAmB,EAAC;AAAA,IAC7C,SAAS,CAAC,GAAI,MAAA,CAAO,OAAA,IAAW,EAAG,CAAA;AAAA,IACnC,OAAA;AAAA,IACA,GAAA;AAAA,IACA,YAAA;AAAA,IACA,mBAAA;AAAA,IACA,UAAA;AAAA,IACA,YAAA;AAAA,IACA,oBAAA;AAAA,IACA,aAAA;AAAA,IACA,qBAAA;AAAA,IACA;AAAA,GACqD,CAAA;AAEvD,EAAA,IAAA,CAAK,QAAA,GAAW,QAAQ,GAAA,CAAI;AAAA,IAC1B,qBAAA,CAAsB,QAAQ,aAAa,CAAA;AAAA,IAC3C,wBAAwB,MAAM;AAAA,GAC/B,CAAA,CAAE,IAAA,CAAK,CAAC,CAAC,cAAA,EAAgB,gBAAgB,CAAA,MAAO;AAAA,IAC/C,IAAA;AAAA,IACA,OAAA,EAAS,MAAA;AAAA,IACT,OAAA;AAAA,IACA,QAAA,EAAU,kBAAA;AAAA,IACV,OAAA,EAAS,aAAA;AAAA,IACT,MAAA,EAAQ,UAAU,aAAa,CAAA;AAAA,IAC/B,UAAU,IAAA,CAAK,QAAA;AAAA,IACf,iBAAiB,IAAA,CAAK,eAAA;AAAA,IACtB,SAAS,IAAA,CAAK,OAAA;AAAA,IACd,SAAS,IAAA,CAAK,OAAA;AAAA,IACd,cAAA;AAAA,IACA;AAAA,GACF,CAAE,CAAA;AAEF,EAAA,OAAO,IAAA;AACT;;;AC9sBA,SAAS,wBAAwB,KAAA,EAAiD;AAChF,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,MAAM,UAAA,GAAa,MAAM,IAAA,EAAK;AAC9B,EAAA,OAAO,UAAA,CAAW,MAAA,GAAS,CAAA,GAAI,UAAA,GAAa,IAAA;AAC9C;AAEA,SAAS,4BACP,aAAA,EACe;AACf,EAAA,KAAA,MAAW,gBAAgB,aAAA,EAAe;AACxC,IAAA,MAAM,EAAA,GAAK,uBAAA,CAAwB,YAAA,CAAa,EAAE,CAAA;AAClD,IAAA,IAAI,EAAA,EAAI;AACN,MAAA,OAAO,EAAA;AAAA,IACT;AAAA,EACF;AACA,EAAA,OAAO,IAAA;AACT;AAUA,eAAsB,yBACpB,OAAA,EACyC;AACzC,EAAA,MAAM,2BAAA,GAA8B,uBAAA;AAAA,IAClC,OAAA,CAAQ,SAAS,OAAA,EAAS;AAAA,GAC5B;AAEA,EAAA,IAAI,2BAAA,EAA6B;AAC/B,IAAA,OAAO;AAAA,MACL,oBAAA,EAAsB,2BAAA;AAAA,MACtB,wBAAA,EAA0B;AAAA,KAC5B;AAAA,EACF;AAEA,EAAA,IAAI,aAAA;AACJ,EAAA,IAAI;AACF,IAAA,aAAA,GAAgB,MAAM,QAAQ,iBAAA,EAAkB;AAAA,EAClD,SAAS,KAAA,EAAO;AACd,IAAA,OAAA,CAAQ,UAAU,KAAK,CAAA;AACvB,IAAA,OAAO;AAAA,MACL,oBAAA,EAAsB,IAAA;AAAA,MACtB,wBAAA,EAA0B;AAAA,KAC5B;AAAA,EACF;AAEA,EAAA,IAAI,aAAA,CAAc,WAAW,CAAA,EAAG;AAC9B,IAAA,OAAO;AAAA,MACL,oBAAA,EAAsB,IAAA;AAAA,MACtB,wBAAA,EAA0B;AAAA,KAC5B;AAAA,EACF;AAEA,EAAA,MAAM,sBAAA,GAAyB,uBAAA;AAAA,IAAA,CAC5B,OAAA,CAAQ,oBAAA,IAAwB,2BAAA,EAA6B,aAAa;AAAA,GAC7E;AAEA,EAAA,IAAI,CAAC,sBAAA,EAAwB;AAC3B,IAAA,OAAO;AAAA,MACL,oBAAA,EAAsB,IAAA;AAAA,MACtB,wBAAA,EAA0B;AAAA,KAC5B;AAAA,EACF;AAEA,EAAA,IAAI;AACF,IAAA,MAAM,OAAA,CAAQ,sBAAsB,sBAAsB,CAAA;AAC1D,IAAA,OAAO;AAAA,MACL,oBAAA,EAAsB,sBAAA;AAAA,MACtB,wBAAA,EAA0B;AAAA,KAC5B;AAAA,EACF,SAAS,KAAA,EAAO;AACd,IAAA,OAAA,CAAQ,UAAU,KAAK,CAAA;AACvB,IAAA,OAAO;AAAA,MACL,oBAAA,EAAsB,IAAA;AAAA,MACtB,wBAAA,EAA0B;AAAA,KAC5B;AAAA,EACF;AACF","file":"index.cjs","sourcesContent":["import type {\n  AthenaGatewayEndpointPath,\n  AthenaGatewayErrorCode,\n  AthenaGatewayErrorDetails,\n  AthenaGatewayMethod,\n  AthenaGatewayResponse,\n} from './types.js'\n\nexport interface AthenaGatewayErrorInput {\n  code: AthenaGatewayErrorCode\n  message: string\n  status?: number\n  endpoint?: AthenaGatewayEndpointPath\n  method?: AthenaGatewayMethod\n  requestId?: string\n  hint?: string\n  cause?: string\n}\n\n/**\n * Canonical error for gateway failures.\n * Holds request context and machine-readable classification.\n */\nexport class AthenaGatewayError extends Error {\n  readonly code: AthenaGatewayErrorCode\n  readonly status: number\n  readonly endpoint?: AthenaGatewayEndpointPath\n  readonly method?: AthenaGatewayMethod\n  readonly requestId?: string\n  readonly hint?: string\n  readonly causeDetail?: string\n\n  constructor(input: AthenaGatewayErrorInput) {\n    super(input.message)\n    this.name = 'AthenaGatewayError'\n    this.code = input.code\n    this.status = input.status ?? 0\n    this.endpoint = input.endpoint\n    this.method = input.method\n    this.requestId = input.requestId\n    this.hint = input.hint\n    this.causeDetail = input.cause\n  }\n\n  toDetails(): AthenaGatewayErrorDetails {\n    return {\n      code: this.code,\n      message: this.message,\n      status: this.status,\n      endpoint: this.endpoint,\n      method: this.method,\n      requestId: this.requestId,\n      hint: this.hint,\n      cause: this.causeDetail,\n    }\n  }\n\n  static fromResponse<T>(\n    response: AthenaGatewayResponse<T>,\n    fallback: Omit<AthenaGatewayErrorInput, 'code' | 'message' | 'status'>,\n  ) {\n    const details = response.errorDetails\n    if (details) {\n      return new AthenaGatewayError({\n        code: details.code,\n        message: details.message,\n        status: details.status,\n        endpoint: details.endpoint ?? fallback.endpoint,\n        method: details.method ?? fallback.method,\n        requestId: details.requestId ?? fallback.requestId,\n        hint: details.hint,\n        cause: details.cause,\n      })\n    }\n\n    return new AthenaGatewayError({\n      code: 'HTTP_ERROR',\n      message: response.error ?? 'Gateway request failed',\n      status: response.status,\n      endpoint: fallback.endpoint,\n      method: fallback.method,\n      requestId: fallback.requestId,\n    })\n  }\n}\n\nexport function isAthenaGatewayError(error: unknown): error is AthenaGatewayError {\n  return error instanceof AthenaGatewayError\n}\n","export function parseBooleanFlag(\n  rawValue: string | undefined,\n  fallback: boolean,\n): boolean {\n  if (!rawValue) return fallback\n\n  const normalized = rawValue.trim().toLowerCase()\n\n  if (\n    normalized === '1' ||\n    normalized === 'true' ||\n    normalized === 'yes' ||\n    normalized === 'on'\n  ) {\n    return true\n  }\n\n  if (\n    normalized === '0' ||\n    normalized === 'false' ||\n    normalized === 'no' ||\n    normalized === 'off'\n  ) {\n    return false\n  }\n\n  return fallback\n}\n","import type { AthenaResult } from './client.ts'\nimport { AthenaGatewayError, isAthenaGatewayError } from './gateway/errors.ts'\nimport type { AthenaGatewayErrorCode, AthenaGatewayErrorDetails } from './gateway/types.ts'\nimport { parseBooleanFlag as parseBooleanFlagUtil } from './utils/parse-boolean-flag.ts'\n\nexport type AthenaErrorKind =\n  | 'unique_violation'\n  | 'not_found'\n  | 'validation'\n  | 'auth'\n  | 'rate_limit'\n  | 'transient'\n  | 'unknown'\n\nexport const AthenaErrorKind = {\n  UniqueViolation: 'unique_violation',\n  NotFound: 'not_found',\n  Validation: 'validation',\n  Auth: 'auth',\n  RateLimit: 'rate_limit',\n  Transient: 'transient',\n  Unknown: 'unknown',\n} as const\n\nexport type AthenaErrorCode =\n  | 'UNIQUE_VIOLATION'\n  | 'NOT_FOUND'\n  | 'VALIDATION_FAILED'\n  | 'AUTH_UNAUTHORIZED'\n  | 'AUTH_FORBIDDEN'\n  | 'RATE_LIMITED'\n  | 'NETWORK_UNAVAILABLE'\n  | 'TRANSIENT_FAILURE'\n  | 'HTTP_FAILURE'\n  | 'UNKNOWN'\n\nexport const AthenaErrorCode = {\n  UniqueViolation: 'UNIQUE_VIOLATION',\n  NotFound: 'NOT_FOUND',\n  ValidationFailed: 'VALIDATION_FAILED',\n  AuthUnauthorized: 'AUTH_UNAUTHORIZED',\n  AuthForbidden: 'AUTH_FORBIDDEN',\n  RateLimited: 'RATE_LIMITED',\n  NetworkUnavailable: 'NETWORK_UNAVAILABLE',\n  TransientFailure: 'TRANSIENT_FAILURE',\n  HttpFailure: 'HTTP_FAILURE',\n  Unknown: 'UNKNOWN',\n} as const satisfies Record<string, AthenaErrorCode>\n\nexport type AthenaErrorCategory = 'transport' | 'client' | 'server' | 'database' | 'unknown'\n\nexport const AthenaErrorCategory = {\n  Transport: 'transport',\n  Client: 'client',\n  Server: 'server',\n  Database: 'database',\n  Unknown: 'unknown',\n} as const satisfies Record<string, AthenaErrorCategory>\n\nexport interface AthenaOperationContext {\n  table?: string\n  operation?: string\n  identity?: string | Record<string, unknown>\n}\n\nexport interface NormalizedAthenaError {\n  kind: AthenaErrorKind\n  code: AthenaErrorCode\n  category: AthenaErrorCategory\n  retryable: boolean\n  status?: number\n  constraint?: string\n  table?: string\n  operation?: string\n  message: string\n  raw: unknown\n}\n\nexport interface AthenaErrorInput {\n  code: AthenaErrorCode\n  kind: AthenaErrorKind\n  category: AthenaErrorCategory\n  message: string\n  status?: number\n  retryable?: boolean\n  requestId?: string\n  context?: AthenaOperationContext\n  raw?: unknown\n}\n\nexport interface UnwrapOptions {\n  allowNull?: boolean\n  context?: AthenaOperationContext\n}\n\nexport interface UnwrapOneOptions extends UnwrapOptions {\n  requireExactlyOne?: boolean\n}\n\nexport interface IntCoercionOptions {\n  strictBigInt?: boolean\n  min?: number\n  max?: number\n}\n\nexport type RetryBackoffStrategy =\n  | 'linear'\n  | 'exponential'\n  | ((attempt: number, error: unknown) => number)\n\nexport interface RetryConfig {\n  retries: number\n  baseDelayMs?: number\n  maxDelayMs?: number\n  backoff?: RetryBackoffStrategy\n  jitter?: boolean | number\n  shouldRetry?: (error: unknown, attempt: number) => boolean | Promise<boolean>\n}\n\nexport interface RequireAffectedOptions {\n  min?: number\n}\n\n/**\n * Parses a string-based boolean flag with a deterministic fallback.\n *\n * Accepts common truthy/falsey token variants used by env vars and CLI flags.\n */\nexport function parseBooleanFlag(\n  rawValue: string | undefined,\n  fallback: boolean,\n): boolean {\n  return parseBooleanFlagUtil(rawValue, fallback)\n}\n\nexport class AthenaError extends Error {\n  readonly code: AthenaErrorCode\n  readonly kind: AthenaErrorKind\n  readonly category: AthenaErrorCategory\n  readonly status?: number\n  readonly retryable: boolean\n  readonly requestId?: string\n  readonly context?: AthenaOperationContext\n  readonly raw?: unknown\n\n  constructor(input: AthenaErrorInput) {\n    super(input.message)\n    this.name = 'AthenaError'\n    this.code = input.code\n    this.kind = input.kind\n    this.category = input.category\n    this.status = input.status\n    this.retryable = input.retryable ?? false\n    this.requestId = input.requestId\n    this.context = input.context\n    this.raw = input.raw\n  }\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return Boolean(value) && typeof value === 'object' && !Array.isArray(value)\n}\n\nfunction firstNonEmptyString(...values: unknown[]): string | undefined {\n  for (const value of values) {\n    if (typeof value === 'string' && value.trim().length > 0) {\n      return value.trim()\n    }\n  }\n  return undefined\n}\n\nfunction messageFromUnknownError(error: unknown): string | undefined {\n  if (typeof error === 'string' && error.trim().length > 0) {\n    return error.trim()\n  }\n  if (error instanceof Error && error.message.trim().length > 0) {\n    return error.message.trim()\n  }\n  if (!isRecord(error)) {\n    return undefined\n  }\n  return firstNonEmptyString(error.message, error.error, error.details)\n}\n\nfunction gatewayCodeFromUnknownError(error: unknown): AthenaGatewayErrorCode | undefined {\n  if (!isRecord(error) || typeof error.gatewayCode !== 'string') {\n    return undefined\n  }\n  return error.gatewayCode as AthenaGatewayErrorCode\n}\n\nfunction isAthenaResultErrorLike(\n  value: unknown,\n): value is {\n  message: string\n  athenaCode?: AthenaErrorCode\n  kind?: AthenaErrorKind\n  category?: AthenaErrorCategory\n  retryable?: boolean\n  status?: number\n  constraint?: string\n  table?: string\n  operation?: string\n  raw?: unknown\n} {\n  return (\n    isRecord(value) &&\n    typeof value.message === 'string' &&\n    (value.athenaCode === undefined || isAthenaErrorCode(value.athenaCode)) &&\n    (value.kind === undefined || isAthenaErrorKind(value.kind)) &&\n    (value.category === undefined || isAthenaErrorCategory(value.category)) &&\n    (value.retryable === undefined || typeof value.retryable === 'boolean') &&\n    (value.status === undefined || typeof value.status === 'number')\n  )\n}\n\nfunction isAthenaErrorKind(value: unknown): value is AthenaErrorKind {\n  return (\n    value === 'unique_violation' ||\n    value === 'not_found' ||\n    value === 'validation' ||\n    value === 'auth' ||\n    value === 'rate_limit' ||\n    value === 'transient' ||\n    value === 'unknown'\n  )\n}\n\nfunction isAthenaErrorCode(value: unknown): value is AthenaErrorCode {\n  return (\n    value === 'UNIQUE_VIOLATION' ||\n    value === 'NOT_FOUND' ||\n    value === 'VALIDATION_FAILED' ||\n    value === 'AUTH_UNAUTHORIZED' ||\n    value === 'AUTH_FORBIDDEN' ||\n    value === 'RATE_LIMITED' ||\n    value === 'NETWORK_UNAVAILABLE' ||\n    value === 'TRANSIENT_FAILURE' ||\n    value === 'HTTP_FAILURE' ||\n    value === 'UNKNOWN'\n  )\n}\n\nfunction isAthenaErrorCategory(value: unknown): value is AthenaErrorCategory {\n  return (\n    value === 'transport' ||\n    value === 'client' ||\n    value === 'server' ||\n    value === 'database' ||\n    value === 'unknown'\n  )\n}\n\nfunction isNormalizedAthenaError(value: unknown): value is NormalizedAthenaError {\n  return (\n    isRecord(value) &&\n    isAthenaErrorKind(value.kind) &&\n    isAthenaErrorCode(value.code) &&\n    isAthenaErrorCategory(value.category) &&\n    typeof value.retryable === 'boolean' &&\n    typeof value.message === 'string' &&\n    'raw' in value\n  )\n}\n\nfunction withContextOverrides(\n  normalized: NormalizedAthenaError,\n  context?: AthenaOperationContext,\n): NormalizedAthenaError {\n  if (!context?.table && !context?.operation) {\n    return normalized\n  }\n\n  return {\n    ...normalized,\n    table: context.table ?? normalized.table,\n    operation: context.operation ?? normalized.operation,\n  }\n}\n\nfunction resolveAttachedNormalizedError(resultOrError: unknown): NormalizedAthenaError | undefined {\n  if (!isRecord(resultOrError)) return undefined\n  if (!('__athenaNormalizedError' in resultOrError)) return undefined\n  const candidate = resultOrError.__athenaNormalizedError\n  return isNormalizedAthenaError(candidate) ? candidate : undefined\n}\n\nfunction safeStringify(value: unknown): string {\n  try {\n    const serialized = JSON.stringify(value)\n    return serialized ?? String(value)\n  } catch {\n    return '[unserializable]'\n  }\n}\n\nfunction contextHint(context?: AthenaOperationContext): string | undefined {\n  if (!context?.identity) return undefined\n  const identity =\n    typeof context.identity === 'string' ? context.identity : safeStringify(context.identity)\n  return `Identity: ${identity}`\n}\n\nfunction isAthenaResultLike(value: unknown): value is AthenaResult<unknown> {\n  return (\n    isRecord(value) &&\n    'status' in value &&\n    'error' in value &&\n    'data' in value &&\n    typeof value.status === 'number'\n  )\n}\n\nfunction operationFromDetails(details?: AthenaGatewayErrorDetails | null): string | undefined {\n  if (!details?.endpoint) return undefined\n  if (details.endpoint === '/gateway/fetch' || details.endpoint === '/gateway/query') return 'select'\n  if (details.endpoint === '/gateway/insert') return 'insert'\n  if (details.endpoint === '/gateway/update') return 'update'\n  if (details.endpoint === '/gateway/delete') return 'delete'\n  if (details.endpoint === '/gateway/rpc' || details.endpoint.startsWith('/rpc/')) return 'rpc'\n  return undefined\n}\n\nfunction matchRegex(input: string, patterns: RegExp[]): string | undefined {\n  for (const pattern of patterns) {\n    const match = pattern.exec(input)\n    if (match?.[1]) return match[1]\n  }\n  return undefined\n}\n\nfunction extractConstraint(message: string): string | undefined {\n  return matchRegex(message, [\n    /unique constraint\\s+[\"'`]([^\"'`]+)[\"'`]/i,\n    /constraint\\s+[\"'`]([^\"'`]+)[\"'`]/i,\n  ])\n}\n\nfunction extractTable(message: string): string | undefined {\n  return matchRegex(message, [\n    /(?:table|relation)\\s+[\"'`]([^\"'`]+)[\"'`]/i,\n    /on\\s+table\\s+([a-zA-Z0-9_.]+)/i,\n  ])\n}\n\nfunction classifyKind(status: number | undefined, code: AthenaGatewayErrorCode | undefined, message: string): AthenaErrorKind {\n  const lower = message.toLowerCase()\n  const hasUniquePattern =\n    lower.includes('unique constraint') ||\n    lower.includes('duplicate key') ||\n    lower.includes('already exists') ||\n    lower.includes('duplicate')\n  const hasNotFoundPattern = lower.includes('not found') || lower.includes('no rows')\n  const hasValidationPattern =\n    lower.includes('validation') || lower.includes('invalid') || lower.includes('malformed')\n  const hasAuthPattern =\n    lower.includes('unauthorized') || lower.includes('forbidden') || lower.includes('auth')\n  const hasRateLimitPattern = lower.includes('rate limit') || lower.includes('too many requests')\n  const hasTransientPattern =\n    lower.includes('timeout') ||\n    lower.includes('temporar') ||\n    lower.includes('connection reset') ||\n    lower.includes('socket') ||\n    lower.includes('deadlock')\n\n  if (status === 409 || hasUniquePattern) return 'unique_violation'\n  if (status === 404 || hasNotFoundPattern) return 'not_found'\n  if (status === 401 || status === 403 || hasAuthPattern) return 'auth'\n  if (status === 429 || hasRateLimitPattern) return 'rate_limit'\n  if (code === 'INVALID_URL') return 'validation'\n  if (status === 400 || status === 422 || hasValidationPattern) return 'validation'\n  if (code === 'NETWORK_ERROR' || status === 0 || (status !== undefined && status >= 500) || hasTransientPattern) {\n    return 'transient'\n  }\n  return 'unknown'\n}\n\nfunction toAthenaErrorCode(\n  kind: AthenaErrorKind,\n  status: number | undefined,\n  gatewayCode?: AthenaGatewayErrorCode,\n): AthenaErrorCode {\n  if (gatewayCode === 'INVALID_URL') {\n    return AthenaErrorCode.ValidationFailed\n  }\n\n  if (gatewayCode === 'NETWORK_ERROR' || (kind === 'transient' && status === 0)) {\n    return AthenaErrorCode.NetworkUnavailable\n  }\n\n  switch (kind) {\n    case 'unique_violation':\n      return AthenaErrorCode.UniqueViolation\n    case 'not_found':\n      return AthenaErrorCode.NotFound\n    case 'validation':\n      return AthenaErrorCode.ValidationFailed\n    case 'rate_limit':\n      return AthenaErrorCode.RateLimited\n    case 'auth':\n      if (status === 403) {\n        return AthenaErrorCode.AuthForbidden\n      }\n      return AthenaErrorCode.AuthUnauthorized\n    case 'transient':\n      return status !== undefined && status >= 500\n        ? AthenaErrorCode.HttpFailure\n        : AthenaErrorCode.TransientFailure\n    case 'unknown':\n    default:\n      return status !== undefined && status >= 400\n        ? AthenaErrorCode.HttpFailure\n        : AthenaErrorCode.Unknown\n  }\n}\n\nfunction toAthenaErrorCategory(kind: AthenaErrorKind, status: number | undefined): AthenaErrorCategory {\n  if (kind === 'transient' && (status === 0 || status === undefined)) {\n    return AthenaErrorCategory.Transport\n  }\n  if (kind === 'unique_violation') return AthenaErrorCategory.Database\n  if (kind === 'validation' || kind === 'auth' || kind === 'not_found') return AthenaErrorCategory.Client\n  if (kind === 'rate_limit' || kind === 'transient') return AthenaErrorCategory.Server\n  return AthenaErrorCategory.Unknown\n}\n\nfunction isRetryable(kind: AthenaErrorKind, status: number | undefined): boolean {\n  if (kind === 'rate_limit' || kind === 'transient') return true\n  return status !== undefined && status >= 500\n}\n\nfunction toGatewayCode(kind: AthenaErrorKind, status?: number): AthenaGatewayErrorCode {\n  if (kind === 'transient' && (status === 0 || status === undefined)) return 'NETWORK_ERROR'\n  if (kind === 'validation') return 'INVALID_JSON'\n  if (status !== undefined && status >= 400) return 'HTTP_ERROR'\n  return 'UNKNOWN_ERROR'\n}\n\nfunction toAthenaGatewayError(\n  source: unknown,\n  fallbackMessage: string,\n  context?: AthenaOperationContext,\n): AthenaGatewayError {\n  if (isAthenaGatewayError(source)) {\n    return source\n  }\n\n  if (isAthenaResultLike(source) && source.errorDetails) {\n    const message =\n      messageFromUnknownError(source.error) ??\n      source.errorDetails.message ??\n      fallbackMessage\n    return new AthenaGatewayError({\n      code: source.errorDetails.code,\n      message,\n      status: source.status,\n      endpoint: source.errorDetails.endpoint,\n      method: source.errorDetails.method,\n      requestId: source.errorDetails.requestId,\n      hint:\n        (isRecord(source.error) ? firstNonEmptyString(source.error.hint) : undefined) ??\n        source.errorDetails.hint,\n      cause:\n        (isRecord(source.error) ? firstNonEmptyString(source.error.cause) : undefined) ??\n        source.errorDetails.cause,\n    })\n  }\n\n  const normalized = normalizeAthenaError(source, context)\n  const message =\n    isAthenaResultLike(source) && source.error == null && source.errorDetails == null\n      ? fallbackMessage\n      : normalized.message || fallbackMessage\n\n  return new AthenaGatewayError({\n    code: toGatewayCode(normalized.kind, normalized.status),\n    message,\n    status: normalized.status ?? 0,\n    hint:\n      normalized.constraint != null\n        ? `Constraint: ${normalized.constraint}`\n        : contextHint(context),\n    cause: typeof normalized.raw === 'string' ? normalized.raw : safeStringify(normalized.raw),\n  })\n}\n\n/**\n * Returns `true` when a result is successful (`2xx` status and no `error`).\n */\nexport function isOk<T>(result: AthenaResult<T>): boolean {\n  return result.error == null && result.status >= 200 && result.status < 300\n}\n\n/**\n * @deprecated Prefer `result.error` on failed `AthenaResult` values and the\n * structured fields already attached to thrown SDK errors. This helper is\n * retained for compatibility with mixed unknown inputs.\n *\n * Normalizes any Athena failure shape into a stable, typed error envelope.\n *\n * Accepts `AthenaResult`, `AthenaGatewayError`, native `Error`, or unknown values.\n * Optional `context` can override inferred table/operation metadata for clearer diagnostics.\n */\nexport function normalizeAthenaError(\n  resultOrError: unknown,\n  context?: AthenaOperationContext,\n): NormalizedAthenaError {\n  const attached = resolveAttachedNormalizedError(resultOrError)\n  if (attached) {\n    return withContextOverrides(attached, context)\n  }\n\n  if (isAthenaResultLike(resultOrError)) {\n    if (isAthenaResultErrorLike(resultOrError.error)) {\n      return {\n        kind: resultOrError.error.kind ?? classifyKind(resultOrError.status, gatewayCodeFromUnknownError(resultOrError.error), resultOrError.error.message),\n        code:\n          resultOrError.error.athenaCode ??\n          toAthenaErrorCode(\n            resultOrError.error.kind ??\n              classifyKind(\n                resultOrError.status,\n                gatewayCodeFromUnknownError(resultOrError.error),\n                resultOrError.error.message,\n              ),\n            resultOrError.error.status ?? resultOrError.status,\n            gatewayCodeFromUnknownError(resultOrError.error),\n          ),\n        category:\n          resultOrError.error.category ??\n          toAthenaErrorCategory(\n            resultOrError.error.kind ??\n              classifyKind(\n                resultOrError.status,\n                gatewayCodeFromUnknownError(resultOrError.error),\n                resultOrError.error.message,\n              ),\n            resultOrError.error.status ?? resultOrError.status,\n          ),\n        retryable:\n          resultOrError.error.retryable ??\n          isRetryable(\n            resultOrError.error.kind ??\n              classifyKind(\n                resultOrError.status,\n                gatewayCodeFromUnknownError(resultOrError.error),\n                resultOrError.error.message,\n              ),\n            resultOrError.error.status ?? resultOrError.status,\n          ),\n        status: resultOrError.error.status ?? resultOrError.status,\n        constraint: resultOrError.error.constraint,\n        table: context?.table ?? resultOrError.error.table,\n        operation: context?.operation ?? resultOrError.error.operation,\n        message: resultOrError.error.message,\n        raw: resultOrError.error.raw ?? resultOrError.raw,\n      }\n    }\n\n    const details = resultOrError.errorDetails\n    const message =\n      messageFromUnknownError(resultOrError.error) ??\n      details?.message ??\n      `Athena ${context?.operation ?? operationFromDetails(details) ?? 'request'} failed`\n    const operation = context?.operation ?? operationFromDetails(details)\n    const table = context?.table ?? extractTable(message)\n    const constraint = extractConstraint(message)\n    const gatewayCode = details?.code ?? gatewayCodeFromUnknownError(resultOrError.error)\n    const kind = classifyKind(resultOrError.status, gatewayCode, message)\n    const code = toAthenaErrorCode(kind, resultOrError.status, gatewayCode)\n    const category = toAthenaErrorCategory(kind, resultOrError.status)\n    return {\n      kind,\n      code,\n      category,\n      retryable: isRetryable(kind, resultOrError.status),\n      status: resultOrError.status,\n      constraint,\n      table,\n      operation,\n      message,\n      raw: resultOrError.raw,\n    }\n  }\n\n  if (isAthenaGatewayError(resultOrError)) {\n    const details = resultOrError.toDetails()\n    const operation = context?.operation ?? operationFromDetails(details)\n    const table = context?.table ?? extractTable(resultOrError.message)\n    const constraint = extractConstraint(resultOrError.message)\n    const kind = classifyKind(resultOrError.status, resultOrError.code, resultOrError.message)\n    const code = toAthenaErrorCode(kind, resultOrError.status, resultOrError.code)\n    const category = toAthenaErrorCategory(kind, resultOrError.status)\n    return {\n      kind,\n      code,\n      category,\n      retryable: isRetryable(kind, resultOrError.status),\n      status: resultOrError.status,\n      constraint,\n      table,\n      operation,\n      message: resultOrError.message,\n      raw: resultOrError,\n    }\n  }\n\n  if (resultOrError instanceof Error) {\n    const maybeStatus =\n      isRecord(resultOrError) && typeof resultOrError.status === 'number'\n        ? resultOrError.status\n        : undefined\n    const kind = classifyKind(maybeStatus, undefined, resultOrError.message)\n    return {\n      kind,\n      code: toAthenaErrorCode(kind, maybeStatus),\n      category: toAthenaErrorCategory(kind, maybeStatus),\n      retryable: isRetryable(kind, maybeStatus),\n      status: maybeStatus,\n      constraint: extractConstraint(resultOrError.message),\n      table: context?.table ?? extractTable(resultOrError.message),\n      operation: context?.operation,\n      message: resultOrError.message,\n      raw: resultOrError,\n    }\n  }\n\n  const message = typeof resultOrError === 'string' ? resultOrError : 'Unknown Athena error'\n  const kind = classifyKind(undefined, undefined, message)\n  return {\n    kind,\n    code: toAthenaErrorCode(kind, undefined),\n    category: toAthenaErrorCategory(kind, undefined),\n    retryable: isRetryable(kind, undefined),\n    status: undefined,\n    constraint: extractConstraint(message),\n    table: context?.table ?? extractTable(message),\n    operation: context?.operation,\n    message,\n    raw: resultOrError,\n  }\n}\n\n/**\n * Unwraps a successful result into a row array.\n *\n * - Throws on failed results.\n * - Converts `null` data to an empty array.\n * - Wraps scalar data in a single-element array.\n */\nexport function unwrapRows<T>(\n  result: AthenaResult<T[] | T | null>,\n  options?: UnwrapOptions,\n): T[] {\n  if (!isOk(result)) {\n    throw toAthenaGatewayError(result, 'Athena request failed', options?.context)\n  }\n  if (result.data == null) return []\n  return Array.isArray(result.data) ? result.data : [result.data]\n}\n\n/**\n * Unwraps successful result data from `AthenaResult<T | null>`.\n *\n * By default, `null` data throws. Pass `{ allowNull: true }` to permit nullable payloads.\n */\nexport function unwrap<T>(\n  result: AthenaResult<T | null>,\n  options: UnwrapOptions & { allowNull: true },\n): T | null\nexport function unwrap<T>(result: AthenaResult<T | null>, options?: UnwrapOptions): T\nexport function unwrap<T>(\n  result: AthenaResult<T | null>,\n  options?: UnwrapOptions,\n): T | null {\n  if (!isOk(result)) {\n    throw toAthenaGatewayError(result, 'Athena request failed', options?.context)\n  }\n  if (result.data == null && !options?.allowNull) {\n    throw toAthenaGatewayError(result, 'Expected data but received null', options?.context)\n  }\n  return result.data\n}\n\n/**\n * Unwraps the first row from a successful result that may contain arrays/scalars/null.\n *\n * - Throws on failed results.\n * - Throws when no row exists unless `allowNull: true` is provided.\n * - Optionally enforces exact cardinality via `requireExactlyOne`.\n */\nexport function unwrapOne<T>(\n  result: AthenaResult<T[] | T | null>,\n  options: UnwrapOneOptions & { allowNull: true },\n): T | null\nexport function unwrapOne<T>(result: AthenaResult<T[] | T | null>, options?: UnwrapOneOptions): T\nexport function unwrapOne<T>(\n  result: AthenaResult<T[] | T | null>,\n  options?: UnwrapOneOptions,\n): T | null {\n  const rows = unwrapRows(result, options)\n  if (!rows.length) {\n    if (options?.allowNull) return null\n    throw toAthenaGatewayError(result, 'Expected one row but received none', options?.context)\n  }\n  if (options?.requireExactlyOne && rows.length !== 1) {\n    throw toAthenaGatewayError(\n      result,\n      `Expected exactly one row but received ${rows.length}`,\n      options.context,\n    )\n  }\n  return rows[0]\n}\n\n/**\n * Asserts that an Athena result is successful.\n *\n * Returns the original result for fluent composition and throws `AthenaGatewayError` on failure.\n */\nexport function requireSuccess<T>(\n  result: AthenaResult<T>,\n  context?: AthenaOperationContext,\n): AthenaResult<T> {\n  if (!isOk(result)) {\n    throw toAthenaGatewayError(\n      result,\n      `Athena ${context?.operation ?? 'request'} failed`,\n      context,\n    )\n  }\n  return result\n}\n\n/**\n * Enforces mutation postconditions based on `result.count`.\n *\n * - Validates success first.\n * - Requires a non-null count in the response.\n * - Validates `count >= min` (default: `1`).\n *\n * Useful for guaranteeing that critical writes actually affected rows.\n */\nexport function requireAffected<T>(\n  result: AthenaResult<T>,\n  options?: RequireAffectedOptions,\n  context?: AthenaOperationContext,\n): number {\n  requireSuccess(result, context)\n\n  const minimum = options?.min ?? 1\n  const count = result.count\n  if (count == null) {\n    throw new AthenaGatewayError({\n      code: 'UNKNOWN_ERROR',\n      status: result.status,\n      message: 'Expected affected row count but response.count is missing',\n      hint: 'Set call option { count: \"exact\" } for mutation postcondition checks.',\n      cause: safeStringify(result.raw),\n    })\n  }\n\n  if (count < minimum) {\n    throw new AthenaGatewayError({\n      code: 'UNKNOWN_ERROR',\n      status: result.status,\n      message: `Expected at least ${minimum} affected rows but received ${count}`,\n      hint: contextHint(context),\n      cause: safeStringify(result.raw),\n    })\n  }\n\n  return count\n}\n\nfunction applyBounds(value: number, options?: IntCoercionOptions): number | null {\n  if (options?.min !== undefined && value < options.min) return null\n  if (options?.max !== undefined && value > options.max) return null\n  return value\n}\n\nfunction parseIntegerString(value: string): number | null {\n  const normalized = value.trim()\n  if (!/^[-+]?\\d+$/.test(normalized)) return null\n  const parsed = Number(normalized)\n  if (!Number.isFinite(parsed) || !Number.isInteger(parsed)) return null\n  return parsed\n}\n\n/**\n * Safely coerces `unknown` values into finite integers.\n *\n * Returns `null` when coercion fails or bounds/strict bigint checks are violated.\n */\nexport function coerceInt(value: unknown, options?: IntCoercionOptions): number | null {\n  if (value == null) return null\n\n  if (typeof value === 'number') {\n    if (!Number.isFinite(value) || !Number.isInteger(value)) return null\n    return applyBounds(value, options)\n  }\n\n  if (typeof value === 'string') {\n    const parsed = parseIntegerString(value)\n    if (parsed == null) return null\n    return applyBounds(parsed, options)\n  }\n\n  if (typeof value === 'bigint') {\n    if (options?.strictBigInt) {\n      if (value > BigInt(Number.MAX_SAFE_INTEGER) || value < BigInt(Number.MIN_SAFE_INTEGER)) {\n        return null\n      }\n    }\n    const parsed = Number(value)\n    if (!Number.isFinite(parsed) || !Number.isInteger(parsed)) return null\n    return applyBounds(parsed, options)\n  }\n\n  return null\n}\n\n/**\n * Strict integer assertion wrapper around `coerceInt`.\n *\n * Throws a `TypeError` with the provided label when coercion fails.\n */\nexport function assertInt(value: unknown, label = 'value', options?: IntCoercionOptions): number {\n  const parsed = coerceInt(value, options)\n  if (parsed == null) {\n    throw new TypeError(`${label} must be a finite integer`)\n  }\n  return parsed\n}\n\nfunction defaultShouldRetry(error: unknown): boolean {\n  const normalized = normalizeAthenaError(error)\n  return normalized.kind === 'transient' || normalized.kind === 'rate_limit'\n}\n\nfunction computeDelayMs(\n  attempt: number,\n  error: unknown,\n  config: Required<Pick<RetryConfig, 'baseDelayMs' | 'backoff' | 'maxDelayMs' | 'jitter'>>,\n): number {\n  const baseDelay = config.baseDelayMs\n  const rawDelay =\n    typeof config.backoff === 'function'\n      ? config.backoff(attempt, error)\n      : config.backoff === 'linear'\n        ? baseDelay * attempt\n        : baseDelay * Math.pow(2, attempt - 1)\n\n  const safeDelay = Number.isFinite(rawDelay) ? Math.max(0, rawDelay) : 0\n  const clamped = Math.min(config.maxDelayMs, safeDelay)\n  const jitterFactor =\n    typeof config.jitter === 'number'\n      ? Math.max(0, Math.min(1, config.jitter))\n      : config.jitter\n        ? 0.2\n        : 0\n\n  if (!jitterFactor) return clamped\n  const deviation = clamped * jitterFactor\n  const offset = (Math.random() * 2 - 1) * deviation\n  return Math.max(0, clamped + offset)\n}\n\nfunction sleep(ms: number): Promise<void> {\n  if (ms <= 0) return Promise.resolve()\n  return new Promise(resolve => {\n    setTimeout(resolve, ms)\n  })\n}\n\n/**\n * @deprecated Prefer `retryReads` for standard SDK-managed read\n * retries, or a call-site retry policy when you need custom write/replay\n * behavior. This helper is retained for compatibility.\n *\n * Retries an async operation with configurable backoff and retry policy.\n *\n * `retries` represents additional attempts after the first failure.\n * By default, transient and rate-limit errors are retried.\n */\nexport async function withRetry<T>(config: RetryConfig, fn: () => Promise<T>): Promise<T> {\n  const retries = Math.max(0, Math.trunc(config.retries))\n  const shouldRetry = config.shouldRetry ?? defaultShouldRetry\n  const resolvedConfig = {\n    baseDelayMs: config.baseDelayMs ?? 100,\n    maxDelayMs: config.maxDelayMs ?? 10_000,\n    backoff: config.backoff ?? 'exponential',\n    jitter: config.jitter ?? false,\n  } satisfies Required<Pick<RetryConfig, 'baseDelayMs' | 'backoff' | 'maxDelayMs' | 'jitter'>>\n\n  for (let attempts = 0; attempts <= retries; attempts += 1) {\n    try {\n      return await fn()\n    } catch (error) {\n      if (attempts >= retries) {\n        throw error\n      }\n\n      const currentAttempt = attempts + 1\n      const retry = await shouldRetry(error, currentAttempt)\n      if (!retry) {\n        throw error\n      }\n\n      const delay = computeDelayMs(currentAttempt, error, resolvedConfig)\n      await sleep(delay)\n    }\n  }\n\n  throw new Error('withRetry reached an unexpected state')\n}\n","import { normalizeAthenaError, withRetry } from './auxiliaries.ts'\nimport type {\n  AthenaOperationContext,\n  NormalizedAthenaError,\n  RetryConfig,\n} from './auxiliaries.ts'\nimport type {\n  AthenaGatewayErrorDetails,\n  AthenaGatewayResponse,\n} from './gateway/types.ts'\n\nconst ATHENA_NORMALIZED_ERROR_KEY = '__athenaNormalizedError' as const\n\nconst READ_RETRY_CONFIG: RetryConfig = {\n  retries: 2,\n  baseDelayMs: 100,\n  maxDelayMs: 1_000,\n  backoff: 'exponential',\n  jitter: true,\n}\n\nexport interface AthenaResult<T> {\n  data: T | null\n  error: AthenaResultError | null\n  statusText?: string | null\n  /**\n   * @deprecated Prefer `error?.gatewayCode`, `error?.hint`, and related fields on `error`.\n   */\n  errorDetails?: AthenaGatewayErrorDetails | null\n  status: number\n  count?: number | null\n  raw: unknown\n}\n\nexport interface AthenaResultError {\n  message: string\n  code: string | null\n  athenaCode: NormalizedAthenaError['code']\n  gatewayCode?: AthenaGatewayErrorDetails['code'] | null\n  kind: NormalizedAthenaError['kind']\n  category: NormalizedAthenaError['category']\n  retryable: boolean\n  details: unknown | null\n  hint: string | null\n  status: number\n  statusText: string | null\n  constraint?: string\n  table?: string\n  operation?: string\n  endpoint?: AthenaGatewayErrorDetails['endpoint']\n  method?: AthenaGatewayErrorDetails['method']\n  requestId?: string\n  cause?: string\n  raw: unknown\n}\n\nexport type AthenaResultFormatter = <T>(\n  response: AthenaGatewayResponse<T>,\n  context?: AthenaOperationContext,\n) => AthenaResult<T>\n\nfunction formatResult<T>(response: AthenaGatewayResponse<T>): AthenaResult<T> {\n  const result: AthenaResult<T> = {\n    data: response.data ?? null,\n    error: null,\n    errorDetails: response.errorDetails ?? null,\n    status: response.status,\n    statusText: response.statusText ?? null,\n    raw: response.raw,\n  }\n  if (response.count !== undefined) {\n    result.count = response.count\n  }\n  return result\n}\n\nfunction attachNormalizedError<T>(\n  result: AthenaResult<T>,\n  normalizedError: NormalizedAthenaError,\n): void {\n  Object.defineProperty(result, ATHENA_NORMALIZED_ERROR_KEY, {\n    value: normalizedError,\n    enumerable: false,\n    configurable: true,\n    writable: false,\n  })\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return Boolean(value) && typeof value === 'object' && !Array.isArray(value)\n}\n\nfunction firstNonEmptyString(...values: unknown[]): string | undefined {\n  for (const value of values) {\n    if (typeof value === 'string' && value.trim().length > 0) {\n      return value.trim()\n    }\n  }\n  return undefined\n}\n\nfunction resolveStructuredErrorPayload(raw: unknown): Record<string, unknown> | null {\n  if (!isRecord(raw)) return null\n  return isRecord(raw.error) ? raw.error : raw\n}\n\nfunction resolveStructuredErrorDetails(\n  payload: Record<string, unknown> | null,\n  message: string,\n): unknown | null {\n  if (!payload || !('details' in payload)) {\n    return null\n  }\n  const details = payload.details\n  if (details == null) {\n    return null\n  }\n  if (typeof details === 'string' && details.trim() === message.trim()) {\n    return null\n  }\n  return details\n}\n\nfunction createResultError<T>(\n  response: AthenaGatewayResponse<T>,\n  result: AthenaResult<T>,\n  normalized: NormalizedAthenaError,\n): AthenaResultError {\n  const rawRecord = isRecord(response.raw) ? response.raw : null\n  const payload = resolveStructuredErrorPayload(response.raw)\n  const message =\n    firstNonEmptyString(\n      response.error,\n      payload?.message,\n      payload?.error,\n      payload?.details,\n      response.errorDetails?.message,\n      normalized.message,\n    ) ?? normalized.message\n  const statusText = firstNonEmptyString(response.statusText, rawRecord?.statusText) ?? null\n  const hint = firstNonEmptyString(payload?.hint, response.errorDetails?.hint) ?? null\n  const code = firstNonEmptyString(payload?.code) ?? normalized.code\n  const details =\n    resolveStructuredErrorDetails(payload, message) ?? response.errorDetails?.cause ?? null\n\n  return {\n    message,\n    code,\n    athenaCode: normalized.code,\n    gatewayCode: response.errorDetails?.code ?? null,\n    kind: normalized.kind,\n    category: normalized.category,\n    retryable: normalized.retryable,\n    details,\n    hint,\n    status: result.status,\n    statusText,\n    constraint: normalized.constraint,\n    table: normalized.table,\n    operation: normalized.operation,\n    endpoint: response.errorDetails?.endpoint,\n    method: response.errorDetails?.method,\n    requestId: response.errorDetails?.requestId,\n    cause: response.errorDetails?.cause,\n    raw: result.raw,\n  }\n}\n\nexport function createResultFormatter(): AthenaResultFormatter {\n  return <T>(\n    response: AthenaGatewayResponse<T>,\n    context?: AthenaOperationContext,\n  ): AthenaResult<T> => {\n    const result = formatResult(response)\n    if (response.error == null && response.errorDetails == null) {\n      return result\n    }\n    const normalizedError = normalizeAthenaError(\n      {\n        ...result,\n        error: response.error ?? response.errorDetails?.message ?? null,\n      },\n      context,\n    )\n    result.error = createResultError(response, result, normalizedError)\n    attachNormalizedError(result, normalizedError)\n    return result\n  }\n}\n\nexport async function executeRead<T>(\n  behavior: { retryReads?: boolean } | undefined,\n  runner: () => Promise<AthenaResult<T>>,\n): Promise<AthenaResult<T>> {\n  if (!behavior?.retryReads) {\n    return runner()\n  }\n\n  let lastRetryableResult: AthenaResult<T> | undefined\n  let lastRetrySignal: AthenaResultError | null = null\n  try {\n    return await withRetry(\n      {\n        ...READ_RETRY_CONFIG,\n        shouldRetry: error =>\n          error === lastRetrySignal || normalizeAthenaError(error).retryable,\n      },\n      async () => {\n        const result = await runner()\n        if (result.error?.retryable) {\n          lastRetryableResult = result\n          lastRetrySignal = result.error\n          throw lastRetrySignal\n        }\n        return result\n      },\n    )\n  } catch (error) {\n    if (lastRetryableResult && error === lastRetrySignal) {\n      return lastRetryableResult\n    }\n    throw error\n  }\n}\n\nexport function toSingleResult<Result>(\n  response: AthenaResult<Result>,\n): AthenaResult<Result extends Array<infer Item> ? Item | null : Result | null> {\n  const payload = response.data\n  const singleData = Array.isArray(payload)\n    ? payload.length\n      ? payload[0]\n      : null\n    : (payload ?? null)\n  return {\n    ...response,\n    data: singleData as Result extends Array<infer Item> ? Item | null : Result | null,\n  }\n}\n\n","import type {\n  AthenaFetchPayload,\n  AthenaGatewayCondition,\n  AthenaJsonArray,\n  AthenaJsonObject,\n  AthenaJsonValue,\n  AthenaSortBy,\n} from './types.ts'\n\nconst IDENTIFIER_SEGMENT_PATTERN = /^[A-Za-z_][A-Za-z0-9_]*$/\n\nfunction isIdentifierPath(value: string): boolean {\n  const segments = value.split('.').map(segment => segment.trim())\n  return segments.length > 1 && segments.every(segment => IDENTIFIER_SEGMENT_PATTERN.test(segment))\n}\n\nfunction extractRelationHead(raw: string): string {\n  const trimmed = raw.trim()\n  if (!trimmed) return ''\n\n  const aliasIndex = trimmed.indexOf(':')\n  const withoutAlias = aliasIndex >= 0 ? trimmed.slice(aliasIndex + 1).trim() : trimmed\n  const modifierIndex = withoutAlias.indexOf('!')\n  return (modifierIndex >= 0 ? withoutAlias.slice(0, modifierIndex) : withoutAlias).trim()\n}\n\nfunction hasSchemaQualifiedRelationToken(select: string): boolean {\n  let singleQuoted = false\n  let doubleQuoted = false\n  let tokenStart = 0\n\n  for (let index = 0; index < select.length; index += 1) {\n    const char = select[index]\n    const next = index + 1 < select.length ? select[index + 1] : ''\n\n    if (singleQuoted) {\n      if (char === \"'\" && next === \"'\") {\n        index += 1\n        continue\n      }\n      if (char === \"'\") {\n        singleQuoted = false\n      }\n      continue\n    }\n\n    if (doubleQuoted) {\n      if (char === '\"' && next === '\"') {\n        index += 1\n        continue\n      }\n      if (char === '\"') {\n        doubleQuoted = false\n      }\n      continue\n    }\n\n    if (char === \"'\") {\n      singleQuoted = true\n      continue\n    }\n\n    if (char === '\"') {\n      doubleQuoted = true\n      continue\n    }\n\n    if (char === '(') {\n      const relationHead = extractRelationHead(select.slice(tokenStart, index))\n      if (isIdentifierPath(relationHead)) {\n        return true\n      }\n      tokenStart = index + 1\n      continue\n    }\n\n    if (char === ',' || char === ')') {\n      tokenStart = index + 1\n    }\n  }\n\n  return false\n}\n\nfunction toStructuredSelectString(columns: string | string[]): string {\n  return Array.isArray(columns) ? columns.join(',') : columns\n}\n\ntype StructuredWhereOperand =\n  | AthenaJsonValue\n  | AthenaJsonArray\n  | AthenaJsonObject\n\nfunction buildStructuredWhere(\n  conditions: AthenaGatewayCondition[] | undefined,\n): AthenaJsonObject | null | undefined {\n  if (!conditions?.length) return undefined\n\n  const where: AthenaJsonObject = {}\n\n  for (const condition of conditions) {\n    if (!condition.column) {\n      return null\n    }\n    if (condition.value_cast !== undefined) {\n      return null\n    }\n\n    const operand = condition.value as StructuredWhereOperand | undefined\n    const operator = condition.operator\n    if (operator === 'eq') {\n      if (operand === undefined) return null\n    } else if (operator === 'neq' || operator === 'gt' || operator === 'lt') {\n      if (operand === undefined) return null\n    } else if (operator === 'in') {\n      if (!Array.isArray(operand)) return null\n    } else {\n      return null\n    }\n\n    const existing = where[condition.column]\n    if (existing !== undefined && (typeof existing !== 'object' || existing === null || Array.isArray(existing))) {\n      return null\n    }\n\n    const next = (existing as AthenaJsonObject | undefined) ?? {}\n    if (Object.prototype.hasOwnProperty.call(next, operator)) {\n      return null\n    }\n    next[operator] = operand as AthenaJsonValue | AthenaJsonArray\n    where[condition.column] = next\n  }\n\n  return where\n}\n\nfunction buildStructuredOrderBy(order: AthenaSortBy | undefined): AthenaJsonObject | undefined {\n  if (!order?.field) return undefined\n  return {\n    [order.field]: order.direction === 'descending' ? 'desc' : 'asc',\n  }\n}\n\nexport interface StructuredSelectTransportInput {\n  tableName: string\n  columns: string | string[]\n  conditions?: AthenaGatewayCondition[]\n  limit?: number\n  offset?: number\n  order?: AthenaSortBy\n  stripNulls: boolean\n  count?: 'exact' | 'planned' | 'estimated'\n  head?: boolean\n}\n\nexport interface StructuredSelectTransportResult {\n  payload: AthenaFetchPayload\n  select: string\n}\n\nexport function buildStructuredSelectTransport(\n  input: StructuredSelectTransportInput,\n): StructuredSelectTransportResult | null | { error: string } {\n  const select = toStructuredSelectString(input.columns).trim()\n  if (!select || select === '*') {\n    return null\n  }\n\n  if (!hasSchemaQualifiedRelationToken(select)) {\n    return null\n  }\n\n  if (input.count !== undefined || input.head !== undefined) {\n    return {\n      error:\n        'Schema-qualified nested select strings require structured select transport, which does not support count/head options in athena-js yet.',\n    }\n  }\n\n  const where = buildStructuredWhere(input.conditions)\n  if (where === null) {\n    return {\n      error:\n        'Schema-qualified nested select strings only support eq, neq, gt, lt, and in filters in athena-js structured select transport.',\n    }\n  }\n\n  return {\n    select,\n    payload: {\n      table_name: input.tableName,\n      select,\n      where,\n      orderBy: buildStructuredOrderBy(input.order),\n      limit: input.limit,\n      offset: input.offset,\n      strip_nulls: input.stripNulls,\n    },\n  }\n}\n","import type {\n  AthenaConditionArrayValue,\n  AthenaConditionOperator,\n  AthenaConditionValue,\n  AthenaGatewayCondition,\n  AthenaJsonValue,\n  AthenaSortBy,\n} from './gateway/types.ts'\nimport type {\n  AnyModelDef,\n  DatabaseDef,\n  ModelDef,\n  ModelRelationMetadata,\n  RegistryDef,\n  SchemaDef,\n} from './schema/types.ts'\nimport type { RowOf } from './schema/types.ts'\n\ntype AthenaRowShape = Record<string, AthenaJsonValue | undefined>\ntype FilterColumnKey<Row> = Extract<keyof NonNullable<Row>, string>\ntype ResolvedFilterColumnKey<Row> = [FilterColumnKey<Row>] extends [never] ? string : FilterColumnKey<Row>\n\nconst UUID_PATTERN =\n  /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i\n\ntype AthenaFilterOperator =\n  | 'eq'\n  | 'neq'\n  | 'gt'\n  | 'gte'\n  | 'lt'\n  | 'lte'\n  | 'like'\n  | 'ilike'\n  | 'is'\n  | 'in'\n  | 'contains'\n  | 'containedBy'\n\ntype AthenaWherePrimitive = AthenaConditionValue\n\nexport type AthenaWhereOperatorInput = {\n  eq?: AthenaConditionValue\n  neq?: AthenaConditionValue\n  gt?: AthenaConditionValue\n  gte?: AthenaConditionValue\n  lt?: AthenaConditionValue\n  lte?: AthenaConditionValue\n  like?: AthenaConditionValue\n  ilike?: AthenaConditionValue\n  is?: AthenaConditionValue\n  in?: AthenaConditionArrayValue\n  contains?: AthenaConditionArrayValue\n  containedBy?: AthenaConditionArrayValue\n}\n\ntype AthenaWhereColumnInput<Row = AthenaRowShape> = Partial<\n  Record<ResolvedFilterColumnKey<Row>, AthenaWherePrimitive | AthenaWhereOperatorInput>\n>\n\ntype AthenaBooleanSafeOperator = Exclude<AthenaFilterOperator, 'in' | 'contains' | 'containedBy'>\n\ntype AthenaWhereBooleanSafeOperatorInput = Partial<\n  Record<AthenaBooleanSafeOperator, AthenaConditionValue>\n>\n\ntype AthenaWhereBooleanNotOperatorInput = {\n  [K in AthenaBooleanSafeOperator]: {\n    [P in K]: AthenaConditionValue\n  } & Partial<Record<Exclude<AthenaBooleanSafeOperator, K>, never>>\n}[AthenaBooleanSafeOperator]\n\ntype AthenaStrictBooleanOperand<Keys extends string, Value> = {\n  [K in Keys]: {\n    [P in K]: Value\n  } & Partial<Record<Exclude<Keys, K>, never>>\n}[Keys]\n\ntype AthenaNonEmptyArray<T> = [T, ...T[]]\n\nexport type AthenaWhereBooleanOperand<Row = AthenaRowShape> =\n  string extends ResolvedFilterColumnKey<Row>\n    ? AthenaWhereColumnInput<Row>\n    : AthenaStrictBooleanOperand<\n        ResolvedFilterColumnKey<Row>,\n        AthenaWherePrimitive | AthenaWhereBooleanSafeOperatorInput\n      >\n\ntype AthenaWhereNotOperand<Row = AthenaRowShape> =\n  string extends ResolvedFilterColumnKey<Row>\n    ? AthenaWhereColumnInput<Row>\n    : AthenaStrictBooleanOperand<\n        ResolvedFilterColumnKey<Row>,\n        AthenaWherePrimitive | AthenaWhereBooleanNotOperatorInput\n      >\n\nexport type AthenaWhere<Row = AthenaRowShape> = AthenaWhereColumnInput<Row> & {\n  or?: string extends ResolvedFilterColumnKey<Row>\n    ? Array<AthenaWhereColumnInput<Row>>\n    : AthenaNonEmptyArray<AthenaWhereBooleanOperand<Row>>\n  not?: AthenaWhereNotOperand<Row>\n}\n\nexport interface AthenaRelationSelectNode<TSelect extends AthenaSelectShape = AthenaSelectShape> {\n  select: TSelect\n  as?: string\n  via?: string\n  schema?: string\n}\n\nexport type AthenaSelectShape = Record<string, true | AthenaRelationSelectNode<AthenaSelectShape>>\n\ntype AthenaAllowedRelationSelectNodeKey = 'select' | 'as' | 'via' | 'schema'\n\ntype AthenaValidatedRelationSelectNode<TNode> =\n  TNode extends { select: infer TChild }\n    ? Exclude<keyof TNode, AthenaAllowedRelationSelectNodeKey> extends never\n      ? TNode extends { schema: string; via: string }\n        ? never\n        : TChild extends Record<string, unknown>\n          ? {\n              [K in keyof TNode]:\n                K extends 'select'\n                  ? AthenaValidatedSelectShape<TChild>\n                  : K extends AthenaAllowedRelationSelectNodeKey\n                    ? TNode[K]\n                    : never\n            }\n          : never\n      : never\n    : never\n\nexport type AthenaValidatedSelectShape<TSelect> = {\n  [K in keyof TSelect]:\n    TSelect[K] extends true\n      ? true\n      : AthenaValidatedRelationSelectNode<TSelect[K]>\n}\n\ntype GenericRegistryDef = RegistryDef<\n  Record<string, DatabaseDef<Record<string, SchemaDef<Record<string, AnyModelDef>>>>>\n>\n\ntype AthenaOrderByDirectionInput =\n  | 'asc'\n  | 'desc'\n  | 'ascending'\n  | 'descending'\n  | boolean\n  | {\n      ascending?: boolean\n    }\n\nexport type AthenaOrderBy<Row = AthenaRowShape> =\n  | {\n      column: ResolvedFilterColumnKey<Row>\n      ascending?: boolean\n    }\n  | Partial<Record<ResolvedFilterColumnKey<Row>, AthenaOrderByDirectionInput>>\n\nexport interface AthenaFindManyOptions<\n  Row = AthenaRowShape,\n  TSelect extends AthenaSelectShape = AthenaSelectShape,\n> {\n  select: TSelect\n  where?: AthenaWhere<Row>\n  orderBy?: AthenaOrderBy<Row>\n  limit?: number\n}\n\ntype AthenaModelContext<\n  TRegistry extends GenericRegistryDef = GenericRegistryDef,\n  TDatabase extends string = string,\n  TSchema extends string = string,\n  TModel extends AnyModelDef = AnyModelDef,\n> = {\n  registry: TRegistry\n  database: TDatabase\n  schema: TSchema\n  model: TModel\n}\n\ntype Simplify<T> = {\n  [K in keyof T]: T[K]\n} & {}\n\ntype ContextRegistry<TContext> = TContext extends AthenaModelContext<infer TRegistry, string, string, AnyModelDef>\n  ? TRegistry\n  : never\n\ntype ContextDatabase<TContext> = TContext extends AthenaModelContext<GenericRegistryDef, infer TDatabase, string, AnyModelDef>\n  ? TDatabase\n  : never\n\ntype ContextModel<TContext> = TContext extends AthenaModelContext<GenericRegistryDef, string, string, infer TModel>\n  ? TModel\n  : never\n\ntype ModelMetaOf<TContext> = ContextModel<TContext> extends ModelDef<unknown, unknown, unknown, infer TMeta>\n  ? TMeta\n  : never\n\ntype ModelRelationsOf<TContext> = NonNullable<ModelMetaOf<TContext>['relations']>\n\ntype SelectedResultKey<\n  TKey extends string,\n  TValue,\n> = TValue extends { as: infer TAlias extends string } ? TAlias : TKey\n\ntype ScalarSelectionResult<Row, TSelect extends AthenaSelectShape> = {\n  [TKey in Extract<keyof TSelect, string> as TSelect[TKey] extends true ? TKey : never]-?: TKey extends keyof NonNullable<Row>\n    ? NonNullable<Row>[TKey]\n    : unknown\n}\n\ntype RelationByKey<TContext, TKey extends string> = TKey extends keyof ModelRelationsOf<TContext>\n  ? ModelRelationsOf<TContext>[TKey]\n  : never\n\ntype RelationByVia<TContext, TVia extends string> = {\n  [TKey in keyof ModelRelationsOf<TContext>]: ModelRelationsOf<TContext>[TKey] extends infer TRelation\n    ? TRelation extends ModelRelationMetadata\n      ? TVia extends TRelation['sourceColumns'][number]\n        ? TRelation\n        : never\n      : never\n    : never\n}[keyof ModelRelationsOf<TContext>]\n\ntype ResolvedRelation<TContext, TKey extends string, TValue> = RelationByKey<TContext, TKey> extends never\n  ? TValue extends { via: infer TVia extends string }\n    ? RelationByVia<TContext, TVia>\n    : never\n  : RelationByKey<TContext, TKey>\n\ntype TargetDatabaseName<TContext, TRelation extends ModelRelationMetadata> = TRelation['targetDatabase'] extends string\n  ? TRelation['targetDatabase']\n  : ContextDatabase<TContext>\n\ntype ResolveTargetModel<\n  TContext,\n  TRelation extends ModelRelationMetadata,\n> = ContextRegistry<TContext> extends infer TRegistry\n  ? TRegistry extends GenericRegistryDef\n    ? TargetDatabaseName<TContext, TRelation> extends keyof TRegistry & string\n      ? TRelation['targetSchema'] extends keyof TRegistry[TargetDatabaseName<TContext, TRelation>]['schemas'] & string\n        ? TRelation['targetModel'] extends keyof TRegistry[TargetDatabaseName<TContext, TRelation>]['schemas'][TRelation['targetSchema']]['models'] & string\n          ? TRegistry[TargetDatabaseName<TContext, TRelation>]['schemas'][TRelation['targetSchema']]['models'][TRelation['targetModel']]\n          : never\n        : never\n      : never\n    : never\n  : never\n\ntype RelationResultValue<\n  TRelation extends ModelRelationMetadata,\n  TValue,\n  TContext,\n> = TValue extends AthenaRelationSelectNode<infer TChildSelect>\n  ? ResolveTargetModel<TContext, TRelation> extends infer TTargetModel\n    ? TTargetModel extends AnyModelDef\n      ? TRelation['kind'] extends 'one-to-many' | 'many-to-many'\n        ? Array<\n            AthenaFindManyResult<\n              RowOf<TTargetModel>,\n              TChildSelect,\n              AthenaModelContext<\n                ContextRegistry<TContext>,\n                TargetDatabaseName<TContext, TRelation>,\n                TRelation['targetSchema'],\n                TTargetModel\n              >\n            >\n          >\n        : AthenaFindManyResult<\n            RowOf<TTargetModel>,\n            TChildSelect,\n            AthenaModelContext<\n              ContextRegistry<TContext>,\n              TargetDatabaseName<TContext, TRelation>,\n              TRelation['targetSchema'],\n              TTargetModel\n            >\n          > | null\n      : unknown\n    : unknown\n  : never\n\ntype RelationSelectionResult<TContext, TSelect extends AthenaSelectShape> = {\n  [TKey in Extract<keyof TSelect, string> as TSelect[TKey] extends AthenaRelationSelectNode<AthenaSelectShape>\n    ? SelectedResultKey<TKey, TSelect[TKey]>\n    : never]-?: ResolvedRelation<TContext, TKey, TSelect[TKey]> extends infer TRelation\n    ? TRelation extends ModelRelationMetadata\n      ? RelationResultValue<TRelation, TSelect[TKey], TContext>\n      : unknown\n    : unknown\n}\n\nexport type AthenaFindManyResult<\n  Row,\n  TSelect extends AthenaSelectShape,\n  TContext = unknown,\n> = Simplify<ScalarSelectionResult<Row, TSelect> & RelationSelectionResult<TContext, TSelect>>\n\nconst FILTER_OPERATORS = new Set<AthenaFilterOperator>([\n  'eq',\n  'neq',\n  'gt',\n  'gte',\n  'lt',\n  'lte',\n  'like',\n  'ilike',\n  'is',\n  'in',\n  'contains',\n  'containedBy',\n])\n\nconst BOOLEAN_SAFE_OPERATORS = new Set<AthenaBooleanSafeOperator>([\n  'eq',\n  'neq',\n  'gt',\n  'gte',\n  'lt',\n  'lte',\n  'like',\n  'ilike',\n  'is',\n])\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return Boolean(value) && typeof value === 'object' && !Array.isArray(value)\n}\n\nfunction isUuidString(value: string): boolean {\n  return UUID_PATTERN.test(value.trim())\n}\n\nfunction isUuidIdentifierColumn(column: string): boolean {\n  return column === 'id' || /(?:^|_)uuid(?:_|$)/i.test(column) || /_id$/i.test(column)\n}\n\nexport function shouldUseUuidTextComparison(column: string, value: AthenaConditionValue): boolean {\n  return typeof value === 'string' && isUuidString(value) && isUuidIdentifierColumn(column)\n}\n\nfunction isRelationSelectNode(value: unknown): value is AthenaRelationSelectNode {\n  return isRecord(value) && isRecord(value.select)\n}\n\nfunction normalizeIdentifier(value: string, label: string): string {\n  const normalized = value.trim()\n  if (!normalized) {\n    throw new Error(`${label} must be a non-empty string`)\n  }\n  return normalized\n}\n\nfunction stringifyFilterValue(value: AthenaConditionValue | AthenaConditionArrayValue | string): string {\n  if (Array.isArray(value)) {\n    return value.join(',')\n  }\n  return String(value)\n}\n\nfunction buildGatewayCondition(\n  operator: AthenaConditionOperator,\n  column?: string,\n  value?: AthenaConditionValue | AthenaConditionArrayValue | string,\n): AthenaGatewayCondition {\n  const condition: AthenaGatewayCondition = { operator }\n  if (column) {\n    condition.column = column\n    if (operator === 'eq') {\n      condition.eq_column = column\n    }\n  }\n  if (value !== undefined) {\n    condition.value = value\n    if (operator === 'eq') {\n      condition.eq_value = value\n    }\n  }\n  if (operator === 'eq' && column && value !== undefined && shouldUseUuidTextComparison(column, value as AthenaConditionValue)) {\n    condition.column_cast = 'text'\n    condition.eq_column_cast = 'text'\n  }\n  return condition\n}\n\nfunction compileRelationToken(\n  key: string,\n  node: AthenaRelationSelectNode,\n): string {\n  const nested = compileSelectShape(node.select)\n  const propertyKey = normalizeIdentifier(key, 'select relation key')\n  if (node.schema && node.via) {\n    throw new Error(\n      `findMany relation \"${propertyKey}\" cannot combine schema and via yet; use schema with the relation key, or use via without schema`,\n    )\n  }\n\n  const relationTokenBase = normalizeIdentifier(node.via ?? propertyKey, 'select relation token')\n  if (node.schema && relationTokenBase.includes('.')) {\n    throw new Error(\n      `findMany relation \"${propertyKey}\" already resolves to a qualified relation token; do not also set schema`,\n    )\n  }\n\n  const relationSchema = node.schema?.trim()\n  const relationToken = relationSchema\n    ? `${normalizeIdentifier(relationSchema, 'select relation schema')}.${relationTokenBase}`\n    : relationTokenBase\n  const alias = node.as?.trim() || (relationToken !== propertyKey ? propertyKey : '')\n  const prefix = alias ? `${alias}:` : ''\n  return `${prefix}${relationToken}(${nested})`\n}\n\nexport function compileSelectShape(select: AthenaSelectShape): string {\n  if (!isRecord(select)) {\n    throw new Error('findMany select must be an object')\n  }\n\n  const tokens: string[] = []\n  for (const [rawKey, rawValue] of Object.entries(select)) {\n    if (rawValue === undefined) {\n      continue\n    }\n\n    if (rawValue === true) {\n      tokens.push(normalizeIdentifier(rawKey, 'select column'))\n      continue\n    }\n\n    if (isRelationSelectNode(rawValue)) {\n      tokens.push(compileRelationToken(rawKey, rawValue))\n      continue\n    }\n\n    throw new Error(`Unsupported select node for \"${rawKey}\"`)\n  }\n\n  if (tokens.length === 0) {\n    throw new Error('findMany select requires at least one field')\n  }\n\n  return tokens.join(',')\n}\n\nexport function selectShapeUsesRelationSchema(select: AthenaSelectShape): boolean {\n  if (!isRecord(select)) {\n    return false\n  }\n\n  for (const rawValue of Object.values(select)) {\n    if (!isRelationSelectNode(rawValue)) {\n      continue\n    }\n    if (typeof rawValue.schema === 'string' && rawValue.schema.trim().length > 0) {\n      return true\n    }\n    if (selectShapeUsesRelationSchema(rawValue.select)) {\n      return true\n    }\n  }\n\n  return false\n}\n\nfunction compileColumnWhere(\n  column: string,\n  input: AthenaWherePrimitive | AthenaWhereOperatorInput,\n): AthenaGatewayCondition[] {\n  const normalizedColumn = normalizeIdentifier(column, 'where column')\n  if (!isRecord(input)) {\n    return [buildGatewayCondition('eq', normalizedColumn, input)]\n  }\n\n  const conditions: AthenaGatewayCondition[] = []\n  for (const [rawOperator, rawValue] of Object.entries(input)) {\n    if (rawValue === undefined) {\n      continue\n    }\n    if (!FILTER_OPERATORS.has(rawOperator as AthenaFilterOperator)) {\n      throw new Error(`Unsupported where operator \"${rawOperator}\" on \"${normalizedColumn}\"`)\n    }\n    if (\n      (rawOperator === 'in' || rawOperator === 'contains' || rawOperator === 'containedBy') &&\n      !Array.isArray(rawValue)\n    ) {\n      throw new Error(`where.${normalizedColumn}.${rawOperator} requires an array value`)\n    }\n    conditions.push(\n      buildGatewayCondition(\n        rawOperator as AthenaFilterOperator,\n        normalizedColumn,\n        rawValue as AthenaConditionValue | AthenaConditionArrayValue,\n      ),\n    )\n  }\n\n  if (conditions.length === 0) {\n    throw new Error(`where.${normalizedColumn} requires at least one operator`)\n  }\n\n  return conditions\n}\n\nfunction compileBooleanExpressionTerms(\n  clause: AthenaWhereBooleanOperand,\n  label: 'or' | 'not',\n): string[] {\n  if (!isRecord(clause)) {\n    throw new Error(`findMany where.${label} clauses must be objects`)\n  }\n\n  const entries = Object.entries(clause).filter(([, value]) => value !== undefined)\n  if (entries.length !== 1) {\n    throw new Error(`findMany where.${label} clauses must target exactly one column`)\n  }\n\n  const [rawColumn, rawValue] = entries[0]\n  const column = normalizeIdentifier(rawColumn, `where.${label} column`)\n\n  if (!isRecord(rawValue)) {\n    return [`${column}.eq.${stringifyFilterValue(rawValue as AthenaConditionValue)}`]\n  }\n\n  const operatorEntries = Object.entries(rawValue).filter(([, value]) => value !== undefined)\n  if (operatorEntries.length === 0) {\n    throw new Error(`findMany where.${label}.${column} requires at least one operator`)\n  }\n\n  if (label === 'not' && operatorEntries.length > 1) {\n    throw new Error('findMany where.not only supports a single lossless operator expression')\n  }\n\n  return operatorEntries.map(([rawOperator, rawOperand]) => {\n    if (!BOOLEAN_SAFE_OPERATORS.has(rawOperator as AthenaBooleanSafeOperator)) {\n      throw new Error(`findMany where.${label} only supports lossless scalar operators`)\n    }\n    if (Array.isArray(rawOperand)) {\n      throw new Error(`findMany where.${label} does not support array-valued operators`)\n    }\n    return `${column}.${rawOperator}.${stringifyFilterValue(rawOperand as AthenaConditionValue)}`\n  })\n}\n\nexport function compileWhere(where?: AthenaWhere): AthenaGatewayCondition[] | undefined {\n  if (where === undefined) {\n    return undefined\n  }\n  if (!isRecord(where)) {\n    throw new Error('findMany where must be an object')\n  }\n\n  const conditions: AthenaGatewayCondition[] = []\n  for (const [rawKey, rawValue] of Object.entries(where)) {\n    if (rawValue === undefined) {\n      continue\n    }\n\n    if (rawKey === 'or') {\n      if (!Array.isArray(rawValue) || rawValue.length === 0) {\n        throw new Error('findMany where.or must be a non-empty array')\n      }\n      const expressions = rawValue.flatMap(value =>\n        compileBooleanExpressionTerms(value as AthenaWhereBooleanOperand, 'or'),\n      )\n      conditions.push(buildGatewayCondition('or', undefined, expressions.join(',')))\n      continue\n    }\n\n    if (rawKey === 'not') {\n      const expressions = compileBooleanExpressionTerms(rawValue as AthenaWhereBooleanOperand, 'not')\n      if (expressions.length !== 1) {\n        throw new Error('findMany where.not must compile to exactly one lossless expression')\n      }\n      conditions.push(buildGatewayCondition('not', undefined, expressions[0]))\n      continue\n    }\n\n    conditions.push(...compileColumnWhere(rawKey, rawValue as AthenaWherePrimitive | AthenaWhereOperatorInput))\n  }\n\n  return conditions.length > 0 ? conditions : undefined\n}\n\nfunction resolveOrderDirection(input: AthenaOrderByDirectionInput): AthenaSortBy['direction'] {\n  if (typeof input === 'boolean') {\n    return input === false ? 'descending' : 'ascending'\n  }\n  if (typeof input === 'string') {\n    const normalized = input.trim().toLowerCase()\n    if (normalized === 'asc' || normalized === 'ascending') {\n      return 'ascending'\n    }\n    if (normalized === 'desc' || normalized === 'descending') {\n      return 'descending'\n    }\n    throw new Error(`Unsupported orderBy direction \"${input}\"`)\n  }\n  return input.ascending === false ? 'descending' : 'ascending'\n}\n\nexport function compileOrderBy<Row = AthenaRowShape>(orderBy?: AthenaOrderBy<Row>): AthenaSortBy | undefined {\n  if (orderBy === undefined) {\n    return undefined\n  }\n  if (!isRecord(orderBy)) {\n    throw new Error('findMany orderBy must be an object')\n  }\n\n  if ('column' in orderBy) {\n    return {\n      field: normalizeIdentifier(String(orderBy.column), 'orderBy column'),\n      direction: orderBy.ascending === false ? 'descending' : 'ascending',\n    }\n  }\n\n  const entries = Object.entries(orderBy).filter(([, value]) => value !== undefined)\n  if (entries.length === 0) {\n    return undefined\n  }\n  if (entries.length > 1) {\n    throw new Error('findMany orderBy only supports a single column in v1')\n  }\n\n  const [column, input] = entries[0]\n  return {\n    field: normalizeIdentifier(column, 'orderBy column'),\n    direction: resolveOrderDirection(input as AthenaOrderByDirectionInput),\n  }\n}\n","import { buildStructuredSelectTransport } from './gateway/structured-select.ts'\nimport type {\n  AthenaFetchPayload,\n  AthenaGatewayCallOptions,\n  AthenaGatewayCondition,\n  AthenaJsonObject,\n  AthenaSortBy,\n} from './gateway/types.ts'\nimport { shouldUseUuidTextComparison } from './query-ast.ts'\nimport type {\n  AthenaOrderBy,\n  AthenaSelectShape,\n  AthenaWhere,\n  AthenaWhereBooleanOperand,\n  AthenaWhereOperatorInput,\n} from './query-ast.ts'\n\ntype AthenaFindManyAstOrderColumn<Row> =\n  [Extract<keyof NonNullable<Row>, string>] extends [never] ? string : Extract<keyof NonNullable<Row>, string>\n\nexport interface AthenaSelectExecutionState {\n  conditions: AthenaGatewayCondition[]\n  limit?: number\n  offset?: number\n  order?: AthenaSortBy\n  currentPage?: number\n  pageSize?: number\n  totalPages?: number\n}\n\nexport type AthenaFindManyAstPayload<\n  Row,\n  TSelect extends AthenaSelectShape,\n> = {\n  table_name: string\n  select: TSelect\n  where?: AthenaWhere<Row>\n  orderBy?: AthenaOrderBy<Row>\n  limit?: number\n}\n\nexport interface AthenaResolvedPagination {\n  limit?: number\n  offset?: number\n}\n\nexport interface AthenaTypedSelectQueryInput {\n  tableName: string\n  columns: string | string[]\n  conditions: AthenaGatewayCondition[]\n  limit?: number\n  offset?: number\n  currentPage?: number\n  pageSize?: number\n  order?: AthenaSortBy\n}\n\nexport interface AthenaSelectDebugPlan {\n  columns: string | string[]\n  conditions?: AthenaGatewayCondition[]\n  limit?: number\n  offset?: number\n  currentPage?: number\n  pageSize?: number\n  order?: AthenaSortBy\n}\n\nexport type AthenaSelectTransportPlan =\n  | {\n      kind: 'query'\n      query: string\n      payload: {\n        query: string\n      }\n    }\n  | {\n      kind: 'fetch'\n      payload: AthenaFetchPayload\n      debug: AthenaSelectDebugPlan\n    }\n\nexport function canUseFindManyAstTransport(state: AthenaSelectExecutionState): boolean {\n  return (\n    state.conditions.length === 0 &&\n    state.offset === undefined &&\n    state.currentPage === undefined &&\n    state.pageSize === undefined &&\n    state.totalPages === undefined\n  )\n}\n\nexport function toFindManyAstOrder<Row>(order?: AthenaSortBy): AthenaOrderBy<Row> | undefined {\n  if (!order) {\n    return undefined\n  }\n  return {\n    column: order.field as AthenaFindManyAstOrderColumn<Row>,\n    ascending: order.direction !== 'descending',\n  }\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return Boolean(value) && typeof value === 'object' && !Array.isArray(value)\n}\n\nfunction normalizeFindManyAstColumnPredicate(\n  value: unknown,\n): AthenaWhereOperatorInput {\n  if (!isRecord(value)) {\n    return {\n      eq: value as AthenaWhereOperatorInput['eq'],\n    }\n  }\n\n  const normalized: AthenaWhereOperatorInput = {}\n  for (const [key, operand] of Object.entries(value)) {\n    if (operand !== undefined) {\n      normalized[key as keyof AthenaWhereOperatorInput] = operand as never\n    }\n  }\n  return normalized\n}\n\nfunction normalizeFindManyAstBooleanOperand<Row>(\n  clause: AthenaWhereBooleanOperand<Row>,\n): AthenaWhereBooleanOperand<Row> {\n  const normalized: Record<string, unknown> = {}\n  for (const [column, value] of Object.entries(clause as Record<string, unknown>)) {\n    if (value === undefined) {\n      continue\n    }\n    normalized[column] = normalizeFindManyAstColumnPredicate(value)\n  }\n  return normalized as AthenaWhereBooleanOperand<Row>\n}\n\nexport function normalizeFindManyAstWhere<Row>(\n  where?: AthenaWhere<Row>,\n): AthenaWhere<Row> | undefined {\n  if (!where || !isRecord(where)) {\n    return where\n  }\n\n  const normalized: AthenaJsonObject = {}\n  for (const [key, value] of Object.entries(where as Record<string, unknown>)) {\n    if (value === undefined) {\n      continue\n    }\n    if (key === 'or' && Array.isArray(value)) {\n      normalized.or = value.map(clause =>\n        normalizeFindManyAstBooleanOperand(clause as AthenaWhereBooleanOperand<Row>),\n      ) as unknown as AthenaJsonObject['or']\n      continue\n    }\n    if (key === 'not' && isRecord(value)) {\n      normalized.not = normalizeFindManyAstBooleanOperand(\n        value as AthenaWhereBooleanOperand<Row>,\n      ) as unknown as AthenaJsonObject['not']\n      continue\n    }\n    normalized[key] = normalizeFindManyAstColumnPredicate(value)\n  }\n\n  return normalized as AthenaWhere<Row>\n}\n\nfunction predicateRequiresUuidQueryFallback(\n  column: string,\n  value: unknown,\n): boolean {\n  if (!isRecord(value)) {\n    return shouldUseUuidTextComparison(column, value as Parameters<typeof shouldUseUuidTextComparison>[1])\n  }\n\n  const eqValue = value.eq\n  return eqValue !== undefined\n    && shouldUseUuidTextComparison(column, eqValue as Parameters<typeof shouldUseUuidTextComparison>[1])\n}\n\nfunction booleanOperandRequiresUuidQueryFallback<Row>(\n  clause: AthenaWhereBooleanOperand<Row>,\n): boolean {\n  for (const [column, value] of Object.entries(clause as Record<string, unknown>)) {\n    if (value === undefined) {\n      continue\n    }\n    if (predicateRequiresUuidQueryFallback(column, value)) {\n      return true\n    }\n  }\n  return false\n}\n\nexport function findManyAstWhereRequiresLegacyTransport<Row>(\n  where?: AthenaWhere<Row>,\n): boolean {\n  if (!where || !isRecord(where)) {\n    return false\n  }\n\n  for (const [key, value] of Object.entries(where as Record<string, unknown>)) {\n    if (value === undefined) {\n      continue\n    }\n    if (key === 'or' && Array.isArray(value)) {\n      if (\n        value.some(clause =>\n          booleanOperandRequiresUuidQueryFallback(clause as AthenaWhereBooleanOperand<Row>),\n        )\n      ) {\n        return true\n      }\n      continue\n    }\n    if (key === 'not' && isRecord(value)) {\n      if (booleanOperandRequiresUuidQueryFallback(value as AthenaWhereBooleanOperand<Row>)) {\n        return true\n      }\n      continue\n    }\n    if (predicateRequiresUuidQueryFallback(key, value)) {\n      return true\n    }\n  }\n\n  return false\n}\n\nexport function resolvePagination(input: {\n  limit?: number\n  offset?: number\n  currentPage?: number\n  pageSize?: number\n}): AthenaResolvedPagination {\n  let limit = input.limit\n  let offset = input.offset\n\n  if (limit === undefined && input.pageSize !== undefined) {\n    limit = Math.max(0, Math.trunc(input.pageSize))\n  }\n  if (\n    offset === undefined &&\n    input.pageSize !== undefined &&\n    input.currentPage !== undefined &&\n    input.currentPage > 0\n  ) {\n    offset = (Math.trunc(input.currentPage) - 1) * Math.max(0, Math.trunc(input.pageSize))\n  }\n\n  return { limit, offset }\n}\n\nfunction hasTypedEqualityComparison(conditions: AthenaGatewayCondition[] | undefined): boolean {\n  return (\n    conditions?.some(\n      condition =>\n        condition.operator === 'eq' &&\n        (condition.value_cast !== undefined || condition.column_cast !== undefined),\n    ) ?? false\n  )\n}\n\nexport function createSelectTransportPlan(input: {\n  tableName: string\n  columns: string | string[]\n  state: AthenaSelectExecutionState\n  options?: AthenaGatewayCallOptions\n  buildTypedSelectQuery: (input: AthenaTypedSelectQueryInput) => string | null\n}): AthenaSelectTransportPlan {\n  const conditions = input.state.conditions.length\n    ? input.state.conditions.map(condition => ({ ...condition }))\n    : undefined\n\n  const pagination = resolvePagination({\n    limit: input.state.limit,\n    offset: input.state.offset,\n    currentPage: input.state.currentPage,\n    pageSize: input.state.pageSize,\n  })\n  const stripNulls = input.options?.stripNulls ?? true\n  const structuredSelectTransport = buildStructuredSelectTransport({\n    tableName: input.tableName,\n    columns: input.columns,\n    conditions,\n    limit: pagination.limit,\n    offset: pagination.offset,\n    order: input.state.order,\n    stripNulls,\n    count: input.options?.count,\n    head: input.options?.head,\n  })\n  if (structuredSelectTransport && 'error' in structuredSelectTransport) {\n    throw new Error(structuredSelectTransport.error)\n  }\n  if (structuredSelectTransport) {\n    const { payload, select } = structuredSelectTransport\n    return {\n      kind: 'fetch',\n      payload,\n      debug: {\n        columns: select,\n        conditions,\n        limit: pagination.limit,\n        offset: pagination.offset,\n        order: input.state.order,\n      },\n    }\n  }\n\n  if (hasTypedEqualityComparison(conditions) && !input.options?.head && !input.options?.count && conditions) {\n    const query = input.buildTypedSelectQuery({\n      tableName: input.tableName,\n      columns: input.columns,\n      conditions,\n      limit: input.state.limit,\n      offset: input.state.offset,\n      currentPage: input.state.currentPage,\n      pageSize: input.state.pageSize,\n      order: input.state.order,\n    })\n    if (query) {\n      return {\n        kind: 'query',\n        query,\n        payload: { query },\n      }\n    }\n  }\n\n  return {\n    kind: 'fetch',\n    payload: {\n      table_name: input.tableName,\n      columns: input.columns,\n      conditions,\n      limit: input.state.limit,\n      offset: input.state.offset,\n      current_page: input.state.currentPage,\n      page_size: input.state.pageSize,\n      total_pages: input.state.totalPages,\n      sort_by: input.state.order,\n      strip_nulls: stripNulls,\n      count: input.options?.count,\n      head: input.options?.head,\n    },\n    debug: {\n      columns: input.columns,\n      conditions,\n      limit: input.state.limit,\n      offset: input.state.offset,\n      currentPage: input.state.currentPage,\n      pageSize: input.state.pageSize,\n      order: input.state.order,\n    },\n  }\n}\n","const SIMPLE_IDENTIFIER_PATTERN = /^[A-Za-z_][A-Za-z0-9_]*$/\nconst COMPOSITE_IDENTIFIER_PATTERN = /^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$/\nconst SQL_ALIAS_PATTERN = /^([A-Za-z_][A-Za-z0-9_.]*)\\s+(?:as\\s+)?([A-Za-z_][A-Za-z0-9_]*)$/i\nconst RESPONSE_ALIAS_PATTERN = /^([A-Za-z_][A-Za-z0-9_]*)\\s*:\\s*([A-Za-z_][A-Za-z0-9_.]*)$/i\n\nfunction quoteIdentifierSegment(identifier: string): string {\n  return `\"${identifier.replace(/\"/g, '\"\"')}\"`\n}\n\nfunction parseAliasedIdentifierToken(\n  token: string,\n): { baseIdentifier: string; aliasIdentifier: string } | null {\n  const responseAliasMatch = RESPONSE_ALIAS_PATTERN.exec(token)\n  if (responseAliasMatch) {\n    const [, aliasIdentifier, baseIdentifier] = responseAliasMatch\n    if (COMPOSITE_IDENTIFIER_PATTERN.test(baseIdentifier) && SIMPLE_IDENTIFIER_PATTERN.test(aliasIdentifier)) {\n      return { baseIdentifier, aliasIdentifier }\n    }\n  }\n\n  const sqlAliasMatch = SQL_ALIAS_PATTERN.exec(token)\n  if (!sqlAliasMatch) {\n    return null\n  }\n\n  const [, baseIdentifier, aliasIdentifier] = sqlAliasMatch\n  if (!COMPOSITE_IDENTIFIER_PATTERN.test(baseIdentifier) || !SIMPLE_IDENTIFIER_PATTERN.test(aliasIdentifier)) {\n    return null\n  }\n\n  return { baseIdentifier, aliasIdentifier }\n}\n\n/**\n * Quotes a `schema.table.column`-style identifier path safely for SQL.\n */\nexport function quoteQualifiedIdentifier(identifier: string): string {\n  return identifier\n    .split('.')\n    .map(segment => quoteIdentifierSegment(segment))\n    .join('.')\n}\n\nfunction quoteSelectToken(token: string): string {\n  if (token === '*') return token\n  if (COMPOSITE_IDENTIFIER_PATTERN.test(token)) {\n    return quoteQualifiedIdentifier(token)\n  }\n\n  const aliasedIdentifier = parseAliasedIdentifierToken(token)\n  if (!aliasedIdentifier) {\n    return token\n  }\n  const { baseIdentifier, aliasIdentifier } = aliasedIdentifier\n  return `${quoteQualifiedIdentifier(baseIdentifier)} AS ${quoteIdentifierSegment(aliasIdentifier)}`\n}\n\nexport function quoteSelectColumnToken(token: string): string {\n  const trimmed = token.trim()\n  if (!trimmed || trimmed === '*') return trimmed || '*'\n\n  const responseAliasMatch = RESPONSE_ALIAS_PATTERN.exec(trimmed)\n  if (responseAliasMatch) {\n    const [, aliasIdentifier, baseIdentifier] = responseAliasMatch\n    return `${quoteQualifiedIdentifier(baseIdentifier)} AS ${quoteIdentifierSegment(aliasIdentifier)}`\n  }\n\n  return quoteQualifiedIdentifier(trimmed)\n}\n\nfunction canAutoQuoteToken(token: string): boolean {\n  if (token === '*') return true\n  if (COMPOSITE_IDENTIFIER_PATTERN.test(token)) return true\n  return parseAliasedIdentifierToken(token) != null\n}\n\nfunction splitTopLevelCommaSeparated(input: string): string[] | null {\n  const parts: string[] = []\n  let buffer = ''\n  let singleQuoted = false\n  let doubleQuoted = false\n  let depth = 0\n\n  for (let index = 0; index < input.length; index += 1) {\n    const char = input[index]\n    const next = index + 1 < input.length ? input[index + 1] : ''\n\n    if (singleQuoted) {\n      buffer += char\n      if (char === \"'\" && next === \"'\") {\n        buffer += next\n        index += 1\n        continue\n      }\n      if (char === \"'\") {\n        singleQuoted = false\n      }\n      continue\n    }\n\n    if (doubleQuoted) {\n      buffer += char\n      if (char === '\"' && next === '\"') {\n        buffer += next\n        index += 1\n        continue\n      }\n      if (char === '\"') {\n        doubleQuoted = false\n      }\n      continue\n    }\n\n    if (char === \"'\") {\n      singleQuoted = true\n      buffer += char\n      continue\n    }\n    if (char === '\"') {\n      doubleQuoted = true\n      buffer += char\n      continue\n    }\n\n    if (char === '(') {\n      depth += 1\n      buffer += char\n      continue\n    }\n    if (char === ')') {\n      depth -= 1\n      if (depth < 0) return null\n      buffer += char\n      continue\n    }\n\n    if (char === ',' && depth === 0) {\n      parts.push(buffer.trim())\n      buffer = ''\n      continue\n    }\n\n    buffer += char\n  }\n\n  if (singleQuoted || doubleQuoted || depth !== 0) {\n    return null\n  }\n\n  if (buffer.trim().length > 0) {\n    parts.push(buffer.trim())\n  }\n\n  return parts\n}\n\n/**\n * Quotes identifier lists while preserving raw SQL expressions.\n *\n * Examples:\n * - `\"table, user\"` -> `\"\\\"table\\\", \\\"user\\\"\"`\n * - `concat(name, ',') as label, id` -> unchanged\n */\nexport function quoteSelectColumnsExpression(columns: string): string {\n  const trimmed = columns.trim()\n  if (!trimmed || trimmed === '*') return trimmed || '*'\n\n  const tokens = splitTopLevelCommaSeparated(trimmed)\n  if (!tokens || tokens.length === 0) {\n    return trimmed\n  }\n\n  if (!tokens.every(canAutoQuoteToken)) {\n    return trimmed\n  }\n\n  return tokens.map(quoteSelectToken).join(', ')\n}\n\n/**\n * Immutable identifier object with consistent SQL rendering.\n */\nexport interface SqlIdentifier {\n  readonly segments: string[]\n  toSql(): string\n  toString(): string\n}\n\nclass SqlIdentifierPath implements SqlIdentifier {\n  readonly segments: string[]\n\n  constructor(segments: string[]) {\n    this.segments = segments\n  }\n\n  toSql(): string {\n    return this.segments.map(quoteIdentifierSegment).join('.')\n  }\n\n  toString(): string {\n    return this.toSql()\n  }\n}\n\n/**\n * Creates a quoted identifier object from segment or dotted inputs.\n */\nexport function identifier(...segments: string[]): SqlIdentifier {\n  const expandedSegments = segments\n    .flatMap(segment => segment.split('.'))\n    .map(segment => segment.trim())\n    .filter(segment => segment.length > 0)\n\n  return new SqlIdentifierPath(expandedSegments)\n}\n\n","import type {\n  AthenaConditionCastType,\n  AthenaConditionValue,\n  AthenaDeletePayload,\n  AthenaGatewayCondition,\n  AthenaInsertPayload,\n  AthenaJsonValue,\n  AthenaRpcFilter,\n  AthenaRpcPayload,\n  AthenaSortBy,\n  AthenaUpdatePayload,\n} from './gateway/types.ts'\nimport { resolvePagination } from './query-transport.ts'\nimport {\n  quoteQualifiedIdentifier,\n  quoteSelectColumnToken,\n  quoteSelectColumnsExpression,\n} from './sql-identifiers.ts'\n\nconst SAFE_CAST_PATTERN = /^[a-z_][a-z0-9_]*(?:\\[\\])?$/i\n\nfunction normalizeCast(cast: AthenaConditionCastType): string {\n  const normalized = cast.trim().toLowerCase()\n  if (!SAFE_CAST_PATTERN.test(normalized)) {\n    throw new Error(`Invalid cast type \"${cast}\"`)\n  }\n  return normalized\n}\n\nfunction escapeSqlStringLiteral(value: string): string {\n  return value.replace(/'/g, \"''\")\n}\n\nfunction toSqlLiteral(value: AthenaConditionValue): string {\n  if (value === null) return 'NULL'\n  if (typeof value === 'number') return Number.isFinite(value) ? String(value) : 'NULL'\n  if (typeof value === 'boolean') return value ? 'TRUE' : 'FALSE'\n  return `'${escapeSqlStringLiteral(value)}'`\n}\n\nfunction withCast(expression: string, cast?: AthenaConditionCastType): string {\n  if (!cast) return expression\n  return `${expression}::${normalizeCast(cast)}`\n}\n\nfunction buildSelectColumnsClause(columns: string | string[]): string {\n  if (Array.isArray(columns)) {\n    return columns.map(column => quoteSelectColumnToken(column)).join(', ')\n  }\n  return quoteSelectColumnsExpression(columns)\n}\n\ninterface ParsedIdentifierSegment {\n  normalizedValue: string\n}\n\nfunction parseIdentifierSegment(input: string): ParsedIdentifierSegment | null {\n  const trimmed = input.trim()\n  if (!trimmed) return null\n\n  if (!trimmed.startsWith('\"')) {\n    return {\n      normalizedValue: trimmed.toLowerCase(),\n    }\n  }\n\n  let value = ''\n  let index = 1\n  let closed = false\n  while (index < trimmed.length) {\n    const char = trimmed[index]\n    const next = index + 1 < trimmed.length ? trimmed[index + 1] : ''\n    if (char === '\"' && next === '\"') {\n      value += '\"'\n      index += 2\n      continue\n    }\n    if (char === '\"') {\n      closed = true\n      index += 1\n      break\n    }\n    value += char\n    index += 1\n  }\n\n  if (!closed || trimmed.slice(index).trim().length > 0 || !value.trim()) {\n    return null\n  }\n\n  return {\n    normalizedValue: value,\n  }\n}\n\nfunction splitQualifiedTableName(tableName: string): { schemaSegment: string } | null {\n  const trimmed = tableName.trim()\n  let inQuotes = false\n  for (let index = 0; index < trimmed.length; index += 1) {\n    const char = trimmed[index]\n    const next = index + 1 < trimmed.length ? trimmed[index + 1] : ''\n    if (char === '\"') {\n      if (inQuotes && next === '\"') {\n        index += 1\n        continue\n      }\n      inQuotes = !inQuotes\n      continue\n    }\n    if (char === '.' && !inQuotes) {\n      const schemaSegment = trimmed.slice(0, index).trim()\n      const tableSegment = trimmed.slice(index + 1).trim()\n      if (!schemaSegment || !tableSegment) {\n        return null\n      }\n      return { schemaSegment }\n    }\n  }\n  return null\n}\n\nexport function resolveTableNameForCall(tableName: string, schema: string | undefined): string {\n  if (!schema) return tableName\n  const normalizedSchema = schema.trim()\n  if (!normalizedSchema) {\n    throw new Error('schema option must be a non-empty string')\n  }\n  const normalizedTableName = tableName.trim()\n  const parsedSchema = parseIdentifierSegment(normalizedSchema)\n  if (!parsedSchema) {\n    throw new Error('schema option must be a non-empty string')\n  }\n  const qualified = splitQualifiedTableName(normalizedTableName)\n  if (qualified) {\n    const parsedTableSchema = parseIdentifierSegment(qualified.schemaSegment)\n    const sameSchema = parsedTableSchema\n      ? parsedTableSchema.normalizedValue === parsedSchema.normalizedValue\n      : normalizedTableName.startsWith(`${normalizedSchema}.`)\n    if (sameSchema) {\n      return normalizedTableName\n    }\n    throw new Error(\n      `schema option \"${normalizedSchema}\" conflicts with schema-qualified table \"${normalizedTableName}\"`,\n    )\n  }\n  return `${normalizedSchema}.${normalizedTableName}`\n}\n\nfunction conditionToSqlClause(condition: AthenaGatewayCondition): string | null {\n  if (!condition.column) return null\n  const column = withCast(quoteQualifiedIdentifier(condition.column), condition.column_cast)\n  const value = condition.value\n  const sqlOperator = {\n    eq: '=',\n    neq: '!=',\n    gt: '>',\n    gte: '>=',\n    lt: '<',\n    lte: '<=',\n    like: 'LIKE',\n    ilike: 'ILIKE',\n  } as const\n\n  switch (condition.operator) {\n    case 'eq':\n    case 'neq':\n    case 'gt':\n    case 'gte':\n    case 'lt':\n    case 'lte':\n    case 'like':\n    case 'ilike': {\n      if (Array.isArray(value) || value === undefined) return null\n      const rhs = withCast(toSqlLiteral(value), condition.value_cast)\n      return `${column} ${sqlOperator[condition.operator]} ${rhs}`\n    }\n    case 'is': {\n      if (value === null) return `${column} IS NULL`\n      if (value === true) return `${column} IS TRUE`\n      if (value === false) return `${column} IS FALSE`\n      return null\n    }\n    case 'in': {\n      if (!Array.isArray(value)) return null\n      if (value.length === 0) return 'FALSE'\n      const values = value.map(item => withCast(toSqlLiteral(item), condition.value_cast))\n      return `${column} IN (${values.join(', ')})`\n    }\n    default:\n      return null\n  }\n}\n\nexport function buildTypedSelectQuery(input: {\n  tableName: string\n  columns: string | string[]\n  conditions: AthenaGatewayCondition[]\n  limit?: number\n  offset?: number\n  currentPage?: number\n  pageSize?: number\n  order?: AthenaSortBy\n}): string | null {\n  const whereClauses: string[] = []\n  for (const condition of input.conditions) {\n    const clause = conditionToSqlClause(condition)\n    if (!clause) return null\n    whereClauses.push(clause)\n  }\n\n  let limit = input.limit\n  let offset = input.offset\n  if (limit === undefined && input.pageSize !== undefined) {\n    limit = input.pageSize\n  }\n  if (\n    offset === undefined &&\n    input.pageSize !== undefined &&\n    input.currentPage !== undefined &&\n    input.currentPage > 0\n  ) {\n    offset = (input.currentPage - 1) * input.pageSize\n  }\n\n  const sqlParts = [\n    `SELECT ${buildSelectColumnsClause(input.columns)} FROM ${quoteQualifiedIdentifier(input.tableName)}`,\n  ]\n\n  if (whereClauses.length > 0) {\n    sqlParts.push(`WHERE ${whereClauses.join(' AND ')}`)\n  }\n\n  if (input.order?.field) {\n    const direction = input.order.direction === 'descending' ? 'DESC' : 'ASC'\n    sqlParts.push(`ORDER BY ${quoteQualifiedIdentifier(input.order.field)} ${direction}`)\n  }\n\n  if (limit !== undefined) {\n    sqlParts.push(`LIMIT ${Math.max(0, Math.trunc(limit))}`)\n  }\n\n  if (offset !== undefined) {\n    sqlParts.push(`OFFSET ${Math.max(0, Math.trunc(offset))}`)\n  }\n\n  return `${sqlParts.join(' ')};`\n}\n\nfunction sanitizeSqlComment(comment: string): string {\n  return comment.replace(/\\*\\//g, '* /')\n}\n\nfunction toSqlJsonLiteral(value: AthenaJsonValue | undefined): string {\n  if (value === undefined) return 'DEFAULT'\n  if (\n    value === null ||\n    typeof value === 'string' ||\n    typeof value === 'number' ||\n    typeof value === 'boolean'\n  ) {\n    return toSqlLiteral(value)\n  }\n  return `'${escapeSqlStringLiteral(JSON.stringify(value))}'::jsonb`\n}\n\nfunction conditionToDebugSqlClause(condition: AthenaGatewayCondition): string {\n  const exact = conditionToSqlClause(condition)\n  if (exact) return exact\n\n  const rawCondition = sanitizeSqlComment(JSON.stringify(condition))\n  if (!condition.column) {\n    return `TRUE /* unsupported condition: ${rawCondition} */`\n  }\n\n  const column = withCast(quoteQualifiedIdentifier(condition.column), condition.column_cast)\n  const value = condition.value\n  const rhs = withCast(toSqlJsonLiteral(value as AthenaJsonValue | undefined), condition.value_cast)\n\n  switch (condition.operator) {\n    case 'contains':\n      return `${column} @> ${rhs}`\n    case 'containedBy':\n      return `${column} <@ ${rhs}`\n    case 'not':\n      return `TRUE /* NOT expression passthrough: ${rawCondition} */`\n    case 'or':\n      return `TRUE /* OR expression passthrough: ${rawCondition} */`\n    default:\n      return `TRUE /* unsupported condition: ${rawCondition} */`\n  }\n}\n\nfunction appendOrderLimitOffset(\n  sqlParts: string[],\n  order?: AthenaSortBy,\n  limit?: number,\n  offset?: number,\n) {\n  if (order?.field) {\n    const direction = order.direction === 'descending' ? 'DESC' : 'ASC'\n    sqlParts.push(`ORDER BY ${quoteQualifiedIdentifier(order.field)} ${direction}`)\n  }\n  if (limit !== undefined) {\n    sqlParts.push(`LIMIT ${Math.max(0, Math.trunc(limit))}`)\n  }\n  if (offset !== undefined) {\n    sqlParts.push(`OFFSET ${Math.max(0, Math.trunc(offset))}`)\n  }\n}\n\nexport function buildDebugSelectQuery(input: {\n  tableName: string\n  columns: string | string[]\n  conditions?: AthenaGatewayCondition[]\n  limit?: number\n  offset?: number\n  currentPage?: number\n  pageSize?: number\n  order?: AthenaSortBy\n}): string {\n  const sqlParts = [\n    `SELECT ${buildSelectColumnsClause(input.columns)} FROM ${quoteQualifiedIdentifier(input.tableName)}`,\n  ]\n  if (input.conditions?.length) {\n    const whereClauses = input.conditions.map(conditionToDebugSqlClause)\n    sqlParts.push(`WHERE ${whereClauses.join(' AND ')}`)\n  }\n  const pagination = resolvePagination(input)\n  appendOrderLimitOffset(sqlParts, input.order, pagination.limit, pagination.offset)\n  return `${sqlParts.join(' ')};`\n}\n\nfunction resolveDebugTableIdentifier(tableName: string | undefined): string {\n  if (!tableName?.trim()) {\n    return '\"__unknown_table__\"'\n  }\n  return quoteQualifiedIdentifier(tableName)\n}\n\nexport function buildInsertDebugSql(payload: AthenaInsertPayload): string {\n  const rows = Array.isArray(payload.insert_body)\n    ? payload.insert_body\n    : [payload.insert_body]\n  const columns: string[] = []\n  const seen = new Set<string>()\n  for (const row of rows) {\n    for (const column of Object.keys(row)) {\n      if (seen.has(column)) continue\n      seen.add(column)\n      columns.push(column)\n    }\n  }\n\n  const sqlParts = [`INSERT INTO ${quoteQualifiedIdentifier(payload.table_name)}`]\n\n  if (!rows.length || !columns.length) {\n    sqlParts.push('DEFAULT VALUES')\n    if (rows.length > 1) {\n      sqlParts.push(`/* trace: ${rows.length} rows collapsed to DEFAULT VALUES */`)\n    }\n  } else {\n    const valuesClause = rows\n      .map(row => {\n        const values = columns.map(column => {\n          const hasColumn = Object.prototype.hasOwnProperty.call(row, column)\n          if (!hasColumn) {\n            return payload.default_to_null ? 'NULL' : 'DEFAULT'\n          }\n          const rowValue = (row as Record<string, AthenaJsonValue | undefined>)[column]\n          return toSqlJsonLiteral(rowValue)\n        })\n        return `(${values.join(', ')})`\n      })\n      .join(', ')\n    const columnClause = columns.map(column => quoteQualifiedIdentifier(column)).join(', ')\n    sqlParts.push(`(${columnClause})`)\n    sqlParts.push(`VALUES ${valuesClause}`)\n  }\n\n  if (payload.on_conflict) {\n    const conflictColumns = Array.isArray(payload.on_conflict)\n      ? payload.on_conflict.map(column => quoteQualifiedIdentifier(column)).join(', ')\n      : payload.on_conflict\n    if (payload.update_body && Object.keys(payload.update_body).length > 0) {\n      const assignments = Object.entries(payload.update_body).map(([column, value]) =>\n        `${quoteQualifiedIdentifier(column)} = ${toSqlJsonLiteral(value as AthenaJsonValue)}`,\n      )\n      sqlParts.push(`ON CONFLICT (${conflictColumns}) DO UPDATE SET ${assignments.join(', ')}`)\n    } else {\n      sqlParts.push(`ON CONFLICT (${conflictColumns}) DO NOTHING`)\n    }\n  }\n\n  if (payload.columns) {\n    sqlParts.push(`RETURNING ${buildSelectColumnsClause(payload.columns)}`)\n  }\n\n  return `${sqlParts.join(' ')};`\n}\n\nexport function buildUpdateDebugSql(payload: AthenaUpdatePayload): string {\n  const assignments = Object.entries(payload.update_body).map(([column, value]) =>\n    `${quoteQualifiedIdentifier(column)} = ${toSqlJsonLiteral(value as AthenaJsonValue)}`,\n  )\n  const sqlParts = [\n    `UPDATE ${resolveDebugTableIdentifier(payload.table_name)} SET ${assignments.length ? assignments.join(', ') : '/* empty set */'}`,\n  ]\n  if (payload.conditions?.length) {\n    const whereClauses = payload.conditions.map(conditionToDebugSqlClause)\n    sqlParts.push(`WHERE ${whereClauses.join(' AND ')}`)\n  }\n  const pagination = resolvePagination({\n    currentPage: payload.current_page,\n    pageSize: payload.page_size,\n  })\n  appendOrderLimitOffset(sqlParts, payload.sort_by, pagination.limit, pagination.offset)\n  if (payload.columns) {\n    sqlParts.push(`RETURNING ${buildSelectColumnsClause(payload.columns)}`)\n  }\n  return `${sqlParts.join(' ')};`\n}\n\nexport function buildDeleteDebugSql(payload: AthenaDeletePayload): string {\n  const sqlParts = [`DELETE FROM ${quoteQualifiedIdentifier(payload.table_name)}`]\n  const whereClauses: string[] = []\n  if (payload.resource_id) {\n    whereClauses.push(`\"resource_id\" = ${toSqlLiteral(payload.resource_id)}`)\n  }\n  if (payload.conditions?.length) {\n    whereClauses.push(...payload.conditions.map(conditionToDebugSqlClause))\n  }\n  if (whereClauses.length) {\n    sqlParts.push(`WHERE ${whereClauses.join(' AND ')}`)\n  }\n  const pagination = resolvePagination({\n    currentPage: payload.current_page,\n    pageSize: payload.page_size,\n  })\n  appendOrderLimitOffset(sqlParts, payload.sort_by, pagination.limit, pagination.offset)\n  if (payload.columns) {\n    sqlParts.push(`RETURNING ${buildSelectColumnsClause(payload.columns)}`)\n  }\n  return `${sqlParts.join(' ')};`\n}\n\nfunction rpcFilterToSqlClause(filter: AthenaRpcFilter): string {\n  const column = quoteQualifiedIdentifier(filter.column)\n  const value = filter.value\n  switch (filter.operator) {\n    case 'eq':\n    case 'neq':\n    case 'gt':\n    case 'gte':\n    case 'lt':\n    case 'lte':\n    case 'like':\n    case 'ilike': {\n      if (value === undefined || Array.isArray(value)) {\n        return `TRUE /* unsupported rpc filter: ${sanitizeSqlComment(JSON.stringify(filter))} */`\n      }\n      const operatorMap = {\n        eq: '=',\n        neq: '!=',\n        gt: '>',\n        gte: '>=',\n        lt: '<',\n        lte: '<=',\n        like: 'LIKE',\n        ilike: 'ILIKE',\n      } as const\n      return `${column} ${operatorMap[filter.operator]} ${toSqlLiteral(value)}`\n    }\n    case 'is':\n      if (value === null) return `${column} IS NULL`\n      if (value === true) return `${column} IS TRUE`\n      if (value === false) return `${column} IS FALSE`\n      return `TRUE /* unsupported rpc filter: ${sanitizeSqlComment(JSON.stringify(filter))} */`\n    case 'in':\n      if (!Array.isArray(value)) {\n        return `TRUE /* unsupported rpc filter: ${sanitizeSqlComment(JSON.stringify(filter))} */`\n      }\n      if (value.length === 0) return 'FALSE'\n      return `${column} IN (${value.map(item => toSqlLiteral(item)).join(', ')})`\n    default:\n      return `TRUE /* unsupported rpc filter: ${sanitizeSqlComment(JSON.stringify(filter))} */`\n  }\n}\n\nexport function buildRpcDebugSql(payload: AthenaRpcPayload): string {\n  const argsEntries = payload.args ? Object.entries(payload.args) : []\n  const argsClause = argsEntries\n    .map(([key, value]) => `${quoteQualifiedIdentifier(key)} => ${toSqlJsonLiteral(value as AthenaJsonValue)}`)\n    .join(', ')\n  const functionRef = payload.schema\n    ? `${quoteQualifiedIdentifier(payload.schema)}.${quoteQualifiedIdentifier(payload.function)}`\n    : quoteQualifiedIdentifier(payload.function)\n  const sqlParts = [\n    `SELECT ${payload.select ? quoteSelectColumnsExpression(payload.select) : '*'} FROM ${functionRef}(${argsClause})`,\n  ]\n  if (payload.filters?.length) {\n    sqlParts.push(`WHERE ${payload.filters.map(rpcFilterToSqlClause).join(' AND ')}`)\n  }\n  if (payload.order?.column) {\n    const direction = payload.order.ascending === false ? 'DESC' : 'ASC'\n    sqlParts.push(`ORDER BY ${quoteQualifiedIdentifier(payload.order.column)} ${direction}`)\n  }\n  if (payload.limit !== undefined) {\n    sqlParts.push(`LIMIT ${Math.max(0, Math.trunc(payload.limit))}`)\n  }\n  if (payload.offset !== undefined) {\n    sqlParts.push(`OFFSET ${Math.max(0, Math.trunc(payload.offset))}`)\n  }\n  return `${sqlParts.join(' ')};`\n}\n\n\n","import { AthenaGatewayError } from './errors.ts'\n\nexport const ATHENA_DEFAULT_BASE_URL = 'https://athena-db.com'\n\nfunction describeReceivedValue(value: unknown): string {\n  if (value === undefined) return 'undefined'\n  if (value === null) return 'null'\n  if (typeof value === 'string') {\n    return value.trim().length > 0 ? JSON.stringify(value) : 'an empty string'\n  }\n  return `${typeof value} ${JSON.stringify(value)}`\n}\n\nfunction invalidBaseUrlError(message: string, hint: string): AthenaGatewayError {\n  return new AthenaGatewayError({\n    code: 'INVALID_URL',\n    message,\n    status: 0,\n    hint,\n  })\n}\n\nexport interface NormalizeAthenaGatewayBaseUrlOptions {\n  defaultBaseUrl?: string\n  label?: string\n}\n\nexport function normalizeAthenaGatewayBaseUrl(\n  input: string | null | undefined,\n  options: NormalizeAthenaGatewayBaseUrlOptions = {},\n): string {\n  const label = options.label ?? 'Athena gateway base URL'\n  const candidate = input ?? options.defaultBaseUrl\n\n  if (candidate === undefined || candidate === null) {\n    throw invalidBaseUrlError(\n      `${label} must be a non-empty absolute http(s) URL. Received ${describeReceivedValue(input)}.`,\n      'Set ATHENA_URL in the explicit env object (or pass createClient({ url, key })) to a full URL such as \"https://mirror3.athena-db.com\".',\n    )\n  }\n\n  const trimmed = candidate.trim()\n  if (!trimmed) {\n    throw invalidBaseUrlError(\n      `${label} must be a non-empty absolute http(s) URL. Received ${describeReceivedValue(candidate)}.`,\n      'Set ATHENA_URL in the explicit env object (or pass createClient({ url, key })) to a full URL such as \"https://mirror3.athena-db.com\".',\n    )\n  }\n\n  let parsed: URL\n  try {\n    parsed = new URL(trimmed)\n  } catch {\n    throw invalidBaseUrlError(\n      `${label} must be a valid absolute http(s) URL. Received ${describeReceivedValue(candidate)}.`,\n      'Use a full URL including the protocol, for example \"https://mirror3.athena-db.com\".',\n    )\n  }\n\n  if (parsed.protocol !== 'http:' && parsed.protocol !== 'https:') {\n    throw invalidBaseUrlError(\n      `${label} must use http or https. Received ${JSON.stringify(trimmed)}.`,\n      'Use an Athena gateway URL such as \"https://mirror3.athena-db.com\".',\n    )\n  }\n\n  if (parsed.search || parsed.hash) {\n    throw invalidBaseUrlError(\n      `${label} must not include query parameters or hash fragments. Received ${JSON.stringify(trimmed)}.`,\n      'Pass only the base URL. Endpoint paths such as \"/gateway/fetch\" are appended by the SDK.',\n    )\n  }\n\n  return parsed.toString().replace(/\\/+$/, '')\n}\n\nexport function buildAthenaGatewayUrl(baseUrl: string, path: string): string {\n  if (!path.startsWith('/')) {\n    throw invalidBaseUrlError(\n      `Athena gateway path must start with \"/\". Received ${JSON.stringify(path)}.`,\n      'Use a leading slash such as \"/gateway/fetch\" or \"/\".',\n    )\n  }\n\n  return `${baseUrl}${path}`\n}\n","{\n  \"author\": \"floris@xylex.group\",\n  \"bin\": {\n    \"athena-js\": \"bin/athena-js.js\"\n  },\n  \"dependencies\": {\n    \"blessed\": \"^0.1.81\",\n    \"chalk\": \"^4.1.2\",\n    \"cron-parser\": \"^4.9.0\",\n    \"jose\": \"^6.2.3\",\n    \"pg\": \"^8.16.0\",\n    \"use-sync-external-store\": \"^1.5.0\",\n    \"uuid\": \"^9.0.1\",\n    \"zod\": \"^4.0.1\"\n  },\n  \"description\": \"Athena JS SDK\",\n  \"devDependencies\": {\n    \"@react-email/components\": \"^1.0.12\",\n    \"@react-email/render\": \"^2.0.8\",\n    \"@types/blessed\": \"^0.1.25\",\n    \"@types/node\": \"^20.10.5\",\n    \"@types/pg\": \"^8.15.1\",\n    \"@types/react\": \"^18.3.12\",\n    \"@types/react-test-renderer\": \"^18.3.1\",\n    \"@types/uuid\": \"^9.0.7\",\n    \"@typescript-eslint/eslint-plugin\": \"^8.57.0\",\n    \"@typescript-eslint/parser\": \"^8.57.0\",\n    \"eslint\": \"^8.57.1\",\n    \"express\": \"^4.22.2\",\n    \"react\": \"^18.3.1\",\n    \"react-dom\": \"^18.3.1\",\n    \"react-test-renderer\": \"^18.3.1\",\n    \"tsup\": \"^8.5.1\",\n    \"tsx\": \"^4.7.0\",\n    \"typescript\": \"^5.3.3\"\n  },\n  \"engines\": {\n    \"node\": \">=18.0.0\"\n  },\n  \"exports\": {\n    \".\": {\n      \"browser\": {\n        \"default\": \"./dist/browser.js\",\n        \"import\": \"./dist/browser.js\",\n        \"require\": \"./dist/browser.cjs\",\n        \"types\": \"./dist/browser.d.ts\"\n      },\n      \"default\": \"./dist/index.js\",\n      \"import\": \"./dist/index.js\",\n      \"require\": \"./dist/index.cjs\",\n      \"types\": \"./dist/index.d.ts\"\n    },\n    \"./admin\": {\n      \"default\": \"./dist/admin.js\",\n      \"import\": \"./dist/admin.js\",\n      \"require\": \"./dist/admin.cjs\",\n      \"types\": \"./dist/admin.d.ts\"\n    },\n    \"./billing\": {\n      \"default\": \"./dist/billing.js\",\n      \"import\": \"./dist/billing.js\",\n      \"require\": \"./dist/billing.cjs\",\n      \"types\": \"./dist/billing.d.ts\"\n    },\n    \"./browser\": {\n      \"default\": \"./dist/browser.js\",\n      \"import\": \"./dist/browser.js\",\n      \"require\": \"./dist/browser.cjs\",\n      \"types\": \"./dist/browser.d.ts\"\n    },\n    \"./cookies\": {\n      \"default\": \"./dist/cookies.js\",\n      \"import\": \"./dist/cookies.js\",\n      \"require\": \"./dist/cookies.cjs\",\n      \"types\": \"./dist/cookies.d.ts\"\n    },\n    \"./next/client\": {\n      \"default\": \"./dist/next/client.js\",\n      \"import\": \"./dist/next/client.js\",\n      \"require\": \"./dist/next/client.cjs\",\n      \"types\": \"./dist/next/client.d.ts\"\n    },\n    \"./next/server\": {\n      \"default\": \"./dist/next/server.js\",\n      \"import\": \"./dist/next/server.js\",\n      \"require\": \"./dist/next/server.cjs\",\n      \"types\": \"./dist/next/server.d.ts\"\n    },\n    \"./organization\": {\n      \"default\": \"./dist/organization.js\",\n      \"import\": \"./dist/organization.js\",\n      \"require\": \"./dist/organization.cjs\",\n      \"types\": \"./dist/organization.d.ts\"\n    },\n    \"./package.json\": \"./package.json\",\n    \"./react\": {\n      \"default\": \"./dist/react.js\",\n      \"import\": \"./dist/react.js\",\n      \"require\": \"./dist/react.cjs\",\n      \"types\": \"./dist/react.d.ts\"\n    },\n    \"./social-providers\": {\n      \"default\": \"./dist/social-providers.js\",\n      \"import\": \"./dist/social-providers.js\",\n      \"require\": \"./dist/social-providers.cjs\",\n      \"types\": \"./dist/social-providers.d.ts\"\n    },\n    \"./utils\": {\n      \"default\": \"./dist/utils.js\",\n      \"import\": \"./dist/utils.js\",\n      \"require\": \"./dist/utils.cjs\",\n      \"types\": \"./dist/utils.d.ts\"\n    }\n  },\n  \"files\": [\n    \"dist\",\n    \"bin\",\n    \"README.md\",\n    \"LICENSE\"\n  ],\n  \"keywords\": [\n    \"database\",\n    \"driver\",\n    \"api-gateway\",\n    \"sdk\",\n    \"react\",\n    \"hooks\",\n    \"http\",\n    \"postgres\",\n    \"query-builder\"\n  ],\n  \"license\": \"MIT\",\n  \"main\": \"./dist/index.cjs\",\n  \"module\": \"./dist/index.js\",\n  \"name\": \"@xylex-group/athena\",\n  \"peerDependencies\": {\n    \"@react-email/components\": \">=1.0.0\",\n    \"@react-email/render\": \">=2.0.0\",\n    \"react\": \">=17.0.0\"\n  },\n  \"peerDependenciesMeta\": {\n    \"@react-email/components\": {\n      \"optional\": true\n    },\n    \"@react-email/render\": {\n      \"optional\": true\n    },\n    \"react\": {\n      \"optional\": true\n    }\n  },\n  \"publisher\": \"XYLEX Group\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/xylex-group/athena-js.git\"\n  },\n  \"scripts\": {\n    \"build\": \"tsup\",\n    \"check:all\": \"pnpm lint && pnpm typecheck && pnpm test && pnpm build\",\n    \"dev\": \"tsup --watch\",\n    \"docs:methods\": \"node scripts/generate-sdk-method-reference.mjs\",\n    \"example:api-call\": \"cd examples/api-call && bun run start\",\n    \"example:email-resend\": \"cd examples/email-resend && bun run start\",\n    \"example:express-api\": \"cd examples/express-api && bun run start\",\n    \"example:order-saga\": \"cd examples/order-saga && bun run start\",\n    \"example:postgres-connection\": \"cd examples/postgres-connection && bun run start\",\n    \"example:recurring-invoice\": \"cd examples/recurring-invoice && bun run start\",\n    \"example:retry-patterns\": \"cd examples/retry-patterns && bun run start\",\n    \"lint\": \"eslint \\\"src/**/*.ts\\\" \\\"test/**/*.ts\\\"\",\n    \"lint:fix\": \"pnpm lint -- --fix\",\n    \"prepublishOnly\": \"pnpm typecheck && pnpm build\",\n    \"publish:token\": \"node scripts/publish.js\",\n    \"test\": \"node --import tsx --test --test-force-exit test/*.test.ts\",\n    \"test:integration:postgres\": \"node scripts/run-postgres-introspection-test.mjs\",\n    \"test:watch\": \"node --import tsx --test --watch test/*.test.ts\",\n    \"typecheck\": \"tsc -p tsconfig.typecheck.json\"\n  },\n  \"sideEffects\": false,\n  \"type\": \"module\",\n  \"types\": \"./dist/index.d.ts\",\n  \"typesVersions\": {\n    \"*\": {\n      \"*\": [\n        \"dist/index.d.ts\"\n      ],\n      \"admin\": [\n        \"dist/admin.d.ts\"\n      ],\n      \"billing\": [\n        \"dist/billing.d.ts\"\n      ],\n      \"browser\": [\n        \"dist/browser.d.ts\"\n      ],\n      \"cookies\": [\n        \"dist/cookies.d.ts\"\n      ],\n      \"next/client\": [\n        \"dist/next/client.d.ts\"\n      ],\n      \"next/server\": [\n        \"dist/next/server.d.ts\"\n      ],\n      \"organization\": [\n        \"dist/organization.d.ts\"\n      ],\n      \"react\": [\n        \"dist/react.d.ts\"\n      ],\n      \"social-providers\": [\n        \"dist/social-providers.d.ts\"\n      ],\n      \"utils\": [\n        \"dist/utils.d.ts\"\n      ]\n    }\n  },\n  \"version\": \"3.0.0\"\n}","import packageJson from '../package.json' with { type: 'json' }\n\nexport const PACKAGE_VERSION = packageJson.version\n\nexport function buildSdkHeaderValue(sdkName: string): string {\n  return `${sdkName} ${PACKAGE_VERSION}`\n}\n","function getAtob(): ((input: string) => string) | undefined {\n  const candidate = (globalThis as { atob?: unknown }).atob\n  return typeof candidate === 'function' ? (candidate as (input: string) => string) : undefined\n}\n\nfunction getBtoa(): ((input: string) => string) | undefined {\n  const candidate = (globalThis as { btoa?: unknown }).btoa\n  return typeof candidate === 'function' ? (candidate as (input: string) => string) : undefined\n}\n\nfunction bytesToBinaryString(bytes: Uint8Array): string {\n  let result = ''\n  for (const byte of bytes) {\n    result += String.fromCharCode(byte)\n  }\n  return result\n}\n\nfunction binaryStringToBytes(binary: string): Uint8Array {\n  const bytes = new Uint8Array(binary.length)\n  for (let i = 0; i < binary.length; i++) {\n    bytes[i] = binary.charCodeAt(i)\n  }\n  return bytes\n}\n\nfunction encodeBase64(bytes: Uint8Array): string {\n  const btoaFn = getBtoa()\n  if (btoaFn) {\n    return btoaFn(bytesToBinaryString(bytes))\n  }\n  return Buffer.from(bytes).toString('base64')\n}\n\nfunction decodeBase64(base64: string): Uint8Array {\n  const atobFn = getAtob()\n  if (atobFn) {\n    return binaryStringToBytes(atobFn(base64))\n  }\n  return new Uint8Array(Buffer.from(base64, 'base64'))\n}\n\nexport function encodeBytesToBase64Url(bytes: Uint8Array): string {\n  return encodeBase64(bytes).replace(/\\+/g, '-').replace(/\\//g, '_').replace(/=+$/g, '')\n}\n\nexport function encodeStringToBase64Url(value: string): string {\n  const bytes = new TextEncoder().encode(value)\n  return encodeBytesToBase64Url(bytes)\n}\n\nexport function decodeBase64UrlToBytes(value: string): Uint8Array {\n  const normalized = value.replace(/-/g, '+').replace(/_/g, '/')\n  const paddingLength = normalized.length % 4\n  const padded = paddingLength === 0 ? normalized : `${normalized}${'='.repeat(4 - paddingLength)}`\n  return decodeBase64(padded)\n}\n\nexport function decodeBase64UrlToString(value: string): string {\n  return new TextDecoder().decode(decodeBase64UrlToBytes(value))\n}\n","import type { AthenaCookieOptions } from './types.ts'\n\nfunction tryDecode(str: string): string {\n  if (str.indexOf('%') === -1) {\n    return str\n  }\n  try {\n    return decodeURIComponent(str)\n  } catch {\n    return str\n  }\n}\n\nexport interface CookieAttributes {\n  value: string\n  'max-age'?: number\n  expires?: Date\n  domain?: string\n  path?: string\n  secure?: boolean\n  httponly?: boolean\n  partitioned?: boolean\n  samesite?: 'strict' | 'lax' | 'none'\n  [key: string]: unknown\n}\n\nexport const SECURE_COOKIE_PREFIX = '__Secure-'\nexport const HOST_COOKIE_PREFIX = '__Host-'\n\n/**\n * Remove __Secure- or __Host- prefix from cookie name.\n */\nexport function stripSecureCookiePrefix(cookieName: string): string {\n  if (cookieName.startsWith(SECURE_COOKIE_PREFIX)) {\n    return cookieName.slice(SECURE_COOKIE_PREFIX.length)\n  }\n  if (cookieName.startsWith(HOST_COOKIE_PREFIX)) {\n    return cookieName.slice(HOST_COOKIE_PREFIX.length)\n  }\n  return cookieName\n}\n\n/**\n * Split a comma-joined `Set-Cookie` header string into individual cookies.\n */\nexport function splitSetCookieHeader(setCookie: string): string[] {\n  if (!setCookie) {\n    return []\n  }\n\n  const result: string[] = []\n  let start = 0\n  let i = 0\n\n  while (i < setCookie.length) {\n    if (setCookie[i] === ',') {\n      let j = i + 1\n      while (j < setCookie.length && setCookie[j] === ' ') {\n        j++\n      }\n      while (j < setCookie.length && setCookie[j] !== '=' && setCookie[j] !== ';' && setCookie[j] !== ',') {\n        j++\n      }\n\n      if (j < setCookie.length && setCookie[j] === '=') {\n        const part = setCookie.slice(start, i).trim()\n        if (part) {\n          result.push(part)\n        }\n        start = i + 1\n        while (start < setCookie.length && setCookie[start] === ' ') {\n          start++\n        }\n        i = start\n        continue\n      }\n    }\n    i++\n  }\n\n  const last = setCookie.slice(start).trim()\n  if (last) {\n    result.push(last)\n  }\n\n  return result\n}\n\nexport function parseSetCookieHeader(setCookie: string): Map<string, CookieAttributes> {\n  const cookies = new Map<string, CookieAttributes>()\n  const cookieArray = splitSetCookieHeader(setCookie)\n\n  for (const cookieString of cookieArray) {\n    const parts = cookieString.split(';').map((part) => part.trim())\n    const [nameValue, ...attributes] = parts\n    const [name, ...valueParts] = (nameValue || '').split('=')\n    if (!name) {\n      continue\n    }\n\n    const value = unquoteCookieValue(valueParts.join('='))\n    const decodedValue = tryDecode(value)\n    const attrObj: CookieAttributes = { value: decodedValue }\n\n    for (const attribute of attributes) {\n      const [attrName, ...attrValueParts] = attribute.split('=')\n      const attrValue = attrValueParts.join('=')\n      const normalizedAttrName = attrName.trim().toLowerCase()\n      switch (normalizedAttrName) {\n        case 'max-age':\n          attrObj['max-age'] = attrValue ? parseInt(attrValue.trim(), 10) : undefined\n          break\n        case 'expires':\n          attrObj.expires = attrValue ? new Date(attrValue.trim()) : undefined\n          break\n        case 'domain':\n          attrObj.domain = attrValue ? attrValue.trim() : undefined\n          break\n        case 'path':\n          attrObj.path = attrValue ? attrValue.trim() : undefined\n          break\n        case 'secure':\n          attrObj.secure = true\n          break\n        case 'httponly':\n          attrObj.httponly = true\n          break\n        case 'samesite':\n          attrObj.samesite = attrValue ? (attrValue.trim().toLowerCase() as 'strict' | 'lax' | 'none') : undefined\n          break\n        case 'partitioned':\n          attrObj.partitioned = true\n          break\n        default:\n          attrObj[normalizedAttrName] = attrValue ? attrValue.trim() : true\n          break\n      }\n    }\n\n    cookies.set(name, attrObj)\n  }\n\n  return cookies\n}\n\nexport function toCookieOptions(attributes: CookieAttributes): AthenaCookieOptions {\n  return {\n    maxAge: attributes['max-age'],\n    expires: attributes.expires,\n    domain: attributes.domain,\n    path: attributes.path,\n    secure: attributes.secure,\n    httpOnly: attributes.httponly,\n    sameSite: attributes.samesite,\n    partitioned: attributes.partitioned,\n  }\n}\n\n/**\n * Cookie-name token char set per RFC 7230 §3.2.6.\n */\nexport const cookieNameRegex = /^[\\w!#$%&'*.^`|~+-]+$/\n\nfunction unquoteCookieValue(value: string): string {\n  if (value.length < 2 || !value.startsWith('\"') || !value.endsWith('\"')) {\n    return value\n  }\n  return value.slice(1, -1)\n}\n\n/**\n * Parse a `Cookie` header into a key/value map.\n */\nexport function parseCookies(cookieHeader: string): Map<string, string> {\n  const cookies = cookieHeader.split('; ')\n  const cookieMap = new Map<string, string>()\n  cookies.forEach((cookie) => {\n    const [name, value] = cookie.split(/=(.*)/s)\n    cookieMap.set(name as string, value as string)\n  })\n  return cookieMap\n}\n\n/**\n * Add or replace a cookie in the request `Cookie` header.\n */\nexport function setRequestCookie(headers: Headers, name: string, value: string): void {\n  const cookieMap = parseCookies(headers.get('cookie') || '')\n  if (cookieNameRegex.test(name)) {\n    cookieMap.set(name, value)\n  }\n  headers.set(\n    'cookie',\n    Array.from(cookieMap, ([key, currentValue]) => `${key}=${encodeURIComponent(currentValue)}`).join('; '),\n  )\n}\n\n/**\n * Merge `Set-Cookie` values into a `Cookie` header.\n */\nexport function applySetCookies(target: Headers, setCookieValues: Iterable<string>): void {\n  const cookieMap = parseCookies(target.get('cookie') || '')\n  for (const setCookie of setCookieValues) {\n    for (const [name, attr] of parseSetCookieHeader(setCookie)) {\n      if (cookieNameRegex.test(name)) {\n        cookieMap.set(name, attr.value)\n      }\n    }\n  }\n  target.set(\n    'cookie',\n    Array.from(cookieMap, ([key, currentValue]) => `${key}=${encodeURIComponent(currentValue)}`).join('; '),\n  )\n}\n\nexport function setCookieToHeader(headers: Headers) {\n  return (context: { response: Response }) => {\n    const setCookieHeader = context.response.headers.get('set-cookie')\n    if (!setCookieHeader) {\n      return\n    }\n    applySetCookies(headers, [setCookieHeader])\n  }\n}\n","import { decodeBase64UrlToString, encodeBytesToBase64Url, encodeStringToBase64Url } from './base64.ts'\n\ntype JwtPayload = Record<string, unknown>\n\nconst HS256_ALG = 'HS256'\n\ninterface SubtleCryptoLike {\n  importKey: (\n    format: 'raw',\n    keyData: Uint8Array,\n    algorithm: { name: 'HMAC'; hash: 'SHA-256' },\n    extractable: boolean,\n    keyUsages: Array<'sign' | 'verify'>,\n  ) => Promise<unknown>\n  sign: (algorithm: 'HMAC', key: unknown, data: Uint8Array) => Promise<ArrayBuffer>\n}\n\ninterface WebCryptoLike {\n  subtle?: SubtleCryptoLike\n}\n\nasync function getSubtleCrypto(): Promise<SubtleCryptoLike> {\n  const globalCrypto = (globalThis as { crypto?: WebCryptoLike }).crypto\n  if (globalCrypto?.subtle) {\n    return globalCrypto.subtle\n  }\n  const { webcrypto } = await import('node:crypto')\n  const subtle = (webcrypto as unknown as WebCryptoLike).subtle\n  if (!subtle) {\n    throw new Error('Web Crypto subtle API is unavailable.')\n  }\n  return subtle\n}\n\nasync function importHmacKey(secret: string, usage: 'sign' | 'verify'): Promise<unknown> {\n  const subtle = await getSubtleCrypto()\n  return subtle.importKey(\n    'raw',\n    new TextEncoder().encode(secret),\n    {\n      name: 'HMAC',\n      hash: 'SHA-256',\n    },\n    false,\n    [usage] as Array<'sign' | 'verify'>,\n  )\n}\n\nfunction bufferToBytes(buffer: ArrayBuffer): Uint8Array {\n  return new Uint8Array(buffer)\n}\n\nfunction parseJwtPayload(payloadSegment: string): JwtPayload | null {\n  try {\n    const decoded = decodeBase64UrlToString(payloadSegment)\n    const payload = JSON.parse(decoded) as unknown\n    if (!payload || typeof payload !== 'object') {\n      return null\n    }\n    return payload as JwtPayload\n  } catch {\n    return null\n  }\n}\n\nfunction isJwtExpired(payload: JwtPayload): boolean {\n  const exp = payload.exp\n  if (typeof exp !== 'number') {\n    return false\n  }\n  return exp < Math.floor(Date.now() / 1000)\n}\n\nexport async function signHmacBase64Url(secret: string, value: string): Promise<string> {\n  const subtle = await getSubtleCrypto()\n  const key = await importHmacKey(secret, 'sign')\n  const signature = await subtle.sign('HMAC', key, new TextEncoder().encode(value))\n  return encodeBytesToBase64Url(bufferToBytes(signature))\n}\n\nexport async function signJwtHS256(\n  payload: JwtPayload,\n  secret: string,\n  expiresIn = 60 * 5,\n): Promise<string> {\n  const now = Math.floor(Date.now() / 1000)\n  const header = { alg: HS256_ALG, typ: 'JWT' }\n  const fullPayload = {\n    ...payload,\n    iat: now,\n    exp: now + expiresIn,\n  }\n  const headerPart = encodeStringToBase64Url(JSON.stringify(header))\n  const payloadPart = encodeStringToBase64Url(JSON.stringify(fullPayload))\n  const message = `${headerPart}.${payloadPart}`\n  const signature = await signHmacBase64Url(secret, message)\n  return `${message}.${signature}`\n}\n\nexport async function verifyJwtHS256<TPayload extends JwtPayload = JwtPayload>(\n  token: string,\n  secret: string,\n): Promise<TPayload | null> {\n  const parts = token.split('.')\n  if (parts.length !== 3) {\n    return null\n  }\n\n  const [headerPart, payloadPart, signaturePart] = parts\n  if (!headerPart || !payloadPart || !signaturePart) {\n    return null\n  }\n\n  let header: { alg?: string } | null = null\n  try {\n    header = JSON.parse(decodeBase64UrlToString(headerPart)) as { alg?: string }\n  } catch {\n    return null\n  }\n\n  if (!header || header.alg !== HS256_ALG) {\n    return null\n  }\n\n  const payload = parseJwtPayload(payloadPart)\n  if (!payload) {\n    return null\n  }\n\n  const expectedSignature = await signHmacBase64Url(secret, `${headerPart}.${payloadPart}`)\n  if (expectedSignature !== signaturePart) {\n    return null\n  }\n\n  if (isJwtExpired(payload)) {\n    return null\n  }\n\n  return payload as TPayload\n}\n","import { decodeBase64UrlToString } from './base64.ts'\nimport { parseCookies } from './cookie-utils.ts'\nimport type { AthenaCookieContextRuntime, AthenaCookieOptions } from './types.ts'\n\nconst ALLOWED_COOKIE_SIZE = 4096\nconst ESTIMATED_EMPTY_COOKIE_SIZE = 200\nconst CHUNK_SIZE = ALLOWED_COOKIE_SIZE - ESTIMATED_EMPTY_COOKIE_SIZE\n\ninterface StoreCookie {\n  name: string\n  value: string\n  attributes: AthenaCookieOptions\n}\n\ntype Chunks = Record<string, string>\n\nfunction getChunkIndex(cookieName: string): number {\n  const parts = cookieName.split('.')\n  const lastPart = parts[parts.length - 1]\n  const index = parseInt(lastPart || '0', 10)\n  return Number.isNaN(index) ? 0 : index\n}\n\nfunction readExistingChunks(cookieName: string, ctx: AthenaCookieContextRuntime): Chunks {\n  const chunks: Chunks = {}\n  const cookies = parseCookies(ctx.headers?.get('cookie') || '')\n  for (const [name, value] of cookies) {\n    if (name.startsWith(cookieName)) {\n      chunks[name] = value\n    }\n  }\n  return chunks\n}\n\nfunction joinChunks(chunks: Chunks): string {\n  const sortedKeys = Object.keys(chunks).sort((left, right) => getChunkIndex(left) - getChunkIndex(right))\n  return sortedKeys.map((key) => chunks[key]).join('')\n}\n\nfunction chunkCookie(storeName: string, cookie: StoreCookie, chunks: Chunks, ctx: AthenaCookieContextRuntime): StoreCookie[] {\n  const chunkCount = Math.ceil(cookie.value.length / CHUNK_SIZE)\n  if (chunkCount === 1) {\n    chunks[cookie.name] = cookie.value\n    return [cookie]\n  }\n\n  const cookies: StoreCookie[] = []\n  for (let index = 0; index < chunkCount; index++) {\n    const name = `${cookie.name}.${index}`\n    const start = index * CHUNK_SIZE\n    const value = cookie.value.substring(start, start + CHUNK_SIZE)\n    cookies.push({\n      ...cookie,\n      name,\n      value,\n    })\n    chunks[name] = value\n  }\n\n  ctx.logger?.debug?.(`CHUNKING_${storeName.toUpperCase()}_COOKIE`, {\n    message: `${storeName} cookie exceeds allowed ${ALLOWED_COOKIE_SIZE} bytes.`,\n    emptyCookieSize: ESTIMATED_EMPTY_COOKIE_SIZE,\n    valueSize: cookie.value.length,\n    chunkCount,\n    chunks: cookies.map((entry) => entry.value.length + ESTIMATED_EMPTY_COOKIE_SIZE),\n  })\n\n  return cookies\n}\n\nfunction getCleanCookies(chunks: Chunks, cookieOptions: AthenaCookieOptions): Record<string, StoreCookie> {\n  const cleanedChunks: Record<string, StoreCookie> = {}\n  for (const name in chunks) {\n    cleanedChunks[name] = {\n      name,\n      value: '',\n      attributes: {\n        ...cookieOptions,\n        maxAge: 0,\n      },\n    }\n  }\n  return cleanedChunks\n}\n\nconst storeFactory =\n  (storeName: string) =>\n  (cookieName: string, cookieOptions: AthenaCookieOptions, ctx: AthenaCookieContextRuntime) => {\n    const chunks = readExistingChunks(cookieName, ctx)\n\n    return {\n      getValue(): string {\n        return joinChunks(chunks)\n      },\n      hasChunks(): boolean {\n        return Object.keys(chunks).length > 0\n      },\n      chunk(value: string, options?: Partial<AthenaCookieOptions>): StoreCookie[] {\n        const cleanedChunks = getCleanCookies(chunks, cookieOptions)\n        for (const name in chunks) {\n          delete chunks[name]\n        }\n\n        const cookies: Record<string, StoreCookie> = cleanedChunks\n        const chunked = chunkCookie(\n          storeName,\n          {\n            name: cookieName,\n            value,\n            attributes: {\n              ...cookieOptions,\n              ...options,\n            },\n          },\n          chunks,\n          ctx,\n        )\n        for (const chunk of chunked) {\n          cookies[chunk.name] = chunk\n        }\n        return Object.values(cookies)\n      },\n      clean(): StoreCookie[] {\n        const cleanedChunks = getCleanCookies(chunks, cookieOptions)\n        for (const name in chunks) {\n          delete chunks[name]\n        }\n        return Object.values(cleanedChunks)\n      },\n      setCookies(cookies: StoreCookie[]): void {\n        for (const cookie of cookies) {\n          ctx.setCookie(cookie.name, cookie.value, cookie.attributes)\n        }\n      },\n    }\n  }\n\nexport const createSessionStore = storeFactory('Session')\nexport const createAccountStore = storeFactory('Account')\n\nexport function getChunkedCookie(ctx: AthenaCookieContextRuntime, cookieName: string): string | null {\n  const value = ctx.getCookie?.(cookieName)\n  if (value) {\n    return value\n  }\n\n  const chunks: Array<{ index: number; value: string }> = []\n  const cookieHeader = ctx.headers?.get('cookie')\n  if (!cookieHeader) {\n    return null\n  }\n\n  for (const [name, parsedValue] of parseCookies(cookieHeader)) {\n    if (!name.startsWith(`${cookieName}.`)) {\n      continue\n    }\n    const parts = name.split('.')\n    const indexStr = parts.at(-1)\n    const index = parseInt(indexStr || '0', 10)\n    if (!Number.isNaN(index)) {\n      chunks.push({ index, value: parsedValue })\n    }\n  }\n\n  if (chunks.length === 0) {\n    return null\n  }\n\n  chunks.sort((left, right) => left.index - right.index)\n  return chunks.map((entry) => entry.value).join('')\n}\n\n/**\n * SDK helper to read an account cookie value.\n * - If plain JSON: returns parsed value.\n * - If base64url-encoded JSON: returns parsed value.\n * - Otherwise: returns the raw cookie string.\n */\nexport async function getAccountCookie(\n  ctx: AthenaCookieContextRuntime,\n  cookieName = ctx.context.authCookies.accountData.name,\n): Promise<unknown | null> {\n  const value = getChunkedCookie(ctx, cookieName)\n  if (!value) {\n    return null\n  }\n\n  try {\n    return JSON.parse(value) as unknown\n  } catch {\n    // Fall through and try base64url payload parsing.\n  }\n\n  try {\n    return JSON.parse(decodeBase64UrlToString(value)) as unknown\n  } catch {\n    return value\n  }\n}\n","import { decodeBase64UrlToString, encodeStringToBase64Url } from './base64.ts'\nimport {\n  HOST_COOKIE_PREFIX,\n  SECURE_COOKIE_PREFIX,\n  parseCookies,\n  parseSetCookieHeader,\n  setCookieToHeader,\n  setRequestCookie,\n  splitSetCookieHeader,\n  stripSecureCookiePrefix,\n  toCookieOptions,\n} from './cookie-utils.ts'\nimport { signHmacBase64Url, signJwtHS256, verifyJwtHS256 } from './crypto.ts'\nimport { createAccountStore, createSessionStore, getAccountCookie, getChunkedCookie } from './session-store.ts'\nimport type {\n  AthenaAuthCookie,\n  AthenaAuthCookies,\n  AthenaCookieContextRuntime,\n  AthenaCookieOptions,\n  AthenaCookiesOptions,\n  AthenaCookieVersionResolver,\n  AthenaGetCookieCacheConfig,\n  AthenaSessionPair,\n} from './types.ts'\n\nconst DEFAULT_COOKIE_PREFIX = 'athena-auth'\nconst LEGACY_COOKIE_PREFIX = 'better-auth'\nconst DEFAULT_SESSION_MAX_AGE = 7 * 24 * 60 * 60\nconst DEFAULT_CACHE_MAX_AGE = 60 * 5\n\nfunction isProductionRuntime(): boolean {\n  return typeof process !== 'undefined' && process.env?.NODE_ENV === 'production'\n}\n\nfunction getEnvironmentSecret(): string | undefined {\n  if (typeof process === 'undefined') {\n    return undefined\n  }\n  return process.env?.ATHENA_AUTH_SECRET || process.env?.BETTER_AUTH_SECRET || process.env?.AUTH_SECRET\n}\n\nfunction isDynamicBaseURLConfig(baseURL: AthenaCookiesOptions['baseURL']): boolean {\n  return (\n    typeof baseURL === 'object' &&\n    baseURL !== null &&\n    'allowedHosts' in baseURL &&\n    Array.isArray((baseURL as { allowedHosts?: unknown }).allowedHosts)\n  )\n}\n\nfunction resolveCookiePrefixes(primaryPrefix: string): string[] {\n  const prefixes = [primaryPrefix]\n  if (!prefixes.includes(DEFAULT_COOKIE_PREFIX)) {\n    prefixes.push(DEFAULT_COOKIE_PREFIX)\n  }\n  if (!prefixes.includes(LEGACY_COOKIE_PREFIX)) {\n    prefixes.push(LEGACY_COOKIE_PREFIX)\n  }\n  return prefixes\n}\n\nfunction createError(message: string): Error {\n  return new Error(`@xylex-group/athena/cookies: ${message}`)\n}\n\nfunction getSecretOrThrow(secret?: string): string {\n  const resolved = secret || getEnvironmentSecret()\n  if (!resolved) {\n    throw createError(\n      'getCookieCache requires a secret. Pass `secret` or set ATHENA_AUTH_SECRET/BETTER_AUTH_SECRET/AUTH_SECRET.',\n    )\n  }\n  return resolved\n}\n\nfunction asObject(value: unknown): Record<string, unknown> | null {\n  if (!value || typeof value !== 'object') {\n    return null\n  }\n  return value as Record<string, unknown>\n}\n\nfunction getSessionTokenFromPair(session: AthenaSessionPair): string {\n  const token = session.session?.token\n  if (typeof token !== 'string' || token.length === 0) {\n    throw createError('setSessionCookie requires `session.session.token` to be a non-empty string.')\n  }\n  return token\n}\n\nasync function resolveCookieVersion(\n  versionConfig: AthenaCookieVersionResolver | undefined,\n  session: Record<string, unknown>,\n  user: Record<string, unknown>,\n): Promise<string> {\n  if (!versionConfig) {\n    return '1'\n  }\n  if (typeof versionConfig === 'string') {\n    return versionConfig\n  }\n  return versionConfig(session, user)\n}\n\nfunction getSessionCookieCacheName(cookiePrefix: string, cookieName: string, isSecure: boolean): string {\n  return isSecure ? `${SECURE_COOKIE_PREFIX}${cookiePrefix}.${cookieName}` : `${cookiePrefix}.${cookieName}`\n}\n\nasync function setCookieValue(\n  ctx: AthenaCookieContextRuntime,\n  name: string,\n  value: string,\n  attributes: AthenaCookieOptions,\n): Promise<void> {\n  const secret = ctx.context.secret\n  if (secret && typeof ctx.setSignedCookie === 'function') {\n    await ctx.setSignedCookie(name, value, secret, attributes)\n    return\n  }\n  ctx.setCookie(name, value, attributes)\n}\n\nfunction parseJsonSafely<T>(value: string): T | null {\n  try {\n    return JSON.parse(value) as T\n  } catch {\n    return null\n  }\n}\n\nfunction getIsSecureCookie(config: { isSecure?: boolean } | undefined): boolean {\n  if (config?.isSecure !== undefined) {\n    return config.isSecure\n  }\n  return isProductionRuntime()\n}\n\nexport function createCookieGetter(options: AthenaCookiesOptions) {\n  const baseURLString = typeof options.baseURL === 'string' ? options.baseURL : undefined\n  const dynamicProtocol =\n    typeof options.baseURL === 'object' && options.baseURL !== null ? options.baseURL.protocol : undefined\n\n  const secure =\n    options.advanced?.useSecureCookies !== undefined\n      ? options.advanced.useSecureCookies\n      : dynamicProtocol === 'https'\n        ? true\n        : dynamicProtocol === 'http'\n          ? false\n          : baseURLString\n            ? baseURLString.startsWith('https://')\n            : isProductionRuntime()\n\n  const secureCookiePrefix = secure ? SECURE_COOKIE_PREFIX : ''\n  const crossSubdomainEnabled = !!options.advanced?.crossSubDomainCookies?.enabled\n  const domain = crossSubdomainEnabled\n    ? options.advanced?.crossSubDomainCookies?.domain || (baseURLString ? new URL(baseURLString).hostname : undefined)\n    : undefined\n\n  if (crossSubdomainEnabled && !domain && !isDynamicBaseURLConfig(options.baseURL)) {\n    throw createError('baseURL is required when `crossSubDomainCookies.enabled` is true.')\n  }\n\n  function createCookie(cookieName: string, overrideAttributes: Partial<AthenaCookieOptions> = {}): AthenaAuthCookie {\n    const prefix = options.advanced?.cookiePrefix || DEFAULT_COOKIE_PREFIX\n    const name = options.advanced?.cookies?.[cookieName]?.name || `${prefix}.${cookieName}`\n    const attributes = options.advanced?.cookies?.[cookieName]?.attributes || {}\n\n    return {\n      name: `${secureCookiePrefix}${name}`,\n      attributes: {\n        secure: !!secureCookiePrefix,\n        sameSite: 'lax',\n        path: '/',\n        httpOnly: true,\n        ...(crossSubdomainEnabled ? { domain } : {}),\n        ...options.advanced?.defaultCookieAttributes,\n        ...overrideAttributes,\n        ...attributes,\n      },\n    }\n  }\n\n  return createCookie\n}\n\nexport function getCookies(options: AthenaCookiesOptions): AthenaAuthCookies {\n  const createCookie = createCookieGetter(options)\n  const sessionToken = createCookie('session_token', { maxAge: options.session?.expiresIn || DEFAULT_SESSION_MAX_AGE })\n  const sessionData = createCookie('session_data', { maxAge: options.session?.cookieCache?.maxAge || DEFAULT_CACHE_MAX_AGE })\n  const accountData = createCookie('account_data', { maxAge: options.session?.cookieCache?.maxAge || DEFAULT_CACHE_MAX_AGE })\n  const dontRememberToken = createCookie('dont_remember')\n\n  return {\n    sessionToken: {\n      name: sessionToken.name,\n      attributes: sessionToken.attributes,\n    },\n    sessionData: {\n      name: sessionData.name,\n      attributes: sessionData.attributes,\n    },\n    dontRememberToken: {\n      name: dontRememberToken.name,\n      attributes: dontRememberToken.attributes,\n    },\n    accountData: {\n      name: accountData.name,\n      attributes: accountData.attributes,\n    },\n  }\n}\n\nexport async function setCookieCache(\n  ctx: AthenaCookieContextRuntime,\n  session: AthenaSessionPair,\n  dontRememberMe: boolean,\n): Promise<void> {\n  const cookieCacheConfig = ctx.context.options?.session?.cookieCache\n  if (!cookieCacheConfig?.enabled) {\n    return\n  }\n\n  const version = await resolveCookieVersion(\n    cookieCacheConfig.version,\n    session.session as Record<string, unknown>,\n    session.user as Record<string, unknown>,\n  )\n\n  const sessionData = {\n    session: session.session,\n    user: session.user,\n    updatedAt: Date.now(),\n    version,\n  }\n\n  const baseAttributes = ctx.context.authCookies.sessionData.attributes\n  const maxAge = dontRememberMe ? undefined : baseAttributes.maxAge\n  const options: AthenaCookieOptions = {\n    ...baseAttributes,\n    maxAge,\n  }\n  const expiresAt = Date.now() + ((options.maxAge || 60) * 1000)\n  const strategy = cookieCacheConfig.strategy || 'compact'\n  const secret = getSecretOrThrow(ctx.context.secret)\n\n  let encoded: string\n  if (strategy === 'jwt') {\n    encoded = await signJwtHS256(sessionData, secret, options.maxAge || DEFAULT_CACHE_MAX_AGE)\n  } else if (strategy === 'jwe') {\n    throw createError('`jwe` strategy is not supported by the SDK cookie helper.')\n  } else {\n    const signature = await signHmacBase64Url(\n      secret,\n      JSON.stringify({\n        ...sessionData,\n        expiresAt,\n      }),\n    )\n    encoded = encodeStringToBase64Url(\n      JSON.stringify({\n        session: sessionData,\n        expiresAt,\n        signature,\n      }),\n    )\n  }\n\n  if (encoded.length > 4093) {\n    const store = createSessionStore(ctx.context.authCookies.sessionData.name, options, ctx)\n    const cookies = store.chunk(encoded, options)\n    store.setCookies(cookies)\n  } else {\n    const store = createSessionStore(ctx.context.authCookies.sessionData.name, options, ctx)\n    if (store.hasChunks()) {\n      store.setCookies(store.clean())\n    }\n    ctx.setCookie(ctx.context.authCookies.sessionData.name, encoded, options)\n  }\n}\n\nexport async function setSessionCookie(\n  ctx: AthenaCookieContextRuntime,\n  session: AthenaSessionPair,\n  dontRememberMe?: boolean,\n  overrides?: Partial<AthenaCookieOptions>,\n): Promise<void> {\n  if (dontRememberMe === undefined && typeof ctx.getSignedCookie === 'function' && ctx.context.secret) {\n    const existingFlag = await ctx.getSignedCookie(ctx.context.authCookies.dontRememberToken.name, ctx.context.secret)\n    dontRememberMe = !!existingFlag\n  }\n\n  const resolvedDontRememberMe = dontRememberMe ?? false\n  const token = getSessionTokenFromPair(session)\n  const options = ctx.context.authCookies.sessionToken.attributes\n  const maxAge = resolvedDontRememberMe ? undefined : ctx.context.sessionConfig?.expiresIn\n  await setCookieValue(ctx, ctx.context.authCookies.sessionToken.name, token, {\n    ...options,\n    maxAge,\n    ...overrides,\n  })\n\n  if (resolvedDontRememberMe) {\n    await setCookieValue(\n      ctx,\n      ctx.context.authCookies.dontRememberToken.name,\n      'true',\n      ctx.context.authCookies.dontRememberToken.attributes,\n    )\n  }\n\n  await setCookieCache(ctx, session, resolvedDontRememberMe)\n  ctx.context.setNewSession?.(session)\n}\n\n/**\n * Expires a cookie by setting `maxAge: 0` while preserving attributes.\n */\nexport function expireCookie(ctx: AthenaCookieContextRuntime, cookie: AthenaAuthCookie): void {\n  ctx.setCookie(cookie.name, '', {\n    ...cookie.attributes,\n    maxAge: 0,\n  })\n}\n\nexport function deleteSessionCookie(ctx: AthenaCookieContextRuntime, skipDontRememberMe?: boolean): void {\n  expireCookie(ctx, ctx.context.authCookies.sessionToken)\n  expireCookie(ctx, ctx.context.authCookies.sessionData)\n\n  if (ctx.context.options?.account?.storeAccountCookie) {\n    expireCookie(ctx, ctx.context.authCookies.accountData)\n    const accountStore = createAccountStore(\n      ctx.context.authCookies.accountData.name,\n      ctx.context.authCookies.accountData.attributes,\n      ctx,\n    )\n    accountStore.setCookies(accountStore.clean())\n  }\n\n  const sessionStore = createSessionStore(\n    ctx.context.authCookies.sessionData.name,\n    ctx.context.authCookies.sessionData.attributes,\n    ctx,\n  )\n  sessionStore.setCookies(sessionStore.clean())\n\n  if (!skipDontRememberMe) {\n    expireCookie(ctx, ctx.context.authCookies.dontRememberToken)\n  }\n}\n\nexport const getSessionCookie = (\n  request: Request | Headers,\n  config?:\n    | {\n        cookiePrefix?: string\n        cookieName?: string\n        path?: string\n      }\n    | undefined,\n): string | null => {\n  const cookies = (request instanceof Headers || !('headers' in request) ? request : request.headers).get('cookie')\n  if (!cookies) {\n    return null\n  }\n\n  const { cookieName = 'session_token', cookiePrefix = 'athena-auth' } = config || {}\n  const parsedCookie = parseCookies(cookies)\n  const getCookie = (name: string): string | undefined =>\n    parsedCookie.get(name) || parsedCookie.get(`${SECURE_COOKIE_PREFIX}${name}`)\n  const candidateCookieNames = Array.from(new Set([\n    cookieName,\n    cookieName.replace(/_/g, '-'),\n    cookieName.replace(/-/g, '_'),\n  ])).filter(Boolean)\n  for (const candidateName of candidateCookieNames) {\n    const sessionToken =\n      getCookie(`${cookiePrefix}.${candidateName}`) || getCookie(`${cookiePrefix}-${candidateName}`)\n    if (sessionToken) {\n      return sessionToken\n    }\n  }\n  return null\n}\n\nexport const getCookieCache = async <\n  SessionShape extends Record<string, unknown> = Record<string, unknown>,\n  UserShape extends Record<string, unknown> = Record<string, unknown>,\n>(\n  request: Request | Headers,\n  config?: AthenaGetCookieCacheConfig<SessionShape, UserShape>,\n): Promise<{\n  session: SessionShape\n  user: UserShape\n  updatedAt: number\n  version?: string\n} | null> => {\n  const headers = request instanceof Headers || !('headers' in request) ? request : request.headers\n  const cookieHeader = headers.get('cookie')\n  if (!cookieHeader) {\n    return null\n  }\n\n  const parsedCookie = parseCookies(cookieHeader)\n  const cookieName = config?.cookieName || 'session_data'\n  const requestedPrefix = config?.cookiePrefix || DEFAULT_COOKIE_PREFIX\n  const strategy = config?.strategy || 'compact'\n  const cookiePrefixes = resolveCookiePrefixes(requestedPrefix)\n  const isSecure = getIsSecureCookie(config)\n  const secret = getSecretOrThrow(config?.secret)\n\n  let sessionData: string | undefined\n\n  for (const prefix of cookiePrefixes) {\n    const candidate = getSessionCookieCacheName(prefix, cookieName, isSecure)\n    const cookieValue = parsedCookie.get(candidate)\n    if (cookieValue) {\n      sessionData = cookieValue\n      break\n    }\n  }\n\n  if (!sessionData) {\n    const reconstructedChunks: Array<{ index: number; value: string }> = []\n    for (const prefix of cookiePrefixes) {\n      const candidate = getSessionCookieCacheName(prefix, cookieName, isSecure)\n      for (const [name, value] of parsedCookie.entries()) {\n        if (!name.startsWith(`${candidate}.`)) {\n          continue\n        }\n        const parts = name.split('.')\n        const indexStr = parts[parts.length - 1]\n        const index = parseInt(indexStr || '0', 10)\n        if (!Number.isNaN(index)) {\n          reconstructedChunks.push({ index, value })\n        }\n      }\n      if (reconstructedChunks.length > 0) {\n        break\n      }\n    }\n\n    if (reconstructedChunks.length > 0) {\n      reconstructedChunks.sort((left, right) => left.index - right.index)\n      sessionData = reconstructedChunks.map((chunk) => chunk.value).join('')\n    }\n  }\n\n  if (!sessionData) {\n    return null\n  }\n\n  if (strategy === 'jwe') {\n    throw createError(\n      '`jwe` strategy is not supported by the SDK cookie helper. Use compact/jwt or pass cookie data through the auth server.',\n    )\n  }\n\n  if (strategy === 'jwt') {\n    const payload = await verifyJwtHS256<Record<string, unknown>>(sessionData, secret)\n    if (!payload) {\n      return null\n    }\n    const sessionRecord = asObject(payload.session)\n    const userRecord = asObject(payload.user)\n    const updatedAt = payload.updatedAt\n    if (!sessionRecord || !userRecord || typeof updatedAt !== 'number') {\n      return null\n    }\n\n    if (config?.version) {\n      const cookieVersion = typeof payload.version === 'string' ? payload.version : '1'\n      const expectedVersion =\n        typeof config.version === 'string'\n          ? config.version\n          : await config.version(sessionRecord as SessionShape, userRecord as UserShape)\n      if (cookieVersion !== expectedVersion) {\n        return null\n      }\n    }\n\n    return {\n      session: sessionRecord as SessionShape,\n      user: userRecord as UserShape,\n      updatedAt,\n      version: typeof payload.version === 'string' ? payload.version : undefined,\n    }\n  }\n\n  const compactPayload = parseJsonSafely<{\n    session: {\n      session: SessionShape\n      user: UserShape\n      updatedAt: number\n      version?: string\n    }\n    expiresAt: number\n    signature: string\n  }>(decodeBase64UrlToString(sessionData))\n\n  if (!compactPayload) {\n    return null\n  }\n\n  const expectedSignature = await signHmacBase64Url(\n    secret,\n    JSON.stringify({\n      ...compactPayload.session,\n      expiresAt: compactPayload.expiresAt,\n    }),\n  )\n\n  if (expectedSignature !== compactPayload.signature) {\n    return null\n  }\n\n  if (compactPayload.expiresAt <= Date.now()) {\n    return null\n  }\n\n  const resolvedSession = compactPayload.session\n  if (config?.version) {\n    const cookieVersion = resolvedSession.version || '1'\n    const expectedVersion =\n      typeof config.version === 'string'\n        ? config.version\n        : await config.version(resolvedSession.session, resolvedSession.user)\n    if (cookieVersion !== expectedVersion) {\n      return null\n    }\n  }\n\n  const sessionObject = asObject(resolvedSession.session)\n  const userObject = asObject(resolvedSession.user)\n  if (!sessionObject || !userObject) {\n    return null\n  }\n\n  return {\n    session: sessionObject as SessionShape,\n    user: userObject as UserShape,\n    updatedAt: resolvedSession.updatedAt,\n    version: resolvedSession.version,\n  }\n}\n\nexport {\n  SESSION_COOKIE_PATTERNS,\n  hasAuthSessionCookie,\n} from './session-cookie-detection.ts'\n\nexport {\n  HOST_COOKIE_PREFIX,\n  SECURE_COOKIE_PREFIX,\n  createSessionStore,\n  getAccountCookie,\n  getChunkedCookie,\n  parseCookies,\n  parseSetCookieHeader,\n  setCookieToHeader,\n  setRequestCookie,\n  splitSetCookieHeader,\n  stripSecureCookiePrefix,\n  toCookieOptions,\n}\n\nexport type {\n  AthenaAuthCookie,\n  AthenaAuthCookies,\n  AthenaCookieContextRuntime,\n  AthenaCookieOptions,\n  AthenaCookiesOptions,\n  AthenaGetCookieCacheConfig,\n}\n","import { getSessionCookie } from '../cookies/index.ts'\nimport type { BackendOption } from '../gateway/types.ts'\n\nexport type AthenaRequestHeaderProfile = 'gateway' | 'auth' | 'chat' | 'storage' | 'minimal'\n\nconst NO_CACHE_HEADER_VALUE = 'no-cache'\n\nconst API_KEY_HEADER_CANDIDATES = ['X-Athena-Key', 'x-athena-key', 'X-Api-Key', 'x-api-key', 'apikey'] as const\nconst ATHENA_KEY_HEADER_CANDIDATES = ['X-Athena-Key', 'x-athena-key'] as const\nconst SESSION_TOKEN_HEADER_CANDIDATES = ['X-Athena-Auth-Session-Token'] as const\nconst BEARER_MIRROR_HEADER_CANDIDATES = ['X-Athena-Auth-Bearer-Token'] as const\nconst CLIENT_HEADER_CANDIDATES = ['X-Athena-Client', 'x-athena-client'] as const\nconst PG_URI_HEADER_CANDIDATES = ['x-pg-uri'] as const\nconst JDBC_URI_HEADER_CANDIDATES = ['x-athena-jdbc-url', 'x-jdbc-url'] as const\n\ninterface AthenaRequestHeaderProfileRules {\n  apiKeys: boolean\n  routing: boolean\n  authMirror: boolean\n  authBearer: boolean\n  contentType?: boolean\n  accept?: boolean\n  stripNullsDefault?: boolean\n}\n\nconst PROFILE_RULES: Record<AthenaRequestHeaderProfile, AthenaRequestHeaderProfileRules> = {\n  gateway: { apiKeys: true, routing: true, authMirror: true, authBearer: false, contentType: true, stripNullsDefault: true },\n  chat: { apiKeys: true, routing: true, authMirror: true, authBearer: true, accept: true },\n  storage: { apiKeys: true, routing: true, authMirror: true, authBearer: false, contentType: true },\n  auth: { apiKeys: true, routing: true, authMirror: false, authBearer: true, contentType: true },\n  minimal: { apiKeys: false, routing: false, authMirror: false, authBearer: false },\n}\n\nexport interface BuildAthenaRequestHeadersInput {\n  profile: AthenaRequestHeaderProfile\n  sdkHeaderValue: string\n  apiKey?: string | null\n  client?: string | null\n  userId?: string | null\n  organizationId?: string | null\n  backend?: BackendOption\n  publishEvent?: string | null\n  stripNulls?: boolean\n  bearerToken?: string | null\n  cookie?: string | null\n  sessionToken?: string | null\n  pgUri?: string | null\n  jdbcUrl?: string | null\n  forceNoCache?: boolean\n  configHeaders?: Record<string, string>\n  callHeaders?: Record<string, string>\n  contentType?: string | null\n  accept?: string | null\n}\n\n/** Shared config/call fields consumed by gateway, chat, auth, and `client.request(...)`. */\nexport interface AthenaRequestHeaderOverrideFields {\n  apiKey?: string | null\n  client?: string | null\n  userId?: string | null\n  organizationId?: string | null\n  backend?: BackendOption\n  publishEvent?: string | null\n  stripNulls?: boolean\n  bearerToken?: string | null\n  cookie?: string | null\n  sessionToken?: string | null\n  pgUri?: string | null\n  jdbcUrl?: string | null\n  forceNoCache?: boolean\n  headers?: Record<string, string>\n}\n\nexport type ResolvedRequestHeaderOverrides = Omit<\n  BuildAthenaRequestHeadersInput,\n  'profile' | 'sdkHeaderValue' | 'contentType' | 'accept'\n>\n\nfunction normalizeHeaderValue(value?: string | null): string | undefined {\n  return value ? value : undefined\n}\n\nfunction mergeExtraHeaders(\n  configHeaders?: Record<string, string>,\n  callHeaders?: Record<string, string>,\n): Record<string, string> {\n  return { ...(configHeaders ?? {}), ...(callHeaders ?? {}) }\n}\n\nexport function hasHeaderIgnoreCase(\n  headers: Record<string, string>,\n  targetKey: string,\n): boolean {\n  const normalizedTargetKey = targetKey.toLowerCase()\n  return Object.keys(headers).some(key => key.toLowerCase() === normalizedTargetKey)\n}\n\nexport function resolveHeaderValue(\n  headers: Record<string, string>,\n  candidates: readonly string[],\n): string | undefined {\n  for (const candidate of candidates) {\n    const direct = normalizeHeaderValue(headers[candidate])\n    if (direct) return direct\n  }\n\n  const loweredCandidates = new Set(candidates.map(candidate => candidate.toLowerCase()))\n  for (const [key, value] of Object.entries(headers)) {\n    if (!loweredCandidates.has(key.toLowerCase())) {\n      continue\n    }\n    const normalized = normalizeHeaderValue(value)\n    if (normalized) return normalized\n  }\n\n  return undefined\n}\n\nfunction isCacheControlHeaderName(name: string): boolean {\n  return name.toLowerCase() === 'cache-control'\n}\n\nfunction normalizeBearerToken(value: string): string {\n  const trimmed = value.trim()\n  const match = trimmed.match(/^Bearer\\s+(.+)$/i)\n  return match?.[1]?.trim() ?? trimmed\n}\n\nfunction resolveBearerTokenFromAuthorizationHeader(\n  headers: Record<string, string>,\n): string | undefined {\n  const authorization = resolveHeaderValue(headers, ['Authorization'])\n  if (!authorization) {\n    return undefined\n  }\n\n  const token = normalizeBearerToken(authorization)\n  return token ? token : undefined\n}\n\nfunction resolveSessionTokenFromCookieHeader(\n  headers: Record<string, string>,\n): string | undefined {\n  const cookie = resolveHeaderValue(headers, ['Cookie'])\n  if (!cookie) {\n    return undefined\n  }\n\n  return getSessionCookie(new Headers({ cookie })) ?? undefined\n}\n\nfunction resolveBackendType(backend?: BackendOption): string | undefined {\n  if (!backend) {\n    return undefined\n  }\n  return typeof backend === 'string' ? backend : backend.type\n}\n\nexport function resolveRequestHeaderOverrides(\n  config: AthenaRequestHeaderOverrideFields,\n  options?: AthenaRequestHeaderOverrideFields,\n  defaults?: Pick<AthenaRequestHeaderOverrideFields, 'client' | 'stripNulls'>,\n): ResolvedRequestHeaderOverrides {\n  return {\n    apiKey: options?.apiKey ?? config.apiKey,\n    client: options?.client ?? config.client ?? defaults?.client,\n    userId: options?.userId ?? config.userId,\n    organizationId: options?.organizationId ?? config.organizationId,\n    backend: options?.backend ?? config.backend,\n    publishEvent: options?.publishEvent ?? config.publishEvent,\n    stripNulls: options?.stripNulls ?? config.stripNulls ?? defaults?.stripNulls,\n    bearerToken: options?.bearerToken ?? config.bearerToken,\n    cookie: options?.cookie ?? config.cookie,\n    sessionToken: options?.sessionToken ?? config.sessionToken,\n    pgUri: options?.pgUri ?? config.pgUri,\n    jdbcUrl: options?.jdbcUrl ?? config.jdbcUrl,\n    forceNoCache: Boolean(config.forceNoCache || options?.forceNoCache),\n    configHeaders: config.headers,\n    callHeaders: options?.headers,\n  }\n}\n\nexport function buildServiceRequestHeaders(\n  profile: Exclude<AthenaRequestHeaderProfile, 'minimal'>,\n  sdkHeaderValue: string,\n  config: AthenaRequestHeaderOverrideFields,\n  options?: AthenaRequestHeaderOverrideFields,\n  extras?: Pick<BuildAthenaRequestHeadersInput, 'contentType' | 'accept'> & {\n    client?: string | null\n    stripNulls?: boolean\n  },\n): Record<string, string> {\n  const rules = PROFILE_RULES[profile]\n  return buildAthenaRequestHeaders({\n    profile,\n    sdkHeaderValue,\n    ...resolveRequestHeaderOverrides(config, options, {\n      client: extras?.client ?? undefined,\n      stripNulls: extras?.stripNulls ?? (rules.stripNullsDefault ? true : undefined),\n    }),\n    contentType: extras?.contentType ?? (rules.contentType ? 'application/json' : undefined),\n    accept: extras?.accept ?? (rules.accept ? 'application/json' : undefined),\n  })\n}\n\nexport function applyAthenaApiKeyHeaders(\n  headers: Record<string, string>,\n  apiKey?: string | null,\n): void {\n  const resolvedApiKey = normalizeHeaderValue(apiKey)\n  if (resolvedApiKey && !hasHeaderIgnoreCase(headers, 'X-Athena-Key')) {\n    headers['X-Athena-Key'] = resolvedApiKey\n  }\n}\n\nexport function applyAthenaAuthContextHeaders(\n  headers: Record<string, string>,\n  input: Pick<\n    BuildAthenaRequestHeadersInput,\n    'bearerToken' | 'cookie' | 'sessionToken' | 'profile' | 'configHeaders' | 'callHeaders'\n  >,\n): void {\n  const mergedExtraHeaders = mergeExtraHeaders(input.configHeaders, input.callHeaders)\n  const rules = PROFILE_RULES[input.profile]\n  const explicitCookie = normalizeHeaderValue(input.cookie)\n  if (explicitCookie) {\n    mergedExtraHeaders.Cookie = explicitCookie\n  }\n\n  const explicitSessionToken =\n    normalizeHeaderValue(input.sessionToken) ??\n    resolveHeaderValue(mergedExtraHeaders, SESSION_TOKEN_HEADER_CANDIDATES)\n  const derivedSessionToken =\n    explicitSessionToken ?? resolveSessionTokenFromCookieHeader(mergedExtraHeaders)\n  const cookieFromHeaders = resolveHeaderValue(mergedExtraHeaders, ['Cookie'])\n\n  if (explicitCookie && !hasHeaderIgnoreCase(headers, 'Cookie')) {\n    headers.Cookie = explicitCookie\n  } else if (cookieFromHeaders && !hasHeaderIgnoreCase(headers, 'Cookie')) {\n    headers.Cookie = cookieFromHeaders\n  }\n\n  const explicitBearerToken = (() => {\n    const configured = normalizeHeaderValue(input.bearerToken)\n    if (configured) {\n      return normalizeBearerToken(configured)\n    }\n    const mirrored = resolveHeaderValue(mergedExtraHeaders, BEARER_MIRROR_HEADER_CANDIDATES)\n    return mirrored ? normalizeBearerToken(mirrored) : undefined\n  })()\n  const derivedBearerToken =\n    explicitBearerToken ?? resolveBearerTokenFromAuthorizationHeader(mergedExtraHeaders)\n\n  if (rules.authBearer && derivedBearerToken && !hasHeaderIgnoreCase(headers, 'Authorization')) {\n    headers.Authorization = `Bearer ${derivedBearerToken}`\n  }\n\n  if (rules.authMirror) {\n    if (derivedSessionToken && !hasHeaderIgnoreCase(headers, 'X-Athena-Auth-Session-Token')) {\n      headers['X-Athena-Auth-Session-Token'] = derivedSessionToken\n    }\n    if (derivedBearerToken && !hasHeaderIgnoreCase(headers, 'X-Athena-Auth-Bearer-Token')) {\n      headers['X-Athena-Auth-Bearer-Token'] = derivedBearerToken\n    }\n  } else if (derivedSessionToken && !hasHeaderIgnoreCase(headers, 'X-Athena-Auth-Session-Token')) {\n    headers['X-Athena-Auth-Session-Token'] = derivedSessionToken\n  }\n}\n\nexport function applyAthenaPgUriHeaders(\n  headers: Record<string, string>,\n  input: Pick<BuildAthenaRequestHeadersInput, 'pgUri' | 'jdbcUrl' | 'configHeaders' | 'callHeaders'>,\n): void {\n  const mergedExtraHeaders = mergeExtraHeaders(input.configHeaders, input.callHeaders)\n\n  const pgUri =\n    normalizeHeaderValue(input.pgUri) ??\n    resolveHeaderValue(mergedExtraHeaders, PG_URI_HEADER_CANDIDATES)\n  if (pgUri && !hasHeaderIgnoreCase(headers, 'x-pg-uri')) {\n    headers['x-pg-uri'] = pgUri\n  }\n\n  const jdbcUrl =\n    normalizeHeaderValue(input.jdbcUrl) ??\n    resolveHeaderValue(mergedExtraHeaders, JDBC_URI_HEADER_CANDIDATES)\n  if (jdbcUrl) {\n    if (!hasHeaderIgnoreCase(headers, 'x-athena-jdbc-url')) {\n      headers['x-athena-jdbc-url'] = jdbcUrl\n    }\n    if (!hasHeaderIgnoreCase(headers, 'x-jdbc-url')) {\n      headers['x-jdbc-url'] = jdbcUrl\n    }\n  }\n}\n\n/**\n * Minimal gateway/data request headers used by many apps before they adopt\n * the full {@link buildAthenaRequestHeaders} profile model.\n *\n * Additive convenience — does not replace client-built headers. Prefer\n * `createClient({ client, key })` so the SDK sets these on every call.\n */\nexport function buildAthenaGatewayHeaders(input: {\n  clientName?: string | null\n  gatewayKey?: string | null\n  headers?: Record<string, string | null | undefined>\n}): Record<string, string> {\n  const trimmedClientName = input.clientName?.trim()\n  const trimmedGatewayKey = input.gatewayKey?.trim()\n  const merged: Record<string, string | null | undefined> = {\n    ...(trimmedClientName\n      ? {\n          'X-Athena-Client': trimmedClientName,\n        }\n      : {}),\n    ...(trimmedGatewayKey\n      ? {\n          'X-Api-Key': trimmedGatewayKey,\n          'X-Athena-Key': trimmedGatewayKey,\n        }\n      : {}),\n    ...input.headers,\n  }\n\n  return Object.fromEntries(\n    Object.entries(merged).flatMap(([key, value]) =>\n      typeof value === 'string' && value.trim()\n        ? ([[key, value.trim()]] as const)\n        : [],\n    ),\n  )\n}\n\nexport function buildAthenaRequestHeaders(\n  input: BuildAthenaRequestHeadersInput,\n): Record<string, string> {\n  const forceNoCache = Boolean(input.forceNoCache)\n  const mergedExtraHeaders = mergeExtraHeaders(input.configHeaders, input.callHeaders)\n  const rules = PROFILE_RULES[input.profile]\n\n  const headerClient = resolveHeaderValue(mergedExtraHeaders, CLIENT_HEADER_CANDIDATES)\n  const finalClient = normalizeHeaderValue(input.client) ?? headerClient\n  const finalApiKey =\n    normalizeHeaderValue(input.apiKey) ??\n    resolveHeaderValue(mergedExtraHeaders, API_KEY_HEADER_CANDIDATES)\n  const finalAthenaKey =\n    resolveHeaderValue(mergedExtraHeaders, ATHENA_KEY_HEADER_CANDIDATES) ?? finalApiKey\n\n  const headers: Record<string, string> = {\n    'X-Athena-Sdk': input.sdkHeaderValue,\n  }\n\n  if (rules.contentType) {\n    headers['Content-Type'] = input.contentType ?? 'application/json'\n  }\n\n  if (input.accept ?? rules.accept) {\n    headers.Accept = input.accept ?? 'application/json'\n  }\n\n  if (rules.routing) {\n    if (normalizeHeaderValue(input.userId)) {\n      headers['X-User-Id'] = input.userId ?? ''\n    }\n    if (normalizeHeaderValue(input.organizationId)) {\n      headers['X-Organization-Id'] = input.organizationId ?? ''\n    }\n    if (finalClient) {\n      headers['X-Athena-Client'] = finalClient\n    }\n\n    const backendType = resolveBackendType(input.backend)\n    if (backendType) {\n      headers['X-Backend-Type'] = backendType\n    }\n\n    if (typeof input.stripNulls === 'boolean') {\n      headers['X-Strip-Nulls'] = input.stripNulls ? 'true' : 'false'\n    } else if (rules.stripNullsDefault) {\n      headers['X-Strip-Nulls'] = 'true'\n    }\n\n    if (normalizeHeaderValue(input.publishEvent)) {\n      headers['X-Publish-Event'] = input.publishEvent ?? ''\n    }\n  }\n\n  if (rules.apiKeys && (finalApiKey || finalAthenaKey)) {\n    applyAthenaApiKeyHeaders(headers, finalAthenaKey)\n  }\n\n  applyAthenaAuthContextHeaders(headers, input)\n  applyAthenaPgUriHeaders(headers, input)\n\n  const reservedClientHeaderKeys = new Set(CLIENT_HEADER_CANDIDATES.map(key => key.toLowerCase()))\n  Object.entries(mergedExtraHeaders).forEach(([key, value]) => {\n    if (reservedClientHeaderKeys.has(key.toLowerCase())) {\n      return\n    }\n    if (forceNoCache && isCacheControlHeaderName(key)) {\n      return\n    }\n    const normalized = normalizeHeaderValue(value)\n    if (normalized) {\n      headers[key] = normalized\n    }\n  })\n\n  if (forceNoCache) {\n    headers['Cache-Control'] = NO_CACHE_HEADER_VALUE\n  }\n\n  return headers\n}\n","import type { BackendConfig } from './gateway/types.ts'\nimport { normalizeAthenaGatewayBaseUrl } from './gateway/url.ts'\nimport { buildSdkHeaderValue } from './sdk-version.ts'\nimport {\n  buildAthenaRequestHeaders,\n  hasHeaderIgnoreCase,\n} from './utils/athena-request-headers.ts'\n\nconst SDK_NAME = 'xylex-group/athena'\n\nexport type AthenaRequestService = 'db' | 'auth' | 'chat' | 'storage'\nexport type AthenaRequestMethod =\n  | 'GET'\n  | 'POST'\n  | 'PUT'\n  | 'PATCH'\n  | 'DELETE'\n  | 'HEAD'\n  | 'OPTIONS'\n\nexport interface AthenaRequestQueryValueMap {\n  [key: string]:\n    | string\n    | number\n    | boolean\n    | null\n    | undefined\n    | Array<string | number | boolean | null | undefined>\n}\n\nexport interface AthenaRequestOptions {\n  service?: AthenaRequestService\n  url?: string\n  path?: string\n  method?: AthenaRequestMethod\n  headers?: Record<string, string>\n  /** Per-request override for the canonical `X-Athena-Key` header. */\n  apiKey?: string | null\n  query?: AthenaRequestQueryValueMap\n  body?: RequestInit['body'] | Record<string, unknown> | unknown[] | null\n  signal?: AbortSignal\n  credentials?: RequestInit['credentials']\n  responseType?: 'json' | 'text' | 'response'\n}\n\nexport interface AthenaRequestResponse<T = unknown> {\n  ok: boolean\n  status: number\n  statusText: string\n  headers: Headers\n  data: T | string | null\n  raw: Response\n}\n\nexport interface AthenaRawRequestConfig {\n  baseUrl?: string\n  authUrl?: string\n  chatUrl?: string\n  storageUrl?: string\n  apiKey?: string\n  client?: string | null\n  backend?: BackendConfig\n  pgUri?: string | null\n  jdbcUrl?: string | null\n  headers?: Record<string, string>\n}\n\nexport interface AthenaRawRequestContext {\n  userId?: string | null\n  organizationId?: string | null\n  headers?: Record<string, string>\n  cookie?: string | null\n  bearerToken?: string | null\n  sessionToken?: string | null\n  forceNoCache?: boolean\n}\n\nfunction parseArbitraryResponseBody(rawText: string, contentType: string | null): unknown {\n  if (!rawText) {\n    return null\n  }\n  if (contentType?.toLowerCase().includes('application/json')) {\n    try {\n      return JSON.parse(rawText)\n    } catch {\n      return rawText\n    }\n  }\n  const trimmed = rawText.trim()\n  if ((trimmed.startsWith('{') && trimmed.endsWith('}')) || (trimmed.startsWith('[') && trimmed.endsWith(']'))) {\n    try {\n      return JSON.parse(trimmed)\n    } catch {\n      return rawText\n    }\n  }\n  return rawText\n}\n\nfunction toRequestQueryString(query?: AthenaRequestQueryValueMap): string {\n  if (!query) return ''\n  const params = new URLSearchParams()\n  for (const [key, rawValue] of Object.entries(query)) {\n    const values = Array.isArray(rawValue) ? rawValue : [rawValue]\n    for (const value of values) {\n      if (value === undefined) continue\n      params.append(key, value === null ? '' : String(value))\n    }\n  }\n  const serialized = params.toString()\n  return serialized ? `?${serialized}` : ''\n}\n\nfunction isJsonBody(body: AthenaRequestOptions['body']): boolean {\n  return (\n    body !== undefined &&\n    body !== null &&\n    !(body instanceof FormData) &&\n    !(body instanceof Blob) &&\n    !(body instanceof URLSearchParams) &&\n    !(body instanceof ArrayBuffer) &&\n    !ArrayBuffer.isView(body) &&\n    typeof body !== 'string'\n  )\n}\n\nexport function createAthenaRequest(\n  config: AthenaRawRequestConfig,\n  resolveContext: () =>\n    | AthenaRawRequestContext\n    | undefined\n    | Promise<AthenaRawRequestContext | undefined>,\n): <T = unknown>(options: AthenaRequestOptions) => Promise<AthenaRequestResponse<T>> {\n  return async <T = unknown>(options: AthenaRequestOptions): Promise<AthenaRequestResponse<T>> => {\n    const context = await resolveContext()\n    const method = options.method ?? 'GET'\n    const responseType = options.responseType ?? 'json'\n    const service = options.service ?? 'db'\n    const absoluteUrl = options.url?.trim()\n    const baseUrlByService: Record<AthenaRequestService, string | undefined> = {\n      db: config.baseUrl,\n      auth: config.authUrl,\n      chat: config.chatUrl,\n      storage: config.storageUrl,\n    }\n\n    const queryString = toRequestQueryString(options.query)\n    let targetUrl: string\n    if (absoluteUrl) {\n      // Absolute URLs bypass gateway base-url normalization so query/hash are preserved\n      // and auth-only / storage-only clients can still call arbitrary endpoints.\n      try {\n        const parsed = new URL(absoluteUrl)\n        if (parsed.protocol !== 'http:' && parsed.protocol !== 'https:') {\n          throw new Error('not http(s)')\n        }\n      } catch {\n        throw new Error(\n          `client.request(...) url must be an absolute http(s) URL. Received ${JSON.stringify(options.url)}.`,\n        )\n      }\n      targetUrl = `${absoluteUrl}${queryString}`\n    } else {\n      const resolvedBaseUrl = baseUrlByService[service]\n      if (!resolvedBaseUrl) {\n        throw new Error(\n          `Athena ${service} base URL is not configured. Pass createClient({ url }) for unified routing or set the service-specific URL first.`,\n        )\n      }\n\n      const normalizedBaseUrl = normalizeAthenaGatewayBaseUrl(resolvedBaseUrl, {\n        label: `Athena ${service} base URL`,\n      })\n      const path = options.path?.trim()\n      if (!path) {\n        throw new Error('client.request(...) requires either an absolute url or a non-empty path.')\n      }\n      const normalizedPath = path.startsWith('/') ? path : `/${path}`\n      targetUrl = `${normalizedBaseUrl}${normalizedPath}${queryString}`\n    }\n\n    const requestProfile =\n      service === 'auth'\n        ? 'auth'\n        : service === 'chat'\n          ? 'chat'\n          : service === 'storage'\n            ? 'storage'\n            : 'gateway'\n    const headers = buildAthenaRequestHeaders({\n      profile: requestProfile,\n      sdkHeaderValue: buildSdkHeaderValue(SDK_NAME),\n      apiKey: options.apiKey ?? config.apiKey,\n      client: config.client,\n      userId: context?.userId,\n      organizationId: context?.organizationId,\n      backend: config.backend,\n      pgUri: config.pgUri,\n      jdbcUrl: config.jdbcUrl,\n      bearerToken: context?.bearerToken,\n      cookie: context?.cookie,\n      sessionToken: context?.sessionToken,\n      forceNoCache: context?.forceNoCache,\n      configHeaders: {\n        ...(config.headers ?? {}),\n        ...(context?.headers ?? {}),\n      },\n      callHeaders: options.headers,\n      accept: service === 'chat' ? 'application/json' : undefined,\n      contentType:\n        service === 'auth' || service === 'db' || service === 'storage'\n          ? 'application/json'\n          : undefined,\n      stripNulls: service === 'db' ? true : undefined,\n    })\n\n    const shouldSendJsonBody = isJsonBody(options.body)\n    if (shouldSendJsonBody && !hasHeaderIgnoreCase(headers, 'Content-Type')) {\n      headers['Content-Type'] = 'application/json'\n    }\n\n    const response = await fetch(targetUrl, {\n      method,\n      headers,\n      body:\n        options.body === undefined || options.body === null\n          ? undefined\n          : shouldSendJsonBody\n            ? JSON.stringify(options.body)\n            : (options.body as RequestInit['body']),\n      signal: options.signal,\n      credentials: options.credentials,\n    })\n\n    if (responseType === 'response') {\n      return {\n        ok: response.ok,\n        status: response.status,\n        statusText: response.statusText,\n        headers: response.headers,\n        data: null,\n        raw: response,\n      }\n    }\n\n    const rawText = await response.text()\n    const parsed =\n      responseType === 'text'\n        ? rawText\n        : parseArbitraryResponseBody(rawText, response.headers.get('content-type'))\n\n    return {\n      ok: response.ok,\n      status: response.status,\n      statusText: response.statusText,\n      headers: response.headers,\n      data: parsed as T | string | null,\n      raw: response,\n    }\n  }\n}\n\n","import type {\n  AthenaGatewayBaseOptions,\n  AthenaGatewayCallOptions,\n  AthenaGatewayConnectionOptions,\n  AthenaGatewayConnectionResult,\n  AthenaGatewayEndpointPath,\n  AthenaGatewayErrorDetails,\n  AthenaGatewayMethod,\n  AthenaRpcCallOptions,\n  AthenaRpcPayload,\n  AthenaGatewayResponse,\n} from \"./types.js\";\nimport type {\n  AthenaDeletePayload,\n  AthenaFetchPayload,\n  AthenaInsertPayload,\n  AthenaRpcFilter,\n  AthenaUpdatePayload,\n  AthenaQueryPayload,\n} from \"./types.js\";\nimport { AthenaGatewayError } from \"./errors.ts\";\nimport {\n  ATHENA_DEFAULT_BASE_URL,\n  buildAthenaGatewayUrl,\n  normalizeAthenaGatewayBaseUrl,\n} from \"./url.ts\";\nimport { buildServiceRequestHeaders } from \"../utils/athena-request-headers.ts\";\nimport { buildSdkHeaderValue } from \"../sdk-version.ts\";\n\nconst DEFAULT_CLIENT = \"railway_direct\";\nconst SDK_NAME = \"xylex-group/athena\";\nconst SDK_HEADER_VALUE = buildSdkHeaderValue(SDK_NAME);\nfunction parseResponseBody(rawText: string, contentType: string | null) {\n  if (!rawText) {\n    return { parsed: null as unknown, parseFailed: false };\n  }\n\n  const contentTypeSuggestsJson =\n    contentType?.toLowerCase().includes(\"application/json\") ?? false;\n  const looksJson =\n    contentTypeSuggestsJson || rawText.startsWith(\"{\") || rawText.startsWith(\"[\");\n\n  if (!looksJson) {\n    return { parsed: rawText as unknown, parseFailed: false };\n  }\n\n  try {\n    return { parsed: JSON.parse(rawText) as unknown, parseFailed: false };\n  } catch {\n    return { parsed: rawText as unknown, parseFailed: true };\n  }\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction nonEmptyString(value: unknown): string | undefined {\n  return typeof value === \"string\" && value.trim().length > 0 ? value.trim() : undefined;\n}\n\nfunction resolveStructuredErrorPayload(payload: unknown): Record<string, unknown> | null {\n  if (!isRecord(payload)) return null;\n  return isRecord(payload.error) ? payload.error : payload;\n}\n\nfunction resolveRequestId(headers: Headers): string | undefined {\n  return (\n    headers.get(\"x-request-id\") ??\n    headers.get(\"x-correlation-id\") ??\n    headers.get(\"x-athena-request-id\") ??\n    undefined\n  );\n}\n\nfunction resolveErrorMessage(payload: unknown, fallback: string) {\n  const structuredPayload = resolveStructuredErrorPayload(payload);\n  if (structuredPayload) {\n    const messageCandidates = [structuredPayload.message, structuredPayload.error, structuredPayload.details];\n    for (const candidate of messageCandidates) {\n      const resolved = nonEmptyString(candidate);\n      if (resolved) return resolved;\n    }\n  }\n\n  const rawMessage = nonEmptyString(payload);\n  if (rawMessage) return rawMessage;\n\n  return fallback;\n}\n\nfunction resolveErrorHint(payload: unknown): string | undefined {\n  const structuredPayload = resolveStructuredErrorPayload(payload);\n  return structuredPayload ? nonEmptyString(structuredPayload.hint) : undefined;\n}\n\nfunction resolveStatusText(response: Response, payload: unknown): string | null {\n  const rawStatusText = nonEmptyString(response.statusText);\n  if (rawStatusText) return rawStatusText;\n  const payloadRecord = isRecord(payload) ? payload : null;\n  return payloadRecord ? nonEmptyString(payloadRecord.statusText) ?? null : null;\n}\n\nfunction detailsFromError(error: AthenaGatewayError): AthenaGatewayErrorDetails {\n  return error.toDetails();\n}\n\ninterface AthenaFindManyAstPayload {\n  table_name: string;\n  select: Record<string, unknown>;\n  where?: Record<string, unknown>;\n  orderBy?: Record<string, unknown>;\n  limit?: number;\n}\n\nfunction toQueryScalar(value: unknown): string {\n  if (value === null || value === undefined) return \"null\";\n  if (typeof value === \"boolean\") return value ? \"true\" : \"false\";\n  if (typeof value === \"number\") return Number.isFinite(value) ? String(value) : \"null\";\n  return String(value);\n}\n\nfunction toQueryArray(values: unknown[]): string {\n  return `{${values.map(toQueryScalar).join(\",\")}}`;\n}\n\nfunction toRpcArgumentQueryValue(value: unknown): string {\n  if (Array.isArray(value)) return toQueryArray(value);\n  if (value && typeof value === \"object\") return JSON.stringify(value);\n  return toQueryScalar(value);\n}\n\nfunction toRpcFilterQueryValue(filter: AthenaRpcFilter): string {\n  const value = filter.value;\n  switch (filter.operator) {\n    case \"in\": {\n      if (!Array.isArray(value)) {\n        throw new AthenaGatewayError({\n          code: \"UNKNOWN_ERROR\",\n          message: `RPC filter \"${filter.column}\" with operator \"in\" requires an array value`,\n          status: 0,\n        });\n      }\n      return `in.${toQueryArray(value)}`;\n    }\n    case \"is\":\n      return `is.${toQueryScalar(value)}`;\n    case \"eq\":\n    case \"neq\":\n    case \"gt\":\n    case \"gte\":\n    case \"lt\":\n    case \"lte\":\n    case \"like\":\n    case \"ilike\":\n      return `${filter.operator}.${toQueryScalar(value)}`;\n  }\n}\n\nfunction buildRpcGetEndpoint(payload: AthenaRpcPayload): AthenaGatewayEndpointPath {\n  const functionName = (payload.function_name ?? payload.function).trim();\n  if (!functionName) {\n    throw new AthenaGatewayError({\n      code: \"UNKNOWN_ERROR\",\n      message: \"rpc requires a function name\",\n      status: 0,\n      endpoint: \"/gateway/rpc\",\n      method: \"GET\",\n    });\n  }\n\n  const query = new URLSearchParams();\n  if (payload.schema) query.set(\"schema\", payload.schema);\n  if (payload.select) query.set(\"select\", payload.select);\n  if (payload.count) query.set(\"count\", payload.count);\n  if (payload.head) query.set(\"head\", \"true\");\n  if (typeof payload.limit === \"number\") query.set(\"limit\", String(payload.limit));\n  if (typeof payload.offset === \"number\") query.set(\"offset\", String(payload.offset));\n  if (payload.order?.column) {\n    query.set(\n      \"order\",\n      payload.order.ascending === false\n        ? `${payload.order.column}.desc`\n        : payload.order.column,\n    );\n  }\n\n  if (payload.args) {\n    for (const [key, value] of Object.entries(payload.args)) {\n      query.set(key, toRpcArgumentQueryValue(value));\n    }\n  }\n\n  if (payload.filters?.length) {\n    for (const filter of payload.filters) {\n      if (payload.args && Object.prototype.hasOwnProperty.call(payload.args, filter.column)) {\n        throw new AthenaGatewayError({\n          code: \"UNKNOWN_ERROR\",\n          message: `RPC filter \"${filter.column}\" conflicts with RPC argument \"${filter.column}\" in GET mode`,\n          status: 0,\n        });\n      }\n      query.append(filter.column, toRpcFilterQueryValue(filter));\n    }\n  }\n\n  const endpoint = `/rpc/${encodeURIComponent(functionName)}`;\n  const queryText = query.toString();\n  const withQuery = queryText ? `${endpoint}?${queryText}` : endpoint;\n  return withQuery as AthenaGatewayEndpointPath;\n}\n\nfunction buildHeaders(\n  config: AthenaGatewayBaseOptions,\n  options?: AthenaGatewayCallOptions,\n): Record<string, string> {\n  return buildServiceRequestHeaders(\"gateway\", SDK_HEADER_VALUE, config, options, {\n    client: options?.client ?? config.client ?? DEFAULT_CLIENT,\n    stripNulls: options?.stripNulls ?? true,\n  });\n}\n\nfunction toInvalidUrlResponse<T>(\n  error: unknown,\n  endpoint: AthenaGatewayEndpointPath,\n  method: AthenaGatewayMethod,\n): AthenaGatewayResponse<T> {\n  const message = error instanceof Error ? error.message : String(error);\n  const gatewayError =\n    error instanceof AthenaGatewayError\n      ? error\n      : new AthenaGatewayError({\n          code: \"INVALID_URL\",\n          message,\n          status: 0,\n          endpoint,\n          method,\n          cause: message,\n          hint: \"Set ATHENA_URL to a full http(s) URL before running queries.\",\n        });\n\n  return {\n    ok: false,\n    status: 0,\n    statusText: null,\n    data: null,\n    error: gatewayError.message,\n    errorDetails: detailsFromError(\n      new AthenaGatewayError({\n        code: gatewayError.code,\n        message: gatewayError.message,\n        status: gatewayError.status,\n        endpoint,\n        method,\n        requestId: gatewayError.requestId,\n        hint: gatewayError.hint,\n        cause: gatewayError.causeDetail,\n      }),\n    ),\n    raw: null,\n  };\n}\n\nfunction resolveGatewayBaseUrl(input?: string | null) {\n  return normalizeAthenaGatewayBaseUrl(input, {\n    defaultBaseUrl: ATHENA_DEFAULT_BASE_URL,\n  });\n}\n\nfunction resolveProbePath(path?: string) {\n  if (!path) return \"/\";\n  if (!path.startsWith(\"/\")) {\n    throw new AthenaGatewayError({\n      code: \"INVALID_URL\",\n      message: `Athena gateway probe path must start with \"/\". Received ${JSON.stringify(path)}.`,\n      status: 0,\n      hint: 'Use a leading slash such as \"/\" or \"/health\".',\n    });\n  }\n  return path;\n}\n\nfunction mergeConnectionHeaders(\n  baseHeaders: Record<string, string>,\n  headers?: Record<string, string>,\n): Record<string, string> {\n  const merged = {\n    ...baseHeaders,\n    ...(headers ?? {}),\n  };\n\n  if (!merged[\"X-Athena-Sdk\"] && !merged[\"x-athena-sdk\"]) {\n    merged[\"X-Athena-Sdk\"] = SDK_HEADER_VALUE;\n  }\n\n  return merged;\n}\n\nasync function performConnectionCheck(\n  baseUrl: string,\n  requestHeaders: Record<string, string>,\n  options?: AthenaGatewayConnectionOptions,\n): Promise<AthenaGatewayConnectionResult> {\n  const path = resolveProbePath(options?.path);\n  const url = buildAthenaGatewayUrl(baseUrl, path);\n\n  try {\n    const response = await fetch(url, {\n      method: \"GET\",\n      headers: mergeConnectionHeaders(requestHeaders, options?.headers),\n      signal: options?.signal,\n    });\n    const rawText = await response.text();\n    const requestId = resolveRequestId(response.headers);\n    const parsedBody = parseResponseBody(\n      rawText ?? \"\",\n      response.headers.get(\"content-type\"),\n    );\n\n    if (parsedBody.parseFailed) {\n      const invalidJsonError = new AthenaGatewayError({\n        code: \"INVALID_JSON\",\n        message: \"Gateway probe returned malformed JSON\",\n        status: response.status,\n        method: \"GET\",\n        requestId,\n        hint: \"Verify the gateway response body is valid JSON.\",\n        cause: rawText.slice(0, 300),\n      });\n      return {\n        ok: false,\n        reachable: true,\n        status: response.status,\n        statusText: resolveStatusText(response, parsedBody.parsed),\n        baseUrl,\n        url,\n        error: invalidJsonError.message,\n        errorDetails: detailsFromError(invalidJsonError),\n        raw: parsedBody.parsed,\n      };\n    }\n\n    const parsed = parsedBody.parsed;\n    if (!response.ok) {\n      const httpError = new AthenaGatewayError({\n        code: \"HTTP_ERROR\",\n        message: resolveErrorMessage(\n          parsed,\n          `Athena gateway GET ${path} failed with status ${response.status}`,\n        ),\n        status: response.status,\n        method: \"GET\",\n        requestId,\n        hint: resolveErrorHint(parsed),\n      });\n\n      return {\n        ok: false,\n        reachable: true,\n        status: response.status,\n        statusText: resolveStatusText(response, parsed),\n        baseUrl,\n        url,\n        error: httpError.message,\n        errorDetails: detailsFromError(httpError),\n        raw: parsed,\n      };\n    }\n\n    return {\n      ok: true,\n      reachable: true,\n      status: response.status,\n      statusText: resolveStatusText(response, parsed),\n      baseUrl,\n      url,\n      error: undefined,\n      errorDetails: null,\n      raw: parsed,\n    };\n  } catch (callError) {\n    const message = callError instanceof Error ? callError.message : String(callError);\n    const networkError = new AthenaGatewayError({\n      code: \"NETWORK_ERROR\",\n      message: `Network error while probing Athena gateway ${url}: ${message}`,\n      method: \"GET\",\n      cause: message,\n      hint: \"Check gateway URL, DNS, and network reachability.\",\n    });\n    return {\n      ok: false,\n      reachable: false,\n      status: 0,\n      statusText: null,\n      baseUrl,\n      url,\n      error: networkError.message,\n      errorDetails: detailsFromError(networkError),\n      raw: null,\n    };\n  }\n}\n\nexport async function verifyAthenaGatewayUrl(\n  baseUrl: string,\n  options?: AthenaGatewayConnectionOptions,\n): Promise<AthenaGatewayConnectionResult> {\n  const normalizedBaseUrl = normalizeAthenaGatewayBaseUrl(baseUrl);\n  return performConnectionCheck(normalizedBaseUrl, { \"X-Athena-Sdk\": SDK_HEADER_VALUE }, options);\n}\n\nasync function callAthena<T>(\n  config: AthenaGatewayBaseOptions,\n  endpoint: AthenaGatewayEndpointPath,\n  method: AthenaGatewayMethod,\n  payload: unknown,\n  options?: AthenaGatewayCallOptions,\n): Promise<AthenaGatewayResponse<T>> {\n  let baseUrl: string;\n  try {\n    baseUrl = resolveGatewayBaseUrl(options?.baseUrl ?? config.baseUrl);\n  } catch (error) {\n    return toInvalidUrlResponse<T>(error, endpoint, method);\n  }\n\n  const url = buildAthenaGatewayUrl(baseUrl, endpoint);\n  const headers = buildHeaders(config, options);\n\n  try {\n    const requestInit: RequestInit = {\n      method,\n      headers,\n    };\n    if (method !== \"GET\") {\n      requestInit.body = JSON.stringify(payload);\n    }\n\n    const response = await fetch(url, requestInit);\n\n    const rawText = await response.text();\n    const requestId = resolveRequestId(response.headers);\n    const parsedBody = parseResponseBody(\n      rawText ?? \"\",\n      response.headers.get(\"content-type\"),\n    );\n\n    if (parsedBody.parseFailed) {\n      const invalidJsonError = new AthenaGatewayError({\n        code: \"INVALID_JSON\",\n        message: \"Gateway returned malformed JSON\",\n        status: response.status,\n        endpoint,\n        method,\n        requestId,\n        hint: \"Verify the gateway response body is valid JSON.\",\n        cause: rawText.slice(0, 300),\n      });\n      return {\n        ok: false,\n        status: response.status,\n        statusText: resolveStatusText(response, parsedBody.parsed),\n        data: null,\n        error: invalidJsonError.message,\n        errorDetails: detailsFromError(invalidJsonError),\n        raw: parsedBody.parsed,\n      };\n    }\n\n    const parsed = parsedBody.parsed;\n    const parsedPayload = isRecord(parsed) ? parsed : null;\n\n    if (!response.ok) {\n      const httpError = new AthenaGatewayError({\n        code: \"HTTP_ERROR\",\n        message: resolveErrorMessage(\n          parsed,\n          `Athena gateway ${method} ${endpoint} failed with status ${response.status}`,\n        ),\n        status: response.status,\n        endpoint,\n        method,\n        requestId,\n        hint: resolveErrorHint(parsed),\n      });\n\n      return {\n        ok: false,\n        status: response.status,\n        statusText: resolveStatusText(response, parsed),\n        data: null,\n        error: httpError.message,\n        errorDetails: detailsFromError(httpError),\n        raw: parsed,\n      };\n    }\n\n    // Unwrap envelope: API may return { data: [...], error: null } (e.g. when cached)\n    // vs raw array when uncached. Use inner data when present to avoid double nesting.\n    const payloadData =\n      parsedPayload && \"data\" in parsedPayload\n        ? (parsedPayload.data as T)\n        : (parsed as T);\n    const payloadCount =\n      parsedPayload && \"count\" in parsedPayload\n        ? typeof parsedPayload.count === \"number\" || parsedPayload.count === null\n          ? (parsedPayload.count as number | null)\n          : undefined\n        : undefined;\n\n    return {\n      ok: true,\n      status: response.status,\n      statusText: resolveStatusText(response, parsed),\n      data: payloadData ?? null,\n      count: payloadCount,\n      error: undefined,\n      errorDetails: null,\n      raw: parsed,\n    };\n  } catch (callError) {\n    const message = callError instanceof Error ? callError.message : String(callError);\n    const networkError = new AthenaGatewayError({\n      code: \"NETWORK_ERROR\",\n      message: `Network error while calling ${method} ${endpoint}: ${message}`,\n      endpoint,\n      method,\n      cause: message,\n      hint: \"Check gateway URL, DNS, and network reachability.\",\n    });\n    return {\n      ok: false,\n      status: 0,\n      statusText: null,\n      data: null,\n      error: networkError.message,\n      errorDetails: detailsFromError(networkError),\n      raw: null,\n    };\n  }\n}\n\nexport interface AthenaGatewayClient {\n  baseUrl: string;\n  buildHeaders(options?: AthenaGatewayCallOptions): Record<string, string>;\n  resolveCallOptions(\n    options?: AthenaGatewayCallOptions,\n  ): Promise<AthenaGatewayCallOptions | undefined>;\n  verifyConnection(\n    options?: AthenaGatewayConnectionOptions,\n  ): Promise<AthenaGatewayConnectionResult>;\n  fetchGateway<T>(\n    payload: AthenaFetchPayload | AthenaFindManyAstPayload,\n    options?: AthenaGatewayCallOptions,\n  ): Promise<AthenaGatewayResponse<T>>;\n  insertGateway<T>(\n    payload: AthenaInsertPayload,\n    options?: AthenaGatewayCallOptions,\n  ): Promise<AthenaGatewayResponse<T>>;\n  updateGateway<T>(\n    payload: AthenaUpdatePayload,\n    options?: AthenaGatewayCallOptions,\n  ): Promise<AthenaGatewayResponse<T>>;\n  deleteGateway<T>(\n    payload: AthenaDeletePayload,\n    options?: AthenaGatewayCallOptions,\n  ): Promise<AthenaGatewayResponse<T>>;\n  rpcGateway<T>(\n    payload: AthenaRpcPayload,\n    options?: AthenaRpcCallOptions,\n  ): Promise<AthenaGatewayResponse<T>>;\n  queryGateway<T>(\n    payload: AthenaQueryPayload,\n    options?: AthenaGatewayCallOptions,\n  ): Promise<AthenaGatewayResponse<T>>;\n}\n\nexport function createAthenaGatewayClient(\n  config: AthenaGatewayBaseOptions = {},\n): AthenaGatewayClient {\n  const normalizedBaseUrl = resolveGatewayBaseUrl(config.baseUrl);\n  const normalizedConfig: AthenaGatewayBaseOptions = {\n    ...config,\n    baseUrl: normalizedBaseUrl,\n  };\n\n  return {\n    baseUrl: normalizedBaseUrl,\n    buildHeaders(options) {\n      return buildHeaders(normalizedConfig, options);\n    },\n    async resolveCallOptions(options) {\n      return options;\n    },\n    verifyConnection(options) {\n      return performConnectionCheck(\n        normalizedBaseUrl,\n        buildHeaders(normalizedConfig),\n        options,\n      );\n    },\n    fetchGateway(payload, options) {\n      return callAthena(normalizedConfig, \"/gateway/fetch\", \"POST\", payload, options);\n    },\n    insertGateway(payload, options) {\n      return callAthena(normalizedConfig, \"/gateway/insert\", \"PUT\", payload, options);\n    },\n    updateGateway(payload, options) {\n      return callAthena(normalizedConfig, \"/gateway/update\", \"POST\", payload, options);\n    },\n    deleteGateway(payload, options) {\n      return callAthena(normalizedConfig, \"/gateway/delete\", \"DELETE\", payload, options);\n    },\n    rpcGateway(payload, options) {\n      if (options?.get) {\n        const endpoint = buildRpcGetEndpoint(payload);\n        return callAthena(normalizedConfig, endpoint, \"GET\", null, options);\n      }\n      return callAthena(normalizedConfig, \"/gateway/rpc\", \"POST\", payload, options);\n    },\n    queryGateway(payload, options) {\n      return callAthena(normalizedConfig, \"/gateway/query\", \"POST\", payload, options);\n    },\n  };\n}\n\ntype AthenaGatewayCallOptionsResolver = () =>\n  | AthenaGatewayCallOptions\n  | undefined\n  | Promise<AthenaGatewayCallOptions | undefined>;\n\nfunction mergeGatewayCallOptions(\n  base?: AthenaGatewayCallOptions,\n  override?: AthenaGatewayCallOptions,\n): AthenaGatewayCallOptions | undefined {\n  if (!base && !override) return undefined;\n  return {\n    ...base,\n    ...override,\n    headers:\n      base?.headers || override?.headers\n        ? { ...(base?.headers ?? {}), ...(override?.headers ?? {}) }\n        : undefined,\n  };\n}\n\n/**\n * Creates a request-context view over one immutable gateway transport.\n * The resolver runs once for every operation; the underlying transport and\n * normalized route configuration are never reconstructed.\n */\nexport function createAthenaGatewayClientView(\n  transport: AthenaGatewayClient,\n  resolveContext: AthenaGatewayCallOptionsResolver,\n): AthenaGatewayClient {\n  const resolveCallOptions = async (\n    options?: AthenaGatewayCallOptions,\n  ): Promise<AthenaGatewayCallOptions | undefined> =>\n    mergeGatewayCallOptions(await resolveContext(), options);\n\n  return {\n    baseUrl: transport.baseUrl,\n    buildHeaders(options) {\n      return transport.buildHeaders(options);\n    },\n    resolveCallOptions,\n    async verifyConnection(options) {\n      const context = await resolveCallOptions();\n      const contextHeaders = transport.buildHeaders(context);\n      return transport.verifyConnection({\n        ...options,\n        headers: {\n          ...contextHeaders,\n          ...(options?.headers ?? {}),\n        },\n      });\n    },\n    async fetchGateway(payload, options) {\n      return transport.fetchGateway(payload, await resolveCallOptions(options));\n    },\n    async insertGateway(payload, options) {\n      return transport.insertGateway(payload, await resolveCallOptions(options));\n    },\n    async updateGateway(payload, options) {\n      return transport.updateGateway(payload, await resolveCallOptions(options));\n    },\n    async deleteGateway(payload, options) {\n      return transport.deleteGateway(payload, await resolveCallOptions(options));\n    },\n    async rpcGateway(payload, options) {\n      return transport.rpcGateway(payload, await resolveCallOptions(options));\n    },\n    async queryGateway(payload, options) {\n      return transport.queryGateway(payload, await resolveCallOptions(options));\n    },\n  };\n}\n","export interface AthenaAuthAdminLimits {\n  maxAdminJsonBytes: number\n  maxAdminJsonDepth: number\n  maxTemplateVariables: number\n  maxTemplateVariableLength: number\n}\n\nexport const ATHENA_AUTH_MAX_ADMIN_JSON_BYTES = 32 * 1024\nexport const ATHENA_AUTH_MAX_ADMIN_JSON_DEPTH = 8\nexport const ATHENA_AUTH_MAX_TEMPLATE_VARIABLES = 64\nexport const ATHENA_AUTH_MAX_TEMPLATE_VARIABLE_LENGTH = 128\n\nexport const ATHENA_AUTH_ADMIN_LIMITS = {\n  maxAdminJsonBytes: ATHENA_AUTH_MAX_ADMIN_JSON_BYTES,\n  maxAdminJsonDepth: ATHENA_AUTH_MAX_ADMIN_JSON_DEPTH,\n  maxTemplateVariables: ATHENA_AUTH_MAX_TEMPLATE_VARIABLES,\n  maxTemplateVariableLength: ATHENA_AUTH_MAX_TEMPLATE_VARIABLE_LENGTH,\n} as const satisfies AthenaAuthAdminLimits\n\nfunction describeTemplateVariableTarget(target?: string) {\n  const normalized = target?.trim()\n  return normalized && normalized.length > 0\n    ? normalized\n    : 'Athena auth admin email template variables'\n}\n\nexport function assertAthenaAuthTemplateVariables(\n  variables: unknown,\n  target?: string,\n): asserts variables is string[] {\n  const label = describeTemplateVariableTarget(target)\n  if (!Array.isArray(variables)) {\n    throw new Error(`${label} must be an array of strings.`)\n  }\n\n  if (variables.length > ATHENA_AUTH_MAX_TEMPLATE_VARIABLES) {\n    throw new Error(\n      `${label} cannot contain more than ${ATHENA_AUTH_MAX_TEMPLATE_VARIABLES} entries.`,\n    )\n  }\n\n  variables.forEach((variable, index) => {\n    if (typeof variable !== 'string') {\n      throw new Error(\n        `${label} must contain only strings. Received ${typeof variable} at index ${index}.`,\n      )\n    }\n\n    if (variable.length > ATHENA_AUTH_MAX_TEMPLATE_VARIABLE_LENGTH) {\n      throw new Error(\n        `${label} cannot contain entries longer than ${ATHENA_AUTH_MAX_TEMPLATE_VARIABLE_LENGTH} characters. Received ${variable.length} characters at index ${index}.`,\n      )\n    }\n  })\n}\n","import type {\n  AthenaAuthEmailTemplateBuilder,\n  AthenaAuthEmailTemplateCreateFromDefinitionInput,\n  AthenaAuthEmailTemplateDefinition,\n  AthenaAuthEmailTemplateUpdateFromDefinitionInput,\n  AthenaAuthLooseRecord,\n  AthenaAuthReactEmailComponent,\n  AthenaAuthReactEmailConfig,\n  AthenaAuthReactEmailEventPhase,\n  AthenaAuthReactEmailProps,\n  AthenaAuthReactEmailRenderEvent,\n  AthenaAuthReactEmailRenderInput,\n  AthenaAuthReactEmailRenderOptions,\n} from './types.ts'\n\ntype ReactEmailRenderModule = {\n  render: (element: unknown) => string | Promise<string>\n  toPlainText?: (html: string) => string | Promise<string>\n  pretty?: (html: string) => string | Promise<string>\n}\n\nexport interface AthenaAuthRenderedReactEmail {\n  html: string\n  text?: string\n}\n\nexport interface AthenaAuthReactEmailPayload {\n  react?: AthenaAuthReactEmailRenderInput\n}\n\nexport interface AthenaAuthReactEmailRuntimeOptions {\n  route?: string\n  defaults?: AthenaAuthReactEmailRenderOptions\n  observe?: (event: AthenaAuthReactEmailRenderEvent) => void\n}\n\ninterface ResolvePayloadFieldsInput {\n  htmlField: string\n  textField: string\n  variablesField?: string\n}\n\nlet reactEmailRenderModulePromise: Promise<ReactEmailRenderModule> | undefined\n\nfunction isRecord(value: unknown): value is AthenaAuthLooseRecord {\n  return Boolean(value) && typeof value === 'object' && !Array.isArray(value)\n}\n\nfunction isFunction(value: unknown): value is (...args: unknown[]) => unknown {\n  return typeof value === 'function'\n}\n\nfunction toStringOrUndefined(value: unknown): string | undefined {\n  if (typeof value !== 'string') return undefined\n  return value\n}\n\nfunction nowIsoString() {\n  return new Date().toISOString()\n}\n\nfunction emitReactEmailEvent(\n  observe: ((event: AthenaAuthReactEmailRenderEvent) => void) | undefined,\n  phase: AthenaAuthReactEmailEventPhase,\n  input: Omit<AthenaAuthReactEmailRenderEvent, 'phase' | 'timestamp'> = {},\n) {\n  if (!observe) return\n  try {\n    observe({\n      phase,\n      timestamp: nowIsoString(),\n      ...input,\n    })\n  } catch {\n    // Observability hooks are non-blocking.\n  }\n}\n\nfunction mergeRenderDefaults(\n  input: AthenaAuthReactEmailRenderInput,\n  defaults?: AthenaAuthReactEmailRenderOptions,\n): AthenaAuthReactEmailRenderInput {\n  return {\n    ...input,\n    pretty: input.pretty ?? defaults?.pretty,\n    includePlainText: input.includePlainText ?? defaults?.includePlainText,\n  }\n}\n\nfunction mergeRuntimeOptions(\n  options?: AthenaAuthReactEmailRuntimeOptions | AthenaAuthReactEmailConfig,\n): AthenaAuthReactEmailRuntimeOptions | undefined {\n  if (!options) return undefined\n  return {\n    defaults: options.defaults,\n    observe: options.observe,\n    route: 'route' in options ? options.route : undefined,\n  }\n}\n\nasync function resolveReactEmailRenderModule(): Promise<ReactEmailRenderModule> {\n  if (!reactEmailRenderModulePromise) {\n    reactEmailRenderModulePromise = (async () => {\n      try {\n        const loaded = await import('@react-email/render')\n        if (!isFunction(loaded.render)) {\n          throw new Error('missing render(...) export')\n        }\n        return {\n          render: loaded.render as ReactEmailRenderModule['render'],\n          toPlainText: isFunction(loaded.toPlainText)\n            ? (loaded.toPlainText as ReactEmailRenderModule['toPlainText'])\n            : undefined,\n          pretty: isFunction(loaded.pretty)\n            ? (loaded.pretty as ReactEmailRenderModule['pretty'])\n            : undefined,\n        }\n      } catch (error) {\n        const message = error instanceof Error ? error.message : String(error)\n        throw new Error(\n          `React Email rendering requires @react-email/render. Install it in your project (for example: pnpm add @react-email/render). Loader error: ${message}`,\n        )\n      }\n    })()\n  }\n\n  if (!reactEmailRenderModulePromise) {\n    throw new Error('React Email renderer module failed to initialize')\n  }\n\n  return reactEmailRenderModulePromise\n}\n\nasync function resolveReactEmailElement(input: AthenaAuthReactEmailRenderInput): Promise<unknown> {\n  if (input.element != null) {\n    return input.element\n  }\n  if (!input.component) {\n    throw new Error('react email payload requires either `element` or `component`')\n  }\n\n  try {\n    const reactModule = await import('react')\n    if (typeof reactModule.createElement !== 'function') {\n      throw new Error('react createElement(...) export is unavailable')\n    }\n    return reactModule.createElement(\n      input.component as Parameters<typeof reactModule.createElement>[0],\n      input.props ?? {},\n    )\n  } catch (error) {\n    const message = error instanceof Error ? error.message : String(error)\n    throw new Error(\n      `React Email component rendering requires react runtime support. Install react in your project. Loader error: ${message}`,\n    )\n  }\n}\n\nexport function createAuthReactEmailInput<\n  TProps extends AthenaAuthReactEmailProps = AthenaAuthReactEmailProps,\n>(\n  component: AthenaAuthReactEmailComponent<TProps>,\n  props: TProps,\n  overrides: Omit<AthenaAuthReactEmailRenderInput, 'component' | 'props' | 'element'> = {},\n): AthenaAuthReactEmailRenderInput {\n  return {\n    ...overrides,\n    component: component as AthenaAuthReactEmailComponent,\n    props,\n  }\n}\n\nexport function defineAuthEmailTemplate<\n  TProps extends AthenaAuthReactEmailProps = AthenaAuthReactEmailProps,\n>(\n  definition: AthenaAuthEmailTemplateDefinition<TProps>,\n): AthenaAuthEmailTemplateBuilder<TProps> {\n  const react: AthenaAuthEmailTemplateBuilder<TProps>['react'] = (props, overrides) =>\n    createAuthReactEmailInput(definition.component, props, {\n      ...definition.defaults,\n      ...overrides,\n    })\n\n  return {\n    component: definition.component,\n    react,\n    toTemplateCreate: (input: AthenaAuthEmailTemplateCreateFromDefinitionInput<TProps>) => {\n      const templateKey = input.templateKey ?? definition.templateKey\n      const subjectTemplate = input.subjectTemplate ?? definition.subjectTemplate\n      if (!templateKey) {\n        throw new Error('defineAuthEmailTemplate.toTemplateCreate requires templateKey')\n      }\n      if (!subjectTemplate) {\n        throw new Error('defineAuthEmailTemplate.toTemplateCreate requires subjectTemplate')\n      }\n\n      const { props, react: reactOverrides, ...rest } = input\n      return {\n        ...rest,\n        templateKey,\n        subjectTemplate,\n        react: react(props, reactOverrides),\n      }\n    },\n    toTemplateUpdate: (input: AthenaAuthEmailTemplateUpdateFromDefinitionInput<TProps>) => {\n      const { props, react: reactOverrides, ...rest } = input\n      return {\n        ...rest,\n        react: react(props, reactOverrides),\n      }\n    },\n  }\n}\n\nexport async function renderAthenaReactEmail(\n  input: AthenaAuthReactEmailRenderInput,\n  options?: AthenaAuthReactEmailRuntimeOptions | AthenaAuthReactEmailConfig,\n): Promise<AthenaAuthRenderedReactEmail> {\n  if (!isRecord(input)) {\n    throw new Error('react email payload must be an object')\n  }\n\n  const runtimeOptions = mergeRuntimeOptions(options)\n  const start = Date.now()\n  emitReactEmailEvent(runtimeOptions?.observe, 'render:start', {\n    route: runtimeOptions?.route,\n    message: 'Rendering react email payload',\n  })\n\n  try {\n    const normalizedInput = mergeRenderDefaults(input, runtimeOptions?.defaults)\n    const element = await resolveReactEmailElement(normalizedInput)\n    const renderModule = await resolveReactEmailRenderModule()\n    const htmlValue = await renderModule.render(element)\n    const renderedHtml = typeof htmlValue === 'string' ? htmlValue : String(htmlValue ?? '')\n    if (!renderedHtml.trim()) {\n      throw new Error('react email renderer returned an empty HTML string')\n    }\n\n    let html = renderedHtml\n    if (normalizedInput.pretty && renderModule.pretty) {\n      const prettyValue = await renderModule.pretty(renderedHtml)\n      if (typeof prettyValue === 'string' && prettyValue.trim().length > 0) {\n        html = prettyValue\n      }\n    }\n\n    const explicitText = toStringOrUndefined(normalizedInput.text)\n    if (explicitText !== undefined) {\n      emitReactEmailEvent(runtimeOptions?.observe, 'render:success', {\n        route: runtimeOptions?.route,\n        durationMs: Date.now() - start,\n        message: 'Rendered react email with explicit text',\n      })\n      return {\n        html,\n        text: explicitText,\n      }\n    }\n\n    if (normalizedInput.includePlainText === false || !renderModule.toPlainText) {\n      emitReactEmailEvent(runtimeOptions?.observe, 'render:success', {\n        route: runtimeOptions?.route,\n        durationMs: Date.now() - start,\n        message: 'Rendered react email without plain-text derivation',\n      })\n      return { html }\n    }\n\n    const plainTextValue = await renderModule.toPlainText(html)\n    const plainText = toStringOrUndefined(plainTextValue)\n    emitReactEmailEvent(runtimeOptions?.observe, 'render:success', {\n      route: runtimeOptions?.route,\n      durationMs: Date.now() - start,\n      message: plainText ? 'Rendered react email with derived plain text' : 'Rendered react email HTML only',\n    })\n    if (plainText === undefined) {\n      return { html }\n    }\n\n    return {\n      html,\n      text: plainText,\n    }\n  } catch (error) {\n    const message = error instanceof Error ? error.message : String(error)\n    emitReactEmailEvent(runtimeOptions?.observe, 'render:error', {\n      route: runtimeOptions?.route,\n      durationMs: Date.now() - start,\n      error: message,\n      message: 'Failed to render react email payload',\n    })\n    throw error\n  }\n}\n\nexport async function resolveReactEmailPayloadFields<\n  TInput extends AthenaAuthReactEmailPayload,\n>(\n  input: TInput,\n  fields: ResolvePayloadFieldsInput,\n  options?: AthenaAuthReactEmailRuntimeOptions | AthenaAuthReactEmailConfig,\n): Promise<Omit<TInput, 'react'>> {\n  const { react, ...payloadWithoutReact } = input\n  if (!react) {\n    return payloadWithoutReact as Omit<TInput, 'react'>\n  }\n\n  const rendered = await renderAthenaReactEmail(react, options)\n  const payload: AthenaAuthLooseRecord = {\n    ...(payloadWithoutReact as AthenaAuthLooseRecord),\n  }\n\n  payload[fields.htmlField] = rendered.html\n\n  const currentTextValue = payload[fields.textField]\n  if (\n    rendered.text !== undefined &&\n    (currentTextValue === undefined || currentTextValue === null || currentTextValue === '')\n  ) {\n    payload[fields.textField] = rendered.text\n  }\n\n  if (\n    fields.variablesField &&\n    (payload[fields.variablesField] === undefined || payload[fields.variablesField] === null) &&\n    isRecord(react.props)\n  ) {\n    const derivedVariables = Object.keys(react.props)\n    if (derivedVariables.length > 0) {\n      payload[fields.variablesField] = derivedVariables\n    }\n  }\n\n  return payload as Omit<TInput, 'react'>\n}\n","import type {\n  AthenaAdminHasPermissionRequest,\n  AthenaAdminRevokeUserSessionRequest,\n  AthenaAdminRevokeUserSessionsRequest,\n  AthenaAdminSuccessResponse,\n  AthenaAdminHasPermissionResponse,\n  AthenaApiKeyDeleteAllExpiredResponse,\n  AthenaAuthCallOptions,\n  AthenaAuthClientConfig,\n  AthenaAuthEndpointPath,\n  AthenaAuthErrorCode,\n  AthenaAuthErrorDetails,\n  AthenaAuthFetchCompatibleInput,\n  AthenaAuthGetUserResponse,\n  AthenaAuthGenericInput,\n  AthenaAuthGenericQueryInput,\n  AthenaAuthBindings,\n  AthenaAuthEmailListQuery,\n  AthenaAuthEmailListResponse,\n  AthenaAuthGuardResult,\n  AthenaAuthHealthResponse,\n  AthenaAuthOkResponse,\n  AthenaAuthLinkedAccount,\n  AthenaAuthOrganizationBindings,\n  AthenaAuthOrganization,\n  AthenaAuthOrganizationCheckSlugRequest,\n  AthenaAuthOrganizationCreateRequest,\n  AthenaAuthOrganizationDeleteRequest,\n  AthenaAuthOrganizationGetFullQuery,\n  AthenaAuthOrganizationGetInvitationQuery,\n  AthenaAuthOrganizationInvitation,\n  AthenaAuthOrganizationInvitationActionRequest,\n  AthenaAuthOrganizationInviteMemberRequest,\n  AthenaAuthOrganizationLeaveRequest,\n  AthenaAuthOrganizationListInvitationsQuery,\n  AthenaAuthOrganizationListMembersQuery,\n  AthenaAuthOrganizationListUserInvitationsQuery,\n  AthenaAuthOrganizationMember,\n  AthenaAuthOrganizationRemoveMemberRequest,\n  AthenaAuthOrganizationSetActiveRequest,\n  AthenaAuthOrganizationUpdateMemberRoleRequest,\n  AthenaAuthOrganizationUpdateRequest,\n  AthenaAuthMethod,\n  AthenaAuthQueryValue,\n  AthenaAuthRequestInput,\n  AthenaAuthReactEmailRenderInput,\n  AthenaAuthResult,\n  InternalAthenaAuthModule,\n  AthenaAuthSession,\n  AthenaAuthSessionResponse,\n  AthenaAuthSignInResponse,\n  AthenaAuthSignOutResponse,\n  AthenaAuthSocialRedirectResponse,\n  AthenaAuthStatusResponse,\n  AthenaAuthUser,\n  AthenaChangeEmailRequest,\n  AthenaChangePasswordRequest,\n  AthenaDeleteUserCallbackRequest,\n  AthenaDeleteUserRequest,\n  AthenaDeleteUserResponse,\n  AthenaEmailSignInRequest,\n  AthenaEmailSignUpRequest,\n  AthenaForgetPasswordRequest,\n  AthenaLinkSocialRequest,\n  AthenaOAuthAccountTokenRequest,\n  AthenaOAuthTokenBundle,\n  AthenaResetPasswordRequest,\n  AthenaSendVerificationEmailRequest,\n  AthenaSocialSignInRequest,\n  AthenaTwoFactorGenerateBackupCodesRequest,\n  AthenaTwoFactorGenerateBackupCodesResponse,\n  AthenaUnlinkAccountRequest,\n  AthenaUpdateUserRequest,\n  AthenaVerifyEmailRequest,\n  AthenaUsernameSignInRequest,\n} from './types.ts'\nimport { assertAthenaAuthTemplateVariables } from './limits.ts'\nimport { resolveReactEmailPayloadFields } from './react-email.ts'\nimport { buildSdkHeaderValue } from '../sdk-version.ts'\nimport { buildServiceRequestHeaders } from '../utils/athena-request-headers.ts'\n\nconst DEFAULT_AUTH_BASE_URL = 'http://localhost:3001/api/auth'\nconst SDK_NAME = 'xylex-group/athena-auth'\nconst SDK_HEADER_VALUE = buildSdkHeaderValue(SDK_NAME)\n\ntype AuthRequestContext = {\n  endpoint: AthenaAuthEndpointPath\n  method: AthenaAuthMethod\n}\n\nexport interface InternalAuthModuleRuntimeOptions {\n  resolveCallOptions?: () =>\n    | AthenaAuthCallOptions\n    | undefined\n    | Promise<AthenaAuthCallOptions | undefined>\n}\n\ntype InternalErrorInput = AuthRequestContext & {\n  code: AthenaAuthErrorCode\n  status: number\n  message: string\n  requestId?: string\n  hint?: string\n  cause?: string\n}\n\nfunction normalizeBaseUrl(baseUrl?: string): string {\n  return (baseUrl ?? DEFAULT_AUTH_BASE_URL).replace(/\\/$/, '')\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return Boolean(value) && typeof value === 'object' && !Array.isArray(value)\n}\n\nfunction parseResponseBody(rawText: string, contentType: string | null) {\n  if (!rawText) {\n    return { parsed: null as unknown, parseFailed: false }\n  }\n\n  const contentTypeSuggestsJson =\n    contentType?.toLowerCase().includes('application/json') ?? false\n  const looksJson =\n    contentTypeSuggestsJson || rawText.startsWith('{') || rawText.startsWith('[')\n\n  if (!looksJson) {\n    return { parsed: rawText as unknown, parseFailed: false }\n  }\n\n  try {\n    return { parsed: JSON.parse(rawText) as unknown, parseFailed: false }\n  } catch {\n    return { parsed: rawText as unknown, parseFailed: true }\n  }\n}\n\nfunction resolveRequestId(headers: Headers): string | undefined {\n  return (\n    headers.get('x-request-id') ??\n    headers.get('x-correlation-id') ??\n    headers.get('x-athena-request-id') ??\n    undefined\n  )\n}\n\nfunction resolveErrorMessage(payload: unknown, fallback: string) {\n  if (isRecord(payload)) {\n    const messageCandidates = [payload.error, payload.message, payload.details]\n    for (const candidate of messageCandidates) {\n      if (typeof candidate === 'string' && candidate.trim().length > 0) {\n        return candidate.trim()\n      }\n    }\n  }\n\n  if (typeof payload === 'string' && payload.trim().length > 0) {\n    return payload.trim()\n  }\n\n  return fallback\n}\n\nfunction toErrorDetails(input: InternalErrorInput): AthenaAuthErrorDetails {\n  return {\n    code: input.code,\n    message: input.message,\n    status: input.status,\n    endpoint: input.endpoint,\n    method: input.method,\n    requestId: input.requestId,\n    hint: input.hint,\n    cause: input.cause,\n  }\n}\n\nfunction mergeCallOptions(\n  base?: AthenaAuthCallOptions,\n  override?: AthenaAuthCallOptions,\n): AthenaAuthCallOptions | undefined {\n  if (!base && !override) return undefined\n  return {\n    ...base,\n    ...override,\n    headers: {\n      ...(base?.headers ?? {}),\n      ...(override?.headers ?? {}),\n    },\n  }\n}\n\nfunction copyDefinedField(\n  target: Record<string, unknown>,\n  source: Record<string, unknown>,\n  targetKey: string,\n  sourceKey: string,\n): void {\n  if (!(sourceKey in source)) {\n    return\n  }\n  const value = source[sourceKey]\n  if (value !== undefined) {\n    target[targetKey] = value\n  }\n}\n\nfunction normalizeEmailTemplateAttachmentsValue(value: unknown): unknown {\n  if (typeof value === 'string' || value == null) {\n    return value\n  }\n\n  if (Array.isArray(value)) {\n    return value.map(item => normalizeEmailTemplateAttachmentsValue(item))\n  }\n\n  if (typeof value !== 'object') {\n    return value\n  }\n\n  const attachment = { ...(value as Record<string, unknown>) }\n  copyDefinedField(attachment, attachment, 'file_url', 'fileUrl')\n  delete attachment.fileUrl\n  return attachment\n}\n\nfunction normalizeAdminEmailTemplatePayload(payload: Record<string, unknown>): Record<string, unknown> {\n  const normalized = { ...payload }\n\n  copyDefinedField(normalized, payload, 'template_key', 'templateKey')\n  copyDefinedField(normalized, payload, 'event_type', 'eventType')\n  copyDefinedField(normalized, payload, 'subject_template', 'subjectTemplate')\n  copyDefinedField(normalized, payload, 'text_template', 'textTemplate')\n  copyDefinedField(normalized, payload, 'html_template', 'htmlTemplate')\n  copyDefinedField(normalized, payload, 'variable_bindings', 'variableBindings')\n  copyDefinedField(normalized, payload, 'attachment_failure_mode', 'attachmentFailureMode')\n  copyDefinedField(normalized, payload, 'is_active', 'isActive')\n\n  if (Object.hasOwn(payload, 'attachments')) {\n    normalized.attachments = normalizeEmailTemplateAttachmentsValue(payload.attachments)\n  }\n\n  delete normalized.templateKey\n  delete normalized.eventType\n  delete normalized.subjectTemplate\n  delete normalized.textTemplate\n  delete normalized.htmlTemplate\n  delete normalized.variableBindings\n  delete normalized.attachmentFailureMode\n  delete normalized.isActive\n\n  return normalized\n}\n\nfunction toReactEmailTemplateCompatibilityInput<TInput extends AthenaAuthFetchCompatibleInput & {\n  react?: AthenaAuthReactEmailRenderInput\n}>(input: TInput): TInput {\n  const payload = input as Record<string, unknown>\n  const compatibility = { ...payload }\n\n  copyDefinedField(compatibility, payload, 'templateKey', 'template_key')\n  copyDefinedField(compatibility, payload, 'eventType', 'event_type')\n  copyDefinedField(compatibility, payload, 'subjectTemplate', 'subject_template')\n  copyDefinedField(compatibility, payload, 'textTemplate', 'text_template')\n  copyDefinedField(compatibility, payload, 'htmlTemplate', 'html_template')\n  copyDefinedField(compatibility, payload, 'variableBindings', 'variable_bindings')\n  copyDefinedField(compatibility, payload, 'attachmentFailureMode', 'attachment_failure_mode')\n  copyDefinedField(compatibility, payload, 'isActive', 'is_active')\n\n  return compatibility as unknown as TInput\n}\n\nfunction normalizeAdminEmailTemplateSendPayload(payload: Record<string, unknown>): Record<string, unknown> {\n  const normalized = { ...payload }\n\n  copyDefinedField(normalized, payload, 'template_id', 'templateId')\n  copyDefinedField(normalized, payload, 'recipient_email', 'recipientEmail')\n  copyDefinedField(normalized, payload, 'render_variables', 'renderVariables')\n  copyDefinedField(normalized, payload, 'user_id', 'userId')\n  copyDefinedField(normalized, payload, 'organization_id', 'organizationId')\n  copyDefinedField(normalized, payload, 'session_token', 'sessionToken')\n  copyDefinedField(normalized, payload, 'attachment_failure_mode', 'attachmentFailureMode')\n\n  if (Object.hasOwn(payload, 'attachments')) {\n    normalized.attachments = normalizeEmailTemplateAttachmentsValue(payload.attachments)\n  }\n\n  delete normalized.templateId\n  delete normalized.recipientEmail\n  delete normalized.renderVariables\n  delete normalized.userId\n  delete normalized.organizationId\n  delete normalized.sessionToken\n  delete normalized.attachmentFailureMode\n\n  return normalized\n}\n\nfunction toSessionGuardFailure(\n  sessionResult: AthenaAuthResult<AthenaAuthSessionResponse>,\n): AthenaAuthGuardResult {\n  if (sessionResult.status === 401 || sessionResult.data == null) {\n    return {\n      ok: false,\n      reason: 'unauthorized',\n      status: 401,\n      error: sessionResult.error ?? 'Unauthorized',\n      sessionResult,\n    }\n  }\n\n  return {\n    ok: false,\n    reason: 'upstream_error',\n    status: sessionResult.status,\n    error: sessionResult.error ?? 'Failed to resolve current session',\n    sessionResult,\n  }\n}\n\nfunction toPermissionGuardFailure(\n  permissionResult: AthenaAuthResult<AthenaAdminHasPermissionResponse>,\n  sessionResult: AthenaAuthResult<AthenaAuthSessionResponse>,\n): AthenaAuthGuardResult {\n  if (permissionResult.status === 401) {\n    return {\n      ok: false,\n      reason: 'unauthorized',\n      status: 401,\n      error: permissionResult.error ?? 'Unauthorized',\n      sessionResult,\n      permissionResult,\n    }\n  }\n\n  if (permissionResult.status === 403) {\n    return {\n      ok: false,\n      reason: 'forbidden',\n      status: 403,\n      error: permissionResult.error ?? 'Forbidden',\n      sessionResult,\n      permissionResult,\n    }\n  }\n\n  return {\n    ok: false,\n    reason: 'upstream_error',\n    status: permissionResult.status,\n    error: permissionResult.error ?? 'Failed to resolve permission check',\n    sessionResult,\n    permissionResult,\n  }\n}\n\nfunction extractFetchOptions<T extends AthenaAuthFetchCompatibleInput | undefined>(input: T) {\n  if (!input) {\n    return {\n      payload: undefined,\n      fetchOptions: undefined,\n    }\n  }\n\n  const { fetchOptions, ...rest } = input\n  const hasPayloadKeys = Object.keys(rest).length > 0\n  return {\n    payload: hasPayloadKeys ? rest : undefined,\n    fetchOptions,\n  }\n}\n\nfunction buildHeaders(\n  config: AthenaAuthClientConfig,\n  options?: AthenaAuthCallOptions,\n): Record<string, string> {\n  return buildServiceRequestHeaders('auth', SDK_HEADER_VALUE, config, options)\n}\n\nfunction appendQueryParam(searchParams: URLSearchParams, key: string, value: AthenaAuthQueryValue) {\n  if (value === undefined || value === null) return\n  if (Array.isArray(value)) {\n    value.forEach(item => {\n      searchParams.append(key, String(item))\n    })\n    return\n  }\n  searchParams.append(key, String(value))\n}\n\nfunction buildRequestUrl(\n  baseUrl: string,\n  endpoint: AthenaAuthEndpointPath,\n  query?: Record<string, AthenaAuthQueryValue>,\n) {\n  const url = `${baseUrl}${endpoint}`\n  if (!query || Object.keys(query).length === 0) return url\n  const searchParams = new URLSearchParams()\n  Object.entries(query).forEach(([key, value]) => appendQueryParam(searchParams, key, value))\n  const queryText = searchParams.toString()\n  return queryText ? `${url}?${queryText}` : url\n}\n\nfunction inferDefaultMethod(endpoint: AthenaAuthEndpointPath): AthenaAuthMethod {\n  if (endpoint.startsWith('/reset-password/')) {\n    return 'GET'\n  }\n\n  switch (endpoint) {\n    case '/get-session':\n    case '/list-sessions':\n    case '/verify-email':\n    case '/change-email/verify':\n    case '/delete-user/verify':\n    case '/email-list':\n    case '/email/list':\n    case '/delete-user/callback':\n    case '/list-accounts':\n    case '/passkey/generate-register-options':\n    case '/passkey/list-user-passkeys':\n    case '/.well-known/webauthn':\n    case '/admin/list-users':\n    case '/admin/athena-client/list':\n    case '/admin/audit-log/list':\n    case '/admin/email/get':\n    case '/admin/email-failure/list':\n    case '/admin/email-failure/get':\n    case '/admin/email-template/get':\n    case '/admin/email-template/list':\n    case '/admin/email/list':\n    case '/api-key/get':\n    case '/api-key/list':\n    case '/organization/get-full-organization':\n    case '/organization/list':\n    case '/organization/get-invitation':\n    case '/organization/list-invitations':\n    case '/organization/list-user-invitations':\n    case '/organization/list-members':\n    case '/organization/get-active-member':\n    case '/health':\n    case '/ok':\n    case '/error':\n      return 'GET'\n    default:\n      return 'POST'\n  }\n}\n\nasync function callAuthEndpoint<T>(\n  config: AthenaAuthClientConfig,\n  context: AuthRequestContext,\n  body?: unknown,\n  query?: Record<string, AthenaAuthQueryValue>,\n  options?: AthenaAuthCallOptions,\n): Promise<AthenaAuthResult<T>> {\n  const baseUrl = normalizeBaseUrl(options?.baseUrl ?? config.baseUrl)\n  const url = buildRequestUrl(baseUrl, context.endpoint, query)\n  const headers = buildHeaders(config, options)\n  const credentials = options?.credentials ?? config.credentials ?? 'include'\n  const requestInit: RequestInit = {\n    method: context.method,\n    headers,\n    credentials,\n    signal: options?.signal,\n  }\n\n  if (context.method !== 'GET') {\n    requestInit.body = JSON.stringify(body ?? {})\n  }\n\n  const fetcher = config.fetch ?? globalThis.fetch\n  if (!fetcher) {\n    const details = toErrorDetails({\n      code: 'UNKNOWN_ERROR',\n      message: 'No fetch implementation available for auth client',\n      status: 0,\n      endpoint: context.endpoint,\n      method: context.method,\n      hint: 'Use Node 18+ or provide `fetch` through createClient({ auth: { fetch } })',\n    })\n    return {\n      ok: false,\n      status: 0,\n      data: null,\n      error: details.message,\n      errorDetails: details,\n      raw: null,\n    }\n  }\n\n  try {\n    const response = await fetcher(url, requestInit)\n    const rawText = await response.text()\n    const requestId = resolveRequestId(response.headers)\n    const parsedBody = parseResponseBody(rawText ?? '', response.headers.get('content-type'))\n\n    if (parsedBody.parseFailed) {\n      const details = toErrorDetails({\n        code: 'INVALID_JSON',\n        message: 'Auth server returned malformed JSON',\n        status: response.status,\n        endpoint: context.endpoint,\n        method: context.method,\n        requestId,\n        hint: 'Verify the auth endpoint response body is valid JSON.',\n        cause: rawText.slice(0, 300),\n      })\n      return {\n        ok: false,\n        status: response.status,\n        data: null,\n        error: details.message,\n        errorDetails: details,\n        raw: parsedBody.parsed,\n      }\n    }\n\n    const parsed = parsedBody.parsed\n\n    if (!response.ok) {\n      const details = toErrorDetails({\n        code: 'HTTP_ERROR',\n        message: resolveErrorMessage(\n          parsed,\n          `Auth endpoint ${context.method} ${context.endpoint} failed with status ${response.status}`,\n        ),\n        status: response.status,\n        endpoint: context.endpoint,\n        method: context.method,\n        requestId,\n      })\n      return {\n        ok: false,\n        status: response.status,\n        data: null,\n        error: details.message,\n        errorDetails: details,\n        raw: parsed,\n      }\n    }\n\n    return {\n      ok: true,\n      status: response.status,\n      data: (parsed as T) ?? null,\n      error: null,\n      errorDetails: null,\n      raw: parsed,\n    }\n  } catch (callError) {\n    const message = callError instanceof Error ? callError.message : String(callError)\n    const details = toErrorDetails({\n      code: 'NETWORK_ERROR',\n      message: `Network error while calling ${context.method} ${context.endpoint}: ${message}`,\n      status: 0,\n      endpoint: context.endpoint,\n      method: context.method,\n      cause: message,\n      hint: 'Check auth server URL, DNS, and network reachability.',\n    })\n    return {\n      ok: false,\n      status: 0,\n      data: null,\n      error: details.message,\n      errorDetails: details,\n      raw: null,\n    }\n  }\n}\n\nfunction executePostWithCompatibleInput<TPayload extends AthenaAuthFetchCompatibleInput, TResult>(\n  config: AthenaAuthClientConfig,\n  context: AuthRequestContext,\n  input: TPayload,\n  options?: AthenaAuthCallOptions,\n) {\n  const { payload, fetchOptions } = extractFetchOptions(input)\n  const mergedOptions = mergeCallOptions(fetchOptions, options)\n  return callAuthEndpoint<TResult>(config, context, payload ?? {}, undefined, mergedOptions)\n}\n\nfunction executePostWithOptionalInput<TResult>(\n  config: AthenaAuthClientConfig,\n  context: AuthRequestContext,\n  input?: AthenaAuthFetchCompatibleInput,\n  options?: AthenaAuthCallOptions,\n) {\n  const { fetchOptions } = extractFetchOptions(input)\n  const mergedOptions = mergeCallOptions(fetchOptions, options)\n  return callAuthEndpoint<TResult>(config, context, {}, undefined, mergedOptions)\n}\n\nfunction executeGetWithCompatibleInput<TResult>(\n  config: AthenaAuthClientConfig,\n  context: AuthRequestContext,\n  input?: AthenaAuthFetchCompatibleInput,\n  options?: AthenaAuthCallOptions,\n) {\n  const { fetchOptions } = extractFetchOptions(input)\n  const mergedOptions = mergeCallOptions(fetchOptions, options)\n  return callAuthEndpoint<TResult>(config, context, undefined, undefined, mergedOptions)\n}\n\nfunction executeGetWithQueryCompatibleInput<\n  TQuery extends object,\n  TResult,\n>(\n  config: AthenaAuthClientConfig,\n  context: AuthRequestContext,\n  input?: { query?: TQuery } & AthenaAuthFetchCompatibleInput,\n  options?: AthenaAuthCallOptions,\n) {\n  const { payload, fetchOptions } = extractFetchOptions(input)\n  const mergedOptions = mergeCallOptions(fetchOptions, options)\n  const query = (payload as { query?: Record<string, AthenaAuthQueryValue> } | undefined)?.query\n  return callAuthEndpoint<TResult>(\n    config,\n    context,\n    undefined,\n    query,\n    mergedOptions,\n  )\n}\n\n/**\n * Internal auth-module assembly used by the root client factory.\n */\nexport function createAuthModule(\n  config: AthenaAuthClientConfig = {},\n  runtimeOptions: InternalAuthModuleRuntimeOptions = {},\n): InternalAthenaAuthModule {\n  const normalizedBaseUrl = normalizeBaseUrl(config.baseUrl)\n  const resolvedConfig: AthenaAuthClientConfig = {\n    ...config,\n    baseUrl: normalizedBaseUrl,\n  }\n\n  const request = async <T = unknown>(\n    input: AthenaAuthRequestInput,\n    options?: AthenaAuthCallOptions,\n  ): Promise<AthenaAuthResult<T>> => {\n    const method = input.method ?? (input.body !== undefined ? 'POST' : inferDefaultMethod(input.endpoint))\n    const contextOptions = await runtimeOptions.resolveCallOptions?.()\n    const mergedOptions = mergeCallOptions(\n      mergeCallOptions(contextOptions, input.fetchOptions),\n      options,\n    )\n    return await callAuthEndpoint<T>(\n      resolvedConfig,\n      { endpoint: input.endpoint, method },\n      input.body,\n      input.query,\n      mergedOptions,\n    )\n  }\n\n  const postGeneric = <T = unknown>(\n    endpoint: AthenaAuthEndpointPath,\n    input?: (AthenaAuthFetchCompatibleInput & object),\n    options?: AthenaAuthCallOptions,\n  ) => {\n    const { payload, fetchOptions } = extractFetchOptions(input)\n    return request<T>(\n      {\n        endpoint,\n        method: 'POST',\n        body: payload ?? {},\n        fetchOptions,\n      },\n      options,\n    )\n  }\n\n  const getGeneric = <T = unknown>(\n    endpoint: AthenaAuthEndpointPath,\n    input?: AthenaAuthFetchCompatibleInput,\n    options?: AthenaAuthCallOptions,\n  ) => {\n    const { fetchOptions } = extractFetchOptions(input)\n    return request<T>(\n      {\n        endpoint,\n        method: 'GET',\n        fetchOptions,\n      },\n      options,\n    )\n  }\n\n  const getWithQuery = <\n    T = unknown,\n    TQuery extends object = Record<string, AthenaAuthQueryValue>,\n  >(\n    endpoint: AthenaAuthEndpointPath,\n    input?: AthenaAuthFetchCompatibleInput & {\n      query?: TQuery\n    },\n    options?: AthenaAuthCallOptions,\n  ) => {\n    const { payload, fetchOptions } = extractFetchOptions(input)\n    const query = (payload as { query?: TQuery } | undefined)?.query as\n      | Record<string, AthenaAuthQueryValue>\n      | undefined\n    return request<T>(\n      {\n        endpoint,\n        method: 'GET',\n        query,\n        fetchOptions,\n      },\n      options,\n    )\n  }\n\n  const withReactEmailRoute = (route: AthenaAuthEndpointPath) => ({\n    ...resolvedConfig.reactEmail,\n    route,\n  })\n\n  const resolveAdminEmailPayload = <TInput extends AthenaAuthFetchCompatibleInput & {\n    react?: AthenaAuthReactEmailRenderInput\n  }>(\n    route: '/admin/email/create' | '/admin/email/update',\n    input: TInput,\n  ) =>\n    resolveReactEmailPayloadFields(input, {\n      htmlField: 'htmlBody',\n      textField: 'textBody',\n    }, withReactEmailRoute(route))\n\n  const resolveAdminEmailTemplatePayload = <TInput extends AthenaAuthFetchCompatibleInput & {\n    react?: AthenaAuthReactEmailRenderInput\n  }>(\n    route: '/admin/email-template/create' | '/admin/email-template/update',\n    input: TInput,\n  ) =>\n    resolveReactEmailPayloadFields(toReactEmailTemplateCompatibilityInput(input), {\n      htmlField: 'htmlTemplate',\n      textField: 'textTemplate',\n      variablesField: 'variables',\n    }, withReactEmailRoute(route)).then(payload => {\n      const normalizedPayload = normalizeAdminEmailTemplatePayload(payload as Record<string, unknown>)\n      if ('variables' in payload && payload.variables !== undefined && payload.variables !== null) {\n        assertAthenaAuthTemplateVariables(\n          payload.variables,\n          `${route} variables`,\n        )\n      }\n      return normalizedPayload\n    })\n\n  const requireSession: AthenaAuthBindings['requireSession'] = async (input, options) => {\n    const sessionInput = input?.fetchOptions\n      ? { fetchOptions: input.fetchOptions }\n      : undefined\n    const sessionResult = await getGeneric<AthenaAuthSessionResponse>(\n      '/get-session',\n      sessionInput,\n      options,\n    )\n\n    if (!sessionResult.ok || sessionResult.data == null) {\n      return toSessionGuardFailure(sessionResult)\n    }\n\n    return {\n      ok: true,\n      session: sessionResult.data,\n    }\n  }\n\n  const getUser: AthenaAuthBindings['getUser'] = async (input, options) => {\n    const sessionResult = await getGeneric<AthenaAuthSessionResponse>(\n      '/get-session',\n      input,\n      options,\n    )\n\n    if (!sessionResult.ok) {\n      return {\n        ...sessionResult,\n        data: null,\n      }\n    }\n\n    return {\n      ...sessionResult,\n      data: {\n        user: sessionResult.data?.user ?? null,\n      } satisfies AthenaAuthGetUserResponse,\n    }\n  }\n\n  const requirePermission = async (\n    endpoint: '/admin/has-permission' | '/organization/has-permission',\n    input: AthenaAdminHasPermissionRequest & AthenaAuthFetchCompatibleInput,\n    options?: AthenaAuthCallOptions,\n  ): Promise<AthenaAuthGuardResult> => {\n    const sessionGuard = await requireSession(\n      input?.fetchOptions ? { fetchOptions: input.fetchOptions } : undefined,\n      options,\n    )\n\n    if (!sessionGuard.ok) {\n      return sessionGuard\n    }\n\n    const permissionResult = await postGeneric<AthenaAdminHasPermissionResponse>(\n      endpoint,\n      input,\n      options,\n    )\n\n    if (!permissionResult.ok) {\n      return toPermissionGuardFailure(permissionResult, {\n        ok: true,\n        status: 200,\n        data: sessionGuard.session,\n        error: null,\n        errorDetails: null,\n        raw: sessionGuard.session,\n      })\n    }\n\n    if (!permissionResult.data?.success) {\n      return {\n        ok: false,\n        reason: 'forbidden',\n        status: 403,\n        error: permissionResult.data?.error ?? 'Forbidden',\n        sessionResult: {\n          ok: true,\n          status: 200,\n          data: sessionGuard.session,\n          error: null,\n          errorDetails: null,\n          raw: sessionGuard.session,\n        },\n        permissionResult,\n      }\n    }\n\n    return sessionGuard\n  }\n\n  const listUserEmailsWithFallback: AthenaAuthBindings['user']['email']['list'] = async (input, options) => {\n    const primary = await getWithQuery<AthenaAuthEmailListResponse, AthenaAuthEmailListQuery>(\n      '/email/list',\n      input,\n      options,\n    )\n    if (primary.ok || primary.status !== 404 || primary.errorDetails?.code !== 'HTTP_ERROR') {\n      return primary\n    }\n    return getWithQuery<AthenaAuthEmailListResponse, AthenaAuthEmailListQuery>(\n      '/email-list',\n      input,\n      options,\n    )\n  }\n\n  const healthWithFallback: AthenaAuthBindings['health'] = async (input, options) => {\n    const primary = await getGeneric<AthenaAuthHealthResponse>('/health', input, options)\n    if (primary.ok || primary.status !== 404 || primary.errorDetails?.code !== 'HTTP_ERROR') {\n      return primary\n    }\n\n    const fallback = await getGeneric<AthenaAuthOkResponse>('/ok', input, options)\n    if (!fallback.ok) {\n      return {\n        ...fallback,\n        data: null,\n      }\n    }\n\n    const fallbackStatus =\n      isRecord(fallback.data) && typeof fallback.data.ok === 'boolean'\n        ? (fallback.data.ok ? 'ok' : 'error')\n        : 'ok'\n\n    return {\n      ...fallback,\n      data: {\n        status: fallbackStatus,\n      },\n    }\n  }\n\n  const signOut = (\n    input?: AthenaAuthFetchCompatibleInput,\n    options?: AthenaAuthCallOptions,\n  ) =>\n    executePostWithOptionalInput<AthenaAuthSignOutResponse>(\n      resolvedConfig,\n      { endpoint: '/sign-out', method: 'POST' },\n      input,\n      options,\n    )\n\n  const revokeSessions = (\n    input?: AthenaAuthFetchCompatibleInput,\n    options?: AthenaAuthCallOptions,\n  ) =>\n    executePostWithOptionalInput<AthenaAuthStatusResponse>(\n      resolvedConfig,\n      { endpoint: '/revoke-sessions', method: 'POST' },\n      input,\n      options,\n    )\n\n  const revokeOtherSessions = (\n    input?: AthenaAuthFetchCompatibleInput,\n    options?: AthenaAuthCallOptions,\n  ) =>\n    executePostWithOptionalInput<AthenaAuthStatusResponse>(\n      resolvedConfig,\n      { endpoint: '/revoke-other-sessions', method: 'POST' },\n      input,\n      options,\n    )\n\n  const revokeSession = (\n    input: { token: string } & AthenaAuthFetchCompatibleInput,\n    options?: AthenaAuthCallOptions,\n  ) =>\n    executePostWithCompatibleInput<typeof input, AthenaAuthStatusResponse>(\n      resolvedConfig,\n      { endpoint: '/revoke-session', method: 'POST' },\n      input,\n      options,\n    )\n\n  const deleteUser = (\n    input?: AthenaDeleteUserRequest & AthenaAuthFetchCompatibleInput,\n    options?: AthenaAuthCallOptions,\n  ) => {\n    const { payload, fetchOptions } = extractFetchOptions(input)\n    const mergedOptions = mergeCallOptions(fetchOptions, options)\n    return callAuthEndpoint<AthenaDeleteUserResponse>(\n      resolvedConfig,\n      { endpoint: '/delete-user', method: 'POST' },\n      payload ?? {},\n      undefined,\n      mergedOptions,\n    )\n  }\n\n  const deleteUserCallback = (\n    input?: AthenaDeleteUserCallbackRequest & AthenaAuthFetchCompatibleInput,\n    options?: AthenaAuthCallOptions,\n  ) => {\n    const { payload, fetchOptions } = extractFetchOptions(input)\n    const mergedOptions = mergeCallOptions(fetchOptions, options)\n    const query = (payload ?? {}) as AthenaDeleteUserCallbackRequest\n    return callAuthEndpoint<AthenaDeleteUserResponse>(\n      resolvedConfig,\n      { endpoint: '/delete-user/callback', method: 'GET' },\n      undefined,\n      {\n        token: query.token,\n        callbackURL: query.callbackURL,\n      },\n      mergedOptions,\n    )\n  }\n\n  const resolveResetPasswordToken = (\n    input: { token: string; callbackURL?: string } & AthenaAuthFetchCompatibleInput,\n    options?: AthenaAuthCallOptions,\n  ) => {\n    const { payload, fetchOptions } = extractFetchOptions(input)\n    const mergedOptions = mergeCallOptions(fetchOptions, options)\n    const query = payload as { token?: string; callbackURL?: string } | undefined\n    const token = query?.token?.trim()\n    if (!token) {\n      throw new Error('resolveResetPasswordToken requires a non-empty token')\n    }\n    const endpoint = `/reset-password/${encodeURIComponent(token)}` as AthenaAuthEndpointPath\n    return callAuthEndpoint<{ token?: string }>(\n      resolvedConfig,\n      { endpoint, method: 'GET' },\n      undefined,\n      query?.callbackURL ? { callbackURL: query.callbackURL } : undefined,\n      mergedOptions,\n    )\n  }\n\n  const organization: AthenaAuthOrganizationBindings = {\n    create: (input, options) =>\n      executePostWithCompatibleInput<\n        AthenaAuthOrganizationCreateRequest & AthenaAuthFetchCompatibleInput,\n        AthenaAuthOrganization\n      >(\n        resolvedConfig,\n        { endpoint: '/organization/create', method: 'POST' },\n        input,\n        options,\n      ),\n    update: (input, options) =>\n      executePostWithCompatibleInput<\n        AthenaAuthOrganizationUpdateRequest & AthenaAuthFetchCompatibleInput,\n        AthenaAuthOrganization\n      >(\n        resolvedConfig,\n        { endpoint: '/organization/update', method: 'POST' },\n        input,\n        options,\n      ),\n    delete: (input, options) =>\n      executePostWithCompatibleInput<\n        AthenaAuthOrganizationDeleteRequest & AthenaAuthFetchCompatibleInput,\n        AthenaAuthStatusResponse\n      >(\n        resolvedConfig,\n        { endpoint: '/organization/delete', method: 'POST' },\n        input,\n        options,\n      ),\n    setActive: (input, options) =>\n      executePostWithCompatibleInput<\n        AthenaAuthOrganizationSetActiveRequest & AthenaAuthFetchCompatibleInput,\n        AthenaAuthStatusResponse\n      >(\n        resolvedConfig,\n        { endpoint: '/organization/set-active', method: 'POST' },\n        input,\n        options,\n      ),\n    list: (input, options) =>\n      getGeneric<AthenaAuthOrganization[]>(\n        '/organization/list',\n        input,\n        options,\n      ),\n    getFull: (input, options) =>\n      executeGetWithQueryCompatibleInput<AthenaAuthOrganizationGetFullQuery, {\n        organization: AthenaAuthOrganization\n        members?: AthenaAuthOrganizationMember[]\n        invitations?: AthenaAuthOrganizationInvitation[]\n      }>(\n        resolvedConfig,\n        { endpoint: '/organization/get-full-organization', method: 'GET' },\n        input,\n        options,\n      ),\n    checkSlug: (input, options) =>\n      executePostWithCompatibleInput<\n        AthenaAuthOrganizationCheckSlugRequest & AthenaAuthFetchCompatibleInput,\n        { available: boolean }\n      >(\n        resolvedConfig,\n        { endpoint: '/organization/check-slug', method: 'POST' },\n        input,\n        options,\n      ),\n    leave: (input, options) =>\n      executePostWithCompatibleInput<\n        AthenaAuthOrganizationLeaveRequest & AthenaAuthFetchCompatibleInput,\n        AthenaAuthStatusResponse\n      >(\n        resolvedConfig,\n        { endpoint: '/organization/leave', method: 'POST' },\n        input,\n        options,\n      ),\n    listUserInvitations: (input, options) =>\n      executeGetWithQueryCompatibleInput<\n        AthenaAuthOrganizationListUserInvitationsQuery,\n        AthenaAuthOrganizationInvitation[]\n      >(\n        resolvedConfig,\n        { endpoint: '/organization/list-user-invitations', method: 'GET' },\n        input,\n        options,\n      ),\n    hasPermission: (input, options) =>\n      postGeneric<AthenaAdminHasPermissionResponse>(\n        '/organization/has-permission',\n        input,\n        options,\n      ),\n    requirePermission: (input, options) =>\n      requirePermission('/organization/has-permission', input, options),\n    invitation: {\n      cancel: (input, options) =>\n        executePostWithCompatibleInput<\n          AthenaAuthOrganizationInvitationActionRequest & AthenaAuthFetchCompatibleInput,\n          AthenaAuthStatusResponse\n        >(\n          resolvedConfig,\n          { endpoint: '/organization/cancel-invitation', method: 'POST' },\n          input,\n          options,\n        ),\n      accept: (input, options) =>\n        executePostWithCompatibleInput<\n          AthenaAuthOrganizationInvitationActionRequest & AthenaAuthFetchCompatibleInput,\n          AthenaAuthStatusResponse\n        >(\n          resolvedConfig,\n          { endpoint: '/organization/accept-invitation', method: 'POST' },\n          input,\n          options,\n        ),\n      get: (input, options) =>\n        executeGetWithQueryCompatibleInput<\n          AthenaAuthOrganizationGetInvitationQuery,\n          AthenaAuthOrganizationInvitation\n        >(\n          resolvedConfig,\n          { endpoint: '/organization/get-invitation', method: 'GET' },\n          input,\n          options,\n        ),\n      reject: (input, options) =>\n        executePostWithCompatibleInput<\n          AthenaAuthOrganizationInvitationActionRequest & AthenaAuthFetchCompatibleInput,\n          AthenaAuthStatusResponse\n        >(\n          resolvedConfig,\n          { endpoint: '/organization/reject-invitation', method: 'POST' },\n          input,\n          options,\n        ),\n      list: (input, options) =>\n        executeGetWithQueryCompatibleInput<\n          AthenaAuthOrganizationListInvitationsQuery,\n          AthenaAuthOrganizationInvitation[]\n        >(\n          resolvedConfig,\n          { endpoint: '/organization/list-invitations', method: 'GET' },\n          input,\n          options,\n        ),\n    },\n    member: {\n      remove: (input, options) =>\n        executePostWithCompatibleInput<\n          AthenaAuthOrganizationRemoveMemberRequest & AthenaAuthFetchCompatibleInput,\n          AthenaAuthStatusResponse\n        >(\n          resolvedConfig,\n          { endpoint: '/organization/remove-member', method: 'POST' },\n          input,\n          options,\n        ),\n      updateRole: (input, options) =>\n        executePostWithCompatibleInput<\n          AthenaAuthOrganizationUpdateMemberRoleRequest & AthenaAuthFetchCompatibleInput,\n          AthenaAuthStatusResponse\n        >(\n          resolvedConfig,\n          { endpoint: '/organization/update-member-role', method: 'POST' },\n          input,\n          options,\n        ),\n      invite: (input, options) =>\n        executePostWithCompatibleInput<\n          AthenaAuthOrganizationInviteMemberRequest & AthenaAuthFetchCompatibleInput,\n          AthenaAuthOrganizationInvitation\n        >(\n          resolvedConfig,\n          { endpoint: '/organization/invite-member', method: 'POST' },\n          input,\n          options,\n        ),\n      getActive: (input, options) =>\n        executeGetWithCompatibleInput<AthenaAuthOrganizationMember>(\n          resolvedConfig,\n          { endpoint: '/organization/get-active-member', method: 'GET' },\n          input,\n          options,\n        ),\n      list: (input, options) =>\n        executeGetWithQueryCompatibleInput<\n          AthenaAuthOrganizationListMembersQuery,\n          AthenaAuthOrganizationMember[]\n        >(\n          resolvedConfig,\n          { endpoint: '/organization/list-members', method: 'GET' },\n          input,\n          options,\n        ),\n    },\n  }\n\n  const authResetPassword = Object.assign(\n    (\n      input: AthenaResetPasswordRequest & AthenaAuthFetchCompatibleInput,\n      options?: AthenaAuthCallOptions,\n    ) =>\n      executePostWithCompatibleInput<\n        AthenaResetPasswordRequest & AthenaAuthFetchCompatibleInput,\n        AthenaAuthStatusResponse\n      >(\n        resolvedConfig,\n        { endpoint: '/reset-password', method: 'POST' },\n        input,\n        options,\n      ),\n    {\n      token: resolveResetPasswordToken,\n    },\n  )\n\n  const sessionRevokeBinding: AthenaAuthBindings['session']['revoke'] = (\n    input,\n    options,\n  ) => {\n    if (Array.isArray(input)) {\n      if (input.length === 0) {\n        throw new Error('session.revoke requires at least one session token')\n      }\n      if (input.length === 1) {\n        return revokeSession(input[0], options)\n      }\n      return revokeSessions(undefined, options)\n    }\n\n    const parsed = input as AthenaAuthGenericInput & {\n      token?: string\n      tokens?: string[]\n    }\n    const tokens = Array.isArray(parsed.tokens)\n      ? parsed.tokens.filter(token => token.trim().length > 0)\n      : undefined\n\n    if (tokens && tokens.length > 1) {\n      return revokeSessions(\n        parsed.fetchOptions ? { fetchOptions: parsed.fetchOptions } : undefined,\n        options,\n      )\n    }\n\n    if (tokens && tokens.length === 1) {\n      return revokeSession(\n        { token: tokens[0], fetchOptions: parsed.fetchOptions },\n        options,\n      )\n    }\n\n    const token = parsed.token?.trim()\n    if (!token) {\n      throw new Error('session.revoke requires a non-empty token or a non-empty token list')\n    }\n\n    return revokeSession(\n      {\n        token,\n        fetchOptions: parsed.fetchOptions,\n      },\n      options,\n    )\n  }\n\n  const adminUserSessionRevokeBinding: AthenaAuthBindings['admin']['user']['session']['revoke'] = (\n    input,\n    options,\n  ) => {\n    const requireUserId = (userId: string | undefined): string => {\n      const trimmed = String(userId ?? '').trim()\n      if (!trimmed) {\n        throw new Error('admin.user.session.revoke requires a non-empty userId')\n      }\n      return trimmed\n    }\n\n    const requireSinglePluralUserId = (\n      sessions: AthenaAdminRevokeUserSessionRequest[],\n    ): AthenaAdminRevokeUserSessionsRequest => {\n      const uniqueUserIds = [...new Set(sessions.map(session => requireUserId(session.userId)))]\n      if (uniqueUserIds.length !== 1) {\n        throw new Error('admin.user.session.revoke requires the same userId across plural payloads')\n      }\n      return { userId: uniqueUserIds[0] }\n    }\n\n    if (Array.isArray(input)) {\n      if (input.length === 0) {\n        throw new Error('admin.user.session.revoke requires at least one payload item')\n      }\n      if (input.length === 1) {\n        return postGeneric<AthenaAdminSuccessResponse>(\n          '/admin/revoke-user-session',\n          {\n            ...input[0],\n            userId: requireUserId(input[0].userId),\n          } as AthenaAuthGenericInput,\n          options,\n        )\n      }\n      return postGeneric<AthenaAdminSuccessResponse>(\n        '/admin/revoke-user-sessions',\n        requireSinglePluralUserId(input),\n        options,\n      )\n    }\n\n    const parsed = input as AthenaAuthGenericInput & {\n      sessions?: AthenaAdminRevokeUserSessionRequest[]\n      sessionToken?: string\n      userId?: string\n    }\n    const sessions = parsed.sessions\n\n    if (sessions && sessions.length === 0) {\n      throw new Error('admin.user.session.revoke requires at least one payload item')\n    }\n\n    if (sessions && sessions.length === 1) {\n      return postGeneric<AthenaAdminSuccessResponse>(\n        '/admin/revoke-user-session',\n        {\n          ...sessions[0],\n          userId: requireUserId(sessions[0].userId),\n          fetchOptions: parsed.fetchOptions,\n        } as AthenaAuthGenericInput,\n        options,\n      )\n    }\n\n    if (sessions && sessions.length > 1) {\n      return postGeneric<AthenaAdminSuccessResponse>(\n        '/admin/revoke-user-sessions',\n        {\n          ...requireSinglePluralUserId(sessions),\n          fetchOptions: parsed.fetchOptions,\n        } as AthenaAuthGenericInput,\n        options,\n      )\n    }\n\n    const normalizedUserId = requireUserId(parsed.userId)\n\n    if (!parsed.sessionToken) {\n      return postGeneric<AthenaAdminSuccessResponse>(\n        '/admin/revoke-user-sessions',\n        {\n          userId: normalizedUserId,\n          fetchOptions: parsed.fetchOptions,\n        } as AthenaAuthGenericInput,\n        options,\n      )\n    }\n    return postGeneric<AthenaAdminSuccessResponse>(\n      '/admin/revoke-user-session',\n      {\n        ...parsed,\n        userId: normalizedUserId,\n      } as AthenaAuthGenericInput,\n      options,\n    )\n  }\n\n  const auth: AthenaAuthBindings = {\n    getSession: (input, options) => getGeneric('/get-session', input, options),\n    getUser,\n    requireSession,\n    signOut,\n    forgetPassword: (input, options) => postGeneric('/forget-password', input, options),\n    resetPassword: authResetPassword,\n    setPassword: (input, options) => postGeneric('/set-password', input, options),\n    verifyEmail: (input, options) => {\n      const queryInput: AthenaAuthGenericQueryInput = {\n        query: {\n          token: input.token,\n          callbackURL: input.callbackURL,\n        },\n        fetchOptions: input.fetchOptions,\n      }\n      return getWithQuery<{ user: AthenaAuthUser; status: boolean }>(\n        '/verify-email',\n        queryInput,\n        options,\n      )\n    },\n    sendVerificationEmail: (input, options) => postGeneric('/send-verification-email', input, options),\n    changeEmail: (input, options) => postGeneric('/change-email', input, options),\n    changeEmailVerify: (input, options) => getWithQuery('/change-email/verify', input, options),\n    deleteUserVerify: (input, options) => getWithQuery('/delete-user/verify', input, options),\n    changePassword: (input, options) => postGeneric('/change-password', input, options),\n    user: {\n      update: (input, options) => postGeneric('/update-user', input, options),\n      delete: (input, options) => postGeneric('/delete-user', input, options),\n      email: {\n        list: listUserEmailsWithFallback,\n      },\n    },\n    session: {\n      list: (input, options) => getGeneric('/list-sessions', input, options),\n      revoke: sessionRevokeBinding,\n      revokeOther: revokeOtherSessions,\n    },\n    social: {\n      link: (input, options) => postGeneric('/link-social', input, options),\n    },\n    account: {\n      list: (input, options) => getGeneric('/list-accounts', input, options),\n      unlink: (input, options) => postGeneric('/unlink-account', input, options),\n    },\n    deleteUser: {\n      callback: deleteUserCallback,\n    },\n    refreshToken: (input, options) => postGeneric('/refresh-token', input, options),\n    getAccessToken: (input, options) => postGeneric('/get-access-token', input, options),\n    health: healthWithFallback,\n    ok: (input, options) => getGeneric('/ok', input, options),\n    error: (input, options) => getGeneric('/error', input, options),\n    twoFactor: {\n      getTotpUri: (input, options) => postGeneric('/two-factor/get-totp-uri', input, options),\n      verifyTotp: (input, options) => postGeneric('/two-factor/verify-totp', input, options),\n      sendOtp: (input, options) => postGeneric('/two-factor/send-otp', input, options),\n      verifyOtp: (input, options) => postGeneric('/two-factor/verify-otp', input, options),\n      verifyBackupCode: (input, options) => postGeneric('/two-factor/verify-backup-code', input, options),\n      generateBackupCodes: (input, options) =>\n        executePostWithCompatibleInput<\n          AthenaTwoFactorGenerateBackupCodesRequest & AthenaAuthFetchCompatibleInput,\n          AthenaTwoFactorGenerateBackupCodesResponse\n        >(\n          resolvedConfig,\n          { endpoint: '/two-factor/generate-backup-codes', method: 'POST' },\n          input,\n          options,\n        ),\n      enable: (input, options) => postGeneric('/two-factor/enable', input, options),\n      disable: (input, options) => postGeneric('/two-factor/disable', input, options),\n    },\n    passkey: {\n      generateRegisterOptions: (input, options) =>\n        getGeneric('/passkey/generate-register-options', input, options),\n      generateAuthenticateOptions: (input, options) =>\n        postGeneric('/passkey/generate-authenticate-options', input, options),\n      verifyRegistration: (input, options) =>\n        postGeneric('/passkey/verify-registration', input, options),\n      verifyAuthentication: (input, options) =>\n        postGeneric('/passkey/verify-authentication', input, options),\n      listUserPasskeys: (input, options) => getGeneric('/passkey/list-user-passkeys', input, options),\n      deletePasskey: (input, options) => postGeneric('/passkey/delete-passkey', input, options),\n      updatePasskey: (input, options) => postGeneric('/passkey/update-passkey', input, options),\n      getRelatedOrigins: (input, options) => getGeneric('/.well-known/webauthn', input, options),\n    },\n    admin: {\n      role: {\n        set: (input, options) => postGeneric('/admin/set-role', input, options),\n      },\n      user: {\n        list: (input, options) => getWithQuery('/admin/list-users', input, options),\n        create: (input, options) => postGeneric('/admin/create-user', input, options),\n        unban: (input, options) => postGeneric('/admin/unban-user', input, options),\n        ban: (input, options) => postGeneric('/admin/ban-user', input, options),\n        impersonate: (input, options) => postGeneric('/admin/impersonate-user', input, options),\n        stopImpersonating: (input, options) => postGeneric('/admin/stop-impersonating', input, options),\n        remove: (input, options) => postGeneric('/admin/remove-user', input, options),\n        setPassword: (input, options) => postGeneric('/admin/set-user-password', input, options),\n        session: {\n          list: (input, options) => postGeneric('/admin/list-user-sessions', input, options),\n          revoke: adminUserSessionRevokeBinding,\n        },\n      },\n      hasPermission: (input, options) =>\n        postGeneric<AthenaAdminHasPermissionResponse>('/admin/has-permission', input, options),\n      requirePermission: (input, options) =>\n        requirePermission('/admin/has-permission', input, options),\n      apiKey: {\n        create: (input, options) => postGeneric('/admin/api-key/create', input, options),\n      },\n      athenaClient: {\n        create: (input, options) => postGeneric('/admin/athena-client/create', input, options),\n        list: (input, options) => getWithQuery('/admin/athena-client/list', input, options),\n      },\n      auditLog: {\n        list: (input, options) => getWithQuery('/admin/audit-log/list', input, options),\n      },\n      email: {\n        list: (input, options) => getWithQuery('/admin/email/list', input, options),\n        get: (input, options) => getWithQuery('/admin/email/get', input, options),\n        create: async (input, options) =>\n          postGeneric(\n            '/admin/email/create',\n            await resolveAdminEmailPayload('/admin/email/create', input),\n            options,\n          ),\n        update: async (input, options) =>\n          postGeneric(\n            '/admin/email/update',\n            await resolveAdminEmailPayload('/admin/email/update', input),\n            options,\n          ),\n        delete: (input, options) => postGeneric('/admin/email/delete', input, options),\n        failure: {\n          list: (input, options) => getWithQuery('/admin/email-failure/list', input, options),\n          get: (input, options) => getWithQuery('/admin/email-failure/get', input, options),\n          create: (input, options) => postGeneric('/admin/email-failure/create', input, options),\n          update: (input, options) => postGeneric('/admin/email-failure/update', input, options),\n          delete: (input, options) => postGeneric('/admin/email-failure/delete', input, options),\n        },\n        template: {\n          list: (input, options) => getWithQuery('/admin/email-template/list', input, options),\n          get: (input, options) => getWithQuery('/admin/email-template/get', input, options),\n          create: async (input, options) =>\n            postGeneric(\n              '/admin/email-template/create',\n              await resolveAdminEmailTemplatePayload('/admin/email-template/create', input),\n              options,\n            ),\n          update: async (input, options) =>\n            postGeneric(\n              '/admin/email-template/update',\n              await resolveAdminEmailTemplatePayload('/admin/email-template/update', input),\n              options,\n            ),\n          delete: (input, options) => postGeneric('/admin/email-template/delete', input, options),\n          send: (input, options) =>\n            postGeneric(\n              '/admin/email-template/send',\n              normalizeAdminEmailTemplateSendPayload(extractFetchOptions(input).payload as Record<string, unknown>),\n              options,\n            ),\n        },\n        eventType: {\n          list: (input, options) => getWithQuery('/admin/email-event-type/list', input, options),\n        },\n      },\n      emailTemplate: {\n        get: (input, options) => getWithQuery('/admin/email-template/get', input, options),\n        create: async (input, options) =>\n          postGeneric(\n            '/admin/email-template/create',\n            await resolveAdminEmailTemplatePayload('/admin/email-template/create', input),\n            options,\n          ),\n        delete: (input, options) => postGeneric('/admin/email-template/delete', input, options),\n        list: (input, options) => getWithQuery('/admin/email-template/list', input, options),\n        update: async (input, options) =>\n          postGeneric(\n            '/admin/email-template/update',\n            await resolveAdminEmailTemplatePayload('/admin/email-template/update', input),\n            options,\n          ),\n        send: (input, options) =>\n          postGeneric(\n            '/admin/email-template/send',\n            normalizeAdminEmailTemplateSendPayload(extractFetchOptions(input).payload as Record<string, unknown>),\n            options,\n          ),\n      },\n      emailEventType: {\n        list: (input, options) => getWithQuery('/admin/email-event-type/list', input, options),\n      },\n    },\n    apiKey: {\n      create: (input, options) => postGeneric('/api-key/create', input, options),\n      get: (input, options) => getWithQuery('/api-key/get', input, options),\n      update: (input, options) => postGeneric('/api-key/update', input, options),\n      delete: (input, options) => postGeneric('/api-key/delete', input, options),\n      list: (input, options) => getWithQuery('/api-key/list', input, options),\n      verify: (input, options) => postGeneric('/api-key/verify', input, options),\n      deleteAllExpired: (input, options) =>\n        executePostWithOptionalInput<AthenaApiKeyDeleteAllExpiredResponse>(\n          resolvedConfig,\n          { endpoint: '/api-key/delete-all-expired-api-keys', method: 'POST' },\n          input,\n          options,\n        ),\n    },\n    signIn: {\n      email: (input, options) => postGeneric('/sign-in/email', input, options),\n      username: (input, options) => postGeneric('/sign-in/username', input, options),\n      social: (input, options) => postGeneric('/sign-in/social', input, options),\n    },\n    signUp: {\n      email: (input, options) => postGeneric('/sign-up/email', input, options),\n    },\n    organization,\n    callback: {\n      provider: (input, options) => {\n        const { payload, fetchOptions } = extractFetchOptions(input)\n        const parsed = payload as {\n          provider?: string\n          code?: string\n          state?: string\n        } | undefined\n        const provider = String(parsed?.provider ?? '').trim()\n        if (!provider) {\n          throw new Error('callback.provider requires a non-empty provider value')\n        }\n        const code = String(parsed?.code ?? '').trim()\n        const state = String(parsed?.state ?? '').trim()\n        if (!code || !state) {\n          throw new Error('callback.provider requires non-empty code and state values')\n        }\n        const endpoint = `/callback/${encodeURIComponent(provider)}` as AthenaAuthEndpointPath\n        return request({\n          endpoint,\n          method: 'GET',\n          query: {\n            code,\n            state,\n          },\n          fetchOptions,\n        }, options)\n      },\n    },\n  }\n\n  return {\n    baseUrl: normalizedBaseUrl,\n    request,\n    signIn: {\n      email: (\n        input: AthenaEmailSignInRequest & AthenaAuthFetchCompatibleInput,\n        options?: AthenaAuthCallOptions,\n      ) =>\n        executePostWithCompatibleInput<\n          AthenaEmailSignInRequest & AthenaAuthFetchCompatibleInput,\n          AthenaAuthSignInResponse\n        >(\n          resolvedConfig,\n          { endpoint: '/sign-in/email', method: 'POST' },\n          input,\n          options,\n        ),\n      username: (\n        input: AthenaUsernameSignInRequest & AthenaAuthFetchCompatibleInput,\n        options?: AthenaAuthCallOptions,\n      ) =>\n        executePostWithCompatibleInput<\n          AthenaUsernameSignInRequest & AthenaAuthFetchCompatibleInput,\n          AthenaAuthSignInResponse\n        >(\n          resolvedConfig,\n          { endpoint: '/sign-in/username', method: 'POST' },\n          input,\n          options,\n        ),\n      social: (\n        input: AthenaSocialSignInRequest & AthenaAuthFetchCompatibleInput,\n        options?: AthenaAuthCallOptions,\n      ) =>\n        executePostWithCompatibleInput<\n          AthenaSocialSignInRequest & AthenaAuthFetchCompatibleInput,\n          AthenaAuthSocialRedirectResponse | AthenaAuthSignInResponse\n        >(\n          resolvedConfig,\n          { endpoint: '/sign-in/social', method: 'POST' },\n          input,\n          options,\n        ),\n    },\n    signUp: {\n      email: (\n        input: AthenaEmailSignUpRequest & AthenaAuthFetchCompatibleInput,\n        options?: AthenaAuthCallOptions,\n      ) =>\n        executePostWithCompatibleInput<\n          AthenaEmailSignUpRequest & AthenaAuthFetchCompatibleInput,\n          AthenaAuthSignInResponse\n        >(\n          resolvedConfig,\n          { endpoint: '/sign-up/email', method: 'POST' },\n          input,\n          options,\n        ),\n    },\n    signOut,\n    logout: signOut,\n    getSession: (input?: AthenaAuthFetchCompatibleInput, options?: AthenaAuthCallOptions) =>\n      executeGetWithCompatibleInput<AthenaAuthSessionResponse>(\n        resolvedConfig,\n        { endpoint: '/get-session', method: 'GET' },\n        input,\n        options,\n      ),\n    getUser,\n    requireSession,\n    listSessions: (input?: AthenaAuthFetchCompatibleInput, options?: AthenaAuthCallOptions) =>\n      executeGetWithCompatibleInput<AthenaAuthSession[]>(\n        resolvedConfig,\n        { endpoint: '/list-sessions', method: 'GET' },\n        input,\n        options,\n      ),\n    revokeSession,\n    clearSession: revokeSession,\n    revokeSessions,\n    clearSessions: revokeSessions,\n    revokeOtherSessions,\n    clearOtherSessions: revokeOtherSessions,\n    forgetPassword: (\n      input: AthenaForgetPasswordRequest & AthenaAuthFetchCompatibleInput,\n      options?: AthenaAuthCallOptions,\n    ) =>\n      executePostWithCompatibleInput<\n        AthenaForgetPasswordRequest & AthenaAuthFetchCompatibleInput,\n        AthenaAuthStatusResponse\n      >(\n        resolvedConfig,\n        { endpoint: '/forget-password', method: 'POST' },\n        input,\n        options,\n      ),\n    resetPassword: (\n      input: AthenaResetPasswordRequest & AthenaAuthFetchCompatibleInput,\n      options?: AthenaAuthCallOptions,\n    ) =>\n      executePostWithCompatibleInput<\n        AthenaResetPasswordRequest & AthenaAuthFetchCompatibleInput,\n        AthenaAuthStatusResponse\n      >(\n        resolvedConfig,\n        { endpoint: '/reset-password', method: 'POST' },\n        input,\n        options,\n      ),\n    resolveResetPasswordToken,\n    verifyEmail: (\n      input: AthenaVerifyEmailRequest & AthenaAuthFetchCompatibleInput,\n      options?: AthenaAuthCallOptions,\n    ) => {\n      const { payload, fetchOptions } = extractFetchOptions(input)\n      const mergedOptions = mergeCallOptions(fetchOptions, options)\n      const query = payload as AthenaVerifyEmailRequest | undefined\n      return callAuthEndpoint<{ user: AthenaAuthUser; status: boolean }>(\n        resolvedConfig,\n        { endpoint: '/verify-email', method: 'GET' },\n        undefined,\n        query\n          ? {\n              token: query.token,\n              callbackURL: query.callbackURL,\n            }\n          : undefined,\n        mergedOptions,\n      )\n    },\n    sendVerificationEmail: (\n      input: AthenaSendVerificationEmailRequest & AthenaAuthFetchCompatibleInput,\n      options?: AthenaAuthCallOptions,\n    ) =>\n      executePostWithCompatibleInput<\n        AthenaSendVerificationEmailRequest & AthenaAuthFetchCompatibleInput,\n        AthenaAuthStatusResponse\n      >(\n        resolvedConfig,\n        { endpoint: '/send-verification-email', method: 'POST' },\n        input,\n        options,\n      ),\n    changeEmail: (\n      input: AthenaChangeEmailRequest & AthenaAuthFetchCompatibleInput,\n      options?: AthenaAuthCallOptions,\n    ) =>\n      executePostWithCompatibleInput<\n        AthenaChangeEmailRequest & AthenaAuthFetchCompatibleInput,\n        { status: boolean; message?: string | null }\n      >(\n        resolvedConfig,\n        { endpoint: '/change-email', method: 'POST' },\n        input,\n        options,\n      ),\n    changePassword: (\n      input: AthenaChangePasswordRequest & AthenaAuthFetchCompatibleInput,\n      options?: AthenaAuthCallOptions,\n    ) =>\n      executePostWithCompatibleInput<\n        AthenaChangePasswordRequest & AthenaAuthFetchCompatibleInput,\n        { token?: string | null; user: AthenaAuthUser }\n      >(\n        resolvedConfig,\n        { endpoint: '/change-password', method: 'POST' },\n        input,\n        options,\n      ),\n    updateUser: (\n      input: AthenaUpdateUserRequest & AthenaAuthFetchCompatibleInput,\n      options?: AthenaAuthCallOptions,\n    ) =>\n      executePostWithCompatibleInput<\n        AthenaUpdateUserRequest & AthenaAuthFetchCompatibleInput,\n        AthenaAuthStatusResponse\n      >(\n        resolvedConfig,\n        { endpoint: '/update-user', method: 'POST' },\n        input,\n        options,\n      ),\n    deleteUser,\n    deleteUserCallback,\n    linkSocial: (\n      input: AthenaLinkSocialRequest & AthenaAuthFetchCompatibleInput,\n      options?: AthenaAuthCallOptions,\n    ) =>\n      executePostWithCompatibleInput<\n        AthenaLinkSocialRequest & AthenaAuthFetchCompatibleInput,\n        AthenaAuthSocialRedirectResponse\n      >(\n        resolvedConfig,\n        { endpoint: '/link-social', method: 'POST' },\n        input,\n        options,\n      ),\n    listAccounts: (input?: AthenaAuthFetchCompatibleInput, options?: AthenaAuthCallOptions) =>\n      executeGetWithCompatibleInput<AthenaAuthLinkedAccount[]>(\n        resolvedConfig,\n        { endpoint: '/list-accounts', method: 'GET' },\n        input,\n        options,\n      ),\n    unlinkAccount: (\n      input: AthenaUnlinkAccountRequest & AthenaAuthFetchCompatibleInput,\n      options?: AthenaAuthCallOptions,\n    ) =>\n      executePostWithCompatibleInput<\n        AthenaUnlinkAccountRequest & AthenaAuthFetchCompatibleInput,\n        AthenaAuthStatusResponse\n      >(\n        resolvedConfig,\n        { endpoint: '/unlink-account', method: 'POST' },\n        input,\n        options,\n      ),\n    refreshToken: (\n      input: AthenaOAuthAccountTokenRequest & AthenaAuthFetchCompatibleInput,\n      options?: AthenaAuthCallOptions,\n    ) =>\n      executePostWithCompatibleInput<\n        AthenaOAuthAccountTokenRequest & AthenaAuthFetchCompatibleInput,\n        AthenaOAuthTokenBundle\n      >(\n        resolvedConfig,\n        { endpoint: '/refresh-token', method: 'POST' },\n        input,\n        options,\n      ),\n    getAccessToken: (\n      input: AthenaOAuthAccountTokenRequest & AthenaAuthFetchCompatibleInput,\n      options?: AthenaAuthCallOptions,\n    ) =>\n      executePostWithCompatibleInput<\n        AthenaOAuthAccountTokenRequest & AthenaAuthFetchCompatibleInput,\n        AthenaOAuthTokenBundle\n      >(\n        resolvedConfig,\n        { endpoint: '/get-access-token', method: 'POST' },\n        input,\n        options,\n      ),\n    organization,\n    auth,\n  }\n}\n","import type {\n  AthenaStorageDirectUploadConfig,\n  AthenaStoragePutBody,\n} from './module.ts'\n\ninterface DirectUploadProgress {\n  loaded: number\n}\n\ninterface DirectUploadXhr {\n  readonly upload: {\n    onprogress: ((event: { loaded: number }) => void) | null\n  }\n  readonly status: number\n  readonly statusText: string\n  readonly response: unknown\n  onload: (() => void) | null\n  onerror: (() => void) | null\n  onabort: (() => void) | null\n  open(method: string, url: string): void\n  setRequestHeader(key: string, value: string): void\n  getAllResponseHeaders(): string\n  send(body: unknown): void\n  abort(): void\n}\n\ndeclare const XMLHttpRequest: (new () => DirectUploadXhr) | undefined\n\nconst SERVICE = 's3'\nconst TERMINATOR = 'aws4_request'\n\nexport async function putDirectStorageUploadBody(\n  config: AthenaStorageDirectUploadConfig,\n  bucket: string | undefined,\n  storageKey: string,\n  body: AthenaStoragePutBody,\n  uploadHeaders: Record<string, string>,\n  signal: AbortSignal | undefined,\n  onProgress: (progress: DirectUploadProgress) => void,\n): Promise<Response> {\n  if (config.bucket && bucket && config.bucket !== bucket) {\n    throw new Error(\n      `athena.storage.file.upload direct mode bucket mismatch: configured ${config.bucket} but Athena returned ${bucket}`,\n    )\n  }\n  const target = createDirectUploadTarget(config, bucket, storageKey)\n  const bytes = await bodyToArrayBuffer(body)\n  const payloadHash = await sha256Hex(bytes)\n  const headers = new Headers(uploadHeaders)\n  if (isBlobBody(body) && body.type && !headers.has('Content-Type')) {\n    headers.set('Content-Type', body.type)\n  }\n\n  const signed = await signDirectUploadRequest(config, target, headers, payloadHash)\n  if (typeof XMLHttpRequest !== 'undefined') {\n    return putWithXhr(target.toString(), signed, body, signal, onProgress)\n  }\n\n  onProgress({ loaded: 0 })\n  const response = await fetch(target, {\n    method: 'PUT',\n    headers: signed.requestHeaders,\n    body: body as RequestInit['body'],\n    signal,\n  })\n  if (!response.ok) {\n    throw new Error(`athena.storage.file.upload failed with status ${response.status}`)\n  }\n  onProgress({ loaded: bytes.byteLength })\n  return response\n}\n\nfunction createDirectUploadTarget(\n  config: AthenaStorageDirectUploadConfig,\n  bucket: string | undefined,\n  storageKey: string,\n): URL {\n  const resolvedBucket = config.bucket ?? bucket\n  if (!resolvedBucket?.trim()) {\n    throw new Error(\n      'athena.storage.file.upload direct mode requires a bucket in storage.directUpload or the server upload response',\n    )\n  }\n  if (!storageKey.trim()) {\n    throw new Error('athena.storage.file.upload direct mode requires a storage key')\n  }\n\n  let endpoint: URL\n  try {\n    endpoint = new URL(config.endpoint)\n  } catch (error) {\n    throw new Error(\n      `athena.storage.file.upload direct mode received an invalid endpoint: ${error instanceof Error ? error.message : String(error)}`,\n    )\n  }\n  if (endpoint.search || endpoint.hash) {\n    throw new Error('athena.storage.file.upload direct mode endpoint must not contain a query or hash')\n  }\n\n  const endpointPath = endpoint.pathname.replace(/\\/+$/, '')\n  const pathParts = config.forcePathStyle === false\n    ? [endpointPath, storageKey]\n    : [endpointPath, resolvedBucket, storageKey]\n  if (config.forcePathStyle === false) {\n    endpoint.hostname = `${resolvedBucket}.${endpoint.hostname}`\n  }\n  endpoint.pathname = pathParts\n    .filter(Boolean)\n    .flatMap(part => part.split('/'))\n    .map(awsEncode)\n    .join('/')\n    .replace(/^([^/])/, '/$1')\n  return endpoint\n}\n\nasync function signDirectUploadRequest(\n  config: AthenaStorageDirectUploadConfig,\n  target: URL,\n  inputHeaders: Headers,\n  payloadHash: string,\n): Promise<{ requestHeaders: Record<string, string> }> {\n  const accessKeyId = config.accessKeyId.trim()\n  const secretAccessKey = config.secretAccessKey.trim()\n  if (!accessKeyId || !secretAccessKey) {\n    throw new Error(\n      'athena.storage.file.upload direct mode requires accessKeyId and secretAccessKey',\n    )\n  }\n\n  const now = new Date()\n  const amzDate = formatAmzDate(now)\n  const shortDate = amzDate.slice(0, 8)\n  const region = config.region?.trim() || 'auto'\n  const headers: Record<string, string> = {}\n  inputHeaders.forEach((value, key) => {\n    if (key.toLowerCase() !== 'authorization' && key.toLowerCase() !== 'host') {\n      headers[key.toLowerCase()] = value.trim().replace(/\\s+/g, ' ')\n    }\n  })\n  headers['x-amz-content-sha256'] = payloadHash\n  headers['x-amz-date'] = amzDate\n  if (config.sessionToken?.trim()) {\n    headers['x-amz-security-token'] = config.sessionToken.trim()\n  }\n\n  const canonicalHeaders = Object.keys(headers)\n    .sort()\n    .map(key => `${key}:${headers[key]}\\n`)\n    .join('')\n  const signedHeaders = Object.keys(headers).sort().join(';')\n  const canonicalRequest = [\n    'PUT',\n    target.pathname,\n    '',\n    `host:${target.host}\\n${canonicalHeaders}`,\n    `host;${signedHeaders}`,\n    payloadHash,\n  ].join('\\n')\n  const credentialScope = `${shortDate}/${region}/${SERVICE}/${TERMINATOR}`\n  const stringToSign = [\n    'AWS4-HMAC-SHA256',\n    amzDate,\n    credentialScope,\n    await sha256Hex(canonicalRequest),\n  ].join('\\n')\n  const dateKey = await hmac(`AWS4${secretAccessKey}`, shortDate)\n  const regionKey = await hmac(dateKey, region)\n  const serviceKey = await hmac(regionKey, SERVICE)\n  const signingKey = await hmac(serviceKey, TERMINATOR)\n  const signature = await hmacHex(signingKey, stringToSign)\n  headers.authorization = `AWS4-HMAC-SHA256 Credential=${accessKeyId}/${credentialScope}, SignedHeaders=host;${signedHeaders}, Signature=${signature}`\n\n  return { requestHeaders: headers }\n}\n\nasync function putWithXhr(\n  url: string,\n  signed: { requestHeaders: Record<string, string> },\n  body: AthenaStoragePutBody,\n  signal: AbortSignal | undefined,\n  onProgress: (progress: DirectUploadProgress) => void,\n): Promise<Response> {\n  const Xhr = XMLHttpRequest\n  if (Xhr === undefined) {\n    return Promise.reject(new Error('athena.storage.file.upload direct mode requires XMLHttpRequest in this runtime'))\n  }\n  return new Promise((resolve, reject) => {\n    const xhr = new Xhr()\n    const abort = () => xhr.abort()\n    xhr.open('PUT', url)\n    Object.entries(signed.requestHeaders).forEach(([key, value]) => xhr.setRequestHeader(key, value))\n    xhr.upload.onprogress = event => onProgress({ loaded: event.loaded })\n    xhr.onload = () => {\n      signal?.removeEventListener('abort', abort)\n      if (xhr.status < 200 || xhr.status >= 300) {\n        reject(new Error(`athena.storage.file.upload failed with status ${xhr.status}`))\n        return\n      }\n      onProgress({ loaded: bodySize(body) })\n      resolve(new Response(xhr.response as ConstructorParameters<typeof Response>[0], {\n        status: xhr.status,\n        statusText: xhr.statusText,\n        headers: parseXhrHeaders(xhr.getAllResponseHeaders()),\n      }))\n    }\n    xhr.onerror = () => {\n      signal?.removeEventListener('abort', abort)\n      reject(new Error('athena.storage.file.upload failed with a network error'))\n    }\n    xhr.onabort = () => {\n      signal?.removeEventListener('abort', abort)\n      reject(new DOMException('Upload aborted', 'AbortError'))\n    }\n    if (signal) {\n      if (signal.aborted) {\n        abort()\n        return\n      }\n      signal.addEventListener('abort', abort, { once: true })\n    }\n    xhr.send(body)\n  })\n}\n\nfunction isBlobBody(body: AthenaStoragePutBody): body is Blob {\n  return typeof Blob !== 'undefined' && body instanceof Blob\n}\n\nasync function bodyToArrayBuffer(body: AthenaStoragePutBody): Promise<ArrayBuffer> {\n  if (isBlobBody(body)) return body.arrayBuffer()\n  if (body instanceof ArrayBuffer) return body\n  if (ArrayBuffer.isView(body)) {\n    return body.buffer.slice(body.byteOffset, body.byteOffset + body.byteLength) as ArrayBuffer\n  }\n  throw new Error('athena.storage.file.upload direct mode does not support ReadableStream bodies')\n}\n\nfunction bodySize(body: AthenaStoragePutBody): number {\n  if (isBlobBody(body)) return body.size\n  if (body instanceof ArrayBuffer) return body.byteLength\n  if (ArrayBuffer.isView(body)) return body.byteLength\n  return 0\n}\n\nfunction awsEncode(value: string): string {\n  return encodeURIComponent(value).replace(/[!'()*]/g, character => `%${character.charCodeAt(0).toString(16).toUpperCase()}`)\n}\n\nfunction formatAmzDate(date: Date): string {\n  return date.toISOString().replace(/[:-]|\\.\\d{3}/g, '')\n}\n\nasync function sha256Hex(value: string | ArrayBuffer): Promise<string> {\n  const bytes = typeof value === 'string' ? new TextEncoder().encode(value) : value\n  const digest = await crypto.subtle.digest('SHA-256', bytes)\n  return toHex(new Uint8Array(digest))\n}\n\nasync function hmac(key: string | ArrayBuffer, value: string): Promise<ArrayBuffer> {\n  const keyBytes = typeof key === 'string' ? new TextEncoder().encode(key) : key\n  const cryptoKey = await crypto.subtle.importKey(\n    'raw',\n    keyBytes,\n    { name: 'HMAC', hash: 'SHA-256' },\n    false,\n    ['sign'],\n  )\n  return crypto.subtle.sign('HMAC', cryptoKey, new TextEncoder().encode(value))\n}\n\nasync function hmacHex(key: ArrayBuffer, value: string): Promise<string> {\n  return toHex(new Uint8Array(await hmac(key, value)))\n}\n\nfunction toHex(bytes: Uint8Array): string {\n  return Array.from(bytes, byte => byte.toString(16).padStart(2, '0')).join('')\n}\n\nfunction parseXhrHeaders(rawHeaders: string): Headers {\n  const headers = new Headers()\n  rawHeaders.trim().split(/[\\r\\n]+/).forEach(line => {\n    const separator = line.indexOf(':')\n    if (separator > 0) {\n      headers.set(line.slice(0, separator).trim(), line.slice(separator + 1).trim())\n    }\n  })\n  return headers\n}\n","import type {\n  AthenaStorageBinaryCallOptions,\n  AthenaStorageCallOptions,\n  AthenaStorageDirectUploadConfig,\n  CreateStorageUploadUrlRequest,\n  GetStorageFileUrlQuery,\n  ListStorageFilesRequest,\n  ManagedFileRecord,\n  StorageBatchUploadUrlResponse,\n  StorageFileMutationResponse,\n  StorageListFilesResponse,\n  StorageMultipartAbortRequest,\n  StorageMultipartCompleteRequest,\n  StorageMultipartCreateRequest,\n  StorageMultipartSignPartRequest,\n  StorageServerSideEncryptionOptions,\n  StorageUploadUrlResponse,\n} from './module.ts'\nimport { putDirectStorageUploadBody } from './direct-upload.ts'\n\n/** Files at or above this size use multipart unless `forceSinglePut` is set. */\nexport const DEFAULT_MULTIPART_THRESHOLD_BYTES = 32 * 1024 * 1024\n/** Chunk size for multipart uploads (S3 requires >= 5 MiB except the last part). */\nexport const DEFAULT_MULTIPART_PART_SIZE_BYTES = 8 * 1024 * 1024\nconst MIN_MULTIPART_PART_SIZE_BYTES = 5 * 1024 * 1024\n\nexport type AthenaStorageTemplateValue = string | number | boolean | null | undefined\nexport type AthenaStorageTemplateVars = Record<string, AthenaStorageTemplateValue>\nexport type AthenaStorageEnv = Record<string, string | undefined>\nexport type AthenaStorageUploadHeaders = ConstructorParameters<typeof Headers>[0]\nexport type AthenaStoragePrefixPath =\n  | string\n  | ((context: AthenaStoragePathContext) => string | null | undefined)\n\nexport interface AthenaStoragePathContext {\n  vars: AthenaStorageTemplateVars\n  env: AthenaStorageEnv\n  organizationId?: string\n  organization_id?: string\n  userId?: string\n  user_id?: string\n  resourceId?: string\n  resource_id?: string\n}\n\nexport interface AthenaStorageFileConfig {\n  /**\n   * Prefix applied by high-level file helpers before storage keys are sent to Athena.\n   * Supports tokens such as `{organization_id}`, `{organizationId}`, `{env.NODE_ENV}`,\n   * and `${ATHENA_STORAGE_PREFIX}`.\n   */\n  prefixPath?: AthenaStoragePrefixPath\n  vars?: AthenaStorageTemplateVars\n  env?: AthenaStorageEnv\n  directUpload?: AthenaStorageDirectUploadConfig\n}\n\nexport type AthenaStorageUploadSource = Blob | ArrayBuffer | Uint8Array\n\nexport interface AthenaStorageUploadConstraints {\n  maxFiles?: number\n  allowedExtensions?: readonly string[]\n  extensions?: readonly string[]\n  maxFileSizeMb?: number\n  maxFileSizeBytes?: number\n}\n\nexport interface AthenaStorageUploadProgress {\n  phase: 'preparing' | 'uploading' | 'complete'\n  fileIndex: number\n  fileCount: number\n  fileName: string\n  loaded: number\n  total: number\n  percent: number\n  aggregateLoaded: number\n  aggregateTotal: number\n  aggregatePercent: number\n  /** Present when the active file is uploading via multipart. */\n  multipart?: {\n    uploadId: string\n    partNumber: number\n    partCount: number\n  }\n}\n\nexport type AthenaStorageUploadProgressHandler = (progress: AthenaStorageUploadProgress) => void\n\nexport interface AthenaStorageFileUploadInput extends AthenaStorageUploadConstraints, StorageServerSideEncryptionOptions {\n  s3_id: string\n  bucket?: string\n  files: AthenaStorageUploadSource | ArrayLike<AthenaStorageUploadSource> | readonly AthenaStorageUploadSource[]\n  storage_key?: string\n  storageKey?: string\n  storageKeyTemplate?: string\n  prefixPath?: AthenaStoragePrefixPath\n  fileName?: string\n  name?: string\n  original_name?: string\n  resource_id?: string\n  resourceId?: string\n  organization_id?: string\n  organizationId?: string\n  user_id?: string\n  userId?: string\n  mime_type?: string\n  content_type?: string\n  public?: boolean\n  metadata?: Record<string, unknown>\n  vars?: AthenaStorageTemplateVars\n  env?: AthenaStorageEnv\n  uploadHeaders?: AthenaStorageUploadHeaders\n  onProgress?: AthenaStorageUploadProgressHandler\n  /** Override auto-multipart threshold (default 32 MiB). */\n  multipartThresholdBytes?: number\n  /** Override multipart chunk size (default 8 MiB, minimum 5 MiB). */\n  multipartPartSizeBytes?: number\n  /** Always use a single PUT even when the file exceeds the multipart threshold. */\n  forceSinglePut?: boolean\n  /** Always use multipart even when the file is below the threshold. */\n  forceMultipart?: boolean\n}\n\nexport interface AthenaStorageUploadedFile {\n  file: ManagedFileRecord\n  upload: StorageUploadUrlResponse['upload']\n  source: AthenaStorageUploadSource\n  fileName: string\n  storage_key: string\n  response: Response\n}\n\nexport interface AthenaStorageFileUploadResult {\n  files: AthenaStorageUploadedFile[]\n  count: number\n}\n\nexport interface AthenaStorageFileListInput extends Omit<ListStorageFilesRequest, 'prefix'> {\n  prefix?: string\n  prefixPath?: AthenaStoragePrefixPath\n  vars?: AthenaStorageTemplateVars\n  env?: AthenaStorageEnv\n  organization_id?: string\n  organizationId?: string\n  user_id?: string\n  userId?: string\n  resource_id?: string\n  resourceId?: string\n}\n\nexport interface AthenaStorageFileDownloadInput extends GetStorageFileUrlQuery {\n  fileId?: string\n  fileIds?: readonly string[]\n}\n\nexport type AthenaStorageFileDeleteInput = string | readonly string[]\n\nexport interface AthenaStorageFileModule {\n  upload(\n    input: AthenaStorageFileUploadInput,\n    options?: AthenaStorageCallOptions,\n  ): Promise<AthenaStorageFileUploadResult>\n  uploadMultipart(\n    input: AthenaStorageFileUploadInput,\n    options?: AthenaStorageCallOptions,\n  ): Promise<AthenaStorageFileUploadResult>\n  download(\n    fileId: string,\n    query?: GetStorageFileUrlQuery,\n    options?: AthenaStorageBinaryCallOptions,\n  ): Promise<Response>\n  download(\n    fileIds: readonly string[],\n    query?: GetStorageFileUrlQuery,\n    options?: AthenaStorageBinaryCallOptions,\n  ): Promise<Response[]>\n  download(\n    input: AthenaStorageFileDownloadInput,\n    options?: AthenaStorageBinaryCallOptions,\n  ): Promise<Response | Response[]>\n  list(\n    input: AthenaStorageFileListInput,\n    options?: AthenaStorageCallOptions,\n  ): Promise<StorageListFilesResponse>\n  delete(fileId: string, options?: AthenaStorageCallOptions): Promise<StorageFileMutationResponse>\n  delete(fileIds: readonly string[], options?: AthenaStorageCallOptions): Promise<StorageFileMutationResponse[]>\n}\n\nexport interface AthenaStorageFileBaseModule {\n  createStorageUploadUrl(\n    input: CreateStorageUploadUrlRequest,\n    options?: AthenaStorageCallOptions,\n  ): Promise<StorageUploadUrlResponse>\n  createStorageUploadUrls(\n    input: { files: CreateStorageUploadUrlRequest[] },\n    options?: AthenaStorageCallOptions,\n  ): Promise<StorageBatchUploadUrlResponse>\n  listStorageFiles(input: ListStorageFilesRequest, options?: AthenaStorageCallOptions): Promise<StorageListFilesResponse>\n  getStorageFileProxy(\n    fileId: string,\n    query?: GetStorageFileUrlQuery,\n    options?: AthenaStorageBinaryCallOptions,\n  ): Promise<Response>\n  deleteStorageFile(fileId: string, options?: AthenaStorageCallOptions): Promise<StorageFileMutationResponse>\n}\n\nexport interface AthenaStorageMultipartClient {\n  create(\n    input: StorageMultipartCreateRequest,\n    options?: AthenaStorageCallOptions,\n  ): Promise<Record<string, unknown>>\n  signPart(\n    input: StorageMultipartSignPartRequest,\n    options?: AthenaStorageCallOptions,\n  ): Promise<Record<string, unknown>>\n  complete(\n    input: StorageMultipartCompleteRequest,\n    options?: AthenaStorageCallOptions,\n  ): Promise<StorageFileMutationResponse>\n  abort(\n    input: StorageMultipartAbortRequest,\n    options?: AthenaStorageCallOptions,\n  ): Promise<Record<string, unknown>>\n}\n\ninterface NormalizedUploadSource {\n  source: AthenaStorageUploadSource\n  fileName: string\n  sizeBytes: number\n  contentType?: string\n}\n\ninterface ResolvedUploadRequest {\n  uploadRequest: CreateStorageUploadUrlRequest\n  source: NormalizedUploadSource\n}\n\ninterface AthenaStorageXhrProgressEvent {\n  loaded: number\n}\n\ninterface AthenaStorageXhr {\n  readonly upload: {\n    onprogress: ((event: AthenaStorageXhrProgressEvent) => void) | null\n  }\n  readonly status: number\n  readonly statusText: string\n  readonly response: unknown\n  onload: (() => void) | null\n  onerror: (() => void) | null\n  onabort: (() => void) | null\n  open(method: string, url: string): void\n  setRequestHeader(key: string, value: string): void\n  getAllResponseHeaders(): string\n  send(body: unknown): void\n  abort(): void\n}\n\ndeclare const XMLHttpRequest: (new () => AthenaStorageXhr) | undefined\n\nfunction mergeUploadHeaders(\n  serverHeaders: Record<string, string>,\n  inputHeaders: AthenaStorageUploadHeaders | undefined,\n): Record<string, string> {\n  const headers: Record<string, string> = { ...serverHeaders }\n  new Headers(inputHeaders).forEach((value, key) => {\n    headers[key] = value\n  })\n  return headers\n}\n\nexport function createStorageFileModule(\n  base: AthenaStorageFileBaseModule,\n  config: AthenaStorageFileConfig = {},\n  multipart?: AthenaStorageMultipartClient,\n): AthenaStorageFileModule {\n  const uploadSinglePut = async (\n    input: AthenaStorageFileUploadInput,\n    sources: NormalizedUploadSource[],\n    options?: AthenaStorageCallOptions,\n  ): Promise<AthenaStorageFileUploadResult> => {\n    const uploadRequests = sources.map((source, index): ResolvedUploadRequest => {\n      const storageKey = resolveUploadStorageKey(input, source, index, options, config)\n      return {\n        source,\n        uploadRequest: {\n          s3_id: input.s3_id,\n          bucket: input.bucket,\n          storage_key: storageKey,\n          name: input.name ?? source.fileName,\n          original_name: input.original_name ?? source.fileName,\n          resource_id: input.resource_id ?? input.resourceId,\n          mime_type: input.mime_type ?? source.contentType,\n          content_type: input.content_type ?? source.contentType,\n          size_bytes: source.sizeBytes,\n          public: input.public,\n          metadata: input.metadata,\n          server_side_encryption: input.server_side_encryption,\n          sse: input.sse,\n          ssekms_key_id: input.ssekms_key_id,\n          kms_key_id: input.kms_key_id,\n          bucket_key_enabled: input.bucket_key_enabled,\n        },\n      }\n    })\n\n    input.onProgress?.(createProgressSnapshot('preparing', sources, 0, 0, 0))\n\n    const uploadUrls =\n      uploadRequests.length === 1\n        ? [await base.createStorageUploadUrl(uploadRequests[0].uploadRequest, options)]\n        : (await base.createStorageUploadUrls({ files: uploadRequests.map(request => request.uploadRequest) }, options)).files\n\n    const aggregateLoaded = new Array(uploadRequests.length).fill(0) as number[]\n    const uploaded: AthenaStorageUploadedFile[] = []\n\n    for (let index = 0; index < uploadRequests.length; index += 1) {\n      const request = uploadRequests[index]\n      const uploadUrl = uploadUrls[index]\n      const aggregateProgress = (progress: { loaded: number }) => {\n        aggregateLoaded[index] = progress.loaded\n        input.onProgress?.(createProgressSnapshot('uploading', sources, index, progress.loaded, sum(aggregateLoaded)))\n      }\n      const response = config.directUpload\n        ? await putDirectStorageUploadBody(\n            config.directUpload,\n            uploadUrl.upload.bucket,\n            uploadUrl.upload.storage_key,\n            request.source.source,\n            mergeUploadHeaders(uploadUrl.upload.headers ?? {}, input.uploadHeaders),\n            options?.signal,\n            aggregateProgress,\n          )\n        : await putUploadBody(\n            uploadUrl.upload.url,\n            uploadUrl.upload.headers ?? {},\n            request.source,\n            input,\n            options,\n            aggregateProgress,\n          )\n      uploaded.push({\n        file: uploadUrl.file,\n        upload: uploadUrl.upload,\n        source: request.source.source,\n        fileName: request.source.fileName,\n        storage_key: request.uploadRequest.storage_key,\n        response,\n      })\n      aggregateLoaded[index] = request.source.sizeBytes\n      input.onProgress?.(createProgressSnapshot('complete', sources, index, request.source.sizeBytes, sum(aggregateLoaded)))\n    }\n\n    return {\n      files: uploaded,\n      count: uploaded.length,\n    }\n  }\n\n  const uploadMultipart: AthenaStorageFileModule['uploadMultipart'] = async (input, options) => {\n    if (!multipart) {\n      throw new Error('athena.storage.file.uploadMultipart requires the multipart namespace')\n    }\n    const sources = normalizeUploadSources(input)\n    validateUploadConstraints(sources, input)\n    const partSize = Math.max(\n      input.multipartPartSizeBytes ?? DEFAULT_MULTIPART_PART_SIZE_BYTES,\n      MIN_MULTIPART_PART_SIZE_BYTES,\n    )\n\n    input.onProgress?.(createProgressSnapshot('preparing', sources, 0, 0, 0))\n\n    const aggregateLoaded = new Array(sources.length).fill(0) as number[]\n    const uploaded: AthenaStorageUploadedFile[] = []\n\n    for (let index = 0; index < sources.length; index += 1) {\n      const source = sources[index]\n      const storageKey = resolveUploadStorageKey(input, source, index, options, config)\n      const uploadUrl = await base.createStorageUploadUrl(\n        {\n          s3_id: input.s3_id,\n          bucket: input.bucket,\n          storage_key: storageKey,\n          name: input.name ?? source.fileName,\n          original_name: input.original_name ?? source.fileName,\n          resource_id: input.resource_id ?? input.resourceId,\n          mime_type: input.mime_type ?? source.contentType,\n          content_type: input.content_type ?? source.contentType,\n          size_bytes: source.sizeBytes,\n          public: input.public,\n          metadata: input.metadata,\n          server_side_encryption: input.server_side_encryption,\n          sse: input.sse,\n          ssekms_key_id: input.ssekms_key_id,\n          kms_key_id: input.kms_key_id,\n          bucket_key_enabled: input.bucket_key_enabled,\n        },\n        options,\n      )\n\n      const fileId = uploadUrl.file.id\n      let uploadId = ''\n      try {\n        const created = await multipart.create(\n          {\n            file_id: fileId,\n            content_type: input.content_type ?? source.contentType,\n            server_side_encryption: input.server_side_encryption,\n            sse: input.sse,\n            ssekms_key_id: input.ssekms_key_id,\n            kms_key_id: input.kms_key_id,\n            bucket_key_enabled: input.bucket_key_enabled,\n          },\n          options,\n        )\n        uploadId = readStringField(created, ['upload_id', 'uploadId'])\n        if (!uploadId) {\n          throw new Error('athena.storage.file.uploadMultipart did not receive an upload_id')\n        }\n\n        const partCount = Math.max(1, Math.ceil(source.sizeBytes / partSize))\n        const completedParts: Array<{ part_number: number; etag: string }> = []\n        let fileLoaded = 0\n\n        for (let partNumber = 1; partNumber <= partCount; partNumber += 1) {\n          const start = (partNumber - 1) * partSize\n          const end = Math.min(start + partSize, source.sizeBytes)\n          const chunk = sliceUploadSource(source.source, start, end)\n          const signed = await multipart.signPart(\n            {\n              file_id: fileId,\n              upload_id: uploadId,\n              part_number: partNumber,\n            },\n            options,\n          )\n          const partUrl = readStringField(signed, ['url'])\n          if (!partUrl) {\n            throw new Error(`athena.storage.file.uploadMultipart missing part URL for part ${partNumber}`)\n          }\n          const partHeaders = readHeadersField(signed)\n          const response = await putUploadBody(\n            partUrl,\n            partHeaders,\n            {\n              source: chunk,\n              fileName: source.fileName,\n              sizeBytes: end - start,\n              contentType: source.contentType,\n            },\n            input,\n            options,\n            (progress) => {\n              const loaded = fileLoaded + progress.loaded\n              aggregateLoaded[index] = loaded\n              input.onProgress?.(\n                createProgressSnapshot('uploading', sources, index, loaded, sum(aggregateLoaded), {\n                  uploadId,\n                  partNumber,\n                  partCount,\n                }),\n              )\n            },\n          )\n          const etag = extractEtag(response)\n          if (!etag) {\n            throw new Error(`athena.storage.file.uploadMultipart missing ETag for part ${partNumber}`)\n          }\n          completedParts.push({ part_number: partNumber, etag })\n          fileLoaded = end\n          aggregateLoaded[index] = fileLoaded\n          input.onProgress?.(\n            createProgressSnapshot('uploading', sources, index, fileLoaded, sum(aggregateLoaded), {\n              uploadId,\n              partNumber,\n              partCount,\n            }),\n          )\n        }\n\n        const completed = await multipart.complete(\n          {\n            file_id: fileId,\n            upload_id: uploadId,\n            parts: completedParts,\n          },\n          options,\n        )\n\n        uploaded.push({\n          file: completed.file ?? uploadUrl.file,\n          upload: uploadUrl.upload,\n          source: source.source,\n          fileName: source.fileName,\n          storage_key: storageKey,\n          response: new Response(null, { status: 200 }),\n        })\n        aggregateLoaded[index] = source.sizeBytes\n        input.onProgress?.(\n          createProgressSnapshot('complete', sources, index, source.sizeBytes, sum(aggregateLoaded), {\n            uploadId,\n            partNumber: partCount,\n            partCount,\n          }),\n        )\n      } catch (error) {\n        if (uploadId) {\n          try {\n            await multipart.abort({ file_id: fileId, upload_id: uploadId }, options)\n          } catch {\n            // Best-effort abort; surface the original upload error.\n          }\n        }\n        throw error\n      }\n    }\n\n    return {\n      files: uploaded,\n      count: uploaded.length,\n    }\n  }\n\n  const upload: AthenaStorageFileModule['upload'] = async (input, options) => {\n    const sources = normalizeUploadSources(input)\n    validateUploadConstraints(sources, input)\n\n    const threshold = input.multipartThresholdBytes ?? DEFAULT_MULTIPART_THRESHOLD_BYTES\n    const useMultipart =\n      Boolean(multipart) &&\n      !input.forceSinglePut &&\n      !config.directUpload &&\n      (input.forceMultipart || sources.some(source => source.sizeBytes >= threshold))\n\n    if (useMultipart) {\n      const multipartSources = sources.filter(\n        source => input.forceMultipart || source.sizeBytes >= threshold,\n      )\n      const singleSources = sources.filter(\n        source => !(input.forceMultipart || source.sizeBytes >= threshold),\n      )\n\n      if (multipartSources.length === sources.length) {\n        return uploadMultipart(input, options)\n      }\n\n      // Mixed batch: upload large files via multipart, small via single PUT.\n      const multipartResult = multipartSources.length > 0\n        ? await uploadMultipart({ ...input, files: multipartSources.map(source => source.source), maxFiles: multipartSources.length }, options)\n        : { files: [], count: 0 }\n      const singleResult = singleSources.length > 0\n        ? await uploadSinglePut(\n            { ...input, files: singleSources.map(source => source.source), maxFiles: singleSources.length },\n            singleSources,\n            options,\n          )\n        : { files: [], count: 0 }\n      const files = [...multipartResult.files, ...singleResult.files]\n      return { files, count: files.length }\n    }\n\n    return uploadSinglePut(input, sources, options)\n  }\n\n  const download = ((\n    input: string | readonly string[] | AthenaStorageFileDownloadInput,\n    queryOrOptions?: GetStorageFileUrlQuery | AthenaStorageBinaryCallOptions,\n    maybeOptions?: AthenaStorageBinaryCallOptions,\n  ): Promise<Response | Response[]> => {\n    const { fileIds, query, options } = normalizeDownloadArgs(input, queryOrOptions, maybeOptions)\n    const downloads = fileIds.map(fileId => base.getStorageFileProxy(fileId, query, options))\n    return Array.isArray(input) || (isRecord(input) && Array.isArray(input.fileIds))\n      ? Promise.all(downloads)\n      : downloads[0]\n  }) as AthenaStorageFileModule['download']\n\n  const deleteFile = ((\n    input: string | readonly string[],\n    options?: AthenaStorageCallOptions,\n  ): Promise<StorageFileMutationResponse | StorageFileMutationResponse[]> => {\n    if (Array.isArray(input)) {\n      return Promise.all(input.map(fileId => base.deleteStorageFile(fileId, options)))\n    }\n    return base.deleteStorageFile(input as string, options)\n  }) as AthenaStorageFileModule['delete']\n\n  return {\n    upload,\n    uploadMultipart,\n    download,\n\n    list(input, options) {\n      const prefix = resolveStoragePath(input.prefix ?? '', input, options, config)\n      return base.listStorageFiles(\n        {\n          s3_id: input.s3_id,\n          prefix,\n        },\n        options,\n      )\n    },\n\n    delete: deleteFile,\n  }\n}\n\nexport function resolveStoragePath(\n  path: string,\n  input: {\n    prefixPath?: AthenaStoragePrefixPath\n    vars?: AthenaStorageTemplateVars\n    env?: AthenaStorageEnv\n    organization_id?: string\n    organizationId?: string\n    user_id?: string\n    userId?: string\n    resource_id?: string\n    resourceId?: string\n  },\n  options: AthenaStorageCallOptions | undefined,\n  config: AthenaStorageFileConfig = {},\n): string {\n  const context = createPathContext(input, options, config)\n  const prefixPath = input.prefixPath ?? config.prefixPath\n  const prefix = typeof prefixPath === 'function'\n    ? prefixPath(context)\n    : prefixPath\n  return joinStoragePath(renderStorageTemplate(prefix ?? '', context), renderStorageTemplate(path, context))\n}\n\nfunction resolveUploadStorageKey(\n  input: AthenaStorageFileUploadInput,\n  source: NormalizedUploadSource,\n  index: number,\n  options: AthenaStorageCallOptions | undefined,\n  config: AthenaStorageFileConfig,\n): string {\n  const explicitKey = input.storage_key ?? input.storageKey\n  const keyTemplate = input.storageKeyTemplate\n  const fallbackName = source.fileName\n  const context = createPathContext(input, options, config)\n  const key = keyTemplate\n    ? renderStorageTemplate(keyTemplate, {\n        ...context,\n        vars: {\n          ...context.vars,\n          index,\n          fileName: source.fileName,\n          name: source.fileName,\n        },\n      })\n    : explicitKey ?? fallbackName\n  return resolveStoragePath(key, input, options, config)\n}\n\nfunction normalizeUploadSources(input: AthenaStorageFileUploadInput): NormalizedUploadSource[] {\n  const files = toArray(input.files)\n  if (files.length === 0) {\n    throw new Error('athena.storage.file.upload requires at least one file')\n  }\n  return files.map((source, index) => {\n    const fileName = input.fileName ?? sourceName(source) ?? `file-${index + 1}`\n    const sizeBytes = sourceSize(source)\n    const contentType = input.content_type ?? input.mime_type ?? sourceContentType(source)\n    return {\n      source,\n      fileName,\n      sizeBytes,\n      contentType,\n    }\n  })\n}\n\nfunction validateUploadConstraints(sources: readonly NormalizedUploadSource[], input: AthenaStorageFileUploadInput): void {\n  const maxFiles = input.maxFiles ?? 1\n  if (sources.length > maxFiles) {\n    throw new Error(`athena.storage.file.upload accepts at most ${maxFiles} file${maxFiles === 1 ? '' : 's'} for this call`)\n  }\n\n  const maxFileSizeBytes = input.maxFileSizeBytes ?? (\n    input.maxFileSizeMb === undefined ? undefined : Math.floor(input.maxFileSizeMb * 1024 * 1024)\n  )\n  if (maxFileSizeBytes !== undefined) {\n    const tooLarge = sources.find(source => source.sizeBytes > maxFileSizeBytes)\n    if (tooLarge) {\n      throw new Error(`athena.storage.file.upload rejected ${tooLarge.fileName}: file exceeds ${maxFileSizeBytes} bytes`)\n    }\n  }\n\n  const allowedExtensions = normalizeExtensions(input.allowedExtensions ?? input.extensions)\n  if (allowedExtensions.size > 0) {\n    const invalid = sources.find(source => !allowedExtensions.has(fileExtension(source.fileName)))\n    if (invalid) {\n      throw new Error(`athena.storage.file.upload rejected ${invalid.fileName}: extension is not allowed`)\n    }\n  }\n}\n\nasync function putUploadBody(\n  url: string,\n  uploadHeaders: Record<string, string>,\n  source: NormalizedUploadSource,\n  input: AthenaStorageFileUploadInput,\n  options: AthenaStorageCallOptions | undefined,\n  onProgress: (progress: { loaded: number }) => void,\n): Promise<Response> {\n  const headers = new Headers(uploadHeaders)\n  new Headers(input.uploadHeaders).forEach((value, key) => headers.set(key, value))\n  if (source.contentType && !headers.has('Content-Type')) {\n    headers.set('Content-Type', source.contentType)\n  }\n  if (typeof XMLHttpRequest !== 'undefined') {\n    return putUploadBodyWithXhr(url, source, headers, options, onProgress)\n  }\n  onProgress({ loaded: 0 })\n  const response = await fetch(url, {\n    method: 'PUT',\n    headers,\n    body: source.source as RequestInit['body'],\n    signal: options?.signal,\n  })\n  if (!response.ok) {\n    throw new Error(`athena.storage.file.upload failed with status ${response.status}`)\n  }\n  onProgress({ loaded: source.sizeBytes })\n  return response\n}\n\nfunction putUploadBodyWithXhr(\n  url: string,\n  source: NormalizedUploadSource,\n  headers: Headers,\n  options: AthenaStorageCallOptions | undefined,\n  onProgress: (progress: { loaded: number }) => void,\n): Promise<Response> {\n  const Xhr = XMLHttpRequest\n  if (Xhr === undefined) {\n    return Promise.reject(new Error('athena.storage.file.upload requires XMLHttpRequest in this runtime'))\n  }\n  return new Promise((resolve, reject) => {\n    const xhr = new Xhr()\n    const abort = () => xhr.abort()\n    xhr.open('PUT', url)\n    headers.forEach((value, key) => xhr.setRequestHeader(key, value))\n    xhr.upload.onprogress = (event: AthenaStorageXhrProgressEvent) => {\n      onProgress({ loaded: event.loaded })\n    }\n    xhr.onload = () => {\n      if (options?.signal) {\n        options.signal.removeEventListener('abort', abort)\n      }\n      if (xhr.status < 200 || xhr.status >= 300) {\n        reject(new Error(`athena.storage.file.upload failed with status ${xhr.status}`))\n        return\n      }\n      onProgress({ loaded: source.sizeBytes })\n      resolve(new Response(xhr.response as ConstructorParameters<typeof Response>[0], {\n        status: xhr.status,\n        statusText: xhr.statusText,\n        headers: parseXhrHeaders(xhr.getAllResponseHeaders()),\n      }))\n    }\n    xhr.onerror = () => {\n      if (options?.signal) {\n        options.signal.removeEventListener('abort', abort)\n      }\n      reject(new Error('athena.storage.file.upload failed with a network error'))\n    }\n    xhr.onabort = () => {\n      if (options?.signal) {\n        options.signal.removeEventListener('abort', abort)\n      }\n      reject(new DOMException('Upload aborted', 'AbortError'))\n    }\n    if (options?.signal) {\n      if (options.signal.aborted) {\n        abort()\n        return\n      }\n      options.signal.addEventListener('abort', abort, { once: true })\n    }\n    xhr.send(source.source)\n  })\n}\n\nfunction normalizeDownloadArgs(\n  input: string | readonly string[] | AthenaStorageFileDownloadInput,\n  queryOrOptions?: GetStorageFileUrlQuery | AthenaStorageBinaryCallOptions,\n  maybeOptions?: AthenaStorageBinaryCallOptions,\n): {\n  fileIds: string[]\n  query?: GetStorageFileUrlQuery\n  options?: AthenaStorageBinaryCallOptions\n} {\n  if (typeof input === 'string') {\n    return { fileIds: [input], query: queryOrOptions as GetStorageFileUrlQuery | undefined, options: maybeOptions }\n  }\n  if (Array.isArray(input)) {\n    return { fileIds: [...input], query: queryOrOptions as GetStorageFileUrlQuery | undefined, options: maybeOptions }\n  }\n  const downloadInput = input as AthenaStorageFileDownloadInput\n  const { fileId, fileIds, ...query } = downloadInput\n  return {\n    fileIds: fileIds ? [...fileIds] : fileId ? [fileId] : [],\n    query,\n    options: queryOrOptions as AthenaStorageBinaryCallOptions | undefined,\n  }\n}\n\nfunction createPathContext(\n  input: {\n    vars?: AthenaStorageTemplateVars\n    env?: AthenaStorageEnv\n    organization_id?: string\n    organizationId?: string\n    user_id?: string\n    userId?: string\n    resource_id?: string\n    resourceId?: string\n  },\n  options: AthenaStorageCallOptions | undefined,\n  config: AthenaStorageFileConfig,\n): AthenaStoragePathContext {\n  const organizationId = input.organizationId ?? input.organization_id ?? options?.organizationId ?? undefined\n  const userId = input.userId ?? input.user_id ?? options?.userId ?? undefined\n  const resourceId = input.resourceId ?? input.resource_id ?? undefined\n  const vars = {\n    ...(config.vars ?? {}),\n    ...(input.vars ?? {}),\n  }\n  if (organizationId !== undefined) {\n    vars.organizationId = organizationId\n    vars.organization_id = organizationId\n  }\n  if (userId !== undefined) {\n    vars.userId = userId\n    vars.user_id = userId\n  }\n  if (resourceId !== undefined) {\n    vars.resourceId = resourceId\n    vars.resource_id = resourceId\n  }\n  return {\n    vars,\n    env: {\n      ...readProcessEnv(),\n      ...(config.env ?? {}),\n      ...(input.env ?? {}),\n    },\n    organizationId,\n    organization_id: organizationId,\n    userId,\n    user_id: userId,\n    resourceId,\n    resource_id: resourceId,\n  }\n}\n\nfunction renderStorageTemplate(template: string, context: AthenaStoragePathContext): string {\n  return template.replace(/\\$\\{([^}]+)\\}|\\{([^}]+)\\}/g, (_match, shellToken: string | undefined, braceToken: string | undefined) => {\n    const token = (shellToken ?? braceToken ?? '').trim()\n    if (!token) return ''\n    const value = resolveTemplateToken(token, context)\n    return value === undefined || value === null ? '' : String(value)\n  })\n}\n\nfunction resolveTemplateToken(token: string, context: AthenaStoragePathContext): AthenaStorageTemplateValue {\n  if (token.startsWith('env.')) {\n    return context.env[token.slice(4)]\n  }\n  if (token in context.vars) {\n    return context.vars[token]\n  }\n  return context.env[token]\n}\n\nfunction joinStoragePath(...parts: readonly string[]): string {\n  return parts\n    .map(part => part.trim().replace(/^\\/+|\\/+$/g, ''))\n    .filter(Boolean)\n    .join('/')\n}\n\nfunction toArray(files: AthenaStorageFileUploadInput['files']): AthenaStorageUploadSource[] {\n  if (isUploadSource(files)) return [files]\n  return Array.from(files)\n}\n\nfunction isUploadSource(value: unknown): value is AthenaStorageUploadSource {\n  return value instanceof Blob || value instanceof ArrayBuffer || value instanceof Uint8Array\n}\n\nfunction sourceName(source: AthenaStorageUploadSource): string | undefined {\n  return isRecord(source) && typeof source.name === 'string' && source.name.trim()\n    ? source.name.trim()\n    : undefined\n}\n\nfunction sourceSize(source: AthenaStorageUploadSource): number {\n  if (source instanceof Blob) return source.size\n  return source.byteLength\n}\n\nfunction sourceContentType(source: AthenaStorageUploadSource): string | undefined {\n  return source instanceof Blob && source.type.trim() ? source.type.trim() : undefined\n}\n\nfunction normalizeExtensions(extensions: readonly string[] | undefined): Set<string> {\n  return new Set((extensions ?? []).map(extension => extension.replace(/^\\./, '').toLowerCase()).filter(Boolean))\n}\n\nfunction fileExtension(fileName: string): string {\n  const lastDot = fileName.lastIndexOf('.')\n  return lastDot === -1 ? '' : fileName.slice(lastDot + 1).toLowerCase()\n}\n\nfunction createProgressSnapshot(\n  phase: AthenaStorageUploadProgress['phase'],\n  sources: readonly NormalizedUploadSource[],\n  fileIndex: number,\n  loaded: number,\n  aggregateLoaded: number,\n  multipartInfo?: AthenaStorageUploadProgress['multipart'],\n): AthenaStorageUploadProgress {\n  const total = sources[fileIndex]?.sizeBytes ?? 0\n  const aggregateTotal = sources.reduce((totalBytes, source) => totalBytes + source.sizeBytes, 0)\n  return {\n    phase,\n    fileIndex,\n    fileCount: sources.length,\n    fileName: sources[fileIndex]?.fileName ?? '',\n    loaded,\n    total,\n    percent: total > 0 ? Math.round((loaded / total) * 100) : 100,\n    aggregateLoaded,\n    aggregateTotal,\n    aggregatePercent: aggregateTotal > 0 ? Math.round((aggregateLoaded / aggregateTotal) * 100) : 100,\n    ...(multipartInfo ? { multipart: multipartInfo } : {}),\n  }\n}\n\nfunction sliceUploadSource(\n  source: AthenaStorageUploadSource,\n  start: number,\n  end: number,\n): AthenaStorageUploadSource {\n  if (source instanceof Blob) {\n    return source.slice(start, end)\n  }\n  if (source instanceof ArrayBuffer) {\n    return source.slice(start, end)\n  }\n  return source.slice(start, end)\n}\n\nfunction readStringField(value: unknown, keys: readonly string[]): string {\n  if (!isRecord(value)) return ''\n  for (const key of keys) {\n    const candidate = value[key]\n    if (typeof candidate === 'string' && candidate.trim()) {\n      return candidate.trim()\n    }\n  }\n  return ''\n}\n\nfunction readHeadersField(value: unknown): Record<string, string> {\n  if (!isRecord(value)) return {}\n  const headers = value.headers\n  if (!isRecord(headers)) return {}\n  const result: Record<string, string> = {}\n  for (const [key, headerValue] of Object.entries(headers)) {\n    if (typeof headerValue === 'string') {\n      result[key] = headerValue\n    }\n  }\n  return result\n}\n\nfunction extractEtag(response: Response): string {\n  const etag = response.headers.get('etag') ?? response.headers.get('ETag') ?? ''\n  return etag.trim()\n}\n\nfunction sum(values: readonly number[]): number {\n  return values.reduce((total, value) => total + value, 0)\n}\n\nfunction parseXhrHeaders(raw: string): Headers {\n  const headers = new Headers()\n  for (const line of raw.trim().split(/[\\r\\n]+/)) {\n    const index = line.indexOf(':')\n    if (index === -1) continue\n    headers.set(line.slice(0, index).trim(), line.slice(index + 1).trim())\n  }\n  return headers\n}\n\nfunction readProcessEnv(): AthenaStorageEnv {\n  const processLike = (globalThis as { process?: { env?: AthenaStorageEnv } }).process\n  return processLike?.env ?? {}\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return Boolean(value) && typeof value === 'object'\n}\n","/**\n * Admin backup surface exposed under `client.storage.backup.*`.\n *\n * Routes live at `/admin/backups*` (admin / elevated key). Archives land in the\n * server-configured S3 or R2 profile (`ATHENA_BACKUP_S3_*` including provider + account_id).\n */\n\nimport type { AthenaGatewayClient } from '../gateway/client.ts'\nimport type {\n  AthenaGatewayEndpointPath,\n  AthenaGatewayMethod,\n} from '../gateway/types.ts'\nimport { buildAthenaGatewayUrl, normalizeAthenaGatewayBaseUrl } from '../gateway/url.ts'\nimport type { AthenaStorageCallOptions, AthenaStorageClientConfig } from './module.ts'\n\n/** Avoid circular import with module.ts — shape matches AthenaStorageError enough for callers. */\nfunction backupError(\n  message: string,\n  status: number,\n  endpoint: string,\n  method: string,\n  cause?: unknown,\n  raw?: unknown,\n): never {\n  const error = new Error(message) as Error & {\n    name: string\n    code: string\n    status: number\n    endpoint: string\n    method: string\n    cause?: unknown\n    raw?: unknown\n  }\n  error.name = 'AthenaStorageError'\n  error.code = status === 0 ? 'NETWORK_ERROR' : 'HTTP_ERROR'\n  error.status = status\n  error.endpoint = endpoint\n  error.method = method\n  error.cause = cause\n  error.raw = raw\n  throw error\n}\n\nexport type BackupRecoveryStrategy = 'none' | 'repair_missing_role_oids'\n\nexport interface StorageBackupRecord {\n  job_id: number\n  s3_bucket: string\n  s3_key: string\n  /** Alias of s3_key for convenience */\n  key: string\n  client_name: string\n  label?: string | null\n  size_bytes: number\n  execution_daemon_id?: string | null\n  completed_at: string\n}\n\nexport interface StorageBackupListPage {\n  backups: StorageBackupRecord[]\n  next_cursor: string | null\n}\n\nexport interface StorageBackupListQuery {\n  client_name?: string\n  cursor?: string | null\n  limit?: number\n}\n\nexport interface StorageBackupCreateRequest {\n  client_name: string\n  label?: string\n  pg_uri?: string\n  recovery_strategy?: BackupRecoveryStrategy\n}\n\nexport interface StorageBackupQueuedJob {\n  job_id: number\n  client_name: string\n  status: string\n  key?: string\n}\n\nexport interface StorageBackupRestoreRequest {\n  client_name: string\n  pg_uri?: string\n}\n\nexport interface StorageBackupJob {\n  id: number\n  job_type: string\n  client_name?: string | null\n  status: string\n  progress_pct?: number | null\n  progress_stage?: string | null\n  s3_bucket?: string | null\n  s3_key?: string | null\n  label?: string | null\n  error_message?: string | null\n  created_at?: string\n  updated_at?: string\n  completed_at?: string | null\n  [key: string]: unknown\n}\n\nexport interface StorageBackupSchedule {\n  id: number\n  client_name: string\n  frequency?: string\n  enabled?: boolean\n  label?: string | null\n  [key: string]: unknown\n}\n\nexport interface StorageBackupScheduleCreateRequest {\n  client_name: string\n  frequency: string\n  time_of_day?: string\n  day_of_week?: number\n  day_of_month?: number\n  label?: string\n  execution_daemon_id?: string\n  enabled?: boolean\n  [key: string]: unknown\n}\n\nexport interface AthenaStorageBackupNamespace {\n  /** `GET /admin/backups` */\n  list(\n    query?: StorageBackupListQuery,\n    options?: AthenaStorageCallOptions,\n  ): Promise<StorageBackupListPage>\n  /** `POST /admin/backups` — queue a backup job */\n  create(\n    input: StorageBackupCreateRequest,\n    options?: AthenaStorageCallOptions,\n  ): Promise<StorageBackupQueuedJob>\n  /** `POST /admin/backups/{key}/restore` */\n  restore(\n    key: string,\n    input: StorageBackupRestoreRequest,\n    options?: AthenaStorageCallOptions,\n  ): Promise<StorageBackupQueuedJob>\n  /** `DELETE /admin/backups/{key}` */\n  delete(key: string, options?: AthenaStorageCallOptions): Promise<void>\n  /** Build a browser download URL for `GET /admin/backups/{key}/download` */\n  downloadUrl(key: string, options?: { apiKey?: string }): string\n  jobs: {\n    list(\n      query?: { limit?: number; status?: string; client_name?: string },\n      options?: AthenaStorageCallOptions,\n    ): Promise<StorageBackupJob[]>\n    get(jobId: number | string, options?: AthenaStorageCallOptions): Promise<StorageBackupJob>\n    cancel(jobId: number | string, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n    delete(jobId: number | string, options?: AthenaStorageCallOptions): Promise<void>\n    /** Presigned/console open link for the job archive object (S3 or R2) */\n    openObjectUrl(jobId: number | string, options?: AthenaStorageCallOptions): Promise<string>\n  }\n  schedules: {\n    list(options?: AthenaStorageCallOptions): Promise<StorageBackupSchedule[]>\n    create(\n      input: StorageBackupScheduleCreateRequest,\n      options?: AthenaStorageCallOptions,\n    ): Promise<StorageBackupSchedule>\n    update(\n      id: number | string,\n      input: Partial<StorageBackupScheduleCreateRequest>,\n      options?: AthenaStorageCallOptions,\n    ): Promise<StorageBackupSchedule>\n    delete(id: number | string, options?: AthenaStorageCallOptions): Promise<void>\n  }\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return Boolean(value) && typeof value === 'object' && !Array.isArray(value)\n}\n\nfunction asPath(path: string): AthenaGatewayEndpointPath {\n  return path as AthenaGatewayEndpointPath\n}\n\nfunction appendQuery(path: string, query?: object): string {\n  if (!query) return path\n  const params = new URLSearchParams()\n  for (const [key, value] of Object.entries(query)) {\n    if (value === undefined || value === null || value === '') continue\n    params.set(key, String(value))\n  }\n  const text = params.toString()\n  return text ? `${path}?${text}` : path\n}\n\nfunction unwrapAthenaData<T>(payload: unknown): T {\n  if (isRecord(payload) && 'data' in payload) {\n    return payload.data as T\n  }\n  return payload as T\n}\n\nfunction requireKey(key: string): string {\n  const trimmed = key.trim()\n  if (!trimmed || trimmed === 'undefined' || trimmed === 'null') {\n    backupError('Backup object key is required', 400, '/admin/backups/{key}', 'DELETE')\n  }\n  return trimmed\n}\n\nfunction resolveMessage(payload: unknown, fallback: string): string {\n  if (isRecord(payload)) {\n    const message = payload.message ?? payload.error ?? payload.details\n    if (typeof message === 'string' && message.trim()) return message.trim()\n  }\n  if (typeof payload === 'string' && payload.trim()) return payload.trim()\n  return fallback\n}\n\nasync function callBackupEndpoint<T>(\n  gateway: AthenaGatewayClient,\n  path: string,\n  method: AthenaGatewayMethod,\n  payload: unknown | undefined,\n  options: AthenaStorageCallOptions | undefined,\n  runtime: AthenaStorageClientConfig | undefined,\n): Promise<T> {\n  const resolvedOptions = await gateway.resolveCallOptions(options)\n  const endpoint = asPath(path)\n  const baseUrl = resolvedOptions?.baseUrl\n    ? normalizeAthenaGatewayBaseUrl(resolvedOptions.baseUrl)\n    : gateway.baseUrl\n  const url = buildAthenaGatewayUrl(baseUrl, endpoint)\n  void runtime\n  const headers = gateway.buildHeaders(resolvedOptions)\n  const init: RequestInit = {\n    method,\n    headers,\n    signal: resolvedOptions?.signal,\n  }\n  if (payload !== undefined && method !== 'GET') {\n    init.body = JSON.stringify(payload)\n  }\n\n  let response: Response\n  try {\n    response = await fetch(url, init)\n  } catch (error) {\n    backupError(\n      error instanceof Error ? error.message : 'Backup network error',\n      0,\n      path,\n      method,\n      error,\n    )\n  }\n\n  const rawText = await response.text()\n  let parsed: unknown = null\n  if (rawText) {\n    try {\n      parsed = JSON.parse(rawText)\n    } catch {\n      parsed = rawText\n    }\n  }\n\n  if (!response.ok) {\n    backupError(\n      resolveMessage(parsed, `Backup ${method} ${path} failed (${response.status})`),\n      response.status,\n      path,\n      method,\n      undefined,\n      parsed,\n    )\n  }\n\n  return unwrapAthenaData<T>(parsed)\n}\n\n/**\n * Create the `storage.backup` namespace bound to an Athena gateway client.\n */\nexport function createStorageBackupModule(\n  gateway: AthenaGatewayClient,\n  runtimeOptions?: AthenaStorageClientConfig,\n): AthenaStorageBackupNamespace {\n  const resolvedBaseUrl = () => String(gateway.baseUrl ?? '').replace(/\\/+$/, '')\n\n  return {\n    async list(query, options) {\n      const path = appendQuery('/admin/backups', {\n        limit: query?.limit ?? 10,\n        client_name: query?.client_name,\n        cursor: query?.cursor ?? undefined,\n      })\n      const data = await callBackupEndpoint<{\n        backups?: Array<Omit<StorageBackupRecord, 'key'> & { key?: string }>\n        next_cursor?: string | null\n      }>(gateway, path, 'GET', undefined, options, runtimeOptions)\n\n      const backups = (data?.backups ?? []).map((row) => ({\n        ...row,\n        key: row.key ?? row.s3_key,\n      }))\n      return {\n        backups,\n        next_cursor: data?.next_cursor ?? null,\n      }\n    },\n\n    async create(input, options) {\n      const data = await callBackupEndpoint<{\n        job_id?: number\n        client_name?: string\n        status?: string\n      }>(gateway, '/admin/backups', 'POST', input, options, runtimeOptions)\n      return {\n        job_id: Number(data?.job_id ?? 0),\n        client_name: String(data?.client_name ?? input.client_name),\n        status: String(data?.status ?? 'pending'),\n      }\n    },\n\n    async restore(key, input, options) {\n      const backupKey = requireKey(key)\n      const path = `/admin/backups/${encodeURIComponent(backupKey)}/restore`\n      const data = await callBackupEndpoint<{\n        job_id?: number\n        key?: string\n        client_name?: string\n        status?: string\n      }>(gateway, path, 'POST', input, options, runtimeOptions)\n      return {\n        job_id: Number(data?.job_id ?? 0),\n        client_name: String(data?.client_name ?? input.client_name),\n        status: String(data?.status ?? 'pending'),\n        key: String(data?.key ?? backupKey),\n      }\n    },\n\n    async delete(key, options) {\n      const backupKey = requireKey(key)\n      await callBackupEndpoint(\n        gateway,\n        `/admin/backups/${encodeURIComponent(backupKey)}`,\n        'DELETE',\n        undefined,\n        options,\n        runtimeOptions,\n      )\n    },\n\n    downloadUrl(key, options) {\n      const backupKey = requireKey(key)\n      const base = `${resolvedBaseUrl()}/admin/backups/${encodeURIComponent(backupKey)}/download`\n      return options?.apiKey\n        ? `${base}?api_key=${encodeURIComponent(options.apiKey)}`\n        : base\n    },\n\n    jobs: {\n      async list(query, options) {\n        const path = appendQuery('/admin/backups/jobs', query ?? {})\n        const data = await callBackupEndpoint<\n          StorageBackupJob[] | { jobs?: StorageBackupJob[] }\n        >(gateway, path, 'GET', undefined, options, runtimeOptions)\n        if (Array.isArray(data)) return data\n        if (isRecord(data) && Array.isArray(data.jobs)) return data.jobs\n        return []\n      },\n      async get(jobId, options) {\n        return callBackupEndpoint(\n          gateway,\n          `/admin/backups/jobs/${encodeURIComponent(String(jobId))}`,\n          'GET',\n          undefined,\n          options,\n          runtimeOptions,\n        )\n      },\n      async cancel(jobId, options) {\n        return callBackupEndpoint(\n          gateway,\n          `/admin/backups/jobs/${encodeURIComponent(String(jobId))}/cancel`,\n          'POST',\n          {},\n          options,\n          runtimeOptions,\n        )\n      },\n      async delete(jobId, options) {\n        await callBackupEndpoint(\n          gateway,\n          `/admin/backups/jobs/${encodeURIComponent(String(jobId))}`,\n          'DELETE',\n          undefined,\n          options,\n          runtimeOptions,\n        )\n      },\n      async openObjectUrl(jobId, options) {\n        const data = await callBackupEndpoint<{ url?: string }>(\n          gateway,\n          `/admin/backups/jobs/${encodeURIComponent(String(jobId))}/s3-open`,\n          'GET',\n          undefined,\n          options,\n          runtimeOptions,\n        )\n        return String(data?.url ?? '')\n      },\n    },\n\n    schedules: {\n      async list(options) {\n        const data = await callBackupEndpoint<\n          StorageBackupSchedule[] | { schedules?: StorageBackupSchedule[] }\n        >(gateway, '/admin/backups/schedules', 'GET', undefined, options, runtimeOptions)\n        if (Array.isArray(data)) return data\n        if (isRecord(data) && Array.isArray(data.schedules)) return data.schedules\n        return []\n      },\n      async create(input, options) {\n        return callBackupEndpoint(\n          gateway,\n          '/admin/backups/schedules',\n          'POST',\n          input,\n          options,\n          runtimeOptions,\n        )\n      },\n      async update(id, input, options) {\n        return callBackupEndpoint(\n          gateway,\n          `/admin/backups/schedules/${encodeURIComponent(String(id))}`,\n          'PATCH',\n          input,\n          options,\n          runtimeOptions,\n        )\n      },\n      async delete(id, options) {\n        await callBackupEndpoint(\n          gateway,\n          `/admin/backups/schedules/${encodeURIComponent(String(id))}`,\n          'DELETE',\n          undefined,\n          options,\n          runtimeOptions,\n        )\n      },\n    },\n  }\n}\n","import type { AthenaGatewayClient } from '../gateway/client.ts'\nimport type {\n  AthenaGatewayCallOptions,\n  AthenaGatewayEndpointPath,\n  AthenaGatewayErrorCode,\n  AthenaGatewayMethod,\n} from '../gateway/types.ts'\nimport type {\n  AthenaErrorCategory,\n  AthenaErrorCode,\n  AthenaErrorKind,\n  NormalizedAthenaError,\n} from '../auxiliaries.ts'\nimport { normalizeAthenaError } from '../auxiliaries.ts'\nimport { isAthenaGatewayError } from '../gateway/errors.ts'\nimport { buildAthenaGatewayUrl, normalizeAthenaGatewayBaseUrl } from '../gateway/url.ts'\nimport { createStorageFileModule } from './file.ts'\nimport type { AthenaStorageFileConfig, AthenaStorageFileModule } from './file.ts'\nimport { createStorageBackupModule } from './backup.ts'\nimport type { AthenaStorageBackupNamespace } from './backup.ts'\n\nexport type {\n  AthenaStorageBackupNamespace,\n  BackupRecoveryStrategy,\n  StorageBackupCreateRequest,\n  StorageBackupJob,\n  StorageBackupListPage,\n  StorageBackupListQuery,\n  StorageBackupQueuedJob,\n  StorageBackupRecord,\n  StorageBackupRestoreRequest,\n  StorageBackupSchedule,\n  StorageBackupScheduleCreateRequest,\n} from './backup.ts'\n\nexport const storageSdkManifest = {\n  namespace: 'storage',\n  basePath: '/storage',\n  envelopeKinds: {\n    raw: 'response body is the payload',\n    athena: 'response body is { status, message, data }',\n  },\n  methods: [\n    {\n      name: 'listStorageCatalogs',\n      method: 'GET',\n      path: '/storage/catalogs',\n      responseEnvelope: 'raw',\n      responseType: '{ data: S3CatalogItem[] }',\n    },\n    {\n      name: 'createStorageCatalog',\n      method: 'POST',\n      path: '/storage/catalogs',\n      requestType: 'CreateStorageCatalogRequest',\n      responseEnvelope: 'raw',\n      responseType: 'S3CatalogItem',\n    },\n    {\n      name: 'updateStorageCatalog',\n      method: 'PATCH',\n      path: '/storage/catalogs/{id}',\n      pathParams: ['id'],\n      requestType: 'UpdateStorageCatalogRequest',\n      responseEnvelope: 'raw',\n      responseType: 'S3CatalogItem',\n    },\n    {\n      name: 'deleteStorageCatalog',\n      method: 'DELETE',\n      path: '/storage/catalogs/{id}',\n      pathParams: ['id'],\n      responseEnvelope: 'raw',\n      responseType: '{ id: string; deleted: boolean }',\n    },\n    {\n      name: 'listStorageCredentials',\n      method: 'GET',\n      path: '/storage/credentials',\n      responseEnvelope: 'raw',\n      responseType: '{ data: S3CredentialListItem[] }',\n    },\n    {\n      name: 'backup.list',\n      method: 'GET',\n      path: '/admin/backups',\n      responseEnvelope: 'athena',\n      responseType: 'StorageBackupListPage',\n      note: 'Admin backup archives on server S3/R2 profile',\n    },\n    {\n      name: 'backup.create',\n      method: 'POST',\n      path: '/admin/backups',\n      requestType: 'StorageBackupCreateRequest',\n      responseEnvelope: 'athena',\n      responseType: 'StorageBackupQueuedJob',\n    },\n    {\n      name: 'backup.restore',\n      method: 'POST',\n      path: '/admin/backups/{key}/restore',\n      pathParams: ['key'],\n      requestType: 'StorageBackupRestoreRequest',\n      responseEnvelope: 'athena',\n      responseType: 'StorageBackupQueuedJob',\n    },\n    {\n      name: 'backup.delete',\n      method: 'DELETE',\n      path: '/admin/backups/{key}',\n      pathParams: ['key'],\n      responseEnvelope: 'athena',\n      responseType: 'void',\n    },\n    {\n      name: 'backup.jobs.list',\n      method: 'GET',\n      path: '/admin/backups/jobs',\n      responseEnvelope: 'athena',\n      responseType: 'StorageBackupJob[]',\n    },\n    {\n      name: 'backup.schedules.list',\n      method: 'GET',\n      path: '/admin/backups/schedules',\n      responseEnvelope: 'athena',\n      responseType: 'StorageBackupSchedule[]',\n    },\n    {\n      name: 'createStorageUploadUrl',\n      method: 'POST',\n      path: '/storage/files/upload-url',\n      requestType: 'CreateStorageUploadUrlRequest',\n      responseEnvelope: 'athena',\n      responseType: 'StorageUploadUrlResponse',\n    },\n    {\n      name: 'createStorageUploadUrls',\n      method: 'POST',\n      path: '/storage/files/upload-urls',\n      requestType: 'CreateStorageUploadUrlsRequest',\n      responseEnvelope: 'athena',\n      responseType: 'StorageBatchUploadUrlResponse',\n    },\n    {\n      name: 'listStorageFiles',\n      method: 'POST',\n      path: '/storage/files/list',\n      requestType: 'ListStorageFilesRequest',\n      responseEnvelope: 'athena',\n      responseType: 'StorageListFilesResponse',\n    },\n    {\n      name: 'getStorageFile',\n      method: 'GET',\n      path: '/storage/files/{file_id}',\n      pathParams: ['file_id'],\n      responseEnvelope: 'athena',\n      responseType: 'StorageFileMutationResponse',\n    },\n    {\n      name: 'getStorageFileUrl',\n      method: 'GET',\n      path: '/storage/files/{file_id}/url',\n      pathParams: ['file_id'],\n      queryParams: ['purpose'],\n      responseEnvelope: 'athena',\n      responseType: 'PresignedFileUrlResponse',\n    },\n    {\n      name: 'getStorageFileProxy',\n      method: 'GET',\n      path: '/storage/files/{file_id}/proxy',\n      pathParams: ['file_id'],\n      queryParams: ['purpose'],\n      responseEnvelope: 'raw',\n      responseType: 'Response',\n      binary: true,\n    },\n    {\n      name: 'updateStorageFile',\n      method: 'PATCH',\n      path: '/storage/files/{file_id}',\n      pathParams: ['file_id'],\n      requestType: 'UpdateStorageFileRequest',\n      responseEnvelope: 'athena',\n      responseType: 'StorageFileMutationResponse',\n    },\n    {\n      name: 'deleteStorageFile',\n      method: 'DELETE',\n      path: '/storage/files/{file_id}',\n      pathParams: ['file_id'],\n      responseEnvelope: 'athena',\n      responseType: 'StorageFileMutationResponse',\n    },\n    {\n      name: 'setStorageFileVisibility',\n      method: 'PATCH',\n      path: '/storage/files/{file_id}/visibility',\n      pathParams: ['file_id'],\n      requestType: 'SetStorageFileVisibilityRequest',\n      responseEnvelope: 'athena',\n      responseType: 'StorageFileMutationResponse',\n    },\n    {\n      name: 'postStorageFileVisibility',\n      method: 'POST',\n      path: '/storage/files/{file_id}/visibility',\n      pathParams: ['file_id'],\n      requestType: 'SetStorageFileVisibilityRequest',\n      responseEnvelope: 'athena',\n      responseType: 'StorageFileMutationResponse',\n    },\n    {\n      name: 'setManyStorageFileVisibility',\n      method: 'POST',\n      path: '/storage/files/visibility-many',\n      requestType: 'SetManyStorageFileVisibilityRequest',\n      responseEnvelope: 'athena',\n      responseType: 'StorageFileMutationManyResponse',\n    },\n    {\n      name: 'deleteStorageFolder',\n      method: 'POST',\n      path: '/storage/folders/delete',\n      requestType: 'DeleteStorageFolderRequest',\n      responseEnvelope: 'athena',\n      responseType: 'StorageFolderMutationResponse',\n    },\n    {\n      name: 'moveStorageFolder',\n      method: 'POST',\n      path: '/storage/folders/move',\n      requestType: 'MoveStorageFolderRequest',\n      responseEnvelope: 'athena',\n      responseType: 'StorageFolderMutationResponse',\n    },\n    {\n      name: 'searchStorageFiles',\n      method: 'POST',\n      path: '/storage/files/search',\n      requestType: 'SearchStorageFilesRequest',\n      responseEnvelope: 'athena',\n      responseType: 'StorageListFilesResponse',\n    },\n    {\n      name: 'confirmStorageUpload',\n      method: 'POST',\n      path: '/storage/files/{file_id}/confirm-upload',\n      pathParams: ['file_id'],\n      requestType: 'ConfirmStorageUploadRequest',\n      responseEnvelope: 'athena',\n      responseType: 'StorageFileMutationResponse',\n    },\n    {\n      name: 'uploadStorageFileBinary',\n      method: 'PUT',\n      path: '/storage/files/{file_id}/upload',\n      pathParams: ['file_id'],\n      responseEnvelope: 'athena',\n      responseType: 'StorageFileMutationResponse',\n      binary: true,\n    },\n    {\n      name: 'copyStorageFile',\n      method: 'POST',\n      path: '/storage/files/{file_id}/copy',\n      pathParams: ['file_id'],\n      requestType: 'CopyStorageFileRequest',\n      responseEnvelope: 'athena',\n      responseType: 'StorageFileMutationResponse',\n    },\n    {\n      name: 'deleteManyStorageFiles',\n      method: 'POST',\n      path: '/storage/files/delete-many',\n      requestType: 'DeleteManyStorageFilesRequest',\n      responseEnvelope: 'athena',\n      responseType: 'StorageFileMutationManyResponse',\n    },\n    {\n      name: 'updateManyStorageFiles',\n      method: 'POST',\n      path: '/storage/files/update-many',\n      requestType: 'UpdateManyStorageFilesRequest',\n      responseEnvelope: 'athena',\n      responseType: 'StorageFileMutationManyResponse',\n    },\n    {\n      name: 'restoreStorageFile',\n      method: 'POST',\n      path: '/storage/files/{file_id}/restore',\n      pathParams: ['file_id'],\n      responseEnvelope: 'athena',\n      responseType: 'StorageFileMutationResponse',\n    },\n    {\n      name: 'purgeStorageFile',\n      method: 'DELETE',\n      path: '/storage/files/{file_id}/purge',\n      pathParams: ['file_id'],\n      responseEnvelope: 'athena',\n      responseType: 'StorageFileMutationResponse',\n    },\n    {\n      name: 'getStorageFilePublicUrl',\n      method: 'GET',\n      path: '/storage/files/{file_id}/public-url',\n      pathParams: ['file_id'],\n      responseEnvelope: 'athena',\n      responseType: 'Record<string, unknown>',\n    },\n    {\n      name: 'getStorageFileProxyUrl',\n      method: 'GET',\n      path: '/storage/files/{file_id}/proxy-url',\n      pathParams: ['file_id'],\n      queryParams: ['purpose'],\n      responseEnvelope: 'athena',\n      responseType: 'Record<string, unknown>',\n    },\n    {\n      name: 'listStorageFileVersions',\n      method: 'GET',\n      path: '/storage/files/{file_id}/versions',\n      pathParams: ['file_id'],\n      responseEnvelope: 'athena',\n      responseType: 'Record<string, unknown>',\n    },\n    {\n      name: 'restoreStorageFileVersion',\n      method: 'POST',\n      path: '/storage/files/{file_id}/versions/{version_id}/restore',\n      pathParams: ['file_id', 'version_id'],\n      responseEnvelope: 'athena',\n      responseType: 'Record<string, unknown>',\n    },\n    {\n      name: 'deleteStorageFileVersion',\n      method: 'DELETE',\n      path: '/storage/files/{file_id}/versions/{version_id}',\n      pathParams: ['file_id', 'version_id'],\n      responseEnvelope: 'athena',\n      responseType: 'Record<string, unknown>',\n    },\n    {\n      name: 'getStorageFileRetention',\n      method: 'GET',\n      path: '/storage/files/{file_id}/retention',\n      pathParams: ['file_id'],\n      queryParams: ['version_id'],\n      responseEnvelope: 'athena',\n      responseType: 'Record<string, unknown>',\n    },\n    {\n      name: 'setStorageFileRetention',\n      method: 'POST',\n      path: '/storage/files/{file_id}/retention',\n      pathParams: ['file_id'],\n      requestType: 'StorageFileRetentionRequest',\n      responseEnvelope: 'athena',\n      responseType: 'Record<string, unknown>',\n    },\n    {\n      name: 'listStorageFolders',\n      method: 'POST',\n      path: '/storage/folders/list',\n      requestType: 'ListStorageFoldersRequest',\n      responseEnvelope: 'athena',\n      responseType: 'Record<string, unknown>',\n    },\n    {\n      name: 'treeStorageFolders',\n      method: 'POST',\n      path: '/storage/folders/tree',\n      requestType: 'TreeStorageFoldersRequest',\n      responseEnvelope: 'athena',\n      responseType: 'Record<string, unknown>',\n    },\n    {\n      name: 'listStoragePermissions',\n      method: 'POST',\n      path: '/storage/permissions/list',\n      requestType: 'StoragePermissionListRequest',\n      responseEnvelope: 'athena',\n      responseType: 'StoragePermissionListResponse',\n    },\n    {\n      name: 'grantStoragePermission',\n      method: 'POST',\n      path: '/storage/permissions/grant',\n      requestType: 'StoragePermissionGrantRequest',\n      responseEnvelope: 'athena',\n      responseType: 'Record<string, unknown>',\n    },\n    {\n      name: 'revokeStoragePermission',\n      method: 'POST',\n      path: '/storage/permissions/revoke',\n      requestType: 'StoragePermissionRevokeRequest',\n      responseEnvelope: 'athena',\n      responseType: 'Record<string, unknown>',\n    },\n    {\n      name: 'checkStoragePermission',\n      method: 'POST',\n      path: '/storage/permissions/check',\n      requestType: 'StoragePermissionCheckRequest',\n      responseEnvelope: 'athena',\n      responseType: 'StoragePermissionCheckResponse',\n    },\n    {\n      name: 'listStorageObjects',\n      method: 'POST',\n      path: '/storage/objects',\n      requestType: 'StorageListObjectsRequest',\n      responseEnvelope: 'athena',\n      responseType: 'Record<string, unknown>',\n    },\n    {\n      name: 'headStorageObject',\n      method: 'POST',\n      path: '/storage/objects/head',\n      requestType: 'StorageObjectRequest',\n      responseEnvelope: 'athena',\n      responseType: 'Record<string, unknown>',\n    },\n    {\n      name: 'existsStorageObject',\n      method: 'POST',\n      path: '/storage/objects/exists',\n      requestType: 'StorageObjectRequest',\n      responseEnvelope: 'athena',\n      responseType: 'Record<string, unknown>',\n    },\n    {\n      name: 'validateStorageObject',\n      method: 'POST',\n      path: '/storage/objects/validate',\n      requestType: 'StorageObjectValidateRequest',\n      responseEnvelope: 'athena',\n      responseType: 'Record<string, unknown>',\n    },\n    {\n      name: 'updateStorageObject',\n      method: 'POST',\n      path: '/storage/objects/update',\n      requestType: 'StorageUpdateObjectRequest',\n      responseEnvelope: 'athena',\n      responseType: 'Record<string, unknown>',\n    },\n    {\n      name: 'copyStorageObject',\n      method: 'POST',\n      path: '/storage/objects/copy',\n      requestType: 'StorageObjectCopyRequest',\n      responseEnvelope: 'athena',\n      responseType: 'Record<string, unknown>',\n    },\n    {\n      name: 'getStorageObjectUrl',\n      method: 'POST',\n      path: '/storage/objects/url',\n      requestType: 'StorageObjectRequest',\n      responseEnvelope: 'athena',\n      responseType: 'Record<string, unknown>',\n    },\n    {\n      name: 'getStorageObjectPublicUrl',\n      method: 'POST',\n      path: '/storage/objects/public-url',\n      requestType: 'StorageObjectPublicUrlRequest',\n      responseEnvelope: 'athena',\n      responseType: 'Record<string, unknown>',\n    },\n    {\n      name: 'deleteStorageObject',\n      method: 'POST',\n      path: '/storage/objects/delete',\n      requestType: 'StorageObjectRequest',\n      responseEnvelope: 'athena',\n      responseType: 'Record<string, unknown>',\n    },\n    {\n      name: 'createStorageObjectUploadUrl',\n      method: 'POST',\n      path: '/storage/objects/upload-url',\n      requestType: 'StoragePresignUploadRequest',\n      responseEnvelope: 'athena',\n      responseType: 'Record<string, unknown>',\n    },\n    {\n      name: 'createStorageObjectPostPolicy',\n      method: 'POST',\n      path: '/storage/objects/post-policy',\n      requestType: 'StorageSignedPostPolicyRequest',\n      responseEnvelope: 'athena',\n      responseType: 'Record<string, unknown>',\n    },\n    {\n      name: 'listStorageObjectVersions',\n      method: 'POST',\n      path: '/storage/objects/versions',\n      requestType: 'StorageObjectVersionListRequest',\n      responseEnvelope: 'athena',\n      responseType: 'Record<string, unknown>',\n    },\n    {\n      name: 'restoreStorageObjectVersion',\n      method: 'POST',\n      path: '/storage/objects/versions/restore',\n      requestType: 'StorageObjectVersionMutationRequest',\n      responseEnvelope: 'athena',\n      responseType: 'Record<string, unknown>',\n    },\n    {\n      name: 'deleteStorageObjectVersion',\n      method: 'POST',\n      path: '/storage/objects/versions/delete',\n      requestType: 'StorageObjectVersionMutationRequest',\n      responseEnvelope: 'athena',\n      responseType: 'Record<string, unknown>',\n    },\n    {\n      name: 'createStorageObjectFolder',\n      method: 'POST',\n      path: '/storage/objects/folder',\n      requestType: 'StorageObjectFolderCreateRequest',\n      responseEnvelope: 'athena',\n      responseType: 'Record<string, unknown>',\n    },\n    {\n      name: 'deleteStorageObjectFolder',\n      method: 'POST',\n      path: '/storage/objects/folder/delete',\n      requestType: 'StorageObjectFolderDeleteRequest',\n      responseEnvelope: 'athena',\n      responseType: 'Record<string, unknown>',\n    },\n    {\n      name: 'renameStorageObjectFolder',\n      method: 'POST',\n      path: '/storage/objects/folder/rename',\n      requestType: 'StorageObjectFolderRenameRequest',\n      responseEnvelope: 'athena',\n      responseType: 'Record<string, unknown>',\n    },\n    {\n      name: 'listStorageBuckets',\n      method: 'POST',\n      path: '/storage/buckets/list',\n      requestType: \"Omit<StorageObjectBaseRequest, 'bucket'>\",\n      responseEnvelope: 'athena',\n      responseType: 'Record<string, unknown>',\n    },\n    {\n      name: 'createStorageBucket',\n      method: 'POST',\n      path: '/storage/buckets/create',\n      requestType: 'StorageObjectBaseRequest',\n      responseEnvelope: 'athena',\n      responseType: 'Record<string, unknown>',\n    },\n    {\n      name: 'deleteStorageBucket',\n      method: 'POST',\n      path: '/storage/buckets/delete',\n      requestType: 'StorageObjectBaseRequest',\n      responseEnvelope: 'athena',\n      responseType: 'Record<string, unknown>',\n    },\n    {\n      name: 'getStorageBucketLifecycle',\n      method: 'POST',\n      path: '/storage/buckets/lifecycle',\n      requestType: 'StorageBucketLifecycleRequest',\n      responseEnvelope: 'athena',\n      responseType: 'Record<string, unknown>',\n    },\n    {\n      name: 'setStorageBucketLifecycle',\n      method: 'POST',\n      path: '/storage/buckets/lifecycle/set',\n      requestType: 'StorageSetBucketLifecycleRequest',\n      responseEnvelope: 'athena',\n      responseType: 'Record<string, unknown>',\n    },\n    {\n      name: 'deleteStorageBucketLifecycle',\n      method: 'POST',\n      path: '/storage/buckets/lifecycle/delete',\n      requestType: 'StorageBucketLifecycleRequest',\n      responseEnvelope: 'athena',\n      responseType: 'Record<string, unknown>',\n    },\n    {\n      name: 'getStorageBucketPolicy',\n      method: 'POST',\n      path: '/storage/buckets/policy',\n      requestType: 'StorageBucketPolicyRequest',\n      responseEnvelope: 'athena',\n      responseType: 'Record<string, unknown>',\n    },\n    {\n      name: 'setStorageBucketPolicy',\n      method: 'POST',\n      path: '/storage/buckets/policy/set',\n      requestType: 'StorageSetBucketPolicyRequest',\n      responseEnvelope: 'athena',\n      responseType: 'Record<string, unknown>',\n    },\n    {\n      name: 'deleteStorageBucketPolicy',\n      method: 'POST',\n      path: '/storage/buckets/policy/delete',\n      requestType: 'StorageBucketPolicyRequest',\n      responseEnvelope: 'athena',\n      responseType: 'Record<string, unknown>',\n    },\n    {\n      name: 'getStorageBucketPublicAccess',\n      method: 'POST',\n      path: '/storage/buckets/public-access',\n      requestType: 'StoragePublicAccessBlockRequest',\n      responseEnvelope: 'athena',\n      responseType: 'Record<string, unknown>',\n    },\n    {\n      name: 'setStorageBucketPublicAccess',\n      method: 'POST',\n      path: '/storage/buckets/public-access/set',\n      requestType: 'StorageSetPublicAccessBlockRequest',\n      responseEnvelope: 'athena',\n      responseType: 'Record<string, unknown>',\n    },\n    {\n      name: 'deleteStorageBucketPublicAccess',\n      method: 'POST',\n      path: '/storage/buckets/public-access/delete',\n      requestType: 'StoragePublicAccessBlockRequest',\n      responseEnvelope: 'athena',\n      responseType: 'Record<string, unknown>',\n    },\n    {\n      name: 'getStorageBucketCors',\n      method: 'POST',\n      path: '/storage/buckets/cors',\n      requestType: 'StorageBucketCorsRequest',\n      responseEnvelope: 'athena',\n      responseType: 'Record<string, unknown>',\n    },\n    {\n      name: 'setStorageBucketCors',\n      method: 'POST',\n      path: '/storage/buckets/cors/set',\n      requestType: 'StorageSetBucketCorsRequest',\n      responseEnvelope: 'athena',\n      responseType: 'Record<string, unknown>',\n    },\n    {\n      name: 'deleteStorageBucketCors',\n      method: 'POST',\n      path: '/storage/buckets/cors/delete',\n      requestType: 'StorageBucketCorsRequest',\n      responseEnvelope: 'athena',\n      responseType: 'Record<string, unknown>',\n    },\n    {\n      name: 'createStorageMultipartUpload',\n      method: 'POST',\n      path: '/storage/multipart/create',\n      requestType: 'StorageMultipartCreateRequest',\n      responseEnvelope: 'athena',\n      responseType: 'Record<string, unknown>',\n    },\n    {\n      name: 'signStorageMultipartPart',\n      method: 'POST',\n      path: '/storage/multipart/sign-part',\n      requestType: 'StorageMultipartSignPartRequest',\n      responseEnvelope: 'athena',\n      responseType: 'Record<string, unknown>',\n    },\n    {\n      name: 'completeStorageMultipartUpload',\n      method: 'POST',\n      path: '/storage/multipart/complete',\n      requestType: 'StorageMultipartCompleteRequest',\n      responseEnvelope: 'athena',\n      responseType: 'StorageFileMutationResponse',\n    },\n    {\n      name: 'abortStorageMultipartUpload',\n      method: 'POST',\n      path: '/storage/multipart/abort',\n      requestType: 'StorageMultipartAbortRequest',\n      responseEnvelope: 'athena',\n      responseType: 'Record<string, unknown>',\n    },\n    {\n      name: 'listStorageMultipartParts',\n      method: 'POST',\n      path: '/storage/multipart/list-parts',\n      requestType: 'StorageMultipartListPartsRequest',\n      responseEnvelope: 'athena',\n      responseType: 'Record<string, unknown>',\n    },\n    {\n      name: 'listStorageAuditEvents',\n      method: 'POST',\n      path: '/storage/audit/list',\n      requestType: 'StorageAuditQueryRequest',\n      responseEnvelope: 'athena',\n      responseType: 'StorageAuditListResponse',\n    },\n  ],\n} as const\n\nexport interface S3CatalogItem {\n  id: string\n  name: string\n  endpoint?: string | null\n  region?: string | null\n  bucket: string\n  provider: string\n  force_path_style: boolean\n  default_prefix?: string | null\n  public_base_url?: string | null\n  is_active: boolean\n  metadata: Record<string, unknown>\n  created_at: string\n  updated_at: string\n}\n\nexport interface S3CredentialListItem {\n  id: string\n  s3_id: string\n  name: string\n  endpoint?: string | null\n  region?: string | null\n  bucket: string\n  provider: string\n  access_key: string\n  is_active: boolean\n  created_at: string\n  rotated_at?: string | null\n}\n\nexport interface ManagedFileRecord {\n  id: string\n  name: string\n  original_name?: string | null\n  file_name?: string | null\n  url?: string | null\n  bucket: string\n  s3_id?: string | null\n  prefix_path?: string | null\n  size_bytes?: number | null\n  mime_type?: string | null\n  content_type?: string | null\n  resource_id?: string | null\n  organization_id?: string | null\n  created_by_user_id?: string | null\n  uploaded_by_user_id?: string | null\n  checksum_sha256?: string | null\n  metadata: Record<string, unknown>\n  created_at: string\n  updated_at: string\n  storage_key: string\n  extension?: string | null\n  visibility?: 'private' | 'organization' | 'public'\n  is_public: boolean\n  status: string\n  deleted_at?: string | null\n}\n\nexport interface PresignedFileUrlResponse {\n  file_id: string\n  bucket: string\n  storage_key: string\n  purpose: string\n  url: string\n  headers?: Record<string, string>\n  expires_at: string\n  expires_at_epoch_seconds: number\n  expires_in: number\n  cache_hit: boolean\n  cache_layer: string\n}\n\nexport interface StorageServerSideEncryptionOptions {\n  server_side_encryption?: 'AES256' | 'aws:kms' | 'aws:kms:dsse' | (string & {})\n  sse?: 'AES256' | 'aws:kms' | 'aws:kms:dsse' | (string & {})\n  ssekms_key_id?: string\n  kms_key_id?: string\n  bucket_key_enabled?: boolean\n}\n\nexport interface CreateStorageCatalogRequest {\n  name: string\n  /**\n   * S3-compatible API endpoint.\n   * Optional when `provider` is R2 and `account_id` (or `metadata.account_id`) is set;\n   * the Athena server derives `https://{account_id}.r2.cloudflarestorage.com`.\n   */\n  endpoint?: string\n  /**\n   * Region. Optional for R2 (server defaults to `auto` after normalize).\n   */\n  region?: string\n  bucket: string\n  /** Storage provider: `s3` or `r2`; aliases include `aws`, `aws_s3`, `cloudflare_r2`, and `cloudflare-r2`. */\n  provider?: string\n  /**\n   * Cloudflare account ID for R2 catalogs when endpoint is omitted.\n   * Also accepted under `metadata.account_id`.\n   */\n  account_id?: string\n  force_path_style?: boolean\n  default_prefix?: string\n  public_base_url?: string\n  access_key_id: string\n  secret_key: string\n  session_token?: string\n  metadata?: Record<string, unknown>\n}\n\nexport interface UpdateStorageCatalogRequest {\n  name?: string\n  endpoint?: string\n  region?: string\n  bucket?: string\n  provider?: string\n  /** Cloudflare account ID for R2 (merged into metadata / endpoint derivation). */\n  account_id?: string\n  force_path_style?: boolean\n  default_prefix?: string | null\n  public_base_url?: string | null\n  access_key_id?: string\n  secret_key?: string\n  session_token?: string\n  is_active?: boolean\n  metadata?: Record<string, unknown>\n}\n\nexport interface CreateStorageUploadUrlRequest extends StorageServerSideEncryptionOptions {\n  s3_id: string\n  bucket?: string\n  storage_key: string\n  name?: string\n  original_name?: string\n  resource_id?: string\n  mime_type?: string\n  content_type?: string\n  size_bytes?: number\n  file_id?: string\n  public?: boolean\n  visibility?: 'private' | 'organization' | 'public'\n  metadata?: Record<string, unknown>\n}\n\nexport interface CreateStorageUploadUrlsRequest {\n  files: CreateStorageUploadUrlRequest[]\n}\n\nexport interface StorageUploadUrlResponse {\n  file: ManagedFileRecord\n  upload: PresignedFileUrlResponse\n}\n\nexport interface StorageBatchUploadUrlResponse {\n  files: StorageUploadUrlResponse[]\n}\n\nexport interface ListStorageFilesRequest {\n  s3_id: string\n  prefix?: string\n  limit?: number\n  offset?: number\n  metadata?: Record<string, unknown>\n  name?: string\n  resource_id?: string\n  mime_type?: string\n  content_type?: string\n  status?: string\n  visibility?: 'private' | 'organization' | 'public' | (string & {})\n  bucket?: string\n  key_prefix?: string\n}\n\nexport interface StorageListFilesResponse {\n  files: ManagedFileRecord[]\n  count: number\n  total?: number\n  limit?: number\n  offset?: number\n  next_offset?: number | null\n  has_more?: boolean\n}\n\nexport interface UpdateStorageFileRequest {\n  storage_key?: string\n  bucket?: string\n  name?: string\n  file_name?: string\n  original_name?: string\n  resource_id?: string\n  mime_type?: string\n  content_type?: string\n  size_bytes?: number\n  checksum_sha256?: string\n  visibility?: 'private' | 'organization' | 'public' | (string & {})\n  status?: string\n  metadata?: Record<string, unknown>\n}\n\nexport interface SetStorageFileVisibilityRequest {\n  public?: boolean\n  visibility?: 'private' | 'organization' | 'public'\n}\n\nexport interface DeleteStorageFolderRequest {\n  s3_id: string\n  prefix: string\n}\n\nexport interface MoveStorageFolderRequest {\n  s3_id: string\n  from_prefix: string\n  to_prefix: string\n}\n\nexport interface StorageFileMutationResponse {\n  file: ManagedFileRecord\n}\n\nexport interface StorageFolderMutationResponse {\n  s3_id: string\n  prefix: string\n  processed_files: number\n}\n\nexport interface StorageFileMutationManyResponse {\n  files: ManagedFileRecord[]\n  count: number\n}\n\nexport interface StorageFilePermissionRecord {\n  id: string\n  file_id: string\n  principal_type: 'user' | 'organization' | 'team' | 'role'\n  principal_id: string\n  permission: 'read' | 'write' | 'delete' | 'share' | 'owner'\n  granted_by_user_id?: string | null\n  created_at: string\n  expires_at?: string | null\n  revoked_at?: string | null\n  metadata: Record<string, unknown>\n}\n\nexport interface StoragePermissionListResponse {\n  permissions: StorageFilePermissionRecord[]\n  count: number\n}\n\nexport interface StoragePermissionCheckResponse {\n  allowed: boolean\n  permission: string\n}\n\nexport interface StorageAuditEventRecord {\n  id: string\n  operation: string\n  file_id?: string | null\n  s3_id?: string | null\n  bucket?: string | null\n  storage_key?: string | null\n  actor_user_id?: string | null\n  organization_id?: string | null\n  status: 'success' | 'error'\n  error?: string | null\n  metadata: Record<string, unknown>\n  created_at: string\n}\n\nexport interface StorageAuditListResponse {\n  events: StorageAuditEventRecord[]\n  count: number\n}\n\nexport interface ConfirmStorageUploadRequest {\n  size_bytes?: number\n  content_type?: string\n  checksum_sha256?: string\n  metadata?: Record<string, unknown>\n}\n\nexport interface SearchStorageFilesRequest {\n  query?: string\n  limit?: number\n  offset?: number\n  s3_id?: string\n  prefix?: string\n  metadata?: Record<string, unknown>\n  name?: string\n  resource_id?: string\n  mime_type?: string\n  content_type?: string\n  status?: string\n  visibility?: 'private' | 'organization' | 'public' | (string & {})\n  bucket?: string\n  key_prefix?: string\n}\n\nexport interface DeleteManyStorageFilesRequest {\n  file_ids: string[]\n}\n\nexport interface UpdateManyStorageFilesRequest {\n  file_ids: string[]\n  storage_key?: string\n  bucket?: string\n  name?: string\n  file_name?: string\n  original_name?: string\n  resource_id?: string\n  mime_type?: string\n  content_type?: string\n  size_bytes?: number\n  checksum_sha256?: string\n  visibility?: 'private' | 'organization' | 'public' | (string & {})\n  status?: string\n  metadata?: Record<string, unknown>\n}\n\nexport interface SetManyStorageFileVisibilityRequest {\n  file_ids: string[]\n  public?: boolean\n  visibility?: 'private' | 'organization' | 'public'\n}\n\nexport interface CopyStorageFileRequest extends StorageServerSideEncryptionOptions {\n  storage_key: string\n  bucket?: string\n  file_name?: string\n  visibility?: 'private' | 'organization' | 'public'\n  metadata?: Record<string, unknown>\n}\n\nexport interface ListStorageFoldersRequest {\n  s3_id: string\n  prefix: string\n}\n\nexport interface TreeStorageFoldersRequest {\n  s3_id: string\n  prefix: string\n}\n\nexport interface StoragePermissionListRequest {\n  file_id: string\n}\n\nexport interface StoragePermissionGrantRequest {\n  file_id: string\n  principal_type: 'user' | 'organization' | 'team' | 'role'\n  principal_id: string\n  permission: 'read' | 'write' | 'delete' | 'share' | 'owner'\n  expires_at?: string\n  metadata?: Record<string, unknown>\n}\n\nexport interface StoragePermissionRevokeRequest {\n  file_id: string\n  principal_type: 'user' | 'organization' | 'team' | 'role'\n  principal_id: string\n  permission: 'read' | 'write' | 'delete' | 'share' | 'owner'\n}\n\nexport interface StoragePermissionCheckRequest {\n  file_id: string\n  permission: 'read' | 'write' | 'delete' | 'share' | 'owner'\n}\n\nexport interface StorageMultipartCreateRequest extends StorageServerSideEncryptionOptions {\n  file_id: string\n  content_type?: string\n}\n\nexport interface StorageMultipartSignPartRequest {\n  file_id: string\n  upload_id: string\n  part_number: number\n}\n\nexport interface StorageMultipartCompletePartInput {\n  part_number: number\n  etag: string\n}\n\nexport interface StorageMultipartCompleteRequest {\n  file_id: string\n  upload_id: string\n  parts: StorageMultipartCompletePartInput[]\n}\n\nexport interface StorageMultipartAbortRequest {\n  file_id: string\n  upload_id: string\n}\n\nexport interface StorageMultipartListPartsRequest {\n  file_id: string\n  upload_id: string\n}\n\nexport interface DeprecatedInlineStorageConnectionFields {\n  provider?: string\n  /**\n   * @deprecated Prefer `s3_id` / `s3Id` and a managed storage catalog.\n   */\n  endpoint?: string\n  /**\n   * @deprecated Prefer `s3_id` / `s3Id` and a managed storage catalog.\n   */\n  region?: string\n  /**\n   * @deprecated Prefer `s3_id` / `s3Id` and a managed storage catalog.\n   */\n  access_key_id?: string\n  /**\n   * @deprecated Prefer `s3_id` / `s3Id` and a managed storage catalog.\n   */\n  secret_key?: string\n  /**\n   * @deprecated Prefer `s3_id` / `s3Id` and a managed storage catalog.\n   */\n  session_token?: string\n}\n\nexport type StorageConnectionSelector =\n  | ({\n      s3_id: string\n      s3Id?: string\n    } & DeprecatedInlineStorageConnectionFields)\n  | ({\n      s3_id?: string\n      s3Id: string\n    } & DeprecatedInlineStorageConnectionFields)\n  | ({\n      s3_id?: string\n      s3Id?: string\n      endpoint: string\n      region: string\n      access_key_id: string\n      secret_key: string\n    } & DeprecatedInlineStorageConnectionFields)\n\nexport type StorageObjectFolderCreateRequest = StorageConnectionSelector & {\n  bucket: string\n  prefix: string\n}\n\nexport type StorageObjectFolderDeleteRequest = StorageObjectFolderCreateRequest\n\nexport interface StorageObjectFolderRenameRequest extends Omit<StorageObjectFolderCreateRequest, 'prefix'> {\n  from_prefix: string\n  to_prefix: string\n}\n\nexport type StorageObjectBaseRequest = StorageConnectionSelector & {\n  bucket: string\n}\n\nexport type StorageObjectRequest = StorageObjectBaseRequest & {\n  key: string\n}\n\nexport type StorageObjectValidateRequest = StorageObjectRequest & {\n  checksum_sha256?: string\n  etag?: string\n}\n\nexport type StorageObjectCopyRequest = StorageObjectBaseRequest &\n  StorageServerSideEncryptionOptions & {\n  source_key: string\n  destination_key: string\n  destination_bucket?: string\n}\n\nexport type StorageObjectPublicUrlRequest = StorageObjectRequest & {\n  public_base_url?: string\n  force_path_style?: boolean\n}\n\nexport type StorageListObjectsRequest = StorageObjectBaseRequest & {\n  prefix?: string\n  delimiter?: string\n  continuation_token?: string\n  max_keys?: number\n}\n\nexport type StorageUpdateObjectRequest = StorageObjectRequest & {\n  acl?: string\n  content_type?: string\n  cache_control?: string\n  content_disposition?: string\n  content_encoding?: string\n  content_language?: string\n  metadata?: Record<string, string>\n}\n\nexport type StorageObjectVersionListRequest = StorageObjectBaseRequest & {\n  key?: string\n  max_keys?: number\n  key_marker?: string\n  version_id_marker?: string\n  delimiter?: string\n}\n\nexport type StorageObjectVersionMutationRequest = StorageObjectRequest & {\n  version_id: string\n}\n\nexport type StorageSignedPostPolicyRequest = StorageObjectRequest &\n  StorageServerSideEncryptionOptions & {\n  content_type?: string\n  min_size?: number\n  max_size?: number\n  expires_in?: number\n  public_base_url?: string\n  force_path_style?: boolean\n  success_action_status?: string\n}\n\nexport type StoragePresignUploadRequest = StorageObjectRequest &\n  StorageServerSideEncryptionOptions & {\n  content_type?: string\n}\n\nexport type StorageBucketCorsRequest = StorageObjectBaseRequest\n\nexport interface StorageBucketCorsRuleInput {\n  allowed_origins: string[]\n  allowed_methods: string[]\n  allowed_headers?: string[]\n  expose_headers?: string[]\n  max_age_seconds?: number\n}\n\nexport type StorageSetBucketCorsRequest = StorageBucketCorsRequest & {\n  rules: StorageBucketCorsRuleInput[]\n}\n\nexport type StorageBucketLifecycleRequest = StorageObjectBaseRequest\n\nexport interface StorageBucketLifecycleRuleInput {\n  id?: string\n  prefix?: string\n  status?: 'Enabled' | 'Disabled' | 'enabled' | 'disabled' | (string & {})\n  expiration_days?: number\n  expired_object_delete_marker?: boolean\n  noncurrent_version_expiration_days?: number\n  abort_incomplete_multipart_upload_days?: number\n}\n\nexport type StorageSetBucketLifecycleRequest = StorageBucketLifecycleRequest & {\n  rules: StorageBucketLifecycleRuleInput[]\n}\n\nexport type StorageBucketPolicyRequest = StorageObjectBaseRequest\n\nexport type StorageSetBucketPolicyRequest = StorageBucketPolicyRequest & {\n  policy: Record<string, unknown> | string\n}\n\nexport type StoragePublicAccessBlockRequest = StorageObjectBaseRequest\n\nexport type StorageSetPublicAccessBlockRequest = StoragePublicAccessBlockRequest & {\n  block_public_acls?: boolean\n  ignore_public_acls?: boolean\n  block_public_policy?: boolean\n  restrict_public_buckets?: boolean\n}\n\nexport interface StorageFileVersionPathRequest {\n  file_id: string\n  version_id: string\n}\n\nexport interface StorageFileRetentionRequest {\n  mode?: 'GOVERNANCE' | 'COMPLIANCE' | (string & {})\n  retain_until?: string\n  retain_until_date?: string\n  version_id?: string\n  bypass_governance?: boolean\n}\n\nexport interface StorageAuditQueryRequest {\n  file_id?: string\n  limit?: number\n  offset?: number\n}\n\nexport interface AthenaEnvelope<T> {\n  status: string\n  message: string\n  data: T\n}\n\nexport type StorageFileAccessPurpose = 'read' | 'download' | 'stream'\n\nexport interface GetStorageFileUrlQuery {\n  purpose?: StorageFileAccessPurpose | (string & {})\n}\n\nexport type AthenaStorageErrorHandler = (error: AthenaStorageError) => void | Promise<void>\n\nexport interface AthenaStorageClientConfig extends AthenaStorageFileConfig {\n  onError?: AthenaStorageErrorHandler\n}\n\n/**\n * Credentials for signing the direct upload PUT in the client.\n * The Athena API still creates managed-file metadata so the public upload\n * result remains unchanged; file bytes go directly to this S3-compatible endpoint.\n */\nexport interface AthenaStorageDirectUploadConfig {\n  endpoint: string\n  bucket?: string\n  region?: string\n  accessKeyId: string\n  secretAccessKey: string\n  sessionToken?: string\n  /** R2 uses path-style addressing by default. */\n  forcePathStyle?: boolean\n}\n\nexport interface AthenaStorageCallOptions extends AthenaGatewayCallOptions {\n  signal?: AbortSignal\n  onError?: AthenaStorageErrorHandler\n}\n\nexport type AthenaStorageBinaryCallOptions = AthenaStorageCallOptions\n\nexport type AthenaStorageErrorCode =\n  | 'INVALID_URL'\n  | 'NETWORK_ERROR'\n  | 'HTTP_ERROR'\n  | 'INVALID_JSON'\n  | 'INVALID_ATHENA_ENVELOPE'\n  | 'UNKNOWN_ERROR'\n\nexport const AthenaStorageErrorCode = {\n  InvalidUrl: 'INVALID_URL',\n  NetworkError: 'NETWORK_ERROR',\n  HttpError: 'HTTP_ERROR',\n  InvalidJson: 'INVALID_JSON',\n  InvalidAthenaEnvelope: 'INVALID_ATHENA_ENVELOPE',\n  UnknownError: 'UNKNOWN_ERROR',\n} as const satisfies Record<string, AthenaStorageErrorCode>\n\nexport interface AthenaStorageErrorDetails {\n  code: AthenaStorageErrorCode\n  athenaCode: AthenaErrorCode\n  kind: AthenaErrorKind\n  category: AthenaErrorCategory\n  retryable: boolean\n  message: string\n  status: number\n  endpoint: AthenaGatewayEndpointPath\n  method: AthenaGatewayMethod\n  requestId?: string\n  hint?: string\n  cause?: string\n  raw: unknown\n}\n\nexport interface AthenaStorageErrorInput {\n  code: AthenaStorageErrorCode\n  message: string\n  status: number\n  endpoint: AthenaGatewayEndpointPath\n  method: AthenaGatewayMethod\n  raw?: unknown\n  requestId?: string\n  hint?: string\n  cause?: unknown\n}\n\nexport class AthenaStorageError extends Error {\n  readonly code: AthenaStorageErrorCode\n  readonly athenaCode: AthenaErrorCode\n  readonly kind: AthenaErrorKind\n  readonly category: AthenaErrorCategory\n  readonly retryable: boolean\n  readonly status: number\n  readonly endpoint: AthenaGatewayEndpointPath\n  readonly method: AthenaGatewayMethod\n  readonly requestId?: string\n  readonly hint?: string\n  readonly causeDetail?: string\n  readonly raw: unknown\n  readonly normalized: NormalizedAthenaError\n  readonly __athenaNormalizedError: NormalizedAthenaError\n\n  constructor(input: AthenaStorageErrorInput) {\n    super(input.message, { cause: input.cause })\n    this.name = 'AthenaStorageError'\n    this.code = input.code\n    this.status = input.status\n    this.endpoint = input.endpoint\n    this.method = input.method\n    this.requestId = input.requestId\n    this.hint = input.hint\n    this.causeDetail = causeToString(input.cause)\n    this.raw = input.raw ?? null\n    this.normalized = normalizeStorageErrorInput(input)\n    this.__athenaNormalizedError = this.normalized\n    this.athenaCode = this.normalized.code\n    this.kind = this.normalized.kind\n    this.category = this.normalized.category\n    this.retryable = this.normalized.retryable\n    Object.defineProperty(this, '__athenaNormalizedError', {\n      value: this.normalized,\n      enumerable: false,\n      configurable: false,\n      writable: false,\n    })\n  }\n\n  toDetails(): AthenaStorageErrorDetails {\n    return {\n      code: this.code,\n      athenaCode: this.athenaCode,\n      kind: this.kind,\n      category: this.category,\n      retryable: this.retryable,\n      message: this.message,\n      status: this.status,\n      endpoint: this.endpoint,\n      method: this.method,\n      requestId: this.requestId,\n      hint: this.hint,\n      cause: this.causeDetail,\n      raw: this.raw,\n    }\n  }\n}\n\nexport interface AthenaStorageBaseModule {\n  listStorageCatalogs(options?: AthenaStorageCallOptions): Promise<{ data: S3CatalogItem[] }>\n  createStorageCatalog(\n    input: CreateStorageCatalogRequest,\n    options?: AthenaStorageCallOptions,\n  ): Promise<S3CatalogItem>\n  updateStorageCatalog(\n    id: string,\n    input: UpdateStorageCatalogRequest,\n    options?: AthenaStorageCallOptions,\n  ): Promise<S3CatalogItem>\n  deleteStorageCatalog(\n    id: string,\n    options?: AthenaStorageCallOptions,\n  ): Promise<{ id: string; deleted: boolean }>\n  listStorageCredentials(options?: AthenaStorageCallOptions): Promise<{ data: S3CredentialListItem[] }>\n  createStorageUploadUrl(\n    input: CreateStorageUploadUrlRequest,\n    options?: AthenaStorageCallOptions,\n  ): Promise<StorageUploadUrlResponse>\n  createStorageUploadUrls(\n    input: CreateStorageUploadUrlsRequest,\n    options?: AthenaStorageCallOptions,\n  ): Promise<StorageBatchUploadUrlResponse>\n  listStorageFiles(\n    input: ListStorageFilesRequest,\n    options?: AthenaStorageCallOptions,\n  ): Promise<StorageListFilesResponse>\n  getStorageFile(fileId: string, options?: AthenaStorageCallOptions): Promise<StorageFileMutationResponse>\n  getStorageFileUrl(\n    fileId: string,\n    query?: GetStorageFileUrlQuery,\n    options?: AthenaStorageCallOptions,\n  ): Promise<PresignedFileUrlResponse>\n  getStorageFileProxy(\n    fileId: string,\n    query?: GetStorageFileUrlQuery,\n    options?: AthenaStorageBinaryCallOptions,\n  ): Promise<Response>\n  updateStorageFile(\n    fileId: string,\n    input: UpdateStorageFileRequest,\n    options?: AthenaStorageCallOptions,\n  ): Promise<StorageFileMutationResponse>\n  deleteStorageFile(fileId: string, options?: AthenaStorageCallOptions): Promise<StorageFileMutationResponse>\n  setStorageFileVisibility(\n    fileId: string,\n    input: SetStorageFileVisibilityRequest,\n    options?: AthenaStorageCallOptions,\n  ): Promise<StorageFileMutationResponse>\n  deleteStorageFolder(\n    input: DeleteStorageFolderRequest,\n    options?: AthenaStorageCallOptions,\n  ): Promise<StorageFolderMutationResponse>\n  moveStorageFolder(\n    input: MoveStorageFolderRequest,\n    options?: AthenaStorageCallOptions,\n  ): Promise<StorageFolderMutationResponse>\n}\n\nexport type AthenaStoragePutBody =\n  | Blob\n  | ArrayBuffer\n  | Uint8Array\n  | ReadableStream<Uint8Array>\n\nexport interface AthenaStoragePutOptions {\n  headers?: Record<string, string>\n  signal?: AbortSignal\n}\n\nexport interface AthenaStorageManagedUpload extends PresignedFileUrlResponse {\n  method: 'PUT'\n  headers: Record<string, string>\n  expiresAt: string\n  put(body: AthenaStoragePutBody, options?: AthenaStoragePutOptions): Promise<Response>\n}\n\nexport interface StorageUploadUrlResponseWithPut extends Omit<StorageUploadUrlResponse, 'upload'> {\n  upload: AthenaStorageManagedUpload\n}\n\nexport interface StorageBatchUploadUrlResponseWithPut {\n  files: StorageUploadUrlResponseWithPut[]\n}\n\nexport interface AthenaStorageFileUploadRequest extends StorageServerSideEncryptionOptions {\n  s3_id?: string\n  s3Id?: string\n  bucket?: string\n  storage_key?: string\n  storageKey?: string\n  name?: string\n  fileName?: string\n  original_name?: string\n  originalName?: string\n  resource_id?: string\n  resourceId?: string\n  mime_type?: string\n  mimeType?: string\n  content_type?: string\n  contentType?: string\n  size_bytes?: number\n  sizeBytes?: number\n  file_id?: string\n  fileId?: string\n  public?: boolean\n  visibility?: 'private' | 'organization' | 'public'\n  metadata?: Record<string, unknown>\n}\n\nexport interface AthenaStorageFileUploadManyRequest {\n  files: AthenaStorageFileUploadRequest[]\n}\n\nexport interface AthenaStorageFileNamespace extends AthenaStorageFileModule {\n  upload(\n    input: AthenaStorageFileUploadRequest,\n    options?: AthenaStorageCallOptions,\n  ): Promise<StorageUploadUrlResponseWithPut>\n  upload(\n    input: Parameters<AthenaStorageFileModule['upload']>[0],\n    options?: AthenaStorageCallOptions,\n  ): ReturnType<AthenaStorageFileModule['upload']>\n  uploadMany(\n    input: AthenaStorageFileUploadManyRequest,\n    options?: AthenaStorageCallOptions,\n  ): Promise<StorageBatchUploadUrlResponseWithPut>\n  confirmUpload(\n    fileId: string,\n    input?: ConfirmStorageUploadRequest,\n    options?: AthenaStorageCallOptions,\n  ): Promise<StorageFileMutationResponse>\n  uploadBinary(\n    fileId: string,\n    body: AthenaStoragePutBody,\n    options?: AthenaStorageCallOptions,\n  ): Promise<StorageFileMutationResponse>\n  search(\n    input: SearchStorageFilesRequest,\n    options?: AthenaStorageCallOptions,\n  ): Promise<StorageListFilesResponse>\n  get(fileId: string, options?: AthenaStorageCallOptions): Promise<StorageFileMutationResponse>\n  update(\n    fileId: string,\n    input: UpdateStorageFileRequest,\n    options?: AthenaStorageCallOptions,\n  ): Promise<StorageFileMutationResponse>\n  deleteMany(\n    input: DeleteManyStorageFilesRequest,\n    options?: AthenaStorageCallOptions,\n  ): Promise<StorageFileMutationManyResponse>\n  updateMany(\n    input: UpdateManyStorageFilesRequest,\n    options?: AthenaStorageCallOptions,\n  ): Promise<StorageFileMutationManyResponse>\n  restore(fileId: string, options?: AthenaStorageCallOptions): Promise<StorageFileMutationResponse>\n  purge(fileId: string, options?: AthenaStorageCallOptions): Promise<StorageFileMutationResponse>\n  copy(\n    fileId: string,\n    input: CopyStorageFileRequest,\n    options?: AthenaStorageCallOptions,\n  ): Promise<StorageFileMutationResponse>\n  url(\n    fileId: string,\n    query?: GetStorageFileUrlQuery,\n    options?: AthenaStorageCallOptions,\n  ): Promise<PresignedFileUrlResponse>\n  publicUrl(fileId: string, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n  proxyUrl(\n    fileId: string,\n    query?: GetStorageFileUrlQuery,\n    options?: AthenaStorageCallOptions,\n  ): Promise<Record<string, unknown>>\n  proxy(\n    fileId: string,\n    query?: GetStorageFileUrlQuery,\n    options?: AthenaStorageBinaryCallOptions,\n  ): Promise<Response>\n  versions(fileId: string, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n  restoreVersion(\n    fileId: string,\n    versionId: string,\n    options?: AthenaStorageCallOptions,\n  ): Promise<Record<string, unknown>>\n  deleteVersion(\n    fileId: string,\n    versionId: string,\n    options?: AthenaStorageCallOptions,\n  ): Promise<Record<string, unknown>>\n  retention: {\n    get(\n      fileId: string,\n      query?: Pick<StorageFileRetentionRequest, 'version_id'>,\n      options?: AthenaStorageCallOptions,\n    ): Promise<Record<string, unknown>>\n    set(\n      fileId: string,\n      input: StorageFileRetentionRequest,\n      options?: AthenaStorageCallOptions,\n    ): Promise<Record<string, unknown>>\n  }\n  visibility: {\n    update(\n      fileId: string,\n      input: SetStorageFileVisibilityRequest,\n      options?: AthenaStorageCallOptions,\n    ): Promise<StorageFileMutationResponse>\n    set(\n      fileId: string,\n      input: SetStorageFileVisibilityRequest,\n      options?: AthenaStorageCallOptions,\n    ): Promise<StorageFileMutationResponse>\n    setMany(\n      input: SetManyStorageFileVisibilityRequest,\n      options?: AthenaStorageCallOptions,\n    ): Promise<StorageFileMutationManyResponse>\n  }\n}\n\nexport interface AthenaStorageCredentialsNamespace {\n  list(options?: AthenaStorageCallOptions): Promise<{ data: S3CredentialListItem[] }>\n}\n\nexport interface AthenaStorageCatalogNamespace {\n  list(options?: AthenaStorageCallOptions): Promise<{ data: S3CatalogItem[] }>\n  create(input: CreateStorageCatalogRequest, options?: AthenaStorageCallOptions): Promise<S3CatalogItem>\n  update(id: string, input: UpdateStorageCatalogRequest, options?: AthenaStorageCallOptions): Promise<S3CatalogItem>\n  delete(id: string, options?: AthenaStorageCallOptions): Promise<{ id: string; deleted: boolean }>\n}\n\nexport interface AthenaStorageFolderNamespace {\n  list(input: ListStorageFoldersRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n  tree(input: TreeStorageFoldersRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n  delete(input: DeleteStorageFolderRequest, options?: AthenaStorageCallOptions): Promise<StorageFolderMutationResponse>\n  move(input: MoveStorageFolderRequest, options?: AthenaStorageCallOptions): Promise<StorageFolderMutationResponse>\n}\n\nexport interface AthenaStoragePermissionNamespace {\n  list(input: StoragePermissionListRequest, options?: AthenaStorageCallOptions): Promise<StoragePermissionListResponse>\n  grant(input: StoragePermissionGrantRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n  revoke(input: StoragePermissionRevokeRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n  check(input: StoragePermissionCheckRequest, options?: AthenaStorageCallOptions): Promise<StoragePermissionCheckResponse>\n}\n\nexport interface AthenaStorageObjectFolderNamespace {\n  create(input: StorageObjectFolderCreateRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n  delete(input: StorageObjectFolderDeleteRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n  rename(input: StorageObjectFolderRenameRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n}\n\nexport interface AthenaStorageObjectNamespace {\n  list(input: StorageListObjectsRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n  head(input: StorageObjectRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n  exists(input: StorageObjectRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n  validate(input: StorageObjectValidateRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n  update(input: StorageUpdateObjectRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n  copy(input: StorageObjectCopyRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n  url(input: StorageObjectRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n  publicUrl(input: StorageObjectPublicUrlRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n  delete(input: StorageObjectRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n  uploadUrl(input: StoragePresignUploadRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n  versions(input: StorageObjectVersionListRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n  restoreVersion(\n    input: StorageObjectVersionMutationRequest,\n    options?: AthenaStorageCallOptions,\n  ): Promise<Record<string, unknown>>\n  deleteVersion(\n    input: StorageObjectVersionMutationRequest,\n    options?: AthenaStorageCallOptions,\n  ): Promise<Record<string, unknown>>\n  postPolicy(input: StorageSignedPostPolicyRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n  folder: AthenaStorageObjectFolderNamespace\n}\n\nexport interface AthenaStorageBucketCorsNamespace {\n  get(input: StorageBucketCorsRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n  set(input: StorageSetBucketCorsRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n  delete(input: StorageBucketCorsRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n}\n\nexport interface AthenaStorageBucketNamespace {\n  list(input: Omit<StorageObjectBaseRequest, 'bucket'>, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n  create(input: StorageObjectBaseRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n  delete(input: StorageObjectBaseRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n  lifecycle: {\n    get(input: StorageBucketLifecycleRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n    set(input: StorageSetBucketLifecycleRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n    delete(input: StorageBucketLifecycleRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n  }\n  policy: {\n    get(input: StorageBucketPolicyRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n    set(input: StorageSetBucketPolicyRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n    delete(input: StorageBucketPolicyRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n  }\n  publicAccess: {\n    get(input: StoragePublicAccessBlockRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n    set(input: StorageSetPublicAccessBlockRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n    delete(input: StoragePublicAccessBlockRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n  }\n  cors: AthenaStorageBucketCorsNamespace\n}\n\nexport interface AthenaStorageMultipartNamespace {\n  create(input: StorageMultipartCreateRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n  signPart(input: StorageMultipartSignPartRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n  complete(input: StorageMultipartCompleteRequest, options?: AthenaStorageCallOptions): Promise<StorageFileMutationResponse>\n  abort(input: StorageMultipartAbortRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n  listParts(input: StorageMultipartListPartsRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n}\n\nexport interface AthenaStorageAuditNamespace {\n  list(input: StorageAuditQueryRequest, options?: AthenaStorageCallOptions): Promise<StorageAuditListResponse>\n}\n\nexport interface AthenaStorageModule extends AthenaStorageBaseModule {\n  credentials: AthenaStorageCredentialsNamespace\n  catalog: AthenaStorageCatalogNamespace\n  file: AthenaStorageFileNamespace\n  folder: AthenaStorageFolderNamespace\n  permission: AthenaStoragePermissionNamespace\n  object: AthenaStorageObjectNamespace\n  bucket: AthenaStorageBucketNamespace\n  multipart: AthenaStorageMultipartNamespace\n  audit: AthenaStorageAuditNamespace\n  /**\n   * Database backup / restore admin API (`/admin/backups*`).\n   * Archives are stored in the server S3 or R2 profile (`ATHENA_BACKUP_S3_*`).\n   */\n  backup: AthenaStorageBackupNamespace\n  delete: AthenaStorageFileModule['delete']\n}\n\ntype StorageEnvelopeKind = 'raw' | 'athena'\n\ninterface StorageModuleRuntimeOptions {\n  baseUrl?: string\n  onError?: AthenaStorageErrorHandler\n  stripBasePath?: boolean\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return Boolean(value) && typeof value === 'object' && !Array.isArray(value)\n}\n\nfunction causeToString(cause: unknown): string | undefined {\n  if (cause === undefined || cause === null) return undefined\n  if (typeof cause === 'string') return cause\n  if (cause instanceof Error && cause.message.trim()) return cause.message.trim()\n  try {\n    return JSON.stringify(cause)\n  } catch {\n    return String(cause)\n  }\n}\n\nfunction storageGatewayCode(code: AthenaStorageErrorCode): AthenaGatewayErrorCode {\n  if (code === 'INVALID_URL') return 'INVALID_URL'\n  if (code === 'NETWORK_ERROR') return 'NETWORK_ERROR'\n  if (code === 'INVALID_JSON' || code === 'INVALID_ATHENA_ENVELOPE') return 'INVALID_JSON'\n  if (code === 'HTTP_ERROR') return 'HTTP_ERROR'\n  return 'UNKNOWN_ERROR'\n}\n\nfunction headerValue(headers: Headers, names: readonly string[]): string | undefined {\n  for (const name of names) {\n    const value = headers.get(name)\n    if (value?.trim()) return value.trim()\n  }\n  return undefined\n}\n\nfunction storageOperationFromEndpoint(\n  endpoint: AthenaGatewayEndpointPath,\n  method: AthenaGatewayMethod,\n): string {\n  const endpointPath = String(endpoint).split('?')[0]\n  for (const candidate of storageSdkManifest.methods) {\n    if (candidate.method !== method) continue\n    const pattern = `^${candidate.path.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&').replace(/\\\\\\{[^/]+\\\\\\}/g, '[^/]+')}$`\n    if (new RegExp(pattern).test(endpointPath)) {\n      return candidate.name\n    }\n  }\n  return `storage:${method.toLowerCase()}`\n}\n\nfunction normalizeStorageErrorInput(input: AthenaStorageErrorInput): NormalizedAthenaError {\n  return normalizeAthenaError(\n    {\n      data: null,\n      error: {\n        message: input.message,\n        gatewayCode: storageGatewayCode(input.code),\n        status: input.status,\n        raw: input.raw ?? input.cause ?? null,\n      },\n      errorDetails: {\n        code: storageGatewayCode(input.code),\n        message: input.message,\n        status: input.status,\n        endpoint: input.endpoint,\n        method: input.method,\n        requestId: input.requestId,\n        hint: input.hint,\n        cause: causeToString(input.cause),\n      },\n      raw: input.raw ?? input.cause ?? null,\n      status: input.status,\n    },\n    { operation: storageOperationFromEndpoint(input.endpoint, input.method) },\n  )\n}\n\nexport function createAthenaStorageError(input: AthenaStorageErrorInput): AthenaStorageError {\n  return new AthenaStorageError(input)\n}\n\nasync function notifyStorageError(\n  error: AthenaStorageError,\n  options: AthenaStorageCallOptions | undefined,\n  runtimeOptions: StorageModuleRuntimeOptions | undefined,\n): Promise<void> {\n  const handlers = [runtimeOptions?.onError, options?.onError].filter(\n    (handler): handler is AthenaStorageErrorHandler => typeof handler === 'function',\n  )\n  for (const handler of handlers) {\n    try {\n      await handler(error)\n    } catch {\n      // Error observers must not mask the original storage failure.\n    }\n  }\n}\n\nasync function rejectStorageError(\n  input: AthenaStorageErrorInput,\n  options: AthenaStorageCallOptions | undefined,\n  runtimeOptions: StorageModuleRuntimeOptions | undefined,\n): Promise<never> {\n  const error = createAthenaStorageError(input)\n  await notifyStorageError(error, options, runtimeOptions)\n  throw error\n}\n\nfunction parseResponseBody(rawText: string, contentType: string | null) {\n  if (!rawText) {\n    return { parsed: null as unknown, parseFailed: false }\n  }\n\n  const contentTypeSuggestsJson =\n    contentType?.toLowerCase().includes('application/json') ?? false\n  const looksJson =\n    contentTypeSuggestsJson || rawText.startsWith('{') || rawText.startsWith('[')\n\n  if (!looksJson) {\n    return { parsed: rawText as unknown, parseFailed: false }\n  }\n\n  try {\n    return { parsed: JSON.parse(rawText) as unknown, parseFailed: false }\n  } catch {\n    return { parsed: rawText as unknown, parseFailed: true }\n  }\n}\n\nfunction appendQuery(path: string, query?: object): string {\n  if (!query) return path\n  const params = new URLSearchParams()\n  for (const [key, value] of Object.entries(query)) {\n    if (value === undefined || value === null) continue\n    params.set(key, String(value))\n  }\n  const queryText = params.toString()\n  return queryText ? `${path}?${queryText}` : path\n}\n\nfunction storagePath(path: string): AthenaGatewayEndpointPath {\n  return path as AthenaGatewayEndpointPath\n}\n\nfunction resolveStorageEndpointPath(\n  endpoint: AthenaGatewayEndpointPath,\n  runtimeOptions?: StorageModuleRuntimeOptions,\n): AthenaGatewayEndpointPath {\n  if (!runtimeOptions?.stripBasePath) {\n    return endpoint\n  }\n\n  const [pathname, queryText] = String(endpoint).split('?', 2)\n  const trimmedPathname = pathname.startsWith('/storage/')\n    ? pathname.slice('/storage'.length)\n    : pathname === '/storage'\n      ? '/'\n      : pathname\n  const resolvedPath = trimmedPathname.startsWith('/') ? trimmedPathname : `/${trimmedPathname}`\n  return storagePath(queryText ? `${resolvedPath}?${queryText}` : resolvedPath)\n}\n\nfunction withPathParam(path: string, name: string, value: string): string {\n  return path.replace(`{${name}}`, encodeURIComponent(value))\n}\n\nfunction resolveErrorMessage(payload: unknown, fallback: string): string {\n  if (isRecord(payload)) {\n    const message = payload.message ?? payload.error ?? payload.details\n    if (typeof message === 'string' && message.trim()) {\n      return message.trim()\n    }\n  }\n  if (typeof payload === 'string' && payload.trim()) {\n    return payload.trim()\n  }\n  return fallback\n}\n\nfunction resolveErrorHint(payload: unknown): string | undefined {\n  if (!isRecord(payload)) return undefined\n  const hint = payload.hint ?? payload.suggestion\n  return typeof hint === 'string' && hint.trim() ? hint.trim() : undefined\n}\n\nfunction resolveErrorCause(payload: unknown): string | undefined {\n  if (!isRecord(payload)) return undefined\n  const cause = payload.cause ?? payload.reason\n  return typeof cause === 'string' && cause.trim() ? cause.trim() : undefined\n}\n\nfunction storageCodeFromUnknown(error: unknown): AthenaStorageErrorCode {\n  if (isAthenaGatewayError(error)) {\n    if (error.code === 'INVALID_URL') return 'INVALID_URL'\n    if (error.code === 'NETWORK_ERROR') return 'NETWORK_ERROR'\n    if (error.code === 'INVALID_JSON') return 'INVALID_JSON'\n    if (error.code === 'HTTP_ERROR') return 'HTTP_ERROR'\n  }\n  return 'UNKNOWN_ERROR'\n}\n\nasync function callStorageEndpoint<T>(\n  gateway: AthenaGatewayClient,\n  endpoint: AthenaGatewayEndpointPath,\n  method: AthenaGatewayMethod,\n  envelope: StorageEnvelopeKind,\n  payload?: unknown,\n  options?: AthenaStorageCallOptions,\n  runtimeOptions?: StorageModuleRuntimeOptions,\n): Promise<T> {\n  const resolvedOptions = await gateway.resolveCallOptions(options)\n  let url: string\n  let headers: Record<string, string>\n  try {\n    const baseUrl = resolvedOptions?.baseUrl\n      ? normalizeAthenaGatewayBaseUrl(resolvedOptions.baseUrl)\n      : runtimeOptions?.baseUrl\n        ? normalizeAthenaGatewayBaseUrl(runtimeOptions.baseUrl)\n        : gateway.baseUrl\n    url = buildAthenaGatewayUrl(baseUrl, resolveStorageEndpointPath(endpoint, runtimeOptions))\n    headers = gateway.buildHeaders(resolvedOptions)\n  } catch (error) {\n    return rejectStorageError(\n      {\n        code: storageCodeFromUnknown(error),\n        message: error instanceof Error\n          ? error.message\n          : `Athena storage ${method} ${endpoint} failed before sending the request`,\n        status: isAthenaGatewayError(error) ? error.status : 0,\n        endpoint,\n        method,\n        raw: error,\n        requestId: isAthenaGatewayError(error) ? error.requestId : undefined,\n        hint: isAthenaGatewayError(error) ? error.hint : undefined,\n        cause: error,\n      },\n      resolvedOptions,\n      runtimeOptions,\n    )\n  }\n  const requestInit: RequestInit = {\n    method,\n    headers,\n    signal: resolvedOptions?.signal,\n  }\n  if (payload !== undefined && method !== 'GET') {\n    requestInit.body = JSON.stringify(payload)\n  }\n\n  let response: Response\n  try {\n    response = await fetch(url, requestInit)\n  } catch (error) {\n    const message = error instanceof Error ? error.message : String(error)\n    return rejectStorageError(\n      {\n        code: 'NETWORK_ERROR',\n        message: `Network error while calling Athena storage ${method} ${endpoint}: ${message}`,\n        status: 0,\n        endpoint,\n        method,\n        cause: error,\n      },\n      resolvedOptions,\n      runtimeOptions,\n    )\n  }\n\n  let rawText: string\n  try {\n    rawText = await response.text()\n  } catch (error) {\n    return rejectStorageError(\n      {\n        code: 'NETWORK_ERROR',\n        message: `Athena storage ${method} ${endpoint} response body could not be read`,\n        status: response.status,\n        endpoint,\n        method,\n        requestId: headerValue(response.headers, ['x-athena-request-id', 'x-request-id', 'request-id']),\n        cause: error,\n      },\n      resolvedOptions,\n      runtimeOptions,\n    )\n  }\n  const parsedBody = parseResponseBody(rawText ?? '', response.headers.get('content-type'))\n  const requestId = headerValue(response.headers, ['x-athena-request-id', 'x-request-id', 'request-id'])\n  if (parsedBody.parseFailed) {\n    return rejectStorageError(\n      {\n        code: 'INVALID_JSON',\n        message: `Athena storage ${method} ${endpoint} returned malformed JSON`,\n        status: response.status,\n        endpoint,\n        method,\n        requestId,\n        raw: parsedBody.parsed,\n      },\n      resolvedOptions,\n      runtimeOptions,\n    )\n  }\n\n  if (!response.ok) {\n    return rejectStorageError(\n      {\n        code: 'HTTP_ERROR',\n        message: resolveErrorMessage(\n          parsedBody.parsed,\n          `Athena storage ${method} ${endpoint} failed with status ${response.status}`,\n        ),\n        status: response.status,\n        endpoint,\n        method,\n        requestId,\n        hint: resolveErrorHint(parsedBody.parsed),\n        cause: resolveErrorCause(parsedBody.parsed),\n        raw: parsedBody.parsed,\n      },\n      resolvedOptions,\n      runtimeOptions,\n    )\n  }\n\n  if (envelope === 'athena') {\n    if (!isRecord(parsedBody.parsed) || !('data' in parsedBody.parsed)) {\n      return rejectStorageError(\n        {\n          code: 'INVALID_ATHENA_ENVELOPE',\n          message: `Athena storage ${method} ${endpoint} returned an invalid Athena envelope`,\n          status: response.status,\n          endpoint,\n          method,\n          requestId,\n          raw: parsedBody.parsed,\n        },\n        resolvedOptions,\n        runtimeOptions,\n      )\n    }\n    return parsedBody.parsed.data as T\n  }\n\n  return parsedBody.parsed as T\n}\n\nasync function callStorageBinaryEndpoint(\n  gateway: AthenaGatewayClient,\n  endpoint: AthenaGatewayEndpointPath,\n  method: AthenaGatewayMethod,\n  options?: AthenaStorageBinaryCallOptions,\n  runtimeOptions?: StorageModuleRuntimeOptions,\n): Promise<Response> {\n  const resolvedOptions = await gateway.resolveCallOptions(options)\n  let url: string\n  let headers: Record<string, string>\n  try {\n    const baseUrl = resolvedOptions?.baseUrl\n      ? normalizeAthenaGatewayBaseUrl(resolvedOptions.baseUrl)\n      : runtimeOptions?.baseUrl\n        ? normalizeAthenaGatewayBaseUrl(runtimeOptions.baseUrl)\n        : gateway.baseUrl\n    url = buildAthenaGatewayUrl(baseUrl, resolveStorageEndpointPath(endpoint, runtimeOptions))\n    headers = gateway.buildHeaders(resolvedOptions)\n  } catch (error) {\n    return rejectStorageError(\n      {\n        code: storageCodeFromUnknown(error),\n        message: error instanceof Error\n          ? error.message\n          : `Athena storage ${method} ${endpoint} failed before sending the request`,\n        status: isAthenaGatewayError(error) ? error.status : 0,\n        endpoint,\n        method,\n        raw: error,\n        requestId: isAthenaGatewayError(error) ? error.requestId : undefined,\n        hint: isAthenaGatewayError(error) ? error.hint : undefined,\n        cause: error,\n      },\n      resolvedOptions,\n      runtimeOptions,\n    )\n  }\n\n  let response: Response\n  try {\n    response = await fetch(url, {\n      method,\n      headers,\n      signal: resolvedOptions?.signal,\n    })\n  } catch (error) {\n    const message = error instanceof Error ? error.message : String(error)\n    return rejectStorageError(\n      {\n        code: 'NETWORK_ERROR',\n        message: `Network error while calling Athena storage ${method} ${endpoint}: ${message}`,\n        status: 0,\n        endpoint,\n        method,\n        cause: error,\n      },\n      resolvedOptions,\n      runtimeOptions,\n    )\n  }\n\n  if (response.ok) {\n    return response\n  }\n\n  const requestId = headerValue(response.headers, ['x-athena-request-id', 'x-request-id', 'request-id'])\n  let rawErrorBody: unknown = null\n  try {\n    const rawText = await response.text()\n    const parsedBody = parseResponseBody(rawText ?? '', response.headers.get('content-type'))\n    rawErrorBody = parsedBody.parsed\n  } catch (error) {\n    return rejectStorageError(\n      {\n        code: 'NETWORK_ERROR',\n        message: `Athena storage ${method} ${endpoint} error response body could not be read`,\n        status: response.status,\n        endpoint,\n        method,\n        requestId,\n        cause: error,\n      },\n      resolvedOptions,\n      runtimeOptions,\n    )\n  }\n\n  return rejectStorageError(\n    {\n      code: 'HTTP_ERROR',\n      message: resolveErrorMessage(\n        rawErrorBody,\n        `Athena storage ${method} ${endpoint} failed with status ${response.status}`,\n      ),\n      status: response.status,\n      endpoint,\n      method,\n      requestId,\n      hint: resolveErrorHint(rawErrorBody),\n      cause: resolveErrorCause(rawErrorBody),\n      raw: rawErrorBody,\n    },\n    resolvedOptions,\n    runtimeOptions,\n  )\n}\n\nfunction isBlobBody(body: AthenaStoragePutBody): body is Blob {\n  return typeof Blob !== 'undefined' && body instanceof Blob\n}\n\nfunction isReadableStreamBody(body: AthenaStoragePutBody): body is ReadableStream<Uint8Array> {\n  return typeof ReadableStream !== 'undefined' && body instanceof ReadableStream\n}\n\nasync function putPresignedUploadBody(\n  uploadUrl: string,\n  uploadHeaders: Record<string, string>,\n  body: AthenaStoragePutBody,\n  options?: AthenaStoragePutOptions,\n): Promise<Response> {\n  const headers = new Headers(uploadHeaders)\n  Object.entries(options?.headers ?? {}).forEach(([key, value]) => headers.set(key, value))\n  if (!headers.has('Content-Type') && isBlobBody(body) && body.type) {\n    headers.set('Content-Type', body.type)\n  }\n\n  const init: RequestInit & { duplex?: 'half' } = {\n    method: 'PUT',\n    headers,\n    body: body as RequestInit['body'],\n    signal: options?.signal,\n  }\n  if (isReadableStreamBody(body)) {\n    init.duplex = 'half'\n  }\n  return fetch(uploadUrl, init)\n}\n\nfunction attachManagedUpload(upload: PresignedFileUrlResponse): AthenaStorageManagedUpload {\n  const headers: Record<string, string> = { ...(upload.headers ?? {}) }\n  return {\n    ...upload,\n    method: 'PUT',\n    headers,\n    expiresAt: upload.expires_at,\n    put(body, options) {\n      return putPresignedUploadBody(upload.url, headers, body, options)\n    },\n  }\n}\n\nfunction attachUploadHelper(response: StorageUploadUrlResponse): StorageUploadUrlResponseWithPut {\n  return {\n    ...response,\n    upload: attachManagedUpload(response.upload),\n  }\n}\n\nfunction attachUploadHelpers(\n  response: StorageBatchUploadUrlResponse,\n): StorageBatchUploadUrlResponseWithPut {\n  return {\n    files: response.files.map(attachUploadHelper),\n  }\n}\n\nfunction normalizeUploadUrlRequest(input: AthenaStorageFileUploadRequest): CreateStorageUploadUrlRequest {\n  const s3_id = input.s3_id ?? input.s3Id\n  const storage_key = input.storage_key ?? input.storageKey\n  if (!s3_id?.trim()) {\n    throw new Error('athena.storage.file.upload requires s3_id or s3Id')\n  }\n  if (!storage_key?.trim()) {\n    throw new Error('athena.storage.file.upload requires storage_key or storageKey')\n  }\n  const fileName = input.fileName?.trim()\n  const originalName = input.originalName?.trim()\n  return {\n    s3_id,\n    bucket: input.bucket,\n    storage_key,\n    name: input.name ?? fileName,\n    original_name: input.original_name ?? originalName ?? fileName,\n    resource_id: input.resource_id ?? input.resourceId,\n    mime_type: input.mime_type ?? input.mimeType,\n    content_type: input.content_type ?? input.contentType,\n    size_bytes: input.size_bytes ?? input.sizeBytes,\n    file_id: input.file_id ?? input.fileId,\n    public: input.public,\n    visibility: input.visibility,\n    metadata: input.metadata,\n    server_side_encryption: input.server_side_encryption,\n    sse: input.sse,\n    ssekms_key_id: input.ssekms_key_id,\n    kms_key_id: input.kms_key_id,\n    bucket_key_enabled: input.bucket_key_enabled,\n  }\n}\n\nasync function callStorageUploadBinaryEndpoint<T>(\n  gateway: AthenaGatewayClient,\n  endpoint: AthenaGatewayEndpointPath,\n  body: AthenaStoragePutBody,\n  options?: AthenaStorageCallOptions,\n  runtimeOptions?: StorageModuleRuntimeOptions,\n): Promise<T> {\n  const resolvedOptions = await gateway.resolveCallOptions(options)\n  let url: string\n  let headers: Record<string, string>\n  try {\n    const baseUrl = resolvedOptions?.baseUrl\n      ? normalizeAthenaGatewayBaseUrl(resolvedOptions.baseUrl)\n      : runtimeOptions?.baseUrl\n        ? normalizeAthenaGatewayBaseUrl(runtimeOptions.baseUrl)\n        : gateway.baseUrl\n    url = buildAthenaGatewayUrl(baseUrl, resolveStorageEndpointPath(endpoint, runtimeOptions))\n    headers = gateway.buildHeaders(resolvedOptions)\n  } catch (error) {\n    return rejectStorageError(\n      {\n        code: storageCodeFromUnknown(error),\n        message: error instanceof Error\n          ? error.message\n          : `Athena storage PUT ${endpoint} failed before sending the request`,\n        status: isAthenaGatewayError(error) ? error.status : 0,\n        endpoint,\n        method: 'PUT',\n        raw: error,\n        requestId: isAthenaGatewayError(error) ? error.requestId : undefined,\n        hint: isAthenaGatewayError(error) ? error.hint : undefined,\n        cause: error,\n      },\n      resolvedOptions,\n      runtimeOptions,\n    )\n  }\n\n  delete headers['Content-Type']\n  delete headers['content-type']\n  if (isBlobBody(body) && body.type) {\n    headers['Content-Type'] = body.type\n  }\n\n  const requestInit: RequestInit & { duplex?: 'half' } = {\n    method: 'PUT',\n    headers,\n    body: body as RequestInit['body'],\n    signal: resolvedOptions?.signal,\n  }\n  if (isReadableStreamBody(body)) {\n    requestInit.duplex = 'half'\n  }\n\n  let response: Response\n  try {\n    response = await fetch(url, requestInit)\n  } catch (error) {\n    const message = error instanceof Error ? error.message : String(error)\n    return rejectStorageError(\n      {\n        code: 'NETWORK_ERROR',\n        message: `Network error while calling Athena storage PUT ${endpoint}: ${message}`,\n        status: 0,\n        endpoint,\n        method: 'PUT',\n        cause: error,\n      },\n      resolvedOptions,\n      runtimeOptions,\n    )\n  }\n\n  let rawText: string\n  try {\n    rawText = await response.text()\n  } catch (error) {\n    return rejectStorageError(\n      {\n        code: 'NETWORK_ERROR',\n        message: `Athena storage PUT ${endpoint} response body could not be read`,\n        status: response.status,\n        endpoint,\n        method: 'PUT',\n        requestId: headerValue(response.headers, ['x-athena-request-id', 'x-request-id', 'request-id']),\n        cause: error,\n      },\n      resolvedOptions,\n      runtimeOptions,\n    )\n  }\n\n  const parsedBody = parseResponseBody(rawText ?? '', response.headers.get('content-type'))\n  const requestId = headerValue(response.headers, ['x-athena-request-id', 'x-request-id', 'request-id'])\n  if (parsedBody.parseFailed) {\n    return rejectStorageError(\n      {\n        code: 'INVALID_JSON',\n        message: `Athena storage PUT ${endpoint} returned malformed JSON`,\n        status: response.status,\n        endpoint,\n        method: 'PUT',\n        requestId,\n        raw: parsedBody.parsed,\n      },\n      resolvedOptions,\n      runtimeOptions,\n    )\n  }\n  if (!response.ok) {\n    return rejectStorageError(\n      {\n        code: 'HTTP_ERROR',\n        message: resolveErrorMessage(\n          parsedBody.parsed,\n          `Athena storage PUT ${endpoint} failed with status ${response.status}`,\n        ),\n        status: response.status,\n        endpoint,\n        method: 'PUT',\n        requestId,\n        hint: resolveErrorHint(parsedBody.parsed),\n        cause: resolveErrorCause(parsedBody.parsed),\n        raw: parsedBody.parsed,\n      },\n      resolvedOptions,\n      runtimeOptions,\n    )\n  }\n  if (!isRecord(parsedBody.parsed) || !('data' in parsedBody.parsed)) {\n    return rejectStorageError(\n      {\n        code: 'INVALID_ATHENA_ENVELOPE',\n        message: `Athena storage PUT ${endpoint} returned an invalid Athena envelope`,\n        status: response.status,\n        endpoint,\n        method: 'PUT',\n        requestId,\n        raw: parsedBody.parsed,\n      },\n      resolvedOptions,\n      runtimeOptions,\n    )\n  }\n  return parsedBody.parsed.data as T\n}\n\nexport function createStorageModule(\n  gateway: AthenaGatewayClient,\n  runtimeOptions?: AthenaStorageClientConfig,\n): AthenaStorageModule {\n  const resolvedRuntimeOptions = runtimeOptions as StorageModuleRuntimeOptions | undefined\n  const callRaw = <T>(\n    path: string,\n    method: AthenaGatewayMethod,\n    payload?: unknown,\n    options?: AthenaStorageCallOptions,\n  ) => callStorageEndpoint<T>(\n    gateway,\n    storagePath(path),\n    method,\n    'raw',\n    payload,\n    options,\n    resolvedRuntimeOptions,\n  )\n  const callAthena = <T>(\n    path: string,\n    method: AthenaGatewayMethod,\n    payload?: unknown,\n    options?: AthenaStorageCallOptions,\n  ) => callStorageEndpoint<T>(\n    gateway,\n    storagePath(path),\n    method,\n    'athena',\n    payload,\n      options,\n      resolvedRuntimeOptions,\n  )\n  const callStorageFileVisibility = (\n    fileId: string,\n    method: Extract<AthenaGatewayMethod, 'PATCH' | 'POST'>,\n    input: SetStorageFileVisibilityRequest,\n    options?: AthenaStorageCallOptions,\n  ) => callAthena<StorageFileMutationResponse>(\n    withPathParam('/storage/files/{file_id}/visibility', 'file_id', fileId),\n    method,\n    input,\n    options,\n  )\n  const base: AthenaStorageBaseModule = {\n    listStorageCatalogs(options) {\n      return callRaw('/storage/catalogs', 'GET', undefined, options)\n    },\n    createStorageCatalog(input, options) {\n      return callRaw('/storage/catalogs', 'POST', input, options)\n    },\n    updateStorageCatalog(id, input, options) {\n      return callRaw(withPathParam('/storage/catalogs/{id}', 'id', id), 'PATCH', input, options)\n    },\n    deleteStorageCatalog(id, options) {\n      return callRaw(withPathParam('/storage/catalogs/{id}', 'id', id), 'DELETE', undefined, options)\n    },\n    listStorageCredentials(options) {\n      return callRaw('/storage/credentials', 'GET', undefined, options)\n    },\n    createStorageUploadUrl(input, options) {\n      return callAthena('/storage/files/upload-url', 'POST', input, options)\n    },\n    createStorageUploadUrls(input, options) {\n      return callAthena('/storage/files/upload-urls', 'POST', input, options)\n    },\n    listStorageFiles(input, options) {\n      return callAthena('/storage/files/list', 'POST', input, options)\n    },\n    getStorageFile(fileId, options) {\n      return callAthena(withPathParam('/storage/files/{file_id}', 'file_id', fileId), 'GET', undefined, options)\n    },\n    getStorageFileUrl(fileId, query, options) {\n      const path = appendQuery(\n        withPathParam('/storage/files/{file_id}/url', 'file_id', fileId),\n        query,\n      )\n      return callAthena(path, 'GET', undefined, options)\n    },\n    getStorageFileProxy(fileId, query, options) {\n      const path = appendQuery(\n        withPathParam('/storage/files/{file_id}/proxy', 'file_id', fileId),\n        query,\n      )\n      return callStorageBinaryEndpoint(gateway, storagePath(path), 'GET', options, resolvedRuntimeOptions)\n    },\n    updateStorageFile(fileId, input, options) {\n      return callAthena(withPathParam('/storage/files/{file_id}', 'file_id', fileId), 'PATCH', input, options)\n    },\n    deleteStorageFile(fileId, options) {\n      return callAthena(withPathParam('/storage/files/{file_id}', 'file_id', fileId), 'DELETE', undefined, options)\n    },\n    setStorageFileVisibility(fileId, input, options) {\n      return callStorageFileVisibility(fileId, 'PATCH', input, options)\n    },\n    deleteStorageFolder(input, options) {\n      return callAthena('/storage/folders/delete', 'POST', input, options)\n    },\n    moveStorageFolder(input, options) {\n      return callAthena('/storage/folders/move', 'POST', input, options)\n    },\n  }\n  const multipart: AthenaStorageMultipartNamespace = {\n    create(input, options) {\n      return callAthena('/storage/multipart/create', 'POST', input, options)\n    },\n    signPart(input, options) {\n      return callAthena('/storage/multipart/sign-part', 'POST', input, options)\n    },\n    complete(input, options) {\n      return callAthena('/storage/multipart/complete', 'POST', input, options)\n    },\n    abort(input, options) {\n      return callAthena('/storage/multipart/abort', 'POST', input, options)\n    },\n    listParts(input, options) {\n      return callAthena('/storage/multipart/list-parts', 'POST', input, options)\n    },\n  }\n  const fileFacade = createStorageFileModule(base, runtimeOptions, multipart)\n  const fileUpload = ((\n    input: AthenaStorageFileUploadRequest | Parameters<AthenaStorageFileModule['upload']>[0],\n    options?: AthenaStorageCallOptions,\n  ) => {\n    if (isRecord(input) && 'files' in input) {\n      return fileFacade.upload(input as unknown as Parameters<AthenaStorageFileModule['upload']>[0], options)\n    }\n    return base.createStorageUploadUrl(\n      normalizeUploadUrlRequest(input as AthenaStorageFileUploadRequest),\n      options,\n    ).then(attachUploadHelper)\n  }) as AthenaStorageFileNamespace['upload']\n  const fileDelete = ((input: string | readonly string[], options?: AthenaStorageCallOptions) =>\n    fileFacade.delete(input as unknown as Parameters<AthenaStorageFileModule['delete']>[0], options)\n  ) as AthenaStorageFileNamespace['delete']\n\n  const file: AthenaStorageFileNamespace = {\n    ...fileFacade,\n    upload: fileUpload,\n    uploadMany(input, options) {\n      return base.createStorageUploadUrls(\n        { files: input.files.map(normalizeUploadUrlRequest) },\n        options,\n      ).then(attachUploadHelpers)\n    },\n    confirmUpload(fileId, input, options) {\n      return callAthena(withPathParam('/storage/files/{file_id}/confirm-upload', 'file_id', fileId), 'POST', input ?? {}, options)\n    },\n    uploadBinary(fileId, body, options) {\n      return callStorageUploadBinaryEndpoint(\n        gateway,\n        storagePath(withPathParam('/storage/files/{file_id}/upload', 'file_id', fileId)),\n        body,\n        options,\n        resolvedRuntimeOptions,\n      )\n    },\n    search(input, options) {\n      return callAthena('/storage/files/search', 'POST', input, options)\n    },\n    get(fileId, options) {\n      return base.getStorageFile(fileId, options)\n    },\n    update(fileId, input, options) {\n      return base.updateStorageFile(fileId, input, options)\n    },\n    delete: fileDelete,\n    deleteMany(input, options) {\n      return callAthena('/storage/files/delete-many', 'POST', input, options)\n    },\n    updateMany(input, options) {\n      return callAthena('/storage/files/update-many', 'POST', input, options)\n    },\n    restore(fileId, options) {\n      return callAthena(withPathParam('/storage/files/{file_id}/restore', 'file_id', fileId), 'POST', {}, options)\n    },\n    purge(fileId, options) {\n      return callAthena(withPathParam('/storage/files/{file_id}/purge', 'file_id', fileId), 'DELETE', undefined, options)\n    },\n    copy(fileId, input, options) {\n      return callAthena(withPathParam('/storage/files/{file_id}/copy', 'file_id', fileId), 'POST', input, options)\n    },\n    url(fileId, query, options) {\n      return base.getStorageFileUrl(fileId, query, options)\n    },\n    publicUrl(fileId, options) {\n      return callAthena(withPathParam('/storage/files/{file_id}/public-url', 'file_id', fileId), 'GET', undefined, options)\n    },\n    proxyUrl(fileId, query, options) {\n      const path = appendQuery(\n        withPathParam('/storage/files/{file_id}/proxy-url', 'file_id', fileId),\n        query,\n      )\n      return callAthena(path, 'GET', undefined, options)\n    },\n    proxy(fileId, query, options) {\n      return base.getStorageFileProxy(fileId, query, options)\n    },\n    versions(fileId, options) {\n      return callAthena(withPathParam('/storage/files/{file_id}/versions', 'file_id', fileId), 'GET', undefined, options)\n    },\n    restoreVersion(fileId, versionId, options) {\n      return callAthena(\n        withPathParam(\n          withPathParam('/storage/files/{file_id}/versions/{version_id}/restore', 'file_id', fileId),\n          'version_id',\n          versionId,\n        ),\n        'POST',\n        {},\n        options,\n      )\n    },\n    deleteVersion(fileId, versionId, options) {\n      return callAthena(\n        withPathParam(\n          withPathParam('/storage/files/{file_id}/versions/{version_id}', 'file_id', fileId),\n          'version_id',\n          versionId,\n        ),\n        'DELETE',\n        undefined,\n        options,\n      )\n    },\n    retention: {\n      get(fileId, query, options) {\n        const path = appendQuery(\n          withPathParam('/storage/files/{file_id}/retention', 'file_id', fileId),\n          query,\n        )\n        return callAthena(path, 'GET', undefined, options)\n      },\n      set(fileId, input, options) {\n        return callAthena(withPathParam('/storage/files/{file_id}/retention', 'file_id', fileId), 'POST', input, options)\n      },\n    },\n    visibility: {\n      update(fileId, input, options) {\n        return base.setStorageFileVisibility(fileId, input, options)\n      },\n      set(fileId, input, options) {\n        return callStorageFileVisibility(fileId, 'POST', input, options)\n      },\n      setMany(input, options) {\n        return callAthena('/storage/files/visibility-many', 'POST', input, options)\n      },\n    },\n  }\n  const credentials: AthenaStorageCredentialsNamespace = {\n    list(options) {\n      return base.listStorageCredentials(options)\n    },\n  }\n  const catalog: AthenaStorageCatalogNamespace = {\n    list(options) {\n      return base.listStorageCatalogs(options)\n    },\n    create(input, options) {\n      return base.createStorageCatalog(input, options)\n    },\n    update(id, input, options) {\n      return base.updateStorageCatalog(id, input, options)\n    },\n    delete(id, options) {\n      return base.deleteStorageCatalog(id, options)\n    },\n  }\n  const folder: AthenaStorageFolderNamespace = {\n    list(input, options) {\n      return callAthena('/storage/folders/list', 'POST', input, options)\n    },\n    tree(input, options) {\n      return callAthena('/storage/folders/tree', 'POST', input, options)\n    },\n    delete(input, options) {\n      return base.deleteStorageFolder(input, options)\n    },\n    move(input, options) {\n      return base.moveStorageFolder(input, options)\n    },\n  }\n  const permission: AthenaStoragePermissionNamespace = {\n    list(input, options) {\n      return callAthena('/storage/permissions/list', 'POST', input, options)\n    },\n    grant(input, options) {\n      return callAthena('/storage/permissions/grant', 'POST', input, options)\n    },\n    revoke(input, options) {\n      return callAthena('/storage/permissions/revoke', 'POST', input, options)\n    },\n    check(input, options) {\n      return callAthena('/storage/permissions/check', 'POST', input, options)\n    },\n  }\n  const objectFolder: AthenaStorageObjectFolderNamespace = {\n    create(input, options) {\n      return callAthena('/storage/objects/folder', 'POST', input, options)\n    },\n    delete(input, options) {\n      return callAthena('/storage/objects/folder/delete', 'POST', input, options)\n    },\n    rename(input, options) {\n      return callAthena('/storage/objects/folder/rename', 'POST', input, options)\n    },\n  }\n  const object: AthenaStorageObjectNamespace = {\n    list(input, options) {\n      return callAthena('/storage/objects', 'POST', input, options)\n    },\n    head(input, options) {\n      return callAthena('/storage/objects/head', 'POST', input, options)\n    },\n    exists(input, options) {\n      return callAthena('/storage/objects/exists', 'POST', input, options)\n    },\n    validate(input, options) {\n      return callAthena('/storage/objects/validate', 'POST', input, options)\n    },\n    update(input, options) {\n      return callAthena('/storage/objects/update', 'POST', input, options)\n    },\n    copy(input, options) {\n      return callAthena('/storage/objects/copy', 'POST', input, options)\n    },\n    url(input, options) {\n      return callAthena('/storage/objects/url', 'POST', input, options)\n    },\n    publicUrl(input, options) {\n      return callAthena('/storage/objects/public-url', 'POST', input, options)\n    },\n    delete(input, options) {\n      return callAthena('/storage/objects/delete', 'POST', input, options)\n    },\n    uploadUrl(input, options) {\n      return callAthena('/storage/objects/upload-url', 'POST', input, options)\n    },\n    versions(input, options) {\n      return callAthena('/storage/objects/versions', 'POST', input, options)\n    },\n    restoreVersion(input, options) {\n      return callAthena('/storage/objects/versions/restore', 'POST', input, options)\n    },\n    deleteVersion(input, options) {\n      return callAthena('/storage/objects/versions/delete', 'POST', input, options)\n    },\n    postPolicy(input, options) {\n      return callAthena('/storage/objects/post-policy', 'POST', input, options)\n    },\n    folder: objectFolder,\n  }\n  const bucket: AthenaStorageBucketNamespace = {\n    list(input, options) {\n      return callAthena('/storage/buckets/list', 'POST', input, options)\n    },\n    create(input, options) {\n      return callAthena('/storage/buckets/create', 'POST', input, options)\n    },\n    delete(input, options) {\n      return callAthena('/storage/buckets/delete', 'POST', input, options)\n    },\n    lifecycle: {\n      get(input, options) {\n        return callAthena('/storage/buckets/lifecycle', 'POST', input, options)\n      },\n      set(input, options) {\n        return callAthena('/storage/buckets/lifecycle/set', 'POST', input, options)\n      },\n      delete(input, options) {\n        return callAthena('/storage/buckets/lifecycle/delete', 'POST', input, options)\n      },\n    },\n    policy: {\n      get(input, options) {\n        return callAthena('/storage/buckets/policy', 'POST', input, options)\n      },\n      set(input, options) {\n        return callAthena('/storage/buckets/policy/set', 'POST', input, options)\n      },\n      delete(input, options) {\n        return callAthena('/storage/buckets/policy/delete', 'POST', input, options)\n      },\n    },\n    publicAccess: {\n      get(input, options) {\n        return callAthena('/storage/buckets/public-access', 'POST', input, options)\n      },\n      set(input, options) {\n        return callAthena('/storage/buckets/public-access/set', 'POST', input, options)\n      },\n      delete(input, options) {\n        return callAthena('/storage/buckets/public-access/delete', 'POST', input, options)\n      },\n    },\n    cors: {\n      get(input, options) {\n        return callAthena('/storage/buckets/cors', 'POST', input, options)\n      },\n      set(input, options) {\n        return callAthena('/storage/buckets/cors/set', 'POST', input, options)\n      },\n      delete(input, options) {\n        return callAthena('/storage/buckets/cors/delete', 'POST', input, options)\n      },\n    },\n  }\n  const audit: AthenaStorageAuditNamespace = {\n    list(input, options) {\n      return callAthena('/storage/audit/list', 'POST', input, options)\n    },\n  }\n  const backup = createStorageBackupModule(gateway, resolvedRuntimeOptions)\n  return {\n    ...base,\n    credentials,\n    catalog,\n    file,\n    folder,\n    permission,\n    object,\n    bucket,\n    multipart,\n    audit,\n    backup,\n    delete: file.delete,\n  }\n}\n","import { buildSdkHeaderValue } from '../sdk-version.ts'\nimport { buildServiceRequestHeaders } from '../utils/athena-request-headers.ts'\nimport type {\n  AthenaChatAddMembersRequest,\n  AthenaChatAddReactionRequest,\n  AthenaChatCallOptions,\n  AthenaChatConnectOptions,\n  AthenaChatCreateRoomRequest,\n  AthenaChatDeleteResult,\n  AthenaChatEditMessageRequest,\n  AthenaChatMarkReadUpToRequest,\n  AthenaChatMember,\n  AthenaChatMessage,\n  AthenaChatMessageCreatedResponse,\n  AthenaChatMessagePage,\n  AthenaChatModule,\n  AthenaChatReactionSummary,\n  AthenaChatReadCursor,\n  AthenaChatRealtimeConnection,\n  AthenaChatRealtimeInfoResponse,\n  AthenaChatRealtimeModule,\n  AthenaChatRemoveResult,\n  AthenaChatResumeRoomCursor,\n  AthenaChatRoom,\n  AthenaChatRoomCreatedResponse,\n  AthenaChatRoomPage,\n  AthenaChatSearchMessagesRequest,\n  AthenaChatSearchPage,\n  AthenaChatSendMessageRequest,\n  AthenaChatUpdateRoomRequest,\n  AthenaChatWebSocketFactory,\n  AthenaChatWebSocketLike,\n  AthenaChatWsClientCommand,\n  AthenaChatWsServerEvent,\n  AthenaChatListMessagesQuery,\n  AthenaChatListRoomsQuery,\n} from './types.ts'\n\nconst SDK_NAME = 'xylex-group/athena-chat'\nconst SDK_HEADER_VALUE = buildSdkHeaderValue(SDK_NAME)\nexport class AthenaChatError extends Error {\n  status: number\n  endpoint: string\n  method: string\n  requestId?: string\n  body: unknown\n\n  constructor(input: {\n    message: string\n    status: number\n    endpoint: string\n    method: string\n    requestId?: string\n    body: unknown\n  }) {\n    super(input.message)\n    this.name = 'AthenaChatError'\n    this.status = input.status\n    this.endpoint = input.endpoint\n    this.method = input.method\n    this.requestId = input.requestId\n    this.body = input.body\n  }\n}\n\nexport interface AthenaChatClientConfig {\n  baseUrl?: string\n  realtimeInfoUrl?: string\n  apiKey: string\n  client?: string\n  headers?: Record<string, string>\n  bearerToken?: string\n  cookie?: string\n  sessionToken?: string\n  forceNoCache?: boolean\n  wsUrl?: string\n  webSocketFactory?: AthenaChatWebSocketFactory\n}\n\nexport interface InternalChatModuleRuntimeOptions {\n  resolveCallOptions?: () =>\n    | AthenaChatCallOptions\n    | undefined\n    | Promise<AthenaChatCallOptions | undefined>\n}\n\nfunction deriveRealtimeInfoUrl(wsUrl?: string): string | undefined {\n  if (!wsUrl) {\n    return undefined\n  }\n\n  const parsed = new URL(normalizeWsUrl(wsUrl, 'Athena chat WebSocket URL'))\n  parsed.protocol = parsed.protocol === 'wss:' ? 'https:' : 'http:'\n  parsed.pathname = parsed.pathname.replace(/\\/wss\\/gateway$/, '/wss/info')\n  return parsed.toString()\n}\n\nfunction normalizeWsUrl(value: string, label: string): string {\n  const normalized = value.trim()\n  if (!normalized) {\n    throw new Error(`${label} is required.`)\n  }\n\n  let parsed: URL\n  try {\n    parsed = new URL(normalized)\n  } catch {\n    throw new Error(`${label} must be a valid absolute ws(s) URL.`)\n  }\n\n  if (parsed.protocol !== 'ws:' && parsed.protocol !== 'wss:') {\n    throw new Error(`${label} must use ws or wss.`)\n  }\n\n  parsed.pathname = parsed.pathname.replace(/\\/+$/, '')\n  return parsed.toString().replace(/\\/$/, '')\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return Boolean(value) && typeof value === 'object' && !Array.isArray(value)\n}\n\nfunction parseResponseBody(rawText: string, contentType: string | null) {\n  if (!rawText) {\n    return { parsed: null as unknown, parseFailed: false }\n  }\n\n  const contentTypeSuggestsJson =\n    contentType?.toLowerCase().includes('application/json') ?? false\n  const looksJson =\n    contentTypeSuggestsJson || rawText.startsWith('{') || rawText.startsWith('[')\n\n  if (!looksJson) {\n    return { parsed: rawText as unknown, parseFailed: false }\n  }\n\n  try {\n    return { parsed: JSON.parse(rawText) as unknown, parseFailed: false }\n  } catch {\n    return { parsed: rawText as unknown, parseFailed: true }\n  }\n}\n\nfunction resolveRequestId(headers: Headers): string | undefined {\n  return (\n    headers.get('x-request-id') ??\n    headers.get('x-correlation-id') ??\n    headers.get('x-athena-request-id') ??\n    undefined\n  )\n}\n\nfunction resolveErrorMessage(payload: unknown, fallback: string): string {\n  if (isRecord(payload)) {\n    for (const candidate of [payload.error, payload.message, payload.details]) {\n      if (typeof candidate === 'string' && candidate.trim().length > 0) {\n        return candidate.trim()\n      }\n    }\n  }\n\n  if (typeof payload === 'string' && payload.trim().length > 0) {\n    return payload.trim()\n  }\n\n  return fallback\n}\n\nfunction encodePathSegment(value: string, label: string): string {\n  const normalized = value.trim()\n  if (!normalized) {\n    throw new Error(`${label} is required.`)\n  }\n  return encodeURIComponent(normalized)\n}\n\nfunction encodeQuery(query?: Record<string, unknown>): string {\n  if (!query) {\n    return ''\n  }\n\n  const params = new URLSearchParams()\n  for (const [key, value] of Object.entries(query)) {\n    if (value === undefined || value === null) {\n      continue\n    }\n    if (Array.isArray(value)) {\n      for (const item of value) {\n        if (item !== undefined && item !== null) {\n          params.append(key, String(item))\n        }\n      }\n      continue\n    }\n    params.set(key, String(value))\n  }\n\n  const encoded = params.toString()\n  return encoded ? `?${encoded}` : ''\n}\n\nfunction createSocket(\n  factory: AthenaChatWebSocketFactory,\n  url: string,\n  protocols?: string | string[],\n): AthenaChatWebSocketLike {\n  try {\n    return new (factory as new (\n      socketUrl: string,\n      socketProtocols?: string | string[],\n    ) => AthenaChatWebSocketLike)(url, protocols)\n  } catch (error) {\n    if (error instanceof TypeError) {\n      return (factory as (\n        socketUrl: string,\n        socketProtocols?: string | string[],\n      ) => AthenaChatWebSocketLike)(url, protocols)\n    }\n    throw error\n  }\n}\n\nfunction buildHeaders(\n  config: AthenaChatClientConfig,\n  options?: AthenaChatCallOptions,\n): Record<string, string> {\n  return buildServiceRequestHeaders('chat', SDK_HEADER_VALUE, config, options)\n}\n\nfunction withJsonBody(init: RequestInit, body: unknown): RequestInit {\n  return {\n    ...init,\n    body: body === undefined ? undefined : JSON.stringify(body),\n    headers: {\n      'Content-Type': 'application/json',\n      ...(init.headers as Record<string, string>),\n    },\n  }\n}\n\nasync function request<T>(\n  config: AthenaChatClientConfig,\n  runtimeOptions: InternalChatModuleRuntimeOptions,\n  method: string,\n  endpoint: string,\n  options?: AthenaChatCallOptions,\n  body?: unknown,\n): Promise<T> {\n  if (!config.baseUrl) {\n    throw new Error(\n      'Athena chat base URL is not configured. Pass createClient({ url }) for unified routing or set chat.url explicitly.',\n    )\n  }\n  const url = `${config.baseUrl}${endpoint}`\n  const contextOptions = await runtimeOptions.resolveCallOptions?.()\n  const resolvedOptions = {\n    ...contextOptions,\n    ...options,\n    headers:\n      contextOptions?.headers || options?.headers\n        ? { ...(contextOptions?.headers ?? {}), ...(options?.headers ?? {}) }\n        : undefined,\n  }\n  const init: RequestInit = {\n    method,\n    headers: buildHeaders(config, resolvedOptions),\n    signal: resolvedOptions.signal,\n  }\n  const finalInit =\n    body === undefined || method === 'GET'\n      ? init\n      : withJsonBody(init, body)\n\n  const response = await fetch(url, finalInit)\n  const rawText = await response.text()\n  const { parsed } = parseResponseBody(rawText, response.headers.get('content-type'))\n\n  if (!response.ok) {\n    throw new AthenaChatError({\n      message: resolveErrorMessage(parsed, `Athena chat ${method} ${endpoint} failed with ${response.status}`),\n      status: response.status,\n      endpoint,\n      method,\n      requestId: resolveRequestId(response.headers),\n      body: parsed,\n    })\n  }\n\n  return parsed as T\n}\n\nfunction unwrapEnvelopeData<T extends { data: unknown }>(payload: T): T['data'] {\n  return payload.data\n}\n\nfunction createRealtimeConnection(\n  config: AthenaChatClientConfig,\n  options?: AthenaChatConnectOptions,\n): AthenaChatRealtimeConnection {\n  if (!config.wsUrl) {\n    throw new Error(\n      'Athena chat WebSocket URL is not configured. Pass createClient({ url }) for unified routing or set chat.wsUrl explicitly.',\n    )\n  }\n\n  const wsFactory =\n    config.webSocketFactory ??\n    ((globalThis as unknown as { WebSocket?: AthenaChatWebSocketFactory }).WebSocket)\n\n  if (!wsFactory) {\n    throw new Error(\n      'No WebSocket implementation is available. Provide chat.webSocketFactory in createClient(...) or run in a runtime with global WebSocket support.',\n    )\n  }\n\n  const socket = createSocket(wsFactory, config.wsUrl, options?.protocols)\n\n  const send = (command: AthenaChatWsClientCommand) => {\n    socket.send(JSON.stringify(command))\n  }\n\n  if (options?.onMessage) {\n    const listener = (event: unknown) => {\n      const messageEvent = event as { data?: unknown }\n      const raw = messageEvent?.data\n      if (typeof raw !== 'string') {\n        return\n      }\n      try {\n        options.onMessage?.(JSON.parse(raw) as AthenaChatWsServerEvent | Record<string, unknown>)\n      } catch {\n        options.onMessage?.({ type: 'error', error: 'Invalid JSON message from Athena chat realtime gateway.' })\n      }\n    }\n\n    if (typeof socket.addEventListener === 'function') {\n      socket.addEventListener('message', listener)\n    } else {\n      socket.onmessage = listener as AthenaChatWebSocketLike['onmessage']\n    }\n  }\n\n  const hello = (command?: { token?: string | null; room_subscriptions?: string[] | null }) => {\n    send({\n      type: 'auth.hello',\n      token: command?.token,\n      room_subscriptions: command?.room_subscriptions,\n    })\n  }\n\n  if (options?.hello) {\n    const onOpen = () => hello({\n      token: options.hello?.token ?? undefined,\n      room_subscriptions: options.hello?.room_subscriptions ?? undefined,\n    })\n    if (typeof socket.addEventListener === 'function') {\n      socket.addEventListener('open', onOpen)\n    } else {\n      socket.onopen = onOpen\n    }\n  }\n\n  return {\n    socket,\n    send,\n    hello,\n    subscribe(roomId, fromSeq) {\n      send({\n        type: 'chat.subscribe',\n        room_id: roomId,\n        from_seq: fromSeq ?? undefined,\n      })\n    },\n    unsubscribe(roomId) {\n      send({\n        type: 'chat.unsubscribe',\n        room_id: roomId,\n      })\n    },\n    resume(rooms: AthenaChatResumeRoomCursor[]) {\n      send({\n        type: 'chat.resume',\n        rooms,\n      })\n    },\n    typingStart(roomId) {\n      send({\n        type: 'chat.typing.start',\n        room_id: roomId,\n      })\n    },\n    typingStop(roomId) {\n      send({\n        type: 'chat.typing.stop',\n        room_id: roomId,\n      })\n    },\n    presenceHeartbeat(activeRoomId) {\n      send({\n        type: 'chat.presence.heartbeat',\n        active_room_id: activeRoomId ?? undefined,\n      })\n    },\n    readUpTo(roomId, input) {\n      send({\n        type: 'chat.read.up_to',\n        room_id: roomId,\n        message_id: input?.message_id ?? undefined,\n        seq: input?.seq ?? undefined,\n      })\n    },\n    ping(at = new Date().toISOString()) {\n      send({\n        type: 'ping',\n        at,\n      })\n    },\n    close(code, reason) {\n      socket.close(code, reason)\n    },\n  }\n}\n\nexport function createChatModule(\n  config: AthenaChatClientConfig,\n  runtimeOptions: InternalChatModuleRuntimeOptions = {},\n): AthenaChatModule {\n  const call = <T>(\n    method: string,\n    endpoint: string,\n    options?: AthenaChatCallOptions,\n    body?: unknown,\n  ): Promise<T> => request<T>(config, runtimeOptions, method, endpoint, options, body)\n\n  const realtime: AthenaChatRealtimeModule = {\n    info(options) {\n      const realtimeInfoUrl = config.realtimeInfoUrl ?? deriveRealtimeInfoUrl(config.wsUrl)\n      if (!realtimeInfoUrl) {\n        throw new Error(\n          'Athena chat realtime info URL is not configured. Pass createClient({ url }) for unified routing or set chat.wsUrl explicitly.',\n        )\n      }\n\n      return request<AthenaChatRealtimeInfoResponse>(\n        {\n          ...config,\n          baseUrl: realtimeInfoUrl,\n        },\n        runtimeOptions,\n        'GET',\n        '',\n        options,\n      )\n    },\n    connect(options) {\n      return createRealtimeConnection(config, options)\n    },\n  }\n\n  return {\n    room: {\n      list(query?: AthenaChatListRoomsQuery, options?: AthenaChatCallOptions) {\n        return call<AthenaChatRoomPage>(\n          'GET',\n          `/rooms${encodeQuery(query as Record<string, unknown> | undefined)}`,\n          options,\n        )\n      },\n      create(input: AthenaChatCreateRoomRequest, options?: AthenaChatCallOptions) {\n        return call<AthenaChatRoomCreatedResponse>('POST', '/rooms', options, input)\n      },\n      get(roomId: string, options?: AthenaChatCallOptions) {\n        return call<AthenaChatRoom>(\n          'GET',\n          `/rooms/${encodePathSegment(roomId, 'chat room ID')}`,\n          options,\n        )\n      },\n      update(roomId: string, input: AthenaChatUpdateRoomRequest, options?: AthenaChatCallOptions) {\n        return call<AthenaChatRoom>(\n          'PATCH',\n          `/rooms/${encodePathSegment(roomId, 'chat room ID')}`,\n          options,\n          input,\n        )\n      },\n      archive(roomId: string, options?: AthenaChatCallOptions) {\n        return call<AthenaChatRoom>(\n          'POST',\n          `/rooms/${encodePathSegment(roomId, 'chat room ID')}/archive`,\n          options,\n        )\n      },\n      readCursor: {\n        upTo(roomId: string, input?: AthenaChatMarkReadUpToRequest, options?: AthenaChatCallOptions) {\n          return call<AthenaChatReadCursor>(\n            'POST',\n            `/rooms/${encodePathSegment(roomId, 'chat room ID')}/read-cursor`,\n            options,\n            input ?? {},\n          )\n        },\n      },\n      member: {\n        list(roomId: string, options?: AthenaChatCallOptions) {\n          return call<AthenaChatMember[]>(\n            'GET',\n            `/rooms/${encodePathSegment(roomId, 'chat room ID')}/members`,\n            options,\n          )\n        },\n        add(roomId: string, input: AthenaChatAddMembersRequest, options?: AthenaChatCallOptions) {\n          return call<AthenaChatMember[]>(\n            'POST',\n            `/rooms/${encodePathSegment(roomId, 'chat room ID')}/members`,\n            options,\n            input,\n          )\n        },\n        remove(roomId: string, userId: string, options?: AthenaChatCallOptions) {\n          return call<AthenaChatRemoveResult>(\n            'DELETE',\n            `/rooms/${encodePathSegment(roomId, 'chat room ID')}/members/${encodePathSegment(userId, 'chat user ID')}`,\n            options,\n          )\n        },\n      },\n      message: {\n        list(roomId: string, query?: AthenaChatListMessagesQuery, options?: AthenaChatCallOptions) {\n          return call<AthenaChatMessagePage>(\n            'GET',\n            `/rooms/${encodePathSegment(roomId, 'chat room ID')}/messages${encodeQuery(query as Record<string, unknown> | undefined)}`,\n            options,\n          )\n        },\n        send(roomId: string, input: AthenaChatSendMessageRequest, options?: AthenaChatCallOptions) {\n          return call<AthenaChatMessageCreatedResponse>(\n            'POST',\n            `/rooms/${encodePathSegment(roomId, 'chat room ID')}/messages`,\n            options,\n            input,\n          )\n        },\n        update(roomId: string, messageId: string, input: AthenaChatEditMessageRequest, options?: AthenaChatCallOptions) {\n          return call<AthenaChatMessage>(\n            'PATCH',\n            `/rooms/${encodePathSegment(roomId, 'chat room ID')}/messages/${encodePathSegment(messageId, 'chat message ID')}`,\n            options,\n            input,\n          )\n        },\n        delete(roomId: string, messageId: string, options?: AthenaChatCallOptions) {\n          return call<AthenaChatDeleteResult>(\n            'DELETE',\n            `/rooms/${encodePathSegment(roomId, 'chat room ID')}/messages/${encodePathSegment(messageId, 'chat message ID')}`,\n            options,\n          )\n        },\n      },\n    },\n    message: {\n      reaction: {\n        add(messageId: string, input: AthenaChatAddReactionRequest, options?: AthenaChatCallOptions) {\n          return call<AthenaChatReactionSummary>(\n            'POST',\n            `/messages/${encodePathSegment(messageId, 'chat message ID')}/reactions`,\n            options,\n            input,\n          )\n        },\n        remove(messageId: string, emoji: string, options?: AthenaChatCallOptions) {\n          return call<AthenaChatReactionSummary>(\n            'DELETE',\n            `/messages/${encodePathSegment(messageId, 'chat message ID')}/reactions/${encodePathSegment(emoji, 'reaction emoji')}`,\n            options,\n          )\n        },\n      },\n      search(input: AthenaChatSearchMessagesRequest, options?: AthenaChatCallOptions) {\n        return call<AthenaChatSearchPage>(\n          'POST',\n          '/messages/search',\n          options,\n          input,\n        )\n      },\n    },\n    realtime,\n  }\n}\n\nexport const chatSdkManifest = {\n  namespace: 'chat',\n  basePath: '/chat',\n  methods: [\n    { name: 'listRooms', method: 'GET', path: '/chat/rooms' },\n    { name: 'createRoom', method: 'POST', path: '/chat/rooms' },\n    { name: 'getRoom', method: 'GET', path: '/chat/rooms/{room_id}' },\n    { name: 'updateRoom', method: 'PATCH', path: '/chat/rooms/{room_id}' },\n    { name: 'archiveRoom', method: 'POST', path: '/chat/rooms/{room_id}/archive' },\n    { name: 'listRoomMessages', method: 'GET', path: '/chat/rooms/{room_id}/messages' },\n    { name: 'sendRoomMessage', method: 'POST', path: '/chat/rooms/{room_id}/messages' },\n    { name: 'updateRoomMessage', method: 'PATCH', path: '/chat/rooms/{room_id}/messages/{message_id}' },\n    { name: 'deleteRoomMessage', method: 'DELETE', path: '/chat/rooms/{room_id}/messages/{message_id}' },\n    { name: 'advanceReadCursor', method: 'POST', path: '/chat/rooms/{room_id}/read-cursor' },\n    { name: 'listRoomMembers', method: 'GET', path: '/chat/rooms/{room_id}/members' },\n    { name: 'addRoomMembers', method: 'POST', path: '/chat/rooms/{room_id}/members' },\n    { name: 'removeRoomMember', method: 'DELETE', path: '/chat/rooms/{room_id}/members/{user_id}' },\n    { name: 'addReaction', method: 'POST', path: '/chat/messages/{message_id}/reactions' },\n    { name: 'removeReaction', method: 'DELETE', path: '/chat/messages/{message_id}/reactions/{emoji}' },\n    { name: 'searchMessages', method: 'POST', path: '/chat/messages/search' },\n    { name: 'getRealtimeInfo', method: 'GET', path: '/wss/info' },\n    { name: 'connectRealtime', method: 'GET', path: '/wss/gateway' },\n  ],\n} as const\n\nexport function unwrapChatRoom(payload: AthenaChatRoomCreatedResponse): AthenaChatRoom {\n  return unwrapEnvelopeData(payload) as AthenaChatRoom\n}\n\nexport function unwrapChatMessage(payload: AthenaChatMessageCreatedResponse): AthenaChatMessage {\n  return unwrapEnvelopeData(payload) as AthenaChatMessage\n}\n","import type {\n  AthenaDeletePayload,\n  AthenaFetchPayload,\n  AthenaGatewayCondition,\n  AthenaInsertPayload,\n  AthenaJsonObject,\n  AthenaRpcFilter,\n  AthenaRpcPayload,\n  AthenaSortBy,\n  AthenaUpdatePayload,\n} from './gateway/types.ts'\nimport type {\n  AthenaFindManyOptions,\n  AthenaOrderBy,\n  AthenaSelectShape,\n  AthenaValidatedSelectShape,\n  AthenaWhere,\n} from './query-ast.ts'\nimport type { AthenaFindManyAstPayload, AthenaSelectTransportPlan } from './query-transport.ts'\n\nconst ATHENA_DEBUG_AST_KEY = '__athenaDebugAst' as const\n\nexport interface AthenaTableBuilderStateAst {\n  conditions: AthenaGatewayCondition[]\n  limit?: number\n  offset?: number\n  order?: AthenaSortBy\n  currentPage?: number\n  pageSize?: number\n  totalPages?: number\n}\n\nexport interface AthenaRpcBuilderStateAst {\n  filters: AthenaRpcFilter[]\n  limit?: number\n  offset?: number\n  order?: {\n    column: string\n    ascending?: boolean\n  }\n}\n\nexport type AthenaDebugQueryEndpoint =\n  | '/gateway/fetch'\n  | '/gateway/insert'\n  | '/gateway/update'\n  | '/gateway/delete'\n  | '/gateway/rpc'\n  | '/gateway/query'\n  | `/rpc/${string}`\n\ninterface AthenaDebugAstBase<TKind extends string> {\n  version: 1\n  kind: TKind\n}\n\nexport type AthenaSelectDebugTransport =\n  | {\n      mode: 'compiled-fetch' | 'structured-fetch'\n      endpoint: '/gateway/fetch'\n      payload: AthenaFetchPayload\n    }\n  | {\n      mode: 'typed-query'\n      endpoint: '/gateway/query'\n      payload: {\n        query: string\n      }\n    }\n\nexport interface AthenaSelectDebugAst extends AthenaDebugAstBase<'select'> {\n  tableName: string\n  input: {\n    columns: string | string[]\n    state: AthenaTableBuilderStateAst\n  }\n  transport: AthenaSelectDebugTransport\n}\n\nexport type AthenaFindManyDebugTransport<\n  Row = Record<string, unknown>,\n  TSelect extends AthenaSelectShape = AthenaSelectShape,\n> =\n  | {\n      mode: 'direct-ast-fetch'\n      endpoint: '/gateway/fetch'\n      payload: AthenaFindManyAstPayload<Row, TSelect>\n    }\n  | {\n      mode: 'compiled-fetch' | 'structured-fetch'\n      endpoint: '/gateway/fetch'\n      payload: AthenaFetchPayload\n    }\n  | {\n      mode: 'compiled-query'\n      endpoint: '/gateway/query'\n      payload: {\n        query: string\n      }\n    }\n\nexport interface AthenaFindManyDebugAst<\n  Row = Record<string, unknown>,\n  TSelect extends AthenaSelectShape = AthenaSelectShape,\n> extends AthenaDebugAstBase<'findMany'> {\n  tableName: string\n  input: {\n    select: AthenaValidatedSelectShape<TSelect>\n    where?: AthenaWhere<Row>\n    orderBy?: AthenaOrderBy<Row>\n    limit?: number\n  }\n  compiled: {\n    columns: string\n    baseState: AthenaTableBuilderStateAst\n    executionState: AthenaTableBuilderStateAst\n  }\n  transport: AthenaFindManyDebugTransport<Row, TSelect>\n}\n\nexport interface AthenaInsertDebugAst extends AthenaDebugAstBase<'insert'> {\n  tableName: string\n  input: {\n    values: AthenaInsertPayload['insert_body']\n    returning?: AthenaInsertPayload['columns']\n    count?: AthenaInsertPayload['count']\n    head?: boolean\n    defaultToNull?: boolean\n  }\n  transport: {\n    mode: 'insert'\n    endpoint: '/gateway/insert'\n    payload: AthenaInsertPayload\n  }\n}\n\nexport interface AthenaUpsertDebugAst extends AthenaDebugAstBase<'upsert'> {\n  tableName: string\n  input: {\n    values: AthenaInsertPayload['insert_body']\n    updateBody?: AthenaInsertPayload['update_body']\n    onConflict?: AthenaInsertPayload['on_conflict']\n    returning?: AthenaInsertPayload['columns']\n    count?: AthenaInsertPayload['count']\n    head?: boolean\n    defaultToNull?: boolean\n  }\n  transport: {\n    mode: 'upsert'\n    endpoint: '/gateway/insert'\n    payload: AthenaInsertPayload\n  }\n}\n\nexport interface AthenaUpdateDebugAst extends AthenaDebugAstBase<'update'> {\n  tableName: string\n  input: {\n    values: AthenaUpdatePayload['update_body']\n    state: AthenaTableBuilderStateAst\n    returning?: AthenaUpdatePayload['columns']\n  }\n  transport: {\n    mode: 'update'\n    endpoint: '/gateway/update'\n    payload: AthenaUpdatePayload\n  }\n}\n\nexport interface AthenaDeleteDebugAst extends AthenaDebugAstBase<'delete'> {\n  tableName: string\n  input: {\n    resourceId?: AthenaDeletePayload['resource_id']\n    state: AthenaTableBuilderStateAst\n    returning?: AthenaDeletePayload['columns']\n  }\n  transport: {\n    mode: 'delete'\n    endpoint: '/gateway/delete'\n    payload: AthenaDeletePayload\n  }\n}\n\nexport interface AthenaRpcDebugAst extends AthenaDebugAstBase<'rpc'> {\n  functionName: string\n  input: {\n    args?: AthenaJsonObject\n    select?: string | string[]\n    state: AthenaRpcBuilderStateAst\n  }\n  transport: {\n    mode: 'rpc-post' | 'rpc-get'\n    endpoint: '/gateway/rpc' | `/rpc/${string}`\n    payload: AthenaRpcPayload\n  }\n}\n\nexport interface AthenaRawQueryDebugAst extends AthenaDebugAstBase<'query'> {\n  input: {\n    query: string\n  }\n  transport: {\n    mode: 'raw-query'\n    endpoint: '/gateway/query'\n    payload: {\n      query: string\n    }\n  }\n}\n\nexport type AthenaQueryDebugAst =\n  | AthenaSelectDebugAst\n  | AthenaFindManyDebugAst\n  | AthenaInsertDebugAst\n  | AthenaUpsertDebugAst\n  | AthenaUpdateDebugAst\n  | AthenaDeleteDebugAst\n  | AthenaRpcDebugAst\n  | AthenaRawQueryDebugAst\n\nfunction cloneConditions(conditions: AthenaGatewayCondition[]): AthenaGatewayCondition[] {\n  return conditions.map(condition => ({ ...condition }))\n}\n\nexport function cloneTableBuilderStateAst(\n  state: AthenaTableBuilderStateAst,\n): AthenaTableBuilderStateAst {\n  return {\n    conditions: cloneConditions(state.conditions),\n    limit: state.limit,\n    offset: state.offset,\n    order: state.order ? { ...state.order } : undefined,\n    currentPage: state.currentPage,\n    pageSize: state.pageSize,\n    totalPages: state.totalPages,\n  }\n}\n\nexport function cloneRpcBuilderStateAst(\n  state: AthenaRpcBuilderStateAst,\n): AthenaRpcBuilderStateAst {\n  return {\n    filters: state.filters.map(filter => ({ ...filter })),\n    limit: state.limit,\n    offset: state.offset,\n    order: state.order ? { ...state.order } : undefined,\n  }\n}\n\nfunction toSelectTransportAst(plan: AthenaSelectTransportPlan): AthenaSelectDebugTransport {\n  if (plan.kind === 'query') {\n    return {\n      mode: 'typed-query',\n      endpoint: '/gateway/query',\n      payload: plan.payload,\n    }\n  }\n\n  return {\n    mode: plan.payload.select !== undefined ? 'structured-fetch' : 'compiled-fetch',\n    endpoint: '/gateway/fetch',\n    payload: plan.payload,\n  }\n}\n\nfunction resolveDebugTableName(tableName: string | undefined): string {\n  return tableName ?? '__unknown_table__'\n}\n\nexport function buildSelectDebugAst(input: {\n  tableName: string\n  columns: string | string[]\n  state: AthenaTableBuilderStateAst\n  plan: AthenaSelectTransportPlan\n}): AthenaSelectDebugAst {\n  return {\n    version: 1,\n    kind: 'select',\n    tableName: input.tableName,\n    input: {\n      columns: input.columns,\n      state: cloneTableBuilderStateAst(input.state),\n    },\n    transport: toSelectTransportAst(input.plan),\n  }\n}\n\nexport function buildFindManyCompiledDebugAst<\n  Row,\n  TSelect extends AthenaSelectShape,\n>(input: {\n  tableName: string\n  options: AthenaFindManyOptions<Row, TSelect> & {\n    select: AthenaValidatedSelectShape<TSelect>\n  }\n  compiledColumns: string\n  baseState: AthenaTableBuilderStateAst\n  executionState: AthenaTableBuilderStateAst\n  plan: AthenaSelectTransportPlan\n}): AthenaFindManyDebugAst<Row, TSelect> {\n  return {\n    version: 1,\n    kind: 'findMany',\n    tableName: input.tableName,\n    input: {\n      select: input.options.select,\n      where: input.options.where,\n      orderBy: input.options.orderBy,\n      limit: input.options.limit,\n    },\n    compiled: {\n      columns: input.compiledColumns,\n      baseState: cloneTableBuilderStateAst(input.baseState),\n      executionState: cloneTableBuilderStateAst(input.executionState),\n    },\n    transport: planToFindManyTransport<Row, TSelect>(input.plan),\n  }\n}\n\nexport function buildFindManyDirectDebugAst<\n  Row,\n  TSelect extends AthenaSelectShape,\n>(input: {\n  tableName: string\n  options: AthenaFindManyOptions<Row, TSelect> & {\n    select: AthenaValidatedSelectShape<TSelect>\n  }\n  compiledColumns: string\n  baseState: AthenaTableBuilderStateAst\n  executionState: AthenaTableBuilderStateAst\n  payload: AthenaFindManyAstPayload<Row, TSelect>\n}): AthenaFindManyDebugAst<Row, TSelect> {\n  return {\n    version: 1,\n    kind: 'findMany',\n    tableName: input.tableName,\n    input: {\n      select: input.options.select,\n      where: input.options.where,\n      orderBy: input.options.orderBy,\n      limit: input.options.limit,\n    },\n    compiled: {\n      columns: input.compiledColumns,\n      baseState: cloneTableBuilderStateAst(input.baseState),\n      executionState: cloneTableBuilderStateAst(input.executionState),\n    },\n    transport: {\n      mode: 'direct-ast-fetch',\n      endpoint: '/gateway/fetch',\n      payload: input.payload,\n    },\n  }\n}\n\nfunction planToFindManyTransport<\n  Row,\n  TSelect extends AthenaSelectShape,\n>(\n  plan: AthenaSelectTransportPlan,\n): AthenaFindManyDebugTransport<Row, TSelect> {\n  if (plan.kind === 'query') {\n    return {\n      mode: 'compiled-query',\n      endpoint: '/gateway/query',\n      payload: plan.payload,\n    }\n  }\n\n  return {\n    mode: plan.payload.select !== undefined ? 'structured-fetch' : 'compiled-fetch',\n    endpoint: '/gateway/fetch',\n    payload: plan.payload,\n  }\n}\n\nexport function buildInsertDebugAst(payload: AthenaInsertPayload): AthenaInsertDebugAst {\n  return {\n    version: 1,\n    kind: 'insert',\n    tableName: payload.table_name,\n    input: {\n      values: payload.insert_body,\n      returning: payload.columns,\n      count: payload.count,\n      head: payload.head,\n      defaultToNull: payload.default_to_null,\n    },\n    transport: {\n      mode: 'insert',\n      endpoint: '/gateway/insert',\n      payload,\n    },\n  }\n}\n\nexport function buildUpsertDebugAst(payload: AthenaInsertPayload): AthenaUpsertDebugAst {\n  return {\n    version: 1,\n    kind: 'upsert',\n    tableName: payload.table_name,\n    input: {\n      values: payload.insert_body,\n      updateBody: payload.update_body,\n      onConflict: payload.on_conflict,\n      returning: payload.columns,\n      count: payload.count,\n      head: payload.head,\n      defaultToNull: payload.default_to_null,\n    },\n    transport: {\n      mode: 'upsert',\n      endpoint: '/gateway/insert',\n      payload,\n    },\n  }\n}\n\nexport function buildUpdateDebugAst(input: {\n  state: AthenaTableBuilderStateAst\n  payload: AthenaUpdatePayload\n}): AthenaUpdateDebugAst {\n  return {\n    version: 1,\n    kind: 'update',\n    tableName: resolveDebugTableName(input.payload.table_name),\n    input: {\n      values: input.payload.update_body,\n      state: cloneTableBuilderStateAst(input.state),\n      returning: input.payload.columns,\n    },\n    transport: {\n      mode: 'update',\n      endpoint: '/gateway/update',\n      payload: input.payload,\n    },\n  }\n}\n\nexport function buildDeleteDebugAst(input: {\n  state: AthenaTableBuilderStateAst\n  payload: AthenaDeletePayload\n}): AthenaDeleteDebugAst {\n  return {\n    version: 1,\n    kind: 'delete',\n    tableName: input.payload.table_name,\n    input: {\n      resourceId: input.payload.resource_id,\n      state: cloneTableBuilderStateAst(input.state),\n      returning: input.payload.columns,\n    },\n    transport: {\n      mode: 'delete',\n      endpoint: '/gateway/delete',\n      payload: input.payload,\n    },\n  }\n}\n\nexport function buildRpcDebugAst(input: {\n  functionName: string\n  args?: AthenaJsonObject\n  selectedColumns?: string | string[]\n  state: AthenaRpcBuilderStateAst\n  payload: AthenaRpcPayload\n  endpoint: '/gateway/rpc' | `/rpc/${string}`\n}): AthenaRpcDebugAst {\n  return {\n    version: 1,\n    kind: 'rpc',\n    functionName: input.functionName,\n    input: {\n      args: input.args,\n      select: input.selectedColumns,\n      state: cloneRpcBuilderStateAst(input.state),\n    },\n    transport: {\n      mode: input.endpoint === '/gateway/rpc' ? 'rpc-post' : 'rpc-get',\n      endpoint: input.endpoint,\n      payload: input.payload,\n    },\n  }\n}\n\nexport function buildRawQueryDebugAst(query: string): AthenaRawQueryDebugAst {\n  return {\n    version: 1,\n    kind: 'query',\n    input: {\n      query,\n    },\n    transport: {\n      mode: 'raw-query',\n      endpoint: '/gateway/query',\n      payload: {\n        query,\n      },\n    },\n  }\n}\n\nexport function attachAthenaDebugAst(\n  target: unknown,\n  ast: AthenaQueryDebugAst | undefined,\n): void {\n  if (!ast) {\n    return\n  }\n  if (!target || (typeof target !== 'object' && typeof target !== 'function')) {\n    return\n  }\n  Object.defineProperty(target, ATHENA_DEBUG_AST_KEY, {\n    value: ast,\n    enumerable: false,\n    configurable: true,\n    writable: false,\n  })\n}\n\nexport function getAthenaDebugAst(\n  value: unknown,\n): AthenaQueryDebugAst | null {\n  if (!value || (typeof value !== 'object' && typeof value !== 'function')) {\n    return null\n  }\n  return ((value as Record<string, unknown>)[ATHENA_DEBUG_AST_KEY] as AthenaQueryDebugAst | undefined) ?? null\n}\n","import { attachAthenaDebugAst } from './query-debug-ast.ts'\nimport type {\n  InternalClientBehaviorOptions,\n  AthenaQueryTraceCallsite,\n  AthenaQueryTraceEvent,\n  AthenaResult,\n} from './client.ts'\nimport type {\n  AthenaGatewayCallOptions,\n  AthenaRpcCallOptions,\n} from './gateway/types.ts'\nimport type { AthenaQueryDebugAst } from './query-debug-ast.ts'\n\nconst QUERY_TRACE_STACK_SKIP_PATTERNS = [\n  'src\\\\client.ts',\n  'src/client.ts',\n  'src\\\\query-tracing.ts',\n  'src/query-tracing.ts',\n  'src\\\\v3-client.ts',\n  'src/v3-client.ts',\n  'dist\\\\client.',\n  'dist/client.',\n  'dist\\\\query-tracing.',\n  'dist/query-tracing.',\n  'dist\\\\v3-client.',\n  'dist/v3-client.',\n  'node_modules\\\\@xylex-group\\\\athena',\n  'node_modules/@xylex-group/athena',\n  'node:internal',\n  'internal/process',\n] as const\n\ntype AthenaTraceOperation = AthenaQueryTraceEvent['operation']\ntype AthenaTraceEndpoint = AthenaQueryTraceEvent['endpoint']\n\nexport interface AthenaTraceContext {\n  operation: AthenaTraceOperation\n  endpoint: AthenaTraceEndpoint\n  table?: string\n  functionName?: string\n  sql: string\n  payload: unknown\n  ast?: AthenaQueryDebugAst\n  options?: AthenaGatewayCallOptions | AthenaRpcCallOptions\n}\n\nexport type AthenaQueryTracer = {\n  captureCallsite: () => AthenaQueryTraceCallsite | null\n  publishSuccess: <T>(\n    context: AthenaTraceContext,\n    result: AthenaResult<T>,\n    durationMs: number,\n    callsite: AthenaQueryTraceCallsite | null,\n  ) => void\n  publishFailure: (\n    context: AthenaTraceContext,\n    error: unknown,\n    durationMs: number,\n    callsite: AthenaQueryTraceCallsite | null,\n  ) => void\n}\n\nexport type AthenaTraceCallsiteStore = {\n  resolve: (callsite?: AthenaQueryTraceCallsite | null) => AthenaQueryTraceCallsite | null\n}\n\nfunction parseQueryTraceCallsiteFrame(frame: string): AthenaQueryTraceCallsite | null {\n  const trimmed = frame.trim()\n  if (!trimmed) {\n    return null\n  }\n\n  let body = trimmed.replace(/^at\\s+/, '')\n  if (body.startsWith('async ')) {\n    body = body.slice(6)\n  }\n\n  let functionName: string | undefined\n  let location = body\n  const wrappedMatch = body.match(/^(.*?)\\s+\\((.*)\\)$/)\n  if (wrappedMatch) {\n    functionName = wrappedMatch[1].trim() || undefined\n    location = wrappedMatch[2].trim()\n  }\n\n  const locationMatch = location.match(/^(.*):(\\d+):(\\d+)$/)\n  if (!locationMatch) {\n    return null\n  }\n\n  const filePath = locationMatch[1].replace(/^file:\\/\\//, '')\n  const line = Number(locationMatch[2])\n  const column = Number(locationMatch[3])\n  if (!Number.isFinite(line) || !Number.isFinite(column)) {\n    return null\n  }\n\n  const normalizedPath = filePath.replace(/\\\\/g, '/')\n  const fileName = normalizedPath.split('/').at(-1) ?? filePath\n  return {\n    filePath,\n    fileName,\n    line,\n    column,\n    frame: trimmed,\n    functionName,\n  }\n}\n\nfunction captureQueryTraceCallsite(): AthenaQueryTraceCallsite | null {\n  const stack = new Error().stack\n  if (!stack) return null\n  const frames = stack\n    .split('\\n')\n    .slice(2)\n    .map(frame => frame.trim())\n    .filter(Boolean)\n\n  for (const frame of frames) {\n    if (QUERY_TRACE_STACK_SKIP_PATTERNS.some(pattern => frame.includes(pattern))) {\n      continue\n    }\n    const callsite = parseQueryTraceCallsiteFrame(frame)\n    if (callsite) return callsite\n  }\n\n  const fallback = frames.find(frame => !frame.includes('captureQueryTraceCallsite'))\n  return fallback ? parseQueryTraceCallsiteFrame(fallback) : null\n}\n\nfunction defaultQueryTraceLogger(event: AthenaQueryTraceEvent): void {\n  const target = event.table ?? event.functionName ?? 'gateway'\n  const outcomeState = event.outcome?.error ? 'error' : 'ok'\n  const banner = `[athena-js][trace] ${event.operation.toUpperCase()} ${event.endpoint} ${target} ${event.durationMs}ms ${outcomeState}`\n  console.info(banner, event)\n}\n\nexport function captureTraceCallsite(tracer?: AthenaQueryTracer): AthenaQueryTraceCallsite | null {\n  return tracer?.captureCallsite() ?? null\n}\n\nexport function createTraceCallsiteStore(\n  tracer?: AthenaQueryTracer,\n  initialCallsite?: AthenaQueryTraceCallsite | null,\n): AthenaTraceCallsiteStore {\n  let storedCallsite = initialCallsite ?? undefined\n\n  return {\n    resolve(callsite) {\n      if (callsite) {\n        storedCallsite = callsite\n        return callsite\n      }\n      if (storedCallsite !== undefined) {\n        return storedCallsite\n      }\n      const capturedCallsite = captureTraceCallsite(tracer)\n      if (capturedCallsite) {\n        storedCallsite = capturedCallsite\n      }\n      return capturedCallsite\n    },\n  }\n}\n\nexport function createQueryTracer(\n  behavior?: InternalClientBehaviorOptions,\n): AthenaQueryTracer | undefined {\n  const traceOption = behavior?.traceQueries\n  if (!traceOption) {\n    return undefined\n  }\n\n  const logger =\n    typeof traceOption === 'object' && traceOption.logger ? traceOption.logger : defaultQueryTraceLogger\n\n  const emit = (event: AthenaQueryTraceEvent) => {\n    try {\n      logger(event)\n    } catch (error) {\n      console.warn('[athena-js][trace] logger failed', error)\n    }\n  }\n\n  return {\n    captureCallsite: captureQueryTraceCallsite,\n    publishSuccess<T>(\n      context: AthenaTraceContext,\n      result: AthenaResult<T>,\n      durationMs: number,\n      callsite: AthenaQueryTraceCallsite | null,\n    ) {\n      emit({\n        timestamp: new Date().toISOString(),\n        durationMs,\n        operation: context.operation,\n        endpoint: context.endpoint,\n        table: context.table,\n        functionName: context.functionName,\n        sql: context.sql,\n        payload: context.payload,\n        ast: context.ast,\n        options: context.options,\n        callsite,\n        outcome: {\n          status: result.status,\n          error: result.error,\n          errorDetails: result.errorDetails ?? null,\n          count: result.count ?? null,\n          data: result.data,\n          raw: result.raw,\n        },\n      })\n    },\n    publishFailure(\n      context: AthenaTraceContext,\n      error: unknown,\n      durationMs: number,\n      callsite: AthenaQueryTraceCallsite | null,\n    ) {\n      emit({\n        timestamp: new Date().toISOString(),\n        durationMs,\n        operation: context.operation,\n        endpoint: context.endpoint,\n        table: context.table,\n        functionName: context.functionName,\n        sql: context.sql,\n        payload: context.payload,\n        ast: context.ast,\n        options: context.options,\n        callsite,\n        thrownError: error,\n      })\n    },\n  }\n}\n\nexport async function executeWithQueryTrace<T>(\n  tracer: AthenaQueryTracer | undefined,\n  context: AthenaTraceContext,\n  runner: () => Promise<AthenaResult<T>>,\n  callsiteOverride?: AthenaQueryTraceCallsite | null,\n): Promise<AthenaResult<T>> {\n  const callsite = tracer ? (callsiteOverride ?? tracer.captureCallsite()) : null\n  const startedAt = tracer ? Date.now() : 0\n  try {\n    const result = await runner()\n    attachAthenaDebugAst(result, context.ast)\n    if (tracer) {\n      tracer.publishSuccess(context, result, Date.now() - startedAt, callsite)\n    }\n    return result\n  } catch (error) {\n    attachAthenaDebugAst(error, context.ast)\n    if (tracer) {\n      tracer.publishFailure(context, error, Date.now() - startedAt, callsite)\n    }\n    throw error\n  }\n}\n","import type { AthenaModelTarget } from './types.ts'\n\ninterface ResolveAthenaModelTargetTableNameOptions {\n  fallbackSchema?: string\n  fallbackModel?: string\n}\n\nfunction normalizeOptionalName(value: string | undefined): string | undefined {\n  const normalized = value?.trim()\n  return normalized ? normalized : undefined\n}\n\nexport function isAthenaModelTarget(value: unknown): value is AthenaModelTarget {\n  if (!value || typeof value !== 'object') {\n    return false\n  }\n\n  const candidate = value as { meta?: { primaryKey?: unknown } }\n  return Boolean(candidate.meta && Array.isArray(candidate.meta.primaryKey))\n}\n\nexport function resolveAthenaModelTargetTableName(\n  target: AthenaModelTarget,\n  options: ResolveAthenaModelTargetTableNameOptions = {},\n): string {\n  const explicitTableName = normalizeOptionalName(target.meta.tableName)\n  if (explicitTableName) {\n    return explicitTableName\n  }\n\n  const schemaName = normalizeOptionalName(target.meta.schema ?? options.fallbackSchema)\n  const modelName = normalizeOptionalName(target.meta.model ?? options.fallbackModel)\n\n  if (!modelName) {\n    throw new Error(\n      'Athena model target is missing meta.model or meta.tableName. Provide one of those before calling from(model).',\n    )\n  }\n\n  return schemaName ? `${schemaName}.${modelName}` : modelName\n}\n","import type {\n  AthenaConditionArrayValue,\n  AthenaConditionCastType,\n  AthenaConditionOperator,\n  AthenaConditionValue,\n  AthenaDeletePayload,\n  AthenaGatewayCallOptions,\n  AthenaGatewayConnectionOptions,\n  AthenaGatewayConnectionResult,\n  AthenaGatewayCondition,\n  AthenaGatewayErrorDetails,\n  AthenaInsertPayload,\n  AthenaJsonObject,\n  AthenaJsonValue,\n  AthenaRpcCallOptions,\n  AthenaRpcFilter,\n  AthenaRpcFilterOperator,\n  AthenaRpcPayload,\n  AthenaSortBy,\n  AthenaUpdatePayload,\n} from './gateway/types.ts'\nimport type { BackendConfig } from './gateway/types.ts'\nimport {\n  createResultFormatter,\n  executeRead,\n  toSingleResult,\n} from './client-result.ts'\nimport type {\n  AthenaResult,\n  AthenaResultError,\n  AthenaResultFormatter,\n} from './client-result.ts'\nimport {\n  buildDebugSelectQuery,\n  buildDeleteDebugSql,\n  buildInsertDebugSql,\n  buildRpcDebugSql,\n  buildTypedSelectQuery,\n  buildUpdateDebugSql,\n  resolveTableNameForCall,\n} from './client-sql.ts'\nexport type { AthenaResult, AthenaResultError } from './client-result.ts'\nimport { createAthenaRequest } from './client-request.ts'\nimport type {\n  AthenaRequestOptions,\n  AthenaRequestResponse,\n} from './client-request.ts'\nexport type {\n  AthenaRequestMethod,\n  AthenaRequestOptions,\n  AthenaRequestQueryValueMap,\n  AthenaRequestResponse,\n  AthenaRequestService,\n} from './client-request.ts'\nimport { normalizeAthenaGatewayBaseUrl } from './gateway/url.ts'\nimport {\n  createAthenaGatewayClient,\n  createAthenaGatewayClientView,\n  type AthenaGatewayClient,\n} from './gateway/client.ts'\nimport { createAuthModule } from './auth/client.ts'\nimport type { AthenaAuthBindings, AthenaAuthClientConfig } from './auth/types.ts'\nimport type { AthenaDbModule } from './db/module.ts'\nimport { createStorageModule } from './storage/module.ts'\nimport type { AthenaStorageClientConfig, AthenaStorageModule } from './storage/module.ts'\nimport { createChatModule } from './chat/module.ts'\nimport type { AthenaChatModule, AthenaChatWebSocketFactory } from './chat/types.ts'\nimport {\n  compileOrderBy,\n  compileSelectShape,\n  compileWhere,\n  selectShapeUsesRelationSchema,\n  shouldUseUuidTextComparison,\n} from './query-ast.ts'\nimport type {\n  AthenaFindManyOptions,\n  AthenaFindManyResult,\n  AthenaSelectShape,\n  AthenaValidatedSelectShape,\n} from './query-ast.ts'\nimport {\n  canUseFindManyAstTransport,\n  createSelectTransportPlan,\n  findManyAstWhereRequiresLegacyTransport,\n  normalizeFindManyAstWhere,\n  toFindManyAstOrder,\n} from './query-transport.ts'\nimport type { AthenaFindManyAstPayload } from './query-transport.ts'\nimport {\n  buildDeleteDebugAst,\n  buildFindManyCompiledDebugAst,\n  buildFindManyDirectDebugAst,\n  buildInsertDebugAst,\n  buildRawQueryDebugAst,\n  buildRpcDebugAst,\n  buildSelectDebugAst,\n  buildUpdateDebugAst,\n  buildUpsertDebugAst,\n} from './query-debug-ast.ts'\nimport type { AthenaQueryDebugAst } from './query-debug-ast.ts'\nimport {\n  captureTraceCallsite,\n  createQueryTracer,\n  createTraceCallsiteStore,\n  executeWithQueryTrace,\n} from './query-tracing.ts'\nimport type {\n  AthenaQueryTracer,\n} from './query-tracing.ts'\nimport {\n  isAthenaModelTarget,\n  resolveAthenaModelTargetTableName,\n} from './schema/model-target.ts'\nimport type {\n  AthenaSelectInput,\n  AthenaTypecheckedColumnKey,\n  AthenaValidatedSelectInput,\n} from './select-column-types.ts'\n\nexport type {\n  AthenaColumnKey,\n  AthenaColumnKeyWithAutocomplete,\n  AthenaResolvedColumnKey,\n  AthenaSelectArrayElement,\n  AthenaSelectColumnsFor,\n  AthenaSelectInput,\n  AthenaSelectInputHints,\n  AthenaTypecheckedColumnKey,\n  AthenaValidatedSelectInput,\n  HasKnownSelectColumns,\n} from './select-column-types.ts'\nimport type {\n  AthenaClientModelsInput,\n  AthenaClientModelForTableName,\n  AthenaClientTableName,\n  AthenaModelTarget,\n  InsertOf,\n  RowOf,\n  UpdateOf,\n} from './schema/types.ts'\n\nexport interface InternalClientBehaviorOptions {\n  /**\n   * Retry retryable read failures (`select`, `findMany`, `query`) with a fixed internal policy.\n   *\n   * Applies two additional attempts with exponential backoff and jitter.\n   */\n  retryReads?: boolean\n  /**\n   * Emit execution diagnostics for every query/mutation/RPC invocation.\n   * Includes payload, synthesized SQL, full outcome, and best-effort callsite metadata.\n   */\n  traceQueries?: boolean | AthenaQueryTraceOptions\n  /**\n   * Build and attach a normalized operation AST for runtime debugging.\n   *\n   * When enabled, successful Athena results expose a non-enumerable debug AST\n   * that can be read with `getAthenaDebugAst(...)`. If tracing is also enabled,\n   * the same AST is included on emitted trace events.\n   */\n  debugAst?: boolean\n  /**\n   * Send the original `findMany(...)` AST body for clean object-select reads.\n   * This requires gateway support and falls back to legacy compiled transport\n   * when a chain carries filter/pagination state that the AST payload cannot\n   * represent losslessly yet.\n   */\n  findManyAst?: boolean\n}\n\nexport interface AthenaQueryTraceOptions {\n  /**\n   * Custom sink for trace events. Defaults to console.info.\n   */\n  logger?: (event: AthenaQueryTraceEvent) => void\n}\n\nexport interface AthenaQueryTraceCallsite {\n  filePath: string\n  fileName: string\n  line: number\n  column: number\n  frame?: string\n  functionName?: string\n}\n\nexport interface AthenaQueryTraceEvent {\n  timestamp: string\n  durationMs: number\n  operation: 'select' | 'insert' | 'upsert' | 'update' | 'delete' | 'rpc' | 'query'\n  endpoint: '/gateway/fetch' | '/gateway/insert' | '/gateway/update' | '/gateway/delete' | '/gateway/rpc' | '/gateway/query' | `/rpc/${string}`\n  table?: string\n  functionName?: string\n  sql: string\n  payload: unknown\n  ast?: AthenaQueryDebugAst\n  options?: AthenaGatewayCallOptions | AthenaRpcCallOptions\n  callsite: AthenaQueryTraceCallsite | null\n  outcome?: {\n    status: number\n    error: AthenaResultError | null\n    errorDetails?: AthenaGatewayErrorDetails | null\n    count?: number | null\n    data: unknown\n    raw: unknown\n  }\n  thrownError?: unknown\n}\n\ntype TableBuilderState = {\n  conditions: AthenaGatewayCondition[]\n  limit?: number\n  offset?: number\n  order?: AthenaSortBy\n  currentPage?: number\n  pageSize?: number\n  totalPages?: number\n}\n\ntype ConditionCastHints = {\n  valueCast?: AthenaConditionCastType\n  columnCast?: AthenaConditionCastType\n}\n\ntype MutationSingleResult<Result> = Result extends Array<infer Item> ? Item | null : Result | null\ntype MutationResultRow<Result> = Result extends Array<infer Item> ? Item : Result\ntype AthenaRowShape = Record<string, AthenaJsonValue | undefined>\ntype FilterColumnKey<Row> = Extract<keyof NonNullable<Row>, string>\n/** Known keys when the row shape is concrete; `string` when untyped / index signature. */\ntype ResolvedFilterColumnKey<Row> = [FilterColumnKey<Row>] extends [never]\n  ? string\n  : string extends FilterColumnKey<Row>\n    ? string\n    : FilterColumnKey<Row>\n/**\n * Table-name argument for free-form `from<Row>(table)`.\n * - No client `models` → `string` (nothing to complete).\n * - With `models` → known bare/qualified names (IntelliSense + reject unknowns).\n *   Prefer `.from(\"users\")` without a row generic so the row type is inferred from the model.\n */\ntype UntypedTableName<TModels> = [TModels] extends [never]\n  ? string\n  : [AthenaClientTableName<TModels>] extends [never]\n    ? string\n    : AthenaClientTableName<TModels>\ntype ResolvedClientTableModel<TModels, TTableName extends string> = Extract<\n  AthenaClientModelForTableName<TModels, TTableName>,\n  AthenaModelTarget\n>\ntype ClientTableQueryBuilder<\n  TModels,\n  TTableName extends string,\n> = TableQueryBuilder<\n  RowOf<ResolvedClientTableModel<TModels, TTableName>>,\n  InsertOf<ResolvedClientTableModel<TModels, TTableName>>,\n  UpdateOf<ResolvedClientTableModel<TModels, TTableName>>\n>\n/**\n * Select/returning/single column input.\n *\n * - Typed row: validates string lists; arrays use the model-key union.\n * - Untyped row: plain `TValue` (`string | string[]`).\n */\ntype SelectColumnsFor<\n  Row,\n  TValue extends AthenaSelectInput,\n> = AthenaValidatedSelectInput<Row, TValue>\nconst DEFAULT_COLUMNS = '*'\n\ntype SelectDebugAstFactory = (input: {\n  tableName: string\n  columns: string | string[]\n  executionState: TableBuilderState\n  plan: ReturnType<typeof createSelectTransportPlan>\n}) => AthenaQueryDebugAst\n\nexport interface MutationQuery<\n  Result,\n  Row = MutationResultRow<Result>,\n> extends PromiseLike<AthenaResult<Result>> {\n  select<const TColumns extends AthenaSelectInput = string>(\n    columns?: SelectColumnsFor<Row, TColumns>,\n    options?: AthenaGatewayCallOptions,\n  ): Promise<AthenaResult<Result>>\n  returning<const TColumns extends AthenaSelectInput = string>(\n    columns?: SelectColumnsFor<Row, TColumns>,\n    options?: AthenaGatewayCallOptions,\n  ): Promise<AthenaResult<Result>>\n  single<const TColumns extends AthenaSelectInput = string>(\n    columns?: SelectColumnsFor<Row, TColumns>,\n    options?: AthenaGatewayCallOptions,\n  ): Promise<AthenaResult<MutationSingleResult<Result>>>\n  maybeSingle<const TColumns extends AthenaSelectInput = string>(\n    columns?: SelectColumnsFor<Row, TColumns>,\n    options?: AthenaGatewayCallOptions,\n  ): Promise<AthenaResult<MutationSingleResult<Result>>>\n  then<TResult1 = AthenaResult<Result>, TResult2 = never>(\n    onfulfilled?: ((value: AthenaResult<Result>) => TResult1 | PromiseLike<TResult1>) | undefined | null,\n    onrejected?: ((reason: unknown) => TResult2 | PromiseLike<TResult2>) | undefined | null,\n  ): Promise<TResult1 | TResult2>\n  catch<TResult = never>(\n    onrejected?: ((reason: unknown) => TResult | PromiseLike<TResult>) | undefined | null,\n  ): Promise<AthenaResult<Result> | TResult>\n  finally(onfinally?: (() => void) | undefined | null): Promise<AthenaResult<Result>>\n}\n\nfunction mergeOptions<T extends { headers?: Record<string, string> }>(\n  ...options: Array<T | undefined>\n): T | undefined {\n  return options.reduce<T | undefined>((acc, next) => {\n    if (!next) return acc\n    const merged = { ...(acc ?? {}), ...next } as T\n    if (acc?.headers || next.headers) {\n      merged.headers = {\n        ...(acc?.headers ?? {}),\n        ...(next.headers ?? {}),\n      }\n    }\n    return merged\n  }, undefined)\n}\n\nfunction asAthenaJsonObject(value: unknown): AthenaJsonObject {\n  return value as unknown as AthenaJsonObject\n}\n\nfunction asAthenaJsonObjectArray(values: unknown[]): AthenaJsonObject[] {\n  return values as unknown as AthenaJsonObject[]\n}\n\nfunction normalizeSelectColumnsInput(columns?: AthenaSelectInput): string | string[] | undefined {\n  if (columns === undefined) {\n    return undefined\n  }\n  if (typeof columns === 'string') {\n    return columns\n  }\n  return [...columns]\n}\n\nfunction createMutationQuery<\n  Result,\n  Row = MutationResultRow<Result>,\n>(\n  executor: (\n    columns?: string | string[],\n    options?: AthenaGatewayCallOptions,\n    callsite?: AthenaQueryTraceCallsite | null,\n  ) => Promise<AthenaResult<Result>>,\n  defaultColumns: AthenaSelectInput | null = DEFAULT_COLUMNS,\n  tracer?: AthenaQueryTracer,\n  initialCallsite?: AthenaQueryTraceCallsite | null,\n): MutationQuery<Result, Row> {\n  let selectedColumns: AthenaSelectInput | undefined = defaultColumns === null ? undefined : defaultColumns\n  let selectedOptions: AthenaGatewayCallOptions | undefined\n  let promise: Promise<AthenaResult<Result>> | null = null\n  const callsiteStore = createTraceCallsiteStore(tracer, initialCallsite)\n\n  const run = (\n    columns?: AthenaSelectInput,\n    options?: AthenaGatewayCallOptions,\n    callsite?: AthenaQueryTraceCallsite | null,\n  ) => {\n    const payloadColumns = columns ?? selectedColumns\n    const payloadOptions = options ?? selectedOptions\n    if (!promise) {\n      promise = executor(\n        normalizeSelectColumnsInput(payloadColumns),\n        payloadOptions,\n        callsiteStore.resolve(callsite),\n      )\n    }\n    return promise\n  }\n\n  const mutationQuery: MutationQuery<Result, Row> = {\n    select(columns?: AthenaSelectInput, options?: AthenaGatewayCallOptions) {\n      selectedColumns = columns\n      selectedOptions = options ?? selectedOptions\n      return run(columns, options, captureTraceCallsite(tracer))\n    },\n    returning(columns?: AthenaSelectInput, options?: AthenaGatewayCallOptions) {\n      return mutationQuery.select(columns, options)\n    },\n    single(columns?: AthenaSelectInput, options?: AthenaGatewayCallOptions) {\n      selectedColumns = columns\n      selectedOptions = options ?? selectedOptions\n      return run(columns, options, captureTraceCallsite(tracer)).then(toSingleResult)\n    },\n    maybeSingle(columns?: AthenaSelectInput, options?: AthenaGatewayCallOptions) {\n      return mutationQuery.single(columns, options)\n    },\n    then(onfulfilled, onrejected) {\n      return run(selectedColumns, selectedOptions).then(onfulfilled, onrejected)\n    },\n    catch(onrejected) {\n      return run(selectedColumns, selectedOptions).catch(onrejected)\n    },\n    finally(onfinally) {\n      return run(selectedColumns, selectedOptions).finally(onfinally)\n    },\n  }\n\n  return mutationQuery\n}\n\nexport interface OrderOptions {\n  ascending?: boolean\n}\n\n/** Shared filter chain - supports eq, limit, etc. in any order relative to select/update */\ninterface FilterChain<Self, Row> {\n  eq(column: ResolvedFilterColumnKey<Row>, value: AthenaConditionValue): Self\n  eqCast(column: ResolvedFilterColumnKey<Row>, value: AthenaConditionValue, cast: AthenaConditionCastType): Self\n  eqUuid(column: ResolvedFilterColumnKey<Row>, value: string): Self\n  match(filters: Partial<Record<ResolvedFilterColumnKey<Row>, AthenaConditionValue>>): Self\n  range(from: number, to: number): Self\n  limit(count: number): Self\n  offset(count: number): Self\n  currentPage(value: number): Self\n  pageSize(value: number): Self\n  totalPages(value: number): Self\n  order(column: ResolvedFilterColumnKey<Row>, options?: OrderOptions): Self\n  gt(column: ResolvedFilterColumnKey<Row>, value: AthenaConditionValue): Self\n  gte(column: ResolvedFilterColumnKey<Row>, value: AthenaConditionValue): Self\n  lt(column: ResolvedFilterColumnKey<Row>, value: AthenaConditionValue): Self\n  lte(column: ResolvedFilterColumnKey<Row>, value: AthenaConditionValue): Self\n  neq(column: ResolvedFilterColumnKey<Row>, value: AthenaConditionValue): Self\n  like(column: ResolvedFilterColumnKey<Row>, value: AthenaConditionValue): Self\n  ilike(column: ResolvedFilterColumnKey<Row>, value: AthenaConditionValue): Self\n  is(column: ResolvedFilterColumnKey<Row>, value: AthenaConditionValue): Self\n  in(column: ResolvedFilterColumnKey<Row>, values: AthenaConditionArrayValue): Self\n  contains(column: ResolvedFilterColumnKey<Row>, values: AthenaConditionArrayValue): Self\n  containedBy(column: ResolvedFilterColumnKey<Row>, values: AthenaConditionArrayValue): Self\n  not(\n    columnOrExpression: ResolvedFilterColumnKey<Row> | string,\n    operator?: AthenaConditionOperator,\n    value?: AthenaConditionValue,\n  ): Self\n  or(expression: string): Self\n}\n\n/** Chain returned by select() - supports filters and single/maybeSingle before execution */\nexport interface SelectChain<Row, SelectedRow = Row>\n  extends FilterChain<SelectChain<Row, SelectedRow>, Row>, PromiseLike<AthenaResult<SelectedRow[]>> {\n  single<\n    T = SelectedRow,\n    const TColumns extends AthenaSelectInput = string,\n  >(\n    columns?: SelectColumnsFor<Row, TColumns>,\n    options?: AthenaGatewayCallOptions,\n  ): Promise<AthenaResult<T | null>>\n  maybeSingle<\n    T = SelectedRow,\n    const TColumns extends AthenaSelectInput = string,\n  >(\n    columns?: SelectColumnsFor<Row, TColumns>,\n    options?: AthenaGatewayCallOptions,\n  ): Promise<AthenaResult<T | null>>\n}\n\n/** Chain returned by update() - supports filters before execution, plus select/returning */\nexport interface UpdateChain<Row>\n  extends FilterChain<UpdateChain<Row>, Row>, MutationQuery<Row[], Row> {}\n\ninterface RpcFilterChain<Self, Row> {\n  eq(column: AthenaTypecheckedColumnKey<Row>, value: AthenaConditionValue): Self\n  neq(column: AthenaTypecheckedColumnKey<Row>, value: AthenaConditionValue): Self\n  gt(column: AthenaTypecheckedColumnKey<Row>, value: AthenaConditionValue): Self\n  gte(column: AthenaTypecheckedColumnKey<Row>, value: AthenaConditionValue): Self\n  lt(column: AthenaTypecheckedColumnKey<Row>, value: AthenaConditionValue): Self\n  lte(column: AthenaTypecheckedColumnKey<Row>, value: AthenaConditionValue): Self\n  like(column: AthenaTypecheckedColumnKey<Row>, value: AthenaConditionValue): Self\n  ilike(column: AthenaTypecheckedColumnKey<Row>, value: AthenaConditionValue): Self\n  is(column: AthenaTypecheckedColumnKey<Row>, value: AthenaConditionValue): Self\n  in(column: AthenaTypecheckedColumnKey<Row>, values: AthenaConditionArrayValue): Self\n}\n\nexport interface RpcOrderOptions {\n  ascending?: boolean\n}\n\nexport interface RpcQueryBuilder<Row>\n  extends RpcFilterChain<RpcQueryBuilder<Row>, Row>, PromiseLike<AthenaResult<Row[]>> {\n  select<const TColumns extends AthenaSelectInput = string>(\n    columns?: SelectColumnsFor<Row, TColumns>,\n    options?: AthenaRpcCallOptions,\n  ): Promise<AthenaResult<Row[]>>\n  single<\n    T = Row,\n    const TColumns extends AthenaSelectInput = string,\n  >(\n    columns?: SelectColumnsFor<Row, TColumns>,\n    options?: AthenaRpcCallOptions,\n  ): Promise<AthenaResult<T | null>>\n  maybeSingle<\n    T = Row,\n    const TColumns extends AthenaSelectInput = string,\n  >(\n    columns?: SelectColumnsFor<Row, TColumns>,\n    options?: AthenaRpcCallOptions,\n  ): Promise<AthenaResult<T | null>>\n  order(column: AthenaTypecheckedColumnKey<Row>, options?: RpcOrderOptions): RpcQueryBuilder<Row>\n  limit(count: number): RpcQueryBuilder<Row>\n  offset(count: number): RpcQueryBuilder<Row>\n  range(from: number, to: number): RpcQueryBuilder<Row>\n}\n\nexport interface AthenaFromOptions {\n  schema?: string\n}\n\nexport interface TableQueryBuilder<\n  Row,\n  Insert = Partial<Row>,\n  Update = Partial<Insert>,\n  TContext = unknown,\n> extends FilterChain<TableQueryBuilder<Row, Insert, Update, TContext>, Row> {\n  select<\n    T = Row,\n    const TColumns extends AthenaSelectInput = string,\n  >(\n    columns?: SelectColumnsFor<Row, TColumns>,\n    options?: AthenaGatewayCallOptions,\n  ): SelectChain<Row, T>\n  findMany<const TSelect extends AthenaSelectShape>(\n    options: AthenaFindManyOptions<Row, TSelect> & {\n      select: AthenaValidatedSelectShape<TSelect>\n    },\n  ): Promise<AthenaResult<Array<AthenaFindManyResult<Row, TSelect, TContext>>>>\n  insert(values: Insert, options?: AthenaGatewayCallOptions): MutationQuery<Row, Row>\n  insert(values: Insert[], options?: AthenaGatewayCallOptions): MutationQuery<Row[], Row>\n  upsert(\n    values: Insert,\n    options?: AthenaGatewayCallOptions & {\n      updateBody?: Update\n      onConflict?: ResolvedFilterColumnKey<Row> | Array<ResolvedFilterColumnKey<Row>> | (string & {}) | Array<string & {}>\n    },\n  ): MutationQuery<Row, Row>\n  upsert(\n    values: Insert[],\n    options?: AthenaGatewayCallOptions & {\n      updateBody?: Update\n      onConflict?: ResolvedFilterColumnKey<Row> | Array<ResolvedFilterColumnKey<Row>> | (string & {}) | Array<string & {}>\n    },\n  ): MutationQuery<Row[], Row>\n  update(values: Update, options?: AthenaGatewayCallOptions): UpdateChain<Row>\n  delete(options?: AthenaGatewayCallOptions & { resourceId?: string }): MutationQuery<Row | null, Row>\n  single<\n    T = Row,\n    const TColumns extends AthenaSelectInput = string,\n  >(\n    columns?: SelectColumnsFor<Row, TColumns>,\n    options?: AthenaGatewayCallOptions,\n  ): Promise<AthenaResult<T | null>>\n  maybeSingle<\n    T = Row,\n    const TColumns extends AthenaSelectInput = string,\n  >(\n    columns?: SelectColumnsFor<Row, TColumns>,\n    options?: AthenaGatewayCallOptions,\n  ): Promise<AthenaResult<T | null>>\n  reset(): TableQueryBuilder<Row, Insert, Update, TContext>\n}\n\nfunction getResourceId(state: TableBuilderState): string | undefined {\n  const candidate = state.conditions.find(\n    condition =>\n      condition.operator === 'eq' &&\n      (condition.column === 'resource_id' || condition.column === 'id'),\n  )\n  return candidate?.value?.toString()\n}\n\nfunction stringifyFilterValue(value: AthenaConditionValue | AthenaConditionArrayValue | string): string {\n  if (Array.isArray(value)) {\n    return value.join(',')\n  }\n  return String(value)\n}\n\nfunction createFilterMethods<Self, Row>(\n  state: TableBuilderState,\n  addCondition: (\n    operator: AthenaConditionOperator,\n    column?: string,\n    value?: AthenaConditionValue | AthenaConditionArrayValue | string,\n    hints?: ConditionCastHints,\n  ) => void,\n  self: Self,\n): FilterChain<Self, Row> {\n  return {\n    eq(column: ResolvedFilterColumnKey<Row>, value: AthenaConditionValue) {\n      const columnName = String(column)\n      if (shouldUseUuidTextComparison(columnName, value)) {\n        addCondition('eq', columnName, value, { columnCast: 'text' })\n      } else {\n        addCondition('eq', columnName, value)\n      }\n      return self\n    },\n    eqCast(column: ResolvedFilterColumnKey<Row>, value: AthenaConditionValue, cast: AthenaConditionCastType) {\n      addCondition('eq', String(column), value, { valueCast: cast })\n      return self\n    },\n    eqUuid(column: ResolvedFilterColumnKey<Row>, value: string) {\n      addCondition('eq', String(column), value, { valueCast: 'uuid' })\n      return self\n    },\n    match(filters: Partial<Record<ResolvedFilterColumnKey<Row>, AthenaConditionValue>>) {\n      Object.entries(filters as Record<string, AthenaConditionValue | undefined>).forEach(([column, value]) => {\n        if (value === undefined) {\n          return\n        }\n        if (shouldUseUuidTextComparison(column, value)) {\n          addCondition('eq', column, value, { columnCast: 'text' })\n        } else {\n          addCondition('eq', column, value)\n        }\n      })\n      return self\n    },\n    range(from: number, to: number) {\n      state.offset = from\n      state.limit = to - from + 1\n      return self\n    },\n    limit(count: number) {\n      state.limit = count\n      return self\n    },\n    offset(count: number) {\n      state.offset = count\n      return self\n    },\n    currentPage(value: number) {\n      state.currentPage = value\n      return self\n    },\n    pageSize(value: number) {\n      state.pageSize = value\n      return self\n    },\n    totalPages(value: number) {\n      state.totalPages = value\n      return self\n    },\n    order(column: ResolvedFilterColumnKey<Row>, options?: OrderOptions) {\n      state.order = {\n        field: String(column),\n        direction: options?.ascending === false ? 'descending' : 'ascending',\n      }\n      return self\n    },\n    gt(column: ResolvedFilterColumnKey<Row>, value: AthenaConditionValue) {\n      addCondition('gt', String(column), value)\n      return self\n    },\n    gte(column: ResolvedFilterColumnKey<Row>, value: AthenaConditionValue) {\n      addCondition('gte', String(column), value)\n      return self\n    },\n    lt(column: ResolvedFilterColumnKey<Row>, value: AthenaConditionValue) {\n      addCondition('lt', String(column), value)\n      return self\n    },\n    lte(column: ResolvedFilterColumnKey<Row>, value: AthenaConditionValue) {\n      addCondition('lte', String(column), value)\n      return self\n    },\n    neq(column: ResolvedFilterColumnKey<Row>, value: AthenaConditionValue) {\n      addCondition('neq', String(column), value)\n      return self\n    },\n    like(column: ResolvedFilterColumnKey<Row>, value: AthenaConditionValue) {\n      addCondition('like', String(column), value)\n      return self\n    },\n    ilike(column: ResolvedFilterColumnKey<Row>, value: AthenaConditionValue) {\n      addCondition('ilike', String(column), value)\n      return self\n    },\n    is(column: ResolvedFilterColumnKey<Row>, value: AthenaConditionValue) {\n      addCondition('is', String(column), value)\n      return self\n    },\n    in(column: ResolvedFilterColumnKey<Row>, values: AthenaConditionArrayValue) {\n      addCondition('in', String(column), values)\n      return self\n    },\n    contains(column: ResolvedFilterColumnKey<Row>, values: AthenaConditionArrayValue) {\n      addCondition('contains', String(column), values)\n      return self\n    },\n    containedBy(column: ResolvedFilterColumnKey<Row>, values: AthenaConditionArrayValue) {\n      addCondition('containedBy', String(column), values)\n      return self\n    },\n    not(\n      columnOrExpression: ResolvedFilterColumnKey<Row> | string,\n      operator?: AthenaConditionOperator,\n      value?: AthenaConditionValue,\n    ) {\n      const expression = String(columnOrExpression)\n      if (operator != null && value !== undefined) {\n        addCondition('not', undefined, `${expression}.${operator}.${stringifyFilterValue(value)}`)\n      } else {\n        addCondition('not', undefined, expression)\n      }\n      return self\n    },\n    or(expression: string) {\n      addCondition('or', undefined, expression)\n      return self\n    },\n  }\n}\n\nfunction toRpcSelect(columns?: AthenaSelectInput) {\n  if (!columns) return undefined\n  if (typeof columns === 'string') {\n    return columns\n  }\n  return columns.join(',')\n}\n\nfunction createRpcFilterMethods<Self>(\n  filters: AthenaRpcFilter[],\n  self: Self,\n) {\n  const addFilter = (\n    operator: AthenaRpcFilterOperator,\n    column: string,\n    value: AthenaConditionValue | AthenaConditionArrayValue | string,\n  ) => {\n    filters.push({ column, operator, value })\n  }\n\n  return {\n    eq(column: string, value: AthenaConditionValue) {\n      addFilter('eq', column, value)\n      return self\n    },\n    neq(column: string, value: AthenaConditionValue) {\n      addFilter('neq', column, value)\n      return self\n    },\n    gt(column: string, value: AthenaConditionValue) {\n      addFilter('gt', column, value)\n      return self\n    },\n    gte(column: string, value: AthenaConditionValue) {\n      addFilter('gte', column, value)\n      return self\n    },\n    lt(column: string, value: AthenaConditionValue) {\n      addFilter('lt', column, value)\n      return self\n    },\n    lte(column: string, value: AthenaConditionValue) {\n      addFilter('lte', column, value)\n      return self\n    },\n    like(column: string, value: AthenaConditionValue) {\n      addFilter('like', column, value)\n      return self\n    },\n    ilike(column: string, value: AthenaConditionValue) {\n      addFilter('ilike', column, value)\n      return self\n    },\n    is(column: string, value: AthenaConditionValue) {\n      addFilter('is', column, value)\n      return self\n    },\n    in(column: string, values: AthenaConditionArrayValue) {\n      addFilter('in', column, values)\n      return self\n    },\n  }\n}\n\nfunction createRpcBuilder<Row>(\n  functionName: string,\n  args: AthenaJsonObject | undefined,\n  baseOptions: AthenaRpcCallOptions | undefined,\n  client: ReturnType<typeof createAthenaGatewayClient>,\n  formatGatewayResult: AthenaResultFormatter,\n  tracer?: AthenaQueryTracer,\n  initialCallsite?: AthenaQueryTraceCallsite | null,\n  debugAstEnabled = false,\n): RpcQueryBuilder<Row> {\n  const state: {\n    filters: AthenaRpcFilter[]\n    limit?: number\n    offset?: number\n    order?: { column: string; ascending?: boolean }\n  } = {\n    filters: [],\n  }\n\n  let selectedColumns: AthenaSelectInput | undefined\n  let selectedOptions: AthenaRpcCallOptions | undefined\n  let promise: Promise<AthenaResult<Row[]>> | null = null\n  const callsiteStore = createTraceCallsiteStore(tracer, initialCallsite)\n\n  const executeRpc = async <SelectedRow = Row>(\n    columns?: AthenaSelectInput,\n    options?: AthenaRpcCallOptions,\n    callsite?: AthenaQueryTraceCallsite | null,\n  ): Promise<AthenaResult<SelectedRow[]>> => {\n    const mergedOptions = mergeOptions(baseOptions, options)\n    const normalizedSelectedColumns = normalizeSelectColumnsInput(columns)\n    const payload: AthenaRpcPayload = {\n      function: functionName,\n      args,\n      schema: mergedOptions?.schema,\n      select: toRpcSelect(columns),\n      filters: state.filters.length ? [...state.filters] : undefined,\n      count: mergedOptions?.count,\n      head: mergedOptions?.head,\n      limit: state.limit,\n      offset: state.offset,\n      order: state.order,\n    }\n    const endpoint: AthenaQueryTraceEvent['endpoint'] = mergedOptions?.get\n      ? `/rpc/${functionName}`\n      : '/gateway/rpc'\n    const sql = buildRpcDebugSql(payload)\n    const debugAst = debugAstEnabled\n      ? buildRpcDebugAst({\n          functionName,\n          args,\n          selectedColumns: normalizedSelectedColumns,\n          state,\n          payload,\n          endpoint,\n        })\n      : undefined\n    return executeWithQueryTrace(\n      tracer,\n      {\n        operation: 'rpc',\n        endpoint,\n        functionName,\n        sql,\n        payload,\n        ast: debugAst,\n        options: mergedOptions,\n      },\n      async () => {\n        const response = await client.rpcGateway<SelectedRow[]>(payload, mergedOptions)\n        return formatGatewayResult(response, { operation: 'rpc' })\n      },\n      callsite,\n    )\n  }\n\n  const run = (\n    columns?: AthenaSelectInput,\n    options?: AthenaRpcCallOptions,\n    callsite?: AthenaQueryTraceCallsite | null,\n  ) => {\n    const payloadColumns = columns ?? selectedColumns\n    const payloadOptions = options ?? selectedOptions\n    if (!promise) {\n      promise = executeRpc<Row>(payloadColumns, payloadOptions, callsiteStore.resolve(callsite))\n    }\n    return promise\n  }\n\n  const builder = {} as RpcQueryBuilder<Row>\n  const filterMethods = createRpcFilterMethods(state.filters, builder)\n\n  Object.assign(builder, filterMethods, {\n    select(columns?: AthenaSelectInput, options?: AthenaRpcCallOptions) {\n      selectedColumns = columns\n      selectedOptions = options ?? selectedOptions\n      return run(columns, options, captureTraceCallsite(tracer))\n    },\n    async single<T = Row>(columns?: AthenaSelectInput, options?: AthenaRpcCallOptions) {\n      const result = await run(columns, options, captureTraceCallsite(tracer))\n      return toSingleResult(result) as AthenaResult<T | null>\n    },\n    maybeSingle<T = Row>(columns?: AthenaSelectInput, options?: AthenaRpcCallOptions) {\n      return builder.single<T, AthenaSelectInput>(columns, options)\n    },\n    order(column: string, options?: RpcOrderOptions) {\n      state.order = { column, ascending: options?.ascending ?? true }\n      return builder\n    },\n    limit(count: number) {\n      state.limit = count\n      return builder\n    },\n    offset(count: number) {\n      state.offset = count\n      return builder\n    },\n    range(from: number, to: number) {\n      state.offset = from\n      state.limit = to - from + 1\n      return builder\n    },\n    then<T1 = AthenaResult<Row[]>, T2 = never>(\n      onfulfilled?: (v: AthenaResult<Row[]>) => T1 | PromiseLike<T1>,\n      onrejected?: (reason: unknown) => T2 | PromiseLike<T2>,\n    ) {\n      return run(selectedColumns, selectedOptions).then(onfulfilled, onrejected)\n    },\n    catch<T = never>(onrejected?: (reason: unknown) => T | PromiseLike<T>) {\n      return run(selectedColumns, selectedOptions).catch(onrejected)\n    },\n    finally(onfinally?: () => void) {\n      return run(selectedColumns, selectedOptions).finally(onfinally)\n    },\n  })\n\n  return builder\n}\n\nfunction createTableBuilder<\n  Row,\n  Insert = Partial<Row>,\n  Update = Partial<Insert>,\n  TContext = unknown,\n>(\n  tableName: string,\n  client: ReturnType<typeof createAthenaGatewayClient>,\n  formatGatewayResult: AthenaResultFormatter,\n  tracer?: AthenaQueryTracer,\n  behavior?: InternalClientBehaviorOptions,\n): TableQueryBuilder<Row, Insert, Update, TContext> {\n  const state: TableBuilderState = {\n    conditions: [],\n  }\n  const debugAstEnabled = Boolean(behavior?.debugAst)\n\n  const addCondition = (\n    operator: AthenaConditionOperator,\n    column?: string,\n    value?: AthenaConditionValue | AthenaConditionArrayValue | string,\n    hints?: ConditionCastHints,\n  ) => {\n    const condition: AthenaGatewayCondition = { operator }\n    if (column) {\n      condition.column = column\n      if (operator === 'eq') {\n        // include legacy gateway shape for compatibility\n        condition.eq_column = column\n      }\n    }\n    if (value !== undefined) {\n      condition.value = value\n      if (operator === 'eq') {\n        condition.eq_value = value\n      }\n    }\n    if (hints?.valueCast) {\n      condition.value_cast = hints.valueCast\n      if (operator === 'eq') {\n        condition.eq_value_cast = hints.valueCast\n      }\n    }\n    if (hints?.columnCast) {\n      condition.column_cast = hints.columnCast\n      if (operator === 'eq') {\n        condition.eq_column_cast = hints.columnCast\n      }\n    }\n    state.conditions.push(condition)\n  }\n\n  const snapshotState = (): TableBuilderState => ({\n    conditions: state.conditions.map(condition => ({ ...condition })),\n    limit: state.limit,\n    offset: state.offset,\n    order: state.order ? { ...state.order } : undefined,\n    currentPage: state.currentPage,\n    pageSize: state.pageSize,\n    totalPages: state.totalPages,\n  })\n\n  const builder = {} as TableQueryBuilder<Row, Insert, Update, TContext>\n\n  const filterMethods = createFilterMethods<TableQueryBuilder<Row, Insert, Update, TContext>, Row>(\n    state,\n    addCondition,\n    builder,\n  )\n\n  const runSelect = async <T = Row>(\n    columns: AthenaSelectInput = DEFAULT_COLUMNS,\n    options?: AthenaGatewayCallOptions,\n    executionState: TableBuilderState = snapshotState(),\n    callsite?: AthenaQueryTraceCallsite | null,\n    debugAstFactory?: SelectDebugAstFactory,\n  ) => {\n    const runtimeColumns = normalizeSelectColumnsInput(columns) ?? DEFAULT_COLUMNS\n    const resolvedTableName = resolveTableNameForCall(tableName, options?.schema)\n    const plan = createSelectTransportPlan({\n      tableName: resolvedTableName,\n      columns: runtimeColumns,\n      state: executionState,\n      options,\n      buildTypedSelectQuery,\n    })\n    const debugAst = debugAstEnabled\n      ? (debugAstFactory?.({\n          tableName: resolvedTableName,\n          columns: runtimeColumns,\n          executionState,\n          plan,\n        }) ?? buildSelectDebugAst({\n          tableName: resolvedTableName,\n          columns: runtimeColumns,\n          state: executionState,\n          plan,\n        }))\n      : undefined\n\n    if (plan.kind === 'query') {\n      return executeRead(behavior, () =>\n        executeWithQueryTrace(\n          tracer,\n          {\n            operation: 'select',\n            endpoint: '/gateway/query',\n            table: resolvedTableName,\n            sql: plan.query,\n            payload: plan.payload,\n            ast: debugAst,\n            options,\n          },\n          async () => {\n            const queryResponse = await client.queryGateway<T>(plan.payload, options)\n            return formatGatewayResult(queryResponse, { table: resolvedTableName, operation: 'select' })\n          },\n          callsite,\n        ),\n      )\n    }\n\n    const sql = buildDebugSelectQuery({\n      tableName: resolvedTableName,\n      ...plan.debug,\n    })\n    return executeRead(behavior, () =>\n      executeWithQueryTrace(\n        tracer,\n        {\n          operation: 'select',\n          endpoint: '/gateway/fetch',\n          table: resolvedTableName,\n          sql,\n          payload: plan.payload,\n          ast: debugAst,\n          options,\n        },\n        async () => {\n          const response = await client.fetchGateway<T>(plan.payload, options)\n          return formatGatewayResult(response, { table: resolvedTableName, operation: 'select' })\n        },\n        callsite,\n      ),\n    )\n  }\n\n  const createSelectChain = <SelectedRow>(\n    columns: AthenaSelectInput,\n    options?: AthenaGatewayCallOptions,\n    initialCallsite?: AthenaQueryTraceCallsite | null,\n  ): SelectChain<Row, SelectedRow> => {\n    const chain = {} as SelectChain<Row, SelectedRow>\n    const callsiteStore = createTraceCallsiteStore(tracer, initialCallsite)\n    const filterMethods = createFilterMethods<SelectChain<Row, SelectedRow>, Row>(\n      state,\n      addCondition,\n      chain,\n    )\n    Object.assign(chain, filterMethods, {\n      async single<T = SelectedRow>(cols?: AthenaSelectInput, opts?: AthenaGatewayCallOptions) {\n        const r = await runSelect<T[]>(\n          cols ?? columns,\n          opts ?? options,\n          snapshotState(),\n          callsiteStore.resolve(captureTraceCallsite(tracer)),\n        )\n        return toSingleResult(r)\n      },\n      maybeSingle<T = SelectedRow>(cols?: AthenaSelectInput, opts?: AthenaGatewayCallOptions) {\n        return chain.single<T, AthenaSelectInput>(cols, opts)\n      },\n      then<T1 = AthenaResult<SelectedRow[]>, T2 = never>(\n        onfulfilled?: (v: AthenaResult<SelectedRow[]>) => T1 | PromiseLike<T1>,\n        onrejected?: (reason: unknown) => T2 | PromiseLike<T2>,\n      ) {\n        return runSelect<SelectedRow[]>(\n          columns,\n          options,\n          snapshotState(),\n          callsiteStore.resolve(),\n        ).then(onfulfilled, onrejected)\n      },\n      catch<T = never>(onrejected?: (reason: unknown) => T | PromiseLike<T>) {\n        return runSelect<SelectedRow[]>(columns, options, snapshotState(), callsiteStore.resolve()).catch(\n          onrejected,\n        )\n      },\n      finally(onfinally?: () => void) {\n        return runSelect<SelectedRow[]>(columns, options, snapshotState(), callsiteStore.resolve()).finally(\n          onfinally,\n        )\n      },\n    })\n    return chain\n  }\n\n  Object.assign(builder, filterMethods, {\n    reset() {\n      state.conditions = []\n      state.limit = undefined\n      state.offset = undefined\n      state.order = undefined\n      state.currentPage = undefined\n      state.pageSize = undefined\n      state.totalPages = undefined\n      return builder\n    },\n    select<T = Row>(columns: AthenaSelectInput = DEFAULT_COLUMNS, options?: AthenaGatewayCallOptions) {\n      return createSelectChain<T>(columns, options, captureTraceCallsite(tracer))\n    },\n    async findMany<const TSelect extends AthenaSelectShape>(\n      options: AthenaFindManyOptions<Row, TSelect> & {\n        select: AthenaValidatedSelectShape<TSelect>\n      },\n    ) {\n      const columns = compileSelectShape(options.select)\n      const baseState = snapshotState()\n      const executionState = snapshotState()\n      const callsite = captureTraceCallsite(tracer)\n      const compiledWhere = compileWhere(options.where)\n      if (compiledWhere?.length) {\n        executionState.conditions.push(...compiledWhere)\n      }\n      if (options.orderBy !== undefined) {\n        executionState.order = compileOrderBy<Row>(options.orderBy)\n      }\n      if (options.limit !== undefined) {\n        executionState.limit = options.limit\n      }\n      if (\n        behavior?.findManyAst &&\n        canUseFindManyAstTransport(baseState) &&\n        !selectShapeUsesRelationSchema(options.select) &&\n        !findManyAstWhereRequiresLegacyTransport(options.where)\n      ) {\n        const resolvedTableName = resolveTableNameForCall(tableName, undefined)\n        const payload: AthenaFindManyAstPayload<Row, TSelect> = {\n          table_name: resolvedTableName,\n          select: options.select,\n        }\n        if (options.where !== undefined) {\n          payload.where = normalizeFindManyAstWhere(options.where)\n        }\n        const astOrder = toFindManyAstOrder<Row>(executionState.order)\n        if (astOrder !== undefined) {\n          payload.orderBy = astOrder\n        }\n        if (executionState.limit !== undefined) {\n          payload.limit = executionState.limit\n        }\n        const sql = buildDebugSelectQuery({\n          tableName: resolvedTableName,\n          columns,\n          conditions: executionState.conditions,\n          limit: executionState.limit,\n          order: executionState.order,\n        })\n        const debugAst = debugAstEnabled\n          ? buildFindManyDirectDebugAst({\n              tableName: resolvedTableName,\n              options,\n              compiledColumns: columns,\n              baseState,\n              executionState,\n              payload,\n            })\n          : undefined\n        return executeRead(behavior, () =>\n          executeWithQueryTrace(\n            tracer,\n            {\n              operation: 'select',\n              endpoint: '/gateway/fetch',\n              table: resolvedTableName,\n              sql,\n              payload,\n              ast: debugAst,\n            },\n            async () => {\n              const response = await client.fetchGateway<Array<AthenaFindManyResult<Row, TSelect, TContext>>>(\n                payload,\n              )\n              return formatGatewayResult(response, { table: resolvedTableName, operation: 'select' })\n            },\n            callsite,\n          ),\n        )\n      }\n      return runSelect<Array<AthenaFindManyResult<Row, TSelect, TContext>>>(\n        columns,\n        undefined,\n        executionState,\n        callsite,\n        debugAstEnabled\n          ? ({ tableName: resolvedTableName, executionState: tracedState, plan }) =>\n              buildFindManyCompiledDebugAst({\n                tableName: resolvedTableName,\n                options,\n                compiledColumns: columns,\n                baseState,\n                executionState: tracedState,\n                plan,\n              })\n          : undefined,\n      )\n    },\n    insert(values: Insert | Insert[], options?: AthenaGatewayCallOptions) {\n      const mutationCallsite = captureTraceCallsite(tracer)\n      if (Array.isArray(values)) {\n        const executeInsertMany = async (\n          columns?: string | string[],\n          selectOptions?: AthenaGatewayCallOptions,\n          callsite?: AthenaQueryTraceCallsite | null,\n        ) => {\n          const mergedOptions = mergeOptions(options, selectOptions)\n          const resolvedTableName = resolveTableNameForCall(tableName, mergedOptions?.schema)\n          const payload: AthenaInsertPayload = {\n            table_name: resolvedTableName,\n            insert_body: asAthenaJsonObjectArray(values),\n          }\n          if (columns) payload.columns = columns\n          if (mergedOptions?.count) payload.count = mergedOptions.count\n          if (mergedOptions?.head) payload.head = mergedOptions.head\n          if (mergedOptions?.defaultToNull !== undefined) {\n            payload.default_to_null = mergedOptions.defaultToNull\n          }\n          const sql = buildInsertDebugSql(payload)\n          const debugAst = debugAstEnabled ? buildInsertDebugAst(payload) : undefined\n          return executeWithQueryTrace(\n            tracer,\n            {\n              operation: 'insert',\n              endpoint: '/gateway/insert',\n              table: resolvedTableName,\n              sql,\n              payload,\n              ast: debugAst,\n              options: mergedOptions,\n            },\n            async () => {\n              const response = await client.insertGateway<Row[]>(payload, mergedOptions)\n              return formatGatewayResult(response, { table: resolvedTableName, operation: 'insert' })\n            },\n            callsite,\n          )\n        }\n        return createMutationQuery<Row[]>(executeInsertMany, DEFAULT_COLUMNS, tracer, mutationCallsite)\n      }\n      const executeInsertOne = async (\n        columns?: string | string[],\n        selectOptions?: AthenaGatewayCallOptions,\n        callsite?: AthenaQueryTraceCallsite | null,\n      ) => {\n        const mergedOptions = mergeOptions(options, selectOptions)\n        const resolvedTableName = resolveTableNameForCall(tableName, mergedOptions?.schema)\n        const payload: AthenaInsertPayload = {\n          table_name: resolvedTableName,\n          insert_body: asAthenaJsonObject(values),\n        }\n        if (columns) payload.columns = columns\n        if (mergedOptions?.count) payload.count = mergedOptions.count\n        if (mergedOptions?.head) payload.head = mergedOptions.head\n        if (mergedOptions?.defaultToNull !== undefined) {\n          payload.default_to_null = mergedOptions.defaultToNull\n        }\n        const sql = buildInsertDebugSql(payload)\n        const debugAst = debugAstEnabled ? buildInsertDebugAst(payload) : undefined\n        return executeWithQueryTrace(\n          tracer,\n          {\n            operation: 'insert',\n            endpoint: '/gateway/insert',\n            table: resolvedTableName,\n            sql,\n            payload,\n            ast: debugAst,\n            options: mergedOptions,\n          },\n          async () => {\n            const response = await client.insertGateway<Row>(payload, mergedOptions)\n            return formatGatewayResult(response, { table: resolvedTableName, operation: 'insert' })\n          },\n          callsite,\n        )\n      }\n      return createMutationQuery<Row>(executeInsertOne, DEFAULT_COLUMNS, tracer, mutationCallsite)\n    },\n    upsert(\n      values: Insert | Insert[],\n      options?: AthenaGatewayCallOptions & { updateBody?: Update; onConflict?: string | string[] },\n    ) {\n      const mutationCallsite = captureTraceCallsite(tracer)\n      if (Array.isArray(values)) {\n        const executeUpsertMany = async (\n          columns?: string | string[],\n          selectOptions?: AthenaGatewayCallOptions,\n          callsite?: AthenaQueryTraceCallsite | null,\n        ) => {\n          const mergedOptions = mergeOptions(options, selectOptions)\n          const resolvedTableName = resolveTableNameForCall(tableName, mergedOptions?.schema)\n          const payload: AthenaInsertPayload = {\n            table_name: resolvedTableName,\n            insert_body: asAthenaJsonObjectArray(values),\n            update_body: options?.updateBody ? asAthenaJsonObject(options.updateBody) : undefined,\n          }\n          if (columns) payload.columns = columns\n          if (options?.onConflict) payload.on_conflict = options.onConflict\n          if (mergedOptions?.count) payload.count = mergedOptions.count\n          if (mergedOptions?.head) payload.head = mergedOptions.head\n          if (mergedOptions?.defaultToNull !== undefined) {\n            payload.default_to_null = mergedOptions.defaultToNull\n          }\n          const sql = buildInsertDebugSql(payload)\n          const debugAst = debugAstEnabled ? buildUpsertDebugAst(payload) : undefined\n          return executeWithQueryTrace(\n            tracer,\n            {\n              operation: 'upsert',\n              endpoint: '/gateway/insert',\n              table: resolvedTableName,\n              sql,\n              payload,\n              ast: debugAst,\n              options: mergedOptions,\n            },\n            async () => {\n              const response = await client.insertGateway<Row[]>(payload, mergedOptions)\n              return formatGatewayResult(response, { table: resolvedTableName, operation: 'insert' })\n            },\n            callsite,\n          )\n        }\n        return createMutationQuery<Row[]>(executeUpsertMany, DEFAULT_COLUMNS, tracer, mutationCallsite)\n      }\n      const executeUpsertOne = async (\n        columns?: string | string[],\n        selectOptions?: AthenaGatewayCallOptions,\n        callsite?: AthenaQueryTraceCallsite | null,\n      ) => {\n        const mergedOptions = mergeOptions(options, selectOptions)\n        const resolvedTableName = resolveTableNameForCall(tableName, mergedOptions?.schema)\n        const payload: AthenaInsertPayload = {\n          table_name: resolvedTableName,\n          insert_body: asAthenaJsonObject(values),\n          update_body: options?.updateBody ? asAthenaJsonObject(options.updateBody) : undefined,\n        }\n        if (columns) payload.columns = columns\n        if (options?.onConflict) payload.on_conflict = options.onConflict\n        if (mergedOptions?.count) payload.count = mergedOptions.count\n        if (mergedOptions?.head) payload.head = mergedOptions.head\n        if (mergedOptions?.defaultToNull !== undefined) {\n          payload.default_to_null = mergedOptions.defaultToNull\n        }\n        const sql = buildInsertDebugSql(payload)\n        const debugAst = debugAstEnabled ? buildUpsertDebugAst(payload) : undefined\n        return executeWithQueryTrace(\n          tracer,\n          {\n            operation: 'upsert',\n            endpoint: '/gateway/insert',\n            table: resolvedTableName,\n            sql,\n            payload,\n            ast: debugAst,\n            options: mergedOptions,\n          },\n          async () => {\n            const response = await client.insertGateway<Row>(payload, mergedOptions)\n            return formatGatewayResult(response, { table: resolvedTableName, operation: 'insert' })\n          },\n          callsite,\n        )\n      }\n      return createMutationQuery<Row>(executeUpsertOne, DEFAULT_COLUMNS, tracer, mutationCallsite)\n    },\n    update(values: Update, options?: AthenaGatewayCallOptions) {\n      const mutationCallsite = captureTraceCallsite(tracer)\n      const executeUpdate = async (\n        columns?: string | string[],\n        selectOptions?: AthenaGatewayCallOptions,\n        callsite?: AthenaQueryTraceCallsite | null,\n      ) => {\n        const executionState = snapshotState()\n        const filters = executionState.conditions.length ? [...executionState.conditions] : undefined\n        const mergedOptions = mergeOptions(options, selectOptions)\n        const resolvedTableName = resolveTableNameForCall(tableName, mergedOptions?.schema)\n        const payload: AthenaUpdatePayload = {\n          table_name: resolvedTableName,\n          update_body: asAthenaJsonObject(values),\n          conditions: filters,\n          strip_nulls: mergedOptions?.stripNulls ?? true,\n        }\n        if (executionState.order) payload.sort_by = executionState.order\n        if (executionState.currentPage !== undefined) payload.current_page = executionState.currentPage\n        if (executionState.pageSize !== undefined) payload.page_size = executionState.pageSize\n        if (executionState.totalPages !== undefined) payload.total_pages = executionState.totalPages\n        if (columns) payload.columns = columns\n        const sql = buildUpdateDebugSql(payload)\n        const debugAst = debugAstEnabled\n          ? buildUpdateDebugAst({\n              state: executionState,\n              payload,\n            })\n          : undefined\n        return executeWithQueryTrace(\n          tracer,\n          {\n            operation: 'update',\n            endpoint: '/gateway/update',\n            table: resolvedTableName,\n            sql,\n            payload,\n            ast: debugAst,\n            options: mergedOptions,\n          },\n          async () => {\n            const response = await client.updateGateway<Row[]>(payload, mergedOptions)\n            return formatGatewayResult(response, { table: resolvedTableName, operation: 'update' })\n          },\n          callsite,\n        )\n      }\n      const mutation = createMutationQuery<Row[]>(executeUpdate, null, tracer, mutationCallsite)\n      const updateChain = {} as UpdateChain<Row>\n      const filterMethods = createFilterMethods<UpdateChain<Row>, Row>(state, addCondition, updateChain)\n      Object.assign(updateChain, filterMethods, mutation)\n      return updateChain\n    },\n    delete(options?: AthenaGatewayCallOptions & { resourceId?: string }) {\n      const filters = state.conditions.length ? [...state.conditions] : undefined\n      const resourceId = options?.resourceId ?? getResourceId(state)\n      if (!resourceId && !filters?.length) {\n        throw new Error('delete requires a resource_id either via eq(\"resource_id\", ...) or options.resourceId')\n      }\n      const mutationCallsite = captureTraceCallsite(tracer)\n      const executeDelete = async (\n        columns?: string | string[],\n        selectOptions?: AthenaGatewayCallOptions,\n        callsite?: AthenaQueryTraceCallsite | null,\n      ) => {\n        const executionState = snapshotState()\n        const debugState: TableBuilderState = {\n          ...executionState,\n          conditions: filters ? filters.map(condition => ({ ...condition })) : [],\n        }\n        const mergedOptions = mergeOptions(options, selectOptions)\n        const resolvedTableName = resolveTableNameForCall(tableName, mergedOptions?.schema)\n        const payload: AthenaDeletePayload = {\n          table_name: resolvedTableName,\n          resource_id: resourceId,\n          conditions: filters,\n        }\n        if (executionState.order) payload.sort_by = executionState.order\n        if (executionState.currentPage !== undefined) payload.current_page = executionState.currentPage\n        if (executionState.pageSize !== undefined) payload.page_size = executionState.pageSize\n        if (executionState.totalPages !== undefined) payload.total_pages = executionState.totalPages\n        if (columns) payload.columns = columns\n        const sql = buildDeleteDebugSql(payload)\n        const debugAst = debugAstEnabled\n          ? buildDeleteDebugAst({\n              state: debugState,\n              payload,\n            })\n          : undefined\n        return executeWithQueryTrace(\n          tracer,\n          {\n            operation: 'delete',\n            endpoint: '/gateway/delete',\n            table: resolvedTableName,\n            sql,\n            payload,\n            ast: debugAst,\n            options: mergedOptions,\n          },\n          async () => {\n            const response = await client.deleteGateway<Row | null>(payload, mergedOptions)\n            return formatGatewayResult(response, { table: resolvedTableName, operation: 'delete' })\n          },\n          callsite,\n        )\n      }\n      return createMutationQuery<Row | null>(executeDelete, null, tracer, mutationCallsite)\n    },\n    async single<T = Row>(columns?: AthenaSelectInput, options?: AthenaGatewayCallOptions) {\n      const response = await runSelect<T[]>(\n        columns ?? DEFAULT_COLUMNS,\n        options,\n        snapshotState(),\n        captureTraceCallsite(tracer),\n      )\n      return toSingleResult(response)\n    },\n    async maybeSingle<T = Row>(columns?: AthenaSelectInput, options?: AthenaGatewayCallOptions) {\n      return builder.single<T, AthenaSelectInput>(columns, options)\n    },\n  })\n\n  return builder\n}\n\nfunction createQueryBuilder(\n  client: ReturnType<typeof createAthenaGatewayClient>,\n  formatGatewayResult: AthenaResultFormatter,\n  behavior?: InternalClientBehaviorOptions,\n  tracer?: AthenaQueryTracer,\n) {\n  const debugAstEnabled = Boolean(behavior?.debugAst)\n  return async function query<Row = unknown>(\n    query: string,\n    options?: AthenaGatewayCallOptions,\n  ): Promise<AthenaResult<Row[]>> {\n    const normalizedQuery = query.trim()\n    if (!normalizedQuery) {\n      throw new Error('query requires a non-empty string')\n    }\n    const payload = { query: normalizedQuery }\n    const callsite = captureTraceCallsite(tracer)\n    return executeRead(behavior, () =>\n      executeWithQueryTrace(\n        tracer,\n        {\n          operation: 'query',\n          endpoint: '/gateway/query',\n          sql: normalizedQuery,\n          payload,\n          ast: debugAstEnabled ? buildRawQueryDebugAst(normalizedQuery) : undefined,\n          options,\n        },\n        async () => {\n          const response = await client.queryGateway<Row[]>(payload, options)\n          return formatGatewayResult(response, { operation: 'query' })\n        },\n        callsite,\n      ),\n    )\n  }\n}\n\nexport interface InternalAthenaClient<TModels = never> {\n  from<TModel extends AthenaModelTarget>(\n    model: TModel,\n  ): TableQueryBuilder<RowOf<TModel>, InsertOf<TModel>, UpdateOf<TModel>>\n  from<TTableName extends AthenaClientTableName<TModels>>(\n    table: TTableName,\n    options?: AthenaFromOptions,\n  ): ClientTableQueryBuilder<TModels, TTableName>\n  from<\n    Row = AthenaRowShape,\n    Insert = Partial<Row>,\n    Update = Partial<Insert>,\n  >(\n    table: UntypedTableName<TModels>,\n    options?: AthenaFromOptions,\n  ): TableQueryBuilder<Row, Insert, Update>\n  db: AthenaDbModule<TModels>\n  auth: AthenaAuthBindings\n  chat: AthenaChatModule\n  storage: AthenaStorageModule\n  rpc<Row = unknown, Args extends AthenaJsonObject = AthenaJsonObject>(\n    fn: string,\n    args?: Args,\n    options?: AthenaRpcCallOptions,\n  ): RpcQueryBuilder<Row>\n  query<Row = unknown>(query: string, options?: AthenaGatewayCallOptions): Promise<AthenaResult<Row[]>>\n  request<T = unknown>(options: AthenaRequestOptions): Promise<AthenaRequestResponse<T>>\n  verifyConnection(options?: AthenaGatewayConnectionOptions): Promise<AthenaGatewayConnectionResult>\n}\n\nexport interface InternalClientChatOptions {\n  wsUrl?: string | null | undefined\n  webSocketFactory?: AthenaChatWebSocketFactory | null | undefined\n}\n\nexport type InternalClientAuthOptions = Omit<\n  AthenaAuthClientConfig,\n  'baseUrl' | 'apiKey' | 'bearerToken' | 'cookie' | 'sessionToken'\n>\n\nexport interface InternalClientConfig<TModels extends AthenaClientModelsInput | never = never> {\n  baseUrl: string\n  apiKey: string\n  client?: string | null | undefined\n  /** Direct PostgreSQL URI forwarded as `x-pg-uri` on gateway requests. */\n  pgUri?: string | null | undefined\n  jdbcUrl?: string | null | undefined\n  backend?: BackendConfig\n  headers?: Record<string, string>\n  auth?: InternalClientAuthOptions\n  authUrl?: string\n  chat?: InternalClientChatOptions\n  chatUrl?: string\n  chatWsUrl?: string\n  storageUrl?: string\n  storage?: AthenaStorageClientConfig\n  behavior?: InternalClientBehaviorOptions\n  models?: TModels\n}\n\nexport interface InternalClientRequestContext {\n  headers?: Record<string, string>\n  userId?: string | null\n  organizationId?: string | null\n  bearerToken?: string | null\n  cookie?: string | null\n  sessionToken?: string | null\n  forceNoCache?: boolean\n}\n\nexport type InternalClientContextResolver = () =>\n  | InternalClientRequestContext\n  | undefined\n  | Promise<InternalClientRequestContext | undefined>\n\nexport interface InternalAthenaClientCore<\n  TModels extends AthenaClientModelsInput | never = never,\n> {\n  readonly config: InternalClientConfig<TModels>\n  readonly gatewayTransport: AthenaGatewayClient\n  readonly formatGatewayResult: AthenaResultFormatter\n  readonly queryTracer: AthenaQueryTracer | undefined\n  readonly normalizedAuthConfig: AthenaAuthClientConfig | undefined\n}\n\nfunction buildContextHeaders(\n  context: InternalClientRequestContext,\n): Record<string, string> | undefined {\n  const headers: Record<string, string> = {}\n  if (context.userId != null) {\n    headers['X-User-Id'] = context.userId\n  }\n  if (context.organizationId != null) {\n    headers['X-Organization-Id'] = context.organizationId\n  }\n  Object.assign(headers, context.headers)\n  return Object.keys(headers).length > 0 ? headers : undefined\n}\n\nfunction normalizeAuthClientConfig(\n  auth: InternalClientAuthOptions | undefined,\n  defaultBaseUrl?: string,\n): AthenaAuthClientConfig | undefined {\n  if (!auth && defaultBaseUrl === undefined) {\n    return undefined\n  }\n\n  const normalized: AthenaAuthClientConfig = {\n    ...(auth ?? {}),\n  }\n  const resolvedBaseUrl = defaultBaseUrl\n    ? normalizeAthenaGatewayBaseUrl(defaultBaseUrl, { label: 'Athena auth base URL' })\n    : undefined\n\n  if (resolvedBaseUrl !== undefined) {\n    normalized.baseUrl = resolvedBaseUrl\n  }\n  return normalized\n}\n\nexport function createInternalClientCore<\n  TModels extends AthenaClientModelsInput | never = never,\n>(\n  config: InternalClientConfig<TModels>,\n): InternalAthenaClientCore<TModels> {\n  const normalizedAuthConfig = normalizeAuthClientConfig(config.auth, config.authUrl)\n  const gatewayTransport = createAthenaGatewayClient({\n    baseUrl: config.baseUrl,\n    apiKey: config.apiKey,\n    client: config.client ?? undefined,\n    pgUri: config.pgUri,\n    jdbcUrl: config.jdbcUrl,\n    backend: config.backend,\n    headers: config.headers,\n  })\n  return Object.freeze({\n    config,\n    gatewayTransport,\n    formatGatewayResult: createResultFormatter(),\n    queryTracer: createQueryTracer(config.behavior),\n    normalizedAuthConfig,\n  })\n}\n\nexport function createInternalClientView<\n  TModels extends AthenaClientModelsInput | never = never,\n>(\n  core: InternalAthenaClientCore<TModels>,\n  resolveContext: InternalClientContextResolver,\n): InternalAthenaClient<TModels> {\n  const { config, formatGatewayResult, normalizedAuthConfig, queryTracer } = core\n  const gateway = createAthenaGatewayClientView(core.gatewayTransport, async () => {\n    const context = await resolveContext()\n    return context\n      ? {\n          headers: context.headers,\n          userId: context.userId,\n          organizationId: context.organizationId,\n          bearerToken: context.bearerToken,\n          cookie: context.cookie,\n          sessionToken: context.sessionToken,\n          forceNoCache: context.forceNoCache,\n        }\n      : undefined\n  })\n  const auth = createAuthModule({\n    ...(normalizedAuthConfig ?? {}),\n  }, {\n    async resolveCallOptions() {\n      const context = await resolveContext()\n      return context\n        ? {\n            headers: buildContextHeaders(context),\n            bearerToken: context.bearerToken ?? undefined,\n            cookie: context.cookie ?? undefined,\n            sessionToken: context.sessionToken ?? undefined,\n            forceNoCache: context.forceNoCache,\n          }\n        : undefined\n    },\n  })\n  function from<TModel extends AthenaModelTarget>(\n    model: TModel,\n  ): TableQueryBuilder<RowOf<TModel>, InsertOf<TModel>, UpdateOf<TModel>>\n  function from<TTableName extends AthenaClientTableName<TModels>>(\n    table: TTableName,\n    options?: AthenaFromOptions,\n  ): ClientTableQueryBuilder<TModels, TTableName>\n  function from<\n    Row = AthenaRowShape,\n    Insert = Partial<Row>,\n    Update = Partial<Insert>,\n  >(\n    table: UntypedTableName<TModels>,\n    options?: AthenaFromOptions,\n  ): TableQueryBuilder<Row, Insert, Update>\n  function from<\n    Row = AthenaRowShape,\n    Insert = Partial<Row>,\n    Update = Partial<Insert>,\n  >(\n    tableOrModel: string | AthenaModelTarget<Row, Insert, Update>,\n    options?: AthenaFromOptions,\n  ): TableQueryBuilder<Row, Insert, Update> {\n    if (isAthenaModelTarget(tableOrModel)) {\n      if (options?.schema !== undefined) {\n        throw new Error(\n          'from(model) does not accept a schema override because the model already defines its target.',\n        )\n      }\n      return createTableBuilder<Row, Insert, Update>(\n        resolveAthenaModelTargetTableName(tableOrModel),\n        gateway,\n        formatGatewayResult,\n        queryTracer,\n        config.behavior,\n      )\n    }\n\n    const resolvedTableName = resolveTableNameForCall(tableOrModel as string, options?.schema)\n    return createTableBuilder<Row, Insert, Update>(\n      resolvedTableName,\n      gateway,\n      formatGatewayResult,\n      queryTracer,\n      config.behavior,\n    )\n  }\n  const rpc: InternalAthenaClient<TModels>['rpc'] = <Row = unknown, Args extends AthenaJsonObject = AthenaJsonObject>(\n    fn: string,\n    args?: Args,\n    options?: AthenaRpcCallOptions,\n  ) => {\n    const normalizedFn = fn.trim()\n    if (!normalizedFn) {\n      throw new Error('rpc requires a function name')\n    }\n    return createRpcBuilder<Row>(\n      normalizedFn,\n      args as AthenaJsonObject | undefined,\n      options,\n      gateway,\n      formatGatewayResult,\n      queryTracer,\n      captureTraceCallsite(queryTracer),\n      Boolean(config.behavior?.debugAst),\n    )\n  }\n  const query = createQueryBuilder(\n    gateway,\n    formatGatewayResult,\n    config.behavior,\n    queryTracer,\n  ) as InternalAthenaClient<TModels>['query']\n  const untypedDbFrom = from as unknown as AthenaDbModule['from']\n  const db = {\n    from,\n    select<Row = AthenaRowShape>(\n      table: string,\n      first?: AthenaGatewayCallOptions | AthenaSelectInput,\n      second?: AthenaGatewayCallOptions,\n    ) {\n      if (first && typeof first === 'object' && !Array.isArray(first)) {\n        return untypedDbFrom<Row>(table).select(undefined, first as AthenaGatewayCallOptions)\n      }\n      return untypedDbFrom<Row>(table).select(first, second)\n    },\n    insert<Row = AthenaRowShape, Insert = Partial<Row>>(\n      table: string,\n      values: Insert | Insert[],\n      options?: AthenaGatewayCallOptions,\n    ) {\n      return Array.isArray(values)\n        ? untypedDbFrom<Row, Insert, Partial<Insert>>(table).insert(values, options)\n        : untypedDbFrom<Row, Insert, Partial<Insert>>(table).insert(values, options)\n    },\n    upsert<Row = AthenaRowShape, Insert = Partial<Row>, Update = Partial<Insert>>(\n      table: string,\n      values: Insert | Insert[],\n      options?: AthenaGatewayCallOptions & {\n        updateBody?: Update\n        onConflict?: string | string[]\n      },\n    ) {\n      return Array.isArray(values)\n        ? untypedDbFrom<Row, Insert, Update>(table).upsert(values, options)\n        : untypedDbFrom<Row, Insert, Update>(table).upsert(values, options)\n    },\n    update<Row = AthenaRowShape, Insert = Partial<Row>, Update = Partial<Insert>>(\n      table: string,\n      values: Update,\n      options?: AthenaGatewayCallOptions,\n    ) {\n      return untypedDbFrom<Row, Insert, Update>(table).update(values, options)\n    },\n    delete<Row = AthenaRowShape>(\n      table: string,\n      options?: AthenaGatewayCallOptions & { resourceId?: string },\n    ) {\n      return untypedDbFrom<Row>(table).delete(options)\n    },\n    rpc,\n    query,\n  } as AthenaDbModule<TModels>\n  const chat = createChatModule({\n    baseUrl: config.chatUrl,\n    apiKey: config.apiKey,\n    client: config.client ?? undefined,\n    headers: config.headers,\n    wsUrl: config.chatWsUrl,\n    webSocketFactory: config.chat?.webSocketFactory ?? undefined,\n  }, {\n    async resolveCallOptions() {\n      const context = await resolveContext()\n      return context\n        ? {\n            headers: buildContextHeaders(context),\n            bearerToken: context.bearerToken,\n            cookie: context.cookie,\n            sessionToken: context.sessionToken,\n            forceNoCache: context.forceNoCache,\n          }\n        : undefined\n    },\n  })\n  const request = createAthenaRequest(config, resolveContext)\n  const storage = createStorageModule(gateway, {\n    ...config.storage,\n    ...(config.storageUrl\n      ? {\n          baseUrl: config.storageUrl,\n          stripBasePath: true,\n        }\n      : {}),\n  })\n\n  return {\n    from,\n    db,\n    rpc,\n    query,\n    request,\n    verifyConnection: gateway.verifyConnection,\n    auth: auth.auth,\n    chat,\n    storage,\n  } as InternalAthenaClient<TModels>\n}\n","/**\n * Athena billing HTTP client for live `/billing/v1/*`, `/admin/billing/*`,\n * provider webhook, and `/debug/billing` routes.\n *\n * Methods map 1:1 onto the registered Actix handlers. Auth uses the static\n * Athena admin key (`X-Athena-Key` / configured API key) matching the server\n * `authorize_static_admin_key` gate.\n *\n * Contract spine: `billingSdkManifest` METHOD+path entries must match the\n * permanent Rust inventory `athena_billing::LIVE_HTTP_ROUTES`\n * (exported as `./live-http-routes.json`). Export with\n * `cargo run -p athena-billing --bin billing-contract-spine -- --write`.\n */\n\nimport { buildSdkHeaderValue } from '../sdk-version.ts'\nimport {\n  buildAthenaRequestHeaders,\n  hasHeaderIgnoreCase,\n} from '../utils/athena-request-headers.ts'\nimport { normalizeAthenaGatewayBaseUrl } from '../gateway/url.ts'\n\nconst SDK_NAME = 'xylex-group/athena-billing'\nconst SDK_HEADER_VALUE = buildSdkHeaderValue(SDK_NAME)\n\nexport type AthenaBillingHttpMethod = 'GET' | 'POST' | 'PATCH' | 'DELETE'\n\nexport type AthenaBillingJson =\n  | null\n  | boolean\n  | number\n  | string\n  | AthenaBillingJson[]\n  | { [key: string]: AthenaBillingJson }\n\nexport interface AthenaBillingCallOptions {\n  headers?: Record<string, string>\n  signal?: AbortSignal\n  apiKey?: string | null\n}\n\nexport interface AthenaBillingClientConfig {\n  baseUrl: string\n  apiKey: string\n  client?: string | null\n  headers?: Record<string, string>\n  fetchImpl?: typeof fetch\n}\n\nexport interface AthenaBillingEnvelope<T = unknown> {\n  status?: string\n  message?: string\n  data: T\n}\n\nexport class AthenaBillingError extends Error {\n  status: number\n  endpoint: string\n  method: string\n  body: unknown\n\n  constructor(input: {\n    message: string\n    status: number\n    endpoint: string\n    method: string\n    body: unknown\n  }) {\n    super(input.message)\n    this.name = 'AthenaBillingError'\n    this.status = input.status\n    this.endpoint = input.endpoint\n    this.method = input.method\n    this.body = input.body\n  }\n}\n\nexport interface BillingConnectionRefInput {\n  connectionId: string\n  clientName?: string\n}\n\nexport interface BillingListQuery extends BillingConnectionRefInput {\n  cursor?: string\n  source?: 'provider' | 'persistence' | string\n  limit?: number\n  offset?: number\n}\n\nexport interface BillingEnsureCustomerInput extends BillingConnectionRefInput {\n  email?: string | null\n  name?: string | null\n  metadata?: Record<string, AthenaBillingJson>\n  idempotencyKey: string\n}\n\nexport interface BillingUpdateCustomerInput extends BillingConnectionRefInput {\n  email?: string | null\n  name?: string | null\n}\n\nexport interface BillingCreateConnectionInput {\n  ownerKind: string\n  ownerId: string\n  provider: string\n  mode?: string\n  status?: string\n  credentialKind?: string\n  providerAccountId: string\n  providerProfileId?: string | null\n  scopes?: string[]\n  config?: Record<string, AthenaBillingJson>\n  metadata?: Record<string, AthenaBillingJson>\n}\n\nexport interface BillingUpdateConnectionInput {\n  status?: string\n  mode?: string\n  credentialKind?: string\n  providerAccountId?: string\n  providerProfileId?: string | null\n  scopes?: string[]\n  config?: Record<string, AthenaBillingJson>\n  metadata?: Record<string, AthenaBillingJson>\n}\n\nexport interface BillingReconcileInput {\n  resourceKind: string\n  resourceId: string\n  customerId?: string | null\n}\n\nexport interface BillingProvisionSinksInput {\n  targetSchema?: string\n  instance?: string\n}\n\nexport const billingSdkManifest = {\n  namespace: 'billing',\n  envelopeKind: 'athena',\n  methods: [\n    { name: 'getCapabilities', method: 'GET', path: '/billing/v1/capabilities' },\n    { name: 'createCheckout', method: 'POST', path: '/billing/v1/checkouts' },\n    { name: 'listCustomers', method: 'GET', path: '/billing/v1/customers' },\n    { name: 'createCustomer', method: 'POST', path: '/billing/v1/customers' },\n    { name: 'getCustomer', method: 'GET', path: '/billing/v1/customers/{id}' },\n    { name: 'updateCustomer', method: 'PATCH', path: '/billing/v1/customers/{id}' },\n    { name: 'deleteCustomer', method: 'DELETE', path: '/billing/v1/customers/{id}' },\n    { name: 'listPayments', method: 'GET', path: '/billing/v1/payments' },\n    { name: 'createPayment', method: 'POST', path: '/billing/v1/payments' },\n    { name: 'getPayment', method: 'GET', path: '/billing/v1/payments/{id}' },\n    { name: 'cancelPayment', method: 'POST', path: '/billing/v1/payments/{id}/cancel' },\n    { name: 'listPaymentLinks', method: 'GET', path: '/billing/v1/payment-links' },\n    { name: 'createPaymentLink', method: 'POST', path: '/billing/v1/payment-links' },\n    { name: 'getPaymentLink', method: 'GET', path: '/billing/v1/payment-links/{id}' },\n    { name: 'updatePaymentLink', method: 'PATCH', path: '/billing/v1/payment-links/{id}' },\n    { name: 'deletePaymentLink', method: 'DELETE', path: '/billing/v1/payment-links/{id}' },\n    { name: 'listRefunds', method: 'GET', path: '/billing/v1/refunds' },\n    { name: 'createRefund', method: 'POST', path: '/billing/v1/refunds' },\n    { name: 'getRefund', method: 'GET', path: '/billing/v1/refunds/{id}' },\n    { name: 'cancelRefund', method: 'POST', path: '/billing/v1/refunds/{id}/cancel' },\n    { name: 'listSubscriptions', method: 'GET', path: '/billing/v1/subscriptions' },\n    { name: 'createSubscription', method: 'POST', path: '/billing/v1/subscriptions' },\n    { name: 'getSubscription', method: 'GET', path: '/billing/v1/subscriptions/{id}' },\n    { name: 'updateSubscription', method: 'PATCH', path: '/billing/v1/subscriptions/{id}' },\n    { name: 'cancelSubscription', method: 'POST', path: '/billing/v1/subscriptions/{id}/cancel' },\n    { name: 'listInvoices', method: 'GET', path: '/billing/v1/invoices' },\n    { name: 'getInvoice', method: 'GET', path: '/billing/v1/invoices/{id}' },\n    {\n      name: 'listConnections',\n      method: 'GET',\n      path: '/admin/billing/clients/{client_name}/connections',\n    },\n    {\n      name: 'createConnection',\n      method: 'POST',\n      path: '/admin/billing/clients/{client_name}/connections',\n    },\n    {\n      name: 'getConnection',\n      method: 'GET',\n      path: '/admin/billing/clients/{client_name}/connections/{connection_id}',\n    },\n    {\n      name: 'updateConnection',\n      method: 'PATCH',\n      path: '/admin/billing/clients/{client_name}/connections/{connection_id}',\n    },\n    {\n      name: 'deleteConnection',\n      method: 'DELETE',\n      path: '/admin/billing/clients/{client_name}/connections/{connection_id}',\n    },\n    {\n      name: 'reconcileDocument',\n      method: 'POST',\n      path: '/admin/billing/clients/{client_name}/connections/{connection_id}/reconcile',\n    },\n    {\n      name: 'listWebhookEvents',\n      method: 'GET',\n      path: '/admin/billing/clients/{client_name}/webhook-events',\n    },\n    {\n      name: 'provisionWebhookSinks',\n      method: 'POST',\n      path: '/admin/billing/clients/{client_name}/webhook-sinks/provision',\n    },\n    { name: 'listGrants', method: 'GET', path: '/admin/billing/grants' },\n    { name: 'listProviders', method: 'GET', path: '/admin/billing/providers' },\n    {\n      name: 'listSinkHelpers',\n      method: 'GET',\n      path: '/admin/webhook-sinks/helpers/billing',\n    },\n    {\n      name: 'ingestProviderWebhook',\n      method: 'POST',\n      path: '/billing/providers/{provider}/clients/{client_name}/connections/{connection_id}/webhook',\n    },\n    { name: 'getDebugBilling', method: 'GET', path: '/debug/billing' },\n  ],\n} as const\n\nfunction withPathParam(path: string, name: string, value: string): string {\n  return path.replace(`{${name}}`, encodeURIComponent(value))\n}\n\nfunction appendQuery(\n  path: string,\n  query?: Record<string, string | number | boolean | null | undefined>,\n): string {\n  if (!query) return path\n  const params = new URLSearchParams()\n  for (const [key, value] of Object.entries(query)) {\n    if (value === undefined || value === null) continue\n    params.set(key, String(value))\n  }\n  const serialized = params.toString()\n  return serialized ? `${path}?${serialized}` : path\n}\n\nfunction connectionQuery(input: BillingListQuery | BillingConnectionRefInput): Record<string, string> {\n  const query: Record<string, string> = {\n    connectionId: input.connectionId,\n  }\n  if (input.clientName) query.clientName = input.clientName\n  if ('cursor' in input && input.cursor) query.cursor = input.cursor\n  if ('source' in input && input.source) query.source = input.source\n  if ('limit' in input && input.limit !== undefined) query.limit = String(input.limit)\n  if ('offset' in input && input.offset !== undefined) query.offset = String(input.offset)\n  return query\n}\n\nfunction parseEnvelopeData<T>(body: unknown): T {\n  if (body && typeof body === 'object' && 'data' in body) {\n    return (body as AthenaBillingEnvelope<T>).data\n  }\n  return body as T\n}\n\nexport interface AthenaBillingModule {\n  getCapabilities(input: BillingConnectionRefInput, options?: AthenaBillingCallOptions): Promise<unknown>\n  createCheckout(body: Record<string, unknown>, options?: AthenaBillingCallOptions): Promise<unknown>\n  listCustomers(input: BillingListQuery, options?: AthenaBillingCallOptions): Promise<unknown>\n  createCustomer(input: BillingEnsureCustomerInput, options?: AthenaBillingCallOptions): Promise<unknown>\n  getCustomer(id: string, input: BillingConnectionRefInput, options?: AthenaBillingCallOptions): Promise<unknown>\n  updateCustomer(\n    id: string,\n    input: BillingUpdateCustomerInput,\n    options?: AthenaBillingCallOptions,\n  ): Promise<unknown>\n  deleteCustomer(id: string, input: BillingConnectionRefInput, options?: AthenaBillingCallOptions): Promise<unknown>\n  listPayments(input: BillingListQuery, options?: AthenaBillingCallOptions): Promise<unknown>\n  createPayment(body: Record<string, unknown>, options?: AthenaBillingCallOptions): Promise<unknown>\n  getPayment(id: string, input: BillingConnectionRefInput, options?: AthenaBillingCallOptions): Promise<unknown>\n  cancelPayment(id: string, input: BillingConnectionRefInput, options?: AthenaBillingCallOptions): Promise<unknown>\n  listPaymentLinks(input: BillingListQuery, options?: AthenaBillingCallOptions): Promise<unknown>\n  createPaymentLink(body: Record<string, unknown>, options?: AthenaBillingCallOptions): Promise<unknown>\n  getPaymentLink(id: string, input: BillingConnectionRefInput, options?: AthenaBillingCallOptions): Promise<unknown>\n  updatePaymentLink(\n    id: string,\n    body: Record<string, unknown>,\n    options?: AthenaBillingCallOptions,\n  ): Promise<unknown>\n  deletePaymentLink(\n    id: string,\n    input: BillingConnectionRefInput,\n    options?: AthenaBillingCallOptions,\n  ): Promise<unknown>\n  listRefunds(input: BillingListQuery, options?: AthenaBillingCallOptions): Promise<unknown>\n  createRefund(body: Record<string, unknown>, options?: AthenaBillingCallOptions): Promise<unknown>\n  getRefund(\n    id: string,\n    input: BillingConnectionRefInput & { paymentId?: string },\n    options?: AthenaBillingCallOptions,\n  ): Promise<unknown>\n  cancelRefund(\n    id: string,\n    input: BillingConnectionRefInput & { paymentId?: string },\n    options?: AthenaBillingCallOptions,\n  ): Promise<unknown>\n  listSubscriptions(input: BillingListQuery, options?: AthenaBillingCallOptions): Promise<unknown>\n  createSubscription(body: Record<string, unknown>, options?: AthenaBillingCallOptions): Promise<unknown>\n  getSubscription(\n    id: string,\n    input: BillingConnectionRefInput & { customerId?: string },\n    options?: AthenaBillingCallOptions,\n  ): Promise<unknown>\n  updateSubscription(\n    id: string,\n    body: Record<string, unknown>,\n    options?: AthenaBillingCallOptions,\n  ): Promise<unknown>\n  cancelSubscription(\n    id: string,\n    input: BillingConnectionRefInput & { customerId: string },\n    options?: AthenaBillingCallOptions,\n  ): Promise<unknown>\n  listInvoices(input: BillingListQuery, options?: AthenaBillingCallOptions): Promise<unknown>\n  getInvoice(id: string, input: BillingConnectionRefInput, options?: AthenaBillingCallOptions): Promise<unknown>\n  listConnections(clientName: string, options?: AthenaBillingCallOptions): Promise<unknown>\n  createConnection(\n    clientName: string,\n    input: BillingCreateConnectionInput,\n    options?: AthenaBillingCallOptions,\n  ): Promise<unknown>\n  getConnection(\n    clientName: string,\n    connectionId: string,\n    options?: AthenaBillingCallOptions,\n  ): Promise<unknown>\n  updateConnection(\n    clientName: string,\n    connectionId: string,\n    input: BillingUpdateConnectionInput,\n    options?: AthenaBillingCallOptions,\n  ): Promise<unknown>\n  deleteConnection(\n    clientName: string,\n    connectionId: string,\n    options?: AthenaBillingCallOptions,\n  ): Promise<unknown>\n  reconcileDocument(\n    clientName: string,\n    connectionId: string,\n    input: BillingReconcileInput,\n    options?: AthenaBillingCallOptions,\n  ): Promise<unknown>\n  listWebhookEvents(clientName: string, options?: AthenaBillingCallOptions): Promise<unknown>\n  provisionWebhookSinks(\n    clientName: string,\n    input?: BillingProvisionSinksInput,\n    options?: AthenaBillingCallOptions,\n  ): Promise<unknown>\n  listGrants(options?: AthenaBillingCallOptions): Promise<unknown>\n  listProviders(options?: AthenaBillingCallOptions): Promise<unknown>\n  listSinkHelpers(\n    query?: { targetSchema?: string; instance?: string },\n    options?: AthenaBillingCallOptions,\n  ): Promise<unknown>\n  ingestProviderWebhook(\n    input: {\n      provider: string\n      clientName: string\n      connectionId: string\n      body: BodyInit | Record<string, unknown> | string\n      signatureHeaders?: Record<string, string>\n    },\n    options?: AthenaBillingCallOptions,\n  ): Promise<unknown>\n  getDebugBilling(jwtSecret: string, options?: AthenaBillingCallOptions): Promise<string>\n}\n\nexport function createBillingModule(config: AthenaBillingClientConfig): AthenaBillingModule {\n  const baseUrl = normalizeAthenaGatewayBaseUrl(config.baseUrl, {\n    label: 'Athena billing base URL',\n  })\n  const fetchImpl = config.fetchImpl ?? globalThis.fetch.bind(globalThis)\n\n  async function call<T>(\n    method: AthenaBillingHttpMethod,\n    path: string,\n    body?: unknown,\n    options?: AthenaBillingCallOptions,\n    responseType: 'json' | 'text' = 'json',\n  ): Promise<T> {\n    const headers = buildAthenaRequestHeaders({\n      profile: 'gateway',\n      sdkHeaderValue: SDK_HEADER_VALUE,\n      apiKey: options?.apiKey ?? config.apiKey,\n      client: config.client,\n      configHeaders: {\n        ...(config.headers ?? {}),\n      },\n      callHeaders: options?.headers,\n      contentType: 'application/json',\n    })\n\n    let requestBody: BodyInit | undefined\n    if (body !== undefined && body !== null) {\n      if (\n        typeof body === 'string' ||\n        body instanceof Blob ||\n        body instanceof ArrayBuffer ||\n        ArrayBuffer.isView(body) ||\n        body instanceof FormData ||\n        body instanceof URLSearchParams\n      ) {\n        requestBody = body as BodyInit\n      } else {\n        requestBody = JSON.stringify(body)\n        if (!hasHeaderIgnoreCase(headers, 'Content-Type')) {\n          headers['Content-Type'] = 'application/json'\n        }\n      }\n    }\n\n    const targetUrl = `${baseUrl}${path.startsWith('/') ? path : `/${path}`}`\n    const response = await fetchImpl(targetUrl, {\n      method,\n      headers,\n      body: requestBody,\n      signal: options?.signal,\n    })\n\n    if (responseType === 'text') {\n      const text = await response.text()\n      if (!response.ok) {\n        throw new AthenaBillingError({\n          message: `Billing request failed (${response.status})`,\n          status: response.status,\n          endpoint: path,\n          method,\n          body: text,\n        })\n      }\n      return text as T\n    }\n\n    const rawText = await response.text()\n    let parsed: unknown = rawText\n    if (rawText) {\n      try {\n        parsed = JSON.parse(rawText)\n      } catch {\n        parsed = rawText\n      }\n    } else {\n      parsed = null\n    }\n\n    if (!response.ok) {\n      const message =\n        parsed &&\n        typeof parsed === 'object' &&\n        'message' in parsed &&\n        typeof (parsed as { message: unknown }).message === 'string'\n          ? (parsed as { message: string }).message\n          : `Billing request failed (${response.status})`\n      throw new AthenaBillingError({\n        message,\n        status: response.status,\n        endpoint: path,\n        method,\n        body: parsed,\n      })\n    }\n\n    return parseEnvelopeData<T>(parsed)\n  }\n\n  return {\n    getCapabilities(input, options) {\n      return call(\n        'GET',\n        appendQuery('/billing/v1/capabilities', connectionQuery(input)),\n        undefined,\n        options,\n      )\n    },\n    createCheckout(body, options) {\n      return call('POST', '/billing/v1/checkouts', body, options)\n    },\n    listCustomers(input, options) {\n      return call(\n        'GET',\n        appendQuery('/billing/v1/customers', connectionQuery(input)),\n        undefined,\n        options,\n      )\n    },\n    createCustomer(input, options) {\n      return call(\n        'POST',\n        '/billing/v1/customers',\n        {\n          connectionId: input.connectionId,\n          clientName: input.clientName,\n          email: input.email,\n          name: input.name,\n          metadata: input.metadata ?? {},\n          idempotencyKey: input.idempotencyKey,\n        },\n        options,\n      )\n    },\n    getCustomer(id, input, options) {\n      return call(\n        'GET',\n        appendQuery(\n          withPathParam('/billing/v1/customers/{id}', 'id', id),\n          connectionQuery(input),\n        ),\n        undefined,\n        options,\n      )\n    },\n    updateCustomer(id, input, options) {\n      return call(\n        'PATCH',\n        withPathParam('/billing/v1/customers/{id}', 'id', id),\n        {\n          connectionId: input.connectionId,\n          clientName: input.clientName,\n          email: input.email,\n          name: input.name,\n        },\n        options,\n      )\n    },\n    deleteCustomer(id, input, options) {\n      return call(\n        'DELETE',\n        appendQuery(\n          withPathParam('/billing/v1/customers/{id}', 'id', id),\n          connectionQuery(input),\n        ),\n        undefined,\n        options,\n      )\n    },\n    listPayments(input, options) {\n      return call(\n        'GET',\n        appendQuery('/billing/v1/payments', connectionQuery(input)),\n        undefined,\n        options,\n      )\n    },\n    createPayment(body, options) {\n      return call('POST', '/billing/v1/payments', body, options)\n    },\n    getPayment(id, input, options) {\n      return call(\n        'GET',\n        appendQuery(\n          withPathParam('/billing/v1/payments/{id}', 'id', id),\n          connectionQuery(input),\n        ),\n        undefined,\n        options,\n      )\n    },\n    cancelPayment(id, input, options) {\n      return call(\n        'POST',\n        appendQuery(\n          withPathParam('/billing/v1/payments/{id}/cancel', 'id', id),\n          connectionQuery(input),\n        ),\n        {},\n        options,\n      )\n    },\n    listPaymentLinks(input, options) {\n      return call(\n        'GET',\n        appendQuery('/billing/v1/payment-links', connectionQuery(input)),\n        undefined,\n        options,\n      )\n    },\n    createPaymentLink(body, options) {\n      return call('POST', '/billing/v1/payment-links', body, options)\n    },\n    getPaymentLink(id, input, options) {\n      return call(\n        'GET',\n        appendQuery(\n          withPathParam('/billing/v1/payment-links/{id}', 'id', id),\n          connectionQuery(input),\n        ),\n        undefined,\n        options,\n      )\n    },\n    updatePaymentLink(id, body, options) {\n      return call(\n        'PATCH',\n        withPathParam('/billing/v1/payment-links/{id}', 'id', id),\n        body,\n        options,\n      )\n    },\n    deletePaymentLink(id, input, options) {\n      return call(\n        'DELETE',\n        appendQuery(\n          withPathParam('/billing/v1/payment-links/{id}', 'id', id),\n          connectionQuery(input),\n        ),\n        undefined,\n        options,\n      )\n    },\n    listRefunds(input, options) {\n      return call(\n        'GET',\n        appendQuery('/billing/v1/refunds', connectionQuery(input)),\n        undefined,\n        options,\n      )\n    },\n    createRefund(body, options) {\n      return call('POST', '/billing/v1/refunds', body, options)\n    },\n    getRefund(id, input, options) {\n      return call(\n        'GET',\n        appendQuery(withPathParam('/billing/v1/refunds/{id}', 'id', id), {\n          ...connectionQuery(input),\n          ...(input.paymentId ? { paymentId: input.paymentId } : {}),\n        }),\n        undefined,\n        options,\n      )\n    },\n    cancelRefund(id, input, options) {\n      return call(\n        'POST',\n        appendQuery(withPathParam('/billing/v1/refunds/{id}/cancel', 'id', id), {\n          ...connectionQuery(input),\n          ...(input.paymentId ? { paymentId: input.paymentId } : {}),\n        }),\n        {},\n        options,\n      )\n    },\n    listSubscriptions(input, options) {\n      return call(\n        'GET',\n        appendQuery('/billing/v1/subscriptions', connectionQuery(input)),\n        undefined,\n        options,\n      )\n    },\n    createSubscription(body, options) {\n      return call('POST', '/billing/v1/subscriptions', body, options)\n    },\n    getSubscription(id, input, options) {\n      return call(\n        'GET',\n        appendQuery(withPathParam('/billing/v1/subscriptions/{id}', 'id', id), {\n          ...connectionQuery(input),\n          ...(input.customerId ? { customerId: input.customerId } : {}),\n        }),\n        undefined,\n        options,\n      )\n    },\n    updateSubscription(id, body, options) {\n      return call(\n        'PATCH',\n        withPathParam('/billing/v1/subscriptions/{id}', 'id', id),\n        body,\n        options,\n      )\n    },\n    cancelSubscription(id, input, options) {\n      return call(\n        'POST',\n        appendQuery(withPathParam('/billing/v1/subscriptions/{id}/cancel', 'id', id), {\n          ...connectionQuery(input),\n          customerId: input.customerId,\n        }),\n        {},\n        options,\n      )\n    },\n    listInvoices(input, options) {\n      return call(\n        'GET',\n        appendQuery('/billing/v1/invoices', connectionQuery(input)),\n        undefined,\n        options,\n      )\n    },\n    getInvoice(id, input, options) {\n      return call(\n        'GET',\n        appendQuery(\n          withPathParam('/billing/v1/invoices/{id}', 'id', id),\n          connectionQuery(input),\n        ),\n        undefined,\n        options,\n      )\n    },\n    listConnections(clientName, options) {\n      return call(\n        'GET',\n        withPathParam('/admin/billing/clients/{client_name}/connections', 'client_name', clientName),\n        undefined,\n        options,\n      )\n    },\n    createConnection(clientName, input, options) {\n      return call(\n        'POST',\n        withPathParam('/admin/billing/clients/{client_name}/connections', 'client_name', clientName),\n        {\n          ownerKind: input.ownerKind,\n          ownerId: input.ownerId,\n          provider: input.provider,\n          mode: input.mode,\n          status: input.status,\n          credentialKind: input.credentialKind,\n          providerAccountId: input.providerAccountId,\n          providerProfileId: input.providerProfileId,\n          scopes: input.scopes,\n          config: input.config,\n          metadata: input.metadata,\n        },\n        options,\n      )\n    },\n    getConnection(clientName, connectionId, options) {\n      return call(\n        'GET',\n        withPathParam(\n          withPathParam(\n            '/admin/billing/clients/{client_name}/connections/{connection_id}',\n            'client_name',\n            clientName,\n          ),\n          'connection_id',\n          connectionId,\n        ),\n        undefined,\n        options,\n      )\n    },\n    updateConnection(clientName, connectionId, input, options) {\n      return call(\n        'PATCH',\n        withPathParam(\n          withPathParam(\n            '/admin/billing/clients/{client_name}/connections/{connection_id}',\n            'client_name',\n            clientName,\n          ),\n          'connection_id',\n          connectionId,\n        ),\n        input,\n        options,\n      )\n    },\n    deleteConnection(clientName, connectionId, options) {\n      return call(\n        'DELETE',\n        withPathParam(\n          withPathParam(\n            '/admin/billing/clients/{client_name}/connections/{connection_id}',\n            'client_name',\n            clientName,\n          ),\n          'connection_id',\n          connectionId,\n        ),\n        undefined,\n        options,\n      )\n    },\n    reconcileDocument(clientName, connectionId, input, options) {\n      return call(\n        'POST',\n        withPathParam(\n          withPathParam(\n            '/admin/billing/clients/{client_name}/connections/{connection_id}/reconcile',\n            'client_name',\n            clientName,\n          ),\n          'connection_id',\n          connectionId,\n        ),\n        {\n          resourceKind: input.resourceKind,\n          resourceId: input.resourceId,\n          customerId: input.customerId,\n        },\n        options,\n      )\n    },\n    listWebhookEvents(clientName, options) {\n      return call(\n        'GET',\n        withPathParam(\n          '/admin/billing/clients/{client_name}/webhook-events',\n          'client_name',\n          clientName,\n        ),\n        undefined,\n        options,\n      )\n    },\n    provisionWebhookSinks(clientName, input, options) {\n      return call(\n        'POST',\n        appendQuery(\n          withPathParam(\n            '/admin/billing/clients/{client_name}/webhook-sinks/provision',\n            'client_name',\n            clientName,\n          ),\n          {\n            targetSchema: input?.targetSchema,\n            instance: input?.instance,\n          },\n        ),\n        {},\n        options,\n      )\n    },\n    listGrants(options) {\n      return call('GET', '/admin/billing/grants', undefined, options)\n    },\n    listProviders(options) {\n      return call('GET', '/admin/billing/providers', undefined, options)\n    },\n    listSinkHelpers(query, options) {\n      return call(\n        'GET',\n        appendQuery('/admin/webhook-sinks/helpers/billing', {\n          targetSchema: query?.targetSchema,\n          instance: query?.instance,\n        }),\n        undefined,\n        options,\n      )\n    },\n    ingestProviderWebhook(input, options) {\n      const path = withPathParam(\n        withPathParam(\n          withPathParam(\n            '/billing/providers/{provider}/clients/{client_name}/connections/{connection_id}/webhook',\n            'provider',\n            input.provider,\n          ),\n          'client_name',\n          input.clientName,\n        ),\n        'connection_id',\n        input.connectionId,\n      )\n      return call('POST', path, input.body, {\n        ...options,\n        headers: {\n          ...(options?.headers ?? {}),\n          ...(input.signatureHeaders ?? {}),\n        },\n      })\n    },\n    getDebugBilling(jwtSecret, options) {\n      return call(\n        'GET',\n        appendQuery('/debug/billing', { jwt_secret: jwtSecret }),\n        undefined,\n        options,\n        'text',\n      )\n    },\n  }\n}\n","import type { AthenaAuthBindings, AthenaAuthClientConfig } from './auth/types.ts'\nimport {\n  createInternalClientCore,\n  createInternalClientView,\n  type AthenaFromOptions,\n  type InternalAthenaClientCore,\n  type InternalAthenaClient,\n  type AthenaQueryTraceOptions,\n  type AthenaRequestOptions,\n  type AthenaRequestResponse,\n  type AthenaResult,\n  type RpcQueryBuilder,\n  type TableQueryBuilder,\n} from './client.ts'\nimport type { AthenaChatModule, AthenaChatWebSocketFactory } from './chat/types.ts'\nimport type { AthenaDbModule } from './db/module.ts'\nimport type {\n  AthenaGatewayCallOptions,\n  AthenaGatewayConnectionOptions,\n  AthenaGatewayConnectionResult,\n  AthenaJsonObject,\n  AthenaRpcCallOptions,\n  BackendConfig,\n  BackendType,\n} from './gateway/types.ts'\nimport type {\n  AthenaClientModelsInput,\n  AthenaClientModelForTableName,\n  AthenaClientTableName,\n  AthenaModelTarget,\n  InsertOf,\n  RowOf,\n  UpdateOf,\n} from './schema/types.ts'\nimport type {\n  AthenaStorageClientConfig,\n  AthenaStorageDirectUploadConfig,\n  AthenaStorageModule,\n} from './storage/module.ts'\nimport {\n  createBillingModule,\n  type AthenaBillingClientConfig,\n  type AthenaBillingModule,\n} from './billing/module.ts'\n\ntype MaybePromise<T> = T | Promise<T>\ntype ResolvedModels<TModels> = TModels extends AthenaClientModelsInput ? TModels : never\n\nconst ENV_URL_KEYS = ['ATHENA_URL', 'NEXT_PUBLIC_ATHENA_URL'] as const\nconst ENV_DB_URL_KEYS = ['ATHENA_DB_URL', 'ATHENA_GATEWAY_URL', 'NEXT_PUBLIC_ATHENA_DB_API_URL'] as const\nconst ENV_AUTH_URL_KEYS = ['ATHENA_AUTH_URL', 'NEXT_PUBLIC_ATHENA_AUTH_URL'] as const\nconst ENV_CHAT_URL_KEYS = ['ATHENA_CHAT_URL', 'NEXT_PUBLIC_ATHENA_CHAT_URL'] as const\nconst ENV_CHAT_WS_URL_KEYS = ['ATHENA_CHAT_WS_URL', 'NEXT_PUBLIC_ATHENA_CHAT_WS_URL'] as const\nconst ENV_STORAGE_URL_KEYS = ['ATHENA_STORAGE_URL', 'NEXT_PUBLIC_ATHENA_STORAGE_URL'] as const\nconst ENV_KEY_KEYS = ['ATHENA_API_KEY', 'NEXT_PUBLIC_ATHENA_API_KEY', 'ATHENA_GATEWAY_API_KEY', 'X_API_KEY'] as const\nconst ENV_CLIENT_KEYS = ['ATHENA_CLIENT', 'NEXT_PUBLIC_ATHENA_CLIENT'] as const\nconst MISSING_DB_SENTINEL = 'https://athena.invalid/db'\n\nexport type AthenaService = 'db' | 'auth' | 'chat' | 'storage' | 'billing'\n\nexport class AthenaConfigurationError extends Error {\n  readonly code = 'ATHENA_SERVICE_NOT_CONFIGURED' as const\n  readonly service: AthenaService\n\n  constructor(service: AthenaService, message = `Athena ${service} is not configured.`) {\n    super(message)\n    this.name = 'AthenaConfigurationError'\n    this.service = service\n  }\n}\n\nexport interface AthenaRequestContext {\n  userId?: string | null\n  organizationId?: string | null\n  headers?: Record<string, string>\n  cookie?: string | null\n  bearerToken?: string | null\n  sessionToken?: string | null\n  forceNoCache?: boolean\n}\n\nexport type AthenaRequestContextProvider = () => MaybePromise<AthenaRequestContext | undefined>\n\nexport interface AthenaDbConfig {\n  url?: string | null\n  pgUri?: string | null\n  jdbcUrl?: string | null\n}\n\nexport interface AthenaAuthConfig\n  extends Omit<\n    AthenaAuthClientConfig,\n    'baseUrl' | 'apiKey' | 'bearerToken' | 'cookie' | 'sessionToken'\n  > {\n  url?: string | null\n}\n\nexport interface AthenaChatConfig {\n  url?: string | null\n  wsUrl?: string | null\n  webSocketFactory?: AthenaChatWebSocketFactory | null\n}\n\nexport interface AthenaStorageConfig\n  extends Omit<AthenaStorageClientConfig, 'baseUrl' | 'directUpload'> {\n  url?: string | null\n  directUpload?: AthenaStorageDirectUploadConfig\n}\n\nexport interface AthenaBillingConfig\n  extends Omit<AthenaBillingClientConfig, 'baseUrl' | 'apiKey' | 'client' | 'fetchImpl'> {\n  /** Optional override; defaults to the unified/root or db Athena URL. */\n  url?: string | null\n}\n\nexport interface AthenaClientConfig<\n  TModels extends AthenaClientModelsInput | undefined = undefined,\n> {\n  url?: string | null\n  key?: string | null\n  client?: string | null\n  backend?: BackendConfig | BackendType\n  headers?: Record<string, string>\n  models?: TModels\n  env?: Record<string, string | undefined>\n  context?: AthenaRequestContext | AthenaRequestContextProvider\n  db?: AthenaDbConfig\n  auth?: AthenaAuthConfig\n  chat?: AthenaChatConfig\n  storage?: AthenaStorageConfig\n  billing?: AthenaBillingConfig\n  retryReads?: boolean\n  traceQueries?: boolean | AthenaQueryTraceOptions\n  debugAst?: boolean\n  findManyAst?: boolean\n}\n\ntype V3TableBuilder<\n  Row,\n  Insert = Partial<Row>,\n  Update = Partial<Insert>,\n  Result = unknown,\n> = TableQueryBuilder<Row, Insert, Update, Result>\n\nexport interface AthenaClient<\n  TModels extends AthenaClientModelsInput | undefined = AthenaClientModelsInput | undefined,\n> {\n  readonly db: AthenaDbModule<ResolvedModels<TModels>>\n  readonly auth: AthenaAuthBindings\n  readonly chat: AthenaChatModule\n  readonly storage: AthenaStorageModule\n  readonly billing: AthenaBillingModule\n  from<TModel extends AthenaModelTarget>(\n    model: TModel,\n  ): V3TableBuilder<RowOf<TModel>, InsertOf<TModel>, UpdateOf<TModel>>\n  from<TTableName extends AthenaClientTableName<ResolvedModels<TModels>>>(\n    table: TTableName,\n    options?: AthenaFromOptions,\n  ): V3TableBuilder<\n    RowOf<AthenaClientModelForTableName<ResolvedModels<TModels>, TTableName>>,\n    InsertOf<AthenaClientModelForTableName<ResolvedModels<TModels>, TTableName>>,\n    UpdateOf<AthenaClientModelForTableName<ResolvedModels<TModels>, TTableName>>\n  >\n  from<Row = Record<string, unknown>, Insert = Partial<Row>, Update = Partial<Insert>>(\n    table: string,\n    options?: AthenaFromOptions,\n  ): V3TableBuilder<Row, Insert, Update>\n  rpc<Row = unknown, Args extends AthenaJsonObject = AthenaJsonObject>(\n    fn: string,\n    args?: Args,\n    options?: AthenaRpcCallOptions,\n  ): RpcQueryBuilder<Row>\n  query<Row = unknown>(\n    query: string,\n    options?: AthenaGatewayCallOptions,\n  ): Promise<AthenaResult<Row[]>>\n  request<T = unknown>(options: AthenaRequestOptions): Promise<AthenaRequestResponse<T>>\n  verifyConnection(\n    options?: AthenaGatewayConnectionOptions,\n  ): Promise<AthenaGatewayConnectionResult>\n  withContext(context: AthenaRequestContext): AthenaClient<TModels>\n}\n\ninterface ResolvedServiceUrls {\n  db?: string\n  auth?: string\n  chat?: string\n  chatWs?: string\n  storage?: string\n  billing?: string\n}\n\ninterface AthenaClientCoreBase<TModels extends AthenaClientModelsInput | undefined> {\n  readonly config: AthenaClientConfig<TModels>\n  readonly urls: ResolvedServiceUrls\n  readonly key: string\n  readonly client?: string\n}\n\ninterface AthenaClientCore<TModels extends AthenaClientModelsInput | undefined>\n  extends AthenaClientCoreBase<TModels> {\n  readonly internalCore: InternalAthenaClientCore<ResolvedModels<TModels>>\n}\n\nfunction readFirstEnv(\n  env: Record<string, string | undefined> | undefined,\n  keys: readonly string[],\n): string | undefined {\n  for (const key of keys) {\n    const value = env?.[key]?.trim()\n    if (value) return value\n  }\n  return undefined\n}\n\nfunction normalizeOptional(value: string | null | undefined): string | undefined {\n  const normalized = value?.trim()\n  return normalized || undefined\n}\n\nfunction appendPath(baseUrl: string, path: string): string {\n  return `${baseUrl.replace(/\\/+$/, '')}/${path.replace(/^\\/+/, '')}`\n}\n\nfunction toWebSocketUrl(baseUrl: string): string {\n  const url = new URL(baseUrl)\n  url.protocol = url.protocol === 'https:' ? 'wss:' : 'ws:'\n  url.pathname = `${url.pathname.replace(/\\/+$/, '')}/wss/gateway`\n  url.search = ''\n  url.hash = ''\n  return url.toString()\n}\n\nfunction resolveCore<TModels extends AthenaClientModelsInput | undefined>(\n  config: AthenaClientConfig<TModels>,\n): AthenaClientCore<TModels> {\n  const env = config.env\n  const explicitRoot = normalizeOptional(config.url)\n  const envRoot = readFirstEnv(env, ENV_URL_KEYS)\n  const root = explicitRoot ?? envRoot\n  const explicitRootWinsOverEnvServices = explicitRoot !== undefined\n  const resolveService = (\n    explicit: string | null | undefined,\n    envKeys: readonly string[],\n    path: string,\n  ): string | undefined =>\n    normalizeOptional(explicit) ??\n    (explicitRootWinsOverEnvServices && root ? appendPath(root, path) : undefined) ??\n    readFirstEnv(env, envKeys) ??\n    (root ? appendPath(root, path) : undefined)\n\n  const dbUrl = resolveService(config.db?.url, ENV_DB_URL_KEYS, 'db')\n  const urls: ResolvedServiceUrls = {\n    db: dbUrl,\n    auth: resolveService(config.auth?.url, ENV_AUTH_URL_KEYS, 'auth'),\n    chat: resolveService(config.chat?.url, ENV_CHAT_URL_KEYS, 'chat'),\n    storage: resolveService(config.storage?.url, ENV_STORAGE_URL_KEYS, 'storage'),\n    // Billing lives on the main Athena HTTP surface (same host as gateway/db).\n    billing:\n      normalizeOptional(config.billing?.url) ??\n      dbUrl ??\n      root ??\n      undefined,\n    chatWs:\n      normalizeOptional(config.chat?.wsUrl) ??\n      (explicitRootWinsOverEnvServices && root ? toWebSocketUrl(root) : undefined) ??\n      readFirstEnv(env, ENV_CHAT_WS_URL_KEYS) ??\n      (root ? toWebSocketUrl(root) : undefined),\n  }\n\n  if (!urls.db && !urls.auth && !urls.chat && !urls.storage && !urls.billing) {\n    throw new AthenaConfigurationError('db', 'Athena requires a unified URL or at least one configured service URL.')\n  }\n\n  const key = normalizeOptional(config.key) ?? readFirstEnv(env, ENV_KEY_KEYS)\n  if (!key) {\n    throw new Error('Athena API key is required. Pass key or provide it through the explicit env object.')\n  }\n\n  const base: AthenaClientCoreBase<TModels> = {\n    config,\n    urls,\n    key,\n    client: normalizeOptional(config.client) ?? readFirstEnv(env, ENV_CLIENT_KEYS),\n  }\n  return {\n    ...base,\n    internalCore: createInternalClientCore(createInternalConfig(base)),\n  }\n}\n\nfunction mergeContexts(\n  base: AthenaRequestContext | undefined,\n  override: AthenaRequestContext | undefined,\n): AthenaRequestContext | undefined {\n  if (!base && !override) return undefined\n  return {\n    ...base,\n    ...override,\n    headers:\n      base?.headers || override?.headers\n        ? { ...(base?.headers ?? {}), ...(override?.headers ?? {}) }\n        : undefined,\n  }\n}\n\nasync function resolveConfiguredContext<TModels extends AthenaClientModelsInput | undefined>(\n  core: AthenaClientCore<TModels>,\n  viewContext: AthenaRequestContext | undefined,\n): Promise<AthenaRequestContext | undefined> {\n  const configured = core.config.context\n  const base = typeof configured === 'function' ? await configured() : configured\n  return mergeContexts(base, viewContext)\n}\n\nfunction createInternalConfig<TModels extends AthenaClientModelsInput | undefined>(\n  core: AthenaClientCoreBase<TModels>,\n) {\n  const { config, urls } = core\n  const { url: _authUrl, ...authOptions } = config.auth ?? {}\n  const { url: _storageUrl, directUpload, ...storageOptions } = config.storage ?? {}\n  void _authUrl\n  void _storageUrl\n\n  return {\n    baseUrl: urls.db ?? MISSING_DB_SENTINEL,\n    apiKey: core.key,\n    client: core.client,\n    backend:\n      typeof config.backend === 'string'\n        ? { type: config.backend }\n        : config.backend,\n    headers: config.headers,\n    authUrl: urls.auth,\n    chatUrl: urls.chat,\n    chatWsUrl: urls.chatWs,\n    storageUrl: urls.storage,\n    pgUri: config.db?.pgUri,\n    jdbcUrl: config.db?.jdbcUrl,\n    auth: authOptions,\n    models: config.models as ResolvedModels<TModels>,\n    behavior: {\n      retryReads: config.retryReads,\n      traceQueries: config.traceQueries,\n      debugAst: config.debugAst,\n      findManyAst: config.findManyAst,\n    },\n    storage: {\n      ...storageOptions,\n      ...(directUpload ? { directUpload } : {}),\n    },\n  }\n}\n\nfunction serviceGuard(urls: ResolvedServiceUrls, service: AthenaService): void {\n  if (!urls[service]) throw new AthenaConfigurationError(service)\n}\n\nfunction createUnavailableNamespace(\n  service: AthenaService,\n  urls: ResolvedServiceUrls,\n  path: readonly PropertyKey[] = [],\n): unknown {\n  return new Proxy(() => undefined, {\n    get(_target, property) {\n      return createUnavailableNamespace(service, urls, [...path, property])\n    },\n    apply() {\n      serviceGuard(urls, service)\n      throw new TypeError(`Athena service property ${path.map(String).join('.')} is not callable.`)\n    },\n  })\n}\n\nfunction createClientView<TModels extends AthenaClientModelsInput | undefined>(\n  core: AthenaClientCore<TModels>,\n  viewContext?: AthenaRequestContext,\n): AthenaClient<TModels> {\n  const resolved: InternalAthenaClient<ResolvedModels<TModels>> =\n    createInternalClientView(core.internalCore, () =>\n      resolveConfiguredContext(core, viewContext),\n    )\n  const requireDb = (): void => serviceGuard(core.urls, 'db')\n\n  const { url: _billingUrl, ...billingOptions } = core.config.billing ?? {}\n  void _billingUrl\n  const billingModule: AthenaBillingModule | unknown = core.urls.billing\n    ? createBillingModule({\n        baseUrl: core.urls.billing,\n        apiKey: core.key,\n        client: core.client,\n        headers: {\n          ...(core.config.headers ?? {}),\n          ...(billingOptions.headers ?? {}),\n        },\n        ...billingOptions,\n      })\n    : createUnavailableNamespace('billing', core.urls)\n\n  const client: AthenaClient<TModels> = {\n    db: (core.urls.db ? resolved.db : createUnavailableNamespace('db', core.urls)) as AthenaClient<TModels>['db'],\n    auth: (core.urls.auth ? resolved.auth : createUnavailableNamespace('auth', core.urls)) as AthenaAuthBindings,\n    chat: (core.urls.chat ? resolved.chat : createUnavailableNamespace('chat', core.urls)) as AthenaChatModule,\n    storage: (core.urls.storage\n      ? resolved.storage\n      : createUnavailableNamespace('storage', core.urls)) as AthenaStorageModule,\n    billing: billingModule as AthenaBillingModule,\n    from: ((...args: unknown[]) => {\n      requireDb()\n      return Reflect.apply(resolved.from, resolved, args)\n    }) as AthenaClient<TModels>['from'],\n    rpc: ((...args: unknown[]) => {\n      requireDb()\n      return Reflect.apply(resolved.rpc, resolved, args)\n    }) as AthenaClient<TModels>['rpc'],\n    query<Row = unknown>(query: string, options?: AthenaGatewayCallOptions) {\n      requireDb()\n      return resolved.query<Row>(query, options)\n    },\n    request<T = unknown>(options: AthenaRequestOptions) {\n      // Absolute URLs do not need a configured service base URL.\n      if (!options.url?.trim()) {\n        serviceGuard(core.urls, options.service ?? 'db')\n      }\n      return resolved.request<T>(options)\n    },\n    verifyConnection(options?: AthenaGatewayConnectionOptions) {\n      requireDb()\n      return resolved.verifyConnection(options)\n    },\n    withContext(context: AthenaRequestContext) {\n      return createClientView(core, mergeContexts(viewContext, context))\n    },\n  }\n\n  return Object.freeze(client)\n}\n\nexport function createClient<\n  const TModels extends AthenaClientModelsInput | undefined = undefined,\n>(config: AthenaClientConfig<TModels>): AthenaClient<TModels> {\n  return createClientView(resolveCore(config))\n}\n","/**\n * athena gateway types\n *\n * type definitions for the athena gateway api client and react hook\n */\n\nexport type AthenaGatewayMethod = 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE'\nexport type AthenaGatewayEndpointPath =\n  | '/gateway/fetch'\n  | '/gateway/insert'\n  | '/gateway/update'\n  | '/gateway/delete'\n  | '/gateway/rpc'\n  | '/gateway/query'\n  | `/rpc/${string}`\n  | `/storage/${string}`\n  | `/admin/backups${string}`\n\nexport type AthenaCountOption = 'exact' | 'planned' | 'estimated'\n\nexport type AthenaJsonPrimitive = string | number | boolean | null\nexport type AthenaJsonValue = AthenaJsonPrimitive | AthenaJsonObject | AthenaJsonArray\nexport interface AthenaJsonObject {\n  [key: string]: AthenaJsonValue\n}\nexport type AthenaJsonArray = AthenaJsonValue[]\n\nexport type AthenaConditionValue = AthenaJsonPrimitive\nexport type AthenaConditionArrayValue = Array<AthenaConditionValue>\nexport type AthenaConditionCastType = string\n\nexport type AthenaConditionOperator =\n  | 'eq'\n  | 'neq'\n  | 'gt'\n  | 'gte'\n  | 'lt'\n  | 'lte'\n  | 'like'\n  | 'ilike'\n  | 'is'\n  | 'in'\n  | 'contains'\n  | 'containedBy'\n  | 'not'\n  | 'or'\n\nexport interface AthenaGatewayCondition {\n  column?: string\n  operator: AthenaConditionOperator\n  value?: AthenaConditionValue | AthenaConditionArrayValue | string\n  /**\n   * Optional explicit cast for `value` (for example `\"uuid\"`).\n   * Older gateways ignore unknown fields; newer gateways may use this hint.\n   */\n  value_cast?: AthenaConditionCastType\n  /**\n   * Optional explicit cast for `column` (for example `\"text\"`).\n   * Used by SDK SQL fallback for typed comparisons.\n   */\n  column_cast?: AthenaConditionCastType\n  /** Back-compat shape expected by older gateway implementations */\n  eq_column?: string\n  eq_value?: AthenaConditionValue | AthenaConditionArrayValue | string\n  /** Optional cast hint aligned with legacy eq_* fields */\n  eq_value_cast?: AthenaConditionCastType\n  /** Optional cast hint aligned with legacy eq_* fields */\n  eq_column_cast?: AthenaConditionCastType\n}\n\nexport type AthenaSortDirection = 'ascending' | 'descending'\n\nexport interface AthenaSortBy {\n  field: string\n  direction: AthenaSortDirection\n}\n\nexport interface AthenaFetchPayload {\n  select?: string | AthenaJsonObject\n  view_name?: string\n  table_name?: string\n  columns?: string[] | string\n  where?: AthenaJsonObject\n  orderBy?: AthenaJsonObject | AthenaJsonArray\n  conditions?: AthenaGatewayCondition[]\n  limit?: number\n  offset?: number\n  current_page?: number\n  page_size?: number\n  total_pages?: number\n  strip_nulls?: boolean\n  count?: AthenaCountOption\n  head?: boolean\n  group_by?: string\n  time_granularity?: 'day' | 'hour' | 'minute'\n  aggregation_column?: string\n  aggregation_strategy?: 'cumulative_sum'\n  aggregation_dedup?: boolean\n  sort_by?: AthenaSortBy\n}\n\nexport interface AthenaInsertPayload<\n  TInsertBody = AthenaJsonObject,\n  TUpdateBody = AthenaJsonObject,\n> {\n  table_name: string\n  insert_body: TInsertBody | TInsertBody[]\n  update_body?: TUpdateBody\n  columns?: string[] | string\n  count?: AthenaCountOption\n  head?: boolean\n  default_to_null?: boolean\n  on_conflict?: string | string[]\n}\n\nexport interface AthenaDeletePayload {\n  table_name: string\n  resource_id?: string\n  columns?: string[] | string\n  conditions?: AthenaGatewayCondition[]\n  sort_by?: AthenaSortBy\n  current_page?: number\n  page_size?: number\n  total_pages?: number\n}\n\nexport interface AthenaUpdatePayload<TUpdateBody = AthenaJsonObject>\n  extends AthenaFetchPayload {\n  update_body: TUpdateBody\n}\n\nexport type AthenaRpcFilterOperator =\n  | 'eq'\n  | 'neq'\n  | 'gt'\n  | 'gte'\n  | 'lt'\n  | 'lte'\n  | 'like'\n  | 'ilike'\n  | 'is'\n  | 'in'\n\nexport interface AthenaRpcFilter {\n  column: string\n  operator: AthenaRpcFilterOperator\n  value?: AthenaConditionValue | AthenaConditionArrayValue | string\n}\n\nexport interface AthenaRpcOrder {\n  column: string\n  ascending?: boolean\n}\n\nexport interface AthenaRpcPayload<TArgs = AthenaJsonObject> {\n  function: string\n  function_name?: string\n  schema?: string\n  args?: TArgs\n  select?: string\n  filters?: AthenaRpcFilter[]\n  count?: AthenaCountOption\n  head?: boolean\n  limit?: number\n  offset?: number\n  order?: AthenaRpcOrder\n}\n\nexport interface AthenaQueryPayload {\n  query: string\n}\n\n/** Backend type for Athena client (aligns with athena-rs) */\nexport type BackendType = 'athena' | 'postgrest' | 'postgresql' | 'scylladb'\n\n/** Backend config: type from SDK + backend-scoped options */\nexport interface BackendConfig {\n  type: BackendType\n  options?: AthenaJsonObject\n}\n\n/** Pre-defined backends for lean usage: backend: Backend.Athena */\nexport const Backend = {\n  Athena: { type: 'athena' } as const,\n  Postgrest: { type: 'postgrest' } as const,\n  PostgreSQL: { type: 'postgresql' } as const,\n  ScyllaDB: { type: 'scylladb' } as const,\n} as const satisfies Record<string, BackendConfig>\n\nexport type BackendOption = BackendConfig | BackendType\n\nexport interface AthenaGatewayBaseOptions {\n  baseUrl?: string\n  apiKey?: string\n  client?: string\n  backend?: BackendOption\n  publishEvent?: string\n  forceNoCache?: boolean\n  headers?: Record<string, string>\n  userId?: string | null\n  organizationId?: string | null\n  /** Direct PostgreSQL URI forwarded as `x-pg-uri` (OpenAPI preferred routing header). */\n  pgUri?: string | null\n  /** JDBC/PostgreSQL URI mirrored to `x-athena-jdbc-url` and `x-jdbc-url` compatibility headers. */\n  jdbcUrl?: string | null\n  bearerToken?: string | null\n  cookie?: string | null\n  sessionToken?: string | null\n}\n\nexport type AthenaGatewayHookConfig = AthenaGatewayBaseOptions\nexport interface AthenaGatewayCallOptions extends AthenaGatewayBaseOptions {\n  signal?: AbortSignal\n  schema?: string\n  count?: AthenaCountOption\n  head?: boolean\n  defaultToNull?: boolean\n  stripNulls?: boolean\n  onConflict?: string | string[]\n  updateBody?: AthenaJsonObject\n}\n\nexport interface AthenaRpcCallOptions extends AthenaGatewayCallOptions {\n  count?: AthenaCountOption\n  get?: boolean\n}\n\nexport interface AthenaGatewayResponse<T = unknown> {\n  ok: boolean\n  status: number\n  statusText?: string | null\n  data: T | null\n  count?: number | null\n  error?: string\n  errorDetails?: AthenaGatewayErrorDetails | null\n  raw: unknown\n}\n\nexport type AthenaGatewayErrorCode =\n  | 'NETWORK_ERROR'\n  | 'INVALID_URL'\n  | 'HTTP_ERROR'\n  | 'INVALID_JSON'\n  | 'UNKNOWN_ERROR'\n\nexport interface AthenaGatewayErrorDetails {\n  code: AthenaGatewayErrorCode\n  message: string\n  status: number\n  endpoint?: AthenaGatewayEndpointPath\n  method?: AthenaGatewayMethod\n  requestId?: string\n  hint?: string\n  cause?: string\n}\n\nexport interface AthenaGatewayConnectionOptions {\n  path?: `/${string}`\n  headers?: Record<string, string>\n  signal?: AbortSignal\n}\n\nexport interface AthenaGatewayConnectionResult {\n  ok: boolean\n  reachable: boolean\n  status: number\n  statusText?: string | null\n  baseUrl: string\n  url: string\n  error?: string\n  errorDetails?: AthenaGatewayErrorDetails | null\n  raw: unknown\n}\n\nexport interface AthenaGatewayResponseLog extends AthenaGatewayResponse {\n  timestamp: string\n}\n\nexport interface AthenaGatewayCallLog {\n  endpoint: AthenaGatewayEndpointPath\n  method: AthenaGatewayMethod\n  payload: unknown\n  headers: Record<string, string>\n  timestamp: string\n}\n\nexport interface AthenaGatewayHookResult {\n  fetchGateway: <T = unknown>(\n    payload: AthenaFetchPayload,\n    options?: AthenaGatewayCallOptions,\n  ) => Promise<AthenaGatewayResponse<T>>\n  insertGateway: <T = unknown>(\n    payload: AthenaInsertPayload,\n    options?: AthenaGatewayCallOptions,\n  ) => Promise<AthenaGatewayResponse<T>>\n  updateGateway: <T = unknown>(\n    payload: AthenaUpdatePayload,\n    options?: AthenaGatewayCallOptions,\n  ) => Promise<AthenaGatewayResponse<T>>\n  deleteGateway: <T = unknown>(\n    payload: AthenaDeletePayload,\n    options?: AthenaGatewayCallOptions,\n  ) => Promise<AthenaGatewayResponse<T>>\n  rpcGateway: <T = unknown>(\n    payload: AthenaRpcPayload,\n    options?: AthenaRpcCallOptions,\n  ) => Promise<AthenaGatewayResponse<T>>\n  isLoading: boolean\n  error: string | null\n  lastRequest: AthenaGatewayCallLog | null\n  lastResponse: AthenaGatewayResponseLog | null\n  baseUrl: string\n}\n","import type {\n  AnyModelDef,\n  DatabaseDef,\n  ModelDef,\n  ModelMetadata,\n  RegistryDef,\n  SchemaDef,\n} from './types.ts'\n\n/**\n * @deprecated Prefer `table(...).schema(...).columns(...).primaryKey(...)` for\n * new model contracts. `defineModel(...)` is retained for legacy compatibility,\n * manual low-level contracts, and legacy generator output.\n *\n * Declares a model contract with explicit metadata and typed row/insert/update shapes.\n */\nexport function defineModel<\n  Row,\n  Insert = Partial<Row>,\n  Update = Partial<Insert>,\n  Meta extends ModelMetadata<Row> = ModelMetadata<Row>,\n>(input: { meta: Meta }): ModelDef<Row, Insert, Update, Meta> {\n  return input\n}\n\n/**\n * Declares a schema-level model map.\n */\nexport function defineSchema<\n  Models extends Record<string, AnyModelDef>,\n>(models: Models): SchemaDef<Models> {\n  return { models }\n}\n\n/**\n * Declares a database-level schema map.\n */\nexport function defineDatabase<\n  Schemas extends Record<string, SchemaDef<Record<string, AnyModelDef>>>,\n>(schemas: Schemas): DatabaseDef<Schemas> {\n  return { schemas }\n}\n\n/**\n * Declares a top-level multi-database registry.\n */\nexport function defineRegistry<\n  Databases extends Record<string, DatabaseDef<Record<string, SchemaDef<Record<string, AnyModelDef>>>>>,\n>(databases: Databases): RegistryDef<Databases> {\n  return databases\n}\n\n","import type { AnyModelDef, InsertOf, RowOf, UpdateOf } from './types.ts'\n\ntype ModelValueRecord = Record<string, unknown>\n\nexport type ModelFormNullishMode = 'empty-string' | 'undefined' | 'null'\n\ntype NullishValueByMode = {\n  'empty-string': ''\n  undefined: undefined\n  null: null\n}\n\ntype MapNullableToFormValue<TField, TMode extends ModelFormNullishMode> =\n  null extends TField\n    ? Exclude<TField, null> | NullishValueByMode[TMode]\n    : TField\n\n/**\n * Form value shape derived from a model insert payload.\n * Nullable fields are remapped to the selected nullish representation.\n */\nexport type ModelFormValues<\n  TModel extends AnyModelDef,\n  TMode extends ModelFormNullishMode = 'empty-string',\n> = {\n  [K in keyof InsertOf<TModel>]: MapNullableToFormValue<InsertOf<TModel>[K], TMode>\n}\n\n/**\n * Alias for deriving form value types from any model contract.\n */\nexport type FormValuesOf<\n  TModel extends AnyModelDef,\n  TMode extends ModelFormNullishMode = 'empty-string',\n> = ModelFormValues<TModel, TMode>\n\n/**\n * Default value shape for form initialization.\n */\nexport type ModelFormDefaults<\n  TModel extends AnyModelDef,\n  TMode extends ModelFormNullishMode = 'empty-string',\n> = Partial<ModelFormValues<TModel, TMode>>\n\nexport interface ToModelFormDefaultsOptions<TMode extends ModelFormNullishMode = 'empty-string'> {\n  /**\n   * Controls how nullable model values are represented in form defaults.\n   * - `empty-string` (default): `null -> \"\"`\n   * - `undefined`: `null -> undefined`\n   * - `null`: keeps `null`\n   */\n  nullishMode?: TMode\n}\n\nexport interface ToModelPayloadOptions {\n  /**\n   * Converts `\"\"` into `null` for nullable model fields.\n   * Defaults to `true`.\n   */\n  emptyStringAsNull?: boolean\n  /**\n   * Omits `undefined` keys from the outgoing payload.\n   * Defaults to `true`.\n   */\n  stripUndefined?: boolean\n}\n\nfunction resolveNullishValue(mode: ModelFormNullishMode): '' | undefined | null {\n  if (mode === 'undefined') return undefined\n  if (mode === 'null') return null\n  return ''\n}\n\nfunction isRecord(value: unknown): value is ModelValueRecord {\n  return Boolean(value) && typeof value === 'object' && !Array.isArray(value)\n}\n\nfunction isNullableColumn(model: AnyModelDef, key: string): boolean {\n  const nullable = model.meta.nullable as Partial<Record<string, boolean>> | undefined\n  return nullable?.[key] === true\n}\n\n/**\n * Normalizes model data into form-safe defaults using model nullability metadata.\n */\nexport function toModelFormDefaults<\n  TModel extends AnyModelDef,\n  TMode extends ModelFormNullishMode = 'empty-string',\n>(\n  model: TModel,\n  values?: Partial<RowOf<TModel>> | Partial<InsertOf<TModel>> | null,\n  options?: ToModelFormDefaultsOptions<TMode>,\n): ModelFormDefaults<TModel, TMode> {\n  const source = values as ModelValueRecord | null | undefined\n  if (!isRecord(source)) {\n    return {} as ModelFormDefaults<TModel, TMode>\n  }\n\n  const mode = options?.nullishMode ?? ('empty-string' as TMode)\n  const nullishValue = resolveNullishValue(mode)\n  const result: ModelValueRecord = {}\n\n  for (const [key, value] of Object.entries(source)) {\n    if (value === null && isNullableColumn(model, key)) {\n      result[key] = nullishValue\n      continue\n    }\n    result[key] = value\n  }\n\n  return result as ModelFormDefaults<TModel, TMode>\n}\n\n/**\n * Normalizes form values back into model-compatible insert/update payloads.\n */\nexport function toModelPayload<TModel extends AnyModelDef>(\n  model: TModel,\n  formValues: Partial<ModelFormValues<TModel, 'empty-string' | 'undefined' | 'null'>>,\n  options?: ToModelPayloadOptions,\n): Partial<InsertOf<TModel>> {\n  const emptyStringAsNull = options?.emptyStringAsNull ?? true\n  const stripUndefined = options?.stripUndefined ?? true\n  const result: ModelValueRecord = {}\n\n  for (const [key, rawValue] of Object.entries(formValues as ModelValueRecord)) {\n    if (rawValue === undefined && stripUndefined) {\n      continue\n    }\n\n    if (emptyStringAsNull && rawValue === '' && isNullableColumn(model, key)) {\n      result[key] = null\n      continue\n    }\n\n    result[key] = rawValue\n  }\n\n  return result as Partial<InsertOf<TModel>>\n}\n\n/**\n * Runtime form adapter bound to a model contract.\n */\nexport interface ModelFormAdapter<TModel extends AnyModelDef> {\n  model: TModel\n  toDefaults<TMode extends ModelFormNullishMode = 'empty-string'>(\n    values?: Partial<RowOf<TModel>> | Partial<InsertOf<TModel>> | null,\n    options?: ToModelFormDefaultsOptions<TMode>,\n  ): ModelFormDefaults<TModel, TMode>\n  toInsert(\n    values: Partial<ModelFormValues<TModel, 'empty-string' | 'undefined' | 'null'>>,\n    options?: ToModelPayloadOptions,\n  ): Partial<InsertOf<TModel>>\n  toUpdate(\n    values: Partial<ModelFormValues<TModel, 'empty-string' | 'undefined' | 'null'>>,\n    options?: ToModelPayloadOptions,\n  ): Partial<UpdateOf<TModel>>\n}\n\n/**\n * Creates a small model-aware adapter for form defaults and payload normalization.\n */\nexport function createModelFormAdapter<TModel extends AnyModelDef>(model: TModel): ModelFormAdapter<TModel> {\n  return {\n    model,\n    toDefaults(values, options) {\n      return toModelFormDefaults(model, values, options)\n    },\n    toInsert(values, options) {\n      return toModelPayload(model, values, options) as Partial<InsertOf<TModel>>\n    },\n    toUpdate(values, options) {\n      return toModelPayload(model, values, options) as Partial<UpdateOf<TModel>>\n    },\n  }\n}\n","import type { ZodType } from 'zod'\nimport type { ModelColumnKind } from './types.ts'\n\nexport const COLUMN_CONFIG = Symbol('athena.column.config')\n\nexport interface ColumnRuntimeConfig<\n  TValue,\n  TNullable extends boolean = false,\n  THasDefault extends boolean = false,\n  TGenerated extends boolean = false,\n  TColumnName extends string | undefined = undefined,\n  TKind extends ModelColumnKind = ModelColumnKind,\n> {\n  readonly kind: TKind\n  readonly columnName?: TColumnName\n  readonly nullable: TNullable\n  readonly hasDefault: THasDefault\n  readonly isGenerated: TGenerated\n  readonly enumValues?: readonly string[]\n  readonly jsonSchema?: ZodType<TValue>\n  readonly __value?: TValue\n}\n\nexport interface AthenaColumnBuilder<\n  TValue,\n  TNullable extends boolean = false,\n  THasDefault extends boolean = false,\n  TGenerated extends boolean = false,\n  TColumnName extends string | undefined = undefined,\n  TKind extends ModelColumnKind = ModelColumnKind,\n> {\n  readonly [COLUMN_CONFIG]: ColumnRuntimeConfig<\n    TValue,\n    TNullable,\n    THasDefault,\n    TGenerated,\n    TColumnName,\n    TKind\n  >\n  optional(): AthenaColumnBuilder<TValue, true, THasDefault, TGenerated, TColumnName, TKind>\n  from<TNextColumnName extends string>(\n    columnName: TNextColumnName,\n  ): AthenaColumnBuilder<TValue, TNullable, THasDefault, TGenerated, TNextColumnName, TKind>\n  defaulted(): AthenaColumnBuilder<TValue, TNullable, true, TGenerated, TColumnName, TKind>\n  generated(): AthenaColumnBuilder<TValue, TNullable, THasDefault, true, TColumnName, TKind>\n}\n\nexport type AnyColumnBuilder = AthenaColumnBuilder<\n  unknown,\n  boolean,\n  boolean,\n  boolean,\n  string | undefined,\n  ModelColumnKind\n>\n\nfunction createColumnBuilder<\n  TValue,\n  TNullable extends boolean,\n  THasDefault extends boolean,\n  TGenerated extends boolean,\n  TColumnName extends string | undefined,\n  TKind extends ModelColumnKind,\n>(\n  config: ColumnRuntimeConfig<\n    TValue,\n    TNullable,\n    THasDefault,\n    TGenerated,\n    TColumnName,\n    TKind\n  >,\n): AthenaColumnBuilder<TValue, TNullable, THasDefault, TGenerated, TColumnName, TKind> {\n  return {\n    [COLUMN_CONFIG]: config,\n    optional() {\n      return createColumnBuilder({\n        ...config,\n        nullable: true,\n      })\n    },\n    from<TNextColumnName extends string>(columnName: TNextColumnName) {\n      return createColumnBuilder({\n        ...config,\n        columnName,\n      })\n    },\n    defaulted() {\n      return createColumnBuilder({\n        ...config,\n        hasDefault: true,\n      })\n    },\n    generated() {\n      return createColumnBuilder({\n        ...config,\n        isGenerated: true,\n      })\n    },\n  }\n}\n\nexport function isColumnBuilder(value: unknown): value is AnyColumnBuilder {\n  return value !== null && typeof value === 'object' && COLUMN_CONFIG in value\n}\n\nexport function getColumnConfig<TColumn extends AnyColumnBuilder>(\n  column: TColumn,\n): TColumn[typeof COLUMN_CONFIG] {\n  return column[COLUMN_CONFIG]\n}\n\nexport function string(): AthenaColumnBuilder<string, false, false, false, undefined, 'string'> {\n  return createColumnBuilder({\n    kind: 'string',\n    nullable: false,\n    hasDefault: false,\n    isGenerated: false,\n  })\n}\n\nexport function number(): AthenaColumnBuilder<number, false, false, false, undefined, 'number'> {\n  return createColumnBuilder({\n    kind: 'number',\n    nullable: false,\n    hasDefault: false,\n    isGenerated: false,\n  })\n}\n\nexport function boolean(): AthenaColumnBuilder<boolean, false, false, false, undefined, 'boolean'> {\n  return createColumnBuilder({\n    kind: 'boolean',\n    nullable: false,\n    hasDefault: false,\n    isGenerated: false,\n  })\n}\n\nexport function json<TValue = unknown>(\n  schema?: ZodType<TValue>,\n): AthenaColumnBuilder<TValue, false, false, false, undefined, 'json'> {\n  return createColumnBuilder({\n    kind: 'json',\n    nullable: false,\n    hasDefault: false,\n    isGenerated: false,\n    jsonSchema: schema,\n  })\n}\n\nexport function enumeration<const TValues extends readonly [string, ...string[]]>(\n  values: TValues,\n): AthenaColumnBuilder<TValues[number], false, false, false, undefined, 'enumeration'> {\n  if (values.length === 0) {\n    throw new Error('enumeration() requires at least one value')\n  }\n\n  return createColumnBuilder({\n    kind: 'enumeration',\n    nullable: false,\n    hasDefault: false,\n    isGenerated: false,\n    enumValues: values,\n  })\n}\n","import { z, type ZodType, type ZodTypeAny } from 'zod'\nimport { toModelPayload } from './model-form.ts'\nimport { getColumnConfig, type AnyColumnBuilder } from './table-columns.ts'\nimport type { AnyModelDef, ModelColumnKind } from './types.ts'\n\nexport interface AthenaTableSchemaBundle<Row, Insert, Update> {\n  readonly row: ZodType<Row>\n  readonly insert: ZodType<Insert>\n  readonly update: ZodType<Update>\n  readonly form: ZodType<Insert>\n}\n\nfunction isScalarFormKind(kind: ModelColumnKind): boolean {\n  return kind === 'string' || kind === 'number' || kind === 'boolean' || kind === 'enumeration'\n}\n\nfunction createBaseSchema(column: AnyColumnBuilder): ZodTypeAny {\n  const config = getColumnConfig(column)\n\n  switch (config.kind) {\n    case 'boolean':\n      return z.boolean()\n    case 'number':\n      return z.number()\n    case 'json':\n      return (config.jsonSchema ?? z.unknown()) as ZodTypeAny\n    case 'enumeration':\n      if (!config.enumValues || config.enumValues.length === 0) {\n        return z.string()\n      }\n      return z.enum(config.enumValues as [string, ...string[]])\n    case 'string':\n    default:\n      return z.string()\n  }\n}\n\nfunction applyNullable(schema: ZodTypeAny, column: AnyColumnBuilder): ZodTypeAny {\n  const config = getColumnConfig(column)\n  return config.nullable ? schema.nullable() : schema\n}\n\nfunction applyInsertOptional(schema: ZodTypeAny, column: AnyColumnBuilder): ZodTypeAny {\n  const config = getColumnConfig(column)\n  return config.nullable || config.hasDefault ? schema.optional() : schema\n}\n\nfunction createFormFieldSchema(column: AnyColumnBuilder): ZodTypeAny {\n  const config = getColumnConfig(column)\n  const base = createBaseSchema(column)\n\n  let schema: ZodTypeAny\n  if (config.nullable && isScalarFormKind(config.kind)) {\n    schema = z\n      .union([base, z.literal('')])\n      .transform(value => value === '' ? null : value)\n  } else {\n    schema = applyNullable(base, column)\n  }\n\n  if (config.nullable || config.hasDefault) {\n    schema = schema.optional()\n  }\n\n  return schema\n}\n\nexport function buildTableSchemaBundle<Row, Insert, Update>(\n  model: AnyModelDef,\n  columns: Record<string, AnyColumnBuilder>,\n): AthenaTableSchemaBundle<Row, Insert, Update> {\n  const rowShape: Record<string, ZodTypeAny> = {}\n  const insertShape: Record<string, ZodTypeAny> = {}\n  const updateShape: Record<string, ZodTypeAny> = {}\n  const formShape: Record<string, ZodTypeAny> = {}\n\n  for (const [columnName, column] of Object.entries(columns)) {\n    const config = getColumnConfig(column)\n    const base = createBaseSchema(column)\n\n    rowShape[columnName] = applyNullable(base, column)\n\n    if (config.isGenerated) {\n      continue\n    }\n\n    insertShape[columnName] = applyInsertOptional(applyNullable(base, column), column)\n    updateShape[columnName] = applyNullable(base, column).optional()\n    formShape[columnName] = createFormFieldSchema(column)\n  }\n\n  const rowSchema = z.object(rowShape) as ZodType<Row>\n  const insertSchema = z.object(insertShape) as ZodType<Insert>\n  const updateSchema = z.object(updateShape) as ZodType<Update>\n  const formSchema = z\n    .object(formShape)\n    .transform(value => toModelPayload(model, value as never) as Insert) as ZodType<Insert>\n\n  return {\n    row: rowSchema,\n    insert: insertSchema,\n    update: updateSchema,\n    form: formSchema,\n  }\n}\n","import { defineModel } from './definitions.ts'\nimport type { ModelFormValues, ModelFormNullishMode } from './model-form.ts'\nimport { buildTableSchemaBundle, type AthenaTableSchemaBundle } from './table-schemas.ts'\nimport {\n  COLUMN_CONFIG,\n  getColumnConfig,\n  isColumnBuilder,\n  type AnyColumnBuilder,\n  type AthenaColumnBuilder,\n} from './table-columns.ts'\nimport type { AnyModelDef, ModelColumnMetadata, ModelDef, ModelMetadata } from './types.ts'\n\ntype Simplify<T> = { [K in keyof T]: T[K] } & {}\ntype ExtractColumnConfig<TColumn extends AnyColumnBuilder> = TColumn[typeof COLUMN_CONFIG]\ntype ColumnValue<TColumn extends AnyColumnBuilder> =\n  ExtractColumnConfig<TColumn> extends { __value?: infer TValue } ? TValue : never\ntype ColumnNullable<TColumn extends AnyColumnBuilder> =\n  ExtractColumnConfig<TColumn> extends { nullable: infer TNullable extends boolean } ? TNullable : never\ntype ColumnHasDefault<TColumn extends AnyColumnBuilder> =\n  ExtractColumnConfig<TColumn> extends { hasDefault: infer THasDefault extends boolean } ? THasDefault : never\ntype ColumnGenerated<TColumn extends AnyColumnBuilder> =\n  ExtractColumnConfig<TColumn> extends { isGenerated: infer TGenerated extends boolean } ? TGenerated : never\n\ntype RowFieldType<TColumn extends AnyColumnBuilder> =\n  ColumnNullable<TColumn> extends true ? ColumnValue<TColumn> | null : ColumnValue<TColumn>\n\ntype WritableColumnKeys<TColumns extends Record<string, AnyColumnBuilder>> = Extract<{\n  [K in keyof TColumns]-?: ColumnGenerated<TColumns[K]> extends true ? never : K\n}[keyof TColumns], string>\n\ntype InsertRequiredKeys<TColumns extends Record<string, AnyColumnBuilder>> = Extract<{\n  [K in keyof TColumns]-?: ColumnGenerated<TColumns[K]> extends true\n    ? never\n    : ColumnHasDefault<TColumns[K]> extends true\n      ? never\n      : ColumnNullable<TColumns[K]> extends true\n        ? never\n        : K\n}[keyof TColumns], string>\n\ntype InsertOptionalKeys<TColumns extends Record<string, AnyColumnBuilder>> = Exclude<\n  WritableColumnKeys<TColumns>,\n  InsertRequiredKeys<TColumns>\n>\n\ntype ExtractMappedSchemaName<TMappedName extends string | undefined> =\n  TMappedName extends `${infer TSchema}.${string}` ? TSchema : undefined\n\ntype ExtractMappedTableName<TMappedName extends string | undefined> =\n  TMappedName extends `${string}.${infer TTable}`\n    ? TTable\n    : TMappedName extends string\n      ? TMappedName\n      : undefined\n\ntype ResolvedSchemaName<\n  TSchemaName extends string | undefined,\n  TMappedName extends string | undefined,\n> = TSchemaName extends string ? TSchemaName : ExtractMappedSchemaName<TMappedName>\n\ntype ResolvedTableName<\n  TName extends string,\n  TMappedName extends string | undefined,\n> = ExtractMappedTableName<TMappedName> extends string ? ExtractMappedTableName<TMappedName> : TName\n\ntype QualifiedTableName<\n  TName extends string,\n  TMappedName extends string | undefined,\n  TSchemaName extends string | undefined,\n> = ResolvedSchemaName<TSchemaName, TMappedName> extends infer TResolvedSchema extends string | undefined\n  ? TResolvedSchema extends string\n    ? `${TResolvedSchema}.${ResolvedTableName<TName, TMappedName>}`\n    : ResolvedTableName<TName, TMappedName>\n  : never\n\nexport type RowFromColumns<TColumns extends Record<string, AnyColumnBuilder>> = Simplify<{\n  [K in keyof TColumns]: RowFieldType<TColumns[K]>\n}>\n\nexport type InsertFromColumns<TColumns extends Record<string, AnyColumnBuilder>> = Simplify<\n  {\n    [K in InsertRequiredKeys<TColumns>]: ColumnValue<TColumns[K]>\n  } & {\n    [K in InsertOptionalKeys<TColumns>]?: RowFieldType<TColumns[K]>\n  }\n>\n\nexport type UpdateFromColumns<TColumns extends Record<string, AnyColumnBuilder>> = Simplify<{\n  [K in WritableColumnKeys<TColumns>]?: RowFieldType<TColumns[K]>\n}>\n\nexport type FormValuesFromColumns<\n  TColumns extends Record<string, AnyColumnBuilder>,\n  TMode extends ModelFormNullishMode = 'empty-string',\n> = ModelFormValues<\n  AthenaTableDef<TColumns>,\n  TMode\n>\n\nexport interface AthenaTableDef<\n  TColumns extends Record<string, AnyColumnBuilder>,\n  TName extends string = string,\n  TMappedName extends string | undefined = undefined,\n  TSchemaName extends string | undefined = undefined,\n> extends ModelDef<\n    RowFromColumns<TColumns>,\n    InsertFromColumns<TColumns>,\n    UpdateFromColumns<TColumns>,\n    ModelMetadata<RowFromColumns<TColumns>>\n  > {\n  readonly kind: 'table'\n  readonly name: TName\n  readonly mappedName: TMappedName\n  readonly schemaName: ResolvedSchemaName<TSchemaName, TMappedName>\n  readonly tableName: ResolvedTableName<TName, TMappedName>\n  readonly qualifiedName: QualifiedTableName<TName, TMappedName, TSchemaName>\n  readonly columns: Readonly<TColumns>\n  readonly schemas: AthenaTableSchemaBundle<\n    RowFromColumns<TColumns>,\n    InsertFromColumns<TColumns>,\n    UpdateFromColumns<TColumns>\n  >\n}\n\ninterface AthenaTableBuilder<\n  TName extends string,\n  TMappedName extends string | undefined = undefined,\n  TSchemaName extends string | undefined = undefined,\n> {\n  readonly name: TName\n  readonly mappedName: TMappedName\n  readonly schemaName: TSchemaName\n  from<TNextMappedName extends string>(\n    tableName: TNextMappedName,\n  ): AthenaTableBuilder<TName, TNextMappedName, TSchemaName>\n  schema<TNextSchemaName extends string>(\n    schemaName: TNextSchemaName,\n  ): AthenaTableBuilder<TName, TMappedName, TNextSchemaName>\n  columns<TColumns extends Record<string, AnyColumnBuilder>>(\n    columns: TColumns,\n  ): AthenaTableColumnsBuilder<TName, TMappedName, TSchemaName, TColumns>\n}\n\ninterface AthenaTableColumnsBuilder<\n  TName extends string,\n  TMappedName extends string | undefined,\n  TSchemaName extends string | undefined,\n  TColumns extends Record<string, AnyColumnBuilder>,\n> {\n  readonly name: TName\n  readonly mappedName: TMappedName\n  readonly schemaName: TSchemaName\n  readonly columns: Readonly<TColumns>\n  from<TNextMappedName extends string>(\n    tableName: TNextMappedName,\n  ): AthenaTableColumnsBuilder<TName, TNextMappedName, TSchemaName, TColumns>\n  schema<TNextSchemaName extends string>(\n    schemaName: TNextSchemaName,\n  ): AthenaTableColumnsBuilder<TName, TMappedName, TNextSchemaName, TColumns>\n  withoutPrimaryKey(): AthenaTableDef<TColumns, TName, TMappedName, TSchemaName>\n  primaryKey(): AthenaTableDef<TColumns, TName, TMappedName, TSchemaName>\n  primaryKey<\n    TPrimaryKey extends readonly [\n      Extract<keyof TColumns, string>,\n      ...Array<Extract<keyof TColumns, string>>,\n    ],\n  >(...keys: TPrimaryKey): AthenaTableDef<TColumns, TName, TMappedName, TSchemaName>\n}\n\nfunction assertColumnRecord(columns: Record<string, AnyColumnBuilder>): void {\n  for (const [columnName, column] of Object.entries(columns)) {\n    if (!isColumnBuilder(column)) {\n      throw new Error(`Invalid column definition for \"${columnName}\"`)\n    }\n  }\n}\n\nfunction normalizeMappedNameInput(mappedName: string): string {\n  const normalized = mappedName.trim()\n  if (!normalized) {\n    throw new Error('table.from() requires a non-empty table name')\n  }\n  return normalized\n}\n\nfunction normalizeSchemaNameInput(schemaName: string): string {\n  const normalized = schemaName.trim()\n  if (!normalized) {\n    throw new Error('table.schema() requires a non-empty schema name')\n  }\n  if (normalized.includes('.')) {\n    throw new Error(\n      'table.schema() expects a schema name without dots. Use .schema(\"schema\").from(\"table\") or .from(\"schema.table\").',\n    )\n  }\n  return normalized\n}\n\nfunction resolveTableTarget(logicalName: string, mappedName?: string, explicitSchemaName?: string): {\n  schema?: string\n  model: string\n  qualifiedName: string\n} {\n  const physicalName = (mappedName ?? logicalName).trim()\n  if (!physicalName) {\n    throw new Error('table() requires a non-empty name')\n  }\n\n  const firstDot = physicalName.indexOf('.')\n  const lastDot = physicalName.lastIndexOf('.')\n  if (firstDot > 0 && firstDot === lastDot) {\n    const inlineSchema = physicalName.slice(0, firstDot).trim()\n    const inlineModel = physicalName.slice(firstDot + 1).trim()\n    if (!inlineSchema || !inlineModel) {\n      throw new Error('table.from() schema-qualified names must look like \"schema.table\"')\n    }\n    if (explicitSchemaName && explicitSchemaName !== inlineSchema) {\n      throw new Error(\n        `table schema \"${explicitSchemaName}\" conflicts with mapped table \"${physicalName}\"`,\n      )\n    }\n\n    return {\n      schema: explicitSchemaName ?? inlineSchema,\n      model: inlineModel,\n      qualifiedName: `${explicitSchemaName ?? inlineSchema}.${inlineModel}`,\n    }\n  }\n\n  if (explicitSchemaName) {\n    return {\n      schema: explicitSchemaName,\n      model: physicalName,\n      qualifiedName: `${explicitSchemaName}.${physicalName}`,\n    }\n  }\n\n  return {\n    model: physicalName,\n    qualifiedName: physicalName,\n  }\n}\n\nfunction toColumnMetadata(column: AnyColumnBuilder): ModelColumnMetadata {\n  const config = getColumnConfig(column)\n  return {\n    kind: config.kind,\n    columnName: config.columnName,\n    nullable: config.nullable,\n    hasDefault: config.hasDefault,\n    isGenerated: config.isGenerated,\n    enumValues: config.enumValues,\n  }\n}\n\nfunction buildNullableMap(columns: Record<string, AnyColumnBuilder>): Record<string, boolean> {\n  return Object.fromEntries(\n    Object.entries(columns).map(([columnName, column]) => [columnName, getColumnConfig(column).nullable]),\n  )\n}\n\nfunction buildColumnMetadataMap(columns: Record<string, AnyColumnBuilder>): Record<string, ModelColumnMetadata> {\n  return Object.fromEntries(\n    Object.entries(columns).map(([columnName, column]) => [columnName, toColumnMetadata(column)]),\n  )\n}\n\nfunction finalizeTable<\n  TName extends string,\n  TMappedName extends string | undefined,\n  TSchemaName extends string | undefined,\n  TColumns extends Record<string, AnyColumnBuilder>,\n>(\n  name: TName,\n  mappedName: TMappedName,\n  schemaName: TSchemaName,\n  columns: TColumns,\n  primaryKey: ReadonlyArray<Extract<keyof TColumns, string>>,\n): AthenaTableDef<TColumns, TName, TMappedName, TSchemaName> {\n  const target = resolveTableTarget(name, mappedName, schemaName)\n  const model = defineModel<\n    RowFromColumns<TColumns>,\n    InsertFromColumns<TColumns>,\n    UpdateFromColumns<TColumns>\n  >({\n    meta: {\n      schema: target.schema,\n      model: target.model,\n      primaryKey: [...primaryKey],\n      nullable: buildNullableMap(columns),\n      columns: buildColumnMetadataMap(columns),\n    },\n  })\n\n  const schemas = buildTableSchemaBundle<\n    RowFromColumns<TColumns>,\n    InsertFromColumns<TColumns>,\n    UpdateFromColumns<TColumns>\n  >(model as AnyModelDef, columns)\n\n  return Object.assign(model, {\n    kind: 'table' as const,\n    name,\n    mappedName,\n    schemaName: target.schema,\n    tableName: target.model,\n    qualifiedName: target.qualifiedName,\n    columns,\n    schemas,\n  }) as AthenaTableDef<TColumns, TName, TMappedName, TSchemaName>\n}\n\nfunction createColumnsBuilder<\n  TName extends string,\n  TMappedName extends string | undefined,\n  TSchemaName extends string | undefined,\n  TColumns extends Record<string, AnyColumnBuilder>,\n>(\n  name: TName,\n  mappedName: TMappedName,\n  schemaName: TSchemaName,\n  columns: TColumns,\n): AthenaTableColumnsBuilder<TName, TMappedName, TSchemaName, TColumns> {\n  assertColumnRecord(columns)\n\n  return {\n    name,\n    mappedName,\n    schemaName,\n    columns,\n    from<TNextMappedName extends string>(tableName: TNextMappedName) {\n      const normalizedTableName = normalizeMappedNameInput(tableName)\n      resolveTableTarget(name, normalizedTableName, schemaName)\n      return createColumnsBuilder(name, normalizedTableName as TNextMappedName, schemaName, columns)\n    },\n    schema<TNextSchemaName extends string>(nextSchemaName: TNextSchemaName) {\n      const normalizedSchemaName = normalizeSchemaNameInput(nextSchemaName)\n      resolveTableTarget(name, mappedName, normalizedSchemaName)\n      return createColumnsBuilder(name, mappedName, normalizedSchemaName as TNextSchemaName, columns)\n    },\n    withoutPrimaryKey() {\n      return finalizeTable(name, mappedName, schemaName, columns, [])\n    },\n    primaryKey(...keys: Array<Extract<keyof TColumns, string>>) {\n      return finalizeTable(name, mappedName, schemaName, columns, keys)\n    },\n  }\n}\n\nfunction createTableBuilder<\n  TName extends string,\n  TMappedName extends string | undefined,\n  TSchemaName extends string | undefined,\n>(\n  name: TName,\n  mappedName: TMappedName,\n  schemaName: TSchemaName,\n): AthenaTableBuilder<TName, TMappedName, TSchemaName> {\n  return {\n    name,\n    mappedName,\n    schemaName,\n    from<TNextMappedName extends string>(tableName: TNextMappedName) {\n      const normalizedTableName = normalizeMappedNameInput(tableName)\n      resolveTableTarget(name, normalizedTableName, schemaName)\n      return createTableBuilder(name, normalizedTableName as TNextMappedName, schemaName)\n    },\n    schema<TNextSchemaName extends string>(nextSchemaName: TNextSchemaName) {\n      const normalizedSchemaName = normalizeSchemaNameInput(nextSchemaName)\n      resolveTableTarget(name, mappedName, normalizedSchemaName)\n      return createTableBuilder(name, mappedName, normalizedSchemaName as TNextSchemaName)\n    },\n    columns<TColumns extends Record<string, AnyColumnBuilder>>(columns: TColumns) {\n      return createColumnsBuilder(name, mappedName, schemaName, columns)\n    },\n  }\n}\n\nexport function table<TName extends string>(name: TName): AthenaTableBuilder<TName, undefined> {\n  if (!name.trim()) {\n    throw new Error('table() requires a non-empty name')\n  }\n\n  return createTableBuilder(name, undefined, undefined)\n}\n\nexport type { AthenaColumnBuilder }\n","import type {\n  IntrospectionColumn,\n  IntrospectionRelation,\n  IntrospectionSchema,\n  IntrospectionTable,\n  ModelRelationKind,\n} from './types.ts'\n\nexport type ColumnQueryRow = {\n  schema_name: string\n  table_name: string\n  column_name: string\n  data_type: string\n  udt_name: string\n  type_kind_code: string\n  type_oid: number\n  is_nullable: boolean\n  has_default: boolean\n  is_generated: boolean\n  array_dimensions: number\n}\n\nexport type PrimaryKeyQueryRow = {\n  schema_name: string\n  table_name: string\n  columns: string[]\n}\n\nexport type ForeignKeyQueryRow = {\n  source_schema: string\n  source_table: string\n  constraint_name: string\n  source_columns: string[]\n  target_schema: string\n  target_table: string\n  target_columns: string[]\n  source_is_unique: boolean\n}\n\nexport type EnumQueryRow = {\n  type_oid: number\n  enum_label: string\n}\n\ntype BridgeCandidate = {\n  schema: string\n  table: string\n  foreignKeys: ForeignKeyQueryRow[]\n}\n\nexport const POSTGRES_CATALOG_SQL = {\n  columns: `\n    SELECT\n      n.nspname AS schema_name,\n      c.relname AS table_name,\n      a.attname AS column_name,\n      format_type(a.atttypid, a.atttypmod) AS data_type,\n      t.typname AS udt_name,\n      t.typtype AS type_kind_code,\n      t.oid AS type_oid,\n      NOT a.attnotnull AS is_nullable,\n      (ad.adbin IS NOT NULL) AS has_default,\n      (a.attgenerated <> '') AS is_generated,\n      a.attndims AS array_dimensions\n    FROM pg_attribute a\n    JOIN pg_class c ON c.oid = a.attrelid\n    JOIN pg_namespace n ON n.oid = c.relnamespace\n    JOIN pg_type t ON t.oid = a.atttypid\n    LEFT JOIN pg_attrdef ad ON ad.adrelid = a.attrelid AND ad.adnum = a.attnum\n    WHERE c.relkind IN ('r', 'p')\n      AND a.attnum > 0\n      AND NOT a.attisdropped\n      AND n.nspname = ANY($1::text[])\n    ORDER BY n.nspname, c.relname, a.attnum;\n  `,\n  enums: `\n    SELECT\n      t.oid AS type_oid,\n      e.enumlabel AS enum_label\n    FROM pg_type t\n    JOIN pg_enum e ON e.enumtypid = t.oid\n    ORDER BY t.oid, e.enumsortorder;\n  `,\n  primaryKeys: `\n    SELECT\n      n.nspname AS schema_name,\n      c.relname AS table_name,\n      ARRAY_AGG(a.attname ORDER BY ck.ordinality) AS columns\n    FROM pg_constraint con\n    JOIN pg_class c ON c.oid = con.conrelid\n    JOIN pg_namespace n ON n.oid = c.relnamespace\n    JOIN unnest(con.conkey) WITH ORDINALITY AS ck(attnum, ordinality) ON TRUE\n    JOIN pg_attribute a ON a.attrelid = c.oid AND a.attnum = ck.attnum\n    WHERE con.contype = 'p'\n      AND n.nspname = ANY($1::text[])\n    GROUP BY n.nspname, c.relname\n    ORDER BY n.nspname, c.relname;\n  `,\n  foreignKeys: `\n    SELECT\n      sn.nspname AS source_schema,\n      sc.relname AS source_table,\n      con.conname AS constraint_name,\n      ARRAY_AGG(sa.attname ORDER BY cols.ordinality) AS source_columns,\n      tn.nspname AS target_schema,\n      tc.relname AS target_table,\n      ARRAY_AGG(ta.attname ORDER BY cols.ordinality) AS target_columns,\n      EXISTS (\n        SELECT 1\n        FROM pg_constraint uq\n        WHERE uq.conrelid = con.conrelid\n          AND uq.contype IN ('p', 'u')\n          AND uq.conkey = con.conkey\n      ) AS source_is_unique\n    FROM pg_constraint con\n    JOIN pg_class sc ON sc.oid = con.conrelid\n    JOIN pg_namespace sn ON sn.oid = sc.relnamespace\n    JOIN pg_class tc ON tc.oid = con.confrelid\n    JOIN pg_namespace tn ON tn.oid = tc.relnamespace\n    JOIN unnest(con.conkey, con.confkey) WITH ORDINALITY AS cols(source_attnum, target_attnum, ordinality) ON TRUE\n    JOIN pg_attribute sa ON sa.attrelid = con.conrelid AND sa.attnum = cols.source_attnum\n    JOIN pg_attribute ta ON ta.attrelid = con.confrelid AND ta.attnum = cols.target_attnum\n    WHERE con.contype = 'f'\n      AND sn.nspname = ANY($1::text[])\n      AND tn.nspname = ANY($1::text[])\n    GROUP BY\n      sn.nspname,\n      sc.relname,\n      con.conname,\n      tn.nspname,\n      tc.relname,\n      con.conkey,\n      con.conrelid\n    ORDER BY sn.nspname, sc.relname, con.conname;\n  `,\n} as const\n\nfunction tableKey(schema: string, table: string): string {\n  return `${schema}.${table}`\n}\n\nfunction relationKey(...parts: string[]): string {\n  const base = parts\n    .join('_')\n    .replace(/[^A-Za-z0-9_]+/g, '_')\n    .replace(/^_+|_+$/g, '')\n  return base.length > 0 ? base : 'relation'\n}\n\nfunction toTypeKind(code: string): IntrospectionColumn['typeKind'] {\n  switch (code) {\n    case 'e':\n      return 'enum'\n    case 'd':\n      return 'domain'\n    case 'r':\n      return 'range'\n    case 'm':\n      return 'multirange'\n    case 'c':\n      return 'composite'\n    default:\n      return 'scalar'\n  }\n}\n\nfunction escapeSqlLiteral(value: string): string {\n  return value.replace(/'/g, \"''\")\n}\n\nfunction parsePostgresArrayLiteral(text: string): string[] {\n  const body = text.slice(1, -1).trim()\n  if (!body) return []\n\n  const values: string[] = []\n  let current = ''\n  let inQuotes = false\n  let escaped = false\n\n  for (const char of body) {\n    if (escaped) {\n      current += char\n      escaped = false\n      continue\n    }\n    if (char === '\\\\') {\n      escaped = true\n      continue\n    }\n    if (char === '\"') {\n      inQuotes = !inQuotes\n      continue\n    }\n    if (char === ',' && !inQuotes) {\n      values.push(current)\n      current = ''\n      continue\n    }\n    current += char\n  }\n\n  values.push(current)\n  return values.map(value => value.trim()).filter(value => value.length > 0)\n}\n\nfunction coerceStringArray(value: unknown): string[] {\n  if (Array.isArray(value)) {\n    return value\n      .map(item => (typeof item === 'string' ? item : String(item)))\n      .map(item => item.trim())\n      .filter(item => item.length > 0)\n  }\n\n  if (typeof value === 'string') {\n    const trimmed = value.trim()\n    if (!trimmed) return []\n\n    if (trimmed.startsWith('[') && trimmed.endsWith(']')) {\n      try {\n        const parsed = JSON.parse(trimmed) as unknown\n        return coerceStringArray(parsed)\n      } catch {\n        // Fall through to more permissive parsing paths.\n      }\n    }\n\n    if (trimmed.startsWith('{') && trimmed.endsWith('}')) {\n      return parsePostgresArrayLiteral(trimmed)\n    }\n\n    return trimmed\n      .split(',')\n      .map(item => item.trim())\n      .filter(item => item.length > 0)\n  }\n\n  return []\n}\n\nexport function normalizePostgresCatalogSchemas(schemas?: readonly string[]): string[] {\n  const normalized: string[] = []\n  const seen = new Set<string>()\n\n  for (const value of schemas ?? []) {\n    const schema = value.trim()\n    if (!schema || seen.has(schema)) {\n      continue\n    }\n    seen.add(schema)\n    normalized.push(schema)\n  }\n\n  return normalized.length > 0 ? normalized : ['public']\n}\n\nexport function buildSchemaArrayLiteral(schemas: readonly string[]): string {\n  const normalized = normalizePostgresCatalogSchemas(schemas)\n  const literals = normalized.map(schema => `'${escapeSqlLiteral(schema)}'`).join(', ')\n  return `ARRAY[${literals}]`\n}\n\nfunction inlineSchemaLiteral(sql: string, schemas: readonly string[]): string {\n  const schemaArray = `${buildSchemaArrayLiteral(schemas)}::text[]`\n  return sql.replace(/\\$1::text\\[\\]/g, schemaArray)\n}\n\nexport function buildGatewayCatalogQueries(schemas: readonly string[]): {\n  columns: string\n  enums: string\n  primaryKeys: string\n  foreignKeys: string\n} {\n  return {\n    columns: inlineSchemaLiteral(POSTGRES_CATALOG_SQL.columns, schemas),\n    enums: POSTGRES_CATALOG_SQL.enums,\n    primaryKeys: inlineSchemaLiteral(POSTGRES_CATALOG_SQL.primaryKeys, schemas),\n    foreignKeys: inlineSchemaLiteral(POSTGRES_CATALOG_SQL.foreignKeys, schemas),\n  }\n}\n\nexport class PostgresCatalogSnapshotAssembler {\n  private readonly schemas: Record<string, IntrospectionSchema> = {}\n\n  addColumnRows(columnRows: ColumnQueryRow[], enumMap: Map<number, string[]>) {\n    for (const row of columnRows) {\n      const table = this.ensureTable(row.schema_name, row.table_name)\n      table.columns[row.column_name] = {\n        name: row.column_name,\n        dataType: row.data_type,\n        udtName: row.udt_name,\n        typeKind: toTypeKind(row.type_kind_code),\n        isNullable: row.is_nullable,\n        isPrimaryKey: false,\n        hasDefault: row.has_default,\n        isGenerated: row.is_generated,\n        arrayDimensions: row.array_dimensions ?? 0,\n        enumValues: enumMap.get(row.type_oid),\n      }\n    }\n  }\n\n  addPrimaryKeyRows(primaryKeyRows: PrimaryKeyQueryRow[]) {\n    for (const row of primaryKeyRows) {\n      const table = this.ensureTable(row.schema_name, row.table_name)\n      const primaryKeyColumns = coerceStringArray(row.columns)\n      row.columns = primaryKeyColumns\n      table.primaryKey = primaryKeyColumns\n      for (const columnName of primaryKeyColumns) {\n        const column = table.columns[columnName]\n        if (column) {\n          column.isPrimaryKey = true\n        }\n      }\n    }\n  }\n\n  addForeignKeyRows(foreignKeyRows: ForeignKeyQueryRow[]) {\n    for (const row of foreignKeyRows) {\n      const sourceTable = this.ensureTable(row.source_schema, row.source_table)\n      const targetTable = this.ensureTable(row.target_schema, row.target_table)\n      const sourceColumns = coerceStringArray(row.source_columns)\n      const targetColumns = coerceStringArray(row.target_columns)\n      row.source_columns = sourceColumns\n      row.target_columns = targetColumns\n\n      const sourceRelationKind: ModelRelationKind = row.source_is_unique ? 'one-to-one' : 'many-to-one'\n      this.upsertRelation(sourceTable, relationKey(row.constraint_name, row.target_table), {\n        name: row.constraint_name,\n        kind: sourceRelationKind,\n        sourceColumns,\n        targetSchema: row.target_schema,\n        targetModel: row.target_table,\n        targetColumns,\n      })\n\n      const targetRelationKind: ModelRelationKind = row.source_is_unique ? 'one-to-one' : 'one-to-many'\n      this.upsertRelation(targetTable, relationKey(row.source_table), {\n        name: relationKey(row.source_table, row.constraint_name),\n        kind: targetRelationKind,\n        sourceColumns: targetColumns,\n        targetSchema: row.source_schema,\n        targetModel: row.source_table,\n        targetColumns: sourceColumns,\n      })\n    }\n  }\n\n  addManyToManyRows(foreignKeyRows: ForeignKeyQueryRow[]) {\n    const bySourceTable = new Map<string, BridgeCandidate>()\n    for (const fk of foreignKeyRows) {\n      const key = tableKey(fk.source_schema, fk.source_table)\n      const current = bySourceTable.get(key) ?? {\n        schema: fk.source_schema,\n        table: fk.source_table,\n        foreignKeys: [],\n      }\n      current.foreignKeys.push(fk)\n      bySourceTable.set(key, current)\n    }\n\n    for (const candidate of bySourceTable.values()) {\n      const bridgeTable = this.schemas[candidate.schema]?.tables[candidate.table]\n      if (!bridgeTable) continue\n\n      const primaryKey = bridgeTable.primaryKey\n      if (candidate.foreignKeys.length !== 2 || primaryKey.length === 0) continue\n\n      const combinedForeignColumns = Array.from(\n        new Set(candidate.foreignKeys.flatMap(fk => fk.source_columns)),\n      )\n      if (\n        combinedForeignColumns.length !== primaryKey.length ||\n        !primaryKey.every(column => combinedForeignColumns.includes(column))\n      ) {\n        continue\n      }\n\n      const [first, second] = candidate.foreignKeys\n      const firstTarget = this.schemas[first.target_schema]?.tables[first.target_table]\n      const secondTarget = this.schemas[second.target_schema]?.tables[second.target_table]\n      if (!firstTarget || !secondTarget) {\n        continue\n      }\n\n      this.upsertRelation(firstTarget, relationKey(second.target_table), {\n        name: relationKey(candidate.table, first.constraint_name, second.constraint_name),\n        kind: 'many-to-many',\n        sourceColumns: first.target_columns,\n        targetSchema: second.target_schema,\n        targetModel: second.target_table,\n        targetColumns: second.target_columns,\n        through: {\n          schema: candidate.schema,\n          model: candidate.table,\n          sourceColumns: first.source_columns,\n          targetColumns: second.source_columns,\n        },\n      })\n\n      this.upsertRelation(secondTarget, relationKey(first.target_table), {\n        name: relationKey(candidate.table, second.constraint_name, first.constraint_name),\n        kind: 'many-to-many',\n        sourceColumns: second.target_columns,\n        targetSchema: first.target_schema,\n        targetModel: first.target_table,\n        targetColumns: first.target_columns,\n        through: {\n          schema: candidate.schema,\n          model: candidate.table,\n          sourceColumns: second.source_columns,\n          targetColumns: first.source_columns,\n        },\n      })\n    }\n  }\n\n  toSchemas(): Record<string, IntrospectionSchema> {\n    return this.schemas\n  }\n\n  private ensureTable(schemaName: string, tableName: string): IntrospectionTable {\n    if (!this.schemas[schemaName]) {\n      this.schemas[schemaName] = {\n        name: schemaName,\n        tables: {},\n      }\n    }\n\n    const schema = this.schemas[schemaName]\n    if (!schema.tables[tableName]) {\n      schema.tables[tableName] = {\n        schema: schemaName,\n        name: tableName,\n        columns: {},\n        primaryKey: [],\n        relations: {},\n      }\n    }\n\n    return schema.tables[tableName]\n  }\n\n  private upsertRelation(\n    table: IntrospectionTable,\n    baseKey: string,\n    relation: IntrospectionRelation,\n  ) {\n    let key = baseKey\n    let suffix = 2\n    while (table.relations[key]) {\n      key = `${baseKey}_${suffix}`\n      suffix += 1\n    }\n    table.relations[key] = relation\n  }\n}\n","import type { Pool } from 'pg'\nimport type {\n  IntrospectionInspectOptions,\n  IntrospectionSnapshot,\n  SchemaIntrospectionProvider,\n} from './types.ts'\nimport {\n  type ColumnQueryRow,\n  type EnumQueryRow,\n  type ForeignKeyQueryRow,\n  type PrimaryKeyQueryRow,\n  POSTGRES_CATALOG_SQL,\n  normalizePostgresCatalogSchemas,\n  PostgresCatalogSnapshotAssembler,\n} from './postgres-introspection-core.ts'\n\n/**\n * Constructor options for the PostgreSQL introspection provider.\n */\nexport interface PostgresIntrospectionProviderOptions {\n  connectionString: string\n  database?: string\n  schemas?: readonly string[]\n}\n\ntype PgPoolConstructor = new (config: { connectionString: string }) => Pool\n\nlet pgPoolConstructorPromise: Promise<PgPoolConstructor> | undefined\n\nasync function loadPgPoolConstructor(): Promise<PgPoolConstructor> {\n  if (!pgPoolConstructorPromise) {\n    pgPoolConstructorPromise = import('pg').then(module => {\n      const poolConstructor =\n        (module as { Pool?: PgPoolConstructor }).Pool ??\n        (module as { default?: { Pool?: PgPoolConstructor } }).default?.Pool\n\n      if (!poolConstructor) {\n        throw new Error(\n          '@xylex-group/athena: Unable to load the PostgreSQL driver. Ensure \"pg\" is installed and this API runs in a Node.js server runtime.',\n        )\n      }\n\n      return poolConstructor\n    })\n  }\n\n  return pgPoolConstructorPromise\n}\n\nclass PgCatalogClient {\n  constructor(private readonly pool: Pool) {}\n\n  async queryColumns(schemas: string[]): Promise<ColumnQueryRow[]> {\n    const result = await this.pool.query<ColumnQueryRow>(POSTGRES_CATALOG_SQL.columns, [schemas])\n    return result.rows\n  }\n\n  async queryEnums(): Promise<Map<number, string[]>> {\n    const result = await this.pool.query<EnumQueryRow>(POSTGRES_CATALOG_SQL.enums)\n    const enumMap = new Map<number, string[]>()\n    for (const row of result.rows) {\n      const existing = enumMap.get(row.type_oid) ?? []\n      existing.push(row.enum_label)\n      enumMap.set(row.type_oid, existing)\n    }\n    return enumMap\n  }\n\n  async queryPrimaryKeys(schemas: string[]): Promise<PrimaryKeyQueryRow[]> {\n    const result = await this.pool.query<PrimaryKeyQueryRow>(POSTGRES_CATALOG_SQL.primaryKeys, [schemas])\n    return result.rows\n  }\n\n  async queryForeignKeys(schemas: string[]): Promise<ForeignKeyQueryRow[]> {\n    const result = await this.pool.query<ForeignKeyQueryRow>(POSTGRES_CATALOG_SQL.foreignKeys, [schemas])\n    return result.rows\n  }\n}\n\nclass PostgresIntrospectionProvider implements SchemaIntrospectionProvider {\n  readonly backend = 'postgresql' as const\n\n  private readonly connectionString: string\n  private readonly database: string\n  private readonly schemas: string[]\n\n  constructor(options: PostgresIntrospectionProviderOptions) {\n    this.connectionString = options.connectionString\n    this.database = options.database ?? 'postgres'\n    this.schemas = normalizePostgresCatalogSchemas(options.schemas)\n  }\n\n  async inspect(options?: IntrospectionInspectOptions): Promise<IntrospectionSnapshot> {\n    const schemas = options?.schemas && options.schemas.length > 0\n      ? normalizePostgresCatalogSchemas(options.schemas)\n      : this.schemas\n    const PoolConstructor = await loadPgPoolConstructor()\n    const pool = new PoolConstructor({\n      connectionString: this.connectionString,\n    })\n    const catalogClient = new PgCatalogClient(pool)\n\n    try {\n      const [columnRows, enumMap, primaryKeyRows, foreignKeyRows] = await Promise.all([\n        catalogClient.queryColumns(schemas),\n        catalogClient.queryEnums(),\n        catalogClient.queryPrimaryKeys(schemas),\n        catalogClient.queryForeignKeys(schemas),\n      ])\n\n      const assembler = new PostgresCatalogSnapshotAssembler()\n      assembler.addColumnRows(columnRows, enumMap)\n      assembler.addPrimaryKeyRows(primaryKeyRows)\n      assembler.addForeignKeyRows(foreignKeyRows)\n      assembler.addManyToManyRows(foreignKeyRows)\n\n      return {\n        backend: 'postgresql',\n        database: this.database,\n        generatedAt: new Date().toISOString(),\n        schemas: assembler.toSchemas(),\n      }\n    } finally {\n      await pool.end()\n    }\n  }\n}\n\n/**\n * Creates a PostgreSQL-backed schema introspection provider.\n */\nexport function createPostgresIntrospectionProvider(\n  options: PostgresIntrospectionProviderOptions,\n): SchemaIntrospectionProvider {\n  return new PostgresIntrospectionProvider(options)\n}\n","import type { GeneratorProviderConfig, GeneratorSchemaSelection } from './types.ts'\n\nexport const DEFAULT_POSTGRES_SCHEMAS = ['public'] as const\n\nfunction collectSchemaNames(input: GeneratorSchemaSelection | undefined): string[] {\n  if (!input) {\n    return []\n  }\n\n  const values = typeof input === 'string' ? [input] : input\n  return values.flatMap(value => String(value).split(','))\n}\n\n/**\n * Normalizes schema selection from config or env-backed strings into a stable,\n * deduplicated list. Empty selections fall back to PostgreSQL's public schema.\n */\nexport function normalizeSchemaSelection(\n  input: GeneratorSchemaSelection | undefined,\n): string[] {\n  const schemas: string[] = []\n  const seen = new Set<string>()\n\n  for (const value of collectSchemaNames(input)) {\n    const schema = value.trim()\n    if (!schema || seen.has(schema)) {\n      continue\n    }\n    seen.add(schema)\n    schemas.push(schema)\n  }\n\n  return schemas.length > 0 ? schemas : [...DEFAULT_POSTGRES_SCHEMAS]\n}\n\n/**\n * Resolves the effective schema list for provider-backed generator runs.\n */\nexport function resolveProviderSchemas(providerConfig: GeneratorProviderConfig): string[] {\n  if (providerConfig.kind === 'postgres') {\n    return normalizeSchemaSelection(providerConfig.schemas)\n  }\n\n  return [...DEFAULT_POSTGRES_SCHEMAS]\n}\n","import type { IntrospectionSchema, IntrospectionSnapshot } from '../schema/types.ts'\nimport type {\n  GeneratorTableSelection,\n  NormalizedGeneratorFilterConfig,\n} from './types.ts'\n\nfunction normalizeTableSelector(value: string): string | undefined {\n  const trimmed = value.trim()\n  return trimmed.length > 0 ? trimmed : undefined\n}\n\nexport function normalizeTableSelection(\n  value: GeneratorTableSelection | undefined,\n): string[] {\n  if (typeof value === 'string') {\n    return Array.from(\n      new Set(\n        value\n          .split(',')\n          .map(normalizeTableSelector)\n          .filter((entry): entry is string => Boolean(entry)),\n      ),\n    )\n  }\n\n  if (Array.isArray(value)) {\n    return Array.from(\n      new Set(\n        value\n          .map(entry => typeof entry === 'string' ? normalizeTableSelector(entry) : undefined)\n          .filter((entry): entry is string => Boolean(entry)),\n      ),\n    )\n  }\n\n  return []\n}\n\nfunction matchesTableSelector(\n  schemaName: string,\n  tableName: string,\n  selector: string,\n): boolean {\n  const separatorIndex = selector.indexOf('.')\n  if (separatorIndex < 0) {\n    return tableName === selector\n  }\n\n  const selectorSchema = selector.slice(0, separatorIndex).trim()\n  const selectorTable = selector.slice(separatorIndex + 1).trim()\n  return selectorSchema === schemaName && selectorTable === tableName\n}\n\nfunction shouldKeepTable(\n  schemaName: string,\n  tableName: string,\n  filter: NormalizedGeneratorFilterConfig,\n): boolean {\n  const included = filter.includeTables.length === 0\n    || filter.includeTables.some(selector => matchesTableSelector(schemaName, tableName, selector))\n  if (!included) {\n    return false\n  }\n\n  return !filter.excludeTables.some(selector => matchesTableSelector(schemaName, tableName, selector))\n}\n\nfunction hasTableFilters(filter: NormalizedGeneratorFilterConfig): boolean {\n  return filter.includeTables.length > 0 || filter.excludeTables.length > 0\n}\n\nexport function filterIntrospectionSnapshot(\n  snapshot: IntrospectionSnapshot,\n  filter: NormalizedGeneratorFilterConfig,\n): IntrospectionSnapshot {\n  if (!hasTableFilters(filter)) {\n    return snapshot\n  }\n\n  const schemas: Record<string, IntrospectionSchema> = {}\n\n  for (const [schemaName, schema] of Object.entries(snapshot.schemas)) {\n    const tables = Object.fromEntries(\n      Object.entries(schema.tables).filter(([tableName]) => shouldKeepTable(schemaName, tableName, filter)),\n    )\n\n    if (Object.keys(tables).length === 0) {\n      continue\n    }\n\n    schemas[schemaName] = {\n      ...schema,\n      tables,\n    }\n  }\n\n  if (Object.keys(schemas).length === 0) {\n    const includeLabel = filter.includeTables.length > 0\n      ? ` includeTables=${filter.includeTables.join(', ')}`\n      : ''\n    const excludeLabel = filter.excludeTables.length > 0\n      ? ` excludeTables=${filter.excludeTables.join(', ')}`\n      : ''\n    throw new Error(\n      `Generator table filters matched no tables after schema selection.${includeLabel}${excludeLabel}`,\n    )\n  }\n\n  return {\n    ...snapshot,\n    schemas,\n  }\n}\n","import { existsSync, readFileSync } from 'fs'\nimport { resolve } from 'path'\nimport { pathToFileURL } from 'url'\nimport type {\n  AthenaGeneratorConfig,\n  GeneratorFilterConfig,\n  GeneratorExperimentalFlags,\n  GeneratorFeatureFlags,\n  GeneratorInternalConfig,\n  GeneratorNamingConfig,\n  GeneratorOutputConfig,\n  GeneratorOutputFormat,\n  GeneratorOutputPreset,\n  GeneratorOutputTargets,\n  GeneratorProviderConfig,\n  GeneratorProviderInputConfig,\n  LoadGeneratorConfigOptions,\n  LoadedGeneratorConfig,\n  NormalizedGeneratorOutputConfig,\n  NormalizedAthenaGeneratorConfig,\n} from './types.ts'\nimport { parseBooleanFlag } from '../auxiliaries.ts'\nimport { normalizeSchemaSelection } from './schema-selection.ts'\nimport { normalizeTableSelection } from './table-selection.ts'\nimport type { BackendType } from '../gateway/types.ts'\n\nconst POSTGRES_PROTOCOLS = new Set(['postgres:', 'postgresql:'])\n\nconst DEFAULT_CONFIG_CANDIDATES = [\n  'athena.config.ts',\n  'athena.config.js',\n  'athena-js.config.ts',\n  'athena-js.config.js',\n  '.athena.config.ts',\n  '.athena.config.js',\n]\n\nconst LEGACY_DEFAULT_TARGETS: GeneratorOutputTargets = {\n  model: 'athena/models/{schema_kebab}/{model_kebab}.ts',\n  schema: 'athena/schemas/{schema_kebab}.ts',\n  database: 'athena/relations.ts',\n  registry: 'athena/config.ts',\n}\n\nconst ATHENA_DIRECT_TARGETS: GeneratorOutputTargets = {\n  model: 'athena/models/{schema_kebab}/{model_kebab}.ts',\n  schema: 'athena/schemas/{schema_kebab}.ts',\n  database: 'athena/relations.ts',\n  registry: 'athena/registry.generated.ts',\n}\n\nconst DEFAULT_OUTPUT_FORMAT: GeneratorOutputFormat = 'table-builder'\nconst DEFAULT_OUTPUT_PRESET: GeneratorOutputPreset = 'athena-direct'\n\nconst DEFAULT_NAMING: GeneratorNamingConfig = {\n  modelType: 'pascal',\n  modelConst: 'camel',\n  schemaConst: 'camel',\n  databaseConst: 'camel',\n  registryConst: 'camel',\n}\n\nconst DEFAULT_FEATURES: GeneratorFeatureFlags = {\n  emitRelations: true,\n  emitRegistry: true,\n}\n\nconst DEFAULT_EXPERIMENTAL_FLAGS: GeneratorExperimentalFlags = {\n  postgresGatewayIntrospection: false,\n  scyllaProviderContracts: true,\n}\n\nconst DEFAULT_INTERNAL_CONFIG: GeneratorInternalConfig = {\n  schemaVersion: 1,\n}\n\nconst DEFAULT_FILTER_CONFIG = {\n  includeTables: [],\n  excludeTables: [],\n} as const\n\nconst PROJECT_ENV_FILENAMES = ['.env', '.env.local'] as const\n\nconst DIRECT_CONNECTION_STRING_ENV_KEYS = [\n  'ATHENA_GENERATOR_PG_URL',\n  'DATABASE_URL',\n  'PG_URL',\n  'POSTGRES_URL',\n  'POSTGRESQL_URL',\n] as const\n\nconst POSTGRES_DATABASE_ENV_KEYS = ['ATHENA_GENERATOR_DB', 'ATHENA_DATABASE', 'PGDATABASE'] as const\n\nconst POSTGRES_PASSWORD_ENV_KEYS = ['ATHENA_GENERATOR_PG_PASSWORD', 'PGPASSWORD'] as const\n\nconst GATEWAY_URL_ENV_KEYS = ['ATHENA_URL', 'ATHENA_GATEWAY_URL', 'ATHENA_GENERATOR_URL'] as const\n\nconst GATEWAY_API_KEY_ENV_KEYS = [\n  'ATHENA_API_KEY',\n  'ATHENA_GATEWAY_API_KEY',\n  'ATHENA_GENERATOR_API_KEY',\n] as const\n\nconst GENERATOR_SCHEMA_ENV_KEYS = ['ATHENA_GENERATOR_SCHEMAS'] as const\nconst OUTPUT_FORMAT_ENV_KEYS = ['ATHENA_GENERATOR_OUTPUT_FORMAT'] as const\nconst OUTPUT_PRESET_ENV_KEYS = ['ATHENA_GENERATOR_OUTPUT_PRESET'] as const\nconst MODEL_TARGET_ENV_KEYS = ['ATHENA_GENERATOR_MODEL_TARGET'] as const\nconst SCHEMA_TARGET_ENV_KEYS = ['ATHENA_GENERATOR_SCHEMA_TARGET'] as const\nconst DATABASE_TARGET_ENV_KEYS = ['ATHENA_GENERATOR_DATABASE_TARGET'] as const\nconst REGISTRY_TARGET_ENV_KEYS = ['ATHENA_GENERATOR_REGISTRY_TARGET'] as const\nconst TABLES_ENV_KEYS = ['ATHENA_GENERATOR_TABLES'] as const\nconst EXCLUDE_TABLES_ENV_KEYS = ['ATHENA_GENERATOR_EXCLUDE_TABLES'] as const\nconst PLACEHOLDER_MAP_ENV_KEYS = ['ATHENA_GENERATOR_PLACEHOLDER_MAP'] as const\nconst MODEL_TYPE_ENV_KEYS = ['ATHENA_GENERATOR_MODEL_TYPE', 'ATHENA_GENERATOR_MODEL_STYLE'] as const\nconst MODEL_CONST_ENV_KEYS = ['ATHENA_GENERATOR_MODEL_CONST'] as const\nconst SCHEMA_CONST_ENV_KEYS = ['ATHENA_GENERATOR_SCHEMA_CONST'] as const\nconst DATABASE_CONST_ENV_KEYS = ['ATHENA_GENERATOR_DATABASE_CONST'] as const\nconst REGISTRY_CONST_ENV_KEYS = ['ATHENA_GENERATOR_REGISTRY_CONST'] as const\nconst EMIT_RELATIONS_ENV_KEYS = ['ATHENA_GENERATOR_EMIT_RELATIONS'] as const\nconst EMIT_REGISTRY_ENV_KEYS = ['ATHENA_GENERATOR_EMIT_REGISTRY'] as const\nconst GATEWAY_BACKEND_ENV_KEYS = ['ATHENA_GENERATOR_BACKEND'] as const\nconst GATEWAY_EXPERIMENTAL_ENV_KEYS = ['ATHENA_GENERATOR_GATEWAY_EXPERIMENTAL'] as const\nconst SCYLLA_PROVIDER_CONTRACTS_ENV_KEYS = ['ATHENA_GENERATOR_SCYLLA_PROVIDER_CONTRACTS'] as const\nconst ENV_ONLY_CONFIG_PATH = '[environment defaults]'\n\nconst NAMING_STYLE_VALUES = ['preserve', 'camel', 'pascal', 'snake', 'kebab'] as const\nconst OUTPUT_FORMAT_VALUES = ['define-model', 'table-builder'] as const\nconst OUTPUT_PRESET_VALUES = ['legacy', 'athena-direct'] as const\nconst BACKEND_TYPE_VALUES = ['athena', 'postgrest', 'postgresql', 'scylladb'] as const\n\nconst OUTPUT_PRESET_TARGETS: Record<GeneratorOutputPreset, GeneratorOutputTargets> = {\n  legacy: LEGACY_DEFAULT_TARGETS,\n  'athena-direct': ATHENA_DIRECT_TARGETS,\n}\n\nfunction normalizeRawEnvValue(rawValue: string): string {\n  if (rawValue.startsWith('\"') && rawValue.endsWith('\"') && rawValue.length >= 2) {\n    const inner = rawValue.slice(1, -1)\n    return inner\n      .replace(/\\\\n/g, '\\n')\n      .replace(/\\\\r/g, '\\r')\n      .replace(/\\\\t/g, '\\t')\n      .replace(/\\\\\"/g, '\"')\n      .replace(/\\\\\\\\/g, '\\\\')\n  }\n\n  if (rawValue.startsWith(\"'\") && rawValue.endsWith(\"'\") && rawValue.length >= 2) {\n    return rawValue.slice(1, -1)\n  }\n\n  const commentIndex = rawValue.search(/\\s+#/)\n  const withoutComment = commentIndex >= 0 ? rawValue.slice(0, commentIndex) : rawValue\n  return withoutComment.trim()\n}\n\nfunction parseEnvLine(line: string): [key: string, value: string] | undefined {\n  const trimmed = line.trim()\n  if (!trimmed || trimmed.startsWith('#')) {\n    return undefined\n  }\n\n  const match = trimmed.match(/^(?:export\\s+)?([A-Za-z_][A-Za-z0-9_]*)\\s*=\\s*(.*)$/)\n  if (!match) {\n    return undefined\n  }\n\n  const [, key, rawValue] = match\n  return [key, normalizeRawEnvValue(rawValue.trim())]\n}\n\nfunction readProjectEnvEntries(cwd: string): Map<string, string> {\n  const nodeEnv = process.env.NODE_ENV?.trim()\n  const filenames = [\n    ...PROJECT_ENV_FILENAMES,\n    ...(nodeEnv ? [`.env.${nodeEnv}`, `.env.${nodeEnv}.local`] : []),\n  ]\n\n  const entries = new Map<string, string>()\n\n  for (const filename of filenames) {\n    const absolutePath = resolve(cwd, filename)\n    if (!existsSync(absolutePath)) {\n      continue\n    }\n\n    const content = readFileSync(absolutePath, 'utf8')\n    const lines = content.split(/\\r?\\n/g)\n    for (const line of lines) {\n      const parsed = parseEnvLine(line)\n      if (!parsed) {\n        continue\n      }\n      const [key, value] = parsed\n      entries.set(key, value)\n    }\n  }\n\n  return entries\n}\n\nfunction applyProjectEnv(cwd: string): () => void {\n  const envEntries = readProjectEnvEntries(cwd)\n  if (envEntries.size === 0) {\n    return () => {}\n  }\n\n  const initialKeys = new Set<string>(\n    Object.keys(process.env).filter(key => process.env[key] !== undefined),\n  )\n  const staged = new Map<string, string>()\n\n  for (const [key, value] of envEntries.entries()) {\n    if (initialKeys.has(key)) {\n      continue\n    }\n    staged.set(key, value)\n  }\n\n  for (const [key, value] of staged.entries()) {\n    process.env[key] = value\n  }\n\n  return () => {\n    for (const key of staged.keys()) {\n      delete process.env[key]\n    }\n  }\n}\n\nfunction readEnvStringValue(key: string): string | undefined {\n  const value = process.env[key]\n  if (typeof value !== 'string') {\n    return undefined\n  }\n\n  const trimmed = value.trim()\n  return trimmed.length > 0 ? trimmed : undefined\n}\n\nfunction resolveFallbackValue(\n  fallbackKeys: readonly string[],\n): string | undefined {\n  for (const key of fallbackKeys) {\n    const value = readEnvStringValue(key)\n    if (value) {\n      return value\n    }\n  }\n  return undefined\n}\n\nfunction normalizeOneOfValue<const T extends string>(\n  rawValue: string | undefined,\n  allowedValues: readonly T[],\n  envKeys: readonly string[],\n): T | undefined {\n  if (!rawValue) {\n    return undefined\n  }\n  if (allowedValues.includes(rawValue as T)) {\n    return rawValue as T\n  }\n  throw new Error(\n    `Generator config env vars ${envKeys.join(', ')} must resolve to one of: ${allowedValues.join(', ')}. Received: ${rawValue}.`,\n  )\n}\n\nfunction resolveOptionalOneOf<const T extends string>(\n  envKeys: readonly string[],\n  allowedValues: readonly T[],\n): T | undefined {\n  return normalizeOneOfValue(resolveFallbackValue(envKeys), allowedValues, envKeys)\n}\n\nfunction resolveOptionalBoolean(envKeys: readonly string[]): boolean | undefined {\n  const rawValue = resolveFallbackValue(envKeys)\n  return rawValue === undefined ? undefined : parseBooleanFlag(rawValue, false)\n}\n\nfunction resolveOptionalJson<T>(envKeys: readonly string[]): T | undefined {\n  const rawValue = resolveFallbackValue(envKeys)\n  if (rawValue === undefined) {\n    return undefined\n  }\n  try {\n    return JSON.parse(rawValue) as T\n  } catch (error) {\n    const message = error instanceof Error ? error.message : String(error)\n    throw new Error(\n      `Generator config env vars ${envKeys.join(', ')} must contain valid JSON. ${message}`,\n    )\n  }\n}\n\nfunction deriveDatabaseNameFromConnectionString(connectionString: string): string | undefined {\n  try {\n    const parsedUrl = new URL(connectionString)\n    if (!POSTGRES_PROTOCOLS.has(parsedUrl.protocol)) {\n      return undefined\n    }\n    const pathname = parsedUrl.pathname.replace(/^\\/+/, '').trim()\n    return pathname.length > 0 ? decodeURIComponent(pathname) : undefined\n  } catch {\n    return undefined\n  }\n}\n\nfunction normalizeOptionalString(\n  value: unknown,\n  fallbackKeys: readonly string[],\n): string | undefined {\n  if (typeof value === 'string') {\n    const trimmed = value.trim()\n    if (trimmed.length > 0) {\n      return trimmed\n    }\n  }\n\n  return resolveFallbackValue(fallbackKeys)\n}\n\nfunction normalizeRequiredString(\n  value: unknown,\n  fieldLabel: string,\n  fallbackKeys: readonly string[],\n): string {\n  const resolved = normalizeOptionalString(value, fallbackKeys)\n  if (resolved) {\n    return resolved\n  }\n\n  throw new Error(\n    `Generator config is missing ${fieldLabel}. Set ${fieldLabel} directly or provide one of: ${fallbackKeys.join(', ')}.`,\n  )\n}\n\nfunction applyPostgresPasswordFallback(connectionString: string): string {\n  let parsedUrl: URL\n  try {\n    parsedUrl = new URL(connectionString)\n  } catch {\n    return connectionString\n  }\n\n  if (!POSTGRES_PROTOCOLS.has(parsedUrl.protocol)) {\n    return connectionString\n  }\n\n  if (!parsedUrl.username || parsedUrl.password) {\n    return connectionString\n  }\n\n  const fallbackPassword = resolveFallbackValue(POSTGRES_PASSWORD_ENV_KEYS)\n  if (!fallbackPassword) {\n    return connectionString\n  }\n\n  parsedUrl.password = fallbackPassword\n  return parsedUrl.toString()\n}\n\nfunction normalizeBooleanFlag(rawValue: unknown, fallback: boolean): boolean {\n  if (typeof rawValue === 'boolean') {\n    return rawValue\n  }\n  if (typeof rawValue === 'string') {\n    return parseBooleanFlag(rawValue, fallback)\n  }\n  return fallback\n}\n\nfunction normalizeFeatureFlags(\n  input: Partial<GeneratorFeatureFlags> | undefined,\n): GeneratorFeatureFlags {\n  return {\n    emitRelations: normalizeBooleanFlag(\n      input?.emitRelations,\n      DEFAULT_FEATURES.emitRelations,\n    ),\n    emitRegistry: normalizeBooleanFlag(\n      input?.emitRegistry,\n      DEFAULT_FEATURES.emitRegistry,\n    ),\n  }\n}\n\nfunction normalizeExperimentalFlags(\n  input: Partial<GeneratorExperimentalFlags> | undefined,\n): GeneratorExperimentalFlags {\n  return {\n    postgresGatewayIntrospection: normalizeBooleanFlag(\n      input?.postgresGatewayIntrospection,\n      DEFAULT_EXPERIMENTAL_FLAGS.postgresGatewayIntrospection,\n    ),\n    scyllaProviderContracts: normalizeBooleanFlag(\n      input?.scyllaProviderContracts,\n      DEFAULT_EXPERIMENTAL_FLAGS.scyllaProviderContracts,\n    ),\n  }\n}\n\nfunction normalizeFilterConfig(\n  input: GeneratorFilterConfig | undefined,\n) {\n  return {\n    includeTables: normalizeTableSelection(input?.includeTables),\n    excludeTables: normalizeTableSelection(input?.excludeTables),\n  }\n}\n\nfunction normalizeOutputConfig(output: GeneratorOutputConfig | undefined): NormalizedGeneratorOutputConfig {\n  const preset = output?.preset ?? DEFAULT_OUTPUT_PRESET\n  return {\n    format: output?.format ?? DEFAULT_OUTPUT_FORMAT,\n    preset,\n    targets: {\n      ...OUTPUT_PRESET_TARGETS[preset],\n      ...(output?.targets ?? {}),\n    },\n    placeholderMap: {\n      ...(output?.placeholderMap ?? {}),\n    },\n  }\n}\n\nfunction normalizeProviderConfig(provider: GeneratorProviderInputConfig): GeneratorProviderConfig {\n  if (provider.kind === 'postgres' && provider.mode === 'direct') {\n    const connectionString = normalizeRequiredString(\n      provider.connectionString,\n      'provider.connectionString',\n      DIRECT_CONNECTION_STRING_ENV_KEYS,\n    )\n    const database = normalizeOptionalString(provider.database, POSTGRES_DATABASE_ENV_KEYS)\n      ?? deriveDatabaseNameFromConnectionString(connectionString)\n\n    return {\n      ...provider,\n      connectionString: applyPostgresPasswordFallback(connectionString),\n      database,\n      schemas: normalizeSchemaSelection(provider.schemas),\n    }\n  }\n\n  if (provider.kind === 'postgres' && provider.mode === 'gateway') {\n    const gatewayUrl = normalizeRequiredString(\n      provider.gatewayUrl,\n      'provider.gatewayUrl',\n      GATEWAY_URL_ENV_KEYS,\n    )\n    const apiKey = normalizeRequiredString(\n      provider.apiKey,\n      'provider.apiKey',\n      GATEWAY_API_KEY_ENV_KEYS,\n    )\n    const database = normalizeOptionalString(provider.database, POSTGRES_DATABASE_ENV_KEYS) ?? 'postgres'\n\n    return {\n      ...provider,\n      gatewayUrl,\n      apiKey,\n      database,\n      schemas: normalizeSchemaSelection(provider.schemas),\n    }\n  }\n\n  if (provider.kind === 'scylla' && provider.mode === 'direct') {\n    if (!provider.contactPoints?.length) {\n      throw new Error(\n        'Generator config is missing provider.contactPoints for scylla direct mode.',\n      )\n    }\n    const keyspace = normalizeOptionalString(provider.keyspace, [])\n    if (!keyspace) {\n      throw new Error(\n        'Generator config is missing provider.keyspace for scylla direct mode.',\n      )\n    }\n\n    return {\n      kind: 'scylla',\n      mode: 'direct',\n      contactPoints: provider.contactPoints.slice(),\n      keyspace,\n      datacenter: normalizeOptionalString(provider.datacenter, []),\n    }\n  }\n\n  return provider\n}\n\nfunction isAthenaGeneratorConfig(value: unknown): value is AthenaGeneratorConfig {\n  if (!value || typeof value !== 'object') {\n    return false\n  }\n  const record = value as Record<string, unknown>\n  return Boolean(record.provider && typeof record.provider === 'object') &&\n    (record.output === undefined || typeof record.output === 'object')\n}\n\nexport function normalizeGeneratorConfig(input: AthenaGeneratorConfig): NormalizedAthenaGeneratorConfig {\n  return {\n    provider: normalizeProviderConfig(input.provider),\n    output: normalizeOutputConfig(input.output),\n    naming: {\n      ...DEFAULT_NAMING,\n      ...(input.naming ?? {}),\n    },\n    filter: {\n      ...DEFAULT_FILTER_CONFIG,\n      ...normalizeFilterConfig(input.filter),\n    },\n    features: normalizeFeatureFlags(input.features),\n    experimental: normalizeExperimentalFlags(input.experimental),\n    internal: {\n      ...DEFAULT_INTERNAL_CONFIG,\n    },\n  }\n}\n\n/**\n * Typed identity helper for authoring generator configs.\n */\nexport function defineGeneratorConfig<TConfig extends AthenaGeneratorConfig>(\n  config: TConfig,\n): TConfig {\n  return config\n}\n\n/**\n * Finds a supported generator config filename in the provided directory.\n */\nexport function findGeneratorConfigPath(cwd: string = process.cwd()): string | undefined {\n  for (const candidate of DEFAULT_CONFIG_CANDIDATES) {\n    const absolutePath = resolve(cwd, candidate)\n    if (existsSync(absolutePath)) {\n      return absolutePath\n    }\n  }\n  return undefined\n}\n\nfunction extractConfigExport(module: unknown): AthenaGeneratorConfig {\n  const visited = new Set<unknown>()\n  const queue: unknown[] = [module]\n\n  while (queue.length > 0) {\n    const current = queue.shift()\n    if (!current || typeof current !== 'object' || visited.has(current)) {\n      continue\n    }\n    visited.add(current)\n\n    const record = current as Record<string, unknown>\n    if (isAthenaGeneratorConfig(record)) {\n      return record\n    }\n\n    const defaultExport = record.default\n    if (defaultExport && typeof defaultExport === 'object') {\n      queue.push(defaultExport)\n    }\n\n    const namedConfigExport = record.config\n    if (namedConfigExport && typeof namedConfigExport === 'object') {\n      queue.push(namedConfigExport)\n    }\n\n    const moduleExports = record['module.exports']\n    if (moduleExports && typeof moduleExports === 'object') {\n      queue.push(moduleExports)\n    }\n\n    for (const value of Object.values(record)) {\n      if (value && typeof value === 'object') {\n        queue.push(value)\n      }\n    }\n  }\n\n  throw new Error(\n    'Generator config file must export a config object as default export or `config`.',\n  )\n}\n\nfunction importConfigModule(moduleSpecifier: string): Promise<unknown> {\n  // Keep this as an indirect import so bundlers do not try to statically resolve\n  // runtime file-system config paths when athena-js is consumed in Next.js.\n  const runtimeImport = new Function(\n    'moduleSpecifier',\n    'return import(moduleSpecifier)',\n  ) as (moduleSpecifier: string) => Promise<unknown>\n  return runtimeImport(moduleSpecifier)\n}\n\nfunction buildEnvironmentOutputConfig(): GeneratorOutputConfig | undefined {\n  const format = resolveOptionalOneOf(OUTPUT_FORMAT_ENV_KEYS, OUTPUT_FORMAT_VALUES)\n  const preset = resolveOptionalOneOf(OUTPUT_PRESET_ENV_KEYS, OUTPUT_PRESET_VALUES)\n  const modelTarget = resolveFallbackValue(MODEL_TARGET_ENV_KEYS)\n  const schemaTarget = resolveFallbackValue(SCHEMA_TARGET_ENV_KEYS)\n  const databaseTarget = resolveFallbackValue(DATABASE_TARGET_ENV_KEYS)\n  const registryTarget = resolveFallbackValue(REGISTRY_TARGET_ENV_KEYS)\n  const placeholderMap = resolveOptionalJson<Record<string, string>>(PLACEHOLDER_MAP_ENV_KEYS)\n\n  if (\n    format === undefined &&\n    preset === undefined &&\n    modelTarget === undefined &&\n    schemaTarget === undefined &&\n    databaseTarget === undefined &&\n    registryTarget === undefined &&\n    placeholderMap === undefined\n  ) {\n    return undefined\n  }\n\n  return {\n    format,\n    preset,\n    targets: {\n      ...(modelTarget ? { model: modelTarget } : {}),\n      ...(schemaTarget ? { schema: schemaTarget } : {}),\n      ...(databaseTarget ? { database: databaseTarget } : {}),\n      ...(registryTarget ? { registry: registryTarget } : {}),\n    },\n    placeholderMap,\n  }\n}\n\nfunction buildEnvironmentFilterConfig(): GeneratorFilterConfig | undefined {\n  const includeTables = resolveFallbackValue(TABLES_ENV_KEYS)\n  const excludeTables = resolveFallbackValue(EXCLUDE_TABLES_ENV_KEYS)\n\n  if (includeTables === undefined && excludeTables === undefined) {\n    return undefined\n  }\n\n  return {\n    ...(includeTables !== undefined ? { includeTables } : {}),\n    ...(excludeTables !== undefined ? { excludeTables } : {}),\n  }\n}\n\nfunction buildEnvironmentNamingConfig(): Partial<GeneratorNamingConfig> | undefined {\n  const modelType = resolveOptionalOneOf(MODEL_TYPE_ENV_KEYS, NAMING_STYLE_VALUES)\n  const modelConst = resolveOptionalOneOf(MODEL_CONST_ENV_KEYS, NAMING_STYLE_VALUES)\n  const schemaConst = resolveOptionalOneOf(SCHEMA_CONST_ENV_KEYS, NAMING_STYLE_VALUES)\n  const databaseConst = resolveOptionalOneOf(DATABASE_CONST_ENV_KEYS, NAMING_STYLE_VALUES)\n  const registryConst = resolveOptionalOneOf(REGISTRY_CONST_ENV_KEYS, NAMING_STYLE_VALUES)\n\n  if (\n    modelType === undefined &&\n    modelConst === undefined &&\n    schemaConst === undefined &&\n    databaseConst === undefined &&\n    registryConst === undefined\n  ) {\n    return undefined\n  }\n\n  return {\n    ...(modelType ? { modelType } : {}),\n    ...(modelConst ? { modelConst } : {}),\n    ...(schemaConst ? { schemaConst } : {}),\n    ...(databaseConst ? { databaseConst } : {}),\n    ...(registryConst ? { registryConst } : {}),\n  }\n}\n\nfunction buildEnvironmentFeatureFlags(): Partial<GeneratorFeatureFlags> | undefined {\n  const emitRelations = resolveOptionalBoolean(EMIT_RELATIONS_ENV_KEYS)\n  const emitRegistry = resolveOptionalBoolean(EMIT_REGISTRY_ENV_KEYS)\n\n  if (emitRelations === undefined && emitRegistry === undefined) {\n    return undefined\n  }\n\n  return {\n    ...(emitRelations !== undefined ? { emitRelations } : {}),\n    ...(emitRegistry !== undefined ? { emitRegistry } : {}),\n  }\n}\n\nfunction buildEnvironmentExperimentalFlags(): Partial<GeneratorExperimentalFlags> | undefined {\n  const postgresGatewayIntrospection = resolveOptionalBoolean(GATEWAY_EXPERIMENTAL_ENV_KEYS)\n  const scyllaProviderContracts = resolveOptionalBoolean(SCYLLA_PROVIDER_CONTRACTS_ENV_KEYS)\n\n  if (postgresGatewayIntrospection === undefined && scyllaProviderContracts === undefined) {\n    return undefined\n  }\n\n  return {\n    ...(postgresGatewayIntrospection !== undefined ? { postgresGatewayIntrospection } : {}),\n    ...(scyllaProviderContracts !== undefined ? { scyllaProviderContracts } : {}),\n  }\n}\n\nfunction buildEnvironmentProviderConfig(): GeneratorProviderInputConfig | undefined {\n  const directConnectionString = resolveFallbackValue(DIRECT_CONNECTION_STRING_ENV_KEYS)\n  if (directConnectionString) {\n    return {\n      kind: 'postgres',\n      mode: 'direct',\n      connectionString: directConnectionString,\n      database: normalizeOptionalString(undefined, POSTGRES_DATABASE_ENV_KEYS),\n      schemas: normalizeSchemaSelection(resolveFallbackValue(GENERATOR_SCHEMA_ENV_KEYS)),\n    }\n  }\n\n  const gatewayUrl = resolveFallbackValue(GATEWAY_URL_ENV_KEYS)\n  const apiKey = resolveFallbackValue(GATEWAY_API_KEY_ENV_KEYS)\n  if (gatewayUrl && apiKey) {\n    const backend = resolveOptionalOneOf(GATEWAY_BACKEND_ENV_KEYS, BACKEND_TYPE_VALUES) as BackendType | undefined\n    return {\n      kind: 'postgres',\n      mode: 'gateway',\n      gatewayUrl,\n      apiKey,\n      database: normalizeOptionalString(undefined, POSTGRES_DATABASE_ENV_KEYS),\n      schemas: normalizeSchemaSelection(resolveFallbackValue(GENERATOR_SCHEMA_ENV_KEYS)),\n      backend,\n    }\n  }\n\n  return undefined\n}\n\nfunction createEnvironmentGeneratorConfig(): AthenaGeneratorConfig | undefined {\n  const provider = buildEnvironmentProviderConfig()\n  if (!provider) {\n    return undefined\n  }\n\n  return {\n    provider,\n    output: buildEnvironmentOutputConfig(),\n    naming: buildEnvironmentNamingConfig(),\n    filter: buildEnvironmentFilterConfig(),\n    features: buildEnvironmentFeatureFlags(),\n    experimental: buildEnvironmentExperimentalFlags(),\n  }\n}\n\n/**\n * Loads and normalizes `athena.config.*` from disk.\n */\nexport async function loadGeneratorConfig(\n  options: LoadGeneratorConfigOptions = {},\n): Promise<LoadedGeneratorConfig> {\n  const cwd = options.cwd ?? process.cwd()\n  const restoreProjectEnv = applyProjectEnv(cwd)\n  try {\n    const resolvedPath = options.configPath\n      ? resolve(cwd, options.configPath)\n      : findGeneratorConfigPath(cwd)\n\n    if (!resolvedPath) {\n      const environmentConfig = createEnvironmentGeneratorConfig()\n      if (environmentConfig) {\n        return {\n          configPath: ENV_ONLY_CONFIG_PATH,\n          config: normalizeGeneratorConfig(environmentConfig),\n        }\n      }\n      throw new Error(\n        `No generator config found in ${cwd}. Expected one of: ${DEFAULT_CONFIG_CANDIDATES.join(', ')}. To run without a config file, set DATABASE_URL (direct mode) or ATHENA_URL + ATHENA_API_KEY (gateway mode).`,\n      )\n    }\n\n    const moduleUrl = pathToFileURL(resolvedPath)\n    const module = await importConfigModule(`${moduleUrl.href}?cacheBust=${Date.now()}`)\n    const rawConfig = extractConfigExport(module)\n\n    return {\n      configPath: resolvedPath,\n      config: normalizeGeneratorConfig(rawConfig),\n    }\n  } finally {\n    restoreProjectEnv()\n  }\n}\n","import { parseBooleanFlag } from '../auxiliaries.ts'\n\ninterface GeneratorEnvBaseOptions<T> {\n  default?: T\n  optional?: boolean\n}\n\nexport type GeneratorEnvStringOptions = GeneratorEnvBaseOptions<string>\n\nexport type GeneratorEnvBooleanOptions = GeneratorEnvBaseOptions<boolean>\n\nexport interface GeneratorEnvListOptions extends GeneratorEnvBaseOptions<readonly string[]> {\n  separator?: string\n}\n\nexport type GeneratorEnvJsonOptions<T> = GeneratorEnvBaseOptions<T>\n\nexport type GeneratorEnvOneOfOptions<T extends string> = GeneratorEnvBaseOptions<T>\n\ntype GeneratorEnvHelper = {\n  (key: string, options?: GeneratorEnvStringOptions): string\n  (key: string, options: GeneratorEnvStringOptions & { optional: true }): string | undefined\n  boolean(key: string, options?: GeneratorEnvBooleanOptions): boolean\n  boolean(key: string, options: GeneratorEnvBooleanOptions & { optional: true }): boolean | undefined\n  list(key: string, options?: GeneratorEnvListOptions): string[]\n  list(key: string, options: GeneratorEnvListOptions & { optional: true }): string[] | undefined\n  json<T>(key: string, options?: GeneratorEnvJsonOptions<T>): T\n  json<T>(key: string, options: GeneratorEnvJsonOptions<T> & { optional: true }): T | undefined\n  oneOf<const T extends string>(\n    key: string,\n    allowedValues: readonly T[],\n    options?: GeneratorEnvOneOfOptions<T>,\n  ): T\n  oneOf<const T extends string>(\n    key: string,\n    allowedValues: readonly T[],\n    options: GeneratorEnvOneOfOptions<T> & { optional: true },\n  ): T | undefined\n}\n\nfunction readEnvStringValue(key: string): string | undefined {\n  if (typeof process === 'undefined' || !process.env) {\n    return undefined\n  }\n\n  const value = process.env[key]\n  if (typeof value !== 'string') {\n    return undefined\n  }\n\n  const trimmed = value.trim()\n  return trimmed.length > 0 ? trimmed : undefined\n}\n\nfunction throwMissingEnvVar(key: string): never {\n  throw new Error(\n    `Generator config env var ${key} is missing or empty. Set ${key} or provide a default value.`,\n  )\n}\n\nfunction resolveEnvValue<T>(\n  key: string,\n  options: GeneratorEnvBaseOptions<T> | undefined,\n  resolver: (rawValue: string) => T,\n): T | undefined {\n  const rawValue = readEnvStringValue(key)\n  if (rawValue === undefined) {\n    if (options?.default !== undefined) {\n      return options.default\n    }\n    if (options?.optional) {\n      return undefined\n    }\n    return throwMissingEnvVar(key)\n  }\n\n  return resolver(rawValue)\n}\n\nfunction resolveStringEnv(key: string, options?: GeneratorEnvStringOptions): string | undefined {\n  return resolveEnvValue(key, options, value => value)\n}\n\nfunction resolveBooleanEnv(key: string, options?: GeneratorEnvBooleanOptions): boolean | undefined {\n  return resolveEnvValue(key, options, value => parseBooleanFlag(value, false))\n}\n\nfunction resolveListEnv(key: string, options?: GeneratorEnvListOptions): string[] | undefined {\n  return resolveEnvValue(key, options, value => {\n    const separator = options?.separator ?? ','\n    return value\n      .split(separator)\n      .map(entry => entry.trim())\n      .filter((entry, index, entries) => entry.length > 0 && entries.indexOf(entry) === index)\n  })?.slice()\n}\n\nfunction resolveJsonEnv<T>(key: string, options?: GeneratorEnvJsonOptions<T>): T | undefined {\n  return resolveEnvValue(key, options, value => {\n    try {\n      return JSON.parse(value) as T\n    } catch (error) {\n      const message = error instanceof Error ? error.message : String(error)\n      throw new Error(`Generator config env var ${key} must contain valid JSON. ${message}`)\n    }\n  })\n}\n\nfunction resolveOneOfEnv<T extends string>(\n  key: string,\n  allowedValues: readonly T[],\n  options?: GeneratorEnvOneOfOptions<T>,\n): T | undefined {\n  return resolveEnvValue(key, options, value => {\n    if (allowedValues.includes(value as T)) {\n      return value as T\n    }\n\n    throw new Error(\n      `Generator config env var ${key} must be one of: ${allowedValues.join(', ')}. Received: ${value}.`,\n    )\n  })\n}\n\nfunction generatorEnvString(key: string, options?: GeneratorEnvStringOptions): string\nfunction generatorEnvString(\n  key: string,\n  options: GeneratorEnvStringOptions & { optional: true },\n): string | undefined\nfunction generatorEnvString(\n  key: string,\n  options?: GeneratorEnvStringOptions,\n): string | undefined {\n  return resolveStringEnv(key, options)\n}\n\nfunction generatorEnvBoolean(key: string, options?: GeneratorEnvBooleanOptions): boolean\nfunction generatorEnvBoolean(\n  key: string,\n  options: GeneratorEnvBooleanOptions & { optional: true },\n): boolean | undefined\nfunction generatorEnvBoolean(\n  key: string,\n  options?: GeneratorEnvBooleanOptions,\n): boolean | undefined {\n  return resolveBooleanEnv(key, options)\n}\n\nfunction generatorEnvList(key: string, options?: GeneratorEnvListOptions): string[]\nfunction generatorEnvList(\n  key: string,\n  options: GeneratorEnvListOptions & { optional: true },\n): string[] | undefined\nfunction generatorEnvList(\n  key: string,\n  options?: GeneratorEnvListOptions,\n): string[] | undefined {\n  return resolveListEnv(key, options)\n}\n\nfunction generatorEnvJson<T>(key: string, options?: GeneratorEnvJsonOptions<T>): T\nfunction generatorEnvJson<T>(\n  key: string,\n  options: GeneratorEnvJsonOptions<T> & { optional: true },\n): T | undefined\nfunction generatorEnvJson<T>(\n  key: string,\n  options?: GeneratorEnvJsonOptions<T>,\n): T | undefined {\n  return resolveJsonEnv(key, options)\n}\n\nfunction generatorEnvOneOf<const T extends string>(\n  key: string,\n  allowedValues: readonly T[],\n  options?: GeneratorEnvOneOfOptions<T>,\n): T\nfunction generatorEnvOneOf<const T extends string>(\n  key: string,\n  allowedValues: readonly T[],\n  options: GeneratorEnvOneOfOptions<T> & { optional: true },\n): T | undefined\nfunction generatorEnvOneOf<const T extends string>(\n  key: string,\n  allowedValues: readonly T[],\n  options?: GeneratorEnvOneOfOptions<T>,\n): T | undefined {\n  return resolveOneOfEnv(key, allowedValues, options)\n}\n\n/**\n * Typed env reader for generator configs. This keeps `athena.config.*` files\n * declarative while preserving exact field types for booleans, lists, unions,\n * and JSON-backed objects.\n */\nexport const generatorEnv = Object.assign(generatorEnvString, {\n  boolean: generatorEnvBoolean,\n  list: generatorEnvList,\n  json: generatorEnvJson,\n  oneOf: generatorEnvOneOf,\n}) as GeneratorEnvHelper\n","export function slugify(input: string): string {\n  return input\n    .toLowerCase()\n    .replace(/[^a-z0-9]+/g, '-')\n    .replace(/^-+|-+$/g, '')\n    .slice(0, 64)\n}\n","import type { NamingStyle } from './types.ts'\nimport { slugify } from '../utils/slugify.ts'\n\nconst IDENTIFIER_PATTERN = /^[A-Za-z_$][A-Za-z0-9_$]*$/\nconst RESERVED_IDENTIFIERS = new Set([\n  'break',\n  'case',\n  'catch',\n  'class',\n  'const',\n  'continue',\n  'debugger',\n  'default',\n  'delete',\n  'do',\n  'else',\n  'enum',\n  'export',\n  'extends',\n  'false',\n  'finally',\n  'for',\n  'function',\n  'if',\n  'import',\n  'in',\n  'instanceof',\n  'new',\n  'null',\n  'return',\n  'super',\n  'switch',\n  'this',\n  'throw',\n  'true',\n  'try',\n  'typeof',\n  'var',\n  'void',\n  'while',\n  'with',\n  'as',\n  'implements',\n  'interface',\n  'let',\n  'package',\n  'private',\n  'protected',\n  'public',\n  'static',\n  'yield',\n  'any',\n  'boolean',\n  'constructor',\n  'declare',\n  'get',\n  'module',\n  'require',\n  'number',\n  'set',\n  'string',\n  'symbol',\n  'type',\n  'from',\n  'of',\n])\n\nfunction splitWords(input: string): string[] {\n  return input\n    .trim()\n    .replace(/([a-z0-9])([A-Z])/g, '$1 $2')\n    .replace(/([A-Z]+)([A-Z][a-z0-9]+)/g, '$1 $2')\n    .replace(/[^A-Za-z0-9]+/g, ' ')\n    .split(' ')\n    .map(word => word.trim())\n    .filter(word => word.length > 0)\n}\n\nfunction capitalize(word: string): string {\n  return word.length > 0 ? `${word[0].toUpperCase()}${word.slice(1).toLowerCase()}` : word\n}\n\nfunction ensureValidIdentifier(candidate: string, fallback: string): string {\n  const normalized = candidate.length > 0 ? candidate : fallback\n  const prefixed = /^[0-9]/.test(normalized) ? `_${normalized}` : normalized\n  if (RESERVED_IDENTIFIERS.has(prefixed)) {\n    return `${prefixed}_value`\n  }\n  return prefixed\n}\n\nexport function applyNamingStyle(input: string, style: NamingStyle): string {\n  const words = splitWords(input)\n  if (words.length === 0) {\n    return ''\n  }\n\n  switch (style) {\n    case 'preserve':\n      return input\n    case 'camel': {\n      const [first, ...rest] = words\n      return `${first.toLowerCase()}${rest.map(capitalize).join('')}`\n    }\n    case 'pascal':\n      return words.map(capitalize).join('')\n    case 'snake':\n      return words.map(word => word.toLowerCase()).join('_')\n    case 'kebab':\n      return slugify(words.join('-'))\n    default:\n      return input\n  }\n}\n\nexport function toSafeIdentifier(input: string, style: NamingStyle, fallback = 'value'): string {\n  const transformed = applyNamingStyle(input, style)\n  const normalized = transformed\n    .replace(/[^A-Za-z0-9_$]+/g, '_')\n    .replace(/^_+|_+$/g, '')\n  const fallbackValue = splitWords(input).join('')\n  return ensureValidIdentifier(\n    normalized.length > 0 ? normalized : fallbackValue,\n    fallback,\n  )\n}\n\nexport function escapeTypePropertyName(propertyName: string): string {\n  if (IDENTIFIER_PATTERN.test(propertyName) && !RESERVED_IDENTIFIERS.has(propertyName)) {\n    return propertyName\n  }\n  return `'${propertyName.replace(/\\\\/g, '\\\\\\\\').replace(/'/g, \"\\\\'\")}'`\n}\n\nexport function escapeStringLiteral(value: string): string {\n  return `'${value.replace(/\\\\/g, '\\\\\\\\').replace(/'/g, \"\\\\'\")}'`\n}\n","import type { IntrospectionColumn } from '../schema/types.ts'\n\nconst NUMBER_TYPES = new Set([\n  'int2',\n  'int4',\n  'float4',\n  'float8',\n  'smallint',\n  'integer',\n  'real',\n  'double precision',\n])\n\nconst STRING_NUMERIC_TYPES = new Set([\n  'int8',\n  'bigint',\n  'serial8',\n  'bigserial',\n  'numeric',\n  'decimal',\n  'money',\n])\n\nconst TEXT_TYPES = new Set([\n  'char',\n  'bpchar',\n  'varchar',\n  'character varying',\n  'text',\n  'citext',\n  'name',\n  'uuid',\n  'date',\n  'time',\n  'timetz',\n  'timestamp',\n  'timestamptz',\n  'interval',\n  'inet',\n  'cidr',\n  'macaddr',\n  'macaddr8',\n  'point',\n  'line',\n  'lseg',\n  'box',\n  'path',\n  'polygon',\n  'circle',\n  'bit',\n  'varbit',\n  'xml',\n  'tsvector',\n  'tsquery',\n  'jsonpath',\n])\n\nfunction normalizeTypeLabel(column: IntrospectionColumn): string {\n  const preferred = (column.udtName || column.dataType).toLowerCase().trim()\n  if (column.arrayDimensions > 0 && preferred.startsWith('_')) {\n    return preferred.slice(1)\n  }\n  return preferred\n}\n\nfunction wrapArrayType(baseType: string, depth: number): string {\n  let wrapped = baseType\n  for (let index = 0; index < depth; index += 1) {\n    wrapped = `Array<${wrapped}>`\n  }\n  return wrapped\n}\n\nfunction resolveScalarType(column: IntrospectionColumn): string {\n  const label = normalizeTypeLabel(column)\n\n  if (NUMBER_TYPES.has(label)) {\n    return 'number'\n  }\n\n  if (STRING_NUMERIC_TYPES.has(label)) {\n    return 'string'\n  }\n\n  if (label === 'bool' || label === 'boolean') {\n    return 'boolean'\n  }\n\n  if (label === 'bytea') {\n    return 'Buffer'\n  }\n\n  if (label === 'json' || label === 'jsonb') {\n    return 'Record<string, unknown>'\n  }\n\n  if (TEXT_TYPES.has(label)) {\n    return 'string'\n  }\n\n  if (label.endsWith('range') || label.endsWith('multirange')) {\n    return 'string'\n  }\n\n  return 'unknown'\n}\n\nfunction resolveKindAwareType(column: IntrospectionColumn): string {\n  if (column.typeKind === 'enum') {\n    const values = column.enumValues ?? []\n    if (values.length === 0) {\n      return 'string'\n    }\n    return values.map(value => `'${value.replace(/\\\\/g, '\\\\\\\\').replace(/'/g, \"\\\\'\")}'`).join(' | ')\n  }\n\n  if (column.typeKind === 'composite') {\n    return 'Record<string, unknown>'\n  }\n\n  if (column.typeKind === 'domain' || column.typeKind === 'range' || column.typeKind === 'multirange') {\n    return 'string'\n  }\n\n  return resolveScalarType(column)\n}\n\nexport function resolvePostgresColumnType(column: IntrospectionColumn): string {\n  const baseType = resolveKindAwareType(column)\n  if (!column.arrayDimensions || column.arrayDimensions <= 0) {\n    return baseType\n  }\n  return wrapArrayType(baseType, column.arrayDimensions)\n}\n","import { applyNamingStyle } from './naming.ts'\nimport type { GeneratorArtifactKind, GeneratorOutputConfig } from './types.ts'\n\nexport interface PlaceholderContext {\n  provider: string\n  kind: GeneratorArtifactKind\n  database: string\n  schema: string\n  model: string\n}\n\nfunction createStyleTokens(prefix: string, value: string): Record<string, string> {\n  return {\n    [prefix]: value,\n    [`${prefix}_camel`]: applyNamingStyle(value, 'camel'),\n    [`${prefix}_pascal`]: applyNamingStyle(value, 'pascal'),\n    [`${prefix}_snake`]: applyNamingStyle(value, 'snake'),\n    [`${prefix}_kebab`]: applyNamingStyle(value, 'kebab'),\n  }\n}\n\nfunction renderTemplate(template: string, tokenMap: Record<string, string>): string {\n  return template.replace(/\\{([A-Za-z0-9_]+)\\}/g, (_match, token) => {\n    if (!(token in tokenMap)) {\n      throw new Error(`Unknown placeholder token \"${token}\" in template \"${template}\"`)\n    }\n    return tokenMap[token]\n  })\n}\n\nfunction resolvePlaceholderMap(\n  baseTokens: Record<string, string>,\n  outputConfig: GeneratorOutputConfig,\n): Record<string, string> {\n  const resolved: Record<string, string> = {\n    ...baseTokens,\n  }\n  const reservedTokenKeys = new Set(Object.keys(baseTokens))\n\n  const entries = Object.entries(outputConfig.placeholderMap ?? {})\n  for (let index = 0; index < entries.length; index += 1) {\n    const [key, value] = entries[index]\n    if (reservedTokenKeys.has(key)) {\n      continue\n    }\n\n    let current = value\n    for (let depth = 0; depth < 8; depth += 1) {\n      const next = renderTemplate(current, resolved)\n      if (next === current) {\n        break\n      }\n      current = next\n    }\n    resolved[key] = current\n  }\n\n  return resolved\n}\n\nexport function renderOutputPath(\n  template: string,\n  context: PlaceholderContext,\n  outputConfig: GeneratorOutputConfig,\n): string {\n  const baseTokens: Record<string, string> = {\n    provider: context.provider,\n    kind: context.kind,\n    ...createStyleTokens('database', context.database),\n    ...createStyleTokens('schema', context.schema),\n    ...createStyleTokens('model', context.model),\n  }\n\n  const tokens = resolvePlaceholderMap(baseTokens, outputConfig)\n  return renderTemplate(template, tokens)\n}\n","import { posix } from 'path'\nimport type {\n  GeneratedArtifact,\n  GeneratedArtifacts,\n  NormalizedAthenaGeneratorConfig,\n} from './types.ts'\nimport type {\n  IntrospectionRelation,\n  IntrospectionSnapshot,\n  IntrospectionTable,\n} from '../schema/types.ts'\nimport {\n  applyNamingStyle,\n  escapeStringLiteral,\n  escapeTypePropertyName,\n  toSafeIdentifier,\n} from './naming.ts'\nimport { renderOutputPath } from './placeholders.ts'\n\ntype OutputPathKind = 'model' | 'schema' | 'database' | 'registry'\n\ntype OutputPathTokens = {\n  provider: string\n  kind: OutputPathKind\n  database: string\n  schema: string\n  model: string\n}\n\ntype SchemaScopedPathDescriptor = {\n  schemaName: string\n  filePath: string\n}\n\ntype DatabaseArtifactDescriptor<TSchema extends SchemaArtifactDescriptor = SchemaArtifactDescriptor> = {\n  filePath: string\n  databaseConstName: string\n  schemas: TSchema[]\n}\n\ntype ComposeGeneratorArtifactsInput<TModel extends ModelArtifactDescriptorBase> = {\n  snapshot: IntrospectionSnapshot\n  config: NormalizedAthenaGeneratorConfig\n  createModelDescriptor: (input: {\n    providerName: string\n    databaseName: string\n    schemaName: string\n    tableName: string\n    table: IntrospectionTable\n  }) => TModel\n  renderModelArtifact: (descriptor: TModel) => GeneratedArtifact\n}\n\nexport interface ModelArtifactDescriptorBase extends SchemaScopedPathDescriptor {\n  tableName: string\n  exportConstName: string\n  table: IntrospectionTable\n}\n\nexport interface SchemaArtifactDescriptor<\n  TModel extends ModelArtifactDescriptorBase = ModelArtifactDescriptorBase,\n> extends SchemaScopedPathDescriptor {\n  schemaConstName: string\n  models: TModel[]\n}\n\nexport function normalizePath(pathValue: string): string {\n  return pathValue.replace(/\\\\/g, '/')\n}\n\nfunction withoutTypeScriptExtension(pathValue: string): string {\n  return pathValue.replace(/\\.tsx?$/i, '')\n}\n\nexport function toModuleImportPath(fromFile: string, targetFile: string): string {\n  const relativePath = withoutTypeScriptExtension(\n    normalizePath(posix.relative(posix.dirname(fromFile), targetFile)),\n  )\n  return relativePath.startsWith('.') ? relativePath : `./${relativePath}`\n}\n\nexport function resolveOutputPath(\n  target: string,\n  tokens: OutputPathTokens,\n  config: NormalizedAthenaGeneratorConfig,\n): string {\n  return normalizePath(renderOutputPath(target, tokens, config.output))\n}\n\nexport function renderObjectKey(key: string): string {\n  return escapeTypePropertyName(key)\n}\n\nexport function renderRelationLiteral(relation: IntrospectionRelation): string {\n  const through = relation.through\n    ? `,\n      through: {\n        schema: ${escapeStringLiteral(relation.through.schema)},\n        model: ${escapeStringLiteral(relation.through.model)},\n        sourceColumns: [${relation.through.sourceColumns.map(value => escapeStringLiteral(value)).join(', ')}],\n        targetColumns: [${relation.through.targetColumns.map(value => escapeStringLiteral(value)).join(', ')}],\n      }`\n    : ''\n\n  return `{\n      kind: ${escapeStringLiteral(relation.kind)},\n      sourceColumns: [${relation.sourceColumns.map(value => escapeStringLiteral(value)).join(', ')}],\n      targetSchema: ${escapeStringLiteral(relation.targetSchema)},\n      targetModel: ${escapeStringLiteral(relation.targetModel)},\n      targetColumns: [${relation.targetColumns.map(value => escapeStringLiteral(value)).join(', ')}]${through}\n    }`\n}\n\nexport function renderSchemaArtifact<TModel extends ModelArtifactDescriptorBase>(\n  descriptor: SchemaArtifactDescriptor<TModel>,\n): GeneratedArtifact {\n  const importLines = descriptor.models\n    .map(modelDescriptor => {\n      const importPath = toModuleImportPath(descriptor.filePath, modelDescriptor.filePath)\n      return `import { ${modelDescriptor.exportConstName} } from '${importPath}'`\n    })\n    .join('\\n')\n\n  const modelEntries = descriptor.models\n    .map(modelDescriptor => `  ${renderObjectKey(modelDescriptor.tableName)}: ${modelDescriptor.exportConstName}`)\n    .join(',\\n')\n\n  const content = `import { defineSchema } from '@xylex-group/athena'\n${importLines ? `\\n${importLines}\\n` : '\\n'}\nexport const ${descriptor.schemaConstName} = defineSchema({\n${modelEntries}\n})\n`\n\n  return {\n    kind: 'schema',\n    path: descriptor.filePath,\n    content,\n  }\n}\n\nexport function renderDatabaseArtifact<TSchema extends SchemaArtifactDescriptor>(\n  descriptor: DatabaseArtifactDescriptor<TSchema>,\n): GeneratedArtifact {\n  const importLines = descriptor.schemas\n    .map(schemaDescriptor => {\n      const importPath = toModuleImportPath(descriptor.filePath, schemaDescriptor.filePath)\n      return `import { ${schemaDescriptor.schemaConstName} } from '${importPath}'`\n    })\n    .join('\\n')\n\n  const schemaEntries = descriptor.schemas\n    .map(schemaDescriptor => `  ${renderObjectKey(schemaDescriptor.schemaName)}: ${schemaDescriptor.schemaConstName}`)\n    .join(',\\n')\n\n  const content = `import { defineDatabase } from '@xylex-group/athena'\n${importLines ? `\\n${importLines}\\n` : '\\n'}\nexport const ${descriptor.databaseConstName} = defineDatabase({\n${schemaEntries}\n})\n`\n\n  return {\n    kind: 'database',\n    path: descriptor.filePath,\n    content,\n  }\n}\n\nexport function renderRegistryArtifact(\n  registryPath: string,\n  databasePath: string,\n  databaseConstName: string,\n  registryConstName: string,\n  databaseName: string,\n  generatedAt: string,\n  outputPreset: NormalizedAthenaGeneratorConfig['output']['preset'],\n  outputFormat: NormalizedAthenaGeneratorConfig['output']['format'],\n  schemaVersion: number,\n): GeneratedArtifact {\n  const databaseImportPath = toModuleImportPath(registryPath, databasePath)\n  const content = `import { defineRegistry } from '@xylex-group/athena'\nimport { ${databaseConstName} } from '${databaseImportPath}'\n\nexport const __athena_schema_meta = {\n  schemaVersion: ${schemaVersion},\n  generatedAt: ${escapeStringLiteral(generatedAt)},\n  database: ${escapeStringLiteral(databaseName)},\n  outputPreset: ${escapeStringLiteral(outputPreset)},\n  outputFormat: ${escapeStringLiteral(outputFormat)},\n} as const\n\nexport const ${registryConstName} = defineRegistry({\n  ${renderObjectKey(databaseName)}: ${databaseConstName}\n})\n`\n\n  return {\n    kind: 'registry',\n    path: registryPath,\n    content,\n  }\n}\n\nfunction assertNoDuplicatePaths(files: GeneratedArtifact[]) {\n  const seen = new Map<string, GeneratedArtifact>()\n  for (const file of files) {\n    const existing = seen.get(file.path)\n    if (existing) {\n      throw new Error(\n        [\n          `Generator output collision detected for path: ${file.path}`,\n          `Collision: ${existing.kind} and ${file.kind}.`,\n          'Use explicit placeholders such as {model}, {model_kebab}, {schema}, or {schema_kebab} in output targets so each artifact resolves to a unique path.',\n        ].join(' '),\n      )\n    }\n    seen.set(file.path, file)\n  }\n}\n\nfunction addSchemaSegmentToPath(pathValue: string, schemaName: string): string {\n  const normalizedPath = normalizePath(pathValue)\n  const parsedPath = posix.parse(normalizedPath)\n  const schemaSegment = applyNamingStyle(schemaName, 'kebab')\n  if (!schemaSegment) {\n    return normalizedPath\n  }\n\n  const dir = parsedPath.dir.length > 0 ? `${parsedPath.dir}/${schemaSegment}` : schemaSegment\n  return normalizePath(posix.join(dir, parsedPath.base))\n}\n\nfunction scopeDuplicateDescriptorPathsBySchema<TDescriptor extends SchemaScopedPathDescriptor>(\n  descriptors: TDescriptor[],\n): TDescriptor[] {\n  const nextDescriptors = descriptors.map(descriptor => ({ ...descriptor }))\n  const duplicates = new Map<string, number[]>()\n\n  for (let index = 0; index < nextDescriptors.length; index += 1) {\n    const descriptor = nextDescriptors[index]\n    const indexes = duplicates.get(descriptor.filePath) ?? []\n    indexes.push(index)\n    duplicates.set(descriptor.filePath, indexes)\n  }\n\n  let appliedSchemaScoping = false\n  for (const indexes of duplicates.values()) {\n    if (indexes.length <= 1) {\n      continue\n    }\n\n    const schemaNames = new Set(indexes.map(index => nextDescriptors[index].schemaName))\n    if (schemaNames.size <= 1) {\n      continue\n    }\n\n    for (const index of indexes) {\n      const descriptor = nextDescriptors[index]\n      descriptor.filePath = addSchemaSegmentToPath(descriptor.filePath, descriptor.schemaName)\n    }\n    appliedSchemaScoping = true\n  }\n\n  if (!appliedSchemaScoping) {\n    return nextDescriptors\n  }\n\n  const normalizedPaths = new Set<string>()\n  for (const descriptor of nextDescriptors) {\n    if (normalizedPaths.has(descriptor.filePath)) {\n      throw new Error(\n        [\n          `Generator output collision detected for path: ${descriptor.filePath}`,\n          'Automatic schema path scoping was applied but collisions remain.',\n          'Add explicit placeholders such as {model}, {model_kebab}, {schema}, or {schema_kebab} to your output targets.',\n        ].join(' '),\n      )\n    }\n    normalizedPaths.add(descriptor.filePath)\n  }\n\n  return nextDescriptors\n}\n\nexport function composeGeneratorArtifacts<TModel extends ModelArtifactDescriptorBase>(\n  input: ComposeGeneratorArtifactsInput<TModel>,\n): GeneratedArtifacts {\n  const { snapshot, config, createModelDescriptor, renderModelArtifact } = input\n  const providerName = snapshot.backend\n  const databaseName = snapshot.database\n  const modelDescriptors: TModel[] = []\n\n  for (const schemaName of Object.keys(snapshot.schemas).sort()) {\n    const schema = snapshot.schemas[schemaName]\n    for (const tableName of Object.keys(schema.tables).sort()) {\n      modelDescriptors.push(\n        createModelDescriptor({\n          providerName,\n          databaseName,\n          schemaName,\n          tableName,\n          table: schema.tables[tableName],\n        }),\n      )\n    }\n  }\n\n  const scopedModelDescriptors = scopeDuplicateDescriptorPathsBySchema(modelDescriptors)\n\n  let schemaDescriptors: SchemaArtifactDescriptor<TModel>[] = Object.keys(snapshot.schemas)\n    .sort()\n    .map(schemaName => ({\n      schemaName,\n      filePath: resolveOutputPath(\n        config.output.targets.schema,\n        {\n          provider: providerName,\n          kind: 'schema',\n          database: databaseName,\n          schema: schemaName,\n          model: 'index',\n        },\n        config,\n      ),\n      schemaConstName: toSafeIdentifier(\n        `${schemaName} schema`,\n        config.naming.schemaConst,\n        'schema',\n      ),\n      models: scopedModelDescriptors.filter(model => model.schemaName === schemaName),\n    }))\n\n  schemaDescriptors = scopeDuplicateDescriptorPathsBySchema(schemaDescriptors)\n\n  const databaseDescriptor: DatabaseArtifactDescriptor<SchemaArtifactDescriptor<TModel>> = {\n    filePath: resolveOutputPath(\n      config.output.targets.database,\n      {\n        provider: providerName,\n        kind: 'database',\n        database: databaseName,\n        schema: 'index',\n        model: 'index',\n      },\n      config,\n    ),\n    databaseConstName: toSafeIdentifier(\n      `${databaseName} database`,\n      config.naming.databaseConst,\n      'database',\n    ),\n    schemas: schemaDescriptors,\n  }\n\n  const files: GeneratedArtifact[] = []\n\n  for (const modelDescriptor of scopedModelDescriptors) {\n    files.push(renderModelArtifact(modelDescriptor))\n  }\n\n  for (const schemaDescriptor of schemaDescriptors) {\n    files.push(renderSchemaArtifact(schemaDescriptor))\n  }\n\n  files.push(renderDatabaseArtifact(databaseDescriptor))\n\n  if (config.features.emitRegistry) {\n    const registryPath = resolveOutputPath(\n      config.output.targets.registry,\n      {\n        provider: providerName,\n        kind: 'registry',\n        database: databaseName,\n        schema: 'index',\n        model: 'index',\n      },\n      config,\n    )\n    files.push(\n      renderRegistryArtifact(\n        registryPath,\n        databaseDescriptor.filePath,\n        databaseDescriptor.databaseConstName,\n        toSafeIdentifier('registry', config.naming.registryConst, 'registry'),\n        databaseName,\n        snapshot.generatedAt,\n        config.output.preset,\n        config.output.format,\n        config.internal.schemaVersion,\n      ),\n    )\n  }\n\n  assertNoDuplicatePaths(files)\n\n  return {\n    snapshot,\n    files,\n  }\n}\n","import type {\n  AthenaGeneratorConfig,\n  GeneratedArtifact,\n  GeneratedArtifacts,\n  NormalizedAthenaGeneratorConfig,\n} from './types.ts'\nimport type {\n  IntrospectionColumn,\n  IntrospectionSnapshot,\n} from '../schema/types.ts'\nimport {\n  escapeStringLiteral,\n  escapeTypePropertyName,\n  toSafeIdentifier,\n} from './naming.ts'\nimport { resolvePostgresColumnType } from './postgres-type-mapping.ts'\nimport { normalizeGeneratorConfig } from './config.ts'\nimport {\n  composeGeneratorArtifacts,\n  renderObjectKey,\n  renderRelationLiteral,\n  resolveOutputPath,\n  type ModelArtifactDescriptorBase,\n} from './render-shared.ts'\n\ntype ModelRenderDescriptor = ModelArtifactDescriptorBase & {\n  rowTypeName: string\n  insertTypeName: string\n  updateTypeName: string\n  formValuesTypeName: string\n  tableConstName: string\n}\n\nconst SAFE_NUMBER_TYPES = new Set([\n  'int2',\n  'int4',\n  'float4',\n  'float8',\n  'smallint',\n  'integer',\n  'real',\n  'double precision',\n])\n\nconst JSON_TYPES = new Set(['json', 'jsonb'])\nconst BOOLEAN_TYPES = new Set(['bool', 'boolean'])\nconst STRING_TYPES = new Set([\n  'int8',\n  'bigint',\n  'serial8',\n  'bigserial',\n  'numeric',\n  'decimal',\n  'money',\n  'bytea',\n])\n\nfunction normalizeTypeLabel(column: IntrospectionColumn): string {\n  const preferred = (column.udtName || column.dataType).toLowerCase().trim()\n  if (column.arrayDimensions > 0 && preferred.startsWith('_')) {\n    return preferred.slice(1)\n  }\n  return preferred\n}\n\nfunction renderColumnBuilder(column: IntrospectionColumn): {\n  helper: 'boolean' | 'number' | 'string' | 'json' | 'enumeration'\n  expression: string\n} {\n  const label = normalizeTypeLabel(column)\n  let helper: 'boolean' | 'number' | 'string' | 'json' | 'enumeration'\n  let expression: string\n\n  if (column.typeKind === 'enum' && column.enumValues && column.enumValues.length > 0) {\n    helper = 'enumeration'\n    expression = `enumeration([${column.enumValues.map(value => escapeStringLiteral(value)).join(', ')}] as const)`\n  } else if (column.arrayDimensions > 0 || JSON_TYPES.has(label) || column.typeKind === 'composite') {\n    helper = 'json'\n    expression = `json<${resolvePostgresColumnType(column)}>()`\n  } else if (BOOLEAN_TYPES.has(label)) {\n    helper = 'boolean'\n    expression = 'boolean()'\n  } else if (SAFE_NUMBER_TYPES.has(label)) {\n    helper = 'number'\n    expression = 'number()'\n  } else if (STRING_TYPES.has(label)) {\n    helper = 'string'\n    expression = 'string()'\n  } else {\n    helper = 'string'\n    expression = 'string()'\n  }\n\n  if (column.isNullable) {\n    expression = `${expression}.optional()`\n  }\n  if (column.hasDefault) {\n    expression = `${expression}.defaulted()`\n  }\n  if (column.isGenerated) {\n    expression = `${expression}.generated()`\n  }\n\n  return { helper, expression }\n}\n\nfunction renderModelArtifact(\n  descriptor: ModelRenderDescriptor,\n  config: NormalizedAthenaGeneratorConfig,\n): GeneratedArtifact {\n  const helperImports = new Set<string>(['table'])\n  const columnLines = Object.entries(descriptor.table.columns)\n    .map(([columnName, column]) => {\n      const propertyName = escapeTypePropertyName(columnName)\n      const rendered = renderColumnBuilder(column)\n      helperImports.add(rendered.helper)\n      return `    ${propertyName}: ${rendered.expression}`\n    })\n    .join(',\\n')\n\n  const helperImportLine = Array.from(helperImports).sort().join(', ')\n  const rowSchemaConstName = `${descriptor.tableConstName}_row_schema`\n  const insertSchemaConstName = `${descriptor.tableConstName}_insert_schema`\n  const updateSchemaConstName = `${descriptor.tableConstName}_update_schema`\n  const formSchemaConstName = `${descriptor.tableConstName}_form_schema`\n\n  const relationEntries = Object.entries(descriptor.table.relations)\n  const relationsAssignment = config.features.emitRelations && relationEntries.length > 0\n    ? `\nObject.assign(${descriptor.tableConstName}.meta, {\n  relations: {\n${relationEntries\n  .map(([relationKey, relationValue]) => `    ${renderObjectKey(relationKey)}: ${renderRelationLiteral(relationValue)}`)\n  .join(',\\n')}\n  }\n})\n`\n    : ''\n\n  const content = `import { ${helperImportLine} } from '@xylex-group/athena'\nimport type { FormValuesOf, InsertOf, RowOf, UpdateOf } from '@xylex-group/athena'\n\nexport const ${descriptor.tableConstName} = table(${escapeStringLiteral(descriptor.tableName)})\n  .schema(${escapeStringLiteral(descriptor.schemaName)})\n  .columns({\n${columnLines}\n  })\n  ${descriptor.table.primaryKey.length > 0\n    ? `.primaryKey(${descriptor.table.primaryKey.map(value => escapeStringLiteral(value)).join(', ')})`\n    : '.withoutPrimaryKey()'}\n${relationsAssignment ? `${relationsAssignment}` : ''}\nexport type ${descriptor.rowTypeName} = RowOf<typeof ${descriptor.tableConstName}>\nexport type ${descriptor.insertTypeName} = InsertOf<typeof ${descriptor.tableConstName}>\nexport type ${descriptor.updateTypeName} = UpdateOf<typeof ${descriptor.tableConstName}>\nexport type ${descriptor.formValuesTypeName} = FormValuesOf<typeof ${descriptor.tableConstName}>\n\nexport const ${rowSchemaConstName} = ${descriptor.tableConstName}.schemas.row\nexport const ${insertSchemaConstName} = ${descriptor.tableConstName}.schemas.insert\nexport const ${updateSchemaConstName} = ${descriptor.tableConstName}.schemas.update\nexport const ${formSchemaConstName} = ${descriptor.tableConstName}.schemas.form\n`\n\n  return {\n    kind: 'model',\n    path: descriptor.filePath,\n    content,\n  }\n}\n\nexport function generateTableBuilderArtifactsFromSnapshot(\n  snapshot: IntrospectionSnapshot,\n  config: AthenaGeneratorConfig | NormalizedAthenaGeneratorConfig,\n): GeneratedArtifacts {\n  const normalizedConfig = 'internal' in config\n    ? config as NormalizedAthenaGeneratorConfig\n    : normalizeGeneratorConfig(config as AthenaGeneratorConfig)\n  return composeGeneratorArtifacts({\n    snapshot,\n    config: normalizedConfig,\n    createModelDescriptor({ providerName, databaseName, schemaName, tableName, table }) {\n      const tableConstName = toSafeIdentifier(tableName, 'preserve', 'table')\n      return {\n        schemaName,\n        tableName,\n        filePath: resolveOutputPath(\n          normalizedConfig.output.targets.model,\n          {\n            provider: providerName,\n            kind: 'model',\n            database: databaseName,\n            schema: schemaName,\n            model: tableName,\n          },\n          normalizedConfig,\n        ),\n        rowTypeName: `${toSafeIdentifier(`${schemaName} ${tableName}`, normalizedConfig.naming.modelType, 'Model')}Row`,\n        insertTypeName: `${toSafeIdentifier(`${schemaName} ${tableName}`, normalizedConfig.naming.modelType, 'Model')}Insert`,\n        updateTypeName: `${toSafeIdentifier(`${schemaName} ${tableName}`, normalizedConfig.naming.modelType, 'Model')}Update`,\n        formValuesTypeName: `${toSafeIdentifier(`${schemaName} ${tableName}`, normalizedConfig.naming.modelType, 'Model')}FormValues`,\n        tableConstName,\n        exportConstName: tableConstName,\n        table,\n      }\n    },\n    renderModelArtifact: descriptor => renderModelArtifact(descriptor, normalizedConfig),\n  })\n}\n","import type {\n  AthenaGeneratorConfig,\n  GeneratedArtifact,\n  GeneratedArtifacts,\n  NormalizedAthenaGeneratorConfig,\n} from './types.ts'\nimport type {\n  IntrospectionSnapshot,\n} from '../schema/types.ts'\nimport {\n  escapeStringLiteral,\n  escapeTypePropertyName,\n  toSafeIdentifier,\n} from './naming.ts'\nimport { resolvePostgresColumnType } from './postgres-type-mapping.ts'\nimport { normalizeGeneratorConfig } from './config.ts'\nimport {\n  composeGeneratorArtifacts,\n  renderObjectKey,\n  renderRelationLiteral,\n  resolveOutputPath,\n  type ModelArtifactDescriptorBase,\n} from './render-shared.ts'\nimport { filterIntrospectionSnapshot } from './table-selection.ts'\nimport { generateTableBuilderArtifactsFromSnapshot } from './table-builder-renderer.ts'\n\ntype ModelRenderDescriptor = ModelArtifactDescriptorBase & {\n  rowTypeName: string\n  insertTypeName: string\n  updateTypeName: string\n  modelConstName: string\n}\n\nfunction renderModelArtifact(\n  databaseName: string,\n  descriptor: ModelRenderDescriptor,\n  config: NormalizedAthenaGeneratorConfig,\n): GeneratedArtifact {\n  const columnLines = Object.values(descriptor.table.columns)\n    .map(column => {\n      const propertyName = escapeTypePropertyName(column.name)\n      const baseType = resolvePostgresColumnType(column)\n      const isOptional = column.isNullable\n      const typeWithNullability = column.isNullable ? `${baseType} | null` : baseType\n      return `  ${propertyName}${isOptional ? '?' : ''}: ${typeWithNullability}`\n    })\n    .join('\\n')\n\n  const nullableLines = Object.values(descriptor.table.columns)\n    .map(column => `      ${renderObjectKey(column.name)}: ${column.isNullable ? 'true' : 'false'}`)\n    .join(',\\n')\n\n  const relationEntries = Object.entries(descriptor.table.relations)\n  const relationBlock = config.features.emitRelations && relationEntries.length > 0\n    ? `,\n    relations: {\n${relationEntries\n  .map(([relationKey, relationValue]) => `      ${renderObjectKey(relationKey)}: ${renderRelationLiteral(relationValue)}`)\n  .join(',\\n')}\n    }`\n    : ''\n\n  const content = `import { defineModel } from '@xylex-group/athena'\n\nexport interface ${descriptor.rowTypeName} {\n${columnLines}\n}\n\nexport type ${descriptor.insertTypeName} = Partial<${descriptor.rowTypeName}>\nexport type ${descriptor.updateTypeName} = Partial<${descriptor.insertTypeName}>\n\nexport const ${descriptor.modelConstName} = defineModel<${descriptor.rowTypeName}, ${descriptor.insertTypeName}, ${descriptor.updateTypeName}>({\n  meta: {\n    database: ${escapeStringLiteral(databaseName)},\n    schema: ${escapeStringLiteral(descriptor.schemaName)},\n    model: ${escapeStringLiteral(descriptor.tableName)},\n    tableName: ${escapeStringLiteral(`${descriptor.schemaName}.${descriptor.tableName}`)},\n    primaryKey: [${descriptor.table.primaryKey.map(value => escapeStringLiteral(value)).join(', ')}],\n    nullable: {\n${nullableLines}\n    }${relationBlock}\n  }\n})\n`\n\n  return {\n    kind: 'model',\n    path: descriptor.filePath,\n    content,\n  }\n}\n\n/**\n * Generates model/schema/database/registry source artifacts from an introspection snapshot.\n */\nexport function generateArtifactsFromSnapshot(\n  snapshot: IntrospectionSnapshot,\n  config: AthenaGeneratorConfig | NormalizedAthenaGeneratorConfig,\n): GeneratedArtifacts {\n  const normalizedConfig = 'internal' in config\n    ? config as NormalizedAthenaGeneratorConfig\n    : normalizeGeneratorConfig(config as AthenaGeneratorConfig)\n  const filteredSnapshot = filterIntrospectionSnapshot(snapshot, normalizedConfig.filter)\n  if (normalizedConfig.output.format === 'table-builder') {\n    return generateTableBuilderArtifactsFromSnapshot(filteredSnapshot, normalizedConfig)\n  }\n  return composeGeneratorArtifacts({\n    snapshot: filteredSnapshot,\n    config: normalizedConfig,\n    createModelDescriptor({ providerName, databaseName, schemaName, tableName, table }) {\n      const modelConstName = toSafeIdentifier(\n        `${schemaName} ${tableName} model`,\n        normalizedConfig.naming.modelConst,\n        'model',\n      )\n      return {\n        schemaName,\n        tableName,\n        filePath: resolveOutputPath(\n          normalizedConfig.output.targets.model,\n          {\n            provider: providerName,\n            kind: 'model',\n            database: databaseName,\n            schema: schemaName,\n            model: tableName,\n          },\n          normalizedConfig,\n        ),\n        rowTypeName: `${toSafeIdentifier(`${schemaName} ${tableName}`, normalizedConfig.naming.modelType, 'Model')}Row`,\n        insertTypeName: `${toSafeIdentifier(`${schemaName} ${tableName}`, normalizedConfig.naming.modelType, 'Model')}Insert`,\n        updateTypeName: `${toSafeIdentifier(`${schemaName} ${tableName}`, normalizedConfig.naming.modelType, 'Model')}Update`,\n        modelConstName,\n        exportConstName: modelConstName,\n        table,\n      }\n    },\n    renderModelArtifact: descriptor => renderModelArtifact(filteredSnapshot.database, descriptor, normalizedConfig),\n  })\n}\n","import { createClient, type AthenaClient } from '../v3-client.ts'\nimport {\n  buildGatewayCatalogQueries,\n  PostgresCatalogSnapshotAssembler,\n  type ColumnQueryRow,\n  type EnumQueryRow,\n  type ForeignKeyQueryRow,\n  type PrimaryKeyQueryRow,\n} from '../schema/postgres-introspection-core.ts'\nimport { createPostgresIntrospectionProvider } from '../schema/postgres-provider.ts'\nimport type {\n  IntrospectionInspectOptions,\n  IntrospectionSnapshot,\n  SchemaIntrospectionProvider,\n} from '../schema/types.ts'\nimport type {\n  GeneratorExperimentalFlags,\n  GeneratorProviderConfig,\n  PostgresDirectProviderConfig,\n  PostgresGatewayProviderConfig,\n  ScyllaDirectProviderConfig,\n} from './types.ts'\nimport { normalizeSchemaSelection } from './schema-selection.ts'\n\nclass AthenaGatewayCatalogClient {\n  constructor(private readonly client: AthenaClient) {}\n\n  async queryRows<T extends Record<string, unknown>>(query: string): Promise<T[]> {\n    const result = await this.client.query<T>(query)\n    if (result.error || result.status < 200 || result.status >= 300) {\n      throw new Error(result.error?.message ?? `Gateway query failed with status ${result.status}`)\n    }\n    return result.data ?? []\n  }\n\n  async queryColumns(query: string): Promise<ColumnQueryRow[]> {\n    return this.queryRows<ColumnQueryRow>(query)\n  }\n\n  async queryEnums(query: string): Promise<Map<number, string[]>> {\n    const rows = await this.queryRows<EnumQueryRow>(query)\n    const enumMap = new Map<number, string[]>()\n    for (const row of rows) {\n      const existing = enumMap.get(row.type_oid) ?? []\n      existing.push(row.enum_label)\n      enumMap.set(row.type_oid, existing)\n    }\n    return enumMap\n  }\n\n  async queryPrimaryKeys(query: string): Promise<PrimaryKeyQueryRow[]> {\n    return this.queryRows<PrimaryKeyQueryRow>(query)\n  }\n\n  async queryForeignKeys(query: string): Promise<ForeignKeyQueryRow[]> {\n    return this.queryRows<ForeignKeyQueryRow>(query)\n  }\n}\n\nclass AthenaGatewayPostgresIntrospectionProvider implements SchemaIntrospectionProvider {\n  readonly backend = 'postgresql' as const\n\n  private readonly client: AthenaClient\n  private readonly schemas: string[]\n\n  constructor(private readonly config: PostgresGatewayProviderConfig) {\n    this.client = createClient({\n      db: { url: this.config.gatewayUrl },\n      key: this.config.apiKey,\n      backend: {\n        type: this.config.backend ?? 'postgresql',\n      },\n    })\n    this.schemas = normalizeSchemaSelection(this.config.schemas)\n  }\n\n  async inspect(options?: IntrospectionInspectOptions): Promise<IntrospectionSnapshot> {\n    const schemas =\n      options?.schemas && options.schemas.length > 0\n        ? normalizeSchemaSelection(options.schemas)\n        : this.schemas\n\n    const catalogClient = new AthenaGatewayCatalogClient(this.client)\n    const queries = buildGatewayCatalogQueries(schemas)\n\n    const [columnRows, enumMap, primaryKeyRows, foreignKeyRows] = await Promise.all([\n      catalogClient.queryColumns(queries.columns),\n      catalogClient.queryEnums(queries.enums),\n      catalogClient.queryPrimaryKeys(queries.primaryKeys),\n      catalogClient.queryForeignKeys(queries.foreignKeys),\n    ])\n\n    const assembler = new PostgresCatalogSnapshotAssembler()\n    assembler.addColumnRows(columnRows, enumMap)\n    assembler.addPrimaryKeyRows(primaryKeyRows)\n    assembler.addForeignKeyRows(foreignKeyRows)\n    assembler.addManyToManyRows(foreignKeyRows)\n\n    return {\n      backend: 'postgresql',\n      database: this.config.database,\n      generatedAt: new Date().toISOString(),\n      schemas: assembler.toSchemas(),\n    }\n  }\n}\n\nclass ScyllaIntrospectionProvider implements SchemaIntrospectionProvider {\n  readonly backend = 'scylladb' as const\n\n  constructor(private readonly config: ScyllaDirectProviderConfig) {}\n\n  async inspect(): Promise<IntrospectionSnapshot> {\n    throw new Error(\n      `Scylla introspection provider is not implemented yet for keyspace ${this.config.keyspace}.`,\n    )\n  }\n}\n\nfunction createPostgresProvider(config: PostgresDirectProviderConfig): SchemaIntrospectionProvider {\n  return createPostgresIntrospectionProvider({\n    connectionString: config.connectionString,\n    database: config.database,\n    schemas: normalizeSchemaSelection(config.schemas),\n  })\n}\n\n/**\n * Resolves a runtime introspection provider from generator config.\n */\nexport function resolveGeneratorProvider(\n  providerConfig: GeneratorProviderConfig,\n  experimentalFlags: GeneratorExperimentalFlags,\n): SchemaIntrospectionProvider {\n  if (providerConfig.kind === 'postgres' && providerConfig.mode === 'direct') {\n    return createPostgresProvider(providerConfig)\n  }\n\n  if (providerConfig.kind === 'postgres' && providerConfig.mode === 'gateway') {\n    return new AthenaGatewayPostgresIntrospectionProvider(providerConfig)\n  }\n\n  if (providerConfig.kind === 'scylla') {\n    if (!experimentalFlags.scyllaProviderContracts) {\n      throw new Error(\n        'Scylla provider contracts are disabled. Set experimental.scyllaProviderContracts=true to enable placeholders.',\n      )\n    }\n    return new ScyllaIntrospectionProvider(providerConfig)\n  }\n\n  throw new Error(`Unsupported generator provider kind: ${(providerConfig as { kind?: string }).kind ?? 'unknown'}`)\n}\n","import { mkdir, stat, writeFile } from 'fs/promises'\nimport { dirname, resolve } from 'path'\nimport { generateArtifactsFromSnapshot } from './renderer.ts'\nimport { loadGeneratorConfig } from './config.ts'\nimport { resolveGeneratorProvider } from './providers.ts'\nimport { resolveProviderSchemas } from './schema-selection.ts'\nimport type {\n  GeneratedArtifact,\n  LoadGeneratorConfigOptions,\n  RunGeneratorOptions,\n  RunGeneratorResult,\n  SkippedGeneratedArtifact,\n} from './types.ts'\n\nfunction canOverwriteArtifact(file: GeneratedArtifact): boolean {\n  return file.kind === 'model' || file.kind === 'schema'\n}\n\nasync function fileExists(path: string): Promise<boolean> {\n  try {\n    await stat(path)\n    return true\n  } catch {\n    return false\n  }\n}\n\nasync function writeArtifacts(\n  files: GeneratedArtifact[],\n  cwd: string,\n): Promise<{\n  writtenFiles: string[]\n  skippedFiles: SkippedGeneratedArtifact[]\n}> {\n  const writtenFiles: string[] = []\n  const skippedFiles: SkippedGeneratedArtifact[] = []\n\n  for (const file of files) {\n    const absolutePath = resolve(cwd, file.path)\n    if (!canOverwriteArtifact(file) && await fileExists(absolutePath)) {\n      skippedFiles.push({\n        kind: file.kind,\n        path: file.path,\n        reason: 'protected-existing-file',\n      })\n      continue\n    }\n    await mkdir(dirname(absolutePath), { recursive: true })\n    await writeFile(absolutePath, file.content, 'utf8')\n    writtenFiles.push(file.path)\n  }\n\n  return {\n    writtenFiles,\n    skippedFiles,\n  }\n}\n\n/**\n * End-to-end generator execution: load config, introspect, render, and optionally write files.\n */\nexport async function runSchemaGenerator(options: RunGeneratorOptions = {}): Promise<RunGeneratorResult> {\n  const cwd = options.cwd ?? process.cwd()\n  const configOptions: LoadGeneratorConfigOptions = {\n    cwd,\n    configPath: options.configPath,\n  }\n\n  const { configPath, config } = await loadGeneratorConfig(configOptions)\n  const provider = options.provider ?? resolveGeneratorProvider(config.provider, config.experimental)\n\n  const snapshot = await provider.inspect({\n    schemas: resolveProviderSchemas(config.provider),\n  })\n\n  const generated = generateArtifactsFromSnapshot(snapshot, config)\n  const writeResult = options.dryRun\n    ? { writtenFiles: [], skippedFiles: [] }\n    : await writeArtifacts(generated.files, cwd)\n\n  return {\n    ...generated,\n    configPath,\n    config,\n    writtenFiles: writeResult.writtenFiles,\n    skippedFiles: writeResult.skippedFiles,\n  }\n}\n","import {\n  deleteSessionCookie,\n  getCookieCache,\n  getCookies,\n  getSessionCookie,\n  parseCookies,\n  setSessionCookie,\n  type AthenaAuthCookies,\n  type AthenaCookieContextRuntime,\n  type AthenaCookieOptions,\n  type AthenaCookiesOptions,\n} from '../cookies/index.ts'\nimport type { AthenaSessionPair } from '../cookies/types.ts'\nimport type { AuthSocialProvider } from './types.ts'\n\ntype AthenaMaybePromise<T> = T | Promise<T>\ntype AthenaAuthServerCookieOptions = Pick<AthenaCookiesOptions, 'session' | 'advanced'>\n\nconst DEFAULT_AUTH_BASE_PATH = '/api/auth'\n\nexport const ATHENA_AUTH_BASE_ERROR_CODES = {\n  HANDLER_NOT_CONFIGURED: 'HANDLER_NOT_CONFIGURED',\n  INVALID_BASE_URL: 'INVALID_BASE_URL',\n  UNTRUSTED_HOST: 'UNTRUSTED_HOST',\n} as const\n\nexport interface AthenaAuthSocialProviderConfig {\n  clientId: string\n  clientSecret: string\n  scope?: string[]\n  [key: string]: unknown\n}\n\nexport interface AthenaAuthPluginContext {\n  path?: string\n  headers?: Headers\n  context: {\n    returned?: unknown\n    responseHeaders?: Headers\n    setSession?: AthenaSessionPair | null\n    clearSession?: boolean\n    dontRememberMe?: boolean\n    cookieOverrides?: Partial<AthenaCookieOptions>\n    [key: string]: unknown\n  }\n}\n\nexport interface AthenaAuthPluginHandlerContext extends AthenaAuthPluginContext {\n  auth: AthenaAuthServer\n}\n\nexport interface AthenaAuthPlugin {\n  id: string\n  version: string\n  $ERROR_CODES?: Record<string, string>\n  hooks?: {\n    after?: Array<{\n      matcher: (ctx: AthenaAuthPluginContext) => boolean\n      handler: (ctx: AthenaAuthPluginHandlerContext) => Promise<void> | void\n    }>\n  }\n}\n\nexport interface AthenaAuthCookieRuntimeInput {\n  headers?: Headers\n  responseHeaders?: Headers\n  cookies?: AthenaAuthCookies\n  getCookie?: (name: string) => string | null | undefined\n  setCookie?: (name: string, value: string, attributes: AthenaCookieOptions) => void\n  logger?: AthenaCookieContextRuntime['logger']\n  setSignedCookie?: AthenaCookieContextRuntime['setSignedCookie']\n  getSignedCookie?: AthenaCookieContextRuntime['getSignedCookie']\n  setNewSession?: AthenaCookieContextRuntime['context']['setNewSession']\n}\n\nexport interface AthenaAuthServerRuntimeOptions {\n  baseURL?: string\n  basePath: string\n  secret: string\n  cookies: AthenaAuthServerCookieOptions\n}\n\nexport type AthenaAuthDatabaseFactory<TDatabase = unknown> = (\n  options: AthenaAuthServerRuntimeOptions,\n) => TDatabase\n\nexport type AthenaAuthBaseURLConfig = AthenaCookiesOptions['baseURL']\n\nexport type AthenaAuthTrustedOrigins =\n  | string[]\n  | ((request?: Request) => AthenaMaybePromise<string[]>)\n\nexport type AthenaAuthTrustedProviders =\n  | string[]\n  | ((request?: Request) => AthenaMaybePromise<string[]>)\n\nexport interface AthenaAuthHandlerResult {\n  response?: Response\n  returned?: unknown\n  setSession?: AthenaSessionPair | null\n  clearSession?: boolean\n  dontRememberMe?: boolean\n  cookieOverrides?: Partial<AthenaCookieOptions>\n}\n\nexport interface AthenaAuthServerConfig<\n  TDatabase = unknown,\n> extends AthenaAuthServerCookieOptions {\n  baseURL?: AthenaAuthBaseURLConfig\n  basePath?: string\n  secret: string\n  database: TDatabase | AthenaAuthDatabaseFactory<TDatabase>\n  socialProviders?: Partial<Record<AuthSocialProvider, AthenaAuthSocialProviderConfig>>\n  trustedOrigins?: AthenaAuthTrustedOrigins\n  trustedProviders?: AthenaAuthTrustedProviders\n  api?: Record<string, unknown>\n  errorCodes?: Record<string, string>\n  handler?: (\n    ctx: AthenaAuthRequestContext,\n  ) => AthenaMaybePromise<Response | AthenaAuthHandlerResult>\n  plugins?: AthenaAuthPlugin[]\n}\n\ntype ResolveAthenaAuthDatabase<TConfig extends AthenaAuthServerConfig> =\n  TConfig['database'] extends (...args: never[]) => infer TResult\n    ? TResult\n    : TConfig['database']\n\nexport interface AthenaAuthRequestContext<\n  TConfig extends AthenaAuthServerConfig = AthenaAuthServerConfig,\n> {\n  auth: AthenaAuthServer<TConfig>\n  request: Request\n  url: URL\n  path: string\n  basePath: string\n  baseURL: string\n  origin: string\n  headers: Headers\n  cookies: AthenaAuthCookies\n  trustedOrigins: string[]\n  trustedProviders: string[]\n  options: TConfig\n  runtime: AthenaAuthServerRuntimeOptions\n  database: ResolveAthenaAuthDatabase<TConfig>\n  socialProviders: NonNullable<TConfig['socialProviders']>\n}\n\nexport interface AthenaAuthContext<\n  TConfig extends AthenaAuthServerConfig = AthenaAuthServerConfig,\n> {\n  auth: AthenaAuthServer<TConfig>\n  options: TConfig\n  runtime: AthenaAuthServerRuntimeOptions\n  basePath: string\n  baseURL?: string\n  origin?: string\n  database: ResolveAthenaAuthDatabase<TConfig>\n  socialProviders: NonNullable<TConfig['socialProviders']>\n  plugins: AthenaAuthPlugin[]\n  cookies: AthenaAuthCookies\n  trustedOrigins: string[]\n  trustedProviders: string[]\n}\n\nexport interface AthenaAuthServerApi<\n  TConfig extends AthenaAuthServerConfig = AthenaAuthServerConfig,\n> {\n  applyResponseCookies: AthenaAuthServer<TConfig>['applyResponseCookies']\n  clearSession: AthenaAuthServer<TConfig>['clearSession']\n  createCookieContext: AthenaAuthServer<TConfig>['createCookieContext']\n  getCookieCache: typeof getCookieCache\n  getSessionCookie: typeof getSessionCookie\n  resolveRequestContext: AthenaAuthServer<TConfig>['resolveRequestContext']\n  runAfterHooks: AthenaAuthServer<TConfig>['runAfterHooks']\n  setSession: AthenaAuthServer<TConfig>['setSession']\n}\n\nexport interface AthenaAuthServer<\n  TConfig extends AthenaAuthServerConfig = AthenaAuthServerConfig,\n> {\n  config: TConfig\n  options: TConfig\n  runtime: AthenaAuthServerRuntimeOptions\n  database: ResolveAthenaAuthDatabase<TConfig>\n  socialProviders: NonNullable<TConfig['socialProviders']>\n  plugins: AthenaAuthPlugin[]\n  cookies: AthenaAuthCookies\n  api: AthenaAuthServerApi<TConfig> & Record<string, unknown>\n  $context: Promise<AthenaAuthContext<TConfig>>\n  $ERROR_CODES: Record<string, string>\n  createCookieContext: (input?: AthenaAuthCookieRuntimeInput) => AthenaCookieContextRuntime\n  setSession: (\n    input: AthenaAuthCookieRuntimeInput | undefined,\n    session: AthenaSessionPair,\n    dontRememberMe?: boolean,\n    overrides?: Partial<AthenaCookieOptions>,\n  ) => Promise<void>\n  clearSession: (\n    input?: AthenaAuthCookieRuntimeInput,\n    skipDontRememberMe?: boolean,\n  ) => void\n  applyResponseCookies: (ctx: AthenaAuthPluginContext) => Promise<Headers>\n  runAfterHooks: (ctx: AthenaAuthPluginContext) => Promise<AthenaAuthPluginContext>\n  resolveRequestContext: (request: Request) => Promise<AthenaAuthRequestContext<TConfig>>\n  handler: (request: Request) => Promise<Response>\n}\n\nfunction capitalize(value: string): string {\n  return value.length > 0 ? `${value[0]?.toUpperCase()}${value.slice(1)}` : value\n}\n\nfunction serializeSetCookieValue(\n  name: string,\n  value: string,\n  attributes: AthenaCookieOptions,\n): string {\n  const parts = [`${name}=${encodeURIComponent(value)}`]\n  const knownKeys = new Set([\n    'maxAge',\n    'expires',\n    'domain',\n    'path',\n    'secure',\n    'httpOnly',\n    'partitioned',\n    'sameSite',\n  ])\n\n  if (attributes.maxAge !== undefined) {\n    parts.push(`Max-Age=${Math.trunc(attributes.maxAge)}`)\n  }\n  if (attributes.expires instanceof Date) {\n    parts.push(`Expires=${attributes.expires.toUTCString()}`)\n  }\n  if (attributes.domain) {\n    parts.push(`Domain=${attributes.domain}`)\n  }\n  if (attributes.path) {\n    parts.push(`Path=${attributes.path}`)\n  }\n  if (attributes.secure) {\n    parts.push('Secure')\n  }\n  if (attributes.httpOnly) {\n    parts.push('HttpOnly')\n  }\n  if (attributes.partitioned) {\n    parts.push('Partitioned')\n  }\n  if (attributes.sameSite) {\n    parts.push(`SameSite=${capitalize(attributes.sameSite)}`)\n  }\n\n  for (const [key, rawValue] of Object.entries(attributes)) {\n    if (knownKeys.has(key) || rawValue === undefined || rawValue === null || rawValue === false) {\n      continue\n    }\n    if (rawValue === true) {\n      parts.push(key)\n      continue\n    }\n    parts.push(`${key}=${String(rawValue)}`)\n  }\n\n  return parts.join('; ')\n}\n\nfunction readCookieFromHeaders(headers: Headers | undefined, name: string): string | undefined {\n  const cookieHeader = headers?.get('cookie')\n  if (!cookieHeader) {\n    return undefined\n  }\n  return parseCookies(cookieHeader).get(name)\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return Boolean(value) && typeof value === 'object' && !Array.isArray(value)\n}\n\nfunction resolveSessionCandidate(value: unknown): AthenaSessionPair | null {\n  if (!isRecord(value)) {\n    return null\n  }\n\n  const session = isRecord(value.session) ? value.session : undefined\n  const user = isRecord(value.user) ? value.user : undefined\n  if (session && typeof session.token === 'string' && session.token.length > 0 && user) {\n    return {\n      session: session as Record<string, unknown> & { token: string },\n      user: user as Record<string, unknown>,\n    }\n  }\n\n  return null\n}\n\nfunction inferSessionPair(returned: unknown): AthenaSessionPair | null {\n  return (\n    resolveSessionCandidate(returned) ??\n    (isRecord(returned) ? resolveSessionCandidate(returned.data) : null) ??\n    (isRecord(returned) ? resolveSessionCandidate(returned.session) : null)\n  )\n}\n\nfunction resolveResponseHeaders(ctx: AthenaAuthPluginContext): Headers {\n  if (ctx.context.responseHeaders instanceof Headers) {\n    return ctx.context.responseHeaders\n  }\n\n  const headers = new Headers()\n  ctx.context.responseHeaders = headers\n  return headers\n}\n\nfunction normalizeBaseURL(baseURL: string): string {\n  return baseURL.replace(/\\/$/, '')\n}\n\nfunction normalizeBasePath(basePath: string | undefined): string {\n  if (!basePath || basePath === '/') {\n    return DEFAULT_AUTH_BASE_PATH\n  }\n\n  const normalized = basePath.startsWith('/') ? basePath : `/${basePath}`\n  return normalized.endsWith('/') && normalized.length > 1\n    ? normalized.slice(0, -1)\n    : normalized\n}\n\nfunction isDynamicBaseURLConfig(\n  baseURL: AthenaAuthBaseURLConfig | undefined,\n): baseURL is Exclude<AthenaAuthBaseURLConfig, string | undefined> {\n  return (\n    typeof baseURL === 'object' &&\n    baseURL !== null &&\n    'allowedHosts' in baseURL &&\n    Array.isArray((baseURL as { allowedHosts?: unknown }).allowedHosts)\n  )\n}\n\nfunction getRequestUrl(request: Request): URL {\n  try {\n    return new URL(request.url)\n  } catch {\n    return new URL('http://localhost')\n  }\n}\n\nfunction getRequestHost(request: Request, url: URL): string | null {\n  const forwardedHost = request.headers.get('x-forwarded-host')?.split(',')[0]?.trim()\n  const host = forwardedHost || request.headers.get('host') || url.host\n  return host || null\n}\n\nfunction getRequestProtocol(\n  request: Request,\n  configuredProtocol: 'http' | 'https' | 'auto' | undefined,\n  url: URL,\n): 'http' | 'https' {\n  if (configuredProtocol === 'http' || configuredProtocol === 'https') {\n    return configuredProtocol\n  }\n\n  const forwardedProto = request.headers.get('x-forwarded-proto')?.split(',')[0]?.trim()\n  if (forwardedProto === 'http' || forwardedProto === 'https') {\n    return forwardedProto\n  }\n\n  if (url.protocol === 'http:' || url.protocol === 'https:') {\n    return url.protocol.slice(0, -1) as 'http' | 'https'\n  }\n\n  return 'http'\n}\n\nfunction resolveRequestBaseURL(\n  baseURL: AthenaAuthBaseURLConfig | undefined,\n  request: Request,\n): string | null {\n  if (typeof baseURL === 'string') {\n    return normalizeBaseURL(baseURL)\n  }\n\n  const requestUrl = getRequestUrl(request)\n  const host = getRequestHost(request, requestUrl)\n  if (!host) {\n    return null\n  }\n\n  if (isDynamicBaseURLConfig(baseURL)) {\n    const allowedHosts = baseURL.allowedHosts ?? []\n    if (allowedHosts.length > 0 && !allowedHosts.includes(host)) {\n      return null\n    }\n  }\n\n  const protocol =\n    typeof baseURL === 'object' && baseURL !== null\n      ? getRequestProtocol(request, baseURL.protocol, requestUrl)\n      : getRequestProtocol(request, undefined, requestUrl)\n\n  return `${protocol}://${host}`\n}\n\nfunction getOrigin(baseURL: string | undefined): string | undefined {\n  if (!baseURL) {\n    return undefined\n  }\n\n  try {\n    return new URL(baseURL).origin\n  } catch {\n    return undefined\n  }\n}\n\nasync function resolveTrustedOrigins(\n  config: AthenaAuthServerConfig,\n  baseURL: string | undefined,\n  request?: Request,\n): Promise<string[]> {\n  const resolved =\n    typeof config.trustedOrigins === 'function'\n      ? await config.trustedOrigins(request)\n      : (config.trustedOrigins ?? [])\n\n  const values = [\n    getOrigin(baseURL),\n    ...resolved,\n  ]\n\n  return Array.from(new Set(values.filter((value): value is string => typeof value === 'string' && value.length > 0)))\n}\n\nasync function resolveTrustedProviders(\n  config: AthenaAuthServerConfig,\n  request?: Request,\n): Promise<string[]> {\n  const configured =\n    typeof config.trustedProviders === 'function'\n      ? await config.trustedProviders(request)\n      : (config.trustedProviders ?? [])\n\n  const values = [\n    ...Object.keys(config.socialProviders ?? {}),\n    ...configured,\n  ]\n\n  return Array.from(new Set(values.filter((value): value is string => typeof value === 'string' && value.length > 0)))\n}\n\nfunction createJsonResponse(payload: unknown, init?: ResponseInit): Response {\n  const headers = new Headers(init?.headers)\n  if (!headers.has('content-type')) {\n    headers.set('content-type', 'application/json; charset=utf-8')\n  }\n  return new Response(JSON.stringify(payload), {\n    ...init,\n    headers,\n  })\n}\n\nfunction mergeResponseHeaders(response: Response, headers: Headers): Response {\n  return new Response(response.body, {\n    status: response.status,\n    statusText: response.statusText,\n    headers,\n  })\n}\n\nexport function defineAthenaAuthConfig<TConfig extends AthenaAuthServerConfig>(\n  config: TConfig,\n): TConfig {\n  return config\n}\n\nexport function athenaAuth<TConfig extends AthenaAuthServerConfig>(\n  config: TConfig,\n): AthenaAuthServer<TConfig> {\n  const normalizedBasePath = normalizeBasePath(config.basePath)\n  const staticBaseURL =\n    typeof config.baseURL === 'string' ? normalizeBaseURL(config.baseURL) : undefined\n  const runtime: AthenaAuthServerRuntimeOptions = {\n    baseURL: staticBaseURL,\n    basePath: normalizedBasePath,\n    secret: config.secret,\n    cookies: {\n      session: config.session,\n      advanced: config.advanced,\n    },\n  }\n  const resolvedDatabase = (\n    typeof config.database === 'function'\n      ? config.database(runtime)\n      : config.database\n  ) as ResolveAthenaAuthDatabase<TConfig>\n  const cookies = getCookies({\n    baseURL: staticBaseURL ?? config.baseURL,\n    session: config.session,\n    advanced: config.advanced,\n  })\n\n  const auth = {} as AthenaAuthServer<TConfig>\n\n  const createCookieContext: AthenaAuthServer<TConfig>['createCookieContext'] = (input = {}) => {\n    const responseHeaders = input.responseHeaders ?? new Headers()\n    const runtimeHeaders = input.headers\n    const authCookies = input.cookies ?? auth.cookies\n\n    const setCookie = input.setCookie ?? ((name, value, attributes) => {\n      responseHeaders.append(\n        'set-cookie',\n        serializeSetCookieValue(name, value, attributes),\n      )\n    })\n\n    return {\n      headers: runtimeHeaders,\n      getCookie: input.getCookie ?? (name => readCookieFromHeaders(runtimeHeaders, name)),\n      setCookie,\n      logger: input.logger,\n      setSignedCookie: input.setSignedCookie,\n      getSignedCookie: input.getSignedCookie,\n      context: {\n        secret: runtime.secret,\n        authCookies,\n        sessionConfig: {\n          expiresIn: config.session?.expiresIn,\n        },\n        options: {\n          session: {\n            cookieCache: config.session?.cookieCache,\n          },\n          account: {\n            storeAccountCookie: true,\n          },\n        },\n        setNewSession: input.setNewSession,\n      },\n    }\n  }\n\n  const setSession: AthenaAuthServer<TConfig>['setSession'] = async (\n    input,\n    session,\n    dontRememberMe,\n    overrides,\n  ) => {\n    const cookieContext = createCookieContext(input)\n    await setSessionCookie(cookieContext, session, dontRememberMe, overrides)\n  }\n\n  const clearSession: AthenaAuthServer<TConfig>['clearSession'] = (\n    input,\n    skipDontRememberMe,\n  ) => {\n    const cookieContext = createCookieContext(input)\n    deleteSessionCookie(cookieContext, skipDontRememberMe)\n  }\n\n  const applyResponseCookies: AthenaAuthServer<TConfig>['applyResponseCookies'] = async ctx => {\n    const responseHeaders = resolveResponseHeaders(ctx)\n    const session =\n      ctx.context.setSession ??\n      inferSessionPair(ctx.context.returned)\n\n    if (ctx.context.clearSession) {\n      clearSession({\n        headers: ctx.headers,\n        responseHeaders,\n      })\n    }\n\n    if (session) {\n      await setSession(\n        {\n          headers: ctx.headers,\n          responseHeaders,\n        },\n        session,\n        ctx.context.dontRememberMe,\n        ctx.context.cookieOverrides,\n      )\n    }\n\n    return responseHeaders\n  }\n\n  const runAfterHooks: AthenaAuthServer<TConfig>['runAfterHooks'] = async ctx => {\n    for (const plugin of auth.plugins) {\n      for (const hook of plugin.hooks?.after ?? []) {\n        if (!hook.matcher(ctx)) {\n          continue\n        }\n        await hook.handler({\n          ...ctx,\n          auth,\n        })\n      }\n    }\n    return ctx\n  }\n\n  const resolveRequestContext: AthenaAuthServer<TConfig>['resolveRequestContext'] = async request => {\n    const requestUrl = getRequestUrl(request)\n    const resolvedBaseURL = resolveRequestBaseURL(config.baseURL, request)\n    if (!resolvedBaseURL) {\n      throw new Error(\n        isDynamicBaseURLConfig(config.baseURL)\n          ? 'Could not resolve base URL from request. Check allowedHosts/baseURL.'\n          : 'Could not resolve base URL from request.',\n      )\n    }\n\n    const requestCookies = getCookies({\n      baseURL: resolvedBaseURL,\n      session: config.session,\n      advanced: config.advanced,\n    })\n    const trustedOrigins = await resolveTrustedOrigins(config, resolvedBaseURL, request)\n    const trustedProviders = await resolveTrustedProviders(config, request)\n\n    return {\n      auth,\n      request,\n      url: requestUrl,\n      path: requestUrl.pathname,\n      basePath: normalizedBasePath,\n      baseURL: resolvedBaseURL,\n      origin: getOrigin(resolvedBaseURL) ?? resolvedBaseURL,\n      headers: request.headers,\n      cookies: requestCookies,\n      trustedOrigins,\n      trustedProviders,\n      options: config,\n      runtime: {\n        ...runtime,\n        baseURL: resolvedBaseURL,\n      },\n      database: auth.database,\n      socialProviders: auth.socialProviders,\n    }\n  }\n\n  const handler: AthenaAuthServer<TConfig>['handler'] = async request => {\n    const requestContext = await resolveRequestContext(request)\n\n    if (typeof config.handler !== 'function') {\n      return createJsonResponse(\n        {\n          ok: false,\n          code: ATHENA_AUTH_BASE_ERROR_CODES.HANDLER_NOT_CONFIGURED,\n          error: 'No native auth handler was configured for this Athena auth instance.',\n          path: requestContext.path,\n          basePath: requestContext.basePath,\n        },\n        { status: 501 },\n      )\n    }\n\n    const result = await config.handler(requestContext)\n    if (result instanceof Response) {\n      return result\n    }\n\n    const response =\n      result.response ??\n      (result.returned !== undefined\n        ? createJsonResponse(result.returned)\n        : new Response(null, { status: 204 }))\n\n    const responseHeaders = new Headers(response.headers)\n    await runAfterHooks({\n      path: requestContext.path,\n      headers: request.headers,\n      context: {\n        responseHeaders,\n        returned: result.returned,\n        setSession: result.setSession,\n        clearSession: result.clearSession,\n        dontRememberMe: result.dontRememberMe,\n        cookieOverrides: result.cookieOverrides,\n      },\n    })\n\n    return mergeResponseHeaders(response, responseHeaders)\n  }\n\n  const api: AthenaAuthServer<TConfig>['api'] = Object.assign(\n    {\n      applyResponseCookies,\n      clearSession,\n      createCookieContext,\n      getCookieCache,\n      getSessionCookie,\n      resolveRequestContext,\n      runAfterHooks,\n      setSession,\n    } satisfies AthenaAuthServerApi<TConfig>,\n    config.api ?? {},\n  )\n\n  const $ERROR_CODES = {\n    ...auth.plugins?.reduce<Record<string, string>>((acc, plugin) => {\n      if (plugin.$ERROR_CODES) {\n        return {\n          ...acc,\n          ...plugin.$ERROR_CODES,\n        }\n      }\n      return acc\n    }, {}),\n    ...(config.errorCodes ?? {}),\n    ...ATHENA_AUTH_BASE_ERROR_CODES,\n  }\n\n  Object.assign(auth, {\n    config,\n    options: config,\n    runtime,\n    database: resolvedDatabase,\n    socialProviders: (config.socialProviders ?? {}) as NonNullable<TConfig['socialProviders']>,\n    plugins: [...(config.plugins ?? [])],\n    cookies,\n    api,\n    $ERROR_CODES,\n    createCookieContext,\n    setSession,\n    clearSession,\n    applyResponseCookies,\n    runAfterHooks,\n    resolveRequestContext,\n    handler,\n  } satisfies Omit<AthenaAuthServer<TConfig>, '$context'>)\n\n  auth.$context = Promise.all([\n    resolveTrustedOrigins(config, staticBaseURL),\n    resolveTrustedProviders(config),\n  ]).then(([trustedOrigins, trustedProviders]) => ({\n    auth,\n    options: config,\n    runtime,\n    basePath: normalizedBasePath,\n    baseURL: staticBaseURL,\n    origin: getOrigin(staticBaseURL),\n    database: auth.database,\n    socialProviders: auth.socialProviders,\n    plugins: auth.plugins,\n    cookies: auth.cookies,\n    trustedOrigins,\n    trustedProviders,\n  }))\n\n  return auth\n}\n","/**\n * Framework-agnostic active-organization bootstrap.\n *\n * Promoted from consumer apps (e.g. speedrun-formations) so product code only\n * supplies list/set-active + optional org selection policy.\n *\n * Does not call Athena Auth routes itself — inject your client's\n * `auth.organization.list` / `setActive` (or any compatible functions).\n */\n\nexport interface ActiveOrganizationSessionLike {\n  session?: {\n    activeOrganizationId?: string | null\n  } | null\n}\n\nexport interface OrganizationLike {\n  id: string\n}\n\nexport interface EnsureActiveOrganizationOptions<TOrganization extends OrganizationLike> {\n  listOrganizations: () => Promise<readonly TOrganization[]>\n  onError?: (error: unknown) => void\n  /**\n   * Choose which org to activate when the session has none.\n   * Default: first organization with a non-empty `id`.\n   */\n  selectOrganizationId?: (organizations: readonly TOrganization[]) => string | null\n  session: ActiveOrganizationSessionLike | null | undefined\n  setActiveOrganization: (organizationId: string) => Promise<unknown>\n}\n\nexport interface EnsureActiveOrganizationResult {\n  activeOrganizationId: string | null\n  didSetActiveOrganization: boolean\n}\n\nfunction normalizeOrganizationId(value: string | null | undefined): string | null {\n  if (typeof value !== 'string') {\n    return null\n  }\n  const normalized = value.trim()\n  return normalized.length > 0 ? normalized : null\n}\n\nfunction defaultSelectOrganizationId<TOrganization extends OrganizationLike>(\n  organizations: readonly TOrganization[],\n): string | null {\n  for (const organization of organizations) {\n    const id = normalizeOrganizationId(organization.id)\n    if (id) {\n      return id\n    }\n  }\n  return null\n}\n\n/**\n * Ensure the session has an active organization when memberships exist.\n *\n * - If `session.session.activeOrganizationId` is already set → return it (no network).\n * - Else list organizations; if empty → `{ activeOrganizationId: null, didSetActiveOrganization: false }`.\n * - Else select an id (custom or first) and call `setActiveOrganization`.\n * - List/set failures invoke `onError` and return unset (never throw).\n */\nexport async function ensureActiveOrganization<TOrganization extends OrganizationLike>(\n  options: EnsureActiveOrganizationOptions<TOrganization>,\n): Promise<EnsureActiveOrganizationResult> {\n  const currentActiveOrganizationId = normalizeOrganizationId(\n    options.session?.session?.activeOrganizationId,\n  )\n\n  if (currentActiveOrganizationId) {\n    return {\n      activeOrganizationId: currentActiveOrganizationId,\n      didSetActiveOrganization: false,\n    }\n  }\n\n  let organizations: readonly TOrganization[]\n  try {\n    organizations = await options.listOrganizations()\n  } catch (error) {\n    options.onError?.(error)\n    return {\n      activeOrganizationId: null,\n      didSetActiveOrganization: false,\n    }\n  }\n\n  if (organizations.length === 0) {\n    return {\n      activeOrganizationId: null,\n      didSetActiveOrganization: false,\n    }\n  }\n\n  const selectedOrganizationId = normalizeOrganizationId(\n    (options.selectOrganizationId ?? defaultSelectOrganizationId)(organizations),\n  )\n\n  if (!selectedOrganizationId) {\n    return {\n      activeOrganizationId: null,\n      didSetActiveOrganization: false,\n    }\n  }\n\n  try {\n    await options.setActiveOrganization(selectedOrganizationId)\n    return {\n      activeOrganizationId: selectedOrganizationId,\n      didSetActiveOrganization: true,\n    }\n  } catch (error) {\n    options.onError?.(error)\n    return {\n      activeOrganizationId: null,\n      didSetActiveOrganization: false,\n    }\n  }\n}\n"]}