@oneteme/inspect-ng-collector 1.3.2 → 1.3.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -159,7 +159,7 @@ function createInstance(conf, instanceId) {
159
159
  re: detectBrowser(),
160
160
  user: undefined, // cannot get user
161
161
  type: "CLIENT",
162
- collector: "inspect-ng-collector-1.3.2-beta.1",
162
+ collector: "inspect-ng-collector-1.3.3",
163
163
  resource: { maxHeap: (('memory' in performance) && performance.memory.jsHeapSizeLimit / (1024 * 1024)) || undefined },
164
164
  additionalProperties: conf?.additionalProperties?.(),
165
165
  configuration: adaptedConfig(conf)
@@ -232,7 +232,9 @@ class SessionManager {
232
232
  }
233
233
  navigate(url) {
234
234
  const now = dateNow();
235
- this.endSession(now);
235
+ if (this.currentSessionCallBack) {
236
+ this.endSession(now);
237
+ }
236
238
  if (url) {
237
239
  const id = crypto.randomUUID();
238
240
  this.currentSession = {
@@ -258,10 +260,12 @@ class SessionManager {
258
260
  });
259
261
  this.currentSessionCallBack = undefined;
260
262
  }
261
- updateSession() {
263
+ updateSession(update = true) {
262
264
  if (this.currentSession) {
263
- this.currentSession.name = document.title; // add settimeout
264
- this.currentSession.location = document.URL;
265
+ if (update) {
266
+ this.currentSession.name = document.title; // add settimeout
267
+ this.currentSession.location = document.URL;
268
+ }
265
269
  if (!this._techConfig.exclude?.some((e) => e.test(this.currentSession?.location))) {
266
270
  dispatchTraces(this.currentSession);
267
271
  }
@@ -737,6 +741,7 @@ const MAP = {
737
741
 
738
742
  function initNavigationMonitor(router) {
739
743
  try {
744
+ initStartupSession();
740
745
  router.events.subscribe(routeHandler);
741
746
  window.addEventListener('pageshow', bfCacheHandler);
742
747
  window.addEventListener("beforeunload", windowUnloadHandler);
@@ -757,6 +762,10 @@ function windowUnloadHandler(event) {
757
762
  SessionManager.instance.navigate();
758
763
  dispatchShutown();
759
764
  }
765
+ function initStartupSession() {
766
+ SessionManager.instance.navigate(new URL(document.URL).host);
767
+ SessionManager.instance.updateSession(false);
768
+ }
760
769
  function bfCacheHandler(event) {
761
770
  if (event.persisted) { // if the page was restored from bfcache
762
771
  dispatchReload();
@@ -1 +1 @@
1
- {"version":3,"file":"oneteme-inspect-ng-collector.mjs","sources":["../../../../projects/oneteme/inspect-ng-collector/src/lib/trace.model.ts","../../../../projects/oneteme/inspect-ng-collector/src/lib/event-bus.ts","../../../../projects/oneteme/inspect-ng-collector/src/lib/configuration.ts","../../../../projects/oneteme/inspect-ng-collector/src/lib/session-manager.service.ts","../../../../projects/oneteme/inspect-ng-collector/src/lib/rest-request.monitor.ts","../../../../projects/oneteme/inspect-ng-collector/src/lib/http-interceptor.service.ts","../../../../projects/oneteme/inspect-ng-collector/src/lib/global-error-handler.service.ts","../../../../projects/oneteme/inspect-ng-collector/src/lib/event-trace-scheduled-dispatcher.service.ts","../../../../projects/oneteme/inspect-ng-collector/src/lib/user-action.monitor.ts","../../../../projects/oneteme/inspect-ng-collector/src/lib/navigation.monitor.ts","../../../../projects/oneteme/inspect-ng-collector/src/lib/resource-usage.monitor.ts","../../../../projects/oneteme/inspect-ng-collector/src/lib/ng-collector.module.ts","../../../../projects/oneteme/inspect-ng-collector/src/lib/local-request.monitor.ts","../../../../projects/oneteme/inspect-ng-collector/src/lib/traceable-stage.decorator.ts","../../../../projects/oneteme/inspect-ng-collector/src/public-api.ts","../../../../projects/oneteme/inspect-ng-collector/src/oneteme-inspect-ng-collector.ts"],"sourcesContent":["type InstantType = \"SERVER\" | \"CLIENT\";\ntype MainSessionType = \"VIEW\" | \"BATCH\" | \"STARTUP\";\n\nexport type LogLevel = \"INFO\" | \"WARN\" | \"ERROR\" | \"REPORT\";\nexport type UUID = `${string}-${string}-${string}-${string}-${string}`;\n\nexport enum RequestMask { LOCAL = 1, REST = 4 }\n\nexport const TRACE_TYPE_LOG = '00';\nexport const TRACE_TYPE_RESOURCE_USAGE = '01';\nexport const TRACE_TYPE_COLLECTOR_CONFIGURATION = '02';\nexport const TRACE_TYPE_SESSION_MASK_UPDATE = '03';\nexport const TRACE_TYPE_MAIN_SESSION = '10';\nexport const TRACE_TYPE_MAIN_SESSION_CALLBACK = '11';\nexport const TRACE_TYPE_LOCAL_REQUEST = '110';\nexport const TRACE_TYPE_LOCAL_REQUEST_CALLBACK = '111';\nexport const TRACE_TYPE_REST_REQUEST = '120';\nexport const TRACE_TYPE_REST_REQUEST_CALLBACK = '121';\nexport const TRACE_TYPE_HTTP_REQUEST_STAGE = '220';\nexport const TRACE_TYPE_USER_ACTION = '300';\n\n\nexport function dateNow() {\n return Date.now() / 1_000;\n}\n\nexport interface InstanceEnvironment {\n id: string;\n name?: string;\n address?: string;\n version?: string;\n env?: string;\n os?: string;\n re?: string;\n user?: string;\n type?: InstantType;\n instant?: number;\n collector?: string;\n resource: MachineResource;\n additionalProperties?: { [key: string]: any };\n configuration?: { [key: string]: any };\n}\n\nexport interface EventTrace { }\n\nexport interface MainSession extends EventTrace {\n '@type': typeof TRACE_TYPE_MAIN_SESSION;\n id: UUID;\n type: MainSessionType;\n name?: string;\n location: string;\n user?: string;\n start: number;\n requestMask: number;\n}\n\nexport interface MainSessionCallBack extends EventTrace {\n '@type': typeof TRACE_TYPE_MAIN_SESSION_CALLBACK;\n id: UUID;\n end?: number;\n requestMask: number;\n exception?: ExceptionInfo; // make a list ?\n}\n\nexport interface SessionMaskUpdate {\n '@type': typeof TRACE_TYPE_SESSION_MASK_UPDATE;\n id: UUID;\n main: boolean;\n mask: number;\n}\n\nexport interface RestRequest extends EventTrace {\n '@type': typeof TRACE_TYPE_REST_REQUEST;\n id: UUID;\n method: string;\n protocol: string;\n host: string;\n port: number;\n path: string;\n query: string;\n contentType?: string;\n authScheme?: string;\n dataSize: number;\n user?: string;\n start: number;\n sessionId?: UUID;\n}\n\nexport interface RestRequestCallBack extends EventTrace {\n '@type': typeof TRACE_TYPE_REST_REQUEST_CALLBACK;\n id: UUID;\n status?: number;\n end?: number;\n dataSize?: number;\n linked?: boolean;\n contentType?: string;\n bodyContent?: string;\n}\n\nexport interface HttpRequestStage extends EventTrace {\n '@type': typeof TRACE_TYPE_HTTP_REQUEST_STAGE;\n name: string;\n start: number;\n end?: number;\n exception?: ExceptionInfo;\n requestId: string;\n}\n\nexport interface LocalRequest extends EventTrace {\n '@type': typeof TRACE_TYPE_LOCAL_REQUEST;\n id: UUID;\n name: string;\n location: string;\n user?: string;\n start: number;\n sessionId: UUID;\n}\n\nexport interface LocalRequestCallBack extends EventTrace {\n '@type': typeof TRACE_TYPE_LOCAL_REQUEST_CALLBACK;\n id: UUID;\n end: number;\n exception?: ExceptionInfo;\n}\n\nexport interface ExceptionInfo {\n type?: string;\n message?: string;\n}\n\nexport interface UserAction extends EventTrace {\n '@type': typeof TRACE_TYPE_USER_ACTION;\n type: string;\n instant: number;\n name: string | null;\n nodeName: string;\n sessionId: string;\n}\n\nexport interface LogEntry extends EventTrace {\n '@type': typeof TRACE_TYPE_LOG;\n instant: number;\n level: LogLevel;\n message: string;\n sessionId?: UUID;\n}\n\nexport interface MachineResource extends EventTrace {\n maxHeap?: number;\n}\n\nexport interface MachineRessourceUsage extends EventTrace {\n '@type': typeof TRACE_TYPE_RESOURCE_USAGE;\n instant: number;\n commitedHeap: number;\n usedHeap: number;\n}\n","import { dateNow, EventTrace, LogLevel, LogEntry, TRACE_TYPE_LOG } from \"./trace.model\";\n\nconst eventTarget = new EventTarget();\nconst TRACE = 'trace', EXPORT = 'export', SHUTDOWN = 'shutdown', RELOAD = 'reload';\n\nexport const WIN: any = window;\n\nexport function dispatchReport(message: string, error?: any) : void {\n dispatchLog(\"REPORT\", `${message} ${error && JSON.stringify(error)}`)\n}\n\nexport function dispatchLog(level: LogLevel, message: string, sessionId?: string) {\n dispatchTraces({\n \"@type\": TRACE_TYPE_LOG,\n level: level,\n message: message,\n instant: dateNow(),\n sessionId: sessionId\n } as LogEntry);\n}\n\nexport function dispatchTraces(...traces: EventTrace[]): void {\n eventTarget.dispatchEvent(new CustomEvent(TRACE, { detail: { traces } }));\n}\n\nexport function dispatchExport(): void {\n eventTarget.dispatchEvent(new CustomEvent(EXPORT));\n}\n\nexport function dispatchReload(): void {\n eventTarget.dispatchEvent(new CustomEvent(RELOAD));\n}\n\nexport function dispatchShutown(): void {\n eventTarget.dispatchEvent(new CustomEvent(SHUTDOWN));\n}\n\nexport function addTraceListener(fn : EventListener): void {\n eventTarget.addEventListener(TRACE, fn);\n}\n\nexport function addExportListener(fn : EventListener): void {\n eventTarget.addEventListener(EXPORT, fn);\n}\n\nexport function addReloadListener(fn : EventListener): void {\n eventTarget.addEventListener(RELOAD, fn);\n}\n\nexport function addShutdownListener(fn : EventListener): void {\n eventTarget.addEventListener(SHUTDOWN, fn);\n}\n","import {dateNow, InstanceEnvironment, TRACE_TYPE_COLLECTOR_CONFIGURATION} from \"./trace.model\";\nimport {dispatchReport} from \"./event-bus\";\n\ntype Provider<T> = T | (() => T);\n\nconst HOST_PATERN = /https?:\\/\\/[\\w\\-.]+(:\\d{2,5})?\\/?/;\n\nexport interface CollectorConfig {\n enabled?: boolean; // default: false\n debugMode?: boolean;\n name: Provider<string>;\n version?: Provider<string>;\n env?: Provider<string>;\n user?: Provider<string>;\n additionalProperties?: ()=> {[key:string]: any};\n scheduling?: {\n interval?: number; // default: '60s'\n };\n monitoring?: {\n httpRoute?: {\n excludes?: {\n path?: Provider<RegExp[]>; // replace this with string[]\n };\n };\n httpRequest?: {\n excludes?: {\n host?: string[];\n };\n };\n resources?: {\n enabled?: boolean; // default: false\n };\n analytics?: {\n enabled?: boolean; // default: false\n };\n storage?: {\n enabled: boolean // default: false\n }\n };\n tracing?: {\n queueCapacity?: number; // default: 1000\n remote?: {\n '@type'?: string;\n mode?: string; // default: null\n host?: string; // default: 'localhost'\n retentionMaxAge?: number; // default: '30'\n };\n };\n\n}\n\nexport interface TechnicalConf {\n user?: Provider<string>;\n queueCapacity: number;\n interval: number;\n instanceApi: string;\n sessionApi: string;\n exclude?: RegExp[];\n hostExcludes?: string[];\n debugMode: boolean;\n analytics: boolean;\n resources: boolean;\n storage: boolean;\n enabled: boolean;\n}\n\nexport function getOrCall<T>(o?: Provider<T>): T | undefined {\n return typeof o === \"function\" ? (o as () => T)() : o;\n}\n\nexport function matchRegex(v: string | undefined, name: string, pattern: RegExp, defaultValue?: string) {\n if(v && pattern.exec(v)){\n return v;\n }\n if(!defaultValue){\n if(v != undefined){\n throw new Error(`bad value ${name}=${v}, pattern=${pattern}`);\n }else {\n throw new Error(`${name} property is required`);\n }\n }\n return defaultValue;\n}\n\nexport function requirePostitiveValue(v: number | undefined, name: string, defaultValue:number){\n if(v && v > 0) {\n return v;\n }\n if(v == undefined){\n return defaultValue;\n }\n throw new Error(`bad value ${name}=${v} <= 0`);\n}\n\nexport function require(v: string | undefined, name: string){\n if(v != undefined){\n return v;\n }\n throw new Error(`${name} property is required`);\n}\n\nexport function adaptedConfig(conf: CollectorConfig) {\n return {\n ...conf,\n scheduling: {\n ...conf.scheduling,\n interval: conf.scheduling?.interval && conf.scheduling.interval / 1000\n },\n monitoring: {\n ...conf.monitoring,\n additionalProperties: String(conf.additionalProperties),\n name: String(conf.name),\n version: String(conf.version),\n env: String(conf.env),\n user: String(conf.user),\n httpRoute: {\n ...conf.monitoring?.httpRoute,\n excludes: {\n path: (conf?.monitoring?.httpRoute?.excludes?.path as RegExp[]).map(r => r.source)\n }\n }\n },\n tracing: {\n ...conf.tracing,\n remote: {\n ...conf.tracing?.remote,\n '@type': TRACE_TYPE_COLLECTOR_CONFIGURATION,\n retentionMaxAge : (conf.tracing?.remote?.retentionMaxAge ?? 10) * 60 * 60 * 24\n }\n }\n }\n}\n\nexport function validateAndGetConfig(conf: CollectorConfig, instanceId: string) : TechnicalConf {\n const host = matchRegex(getOrCall<string>(conf?.tracing?.remote?.host), \"host\", HOST_PATERN);\n return {\n user: conf?.user,\n queueCapacity: requirePostitiveValue(getOrCall<number>(conf?.tracing?.queueCapacity), \"queueCapacity\", 1000),\n interval: requirePostitiveValue(getOrCall<number>(conf?.scheduling?.interval), \"interval\", 60000),\n instanceApi: new URL('v4/trace/instance', host).href,\n sessionApi : new URL(`v4/trace/instance/${instanceId}/session`, host).href,\n exclude: getOrCall<RegExp[]>(conf?.monitoring?.httpRoute?.excludes?.path) || [],\n hostExcludes: conf?.monitoring?.httpRequest?.excludes?.host || [],\n debugMode: !!conf.debugMode,\n analytics: !!conf?.monitoring?.analytics?.enabled,\n resources: !!conf?.monitoring?.resources?.enabled,\n storage: !!conf?.monitoring?.storage?.enabled,\n enabled: !!conf.enabled\n }\n}\n\nexport function createInstance(conf: CollectorConfig, instanceId: string): InstanceEnvironment {\n return {\n id: instanceId,\n instant: dateNow(),\n name: require(getOrCall<string>(conf?.name), 'configuration.name'),\n version: getOrCall<string>(conf?.version),\n address: getClientID(), //server side\n env: require(getOrCall<string>(conf?.env), 'env'),\n os: detectOs(),\n re: detectBrowser(),\n user: undefined, // cannot get user\n type: \"CLIENT\",\n collector: \"inspect-ng-collector-1.3.2-beta.1\",\n resource: { maxHeap: (('memory' in performance) && (performance as any).memory.jsHeapSizeLimit / (1024 * 1024)) || undefined },\n additionalProperties: conf?.additionalProperties?.(),\n configuration: adaptedConfig(conf)\n }\n}\n\nfunction getClientID() {\n let cid = localStorage.getItem(\"jarvis.inspect.cid\");\n if (!cid) {\n localStorage.setItem(\"jarvis.inspect.cid\", cid = crypto.randomUUID());\n }\n return cid;\n}\n\nfunction detectOs() {\n try {\n let versionMatch, version;\n const agent = globalThis.navigator.userAgent.toLowerCase() //TODO see also https://developer.mozilla.org/en-US/docs/Web/API/Navigator/userAgentData\n switch (true) {\n case (/windows/.test(agent)):\n versionMatch = /windows nt (\\d+\\.\\d+)/.exec(agent);\n version = versionMatch ? versionMatch[1] : '?';\n return `Windows ${version}`;\n case (/linux/.test(agent)):\n return 'Linux';\n\n case (/macintosh/.test(agent)):\n versionMatch = /mac os x (\\d+[._]\\d+[._]\\d+)/.exec(agent);\n version = versionMatch ? versionMatch[1] : '?';\n return `MacOs ${version}`\n }\n }\n catch (e) {\n dispatchReport(\"detectOs\", e) ;\n }\n return undefined;\n}\n\nfunction detectBrowser() {\n try {\n const agent = globalThis.navigator.userAgent.toLowerCase()\n switch (true) {\n case agent.includes('edg'):\n return 'Edge';\n case agent.includes('opr'):\n return 'Opera';\n case agent.includes('chrome'):\n return 'Chrome';\n case agent.includes('firefox'):\n return 'Firefox';\n case agent.includes('safari'):\n return 'Safari';\n case agent.includes('msie'):\n return 'IE';\n }\n }\n catch (e) {\n dispatchReport(\"detectBrowser\", e)\n }\n return undefined;\n}\n\nexport function refreshConfig(id: string, tech: TechnicalConf) {\n const uuidRegex = /[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}/i;\n tech.sessionApi = tech.sessionApi.replace(uuidRegex, id);\n return id;\n}\n","import { dispatchTraces, dispatchReport, WIN, dispatchLog } from './event-bus';\nimport {\n dateNow,\n LogLevel,\n MainSession,\n MainSessionCallBack,\n RequestMask,\n SessionMaskUpdate,\n TRACE_TYPE_MAIN_SESSION,\n TRACE_TYPE_MAIN_SESSION_CALLBACK,\n TRACE_TYPE_SESSION_MASK_UPDATE\n} from \"./trace.model\";\nimport {getOrCall, TechnicalConf} from \"./configuration\";\n\nexport class SessionManager {\n\n static _instance: SessionManager;\n constructor(private readonly _techConfig: TechnicalConf) {\n }\n\n currentSession?: MainSession;\n currentSessionCallBack?: MainSessionCallBack;\n\n static get instance(): SessionManager {\n return SessionManager._instance;\n }\n\n navigate(url?: string) {\n const now = dateNow();\n this.endSession(now);\n if (url) {\n const id = crypto.randomUUID();\n this.currentSession = {\n '@type': TRACE_TYPE_MAIN_SESSION,\n id: id,\n type: \"VIEW\",\n user: getOrCall<string>(this._techConfig.user),\n start: now,\n location: url,\n requestMask: 0,\n };\n this.currentSessionCallBack = {\n '@type': TRACE_TYPE_MAIN_SESSION_CALLBACK,\n id: id,\n requestMask: 0,\n }\n }\n }\n\n private endSession(end : number){\n this.getCurrentSessionCallBack(call =>{\n call.end = end;\n dispatchTraces(call);\n });\n this.currentSessionCallBack = undefined;\n }\n\n updateSession() {\n if (this.currentSession) {\n this.currentSession.name = document.title; // add settimeout\n this.currentSession.location = document.URL;\n if (!this._techConfig.exclude?.some((e: any) => e.test(this.currentSession?.location))) {\n dispatchTraces(this.currentSession)\n }\n this.currentSession = undefined;\n }\n else{\n dispatchReport('updateSession', 'no active session');\n }\n }\n\n getCurrentSessionCallBack(fn: (s: MainSessionCallBack) => any) {\n if (this.currentSessionCallBack) {\n return fn(this.currentSessionCallBack);\n }\n dispatchReport('getCurrentSessionCallBack', 'no active session');\n return undefined;\n }\n\n currentSessionID(): string | undefined {\n return this.getCurrentSessionCallBack(s=> s.id);\n }\n\n initRestRequest(mask: RequestMask){\n const req = this.getCurrentSessionCallBack(s=>{\n if ((s.requestMask & mask) !== mask) {\n s.requestMask |= mask;\n dispatchTraces({\n \"@type\": TRACE_TYPE_SESSION_MASK_UPDATE,\n id: s.id,\n main: true,\n mask: s.requestMask\n } as SessionMaskUpdate);\n }\n return {sessionId:s.id};\n });\n return req || {};\n }\n\n initUserAction(){\n const req = this.getCurrentSessionCallBack(s=> ({sessionId:s.id}));\n return req || {};\n }\n\n addException(exception: any) {\n this.getCurrentSessionCallBack(s => s.exception = exception)\n }\n\n info(message: string) {\n this.log(\"INFO\", message);\n }\n\n warn(message: string) {\n this.log(\"WARN\", message);\n }\n\n error(message: string) {\n this.log(\"ERROR\", message);\n }\n\n private log(level: LogLevel, message: string){\n if (message) {\n this.getCurrentSessionCallBack(s=> dispatchLog(level, message, s.id));\n }\n }\n}\n\nexport function sessionlogger(): SessionManager {\n return SessionManager.instance;\n}\n\nexport function sessionManager(tech: TechnicalConf){\n SessionManager._instance = new SessionManager(tech);\n WIN[\"inspect-session-manager\"] = SessionManager._instance;\n}\n","import {\n dateNow,\n ExceptionInfo,\n HttpRequestStage,\n RestRequest,\n RestRequestCallBack,\n RequestMask,\n TRACE_TYPE_HTTP_REQUEST_STAGE,\n TRACE_TYPE_REST_REQUEST,\n TRACE_TYPE_REST_REQUEST_CALLBACK,\n UUID\n} from \"./trace.model\";\nimport { dispatchTraces, dispatchReport } from \"./event-bus\";\nimport { HttpErrorResponse, HttpHeaders, HttpRequest, HttpResponse, HttpResponseBase } from \"@angular/common/http\";\nimport { SessionManager } from \"./session-manager.service\";\n\nexport const TRACE_HEADER = 'x-tracert';\n\nexport class RestRequestMonitor {\n\n readonly id: UUID;\n readonly start: number;\n\n constructor() {\n this.start = dateNow();\n this.id = crypto.randomUUID();\n }\n\n preProcess(restRequest: HttpRequest<any>) {\n const url = new URL(restRequest.urlWithParams, globalThis.location.origin);\n const auth_user = extractAuthSchemeAnduser(restRequest.headers);\n dispatchTraces({...SessionManager.instance.initRestRequest(RequestMask.REST),\n \"@type\": TRACE_TYPE_REST_REQUEST,\n id: this.id,\n method: restRequest.method,\n protocol: url.protocol.slice(0, -1),\n host: url.hostname,\n port: url.port? Number(url.port) : 0,\n path: url.pathname,\n query: url.search.slice(1, url.search.length),\n contentType: restRequest.responseType,\n authScheme: auth_user.authScheme,\n user: auth_user.user,\n dataSize: sizeOf(restRequest.body),\n start: this.start,\n } as RestRequest);\n }\n\n postProcess(response: HttpResponseBase | null, error: HttpErrorResponse | null) {\n const end = dateNow();\n const callback: RestRequestCallBack = {\n \"@type\": TRACE_TYPE_REST_REQUEST_CALLBACK,\n id: this.id,\n dataSize: -1,\n linked: false,\n end: end\n }\n let status: number = 0, exception!: ExceptionInfo;\n\n // HttpResponseBase couvre à la fois HttpResponse (succès) et HttpErrorResponse (erreur HTTP)\n if (response) {\n status = response.status;\n callback.dataSize = response instanceof HttpResponse ? sizeOf(response.body) : -1;\n callback.contentType = extractContentType(response.headers);\n callback.linked = assertSessionID(this.id, response.headers);\n }\n\n // Erreur réseau/annulation\n if (error) {\n status = error.status || 0;\n exception = {\n type: error.name,\n message: error.error && error.status ? JSON.stringify(error.error) : error.message\n }\n callback.bodyContent = JSON.stringify(error.error);\n callback.dataSize = sizeOf(error.error);\n callback.contentType = extractContentType(error.headers);\n callback.linked = assertSessionID(this.id, error.headers);\n }\n\n callback.status = status;\n dispatchTraces(callback, {\n \"@type\": TRACE_TYPE_HTTP_REQUEST_STAGE,\n name: \"PROCESS\",\n start: this.start, // use request\n end: end,\n order: 0,\n exception: exception,\n requestId: this.id\n } as HttpRequestStage);\n }\n}\n\nfunction assertSessionID(id: string, headers: HttpHeaders) { //browser cache !?\n return headers?.get(TRACE_HEADER) == id;\n}\n\nfunction extractAuthSchemeAnduser(headers: any): { user: string | null, authScheme: string | null } {\n const authHeader = headers?.get('authorization');\n if (!authHeader) {\n return { authScheme: null, user: null };\n }\n\n const [scheme, credentials] = authHeader.split(' ');\n\n if (!scheme || !credentials || !['Basic', 'Bearer'].includes(scheme)) {\n return { authScheme: null, user: null };\n }\n\n return {\n authScheme: scheme,\n user: extractUser(scheme as 'Basic' | 'Bearer', credentials) ?? null\n };\n}\n\nfunction extractUser(scheme: 'Basic' | 'Bearer', authorization: string) {\n try {\n switch (scheme) {\n case \"Basic\":\n return atob(authorization).split(':')[0] || undefined;\n case \"Bearer\": {\n const payloadMatch = authorization.match(/^[^.]+\\.([^.]+)\\.[^.]+$/);\n if (payloadMatch?.[1]) {\n return JSON.parse(atob(payloadMatch[1])).sub;\n }\n dispatchReport('extractUser', 'Invalid Bearer token format');\n return undefined;\n }\n default:\n dispatchReport('extractUser', `Unknown auth scheme: ${scheme}`);\n }\n } catch (e) {\n dispatchReport('extractUser', e);\n }\n return undefined;\n}\n\nfunction extractContentType(headers: any): string | undefined {\n try {\n if (headers?.has('Content-Type')) {\n return headers.get('Content-Type');\n }\n } catch (err) {\n dispatchReport('extractContentType', err);\n }\n return undefined;\n}\n\nfunction sizeOf(body: any): number {\n if (body) {\n try {\n return new Blob([JSON.stringify(body)]).size;\n }\n catch (e) {\n dispatchReport('sizeOf', e);\n }\n }\n return -1;\n}\n","import { Injectable, Inject, InjectionToken, Optional } from '@angular/core';\nimport { HttpInterceptor, HttpEvent, HttpHandler, HttpRequest, HttpResponse, HttpErrorResponse, HttpResponseBase } from '@angular/common/http';\nimport { finalize, Observable } from 'rxjs';\nimport { tap } from 'rxjs/operators'\nimport { RestRequestMonitor, TRACE_HEADER } from \"./rest-request.monitor\";\nimport { TechnicalConf} from \"./configuration\";\nimport { InstanceEnvironment } from \"./trace.model\";\n\nexport const COLLECTOR_CONFIG = new InjectionToken<TechnicalConf>('COLLECTOR_CONFIG');\n\n@Injectable({ providedIn: 'root' })\nexport class HttpInterceptorService implements HttpInterceptor {\n\n constructor(@Inject(COLLECTOR_CONFIG) private readonly techConfig: {tech: TechnicalConf, instance: InstanceEnvironment}) {}\n\n intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\n const monitor = new RestRequestMonitor();\n monitor.preProcess(req);\n\n const host = new URL(req.url, window.location.origin).host;\n if (!this.techConfig.tech.hostExcludes?.some((e: any) => e == host)) { // exclude les hôtes qui ne permet pas la modification des headers\n req = req.clone({ headers: req.headers.set(TRACE_HEADER, monitor.id) });\n }\n\n let response: HttpResponseBase | null = null;\n let error: HttpErrorResponse | null = null;\n\n return next.handle(req).pipe(tap({\n next: (event: HttpEvent<any>) => {\n if (event instanceof HttpResponse) {\n response = event;\n }\n //todo autres types d'événements (UploadProgress, DownloadProgress, etc.) ignorés pour les traces\n },\n error: (err: HttpErrorResponse) => {\n error = err;\n }\n }),\n finalize(() => {\n // Si pas de réponse et pas d'erreur capturé, la requête a été annulée\n if (!response && !error) {\n error = new HttpErrorResponse({\n error: 'The request was cancelled before completion',\n status: 0,\n statusText: 'Cancelled',\n url: req.url\n });\n }\n monitor.postProcess(response, error);\n }));\n }\n}\n","import { ErrorHandler, Injectable } from \"@angular/core\";\nimport { SessionManager } from \"./session-manager.service\";\nimport { dispatchReport } from \"./event-bus\";\n\n@Injectable({ providedIn: 'root' })\nexport class GlobalErrorHandler implements ErrorHandler {\n\n handleError(error: any) {\n try {\n SessionManager.instance.addException({\n type: error?.name,\n message: error?.message\n })\n } catch (e) {\n dispatchReport(\"GlobalErrorHandlerService.handleError\", e);\n }\n throw error;\n }\n}\n","import { interval, startWith, tap, Subscription } from \"rxjs\";\nimport {EventTrace, InstanceEnvironment} from \"./trace.model\";\nimport { dispatchExport, addTraceListener, addShutdownListener, dispatchReport } from \"./event-bus\";\nimport {TechnicalConf} from \"./configuration\";\n\nconst EMPTY_ARRAY : EventTrace[] = <[]>Object.freeze([]);\n\nclass EventTraceScheduledDispatcherService {\n\n static _instance: EventTraceScheduledDispatcherService;\n\n readonly subscription: Subscription\n readonly traceQueue: EventTrace[] = [];\n\n dispatchAttempts: number = 0\n dispatching: boolean = false;\n instanceDispatched: boolean = false;\n wasDestroyed : boolean = false;\n\n instance?: InstanceEnvironment ;\n constructor(private readonly _techConfig: TechnicalConf) {\n this.subscription = interval(_techConfig.interval)\n .pipe(startWith(0))\n .pipe(tap(() => {\n if (!this.dispatching && !this.wasDestroyed && this.instance) {\n this.dispatching = true;\n dispatchExport();\n this.dispatch()\n .then(arr => this.revertQueueSize(arr))\n .catch(err => dispatchReport('EventTraceScheduledDispatcher.dispatch', err))\n .finally(() => { this.dispatching = false })\n }\n }))\n .subscribe();\n addTraceListener(e => this.appendTrace((e as CustomEvent).detail.traces));\n addShutdownListener(e => this.destroy());\n }\n\n appendTrace(events: EventTrace[]) {\n if(!this.wasDestroyed){\n events?.forEach(event => this.traceQueue.push(event));\n }\n }\n\n trace(instance: InstanceEnvironment) {\n this.instance = instance;\n }\n\n dispatch(): Promise<any> {\n if (this.instanceDispatched) {\n return this.dispatchTraces();\n }\n return this.dispatchInstance().then(ok => {\n if (ok) {\n this.instanceDispatched = true;\n return this.dispatchTraces();\n }\n console.warn(`Error while attempting to send Environement instance, attempts ${this.dispatchAttempts}`);\n return Promise.reject(new Error('No instance id'));\n });\n }\n\n dispatchTraces(destroy?: boolean): Promise<EventTrace[]> {\n if (this.traceQueue.length === 0) {\n return Promise.resolve(EMPTY_ARRAY);\n }\n let uri = this._techConfig.sessionApi + \"?attempts=\" + ++this.dispatchAttempts;\n if (destroy) {\n uri += \"&end=\" + new Date().toISOString();\n }\n const traces = [...this.traceQueue];\n this.traceQueue.length = 0;\n return fetch(uri, {\n method: 'PUT',\n headers: { 'Content-Type': 'application/json' },\n mode: 'cors',\n keepalive: true,\n body: JSON.stringify(traces)\n })\n .then(res=> {\n if (res.ok) {\n this.dispatchAttempts = 0;\n return EMPTY_ARRAY;\n }\n console.warn(`Error while attempting to send sessions, attempts: ${this.dispatchAttempts}`);\n if (res.status >= 400 && res.status < 500) {\n return traces; //retry on bad request !?\n }\n return res.json()\n .then(body => body?.retry ? traces : EMPTY_ARRAY)\n .catch(() => EMPTY_ARRAY);\n })\n .catch(() => {\n console.warn(`Error while attempting to send sessions, attempts: ${this.dispatchAttempts}`); //no cnx !\n return traces;\n });\n }\n\n dispatchInstance(): Promise<boolean> {\n this.dispatchAttempts++;\n return fetch(this._techConfig.instanceApi, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n mode: 'cors',\n keepalive: true,\n body: JSON.stringify(this.instance)\n })\n .then(res => res.ok ? res.text().then(id => {\n this.dispatchAttempts = 0;\n return true;\n }) : false)\n .catch(err => false);\n }\n\n revertQueueSize(traces: EventTrace[]) {\n if(!this.wasDestroyed){\n this.traceQueue.unshift(...traces);\n if (this.traceQueue.length > this._techConfig.queueCapacity) {\n this.traceQueue.splice(this._techConfig.queueCapacity);\n }\n }\n }\n\n destroy() {\n this.subscription?.unsubscribe();\n this.wasDestroyed = true;\n dispatchExport(); //last metric ??\n this.dispatchTraces(true);\n }\n}\n\nexport function eventTraceScheduledDispatcher(tech: TechnicalConf): EventTraceScheduledDispatcherService {\n return EventTraceScheduledDispatcherService._instance = new EventTraceScheduledDispatcherService(tech);\n}\n","import { dateNow, UserAction, TRACE_TYPE_USER_ACTION } from \"./trace.model\";\nimport { SessionManager } from \"./session-manager.service\";\nimport { dispatchReport, dispatchTraces } from \"./event-bus\";\n\nconst eventHandlers: { [key: string]: (target: HTMLElement) => boolean } = {\n 'click': (target: HTMLElement) => lookUpChild(target, 1),\n}\nexport function initUserActionMonitor() {\n try {\n const body = window.document.body;\n body.addEventListener('click', globalHandler, true);\n body.addEventListener('change', globalHandler, true);\n body.addEventListener('scrollend', globalHandler, true);\n body.addEventListener('dragend', globalHandler, true);\n window.document.addEventListener('DOMContentLoaded', globalHandler, true);\n }\n catch (e) {\n dispatchReport(\"initUserActionMonitor\", e);\n }\n}\n\nfunction globalHandler(event: Event | MouseEvent) {\n const target = event.target as HTMLElement;\n const eventType = event.type;\n try {\n if (eventHandlers.hasOwnProperty(eventType) && !eventHandlers[eventType](target)) {\n return;\n }\n addActionUser(eventType, target);\n } catch (err) {\n dispatchReport(\"UserACTION.globalHandler\", err)\n }\n}\n\nfunction lookUpChild(t: HTMLElement, depth: number): boolean {\n if (t.hasChildNodes() && t.children.length <= 5) {\n if (++depth > 5) {\n return false;\n }\n return Array.from(t.childNodes).reduce((acc, c) =>\n acc && lookUpChild(c as HTMLElement, depth), true);\n }\n return true;\n}\n\nfunction addActionUser(eventType: string, target: HTMLElement) {\n dispatchTraces({\n ...SessionManager.instance.initUserAction(),\n '@type': TRACE_TYPE_USER_ACTION,\n type: eventType,\n instant: dateNow(),\n name: extractName(target),\n nodeName: target.tagName?.toLowerCase()\n } as UserAction);\n}\n\nfunction getFirst(c: ((t: HTMLElement) => string | null)[], t: HTMLElement) {\n for (const o of c) {\n let r = o(t)?.trim();\n if (r) {\n return r;\n }\n }\n return null;\n}\n\nfunction extractName(t: HTMLElement) {\n try {\n let tagName = t.tagName\n if (tagName) {\n let name;\n let c = MAP[tagName.toLowerCase()];\n if (c) {\n name = getFirst(c, t);\n }\n return name ?? getFirst(genericMap, t)!;\n }\n\n } catch (err) {\n console.warn(err)\n }\n return null\n}\n\nconst genericMap: ((t: HTMLElement) => string | null)[] = [\n t => t.getAttribute('placeholder'),\n t => t.getAttribute('title'),\n t => t.innerText,\n t => t.getAttribute('name'),\n t => t.getAttribute('id'),\n]\n\nconst MAP: { [key: string]: ((t: HTMLElement) => string | null)[] } = {\n 'img': [\n t => t.getAttribute('alt'),\n t => t.getAttribute('src'),\n ],\n 'input': [\n t => t.getAttribute('name'),\n ],\n 'a': [\n t => t.getAttribute('href'),\n ],\n 'label': [\n t => t.getAttribute('for'),\n ],\n}\n\n","import { NavigationCancel, NavigationEnd, NavigationStart, Router } from \"@angular/router\";\nimport { SessionManager } from \"./session-manager.service\";\nimport { dispatchReload, dispatchReport, dispatchShutown } from \"./event-bus\";\n\nexport function initNavigationMonitor(router: Router){\n try{\n router.events.subscribe(routeHandler);\n window.addEventListener('pageshow', bfCacheHandler);\n window.addEventListener(\"beforeunload\", windowUnloadHandler);\n }\n catch(e){\n dispatchReport('initNavigationMonitor', e)\n }\n}\n\nfunction routeHandler(event: any) {\n if (event instanceof NavigationStart) {\n SessionManager.instance.navigate(event.url);\n }\n if (event instanceof NavigationEnd || event instanceof NavigationCancel) {\n setTimeout(()=>SessionManager.instance.updateSession(),0)\n }\n}\n\nfunction windowUnloadHandler(event: any) {\n SessionManager.instance.navigate();\n dispatchShutown();\n}\n\nfunction bfCacheHandler(event: any) {\n if (event.persisted) { // if the page was restored from bfcache\n dispatchReload();\n SessionManager.instance.navigate(document.URL);\n setTimeout(() => SessionManager.instance.updateSession(), 0);\n }\n}\n","import { dateNow, MachineRessourceUsage, TRACE_TYPE_RESOURCE_USAGE } from \"./trace.model\";\nimport { dispatchTraces, dispatchReport, addExportListener } from \"./event-bus\";\n\nexport function initResourceUsageMonitor(){\n try{\n if ('memory' in performance) {\n addExportListener(ressourceUsageHandler);\n }\n }\n catch(e){\n dispatchReport('initResourceUsageMonitor', e)\n }\n}\n\nfunction ressourceUsageHandler() {\n try {\n const memory = (performance as any).memory;\n dispatchTraces({\n '@type': TRACE_TYPE_RESOURCE_USAGE,\n instant: dateNow(),\n usedHeap: memory.usedJSHeapSize / (1024 * 1024),\n commitedHeap: memory.totalJSHeapSize / (1024 * 1024),\n } as MachineRessourceUsage);\n } catch (e) {\n dispatchReport('ressourceUsageHandler', e);\n }\n}\n","import {\n NgModule,\n ModuleWithProviders,\n ErrorHandler,\n APP_INITIALIZER,\n InjectionToken\n} from '@angular/core';\nimport { HTTP_INTERCEPTORS, } from '@angular/common/http';\nimport { HttpInterceptorService } from './http-interceptor.service';\nimport { GlobalErrorHandler } from \"./global-error-handler.service\";\nimport {\n CollectorConfig,\n createInstance, refreshConfig,\n TechnicalConf,\n validateAndGetConfig\n} from \"./configuration\";\nimport {\n eventTraceScheduledDispatcher,\n} from \"./event-trace-scheduled-dispatcher.service\";\n\nimport { Router } from \"@angular/router\";\nimport { initUserActionMonitor } from \"./user-action.monitor\";\nimport { initNavigationMonitor } from './navigation.monitor';\nimport { initResourceUsageMonitor } from './resource-usage.monitor';\nimport { addReloadListener } from './event-bus';\nimport {sessionManager} from \"./session-manager.service\";\nimport {eventTraceDebugger} from \"./event-trace-debugger\";\nimport {InstanceEnvironment} from \"./trace.model\";\n\nconst COLLECTOR_CONFIG = new InjectionToken<CollectorConfig>('COLLECTOR_CONFIG');\n\n@NgModule()\nexport class NgCollectorModule {\n\n static forRoot(configuration: CollectorConfig): ModuleWithProviders<NgCollectorModule> {\n const providers = [];\n if (configuration?.enabled) {\n try {\n let config = initializeCollector(configuration);\n providers.push(\n { provide: COLLECTOR_CONFIG, useValue: config },\n { provide: APP_INITIALIZER, useFactory: initializeEventsFactory, deps: [COLLECTOR_CONFIG, Router], multi: true },\n { provide: HTTP_INTERCEPTORS, useClass: HttpInterceptorService, deps:[COLLECTOR_CONFIG], multi: true },\n { provide: ErrorHandler, useClass: GlobalErrorHandler }\n );\n } catch (e: any) {\n console.warn(`invalid Configuration, Ng-collector is disabled because of this ${e.message}`);\n }\n }\n return {ngModule: NgCollectorModule, providers : providers}\n }\n}\n\nexport function initializeEventsFactory(config: {tech: TechnicalConf, instance: InstanceEnvironment }, router: Router) {\n return () => {\n if (config.tech.analytics) {\n initUserActionMonitor();\n }\n if (config.tech.resources) {\n initResourceUsageMonitor();\n }\n initNavigationMonitor(router);\n //storageEventListener();\n //eventTraceDebugger\n addReloadListener(e=>{\n reloadCollector(config)\n });\n }\n}\n\nexport function initializeCollector(config: CollectorConfig) {\n const id = crypto.randomUUID();\n const tech = validateAndGetConfig(config, id);\n const dispatch = eventTraceScheduledDispatcher(tech);\n const instance = createInstance(config, id)\n dispatch.trace(instance);\n sessionManager(tech)\n return {tech: tech, instance: instance};\n}\n\nexport function reloadCollector(config: {tech: TechnicalConf, instance: InstanceEnvironment }) {\n const id = crypto.randomUUID();\n refreshConfig(id, config.tech);\n const dispatch = eventTraceScheduledDispatcher(config.tech);\n config.instance.id= id;\n dispatch.trace(config.instance);\n sessionManager(config.tech)\n}\n\n\n","import {\n dateNow,\n LocalRequest, LocalRequestCallBack,\n RequestMask,\n TRACE_TYPE_LOCAL_REQUEST,\n TRACE_TYPE_LOCAL_REQUEST_CALLBACK,\n UUID\n} from \"./trace.model\";\nimport {dispatchTraces, WIN} from \"./event-bus\";\n\nexport class LocalRequestMonitor {\n\n readonly id: UUID;\n readonly start: number;\n\n constructor() {\n this.start = dateNow();\n this.id = crypto.randomUUID();\n }\n\n preProcess(propertyKey: string, target: any){\n dispatchTraces({\n ...WIN[\"inspect-session-manager\"]?.initRestRequest(RequestMask.LOCAL),\n \"@type\": TRACE_TYPE_LOCAL_REQUEST,\n id: this.id,\n name: propertyKey,\n location: target.constructor.name,\n user: WIN[\"inspect-session-manager\"]?.currentSession?.user, //bad access\n start: this.start\n } as LocalRequest);\n }\n\n postProcess(exception?: any){\n dispatchTraces({\n \"@type\": TRACE_TYPE_LOCAL_REQUEST_CALLBACK,\n id: this.id,\n exception: exception,\n end: dateNow()\n } as LocalRequestCallBack);\n }\n}\n","import {LocalRequestMonitor} from \"./local-request.monitor\";\n\nexport function TraceableStage() {\n\n return function (\n target: any,\n propertyKey: string,\n descriptor: PropertyDescriptor\n ) {\n const originalMethod = descriptor.value;\n descriptor.value = function (...args: any[]) {\n const monitor = new LocalRequestMonitor();\n let exception;\n try {\n monitor.preProcess(propertyKey,target);\n return originalMethod.apply(this, args);\n } catch (e: any) {\n exception = resolveException(e);\n throw e;\n } finally {\n monitor.postProcess(exception)\n }\n }\n return descriptor;\n }\n}\nexport function resolveException(e: any): { type: string | null; message: string | null } {\n let type = null, message = null;\n if (e) {\n if (typeof e === \"string\") {\n message = e;\n } else if (e instanceof Error) {\n type = e.name;\n message = e.message;\n } else {\n message = JSON.stringify(e)\n }\n }\n return { type, message };\n}\n\n","/*\n * Public API Surface of inspect-ng-collector\n */\n\nexport * from './lib/ng-collector.module';\nexport * from './lib/traceable-stage.decorator';\nexport { sessionlogger } from './lib/session-manager.service';\n\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["require","COLLECTOR_CONFIG","tap"],"mappings":";;;;;;;AAMA,IAAY,WAAmC;AAA/C,CAAA,UAAY,WAAW,EAAA;AAAG,IAAA,WAAA,CAAA,WAAA,CAAA,OAAA,CAAA,GAAA,CAAA,CAAA,GAAA,OAAS;AAAE,IAAA,WAAA,CAAA,WAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAQ;AAAC,CAAC,EAAnC,WAAW,KAAX,WAAW,GAAA,EAAA,CAAA,CAAA;AAEhB,MAAM,cAAc,GAAG,IAAI;AAC3B,MAAM,yBAAyB,GAAG,IAAI;AACtC,MAAM,kCAAkC,GAAG,IAAI;AAC/C,MAAM,8BAA8B,GAAG,IAAI;AAC3C,MAAM,uBAAuB,GAAG,IAAI;AACpC,MAAM,gCAAgC,GAAG,IAAI;AAC7C,MAAM,wBAAwB,GAAG,KAAK;AACtC,MAAM,iCAAiC,GAAG,KAAK;AAC/C,MAAM,uBAAuB,GAAG,KAAK;AACrC,MAAM,gCAAgC,GAAG,KAAK;AAC9C,MAAM,6BAA6B,GAAG,KAAK;AAC3C,MAAM,sBAAsB,GAAG,KAAK;SAG3B,OAAO,GAAA;AACrB,IAAA,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK;AAC3B;;ACtBA,MAAM,WAAW,GAAG,IAAI,WAAW,EAAE;AACrC,MAAM,KAAK,GAAG,OAAO,EAAE,MAAM,GAAG,QAAQ,EAAE,QAAQ,GAAG,UAAU,EAAE,MAAM,GAAG,QAAQ;AAE3E,MAAM,GAAG,GAAQ,MAAM;AAExB,SAAU,cAAc,CAAC,OAAe,EAAE,KAAW,EAAA;AACzD,IAAA,WAAW,CAAC,QAAQ,EAAE,CAAA,EAAG,OAAO,IAAI,KAAK,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA,CAAE,CAAC;AACvE;SAEgB,WAAW,CAAC,KAAe,EAAE,OAAe,EAAE,SAAkB,EAAA;AAC9E,IAAA,cAAc,CAAC;AACb,QAAA,OAAO,EAAE,cAAc;AACvB,QAAA,KAAK,EAAE,KAAK;AACZ,QAAA,OAAO,EAAE,OAAO;QAChB,OAAO,EAAE,OAAO,EAAE;AAClB,QAAA,SAAS,EAAE;AACA,KAAA,CAAC;AAChB;AAEM,SAAU,cAAc,CAAC,GAAG,MAAoB,EAAA;AACpD,IAAA,WAAW,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;AAC3E;SAEgB,cAAc,GAAA;IAC5B,WAAW,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,MAAM,CAAC,CAAC;AACpD;SAEgB,cAAc,GAAA;IAC5B,WAAW,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,MAAM,CAAC,CAAC;AACpD;SAEgB,eAAe,GAAA;IAC7B,WAAW,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,QAAQ,CAAC,CAAC;AACtD;AAEM,SAAU,gBAAgB,CAAC,EAAkB,EAAA;AACjD,IAAA,WAAW,CAAC,gBAAgB,CAAC,KAAK,EAAE,EAAE,CAAC;AACzC;AAEM,SAAU,iBAAiB,CAAC,EAAkB,EAAA;AAClD,IAAA,WAAW,CAAC,gBAAgB,CAAC,MAAM,EAAE,EAAE,CAAC;AAC1C;AAEM,SAAU,iBAAiB,CAAC,EAAkB,EAAA;AAClD,IAAA,WAAW,CAAC,gBAAgB,CAAC,MAAM,EAAE,EAAE,CAAC;AAC1C;AAEM,SAAU,mBAAmB,CAAC,EAAkB,EAAA;AACpD,IAAA,WAAW,CAAC,gBAAgB,CAAC,QAAQ,EAAE,EAAE,CAAC;AAC5C;;AC9CA,MAAM,WAAW,GAAG,mCAAmC;AA6DjD,SAAU,SAAS,CAAI,CAAe,EAAA;AAC1C,IAAA,OAAO,OAAO,CAAC,KAAK,UAAU,GAAI,CAAa,EAAE,GAAG,CAAC;AACvD;AAEM,SAAU,UAAU,CAAC,CAAqB,EAAG,IAAY,EAAE,OAAe,EAAE,YAAqB,EAAA;IACrG,IAAG,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAC;AACrB,QAAA,OAAO,CAAC;IACX;IACA,IAAG,CAAC,YAAY,EAAC;AACf,QAAA,IAAG,CAAC,IAAI,SAAS,EAAC;YAChB,MAAM,IAAI,KAAK,CAAC,CAAA,UAAA,EAAa,IAAI,CAAA,CAAA,EAAI,CAAC,CAAA,UAAA,EAAa,OAAO,CAAA,CAAE,CAAC;QAC/D;aAAM;AACJ,YAAA,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,CAAA,qBAAA,CAAuB,CAAC;QACjD;IACF;AACA,IAAA,OAAO,YAAY;AACrB;SAEgB,qBAAqB,CAAC,CAAqB,EAAE,IAAY,EAAE,YAAmB,EAAA;AAC5F,IAAA,IAAG,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;AACb,QAAA,OAAO,CAAC;IACV;AACA,IAAA,IAAG,CAAC,IAAI,SAAS,EAAC;AAChB,QAAA,OAAO,YAAY;IACrB;IACA,MAAM,IAAI,KAAK,CAAC,CAAA,UAAA,EAAa,IAAI,CAAA,CAAA,EAAI,CAAC,CAAA,KAAA,CAAO,CAAC;AAChD;AAEM,SAAUA,SAAO,CAAC,CAAqB,EAAE,IAAY,EAAA;AACzD,IAAA,IAAG,CAAC,IAAI,SAAS,EAAC;AAChB,QAAA,OAAO,CAAC;IACV;AACA,IAAA,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,CAAA,qBAAA,CAAuB,CAAC;AACjD;AAEM,SAAU,aAAa,CAAC,IAAqB,EAAA;IACjD,OAAO;AACP,QAAA,GAAG,IAAI;AACL,QAAA,UAAU,EAAE;YACZ,GAAG,IAAI,CAAC,UAAU;AACd,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,EAAE,QAAQ,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,GAAG;AACrE,SAAA;AACD,QAAA,UAAU,EAAE;YACd,GAAG,IAAI,CAAC,UAAU;AACd,YAAA,oBAAoB,EAAE,MAAM,CAAC,IAAI,CAAC,oBAAoB,CAAC;AACvD,YAAA,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;AACvB,YAAA,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC;AAC7B,YAAA,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;AACrB,YAAA,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;AACvB,YAAA,SAAS,EAAE;AACb,gBAAA,GAAG,IAAI,CAAC,UAAU,EAAE,SAAS;AACzB,gBAAA,QAAQ,EAAE;oBACV,IAAI,EAAE,CAAC,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAiB,EAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM;AAClF;AACF;AACF,SAAA;AACC,QAAA,OAAO,EAAE;YACT,GAAG,IAAI,CAAC,OAAO;AACX,YAAA,MAAM,EAAE;AACV,gBAAA,GAAG,IAAI,CAAC,OAAO,EAAE,MAAM;AACnB,gBAAA,OAAO,EAAE,kCAAkC;AAC3C,gBAAA,eAAe,EAAG,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,eAAe,IAAI,EAAE,IAAK,EAAE,GAAG,EAAE,GAAG;AAChF;AACF;KACF;AACH;AAEM,SAAU,oBAAoB,CAAC,IAAqB,EAAE,UAAkB,EAAA;AAC5E,IAAA,MAAM,IAAI,GAAG,UAAU,CAAC,SAAS,CAAS,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC;IAC5F,OAAO;QACL,IAAI,EAAE,IAAI,EAAE,IAAI;AAChB,QAAA,aAAa,EAAE,qBAAqB,CAAC,SAAS,CAAS,IAAI,EAAE,OAAO,EAAE,aAAa,CAAC,EAAE,eAAe,EAAE,IAAI,CAAC;AAC5G,QAAA,QAAQ,EAAE,qBAAqB,CAAC,SAAS,CAAS,IAAI,EAAE,UAAU,EAAE,QAAQ,CAAC,EAAE,UAAU,EAAE,KAAK,CAAC;QACjG,WAAW,EAAE,IAAI,GAAG,CAAC,mBAAmB,EAAE,IAAI,CAAC,CAAC,IAAI;QACpD,UAAU,EAAG,IAAI,GAAG,CAAC,CAAA,kBAAA,EAAqB,UAAU,CAAA,QAAA,CAAU,EAAE,IAAI,CAAC,CAAC,IAAI;AAC1E,QAAA,OAAO,EAAE,SAAS,CAAW,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,CAAC,IAAI,EAAE;QAC/E,YAAY,EAAE,IAAI,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,IAAI,IAAI,EAAE;AACjE,QAAA,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,SAAS;QAC3B,SAAS,EAAE,CAAC,CAAC,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,OAAO;QACjD,SAAS,EAAE,CAAC,CAAC,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,OAAO;QACjD,OAAO,EAAE,CAAC,CAAC,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO;AAC7C,QAAA,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC;KACjB;AACH;AAEM,SAAU,cAAc,CAAC,IAAqB,EAAE,UAAkB,EAAA;IACtE,OAAO;AACL,QAAA,EAAE,EAAE,UAAU;QACd,OAAO,EAAE,OAAO,EAAE;QAClB,IAAI,EAAEA,SAAO,CAAC,SAAS,CAAS,IAAI,EAAE,IAAI,CAAC,EAAE,oBAAoB,CAAC;AAClE,QAAA,OAAO,EAAE,SAAS,CAAS,IAAI,EAAE,OAAO,CAAC;AACzC,QAAA,OAAO,EAAE,WAAW,EAAE;QACtB,GAAG,EAAEA,SAAO,CAAC,SAAS,CAAS,IAAI,EAAE,GAAG,CAAC,EAAE,KAAK,CAAC;QACjD,EAAE,EAAE,QAAQ,EAAE;QACd,EAAE,EAAE,aAAa,EAAE;QACnB,IAAI,EAAE,SAAS;AACf,QAAA,IAAI,EAAE,QAAQ;AACd,QAAA,SAAS,EAAE,mCAAmC;QAC9C,QAAQ,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,QAAQ,IAAI,WAAW,KAAM,WAAmB,CAAC,MAAM,CAAC,eAAe,IAAI,IAAI,GAAG,IAAI,CAAC,KAAK,SAAS,EAAE;AAC9H,QAAA,oBAAoB,EAAE,IAAI,EAAE,oBAAoB,IAAI;AACpD,QAAA,aAAa,EAAE,aAAa,CAAC,IAAI;KAClC;AACH;AAEA,SAAS,WAAW,GAAA;IAClB,IAAI,GAAG,GAAG,YAAY,CAAC,OAAO,CAAC,oBAAoB,CAAC;IACpD,IAAI,CAAC,GAAG,EAAE;AACR,QAAA,YAAY,CAAC,OAAO,CAAC,oBAAoB,EAAE,GAAG,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC;IACvE;AACA,IAAA,OAAO,GAAG;AACZ;AAEA,SAAS,QAAQ,GAAA;AACf,IAAA,IAAI;QACF,IAAI,YAAY,EAAE,OAAO;AACzB,QAAA,MAAM,KAAK,GAAG,UAAU,CAAC,SAAS,CAAC,SAAS,CAAC,WAAW,EAAE,CAAA;QAC1D,QAAQ,IAAI;AACV,YAAA,MAAM,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC;AACzB,gBAAA,YAAY,GAAG,uBAAuB,CAAC,IAAI,CAAC,KAAK,CAAC;AAClD,gBAAA,OAAO,GAAG,YAAY,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,GAAG;gBAC9C,OAAO,CAAA,QAAA,EAAW,OAAO,CAAA,CAAE;AAC7B,YAAA,MAAM,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;AACvB,gBAAA,OAAO,OAAO;AAEhB,YAAA,MAAM,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC;AAC3B,gBAAA,YAAY,GAAG,8BAA8B,CAAC,IAAI,CAAC,KAAK,CAAC;AACzD,gBAAA,OAAO,GAAG,YAAY,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,GAAG;gBAC9C,OAAO,CAAA,MAAA,EAAS,OAAO,CAAA,CAAE;;IAE/B;IACA,OAAO,CAAC,EAAE;AACR,QAAA,cAAc,CAAC,UAAU,EAAE,CAAC,CAAC;IAC/B;AACA,IAAA,OAAO,SAAS;AAClB;AAEA,SAAS,aAAa,GAAA;AACpB,IAAA,IAAI;QACF,MAAM,KAAK,GAAG,UAAU,CAAC,SAAS,CAAC,SAAS,CAAC,WAAW,EAAE;QAC1D,QAAQ,IAAI;AACV,YAAA,KAAK,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC;AACxB,gBAAA,OAAO,MAAM;AACf,YAAA,KAAK,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC;AACxB,gBAAA,OAAO,OAAO;AAChB,YAAA,KAAK,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC;AAC3B,gBAAA,OAAO,QAAQ;AACjB,YAAA,KAAK,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC;AAC5B,gBAAA,OAAO,SAAS;AAClB,YAAA,KAAK,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC;AAC3B,gBAAA,OAAO,QAAQ;AACjB,YAAA,KAAK,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC;AACzB,gBAAA,OAAO,IAAI;;IAEjB;IACA,OAAO,CAAC,EAAE;AACR,QAAA,cAAc,CAAC,eAAe,EAAE,CAAC,CAAC;IACpC;AACA,IAAA,OAAO,SAAS;AAClB;AAEM,SAAU,aAAa,CAAC,EAAU,EAAE,IAAmB,EAAA;IAC3D,MAAM,SAAS,GAAG,+DAA+D;AACjF,IAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC;AACxD,IAAA,OAAO,EAAE;AACX;;MCxNa,cAAc,CAAA;AAGxB,IAAA,WAAA,CAA6B,WAA0B,EAAA;QAA1B,IAAA,CAAA,WAAW,GAAX,WAAW;IACxC;AAKD,IAAA,WAAW,QAAQ,GAAA;QACjB,OAAO,cAAc,CAAC,SAAS;IACjC;AAEA,IAAA,QAAQ,CAAC,GAAY,EAAA;AACnB,QAAA,MAAM,GAAG,GAAG,OAAO,EAAE;AACrB,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;QACpB,IAAI,GAAG,EAAE;AACP,YAAA,MAAM,EAAE,GAAG,MAAM,CAAC,UAAU,EAAE;YAC9B,IAAI,CAAC,cAAc,GAAG;AACpB,gBAAA,OAAO,EAAE,uBAAuB;AAChC,gBAAA,EAAE,EAAE,EAAE;AACN,gBAAA,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,SAAS,CAAS,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;AAC9C,gBAAA,KAAK,EAAE,GAAG;AACV,gBAAA,QAAQ,EAAE,GAAG;AACb,gBAAA,WAAW,EAAE,CAAC;aACf;YACD,IAAI,CAAC,sBAAsB,GAAG;AAC5B,gBAAA,OAAO,EAAE,gCAAgC;AACzC,gBAAA,EAAE,EAAE,EAAE;AACN,gBAAA,WAAW,EAAE,CAAC;aACf;QACH;IACF;AAEQ,IAAA,UAAU,CAAC,GAAY,EAAA;AAC7B,QAAA,IAAI,CAAC,yBAAyB,CAAC,IAAI,IAAG;AACpC,YAAA,IAAI,CAAC,GAAG,GAAG,GAAG;YACd,cAAc,CAAC,IAAI,CAAC;AACtB,QAAA,CAAC,CAAC;AACF,QAAA,IAAI,CAAC,sBAAsB,GAAG,SAAS;IACzC;IAEA,aAAa,GAAA;AACX,QAAA,IAAI,IAAI,CAAC,cAAc,EAAE;YACvB,IAAI,CAAC,cAAc,CAAC,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC;YAC1C,IAAI,CAAC,cAAc,CAAC,QAAQ,GAAG,QAAQ,CAAC,GAAG;YAC3C,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAM,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC,EAAE;AACtF,gBAAA,cAAc,CAAC,IAAI,CAAC,cAAc,CAAC;YACrC;AACA,YAAA,IAAI,CAAC,cAAc,GAAG,SAAS;QACjC;aACI;AACF,YAAA,cAAc,CAAC,eAAe,EAAE,mBAAmB,CAAC;QACtD;IACF;AAEA,IAAA,yBAAyB,CAAC,EAAmC,EAAA;AAC3D,QAAA,IAAI,IAAI,CAAC,sBAAsB,EAAE;AAC/B,YAAA,OAAO,EAAE,CAAC,IAAI,CAAC,sBAAsB,CAAC;QACxC;AACA,QAAA,cAAc,CAAC,2BAA2B,EAAE,mBAAmB,CAAC;AAChE,QAAA,OAAO,SAAS;IAClB;IAEA,gBAAgB,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,yBAAyB,CAAC,CAAC,IAAG,CAAC,CAAC,EAAE,CAAC;IACjD;AAEA,IAAA,eAAe,CAAC,IAAiB,EAAA;QAC/B,MAAM,GAAG,GAAG,IAAI,CAAC,yBAAyB,CAAC,CAAC,IAAE;YAC5C,IAAI,CAAC,CAAC,CAAC,WAAW,GAAG,IAAI,MAAM,IAAI,EAAE;AACnC,gBAAA,CAAC,CAAC,WAAW,IAAI,IAAI;AACrB,gBAAA,cAAc,CAAC;AACb,oBAAA,OAAO,EAAE,8BAA8B;oBACvC,EAAE,EAAE,CAAC,CAAC,EAAE;AACR,oBAAA,IAAI,EAAE,IAAI;oBACV,IAAI,EAAE,CAAC,CAAC;AACY,iBAAA,CAAC;YACzB;AACA,YAAA,OAAO,EAAC,SAAS,EAAC,CAAC,CAAC,EAAE,EAAC;AACzB,QAAA,CAAC,CAAC;QACF,OAAO,GAAG,IAAI,EAAE;IAClB;IAEA,cAAc,GAAA;QACZ,MAAM,GAAG,GAAG,IAAI,CAAC,yBAAyB,CAAC,CAAC,KAAI,EAAC,SAAS,EAAC,CAAC,CAAC,EAAE,EAAC,CAAC,CAAC;QAClE,OAAO,GAAG,IAAI,EAAE;IAClB;AAEA,IAAA,YAAY,CAAC,SAAc,EAAA;AACzB,QAAA,IAAI,CAAC,yBAAyB,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,GAAG,SAAS,CAAC;IAC9D;AAEA,IAAA,IAAI,CAAC,OAAe,EAAA;AAClB,QAAA,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC;IAC3B;AAEA,IAAA,IAAI,CAAC,OAAe,EAAA;AAClB,QAAA,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC;IAC3B;AAEA,IAAA,KAAK,CAAC,OAAe,EAAA;AACnB,QAAA,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC;IAC5B;IAEQ,GAAG,CAAC,KAAe,EAAE,OAAe,EAAA;QAC1C,IAAI,OAAO,EAAE;AACX,YAAA,IAAI,CAAC,yBAAyB,CAAC,CAAC,IAAG,WAAW,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;QACvE;IACF;AACD;SAEe,aAAa,GAAA;IAC3B,OAAO,cAAc,CAAC,QAAQ;AAChC;AAEM,SAAU,cAAc,CAAC,IAAmB,EAAA;IAChD,cAAc,CAAC,SAAS,GAAG,IAAI,cAAc,CAAC,IAAI,CAAC;AACnD,IAAA,GAAG,CAAC,yBAAyB,CAAC,GAAG,cAAc,CAAC,SAAS;AAC3D;;ACtHO,MAAM,YAAY,GAAG,WAAW;MAE1B,kBAAkB,CAAA;AAK7B,IAAA,WAAA,GAAA;AACE,QAAA,IAAI,CAAC,KAAK,GAAG,OAAO,EAAE;AACtB,QAAA,IAAI,CAAC,EAAE,GAAG,MAAM,CAAC,UAAU,EAAE;IAC/B;AAEA,IAAA,UAAU,CAAC,WAA6B,EAAA;AACtC,QAAA,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,WAAW,CAAC,aAAa,EAAE,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC;QAC1E,MAAM,SAAS,GAAG,wBAAwB,CAAC,WAAW,CAAC,OAAO,CAAC;AAC/D,QAAA,cAAc,CAAC,EAAC,GAAG,cAAc,CAAC,QAAQ,CAAC,eAAe,CAAC,WAAW,CAAC,IAAI,CAAC;AAC1E,YAAA,OAAO,EAAE,uBAAuB;YAChC,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,MAAM,EAAE,WAAW,CAAC,MAAM;YAC1B,QAAQ,EAAE,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACnC,IAAI,EAAE,GAAG,CAAC,QAAQ;AAClB,YAAA,IAAI,EAAE,GAAG,CAAC,IAAI,GAAE,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC;YACpC,IAAI,EAAE,GAAG,CAAC,QAAQ;AAClB,YAAA,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC;YAC7C,WAAW,EAAE,WAAW,CAAC,YAAY;YACrC,UAAU,EAAE,SAAS,CAAC,UAAU;YAChC,IAAI,EAAE,SAAS,CAAC,IAAI;AACpB,YAAA,QAAQ,EAAE,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC;YAClC,KAAK,EAAE,IAAI,CAAC,KAAK;AACH,SAAA,CAAC;IACnB;IAEA,WAAW,CAAC,QAAiC,EAAE,KAA+B,EAAA;AAC5E,QAAA,MAAM,GAAG,GAAG,OAAO,EAAE;AACrB,QAAA,MAAM,QAAQ,GAAwB;AACpC,YAAA,OAAO,EAAE,gCAAgC;YACzC,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,QAAQ,EAAE,CAAC,CAAC;AACZ,YAAA,MAAM,EAAE,KAAK;AACb,YAAA,GAAG,EAAE;SACN;AACD,QAAA,IAAI,MAAM,GAAW,CAAC,EAAE,SAAyB;;QAGjD,IAAI,QAAQ,EAAE;AACZ,YAAA,MAAM,GAAG,QAAQ,CAAC,MAAM;YACxB,QAAQ,CAAC,QAAQ,GAAG,QAAQ,YAAY,YAAY,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACjF,QAAQ,CAAC,WAAW,GAAG,kBAAkB,CAAC,QAAQ,CAAC,OAAO,CAAC;AAC3D,YAAA,QAAQ,CAAC,MAAM,GAAG,eAAe,CAAC,IAAI,CAAC,EAAE,EAAE,QAAQ,CAAC,OAAO,CAAC;QAC9D;;QAGA,IAAI,KAAK,EAAE;AACT,YAAA,MAAM,GAAG,KAAK,CAAC,MAAM,IAAI,CAAC;AAC1B,YAAA,SAAS,GAAG;gBACV,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,OAAO,EAAE,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC;aAC5E;YACD,QAAQ,CAAC,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC;YAClD,QAAQ,CAAC,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC;YACvC,QAAQ,CAAC,WAAW,GAAG,kBAAkB,CAAC,KAAK,CAAC,OAAO,CAAC;AACxD,YAAA,QAAQ,CAAC,MAAM,GAAG,eAAe,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,CAAC,OAAO,CAAC;QAC3D;AAEA,QAAA,QAAQ,CAAC,MAAM,GAAG,MAAM;QACxB,cAAc,CAAC,QAAQ,EAAE;AACvB,YAAA,OAAO,EAAE,6BAA6B;AACtC,YAAA,IAAI,EAAE,SAAS;AACf,YAAA,KAAK,EAAE,IAAI,CAAC,KAAK;AACjB,YAAA,GAAG,EAAE,GAAG;AACR,YAAA,KAAK,EAAE,CAAC;AACR,YAAA,SAAS,EAAE,SAAS;YACpB,SAAS,EAAE,IAAI,CAAC;AACG,SAAA,CAAC;IACxB;AACD;AAED,SAAS,eAAe,CAAC,EAAU,EAAE,OAAoB,EAAA;IACvD,OAAO,OAAO,EAAE,GAAG,CAAC,YAAY,CAAC,IAAI,EAAE;AACzC;AAEA,SAAS,wBAAwB,CAAC,OAAY,EAAA;IAC5C,MAAM,UAAU,GAAG,OAAO,EAAE,GAAG,CAAC,eAAe,CAAC;IAChD,IAAI,CAAC,UAAU,EAAE;QACf,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE;IACzC;AAEA,IAAA,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC;AAEnD,IAAA,IAAI,CAAC,MAAM,IAAI,CAAC,WAAW,IAAI,CAAC,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;QACpE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE;IACzC;IAEA,OAAO;AACL,QAAA,UAAU,EAAE,MAAM;QAClB,IAAI,EAAE,WAAW,CAAC,MAA4B,EAAE,WAAW,CAAC,IAAI;KACjE;AACH;AAEA,SAAS,WAAW,CAAC,MAA0B,EAAE,aAAqB,EAAA;AACpE,IAAA,IAAI;QACF,QAAQ,MAAM;AACZ,YAAA,KAAK,OAAO;AACV,gBAAA,OAAO,IAAI,CAAC,aAAa,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,SAAS;YACvD,KAAK,QAAQ,EAAE;gBACb,MAAM,YAAY,GAAG,aAAa,CAAC,KAAK,CAAC,yBAAyB,CAAC;AACnE,gBAAA,IAAI,YAAY,GAAG,CAAC,CAAC,EAAE;AACrB,oBAAA,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG;gBAC9C;AACA,gBAAA,cAAc,CAAC,aAAa,EAAE,6BAA6B,CAAC;AAC5D,gBAAA,OAAO,SAAS;YAClB;AACA,YAAA;AACE,gBAAA,cAAc,CAAC,aAAa,EAAE,wBAAwB,MAAM,CAAA,CAAE,CAAC;;IAErE;IAAE,OAAO,CAAC,EAAE;AACV,QAAA,cAAc,CAAC,aAAa,EAAE,CAAC,CAAC;IAClC;AACA,IAAA,OAAO,SAAS;AAClB;AAEA,SAAS,kBAAkB,CAAC,OAAY,EAAA;AACtC,IAAA,IAAI;AACF,QAAA,IAAI,OAAO,EAAE,GAAG,CAAC,cAAc,CAAC,EAAE;AAChC,YAAA,OAAO,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;QACpC;IACF;IAAE,OAAO,GAAG,EAAE;AACZ,QAAA,cAAc,CAAC,oBAAoB,EAAE,GAAG,CAAC;IAC3C;AACA,IAAA,OAAO,SAAS;AAClB;AAEA,SAAS,MAAM,CAAC,IAAS,EAAA;IACvB,IAAI,IAAI,EAAE;AACR,QAAA,IAAI;AACF,YAAA,OAAO,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI;QAC9C;QACA,OAAO,CAAC,EAAE;AACR,YAAA,cAAc,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC7B;IACF;IACA,OAAO,CAAC,CAAC;AACX;;ACtJO,MAAMC,kBAAgB,GAAG,IAAI,cAAc,CAAgB,kBAAkB,CAAC;MAGxE,sBAAsB,CAAA;AAEjC,IAAA,WAAA,CAAuD,UAAgE,EAAA;QAAhE,IAAA,CAAA,UAAU,GAAV,UAAU;IAAyD;IAE1H,SAAS,CAAC,GAAqB,EAAE,IAAiB,EAAA;AAChD,QAAA,MAAM,OAAO,GAAG,IAAI,kBAAkB,EAAE;AACxC,QAAA,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC;AAEvB,QAAA,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI;QAC1D,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC,CAAM,KAAK,CAAC,IAAI,IAAI,CAAC,EAAE;YACnE,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC;QACzE;QAEA,IAAI,QAAQ,GAA4B,IAAI;QAC5C,IAAI,KAAK,GAA6B,IAAI;QAE1C,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;AAC/B,YAAA,IAAI,EAAE,CAAC,KAAqB,KAAI;AAC9B,gBAAA,IAAI,KAAK,YAAY,YAAY,EAAE;oBACjC,QAAQ,GAAG,KAAK;gBAClB;;YAEF,CAAC;AACD,YAAA,KAAK,EAAE,CAAC,GAAsB,KAAI;gBAChC,KAAK,GAAG,GAAG;YACb;AACD,SAAA,CAAC,EACA,QAAQ,CAAC,MAAK;;AAEZ,YAAA,IAAI,CAAC,QAAQ,IAAI,CAAC,KAAK,EAAE;gBACvB,KAAK,GAAG,IAAI,iBAAiB,CAAC;AAC5B,oBAAA,KAAK,EAAE,6CAA6C;AACpD,oBAAA,MAAM,EAAE,CAAC;AACT,oBAAA,UAAU,EAAE,WAAW;oBACvB,GAAG,EAAE,GAAG,CAAC;AACV,iBAAA,CAAC;YACJ;AACA,YAAA,OAAO,CAAC,WAAW,CAAC,QAAQ,EAAE,KAAK,CAAC;QACtC,CAAC,CAAC,CAAC;IACP;AAvCW,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,sBAAsB,kBAEbA,kBAAgB,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAFzB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,sBAAsB,cADT,MAAM,EAAA,CAAA,CAAA;;4FACnB,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBADlC,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;0BAGnB,MAAM;2BAACA,kBAAgB;;;MCRzB,kBAAkB,CAAA;AAE7B,IAAA,WAAW,CAAC,KAAU,EAAA;AACpB,QAAA,IAAI;AACF,YAAA,cAAc,CAAC,QAAQ,CAAC,YAAY,CAAC;gBACnC,IAAI,EAAE,KAAK,EAAE,IAAI;gBACjB,OAAO,EAAE,KAAK,EAAE;AACjB,aAAA,CAAC;QACJ;QAAE,OAAO,CAAC,EAAE;AACV,YAAA,cAAc,CAAC,uCAAuC,EAAE,CAAC,CAAC;QAC5D;AACA,QAAA,MAAM,KAAK;IACb;+GAZW,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAlB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,kBAAkB,cADL,MAAM,EAAA,CAAA,CAAA;;4FACnB,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAD9B,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;ACClC,MAAM,WAAW,GAAsB,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;AAExD,MAAM,oCAAoC,CAAA;AAaxC,IAAA,WAAA,CAA6B,WAA0B,EAAA;QAA1B,IAAA,CAAA,WAAW,GAAX,WAAW;QAR/B,IAAA,CAAA,UAAU,GAAiB,EAAE;QAEtC,IAAA,CAAA,gBAAgB,GAAW,CAAC;QAC5B,IAAA,CAAA,WAAW,GAAY,KAAK;QAC5B,IAAA,CAAA,kBAAkB,GAAY,KAAK;QACnC,IAAA,CAAA,YAAY,GAAa,KAAK;QAI5B,IAAI,CAAC,YAAY,GAAG,QAAQ,CAAC,WAAW,CAAC,QAAQ;AAC9C,aAAA,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;AACjB,aAAA,IAAI,CAACC,KAAG,CAAC,MAAK;AACb,YAAA,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,QAAQ,EAAE;AAC5D,gBAAA,IAAI,CAAC,WAAW,GAAG,IAAI;AACvB,gBAAA,cAAc,EAAE;gBAChB,IAAI,CAAC,QAAQ;qBACV,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC;qBACrC,KAAK,CAAC,GAAG,IAAI,cAAc,CAAC,wCAAwC,EAAE,GAAG,CAAC;AAC1E,qBAAA,OAAO,CAAC,MAAK,EAAG,IAAI,CAAC,WAAW,GAAG,KAAK,CAAA,CAAC,CAAC,CAAC;YAChD;AACF,QAAA,CAAC,CAAC;AACD,aAAA,SAAS,EAAE;AACd,QAAA,gBAAgB,CAAC,CAAC,IAAI,IAAI,CAAC,WAAW,CAAE,CAAiB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACzE,mBAAmB,CAAC,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;IAC1C;AAEA,IAAA,WAAW,CAAC,MAAoB,EAAA;AAC9B,QAAA,IAAG,CAAC,IAAI,CAAC,YAAY,EAAC;AACpB,YAAA,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACvD;IACF;AAEA,IAAA,KAAK,CAAC,QAA6B,EAAA;AACjC,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ;IAC1B;IAEA,QAAQ,GAAA;AACN,QAAA,IAAI,IAAI,CAAC,kBAAkB,EAAE;AAC3B,YAAA,OAAO,IAAI,CAAC,cAAc,EAAE;QAC9B;QACA,OAAO,IAAI,CAAC,gBAAgB,EAAE,CAAC,IAAI,CAAC,EAAE,IAAG;YACvC,IAAI,EAAE,EAAE;AACN,gBAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI;AAC9B,gBAAA,OAAO,IAAI,CAAC,cAAc,EAAE;YAC9B;YACA,OAAO,CAAC,IAAI,CAAC,CAAA,+DAAA,EAAkE,IAAI,CAAC,gBAAgB,CAAA,CAAE,CAAC;YACvG,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAC;AACpD,QAAA,CAAC,CAAC;IACJ;AAEA,IAAA,cAAc,CAAC,OAAiB,EAAA;QAC9B,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE;AAChC,YAAA,OAAO,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC;QACrC;AACA,QAAA,IAAI,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,UAAU,GAAG,YAAY,GAAG,EAAE,IAAI,CAAC,gBAAgB;QAC9E,IAAI,OAAO,EAAE;YACX,GAAG,IAAI,OAAO,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QAC3C;QACA,MAAM,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC;AACnC,QAAA,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC;QAC1B,OAAO,KAAK,CAAC,GAAG,EAAE;AACd,YAAA,MAAM,EAAE,KAAK;AACb,YAAA,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;AAC/C,YAAA,IAAI,EAAE,MAAM;AACZ,YAAA,SAAS,EAAE,IAAI;AACf,YAAA,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM;SAC5B;aACA,IAAI,CAAC,GAAG,IAAE;AACT,YAAA,IAAI,GAAG,CAAC,EAAE,EAAE;AACV,gBAAA,IAAI,CAAC,gBAAgB,GAAG,CAAC;AACzB,gBAAA,OAAO,WAAW;YACpB;YACA,OAAO,CAAC,IAAI,CAAC,CAAA,mDAAA,EAAsD,IAAI,CAAC,gBAAgB,CAAA,CAAE,CAAC;AAC3F,YAAA,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,MAAM,GAAG,GAAG,EAAE;gBACzC,OAAO,MAAM,CAAC;YAChB;YACA,OAAO,GAAG,CAAC,IAAI;AACZ,iBAAA,IAAI,CAAC,IAAI,IAAI,IAAI,EAAE,KAAK,GAAG,MAAM,GAAG,WAAW;AAC/C,iBAAA,KAAK,CAAC,MAAM,WAAW,CAAC;AAC7B,QAAA,CAAC;aACA,KAAK,CAAC,MAAK;YACV,OAAO,CAAC,IAAI,CAAC,CAAA,mDAAA,EAAsD,IAAI,CAAC,gBAAgB,CAAA,CAAE,CAAC,CAAC;AAC5F,YAAA,OAAO,MAAM;AACf,QAAA,CAAC,CAAC;IACN;IAEA,gBAAgB,GAAA;QACd,IAAI,CAAC,gBAAgB,EAAE;AACvB,QAAA,OAAO,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE;AACzC,YAAA,MAAM,EAAE,MAAM;AACd,YAAA,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;AAC/C,YAAA,IAAI,EAAE,MAAM;AACZ,YAAA,SAAS,EAAE,IAAI;YACf,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ;SACnC;aACE,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,IAAG;AACzC,YAAA,IAAI,CAAC,gBAAgB,GAAG,CAAC;AACzB,YAAA,OAAO,IAAI;AACb,QAAA,CAAC,CAAC,GAAG,KAAK;AACT,aAAA,KAAK,CAAC,GAAG,IAAI,KAAK,CAAC;IACxB;AAEA,IAAA,eAAe,CAAC,MAAoB,EAAA;AAClC,QAAA,IAAG,CAAC,IAAI,CAAC,YAAY,EAAC;YACpB,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,MAAM,CAAC;AAClC,YAAA,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE;gBAC3D,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC;YACxD;QACF;IACF;IAEA,OAAO,GAAA;AACL,QAAA,IAAI,CAAC,YAAY,EAAE,WAAW,EAAE;AAChC,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI;QACxB,cAAc,EAAE,CAAC;AACjB,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;IAC3B;AACD;AAEK,SAAU,6BAA6B,CAAC,IAAmB,EAAA;IAC/D,OAAO,oCAAoC,CAAC,SAAS,GAAG,IAAI,oCAAoC,CAAC,IAAI,CAAC;AACxG;;ACjIA,MAAM,aAAa,GAAwD;IACzE,OAAO,EAAE,CAAC,MAAmB,KAAK,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC;CACzD;SACe,qBAAqB,GAAA;AACnC,IAAA,IAAI;AACF,QAAA,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI;QACjC,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,aAAa,EAAE,IAAI,CAAC;QACnD,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,aAAa,EAAE,IAAI,CAAC;QACpD,IAAI,CAAC,gBAAgB,CAAC,WAAW,EAAE,aAAa,EAAE,IAAI,CAAC;QACvD,IAAI,CAAC,gBAAgB,CAAC,SAAS,EAAE,aAAa,EAAE,IAAI,CAAC;QACrD,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,aAAa,EAAE,IAAI,CAAC;IAC3E;IACA,OAAO,CAAC,EAAE;AACR,QAAA,cAAc,CAAC,uBAAuB,EAAE,CAAC,CAAC;IAC5C;AACF;AAEA,SAAS,aAAa,CAAC,KAAyB,EAAA;AAC9C,IAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAAqB;AAC1C,IAAA,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI;AAC5B,IAAA,IAAI;AACF,QAAA,IAAI,aAAa,CAAC,cAAc,CAAC,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,EAAE;YAChF;QACF;AACA,QAAA,aAAa,CAAC,SAAS,EAAE,MAAM,CAAC;IAClC;IAAE,OAAO,GAAG,EAAE;AACZ,QAAA,cAAc,CAAC,0BAA0B,EAAE,GAAG,CAAC;IACjD;AACF;AAEA,SAAS,WAAW,CAAC,CAAc,EAAE,KAAa,EAAA;AAChD,IAAA,IAAI,CAAC,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,IAAI,CAAC,EAAE;AAC/C,QAAA,IAAI,EAAE,KAAK,GAAG,CAAC,EAAE;AACf,YAAA,OAAO,KAAK;QACd;AACA,QAAA,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,KAC5C,GAAG,IAAI,WAAW,CAAC,CAAgB,EAAE,KAAK,CAAC,EAAE,IAAI,CAAC;IACtD;AACA,IAAA,OAAO,IAAI;AACb;AAEA,SAAS,aAAa,CAAC,SAAiB,EAAE,MAAmB,EAAA;AAC3D,IAAA,cAAc,CAAC;AACb,QAAA,GAAG,cAAc,CAAC,QAAQ,CAAC,cAAc,EAAE;AAC3C,QAAA,OAAO,EAAE,sBAAsB;AAC/B,QAAA,IAAI,EAAE,SAAS;QACf,OAAO,EAAE,OAAO,EAAE;AAClB,QAAA,IAAI,EAAE,WAAW,CAAC,MAAM,CAAC;AACzB,QAAA,QAAQ,EAAE,MAAM,CAAC,OAAO,EAAE,WAAW;AACxB,KAAA,CAAC;AAClB;AAEA,SAAS,QAAQ,CAAC,CAAwC,EAAE,CAAc,EAAA;AACxE,IAAA,KAAK,MAAM,CAAC,IAAI,CAAC,EAAE;QACjB,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE;QACpB,IAAI,CAAC,EAAE;AACL,YAAA,OAAO,CAAC;QACV;IACF;AACA,IAAA,OAAO,IAAI;AACb;AAEA,SAAS,WAAW,CAAC,CAAc,EAAA;AACjC,IAAA,IAAI;AACF,QAAA,IAAI,OAAO,GAAG,CAAC,CAAC,OAAO;QACvB,IAAI,OAAO,EAAE;AACX,YAAA,IAAI,IAAI;YACR,IAAI,CAAC,GAAG,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;YAClC,IAAI,CAAC,EAAE;AACL,gBAAA,IAAI,GAAG,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC;YACvB;YACA,OAAO,IAAI,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAE;QACzC;IAEF;IAAE,OAAO,GAAG,EAAE;AACZ,QAAA,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;IACnB;AACA,IAAA,OAAO,IAAI;AACb;AAEA,MAAM,UAAU,GAA0C;IACxD,CAAC,IAAI,CAAC,CAAC,YAAY,CAAC,aAAa,CAAC;IAClC,CAAC,IAAI,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC;AAC5B,IAAA,CAAC,IAAI,CAAC,CAAC,SAAS;IAChB,CAAC,IAAI,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC;IAC3B,CAAC,IAAI,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC;CAC1B;AAED,MAAM,GAAG,GAA6D;AACpE,IAAA,KAAK,EAAE;QACL,CAAC,IAAI,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC;QAC1B,CAAC,IAAI,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC;AAC3B,KAAA;AACD,IAAA,OAAO,EAAE;QACP,CAAC,IAAI,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC;AAC5B,KAAA;AACD,IAAA,GAAG,EAAE;QACH,CAAC,IAAI,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC;AAC5B,KAAA;AACD,IAAA,OAAO,EAAE;QACP,CAAC,IAAI,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC;AAC3B,KAAA;CACF;;ACtGK,SAAU,qBAAqB,CAAC,MAAc,EAAA;AAClD,IAAA,IAAG;AACD,QAAA,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,YAAY,CAAC;AACrC,QAAA,MAAM,CAAC,gBAAgB,CAAC,UAAU,EAAE,cAAc,CAAC;AACnD,QAAA,MAAM,CAAC,gBAAgB,CAAC,cAAc,EAAE,mBAAmB,CAAC;IAC9D;IACA,OAAM,CAAC,EAAC;AACN,QAAA,cAAc,CAAC,uBAAuB,EAAE,CAAC,CAAC;IAC5C;AACF;AAEA,SAAS,YAAY,CAAC,KAAU,EAAA;AAC9B,IAAA,IAAI,KAAK,YAAY,eAAe,EAAE;QACpC,cAAc,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC;IAC7C;IACA,IAAI,KAAK,YAAY,aAAa,IAAI,KAAK,YAAY,gBAAgB,EAAE;AACvE,QAAA,UAAU,CAAC,MAAI,cAAc,CAAC,QAAQ,CAAC,aAAa,EAAE,EAAC,CAAC,CAAC;IAC3D;AACF;AAEA,SAAS,mBAAmB,CAAC,KAAU,EAAA;AACrC,IAAA,cAAc,CAAC,QAAQ,CAAC,QAAQ,EAAE;AAClC,IAAA,eAAe,EAAE;AACnB;AAEA,SAAS,cAAc,CAAC,KAAU,EAAA;AAChC,IAAA,IAAI,KAAK,CAAC,SAAS,EAAE;AACnB,QAAA,cAAc,EAAE;QAChB,cAAc,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC;AAC9C,QAAA,UAAU,CAAC,MAAM,cAAc,CAAC,QAAQ,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;IAC9D;AACF;;SChCgB,wBAAwB,GAAA;AACtC,IAAA,IAAG;AACD,QAAA,IAAI,QAAQ,IAAI,WAAW,EAAE;YAC3B,iBAAiB,CAAC,qBAAqB,CAAC;QAC1C;IACF;IACA,OAAM,CAAC,EAAC;AACN,QAAA,cAAc,CAAC,0BAA0B,EAAE,CAAC,CAAC;IAC/C;AACF;AAEA,SAAS,qBAAqB,GAAA;AAC5B,IAAA,IAAI;AACF,QAAA,MAAM,MAAM,GAAI,WAAmB,CAAC,MAAM;AAC1C,QAAA,cAAc,CAAC;AACb,YAAA,OAAO,EAAE,yBAAyB;YAClC,OAAO,EAAE,OAAO,EAAE;YAClB,QAAQ,EAAE,MAAM,CAAC,cAAc,IAAI,IAAI,GAAG,IAAI,CAAC;YAC/C,YAAY,EAAE,MAAM,CAAC,eAAe,IAAI,IAAI,GAAG,IAAI,CAAC;AAC5B,SAAA,CAAC;IAC7B;IAAE,OAAO,CAAC,EAAE;AACV,QAAA,cAAc,CAAC,uBAAuB,EAAE,CAAC,CAAC;IAC5C;AACF;;ACGA,MAAM,gBAAgB,GAAG,IAAI,cAAc,CAAkB,kBAAkB,CAAC;MAGnE,iBAAiB,CAAA;IAE5B,OAAO,OAAO,CAAC,aAA8B,EAAA;QAC3C,MAAM,SAAS,GAAG,EAAE;AACpB,QAAA,IAAI,aAAa,EAAE,OAAO,EAAE;AAC1B,YAAA,IAAI;AACF,gBAAA,IAAI,MAAM,GAAI,mBAAmB,CAAC,aAAa,CAAC;AAChD,gBAAA,SAAS,CAAC,IAAI,CACZ,EAAE,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,EAAE,EAC/C,EAAE,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,uBAAuB,EAAE,IAAI,EAAE,CAAC,gBAAgB,EAAE,MAAM,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,EAChH,EAAE,OAAO,EAAE,iBAAiB,EAAE,QAAQ,EAAE,sBAAsB,EAAE,IAAI,EAAC,CAAC,gBAAgB,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,EACtG,EAAE,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,kBAAkB,EAAE,CACvD;YACJ;YAAE,OAAO,CAAM,EAAE;gBACf,OAAO,CAAC,IAAI,CAAC,CAAA,gEAAA,EAAmE,CAAC,CAAC,OAAO,CAAA,CAAE,CAAC;YAC9F;QACF;QACA,OAAO,EAAC,QAAQ,EAAE,iBAAiB,EAAE,SAAS,EAAG,SAAS,EAAC;IAC7D;+GAlBW,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;gHAAjB,iBAAiB,EAAA,CAAA,CAAA;gHAAjB,iBAAiB,EAAA,CAAA,CAAA;;4FAAjB,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAD7B;;AAsBK,SAAU,uBAAuB,CAAC,MAA6D,EAAE,MAAc,EAAA;AACnH,IAAA,OAAO,MAAK;AACX,QAAA,IAAI,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE;AACxB,YAAA,qBAAqB,EAAE;QACzB;AACA,QAAA,IAAI,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE;AACzB,YAAA,wBAAwB,EAAE;QAC5B;QACA,qBAAqB,CAAC,MAAM,CAAC;;;QAG7B,iBAAiB,CAAC,CAAC,IAAE;YACjB,eAAe,CAAC,MAAM,CAAC;AAC3B,QAAA,CAAC,CAAC;AACJ,IAAA,CAAC;AACH;AAEM,SAAU,mBAAmB,CAAC,MAAuB,EAAA;AACzD,IAAA,MAAM,EAAE,GAAG,MAAM,CAAC,UAAU,EAAE;IAC9B,MAAM,IAAI,GAAG,oBAAoB,CAAC,MAAM,EAAE,EAAE,CAAC;AAC7C,IAAA,MAAM,QAAQ,GAAG,6BAA6B,CAAC,IAAI,CAAC;IACpD,MAAM,QAAQ,GAAG,cAAc,CAAC,MAAM,EAAE,EAAE,CAAC;AAC3C,IAAA,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC;IACxB,cAAc,CAAC,IAAI,CAAC;IACpB,OAAO,EAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAC;AACzC;AAEM,SAAU,eAAe,CAAC,MAA6D,EAAA;AAC3F,IAAA,MAAM,EAAE,GAAG,MAAM,CAAC,UAAU,EAAE;AAC9B,IAAA,aAAa,CAAC,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC;IAC9B,MAAM,QAAQ,GAAG,6BAA6B,CAAC,MAAM,CAAC,IAAI,CAAC;AAC3D,IAAA,MAAM,CAAC,QAAQ,CAAC,EAAE,GAAE,EAAE;AACtB,IAAA,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC;AAC/B,IAAA,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC;AAC7B;;MC7Ea,mBAAmB,CAAA;AAK9B,IAAA,WAAA,GAAA;AACE,QAAA,IAAI,CAAC,KAAK,GAAG,OAAO,EAAE;AACtB,QAAA,IAAI,CAAC,EAAE,GAAG,MAAM,CAAC,UAAU,EAAE;IAC/B;IAEA,UAAU,CAAC,WAAmB,EAAE,MAAW,EAAA;AACzC,QAAA,cAAc,CAAC;YACb,GAAG,GAAG,CAAC,yBAAyB,CAAC,EAAE,eAAe,CAAC,WAAW,CAAC,KAAK,CAAC;AACrE,YAAA,OAAO,EAAE,wBAAwB;YACjC,EAAE,EAAE,IAAI,CAAC,EAAE;AACX,YAAA,IAAI,EAAE,WAAW;AACjB,YAAA,QAAQ,EAAE,MAAM,CAAC,WAAW,CAAC,IAAI;YACjC,IAAI,EAAE,GAAG,CAAC,yBAAyB,CAAC,EAAE,cAAc,EAAE,IAAI;YAC1D,KAAK,EAAE,IAAI,CAAC;AACG,SAAA,CAAC;IACpB;AAEA,IAAA,WAAW,CAAC,SAAe,EAAA;AACzB,QAAA,cAAc,CAAC;AACb,YAAA,OAAO,EAAE,iCAAiC;YAC1C,EAAE,EAAE,IAAI,CAAC,EAAE;AACX,YAAA,SAAS,EAAE,SAAS;YACpB,GAAG,EAAE,OAAO;AACW,SAAA,CAAC;IAC5B;AACD;;SCtCe,cAAc,GAAA;AAE5B,IAAA,OAAO,UACL,MAAW,EACX,WAAmB,EACnB,UAA8B,EAAA;AAE9B,QAAA,MAAM,cAAc,GAAG,UAAU,CAAC,KAAK;AACvC,QAAA,UAAU,CAAC,KAAK,GAAG,UAAU,GAAG,IAAW,EAAA;AACzC,YAAA,MAAM,OAAO,GAAG,IAAI,mBAAmB,EAAE;AACzC,YAAA,IAAI,SAAS;AACb,YAAA,IAAI;AACF,gBAAA,OAAO,CAAC,UAAU,CAAC,WAAW,EAAC,MAAM,CAAC;gBACtC,OAAO,cAAc,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC;YACzC;YAAE,OAAO,CAAM,EAAE;AACf,gBAAA,SAAS,GAAG,gBAAgB,CAAC,CAAC,CAAC;AAC/B,gBAAA,MAAM,CAAC;YACT;oBAAU;AACR,gBAAA,OAAO,CAAC,WAAW,CAAC,SAAS,CAAC;YAChC;AACF,QAAA,CAAC;AACD,QAAA,OAAO,UAAU;AACnB,IAAA,CAAC;AACH;AACM,SAAU,gBAAgB,CAAC,CAAM,EAAA;AACrC,IAAA,IAAI,IAAI,GAAG,IAAI,EAAE,OAAO,GAAG,IAAI;IAC/B,IAAI,CAAC,EAAE;AACL,QAAA,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE;YACzB,OAAO,GAAG,CAAC;QACb;AAAO,aAAA,IAAI,CAAC,YAAY,KAAK,EAAE;AAC7B,YAAA,IAAI,GAAG,CAAC,CAAC,IAAI;AACb,YAAA,OAAO,GAAG,CAAC,CAAC,OAAO;QACrB;aAAO;AACL,YAAA,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;QAC7B;IACF;AACA,IAAA,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE;AAC1B;;ACvCA;;AAEG;;ACFH;;AAEG;;;;"}
1
+ {"version":3,"file":"oneteme-inspect-ng-collector.mjs","sources":["../../../../projects/oneteme/inspect-ng-collector/src/lib/trace.model.ts","../../../../projects/oneteme/inspect-ng-collector/src/lib/event-bus.ts","../../../../projects/oneteme/inspect-ng-collector/src/lib/configuration.ts","../../../../projects/oneteme/inspect-ng-collector/src/lib/session-manager.service.ts","../../../../projects/oneteme/inspect-ng-collector/src/lib/rest-request.monitor.ts","../../../../projects/oneteme/inspect-ng-collector/src/lib/http-interceptor.service.ts","../../../../projects/oneteme/inspect-ng-collector/src/lib/global-error-handler.service.ts","../../../../projects/oneteme/inspect-ng-collector/src/lib/event-trace-scheduled-dispatcher.service.ts","../../../../projects/oneteme/inspect-ng-collector/src/lib/user-action.monitor.ts","../../../../projects/oneteme/inspect-ng-collector/src/lib/navigation.monitor.ts","../../../../projects/oneteme/inspect-ng-collector/src/lib/resource-usage.monitor.ts","../../../../projects/oneteme/inspect-ng-collector/src/lib/ng-collector.module.ts","../../../../projects/oneteme/inspect-ng-collector/src/lib/local-request.monitor.ts","../../../../projects/oneteme/inspect-ng-collector/src/lib/traceable-stage.decorator.ts","../../../../projects/oneteme/inspect-ng-collector/src/public-api.ts","../../../../projects/oneteme/inspect-ng-collector/src/oneteme-inspect-ng-collector.ts"],"sourcesContent":["type InstantType = \"SERVER\" | \"CLIENT\";\ntype MainSessionType = \"VIEW\" | \"BATCH\" | \"STARTUP\";\n\nexport type LogLevel = \"INFO\" | \"WARN\" | \"ERROR\" | \"REPORT\";\nexport type UUID = `${string}-${string}-${string}-${string}-${string}`;\n\nexport enum RequestMask { LOCAL = 1, REST = 4 }\n\nexport const TRACE_TYPE_LOG = '00';\nexport const TRACE_TYPE_RESOURCE_USAGE = '01';\nexport const TRACE_TYPE_COLLECTOR_CONFIGURATION = '02';\nexport const TRACE_TYPE_SESSION_MASK_UPDATE = '03';\nexport const TRACE_TYPE_MAIN_SESSION = '10';\nexport const TRACE_TYPE_MAIN_SESSION_CALLBACK = '11';\nexport const TRACE_TYPE_LOCAL_REQUEST = '110';\nexport const TRACE_TYPE_LOCAL_REQUEST_CALLBACK = '111';\nexport const TRACE_TYPE_REST_REQUEST = '120';\nexport const TRACE_TYPE_REST_REQUEST_CALLBACK = '121';\nexport const TRACE_TYPE_HTTP_REQUEST_STAGE = '220';\nexport const TRACE_TYPE_USER_ACTION = '300';\n\n\nexport function dateNow() {\n return Date.now() / 1_000;\n}\n\nexport interface InstanceEnvironment {\n id: string;\n name?: string;\n address?: string;\n version?: string;\n env?: string;\n os?: string;\n re?: string;\n user?: string;\n type?: InstantType;\n instant?: number;\n collector?: string;\n resource: MachineResource;\n additionalProperties?: { [key: string]: any };\n configuration?: { [key: string]: any };\n}\n\nexport interface EventTrace { }\n\nexport interface MainSession extends EventTrace {\n '@type': typeof TRACE_TYPE_MAIN_SESSION;\n id: UUID;\n type: MainSessionType;\n name?: string;\n location: string;\n user?: string;\n start: number;\n requestMask: number;\n}\n\nexport interface MainSessionCallBack extends EventTrace {\n '@type': typeof TRACE_TYPE_MAIN_SESSION_CALLBACK;\n id: UUID;\n end?: number;\n requestMask: number;\n exception?: ExceptionInfo; // make a list ?\n}\n\nexport interface SessionMaskUpdate {\n '@type': typeof TRACE_TYPE_SESSION_MASK_UPDATE;\n id: UUID;\n main: boolean;\n mask: number;\n}\n\nexport interface RestRequest extends EventTrace {\n '@type': typeof TRACE_TYPE_REST_REQUEST;\n id: UUID;\n method: string;\n protocol: string;\n host: string;\n port: number;\n path: string;\n query: string;\n contentType?: string;\n authScheme?: string;\n dataSize: number;\n user?: string;\n start: number;\n sessionId?: UUID;\n}\n\nexport interface RestRequestCallBack extends EventTrace {\n '@type': typeof TRACE_TYPE_REST_REQUEST_CALLBACK;\n id: UUID;\n status?: number;\n end?: number;\n dataSize?: number;\n linked?: boolean;\n contentType?: string;\n bodyContent?: string;\n}\n\nexport interface HttpRequestStage extends EventTrace {\n '@type': typeof TRACE_TYPE_HTTP_REQUEST_STAGE;\n name: string;\n start: number;\n end?: number;\n exception?: ExceptionInfo;\n requestId: string;\n}\n\nexport interface LocalRequest extends EventTrace {\n '@type': typeof TRACE_TYPE_LOCAL_REQUEST;\n id: UUID;\n name: string;\n location: string;\n user?: string;\n start: number;\n sessionId: UUID;\n}\n\nexport interface LocalRequestCallBack extends EventTrace {\n '@type': typeof TRACE_TYPE_LOCAL_REQUEST_CALLBACK;\n id: UUID;\n end: number;\n exception?: ExceptionInfo;\n}\n\nexport interface ExceptionInfo {\n type?: string;\n message?: string;\n}\n\nexport interface UserAction extends EventTrace {\n '@type': typeof TRACE_TYPE_USER_ACTION;\n type: string;\n instant: number;\n name: string | null;\n nodeName: string;\n sessionId: string;\n}\n\nexport interface LogEntry extends EventTrace {\n '@type': typeof TRACE_TYPE_LOG;\n instant: number;\n level: LogLevel;\n message: string;\n sessionId?: UUID;\n}\n\nexport interface MachineResource extends EventTrace {\n maxHeap?: number;\n}\n\nexport interface MachineRessourceUsage extends EventTrace {\n '@type': typeof TRACE_TYPE_RESOURCE_USAGE;\n instant: number;\n commitedHeap: number;\n usedHeap: number;\n}\n","import { dateNow, EventTrace, LogLevel, LogEntry, TRACE_TYPE_LOG } from \"./trace.model\";\n\nconst eventTarget = new EventTarget();\nconst TRACE = 'trace', EXPORT = 'export', SHUTDOWN = 'shutdown', RELOAD = 'reload';\n\nexport const WIN: any = window;\n\nexport function dispatchReport(message: string, error?: any) : void {\n dispatchLog(\"REPORT\", `${message} ${error && JSON.stringify(error)}`)\n}\n\nexport function dispatchLog(level: LogLevel, message: string, sessionId?: string) {\n dispatchTraces({\n \"@type\": TRACE_TYPE_LOG,\n level: level,\n message: message,\n instant: dateNow(),\n sessionId: sessionId\n } as LogEntry);\n}\n\nexport function dispatchTraces(...traces: EventTrace[]): void {\n eventTarget.dispatchEvent(new CustomEvent(TRACE, { detail: { traces } }));\n}\n\nexport function dispatchExport(): void {\n eventTarget.dispatchEvent(new CustomEvent(EXPORT));\n}\n\nexport function dispatchReload(): void {\n eventTarget.dispatchEvent(new CustomEvent(RELOAD));\n}\n\nexport function dispatchShutown(): void {\n eventTarget.dispatchEvent(new CustomEvent(SHUTDOWN));\n}\n\nexport function addTraceListener(fn : EventListener): void {\n eventTarget.addEventListener(TRACE, fn);\n}\n\nexport function addExportListener(fn : EventListener): void {\n eventTarget.addEventListener(EXPORT, fn);\n}\n\nexport function addReloadListener(fn : EventListener): void {\n eventTarget.addEventListener(RELOAD, fn);\n}\n\nexport function addShutdownListener(fn : EventListener): void {\n eventTarget.addEventListener(SHUTDOWN, fn);\n}\n","import {dateNow, InstanceEnvironment, TRACE_TYPE_COLLECTOR_CONFIGURATION} from \"./trace.model\";\nimport {dispatchReport} from \"./event-bus\";\n\ntype Provider<T> = T | (() => T);\n\nconst HOST_PATERN = /https?:\\/\\/[\\w\\-.]+(:\\d{2,5})?\\/?/;\n\nexport interface CollectorConfig {\n enabled?: boolean; // default: false\n debugMode?: boolean;\n name: Provider<string>;\n version?: Provider<string>;\n env?: Provider<string>;\n user?: Provider<string>;\n additionalProperties?: ()=> {[key:string]: any};\n scheduling?: {\n interval?: number; // default: '60s'\n };\n monitoring?: {\n httpRoute?: {\n excludes?: {\n path?: Provider<RegExp[]>; // replace this with string[]\n };\n };\n httpRequest?: {\n excludes?: {\n host?: string[];\n };\n };\n resources?: {\n enabled?: boolean; // default: false\n };\n analytics?: {\n enabled?: boolean; // default: false\n };\n storage?: {\n enabled: boolean // default: false\n }\n };\n tracing?: {\n queueCapacity?: number; // default: 1000\n remote?: {\n '@type'?: string;\n mode?: string; // default: null\n host?: string; // default: 'localhost'\n retentionMaxAge?: number; // default: '30'\n };\n };\n\n}\n\nexport interface TechnicalConf {\n user?: Provider<string>;\n queueCapacity: number;\n interval: number;\n instanceApi: string;\n sessionApi: string;\n exclude?: RegExp[];\n hostExcludes?: string[];\n debugMode: boolean;\n analytics: boolean;\n resources: boolean;\n storage: boolean;\n enabled: boolean;\n}\n\nexport function getOrCall<T>(o?: Provider<T>): T | undefined {\n return typeof o === \"function\" ? (o as () => T)() : o;\n}\n\nexport function matchRegex(v: string | undefined, name: string, pattern: RegExp, defaultValue?: string) {\n if(v && pattern.exec(v)){\n return v;\n }\n if(!defaultValue){\n if(v != undefined){\n throw new Error(`bad value ${name}=${v}, pattern=${pattern}`);\n }else {\n throw new Error(`${name} property is required`);\n }\n }\n return defaultValue;\n}\n\nexport function requirePostitiveValue(v: number | undefined, name: string, defaultValue:number){\n if(v && v > 0) {\n return v;\n }\n if(v == undefined){\n return defaultValue;\n }\n throw new Error(`bad value ${name}=${v} <= 0`);\n}\n\nexport function require(v: string | undefined, name: string){\n if(v != undefined){\n return v;\n }\n throw new Error(`${name} property is required`);\n}\n\nexport function adaptedConfig(conf: CollectorConfig) {\n return {\n ...conf,\n scheduling: {\n ...conf.scheduling,\n interval: conf.scheduling?.interval && conf.scheduling.interval / 1000\n },\n monitoring: {\n ...conf.monitoring,\n additionalProperties: String(conf.additionalProperties),\n name: String(conf.name),\n version: String(conf.version),\n env: String(conf.env),\n user: String(conf.user),\n httpRoute: {\n ...conf.monitoring?.httpRoute,\n excludes: {\n path: (conf?.monitoring?.httpRoute?.excludes?.path as RegExp[]).map(r => r.source)\n }\n }\n },\n tracing: {\n ...conf.tracing,\n remote: {\n ...conf.tracing?.remote,\n '@type': TRACE_TYPE_COLLECTOR_CONFIGURATION,\n retentionMaxAge : (conf.tracing?.remote?.retentionMaxAge ?? 10) * 60 * 60 * 24\n }\n }\n }\n}\n\nexport function validateAndGetConfig(conf: CollectorConfig, instanceId: string) : TechnicalConf {\n const host = matchRegex(getOrCall<string>(conf?.tracing?.remote?.host), \"host\", HOST_PATERN);\n return {\n user: conf?.user,\n queueCapacity: requirePostitiveValue(getOrCall<number>(conf?.tracing?.queueCapacity), \"queueCapacity\", 1000),\n interval: requirePostitiveValue(getOrCall<number>(conf?.scheduling?.interval), \"interval\", 60000),\n instanceApi: new URL('v4/trace/instance', host).href,\n sessionApi : new URL(`v4/trace/instance/${instanceId}/session`, host).href,\n exclude: getOrCall<RegExp[]>(conf?.monitoring?.httpRoute?.excludes?.path) || [],\n hostExcludes: conf?.monitoring?.httpRequest?.excludes?.host || [],\n debugMode: !!conf.debugMode,\n analytics: !!conf?.monitoring?.analytics?.enabled,\n resources: !!conf?.monitoring?.resources?.enabled,\n storage: !!conf?.monitoring?.storage?.enabled,\n enabled: !!conf.enabled\n }\n}\n\nexport function createInstance(conf: CollectorConfig, instanceId: string): InstanceEnvironment {\n return {\n id: instanceId,\n instant: dateNow(),\n name: require(getOrCall<string>(conf?.name), 'configuration.name'),\n version: getOrCall<string>(conf?.version),\n address: getClientID(), //server side\n env: require(getOrCall<string>(conf?.env), 'env'),\n os: detectOs(),\n re: detectBrowser(),\n user: undefined, // cannot get user\n type: \"CLIENT\",\n collector: \"inspect-ng-collector-1.3.3\",\n resource: { maxHeap: (('memory' in performance) && (performance as any).memory.jsHeapSizeLimit / (1024 * 1024)) || undefined },\n additionalProperties: conf?.additionalProperties?.(),\n configuration: adaptedConfig(conf)\n }\n}\n\nfunction getClientID() {\n let cid = localStorage.getItem(\"jarvis.inspect.cid\");\n if (!cid) {\n localStorage.setItem(\"jarvis.inspect.cid\", cid = crypto.randomUUID());\n }\n return cid;\n}\n\nfunction detectOs() {\n try {\n let versionMatch, version;\n const agent = globalThis.navigator.userAgent.toLowerCase() //TODO see also https://developer.mozilla.org/en-US/docs/Web/API/Navigator/userAgentData\n switch (true) {\n case (/windows/.test(agent)):\n versionMatch = /windows nt (\\d+\\.\\d+)/.exec(agent);\n version = versionMatch ? versionMatch[1] : '?';\n return `Windows ${version}`;\n case (/linux/.test(agent)):\n return 'Linux';\n\n case (/macintosh/.test(agent)):\n versionMatch = /mac os x (\\d+[._]\\d+[._]\\d+)/.exec(agent);\n version = versionMatch ? versionMatch[1] : '?';\n return `MacOs ${version}`\n }\n }\n catch (e) {\n dispatchReport(\"detectOs\", e) ;\n }\n return undefined;\n}\n\nfunction detectBrowser() {\n try {\n const agent = globalThis.navigator.userAgent.toLowerCase()\n switch (true) {\n case agent.includes('edg'):\n return 'Edge';\n case agent.includes('opr'):\n return 'Opera';\n case agent.includes('chrome'):\n return 'Chrome';\n case agent.includes('firefox'):\n return 'Firefox';\n case agent.includes('safari'):\n return 'Safari';\n case agent.includes('msie'):\n return 'IE';\n }\n }\n catch (e) {\n dispatchReport(\"detectBrowser\", e)\n }\n return undefined;\n}\n\nexport function refreshConfig(id: string, tech: TechnicalConf) {\n const uuidRegex = /[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}/i;\n tech.sessionApi = tech.sessionApi.replace(uuidRegex, id);\n return id;\n}\n","import { dispatchTraces, dispatchReport, WIN, dispatchLog } from './event-bus';\nimport {\n dateNow,\n LogLevel,\n MainSession,\n MainSessionCallBack,\n RequestMask,\n SessionMaskUpdate,\n TRACE_TYPE_MAIN_SESSION,\n TRACE_TYPE_MAIN_SESSION_CALLBACK,\n TRACE_TYPE_SESSION_MASK_UPDATE\n} from \"./trace.model\";\nimport {getOrCall, TechnicalConf} from \"./configuration\";\n\nexport class SessionManager {\n\n static _instance: SessionManager;\n constructor(private readonly _techConfig: TechnicalConf) {\n }\n\n currentSession?: MainSession;\n currentSessionCallBack?: MainSessionCallBack;\n\n static get instance(): SessionManager {\n return SessionManager._instance;\n }\n\n navigate(url?: string) {\n const now = dateNow();\n if(this.currentSessionCallBack){\n this.endSession(now);\n }\n if (url) {\n const id = crypto.randomUUID();\n this.currentSession = {\n '@type': TRACE_TYPE_MAIN_SESSION,\n id: id,\n type: \"VIEW\",\n user: getOrCall<string>(this._techConfig.user),\n start: now,\n location: url,\n requestMask: 0,\n };\n this.currentSessionCallBack = {\n '@type': TRACE_TYPE_MAIN_SESSION_CALLBACK,\n id: id,\n requestMask: 0,\n }\n }\n }\n\n private endSession(end : number){\n this.getCurrentSessionCallBack(call =>{\n call.end = end;\n dispatchTraces(call);\n });\n this.currentSessionCallBack = undefined;\n }\n\n updateSession(update: boolean = true) {\n if (this.currentSession) {\n if(update){\n this.currentSession.name = document.title; // add settimeout\n this.currentSession.location = document.URL;\n }\n if (!this._techConfig.exclude?.some((e: any) => e.test(this.currentSession?.location))) {\n dispatchTraces(this.currentSession)\n }\n this.currentSession = undefined;\n }\n else{\n dispatchReport('updateSession', 'no active session');\n }\n }\n\n getCurrentSessionCallBack(fn: (s: MainSessionCallBack) => any) {\n if (this.currentSessionCallBack) {\n return fn(this.currentSessionCallBack);\n }\n dispatchReport('getCurrentSessionCallBack', 'no active session');\n return undefined;\n }\n\n currentSessionID(): string | undefined {\n return this.getCurrentSessionCallBack(s=> s.id);\n }\n\n initRestRequest(mask: RequestMask){\n const req = this.getCurrentSessionCallBack(s=>{\n if ((s.requestMask & mask) !== mask) {\n s.requestMask |= mask;\n dispatchTraces({\n \"@type\": TRACE_TYPE_SESSION_MASK_UPDATE,\n id: s.id,\n main: true,\n mask: s.requestMask\n } as SessionMaskUpdate);\n }\n return {sessionId:s.id};\n });\n return req || {};\n }\n\n initUserAction(){\n const req = this.getCurrentSessionCallBack(s=> ({sessionId:s.id}));\n return req || {};\n }\n\n addException(exception: any) {\n this.getCurrentSessionCallBack(s => s.exception = exception)\n }\n\n info(message: string) {\n this.log(\"INFO\", message);\n }\n\n warn(message: string) {\n this.log(\"WARN\", message);\n }\n\n error(message: string) {\n this.log(\"ERROR\", message);\n }\n\n private log(level: LogLevel, message: string){\n if (message) {\n this.getCurrentSessionCallBack(s=> dispatchLog(level, message, s.id));\n }\n }\n}\n\nexport function sessionlogger(): SessionManager {\n return SessionManager.instance;\n}\n\nexport function sessionManager(tech: TechnicalConf){\n SessionManager._instance = new SessionManager(tech);\n WIN[\"inspect-session-manager\"] = SessionManager._instance;\n}\n","import {\n dateNow,\n ExceptionInfo,\n HttpRequestStage,\n RestRequest,\n RestRequestCallBack,\n RequestMask,\n TRACE_TYPE_HTTP_REQUEST_STAGE,\n TRACE_TYPE_REST_REQUEST,\n TRACE_TYPE_REST_REQUEST_CALLBACK,\n UUID\n} from \"./trace.model\";\nimport { dispatchTraces, dispatchReport } from \"./event-bus\";\nimport { HttpErrorResponse, HttpHeaders, HttpRequest, HttpResponse, HttpResponseBase } from \"@angular/common/http\";\nimport { SessionManager } from \"./session-manager.service\";\n\nexport const TRACE_HEADER = 'x-tracert';\n\nexport class RestRequestMonitor {\n\n readonly id: UUID;\n readonly start: number;\n\n constructor() {\n this.start = dateNow();\n this.id = crypto.randomUUID();\n }\n\n preProcess(restRequest: HttpRequest<any>) {\n const url = new URL(restRequest.urlWithParams, globalThis.location.origin);\n const auth_user = extractAuthSchemeAnduser(restRequest.headers);\n dispatchTraces({...SessionManager.instance.initRestRequest(RequestMask.REST),\n \"@type\": TRACE_TYPE_REST_REQUEST,\n id: this.id,\n method: restRequest.method,\n protocol: url.protocol.slice(0, -1),\n host: url.hostname,\n port: url.port? Number(url.port) : 0,\n path: url.pathname,\n query: url.search.slice(1, url.search.length),\n contentType: restRequest.responseType,\n authScheme: auth_user.authScheme,\n user: auth_user.user,\n dataSize: sizeOf(restRequest.body),\n start: this.start,\n } as RestRequest);\n }\n\n postProcess(response: HttpResponseBase | null, error: HttpErrorResponse | null) {\n const end = dateNow();\n const callback: RestRequestCallBack = {\n \"@type\": TRACE_TYPE_REST_REQUEST_CALLBACK,\n id: this.id,\n dataSize: -1,\n linked: false,\n end: end\n }\n let status: number = 0, exception!: ExceptionInfo;\n\n // HttpResponseBase couvre à la fois HttpResponse (succès) et HttpErrorResponse (erreur HTTP)\n if (response) {\n status = response.status;\n callback.dataSize = response instanceof HttpResponse ? sizeOf(response.body) : -1;\n callback.contentType = extractContentType(response.headers);\n callback.linked = assertSessionID(this.id, response.headers);\n }\n\n // Erreur réseau/annulation\n if (error) {\n status = error.status || 0;\n exception = {\n type: error.name,\n message: error.error && error.status ? JSON.stringify(error.error) : error.message\n }\n callback.bodyContent = JSON.stringify(error.error);\n callback.dataSize = sizeOf(error.error);\n callback.contentType = extractContentType(error.headers);\n callback.linked = assertSessionID(this.id, error.headers);\n }\n\n callback.status = status;\n dispatchTraces(callback, {\n \"@type\": TRACE_TYPE_HTTP_REQUEST_STAGE,\n name: \"PROCESS\",\n start: this.start, // use request\n end: end,\n order: 0,\n exception: exception,\n requestId: this.id\n } as HttpRequestStage);\n }\n}\n\nfunction assertSessionID(id: string, headers: HttpHeaders) { //browser cache !?\n return headers?.get(TRACE_HEADER) == id;\n}\n\nfunction extractAuthSchemeAnduser(headers: any): { user: string | null, authScheme: string | null } {\n const authHeader = headers?.get('authorization');\n if (!authHeader) {\n return { authScheme: null, user: null };\n }\n\n const [scheme, credentials] = authHeader.split(' ');\n\n if (!scheme || !credentials || !['Basic', 'Bearer'].includes(scheme)) {\n return { authScheme: null, user: null };\n }\n\n return {\n authScheme: scheme,\n user: extractUser(scheme as 'Basic' | 'Bearer', credentials) ?? null\n };\n}\n\nfunction extractUser(scheme: 'Basic' | 'Bearer', authorization: string) {\n try {\n switch (scheme) {\n case \"Basic\":\n return atob(authorization).split(':')[0] || undefined;\n case \"Bearer\": {\n const payloadMatch = authorization.match(/^[^.]+\\.([^.]+)\\.[^.]+$/);\n if (payloadMatch?.[1]) {\n return JSON.parse(atob(payloadMatch[1])).sub;\n }\n dispatchReport('extractUser', 'Invalid Bearer token format');\n return undefined;\n }\n default:\n dispatchReport('extractUser', `Unknown auth scheme: ${scheme}`);\n }\n } catch (e) {\n dispatchReport('extractUser', e);\n }\n return undefined;\n}\n\nfunction extractContentType(headers: any): string | undefined {\n try {\n if (headers?.has('Content-Type')) {\n return headers.get('Content-Type');\n }\n } catch (err) {\n dispatchReport('extractContentType', err);\n }\n return undefined;\n}\n\nfunction sizeOf(body: any): number {\n if (body) {\n try {\n return new Blob([JSON.stringify(body)]).size;\n }\n catch (e) {\n dispatchReport('sizeOf', e);\n }\n }\n return -1;\n}\n","import { Injectable, Inject, InjectionToken, Optional } from '@angular/core';\nimport { HttpInterceptor, HttpEvent, HttpHandler, HttpRequest, HttpResponse, HttpErrorResponse, HttpResponseBase } from '@angular/common/http';\nimport { finalize, Observable } from 'rxjs';\nimport { tap } from 'rxjs/operators'\nimport { RestRequestMonitor, TRACE_HEADER } from \"./rest-request.monitor\";\nimport { TechnicalConf} from \"./configuration\";\nimport { InstanceEnvironment } from \"./trace.model\";\n\nexport const COLLECTOR_CONFIG = new InjectionToken<TechnicalConf>('COLLECTOR_CONFIG');\n\n@Injectable({ providedIn: 'root' })\nexport class HttpInterceptorService implements HttpInterceptor {\n\n constructor(@Inject(COLLECTOR_CONFIG) private readonly techConfig: {tech: TechnicalConf, instance: InstanceEnvironment}) {}\n\n intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\n const monitor = new RestRequestMonitor();\n monitor.preProcess(req);\n\n const host = new URL(req.url, window.location.origin).host;\n if (!this.techConfig.tech.hostExcludes?.some((e: any) => e == host)) { // exclude les hôtes qui ne permet pas la modification des headers\n req = req.clone({ headers: req.headers.set(TRACE_HEADER, monitor.id) });\n }\n\n let response: HttpResponseBase | null = null;\n let error: HttpErrorResponse | null = null;\n\n return next.handle(req).pipe(tap({\n next: (event: HttpEvent<any>) => {\n if (event instanceof HttpResponse) {\n response = event;\n }\n //todo autres types d'événements (UploadProgress, DownloadProgress, etc.) ignorés pour les traces\n },\n error: (err: HttpErrorResponse) => {\n error = err;\n }\n }),\n finalize(() => {\n // Si pas de réponse et pas d'erreur capturé, la requête a été annulée\n if (!response && !error) {\n error = new HttpErrorResponse({\n error: 'The request was cancelled before completion',\n status: 0,\n statusText: 'Cancelled',\n url: req.url\n });\n }\n monitor.postProcess(response, error);\n }));\n }\n}\n","import { ErrorHandler, Injectable } from \"@angular/core\";\nimport { SessionManager } from \"./session-manager.service\";\nimport { dispatchReport } from \"./event-bus\";\n\n@Injectable({ providedIn: 'root' })\nexport class GlobalErrorHandler implements ErrorHandler {\n\n handleError(error: any) {\n try {\n SessionManager.instance.addException({\n type: error?.name,\n message: error?.message\n })\n } catch (e) {\n dispatchReport(\"GlobalErrorHandlerService.handleError\", e);\n }\n throw error;\n }\n}\n","import { interval, startWith, tap, Subscription } from \"rxjs\";\nimport {EventTrace, InstanceEnvironment} from \"./trace.model\";\nimport { dispatchExport, addTraceListener, addShutdownListener, dispatchReport } from \"./event-bus\";\nimport {TechnicalConf} from \"./configuration\";\n\nconst EMPTY_ARRAY : EventTrace[] = <[]>Object.freeze([]);\n\nclass EventTraceScheduledDispatcherService {\n\n static _instance: EventTraceScheduledDispatcherService;\n\n readonly subscription: Subscription\n readonly traceQueue: EventTrace[] = [];\n\n dispatchAttempts: number = 0\n dispatching: boolean = false;\n instanceDispatched: boolean = false;\n wasDestroyed : boolean = false;\n\n instance?: InstanceEnvironment ;\n constructor(private readonly _techConfig: TechnicalConf) {\n this.subscription = interval(_techConfig.interval)\n .pipe(startWith(0))\n .pipe(tap(() => {\n if (!this.dispatching && !this.wasDestroyed && this.instance) {\n this.dispatching = true;\n dispatchExport();\n this.dispatch()\n .then(arr => this.revertQueueSize(arr))\n .catch(err => dispatchReport('EventTraceScheduledDispatcher.dispatch', err))\n .finally(() => { this.dispatching = false })\n }\n }))\n .subscribe();\n addTraceListener(e => this.appendTrace((e as CustomEvent).detail.traces));\n addShutdownListener(e => this.destroy());\n }\n\n appendTrace(events: EventTrace[]) {\n if(!this.wasDestroyed){\n events?.forEach(event => this.traceQueue.push(event));\n }\n }\n\n trace(instance: InstanceEnvironment) {\n this.instance = instance;\n }\n\n dispatch(): Promise<any> {\n if (this.instanceDispatched) {\n return this.dispatchTraces();\n }\n return this.dispatchInstance().then(ok => {\n if (ok) {\n this.instanceDispatched = true;\n return this.dispatchTraces();\n }\n console.warn(`Error while attempting to send Environement instance, attempts ${this.dispatchAttempts}`);\n return Promise.reject(new Error('No instance id'));\n });\n }\n\n dispatchTraces(destroy?: boolean): Promise<EventTrace[]> {\n if (this.traceQueue.length === 0) {\n return Promise.resolve(EMPTY_ARRAY);\n }\n let uri = this._techConfig.sessionApi + \"?attempts=\" + ++this.dispatchAttempts;\n if (destroy) {\n uri += \"&end=\" + new Date().toISOString();\n }\n const traces = [...this.traceQueue];\n this.traceQueue.length = 0;\n return fetch(uri, {\n method: 'PUT',\n headers: { 'Content-Type': 'application/json' },\n mode: 'cors',\n keepalive: true,\n body: JSON.stringify(traces)\n })\n .then(res=> {\n if (res.ok) {\n this.dispatchAttempts = 0;\n return EMPTY_ARRAY;\n }\n console.warn(`Error while attempting to send sessions, attempts: ${this.dispatchAttempts}`);\n if (res.status >= 400 && res.status < 500) {\n return traces; //retry on bad request !?\n }\n return res.json()\n .then(body => body?.retry ? traces : EMPTY_ARRAY)\n .catch(() => EMPTY_ARRAY);\n })\n .catch(() => {\n console.warn(`Error while attempting to send sessions, attempts: ${this.dispatchAttempts}`); //no cnx !\n return traces;\n });\n }\n\n dispatchInstance(): Promise<boolean> {\n this.dispatchAttempts++;\n return fetch(this._techConfig.instanceApi, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n mode: 'cors',\n keepalive: true,\n body: JSON.stringify(this.instance)\n })\n .then(res => res.ok ? res.text().then(id => {\n this.dispatchAttempts = 0;\n return true;\n }) : false)\n .catch(err => false);\n }\n\n revertQueueSize(traces: EventTrace[]) {\n if(!this.wasDestroyed){\n this.traceQueue.unshift(...traces);\n if (this.traceQueue.length > this._techConfig.queueCapacity) {\n this.traceQueue.splice(this._techConfig.queueCapacity);\n }\n }\n }\n\n destroy() {\n this.subscription?.unsubscribe();\n this.wasDestroyed = true;\n dispatchExport(); //last metric ??\n this.dispatchTraces(true);\n }\n}\n\nexport function eventTraceScheduledDispatcher(tech: TechnicalConf): EventTraceScheduledDispatcherService {\n return EventTraceScheduledDispatcherService._instance = new EventTraceScheduledDispatcherService(tech);\n}\n","import { dateNow, UserAction, TRACE_TYPE_USER_ACTION } from \"./trace.model\";\nimport { SessionManager } from \"./session-manager.service\";\nimport { dispatchReport, dispatchTraces } from \"./event-bus\";\n\nconst eventHandlers: { [key: string]: (target: HTMLElement) => boolean } = {\n 'click': (target: HTMLElement) => lookUpChild(target, 1),\n}\nexport function initUserActionMonitor() {\n try {\n const body = window.document.body;\n body.addEventListener('click', globalHandler, true);\n body.addEventListener('change', globalHandler, true);\n body.addEventListener('scrollend', globalHandler, true);\n body.addEventListener('dragend', globalHandler, true);\n window.document.addEventListener('DOMContentLoaded', globalHandler, true);\n }\n catch (e) {\n dispatchReport(\"initUserActionMonitor\", e);\n }\n}\n\nfunction globalHandler(event: Event | MouseEvent) {\n const target = event.target as HTMLElement;\n const eventType = event.type;\n try {\n if (eventHandlers.hasOwnProperty(eventType) && !eventHandlers[eventType](target)) {\n return;\n }\n addActionUser(eventType, target);\n } catch (err) {\n dispatchReport(\"UserACTION.globalHandler\", err)\n }\n}\n\nfunction lookUpChild(t: HTMLElement, depth: number): boolean {\n if (t.hasChildNodes() && t.children.length <= 5) {\n if (++depth > 5) {\n return false;\n }\n return Array.from(t.childNodes).reduce((acc, c) =>\n acc && lookUpChild(c as HTMLElement, depth), true);\n }\n return true;\n}\n\nfunction addActionUser(eventType: string, target: HTMLElement) {\n dispatchTraces({\n ...SessionManager.instance.initUserAction(),\n '@type': TRACE_TYPE_USER_ACTION,\n type: eventType,\n instant: dateNow(),\n name: extractName(target),\n nodeName: target.tagName?.toLowerCase()\n } as UserAction);\n}\n\nfunction getFirst(c: ((t: HTMLElement) => string | null)[], t: HTMLElement) {\n for (const o of c) {\n let r = o(t)?.trim();\n if (r) {\n return r;\n }\n }\n return null;\n}\n\nfunction extractName(t: HTMLElement) {\n try {\n let tagName = t.tagName\n if (tagName) {\n let name;\n let c = MAP[tagName.toLowerCase()];\n if (c) {\n name = getFirst(c, t);\n }\n return name ?? getFirst(genericMap, t)!;\n }\n\n } catch (err) {\n console.warn(err)\n }\n return null\n}\n\nconst genericMap: ((t: HTMLElement) => string | null)[] = [\n t => t.getAttribute('placeholder'),\n t => t.getAttribute('title'),\n t => t.innerText,\n t => t.getAttribute('name'),\n t => t.getAttribute('id'),\n]\n\nconst MAP: { [key: string]: ((t: HTMLElement) => string | null)[] } = {\n 'img': [\n t => t.getAttribute('alt'),\n t => t.getAttribute('src'),\n ],\n 'input': [\n t => t.getAttribute('name'),\n ],\n 'a': [\n t => t.getAttribute('href'),\n ],\n 'label': [\n t => t.getAttribute('for'),\n ],\n}\n\n","import { NavigationCancel, NavigationEnd, NavigationStart, Router } from \"@angular/router\";\nimport { SessionManager } from \"./session-manager.service\";\nimport { dispatchReload, dispatchReport, dispatchShutown } from \"./event-bus\";\n\nexport function initNavigationMonitor(router: Router){\n try{\n initStartupSession();\n router.events.subscribe(routeHandler);\n window.addEventListener('pageshow', bfCacheHandler);\n window.addEventListener(\"beforeunload\", windowUnloadHandler);\n }\n catch(e){\n dispatchReport('initNavigationMonitor', e)\n }\n}\n\nfunction routeHandler(event: any) {\n if (event instanceof NavigationStart) {\n SessionManager.instance.navigate(event.url);\n }\n if (event instanceof NavigationEnd || event instanceof NavigationCancel) {\n setTimeout(()=>SessionManager.instance.updateSession(),0)\n }\n}\n\nfunction windowUnloadHandler(event: any) {\n SessionManager.instance.navigate();\n dispatchShutown();\n}\n\nfunction initStartupSession() {\n SessionManager.instance.navigate(new URL(document.URL).host);\n SessionManager.instance.updateSession(false);\n}\n\nfunction bfCacheHandler(event: any) {\n if (event.persisted) { // if the page was restored from bfcache\n dispatchReload();\n SessionManager.instance.navigate(document.URL);\n setTimeout(() => SessionManager.instance.updateSession(), 0);\n }\n}\n","import { dateNow, MachineRessourceUsage, TRACE_TYPE_RESOURCE_USAGE } from \"./trace.model\";\nimport { dispatchTraces, dispatchReport, addExportListener } from \"./event-bus\";\n\nexport function initResourceUsageMonitor(){\n try{\n if ('memory' in performance) {\n addExportListener(ressourceUsageHandler);\n }\n }\n catch(e){\n dispatchReport('initResourceUsageMonitor', e)\n }\n}\n\nfunction ressourceUsageHandler() {\n try {\n const memory = (performance as any).memory;\n dispatchTraces({\n '@type': TRACE_TYPE_RESOURCE_USAGE,\n instant: dateNow(),\n usedHeap: memory.usedJSHeapSize / (1024 * 1024),\n commitedHeap: memory.totalJSHeapSize / (1024 * 1024),\n } as MachineRessourceUsage);\n } catch (e) {\n dispatchReport('ressourceUsageHandler', e);\n }\n}\n","import {\n NgModule,\n ModuleWithProviders,\n ErrorHandler,\n APP_INITIALIZER,\n InjectionToken\n} from '@angular/core';\nimport { HTTP_INTERCEPTORS, } from '@angular/common/http';\nimport { HttpInterceptorService } from './http-interceptor.service';\nimport { GlobalErrorHandler } from \"./global-error-handler.service\";\nimport {\n CollectorConfig,\n createInstance, refreshConfig,\n TechnicalConf,\n validateAndGetConfig\n} from \"./configuration\";\nimport {\n eventTraceScheduledDispatcher,\n} from \"./event-trace-scheduled-dispatcher.service\";\n\nimport { Router } from \"@angular/router\";\nimport { initUserActionMonitor } from \"./user-action.monitor\";\nimport { initNavigationMonitor } from './navigation.monitor';\nimport { initResourceUsageMonitor } from './resource-usage.monitor';\nimport { addReloadListener } from './event-bus';\nimport {sessionManager} from \"./session-manager.service\";\nimport {eventTraceDebugger} from \"./event-trace-debugger\";\nimport {InstanceEnvironment} from \"./trace.model\";\n\nconst COLLECTOR_CONFIG = new InjectionToken<CollectorConfig>('COLLECTOR_CONFIG');\n\n@NgModule()\nexport class NgCollectorModule {\n\n static forRoot(configuration: CollectorConfig): ModuleWithProviders<NgCollectorModule> {\n const providers = [];\n if (configuration?.enabled) {\n try {\n let config = initializeCollector(configuration);\n providers.push(\n { provide: COLLECTOR_CONFIG, useValue: config },\n { provide: APP_INITIALIZER, useFactory: initializeEventsFactory, deps: [COLLECTOR_CONFIG, Router], multi: true },\n { provide: HTTP_INTERCEPTORS, useClass: HttpInterceptorService, deps:[COLLECTOR_CONFIG], multi: true },\n { provide: ErrorHandler, useClass: GlobalErrorHandler }\n );\n } catch (e: any) {\n console.warn(`invalid Configuration, Ng-collector is disabled because of this ${e.message}`);\n }\n }\n return {ngModule: NgCollectorModule, providers : providers}\n }\n}\n\nexport function initializeEventsFactory(config: {tech: TechnicalConf, instance: InstanceEnvironment }, router: Router) {\n return () => {\n if (config.tech.analytics) {\n initUserActionMonitor();\n }\n if (config.tech.resources) {\n initResourceUsageMonitor();\n }\n initNavigationMonitor(router);\n //storageEventListener();\n //eventTraceDebugger\n addReloadListener(e=>{\n reloadCollector(config)\n });\n }\n}\n\nexport function initializeCollector(config: CollectorConfig) {\n const id = crypto.randomUUID();\n const tech = validateAndGetConfig(config, id);\n const dispatch = eventTraceScheduledDispatcher(tech);\n const instance = createInstance(config, id)\n dispatch.trace(instance);\n sessionManager(tech)\n return {tech: tech, instance: instance};\n}\n\nexport function reloadCollector(config: {tech: TechnicalConf, instance: InstanceEnvironment }) {\n const id = crypto.randomUUID();\n refreshConfig(id, config.tech);\n const dispatch = eventTraceScheduledDispatcher(config.tech);\n config.instance.id= id;\n dispatch.trace(config.instance);\n sessionManager(config.tech)\n}\n\n\n","import {\n dateNow,\n LocalRequest, LocalRequestCallBack,\n RequestMask,\n TRACE_TYPE_LOCAL_REQUEST,\n TRACE_TYPE_LOCAL_REQUEST_CALLBACK,\n UUID\n} from \"./trace.model\";\nimport {dispatchTraces, WIN} from \"./event-bus\";\n\nexport class LocalRequestMonitor {\n\n readonly id: UUID;\n readonly start: number;\n\n constructor() {\n this.start = dateNow();\n this.id = crypto.randomUUID();\n }\n\n preProcess(propertyKey: string, target: any){\n dispatchTraces({\n ...WIN[\"inspect-session-manager\"]?.initRestRequest(RequestMask.LOCAL),\n \"@type\": TRACE_TYPE_LOCAL_REQUEST,\n id: this.id,\n name: propertyKey,\n location: target.constructor.name,\n user: WIN[\"inspect-session-manager\"]?.currentSession?.user, //bad access\n start: this.start\n } as LocalRequest);\n }\n\n postProcess(exception?: any){\n dispatchTraces({\n \"@type\": TRACE_TYPE_LOCAL_REQUEST_CALLBACK,\n id: this.id,\n exception: exception,\n end: dateNow()\n } as LocalRequestCallBack);\n }\n}\n","import {LocalRequestMonitor} from \"./local-request.monitor\";\n\nexport function TraceableStage() {\n\n return function (\n target: any,\n propertyKey: string,\n descriptor: PropertyDescriptor\n ) {\n const originalMethod = descriptor.value;\n descriptor.value = function (...args: any[]) {\n const monitor = new LocalRequestMonitor();\n let exception;\n try {\n monitor.preProcess(propertyKey,target);\n return originalMethod.apply(this, args);\n } catch (e: any) {\n exception = resolveException(e);\n throw e;\n } finally {\n monitor.postProcess(exception)\n }\n }\n return descriptor;\n }\n}\nexport function resolveException(e: any): { type: string | null; message: string | null } {\n let type = null, message = null;\n if (e) {\n if (typeof e === \"string\") {\n message = e;\n } else if (e instanceof Error) {\n type = e.name;\n message = e.message;\n } else {\n message = JSON.stringify(e)\n }\n }\n return { type, message };\n}\n\n","/*\n * Public API Surface of inspect-ng-collector\n */\n\nexport * from './lib/ng-collector.module';\nexport * from './lib/traceable-stage.decorator';\nexport { sessionlogger } from './lib/session-manager.service';\n\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["require","COLLECTOR_CONFIG","tap"],"mappings":";;;;;;;AAMA,IAAY,WAAmC;AAA/C,CAAA,UAAY,WAAW,EAAA;AAAG,IAAA,WAAA,CAAA,WAAA,CAAA,OAAA,CAAA,GAAA,CAAA,CAAA,GAAA,OAAS;AAAE,IAAA,WAAA,CAAA,WAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAQ;AAAC,CAAC,EAAnC,WAAW,KAAX,WAAW,GAAA,EAAA,CAAA,CAAA;AAEhB,MAAM,cAAc,GAAG,IAAI;AAC3B,MAAM,yBAAyB,GAAG,IAAI;AACtC,MAAM,kCAAkC,GAAG,IAAI;AAC/C,MAAM,8BAA8B,GAAG,IAAI;AAC3C,MAAM,uBAAuB,GAAG,IAAI;AACpC,MAAM,gCAAgC,GAAG,IAAI;AAC7C,MAAM,wBAAwB,GAAG,KAAK;AACtC,MAAM,iCAAiC,GAAG,KAAK;AAC/C,MAAM,uBAAuB,GAAG,KAAK;AACrC,MAAM,gCAAgC,GAAG,KAAK;AAC9C,MAAM,6BAA6B,GAAG,KAAK;AAC3C,MAAM,sBAAsB,GAAG,KAAK;SAG3B,OAAO,GAAA;AACrB,IAAA,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK;AAC3B;;ACtBA,MAAM,WAAW,GAAG,IAAI,WAAW,EAAE;AACrC,MAAM,KAAK,GAAG,OAAO,EAAE,MAAM,GAAG,QAAQ,EAAE,QAAQ,GAAG,UAAU,EAAE,MAAM,GAAG,QAAQ;AAE3E,MAAM,GAAG,GAAQ,MAAM;AAExB,SAAU,cAAc,CAAC,OAAe,EAAE,KAAW,EAAA;AACzD,IAAA,WAAW,CAAC,QAAQ,EAAE,CAAA,EAAG,OAAO,IAAI,KAAK,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA,CAAE,CAAC;AACvE;SAEgB,WAAW,CAAC,KAAe,EAAE,OAAe,EAAE,SAAkB,EAAA;AAC9E,IAAA,cAAc,CAAC;AACb,QAAA,OAAO,EAAE,cAAc;AACvB,QAAA,KAAK,EAAE,KAAK;AACZ,QAAA,OAAO,EAAE,OAAO;QAChB,OAAO,EAAE,OAAO,EAAE;AAClB,QAAA,SAAS,EAAE;AACA,KAAA,CAAC;AAChB;AAEM,SAAU,cAAc,CAAC,GAAG,MAAoB,EAAA;AACpD,IAAA,WAAW,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;AAC3E;SAEgB,cAAc,GAAA;IAC5B,WAAW,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,MAAM,CAAC,CAAC;AACpD;SAEgB,cAAc,GAAA;IAC5B,WAAW,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,MAAM,CAAC,CAAC;AACpD;SAEgB,eAAe,GAAA;IAC7B,WAAW,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,QAAQ,CAAC,CAAC;AACtD;AAEM,SAAU,gBAAgB,CAAC,EAAkB,EAAA;AACjD,IAAA,WAAW,CAAC,gBAAgB,CAAC,KAAK,EAAE,EAAE,CAAC;AACzC;AAEM,SAAU,iBAAiB,CAAC,EAAkB,EAAA;AAClD,IAAA,WAAW,CAAC,gBAAgB,CAAC,MAAM,EAAE,EAAE,CAAC;AAC1C;AAEM,SAAU,iBAAiB,CAAC,EAAkB,EAAA;AAClD,IAAA,WAAW,CAAC,gBAAgB,CAAC,MAAM,EAAE,EAAE,CAAC;AAC1C;AAEM,SAAU,mBAAmB,CAAC,EAAkB,EAAA;AACpD,IAAA,WAAW,CAAC,gBAAgB,CAAC,QAAQ,EAAE,EAAE,CAAC;AAC5C;;AC9CA,MAAM,WAAW,GAAG,mCAAmC;AA6DjD,SAAU,SAAS,CAAI,CAAe,EAAA;AAC1C,IAAA,OAAO,OAAO,CAAC,KAAK,UAAU,GAAI,CAAa,EAAE,GAAG,CAAC;AACvD;AAEM,SAAU,UAAU,CAAC,CAAqB,EAAG,IAAY,EAAE,OAAe,EAAE,YAAqB,EAAA;IACrG,IAAG,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAC;AACrB,QAAA,OAAO,CAAC;IACX;IACA,IAAG,CAAC,YAAY,EAAC;AACf,QAAA,IAAG,CAAC,IAAI,SAAS,EAAC;YAChB,MAAM,IAAI,KAAK,CAAC,CAAA,UAAA,EAAa,IAAI,CAAA,CAAA,EAAI,CAAC,CAAA,UAAA,EAAa,OAAO,CAAA,CAAE,CAAC;QAC/D;aAAM;AACJ,YAAA,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,CAAA,qBAAA,CAAuB,CAAC;QACjD;IACF;AACA,IAAA,OAAO,YAAY;AACrB;SAEgB,qBAAqB,CAAC,CAAqB,EAAE,IAAY,EAAE,YAAmB,EAAA;AAC5F,IAAA,IAAG,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;AACb,QAAA,OAAO,CAAC;IACV;AACA,IAAA,IAAG,CAAC,IAAI,SAAS,EAAC;AAChB,QAAA,OAAO,YAAY;IACrB;IACA,MAAM,IAAI,KAAK,CAAC,CAAA,UAAA,EAAa,IAAI,CAAA,CAAA,EAAI,CAAC,CAAA,KAAA,CAAO,CAAC;AAChD;AAEM,SAAUA,SAAO,CAAC,CAAqB,EAAE,IAAY,EAAA;AACzD,IAAA,IAAG,CAAC,IAAI,SAAS,EAAC;AAChB,QAAA,OAAO,CAAC;IACV;AACA,IAAA,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,CAAA,qBAAA,CAAuB,CAAC;AACjD;AAEM,SAAU,aAAa,CAAC,IAAqB,EAAA;IACjD,OAAO;AACP,QAAA,GAAG,IAAI;AACL,QAAA,UAAU,EAAE;YACZ,GAAG,IAAI,CAAC,UAAU;AACd,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,EAAE,QAAQ,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,GAAG;AACrE,SAAA;AACD,QAAA,UAAU,EAAE;YACd,GAAG,IAAI,CAAC,UAAU;AACd,YAAA,oBAAoB,EAAE,MAAM,CAAC,IAAI,CAAC,oBAAoB,CAAC;AACvD,YAAA,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;AACvB,YAAA,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC;AAC7B,YAAA,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;AACrB,YAAA,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;AACvB,YAAA,SAAS,EAAE;AACb,gBAAA,GAAG,IAAI,CAAC,UAAU,EAAE,SAAS;AACzB,gBAAA,QAAQ,EAAE;oBACV,IAAI,EAAE,CAAC,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAiB,EAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM;AAClF;AACF;AACF,SAAA;AACC,QAAA,OAAO,EAAE;YACT,GAAG,IAAI,CAAC,OAAO;AACX,YAAA,MAAM,EAAE;AACV,gBAAA,GAAG,IAAI,CAAC,OAAO,EAAE,MAAM;AACnB,gBAAA,OAAO,EAAE,kCAAkC;AAC3C,gBAAA,eAAe,EAAG,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,eAAe,IAAI,EAAE,IAAK,EAAE,GAAG,EAAE,GAAG;AAChF;AACF;KACF;AACH;AAEM,SAAU,oBAAoB,CAAC,IAAqB,EAAE,UAAkB,EAAA;AAC5E,IAAA,MAAM,IAAI,GAAG,UAAU,CAAC,SAAS,CAAS,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC;IAC5F,OAAO;QACL,IAAI,EAAE,IAAI,EAAE,IAAI;AAChB,QAAA,aAAa,EAAE,qBAAqB,CAAC,SAAS,CAAS,IAAI,EAAE,OAAO,EAAE,aAAa,CAAC,EAAE,eAAe,EAAE,IAAI,CAAC;AAC5G,QAAA,QAAQ,EAAE,qBAAqB,CAAC,SAAS,CAAS,IAAI,EAAE,UAAU,EAAE,QAAQ,CAAC,EAAE,UAAU,EAAE,KAAK,CAAC;QACjG,WAAW,EAAE,IAAI,GAAG,CAAC,mBAAmB,EAAE,IAAI,CAAC,CAAC,IAAI;QACpD,UAAU,EAAG,IAAI,GAAG,CAAC,CAAA,kBAAA,EAAqB,UAAU,CAAA,QAAA,CAAU,EAAE,IAAI,CAAC,CAAC,IAAI;AAC1E,QAAA,OAAO,EAAE,SAAS,CAAW,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,CAAC,IAAI,EAAE;QAC/E,YAAY,EAAE,IAAI,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,IAAI,IAAI,EAAE;AACjE,QAAA,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,SAAS;QAC3B,SAAS,EAAE,CAAC,CAAC,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,OAAO;QACjD,SAAS,EAAE,CAAC,CAAC,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,OAAO;QACjD,OAAO,EAAE,CAAC,CAAC,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO;AAC7C,QAAA,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC;KACjB;AACH;AAEM,SAAU,cAAc,CAAC,IAAqB,EAAE,UAAkB,EAAA;IACtE,OAAO;AACL,QAAA,EAAE,EAAE,UAAU;QACd,OAAO,EAAE,OAAO,EAAE;QAClB,IAAI,EAAEA,SAAO,CAAC,SAAS,CAAS,IAAI,EAAE,IAAI,CAAC,EAAE,oBAAoB,CAAC;AAClE,QAAA,OAAO,EAAE,SAAS,CAAS,IAAI,EAAE,OAAO,CAAC;AACzC,QAAA,OAAO,EAAE,WAAW,EAAE;QACtB,GAAG,EAAEA,SAAO,CAAC,SAAS,CAAS,IAAI,EAAE,GAAG,CAAC,EAAE,KAAK,CAAC;QACjD,EAAE,EAAE,QAAQ,EAAE;QACd,EAAE,EAAE,aAAa,EAAE;QACnB,IAAI,EAAE,SAAS;AACf,QAAA,IAAI,EAAE,QAAQ;AACd,QAAA,SAAS,EAAE,4BAA4B;QACvC,QAAQ,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,QAAQ,IAAI,WAAW,KAAM,WAAmB,CAAC,MAAM,CAAC,eAAe,IAAI,IAAI,GAAG,IAAI,CAAC,KAAK,SAAS,EAAE;AAC9H,QAAA,oBAAoB,EAAE,IAAI,EAAE,oBAAoB,IAAI;AACpD,QAAA,aAAa,EAAE,aAAa,CAAC,IAAI;KAClC;AACH;AAEA,SAAS,WAAW,GAAA;IAClB,IAAI,GAAG,GAAG,YAAY,CAAC,OAAO,CAAC,oBAAoB,CAAC;IACpD,IAAI,CAAC,GAAG,EAAE;AACR,QAAA,YAAY,CAAC,OAAO,CAAC,oBAAoB,EAAE,GAAG,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC;IACvE;AACA,IAAA,OAAO,GAAG;AACZ;AAEA,SAAS,QAAQ,GAAA;AACf,IAAA,IAAI;QACF,IAAI,YAAY,EAAE,OAAO;AACzB,QAAA,MAAM,KAAK,GAAG,UAAU,CAAC,SAAS,CAAC,SAAS,CAAC,WAAW,EAAE,CAAA;QAC1D,QAAQ,IAAI;AACV,YAAA,MAAM,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC;AACzB,gBAAA,YAAY,GAAG,uBAAuB,CAAC,IAAI,CAAC,KAAK,CAAC;AAClD,gBAAA,OAAO,GAAG,YAAY,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,GAAG;gBAC9C,OAAO,CAAA,QAAA,EAAW,OAAO,CAAA,CAAE;AAC7B,YAAA,MAAM,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;AACvB,gBAAA,OAAO,OAAO;AAEhB,YAAA,MAAM,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC;AAC3B,gBAAA,YAAY,GAAG,8BAA8B,CAAC,IAAI,CAAC,KAAK,CAAC;AACzD,gBAAA,OAAO,GAAG,YAAY,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,GAAG;gBAC9C,OAAO,CAAA,MAAA,EAAS,OAAO,CAAA,CAAE;;IAE/B;IACA,OAAO,CAAC,EAAE;AACR,QAAA,cAAc,CAAC,UAAU,EAAE,CAAC,CAAC;IAC/B;AACA,IAAA,OAAO,SAAS;AAClB;AAEA,SAAS,aAAa,GAAA;AACpB,IAAA,IAAI;QACF,MAAM,KAAK,GAAG,UAAU,CAAC,SAAS,CAAC,SAAS,CAAC,WAAW,EAAE;QAC1D,QAAQ,IAAI;AACV,YAAA,KAAK,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC;AACxB,gBAAA,OAAO,MAAM;AACf,YAAA,KAAK,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC;AACxB,gBAAA,OAAO,OAAO;AAChB,YAAA,KAAK,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC;AAC3B,gBAAA,OAAO,QAAQ;AACjB,YAAA,KAAK,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC;AAC5B,gBAAA,OAAO,SAAS;AAClB,YAAA,KAAK,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC;AAC3B,gBAAA,OAAO,QAAQ;AACjB,YAAA,KAAK,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC;AACzB,gBAAA,OAAO,IAAI;;IAEjB;IACA,OAAO,CAAC,EAAE;AACR,QAAA,cAAc,CAAC,eAAe,EAAE,CAAC,CAAC;IACpC;AACA,IAAA,OAAO,SAAS;AAClB;AAEM,SAAU,aAAa,CAAC,EAAU,EAAE,IAAmB,EAAA;IAC3D,MAAM,SAAS,GAAG,+DAA+D;AACjF,IAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC;AACxD,IAAA,OAAO,EAAE;AACX;;MCxNa,cAAc,CAAA;AAGxB,IAAA,WAAA,CAA6B,WAA0B,EAAA;QAA1B,IAAA,CAAA,WAAW,GAAX,WAAW;IACxC;AAKD,IAAA,WAAW,QAAQ,GAAA;QACjB,OAAO,cAAc,CAAC,SAAS;IACjC;AAEA,IAAA,QAAQ,CAAC,GAAY,EAAA;AACnB,QAAA,MAAM,GAAG,GAAG,OAAO,EAAE;AACrB,QAAA,IAAG,IAAI,CAAC,sBAAsB,EAAC;AAC7B,YAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;QACtB;QACA,IAAI,GAAG,EAAE;AACP,YAAA,MAAM,EAAE,GAAG,MAAM,CAAC,UAAU,EAAE;YAC9B,IAAI,CAAC,cAAc,GAAG;AACpB,gBAAA,OAAO,EAAE,uBAAuB;AAChC,gBAAA,EAAE,EAAE,EAAE;AACN,gBAAA,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,SAAS,CAAS,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;AAC9C,gBAAA,KAAK,EAAE,GAAG;AACV,gBAAA,QAAQ,EAAE,GAAG;AACb,gBAAA,WAAW,EAAE,CAAC;aACf;YACD,IAAI,CAAC,sBAAsB,GAAG;AAC5B,gBAAA,OAAO,EAAE,gCAAgC;AACzC,gBAAA,EAAE,EAAE,EAAE;AACN,gBAAA,WAAW,EAAE,CAAC;aACf;QACH;IACF;AAEQ,IAAA,UAAU,CAAC,GAAY,EAAA;AAC7B,QAAA,IAAI,CAAC,yBAAyB,CAAC,IAAI,IAAG;AACpC,YAAA,IAAI,CAAC,GAAG,GAAG,GAAG;YACd,cAAc,CAAC,IAAI,CAAC;AACtB,QAAA,CAAC,CAAC;AACF,QAAA,IAAI,CAAC,sBAAsB,GAAG,SAAS;IACzC;IAEA,aAAa,CAAC,SAAkB,IAAI,EAAA;AAClC,QAAA,IAAI,IAAI,CAAC,cAAc,EAAE;YACvB,IAAG,MAAM,EAAC;gBACR,IAAI,CAAC,cAAc,CAAC,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC;gBAC1C,IAAI,CAAC,cAAc,CAAC,QAAQ,GAAG,QAAQ,CAAC,GAAG;YAC7C;YACA,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAM,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC,EAAE;AACtF,gBAAA,cAAc,CAAC,IAAI,CAAC,cAAc,CAAC;YACrC;AACA,YAAA,IAAI,CAAC,cAAc,GAAG,SAAS;QACjC;aACI;AACF,YAAA,cAAc,CAAC,eAAe,EAAE,mBAAmB,CAAC;QACtD;IACF;AAEA,IAAA,yBAAyB,CAAC,EAAmC,EAAA;AAC3D,QAAA,IAAI,IAAI,CAAC,sBAAsB,EAAE;AAC/B,YAAA,OAAO,EAAE,CAAC,IAAI,CAAC,sBAAsB,CAAC;QACxC;AACA,QAAA,cAAc,CAAC,2BAA2B,EAAE,mBAAmB,CAAC;AAChE,QAAA,OAAO,SAAS;IAClB;IAEA,gBAAgB,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,yBAAyB,CAAC,CAAC,IAAG,CAAC,CAAC,EAAE,CAAC;IACjD;AAEA,IAAA,eAAe,CAAC,IAAiB,EAAA;QAC/B,MAAM,GAAG,GAAG,IAAI,CAAC,yBAAyB,CAAC,CAAC,IAAE;YAC5C,IAAI,CAAC,CAAC,CAAC,WAAW,GAAG,IAAI,MAAM,IAAI,EAAE;AACnC,gBAAA,CAAC,CAAC,WAAW,IAAI,IAAI;AACrB,gBAAA,cAAc,CAAC;AACb,oBAAA,OAAO,EAAE,8BAA8B;oBACvC,EAAE,EAAE,CAAC,CAAC,EAAE;AACR,oBAAA,IAAI,EAAE,IAAI;oBACV,IAAI,EAAE,CAAC,CAAC;AACY,iBAAA,CAAC;YACzB;AACA,YAAA,OAAO,EAAC,SAAS,EAAC,CAAC,CAAC,EAAE,EAAC;AACzB,QAAA,CAAC,CAAC;QACF,OAAO,GAAG,IAAI,EAAE;IAClB;IAEA,cAAc,GAAA;QACZ,MAAM,GAAG,GAAG,IAAI,CAAC,yBAAyB,CAAC,CAAC,KAAI,EAAC,SAAS,EAAC,CAAC,CAAC,EAAE,EAAC,CAAC,CAAC;QAClE,OAAO,GAAG,IAAI,EAAE;IAClB;AAEA,IAAA,YAAY,CAAC,SAAc,EAAA;AACzB,QAAA,IAAI,CAAC,yBAAyB,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,GAAG,SAAS,CAAC;IAC9D;AAEA,IAAA,IAAI,CAAC,OAAe,EAAA;AAClB,QAAA,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC;IAC3B;AAEA,IAAA,IAAI,CAAC,OAAe,EAAA;AAClB,QAAA,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC;IAC3B;AAEA,IAAA,KAAK,CAAC,OAAe,EAAA;AACnB,QAAA,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC;IAC5B;IAEQ,GAAG,CAAC,KAAe,EAAE,OAAe,EAAA;QAC1C,IAAI,OAAO,EAAE;AACX,YAAA,IAAI,CAAC,yBAAyB,CAAC,CAAC,IAAG,WAAW,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;QACvE;IACF;AACD;SAEe,aAAa,GAAA;IAC3B,OAAO,cAAc,CAAC,QAAQ;AAChC;AAEM,SAAU,cAAc,CAAC,IAAmB,EAAA;IAChD,cAAc,CAAC,SAAS,GAAG,IAAI,cAAc,CAAC,IAAI,CAAC;AACnD,IAAA,GAAG,CAAC,yBAAyB,CAAC,GAAG,cAAc,CAAC,SAAS;AAC3D;;AC1HO,MAAM,YAAY,GAAG,WAAW;MAE1B,kBAAkB,CAAA;AAK7B,IAAA,WAAA,GAAA;AACE,QAAA,IAAI,CAAC,KAAK,GAAG,OAAO,EAAE;AACtB,QAAA,IAAI,CAAC,EAAE,GAAG,MAAM,CAAC,UAAU,EAAE;IAC/B;AAEA,IAAA,UAAU,CAAC,WAA6B,EAAA;AACtC,QAAA,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,WAAW,CAAC,aAAa,EAAE,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC;QAC1E,MAAM,SAAS,GAAG,wBAAwB,CAAC,WAAW,CAAC,OAAO,CAAC;AAC/D,QAAA,cAAc,CAAC,EAAC,GAAG,cAAc,CAAC,QAAQ,CAAC,eAAe,CAAC,WAAW,CAAC,IAAI,CAAC;AAC1E,YAAA,OAAO,EAAE,uBAAuB;YAChC,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,MAAM,EAAE,WAAW,CAAC,MAAM;YAC1B,QAAQ,EAAE,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACnC,IAAI,EAAE,GAAG,CAAC,QAAQ;AAClB,YAAA,IAAI,EAAE,GAAG,CAAC,IAAI,GAAE,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC;YACpC,IAAI,EAAE,GAAG,CAAC,QAAQ;AAClB,YAAA,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC;YAC7C,WAAW,EAAE,WAAW,CAAC,YAAY;YACrC,UAAU,EAAE,SAAS,CAAC,UAAU;YAChC,IAAI,EAAE,SAAS,CAAC,IAAI;AACpB,YAAA,QAAQ,EAAE,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC;YAClC,KAAK,EAAE,IAAI,CAAC,KAAK;AACH,SAAA,CAAC;IACnB;IAEA,WAAW,CAAC,QAAiC,EAAE,KAA+B,EAAA;AAC5E,QAAA,MAAM,GAAG,GAAG,OAAO,EAAE;AACrB,QAAA,MAAM,QAAQ,GAAwB;AACpC,YAAA,OAAO,EAAE,gCAAgC;YACzC,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,QAAQ,EAAE,CAAC,CAAC;AACZ,YAAA,MAAM,EAAE,KAAK;AACb,YAAA,GAAG,EAAE;SACN;AACD,QAAA,IAAI,MAAM,GAAW,CAAC,EAAE,SAAyB;;QAGjD,IAAI,QAAQ,EAAE;AACZ,YAAA,MAAM,GAAG,QAAQ,CAAC,MAAM;YACxB,QAAQ,CAAC,QAAQ,GAAG,QAAQ,YAAY,YAAY,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACjF,QAAQ,CAAC,WAAW,GAAG,kBAAkB,CAAC,QAAQ,CAAC,OAAO,CAAC;AAC3D,YAAA,QAAQ,CAAC,MAAM,GAAG,eAAe,CAAC,IAAI,CAAC,EAAE,EAAE,QAAQ,CAAC,OAAO,CAAC;QAC9D;;QAGA,IAAI,KAAK,EAAE;AACT,YAAA,MAAM,GAAG,KAAK,CAAC,MAAM,IAAI,CAAC;AAC1B,YAAA,SAAS,GAAG;gBACV,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,OAAO,EAAE,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC;aAC5E;YACD,QAAQ,CAAC,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC;YAClD,QAAQ,CAAC,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC;YACvC,QAAQ,CAAC,WAAW,GAAG,kBAAkB,CAAC,KAAK,CAAC,OAAO,CAAC;AACxD,YAAA,QAAQ,CAAC,MAAM,GAAG,eAAe,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,CAAC,OAAO,CAAC;QAC3D;AAEA,QAAA,QAAQ,CAAC,MAAM,GAAG,MAAM;QACxB,cAAc,CAAC,QAAQ,EAAE;AACvB,YAAA,OAAO,EAAE,6BAA6B;AACtC,YAAA,IAAI,EAAE,SAAS;AACf,YAAA,KAAK,EAAE,IAAI,CAAC,KAAK;AACjB,YAAA,GAAG,EAAE,GAAG;AACR,YAAA,KAAK,EAAE,CAAC;AACR,YAAA,SAAS,EAAE,SAAS;YACpB,SAAS,EAAE,IAAI,CAAC;AACG,SAAA,CAAC;IACxB;AACD;AAED,SAAS,eAAe,CAAC,EAAU,EAAE,OAAoB,EAAA;IACvD,OAAO,OAAO,EAAE,GAAG,CAAC,YAAY,CAAC,IAAI,EAAE;AACzC;AAEA,SAAS,wBAAwB,CAAC,OAAY,EAAA;IAC5C,MAAM,UAAU,GAAG,OAAO,EAAE,GAAG,CAAC,eAAe,CAAC;IAChD,IAAI,CAAC,UAAU,EAAE;QACf,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE;IACzC;AAEA,IAAA,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC;AAEnD,IAAA,IAAI,CAAC,MAAM,IAAI,CAAC,WAAW,IAAI,CAAC,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;QACpE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE;IACzC;IAEA,OAAO;AACL,QAAA,UAAU,EAAE,MAAM;QAClB,IAAI,EAAE,WAAW,CAAC,MAA4B,EAAE,WAAW,CAAC,IAAI;KACjE;AACH;AAEA,SAAS,WAAW,CAAC,MAA0B,EAAE,aAAqB,EAAA;AACpE,IAAA,IAAI;QACF,QAAQ,MAAM;AACZ,YAAA,KAAK,OAAO;AACV,gBAAA,OAAO,IAAI,CAAC,aAAa,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,SAAS;YACvD,KAAK,QAAQ,EAAE;gBACb,MAAM,YAAY,GAAG,aAAa,CAAC,KAAK,CAAC,yBAAyB,CAAC;AACnE,gBAAA,IAAI,YAAY,GAAG,CAAC,CAAC,EAAE;AACrB,oBAAA,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG;gBAC9C;AACA,gBAAA,cAAc,CAAC,aAAa,EAAE,6BAA6B,CAAC;AAC5D,gBAAA,OAAO,SAAS;YAClB;AACA,YAAA;AACE,gBAAA,cAAc,CAAC,aAAa,EAAE,wBAAwB,MAAM,CAAA,CAAE,CAAC;;IAErE;IAAE,OAAO,CAAC,EAAE;AACV,QAAA,cAAc,CAAC,aAAa,EAAE,CAAC,CAAC;IAClC;AACA,IAAA,OAAO,SAAS;AAClB;AAEA,SAAS,kBAAkB,CAAC,OAAY,EAAA;AACtC,IAAA,IAAI;AACF,QAAA,IAAI,OAAO,EAAE,GAAG,CAAC,cAAc,CAAC,EAAE;AAChC,YAAA,OAAO,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;QACpC;IACF;IAAE,OAAO,GAAG,EAAE;AACZ,QAAA,cAAc,CAAC,oBAAoB,EAAE,GAAG,CAAC;IAC3C;AACA,IAAA,OAAO,SAAS;AAClB;AAEA,SAAS,MAAM,CAAC,IAAS,EAAA;IACvB,IAAI,IAAI,EAAE;AACR,QAAA,IAAI;AACF,YAAA,OAAO,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI;QAC9C;QACA,OAAO,CAAC,EAAE;AACR,YAAA,cAAc,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC7B;IACF;IACA,OAAO,CAAC,CAAC;AACX;;ACtJO,MAAMC,kBAAgB,GAAG,IAAI,cAAc,CAAgB,kBAAkB,CAAC;MAGxE,sBAAsB,CAAA;AAEjC,IAAA,WAAA,CAAuD,UAAgE,EAAA;QAAhE,IAAA,CAAA,UAAU,GAAV,UAAU;IAAyD;IAE1H,SAAS,CAAC,GAAqB,EAAE,IAAiB,EAAA;AAChD,QAAA,MAAM,OAAO,GAAG,IAAI,kBAAkB,EAAE;AACxC,QAAA,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC;AAEvB,QAAA,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI;QAC1D,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC,CAAM,KAAK,CAAC,IAAI,IAAI,CAAC,EAAE;YACnE,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC;QACzE;QAEA,IAAI,QAAQ,GAA4B,IAAI;QAC5C,IAAI,KAAK,GAA6B,IAAI;QAE1C,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;AAC/B,YAAA,IAAI,EAAE,CAAC,KAAqB,KAAI;AAC9B,gBAAA,IAAI,KAAK,YAAY,YAAY,EAAE;oBACjC,QAAQ,GAAG,KAAK;gBAClB;;YAEF,CAAC;AACD,YAAA,KAAK,EAAE,CAAC,GAAsB,KAAI;gBAChC,KAAK,GAAG,GAAG;YACb;AACD,SAAA,CAAC,EACA,QAAQ,CAAC,MAAK;;AAEZ,YAAA,IAAI,CAAC,QAAQ,IAAI,CAAC,KAAK,EAAE;gBACvB,KAAK,GAAG,IAAI,iBAAiB,CAAC;AAC5B,oBAAA,KAAK,EAAE,6CAA6C;AACpD,oBAAA,MAAM,EAAE,CAAC;AACT,oBAAA,UAAU,EAAE,WAAW;oBACvB,GAAG,EAAE,GAAG,CAAC;AACV,iBAAA,CAAC;YACJ;AACA,YAAA,OAAO,CAAC,WAAW,CAAC,QAAQ,EAAE,KAAK,CAAC;QACtC,CAAC,CAAC,CAAC;IACP;AAvCW,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,sBAAsB,kBAEbA,kBAAgB,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAFzB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,sBAAsB,cADT,MAAM,EAAA,CAAA,CAAA;;4FACnB,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBADlC,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;0BAGnB,MAAM;2BAACA,kBAAgB;;;MCRzB,kBAAkB,CAAA;AAE7B,IAAA,WAAW,CAAC,KAAU,EAAA;AACpB,QAAA,IAAI;AACF,YAAA,cAAc,CAAC,QAAQ,CAAC,YAAY,CAAC;gBACnC,IAAI,EAAE,KAAK,EAAE,IAAI;gBACjB,OAAO,EAAE,KAAK,EAAE;AACjB,aAAA,CAAC;QACJ;QAAE,OAAO,CAAC,EAAE;AACV,YAAA,cAAc,CAAC,uCAAuC,EAAE,CAAC,CAAC;QAC5D;AACA,QAAA,MAAM,KAAK;IACb;+GAZW,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAlB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,kBAAkB,cADL,MAAM,EAAA,CAAA,CAAA;;4FACnB,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAD9B,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;ACClC,MAAM,WAAW,GAAsB,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;AAExD,MAAM,oCAAoC,CAAA;AAaxC,IAAA,WAAA,CAA6B,WAA0B,EAAA;QAA1B,IAAA,CAAA,WAAW,GAAX,WAAW;QAR/B,IAAA,CAAA,UAAU,GAAiB,EAAE;QAEtC,IAAA,CAAA,gBAAgB,GAAW,CAAC;QAC5B,IAAA,CAAA,WAAW,GAAY,KAAK;QAC5B,IAAA,CAAA,kBAAkB,GAAY,KAAK;QACnC,IAAA,CAAA,YAAY,GAAa,KAAK;QAI5B,IAAI,CAAC,YAAY,GAAG,QAAQ,CAAC,WAAW,CAAC,QAAQ;AAC9C,aAAA,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;AACjB,aAAA,IAAI,CAACC,KAAG,CAAC,MAAK;AACb,YAAA,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,QAAQ,EAAE;AAC5D,gBAAA,IAAI,CAAC,WAAW,GAAG,IAAI;AACvB,gBAAA,cAAc,EAAE;gBAChB,IAAI,CAAC,QAAQ;qBACV,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC;qBACrC,KAAK,CAAC,GAAG,IAAI,cAAc,CAAC,wCAAwC,EAAE,GAAG,CAAC;AAC1E,qBAAA,OAAO,CAAC,MAAK,EAAG,IAAI,CAAC,WAAW,GAAG,KAAK,CAAA,CAAC,CAAC,CAAC;YAChD;AACF,QAAA,CAAC,CAAC;AACD,aAAA,SAAS,EAAE;AACd,QAAA,gBAAgB,CAAC,CAAC,IAAI,IAAI,CAAC,WAAW,CAAE,CAAiB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACzE,mBAAmB,CAAC,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;IAC1C;AAEA,IAAA,WAAW,CAAC,MAAoB,EAAA;AAC9B,QAAA,IAAG,CAAC,IAAI,CAAC,YAAY,EAAC;AACpB,YAAA,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACvD;IACF;AAEA,IAAA,KAAK,CAAC,QAA6B,EAAA;AACjC,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ;IAC1B;IAEA,QAAQ,GAAA;AACN,QAAA,IAAI,IAAI,CAAC,kBAAkB,EAAE;AAC3B,YAAA,OAAO,IAAI,CAAC,cAAc,EAAE;QAC9B;QACA,OAAO,IAAI,CAAC,gBAAgB,EAAE,CAAC,IAAI,CAAC,EAAE,IAAG;YACvC,IAAI,EAAE,EAAE;AACN,gBAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI;AAC9B,gBAAA,OAAO,IAAI,CAAC,cAAc,EAAE;YAC9B;YACA,OAAO,CAAC,IAAI,CAAC,CAAA,+DAAA,EAAkE,IAAI,CAAC,gBAAgB,CAAA,CAAE,CAAC;YACvG,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAC;AACpD,QAAA,CAAC,CAAC;IACJ;AAEA,IAAA,cAAc,CAAC,OAAiB,EAAA;QAC9B,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE;AAChC,YAAA,OAAO,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC;QACrC;AACA,QAAA,IAAI,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,UAAU,GAAG,YAAY,GAAG,EAAE,IAAI,CAAC,gBAAgB;QAC9E,IAAI,OAAO,EAAE;YACX,GAAG,IAAI,OAAO,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QAC3C;QACA,MAAM,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC;AACnC,QAAA,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC;QAC1B,OAAO,KAAK,CAAC,GAAG,EAAE;AACd,YAAA,MAAM,EAAE,KAAK;AACb,YAAA,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;AAC/C,YAAA,IAAI,EAAE,MAAM;AACZ,YAAA,SAAS,EAAE,IAAI;AACf,YAAA,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM;SAC5B;aACA,IAAI,CAAC,GAAG,IAAE;AACT,YAAA,IAAI,GAAG,CAAC,EAAE,EAAE;AACV,gBAAA,IAAI,CAAC,gBAAgB,GAAG,CAAC;AACzB,gBAAA,OAAO,WAAW;YACpB;YACA,OAAO,CAAC,IAAI,CAAC,CAAA,mDAAA,EAAsD,IAAI,CAAC,gBAAgB,CAAA,CAAE,CAAC;AAC3F,YAAA,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,MAAM,GAAG,GAAG,EAAE;gBACzC,OAAO,MAAM,CAAC;YAChB;YACA,OAAO,GAAG,CAAC,IAAI;AACZ,iBAAA,IAAI,CAAC,IAAI,IAAI,IAAI,EAAE,KAAK,GAAG,MAAM,GAAG,WAAW;AAC/C,iBAAA,KAAK,CAAC,MAAM,WAAW,CAAC;AAC7B,QAAA,CAAC;aACA,KAAK,CAAC,MAAK;YACV,OAAO,CAAC,IAAI,CAAC,CAAA,mDAAA,EAAsD,IAAI,CAAC,gBAAgB,CAAA,CAAE,CAAC,CAAC;AAC5F,YAAA,OAAO,MAAM;AACf,QAAA,CAAC,CAAC;IACN;IAEA,gBAAgB,GAAA;QACd,IAAI,CAAC,gBAAgB,EAAE;AACvB,QAAA,OAAO,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE;AACzC,YAAA,MAAM,EAAE,MAAM;AACd,YAAA,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;AAC/C,YAAA,IAAI,EAAE,MAAM;AACZ,YAAA,SAAS,EAAE,IAAI;YACf,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ;SACnC;aACE,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,IAAG;AACzC,YAAA,IAAI,CAAC,gBAAgB,GAAG,CAAC;AACzB,YAAA,OAAO,IAAI;AACb,QAAA,CAAC,CAAC,GAAG,KAAK;AACT,aAAA,KAAK,CAAC,GAAG,IAAI,KAAK,CAAC;IACxB;AAEA,IAAA,eAAe,CAAC,MAAoB,EAAA;AAClC,QAAA,IAAG,CAAC,IAAI,CAAC,YAAY,EAAC;YACpB,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,MAAM,CAAC;AAClC,YAAA,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE;gBAC3D,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC;YACxD;QACF;IACF;IAEA,OAAO,GAAA;AACL,QAAA,IAAI,CAAC,YAAY,EAAE,WAAW,EAAE;AAChC,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI;QACxB,cAAc,EAAE,CAAC;AACjB,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;IAC3B;AACD;AAEK,SAAU,6BAA6B,CAAC,IAAmB,EAAA;IAC/D,OAAO,oCAAoC,CAAC,SAAS,GAAG,IAAI,oCAAoC,CAAC,IAAI,CAAC;AACxG;;ACjIA,MAAM,aAAa,GAAwD;IACzE,OAAO,EAAE,CAAC,MAAmB,KAAK,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC;CACzD;SACe,qBAAqB,GAAA;AACnC,IAAA,IAAI;AACF,QAAA,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI;QACjC,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,aAAa,EAAE,IAAI,CAAC;QACnD,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,aAAa,EAAE,IAAI,CAAC;QACpD,IAAI,CAAC,gBAAgB,CAAC,WAAW,EAAE,aAAa,EAAE,IAAI,CAAC;QACvD,IAAI,CAAC,gBAAgB,CAAC,SAAS,EAAE,aAAa,EAAE,IAAI,CAAC;QACrD,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,aAAa,EAAE,IAAI,CAAC;IAC3E;IACA,OAAO,CAAC,EAAE;AACR,QAAA,cAAc,CAAC,uBAAuB,EAAE,CAAC,CAAC;IAC5C;AACF;AAEA,SAAS,aAAa,CAAC,KAAyB,EAAA;AAC9C,IAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAAqB;AAC1C,IAAA,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI;AAC5B,IAAA,IAAI;AACF,QAAA,IAAI,aAAa,CAAC,cAAc,CAAC,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,EAAE;YAChF;QACF;AACA,QAAA,aAAa,CAAC,SAAS,EAAE,MAAM,CAAC;IAClC;IAAE,OAAO,GAAG,EAAE;AACZ,QAAA,cAAc,CAAC,0BAA0B,EAAE,GAAG,CAAC;IACjD;AACF;AAEA,SAAS,WAAW,CAAC,CAAc,EAAE,KAAa,EAAA;AAChD,IAAA,IAAI,CAAC,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,IAAI,CAAC,EAAE;AAC/C,QAAA,IAAI,EAAE,KAAK,GAAG,CAAC,EAAE;AACf,YAAA,OAAO,KAAK;QACd;AACA,QAAA,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,KAC5C,GAAG,IAAI,WAAW,CAAC,CAAgB,EAAE,KAAK,CAAC,EAAE,IAAI,CAAC;IACtD;AACA,IAAA,OAAO,IAAI;AACb;AAEA,SAAS,aAAa,CAAC,SAAiB,EAAE,MAAmB,EAAA;AAC3D,IAAA,cAAc,CAAC;AACb,QAAA,GAAG,cAAc,CAAC,QAAQ,CAAC,cAAc,EAAE;AAC3C,QAAA,OAAO,EAAE,sBAAsB;AAC/B,QAAA,IAAI,EAAE,SAAS;QACf,OAAO,EAAE,OAAO,EAAE;AAClB,QAAA,IAAI,EAAE,WAAW,CAAC,MAAM,CAAC;AACzB,QAAA,QAAQ,EAAE,MAAM,CAAC,OAAO,EAAE,WAAW;AACxB,KAAA,CAAC;AAClB;AAEA,SAAS,QAAQ,CAAC,CAAwC,EAAE,CAAc,EAAA;AACxE,IAAA,KAAK,MAAM,CAAC,IAAI,CAAC,EAAE;QACjB,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE;QACpB,IAAI,CAAC,EAAE;AACL,YAAA,OAAO,CAAC;QACV;IACF;AACA,IAAA,OAAO,IAAI;AACb;AAEA,SAAS,WAAW,CAAC,CAAc,EAAA;AACjC,IAAA,IAAI;AACF,QAAA,IAAI,OAAO,GAAG,CAAC,CAAC,OAAO;QACvB,IAAI,OAAO,EAAE;AACX,YAAA,IAAI,IAAI;YACR,IAAI,CAAC,GAAG,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;YAClC,IAAI,CAAC,EAAE;AACL,gBAAA,IAAI,GAAG,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC;YACvB;YACA,OAAO,IAAI,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAE;QACzC;IAEF;IAAE,OAAO,GAAG,EAAE;AACZ,QAAA,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;IACnB;AACA,IAAA,OAAO,IAAI;AACb;AAEA,MAAM,UAAU,GAA0C;IACxD,CAAC,IAAI,CAAC,CAAC,YAAY,CAAC,aAAa,CAAC;IAClC,CAAC,IAAI,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC;AAC5B,IAAA,CAAC,IAAI,CAAC,CAAC,SAAS;IAChB,CAAC,IAAI,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC;IAC3B,CAAC,IAAI,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC;CAC1B;AAED,MAAM,GAAG,GAA6D;AACpE,IAAA,KAAK,EAAE;QACL,CAAC,IAAI,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC;QAC1B,CAAC,IAAI,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC;AAC3B,KAAA;AACD,IAAA,OAAO,EAAE;QACP,CAAC,IAAI,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC;AAC5B,KAAA;AACD,IAAA,GAAG,EAAE;QACH,CAAC,IAAI,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC;AAC5B,KAAA;AACD,IAAA,OAAO,EAAE;QACP,CAAC,IAAI,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC;AAC3B,KAAA;CACF;;ACtGK,SAAU,qBAAqB,CAAC,MAAc,EAAA;AAClD,IAAA,IAAG;AACD,QAAA,kBAAkB,EAAE;AACpB,QAAA,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,YAAY,CAAC;AACrC,QAAA,MAAM,CAAC,gBAAgB,CAAC,UAAU,EAAE,cAAc,CAAC;AACnD,QAAA,MAAM,CAAC,gBAAgB,CAAC,cAAc,EAAE,mBAAmB,CAAC;IAC9D;IACA,OAAM,CAAC,EAAC;AACN,QAAA,cAAc,CAAC,uBAAuB,EAAE,CAAC,CAAC;IAC5C;AACF;AAEA,SAAS,YAAY,CAAC,KAAU,EAAA;AAC9B,IAAA,IAAI,KAAK,YAAY,eAAe,EAAE;QACpC,cAAc,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC;IAC7C;IACA,IAAI,KAAK,YAAY,aAAa,IAAI,KAAK,YAAY,gBAAgB,EAAE;AACvE,QAAA,UAAU,CAAC,MAAI,cAAc,CAAC,QAAQ,CAAC,aAAa,EAAE,EAAC,CAAC,CAAC;IAC3D;AACF;AAEA,SAAS,mBAAmB,CAAC,KAAU,EAAA;AACrC,IAAA,cAAc,CAAC,QAAQ,CAAC,QAAQ,EAAE;AAClC,IAAA,eAAe,EAAE;AACnB;AAEA,SAAS,kBAAkB,GAAA;AACzB,IAAA,cAAc,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;AAC5D,IAAA,cAAc,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;AAC9C;AAEA,SAAS,cAAc,CAAC,KAAU,EAAA;AAChC,IAAA,IAAI,KAAK,CAAC,SAAS,EAAE;AACnB,QAAA,cAAc,EAAE;QAChB,cAAc,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC;AAC9C,QAAA,UAAU,CAAC,MAAM,cAAc,CAAC,QAAQ,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;IAC9D;AACF;;SCtCgB,wBAAwB,GAAA;AACtC,IAAA,IAAG;AACD,QAAA,IAAI,QAAQ,IAAI,WAAW,EAAE;YAC3B,iBAAiB,CAAC,qBAAqB,CAAC;QAC1C;IACF;IACA,OAAM,CAAC,EAAC;AACN,QAAA,cAAc,CAAC,0BAA0B,EAAE,CAAC,CAAC;IAC/C;AACF;AAEA,SAAS,qBAAqB,GAAA;AAC5B,IAAA,IAAI;AACF,QAAA,MAAM,MAAM,GAAI,WAAmB,CAAC,MAAM;AAC1C,QAAA,cAAc,CAAC;AACb,YAAA,OAAO,EAAE,yBAAyB;YAClC,OAAO,EAAE,OAAO,EAAE;YAClB,QAAQ,EAAE,MAAM,CAAC,cAAc,IAAI,IAAI,GAAG,IAAI,CAAC;YAC/C,YAAY,EAAE,MAAM,CAAC,eAAe,IAAI,IAAI,GAAG,IAAI,CAAC;AAC5B,SAAA,CAAC;IAC7B;IAAE,OAAO,CAAC,EAAE;AACV,QAAA,cAAc,CAAC,uBAAuB,EAAE,CAAC,CAAC;IAC5C;AACF;;ACGA,MAAM,gBAAgB,GAAG,IAAI,cAAc,CAAkB,kBAAkB,CAAC;MAGnE,iBAAiB,CAAA;IAE5B,OAAO,OAAO,CAAC,aAA8B,EAAA;QAC3C,MAAM,SAAS,GAAG,EAAE;AACpB,QAAA,IAAI,aAAa,EAAE,OAAO,EAAE;AAC1B,YAAA,IAAI;AACF,gBAAA,IAAI,MAAM,GAAI,mBAAmB,CAAC,aAAa,CAAC;AAChD,gBAAA,SAAS,CAAC,IAAI,CACZ,EAAE,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,EAAE,EAC/C,EAAE,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,uBAAuB,EAAE,IAAI,EAAE,CAAC,gBAAgB,EAAE,MAAM,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,EAChH,EAAE,OAAO,EAAE,iBAAiB,EAAE,QAAQ,EAAE,sBAAsB,EAAE,IAAI,EAAC,CAAC,gBAAgB,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,EACtG,EAAE,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,kBAAkB,EAAE,CACvD;YACJ;YAAE,OAAO,CAAM,EAAE;gBACf,OAAO,CAAC,IAAI,CAAC,CAAA,gEAAA,EAAmE,CAAC,CAAC,OAAO,CAAA,CAAE,CAAC;YAC9F;QACF;QACA,OAAO,EAAC,QAAQ,EAAE,iBAAiB,EAAE,SAAS,EAAG,SAAS,EAAC;IAC7D;+GAlBW,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;gHAAjB,iBAAiB,EAAA,CAAA,CAAA;gHAAjB,iBAAiB,EAAA,CAAA,CAAA;;4FAAjB,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAD7B;;AAsBK,SAAU,uBAAuB,CAAC,MAA6D,EAAE,MAAc,EAAA;AACnH,IAAA,OAAO,MAAK;AACX,QAAA,IAAI,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE;AACxB,YAAA,qBAAqB,EAAE;QACzB;AACA,QAAA,IAAI,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE;AACzB,YAAA,wBAAwB,EAAE;QAC5B;QACA,qBAAqB,CAAC,MAAM,CAAC;;;QAG7B,iBAAiB,CAAC,CAAC,IAAE;YACjB,eAAe,CAAC,MAAM,CAAC;AAC3B,QAAA,CAAC,CAAC;AACJ,IAAA,CAAC;AACH;AAEM,SAAU,mBAAmB,CAAC,MAAuB,EAAA;AACzD,IAAA,MAAM,EAAE,GAAG,MAAM,CAAC,UAAU,EAAE;IAC9B,MAAM,IAAI,GAAG,oBAAoB,CAAC,MAAM,EAAE,EAAE,CAAC;AAC7C,IAAA,MAAM,QAAQ,GAAG,6BAA6B,CAAC,IAAI,CAAC;IACpD,MAAM,QAAQ,GAAG,cAAc,CAAC,MAAM,EAAE,EAAE,CAAC;AAC3C,IAAA,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC;IACxB,cAAc,CAAC,IAAI,CAAC;IACpB,OAAO,EAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAC;AACzC;AAEM,SAAU,eAAe,CAAC,MAA6D,EAAA;AAC3F,IAAA,MAAM,EAAE,GAAG,MAAM,CAAC,UAAU,EAAE;AAC9B,IAAA,aAAa,CAAC,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC;IAC9B,MAAM,QAAQ,GAAG,6BAA6B,CAAC,MAAM,CAAC,IAAI,CAAC;AAC3D,IAAA,MAAM,CAAC,QAAQ,CAAC,EAAE,GAAE,EAAE;AACtB,IAAA,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC;AAC/B,IAAA,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC;AAC7B;;MC7Ea,mBAAmB,CAAA;AAK9B,IAAA,WAAA,GAAA;AACE,QAAA,IAAI,CAAC,KAAK,GAAG,OAAO,EAAE;AACtB,QAAA,IAAI,CAAC,EAAE,GAAG,MAAM,CAAC,UAAU,EAAE;IAC/B;IAEA,UAAU,CAAC,WAAmB,EAAE,MAAW,EAAA;AACzC,QAAA,cAAc,CAAC;YACb,GAAG,GAAG,CAAC,yBAAyB,CAAC,EAAE,eAAe,CAAC,WAAW,CAAC,KAAK,CAAC;AACrE,YAAA,OAAO,EAAE,wBAAwB;YACjC,EAAE,EAAE,IAAI,CAAC,EAAE;AACX,YAAA,IAAI,EAAE,WAAW;AACjB,YAAA,QAAQ,EAAE,MAAM,CAAC,WAAW,CAAC,IAAI;YACjC,IAAI,EAAE,GAAG,CAAC,yBAAyB,CAAC,EAAE,cAAc,EAAE,IAAI;YAC1D,KAAK,EAAE,IAAI,CAAC;AACG,SAAA,CAAC;IACpB;AAEA,IAAA,WAAW,CAAC,SAAe,EAAA;AACzB,QAAA,cAAc,CAAC;AACb,YAAA,OAAO,EAAE,iCAAiC;YAC1C,EAAE,EAAE,IAAI,CAAC,EAAE;AACX,YAAA,SAAS,EAAE,SAAS;YACpB,GAAG,EAAE,OAAO;AACW,SAAA,CAAC;IAC5B;AACD;;SCtCe,cAAc,GAAA;AAE5B,IAAA,OAAO,UACL,MAAW,EACX,WAAmB,EACnB,UAA8B,EAAA;AAE9B,QAAA,MAAM,cAAc,GAAG,UAAU,CAAC,KAAK;AACvC,QAAA,UAAU,CAAC,KAAK,GAAG,UAAU,GAAG,IAAW,EAAA;AACzC,YAAA,MAAM,OAAO,GAAG,IAAI,mBAAmB,EAAE;AACzC,YAAA,IAAI,SAAS;AACb,YAAA,IAAI;AACF,gBAAA,OAAO,CAAC,UAAU,CAAC,WAAW,EAAC,MAAM,CAAC;gBACtC,OAAO,cAAc,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC;YACzC;YAAE,OAAO,CAAM,EAAE;AACf,gBAAA,SAAS,GAAG,gBAAgB,CAAC,CAAC,CAAC;AAC/B,gBAAA,MAAM,CAAC;YACT;oBAAU;AACR,gBAAA,OAAO,CAAC,WAAW,CAAC,SAAS,CAAC;YAChC;AACF,QAAA,CAAC;AACD,QAAA,OAAO,UAAU;AACnB,IAAA,CAAC;AACH;AACM,SAAU,gBAAgB,CAAC,CAAM,EAAA;AACrC,IAAA,IAAI,IAAI,GAAG,IAAI,EAAE,OAAO,GAAG,IAAI;IAC/B,IAAI,CAAC,EAAE;AACL,QAAA,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE;YACzB,OAAO,GAAG,CAAC;QACb;AAAO,aAAA,IAAI,CAAC,YAAY,KAAK,EAAE;AAC7B,YAAA,IAAI,GAAG,CAAC,CAAC,IAAI;AACb,YAAA,OAAO,GAAG,CAAC,CAAC,OAAO;QACrB;aAAO;AACL,YAAA,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;QAC7B;IACF;AACA,IAAA,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE;AAC1B;;ACvCA;;AAEG;;ACFH;;AAEG;;;;"}
@@ -9,7 +9,7 @@ export declare class SessionManager {
9
9
  static get instance(): SessionManager;
10
10
  navigate(url?: string): void;
11
11
  private endSession;
12
- updateSession(): void;
12
+ updateSession(update?: boolean): void;
13
13
  getCurrentSessionCallBack(fn: (s: MainSessionCallBack) => any): any;
14
14
  currentSessionID(): string | undefined;
15
15
  initRestRequest(mask: RequestMask): any;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@oneteme/inspect-ng-collector",
3
- "version": "1.3.2",
3
+ "version": "1.3.3",
4
4
  "description": "inspect ng collector",
5
5
  "homepage": "https://github.com/oneteme/inspect-ng-collector",
6
6
  "bugs": "https://github.com/oneteme/inspect-ng-collector/issues",