{"version":3,"file":"collection-types.mjs","sources":["../../../server/src/controllers/collection-types.ts"],"sourcesContent":["import { isNil, omit } from 'lodash/fp';\n\nimport {\n setCreatorFields,\n async,\n contentTypes,\n errors,\n parseHasPublishedVersionQueryParam,\n hasPublishedVersionBooleanToPublicationFilterMode,\n} from '@strapi/utils';\nimport type { Modules, UID } from '@strapi/types';\n\nimport { getService } from '../utils';\nimport { validateBulkActionInput } from './validation';\nimport { getProhibitedCloningFields, excludeNotCreatableFields } from './utils/clone';\nimport { getDocumentLocaleAndStatus } from './validation/dimensions';\nimport { formatDocumentWithMetadata } from './utils/metadata';\nimport { indexByDocumentId } from './utils/document-status';\nimport { getPopulateForLocalizations, buildDeepPopulate } from '../services/utils/populate';\n\n/**\n * Returns documentIds for (documentId, locale) that have both draft and published,\n * optionally filtered by whether the draft is newer than the published row.\n * Uses strapi.documents only.\n */\nconst getDocumentIdsByDraftPublishRelation = async (\n uid: UID.ContentType,\n opts: {\n locale?: string | string[] | null;\n type: 'modified' | 'unmodified';\n }\n): Promise => {\n const schema = strapi.getModel(uid);\n if (!contentTypes.hasDraftAndPublish(schema)) {\n return [];\n }\n\n const baseParams = {\n fields: ['documentId', 'locale', 'updatedAt'],\n page: 1,\n pageSize: 10000,\n ...(opts.locale != null &&\n opts.locale !== '*' && {\n locale: opts.locale as string,\n }),\n };\n\n const [drafts, published] = await Promise.all([\n strapi.documents(uid).findMany({ ...baseParams, status: 'draft' }),\n strapi.documents(uid).findMany({ ...baseParams, status: 'published' }),\n ]);\n\n const publishedByKey = new Map();\n for (const p of published) {\n const key = `${p.documentId}\\t${String(p?.locale ?? '')}`;\n publishedByKey.set(key, { updatedAt: p.updatedAt as string });\n }\n\n const ids: string[] = [];\n const wantModified = opts.type === 'modified';\n for (const d of drafts) {\n const key = `${d.documentId}\\t${String(d?.locale ?? '')}`;\n const pub = publishedByKey.get(key);\n if (pub) {\n const dUpdated = d?.updatedAt ? new Date(d.updatedAt as string).getTime() : 0;\n const pUpdated = pub?.updatedAt ? new Date(pub.updatedAt).getTime() : 0;\n const isModified = dUpdated > pUpdated;\n if (isModified === wantModified) {\n ids.push(d.documentId as string);\n }\n }\n }\n return [...new Set(ids)];\n};\n\n/** Map from __status filter value to top-level query fields (mirrors client STATUS_PARAMS). */\nconst STATUS_QUERY_FROM_FILTER: Record> = {\n draft: { status: 'draft', publicationFilter: 'never-published-document' },\n published: { status: 'published' },\n 'published-modified': { publicationStatusFilter: 'published-modified' },\n 'published-unmodified': { publicationStatusFilter: 'published-unmodified' },\n};\n\n/**\n * Extracts __status from query.filters.$and into top-level status, publicationFilter,\n * and publicationStatusFilter so list works with either transformed params or raw filter params.\n */\nconst normalizeStatusFromFilters = (query: Record): void => {\n const filters = query.filters as Record | undefined;\n if (!filters?.$and || !Array.isArray(filters.$and)) return;\n\n const remainingFilters: unknown[] = [];\n const statusValues: string[] = [];\n\n for (const filter of filters.$and as Record[]) {\n const eq = (filter?.__status as Record)?.$eq;\n if (eq != null) {\n statusValues.push(String(eq));\n } else {\n remainingFilters.push(filter);\n }\n }\n\n if (statusValues.length === 0) return;\n\n const q = query as Record;\n for (const value of statusValues) {\n const toApply = STATUS_QUERY_FROM_FILTER[value];\n if (toApply) Object.assign(q, toApply);\n }\n\n if (remainingFilters.length > 0) {\n (filters as Record).$and = remainingFilters;\n } else {\n delete q.filters;\n }\n};\n\n/** Returns filters object that merges existing $and with a documentId $in filter. */\nconst mergeDocumentIdFilter = (\n existingFilters: Record | undefined,\n documentIds: string[]\n): Record => {\n const documentIdFilter = {\n documentId: documentIds.length > 0 ? { $in: documentIds } : { $in: [] },\n };\n let existingAnd: unknown[];\n if (existingFilters?.$and && Array.isArray(existingFilters.$and)) {\n existingAnd = existingFilters.$and;\n } else if (existingFilters && Object.keys(existingFilters).length > 0) {\n existingAnd = [existingFilters];\n } else {\n existingAnd = [];\n }\n return { $and: [...existingAnd, documentIdFilter] };\n};\n\ntype Options = Modules.Documents.Params.Pick;\n\n/**\n * Extracts the sort direction for the 'status' field from a sort parameter.\n * Returns 'ASC', 'DESC', or null if status is not being sorted.\n *\n * The sort param can be a string ('status:ASC'), an array (['status:ASC']),\n * or an object ({ status: 'ASC' }).\n */\nconst extractStatusSortOrder = (sort: unknown): 'ASC' | 'DESC' | null => {\n if (!sort) return null;\n\n if (typeof sort === 'string') {\n const match = sort.match(/(?:^|,)\\s*status:(ASC|DESC)\\s*(?:,|$)/i);\n return match ? (match[1].toUpperCase() as 'ASC' | 'DESC') : null;\n }\n\n if (Array.isArray(sort)) {\n for (const item of sort) {\n const result = extractStatusSortOrder(item);\n if (result) return result;\n }\n return null;\n }\n\n if (typeof sort === 'object' && sort !== null && 'status' in sort) {\n const dir = String((sort as Record).status).toUpperCase();\n return dir === 'ASC' || dir === 'DESC' ? dir : null;\n }\n\n return null;\n};\n\n/**\n * Removes the 'status' field from a sort parameter, returning the remainder\n * (or undefined if status was the only sort field).\n */\nconst removeStatusFromSort = (sort: unknown): unknown => {\n if (!sort) return sort;\n\n if (typeof sort === 'string') {\n const cleaned = sort\n .split(',')\n .map((s) => s.trim())\n .filter((s) => !/^status:(ASC|DESC)$/i.test(s))\n .join(',');\n return cleaned || undefined;\n }\n\n if (Array.isArray(sort)) {\n const cleaned = sort.filter((item) => extractStatusSortOrder(item) === null);\n return cleaned.length ? cleaned : undefined;\n }\n\n if (typeof sort === 'object' && sort !== null) {\n const rest = { ...(sort as Record) };\n delete rest.status;\n\n return Object.keys(rest).length ? rest : undefined;\n }\n\n return sort;\n};\n\n/**\n * Create a new document.\n *\n * @param ctx - Koa context\n * @param opts - Options\n * @param opts.populate - Populate options of the returned document.\n * By default documentManager will populate all relations.\n */\nconst createDocument = async (ctx: any, opts?: Options) => {\n const { userAbility, user } = ctx.state;\n const { model } = ctx.params;\n const { body } = ctx.request;\n\n const documentManager = getService('document-manager');\n const permissionChecker = getService('permission-checker').create({ userAbility, model });\n\n if (permissionChecker.cannot.create()) {\n throw new errors.ForbiddenError();\n }\n\n const pickPermittedFields = permissionChecker.sanitizeCreateInput;\n const setCreator = setCreatorFields({ user });\n const sanitizeFn = async.pipe(pickPermittedFields, setCreator as any);\n const sanitizedBody = await sanitizeFn(body);\n\n const { locale, status } = await getDocumentLocaleAndStatus(body, model);\n\n return documentManager.create(model, {\n data: sanitizedBody as any,\n locale,\n status,\n populate: opts?.populate,\n });\n\n // TODO: Revert the creation if create permission conditions are not met\n // if (permissionChecker.cannot.create(document)) {\n // throw new errors.ForbiddenError();\n // }\n};\n\n/**\n * Update a document version.\n * - If the document version exists, it will be updated.\n * - If the document version does not exist, a new document locale will be created.\n * By default documentManager will populate all relations.\n *\n * @param ctx - Koa context\n * @param opts - Options\n * @param opts.populate - Populate options of the returned document\n */\nconst updateDocument = async (ctx: any, opts?: Options) => {\n const { userAbility, user } = ctx.state;\n const { id, model } = ctx.params;\n const { body } = ctx.request;\n\n const documentManager = getService('document-manager');\n const permissionChecker = getService('permission-checker').create({ userAbility, model });\n\n if (permissionChecker.cannot.update()) {\n throw new errors.ForbiddenError();\n }\n\n // Populate necessary fields to check permissions\n const permissionQuery = await permissionChecker.sanitizedQuery.update(ctx.query);\n const populate = await getService('populate-builder')(model)\n .populateFromQuery(permissionQuery)\n .build();\n\n const { locale } = await getDocumentLocaleAndStatus(body, model);\n\n // Load document version to update\n const [documentVersion, documentExists] = await Promise.all([\n documentManager.findOne(id, model, { populate, locale, status: 'draft' }),\n documentManager.exists(model, id),\n ]);\n\n if (!documentExists) {\n throw new errors.NotFoundError();\n }\n\n // If version is not found, but document exists,\n // the intent is to create a new document locale\n if (documentVersion) {\n if (permissionChecker.cannot.update(documentVersion)) {\n throw new errors.ForbiddenError();\n }\n } else if (permissionChecker.cannot.create()) {\n throw new errors.ForbiddenError();\n }\n\n const pickPermittedFields = documentVersion\n ? permissionChecker.sanitizeUpdateInput(documentVersion)\n : permissionChecker.sanitizeCreateInput;\n const setCreator = documentVersion\n ? setCreatorFields({ user, isEdition: true })\n : setCreatorFields({ user });\n const sanitizeFn = async.pipe(pickPermittedFields, setCreator as any);\n const sanitizedBody = await sanitizeFn(body);\n\n const updatedDocument = await documentManager.update(documentVersion?.documentId || id, model, {\n data: sanitizedBody as any,\n populate: opts?.populate,\n locale,\n });\n\n return updatedDocument;\n};\n\nexport default {\n async find(ctx: any) {\n const { userAbility } = ctx.state;\n const { model } = ctx.params;\n const { query } = ctx.request;\n\n // Normalize so status/publicationStatusFilter are set from filters.$and.__status when present\n normalizeStatusFromFilters(query as Record);\n\n const documentMetadata = getService('document-metadata');\n const documentManager = getService('document-manager');\n const permissionChecker = getService('permission-checker').create({ userAbility, model });\n\n if (permissionChecker.cannot.read()) {\n return ctx.forbidden();\n }\n\n // Extract and remove 'status' sort before sanitization/validation, since status\n // is not a real schema attribute and would be rejected by the permission checker.\n // It is re-added after sanitization so the DB layer can handle it via a CASE expression.\n const hasPublicationStatusFilter =\n query.status !== undefined ||\n query.hasPublishedVersion !== undefined ||\n query.publicationStatusFilter !== undefined;\n const rawStatusSortOrder = extractStatusSortOrder(query.sort);\n // Disable status sort when a publication status filter is active — all results share the\n // same status, making the sort a no-op.\n const statusSortOrder = hasPublicationStatusFilter ? null : rawStatusSortOrder;\n // Always strip 'status' from the sort before passing to the document service / permission\n // checker — it is not a real schema attribute and would be rejected by validation.\n const queryWithoutStatusSort = rawStatusSortOrder\n ? { ...query, sort: removeStatusFromSort(query.sort) }\n : query;\n\n const permissionQuery = await permissionChecker.sanitizedQuery.read(queryWithoutStatusSort);\n\n const populate = await getService('populate-builder')(model)\n .populateFromQuery(permissionQuery)\n .populateDeep(1)\n .countRelations({ toOne: false, toMany: true })\n .withPopulateOverride(getPopulateForLocalizations(model))\n .build();\n\n // \"Modified\" is a UI-only filter; not a real document status. Read and strip it\n // so we never pass it to validation or the document service.\n const publicationStatusFilter = query.publicationStatusFilter;\n const queryForValidation = { ...query };\n delete queryForValidation.publicationStatusFilter;\n\n const { locale, status } = await getDocumentLocaleAndStatus(queryForValidation, model);\n\n const paramsForDocumentService = omit(['publicationStatusFilter'], permissionQuery) as Record<\n string,\n unknown\n >;\n let findPageParams: Record = {\n ...paramsForDocumentService,\n populate,\n locale,\n status,\n };\n\n if (query.publicationFilter !== undefined) {\n findPageParams.publicationFilter = query.publicationFilter;\n } else {\n const legacy = parseHasPublishedVersionQueryParam(query.hasPublishedVersion);\n if (legacy !== undefined) {\n findPageParams.publicationFilter =\n hasPublishedVersionBooleanToPublicationFilterMode(legacy);\n }\n }\n\n if (\n publicationStatusFilter === 'published-modified' ||\n publicationStatusFilter === 'published-unmodified'\n ) {\n const type = publicationStatusFilter === 'published-modified' ? 'modified' : 'unmodified';\n const documentIds = await getDocumentIdsByDraftPublishRelation(model, { locale, type });\n findPageParams = {\n ...findPageParams,\n status: 'published',\n filters: mergeDocumentIdFilter(\n paramsForDocumentService.filters as Record | undefined,\n documentIds\n ),\n };\n }\n\n if (statusSortOrder) {\n const s = findPageParams.sort;\n const statusSort = `status:${statusSortOrder}`;\n if (!s) {\n findPageParams.sort = statusSort;\n } else if (Array.isArray(s)) {\n findPageParams.sort = [...s, statusSort];\n } else if (typeof s === 'string') {\n findPageParams.sort = `${s},${statusSort}`;\n } else {\n findPageParams.sort = { ...(s as object), status: statusSortOrder };\n }\n }\n\n const { results: documents, pagination } = await documentManager.findPage(\n findPageParams as Parameters[0],\n model\n );\n\n const hasDraftAndPublish = contentTypes.hasDraftAndPublish(strapi.getModel(model));\n\n const statusByDocumentId = hasDraftAndPublish\n ? indexByDocumentId(await documentMetadata.getManyAvailableStatus(model, documents))\n : new Map();\n\n const setStatus = (document: any) => {\n // Available status of document\n const availableStatuses = statusByDocumentId.get(document.documentId) || [];\n // Compute document version status\n document.status = documentMetadata.getStatus(document, availableStatuses);\n return document;\n };\n\n const results = await async.map(\n documents,\n async.pipe(permissionChecker.sanitizeOutput, setStatus)\n );\n\n ctx.body = {\n results,\n pagination,\n };\n },\n\n async findOne(ctx: any) {\n const { userAbility } = ctx.state;\n const { model, id } = ctx.params;\n\n const documentManager = getService('document-manager');\n const permissionChecker = getService('permission-checker').create({ userAbility, model });\n\n if (permissionChecker.cannot.read()) {\n return ctx.forbidden();\n }\n\n const permissionQuery = await permissionChecker.sanitizedQuery.read(ctx.query);\n\n const populate = await getService('populate-builder')(model)\n .populateFromQuery(permissionQuery)\n .populateDeep(Infinity)\n .countRelations()\n .withPopulateOverride(getPopulateForLocalizations(model))\n .build();\n\n const { locale, status } = await getDocumentLocaleAndStatus(ctx.query, model);\n\n const version = await documentManager.findOne(id, model, {\n populate,\n locale,\n status,\n });\n\n if (!version) {\n // Check if document exists\n const exists = await documentManager.exists(model, id);\n if (!exists) {\n return ctx.notFound();\n }\n\n // If the requested locale doesn't exist, return an empty response\n const { meta } = await formatDocumentWithMetadata(\n permissionChecker,\n model,\n // @ts-expect-error TODO: fix\n { documentId: id, locale, publishedAt: null },\n { availableLocales: true, availableStatus: false }\n );\n\n ctx.body = { data: {}, meta };\n\n return;\n }\n\n // if the user has condition that needs populated content, it's not applied because entity don't have relations populated\n if (permissionChecker.cannot.read(version)) {\n return ctx.forbidden();\n }\n\n // TODO: Count populated relations by permissions\n const sanitizedDocument = await permissionChecker.sanitizeOutput(version);\n ctx.body = await formatDocumentWithMetadata(permissionChecker, model, sanitizedDocument);\n },\n\n async create(ctx: any) {\n const { userAbility } = ctx.state;\n const { model } = ctx.params;\n\n const permissionChecker = getService('permission-checker').create({ userAbility, model });\n\n const [totalEntries, document] = await Promise.all([\n strapi.db.query(model).count(),\n createDocument(ctx),\n ]);\n\n const sanitizedDocument = await permissionChecker.sanitizeOutput(document);\n ctx.status = 201;\n ctx.body = await formatDocumentWithMetadata(permissionChecker, model, sanitizedDocument, {\n // Empty metadata as it's not relevant for a new document\n availableLocales: false,\n availableStatus: false,\n });\n\n if (totalEntries === 0) {\n strapi.telemetry.send('didCreateFirstContentTypeEntry', {\n eventProperties: { model },\n });\n }\n },\n\n async update(ctx: any) {\n const { userAbility } = ctx.state;\n const { model } = ctx.params;\n\n const permissionChecker = getService('permission-checker').create({ userAbility, model });\n\n const updatedVersion = await updateDocument(ctx);\n\n const sanitizedVersion = await permissionChecker.sanitizeOutput(updatedVersion);\n ctx.body = await formatDocumentWithMetadata(permissionChecker, model, sanitizedVersion);\n },\n\n async clone(ctx: any) {\n const { userAbility, user } = ctx.state;\n const { model, sourceId: id } = ctx.params;\n const { body } = ctx.request;\n\n const documentManager = getService('document-manager');\n const permissionChecker = getService('permission-checker').create({ userAbility, model });\n\n if (permissionChecker.cannot.create()) {\n return ctx.forbidden();\n }\n\n const permissionQuery = await permissionChecker.sanitizedQuery.create(ctx.query);\n const populate = await getService('populate-builder')(model)\n .populateFromQuery(permissionQuery)\n .build();\n\n const { locale } = await getDocumentLocaleAndStatus(body, model);\n const document = await documentManager.findOne(id, model, {\n populate,\n locale,\n status: 'draft',\n });\n\n if (!document) {\n return ctx.notFound();\n }\n\n const pickPermittedFields = permissionChecker.sanitizeCreateInput;\n const setCreator = setCreatorFields({ user });\n const excludeNotCreatable = excludeNotCreatableFields(model, permissionChecker);\n const sanitizeFn = async.pipe(pickPermittedFields, setCreator as any, excludeNotCreatable);\n const sanitizedBody = await sanitizeFn(body);\n\n const clonedDocument = await documentManager.clone(document.documentId, sanitizedBody, model);\n\n const sanitizedDocument = await permissionChecker.sanitizeOutput(clonedDocument);\n ctx.body = await formatDocumentWithMetadata(permissionChecker, model, sanitizedDocument, {\n // Empty metadata as it's not relevant for a new document\n availableLocales: false,\n availableStatus: false,\n });\n },\n\n async autoClone(ctx: any) {\n const { model } = ctx.params;\n\n // Check if the model has fields that prevent auto cloning\n const prohibitedFields = getProhibitedCloningFields(model);\n\n if (prohibitedFields.length > 0) {\n return ctx.badRequest(\n 'Entity could not be cloned as it has unique and/or relational fields. ' +\n 'Please edit those fields manually and save to complete the cloning.',\n {\n prohibitedFields,\n }\n );\n }\n\n await this.clone(ctx);\n },\n\n async delete(ctx: any) {\n const { userAbility } = ctx.state;\n const { id, model } = ctx.params;\n\n const documentManager = getService('document-manager');\n const permissionChecker = getService('permission-checker').create({ userAbility, model });\n\n if (permissionChecker.cannot.delete()) {\n return ctx.forbidden();\n }\n\n const permissionQuery = await permissionChecker.sanitizedQuery.delete(ctx.query);\n const populate = await getService('populate-builder')(model)\n .populateFromQuery(permissionQuery)\n .build();\n\n const { locale } = await getDocumentLocaleAndStatus(ctx.query, model);\n\n // Find locales to delete\n const documentLocales = await documentManager.findLocales(id, model, { populate, locale });\n\n if (documentLocales.length === 0) {\n return ctx.notFound();\n }\n\n for (const document of documentLocales) {\n if (permissionChecker.cannot.delete(document)) {\n return ctx.forbidden();\n }\n }\n\n const result = await documentManager.delete(id, model, { locale });\n\n ctx.body = await permissionChecker.sanitizeOutput(result);\n },\n\n /**\n * Publish a document version.\n * Supports creating/saving a document and publishing it in one request.\n */\n async publish(ctx: any) {\n const { userAbility } = ctx.state;\n // If id does not exist, the document has to be created\n const { id, model } = ctx.params;\n const { body } = ctx.request;\n\n const documentManager = getService('document-manager');\n const permissionChecker = getService('permission-checker').create({ userAbility, model });\n\n if (permissionChecker.cannot.publish()) {\n return ctx.forbidden();\n }\n\n const publishedDocument = await strapi.db.transaction(async () => {\n // Create or update document\n const permissionQuery = await permissionChecker.sanitizedQuery.publish(ctx.query);\n\n const populate = await getService('populate-builder')(model)\n .populateFromQuery(permissionQuery)\n .populateDeep(Infinity)\n .countRelations()\n .withPopulateOverride(getPopulateForLocalizations(model))\n .build();\n\n let document: any;\n\n const { locale } = await getDocumentLocaleAndStatus(body, model);\n\n /**\n * Publish can be called on two scenarios:\n * 1. Create a new document and publish it in one request\n * 2. Update an existing document and publish it in one request\n *\n * Based on user permissions:\n * 1. User cannot create a document, but can publish\n * Action will be forbidden as user cannot create a document\n * 2. User can update and publish a document\n * Action will be allowed, but document will not be updated, only published with the latest draft\n */\n const isCreate = isNil(id);\n if (isCreate) {\n if (permissionChecker.cannot.create()) {\n throw new errors.ForbiddenError();\n }\n\n document = await createDocument(ctx, { populate });\n }\n\n const isUpdate = !isCreate;\n if (isUpdate) {\n // check if the document exists\n const documentExists = await documentManager.exists(model, id);\n\n if (!documentExists) {\n throw new errors.NotFoundError('Document not found');\n }\n\n // check the document version\n document = await documentManager.findOne(id!, model, { populate, locale });\n\n if (!document) {\n // update and publish the new version\n if (\n permissionChecker.cannot.create({ locale }) ||\n permissionChecker.cannot.publish({ locale })\n ) {\n throw new errors.ForbiddenError();\n }\n document = await updateDocument(ctx);\n } else if (permissionChecker.can.update(document)) {\n await updateDocument(ctx);\n }\n }\n\n if (permissionChecker.cannot.publish(document)) {\n throw new errors.ForbiddenError();\n }\n\n const publishResult = await documentManager.publish(document.documentId, model, {\n locale,\n // TODO: Allow setting creator fields on publish\n // data: setCreatorFields({ user, isEdition: true })({}),\n });\n\n if (!publishResult || publishResult.length === 0) {\n throw new errors.NotFoundError('Document not found or already published.');\n }\n\n return publishResult[0];\n });\n\n const sanitizedDocument = await permissionChecker.sanitizeOutput(publishedDocument);\n ctx.body = await formatDocumentWithMetadata(permissionChecker, model, sanitizedDocument);\n },\n\n async bulkFindForValidation(ctx: any) {\n const { userAbility } = ctx.state;\n const { model } = ctx.params;\n const { documentIds, locale, sort } = ctx.request.body;\n\n await validateBulkActionInput(ctx.request.body);\n\n const permissionChecker = getService('permission-checker').create({ userAbility, model });\n\n if (permissionChecker.cannot.read()) {\n return ctx.forbidden();\n }\n\n const populate = await buildDeepPopulate(model as UID.CollectionType);\n\n const documents = await strapi.documents(model as UID.CollectionType).findMany({\n populate,\n filters: { documentId: { $in: documentIds } } as any,\n locale,\n sort,\n status: 'draft',\n });\n\n const results = await Promise.all(documents.map(permissionChecker.sanitizeOutput));\n\n ctx.body = { results };\n },\n\n async bulkPublish(ctx: any) {\n const { userAbility } = ctx.state;\n const { model } = ctx.params;\n const { body } = ctx.request;\n const { documentIds } = body;\n\n await validateBulkActionInput(body);\n\n const documentManager = getService('document-manager');\n const permissionChecker = getService('permission-checker').create({ userAbility, model });\n\n if (permissionChecker.cannot.publish()) {\n return ctx.forbidden();\n }\n\n const permissionQuery = await permissionChecker.sanitizedQuery.publish(ctx.query);\n const populate = await getService('populate-builder')(model)\n .populateFromQuery(permissionQuery)\n .populateDeep(Infinity)\n .countRelations()\n .build();\n\n const { locale } = await getDocumentLocaleAndStatus(body, model, {\n allowMultipleLocales: true,\n });\n\n const entities = await documentManager.findLocales(documentIds, model, {\n populate,\n locale,\n isPublished: false,\n });\n\n for (const entity of entities) {\n if (!entity) {\n return ctx.notFound();\n }\n\n if (permissionChecker.cannot.publish(entity)) {\n return ctx.forbidden();\n }\n }\n\n const count = await documentManager.publishMany(model, documentIds, locale);\n ctx.body = { count };\n },\n\n async bulkUnpublish(ctx: any) {\n const { userAbility } = ctx.state;\n const { model } = ctx.params;\n const { body } = ctx.request;\n const { documentIds } = body;\n\n await validateBulkActionInput(body);\n\n const documentManager = getService('document-manager');\n const permissionChecker = getService('permission-checker').create({ userAbility, model });\n\n if (permissionChecker.cannot.unpublish()) {\n return ctx.forbidden();\n }\n\n const { locale } = await getDocumentLocaleAndStatus(body, model, {\n allowMultipleLocales: true,\n });\n\n const entities = await documentManager.findLocales(documentIds, model, {\n locale,\n isPublished: true,\n });\n\n for (const entity of entities) {\n if (!entity) {\n return ctx.notFound();\n }\n\n if (permissionChecker.cannot.publish(entity)) {\n return ctx.forbidden();\n }\n }\n\n const entitiesIds = entities.map((document) => document.documentId);\n\n const { count } = await documentManager.unpublishMany(entitiesIds, model, { locale });\n\n ctx.body = { count };\n },\n\n async unpublish(ctx: any) {\n const { userAbility } = ctx.state;\n const { id, model } = ctx.params;\n const {\n body: { discardDraft, ...body },\n } = ctx.request;\n\n const documentManager = getService('document-manager');\n const permissionChecker = getService('permission-checker').create({ userAbility, model });\n\n if (permissionChecker.cannot.unpublish()) {\n return ctx.forbidden();\n }\n\n if (discardDraft && permissionChecker.cannot.discard()) {\n return ctx.forbidden();\n }\n\n const permissionQuery = await permissionChecker.sanitizedQuery.unpublish(ctx.query);\n\n const populate = await getService('populate-builder')(model)\n .populateFromQuery(permissionQuery)\n .build();\n\n // TODO allow multiple locales for bulk locale unpublish\n const { locale } = await getDocumentLocaleAndStatus(body, model);\n const document = await documentManager.findOne(id, model, {\n populate,\n locale,\n status: 'published',\n });\n\n if (!document) {\n throw new errors.NotFoundError();\n }\n\n if (permissionChecker.cannot.unpublish(document)) {\n throw new errors.ForbiddenError();\n }\n\n if (discardDraft && permissionChecker.cannot.discard(document)) {\n throw new errors.ForbiddenError();\n }\n\n await strapi.db.transaction(async () => {\n if (discardDraft) {\n await documentManager.discardDraft(document.documentId, model, { locale });\n }\n\n ctx.body = await async.pipe(\n (document) => documentManager.unpublish(document.documentId, model, { locale }),\n permissionChecker.sanitizeOutput,\n (document) => formatDocumentWithMetadata(permissionChecker, model, document)\n )(document);\n });\n },\n\n async discard(ctx: any) {\n const { userAbility } = ctx.state;\n const { id, model } = ctx.params;\n const { body } = ctx.request;\n\n const documentManager = getService('document-manager');\n const permissionChecker = getService('permission-checker').create({ userAbility, model });\n\n if (permissionChecker.cannot.discard()) {\n return ctx.forbidden();\n }\n\n const permissionQuery = await permissionChecker.sanitizedQuery.discard(ctx.query);\n const populate = await getService('populate-builder')(model)\n .populateFromQuery(permissionQuery)\n .build();\n\n const { locale } = await getDocumentLocaleAndStatus(body, model);\n const document = await documentManager.findOne(id, model, {\n populate,\n locale,\n status: 'published',\n });\n\n // Can not discard a document that is not published\n if (!document) {\n return ctx.notFound();\n }\n\n if (permissionChecker.cannot.discard(document)) {\n return ctx.forbidden();\n }\n\n ctx.body = await async.pipe(\n (document) => documentManager.discardDraft(document.documentId, model, { locale }),\n permissionChecker.sanitizeOutput,\n (document) => formatDocumentWithMetadata(permissionChecker, model, document)\n )(document);\n },\n\n async bulkDelete(ctx: any) {\n const { userAbility } = ctx.state;\n const { model } = ctx.params;\n const { query, body } = ctx.request;\n const { documentIds } = body;\n\n await validateBulkActionInput(body);\n\n const documentManager = getService('document-manager');\n const permissionChecker = getService('permission-checker').create({ userAbility, model });\n\n if (permissionChecker.cannot.delete()) {\n return ctx.forbidden();\n }\n\n const permissionQuery = await permissionChecker.sanitizedQuery.delete(query);\n const populate = await getService('populate-builder')(model)\n .populateFromQuery(permissionQuery)\n .build();\n\n const { locale } = await getDocumentLocaleAndStatus(body, model);\n\n const documentLocales = await documentManager.findLocales(documentIds, model, {\n populate,\n locale,\n });\n\n if (documentLocales.length === 0) {\n return ctx.notFound();\n }\n\n for (const document of documentLocales) {\n if (permissionChecker.cannot.delete(document)) {\n return ctx.forbidden();\n }\n }\n\n // We filter out documentsIds that maybe doesn't exist in a specific locale.\n // With draft & publish, findLocales returns a row per publication state, so the\n // same documentId can appear twice (draft + published). Deduplicate to avoid\n // deleting (and running document service middleware for) the same document twice.\n const localeDocumentsIds = [...new Set(documentLocales.map((document) => document.documentId))];\n\n const { count } = await documentManager.deleteMany(localeDocumentsIds, model, { locale });\n\n ctx.body = { count };\n },\n\n async countDraftRelations(ctx: any) {\n const { userAbility } = ctx.state;\n const { model, id } = ctx.params;\n\n const documentManager = getService('document-manager');\n const permissionChecker = getService('permission-checker').create({ userAbility, model });\n\n if (permissionChecker.cannot.read()) {\n return ctx.forbidden();\n }\n\n const { locale, status } = await getDocumentLocaleAndStatus(ctx.query, model);\n\n if (permissionChecker.requiresEntity.read()) {\n // Only load what we need for access checks\n const permissionQuery = await permissionChecker.sanitizedQuery.read(ctx.query);\n\n const populate = await getService('populate-builder')(model)\n .populateFromQuery(permissionQuery)\n .build();\n\n const entity = await documentManager.findOne(id, model, {\n locale,\n status,\n populate,\n });\n\n if (!entity) {\n return ctx.notFound();\n }\n\n if (permissionChecker.cannot.read(entity)) {\n return ctx.forbidden();\n }\n }\n\n const counts = await documentManager.countDraftRelations(id, model, locale);\n\n return {\n data: counts,\n };\n },\n\n async countManyEntriesDraftRelations(ctx: any) {\n const { userAbility } = ctx.state;\n const ids = ctx.request.query.documentIds as string[];\n const locale = ctx.request.query.locale as string[];\n const { model } = ctx.params;\n\n const documentManager = getService('document-manager');\n const permissionChecker = getService('permission-checker').create({ userAbility, model });\n\n if (permissionChecker.cannot.read()) {\n return ctx.forbidden();\n }\n\n const count = await strapi.db.query(model).count({\n where: { documentId: ids },\n });\n\n if (count === 0) {\n return ctx.notFound();\n }\n\n const number = await documentManager.countManyEntriesDraftRelations(ids, model, locale);\n\n return {\n data: number,\n };\n },\n};\n"],"names":["getDocumentIdsByDraftPublishRelation","uid","opts","schema","strapi","getModel","contentTypes","hasDraftAndPublish","baseParams","fields","page","pageSize","locale","drafts","published","Promise","all","documents","findMany","status","publishedByKey","Map","p","key","documentId","String","set","updatedAt","ids","wantModified","type","d","pub","get","dUpdated","Date","getTime","pUpdated","isModified","push","Set","STATUS_QUERY_FROM_FILTER","draft","publicationFilter","publicationStatusFilter","normalizeStatusFromFilters","query","filters","$and","Array","isArray","remainingFilters","statusValues","filter","eq","__status","$eq","length","q","value","toApply","Object","assign","mergeDocumentIdFilter","existingFilters","documentIds","documentIdFilter","$in","existingAnd","keys","extractStatusSortOrder","sort","match","toUpperCase","item","result","dir","removeStatusFromSort","cleaned","split","map","s","trim","test","join","undefined","rest","createDocument","ctx","userAbility","user","state","model","params","body","request","documentManager","getService","permissionChecker","create","cannot","errors","ForbiddenError","pickPermittedFields","sanitizeCreateInput","setCreator","setCreatorFields","sanitizeFn","async","pipe","sanitizedBody","getDocumentLocaleAndStatus","data","populate","updateDocument","id","update","permissionQuery","sanitizedQuery","populateFromQuery","build","documentVersion","documentExists","findOne","exists","NotFoundError","sanitizeUpdateInput","isEdition","updatedDocument","find","documentMetadata","read","forbidden","hasPublicationStatusFilter","hasPublishedVersion","rawStatusSortOrder","statusSortOrder","queryWithoutStatusSort","populateDeep","countRelations","toOne","toMany","withPopulateOverride","getPopulateForLocalizations","queryForValidation","paramsForDocumentService","omit","findPageParams","legacy","parseHasPublishedVersionQueryParam","hasPublishedVersionBooleanToPublicationFilterMode","statusSort","results","pagination","findPage","statusByDocumentId","indexByDocumentId","getManyAvailableStatus","setStatus","document","availableStatuses","getStatus","sanitizeOutput","Infinity","version","notFound","meta","formatDocumentWithMetadata","publishedAt","availableLocales","availableStatus","sanitizedDocument","totalEntries","db","count","telemetry","send","eventProperties","updatedVersion","sanitizedVersion","clone","sourceId","excludeNotCreatable","excludeNotCreatableFields","clonedDocument","autoClone","prohibitedFields","getProhibitedCloningFields","badRequest","delete","documentLocales","findLocales","publish","publishedDocument","transaction","isCreate","isNil","isUpdate","can","publishResult","bulkFindForValidation","validateBulkActionInput","buildDeepPopulate","bulkPublish","allowMultipleLocales","entities","isPublished","entity","publishMany","bulkUnpublish","unpublish","entitiesIds","unpublishMany","discardDraft","discard","bulkDelete","localeDocumentsIds","deleteMany","countDraftRelations","requiresEntity","counts","countManyEntriesDraftRelations","where","number"],"mappings":";;;;;;;;;;AAoBA;;;;IAKA,MAAMA,oCAAAA,GAAuC,OAC3CC,GAAAA,EACAC,IAAAA,GAAAA;IAKA,MAAMC,MAAAA,GAASC,MAAAA,CAAOC,QAAQ,CAACJ,GAAAA,CAAAA;AAC/B,IAAA,IAAI,CAACK,YAAAA,CAAaC,kBAAkB,CAACJ,MAAAA,CAAAA,EAAS;AAC5C,QAAA,OAAO,EAAE;AACX,IAAA;AAEA,IAAA,MAAMK,UAAAA,GAAa;QACjBC,MAAAA,EAAQ;AAAC,YAAA,YAAA;AAAc,YAAA,QAAA;AAAU,YAAA;AAAY,SAAA;QAC7CC,IAAAA,EAAM,CAAA;QACNC,QAAAA,EAAU,KAAA;AACV,QAAA,GAAIT,KAAKU,MAAM,IAAI,QACjBV,IAAAA,CAAKU,MAAM,KAAK,GAAA,IAAO;AACrBA,YAAAA,MAAAA,EAAQV,KAAKU;;AAEnB,KAAA;AAEA,IAAA,MAAM,CAACC,MAAAA,EAAQC,SAAAA,CAAU,GAAG,MAAMC,OAAAA,CAAQC,GAAG,CAAC;AAC5CZ,QAAAA,MAAAA,CAAOa,SAAS,CAAChB,GAAAA,CAAAA,CAAKiB,QAAQ,CAAC;AAAE,YAAA,GAAGV,UAAU;YAAEW,MAAAA,EAAQ;AAAQ,SAAA,CAAA;AAChEf,QAAAA,MAAAA,CAAOa,SAAS,CAAChB,GAAAA,CAAAA,CAAKiB,QAAQ,CAAC;AAAE,YAAA,GAAGV,UAAU;YAAEW,MAAAA,EAAQ;AAAY,SAAA;AACrE,KAAA,CAAA;AAED,IAAA,MAAMC,iBAAiB,IAAIC,GAAAA,EAAAA;IAC3B,KAAK,MAAMC,KAAKR,SAAAA,CAAW;QACzB,MAAMS,GAAAA,GAAM,CAAA,EAAGD,CAAAA,CAAEE,UAAU,CAAC,EAAE,EAAEC,MAAAA,CAAOH,CAAAA,EAAGV,MAAAA,IAAU,EAAA,CAAA,CAAA,CAAK;QACzDQ,cAAAA,CAAeM,GAAG,CAACH,GAAAA,EAAK;AAAEI,YAAAA,SAAAA,EAAWL,EAAEK;AAAoB,SAAA,CAAA;AAC7D,IAAA;AAEA,IAAA,MAAMC,MAAgB,EAAE;IACxB,MAAMC,YAAAA,GAAe3B,IAAAA,CAAK4B,IAAI,KAAK,UAAA;IACnC,KAAK,MAAMC,KAAKlB,MAAAA,CAAQ;QACtB,MAAMU,GAAAA,GAAM,CAAA,EAAGQ,CAAAA,CAAEP,UAAU,CAAC,EAAE,EAAEC,MAAAA,CAAOM,CAAAA,EAAGnB,MAAAA,IAAU,EAAA,CAAA,CAAA,CAAK;QACzD,MAAMoB,GAAAA,GAAMZ,cAAAA,CAAea,GAAG,CAACV,GAAAA,CAAAA;AAC/B,QAAA,IAAIS,GAAAA,EAAK;YACP,MAAME,QAAAA,GAAWH,GAAGJ,SAAAA,GAAY,IAAIQ,KAAKJ,CAAAA,CAAEJ,SAAS,CAAA,CAAYS,OAAO,EAAA,GAAK,CAAA;YAC5E,MAAMC,QAAAA,GAAWL,KAAKL,SAAAA,GAAY,IAAIQ,KAAKH,GAAAA,CAAIL,SAAS,CAAA,CAAES,OAAO,EAAA,GAAK,CAAA;AACtE,YAAA,MAAME,aAAaJ,QAAAA,GAAWG,QAAAA;AAC9B,YAAA,IAAIC,eAAeT,YAAAA,EAAc;gBAC/BD,GAAAA,CAAIW,IAAI,CAACR,CAAAA,CAAEP,UAAU,CAAA;AACvB,YAAA;AACF,QAAA;AACF,IAAA;IACA,OAAO;AAAI,QAAA,GAAA,IAAIgB,GAAAA,CAAIZ,GAAAA;AAAK,KAAA;AAC1B,CAAA;AAEA,gGACA,MAAMa,wBAAAA,GAAmE;IACvEC,KAAAA,EAAO;QAAEvB,MAAAA,EAAQ,OAAA;QAASwB,iBAAAA,EAAmB;AAA2B,KAAA;IACxE7B,SAAAA,EAAW;QAAEK,MAAAA,EAAQ;AAAY,KAAA;IACjC,oBAAA,EAAsB;QAAEyB,uBAAAA,EAAyB;AAAqB,KAAA;IACtE,sBAAA,EAAwB;QAAEA,uBAAAA,EAAyB;AAAuB;AAC5E,CAAA;AAEA;;;IAIA,MAAMC,6BAA6B,CAACC,KAAAA,GAAAA;IAClC,MAAMC,OAAAA,GAAUD,MAAMC,OAAO;IAC7B,IAAI,CAACA,SAASC,IAAAA,IAAQ,CAACC,MAAMC,OAAO,CAACH,OAAAA,CAAQC,IAAI,CAAA,EAAG;AAEpD,IAAA,MAAMG,mBAA8B,EAAE;AACtC,IAAA,MAAMC,eAAyB,EAAE;AAEjC,IAAA,KAAK,MAAMC,MAAAA,IAAUN,OAAAA,CAAQC,IAAI,CAA+B;QAC9D,MAAMM,EAAAA,GAAMD,QAAQE,QAAAA,EAAsCC,GAAAA;AAC1D,QAAA,IAAIF,MAAM,IAAA,EAAM;YACdF,YAAAA,CAAab,IAAI,CAACd,MAAAA,CAAO6B,EAAAA,CAAAA,CAAAA;QAC3B,CAAA,MAAO;AACLH,YAAAA,gBAAAA,CAAiBZ,IAAI,CAACc,MAAAA,CAAAA;AACxB,QAAA;AACF,IAAA;IAEA,IAAID,YAAAA,CAAaK,MAAM,KAAK,CAAA,EAAG;AAE/B,IAAA,MAAMC,CAAAA,GAAIZ,KAAAA;IACV,KAAK,MAAMa,SAASP,YAAAA,CAAc;QAChC,MAAMQ,OAAAA,GAAUnB,wBAAwB,CAACkB,KAAAA,CAAM;AAC/C,QAAA,IAAIC,OAAAA,EAASC,MAAAA,CAAOC,MAAM,CAACJ,CAAAA,EAAGE,OAAAA,CAAAA;AAChC,IAAA;IAEA,IAAIT,gBAAAA,CAAiBM,MAAM,GAAG,CAAA,EAAG;AAC9BV,QAAAA,OAAAA,CAAoCC,IAAI,GAAGG,gBAAAA;IAC9C,CAAA,MAAO;AACL,QAAA,OAAOO,EAAEX,OAAO;AAClB,IAAA;AACF,CAAA;AAEA,sFACA,MAAMgB,qBAAAA,GAAwB,CAC5BC,eAAAA,EACAC,WAAAA,GAAAA;AAEA,IAAA,MAAMC,gBAAAA,GAAmB;QACvB1C,UAAAA,EAAYyC,WAAAA,CAAYR,MAAM,GAAG,CAAA,GAAI;YAAEU,GAAAA,EAAKF;SAAY,GAAI;AAAEE,YAAAA,GAAAA,EAAK;AAAG;AACxE,KAAA;IACA,IAAIC,WAAAA;AACJ,IAAA,IAAIJ,iBAAiBhB,IAAAA,IAAQC,KAAAA,CAAMC,OAAO,CAACc,eAAAA,CAAgBhB,IAAI,CAAA,EAAG;AAChEoB,QAAAA,WAAAA,GAAcJ,gBAAgBhB,IAAI;IACpC,CAAA,MAAO,IAAIgB,mBAAmBH,MAAAA,CAAOQ,IAAI,CAACL,eAAAA,CAAAA,CAAiBP,MAAM,GAAG,CAAA,EAAG;QACrEW,WAAAA,GAAc;AAACJ,YAAAA;AAAgB,SAAA;IACjC,CAAA,MAAO;AACLI,QAAAA,WAAAA,GAAc,EAAE;AAClB,IAAA;IACA,OAAO;QAAEpB,IAAAA,EAAM;AAAIoB,YAAAA,GAAAA,WAAAA;AAAaF,YAAAA;AAAiB;AAAC,KAAA;AACpD,CAAA;AAIA;;;;;;IAOA,MAAMI,yBAAyB,CAACC,IAAAA,GAAAA;IAC9B,IAAI,CAACA,MAAM,OAAO,IAAA;IAElB,IAAI,OAAOA,SAAS,QAAA,EAAU;QAC5B,MAAMC,KAAAA,GAAQD,IAAAA,CAAKC,KAAK,CAAC,wCAAA,CAAA;AACzB,QAAA,OAAOA,QAASA,KAAK,CAAC,CAAA,CAAE,CAACC,WAAW,EAAA,GAAwB,IAAA;AAC9D,IAAA;IAEA,IAAIxB,KAAAA,CAAMC,OAAO,CAACqB,IAAAA,CAAAA,EAAO;QACvB,KAAK,MAAMG,QAAQH,IAAAA,CAAM;AACvB,YAAA,MAAMI,SAASL,sBAAAA,CAAuBI,IAAAA,CAAAA;AACtC,YAAA,IAAIC,QAAQ,OAAOA,MAAAA;AACrB,QAAA;QACA,OAAO,IAAA;AACT,IAAA;AAEA,IAAA,IAAI,OAAOJ,IAAAA,KAAS,QAAA,IAAYA,IAAAA,KAAS,IAAA,IAAQ,YAAYA,IAAAA,EAAM;AACjE,QAAA,MAAMK,MAAMnD,MAAAA,CAAQ8C,IAAAA,CAAiCpD,MAAM,EAAEsD,WAAW,EAAA;AACxE,QAAA,OAAOG,GAAAA,KAAQ,KAAA,IAASA,GAAAA,KAAQ,MAAA,GAASA,GAAAA,GAAM,IAAA;AACjD,IAAA;IAEA,OAAO,IAAA;AACT,CAAA;AAEA;;;IAIA,MAAMC,uBAAuB,CAACN,IAAAA,GAAAA;IAC5B,IAAI,CAACA,MAAM,OAAOA,IAAAA;IAElB,IAAI,OAAOA,SAAS,QAAA,EAAU;QAC5B,MAAMO,OAAAA,GAAUP,KACbQ,KAAK,CAAC,KACNC,GAAG,CAAC,CAACC,CAAAA,GAAMA,CAAAA,CAAEC,IAAI,IACjB7B,MAAM,CAAC,CAAC4B,CAAAA,GAAM,CAAC,uBAAuBE,IAAI,CAACF,CAAAA,CAAAA,CAAAA,CAC3CG,IAAI,CAAC,GAAA,CAAA;AACR,QAAA,OAAON,OAAAA,IAAWO,SAAAA;AACpB,IAAA;IAEA,IAAIpC,KAAAA,CAAMC,OAAO,CAACqB,IAAAA,CAAAA,EAAO;AACvB,QAAA,MAAMO,UAAUP,IAAAA,CAAKlB,MAAM,CAAC,CAACqB,IAAAA,GAASJ,uBAAuBI,IAAAA,CAAAA,KAAU,IAAA,CAAA;QACvE,OAAOI,OAAAA,CAAQrB,MAAM,GAAGqB,OAAAA,GAAUO,SAAAA;AACpC,IAAA;AAEA,IAAA,IAAI,OAAOd,IAAAA,KAAS,QAAA,IAAYA,IAAAA,KAAS,IAAA,EAAM;AAC7C,QAAA,MAAMe,IAAAA,GAAO;AAAE,YAAA,GAAIf;AAAiC,SAAA;AACpD,QAAA,OAAOe,KAAKnE,MAAM;AAElB,QAAA,OAAO0C,OAAOQ,IAAI,CAACiB,IAAAA,CAAAA,CAAM7B,MAAM,GAAG6B,IAAAA,GAAOD,SAAAA;AAC3C,IAAA;IAEA,OAAOd,IAAAA;AACT,CAAA;AAEA;;;;;;;IAQA,MAAMgB,cAAAA,GAAiB,OAAOC,GAAAA,EAAUtF,IAAAA,GAAAA;AACtC,IAAA,MAAM,EAAEuF,WAAW,EAAEC,IAAI,EAAE,GAAGF,IAAIG,KAAK;AACvC,IAAA,MAAM,EAAEC,KAAK,EAAE,GAAGJ,IAAIK,MAAM;AAC5B,IAAA,MAAM,EAAEC,IAAI,EAAE,GAAGN,IAAIO,OAAO;AAE5B,IAAA,MAAMC,kBAAkBC,UAAAA,CAAW,kBAAA,CAAA;AACnC,IAAA,MAAMC,iBAAAA,GAAoBD,UAAAA,CAAW,oBAAA,CAAA,CAAsBE,MAAM,CAAC;AAAEV,QAAAA,WAAAA;AAAaG,QAAAA;AAAM,KAAA,CAAA;AAEvF,IAAA,IAAIM,iBAAAA,CAAkBE,MAAM,CAACD,MAAM,EAAA,EAAI;QACrC,MAAM,IAAIE,OAAOC,cAAc,EAAA;AACjC,IAAA;IAEA,MAAMC,mBAAAA,GAAsBL,kBAAkBM,mBAAmB;AACjE,IAAA,MAAMC,aAAaC,gBAAAA,CAAiB;AAAEhB,QAAAA;AAAK,KAAA,CAAA;AAC3C,IAAA,MAAMiB,UAAAA,GAAaC,KAAAA,CAAMC,IAAI,CAACN,mBAAAA,EAAqBE,UAAAA,CAAAA;IACnD,MAAMK,aAAAA,GAAgB,MAAMH,UAAAA,CAAWb,IAAAA,CAAAA;IAEvC,MAAM,EAAElF,MAAM,EAAEO,MAAM,EAAE,GAAG,MAAM4F,2BAA2BjB,IAAAA,EAAMF,KAAAA,CAAAA;IAElE,OAAOI,eAAAA,CAAgBG,MAAM,CAACP,KAAAA,EAAO;QACnCoB,IAAAA,EAAMF,aAAAA;AACNlG,QAAAA,MAAAA;AACAO,QAAAA,MAAAA;AACA8F,QAAAA,QAAAA,EAAU/G,IAAAA,EAAM+G;AAClB,KAAA,CAAA;AAEA;AACA;AACA;AACA;AACF,CAAA;AAEA;;;;;;;;;IAUA,MAAMC,cAAAA,GAAiB,OAAO1B,GAAAA,EAAUtF,IAAAA,GAAAA;AACtC,IAAA,MAAM,EAAEuF,WAAW,EAAEC,IAAI,EAAE,GAAGF,IAAIG,KAAK;AACvC,IAAA,MAAM,EAAEwB,EAAE,EAAEvB,KAAK,EAAE,GAAGJ,IAAIK,MAAM;AAChC,IAAA,MAAM,EAAEC,IAAI,EAAE,GAAGN,IAAIO,OAAO;AAE5B,IAAA,MAAMC,kBAAkBC,UAAAA,CAAW,kBAAA,CAAA;AACnC,IAAA,MAAMC,iBAAAA,GAAoBD,UAAAA,CAAW,oBAAA,CAAA,CAAsBE,MAAM,CAAC;AAAEV,QAAAA,WAAAA;AAAaG,QAAAA;AAAM,KAAA,CAAA;AAEvF,IAAA,IAAIM,iBAAAA,CAAkBE,MAAM,CAACgB,MAAM,EAAA,EAAI;QACrC,MAAM,IAAIf,OAAOC,cAAc,EAAA;AACjC,IAAA;;IAGA,MAAMe,eAAAA,GAAkB,MAAMnB,iBAAAA,CAAkBoB,cAAc,CAACF,MAAM,CAAC5B,IAAI1C,KAAK,CAAA;IAC/E,MAAMmE,QAAAA,GAAW,MAAMhB,UAAAA,CAAW,kBAAA,CAAA,CAAoBL,OACnD2B,iBAAiB,CAACF,iBAClBG,KAAK,EAAA;AAER,IAAA,MAAM,EAAE5G,MAAM,EAAE,GAAG,MAAMmG,2BAA2BjB,IAAAA,EAAMF,KAAAA,CAAAA;;AAG1D,IAAA,MAAM,CAAC6B,eAAAA,EAAiBC,cAAAA,CAAe,GAAG,MAAM3G,OAAAA,CAAQC,GAAG,CAAC;QAC1DgF,eAAAA,CAAgB2B,OAAO,CAACR,EAAAA,EAAIvB,KAAAA,EAAO;AAAEqB,YAAAA,QAAAA;AAAUrG,YAAAA,MAAAA;YAAQO,MAAAA,EAAQ;AAAQ,SAAA,CAAA;QACvE6E,eAAAA,CAAgB4B,MAAM,CAAChC,KAAAA,EAAOuB,EAAAA;AAC/B,KAAA,CAAA;AAED,IAAA,IAAI,CAACO,cAAAA,EAAgB;QACnB,MAAM,IAAIrB,OAAOwB,aAAa,EAAA;AAChC,IAAA;;;AAIA,IAAA,IAAIJ,eAAAA,EAAiB;AACnB,QAAA,IAAIvB,iBAAAA,CAAkBE,MAAM,CAACgB,MAAM,CAACK,eAAAA,CAAAA,EAAkB;YACpD,MAAM,IAAIpB,OAAOC,cAAc,EAAA;AACjC,QAAA;AACF,IAAA,CAAA,MAAO,IAAIJ,iBAAAA,CAAkBE,MAAM,CAACD,MAAM,EAAA,EAAI;QAC5C,MAAM,IAAIE,OAAOC,cAAc,EAAA;AACjC,IAAA;AAEA,IAAA,MAAMC,sBAAsBkB,eAAAA,GACxBvB,iBAAAA,CAAkB4B,mBAAmB,CAACL,eAAAA,CAAAA,GACtCvB,kBAAkBM,mBAAmB;IACzC,MAAMC,UAAAA,GAAagB,kBACff,gBAAAA,CAAiB;AAAEhB,QAAAA,IAAAA;QAAMqC,SAAAA,EAAW;AAAK,KAAA,CAAA,GACzCrB,gBAAAA,CAAiB;AAAEhB,QAAAA;AAAK,KAAA,CAAA;AAC5B,IAAA,MAAMiB,UAAAA,GAAaC,KAAAA,CAAMC,IAAI,CAACN,mBAAAA,EAAqBE,UAAAA,CAAAA;IACnD,MAAMK,aAAAA,GAAgB,MAAMH,UAAAA,CAAWb,IAAAA,CAAAA;IAEvC,MAAMkC,eAAAA,GAAkB,MAAMhC,eAAAA,CAAgBoB,MAAM,CAACK,eAAAA,EAAiBjG,UAAAA,IAAc2F,IAAIvB,KAAAA,EAAO;QAC7FoB,IAAAA,EAAMF,aAAAA;AACNG,QAAAA,QAAAA,EAAU/G,IAAAA,EAAM+G,QAAAA;AAChBrG,QAAAA;AACF,KAAA,CAAA;IAEA,OAAOoH,eAAAA;AACT,CAAA;AAEA,sBAAe;AACb,IAAA,MAAMC,MAAKzC,GAAQ,EAAA;AACjB,QAAA,MAAM,EAAEC,WAAW,EAAE,GAAGD,IAAIG,KAAK;AACjC,QAAA,MAAM,EAAEC,KAAK,EAAE,GAAGJ,IAAIK,MAAM;AAC5B,QAAA,MAAM,EAAE/C,KAAK,EAAE,GAAG0C,IAAIO,OAAO;;QAG7BlD,0BAAAA,CAA2BC,KAAAA,CAAAA;AAE3B,QAAA,MAAMoF,mBAAmBjC,UAAAA,CAAW,mBAAA,CAAA;AACpC,QAAA,MAAMD,kBAAkBC,UAAAA,CAAW,kBAAA,CAAA;AACnC,QAAA,MAAMC,iBAAAA,GAAoBD,UAAAA,CAAW,oBAAA,CAAA,CAAsBE,MAAM,CAAC;AAAEV,YAAAA,WAAAA;AAAaG,YAAAA;AAAM,SAAA,CAAA;AAEvF,QAAA,IAAIM,iBAAAA,CAAkBE,MAAM,CAAC+B,IAAI,EAAA,EAAI;AACnC,YAAA,OAAO3C,IAAI4C,SAAS,EAAA;AACtB,QAAA;;;;QAKA,MAAMC,0BAAAA,GACJvF,KAAAA,CAAM3B,MAAM,KAAKkE,SAAAA,IACjBvC,KAAAA,CAAMwF,mBAAmB,KAAKjD,SAAAA,IAC9BvC,KAAAA,CAAMF,uBAAuB,KAAKyC,SAAAA;QACpC,MAAMkD,kBAAAA,GAAqBjE,sBAAAA,CAAuBxB,KAAAA,CAAMyB,IAAI,CAAA;;;QAG5D,MAAMiE,eAAAA,GAAkBH,6BAA6B,IAAA,GAAOE,kBAAAA;;;AAG5D,QAAA,MAAME,yBAAyBF,kBAAAA,GAC3B;AAAE,YAAA,GAAGzF,KAAK;YAAEyB,IAAAA,EAAMM,oBAAAA,CAAqB/B,MAAMyB,IAAI;SAAE,GACnDzB,KAAAA;AAEJ,QAAA,MAAMuE,kBAAkB,MAAMnB,iBAAAA,CAAkBoB,cAAc,CAACa,IAAI,CAACM,sBAAAA,CAAAA;AAEpE,QAAA,MAAMxB,QAAAA,GAAW,MAAMhB,UAAAA,CAAW,kBAAA,CAAA,CAAoBL,KAAAA,CAAAA,CACnD2B,iBAAiB,CAACF,eAAAA,CAAAA,CAClBqB,YAAY,CAAC,CAAA,CAAA,CACbC,cAAc,CAAC;YAAEC,KAAAA,EAAO,KAAA;YAAOC,MAAAA,EAAQ;AAAK,SAAA,CAAA,CAC5CC,oBAAoB,CAACC,2BAAAA,CAA4BnD,KAAAA,CAAAA,CAAAA,CACjD4B,KAAK,EAAA;;;QAIR,MAAM5E,uBAAAA,GAA0BE,MAAMF,uBAAuB;AAC7D,QAAA,MAAMoG,kBAAAA,GAAqB;AAAE,YAAA,GAAGlG;AAAM,SAAA;AACtC,QAAA,OAAOkG,mBAAmBpG,uBAAuB;QAEjD,MAAM,EAAEhC,MAAM,EAAEO,MAAM,EAAE,GAAG,MAAM4F,2BAA2BiC,kBAAAA,EAAoBpD,KAAAA,CAAAA;AAEhF,QAAA,MAAMqD,2BAA2BC,IAAAA,CAAK;AAAC,YAAA;SAA0B,EAAE7B,eAAAA,CAAAA;AAInE,QAAA,IAAI8B,cAAAA,GAA0C;AAC5C,YAAA,GAAGF,wBAAwB;AAC3BhC,YAAAA,QAAAA;AACArG,YAAAA,MAAAA;AACAO,YAAAA;AACF,SAAA;QAEA,IAAI2B,KAAAA,CAAMH,iBAAiB,KAAK0C,SAAAA,EAAW;YACzC8D,cAAAA,CAAexG,iBAAiB,GAAGG,KAAAA,CAAMH,iBAAiB;QAC5D,CAAA,MAAO;YACL,MAAMyG,MAAAA,GAASC,kCAAAA,CAAmCvG,KAAAA,CAAMwF,mBAAmB,CAAA;AAC3E,YAAA,IAAIc,WAAW/D,SAAAA,EAAW;gBACxB8D,cAAAA,CAAexG,iBAAiB,GAC9B2G,iDAAAA,CAAkDF,MAAAA,CAAAA;AACtD,YAAA;AACF,QAAA;QAEA,IACExG,uBAAAA,KAA4B,oBAAA,IAC5BA,uBAAAA,KAA4B,sBAAA,EAC5B;YACA,MAAMd,IAAAA,GAAOc,uBAAAA,KAA4B,oBAAA,GAAuB,UAAA,GAAa,YAAA;YAC7E,MAAMqB,WAAAA,GAAc,MAAMjE,oCAAAA,CAAqC4F,KAAAA,EAAO;AAAEhF,gBAAAA,MAAAA;AAAQkB,gBAAAA;AAAK,aAAA,CAAA;YACrFqH,cAAAA,GAAiB;AACf,gBAAA,GAAGA,cAAc;gBACjBhI,MAAAA,EAAQ,WAAA;gBACR4B,OAAAA,EAASgB,qBAAAA,CACPkF,wBAAAA,CAAyBlG,OAAO,EAChCkB,WAAAA;AAEJ,aAAA;AACF,QAAA;AAEA,QAAA,IAAIuE,eAAAA,EAAiB;YACnB,MAAMvD,CAAAA,GAAIkE,eAAe5E,IAAI;AAC7B,YAAA,MAAMgF,UAAAA,GAAa,CAAC,OAAO,EAAEf,eAAAA,CAAAA,CAAiB;AAC9C,YAAA,IAAI,CAACvD,CAAAA,EAAG;AACNkE,gBAAAA,cAAAA,CAAe5E,IAAI,GAAGgF,UAAAA;AACxB,YAAA,CAAA,MAAO,IAAItG,KAAAA,CAAMC,OAAO,CAAC+B,CAAAA,CAAAA,EAAI;AAC3BkE,gBAAAA,cAAAA,CAAe5E,IAAI,GAAG;AAAIU,oBAAAA,GAAAA,CAAAA;AAAGsE,oBAAAA;AAAW,iBAAA;YAC1C,CAAA,MAAO,IAAI,OAAOtE,CAAAA,KAAM,QAAA,EAAU;AAChCkE,gBAAAA,cAAAA,CAAe5E,IAAI,GAAG,CAAA,EAAGU,CAAAA,CAAE,CAAC,EAAEsE,UAAAA,CAAAA,CAAY;YAC5C,CAAA,MAAO;AACLJ,gBAAAA,cAAAA,CAAe5E,IAAI,GAAG;AAAE,oBAAA,GAAIU,CAAC;oBAAa9D,MAAAA,EAAQqH;AAAgB,iBAAA;AACpE,YAAA;AACF,QAAA;QAEA,MAAM,EAAEgB,OAAAA,EAASvI,SAAS,EAAEwI,UAAU,EAAE,GAAG,MAAMzD,eAAAA,CAAgB0D,QAAQ,CACvEP,cAAAA,EACAvD,KAAAA,CAAAA;AAGF,QAAA,MAAMrF,qBAAqBD,YAAAA,CAAaC,kBAAkB,CAACH,MAAAA,CAAOC,QAAQ,CAACuF,KAAAA,CAAAA,CAAAA;QAE3E,MAAM+D,kBAAAA,GAAqBpJ,qBACvBqJ,iBAAAA,CAAkB,MAAM1B,iBAAiB2B,sBAAsB,CAACjE,KAAAA,EAAO3E,SAAAA,CAAAA,CAAAA,GACvE,IAAII,GAAAA,EAAAA;AAER,QAAA,MAAMyI,YAAY,CAACC,QAAAA,GAAAA;;AAEjB,YAAA,MAAMC,oBAAoBL,kBAAAA,CAAmB1H,GAAG,CAAC8H,QAAAA,CAASvI,UAAU,KAAK,EAAE;;AAE3EuI,YAAAA,QAAAA,CAAS5I,MAAM,GAAG+G,gBAAAA,CAAiB+B,SAAS,CAACF,QAAAA,EAAUC,iBAAAA,CAAAA;YACvD,OAAOD,QAAAA;AACT,QAAA,CAAA;QAEA,MAAMP,OAAAA,GAAU,MAAM5C,KAAAA,CAAM5B,GAAG,CAC7B/D,SAAAA,EACA2F,KAAAA,CAAMC,IAAI,CAACX,iBAAAA,CAAkBgE,cAAc,EAAEJ,SAAAA,CAAAA,CAAAA;AAG/CtE,QAAAA,GAAAA,CAAIM,IAAI,GAAG;AACT0D,YAAAA,OAAAA;AACAC,YAAAA;AACF,SAAA;AACF,IAAA,CAAA;AAEA,IAAA,MAAM9B,SAAQnC,GAAQ,EAAA;AACpB,QAAA,MAAM,EAAEC,WAAW,EAAE,GAAGD,IAAIG,KAAK;AACjC,QAAA,MAAM,EAAEC,KAAK,EAAEuB,EAAE,EAAE,GAAG3B,IAAIK,MAAM;AAEhC,QAAA,MAAMG,kBAAkBC,UAAAA,CAAW,kBAAA,CAAA;AACnC,QAAA,MAAMC,iBAAAA,GAAoBD,UAAAA,CAAW,oBAAA,CAAA,CAAsBE,MAAM,CAAC;AAAEV,YAAAA,WAAAA;AAAaG,YAAAA;AAAM,SAAA,CAAA;AAEvF,QAAA,IAAIM,iBAAAA,CAAkBE,MAAM,CAAC+B,IAAI,EAAA,EAAI;AACnC,YAAA,OAAO3C,IAAI4C,SAAS,EAAA;AACtB,QAAA;QAEA,MAAMf,eAAAA,GAAkB,MAAMnB,iBAAAA,CAAkBoB,cAAc,CAACa,IAAI,CAAC3C,IAAI1C,KAAK,CAAA;AAE7E,QAAA,MAAMmE,WAAW,MAAMhB,UAAAA,CAAW,kBAAA,CAAA,CAAoBL,KAAAA,CAAAA,CACnD2B,iBAAiB,CAACF,eAAAA,CAAAA,CAClBqB,YAAY,CAACyB,UACbxB,cAAc,EAAA,CACdG,oBAAoB,CAACC,2BAAAA,CAA4BnD,QACjD4B,KAAK,EAAA;QAER,MAAM,EAAE5G,MAAM,EAAEO,MAAM,EAAE,GAAG,MAAM4F,0BAAAA,CAA2BvB,GAAAA,CAAI1C,KAAK,EAAE8C,KAAAA,CAAAA;AAEvE,QAAA,MAAMwE,UAAU,MAAMpE,eAAAA,CAAgB2B,OAAO,CAACR,IAAIvB,KAAAA,EAAO;AACvDqB,YAAAA,QAAAA;AACArG,YAAAA,MAAAA;AACAO,YAAAA;AACF,SAAA,CAAA;AAEA,QAAA,IAAI,CAACiJ,OAAAA,EAAS;;AAEZ,YAAA,MAAMxC,MAAAA,GAAS,MAAM5B,eAAAA,CAAgB4B,MAAM,CAAChC,KAAAA,EAAOuB,EAAAA,CAAAA;AACnD,YAAA,IAAI,CAACS,MAAAA,EAAQ;AACX,gBAAA,OAAOpC,IAAI6E,QAAQ,EAAA;AACrB,YAAA;;YAGA,MAAM,EAAEC,IAAI,EAAE,GAAG,MAAMC,0BAAAA,CACrBrE,iBAAAA,EACAN;AAEA,YAAA;gBAAEpE,UAAAA,EAAY2F,EAAAA;AAAIvG,gBAAAA,MAAAA;gBAAQ4J,WAAAA,EAAa;aAAK,EAC5C;gBAAEC,gBAAAA,EAAkB,IAAA;gBAAMC,eAAAA,EAAiB;AAAM,aAAA,CAAA;AAGnDlF,YAAAA,GAAAA,CAAIM,IAAI,GAAG;AAAEkB,gBAAAA,IAAAA,EAAM,EAAC;AAAGsD,gBAAAA;AAAK,aAAA;AAE5B,YAAA;AACF,QAAA;;AAGA,QAAA,IAAIpE,iBAAAA,CAAkBE,MAAM,CAAC+B,IAAI,CAACiC,OAAAA,CAAAA,EAAU;AAC1C,YAAA,OAAO5E,IAAI4C,SAAS,EAAA;AACtB,QAAA;;AAGA,QAAA,MAAMuC,iBAAAA,GAAoB,MAAMzE,iBAAAA,CAAkBgE,cAAc,CAACE,OAAAA,CAAAA;AACjE5E,QAAAA,GAAAA,CAAIM,IAAI,GAAG,MAAMyE,0BAAAA,CAA2BrE,mBAAmBN,KAAAA,EAAO+E,iBAAAA,CAAAA;AACxE,IAAA,CAAA;AAEA,IAAA,MAAMxE,QAAOX,GAAQ,EAAA;AACnB,QAAA,MAAM,EAAEC,WAAW,EAAE,GAAGD,IAAIG,KAAK;AACjC,QAAA,MAAM,EAAEC,KAAK,EAAE,GAAGJ,IAAIK,MAAM;AAE5B,QAAA,MAAMK,iBAAAA,GAAoBD,UAAAA,CAAW,oBAAA,CAAA,CAAsBE,MAAM,CAAC;AAAEV,YAAAA,WAAAA;AAAaG,YAAAA;AAAM,SAAA,CAAA;AAEvF,QAAA,MAAM,CAACgF,YAAAA,EAAcb,QAAAA,CAAS,GAAG,MAAMhJ,OAAAA,CAAQC,GAAG,CAAC;AACjDZ,YAAAA,MAAAA,CAAOyK,EAAE,CAAC/H,KAAK,CAAC8C,OAAOkF,KAAK,EAAA;YAC5BvF,cAAAA,CAAeC,GAAAA;AAChB,SAAA,CAAA;AAED,QAAA,MAAMmF,iBAAAA,GAAoB,MAAMzE,iBAAAA,CAAkBgE,cAAc,CAACH,QAAAA,CAAAA;AACjEvE,QAAAA,GAAAA,CAAIrE,MAAM,GAAG,GAAA;AACbqE,QAAAA,GAAAA,CAAIM,IAAI,GAAG,MAAMyE,0BAAAA,CAA2BrE,iBAAAA,EAAmBN,OAAO+E,iBAAAA,EAAmB;;YAEvFF,gBAAAA,EAAkB,KAAA;YAClBC,eAAAA,EAAiB;AACnB,SAAA,CAAA;AAEA,QAAA,IAAIE,iBAAiB,CAAA,EAAG;AACtBxK,YAAAA,MAAAA,CAAO2K,SAAS,CAACC,IAAI,CAAC,gCAAA,EAAkC;gBACtDC,eAAAA,EAAiB;AAAErF,oBAAAA;AAAM;AAC3B,aAAA,CAAA;AACF,QAAA;AACF,IAAA,CAAA;AAEA,IAAA,MAAMwB,QAAO5B,GAAQ,EAAA;AACnB,QAAA,MAAM,EAAEC,WAAW,EAAE,GAAGD,IAAIG,KAAK;AACjC,QAAA,MAAM,EAAEC,KAAK,EAAE,GAAGJ,IAAIK,MAAM;AAE5B,QAAA,MAAMK,iBAAAA,GAAoBD,UAAAA,CAAW,oBAAA,CAAA,CAAsBE,MAAM,CAAC;AAAEV,YAAAA,WAAAA;AAAaG,YAAAA;AAAM,SAAA,CAAA;QAEvF,MAAMsF,cAAAA,GAAiB,MAAMhE,cAAAA,CAAe1B,GAAAA,CAAAA;AAE5C,QAAA,MAAM2F,gBAAAA,GAAmB,MAAMjF,iBAAAA,CAAkBgE,cAAc,CAACgB,cAAAA,CAAAA;AAChE1F,QAAAA,GAAAA,CAAIM,IAAI,GAAG,MAAMyE,0BAAAA,CAA2BrE,mBAAmBN,KAAAA,EAAOuF,gBAAAA,CAAAA;AACxE,IAAA,CAAA;AAEA,IAAA,MAAMC,OAAM5F,GAAQ,EAAA;AAClB,QAAA,MAAM,EAAEC,WAAW,EAAEC,IAAI,EAAE,GAAGF,IAAIG,KAAK;QACvC,MAAM,EAAEC,KAAK,EAAEyF,QAAAA,EAAUlE,EAAE,EAAE,GAAG3B,IAAIK,MAAM;AAC1C,QAAA,MAAM,EAAEC,IAAI,EAAE,GAAGN,IAAIO,OAAO;AAE5B,QAAA,MAAMC,kBAAkBC,UAAAA,CAAW,kBAAA,CAAA;AACnC,QAAA,MAAMC,iBAAAA,GAAoBD,UAAAA,CAAW,oBAAA,CAAA,CAAsBE,MAAM,CAAC;AAAEV,YAAAA,WAAAA;AAAaG,YAAAA;AAAM,SAAA,CAAA;AAEvF,QAAA,IAAIM,iBAAAA,CAAkBE,MAAM,CAACD,MAAM,EAAA,EAAI;AACrC,YAAA,OAAOX,IAAI4C,SAAS,EAAA;AACtB,QAAA;QAEA,MAAMf,eAAAA,GAAkB,MAAMnB,iBAAAA,CAAkBoB,cAAc,CAACnB,MAAM,CAACX,IAAI1C,KAAK,CAAA;QAC/E,MAAMmE,QAAAA,GAAW,MAAMhB,UAAAA,CAAW,kBAAA,CAAA,CAAoBL,OACnD2B,iBAAiB,CAACF,iBAClBG,KAAK,EAAA;AAER,QAAA,MAAM,EAAE5G,MAAM,EAAE,GAAG,MAAMmG,2BAA2BjB,IAAAA,EAAMF,KAAAA,CAAAA;AAC1D,QAAA,MAAMmE,WAAW,MAAM/D,eAAAA,CAAgB2B,OAAO,CAACR,IAAIvB,KAAAA,EAAO;AACxDqB,YAAAA,QAAAA;AACArG,YAAAA,MAAAA;YACAO,MAAAA,EAAQ;AACV,SAAA,CAAA;AAEA,QAAA,IAAI,CAAC4I,QAAAA,EAAU;AACb,YAAA,OAAOvE,IAAI6E,QAAQ,EAAA;AACrB,QAAA;QAEA,MAAM9D,mBAAAA,GAAsBL,kBAAkBM,mBAAmB;AACjE,QAAA,MAAMC,aAAaC,gBAAAA,CAAiB;AAAEhB,YAAAA;AAAK,SAAA,CAAA;QAC3C,MAAM4F,mBAAAA,GAAsBC,0BAA0B3F,KAAAA,EAAOM,iBAAAA,CAAAA;AAC7D,QAAA,MAAMS,UAAAA,GAAaC,KAAAA,CAAMC,IAAI,CAACN,qBAAqBE,UAAAA,EAAmB6E,mBAAAA,CAAAA;QACtE,MAAMxE,aAAAA,GAAgB,MAAMH,UAAAA,CAAWb,IAAAA,CAAAA;QAEvC,MAAM0F,cAAAA,GAAiB,MAAMxF,eAAAA,CAAgBoF,KAAK,CAACrB,QAAAA,CAASvI,UAAU,EAAEsF,aAAAA,EAAelB,KAAAA,CAAAA;AAEvF,QAAA,MAAM+E,iBAAAA,GAAoB,MAAMzE,iBAAAA,CAAkBgE,cAAc,CAACsB,cAAAA,CAAAA;AACjEhG,QAAAA,GAAAA,CAAIM,IAAI,GAAG,MAAMyE,0BAAAA,CAA2BrE,iBAAAA,EAAmBN,OAAO+E,iBAAAA,EAAmB;;YAEvFF,gBAAAA,EAAkB,KAAA;YAClBC,eAAAA,EAAiB;AACnB,SAAA,CAAA;AACF,IAAA,CAAA;AAEA,IAAA,MAAMe,WAAUjG,GAAQ,EAAA;AACtB,QAAA,MAAM,EAAEI,KAAK,EAAE,GAAGJ,IAAIK,MAAM;;AAG5B,QAAA,MAAM6F,mBAAmBC,0BAAAA,CAA2B/F,KAAAA,CAAAA;QAEpD,IAAI8F,gBAAAA,CAAiBjI,MAAM,GAAG,CAAA,EAAG;AAC/B,YAAA,OAAO+B,GAAAA,CAAIoG,UAAU,CACnB,wEAAA,GACE,qEAAA,EACF;AACEF,gBAAAA;AACF,aAAA,CAAA;AAEJ,QAAA;QAEA,MAAM,IAAI,CAACN,KAAK,CAAC5F,GAAAA,CAAAA;AACnB,IAAA,CAAA;AAEA,IAAA,MAAMqG,QAAOrG,GAAQ,EAAA;AACnB,QAAA,MAAM,EAAEC,WAAW,EAAE,GAAGD,IAAIG,KAAK;AACjC,QAAA,MAAM,EAAEwB,EAAE,EAAEvB,KAAK,EAAE,GAAGJ,IAAIK,MAAM;AAEhC,QAAA,MAAMG,kBAAkBC,UAAAA,CAAW,kBAAA,CAAA;AACnC,QAAA,MAAMC,iBAAAA,GAAoBD,UAAAA,CAAW,oBAAA,CAAA,CAAsBE,MAAM,CAAC;AAAEV,YAAAA,WAAAA;AAAaG,YAAAA;AAAM,SAAA,CAAA;AAEvF,QAAA,IAAIM,iBAAAA,CAAkBE,MAAM,CAACyF,MAAM,EAAA,EAAI;AACrC,YAAA,OAAOrG,IAAI4C,SAAS,EAAA;AACtB,QAAA;QAEA,MAAMf,eAAAA,GAAkB,MAAMnB,iBAAAA,CAAkBoB,cAAc,CAACuE,MAAM,CAACrG,IAAI1C,KAAK,CAAA;QAC/E,MAAMmE,QAAAA,GAAW,MAAMhB,UAAAA,CAAW,kBAAA,CAAA,CAAoBL,OACnD2B,iBAAiB,CAACF,iBAClBG,KAAK,EAAA;QAER,MAAM,EAAE5G,MAAM,EAAE,GAAG,MAAMmG,0BAAAA,CAA2BvB,GAAAA,CAAI1C,KAAK,EAAE8C,KAAAA,CAAAA;;AAG/D,QAAA,MAAMkG,kBAAkB,MAAM9F,eAAAA,CAAgB+F,WAAW,CAAC5E,IAAIvB,KAAAA,EAAO;AAAEqB,YAAAA,QAAAA;AAAUrG,YAAAA;AAAO,SAAA,CAAA;QAExF,IAAIkL,eAAAA,CAAgBrI,MAAM,KAAK,CAAA,EAAG;AAChC,YAAA,OAAO+B,IAAI6E,QAAQ,EAAA;AACrB,QAAA;QAEA,KAAK,MAAMN,YAAY+B,eAAAA,CAAiB;AACtC,YAAA,IAAI5F,iBAAAA,CAAkBE,MAAM,CAACyF,MAAM,CAAC9B,QAAAA,CAAAA,EAAW;AAC7C,gBAAA,OAAOvE,IAAI4C,SAAS,EAAA;AACtB,YAAA;AACF,QAAA;AAEA,QAAA,MAAMzD,SAAS,MAAMqB,eAAAA,CAAgB6F,MAAM,CAAC1E,IAAIvB,KAAAA,EAAO;AAAEhF,YAAAA;AAAO,SAAA,CAAA;AAEhE4E,QAAAA,GAAAA,CAAIM,IAAI,GAAG,MAAMI,iBAAAA,CAAkBgE,cAAc,CAACvF,MAAAA,CAAAA;AACpD,IAAA,CAAA;AAEA;;;MAIA,MAAMqH,SAAQxG,GAAQ,EAAA;AACpB,QAAA,MAAM,EAAEC,WAAW,EAAE,GAAGD,IAAIG,KAAK;;AAEjC,QAAA,MAAM,EAAEwB,EAAE,EAAEvB,KAAK,EAAE,GAAGJ,IAAIK,MAAM;AAChC,QAAA,MAAM,EAAEC,IAAI,EAAE,GAAGN,IAAIO,OAAO;AAE5B,QAAA,MAAMC,kBAAkBC,UAAAA,CAAW,kBAAA,CAAA;AACnC,QAAA,MAAMC,iBAAAA,GAAoBD,UAAAA,CAAW,oBAAA,CAAA,CAAsBE,MAAM,CAAC;AAAEV,YAAAA,WAAAA;AAAaG,YAAAA;AAAM,SAAA,CAAA;AAEvF,QAAA,IAAIM,iBAAAA,CAAkBE,MAAM,CAAC4F,OAAO,EAAA,EAAI;AACtC,YAAA,OAAOxG,IAAI4C,SAAS,EAAA;AACtB,QAAA;AAEA,QAAA,MAAM6D,oBAAoB,MAAM7L,MAAAA,CAAOyK,EAAE,CAACqB,WAAW,CAAC,UAAA;;YAEpD,MAAM7E,eAAAA,GAAkB,MAAMnB,iBAAAA,CAAkBoB,cAAc,CAAC0E,OAAO,CAACxG,IAAI1C,KAAK,CAAA;AAEhF,YAAA,MAAMmE,WAAW,MAAMhB,UAAAA,CAAW,kBAAA,CAAA,CAAoBL,KAAAA,CAAAA,CACnD2B,iBAAiB,CAACF,eAAAA,CAAAA,CAClBqB,YAAY,CAACyB,UACbxB,cAAc,EAAA,CACdG,oBAAoB,CAACC,2BAAAA,CAA4BnD,QACjD4B,KAAK,EAAA;YAER,IAAIuC,QAAAA;AAEJ,YAAA,MAAM,EAAEnJ,MAAM,EAAE,GAAG,MAAMmG,2BAA2BjB,IAAAA,EAAMF,KAAAA,CAAAA;AAE1D;;;;;;;;;;UAWA,MAAMuG,WAAWC,KAAAA,CAAMjF,EAAAA,CAAAA;AACvB,YAAA,IAAIgF,QAAAA,EAAU;AACZ,gBAAA,IAAIjG,iBAAAA,CAAkBE,MAAM,CAACD,MAAM,EAAA,EAAI;oBACrC,MAAM,IAAIE,OAAOC,cAAc,EAAA;AACjC,gBAAA;gBAEAyD,QAAAA,GAAW,MAAMxE,eAAeC,GAAAA,EAAK;AAAEyB,oBAAAA;AAAS,iBAAA,CAAA;AAClD,YAAA;AAEA,YAAA,MAAMoF,WAAW,CAACF,QAAAA;AAClB,YAAA,IAAIE,QAAAA,EAAU;;AAEZ,gBAAA,MAAM3E,cAAAA,GAAiB,MAAM1B,eAAAA,CAAgB4B,MAAM,CAAChC,KAAAA,EAAOuB,EAAAA,CAAAA;AAE3D,gBAAA,IAAI,CAACO,cAAAA,EAAgB;oBACnB,MAAM,IAAIrB,MAAAA,CAAOwB,aAAa,CAAC,oBAAA,CAAA;AACjC,gBAAA;;AAGAkC,gBAAAA,QAAAA,GAAW,MAAM/D,eAAAA,CAAgB2B,OAAO,CAACR,IAAKvB,KAAAA,EAAO;AAAEqB,oBAAAA,QAAAA;AAAUrG,oBAAAA;AAAO,iBAAA,CAAA;AAExE,gBAAA,IAAI,CAACmJ,QAAAA,EAAU;;AAEb,oBAAA,IACE7D,iBAAAA,CAAkBE,MAAM,CAACD,MAAM,CAAC;AAAEvF,wBAAAA;AAAO,qBAAA,CAAA,IACzCsF,iBAAAA,CAAkBE,MAAM,CAAC4F,OAAO,CAAC;AAAEpL,wBAAAA;qBAAO,CAAA,EAC1C;wBACA,MAAM,IAAIyF,OAAOC,cAAc,EAAA;AACjC,oBAAA;AACAyD,oBAAAA,QAAAA,GAAW,MAAM7C,cAAAA,CAAe1B,GAAAA,CAAAA;AAClC,gBAAA,CAAA,MAAO,IAAIU,iBAAAA,CAAkBoG,GAAG,CAAClF,MAAM,CAAC2C,QAAAA,CAAAA,EAAW;AACjD,oBAAA,MAAM7C,cAAAA,CAAe1B,GAAAA,CAAAA;AACvB,gBAAA;AACF,YAAA;AAEA,YAAA,IAAIU,iBAAAA,CAAkBE,MAAM,CAAC4F,OAAO,CAACjC,QAAAA,CAAAA,EAAW;gBAC9C,MAAM,IAAI1D,OAAOC,cAAc,EAAA;AACjC,YAAA;YAEA,MAAMiG,aAAAA,GAAgB,MAAMvG,eAAAA,CAAgBgG,OAAO,CAACjC,QAAAA,CAASvI,UAAU,EAAEoE,KAAAA,EAAO;AAC9EhF,gBAAAA;AAGF,aAAA,CAAA;AAEA,YAAA,IAAI,CAAC2L,aAAAA,IAAiBA,aAAAA,CAAc9I,MAAM,KAAK,CAAA,EAAG;gBAChD,MAAM,IAAI4C,MAAAA,CAAOwB,aAAa,CAAC,0CAAA,CAAA;AACjC,YAAA;YAEA,OAAO0E,aAAa,CAAC,CAAA,CAAE;AACzB,QAAA,CAAA,CAAA;AAEA,QAAA,MAAM5B,iBAAAA,GAAoB,MAAMzE,iBAAAA,CAAkBgE,cAAc,CAAC+B,iBAAAA,CAAAA;AACjEzG,QAAAA,GAAAA,CAAIM,IAAI,GAAG,MAAMyE,0BAAAA,CAA2BrE,mBAAmBN,KAAAA,EAAO+E,iBAAAA,CAAAA;AACxE,IAAA,CAAA;AAEA,IAAA,MAAM6B,uBAAsBhH,GAAQ,EAAA;AAClC,QAAA,MAAM,EAAEC,WAAW,EAAE,GAAGD,IAAIG,KAAK;AACjC,QAAA,MAAM,EAAEC,KAAK,EAAE,GAAGJ,IAAIK,MAAM;QAC5B,MAAM,EAAE5B,WAAW,EAAErD,MAAM,EAAE2D,IAAI,EAAE,GAAGiB,GAAAA,CAAIO,OAAO,CAACD,IAAI;AAEtD,QAAA,MAAM2G,uBAAAA,CAAwBjH,GAAAA,CAAIO,OAAO,CAACD,IAAI,CAAA;AAE9C,QAAA,MAAMI,iBAAAA,GAAoBD,UAAAA,CAAW,oBAAA,CAAA,CAAsBE,MAAM,CAAC;AAAEV,YAAAA,WAAAA;AAAaG,YAAAA;AAAM,SAAA,CAAA;AAEvF,QAAA,IAAIM,iBAAAA,CAAkBE,MAAM,CAAC+B,IAAI,EAAA,EAAI;AACnC,YAAA,OAAO3C,IAAI4C,SAAS,EAAA;AACtB,QAAA;QAEA,MAAMnB,QAAAA,GAAW,MAAMyF,iBAAAA,CAAkB9G,KAAAA,CAAAA;AAEzC,QAAA,MAAM3E,YAAY,MAAMb,MAAAA,CAAOa,SAAS,CAAC2E,KAAAA,CAAAA,CAA6B1E,QAAQ,CAAC;AAC7E+F,YAAAA,QAAAA;YACAlE,OAAAA,EAAS;gBAAEvB,UAAAA,EAAY;oBAAE2C,GAAAA,EAAKF;AAAY;AAAE,aAAA;AAC5CrD,YAAAA,MAAAA;AACA2D,YAAAA,IAAAA;YACApD,MAAAA,EAAQ;AACV,SAAA,CAAA;QAEA,MAAMqI,OAAAA,GAAU,MAAMzI,OAAAA,CAAQC,GAAG,CAACC,SAAAA,CAAU+D,GAAG,CAACkB,iBAAAA,CAAkBgE,cAAc,CAAA,CAAA;AAEhF1E,QAAAA,GAAAA,CAAIM,IAAI,GAAG;AAAE0D,YAAAA;AAAQ,SAAA;AACvB,IAAA,CAAA;AAEA,IAAA,MAAMmD,aAAYnH,GAAQ,EAAA;AACxB,QAAA,MAAM,EAAEC,WAAW,EAAE,GAAGD,IAAIG,KAAK;AACjC,QAAA,MAAM,EAAEC,KAAK,EAAE,GAAGJ,IAAIK,MAAM;AAC5B,QAAA,MAAM,EAAEC,IAAI,EAAE,GAAGN,IAAIO,OAAO;QAC5B,MAAM,EAAE9B,WAAW,EAAE,GAAG6B,IAAAA;AAExB,QAAA,MAAM2G,uBAAAA,CAAwB3G,IAAAA,CAAAA;AAE9B,QAAA,MAAME,kBAAkBC,UAAAA,CAAW,kBAAA,CAAA;AACnC,QAAA,MAAMC,iBAAAA,GAAoBD,UAAAA,CAAW,oBAAA,CAAA,CAAsBE,MAAM,CAAC;AAAEV,YAAAA,WAAAA;AAAaG,YAAAA;AAAM,SAAA,CAAA;AAEvF,QAAA,IAAIM,iBAAAA,CAAkBE,MAAM,CAAC4F,OAAO,EAAA,EAAI;AACtC,YAAA,OAAOxG,IAAI4C,SAAS,EAAA;AACtB,QAAA;QAEA,MAAMf,eAAAA,GAAkB,MAAMnB,iBAAAA,CAAkBoB,cAAc,CAAC0E,OAAO,CAACxG,IAAI1C,KAAK,CAAA;AAChF,QAAA,MAAMmE,QAAAA,GAAW,MAAMhB,UAAAA,CAAW,kBAAA,CAAA,CAAoBL,KAAAA,CAAAA,CACnD2B,iBAAiB,CAACF,eAAAA,CAAAA,CAClBqB,YAAY,CAACyB,QAAAA,CAAAA,CACbxB,cAAc,GACdnB,KAAK,EAAA;AAER,QAAA,MAAM,EAAE5G,MAAM,EAAE,GAAG,MAAMmG,0BAAAA,CAA2BjB,MAAMF,KAAAA,EAAO;YAC/DgH,oBAAAA,EAAsB;AACxB,SAAA,CAAA;AAEA,QAAA,MAAMC,WAAW,MAAM7G,eAAAA,CAAgB+F,WAAW,CAAC9H,aAAa2B,KAAAA,EAAO;AACrEqB,YAAAA,QAAAA;AACArG,YAAAA,MAAAA;YACAkM,WAAAA,EAAa;AACf,SAAA,CAAA;QAEA,KAAK,MAAMC,UAAUF,QAAAA,CAAU;AAC7B,YAAA,IAAI,CAACE,MAAAA,EAAQ;AACX,gBAAA,OAAOvH,IAAI6E,QAAQ,EAAA;AACrB,YAAA;AAEA,YAAA,IAAInE,iBAAAA,CAAkBE,MAAM,CAAC4F,OAAO,CAACe,MAAAA,CAAAA,EAAS;AAC5C,gBAAA,OAAOvH,IAAI4C,SAAS,EAAA;AACtB,YAAA;AACF,QAAA;AAEA,QAAA,MAAM0C,QAAQ,MAAM9E,eAAAA,CAAgBgH,WAAW,CAACpH,OAAO3B,WAAAA,EAAarD,MAAAA,CAAAA;AACpE4E,QAAAA,GAAAA,CAAIM,IAAI,GAAG;AAAEgF,YAAAA;AAAM,SAAA;AACrB,IAAA,CAAA;AAEA,IAAA,MAAMmC,eAAczH,GAAQ,EAAA;AAC1B,QAAA,MAAM,EAAEC,WAAW,EAAE,GAAGD,IAAIG,KAAK;AACjC,QAAA,MAAM,EAAEC,KAAK,EAAE,GAAGJ,IAAIK,MAAM;AAC5B,QAAA,MAAM,EAAEC,IAAI,EAAE,GAAGN,IAAIO,OAAO;QAC5B,MAAM,EAAE9B,WAAW,EAAE,GAAG6B,IAAAA;AAExB,QAAA,MAAM2G,uBAAAA,CAAwB3G,IAAAA,CAAAA;AAE9B,QAAA,MAAME,kBAAkBC,UAAAA,CAAW,kBAAA,CAAA;AACnC,QAAA,MAAMC,iBAAAA,GAAoBD,UAAAA,CAAW,oBAAA,CAAA,CAAsBE,MAAM,CAAC;AAAEV,YAAAA,WAAAA;AAAaG,YAAAA;AAAM,SAAA,CAAA;AAEvF,QAAA,IAAIM,iBAAAA,CAAkBE,MAAM,CAAC8G,SAAS,EAAA,EAAI;AACxC,YAAA,OAAO1H,IAAI4C,SAAS,EAAA;AACtB,QAAA;AAEA,QAAA,MAAM,EAAExH,MAAM,EAAE,GAAG,MAAMmG,0BAAAA,CAA2BjB,MAAMF,KAAAA,EAAO;YAC/DgH,oBAAAA,EAAsB;AACxB,SAAA,CAAA;AAEA,QAAA,MAAMC,WAAW,MAAM7G,eAAAA,CAAgB+F,WAAW,CAAC9H,aAAa2B,KAAAA,EAAO;AACrEhF,YAAAA,MAAAA;YACAkM,WAAAA,EAAa;AACf,SAAA,CAAA;QAEA,KAAK,MAAMC,UAAUF,QAAAA,CAAU;AAC7B,YAAA,IAAI,CAACE,MAAAA,EAAQ;AACX,gBAAA,OAAOvH,IAAI6E,QAAQ,EAAA;AACrB,YAAA;AAEA,YAAA,IAAInE,iBAAAA,CAAkBE,MAAM,CAAC4F,OAAO,CAACe,MAAAA,CAAAA,EAAS;AAC5C,gBAAA,OAAOvH,IAAI4C,SAAS,EAAA;AACtB,YAAA;AACF,QAAA;AAEA,QAAA,MAAM+E,cAAcN,QAAAA,CAAS7H,GAAG,CAAC,CAAC+E,QAAAA,GAAaA,SAASvI,UAAU,CAAA;QAElE,MAAM,EAAEsJ,KAAK,EAAE,GAAG,MAAM9E,eAAAA,CAAgBoH,aAAa,CAACD,WAAAA,EAAavH,KAAAA,EAAO;AAAEhF,YAAAA;AAAO,SAAA,CAAA;AAEnF4E,QAAAA,GAAAA,CAAIM,IAAI,GAAG;AAAEgF,YAAAA;AAAM,SAAA;AACrB,IAAA,CAAA;AAEA,IAAA,MAAMoC,WAAU1H,GAAQ,EAAA;AACtB,QAAA,MAAM,EAAEC,WAAW,EAAE,GAAGD,IAAIG,KAAK;AACjC,QAAA,MAAM,EAAEwB,EAAE,EAAEvB,KAAK,EAAE,GAAGJ,IAAIK,MAAM;QAChC,MAAM,EACJC,IAAAA,EAAM,EAAEuH,YAAY,EAAE,GAAGvH,IAAAA,EAAM,EAChC,GAAGN,GAAAA,CAAIO,OAAO;AAEf,QAAA,MAAMC,kBAAkBC,UAAAA,CAAW,kBAAA,CAAA;AACnC,QAAA,MAAMC,iBAAAA,GAAoBD,UAAAA,CAAW,oBAAA,CAAA,CAAsBE,MAAM,CAAC;AAAEV,YAAAA,WAAAA;AAAaG,YAAAA;AAAM,SAAA,CAAA;AAEvF,QAAA,IAAIM,iBAAAA,CAAkBE,MAAM,CAAC8G,SAAS,EAAA,EAAI;AACxC,YAAA,OAAO1H,IAAI4C,SAAS,EAAA;AACtB,QAAA;AAEA,QAAA,IAAIiF,YAAAA,IAAgBnH,iBAAAA,CAAkBE,MAAM,CAACkH,OAAO,EAAA,EAAI;AACtD,YAAA,OAAO9H,IAAI4C,SAAS,EAAA;AACtB,QAAA;QAEA,MAAMf,eAAAA,GAAkB,MAAMnB,iBAAAA,CAAkBoB,cAAc,CAAC4F,SAAS,CAAC1H,IAAI1C,KAAK,CAAA;QAElF,MAAMmE,QAAAA,GAAW,MAAMhB,UAAAA,CAAW,kBAAA,CAAA,CAAoBL,OACnD2B,iBAAiB,CAACF,iBAClBG,KAAK,EAAA;;AAGR,QAAA,MAAM,EAAE5G,MAAM,EAAE,GAAG,MAAMmG,2BAA2BjB,IAAAA,EAAMF,KAAAA,CAAAA;AAC1D,QAAA,MAAMmE,WAAW,MAAM/D,eAAAA,CAAgB2B,OAAO,CAACR,IAAIvB,KAAAA,EAAO;AACxDqB,YAAAA,QAAAA;AACArG,YAAAA,MAAAA;YACAO,MAAAA,EAAQ;AACV,SAAA,CAAA;AAEA,QAAA,IAAI,CAAC4I,QAAAA,EAAU;YACb,MAAM,IAAI1D,OAAOwB,aAAa,EAAA;AAChC,QAAA;AAEA,QAAA,IAAI3B,iBAAAA,CAAkBE,MAAM,CAAC8G,SAAS,CAACnD,QAAAA,CAAAA,EAAW;YAChD,MAAM,IAAI1D,OAAOC,cAAc,EAAA;AACjC,QAAA;AAEA,QAAA,IAAI+G,gBAAgBnH,iBAAAA,CAAkBE,MAAM,CAACkH,OAAO,CAACvD,QAAAA,CAAAA,EAAW;YAC9D,MAAM,IAAI1D,OAAOC,cAAc,EAAA;AACjC,QAAA;AAEA,QAAA,MAAMlG,MAAAA,CAAOyK,EAAE,CAACqB,WAAW,CAAC,UAAA;AAC1B,YAAA,IAAImB,YAAAA,EAAc;AAChB,gBAAA,MAAMrH,gBAAgBqH,YAAY,CAACtD,QAAAA,CAASvI,UAAU,EAAEoE,KAAAA,EAAO;AAAEhF,oBAAAA;AAAO,iBAAA,CAAA;AAC1E,YAAA;AAEA4E,YAAAA,GAAAA,CAAIM,IAAI,GAAG,MAAMc,KAAAA,CAAMC,IAAI,CACzB,CAACkD,QAAAA,GAAa/D,eAAAA,CAAgBkH,SAAS,CAACnD,QAAAA,CAASvI,UAAU,EAAEoE,KAAAA,EAAO;AAAEhF,oBAAAA;iBAAO,CAAA,EAC7EsF,iBAAAA,CAAkBgE,cAAc,EAChC,CAACH,WAAaQ,0BAAAA,CAA2BrE,iBAAAA,EAAmBN,OAAOmE,QAAAA,CAAAA,CAAAA,CACnEA,QAAAA,CAAAA;AACJ,QAAA,CAAA,CAAA;AACF,IAAA,CAAA;AAEA,IAAA,MAAMuD,SAAQ9H,GAAQ,EAAA;AACpB,QAAA,MAAM,EAAEC,WAAW,EAAE,GAAGD,IAAIG,KAAK;AACjC,QAAA,MAAM,EAAEwB,EAAE,EAAEvB,KAAK,EAAE,GAAGJ,IAAIK,MAAM;AAChC,QAAA,MAAM,EAAEC,IAAI,EAAE,GAAGN,IAAIO,OAAO;AAE5B,QAAA,MAAMC,kBAAkBC,UAAAA,CAAW,kBAAA,CAAA;AACnC,QAAA,MAAMC,iBAAAA,GAAoBD,UAAAA,CAAW,oBAAA,CAAA,CAAsBE,MAAM,CAAC;AAAEV,YAAAA,WAAAA;AAAaG,YAAAA;AAAM,SAAA,CAAA;AAEvF,QAAA,IAAIM,iBAAAA,CAAkBE,MAAM,CAACkH,OAAO,EAAA,EAAI;AACtC,YAAA,OAAO9H,IAAI4C,SAAS,EAAA;AACtB,QAAA;QAEA,MAAMf,eAAAA,GAAkB,MAAMnB,iBAAAA,CAAkBoB,cAAc,CAACgG,OAAO,CAAC9H,IAAI1C,KAAK,CAAA;QAChF,MAAMmE,QAAAA,GAAW,MAAMhB,UAAAA,CAAW,kBAAA,CAAA,CAAoBL,OACnD2B,iBAAiB,CAACF,iBAClBG,KAAK,EAAA;AAER,QAAA,MAAM,EAAE5G,MAAM,EAAE,GAAG,MAAMmG,2BAA2BjB,IAAAA,EAAMF,KAAAA,CAAAA;AAC1D,QAAA,MAAMmE,WAAW,MAAM/D,eAAAA,CAAgB2B,OAAO,CAACR,IAAIvB,KAAAA,EAAO;AACxDqB,YAAAA,QAAAA;AACArG,YAAAA,MAAAA;YACAO,MAAAA,EAAQ;AACV,SAAA,CAAA;;AAGA,QAAA,IAAI,CAAC4I,QAAAA,EAAU;AACb,YAAA,OAAOvE,IAAI6E,QAAQ,EAAA;AACrB,QAAA;AAEA,QAAA,IAAInE,iBAAAA,CAAkBE,MAAM,CAACkH,OAAO,CAACvD,QAAAA,CAAAA,EAAW;AAC9C,YAAA,OAAOvE,IAAI4C,SAAS,EAAA;AACtB,QAAA;AAEA5C,QAAAA,GAAAA,CAAIM,IAAI,GAAG,MAAMc,KAAAA,CAAMC,IAAI,CACzB,CAACkD,QAAAA,GAAa/D,eAAAA,CAAgBqH,YAAY,CAACtD,QAAAA,CAASvI,UAAU,EAAEoE,KAAAA,EAAO;AAAEhF,gBAAAA;aAAO,CAAA,EAChFsF,iBAAAA,CAAkBgE,cAAc,EAChC,CAACH,WAAaQ,0BAAAA,CAA2BrE,iBAAAA,EAAmBN,OAAOmE,QAAAA,CAAAA,CAAAA,CACnEA,QAAAA,CAAAA;AACJ,IAAA,CAAA;AAEA,IAAA,MAAMwD,YAAW/H,GAAQ,EAAA;AACvB,QAAA,MAAM,EAAEC,WAAW,EAAE,GAAGD,IAAIG,KAAK;AACjC,QAAA,MAAM,EAAEC,KAAK,EAAE,GAAGJ,IAAIK,MAAM;AAC5B,QAAA,MAAM,EAAE/C,KAAK,EAAEgD,IAAI,EAAE,GAAGN,IAAIO,OAAO;QACnC,MAAM,EAAE9B,WAAW,EAAE,GAAG6B,IAAAA;AAExB,QAAA,MAAM2G,uBAAAA,CAAwB3G,IAAAA,CAAAA;AAE9B,QAAA,MAAME,kBAAkBC,UAAAA,CAAW,kBAAA,CAAA;AACnC,QAAA,MAAMC,iBAAAA,GAAoBD,UAAAA,CAAW,oBAAA,CAAA,CAAsBE,MAAM,CAAC;AAAEV,YAAAA,WAAAA;AAAaG,YAAAA;AAAM,SAAA,CAAA;AAEvF,QAAA,IAAIM,iBAAAA,CAAkBE,MAAM,CAACyF,MAAM,EAAA,EAAI;AACrC,YAAA,OAAOrG,IAAI4C,SAAS,EAAA;AACtB,QAAA;AAEA,QAAA,MAAMf,kBAAkB,MAAMnB,iBAAAA,CAAkBoB,cAAc,CAACuE,MAAM,CAAC/I,KAAAA,CAAAA;QACtE,MAAMmE,QAAAA,GAAW,MAAMhB,UAAAA,CAAW,kBAAA,CAAA,CAAoBL,OACnD2B,iBAAiB,CAACF,iBAClBG,KAAK,EAAA;AAER,QAAA,MAAM,EAAE5G,MAAM,EAAE,GAAG,MAAMmG,2BAA2BjB,IAAAA,EAAMF,KAAAA,CAAAA;AAE1D,QAAA,MAAMkG,kBAAkB,MAAM9F,eAAAA,CAAgB+F,WAAW,CAAC9H,aAAa2B,KAAAA,EAAO;AAC5EqB,YAAAA,QAAAA;AACArG,YAAAA;AACF,SAAA,CAAA;QAEA,IAAIkL,eAAAA,CAAgBrI,MAAM,KAAK,CAAA,EAAG;AAChC,YAAA,OAAO+B,IAAI6E,QAAQ,EAAA;AACrB,QAAA;QAEA,KAAK,MAAMN,YAAY+B,eAAAA,CAAiB;AACtC,YAAA,IAAI5F,iBAAAA,CAAkBE,MAAM,CAACyF,MAAM,CAAC9B,QAAAA,CAAAA,EAAW;AAC7C,gBAAA,OAAOvE,IAAI4C,SAAS,EAAA;AACtB,YAAA;AACF,QAAA;;;;;AAMA,QAAA,MAAMoF,kBAAAA,GAAqB;AAAI,YAAA,GAAA,IAAIhL,IAAIsJ,eAAAA,CAAgB9G,GAAG,CAAC,CAAC+E,QAAAA,GAAaA,SAASvI,UAAU,CAAA;AAAG,SAAA;QAE/F,MAAM,EAAEsJ,KAAK,EAAE,GAAG,MAAM9E,eAAAA,CAAgByH,UAAU,CAACD,kBAAAA,EAAoB5H,KAAAA,EAAO;AAAEhF,YAAAA;AAAO,SAAA,CAAA;AAEvF4E,QAAAA,GAAAA,CAAIM,IAAI,GAAG;AAAEgF,YAAAA;AAAM,SAAA;AACrB,IAAA,CAAA;AAEA,IAAA,MAAM4C,qBAAoBlI,GAAQ,EAAA;AAChC,QAAA,MAAM,EAAEC,WAAW,EAAE,GAAGD,IAAIG,KAAK;AACjC,QAAA,MAAM,EAAEC,KAAK,EAAEuB,EAAE,EAAE,GAAG3B,IAAIK,MAAM;AAEhC,QAAA,MAAMG,kBAAkBC,UAAAA,CAAW,kBAAA,CAAA;AACnC,QAAA,MAAMC,iBAAAA,GAAoBD,UAAAA,CAAW,oBAAA,CAAA,CAAsBE,MAAM,CAAC;AAAEV,YAAAA,WAAAA;AAAaG,YAAAA;AAAM,SAAA,CAAA;AAEvF,QAAA,IAAIM,iBAAAA,CAAkBE,MAAM,CAAC+B,IAAI,EAAA,EAAI;AACnC,YAAA,OAAO3C,IAAI4C,SAAS,EAAA;AACtB,QAAA;QAEA,MAAM,EAAExH,MAAM,EAAEO,MAAM,EAAE,GAAG,MAAM4F,0BAAAA,CAA2BvB,GAAAA,CAAI1C,KAAK,EAAE8C,KAAAA,CAAAA;AAEvE,QAAA,IAAIM,iBAAAA,CAAkByH,cAAc,CAACxF,IAAI,EAAA,EAAI;;YAE3C,MAAMd,eAAAA,GAAkB,MAAMnB,iBAAAA,CAAkBoB,cAAc,CAACa,IAAI,CAAC3C,IAAI1C,KAAK,CAAA;YAE7E,MAAMmE,QAAAA,GAAW,MAAMhB,UAAAA,CAAW,kBAAA,CAAA,CAAoBL,OACnD2B,iBAAiB,CAACF,iBAClBG,KAAK,EAAA;AAER,YAAA,MAAMuF,SAAS,MAAM/G,eAAAA,CAAgB2B,OAAO,CAACR,IAAIvB,KAAAA,EAAO;AACtDhF,gBAAAA,MAAAA;AACAO,gBAAAA,MAAAA;AACA8F,gBAAAA;AACF,aAAA,CAAA;AAEA,YAAA,IAAI,CAAC8F,MAAAA,EAAQ;AACX,gBAAA,OAAOvH,IAAI6E,QAAQ,EAAA;AACrB,YAAA;AAEA,YAAA,IAAInE,iBAAAA,CAAkBE,MAAM,CAAC+B,IAAI,CAAC4E,MAAAA,CAAAA,EAAS;AACzC,gBAAA,OAAOvH,IAAI4C,SAAS,EAAA;AACtB,YAAA;AACF,QAAA;AAEA,QAAA,MAAMwF,SAAS,MAAM5H,eAAAA,CAAgB0H,mBAAmB,CAACvG,IAAIvB,KAAAA,EAAOhF,MAAAA,CAAAA;QAEpE,OAAO;YACLoG,IAAAA,EAAM4G;AACR,SAAA;AACF,IAAA,CAAA;AAEA,IAAA,MAAMC,gCAA+BrI,GAAQ,EAAA;AAC3C,QAAA,MAAM,EAAEC,WAAW,EAAE,GAAGD,IAAIG,KAAK;AACjC,QAAA,MAAM/D,MAAM4D,GAAAA,CAAIO,OAAO,CAACjD,KAAK,CAACmB,WAAW;AACzC,QAAA,MAAMrD,SAAS4E,GAAAA,CAAIO,OAAO,CAACjD,KAAK,CAAClC,MAAM;AACvC,QAAA,MAAM,EAAEgF,KAAK,EAAE,GAAGJ,IAAIK,MAAM;AAE5B,QAAA,MAAMG,kBAAkBC,UAAAA,CAAW,kBAAA,CAAA;AACnC,QAAA,MAAMC,iBAAAA,GAAoBD,UAAAA,CAAW,oBAAA,CAAA,CAAsBE,MAAM,CAAC;AAAEV,YAAAA,WAAAA;AAAaG,YAAAA;AAAM,SAAA,CAAA;AAEvF,QAAA,IAAIM,iBAAAA,CAAkBE,MAAM,CAAC+B,IAAI,EAAA,EAAI;AACnC,YAAA,OAAO3C,IAAI4C,SAAS,EAAA;AACtB,QAAA;QAEA,MAAM0C,KAAAA,GAAQ,MAAM1K,MAAAA,CAAOyK,EAAE,CAAC/H,KAAK,CAAC8C,KAAAA,CAAAA,CAAOkF,KAAK,CAAC;YAC/CgD,KAAAA,EAAO;gBAAEtM,UAAAA,EAAYI;AAAI;AAC3B,SAAA,CAAA;AAEA,QAAA,IAAIkJ,UAAU,CAAA,EAAG;AACf,YAAA,OAAOtF,IAAI6E,QAAQ,EAAA;AACrB,QAAA;AAEA,QAAA,MAAM0D,SAAS,MAAM/H,eAAAA,CAAgB6H,8BAA8B,CAACjM,KAAKgE,KAAAA,EAAOhF,MAAAA,CAAAA;QAEhF,OAAO;YACLoG,IAAAA,EAAM+G;AACR,SAAA;AACF,IAAA;AACF,CAAA;;;;"}