{"version":3,"file":"node.mjs","sources":["../../../../../../k8-fastbuild-ST-fdfa778d11ba/bin/packages/angular/ssr/node/src/environment-options.ts","../../../../../../k8-fastbuild-ST-fdfa778d11ba/bin/packages/angular/ssr/node/src/errors.ts","../../../../../../k8-fastbuild-ST-fdfa778d11ba/bin/packages/angular/ssr/node/src/common-engine/inline-css-processor.ts","../../../../../../k8-fastbuild-ST-fdfa778d11ba/bin/packages/angular/ssr/node/src/common-engine/peformance-profiler.ts","../../../../../../k8-fastbuild-ST-fdfa778d11ba/bin/packages/angular/ssr/node/src/common-engine/common-engine.ts","../../../../../../k8-fastbuild-ST-fdfa778d11ba/bin/packages/angular/ssr/node/src/request.ts","../../../../../../k8-fastbuild-ST-fdfa778d11ba/bin/packages/angular/ssr/node/src/app-engine.ts","../../../../../../k8-fastbuild-ST-fdfa778d11ba/bin/packages/angular/ssr/node/src/handler.ts","../../../../../../k8-fastbuild-ST-fdfa778d11ba/bin/packages/angular/ssr/node/src/response.ts","../../../../../../k8-fastbuild-ST-fdfa778d11ba/bin/packages/angular/ssr/node/src/module.ts"],"sourcesContent":["/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\n/**\n * Retrieves the list of allowed hosts from the environment variable `NG_ALLOWED_HOSTS`.\n * @returns An array of allowed hosts.\n */\nexport function getAllowedHostsFromEnv(): ReadonlyArray<string> | undefined {\n  return getArrayFromEnv('NG_ALLOWED_HOSTS');\n}\n\n/**\n * Retrieves the list of trusted proxy headers from the environment variable `NG_TRUST_PROXY_HEADERS`.\n * @returns An array of trusted proxy headers.\n */\nexport function getTrustProxyHeadersFromEnv(): ReadonlyArray<string> | undefined {\n  return getArrayFromEnv('NG_TRUST_PROXY_HEADERS');\n}\n\nfunction getArrayFromEnv(envName: string): ReadonlyArray<string> | undefined {\n  const envValue = process.env[envName];\n  if (!envValue) {\n    return undefined;\n  }\n\n  const values: string[] = [];\n  for (const value of envValue.split(',')) {\n    const trimmed = value.trim();\n    if (trimmed.length > 0) {\n      values.push(trimmed);\n    }\n  }\n\n  return values;\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\n/**\n * Attaches listeners to the Node.js process to capture and handle unhandled rejections and uncaught exceptions.\n * Captured errors are logged to the console. This function logs errors to the console, preventing unhandled errors\n * from crashing the server. It is particularly useful for Zoneless apps, ensuring error handling without relying on Zone.js.\n *\n * @remarks\n * This function is a no-op if zone.js is available.\n * For Zone-based apps, similar functionality is provided by Zone.js itself. See the Zone.js implementation here:\n * https://github.com/angular/angular/blob/4a8d0b79001ec09bcd6f2d6b15117aa6aac1932c/packages/zone.js/lib/node/node.ts#L94%7C\n *\n * @internal\n */\nexport function attachNodeGlobalErrorHandlers(): void {\n  if (typeof Zone !== 'undefined') {\n    return;\n  }\n\n  // Ensure that the listeners are registered only once.\n  // Otherwise, multiple instances may be registered during edit/refresh.\n  const gThis: typeof globalThis & { ngAttachNodeGlobalErrorHandlersCalled?: boolean } = globalThis;\n  if (gThis.ngAttachNodeGlobalErrorHandlersCalled) {\n    return;\n  }\n\n  gThis.ngAttachNodeGlobalErrorHandlersCalled = true;\n\n  process\n    // eslint-disable-next-line no-console\n    .on('unhandledRejection', (error) => console.error('unhandledRejection', error))\n    // eslint-disable-next-line no-console\n    .on('uncaughtException', (error) => console.error('uncaughtException', error));\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport { ɵInlineCriticalCssProcessor as InlineCriticalCssProcessor } from '@angular/ssr';\nimport { readFile } from 'node:fs/promises';\n\nexport class CommonEngineInlineCriticalCssProcessor {\n  private readonly resourceCache = new Map<string, string>();\n\n  async process(html: string, outputPath: string | undefined): Promise<string> {\n    const beasties = new InlineCriticalCssProcessor(async (path) => {\n      let resourceContent = this.resourceCache.get(path);\n      if (resourceContent === undefined) {\n        resourceContent = await readFile(path, 'utf-8');\n        this.resourceCache.set(path, resourceContent);\n      }\n\n      return resourceContent;\n    }, outputPath);\n\n    return beasties.process(html);\n  }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nconst PERFORMANCE_MARK_PREFIX = '🅰️';\n\nexport function printPerformanceLogs(): void {\n  let maxWordLength = 0;\n  const benchmarks: [step: string, value: string][] = [];\n\n  for (const { name, duration } of performance.getEntriesByType('measure')) {\n    if (!name.startsWith(PERFORMANCE_MARK_PREFIX)) {\n      continue;\n    }\n\n    // `🅰️:Retrieve SSG Page` -> `Retrieve SSG Page:`\n    const step = name.slice(PERFORMANCE_MARK_PREFIX.length + 1) + ':';\n    if (step.length > maxWordLength) {\n      maxWordLength = step.length;\n    }\n\n    benchmarks.push([step, `${duration.toFixed(1)}ms`]);\n    performance.clearMeasures(name);\n  }\n\n  /* eslint-disable no-console */\n  console.log('********** Performance results **********');\n  for (const [step, value] of benchmarks) {\n    const spaces = maxWordLength - step.length + 5;\n    console.log(step + ' '.repeat(spaces) + value);\n  }\n  console.log('*****************************************');\n  /* eslint-enable no-console */\n}\n\nexport async function runMethodAndMeasurePerf<T>(\n  label: string,\n  asyncMethod: () => Promise<T>,\n): Promise<T> {\n  const labelName = `${PERFORMANCE_MARK_PREFIX}:${label}`;\n  const startLabel = `start:${labelName}`;\n  const endLabel = `end:${labelName}`;\n\n  try {\n    performance.mark(startLabel);\n\n    return await asyncMethod();\n  } finally {\n    performance.mark(endLabel);\n    performance.measure(labelName, startLabel, endLabel);\n    performance.clearMarks(startLabel);\n    performance.clearMarks(endLabel);\n  }\n}\n\nexport function noopRunMethodAndMeasurePerf<T>(\n  label: string,\n  asyncMethod: () => Promise<T>,\n): Promise<T> {\n  return asyncMethod();\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport { ApplicationRef, StaticProvider, Type } from '@angular/core';\nimport { BootstrapContext } from '@angular/platform-browser';\nimport { renderApplication, renderModule, ɵSERVER_CONTEXT } from '@angular/platform-server';\nimport * as fs from 'node:fs';\nimport { dirname, join, normalize, resolve } from 'node:path';\nimport { URL } from 'node:url';\nimport { validateUrl } from '../../../src/utils/validation';\nimport { getAllowedHostsFromEnv } from '../environment-options';\nimport { attachNodeGlobalErrorHandlers } from '../errors';\nimport { CommonEngineInlineCriticalCssProcessor } from './inline-css-processor';\nimport {\n  noopRunMethodAndMeasurePerf,\n  printPerformanceLogs,\n  runMethodAndMeasurePerf,\n} from './peformance-profiler';\n\nconst SSG_MARKER_REGEXP = /ng-server-context=[\"']\\w*\\|?ssg\\|?\\w*[\"']/;\n\n/**\n * @deprecated Use `AngularNodeAppEngine` or `AngularAppEngine` instead.\n * Deprecated since v22.\n */\nexport interface CommonEngineOptions {\n  /** A method that when invoked returns a promise that returns an `ApplicationRef` instance once resolved or an NgModule. */\n  bootstrap?: Type<{}> | ((context: BootstrapContext) => Promise<ApplicationRef>);\n\n  /** A set of platform level providers for all requests. */\n  providers?: StaticProvider[];\n\n  /** Enable request performance profiling data collection and printing the results in the server console. */\n  enablePerformanceProfiler?: boolean;\n\n  /** A set of hostnames that are allowed to access the server. */\n  allowedHosts?: readonly string[];\n}\n\n/**\n * @deprecated Use `AngularNodeAppEngine` or `AngularAppEngine` instead.\n * Deprecated since v22.\n */\nexport interface CommonEngineRenderOptions {\n  /** A method that when invoked returns a promise that returns an `ApplicationRef` instance once resolved or an NgModule. */\n  bootstrap?: Type<{}> | ((context: BootstrapContext) => Promise<ApplicationRef>);\n\n  /** A set of platform level providers for the current request. */\n  providers?: StaticProvider[];\n  url?: string;\n  document?: string;\n  documentFilePath?: string;\n\n  /**\n   * Reduce render blocking requests by inlining critical CSS.\n   * Defaults to true.\n   */\n  inlineCriticalCss?: boolean;\n\n  /**\n   * Base path location of index file.\n   * Defaults to the 'documentFilePath' dirname when not provided.\n   */\n  publicPath?: string;\n}\n\n/**\n * A common engine to use to server render an application.\n *\n * @deprecated Use `AngularNodeAppEngine` or `AngularAppEngine` instead.\n * Deprecated since v22.\n */\nexport class CommonEngine {\n  private readonly templateCache = new Map<string, string>();\n  private readonly inlineCriticalCssProcessor = new CommonEngineInlineCriticalCssProcessor();\n  private readonly pageIsSSG = new Map<string, boolean>();\n  private readonly allowedHosts: ReadonlySet<string>;\n\n  constructor(private options?: CommonEngineOptions) {\n    this.allowedHosts = new Set(getAllowedHostsFromEnv() ?? this.options?.allowedHosts ?? []);\n\n    attachNodeGlobalErrorHandlers();\n  }\n\n  /**\n   * Render an HTML document for a specific URL with specified\n   * render options\n   */\n  async render(opts: CommonEngineRenderOptions): Promise<string> {\n    const { url } = opts;\n\n    if (url && URL.canParse(url)) {\n      const urlObj = new URL(url);\n      try {\n        validateUrl(urlObj, this.allowedHosts);\n      } catch (error) {\n        // eslint-disable-next-line no-console\n        console.error(\n          `ERROR: ${(error as Error).message}` +\n            'Please provide a list of allowed hosts in the \"allowedHosts\" option in the \"CommonEngine\" constructor.',\n        );\n\n        throw error;\n      }\n    }\n\n    const enablePerformanceProfiler = this.options?.enablePerformanceProfiler;\n\n    const runMethod = enablePerformanceProfiler\n      ? runMethodAndMeasurePerf\n      : noopRunMethodAndMeasurePerf;\n\n    let html = await runMethod('Retrieve SSG Page', () => this.retrieveSSGPage(opts));\n\n    if (html === undefined) {\n      html = await runMethod('Render Page', () => this.renderApplication(opts));\n\n      if (opts.inlineCriticalCss !== false) {\n        const content = await runMethod('Inline Critical CSS', () =>\n          // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n          this.inlineCriticalCss(html!, opts),\n        );\n\n        html = content;\n      }\n    }\n\n    if (enablePerformanceProfiler) {\n      printPerformanceLogs();\n    }\n\n    return html;\n  }\n\n  private inlineCriticalCss(html: string, opts: CommonEngineRenderOptions): Promise<string> {\n    const outputPath =\n      opts.publicPath ?? (opts.documentFilePath ? dirname(opts.documentFilePath) : '');\n\n    return this.inlineCriticalCssProcessor.process(html, outputPath);\n  }\n\n  private async retrieveSSGPage(opts: CommonEngineRenderOptions): Promise<string | undefined> {\n    const { publicPath, documentFilePath, url } = opts;\n    if (!publicPath || !documentFilePath || url === undefined) {\n      return undefined;\n    }\n\n    const { pathname } = new URL(url, 'resolve://');\n    // Do not use `resolve` here as otherwise it can lead to path traversal vulnerability.\n    // See: https://portswigger.net/web-security/file-path-traversal\n    const pagePath = join(publicPath, pathname, 'index.html');\n\n    if (this.pageIsSSG.get(pagePath)) {\n      // Serve pre-rendered page.\n      return fs.promises.readFile(pagePath, 'utf-8');\n    }\n\n    if (!pagePath.startsWith(normalize(publicPath))) {\n      // Potential path traversal detected.\n      return undefined;\n    }\n\n    if (pagePath === resolve(documentFilePath) || !(await exists(pagePath))) {\n      // View matches with prerender path or file does not exist.\n      return undefined;\n    }\n\n    // Static file exists.\n    const content = await fs.promises.readFile(pagePath, 'utf-8');\n    const isSSG = SSG_MARKER_REGEXP.test(content);\n    if (isSSG) {\n      this.pageIsSSG.set(pagePath, true);\n\n      return content;\n    }\n\n    return undefined;\n  }\n\n  private async renderApplication(opts: CommonEngineRenderOptions): Promise<string> {\n    const moduleOrFactory = this.options?.bootstrap ?? opts.bootstrap;\n    if (!moduleOrFactory) {\n      throw new Error('A module or bootstrap option must be provided.');\n    }\n\n    const extraProviders: StaticProvider[] = [\n      { provide: ɵSERVER_CONTEXT, useValue: 'ssr' },\n      ...(opts.providers ?? []),\n      ...(this.options?.providers ?? []),\n    ];\n\n    let document = opts.document;\n    if (!document && opts.documentFilePath) {\n      document = await this.getDocument(opts.documentFilePath);\n    }\n\n    const commonRenderingOptions = {\n      url: opts.url,\n      document,\n      // Validation is already happened in the render method.\n      allowedHosts: ['*'],\n    };\n\n    return isBootstrapFn(moduleOrFactory)\n      ? renderApplication(moduleOrFactory, {\n          platformProviders: extraProviders,\n          ...commonRenderingOptions,\n        })\n      : renderModule(moduleOrFactory, { extraProviders, ...commonRenderingOptions });\n  }\n\n  /** Retrieve the document from the cache or the filesystem */\n  private async getDocument(filePath: string): Promise<string> {\n    let doc = this.templateCache.get(filePath);\n\n    if (!doc) {\n      doc = await fs.promises.readFile(filePath, 'utf-8');\n      this.templateCache.set(filePath, doc);\n    }\n\n    return doc;\n  }\n}\n\nasync function exists(path: fs.PathLike): Promise<boolean> {\n  try {\n    await fs.promises.access(path, fs.constants.F_OK);\n\n    return true;\n  } catch {\n    return false;\n  }\n}\n\nfunction isBootstrapFn(\n  value: unknown,\n): value is (context: BootstrapContext) => Promise<ApplicationRef> {\n  // We can differentiate between a module and a bootstrap function by reading compiler-generated `ɵmod` static property:\n  return typeof value === 'function' && !('ɵmod' in value);\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport type { IncomingHttpHeaders, IncomingMessage } from 'node:http';\nimport type { Http2ServerRequest } from 'node:http2';\nimport {\n  getFirstHeaderValue,\n  isProxyHeaderAllowed,\n  normalizeTrustProxyHeaders,\n  parseForwardedHeader,\n} from '../../src/utils/validation';\n\n/**\n * A set containing all the pseudo-headers defined in the HTTP/2 specification.\n *\n * This set can be used to filter out pseudo-headers from a list of headers,\n * as they are not allowed to be set directly using the `Node.js` Undici API or\n * the web `Headers` API.\n */\nconst HTTP2_PSEUDO_HEADERS: ReadonlySet<string> = new Set([\n  ':method',\n  ':scheme',\n  ':authority',\n  ':path',\n  ':status',\n]);\n\n/**\n * Converts a Node.js `IncomingMessage` or `Http2ServerRequest` into a\n * Web Standard `Request` object.\n *\n * This function adapts the Node.js request objects to a format that can\n * be used by web platform APIs.\n *\n * @param nodeRequest - The Node.js request object (`IncomingMessage` or `Http2ServerRequest`) to convert.\n * @param trustProxyHeaders - A boolean or an array of proxy headers to trust when constructing the request URL.\n *\n * @remarks\n * When `trustProxyHeaders` is enabled, headers such as `Forwarded`, `X-Forwarded-Host`, and\n * `X-Forwarded-Prefix` should ideally be strictly validated at a higher infrastructure\n * level (e.g., at the reverse proxy or API gateway) before reaching the application.\n *\n * @returns A Web Standard `Request` object.\n */\nexport function createWebRequestFromNodeRequest(\n  nodeRequest: IncomingMessage | Http2ServerRequest,\n  trustProxyHeaders?: boolean | readonly string[],\n): Request {\n  const trustProxyHeadersNormalized = normalizeTrustProxyHeaders(trustProxyHeaders);\n  const { headers, method = 'GET' } = nodeRequest;\n  const withBody = method !== 'GET' && method !== 'HEAD';\n  const referrer = headers.referer && URL.canParse(headers.referer) ? headers.referer : undefined;\n\n  return new Request(createRequestUrl(nodeRequest, trustProxyHeadersNormalized), {\n    method,\n    headers: createRequestHeaders(headers),\n    body: withBody ? nodeRequest : undefined,\n    duplex: withBody ? 'half' : undefined,\n    referrer,\n  });\n}\n\n/**\n * Creates a `Headers` object from Node.js `IncomingHttpHeaders`.\n *\n * @param nodeHeaders - The Node.js `IncomingHttpHeaders` object to convert.\n * @returns A `Headers` object containing the converted headers.\n */\nfunction createRequestHeaders(nodeHeaders: IncomingHttpHeaders): Headers {\n  const headers = new Headers();\n\n  for (const [name, value] of Object.entries(nodeHeaders)) {\n    if (HTTP2_PSEUDO_HEADERS.has(name)) {\n      continue;\n    }\n\n    if (typeof value === 'string') {\n      headers.append(name, value);\n    } else if (Array.isArray(value)) {\n      for (const item of value) {\n        headers.append(name, item);\n      }\n    }\n  }\n\n  return headers;\n}\n\n/**\n * Creates a `URL` object from a Node.js `IncomingMessage`, taking into account the protocol, host, and port.\n *\n * @param nodeRequest - The Node.js `IncomingMessage` or `Http2ServerRequest` object to extract URL information from.\n * @param trustProxyHeaders - A set of allowed proxy headers.\n *\n * @remarks\n * When `trustProxyHeaders` is enabled, headers such as `Forwarded`, `X-Forwarded-Host`, and\n * `X-Forwarded-Prefix` should ideally be strictly validated at a higher infrastructure\n * level (e.g., at the reverse proxy or API gateway) before reaching the application.\n *\n * @returns A `URL` object representing the request URL.\n */\nexport function createRequestUrl(\n  nodeRequest: IncomingMessage | Http2ServerRequest,\n  trustProxyHeaders: ReadonlySet<string>,\n): URL {\n  const {\n    headers,\n    socket,\n    url = '',\n    originalUrl,\n  } = nodeRequest as IncomingMessage & { originalUrl?: string };\n\n  const forwardedHeaderValue = getAllowedProxyHeaderValue(headers, 'forwarded', trustProxyHeaders);\n  const forwardedParams = parseForwardedHeader(forwardedHeaderValue);\n\n  const protocol =\n    forwardedParams.proto ??\n    getAllowedProxyHeaderValue(headers, 'x-forwarded-proto', trustProxyHeaders) ??\n    ('encrypted' in socket && socket.encrypted ? 'https' : 'http');\n\n  const hostname =\n    forwardedParams.host ??\n    getAllowedProxyHeaderValue(headers, 'x-forwarded-host', trustProxyHeaders) ??\n    headers.host ??\n    headers[':authority'];\n\n  if (Array.isArray(hostname)) {\n    throw new Error('host value cannot be an array.');\n  }\n\n  let hostnameWithPort = hostname;\n  if (!hostname?.includes(':')) {\n    const port = getAllowedProxyHeaderValue(headers, 'x-forwarded-port', trustProxyHeaders);\n    if (port) {\n      hostnameWithPort += `:${port}`;\n    }\n  }\n\n  return new URL(`${protocol}://${hostnameWithPort}${originalUrl ?? url}`);\n}\n\n/**\n * Gets the first value of an allowed proxy header.\n *\n * @param headers - The Node.js incoming HTTP headers.\n * @param headerName - The name of the proxy header to retrieve.\n * @param trustProxyHeaders - A set of allowed proxy headers.\n * @returns The value of the allowed proxy header, or `undefined` if not allowed or not present.\n */\nfunction getAllowedProxyHeaderValue(\n  headers: IncomingHttpHeaders,\n  headerName: string,\n  trustProxyHeaders: ReadonlySet<string>,\n): string | undefined {\n  return isProxyHeaderAllowed(headerName, trustProxyHeaders)\n    ? getFirstHeaderValue(headers[headerName])\n    : undefined;\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport { AngularAppEngine } from '@angular/ssr';\nimport type { IncomingMessage } from 'node:http';\nimport type { Http2ServerRequest } from 'node:http2';\nimport { AngularAppEngineOptions } from '../../src/app-engine';\nimport { getAllowedHostsFromEnv, getTrustProxyHeadersFromEnv } from './environment-options';\nimport { attachNodeGlobalErrorHandlers } from './errors';\nimport { createWebRequestFromNodeRequest } from './request';\n\n/**\n * Options for the Angular Node.js server application engine.\n */\nexport interface AngularNodeAppEngineOptions extends AngularAppEngineOptions {}\n\n/**\n * Angular server application engine.\n * Manages Angular server applications (including localized ones), handles rendering requests,\n * and optionally transforms index HTML before rendering.\n *\n * @remarks This class should be instantiated once and used as a singleton across the server-side\n * application to ensure consistent handling of rendering requests and resource management.\n */\nexport class AngularNodeAppEngine {\n  private readonly angularAppEngine: AngularAppEngine;\n  private readonly trustProxyHeaders?: boolean | readonly string[];\n\n  /**\n   * Creates a new instance of the Angular Node.js server application engine.\n   * @param options Options for the Angular Node.js server application engine.\n   */\n  constructor(options?: AngularNodeAppEngineOptions) {\n    const appEngineOptions: AngularAppEngineOptions = {\n      ...options,\n      allowedHosts: options?.allowedHosts ?? getAllowedHostsFromEnv(),\n      trustProxyHeaders: options?.trustProxyHeaders ?? getTrustProxyHeadersFromEnv(),\n    };\n\n    this.angularAppEngine = new AngularAppEngine(appEngineOptions);\n    this.trustProxyHeaders = appEngineOptions.trustProxyHeaders;\n\n    attachNodeGlobalErrorHandlers();\n  }\n\n  /**\n   * Handles an incoming HTTP request by serving prerendered content, performing server-side rendering,\n   * or delivering a static file for client-side rendered routes based on the `RenderMode` setting.\n   *\n   * This method adapts Node.js's `IncomingMessage`, `Http2ServerRequest` or `Request`\n   * to a format compatible with the `AngularAppEngine` and delegates the handling logic to it.\n   *\n   * @param request - The incoming HTTP request (`IncomingMessage`, `Http2ServerRequest` or `Request`).\n   * @param requestContext - Optional context for rendering, such as metadata associated with the request.\n   * @returns A promise that resolves to the resulting HTTP response object, or `null` if no matching Angular route is found.\n   *\n   * @remarks A request to `https://www.example.com/page/index.html` will serve or render the Angular route\n   * corresponding to `https://www.example.com/page`.\n   *\n   * @remarks\n   * To prevent potential Server-Side Request Forgery (SSRF), this function verifies the hostname\n   * of the `request.url` against a list of authorized hosts.\n   * If the hostname is not recognized a 400 Bad Request is returned.\n   *\n   * Resolution:\n   * Authorize your hostname by configuring `allowedHosts` in `angular.json` in:\n   * `projects.[project-name].architect.build.options.security.allowedHosts`.\n   * Alternatively, you can define the allowed hostname via the environment variable `process.env['NG_ALLOWED_HOSTS']`\n   * or pass it directly through the configuration options of `AngularNodeAppEngine`.\n   *\n   * For more information see: https://angular.dev/best-practices/security#preventing-server-side-request-forgery-ssrf\n   */\n  async handle(\n    request: IncomingMessage | Http2ServerRequest | Request,\n    requestContext?: unknown,\n  ): Promise<Response | null> {\n    const webRequest =\n      request instanceof Request\n        ? request\n        : createWebRequestFromNodeRequest(request, this.trustProxyHeaders);\n\n    return this.angularAppEngine.handle(webRequest, requestContext);\n  }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport type { IncomingMessage, ServerResponse } from 'node:http';\n\n/**\n * Represents a middleware function for handling HTTP requests in a Node.js environment.\n *\n * @param req - The incoming HTTP request object.\n * @param res - The outgoing HTTP response object.\n * @param next - A callback function that signals the completion of the middleware or forwards the error if provided.\n *\n * @returns A Promise that resolves to void or simply void. The handler can be asynchronous.\n */\nexport type NodeRequestHandlerFunction = (\n  req: IncomingMessage,\n  res: ServerResponse,\n  next: (err?: unknown) => void,\n) => Promise<void> | void;\n\n/**\n * Attaches metadata to the handler function to mark it as a special handler for Node.js environments.\n *\n * @typeParam T - The type of the handler function.\n * @param handler - The handler function to be defined and annotated.\n * @returns The same handler function passed as an argument, with metadata attached.\n *\n * @example\n * Usage in an Express application:\n * ```ts\n * const app = express();\n * export default createNodeRequestHandler(app);\n * ```\n *\n * @example\n * Usage in a Hono application:\n * ```ts\n * const app = new Hono();\n * export default createNodeRequestHandler(async (req, res, next) => {\n *   try {\n *     const webRes = await app.fetch(createWebRequestFromNodeRequest(req));\n *     if (webRes) {\n *       await writeResponseToNodeResponse(webRes, res);\n *     } else {\n *       next();\n *     }\n *   } catch (error) {\n *     next(error);\n *   }\n * });\n * ```\n *\n * @example\n * Usage in a Fastify application:\n * ```ts\n * const app = Fastify();\n * export default createNodeRequestHandler(async (req, res) => {\n *   await app.ready();\n *   app.server.emit('request', req, res);\n * });\n * ```\n */\nexport function createNodeRequestHandler<T extends NodeRequestHandlerFunction>(handler: T): T {\n  (handler as T & { __ng_node_request_handler__?: boolean })['__ng_node_request_handler__'] = true;\n\n  return handler;\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport type { ServerResponse } from 'node:http';\nimport type { Http2ServerResponse } from 'node:http2';\n\n/**\n * Streams a web-standard `Response` into a Node.js `ServerResponse`\n * or `Http2ServerResponse`.\n *\n * This function adapts the web `Response` object to write its content\n * to a Node.js response object, handling both HTTP/1.1 and HTTP/2.\n *\n * @param source - The web-standard `Response` object to stream from.\n * @param destination - The Node.js response object (`ServerResponse` or `Http2ServerResponse`) to stream into.\n * @returns A promise that resolves once the streaming operation is complete.\n */\nexport async function writeResponseToNodeResponse(\n  source: Response,\n  destination: ServerResponse | Http2ServerResponse,\n): Promise<void> {\n  const { status, headers, body } = source;\n  destination.statusCode = status;\n\n  let cookieHeaderSet = false;\n  for (const [name, value] of headers.entries()) {\n    if (name === 'set-cookie') {\n      if (cookieHeaderSet) {\n        continue;\n      }\n\n      // Sets the 'set-cookie' header only once to ensure it is correctly applied.\n      // Concatenating 'set-cookie' values can lead to incorrect behavior, so we use a single value from `headers.getSetCookie()`.\n      destination.setHeader(name, headers.getSetCookie());\n      cookieHeaderSet = true;\n    } else {\n      destination.setHeader(name, value);\n    }\n  }\n\n  if ('flushHeaders' in destination) {\n    destination.flushHeaders();\n  }\n\n  if (!body) {\n    destination.end();\n\n    return;\n  }\n\n  try {\n    const reader = body.getReader();\n\n    destination.on('close', () => {\n      reader.cancel().catch((error) => {\n        // eslint-disable-next-line no-console\n        console.error(\n          `An error occurred while writing the response body for: ${destination.req.url}.`,\n          error,\n        );\n      });\n    });\n\n    // eslint-disable-next-line no-constant-condition\n    while (true) {\n      const { done, value } = await reader.read();\n      if (done) {\n        destination.end();\n        break;\n      }\n\n      const canContinue = (destination as ServerResponse).write(value);\n      if (canContinue === false) {\n        // Explicitly check for `false`, as AWS may return `undefined` even though this is not valid.\n        // See: https://github.com/CodeGenieApp/serverless-express/issues/683\n        await new Promise<void>((resolve) => destination.once('drain', resolve));\n      }\n    }\n  } catch {\n    destination.end('Internal server error.');\n  }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport { argv } from 'node:process';\nimport { fileURLToPath } from 'node:url';\n\n/**\n * Determines whether the provided URL represents the main entry point module.\n *\n * This function checks if the provided URL corresponds to the main ESM module being executed directly.\n * It's useful for conditionally executing code that should only run when a module is the entry point,\n * such as starting a server or initializing an application.\n *\n * It performs two key checks:\n * 1. Verifies if the URL starts with 'file:', ensuring it is a local file.\n * 2. Compares the URL's resolved file path with the first command-line argument (`process.argv[1]`),\n *    which points to the file being executed.\n *\n * @param url The URL of the module to check. This should typically be `import.meta.url`.\n * @returns `true` if the provided URL represents the main entry point, otherwise `false`.\n */\nexport function isMainModule(url: string): boolean {\n  return url.startsWith('file:') && argv[1] === fileURLToPath(url);\n}\n"],"names":["InlineCriticalCssProcessor","URL","ɵSERVER_CONTEXT"],"mappings":";;;;;;;;;SAYgB,sBAAsB,GAAA;EACpC,OAAO,eAAe,CAAC,kBAAkB,CAAC;AAC5C;SAMgB,2BAA2B,GAAA;EACzC,OAAO,eAAe,CAAC,wBAAwB,CAAC;AAClD;AAEA,SAAS,eAAe,CAAC,OAAe,EAAA;AACtC,EAAA,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;EACrC,IAAI,CAAC,QAAQ,EAAE;AACb,IAAA,OAAO,SAAS;AAClB,EAAA;EAEA,MAAM,MAAM,GAAa,EAAE;EAC3B,KAAK,MAAM,KAAK,IAAI,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;AACvC,IAAA,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE;AAC5B,IAAA,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;AACtB,MAAA,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC;AACtB,IAAA;AACF,EAAA;AAEA,EAAA,OAAO,MAAM;AACf;;SCnBgB,6BAA6B,GAAA;AAC3C,EAAA,IAAI,OAAO,IAAI,KAAK,WAAW,EAAE;AAC/B,IAAA;AACF,EAAA;EAIA,MAAM,KAAK,GAA4E,UAAU;EACjG,IAAI,KAAK,CAAC,qCAAqC,EAAE;AAC/C,IAAA;AACF,EAAA;EAEA,KAAK,CAAC,qCAAqC,GAAG,IAAI;AAElD,EAAA,OAAA,CAEG,EAAE,CAAC,oBAAoB,EAAG,KAAK,IAAK,OAAO,CAAC,KAAK,CAAC,oBAAoB,EAAE,KAAK,CAAC,CAAA,CAE9E,EAAE,CAAC,mBAAmB,EAAG,KAAK,IAAK,OAAO,CAAC,KAAK,CAAC,mBAAmB,EAAE,KAAK,CAAC,CAAC;AAClF;;MC5Ba,sCAAsC,CAAA;AAChC,EAAA,aAAa,GAAG,IAAI,GAAG,EAAkB;AAE1D,EAAA,MAAM,OAAO,CAAC,IAAY,EAAE,UAA8B,EAAA;AACxD,IAAA,MAAM,QAAQ,GAAG,IAAIA,2BAA0B,CAAC,MAAO,IAAI,IAAI;MAC7D,IAAI,eAAe,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC;MAClD,IAAI,eAAe,KAAK,SAAS,EAAE;AACjC,QAAA,eAAe,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;QAC/C,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,EAAE,eAAe,CAAC;AAC/C,MAAA;AAEA,MAAA,OAAO,eAAe;IACxB,CAAC,EAAE,UAAU,CAAC;AAEd,IAAA,OAAO,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC;AAC/B,EAAA;AACD;;ACnBD,MAAM,uBAAuB,GAAG,KAAK;SAErB,oBAAoB,GAAA;EAClC,IAAI,aAAa,GAAG,CAAC;EACrB,MAAM,UAAU,GAAoC,EAAE;AAEtD,EAAA,KAAK,MAAM;IAAE,IAAI;AAAE,IAAA;AAAQ,GAAE,IAAI,WAAW,CAAC,gBAAgB,CAAC,SAAS,CAAC,EAAE;AACxE,IAAA,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,uBAAuB,CAAC,EAAE;AAC7C,MAAA;AACF,IAAA;AAGA,IAAA,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,uBAAuB,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,GAAG;AACjE,IAAA,IAAI,IAAI,CAAC,MAAM,GAAG,aAAa,EAAE;MAC/B,aAAa,GAAG,IAAI,CAAC,MAAM;AAC7B,IAAA;AAEA,IAAA,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAA,EAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA,EAAA,CAAI,CAAC,CAAC;AACnD,IAAA,WAAW,CAAC,aAAa,CAAC,IAAI,CAAC;AACjC,EAAA;AAGA,EAAA,OAAO,CAAC,GAAG,CAAC,2CAA2C,CAAC;EACxD,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,UAAU,EAAE;IACtC,MAAM,MAAM,GAAG,aAAa,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC;AAC9C,IAAA,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC;AAChD,EAAA;AACA,EAAA,OAAO,CAAC,GAAG,CAAC,2CAA2C,CAAC;AAE1D;AAEO,eAAe,uBAAuB,CAC3C,KAAa,EACb,WAA6B,EAAA;AAE7B,EAAA,MAAM,SAAS,GAAG,CAAA,EAAG,uBAAuB,CAAA,CAAA,EAAI,KAAK,CAAA,CAAE;AACvD,EAAA,MAAM,UAAU,GAAG,CAAA,MAAA,EAAS,SAAS,CAAA,CAAE;AACvC,EAAA,MAAM,QAAQ,GAAG,CAAA,IAAA,EAAO,SAAS,CAAA,CAAE;EAEnC,IAAI;AACF,IAAA,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC;IAE5B,OAAO,MAAM,WAAW,EAAE;AAC5B,EAAA,CAAA,SAAU;AACR,IAAA,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC;IAC1B,WAAW,CAAC,OAAO,CAAC,SAAS,EAAE,UAAU,EAAE,QAAQ,CAAC;AACpD,IAAA,WAAW,CAAC,UAAU,CAAC,UAAU,CAAC;AAClC,IAAA,WAAW,CAAC,UAAU,CAAC,QAAQ,CAAC;AAClC,EAAA;AACF;AAEM,SAAU,2BAA2B,CACzC,KAAa,EACb,WAA6B,EAAA;EAE7B,OAAO,WAAW,EAAE;AACtB;;ACxCA,MAAM,iBAAiB,GAAG,2CAA2C;MAqDxD,YAAY,CAAA;EAMH,OAAA;AALH,EAAA,aAAa,GAAG,IAAI,GAAG,EAAkB;AACzC,EAAA,0BAA0B,GAAG,IAAI,sCAAsC,EAAE;AACzE,EAAA,SAAS,GAAG,IAAI,GAAG,EAAmB;EACtC,YAAY;EAE7B,WAAA,CAAoB,OAA6B,EAAA;IAA7B,IAAA,CAAA,OAAO,GAAP,OAAO;AACzB,IAAA,IAAI,CAAC,YAAY,GAAG,IAAI,GAAG,CAAC,sBAAsB,EAAE,IAAI,IAAI,CAAC,OAAO,EAAE,YAAY,IAAI,EAAE,CAAC;AAEzF,IAAA,6BAA6B,EAAE;AACjC,EAAA;EAMA,MAAM,MAAM,CAAC,IAA+B,EAAA;IAC1C,MAAM;AAAE,MAAA;AAAG,KAAE,GAAG,IAAI;IAEpB,IAAI,GAAG,IAAIC,KAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;AAC5B,MAAA,MAAM,MAAM,GAAG,IAAIA,KAAG,CAAC,GAAG,CAAC;MAC3B,IAAI;AACF,QAAA,WAAW,CAAC,MAAM,EAAE,IAAI,CAAC,YAAY,CAAC;MACxC,CAAA,CAAE,OAAO,KAAK,EAAE;QAEd,OAAO,CAAC,KAAK,CACX,CAAA,OAAA,EAAW,KAAe,CAAC,OAAO,CAAA,CAAE,GAClC,wGAAwG,CAC3G;AAED,QAAA,MAAM,KAAK;AACb,MAAA;AACF,IAAA;AAEA,IAAA,MAAM,yBAAyB,GAAG,IAAI,CAAC,OAAO,EAAE,yBAAyB;AAEzE,IAAA,MAAM,SAAS,GAAG,yBAAA,GACd,uBAAA,GACA,2BAA2B;AAE/B,IAAA,IAAI,IAAI,GAAG,MAAM,SAAS,CAAC,mBAAmB,EAAE,MAAM,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;IAEjF,IAAI,IAAI,KAAK,SAAS,EAAE;AACtB,MAAA,IAAI,GAAG,MAAM,SAAS,CAAC,aAAa,EAAE,MAAM,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;AAEzE,MAAA,IAAI,IAAI,CAAC,iBAAiB,KAAK,KAAK,EAAE;AACpC,QAAA,MAAM,OAAO,GAAG,MAAM,SAAS,CAAC,qBAAqB,EAAE,MAErD,IAAI,CAAC,iBAAiB,CAAC,IAAK,EAAE,IAAI,CAAC,CACpC;AAED,QAAA,IAAI,GAAG,OAAO;AAChB,MAAA;AACF,IAAA;AAEA,IAAA,IAAI,yBAAyB,EAAE;AAC7B,MAAA,oBAAoB,EAAE;AACxB,IAAA;AAEA,IAAA,OAAO,IAAI;AACb,EAAA;AAEQ,EAAA,iBAAiB,CAAC,IAAY,EAAE,IAA+B,EAAA;AACrE,IAAA,MAAM,UAAU,GACd,IAAI,CAAC,UAAU,KAAK,IAAI,CAAC,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE,CAAC;IAElF,OAAO,IAAI,CAAC,0BAA0B,CAAC,OAAO,CAAC,IAAI,EAAE,UAAU,CAAC;AAClE,EAAA;EAEQ,MAAM,eAAe,CAAC,IAA+B,EAAA;IAC3D,MAAM;MAAE,UAAU;MAAE,gBAAgB;AAAE,MAAA;AAAG,KAAE,GAAG,IAAI;IAClD,IAAI,CAAC,UAAU,IAAI,CAAC,gBAAgB,IAAI,GAAG,KAAK,SAAS,EAAE;AACzD,MAAA,OAAO,SAAS;AAClB,IAAA;IAEA,MAAM;AAAE,MAAA;AAAQ,KAAE,GAAG,IAAIA,KAAG,CAAC,GAAG,EAAE,YAAY,CAAC;IAG/C,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,EAAE,QAAQ,EAAE,YAAY,CAAC;IAEzD,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;MAEhC,OAAO,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;AAChD,IAAA;IAEA,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,EAAE;AAE/C,MAAA,OAAO,SAAS;AAClB,IAAA;AAEA,IAAA,IAAI,QAAQ,KAAK,OAAO,CAAC,gBAAgB,CAAC,IAAI,EAAE,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE;AAEvE,MAAA,OAAO,SAAS;AAClB,IAAA;AAGA,IAAA,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;AAC7D,IAAA,MAAM,KAAK,GAAG,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC;AAC7C,IAAA,IAAI,KAAK,EAAE;MACT,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC;AAElC,MAAA,OAAO,OAAO;AAChB,IAAA;AAEA,IAAA,OAAO,SAAS;AAClB,EAAA;EAEQ,MAAM,iBAAiB,CAAC,IAA+B,EAAA;IAC7D,MAAM,eAAe,GAAG,IAAI,CAAC,OAAO,EAAE,SAAS,IAAI,IAAI,CAAC,SAAS;IACjE,IAAI,CAAC,eAAe,EAAE;AACpB,MAAA,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC;AACnE,IAAA;IAEA,MAAM,cAAc,GAAqB,CACvC;AAAE,MAAA,OAAO,EAAEC,eAAe;AAAE,MAAA,QAAQ,EAAE;AAAK,KAAE,EAC7C,IAAI,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC,EACzB,IAAI,IAAI,CAAC,OAAO,EAAE,SAAS,IAAI,EAAE,CAAC,CACnC;AAED,IAAA,IAAI,QAAQ,GAAG,IAAI,CAAC,QAAQ;AAC5B,IAAA,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,gBAAgB,EAAE;MACtC,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,gBAAgB,CAAC;AAC1D,IAAA;AAEA,IAAA,MAAM,sBAAsB,GAAG;MAC7B,GAAG,EAAE,IAAI,CAAC,GAAG;MACb,QAAQ;MAER,YAAY,EAAE,CAAC,GAAG;KACnB;IAED,OAAO,aAAa,CAAC,eAAe,CAAA,GAChC,iBAAiB,CAAC,eAAe,EAAE;AACjC,MAAA,iBAAiB,EAAE,cAAc;MACjC,GAAG;KACJ,CAAA,GACD,YAAY,CAAC,eAAe,EAAE;MAAE,cAAc;MAAE,GAAG;AAAsB,KAAE,CAAC;AAClF,EAAA;EAGQ,MAAM,WAAW,CAAC,QAAgB,EAAA;IACxC,IAAI,GAAG,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC;IAE1C,IAAI,CAAC,GAAG,EAAE;MACR,GAAG,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;MACnD,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC;AACvC,IAAA;AAEA,IAAA,OAAO,GAAG;AACZ,EAAA;AACD;AAED,eAAe,MAAM,CAAC,IAAiB,EAAA;EACrC,IAAI;AACF,IAAA,MAAM,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC;AAEjD,IAAA,OAAO,IAAI;AACb,EAAA,CAAA,CAAE,MAAM;AACN,IAAA,OAAO,KAAK;AACd,EAAA;AACF;AAEA,SAAS,aAAa,CACpB,KAAc,EAAA;EAGd,OAAO,OAAO,KAAK,KAAK,UAAU,IAAI,EAAE,MAAM,IAAI,KAAK,CAAC;AAC1D;;AC5NA,MAAM,oBAAoB,GAAwB,IAAI,GAAG,CAAC,CACxD,SAAS,EACT,SAAS,EACT,YAAY,EACZ,OAAO,EACP,SAAS,CACV,CAAC;AAmBI,SAAU,+BAA+B,CAC7C,WAAiD,EACjD,iBAA+C,EAAA;AAE/C,EAAA,MAAM,2BAA2B,GAAG,0BAA0B,CAAC,iBAAiB,CAAC;EACjF,MAAM;IAAE,OAAO;AAAE,IAAA,MAAM,GAAG;AAAK,GAAE,GAAG,WAAW;EAC/C,MAAM,QAAQ,GAAG,MAAM,KAAK,KAAK,IAAI,MAAM,KAAK,MAAM;AACtD,EAAA,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,IAAI,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,GAAG,SAAS;EAE/F,OAAO,IAAI,OAAO,CAAC,gBAAgB,CAAC,WAAW,EAAE,2BAA2B,CAAC,EAAE;IAC7E,MAAM;AACN,IAAA,OAAO,EAAE,oBAAoB,CAAC,OAAO,CAAC;AACtC,IAAA,IAAI,EAAE,QAAQ,GAAG,WAAW,GAAG,SAAS;AACxC,IAAA,MAAM,EAAE,QAAQ,GAAG,MAAM,GAAG,SAAS;AACrC,IAAA;AACD,GAAA,CAAC;AACJ;AAQA,SAAS,oBAAoB,CAAC,WAAgC,EAAA;AAC5D,EAAA,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE;AAE7B,EAAA,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE;AACvD,IAAA,IAAI,oBAAoB,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;AAClC,MAAA;AACF,IAAA;AAEA,IAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AAC7B,MAAA,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC;IAC7B,CAAA,MAAO,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AAC/B,MAAA,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;AACxB,QAAA,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC;AAC5B,MAAA;AACF,IAAA;AACF,EAAA;AAEA,EAAA,OAAO,OAAO;AAChB;AAeM,SAAU,gBAAgB,CAC9B,WAAiD,EACjD,iBAAsC,EAAA;EAEtC,MAAM;IACJ,OAAO;IACP,MAAM;AACN,IAAA,GAAG,GAAG,EAAE;AACR,IAAA;AAAW,GACZ,GAAG,WAAyD;EAE7D,MAAM,oBAAoB,GAAG,0BAA0B,CAAC,OAAO,EAAE,WAAW,EAAE,iBAAiB,CAAC;AAChG,EAAA,MAAM,eAAe,GAAG,oBAAoB,CAAC,oBAAoB,CAAC;EAElE,MAAM,QAAQ,GACZ,eAAe,CAAC,KAAK,IACrB,0BAA0B,CAAC,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,CAAC,KAC1E,WAAW,IAAI,MAAM,IAAI,MAAM,CAAC,SAAS,GAAG,OAAO,GAAG,MAAM,CAAC;EAEhE,MAAM,QAAQ,GACZ,eAAe,CAAC,IAAI,IACpB,0BAA0B,CAAC,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,CAAC,IAC1E,OAAO,CAAC,IAAI,IACZ,OAAO,CAAC,YAAY,CAAC;AAEvB,EAAA,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;AAC3B,IAAA,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC;AACnD,EAAA;EAEA,IAAI,gBAAgB,GAAG,QAAQ;AAC/B,EAAA,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,GAAG,CAAC,EAAE;IAC5B,MAAM,IAAI,GAAG,0BAA0B,CAAC,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,CAAC;AACvF,IAAA,IAAI,IAAI,EAAE;MACR,gBAAgB,IAAI,CAAA,CAAA,EAAI,IAAI,CAAA,CAAE;AAChC,IAAA;AACF,EAAA;AAEA,EAAA,OAAO,IAAI,GAAG,CAAC,CAAA,EAAG,QAAQ,CAAA,GAAA,EAAM,gBAAgB,CAAA,EAAG,WAAW,IAAI,GAAG,CAAA,CAAE,CAAC;AAC1E;AAUA,SAAS,0BAA0B,CACjC,OAA4B,EAC5B,UAAkB,EAClB,iBAAsC,EAAA;AAEtC,EAAA,OAAO,oBAAoB,CAAC,UAAU,EAAE,iBAAiB,CAAA,GACrD,mBAAmB,CAAC,OAAO,CAAC,UAAU,CAAC,CAAA,GACvC,SAAS;AACf;;MCrIa,oBAAoB,CAAA;EACd,gBAAgB;EAChB,iBAAiB;EAMlC,WAAA,CAAY,OAAqC,EAAA;AAC/C,IAAA,MAAM,gBAAgB,GAA4B;AAChD,MAAA,GAAG,OAAO;AACV,MAAA,YAAY,EAAE,OAAO,EAAE,YAAY,IAAI,sBAAsB,EAAE;AAC/D,MAAA,iBAAiB,EAAE,OAAO,EAAE,iBAAiB,IAAI,2BAA2B;KAC7E;AAED,IAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,gBAAgB,CAAC,gBAAgB,CAAC;AAC9D,IAAA,IAAI,CAAC,iBAAiB,GAAG,gBAAgB,CAAC,iBAAiB;AAE3D,IAAA,6BAA6B,EAAE;AACjC,EAAA;AA6BA,EAAA,MAAM,MAAM,CACV,OAAuD,EACvD,cAAwB,EAAA;AAExB,IAAA,MAAM,UAAU,GACd,OAAO,YAAY,OAAA,GACf,OAAA,GACA,+BAA+B,CAAC,OAAO,EAAE,IAAI,CAAC,iBAAiB,CAAC;IAEtE,OAAO,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,UAAU,EAAE,cAAc,CAAC;AACjE,EAAA;AACD;;ACrBK,SAAU,wBAAwB,CAAuC,OAAU,EAAA;AACtF,EAAA,OAAyD,CAAC,6BAA6B,CAAC,GAAG,IAAI;AAEhG,EAAA,OAAO,OAAO;AAChB;;ACjDO,eAAe,2BAA2B,CAC/C,MAAgB,EAChB,WAAiD,EAAA;EAEjD,MAAM;IAAE,MAAM;IAAE,OAAO;AAAE,IAAA;AAAI,GAAE,GAAG,MAAM;EACxC,WAAW,CAAC,UAAU,GAAG,MAAM;EAE/B,IAAI,eAAe,GAAG,KAAK;AAC3B,EAAA,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,OAAO,CAAC,OAAO,EAAE,EAAE;IAC7C,IAAI,IAAI,KAAK,YAAY,EAAE;AACzB,MAAA,IAAI,eAAe,EAAE;AACnB,QAAA;AACF,MAAA;MAIA,WAAW,CAAC,SAAS,CAAC,IAAI,EAAE,OAAO,CAAC,YAAY,EAAE,CAAC;AACnD,MAAA,eAAe,GAAG,IAAI;AACxB,IAAA,CAAA,MAAO;AACL,MAAA,WAAW,CAAC,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC;AACpC,IAAA;AACF,EAAA;EAEA,IAAI,cAAc,IAAI,WAAW,EAAE;IACjC,WAAW,CAAC,YAAY,EAAE;AAC5B,EAAA;EAEA,IAAI,CAAC,IAAI,EAAE;IACT,WAAW,CAAC,GAAG,EAAE;AAEjB,IAAA;AACF,EAAA;EAEA,IAAI;AACF,IAAA,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE;AAE/B,IAAA,WAAW,CAAC,EAAE,CAAC,OAAO,EAAE,MAAK;MAC3B,MAAM,CAAC,MAAM,EAAE,CAAC,KAAK,CAAE,KAAK,IAAI;AAE9B,QAAA,OAAO,CAAC,KAAK,CACX,CAAA,uDAAA,EAA0D,WAAW,CAAC,GAAG,CAAC,GAAG,CAAA,CAAA,CAAG,EAChF,KAAK,CACN;AACH,MAAA,CAAC,CAAC;AACJ,IAAA,CAAC,CAAC;AAGF,IAAA,OAAO,IAAI,EAAE;MACX,MAAM;QAAE,IAAI;AAAE,QAAA;AAAK,OAAE,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE;AAC3C,MAAA,IAAI,IAAI,EAAE;QACR,WAAW,CAAC,GAAG,EAAE;AACjB,QAAA;AACF,MAAA;AAEA,MAAA,MAAM,WAAW,GAAI,WAA8B,CAAC,KAAK,CAAC,KAAK,CAAC;MAChE,IAAI,WAAW,KAAK,KAAK,EAAE;AAGzB,QAAA,MAAM,IAAI,OAAO,CAAQ,OAAO,IAAK,WAAW,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;AAC1E,MAAA;AACF,IAAA;AACF,EAAA,CAAA,CAAE,MAAM;AACN,IAAA,WAAW,CAAC,GAAG,CAAC,wBAAwB,CAAC;AAC3C,EAAA;AACF;;AC5DM,SAAU,YAAY,CAAC,GAAW,EAAA;AACtC,EAAA,OAAO,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,aAAa,CAAC,GAAG,CAAC;AAClE;;;;"}